2012-05-29 14 views
5

Ho giocato con TListView e ho cercato di capire come funziona WorkAreas e per cosa sono utili. Sembra che ci sia molta poca documentazione (grande sorpresa).Do WorkAreas funziona su ListViews in Delphi?

Qualcuno ha utilizzato con successo WorkAreas? Se sì, per cosa?

ho cercato le cose come la seguente:

wa := ListView1.WorkAreas.Add; 
    wa.DisplayName := 'Work Area 0'; 
    wa.Rect.Width := ListView1.Width div 2; 
    wa.Rect.Height := ListView1.Height; 

che sembra creare una regione zona di lavoro, e si può determinare se un elemento è associato a tale area di lavoro controllando la sua proprietà WorkArea.

risposta

6

È 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:
enter image description here
Dopo aver premuto il tasto:
enter image description here

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.

+0

Speravo in un buon esempio di Delphi che avrebbe illuminato il loro utilizzo. – Alister

+0

@Alister - Ho provato a mettere insieme un semplice esempio, non riesco a indovinare se sarà di aiuto anche se .. –