2012-05-29 8 views
5

He estado jugando con TListView y he estado tratando de averiguar cómo funciona WorkAreas, y para qué son útiles. Parece que hay muy poca documentación (gran sorpresa) sobre eso.¿Funcionan WorkAreas en ListViews en Delphi?

¿Alguien ha utilizado con éxito WorkAreas? Si es así ¿para qué?

He estado tratando de cosas como la siguiente:

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

que parece crear una región de área de trabajo, y se puede determinar si un elemento está asociado con esa área de trabajo mediante la comprobación de su propiedad Área de Trabajo.

Respuesta

6

Es el soporte de la VCL para las áreas de trabajo del control List-View nativo. Ver List-View Working Areas. La documentación da un ejemplo de lo que pueden ser utilizados para:

[...] áreas de trabajo múltiples se pueden utilizar para la creación de diferentes áreas dentro de una sola vista. Puede crear áreas en una sola vista que tengan diferentes significados . Por ejemplo, una vista de un sistema de archivos puede tener un área para archivos de lectura/escritura y otra área para archivos de solo lectura. El usuario puede categorizar elementos colocándolos en diferentes áreas de trabajo. [...]

La documentación también menciona que se pueden crear bordes vacíos cerca de los bordes o hacer que las barras de desplazamiento, donde normalmente no sería mediante el uso de las áreas de trabajo.

Parece que no falta mucho en la documentación de VCL. Puede agregar y consultar áreas de trabajo. Reubique un artículo en un área de trabajo particular o pregúntele en qué área de trabajo vive. Nada es automático, todo lo que tiene que hacer usted mismo. Un elemento no está asociado con un área de trabajo, usted tiene que moverlo usted mismo (VCL simplemente itera sobre las áreas de trabajo y verifica las coordenadas del elemento y el área para encontrar el área de trabajo en la que se encuentra).

La parte de categorización probablemente no sea extremadamente útil, ya que uno puede mantener sus propias regiones virtuales sin la ayuda del control en sí mismo. Los bits sobre los bordes y las barras de desplazamiento son probablemente más importantes. Pero nunca vi tal cosa implementada en una aplicación, incluido el sistema operativo en sí. el uso


de muestras para el control de la disposición:

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 inicial:
enter image description here
Después de pulsar el botón:
enter image description here

Tenga en cuenta que en la primera foto "artículo 5" no es en cualquier área de trabajo. En el controlador de clic de botón, traté de colocar los cinco elementos en el área de trabajo 'derecha-arriba'. Después de colocar el "Artículo 5" allí, el control ha decidido expulsar al "Artículo-1" ya que los cinco no encajaban. Debería ser evidente a estas alturas que nunca he usado áreas de trabajo, pero a propósito di este ejemplo para poder señalar posibles caprichos. Lo que esperaba era que apareciera una barra de desplazamiento como se menciona en los documentos.

+0

Esperaba un buen ejemplo de Delphi que iluminara su uso. – Alister

+0

@Alister - Traté de armar un simple ejemplo, no puedo adivinar si será de ayuda, aunque .. –