Autor Beitrag
SpaghettiCodix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Do 11.10.07 15:41 
Wie kann ich einem dynamisch erstellten Label ein OnClick Ereignis zuweisen, damit es auf Mausklicks reagiert?

ausblenden 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_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Do 11.10.07 15:51 
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
wie wäre es mit:
ausblenden 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

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Do 11.10.07 16:28 
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
Intressant, Frank,

aber wohin kommt dann der Code:
ausblenden 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 user profile iconTino: Kompletten Beitrags-Quote entfernt.
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: 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 user profile iconTino: Kompletten Beitrags-Quote entfernt.

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
with TLabel.sender do 
 if Sender is TLabel1 do
 begin
 end;
:oops:

Moderiert von user profile iconTino: Kompletten Beitrags-Quote entfernt.
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Do 11.10.07 17:14 
Titel: Re: OnClick ereignis einem dynamisch erstellten Label zuweis
user profile iconSpaghettiCodix 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.
user profile iconSpaghettiCodix hat folgendes geschrieben:
Und könnte ich in der 'ClickEvent' dann auf das einzelne Label zugreifen, in etwa:
ausblenden 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (Sender is TLabel) then //wenn du die ClickMethode noch anderen ControlTypen zuordnen willst, sonst brauchste das nicht
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

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: 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_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Do 11.10.07 17:34 
achso meinste das...
dann machst halt ne Abfrage rein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if sender=labels[1then
  MachWas()
else if sender=labels[2then
  MachWasAnderes();


geschickter wärs, wenn du in der schleife noch ein Tag setzt und das in der Click-Methode entsprechend verwendest....

ausblenden 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

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: 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