Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EventName in For-Schleife ändern (https://www.delphipraxis.net/139319-eventname-schleife-aendern.html)

Johannes013 26. Aug 2009 16:44


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

turboPASCAL 26. Aug 2009 16:49

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.

Johannes013 26. Aug 2009 17:01

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

DeddyH 26. Aug 2009 17:07

Re: EventName in For-Schleife ändern
 
Versuch mal
Delphi-Quellcode:
if (Sender is TLabel) and (TLabel(Sender).Name = 'Lab2') then halt;

Johannes013 26. Aug 2009 17:10

Re: EventName in For-Schleife ändern
 
Danke sehr,

:-D :-D

turboPASCAL 26. Aug 2009 17:48

Re: EventName in For-Schleife ändern
 
Also:

Delphi-Quellcode:
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;
würde ich ändern in:

Delphi-Quellcode:
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;
...und das dann so:
Delphi-Quellcode:
procedure FormXYZ.OnLabMove(Sender: TObject);
begin
  if Sender is TLabel then
    if TLabel(Sender).Tag = 2 then exit;
end;

Namenloser 26. Aug 2009 17:59

Re: EventName in For-Schleife ändern
 
Zitat:

Zitat von DeddyH
Versuch mal
Delphi-Quellcode:
if (Sender is TLabel) and (TLabel(Sender).Name = 'Lab2') then halt;

Das ist gefährlich, da es ja möglich wäre, dass die vollständige boolsche Auswertung aktiviert ist. In dem Fall würde es hier krachen. Ich gehe in solchen Fällen auf Nummer Sicher und schreibe das lieber so:
Delphi-Quellcode:
if (Sender is TLabel) then if (TLabel(Sender).Name = 'Lab2') then halt;

Johannes013 26. Aug 2009 18:02

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;
:?:

DeddyH 26. Aug 2009 18:10

Re: EventName in For-Schleife ändern
 
Zitat:

Zitat von NamenLozer
Das ist gefährlich, da es ja möglich wäre, dass die vollständige boolsche Auswertung aktiviert ist.

Wer die einschaltet, hat es nicht besser verdient ;)

[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]

uligerhardt 26. Aug 2009 18:17

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:
    FLabels: array[0..10] of TLabel;
im private-Teil von TForm1 und so
Delphi-Quellcode:
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;
beim Erzeugen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.
Seite 1 von 2  1 2      

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