ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

erro: Cannot focus a disabled or invisible window

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
willrosa123
Novato
Novato


Registrado: Sexta-Feira, 31 de Mai de 2019
Mensagens: 3

MensagemEnviada: Sex Mai 31, 2019 6:14 pm    Assunto: erro: Cannot focus a disabled or invisible window Responder com Citação

Prezados, boa noite!!

Acredito que meu tópico não é complicado, mas não estou entendendo o pq do erro. Tenho um sistema de treinamento q após entrar e acessar um botão visualizo um grid com informações. Ao clicar nesse grid um botão habilta e clicando nele, acesso uma outra tela e trabalho normalmente. Entretanto, ao fechar essa tela e tentar acesso novamente aparece um erro "Cannot focus a disabled or invisible window". Mas somente na segunda vez q acesso essa tela.

Percebi que o erro acontece na linha abaixo
Application.CreateForm(TEficacia, FEficacia);
FEficacia.Showmodal;

E o meu form FEficacia está dentro de Available forms na opção de menu project options. e preciso q esteja lá pq se não acontece o erro em outra parte do programa. Caso eu coloque ele em Auto-create forms o erro não acontece nessa parte, mas dá erro em abertura de banco, por exemplo
DMbancos.QEficacia.open;

Tenho imagens do código se precisarem.

Poderiam me dar dicas de como resolver esse problema?

Desde já Agradeço

