![]() |
dynamische Komponente soll sich selbst beenden, aber wie?
Ich lege dynamisch einige Buttons an, diese sollen sich selbst wieder löschen wenn sie angeklickt werden. Leider kann ich ja kein .Free bzw. .destroy in den onKlick Event legen da er dann rummault, zurecht natürlich !
Wo kann ich Windows bzw Delphi die Info hinterlegen, dass sich der Button nach dem Klickevent selbst zerstören soll ? [EDIT]Rechtschreibfehler berichtigt[/EDIT] |
Funktioniert doch einwand frei:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Sender.Free; end; |
hmm,
leider kann ich dass jett nicht testen, allerdings hab ich hier ein Problem, dass ich wohl nicht erwähnt hab !? Ich hab viele Buttons, diese verwenden aber alle dasselbe onClick Event. Ich poste am Montag mal den genauen Code, hab ihn leider nciht hier und hab keine Lust zu Coden, bin Müde und wohl auch etwas betrunken.
|
Selbst wenn mehrere Buttons das gleiche Event haben, klappt das, weil im Sender immer der Button steht, der gedrückt wurde, also der, der das Event ausgelöst hat. Aber ausprobiert ob das überhaupt geht, habe ich auch nicht.
|
Vielleicht mal Glück gehabt, aber eine Komponente in ihrer eigenen Ereignisbehandlungsroutine freizugeben...
Eine Ereignisbehaldlungsroutine hält immer einen Zeiger auf die aufrufende Instanz, und wenn der dann plötzlich ungültig wird... Ich hab das schnell mal probiert, und immer die erwartete Schutzverletzung erhalten. Grüße Woki |
nutz doch einen Timer und ne TList.
In der TList speicherst du die Pointer der freizugebenen buttons. Im Timer fragst du ab ob die liste elemente enthält, wenn ja schließ es udn lösch es aus der lsite. |
Moin Joel,
was mich mal interessieren würde: Wozu soll das gut sein? Ggf. kannst Du ja einfach visible auf False setzen, damit der Button verschwindet. |
Eine andere Möglichkeit:
Delphi-Quellcode:
Das geht etwas flotter als mit einem Timer.
const
WM_FREEOBJECT = WM_USER + 1; type TForm1 = class(TForm) ... protected procedure WMFreeObject(var Msg: TMessage); message WM_FREEOBJECT; end; procedure TForm1.WMFreeObject(var Msg: TMessage); message WM_FREEOBJECT; begin TObject(Msg.LParam).Free; end; proedure TForm1.Button1Click(Sender: TObject); begin PostMessage(Handle, WM_FREEOBJECT, 0, Integer(Sender)); end; |
hmm,
@Christian Seehase
Das ist nur eine Spielerei aber man weiss ja nie für was man es mal braucht. Vorstellen könnte ich mir sowas bei einem Routenplaner oder bei einer elektronischen Schaltung die man selbst zusammen klicken kann etc. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz