Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komisches Phänomen bei VirtualStringTree und Objekt als Data (https://www.delphipraxis.net/47471-komisches-phaenomen-bei-virtualstringtree-und-objekt-als-data.html)

Michael_Bayer 11. Jun 2005 19:50


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:
  NodeDataSize := SizeOf(TMeineKlasse);
geschrieben.

Jetzt tritt das komische Phänomen auf, dass ich beim erstellen
Delphi-Quellcode:
  Node := VST.AddChild(nil);
  tmp := VST.GetNodeData(Node);
  tmp := TMeineKlasse.Create;
  tmp.setVariable1('test');
  tmp.setVariable2('test2');
ja hier Variable1 test und Variable2 test2 zuweise aber beim Auslesen im GetText
Delphi-Quellcode:
  Data := VST.GetNodeData(Node);
  if column = 0 then Celltext := Data.getVariable1;
  if column = 1 then Celltext := Data.getVariable2;
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))

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

marabu 11. Jun 2005 20:40

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!

Michael_Bayer 12. Jun 2005 05:43

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:
var
  Data: PMeineKlasse; //Pointer
begin;
  Data := VST.GetNodeData(Node);
  if column = 0 then Celltext := Data.getVariable1;
  if column = 1 then Celltext := Data.getVariable2;
end;
den Datentyp von Data in einen Pointer geändert und beim hinzufügen
Delphi-Quellcode:
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;
so gearbeitet.
Es funktioniert! Danke!
Aber ist das wirklich die empfohlene Methode erst ein Objekt komplett zu erstellen und dann per
Delphi-Quellcode:
tmpObj^ := newObj
dem VST zu übergeben?

Gruß
Micha


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