Das Problem eine Komponente im OnClick zu vernichten habe ich auch lange über eine Liste und Timer gelöst, da es zwar manchmal funktioniert, aber üblicherweise zu Zugriffsverletzungen führt da das Verlassen der Prozedur OnClick nach dem Vernichten nicht mehr definiert ist.
Ich habe inzwischen eine zuverlässige Methode gefunden die in Deinem Beispiel wie folgt aussähe:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
const
KillMessage = WM_USER + 200;
type
TPanel=Class(ExtCtrls.TPanel)
procedure Kill(
var Msg: TMessage);
message KillMessage;
End;
TForm1 =
class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(TButton(sender).Parent.Handle,KillMessage,0,0) ;
end;
{ TPanel }
procedure TPanel.Kill(
var Msg: TMessage);
begin
Free;
end;
end.