Jair, brilhante cara... brilhante...
fiz as alterações como foram sugeridas aqui e está tudo rodando
normalmente.
Agradeço a todos pela ajuda ae!
Abraço
On 7 maio, 16:02, Rodrigo Sebben <
hyuga...@gmail.com> wrote:
> Show a explicação...sempre usei o Action = caFree sem entender o que
> acontecia.... Vlw Jair!
>
> PS: não estou com problema, mas agradeço a explicação...hehehe!
>
> Rodrigo Sebben
>
> Em 7 de maio de 2010 15:52, Jair - MICROFLEX <
j...@microflex.com.br>escreveu:
>
>
>
>
>
> > Olá, Stallone!
>
> > Há algumas questões a serem observadas:
>
> > - Se você utilizava AutoCreate, os Forms deveriam estar com a
> > propriedade Visible = True. Para usar ShowModal, tem que alterar Visible
> > para False.
>
> > - O uso de "try...finally" é considerada uma "boa prática", mas não é
> > isso que irá gerar ou evitar a geração de uma exceção. Sugiro sua utilização
> > no caso do "ShowModal", que é um processo síncrono. Também sugiro a
> > utilização do método "Release" em vez do "Free" para formulários, que é uma
> > dica da própria Borland desde a versão 5 se não me engano:
> > Application.CreatForm(TFAtividades, FAtividades);
> > try
> > FAtividades.ShowModal;
> > finally
> > FAtividades.Release;
> > end;
>
> > - Usando "ShowModal" não há necessidade de usar o evento "OnClose" para
> > liberar a memória da variável que recebeu o formulário. Isso só faz sentido
> > usando "Show", cujo procedimento padrão do método "Close" é ocultar o
> > formulário ("Hide"), por isso utiliza-se "Action = caFree" quando se
> > pretende destruir em vez de somente ocultar o formulário.
>
> > O mais grave é a linha seguinte no seu exemplo: "FAtividades := nil".
> > Vamos ver se consigo explicar claramente o que ocorre:
> > - o usuário clica no "X" do formulário para fechá-lo; nesse momento é
> > executado o método "Close" do formulário, que por sua vez, dispara o evento
> > "OnClose" para saber o desenvolvedor poder interagir com o processo de
> > fechamento do formulário; a variável "Action", passada por referência, é
> > alterada no seu evento "OnClose" para "caFree"; LOGO APÓS É ATRIBUÍDO À
> > VARIÁVEL "FAtividades" O VALOR "nil" (NESSE MOMENTO A VARIÁVEL JÁ NÃO ESTÁ
> > MAIS APONTANDO PARA O FORMULÁRIO QUE ESTÁ CRIADO NA MEMÓRIA!); o processo
> > retorna para o métido "Close" que tenta destruir o formulário e liberar a
> > variável, MAS A VARIÁVEL JÁ NÃO ESTÁ MAIS APONTANDO PARA O FORMULÁRIO, o que
> > deve gerar uma exceção de violação de acesso à memória, pois a variável já
> > está apontando para um ponto "vazio" da memória e não mais para o endereço
> > onde está o formulário.
>
> > - O problema continua na sequência do processo, pois na volta do
> > "ShowModal" chamado pelo botão de acesso ao formulário, você executa
> > "FAtividades.Free". Veja que nesse momento "FAtividades" está apontando para
> > "nil" e não mais para o formulário. Teremos aí outra exceção de acesso à
> > memória.
>
> > Você poderia começar limpando o evento "OnClose" do formulário.
> > Opcionalmente poderia optar por usar "Show" em vez de "ShowModal", o que
> > permitiria que fosse aberto (criado) mais de um formulário ao mesmo tempo.
> > Nesse caso teria que alterar a chamada para:
> > Application.CreatForm(TFAtividades, FAtividades);
> > FAtividades.Show;
> > e manter somente a linha "Action := caFree" no "OnClose" do formulário.
>
> > Um abraço,
> > Jair
>
> > Em 7 de maio de 2010 10:18, Stallone <
nascimentowebdes...@gmail.com>escreveu:
>
> > Opa... então Newton, tentei pelo debug mas também não consegui
> >> identificar. Na execução, passa pelo breakpoint normalmente... mas
> >> quando vai dar o show no form lança o erro.
>
> >> Rodrigo, no evento coloquei:
>
> >> begin
> >> Application.CreatForm(TFAtividades, FAtividades);
> >> FAtividades.ShowModal;
> >> FAtividades.Free;
> >> end;
>
> >> e no evento on close do form:
>
> >> Action := caFree;
> >> Fatividades := nil;
>
> >> --
> >> Você recebeu esta mensagem porque está inscrito no "DUG-RS -
> >> Delphi Users Group Rio Grande do Sul" em Grupos do Google.
> >> Acesse o nosso BLOG emhttp://www.dug-rs.orge contribua com a comunidade
> > Acesse o nosso BLOG emhttp://www.dug-rs.orge contribua com a comunidade
> Acesse o nosso BLOG emhttp://www.dug-rs.orge contribua com a comunidade Delphi do Rio Grande do Sul