Einzelnen Beitrag anzeigen

WS1976
(Gast)

n/a Beiträge
 
#1

Problem mit Virtualtreeview

  Alt 15. Jan 2009, 05:53
Hallo,

ich habe angefangen mit Virtualtreeview zu spielen. Habe alles gemacht wie im Tutorial.
Nun ergibt sich folgendes Problem:
1.) Ich habe die Klasse TTreedataclass deklariert.
2.) Ich fülle in button3click das entsprechende Object mit Daten und weise es dann einem Knoten von Virtualstringtree zu (VST)
3.) Im Event VSTGetImageIndex versuche ich wieder an die Daten heranzukommen. Funktioniert aber nicht. In to steht immer Schrott und Imageindex immer auf 0
Mach ich nur einen Denkfehler oder was läuft da schief?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, VirtualTrees, ImgList;

type
  TTreedataclass=class
  public
    imageindex:integer;
    test:integer;
    FObject : TObject;
  end;

  PTreeData = ^TTreeData;
    TTreeData = record
    imageindex:integer;
    Fcaption:string;
    FObject : TObject;
  end;

  TForm1 = class(TForm)
    VST: TVirtualStringTree;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ImageList1: TImageList;
    procedure Button1Click(Sender: TObject);
    procedure VSTClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
      var ImageIndex: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; ARecord: TTreeData): PVirtualNode;
var Data: PTreeData;
begin
  Result:=AVST.AddChild(ANode);
  Data:=AVST.GetNodeData(Result);
  Avst.ValidateNode(Result, False);
  Data^.FCaption:=ARecord.FCaption;
end;//

function AddVSTObject(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; AObject: TObject): PVirtualNode;
var Data: PTreeData;
begin
  Result:=AVST.AddChild(ANode);
    AVST.ValidateNode(Result,False);
    Data:=AVST.GetNodeData(Result);
    Data^.FObject:=AObject;
end;//

procedure TForm1.Button1Click(Sender: TObject);
var Node: PVirtualNode;
     i:integer;
begin
  Node:=VST.AddChild(nil);
  VST.AddChild(Node);
  for I:=1 to 100 do
     Begin
       Node:=VST.AddChild(Node);
       VST.ChildCount[Node]:=10;
     End;
end;

procedure TForm1.Button2Click(Sender: TObject);
var I: Integer; TreeData: TTreeData;
begin
  VST.NodeDataSize:=SizeOf(TTreeData);
  VST.BeginUpdate;
  for I:=0 to 100 do
    begin
      TreeData.FCaption:='Node-Nummer: '+IntToStr(I);
      AddVSTStructure(VST,nil,TreeData);
    end;
  VST.EndUpdate;
end;

procedure TForm1.Button3Click(Sender: TObject);
var I: Integer; TreeObject: TTreeDataClass;
begin
  VST.NodeDataSize:=SizeOf(TTreeData);
    for I:=1 to 100 do
    begin
      TreeObject:=TTreeDataClass.Create;
      try
        TreeObject.imageindex:=I-1;// TreeObject.TestInt:=Random(1000);
        TreeObject.test:=223;
        AddVSTObject(VST,nil,TreeObject);
      except
        TreeObject.Free;
      end;
    end;
end;

procedure TForm1.VSTClick(Sender: TObject);
var Node: PVirtualNode;
begin
  Node:=VST.FocusedNode;
  if not Assigned(Node) then Exit;
  Showmessage(IntToStr(VST.GetNodeLevel(Node)));
end;

procedure TForm1.VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
  var ImageIndex: Integer);
var
  data : TTreedataclass;t0:integer;
begin
  if column = 0 then
  begin
     Data:=VST.GetNodeData(Node);
     ImageIndex := data.ImageIndex;
     t0:=data.test;
  end else ImageIndex := -1;
end;

end.
Grüsse
Rainer
  Mit Zitat antworten Zitat