Dynamisch Generierte Objekte und ihre Proceduren

Rund um die LCL und andere Komponenten
Antworten
jrx
Beiträge: 49
Registriert: Fr 14. Mai 2010, 13:23
OS, Lazarus, FPC: Win/UX
Wohnort: Erlangen

Dynamisch Generierte Objekte und ihre Proceduren

Beitrag von jrx »

Guten Tag,

ich möchte innerhalb eines Units Elemente dynamisch erzeugen, das zugeörige Formular wird als Parameter übergaben:

Code: Alles auswählen

 
interface
procedure  GenLabel(aform : TForm; LabCap:String);
 ...
implementation
procedure GenLabel(aform : TForm; LabCap:String);
begin
  lab := TLabel.Create(aform);
  lab.Parent := aform;
  lab.Caption := LabCap;
end;
... 
Hier ist der Code abgespeckt, im Pronzip gibt es auch mehr labels etc., auch die "anchors", Anordnung, Farbe... funzt.
"lab" ist eine globale Variable innerhalb des Units.
Jetzt möchte ich ein OnMouseEnter/OnMouseLeave reinbringen, das label soll eine Unterstreichnung bekommen, wenn man drüber geht.
Letzlich ist auch ein ein OnCLick angedacht.

Code: Alles auswählen

 
procedure doMouseEnter(Sender:TLabel);
begin
  Sender.font.style:=[fsUnderline];
end;
...
procedure GenLabel(aform : TForm; LabCap:String);
begin
  ... wie oben
  lab.OnMouseEnter:=@doMouseEnter;
end;   
geht nicht.
Wie kann ich meine Procedure dazu bringen, die richtige Adresse von DoMouseEnter zu finden (daran scheints zu hängen). Vielleicht gibts ja auch einen anderen Weg.
Danke

jrx

Warf
Beiträge: 2280
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Dynamisch Generierte Objekte und ihre Proceduren

Beitrag von Warf »

Deine Prozedur muss eine Methode der Klasse sein.

TNotifyEvent ist definiert als procedure(Sender: TObject) of Object;

Das of Object bedeutet dass es sich um eine Klassenmethode handeln muss.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Dynamisch Generierte Objekte und ihre Proceduren

Beitrag von baumina »

Ein anderer Weg wäre ein Formular zu entwerfen, das diese Proceduren beinhaltet. Alle anderen Formulare erben von diesem.
.

Antworten