Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Events von Objekten, die während der Laufzeit erzeugt werden (https://www.delphipraxis.net/141767-events-von-objekten-die-waehrend-der-laufzeit-erzeugt-werden.html)

stiftII 15. Okt 2009 17:17


Events von Objekten, die während der Laufzeit erzeugt werden
 
Hallo.

Wie kann ich die Events (OnMouseMove,OnClick usw..). Von Objekten, welche ich in einer eigenen Funktion erzeuge bestimmen ?

Beispiel:
Delphi-Quellcode:
procedure MyProcedure;
var
  Names : Array [0..5] of TLabel;
begin
//Objekte erzeugen
  for i:=0 to high(names) do
    Names[i] := TLabel.Create(Form1);

//anzeigen
  for i:=0 to high(names) do
    Names[i].Parent:=Form1;

//Wie kann ich jetzt das Ereignis zB. Names[i].Onclick bestimmen ?
????
...
~stift

himitsu 15. Okt 2009 17:20

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
du nimmst Names[i].OnClick und weißt diesem einfach eine passende Methode (Prozedur) zu

s.h.a.r.k 15. Okt 2009 17:30

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
Und nimm bitte eine TObjectList oder nur eine TList. Damit kannst du deine Objekte wesentlich einfacher verwalten! Ebenso wäre es teilweise nicht ganz schlecht, deinen Labels Namen zu geben, sodass du diese später besser verwalten/identifizieren kannst ;)

Was mit gerade noch eingefallen ist: überleg mal, was mit deinem in der Methode definierten Array passiert, wenn diese Methode verlassen wird? Benötigst du diese Liste außerhalb der Methode kannst du nicht darauf zugreifen :)

sirius 15. Okt 2009 18:39

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
Zitat:

Zitat von s.h.a.r.k
Und nimm bitte eine TObjectList oder nur eine TList.

Oder ganz viel besser: eine TComponentList.

stiftII 15. Okt 2009 22:31

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
Vielen Dank.

Wofür brauch ich eine TComponentList, wenn ich nur Labels brauche ?

~stift

stahli 15. Okt 2009 22:44

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
Die TComponentList hilft bei der Verwaltung der Einträge und ggf. deren Freigaben.
Das steht aber alles in der Hilfe...

himitsu 15. Okt 2009 22:54

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
TList = Pointer
TObjectList = TObject
TComponentList = TComponent

TLabel stammt über Umwege von TComponent ab
TComponent stammt über Umwege vom Basistypen TObject ab
TObject ist indirekt ein Pointer

Also im Prinzip kannst du ale diese Listen nehmen, aber da TComponent am nächsten an TLabel dran ist, würde sich die TComponentList natürlich am Besten eignen :zwinker:
und außerdem hat diese TComponentList noch ein paar nette Zusatzfeatures, gegenüber den anderen Varianten.

stiftII 15. Okt 2009 23:20

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
Danke, werd mir das ganze mal näher anschauen.

stiftII 16. Okt 2009 21:25

Incompatible types: 'method pointer and regular procedure'
 
Zitat:

Zitat von himitsu
du nimmst Names[i].OnClick und weißt diesem einfach eine passende Methode (Prozedur) zu

Hallo nochmal.

Das funktioniert so leider nicht. Aber warscheinlich mache ich auch etwas verkehrt.

Zitat:

Incompatible types: 'method pointer and regular procedure'
Delphi-Quellcode:
procedure DoStuffs;
begin
//work to do
end;

procedure MyProcedure;
var
  Names : Array [0..5] of TLabel;
begin
//Objekte erzeugen
  for i:=0 to high(names) do
  begin
    Names[i] := TLabel.Create(Form1);
    Names[i].OnClick := DoStuffs;
  end;

//anzeigen
  for i:=0 to high(names) do
    Names[i].Parent:=Form1;

stahli 16. Okt 2009 21:34

Re: Events von Objekten, die während der Laufzeit erzeugt we
 
Die Methode muss eine Methode der passenden ereignisbehandlung sein.
Du kannst Sie z.B. in Deiter Form1 deklarieren:

Delphi-Quellcode:
procedure TForm1.MyLabelsClick(Sender: TObject);
begin
  (Sender as TLabel).Color := clRed;
end;
Diese kannst Du dann Deiner Label-Ereignisbehandlung zuweisen (es wird im Grunde ein Zeiger auf diese Methode zugewiesen).


Hast Du Dir mal die TComponentList angesehen?
Das ändert zwar nichts an Deiner jetzigen Frage, ist aber evtl. eine sinnvolle Lösung für die Verwaltung Deiner Labels.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 Uhr.
Seite 1 von 2  1 2      

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