這是VCL對原生列表視圖控件工作區域的支持。見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, 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;
初始視圖:
。注意,在第一圖像 「項目5」 不是:
按下該按鈕後在任何工作區域。在按鈕點擊處理程序中,我嘗試將所有五個項目放在「右上」工作區中。在「項目5」放置在那裏後,控制器決定推出「項目-1」,因爲所有五個都不合適。現在應該很明顯,我從來沒有使用過工作區域,但是我有目的地給出了這個例子來指出可能的怪癖。我期望的是滾動條出現在文檔中提到的位置。
我希望能有一個很好的Delphi例子來說明它們的用法。 – Alister
@Alister - 我試圖把一個簡單的例子放在一起,不能猜測它是否會有所幫助.. –