Verifica se form já está aberto.
Como verificar se um form já está aberto no meu aplicativo?
Júnior Garcia
Curtidas 0
Respostas
Nigro
07/06/2011
Duplicidade
GOSTEI 0
Rafael Mattos
07/06/2011
if form <> nil then
Ja instanciado
Ja instanciado
GOSTEI 0
Júnior Garcia
07/06/2011
eu até faço isso no menu, tipo:
if Form = nil then Application.CreateForm(TForm, Form);
Form.Show;Form.BringToFront;
(isso porque pode ser necessário abrir mais de um form DIFERENTE)
Só que quando fecho ele e abro denovo ele cria vários forms, como se ele já tivesse sido criado. Me disseram pra usar o Release; mas não deu certo, dá o Access Violation quando eu tento abrir novamente.
GOSTEI 0
Rafael Mattos
07/06/2011
O Que tem no seu FormClose e no FormCreate ou no FormShow.
algum objeto está sendo instanciado la?
GOSTEI 0
Júnior Garcia
07/06/2011
Está aparentemente funcionando quando coloquei no onClose de cada Form o FreeAndNil(Form); Parece que não tá dando nenhum erro.
GOSTEI 0
Flávio Lopes
07/06/2011
quando "form nil" quer dizer que foi instanciado na memória, mas não quer dizer que esteja aberto "show".
Existe casos em que o form pode estar instanciado na memória e estar "hide" ou "close".
então creio que a opção melhor seria
if form nil then
begin
showmessage(Form criado na memória !);
if form.visible then
begin
showmessage(Form está aberto/visível. Fecharei);
form.close;
end
else
begin
showmessage(O form não está aberto. Abrirei.);
form.showmodal;
end;
// liberando form da memória
form.release;
form.free;
form:= nil;
if form = nil then
showmessage(O form foi liberado da memória);
end;
Existe casos em que o form pode estar instanciado na memória e estar "hide" ou "close".
então creio que a opção melhor seria
if form nil then
begin
showmessage(Form criado na memória !);
if form.visible then
begin
showmessage(Form está aberto/visível. Fecharei);
form.close;
end
else
begin
showmessage(O form não está aberto. Abrirei.);
form.showmodal;
end;
// liberando form da memória
form.release;
form.free;
form:= nil;
if form = nil then
showmessage(O form foi liberado da memória);
end;
GOSTEI 0