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;