Faça assim: fForm1 := TfForm1.Create(Self); try fForm1.ShowModal; finally fForm1.Release; fForm1 := nil; end;
Obs: não coloque o comando "fForm1 := nil" no evento "onClose" do formulário modal. Alexandre Rodrigues escreveu: > Caro Leandro não vejo sentido no uso de assigned nesse caso já que o > form é exibido no modo modal, eu faria assim: > > fForm1 := TfForm1.Create(nil); > try > fForm1.ShowModal; > finally > FreeAndNil(fForm1); > end; > > FreeAndNil, se não me engano, só a partir do delphi 7, senão tem que ser > o velho fForm1.free; fForm1 := nil; > > [EMAIL PROTECTED] escreveu: > >> Pessoal, >> >> Tenho o seguinte código, dentro de um menu no form principal do meu projeto: >> >> if not Assigned(fForm1) then >> fForm1 := TfForm1.Create(Application); >> fForm1.ShowModal; >> >> e no OnClose do Form1, eu tenho: >> >> Action := caFree; >> Form1 := nil; >> >> Se eu clicar no menu uma vez após a outra, dá Access Violation, por que na >> segunda vez nao entra no IF do Assigned, ou seja, trata como se o Form1 >> ainda estivesse na memória. >> >> Agora, o engraçado é que se eu colocar o mesmo código do menu em um outro >> formulário, sem ser o principal, funciona. Eu só mudei o "Application" >> para "Self". Ficou assim: >> >> if not Assigned(fForm1) then >> fForm1 := TfForm1.Create(Self); >> fForm1.ShowModal; >> >> Alguém poderia dizer: ora bolas, coloque o "Self" no código do menu >> também. Já tentei, só que não funcionou. >> >> O que eu quero é que, sempre que fechar esse form, ele seja >> automaticamente destruído. >> >> Uso Delphi 2007 e os forms são SDI. >> >> Alguem teria alguma idéia? >> >> Obrigado, >> >> Leandro >>