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 Generell zu dyn. Komponenten (https://www.delphipraxis.net/53104-generell-zu-dyn-komponenten.html)

TheMiller 10. Sep 2005 11:03


Generell zu dyn. Komponenten
 
Hallo,

ich versuche derzeit Daten aus einer ini auszulesen und dementsprechend Button zu erstellen. Das klappt auch alles wunderbar. Nur eine Frage habe ich, die sich nicht nur auf die Buttons bezieht (in meinem Problem natürlich schon), sondern generell für alle dynamisch, mehrfachvorkommenden Objekte.
Nehmen wir an, ich erstelle mit einer Schleife X Objekte.

Delphi-Quellcode:
procedure TForm1.CreateBtn;
var
  s:TStringList;
  i,top,id:integer;
begin
  s:=TStringList.Create;
  ini.ReadSectionValues('Eintrag',s);
  top:=10;
  id:=1;
  for i:=1 to s.Count-1 do
  begin
    btn:=TButton.Create(Self);
    btn.Caption:=ini.ReadString('Eintrag',IntToStr(i),text);
    btn.Parent:=Form1;
    btn.Name:='btn'+Inttostr(id);
    inc(id);
    top:=top+25;
    btn.Top:=top;
    btn.Left:=10;
    btn.Width:=90;
    Btn.OnClick:=Click;
  end;
end;
Jetzt klicke ich auf die Komponente 3 (10 Komponenten wurden erstellt). Woher weiß ich jetzt, auf welche Komponente ich geklickt habe / bzw verallgemeinert, welche Komponente ich anspreche?

Danke

Jelly 10. Sep 2005 11:06

Re: Generell zu dyn. Komponenten
 
Beim OnClick Ereignis des Buttons wird immer ein Sender als TObject mit übergeben, der ein Pointer zum Button selbst ist, und den du im Ereignis als Sender as TButton ansprechen kannst.

TheMiller 10. Sep 2005 11:11

Re: Generell zu dyn. Komponenten
 
Verdammt ist das einfach! :wall:

Meine Güte...ich glaube ich sollte besser 8 geben, bevor ich poste. Hätte ich auch selsbt drauf kommen können. THX

Jelly 10. Sep 2005 11:14

Re: Generell zu dyn. Komponenten
 
Ist ja auch WE :-)

Nju 18. Mär 2006 10:08

Re: Generell zu dyn. Komponenten
 
Gut, Theorie verstanden und schön, dass es der Threadersteller dann auch umsetzen konnte. Beim Zweiten habe ich trotzdem Probleme. :)

Wie wärs mit nem Beispielcode, z.B. wenn ich draufklick, so dass ich die Caption des Buttons, auf dem geklickt wurde, in der OnClick-Prozedur auslesen/auswerten kann?

Danke schonmal. :)

*Edit*

Okay, dass wäre die Lösung (im OnClick-Ereignis):

Code:

var
  Button: TButton;
begin
  Button := Sender as TButton;

Anschließend kann so drauf zugegriffen werden, so als wenn es sich um einen reellen Button handelt. :)

mkinzler 18. Mär 2006 10:17

Re: Generell zu dyn. Komponenten
 
Einfach:

Delphi-Quellcode:
(Sender as TButton).Caption;

Jelly 18. Mär 2006 10:18

Re: Generell zu dyn. Komponenten
 
Nichts leichter als das, sagte Piggeldi...

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
begin
     if Sender is TButton
     then TButton(Sender).Caption := 'Neue caption' ;
end;
oder
Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
begin
     if Sender is TButton
     then (Sender as TButton).caption := 'Neue caption' ;
end;


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