Einzelnen Beitrag anzeigen

hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#1

Virtual Treeview, rootnodecount setzen in Designtime

  Alt 17. Mär 2008, 03:27
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;
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat