gpt4 book ai didi

delphi - 如何获取TVirtualStringTree中显示的节点数?

转载 作者:行者123 更新时间:2023-12-02 00:45:52 26 4
gpt4 key购买 nike

我需要在 TVirtualStringTree 中显示一个长数据库表(例如 50000 条记录)。为了减少查询执行时间,我限制了记录数,仅包含那些实际显示在树中的记录数。处理OnGetText的代码片段如下。问题是 VisibleCount 返回 50000 而不是 20-30,这破坏了这种方法。有没有办法正确地做到这一点?

procedure TContactsFrame.vstContactsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; 
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
begin
if vstContacts.GetNodeLevel(Node) = 0 then
CellText := 'Group'
else if vstContacts.GetNodeLevel(Node) = 1 then
begin
if Contacts[Node.Index].Index = -1 then
begin
// getting DB table values of visible records only
GetContacts(Node.Index + 1, Node.Index + 1 + vstContacts.VisibleCount, Contacts);
end;
CellText := Contacts[Node.Index].Name;
end;
end;

最佳答案

VisibleCount 为您提供设置了 vsVisible 标志的节点数(可见意味着不隐藏)。

要枚举 TreeView 中当前显示的节点,您可以使用 TopNodeBottomNode ,方式类似于:

var
Run, LastNode: PVirtualNode;
begin
LastNode := Treeview.GetNextVisible(Treeview.BottomNode);
Run := Treeview.TopNode;

while Assigned(Run) do
begin
// your processing here

Run := Treeview.GetNextVisible(Run);
if Run = LastNode then
Break;
end;
end;

关于delphi - 如何获取TVirtualStringTree中显示的节点数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55042005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com