Fórum Action:= caFree - Fecha dois forms ao mesmo tempo... #329659

18/09/2006

0

Olá pessoal e obrigado desde já..

Essa aqui foi estranha...

eu fiz uma tela de login dentro do meu sistema para o usuário acessar uma tela. Acontece que quanto eu finalizo o login eu dou um action no meu form login aí acontece a mágica: depois que eu dou o close no form eu faço um create pro outro form mas ele chega a criar mas apaga.

olha o código:

// Fechando a tela de Login
sds_login.Close;
close;

//Abrindo a tela de mural
fr_mural:= Tfr_mural.Create(self);

...

// Código dentro do formClose
Action:= caFree;
fr_loginMural:= nil;

alguém sabe pq isso acontece??


Btovix

Btovix

Responder

Posts

18/09/2006

Massuda

//Abrindo a tela de mural fr_mural:= Tfr_mural.Create(self);
Como seu form de login é o Owner do fr_mural, o fr_mural é destruído junto com o form de login.


Responder

Gostei + 0

18/09/2006

Btovix

obrigado pela resposta...
mas o que fazer então pra logar e entrar na tela sem que ela desapareça???

desde já obrigado!!


Responder

Gostei + 0

19/09/2006

Raserafim

Como seu form de login é o Owner do fr_mural, o fr_mural é destruído junto com o form de login.

ou seja, para criar um form é necessário passar um parâmetro. este parâmetro será o pai, que serve [entre outras coisas] para que quando for destruído, destrua tb os filhos. é o que está acontecendo com vc.

faça assim.
  fr_mural:= Tfr_mural.Create(fr_mural);



Responder

Gostei + 0

19/09/2006

Massuda

mas o que fazer então pra logar e entrar na tela sem que ela desapareça???
Passe como Owner:[list:56b2d5c34b][*:56b2d5c34b][b:56b2d5c34b]nil[/b:56b2d5c34b] se você não quer que o form seja destruído automaticamente quando outro form for destruído[*:56b2d5c34b][b:56b2d5c34b]Application[/b:56b2d5c34b] se quiser que o form seja destruído junto com o programa (*)[*:56b2d5c34b]qualquer outro form, se quiser que seu mural seja destruído quando o outro form for destruído[/list:u:56b2d5c34b]

(*) É meio redundante usar Application como Owner já que quando o programa é terminado todos os forms são destruídos, mas usar Application como Owner deixa claro o que você pretende.

@raserafim
O código que você sugeriu pode dar problemas. Como o valor de fr_mural provavelmente não foi inicializado, pode acontecer desse valor ser nil (nesse caso não tem problema) ou não, podendo conter um valor aleatório qualquer e causar um AV.


Responder

Gostei + 0

19/09/2006

Btovix

Mais uma vez obrigado galera

Funcionou perfeitamente nos dois casos, mas preferi usar o application (mesmo que redundante) para evitar um possível AV.

meu sistema seta nil para o form no OnClose, mas vai que acontece alguma com a memória... nunca se sabe né???

de qualquer forma obrigado!!

Abraços a todos!!


Responder

Gostei + 0

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

Aceitar