![]() |
[VirtualTreeview]Items hinzufügen
Hi,
Ich wollte grade wie in diesem Tutorial beschrieben Items in eine VST einfügen ![]() Was mache ich nur falsch ? :wall: :wall: :wall:
Delphi-Quellcode:
thx, arbu
type
TAI_TreeKind = (tkdic); type PAI_TreeItem = ^TAI_TreeItem; TAI_TreeItem =record // meine daten kind: TAI_TreeKind; path: string[255]; self: string[255]; end; // hier werden die items erstellt, bzw sollen erstellt werden procedure TFEditorMain.TreeFilesExpanding(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean); var slist: tstringlist; i: integer; rp: TAI_TreeItem; begin if node = htdocs then begin TreeFiles.DeleteChildren(node); slist:= tstringlist.Create; slist:=Lister.listdirs(fhtdocs); TreeFiles.BeginUpdate; for i:=0 to slist.Count-1 do begin rp.path:= lister.path+slist[i]; rp.self:= slist[i]; TreeFiles.NodeDataSize:=SizeOf(TAI_TreeItem); AddVSTStructure(TreeFiles, node, rp); end; TreeFiles.EndUpdate; end; end; // diese function ist aus dem tutorial function TFEditorMain.AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; ARecord: TAI_TreeItem): PVirtualNode; var Data: PAI_TreeItem; begin Result:=AVST.AddChild(ANode); Data:=AVST.GetNodeData(Result); Avst.ValidateNode(Result, False); Data^.kind:=ARecord.kind; Data^.path:=ARecord.path; Data^.self:=ARecord.self; end; // Die Zugriffs verletzung kommt schon beim Expandieren |
Re: [VirtualTreeview]Items hinzufügen
Hallo,
ich habe ein paar Kleinigkeiten gefunden. Vielleicht ist ja die Fehlerursache dabei:
Delphi-Quellcode:
Grüße,
procedure TFEditorMain.TreeFilesExpanding(Sender: TBaseVirtualTree;
Node: PVirtualNode; var Allowed: Boolean); var slist: tstringlist; i: integer; rp: TAI_TreeItem; begin if node = htdocs then begin TreeFiles.DeleteChildren(node); // Kommentiere diese Zeile mal aus. !!! Sie erzeugt ein Speicherleck. //slist:= tstringlist.Create; slist:=Lister.listdirs(fhtdocs); try TreeFiles.BeginUpdate; try for i:=0 to slist.Count-1 do begin rp.path:= lister.path+slist[i]; rp.self:= slist[i]; // NodeDataSize sollte nur einmal beim // Programmstart eingestellt werden. // Danach sollte sich NodeDataSize eigentlich nicht mehr ändern. TreeFiles.NodeDataSize:=SizeOf(TAI_TreeItem); AddVSTStructure(TreeFiles, node, rp); end; // for lk finally TreeFiles.EndUpdate; end; // finally finally FreeAndNil(slist); end; end; // if end; // TreeFilesExpanding function TFEditorMain.AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; ARecord: TAI_TreeItem): PVirtualNode; var Data: PAI_TreeItem; begin Result:=AVST.AddChild(ANode); Data:=AVST.GetNodeData(Result); Avst.ValidateNode(Result, False); Data^.kind:=ARecord.kind; Data^.path:=ARecord.path; Data^.self:=ARecord.self; end; // AddVSTStructure pszopp |
Re: [VirtualTreeview]Items hinzufügen
Delphi-Quellcode:
genau daran lag es, aber danke
// NodeDataSize sollte nur einmal beim Programmstart eingestellt werden.
// Danach sollte sich NodeDataSize eigentlich nicht mehr ändern. TreeFiles.NodeDataSize:=SizeOf(TAI_TreeItem); Ich muss schon sagen der VirtualStringTree ist cool. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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