0

TVirtualStringTreeにいくつかの新しいノードを挿入する必要があります。UserDataパラメーターを指定してInsertNodeメソッドを使用します。ただし、ツリーにはデータを表示できません。GetText / FreeNodeイベントのユーザーデータを取得するにはどうすればよいですか?

  TMyData = record
    Name: string;
    size: Integer;
  end;
  PMyData = ^TMyData;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  VirtualStringTree1.NodeDataSize := SizeOf(TMyData);
  Randomize;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Data: PMyData;
  Node: PVirtualNode;
begin
  New(Data);
  Data.Name := DateTimeToStr(now);
  Data.size := Random(100);
  Node := VirtualStringTree1.InsertNode(nil, amInsertAfter, Data);
end;

procedure TForm2.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node:
    PVirtualNode);
var
  Data: PMyData;
begin
  Data := Sender.GetNodeData(Node);
  Data.Name := '';
end;

procedure TForm2.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node:
    PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText:
    WideString);
var
  Data: PMyData;
begin
  Data := Sender.GetNodeData(Node);
  case Column of
    0: CellText := Data.Name;
    1: CellText := IntToStr(Data.size);
  end;
end;
4

1 に答える 1

6

ツリーにユーザーデータを挿入すると、ポインターはノードの内部レコードに保存されます。GetNodeData渡したポインタを返しません。ポインタが格納されているメモリへのポインタです。したがって、それを逆参照する必要があります。

Data := PMyData(Sender.GetNodeData(Node)^);
于 2011-05-18T10:30:05.843 に答える