Hallo
Ich benutze den Virtual Treeview(TVirtualStringTree) und habe folgendes Problem
Ich habe eine Ableitung des TVirtualStringTree mit onInit und onfree routine.
Wenn ich Rootnodecount in Designtimer mit dem Objectinspectore verändere,
bekomme ich eine
Exception.
"Zugriffverletzung ... in Modul rtl100.bpl"
Das tritt nur auf, wenn ich ich
doinitnode benutze und auf den User-Speicher zugreife.
Läuft das Speichermanagement nicht zur Designtime?
Vielen Dank für eine Antwort
Hermann
Delphi-Quellcode:
uses
Classes,VirtualTrees,sysutils;
type
Pmydata = ^tmydata;
tmydata = record
caption : string;
end;
tmytree = class(TVirtualStringTree)
private
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
procedure DoGetText(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: WideString); override;
procedure DoFreeNode(Node: PVirtualNode); override;
procedure DoInitNode(Parent, Node: PVirtualNode; var InitStates: TVirtualNodeInitStates); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Public-Deklarationen }
published
{ Published-Deklarationen }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Neu', [tmytree]);
end;
constructor tmytree.create(aowner:tcomponent);
begin
inherited create(aowner);
NodeDataSize :=sizeof(tmydata);
end;
destructor tmytree.destroy;
begin
inherited destroy;
end;
procedure tmytree.DoGetText(Node:PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: WideString);
var
ptd : Pmydata;
begin
ptd:=getNodeData(Node);
Text:=ptd.caption;
end;
procedure tmytree.doFreenode(Node: PVirtualNode);
var
ptd : Pmydata;
begin
ptd:=GetNodeData(Node);
Finalize(ptd^);
end;
procedure tmytree.DoInitNode(Parent, Node: PVirtualNode; var InitStates: TVirtualNodeInitStates);
var
ptd : Pmydata;
begin
ptd:=GetNodeData(Node);
ptd.caption:='No:'+inttostr(node.Index); /// Hier knallt es !!!!!!!!!!
end;