È il supporto di VCL per le aree di lavoro del controllo List-View nativo. Vedi List-View Working Areas. La documentazione fornisce un esempio per quello che possono essere utilizzati per:
[...] aree di lavoro multipli possono essere utilizzati per la creazione di aree diverse all'interno di un'unica vista. Puoi creare aree in una singola vista che hanno significati diversi da . Ad esempio, una vista di un file system potrebbe avere un'area per i file di lettura/scrittura e un'altra area per i file di sola lettura. L'utente può categorizzare gli elementi posizionandoli in aree di lavoro differenti. [...]
La documentazione menziona anche che è possibile creare i bordi vuoti vicino a bordi o causare barre di scorrimento dove normalmente nessuno sarebbe utilizzando aree di lavoro.
Non sembra che manchi molto dalla documentazione di VCL. È possibile aggiungere e interrogare le aree di lavoro. Spostare un oggetto in una particolare area di lavoro o chiedere in quale area di lavoro vive. Niente è automatico, tutto ciò che devi fare da solo. Un oggetto non è associato a un'area di lavoro, devi spostarlo da solo (VCL esegue semplicemente un'iterazione sulle aree di lavoro e controlla le coordinate dell'articolo e dell'area per trovare l'area di lavoro in cui è inserito un elemento).
La parte di categorizzazione non è probabilmente estremamente utile, poiché è possibile mantenere le proprie regioni virtuali senza l'aiuto del controllo stesso. I bit relativi ai bordi e alle barre di scorrimento sono probabilmente più importanti. Ma non ho mai visto una cosa del genere implementata in un'applicazione, incluso il sistema operativo stesso. utilizzo
del campione per il controllo di layout:
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;
vista iniziale:
Dopo aver premuto il tasto:
Si noti che nella prima immagine "Articolo 5" non è in qualsiasi area di lavoro. Nel gestore di clic del pulsante ho provato a inserire tutti e cinque gli elementi nell'area di lavoro 'right-top'. Dopo che "Item 5" è stato messo lì, il controllo ha deciso di buttare fuori "Item-1" poiché tutti e cinque non si adattavano. Dovrebbe essere evidente ormai che non ho mai usato le aree di lavoro, ma ho volutamente dato questo esempio per poter indicare possibili stranezze. Quello che mi aspettavo era che una barra di scorrimento apparisse come menzionato nei documenti.
Speravo in un buon esempio di Delphi che avrebbe illuminato il loro utilizzo. – Alister
@Alister - Ho provato a mettere insieme un semplice esempio, non riesco a indovinare se sarà di aiuto anche se .. –