Saber se um form já está criado - Delphi
MeuForm := TMeuForm.Create(Application);
MeuForm.Show;
.
{ vários codigos }
.
MeuForm.Free; // (As vezes sim, as vezes não, essa linha será executada antes da próxima verificação)
.
{ depois em outro lugar quero usar o mesmo form com a mesma variável MEUFORM que no meu caso é global }
.
IF Assigned( MeuForm ) Then // Vai retornar TRUE pois a variável ainda contem o objeto, porém ele não está alocado na memória.
.
Nesse caso daria erro de ACESS VIOLATION caso eu tentasse usar o FORM sem criar
.
E também não posso criá-lo novamente se já estiver criado, pois na minha aplicação preciso continuar a usá-lo de onde parou.
.
Como faço pra testar se o form está criado e acessível, independente se ele está SHOW ou HIDE
MeuForm.Show;
.
{ vários codigos }
.
MeuForm.Free; // (As vezes sim, as vezes não, essa linha será executada antes da próxima verificação)
.
{ depois em outro lugar quero usar o mesmo form com a mesma variável MEUFORM que no meu caso é global }
.
IF Assigned( MeuForm ) Then // Vai retornar TRUE pois a variável ainda contem o objeto, porém ele não está alocado na memória.
.
Nesse caso daria erro de ACESS VIOLATION caso eu tentasse usar o FORM sem criar
.
E também não posso criá-lo novamente se já estiver criado, pois na minha aplicação preciso continuar a usá-lo de onde parou.
.
Como faço pra testar se o form está criado e acessível, independente se ele está SHOW ou HIDE
Alberto
Curtidas 0
Melhor post
Emerson Nascimento
12/04/2018
troque MeuForm.Free por FreeAndNil(MeuForm)
GOSTEI 2
Mais Respostas
Carlos Natividade
08/04/2018
Bom dia.
If not (frm_Principal = nil) then // verifica se o formulário principal já foi criado
If not (frm_Principal = nil) then // verifica se o formulário principal já foi criado
GOSTEI 0
Alberto
08/04/2018
Então Carlos, como segue.
MeuForm := TMeuForm.Create(Application);
MeuForm.Show;
.
{ vários codigos }
.
MeuForm.Free;
.
depois colocando a sua linha de codigo:
.
If not (fMeuForm = nil) then
.
Vai retornar TRUE, porém o form não está acessível.
MeuForm := TMeuForm.Create(Application);
MeuForm.Show;
.
{ vários codigos }
.
MeuForm.Free;
.
depois colocando a sua linha de codigo:
.
If not (fMeuForm = nil) then
.
Vai retornar TRUE, porém o form não está acessível.
GOSTEI 0
Alberto
08/04/2018
Então fazer isso resolve se todo o projeto já está assim, ou se é um form específico que você sabe onde é chamado e terminado, mas pense num projeto que não foi você que fez, onde pode haver dezenas ou centenas de chamadas e fechamentos de forms, e você quer saber em um determinado momento se aquele form está acessível ou não, como você faria?
Pois são vários os STATUS que uma varável de um objeto TForm pode estar, como por exemplo:
.
1-Var Form:TForm;
2-Form := TForm.Create(application)
3-Form.Free
4-Form := Nil
.
Dessas 4 opções como saber se ele se encaixa na opção 2?
Pois são vários os STATUS que uma varável de um objeto TForm pode estar, como por exemplo:
.
1-Var Form:TForm;
2-Form := TForm.Create(application)
3-Form.Free
4-Form := Nil
.
Dessas 4 opções como saber se ele se encaixa na opção 2?
GOSTEI 0