WILLER wrote:

> Esse programa deveria, a cada clique com o botão direito do mouse, criar um 
> botão. E cada botão, ao receber um clique deveria ser destruído.
> Quando crio um botão e o destruo em seguida, não dá erro. O erro ocorre 
> quando crio mais de um botão e depois tento destruí-lo.
> Alguém poderia me ajudar, me dar uma dica ou indicar onde errei?
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>   if sender is TButton then begin
>     if assigned( TButton(sender)) then begin
>       FreeAndNil(TButton(Sender));
>     end;
>   end;
> 
> end;

Você está apagando um objeto através do seu próprio evento, então quando 
o controle volta à VCL e o objeto já foi destruído, ocorre o erro.

A melhor forma de você resolver essa pendenga é, ao invés de apagar o 
objeto diretamente, colocá-lo em uma lista (TList vai bem) e processar a 
lista dentro do evento Application.OnIdle.

Outra forma é você selecionar o objeto quando clica sobre ele, e usar um 
evento do teclado para apagá-lo. Neste caso você não terá problemas com 
AV porque pode usar eventos do formulário (KeyPreview = True).

--
João Morais


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a