[gelöst]Selbstgebastelte Ereignisbehanldung

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

[gelöst]Selbstgebastelte Ereignisbehanldung

Beitrag von Marsmännchen »

Hi,

ich zerschelle gestern an einem Problem und habe im weiten Netz leider nichts passendes gefunden: Ich versuche gerade eine eigene Ereignisbehandlung auf die Reihe zu kriegen. Allerdings mag mich der Compiler nicht. Er meldet immer wieder:
Projekt kompilieren, Ziel: MinedOut.exe: Exit code 1, Fehler: 2
minedoutspiel.pas(39,28) Error: Wrong number of parameters specified for call to "VerarbeiteSpielerBewegung"
minedoutspiel.pas(28,18) Error: Found declaration: VerarbeiteSpielerBewegung(TPos;TPos);


Ich habe mir meine Definitionen und Parameter wohl schon ein Dutzend Mal durchgeschaut und bilde mir ein, dass die Signatur von Event, auslösende Methode und abfangende Methode absolut identisch sind. Ich schnall einfach nicht, was da falsch ist. Bitte schaut mal rein

LG
Marsmännchen
Dateianhänge
MeinProg.zip
(4.2 KiB) 45-mal heruntergeladen
Zuletzt geändert von Marsmännchen am Mi 28. Sep 2016, 11:41, insgesamt 1-mal geändert.
Ich mag Pascal...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Selbstgebastelte Ereignisbehanldung

Beitrag von m.fuchs »

Du hast einen Fehler in der Zuweisung:

Code: Alles auswählen

Spieler.BewegungMelden:= VerarbeiteSpielerBewegung;

Damit sagst du dem Compiler: rufe VerarbeiteSpielerBewegung auf und weise das Result Spieler.BewegungMelden zu. Abgesehen davon, dass du keine Parameter übergibst und VerarbeiteSpielerBewegung eine Prozedur ohne Rückgabewert ist, willst du das sicher nicht.

Stattdessen möchtest du einen Verweis auf VerarbeiteSpielerBewegung in Spieler.BewegungMelden haben. Das macht man so:

Code: Alles auswählen

Spieler.BewegungMelden := @VerarbeiteSpielerBewegung;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Selbstgebastelte Ereignisbehanldung

Beitrag von Marsmännchen »

Dankeschön, das war's.

Funktioniert die Zuweisung unter Delphi anders? Ich wusste, dass man Adressen über den @ übergibt. In dem Beispielcode, an dem ich mich entlanggehangelt habe, wird das @ nicht verwendet...

Siehe hier: http://stackoverflow.com/questions/5786595/delphi-event-handling-how-to-create-own-event
Ich mag Pascal...

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Selbstgebastelte Ereignisbehanldung

Beitrag von Socke »

Marsmännchen hat geschrieben:Funktioniert die Zuweisung unter Delphi anders?

Delphi erkennt per Compiler Magic, ob du eine Methode aufrufen oder deren Adresse zuweisen möchtest.
Der Free Pascal Compiler kann das mit dem entsprechenden Modus auch.

http://www.freepascal.org/docs-html/3.0 ... gse74.html
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Selbstgebastelte Ereignisbehanldung

Beitrag von m.fuchs »

Socke hat geschrieben:Delphi erkennt per Compiler Magic, ob du eine Methode aufrufen oder deren Adresse zuweisen möchtest.
Der Free Pascal Compiler kann das mit dem entsprechenden Modus auch.

Wenn man aber die Wahl hat, sollte man den FPC (= sauberen Modus) verwenden.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: [gelöst]Selbstgebastelte Ereignisbehanldung

Beitrag von Marsmännchen »

Ich denke auch - zumindest für meine Frage hier - dass es keine zu große Mühe ist, ein @ vor die procedure zu schreiben 8)
Ich mag Pascal...

Antworten