Package, abre form mas não libera

Delphi

12/05/2008

Muito estranho...

aplicativo.exe
   |
   |-> modulo.bpl (abre um form1)
                            |
                            |-> este form1 tem um botao
                                  que abre outro form2 contido
                                  no mesmo modulo.bpl


Acontece que, ao tentar fechar o form2 este não é liberado... eis os codigos que uso atualmente

no modulo.bpl
procedure AbreForm;
begin
  if form1 = Nil then
    form1 := tform1.Create(Nil);
  form1.Show;
end;
...
exports
  AbreForm;


no botão do form1 para abrir o form2
if form2 = nil then
  form2 := tform2.Create(Nil);
form2.Show;


no evento OnClose de ambos os forms
// no form1
FreeAndNil(Form1);

// no form2
FreeAndNil(Form2);


acontece que ao fechar o form2 (que foi instanciado pelo botão do form1), o form2 não é liberado pelo FreeAndNil no evento OnClose, somente o form1

muito estranho não? alguém sabe?

abraços


Eniorm

Eniorm

Curtidas 0

Respostas

Eniorm

Eniorm

12/05/2008

vamos dar um [b:1736f4c778]up[/b:1736f4c778] :D


GOSTEI 0
Rodc

Rodc

12/05/2008

Você está tentando destruir o form2 dentro do OnClose dele mesmo? Neste caso o correto seria usar o Release().


GOSTEI 0
Eniorm

Eniorm

12/05/2008

é exatamente isso
FreeAndNil no onClose do form2

seguinto o método normal com MDI sem estar modularizado em pacotes bpl, posso por o FreeAndNil apenas no onClose que funciona.

Vou testar mas acho que a diferença entre o Release e o FreeAndNil não iria interferir... mas vou testar pra ver...

se eu usar Release, tenho que acrescentar o form2 := Nil
usando o FreeAndNil ele já libera e seta o ponteiro do form para nil


GOSTEI 0
Rodc

Rodc

12/05/2008

[quote:64281ca982=´Enio Marconcini´]se eu usar Release, tenho que acrescentar o form2 := Nil
usando o FreeAndNil ele já libera e seta o ponteiro do form para nil[/quote:64281ca982]
Então faça o código abaixo no OnClose que é a mesma coisa que o FreeAndNil():
Release();
Form2 := nil;



GOSTEI 0
Eniorm

Eniorm

12/05/2008

é oq eu vou testar hj a noite pra saber se resolve :D

amanhã posto os resultados


GOSTEI 0
Eniorm

Eniorm

12/05/2008

opa galera!

realmente, troquei o FreeAndNil(NomeForm) por

Release;
NomeForm := Nil


resolveu :D


GOSTEI 0
POSTAR