![]() |
Komisches Phänomen bei VirtualStringTree und Objekt als Data
Hallo!
Ich habe einen VST in meinem Projekt und als NodeData wollte ich einfach ein selbst erstelltes Objekt dranhängen. Also habe ich im GetNodeDataSize
Delphi-Quellcode:
geschrieben.
NodeDataSize := SizeOf(TMeineKlasse);
Jetzt tritt das komische Phänomen auf, dass ich beim erstellen
Delphi-Quellcode:
ja hier Variable1 test und Variable2 test2 zuweise aber beim Auslesen im GetText
Node := VST.AddChild(nil);
tmp := VST.GetNodeData(Node); tmp := TMeineKlasse.Create; tmp.setVariable1('test'); tmp.setVariable2('test2');
Delphi-Quellcode:
in der ersten Spalte gar nix stehen hab und in der zweiten Spalte den Wert, der in Variable1 stehen sollte. (Die setter und getter der Klasse sind korrekt (2x geprüft))
Data := VST.GetNodeData(Node);
if column = 0 then Celltext := Data.getVariable1; if column = 1 then Celltext := Data.getVariable2; Wenn ich das mit noch mehr Variablen mache, wirds irgendwann auch noch untereinander komisch gemischt. _Darf_ ich vielleicht bei der NodeDataSize gar nicht meine Klasse in das Sizeof stecken? Für mich sieht das irgendwie danach aus, dass er den falschen Speicherbereich liest, aber dann müsste er doch aber auch ab und an mal ganz komische Werte liefern. Danke schonmal und schönen Gruß Gruß Micha |
Re: Komisches Phänomen bei VirtualStringTree und Objekt als
Hallo Micha,
ich vermute, dass du einen Zeiger auf dein Objekt in NodeData mitführen willst. Die Größe dieses Zeigers ist 4 und nicht SizeOf(TMeineKlasse). Grüße vom marabu Nachtrag: Vermutung, weil die Zuweisung nicht in deinem Code zu sehen ist! |
Re: Komisches Phänomen bei VirtualStringTree und Objekt als
Stimmt. Ich hab irgendwie gar nicht mehr realisiert, dass der VST ja nur die Zeiger will. Ich wollte da einfach das Objekt dranklatschen.
Ich habe jetzt beim Auslesen in GetText
Delphi-Quellcode:
den Datentyp von Data in einen Pointer geändert und beim hinzufügen
var
Data: PMeineKlasse; //Pointer begin; Data := VST.GetNodeData(Node); if column = 0 then Celltext := Data.getVariable1; if column = 1 then Celltext := Data.getVariable2; end;
Delphi-Quellcode:
so gearbeitet.
var
tmpObj:PMeineKlasse; newObj:TMeineKlasse; Node:PVirtualNode; begin Node := VST_LIST.AddChild(nil); tmpObj := VST.GetNodeData(Node); newObj := TComputerClass.Create; newObj.setVariable1('eins'); newObj.setVariable2('zwei'); tmpObj^ := newObj; end; Es funktioniert! Danke! Aber ist das wirklich die empfohlene Methode erst ein Objekt komplett zu erstellen und dann per
Delphi-Quellcode:
dem VST zu übergeben?
tmpObj^ := newObj
Gruß Micha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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