Wilson
[[/img]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Sáb Jun 01, 2019 10:29 am    Assunto: Responder com Citação

Acho que você está embaralhando algumas coisas no seu projeto.

"Cannot focus a disabled or invisible window" ocorre quando você tenta dar foco a uma janela invisível, como por exemplo forçar um ShowModal() em uma janela que você fechou, mas não liberou da memória.

Se você quer criar seu formulário em runtime, precisa liberar da memória após seu fechamento.

Tente assim:

Código:
Application.CreateForm(TEficacia, FEficacia);
FEficacia.Showmodal;
FreeAndNil(FEficacia);


ou, como eu prefiro, sem usar variáveis globais:

Código:
with TEficacia.Create(Application) do
  try
    ShowModal;
  finally
    Free;
  end;


Ou ainda, implemente o método OnClose do form para que libere a memória ao fechar:

Código:
procedure TEficacia.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree; // ao fechar, libere da memória
  FEficacia := nil; // limpa a referência da variável
end;


E uma dica:

Citação:
E o meu form FEficacia está dentro de Available forms na opção de menu project options. e preciso q esteja lá pq se não acontece o erro em outra parte do programa.

Isso é sinal de algum problema sério. Nenhum erro acontece por acaso. Fazer workarounds para que não apareçam no momento só postergam sua solução.
_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
willrosa123
Novato
Novato


Registrado: Sexta-Feira, 31 de Mai de 2019
Mensagens: 3

MensagemEnviada: Sáb Jun 01, 2019 12:44 pm    Assunto: Responder com Citação

marcieldeg escreveu:
Acho que você está embaralhando algumas coisas no seu projeto.

"Cannot focus a disabled or invisible window" ocorre quando você tenta dar foco a uma janela invisível, como por exemplo forçar um ShowModal() em uma janela que você fechou, mas não liberou da memória.

Se você quer criar seu formulário em runtime, precisa liberar da memória após seu fechamento.

Tente assim:

Código:
Application.CreateForm(TEficacia, FEficacia);
FEficacia.Showmodal;
FreeAndNil(FEficacia);


ou, como eu prefiro, sem usar variáveis globais:

Código:
with TEficacia.Create(Application) do
  try
    ShowModal;
  finally
    Free;
  end;


Ou ainda, implemente o método OnClose do form para que libere a memória ao fechar:

Código:
procedure TEficacia.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree; // ao fechar, libere da memória
  FEficacia := nil; // limpa a referência da variável
end;


E uma dica:

Citação:
E o meu form FEficacia está dentro de Available forms na opção de menu project options. e preciso q esteja lá pq se não acontece o erro em outra parte do programa.

Isso é sinal de algum problema sério. Nenhum erro acontece por acaso. Fazer workarounds para que não apareçam no momento só postergam sua solução.



Boa Tarde Marciel,

Primeiro obrigado pelas respstas. Entretanto, nenhuma delas funcionou, o mesmo erro acontece mesmo eu escrevendo como solictou para liberar a memoria. Sinceramente, não consigo entender, pq nunca tive um erro parecido em outros projetos.

Qdo digo q acontece o mesmo erro em outro form qdo mudo o forme EFicacia de availables para auto-create o erro acontece na linha abaixo, mas no form CadastroTreinamento, qdo prepare pra gerar um registro novo no banco usando a QEficacia. Dá erro logo qdo abro a query, no open.

DMBancos.QEficacia.Open; //abre tabela eficacia
DMBAncos.QEficacia.Append; //gera registro novo


Se vc tiver alguma dica para sanar esse problema eu tento manter o FEficacia em auto-create.

Caso contrário, to qse refazendo esses formularios, pq não sei como corrigir esse erro.

Só mais um dado, já isolei os forms e mantive somente aqueles q fazem com que eu acesse o form eficacia. Fiz isso pra saber se eu abria o form Eficacia em algum outro form e não fechava. Mas mesmo assim, com três formularios o mesmo erro aparece e o interessante q aparece somente na segunda vez q tento abrir o form eficacia, na primeira funciona e qdo fecho faço o q me pediu pra liberar a memoria, mas ao abrir novamente vem "Cannot focus a disabled or invisible window"

Muito Obrigado pela força

Wilson
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jun 03, 2019 9:31 am    Assunto: Responder com Citação

Bom dia,

Acho que para descobrir exatamente em que linha de código está ocorrendo o erro é melhor você executar a sua aplicação com debug passo a passo colocando um Breakpoint na linha do ShowModal e utilizando o F7 depois para prosseguir linha por linha até o erro ocorrer.
Esse erro deve estar ocorrendo em algum linha de código que está sendo executada dentro de algum evento que está ocorrendo após o ShowModal.

Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Ter Jun 18, 2019 11:22 am    Assunto: Responder com Citação

Sempre que for dar foco a um objeto, teste se é possível, assim não terá este problema.

Exemplo:
Código:

if objeto.canfocus then
   objeto.Sefocus;





bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
willrosa123
Novato
Novato


Registrado: Sexta-Feira, 31 de Mai de 2019
Mensagens: 3

MensagemEnviada: Sex Jun 21, 2019 11:45 pm    Assunto: Responder com Citação

johnny-walker escreveu:
Sempre que for dar foco a um objeto, teste se é possível, assim não terá este problema.

Exemplo:
Código:

if objeto.canfocus then
   objeto.Sefocus;





bye


Prezados,

Primeiro obrigado pelas respostas. Refiz o formulário inteiro, por isso a demora em voltar pro tópico. Bom, embora o problema ainda persista, agora ele está ocorrendo na segunda vez q o formulario é invocado. Qdo abro o programa, e acesso o formulario, consigo fazer as operações necessárias. Porém, ao fechá-lo e tentar abrir novamente, o erro acontece.

Estou abrindo da forma como me falaram:

Application.CreateForm(TFEfic, FEfic);
FEfic.Showmodal;
Freeandnil(FEfic) ;

O erro acontece bem em cima da linha Application, na segunda vez q abro o form, mas confesso que não consigo enxergar onde está errado.

Ativei o debug dcu´s e fui passo a passo e qdo da segunda vez q abro o form em questão, aparece o erro e o programa me remete para essa linha de codigo, não sei se isso ajuda

procedure TCustomForm.SetFocus;
begin
if not FActive then
begin
if not (Visible and Enabled) then
raise EInvalidOperation.Create(SCannotFocus);
SetWindowFocus;
end;
end;






Qualaquer idéia será bem vinda.

Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Sáb Jun 22, 2019 8:42 am    Assunto: Responder com Citação

Verifique se seu formulário está no Auto Create. Se estiver, remova.
_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB