Einzelnen Beitrag anzeigen

WS1976
(Gast)

n/a Beiträge
 
#1

Virtualstringtree Exception beim aufklappen

  Alt 20. Jan 2009, 07:31
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:
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.
Grüsse
Rainer
  Mit Zitat antworten Zitat