AGB  ·  Datenschutz  ·  Impressum  







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

Typprüfung bei TTreeNode.Data

Ein Thema von -NIP- · begonnen am 17. Nov 2005 · letzter Beitrag vom 18. Nov 2005
Antwort Antwort
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#1

Typprüfung bei TTreeNode.Data

  Alt 17. Nov 2005, 23:16
Also: Mein Problem ist: Dem Pointer TTreeNode.Data können verschiedene Typen zugeweist werden.
im OnChange meines TTreeView versuche ich zu prüfen, on es ein bestimmter Typ ist, um dann speziell auf den typen zu reagieren. Also eine if then Abfrage.
Wie führe ich eine Typprüfung bei einem Pointer aus?


Das hier kompiliert er zwar klaglos, aber führt die Anweisung nicht aus:
Delphi-Quellcode:
procedure TGLForm.ObjectsTreeTVChange(Sender: TObject; Node: TTreeNode);
begin
  if Node.Data = TS3DGroup then
  showmessage('Group');
end;
Irgendwo hab ich gelesen das Typprüfung mit "is" geht, aber da ist mein Compiler anderer Meinung. Das hier akzeptiert er nicht:
Delphi-Quellcode:
procedure TGLForm.ObjectsTreeTVChange(Sender: TObject; Node: TTreeNode);
begin
  if Node.Data is TS3DGroup then
  showmessage('Group');
end;
Nochmal ist eure Hilfe gefragt

(Warscheinlich steh ich auf dem Schlauch, aber ich probiere und suche jetzt schon eine Stunde)
Christian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Typprüfung bei TTreeNode.Data

  Alt 17. Nov 2005, 23:27
Das kannst du gleich mal wieder vergessen, denn der Typ von Data ist und bleibt immer POINTER, egal was du da reinpackst.

Wenn, dann mußt du dir schon selber irgendwie die nötigen Daten(Typenkennung) mitgeben.
z.B. eine Signatur innerhalb Daten.


Delphi-Quellcode:
Type TS2DGroup = Record
    Typ: Byte;
    ... {eigene Daten}
  End;
  TS3DGroup = Record
    Typ: Byte;
    ... {eigene Daten}
  End;


if PByte(Node.Data)^ = 3 then {is TS3DGroup}

if PS3DGroup(Node.Data)^.Typ = 3 then {is TS3DGroup}
Du mußt hierbei aber auch selber dafür sorgen, daß die richtige Signatur im Record vorhanden ist ... also du mußt demnach selber z.B. die 3 für TS3DGroup in Typ eintragen.
$2B or not $2B
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Typprüfung bei TTreeNode.Data

  Alt 18. Nov 2005, 10:23
Hallo,

wenn Du sicher bist, dass in Data immer ein Objekt steht, dann kannst Du das auch enfach casten:
Delphi-Quellcode:
procedure TGLForm.ObjectsTreeTVChange(Sender: TObject; Node: TTreeNode);
begin
  if TObject(Node.Data) is TS3DGroup then
  showmessage('Group');
end;
Der Grund ist einfach: Typprüfung mit is funktioniert nur mit Klassen, nicht mit Primitives (Integer, Byte, Pointer...).

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#4

Re: Typprüfung bei TTreeNode.Data

  Alt 18. Nov 2005, 16:45
Cool, danke, es klappt .

Es ist sicher, dass Data immer auf etwas zeigt, also brauche ich nicht mehr.
Christian
  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 22:16 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