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