![]() |
Typprüfung bei TTreeNode.Data
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:
Irgendwo hab ich gelesen das Typprüfung mit "is" geht, aber da ist mein Compiler anderer Meinung. Das hier akzeptiert er nicht:
procedure TGLForm.ObjectsTreeTVChange(Sender: TObject; Node: TTreeNode);
begin if Node.Data = TS3DGroup then showmessage('Group'); end;
Delphi-Quellcode:
Nochmal ist eure Hilfe gefragt ;)
procedure TGLForm.ObjectsTreeTVChange(Sender: TObject; Node: TTreeNode);
begin if Node.Data is TS3DGroup then showmessage('Group'); end; (Warscheinlich steh ich auf dem Schlauch, aber ich probiere und suche jetzt schon eine Stunde) |
Re: Typprüfung bei TTreeNode.Data
Das kannst du gleich mal wieder vergessen, denn der Typ von Data ist und bleibt immer POINTER, egal was du da reinpackst. :zwinker:
Wenn, dann mußt du dir schon selber irgendwie die nötigen Daten(Typenkennung) mitgeben. z.B. eine Signatur innerhalb Daten.
Delphi-Quellcode:
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.
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} |
Re: Typprüfung bei TTreeNode.Data
Hallo,
wenn Du sicher bist, dass in Data immer ein Objekt steht, dann kannst Du das auch enfach casten:
Delphi-Quellcode:
Der Grund ist einfach: Typprüfung mit is funktioniert nur mit Klassen, nicht mit Primitives (Integer, Byte, Pointer...).
procedure TGLForm.ObjectsTreeTVChange(Sender: TObject; Node: TTreeNode);
begin if TObject(Node.Data) is TS3DGroup then showmessage('Group'); end; Gruß xaromz |
Re: Typprüfung bei TTreeNode.Data
Cool, danke, es klappt ;) .
Es ist sicher, dass Data immer auf etwas zeigt, also brauche ich nicht mehr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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