Saber se um form já está criado - Delphi

Delphi

08/04/2018

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
Alberto

Alberto

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

12/04/2018

troque MeuForm.Free por FreeAndNil(MeuForm)
GOSTEI 2

Mais Respostas

Carlos Natividade

Carlos Natividade

08/04/2018

Bom dia.
If not (frm_Principal = nil) then // verifica se o formulário principal já foi criado
GOSTEI 0
Alberto

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.
GOSTEI 0
Alberto

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?
GOSTEI 0
POSTAR