![]() |
Interface casten
Ich habe folgendes Konstrukt:
Eine Klasse namens TMessung die das Interface IMessKnoten implementiert. Ich brauche das Interface, für eine Virtual Tree View.
Delphi-Quellcode:
Ich weise den Knoten in meinem TreeView über Data die Daten zu die sich hinter ihnen verbirgen. Also beispielsweise eine Instanz vom Typ TMessung. Dies muss ich aber über das Interface machen. Was soweit kein Problem ist. Aber wie bekomme ich in folgender Situation wieder ein Objekt vom Typ TMessung:
TMessung = class(TInterfacedObject, IMessKnoten);
Delphi-Quellcode:
Wenn ich beim Debuggen Messknoten in die Liste der überwachten Ausdrücke ziehe steht bei Wert sogar da : TMessung(....).
var
Messknoten: IMessKnoten; begin Data:= VST.GetNodeData(Node); Messknoten := Data.Fobject; // Jetzt soll Messknoten nach TMessung gecastet werden. Aber ein Cast ist mir trotzdem bisher nicht gelungen. Vielen Dank euch schon mal im Vorraus. |
Re: Interface casten
hi oracle
ja... das wollte ich auch einmal machen ;-)... und habe hier in der DP danach gesucht. ich weiss nicht mehr genau welcher Beitrag es war, aber der Beitrag hat mich auf jedenfall dazu bewogen eine andere Lösung zu nehmen und zwar einerseits immer mit Objekten zu arbeiten oder immer nur mit Interfaces zu arbeiten ohne das herumgecaste. So und falls du dich noch nicht umentschieden hast, wäre das eine möglichkeit die vielleicht ein Versuch wert wäre ;-): und zwar indem du im Interface eine funktion definierst, welches den Typ TMessung zurückgibt:
Delphi-Quellcode:
ich bin mir nicht sicher ob das wirklich funktioniert. evtl gibt es auch probleme mit dem Referenzierungszähler oder wie man das auch nennt. :gruebel:
TMessung = class;
IMessKnoten = interface function GetMessung: TMessung; end; TMessung = class(TInterfacedObject, IMessKnoten) public function GetMessung: TMessung; end; ... function TMessung.GetMessung: TMEssung; begin Result := Self; end; Greets kuzco |
Re: Interface casten
Das Interface wird noch von anderen Objekten implementiert. Diese müssten dann auch die Funktion GetMessung implementieren.
Weiss nicht ob das so schön wäre. Aber ich habe eine andere Lösung gefunden. Ich lasse mir den Index des Knotens geben, und hole mir anhand dieses Indizes die Messung aus meines Messungliste. Aber trotzdem vielen Dank. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 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