Delphi XE中是否有带有标题的虚拟列表框?

Delphi XE中是否有带有标题的虚拟列表框?,delphi,header,listbox,virtual,delphi-xe,Delphi,Header,Listbox,Virtual,Delphi Xe,对不起,这件事的背景有点复杂。。。我正在将D5项目转换为DXE。。。它有一个包含数千项的列表框。搜索框中的每一次按键都会对这些项目进行完整的渐进式文本搜索。在D5(预虚拟列表)中,我必须使用LMD listbox(因为listbox中有几个带有标题的列)、一个单独的滚动条和一个记录数组来创建自己的虚拟listbox。然后,当用户浏览搜索结果或修改搜索时,将填充列表框。这执行得非常好,但由于现在虚拟列表框是Delphi的本机组件,我打算将自定义列表框转换为本机组件,但我找不到具有虚拟功能的标题的列

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

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


我忘了提到:我知道软宝石组件-这些都是优秀的,可能是我将要使用的,但。。。在DXE中有没有一种方法可以在没有第三方实用程序的情况下实现这一点?我担心我在DXE中缺少了一些明显的东西,因为我只使用了大约一个月。

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
是围绕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
来实现渐进式文本搜索。

您可以使用我的组件TDzListHeader,可从GitHub获得:

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


github项目提供了所有用法和详细文档。

您可以使用我的组件TDzListHeader,github提供:

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


github项目提供了所有用法和详细文档。

您可以在虚拟模式下使用TListView。这个例子应该是(我希望)在您的Delphi的
\Demos\Virtual Listview
目录中提供。带有制表位+标题控件的列表框将提供所需的结果您也可以在虚拟模式下使用
TListBox
:将
Style
设置为
lbVirtual
lbVirtualOwnerDraw
@TOndrej OP非常了解Delphi中的本机虚拟列表框,但缺少列标题。您可以在虚拟模式下使用TListView。这个例子应该是(我希望)在您的Delphi的
\Demos\Virtual Listview
目录中提供。带有制表位+标题控件的列表框将提供所需的结果您也可以在虚拟模式下使用
TListBox
:将
Style
设置为
lbVirtual
lbVirtualOwnerDraw
@TOndrej OP非常了解Delphi中的本机虚拟列表框,但是缺少列标题。我可以看到如何编辑TListView的视图样式,但看不到如何在虚拟模式下运行它。我遗漏了什么?为了进一步澄清。。。在我的Delphi XE中,“VirtualMode”不显示为TListView的设计时属性。即使我以编程方式尝试它:
ListView1.VirtualMode:=true
它声明VirtualMode是无效属性。我肯定错过了一些显而易见的东西,但我一生都找不到。帮助对不起,我没有听到你的评论。您需要实现OnData事件处理程序,可能还需要实现它的几个相关项。我想你应该可以从文档中找到答案。@b-p我编辑了答案,给你一些进展的提示。我希望有帮助。你太棒了!当我从“其他工作”回来后,我将尝试它。我可以看到如何编辑TListView的视图样式,但看不到如何在虚拟模式下运行它。我遗漏了什么?为了进一步澄清。。。在我的Delphi XE中,“VirtualMode”不显示为TListView的设计时属性。即使我以编程方式尝试它:
ListView1.VirtualMode:=true
它声明VirtualMode是无效属性。我肯定错过了一些显而易见的东西,但我一生都找不到。帮助对不起,我没有听到你的评论。您需要实现OnData事件处理程序,可能还需要实现它的几个相关项。我想你应该可以从文档中找到答案。@b-p我编辑了答案,给你一些进展的提示。我希望有帮助。你太棒了!等我从“其他工作”回来后再试试