AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Komisches Phänomen bei VirtualStringTree und Objekt als Data
Thema durchsuchen
Ansicht
Themen-Optionen

Komisches Phänomen bei VirtualStringTree und Objekt als Data

Ein Thema von Michael_Bayer · begonnen am 11. Jun 2005 · letzter Beitrag vom 12. Jun 2005
Antwort Antwort
Michael_Bayer

Registriert seit: 20. Mär 2005
137 Beiträge
 
Delphi 7 Enterprise
 
#1

Komisches Phänomen bei VirtualStringTree und Objekt als Data

  Alt 11. Jun 2005, 19:50
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
  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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Komisches Phänomen bei VirtualStringTree und Objekt als

  Alt 11. Jun 2005, 20:40
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!
  Mit Zitat antworten Zitat
Michael_Bayer

Registriert seit: 20. Mär 2005
137 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Komisches Phänomen bei VirtualStringTree und Objekt als

  Alt 12. Jun 2005, 05:43
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 pertmpObj^ := newObj dem VST zu übergeben?

Gruß
Micha
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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