WorkAreas是否在Delphi中使用ListViews?

Ali*_*ter 5 delphi listview

我一直在玩TListView,并一直试图弄清楚WorkAreas是如何工作的,以及它们对什么有用.似乎很少有文档(大惊喜).

有没有人成功使用过WorkAreas?如果是这样的话?

我一直在尝试以下内容:

  wa := ListView1.WorkAreas.Add;
  wa.DisplayName := 'Work Area 0';
  wa.Rect.Width := ListView1.Width div 2;
  wa.Rect.Height := ListView1.Height;
Run Code Online (Sandbox Code Playgroud)

这似乎创建了一个工作区域,您可以通过检查其WorkArea属性来确定项目是否与该工作区域相关联.

Ser*_*yuz 6

这是VCL对原生List-View控件工作区的支持.请参见列表 - 查看工作区域.该文档提供了可用于它们的示例:

[...]多个工作区域可用于在一个视图中创建不同区域.您可以在单个视图中创建具有不同含义的区域.例如,文件系统的视图可能具有用于读/写文件的区域和用于只读文件的另一区域.用户可以通过将项目放置在不同的工作区域来对项目进行分类.[...]

该文档还提到您可以在边缘附近创建空边框或导致滚动条通常没有使用工作区域.

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, 0,
              ListView1.ClientWidth div 2, ListView1.ClientHeight div 2 + 10);
  R2 := Rect(ListView1.ClientWidth div 2 + 1, 0,
              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;
Run Code Online (Sandbox Code Playgroud)


初步观点:
在此输入图像描述
按下按钮后:
在此输入图像描述

请注意,在第一张图片中,"第5项"不在任何工作区域.在按钮单击处理程序中,我尝试将所有五个项目放在"右上角"工作区中.在"第5项"放在那里之后,控制决定踢出"第1项",因为所有5项都不合适.现在应该很明显我从未使用过工作区域,但我故意用这个例子来指出可能的怪癖.我所期望的是文档中提到的滚动条.