![]() |
Inkompatible Typen: Reguläre Prozedure und Methodenzeiger
Hallo!
Folgende Situation:
Delphi-Quellcode:
unit A;
type TPassiertWas = procedure(Param1, Param2: String); TMyObject = class(TObject); private FOnPassiertWas : TPassiertWas; public procedure TuWas; property OnPassiertWas: TPassiertWas read FOnPassiertWas write FOnPassiertWas; end; ... procedure TMyObject.TuWas; begin ... if (Assigned(FOnPassiertWas) then FOnPassiertWas('eins', 'zwei'); end;
Delphi-Quellcode:
unit B;
uses A; type TMyIrgenwas = class(TObject); private FMyObj: TMyObject; procedure Reagiere(Param1, Param2: String); public constructor Create; end; ... constructor TMyIrgenwas.Create; begin FMyObj := TMyObject.Create; FMyObj.OnPassiertWas := Reagiere; // <-- Fehler: Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger' end; procedure TMyIrgendwas.Reagiere; begin MachWas(); end; Was mache ich hier falsch? Warum kann ich dem Eventhandler OnPassiertWas nicht die Methode Reagiere zuweisen? Reagiere ist eine Methode einer klasse und keine reguläre Prozedur. Wo liegt also der Fehler? Besten Dank Ares |
Re: Inkompatible Typen: Reguläre Prozedure und Methodenzeige
Delphi-Quellcode:
type
TPassiertWas = procedure(Param1, Param2: String) of object; |
Re: Inkompatible Typen: Reguläre Prozedure und Methodenzeige
Moin Ares,
wie die Fehlermeldung schon sagt. Du versuchst eine Prozedur zu übergeben, und keine Methode. Eine Prozedur (Funktion) hat die Parameter, die man sehen kann, eine Methode hat hingegen noch einen unsichtbaren Parameter self. Dieser befindet sich vor den anderen. Damit die interne Struktur stimmt muss die Prozedur so erweitert werden, wie Sirius es geschrieben hat. |
Re: Inkompatible Typen: Reguläre Prozedure und Methodenzeige
MUSS is so ein unschönes Wort und KANN ist doch auch nett? :stupid:
Delphi-Quellcode:
type TPassiertWas = procedure(Self: TObject; Param1, Param2: String);
ja und sowas gibt's och noch
Delphi-Quellcode:
aber sirius's Vorschlag ist wohl etwas verständlicher :roll:
type
TMyObject = class(TObject); public class procedure TuWas; end; TPassiertWas = procedure(Self: TClass; Param1, Param2: String); |
Re: Inkompatible Typen: Reguläre Prozedure und Methodenzeige
Moin Himitsu,
klar, so geht es wohl auch, aber die andere Variante ist doch etwas sauberer ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
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