VirtualStringTree:搜索类型不是字符串的文本
VirtualStringTree: Search for a text where type is not a String
我想对 VirtualStringTree
执行一个搜索过程,我想通过将搜索文本与来自节点而不是来自指针的文本进行比较来实现(例如 Data^.Column0
) 因为这并不总是 String
。
请帮我提出一个建议,让我按原样从节点取回文本。
为了更好地理解,请参阅下面的代码(我调整了来自 Lazarus 的示例)
type
PTreeData = ^TTreeData;
TTreeData = record
Column0: TDate; //Date
Column1: Integer; //Integer
Column2: String;
end;
procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
Data: PTreeData;
begin
Data := VST.GetNodeData(Node);
case Column of
0: CellText := DateToStr(Data^.Column0); //2015-05-11 or 11-05-2015
1: CellText := IntToStr(Data^.Column1) + ' days'; //22 days
2: CellText := Data^.Column2;
end;
end;
如果你想得到一个虚拟的树视图单元格文本,那么你可以使用Text
属性。这将在内部触发 OnGetText
事件,您将能够像返回文本一样获取文本以在树中显示:
var
S: string;
Node: PVirtualNode;
Column: TColumnIndex;
begin
...
S := VirtualStringTree.Text[Node, Column];
end;
我想对 VirtualStringTree
执行一个搜索过程,我想通过将搜索文本与来自节点而不是来自指针的文本进行比较来实现(例如 Data^.Column0
) 因为这并不总是 String
。
请帮我提出一个建议,让我按原样从节点取回文本。
为了更好地理解,请参阅下面的代码(我调整了来自 Lazarus 的示例)
type
PTreeData = ^TTreeData;
TTreeData = record
Column0: TDate; //Date
Column1: Integer; //Integer
Column2: String;
end;
procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
Data: PTreeData;
begin
Data := VST.GetNodeData(Node);
case Column of
0: CellText := DateToStr(Data^.Column0); //2015-05-11 or 11-05-2015
1: CellText := IntToStr(Data^.Column1) + ' days'; //22 days
2: CellText := Data^.Column2;
end;
end;
如果你想得到一个虚拟的树视图单元格文本,那么你可以使用Text
属性。这将在内部触发 OnGetText
事件,您将能够像返回文本一样获取文本以在树中显示:
var
S: string;
Node: PVirtualNode;
Column: TColumnIndex;
begin
...
S := VirtualStringTree.Text[Node, Column];
end;