Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Datentyp von ListView Data prüfen (https://www.delphipraxis.net/162342-datentyp-von-listview-data-pruefen.html)

Morphie 18. Aug 2011 09:50

Datentyp von ListView Data prüfen
 
Hi,

ich befülle zur Laufzeit eine ListView mit Benutzern (TUser) und Gruppen (TGroup):
Delphi-Quellcode:
...
  for i := 0 to Core.Groups.Count - 1 do
  begin
    Item := ListView1.Items.Add;
    Item.Data := Core.Groups[i];
    Item.Caption := Core.Groups[i].Name;
    Item.ImageIndex := 1;
  end;
  ...
  for i := 0 to Core.Users.Count - 1 do
  begin
    Item := ListView1.Items.Add;
    Item.Data := Core.Users[i];
    Item.Caption := Core.Users[i].Name;
    Item.ImageIndex := 0;
  end;
Wie kann ich jetzt feststellen, was für ein Datentyp hinter "Data" steckt?
Ich würde gerne den Is-Operator dafür verwenden, allerdings schmeißt Delphi eine Fehlermeldung:
Code:
E2015 Operator ist auf diesen Operandentyp nicht anwendbar
Delphi-Quellcode:
if (Item.Data is TUser) then
...
Muss ich Data noch irgendwie Casten oder so? Ich habe mit Pointer-Arithmetik noch nicht so viel zutun gehabt...
Oder muss ich wirklich den Umweg über einen "gemeinsamen" Record/Klasse gehen?
in etwa so:
Delphi-Quellcode:
TItemTypen = (itUser, itGroup);
  TItemTyp = record
    Data: Pointer;
    Typ: TItemTypen;
  end;

DeddyH 18. Aug 2011 09:54

AW: Datentyp von ListView Data prüfen
 
Die Data-Eigenschaft ist vom Typ TCustomData(=Pointer) und nicht vom Typ TObject. Somit kannst Du nicht mit is oder as prüfen/casten. Du könntest höchstens nach einem gemeinsamen Vorfahren casten (zur Not TObject) und dann is anwenden. Ausprobiert habe ich das allerdings nicht, einen Versuch ist es aber IMO wert.

chaosben 18. Aug 2011 09:56

AW: Datentyp von ListView Data prüfen
 
Zitat:

Zitat von DeddyH (Beitrag 1117778)
Du könntest höchstens nach einem gemeinsamen Vorfahren casten und dann is anwenden.

Genau so funktionierts.

DeddyH 18. Aug 2011 09:57

AW: Datentyp von ListView Data prüfen
 
Also mal wieder im Blindflug ins Schwarze getroffen :lol:

Morphie 18. Aug 2011 09:59

AW: Datentyp von ListView Data prüfen
 
Vielen Dank :) Genau das habe ich gesucht. Hätte ich auch selbst drauf kommen können... :roll:

chaosben 18. Aug 2011 10:16

AW: Datentyp von ListView Data prüfen
 
Fein!

//OT:
Zitat:

Zitat von DeddyH (Beitrag 1117781)
Also mal wieder im Blindflug ins Schwarze getroffen :lol:

:-D


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