Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - OnClick ereignis einem dynamisch erstellten Label zuweisen..
SpaghettiCodix - Do 11.10.07 15:41
Titel: OnClick ereignis einem dynamisch erstellten Label zuweisen..
Wie kann ich einem dynamisch erstellten Label ein OnClick Ereignis zuweisen, damit es auf Mausklicks reagiert?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var Form1: TForm1; Labels:array of TLabel;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin SetLength(Labels,5);
for i:=1 to 5 do begin Labels[i]:=TLabel.Create(self); Labels[i].Parent:= Form1; Labels[i].Caption:= 'Label'+ inttostr(i); Labels[i].Alignment := tacenter; ... end; end; |
_frank_ - Do 11.10.07 15:51
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
wie wäre es mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.ClickEvent(Sender: TObject); begin ShowMessage((sender as TLabel).Caption+' wurde angeklickt :)'); end; .... Labels[i].OnClick := ClickEvent; |
Gruß Frank
SpaghettiCodix - Do 11.10.07 16:28
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
Intressant, Frank,
aber wohin kommt dann der Code:
Delphi-Quelltext
1:
| Labels[i].OnClick := ClickEvent; |
Und muss ich da in einer Schleife alle Labels durchlaufen, wenn ich mit der Maus über die Labels fahre und eins anklicke?
Moderiert von
Tino: Kompletten Beitrags-Quote entfernt.
_frank_ - Do 11.10.07 16:32
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
ähm, ne...
ich dachte es ist an dem Aufbau schon erkennbar, dass die Zeile mit in deine Schleife (formCreate) soll....
Gruß Frank
Moderiert von
Tino: Kompletten Beitrags-Quote entfernt.
SpaghettiCodix - Do 11.10.07 16:45
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
Danke Frank, das funzt tatsächlich, obwohl doch 'FormCreate' beim Anklicken der Labels längst verlassen ist. Das verstehe ich nicht. Heist das, daß den Labels die Procedure 'Clickevent' in der 'FormCreate' bis zum Beenden der Anwendung zugewiesen ist?
Und könnte ich in der 'ClickEvent' dann auf das einzelne Label zugreifen, in etwa:
Delphi-Quelltext
1: 2: 3: 4:
| with TLabel.sender do if Sender is TLabel1 do begin end; |
:oops:
Moderiert von
Tino: Kompletten Beitrags-Quote entfernt.
_frank_ - Do 11.10.07 17:14
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
SpaghettiCodix hat folgendes geschrieben: |
Danke Frank, das funzt tatsächlich, obwohl doch 'FormCreate' beim Anklicken der Labels längst verlassen ist. Das verstehe ich nicht. Heist das, daß den Labels die Procedure 'Clickevent' in der 'FormCreate' bis zum Beenden der Anwendung zugewiesen ist? |
es ist solange zugewiesen, bis es überschrieben wird (nil, anderer EventHandler), das Label freigegeben wird oder bis zum FormDestroy.
SpaghettiCodix hat folgendes geschrieben: |
Und könnte ich in der 'ClickEvent' dann auf das einzelne Label zugreifen, in etwa:
Delphi-Quelltext 1: 2: 3: 4:
| with TLabel.sender do if Sender is TLabel1 do begin end; | :oops: |
hab ich in der Klickmethode doch schon drin...mit (sender as TLabel) kannst du auf das Label zugreifen, auf das geklickt wurde. z.b. (sender as TLabel).Caption. Notfalls auch per with:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if (Sender is TLabel) then begin with (sender as TLabel) do begin Caption:='blah'; end; end; |
auch wenn ich kein Freund von with bin, da handelt man sich schnell böse Fehler ein, wo man ewig sucht :)
HTH Frank
SpaghettiCodix - Do 11.10.07 17:21
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
Ja Danke, Frank,
aber wenn ich das 1. Label anklicke, soll das was anderes machen, als das 2. Label.
Mit 'Sender as TLabel' macht jedes Label dasselbe...
_frank_ - Do 11.10.07 17:34
achso meinste das...
dann machst halt ne Abfrage rein:
Delphi-Quelltext
1: 2: 3: 4:
| if sender=labels[1] then MachWas() else if sender=labels[2] then MachWasAnderes(); |
geschickter wärs, wenn du in der schleife noch ein Tag setzt und das in der Click-Methode entsprechend verwendest....
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Labels[i].Tag:=i;
Case (Sender as TLabel).Tag of 1:MachWas(); 2:MachWasAnderes(); end; |
HTH Frank
SpaghettiCodix - Fr 12.10.07 14:01
Danke Frank,
das war es, was ich suchte.
Ich werde mich wohl in nächster Zeit mit 'Sender:TObject'
beschäftigen. Ist ein sehr intressantes Thema für 'nen Laien wie mich. :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!