Problem beim Erstellen von Events-Zuweisungen

Rund um die LCL und andere Komponenten
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Problem beim Erstellen von Events-Zuweisungen

Beitrag von br_klaus »

Hallo,

ich habe ein Problem beim Erstellen eigener Kompnenten. Wenn ich, wie es bei vielen der examples im Lazarus-Verzeichnis geschieht, beim Kreieren einer Form bzw. Komponente einem Event im constructor MyForm.Create(TheOwner: TComponent) eine best. Prozedur zuweisen will (zB OnMouseMove := FormMouseMove), dann erhalte ich die Fehlermeldung: Error: Wrong number of parameters specified for call to "FormMouseMove". Beide sind doch vom Typ TMouseMoveEvent. Wieso gibt es dann diese Fehlermeldung?
Ich habe dann versucht, zB den Kopf der Unit TPopupNotifier vor meine eigene Form zu kopiern. Im gesamten Text habe ich "Notifier" durch "Notiz" ersetzt (also TPopupNotiz, TNotizForm, TNotizXButton etc.) und dann den Implementationsteil hinter implementation kopiert. Wenn ich dann kompilieren will, dann erscheint schon bei der ersten (originalen) Zuweisung:

Code: Alles auswählen

constructor TNotizXButton.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
 
    FState := nbsUp;
 
    OnMouseUp := HandleMouseUp;
    OnMouseDown := HandleMouseDown;
end;
wieder dieselbe Fehlermeldung (Wrong number ... call to "HandleMouseUp"), und das dann bei ALLEN folgenden Zuweisungen von Events. Woran kann das liegen? Beim Kompilieren der Original-Unit gibt es ja auch keine Fehlermeldungen.

Dasselbe Phänomen erscheint beim Erstellen einer eigenen Unit mit Form. Wenn ich im ObjektInspektor eine Zuweisung vornehme (zB OnKeyPress --> FormKeyPress), dann geht das ohne weiteres. Sobald ich aber diese Zuweisung "von Hand" machen will (im constructor Form.Create(TheOwner: TComponent), dann erscheint wieder obige Fehlermeldung.
Warum ist das bei all den vielen Lazarus-Programmbeispielen möglich, nur bei meinen Programmierversuchen nicht?
Was mache ich da verkehrt?

Herzlichen Dank für alle Hilfe!

P. Nikolaus

Korkenkrone
Beiträge: 33
Registriert: Sa 18. Sep 2010, 20:33
OS, Lazarus, FPC: OpenSUSE 11.3 (L 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: x86-64

Re: Problem beim Erstellen von Events-Zuweisungen

Beitrag von Korkenkrone »

Muss man die Events in FreePascal nicht explizit mit dem "@" Operator refernzieren?

Code: Alles auswählen

OnMouseUp := @HandleMouseUp;
OnMouseDown := @HandleMouseDown;
Zudem muss man, soweit ich weiß (bin selbst neu bei FreePascal), auch explizit eine leere Parameterliste anhängen:

Code: Alles auswählen

OnMouseUp := @HandleMouseUp();
OnMouseDown := @HandleMouseDown();

Doppelter Thread: http://www.lazarusforum.de/viewtopic.php?f=18&t=4164" onclick="window.open(this.href);return false;

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Problem beim Erstellen von Events-Zuweisungen

Beitrag von Hitman »

Korkenkrone hat geschrieben:Zudem muss man, soweit ich weiß (bin selbst neu bei FreePascal), auch explizit eine leere Parameterliste anhängen:

Code: Alles auswählen

OnMouseUp := @HandleMouseUp();
OnMouseDown := @HandleMouseDown();
Muss man nicht, darf man wahrscheinlich auch nicht (müsst ich jetzt prüfen, aber würde semantisch keinen Sinn ergeben).

Korkenkrone
Beiträge: 33
Registriert: Sa 18. Sep 2010, 20:33
OS, Lazarus, FPC: OpenSUSE 11.3 (L 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: x86-64

Re: Problem beim Erstellen von Events-Zuweisungen

Beitrag von Korkenkrone »

Ah ja, meine Vermutung war Unfug. Ich nutze zum Lernen von FreePascal Delphi Dokumentation, deswegen habe ich immer den Code Conversion Guide offen, da habe ich etwas zuerst falsch interpretiert. Das gilt für den Aufruf des Events:
http://wiki.lazarus.freepascal.org/Code ... name.28.29" onclick="window.open(this.href);return false;

Im Abschnitt da über ist auch das Verwenden des "@"-Operators bei der Zuweisung von Prozedurvariablen erwähnt.

Antworten