Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inkompatible Typen: 'TPathListEvent' und 'Procedure' (https://www.delphipraxis.net/193221-inkompatible-typen-tpathlistevent-und-procedure.html)

Delbor 6. Jul 2017 13:38

Delphi-Version: XE8

Inkompatible Typen: 'TPathListEvent' und 'Procedure'
 
Hi zusammen

Irgendwie haben die Delphi-Events scheinbar etwas gegen mich. Zurzeit führe ich solch ein Ding neu ein. Dabei ist das Fehlen von Const-Deklarationen und ähnlichem schon Routine - will heissen, vor allem anderen untersuche ich mal die gemachten Deklarationen. Und das sollte es dan auch gewesen sein.
Sollte!!
Denn bei der Zuweisung des Eventhandlers zum Event (in Mainform.Create)
Delphi-Quellcode:
  FDMySQLDml.OnStartCategoryQuery := Self.DoOnStartCategoryQuery; // <== Keine Probleme
  Self.DlgFrameContainer1.PathFinderFrame1.OnPathListEvent := TFDMySQLDml.DoPathlistEvent;
meckert Delphi:
Zitat:

[dcc32 Fehler] CM_FirstUnit.pas(562): E2010 Inkompatible Typen: 'TPathListEvent' und 'Procedure''
Ich hab mir die Strukturen der Event-Deklaration und Implemetierung mal aufgeschrieben:
Zitat:

Deklarationen des Events:

Der Typ des Events im Pathfinderframe:
TPathListEvent = procedure(Sender:TObject; const Ordner: String; const Pathlist: TStringList) of Object;

Das private Feld des Events :
FOnPathListEvent: TPathListEvent;

Das Public-Property des Events
property OnPathListEvent: TPathListEvent read FOnPathListEvent write FOnPathListEvent;

Der Event wird gefeuert :
if Assigned(OnPathListEvent) then
OnPathListEvent(Sender, Ordner, Pathlist);

Deklaration des Eventhandlers:
procedure DoPathlistEvent(Sender: TObject; const Ordner: String;const Pathlist: TStringlist);

Implementation des Eventhanlers: (Procedurekopf)
procedure TFDMySQLDml.DoPathlistEvent(Sender: TObject; const Ordner: String;
const Pathlist: TStringlist);

Die Zuweisung des Eventhandlers an das Event im Mainform.Create:;
Self.DlgFrameContainer1.PathFinderFrame1.OnPathLis tEvent := TFDMySQLDml.DoPathlistEvent;
In dieser Oncreate sind mehrere Eventzuweisugnen mit identischem Aufbau vorhanden - umso weniger verstehe ich die Fehlermeldung...
Was ist da falsch?

Gruss
Delbor

HolgerX 6. Jul 2017 13:50

AW: Inkompatible Typen: 'TPathListEvent' und 'Procedure'
 
Hmm..

könnte es sein, dass Du nicht 'DoPathlistEvent' einer Object-Instanz zuweist, sondern der Klasse (PathFinderFrame1.OnPathListEvent := TFDMySQLDml.DoPathlistEvent;)

TiGü 6. Jul 2017 13:50

AW: Inkompatible Typen: 'TPathListEvent' und 'Procedure'
 
Delphi-Quellcode:
begin
  Self.DlgFrameContainer1.PathFinderFrame1.OnPathListEvent := TFDMySQLDml.DoPathlistEvent;
end;
wird zu

Delphi-Quellcode:
var
  MyInstance: TFDMySQLDml; // Oder besser oben in der Klassendefinition als Member
begin
  MyInstance := TFDMySQLDml.Create;
  Self.DlgFrameContainer1.PathFinderFrame1.OnPathListEvent := MyInstance.DoPathlistEvent;
end;
Zeit fürn Kaffee Delbor! :spin2:

Delbor 6. Jul 2017 14:02

AW: Inkompatible Typen: 'TPathListEvent' und 'Procedure'
 
Hi zusammen

Tja, warum in die Ferne schweifen...

Zitat:

var
MyInstance: TFDMySQLDml; // Oder besser oben in der Klassendefinition als Member
begin
MyInstance := TFDMySQLDml.Create;
Self.DlgFrameContainer1.PathFinderFrame1.OnPathLis tEvent := MyInstance.DoPathlistEvent;
end;
Oder anders: mit einer Zuweisung an eine Instanz (FDMySQLDml) statt an eine Klasse(TFDMySQLDml) wird ein Schuh draus...

Vielen Dank an euch beide!

Gruss
Delbor

PS:
Zitat:

Zeit fürn Kaffee Delbor!
Doch, ich denke, Kaffee anstelle von T(ee) wäre besser!
Aber im Ernst: Das mit dem führenden 'T' passiert mir noch öfters. Von daher sollte ichs eigentlich wissen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz