GARANTIR DESCONTO

Fórum Problemas com o Action := caFree no OnClose de um Form #253516

06/10/2004

0

Caros amigos,
estou com um probleminha e agradeceria se alguem pudesse me dar uma luz, é o seguinte:

Criei um Form (MDIChild) chamado de frmModelo com o layout do meu sistema e nele implementei o evento OnClose com o comando Action := caFree extamente para desalocá-lo da memória quando o Form fechar.

Crio outros Forms descendentes de frmModelo e retiro do Available Forms para que eles não seja criados automaticamente e os crio da seguinte forma:

if Assigned(frmModelo1) then begin
frmModelo1 := TfrmModelo1.Create(Self);
frmModelo1.Show;
end
else
frmModelo1.SetFocus;

Quando executado da primeira vez tudo funciona perfeitamente mas quando fecho o frmModelo1 e tento abrir novamente dá um erro do tipo ´Access Violation´ isso por que o Assigned(frmModelo1) retorna true mesmo eu usando o Action := caFree no OnClose do Form pai.

Gostaria que alguem pudesse me dar uma dica de como fazer o Assigned(frmModelo1) retornar false depois que eu efetuar o fechamento desse formulário, para que com isso o usuário possa abrir o formulário mais de uma vez depois que fechar sem dar o erro.

Desde já agradeço,


Eduardo Tavares

Eduardo Tavares

Responder

Posts

06/10/2004

Osocram

tenta fazer
form.release;
form := nil;


Responder

Gostei + 0

06/10/2004

Eduardo Tavares

tenta fazer form.release; form := nil;


Você está dizendo pra colocar frmModelo1 := nil dentro de cada procedimento OnClose dos descendentes?


Responder

Gostei + 0

06/10/2004

Kenshindigital

tem um erro de logica ai no seu if assigned, se o objeto não existir ele tenta focalizar um objeto não alocado e da access violation eu suponho.

tenta assim:

if not Assigned(frmModelo1) 
  then frmModelo1 := TfrmModelo1.Create(Self); 
frmModelo1.Show; 



Responder

Gostei + 0

07/10/2004

Aroldo Zanela

Colega,

Formulário principal:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(Form2) then Form2 := TForm2.Create(Self);
  Form2.Show;
end;


No form2 (deste exemplo), evento OnClose:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  Form2   := Nil;
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar