Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf dynamische Buttons zugreifen (https://www.delphipraxis.net/71850-auf-dynamische-buttons-zugreifen.html)

mfs 21. Jun 2006 20:50


Auf dynamische Buttons zugreifen
 
Hi Leute,

ich brauche eure Hilfe bitte. Und zwar, ich erzeuge dynamisch einpaar Buttons, wie kann aber in der Laufzeit raus finden, welches dieser Buttons gedruckt wurde?

Das ist ein Teil aus meinem Programm:
Delphi-Quellcode:
   while(z<10) do
   begin
      if (myButton[z] = nil) then
      begin
         myButton[z] := TButton.Create(self);
         with myButton[z] do
         begin
            Parent := myScrollBox[n];
            Caption:='Button '+inttostr(z) ;
            Height:=22;
            Width:=130;
            Left := 10;
            Top :=23
         end;
      end;
      inc(z);
   end;
Wenn dies aber nicht dynamisch wäre, dann würde es normal sein:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   Schomessage('Button1');
end;
Danke für jede Hilfe..

mkinzler 21. Jun 2006 20:52

Re: Auf dynamische Buttons zugreifen
 
Du mußt diese Methode dem obClick zuweisen und erhälst dann die Referenz auf den button im Parameter Sender.

mfs 21. Jun 2006 20:57

Re: Auf dynamische Buttons zugreifen
 
Und wo soll ich das zuweisen?

Meinst Du wohl sowas:
Delphi-Quellcode:
procedure obClick(Sender: TObject);
begin
   Showmessage('myButton'+inttost(z));
end;

sniper_w 21. Jun 2006 20:57

Re: Auf dynamische Buttons zugreifen
 
Ich würde folgende 2 Zeilen hinzufügen:
Delphi-Quellcode:
   while(z<10) do
   begin
      if (myButton[z] = nil) then
      begin
         myButton[z] := TButton.Create(self);
         with myButton[z] do
         begin
            Parent := myScrollBox[n];
            Caption:='Button '+inttostr(z) ;
            Height:=22;
            Width:=130;
            Left := 10;
            Top :=23;
            Tag := z; // erste
            OnClick := Button1Click; // zweite
         end;
      end;
      inc(z);
   end;
Und dann:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  case TControl(Sender).Tag of
    // hier kannst du anhand des Tag erkennen um welches Button es handelt und entsprechend reagieren
  end;
end;

mkinzler 21. Jun 2006 21:00

Re: Auf dynamische Buttons zugreifen
 
Delphi-Quellcode:
while(z<10) do
   begin
      if (myButton[z] = nil) then
      begin
         myButton[z] := TButton.Create(self);
         with myButton[z] do
         begin
            Parent := myScrollBox[n];
            Caption:='Button '+inttostr(z) ;
            Name:='Button'+inttostr(z);
            Height:=22;
            Width:=130;
            Left := 10;
            Top :=23
            onClick := Form1.ButtonClick;
         end;
      end;
      inc(z);
   end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(Sender as TComponent).Name);
end;
[Edit: Sniper was schneller, aber es geht aucch über Namen}

mfs 21. Jun 2006 21:14

Re: Auf dynamische Buttons zugreifen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   //.....
end;

Da meint Ihr aber bestimmt TForm1.ButtonClick und nicht TForm1.Button1Click, oder?

Dann gehts einwandfrei .. Danke euch vielmals :thumb:

Beste Grüße, mfs

mkinzler 21. Jun 2006 21:18

Re: Auf dynamische Buttons zugreifen
 
Zitat:

Da meint Ihr aber bestimmt TForm1.ButtonClick und nicht TForm1.Button1Click, oder?
Ja, Copy&Paste ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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