WorkAreas是否在Delphi中使用ListViews?
我一直在玩TListView,并一直试图弄清楚WorkAreas是如何工作的,以及它们对什么有用.似乎很少有文档(大惊喜).
有没有人成功使用过WorkAreas? 我一直在尝试以下内容: wa := ListView1.WorkAreas.Add; wa.DisplayName := 'Work Area 0'; wa.Rect.Width := ListView1.Width div 2; wa.Rect.Height := ListView1.Height; 这似乎创建了一个工作区域,您可以通过检查其WorkArea属性来确定项目是否与该工作区域相关联. 解决方法
这是VCL对原生List-View控件工作区的支持.请参阅
List-View Working Areas.文档提供了可用于它们的示例:
该文档还提到您可以在边缘附近创建空边框或导致滚动条通常没有使用工作区域. VCL的文档中似乎没有太多遗漏.您可以添加和查询工作区域.将项目重新定位到特定的工作区域,或者询问它在哪个工作区域.没有什么是自动的,你必须自己做.项目不与工作区域相关联,您必须自己移动它(VCL只是迭代工作区域并检查项目和区域的坐标以找到项目所在的工作区域). 分类部分可能不是非常有用,因为可以在没有控件本身的帮助下保留他/她自己的虚拟区域.关于边和滚动条的位可能更重要.但是我从来没有在应用程序中看到过这样的东西,包括操作系统本身. 布局控件的示例用法: type TForm1 = class(TForm) Button1: TButton; ListView1: TListView; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation uses commctrl; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var R1,R2: TRect; begin R1 := Rect(0,ListView1.ClientWidth div 2,ListView1.ClientHeight div 2 + 10); R2 := Rect(ListView1.ClientWidth div 2 + 1,ListView1.ClientWidth - 1,ListView1.ClientHeight div 2 + 10); ListView1.WorkAreas.Add.Rect := R1; ListView1.WorkAreas.Add.Rect := R2; ListView1.AddItem('Item 1',nil); ListView1.AddItem('Item 2',nil); ListView1.AddItem('Item 3',nil); ListView1.AddItem('Item 4',nil); ListView1.AddItem('Item 5',nil); end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to ListView1.Items.Count - 1 do begin ListView1.Items[i].Left := ListView1.WorkAreas[1].Rect.Left; ListView1.Items[i].Top := ListView1.WorkAreas[1].Rect.Top; end; ListView1.Arrange(arAlignTop); end; 初步观点: 请注意,在第一张图片中,“第5项”不在任何工作区域.在按钮单击处理程序中,我尝试将所有五个项目放在“右上角”工作区中.在“第5项”放在那里之后,控制决定踢出“第1项”,因为所有5项都不合适.现在应该很明显我从未使用过工作区域,但我故意用这个例子来指出可能的怪癖.我所期望的是文档中提到的滚动条. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |