Einzelnen Beitrag anzeigen

Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#1

VirtualStringTree - Problem mit dynamischem Create

  Alt 3. Aug 2011, 14:18
Hallo,

ich habe eine VirtualStringTree - Komponente (VST) und Lazarus 0.9.30.
Ich erstelle ein Node und möchte ein Record (später Klasse) anhängen.
Allerdings funktioniert das nicht, solange ich einen dynamisch erstellten VST nehme.

Ziehe ich einen VST auf die GUI und wende meine Funktionen auf dieses Objekt an, funktioniert alles einwandfrei. Doch sobald ich das mit einem zur Laufzeit erstellten Objekt mache, kann ich kein Record zuweisen und es treten weitere Probleme auf.

Ich habe auf Basis folgenden Tutorials aufgebaut: http://wiki.lazarus.freepascal.org/V...le_for_Lazarus


hier mein Constructor:

Delphi-Quellcode:

type
     PTreeData = ^TTreeData;
     TTreeData = record
       Column0: String;
       Column1: String;
       Column2: String;
 end;


constructor TTree.Create(AOwner: TWinControl);
      begin
      pOwner:=AOwner;

      pTreeView:=TVirtualStringTree.Create(nil);

      with pTreeView do begin
           Parent:=AOwner;

           OnFreeNode:=pTreeViewFreeNode;
           OnClick:=pTreeclick;
           OnChange:=pTreeViewChange;
           OnFocuschanged:=pTreeViewFocusChanged;
           OnGetNodeDataSize:=pTreeViewGetNodeDataSize;
           OnGetText:=pTreeViewGetText;

           TreeOptions.MiscOptions:=[toReadOnly];
           NodeDataSize:=SizeOf(TTreeNode);
           Left:=0;
           Top:=0;
           Align:=alClient;
           Visible:=false;
           DefaultText := 'blabla';
      end;

wenn ich folgendes ausführe kommt eine Exception: "External SIGSEGV"

Delphi-Quellcode:
procedure TTree.LoadTree(Root: TElement);
var Node:PVirtualNode;
     Data: PTreeData;
begin

Node := pTreeView.AddChild(nil);

if(pTreeView.AbsoluteIndex (Node) > -1) then
  begin
  Data:=pTreeView.GetNodeData(Node);
  Data^.Column0 := 'dvf'; // <<----------- hier kommt der Fehler
  Data^.Column1 := 'dvf';
  Data^.Column2 := 'dvf';

  AddNode(Root, Node);
end;

Anscheinend fehlen bestimmte Eigenschaften oder weiteres, die ich zur Erstellung angeben muss, allerdings habe ich bisher keinen nützlichen Thread gefunden.


sonnige Grüße


Johannes
"Never touch a running system administrator !"

Geändert von jokerfacehro ( 3. Aug 2011 um 14:20 Uhr)
  Mit Zitat antworten Zitat