![]() |
Virtualstringtree Exception beim aufklappen
Hallo,
ich habe, mit virtualstringtree, eine Tabelle mit Subnodes erzeugt. Beim Aufklappen des Subnodes bekomme ich eine in der VSTGetText Methode eine Zugriffsverletzung. Weiss nicht warum. Kann mir jemand helfen?
Delphi-Quellcode:
Grüsse
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, VirtualTrees, StdCtrls, ImgList; type POmeinedaten=^TOmeinedaten; TOmeinedaten=class private published public Bezeichnung:string; Feld:array[1..6] of string; Fobject:tobject; end; TForm1 = class(TForm) Button1: TButton; VST: TVirtualStringTree; ImageList1: TImageList; procedure Button1Click(Sender: TObject); procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); procedure FormCreate(Sender: TObject); private function add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode; var daten:TOmeinedaten; begin daten:=TOmeinedaten.Create; If node<>nil then Begin daten:=vst.GetNodeData(node); End; daten.Bezeichnung:=bez; daten.Feld[1]:=f1; daten.Feld[2]:=f2; daten.Feld[3]:=f3; daten.Feld[4]:=f4; daten.Feld[5]:=f5; daten.Feld[6]:=f6; result:=vst.addchild(node,daten); end; procedure TForm1.Button1Click(Sender: TObject); var I:Integer; aNode:PVirtualNode; begin anode:=add_entry(nil,'Telegramm aktiv Ein','s','s','s','s','s','s'); add_entry(anode,'Telegramm aktiv Ein passiv','a','a','a','a','a','a'); // node:=add_entry(nil,'Telegramm aktiv Aus','','','','','',''); // node:=add_entry(nil,'Telegramm aktiv Aus passiv','','','','','',''); end; procedure TForm1.FormCreate(Sender: TObject); begin vst.nodedatasize:=sizeof(TOmeinedaten); end; procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var data : TOmeinedaten;t0:integer; begin data:=TOmeinedaten(VST.getnodedata(node)^); case Column of 0: celltext:=Data.Bezeichnung; 1: celltext:=Data.Feld[1]; 2: celltext:=Data.Feld[2]; 3: celltext:=Data.Feld[3]; 4: celltext:=Data.Feld[4]; 5: celltext:=Data.Feld[5]; 6: celltext:=Data.Feld[6]; end; end; end. Rainer |
Re: Virtualstringtree Exception beim aufklappen
Was hast du denn bisher schon versucht, um die Zugriffsverletzung im OnGetText einzugrenzen? Kommt die AV IMMER, egal welche Column? Oder nur bei bestimmten Columns? Oder erwartest du, dass jemand deinen Code kopiert, ein neues Projekt erstellt und es für dich debuggt? ... Oder oder oder?
Vorallem verstehe ich hier wieder nicht, warum du in deinem Fall mit Klassen als Knotendaten arbeitest, statt mit Records? Dir sollte auch klar sein, dass du - nach meinem Verständnis der Materie - mit
Delphi-Quellcode:
die Instanz des Objekts "daten" überschreibst, wenn "node<>nil" ist. Somit haben deine Unterknoten keine "TOmeinedaten"-Instanz, was auch der Grund für deine AV sein wird.
daten:=TOmeinedaten.Create;
If node<>nil then Begin daten:=vst.GetNodeData(node); End; |
Re: Virtualstringtree Exception beim aufklappen
Hallo nuclearping,
es geht doch sicherlich, im Ton, auch etwas freundlicher oder? Zitat:
Zitat:
Sobald ich die celltext aus der VSTGetText rausnehme funktioniert das. Ich habe die get_entry Methode geändert. Bringt auch nichts.
Delphi-Quellcode:
Grüsse
function TForm1.add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode;
var daten:TOmeinedaten; begin If node<>nil then Begin daten:=vst.GetNodeData(node); End else Begin daten:=TOmeinedaten.Create; End; daten.Bezeichnung:=bez; daten.Feld[1]:=f1; daten.Feld[2]:=f2; daten.Feld[3]:=f3; daten.Feld[4]:=f4; daten.Feld[5]:=f5; daten.Feld[6]:=f6; result:=vst.addchild(node,daten); end; Rainer |
Re: Virtualstringtree Exception beim aufklappen
Ich kling nur so unfreundlich, weil das da absolut "dahingeschusselt" aussieht. Fast so, als ob du selbst nicht wirklich wüßtest, was du da machst.
Afaik werden Check- und Comboboxes auch nicht SO in den Baum gebracht, sondern über Property-Links oder wie das heisst. Zitat:
Delphi-Quellcode:
function TForm1.add_entry(node:PVirtualNode;bez,f1,f2,f3,f4,f5,f6:string):PVirtualNode;
var daten:TOmeinedaten; begin daten:=TOmeinedaten.Create; daten.Bezeichnung:=bez; daten.Feld[1]:=f1; daten.Feld[2]:=f2; daten.Feld[3]:=f3; daten.Feld[4]:=f4; daten.Feld[5]:=f5; daten.Feld[6]:=f6; result:=vst.addchild(node,daten); end; |
Re: Virtualstringtree Exception beim aufklappen
Hallo nuclearping,
ich hab das Teil (VST) nach der Anleitung ( Video hier in der DP ) programmiert. Wieso ist der Code "hingeschusselt"? Könntest du mir etwas genauer erklären was du damit meinst? Grüsse Rainer |
Re: Virtualstringtree Exception beim aufklappen
Schau dir doch einfach die Demos an, die beim VST dabei sind (Advanced Demo). Die deckt eigentlich alles ab.
|
Re: Virtualstringtree Exception beim aufklappen
Hallo,
beim neuesten Installationsteil zum VST sind keine Beispiele mehr dabei und die alten funktionieren nicht mehr komplett. Man kann damit eigentlich nichts mehr anfangen. Uminstallieren mag ich das Ganze auch nicht. Noch etwas: Lass doch bitte, in deinen Beiträgen, die bewertenden Äusserungen weg. Könnte sein, dass du damit jemanden kränkst oder verletzt. Bitte antworte nicht mehr. Für mich ist das Thema erledigt. Grüsse Rainer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 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