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
>>     

Responder a