![]() |
EventName in For-Schleife ändern
Hi Leute,
ich bin dabei eine Apllikation zu schreiben, in der mehrere Label MIT Events zur Laufzeit erzeugt werden... Wie kann ich ein Event nach einer Variable nummerieren und diese dann danach aufrufen? mfg Johannes |
Re: EventName in For-Schleife ändern
Ich würde nur im Event nachsehen von welchem Label das gesendet wurde und dann
darauf entsp. reagieren. Das ist wohl das einfachste. |
Re: EventName in For-Schleife ändern
Wenn ich nun in der Prozedur abfrage von welchem Label das gesendet wurde, sagt er immer:
Undefinierter bezeichner: "Lab2";
Delphi-Quellcode:
:?:
var
Form1: TForm; Lab: TLabel; i: integer; {...} procedure TForm1.LabMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); begin if Sender=Lab{2} then halt; end; procedure TForm1.FormCreate(Sender: TObject); begin for i:=0 to 10 do begin Lab:=TLabel.Create(self); Lab.Parent:=Form1; Lab.Caption:='Caption '+IntToStr(i); Lab.Top:=i*15; Lab.Show; Lab.Name:='Lab'+IntToStr(i); Lab.OnMouseMove:=LabMove; end; end; Johannes |
Re: EventName in For-Schleife ändern
Versuch mal
Delphi-Quellcode:
if (Sender is TLabel) and (TLabel(Sender).Name = 'Lab2') then halt;
|
Re: EventName in For-Schleife ändern
Danke sehr,
:-D :-D |
Re: EventName in For-Schleife ändern
Also:
Delphi-Quellcode:
würde ich ändern in:
for i:=0 to 10 do
begin Lab:=TLabel.Create(self); Lab.Parent:=Form1; Lab.Caption:='Caption '+IntToStr(i); Lab.Top:=i*15; Lab.Show; Lab.Name:='Lab'+IntToStr(i); Lab.OnMouseMove:=LabMove; end; end;
Delphi-Quellcode:
...und das dann so:
for i:=0 to 10 do
begin Lab:=TLabel.Create(self); Lab.Parent:=Form1; Lab.Caption:='Caption '+IntToStr(i); Lab.Top:=i*15; Lab.Show; Lab.Tag := i; // <--<< Lab.OnMouseMove:= OnLabMove; end; end;
Delphi-Quellcode:
procedure FormXYZ.OnLabMove(Sender: TObject);
begin if Sender is TLabel then if TLabel(Sender).Tag = 2 then exit; end; |
Re: EventName in For-Schleife ändern
Zitat:
Delphi-Quellcode:
if (Sender is TLabel) then if (TLabel(Sender).Name = 'Lab2') then halt;
|
Re: EventName in For-Schleife ändern
Ich weiß garnicht, welche ich nehmen soll... :thumb: :wink:
Und wie kann ich diese dann in einer anderen Prozedur ansprechen? Bsp:
Delphi-Quellcode:
:?:
procedure TForm1.FormClick(Sender: TObject);
begin // Label -------------------------------------------------- Lab{2}.Left:=Mouse.CursorPos.X-Left; Lab{2}.Top:=Mouse.CursorPos.Y-Top; end; |
Re: EventName in For-Schleife ändern
Zitat:
[edit] Johannes, das wird so nicht gehen. Was Du machen willst, geht nur mit Variablennamen, was Du hast, sind aber Instanznamen. Du könntest die dynamisch angelegten Labels in einer Liste selbst verwalten oder auf das Components-Array des Owners zugreifen, durchlaufen, nach dem passenden Namen (oder Tag) suchen und eine lokale Variable belegen. Mit der ginge das dann wieder so, wie Du das willst. [/edit] |
Re: EventName in For-Schleife ändern
Ich würde die Labels in einem Array speichern - das erweist sich auf Dauer als vorteilhaft. Etwa so:
Delphi-Quellcode:
im private-Teil von TForm1 und so
FLabels: array[0..10] of TLabel;
Delphi-Quellcode:
beim Erzeugen.
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer; Lab: TLabel; begin for i := Low(FLabels) to High(FLabels) do begin Lab := TLabel.Create(Self); Lab.Parent := Self; // besser Self statt Form1 Lab.Caption := 'Caption ' + IntToStr(i); Lab.Top := i * 15; // Lab.Show; <== überflüssig Lab.Name := 'Lab' + IntToStr(i); Lab.OnMouseMove := LabMove; FLabels[i] := Lab; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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