【问题标题】:is there a virtual Listbox with headers in Delphi XE?Delphi XE 中是否有带有标题的虚拟列表框?
【发布时间】:2011-10-04 03:46:17
【问题描述】:

抱歉,这个背景有点复杂...我正在将 D5 项目转换为 DXE...它有一个包含数千个项目的列表框。每次在搜索框中击键时,都会对这些项目进行完整的渐进式文本搜索。在 D5(预虚拟列表)中,我必须使用 LMD 列表框(因为列表框中有几个带有标题的列)、一个单独的滚动条和一个记录数组来制作我自己的虚拟列表框。然后,当用户浏览搜索结果或修改搜索时,将填充列表框。这表现得非常好,但是由于现在虚拟列表框是 Delphi 的原生列表框,我打算将我的自定义列表框转换为原生列表框,但我找不到具有虚拟功能的标题的列表框组件。帮助?

是否有可用的组件具有虚拟列表和标题/列?

我忘了提及:我知道 Soft Gems VirtualTreeView 组件 - 这些非常棒,可能是我将要使用的,但是...... DXE 有没有办法在没有 3rd 方实用程序的情况下完成此任务?我担心我在 DXE 中遗漏了一些明显的东西,因为我只使用了大约一个月。

【问题讨论】:

  • 您可以在虚拟模式下使用 TListView。该示例应该(我希望)在您的 Delphi 的 \Demos\Virtual Listview 目录中可用。
  • 带有制表位 + 标题控件的列表框将为您提供所需的结果
  • 您也可以在虚拟模式下使用TListBox:将Style设置为lbVirtuallbVirtualOwnerDraw
  • @TOndrej OP 非常了解 Delphi 中的原生虚拟列表框,但缺少列标题。

标签: delphi header listbox virtual delphi-xe


【解决方案1】:

TListView 是 Windows 列表视图公共控件的精简包装。以报告视图样式在虚拟模式下运行它,以实现我相信您所要求的。


为了设置一个虚拟列表视图,您需要将OwnerData 设置为True 并提供一个OnData 事件处理程序。

procedure TVirtualListViewForm.FormCreate(Sender: TObject);
begin
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.Add.Caption := 'Column1';
  ListView1.Columns.Add.Caption := 'Column2';
  ListView1.OwnerData := True;
  ListView1.OnData := ListViewData;
  ListView1.Items.Count := 42;
end;

procedure TVirtualListViewForm.ListViewData(Sender: TObject; Item: TListItem);
begin
  Item.Caption := Format('Column 0, index %d', [Item.Index]);
  Item.SubItems.Add(Format('Column 1, index %d', [Item.Index]));
end;

根据您的需要,可能需要OnDataFind 来实现渐进式文本搜索。

【讨论】:

  • 我可以看到如何编辑 TListView 的视图样式,但看不到如何在虚拟模式下运行它。我错过了什么?
  • 为了进一步澄清......“VirtualMode”在我的 Delphi XE 中没有显示为 TListView 的设计时属性。即使我以编程方式尝试它:ListView1.VirtualMode := true 它指出 VirtualMode 是无效属性。我一定错过了一些明显的东西,但对于我的生活,我找不到它。救命!?!?
  • 抱歉,我错过了您的评论。您需要实现 OnData 事件处理程序,并且可能还需要实现它的几个亲戚。你应该能够从我认为的文档中解决它。
  • @b-p 我已经编辑了答案,为您提供一些取得进展的提示。我希望它有所帮助。
  • 你太棒了!等我从“其他工作”回来后试试
【解决方案2】:

您可以使用我的组件 TDzListHeader,在 GitHub 上可用:https://github.com/digao-dalpiaz/DzListHeader

此组件允许您在 TCollection 中创建列,您应该在 TListHeader 中放置一个 TListBox,然后链接它们。

DzListHeader example

所有用法和详细文档都可以在 github 项目中找到。

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    相关资源
    最近更新 更多