AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interface casten

Ein Thema von Oracle · begonnen am 11. Mär 2008 · letzter Beitrag vom 11. Mär 2008
Antwort Antwort
Oracle
(Gast)

n/a Beiträge
 
#1

Interface casten

  Alt 11. Mär 2008, 11:57
Ich habe folgendes Konstrukt:
Eine Klasse namens TMessung die das Interface IMessKnoten implementiert.
Ich brauche das Interface, für eine Virtual Tree View.


TMessung = class(TInterfacedObject, IMessKnoten); 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:

Delphi-Quellcode:
var
Messknoten: IMessKnoten;
begin
  Data:= VST.GetNodeData(Node);
  Messknoten := Data.Fobject;
  // Jetzt soll Messknoten nach TMessung gecastet werden.
Wenn ich beim Debuggen Messknoten in die Liste der überwachten Ausdrücke ziehe steht bei Wert sogar da : TMessung(....).
Aber ein Cast ist mir trotzdem bisher nicht gelungen.

Vielen Dank euch schon mal im Vorraus.
  Mit Zitat antworten Zitat
kuzco

Registriert seit: 13. Aug 2007
Ort: Bronschhofen
1 Beiträge
 
#2

Re: Interface casten

  Alt 11. Mär 2008, 12:24
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:
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;
ich bin mir nicht sicher ob das wirklich funktioniert. evtl gibt es auch probleme mit dem Referenzierungszähler oder wie man das auch nennt.

Greets
kuzco
  Mit Zitat antworten Zitat
Oracle
(Gast)

n/a Beiträge
 
#3

Re: Interface casten

  Alt 11. Mär 2008, 14:19
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 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