Fórum Criação Formulario MDI #227501
22/04/2004
0
Criei uma aplicação MDI onde apenas o formulario principal e o data module ficaram como autocreat´s os demais deixei que fossem criados em tempo de execução. Utilizei o seguinte código na horade cria-los:
Try
FrmCaixa:= TFrmCaixa.Creat(application);
FrmCaixa.showModal;
finally
FrmCaixa.Free;
end;
e no evento OnClose do form coloquei esse código:
action:=caFree;
Todos os formularios abrem e funcionam normalmente com este código mais tem um em especial que quando vou abri-lo da um erro e a aplicação trava sendo assim tenho que ir na aba RUN -> Reset Program para fecha-lo, alguem saberia me dizer porque pode estar acontecendo isso?
Se eu coloco FrmCaixa.Show; ao inves de showmodal ele nao da erro porem o formulario apenas pisca na tela nao ficando aberto.
Agradeço desde já a atenção de voces.
Flavia_mococa
Curtir tópico
+ 0Posts
22/04/2004
Maxwell_monteiro
Try
FrmCaixa:= TFrmCaixa.Creat(application);
FrmCaixa.showModal;
finally
FrmCaixa.Free;
end;
Mesmo ocorrendo ou não exceção, o finally é sempre executado! ou seja quanto vc da um show, o seu programa continua a executar e qual é a proxima linha a ser executada? FrmCaixa.Free; logo seu form fecha. agora vc deve estar se perguntando. Por que com show modal funciona? por que quando vc dá um showmodal a execuçao para e fica esperando esse form modal ser fechado! ai quando ele é fechado vc ainda vai tentar da FrmCaixa.Free mas já que ele foi fechado com a acao caFree logo FrmCaixa é igual a nil! logo ele vai dar uma violação de memoria na execução de FrmCaixa.Free
Espero que tenha entendido!
Gostei + 0
22/04/2004
Beppe
tira o OnClose do form e muda FrmCaixa.Free; para FreeAndNil(FrmCaixa);
ou tira o FrmCaixa.Free; do try/finally e acrescenta FrmCaixa := nil; após Action := caFree no OnClose
Gostei + 0
27/04/2004
Flavia_mococa
Bjos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)