Hi,
Die Delphi Hilfe schreibt, dass man ein Objekt nicht in einem Ereignis
Handler freigeben sollte (Wegen Speicher Allozierung)
Eine Workaround bietet eine benutzerdef. Nachricht, welche im
OnClick Ereignis an die Form geschickt wird und in einem Handler
behandelt wird, indem man dort das Objekt freigibt.
Beispiel:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| const MyFreeButtonMsg = WM_USER + 101;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private MyButton: TButton; procedure ButtonClickHandler(Sender: TObject); procedure MyFreeButtonMsgHandler( var Msg :TMessage ); message MyFreeButtonMsg; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyFreeButtonMsgHandler(var Msg :TMessage); begin TButton(Msg.WParam).Free; end;
procedure TForm1.ButtonClickHandler(Sender: TObject); begin PostMessage(Handle, MyFreeButtonMsg, Integer(Sender), 0); end;
procedure TForm1.FormCreate(Sender: TObject); begin MyButton := TButton.Create(Self); MyButton.Parent := Self; MyButton.Name := 'MeinButton'; MyButton.Caption := 'Mein Button'; MyButton.SetBounds(20, 20, 80, 40); MyButton.OnClick := ButtonClickHandler; end; |