Entwickler-Ecke
Multimedia / Grafik - OnClick-Event bei dem der Button gelöscht wird
Pesse - So 18.01.04 00:07
Titel: OnClick-Event bei dem der Button gelöscht wird
Hi zusammen
Ich habe folgendes Problem:
Ich erstelle zur Laufzeit einen Button 'Start'. Dieser hat ein onClick-Event 'createNewNavi'.
Dieses Event allerdings löscht den sendenden Button 'Start' und setzt später einen neuen. Ich bekomme nun immer wieder Zugriffsverletzungen.
Was kann ich da tun? Bzw. liegen die Fehler vielleicht wo anders?
Gruß Pesse
Michael Stenzel - So 18.01.04 01:09
Hi Pesse.
Soweit wie ich Dich verstanden habe löscht Du den Start-Button im ereignis desselbigen. Das kanst Du so nicht machen, weil du die Ereignismethode gleich mit löscht. Setze doch die Eigenschaft Visible des Button auf false und anstatt immer einen neuen Start-Button zu erstellen setzt Du dann die Visible-Eigenschaft wieder auf True.
mfg
Michael.
toms - So 18.01.04 01:11
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:
Delphi-Quelltext
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; |
Pesse - So 18.01.04 01:47
Danke sehr!
Der Workaround hilft mir doch schon sehr weiter!
Gruß Pesse
Pesse - So 18.01.04 11:11
Hi, hab nochmal ein Problem mit dem Workaround:
Ich habe die Event-Funktion, die den Button löschen soll in einer eigenen Klasse, TNavi.
Irgendwie verstehe ich das mit dem 'Handle' in der Message nicht so genau. Könnte mir das vielleicht jemand erklären.
Ach ja - ich bin ziemlicher Delphi-Noob.
Gruß Pesse
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!