![]() |
Button auf Panel - via ButtonOnClick das Panel löschen...
Hallo liebes Forum,
ich hab da ein kleies Problem.. Ich erstelle zur Laufzeit einige Panels mit aufsteigendem Tag-Wert. Gleichzeitig bekommt ein jedes Panel einen Button mit dem gleichen Tag-Wert wie das Panel Ein jeder Button ruft procedure"killen" auf Wenn nun ein Button gedrückt wird, lese ich seinen Tag-Wert aus und suche das zugehörige Panel und lösche es.. und genau beim "free" strudelt´s die Procedure.. Wenn ich eine globale Variable mit dem zu löschenden Panel definiere - einen Timer starte und zeitversetzt das Panel lösche - funktionierts natürlich .. aber diesen Weg find ich nicht gut.. Hat jemand einen Lösungsansatz ? Vielen Dank Erich procedure Tform.killen(Sender: TObject); var i,x:Integer; begin with sender as TLMDSpeedbutton do begin x:=tag; end; for i:= 0 to scrollbox1.ComponentCount-1 do begin if scrollbox1.components[i] is TLMDSimplePanel then begin if (scrollbox1.components[i] as TLMDSimplePanel).tag = x then begin (scrollbox1.components[i] as TLMDSimplePanel).free; // <- Fehler ! break; end; end; end; end; |
Re: Button auf Panel - via ButtonOnClick das Panel löschen..
Hallo,
direkt der erste Eintrag unter deinem wenn du nach [dp]Button AND Panel AND löschen[/dp] suchst ;) ![]() MfG Benedikt |
Re: Button auf Panel - via ButtonOnClick das Panel löschen..
Ups...
hab zwar vorher schon eine Weile rumgesucht, aber falsche Schlagwörter verwendet.. Vielen Dank. Habs jetzt auch mit postMessage gelöst...
Delphi-Quellcode:
Const
WM_DESTROYPANEL = WM_USER+712; ... procedure CMDestroyPanel(Var Msg : TMessage); message WM_DESTROYPANEL;
Delphi-Quellcode:
Procedure Form.CMDestroyPanel(Var Msg : TMessage);
var i,x:Integer; Begin x:=Strtoint(PChar(Msg.WParam)); for i:= 0 to scrollbox1.ComponentCount-1 do begin if scrollbox1.components[i] is TLMDSimplePanel then begin with (scrollbox1.components[i] as TLMDSimplePanel) do begin if tag = x then begin (scrollbox1.components[i] as TLMDSimplePanel).free; break; end; end; end; end; end;
Delphi-Quellcode:
procedure Form.killen(Sender: TObject);
var i,x:Integer; begin with sender as TLMDSpeedbutton do begin what_to_kill:=inttostr(tag); end; PostMessage(termin_single_form.Handle,WM_DESTROYPANEL,Integer(@what_to_kill[1]),0); end; |
Re: Button auf Panel - via ButtonOnClick das Panel löschen..
Das ist aber umständlich. Du kannst doch gleich den Zeiger auf das Control mitgeben:
Delphi-Quellcode:
Und dann später nur noch:
PostMessage(self.Handle,WM_DESTROYPANEL,Integer(Sender),0);
Delphi-Quellcode:
Procedure Form.CMDestroyPanel(Var Msg : TMessage);
Begin TObject(Msg.WParam).Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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 by Thomas Breitkreuz