Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Die Klasse eines Objektes ermitteln (https://www.delphipraxis.net/145271-die-klasse-eines-objektes-ermitteln.html)

TheMiller 28. Dez 2009 10:41


Die Klasse eines Objektes ermitteln
 
Hallo,

ich speicher in der Data-Eigenschaft der TTreeView Objekte. Es können immer nur zwei Arten von Objekte sein. Wie prüfe ich nun, von welchem Typ das angeklickte Item ist? Ich könnte zwar prüfen, ob das Item weitere Kinder hat, aber das ist ja nicht der Sinn von OOP.

Ich habe es so probiert

Delphi-Quellcode:
if (TObject(TreeView2.Selected.Data) is TArtikel) then
begin
  Parent:=TKategorie(TreeView2.Selected.Parent.Data);
end else
begin
  Parent:=TKategorie(TreeView2.Selected.Data);
end;
aber das gibt eine AV.

Ich hoffe ihr könnt mir helfen.... - natürlich könnt ihr das

Danke im Voraus

himitsu 28. Dez 2009 10:43

Re: Die Klasse eines Objektes ermitteln
 
Eigentlich sollte es richtig sein,

deßhalb frage ich mal: Bist du dir sicher, dasß in .Data wirklich eine Klasse steckt?
Und wo tritt die AV genau auf?

TheMiller 28. Dez 2009 13:41

Re: Die Klasse eines Objektes ermitteln
 
Hallo,

in Data sind Objekte abgelegt, auf die ich auch die ganze Zeit schon zugreife. Das funktioniert also. So speicher ich das Objekt in Data

Delphi-Quellcode:
Item:=TreeView2.Items.AddChild(Parent, Kategorie.Artikel[j].ArtikelName);
Item.Data:=Pointer(Kategorie.Artikel[k]); //Artikel[k] liefert TArtikel zurück
Ja, die AV tritt dort auf. Ich habe alles andere auskommentiert und auch noch einen Breakpoint gesetzt. Nur wieso... ich habe in Data auf jeden Fall ein Objekt. TArtikel oder TKategorie...

wicht 28. Dez 2009 14:04

Re: Die Klasse eines Objektes ermitteln
 
Delphi-Quellcode:
Item:=TreeView2.Items.AddChild(Parent, Kategorie.Artikel[j].ArtikelName);
Item.Data:=Pointer(Kategorie.Artikel[k]); //Artikel[k] liefert TArtikel zurück
Oben j und unten k?

Delphi-Quellcode:
if (TObject(TreeView2.Selected.Data) is TArtikel) then
begin
  Parent:=TKategorie(TreeView2.Selected.Parent.Data);
end else
begin
  Parent:=TKategorie(TreeView2.Selected.Data);
end;
Und Selected ist nicht nil? Und Selected.Parent auch nicht?

TheMiller 28. Dez 2009 16:46

Re: Die Klasse eines Objektes ermitteln
 
Steinigt mich...

In den Kategorie-Items war kein Objekt drin, sondern nur in den Artikel-Items.... Tut mir leid.

Vielen Dank - funktioniert


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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