![]() |
Virtual Treeview, rootnodecount setzen in Designtime
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; |
Re: Virtual Treeview, rootnodecount setzen in Designtime
Zitat:
|
Re: Virtual Treeview, rootnodecount setzen in Designtime
Danke, aber hilft nicht.
im inherited werden ja sowieso nur die oninit/onfree ereignisse aufgerufen, die nil sind. es knallt weiterhin reprodizerbar. |
Re: Virtual Treeview, rootnodecount setzen in Designtime
Zitat:
|
Re: Virtual Treeview, rootnodecount setzen in Designtime
Wieso musst du denn unbedingt eine ableitung vom VirtualStringTree erstellen?
Den Code, den du im DoInit deiner Ableitung aufrufst kannst du doch im OnInit eines Standard VirtualStringTrees packen?! |
Re: Virtual Treeview, rootnodecount setzen in Designtime
Der Fehler tritt auch mit oninit auf, wenn dieser in der Komponente selber ausgewertert wird.
Ich leite mir eine Art "Virtual StringGrid" ab. Meine Doinit oder auch oninit muss in der abgeleiteten Komponente sein und nicht in einer Form. scheinbar geht die Speicherverwaltung mit GetNodeData nicht im Designmodus. in der Runtime läuft es einwandfrei. |
Re: Virtual Treeview, rootnodecount setzen in Designtime
Deinstalliere das als Komponente, und erzeuge die Komponente zu Laufzeit in einem Testprojekt. Da kannste besser debuggen.
|
Re: Virtual Treeview, rootnodecount setzen in Designtime
Zur Laufzeit gibt es keine Fehler! Definitiv nicht!
|
Re: Virtual Treeview, rootnodecount setzen in Designtime
Tritt der fehler nicht mehr auf, wenn du den Delphi-internen Speichermananger nutzt? (kannst du per Compiler-direktive umschalten)
gruss |
Re: Virtual Treeview, rootnodecount setzen in Designtime
Jetzt steh ich auf dem Schlauf...
Wo kann ich den ein/ausschalten. Habe Delphi 2007. Gruß von den Kanaren Hermann |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz