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 Button auf Panel - via ButtonOnClick das Panel löschen... (https://www.delphipraxis.net/120708-button-auf-panel-via-buttononclick-das-panel-loeschen.html)

erich.wanker 15. Sep 2008 17:27


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;

Benedikt 15. Sep 2008 17:46

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 ;)
http://www.delphipraxis.net/internal...=934793#934793

MfG Benedikt

erich.wanker 15. Sep 2008 18:34

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;

shmia 15. Sep 2008 19:11

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:
PostMessage(self.Handle,WM_DESTROYPANEL,Integer(Sender),0);
Und dann später nur noch:
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