Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi dynamische Komponente soll sich selbst beenden, aber wie? (https://www.delphipraxis.net/5637-dynamische-komponente-soll-sich-selbst-beenden-aber-wie.html)

JoelH 13. Jun 2003 22:57


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]

jbg 13. Jun 2003 23:04

Funktioniert doch einwand frei:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Sender.Free;
end;

JoelH 13. Jun 2003 23:13

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.

tommie-lie 14. Jun 2003 10:25

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.

woki 14. Jun 2003 12:16

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

magicshadow 14. Jun 2003 12:23

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.

Christian Seehase 14. Jun 2003 12:29

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.

jbg 14. Jun 2003 12:30

Eine andere Möglichkeit:
Delphi-Quellcode:
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;
Das geht etwas flotter als mit einem Timer.

JoelH 15. Jun 2003 08:21

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 21:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz