![]() |
Toolbutton im Quellcode selbst erstellen
Hallo
ich hab da mal eine Frage und zwar erstelle ich mir zur Laufzeit des Programms mittels Schleife mehrere Toolbuttons selber. Und jetzt meine Frage wie kann ich auf die verschieden Buttons zugreifen, um z.b. ein Onclickevent zu realisieren?? So erstelle ich mir die Buttons:
Code:
for i:=1 to stringliste.Count do
begin with TToolButton.Create(Self) do Parent := ToolBar14; end; Vielen Dank schon mal für eure Antworten |
Moin Alexander,
falls vom Programmablauf her möglich könntest Du das Event ja schon bei der Erzeugung zuweisen. Unter der Annahme, dass Du auch schon andere Toolbutton in Deinem Programm hast, nicht dynamisch erzeugt, könntest Du diesen dynamisch erzeugten einfach einen eindeutigen Namen verpassen, so dass Du über FindComponent auf diesen dann zugreifen kannst. Mal ein Beispiel:
Code:
Oder Du sammelst die Button in einem array of TToolButton, und kannst dann über den Index auf diese zugreifen.
[b]procedure[/b] TForm1.Button1Click(Sender: TObject);
[b]var[/b] i : integer; [b]begin[/b] [b]for[/b] i := 0 [b]to[/b] Memo1.Lines.Count-1 [b]do[/b] [b]begin[/b] [b]with[/b] TToolButton.Create(Self) [b]do[/b] [b]begin[/b] Parent := ToolBar1; Name := 'TBDYN_'+IntToStr(i); [b]end[/b]; [b]end[/b]; [b]for[/b] i := 0 [b]to[/b] Memo1.Lines.Count-1 [b]do[/b] [b]begin[/b] [b]if[/b] FindComponent('TBDYN_'+IntToStr(i)) <> [b]nil[/b] [b]then[/b] [b]begin[/b] TToolButton(FindComponent('TBDYN_'+IntToStr(i))).OnClick := ToolButton1Click; [b]end[/b]; [b]end[/b]; [b]end[/b]; [b]procedure[/b] TForm1.ToolButton1Click(Sender: TObject); [b]begin[/b] ShowMessage(TToolButton(Sender).Name); [b]end[/b]; |
Danke du hast mir sehr weitergeholfen
|
Ich habe jetzt doch noch mal eine Frage und zwar wie lösche ich die Buttons wieder? Der Name soll aber noch benutzt werden können, um einen später erzeugten Button den Namen zu geben. Was muss ich da machen??
destroy geht nicht |
Moin Alexander,
ich weiss ja nicht, wie Du es gemacht hast, aber so würde es z.B. Funktionieren, alle wieder zu löschen.
Code:
var
i : integer; tbWork : TToolButton; begin for i := 0 to Memo1.Lines.Count-1 do begin if FindComponent('TBDYN_'+IntToStr(i)) <> nil then begin tbWork := TToolButton(FindComponent('TBDYN_'+IntToStr(i))); FreeAndNil(tbWork); end; end; end; |
So ähnlich hatte ich das auch, nur habe nicht bedacht, dass er eine Komponente, die auf einer anderen Form steht, nicht finden kann.
Jetzt funktioniert es aber, danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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