【问题标题】:TVirtualStringTree is displaying incorrect data i.e displaying "node" in each cell. How to display correct data?TVirtualStringTree 显示不正确的数据,即在每个单元格中显示“节点”。如何显示正确的数据?
【发布时间】:2021-09-17 16:12:55
【问题描述】:

我遵循了在 TVirtualStringTree 上显示数据的传统做法。但它仅在每个单元格中显示字符串“节点”。有人能告诉我我在这里想念什么吗? 提前致谢。

我的代码:

type
  TRecFileDirectory = record
    FileDirectory: WideString;
    FileDirectoryLock: wordbool;
  end;

  TPRecFileDirectory = ^TRecFileDirectory;

implementation

procedure TForm2.btn4Click(Sender: TObject);
var
  I: Integer;
  NewNode: PVirtualNode;
  ptrFileDir: TPRecFileDirectory;
begin
  vsTree1.BeginUpdate;
  for I := 0 to Length(arrFileDirectory)-1 do
  begin
    NewNode := vsTree1.AddChild(nil);
    ptrFileDir := vsTree1.GetNodeData(NewNode);
    ptrFileDir^.FileDirectory := arrFileDirectory[I].FileDirectory;
    ptrFileDir^.FileDirectoryLock := arrFileDirectory[I].FileDirectoryLock;
  end;
  vsTree1.EndUpdate;
  btn4.caption := btn4.caption+' DONE';
end;

【问题讨论】:

  • 告诉树如何渲染每个节点TRecFileDirectory 的内容的代码在哪里?仅将自定义数据存储在每个节点内是不够的,您还必须告诉树如何显示它。这就是“虚拟”UI 控件的全部意义所在。
  • 谢谢。我明白了。您能否提供任何代码 sn-p 或链接来演示如何告诉树显示数据?
  • 我认为您正在解释 OnGetText 将在其中完成自定义数据到网格的映射。我试过了,它部分工作。扔了一些 AV,但我认为是因为其他原因。无论如何,谢谢。
  • "我想你是在解释 OnGetText"- 是的。我不知道确切的名字,我不是 VST 用户。

标签: delphi tvirtualstringtree


【解决方案1】:

您需要为OnGetText 事件实现一个事件处理程序,该处理程序根据提供的列和节点从您的数据中提取要显示的字符串。例如:

procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
  MyData: TPRecFileDirectory;
begin
  MyData := Node.GetData();
  if Column = 0 then
    CellText := MyData.FileDirectory; 
end;

【讨论】:

    【解决方案2】:

    DefaultText 属性设置为空字符串,例如在代码或 Inspector 中

    【讨论】:

    • Tx 用于响应。尝试将 DefaultText 设置为空字符串但没有运气:(
    • DefaultText 属性控制在未处理 OnGetText 事件的情况下要显示的文本。因此,如果您想显示其他内容,请处理 OnGetText 事件。
    • 哦,好的,OnGetText 事件代码已实现,现在部分工作。感谢您的帮助。由于数据,OnGetText 仍然会抛出一些 AV。现在,我的 VST 有 3 列数据类型字符串,我的记录有 3 个字符串 var。我不确定它为什么会抛出 AV。
    • 您还应该处理 OnGetNodeDataSize 事件并返回如下内容: NodeDataSize := SizeOf(TPRecFileDirectory);或者设置树视图的 NodeDataSize 属性。
    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多