Agregar columnas, como vemos, es simple.
En este ejemplo, la lista debe verse así, en la primer columna en nombre del archivo, la segunda el tamaño y la tercera la fecha y hora.
Hay que ajustar un poco la lista (TListView) desde el inspector de objetos:
TListView
AutoSort:=True
ColumnClick:=True
Columns:=3 items
ReadOnly:=True
ShowColumnHeader:=True
ScrollBars:=ssAutoBoth
SmallImages:=ImageList1
SortColumn:=0
ViewStyle:=vsReport
Y también la lista de imágenes (TImageList):
TImageList
Height:=24
Width:=24
Los imágenes para la lista:
Si trabajamos con columnas necesitamos una lista de ítems (TListItem) con la cual agregaremos los subítems:
Por ejemplo:
var
li:TListItem;
begin
li:=lista.Items.Add; //Crea el ítem y lo agrega a Lista (TListView)
li.Caption:='archivo.pas';
li.SubItems.Add('2772');
li.SubItems.Add('20-10-2018 15:30:58');
Como vemos no necesitamos instanciar la clase TListItem porque lo hace la función Add, su resultado es precisamente la instanciación de la variable:
function TListItems.Add: TListItem;
begin
if Assigned(Owner) then
Result := Owner.CreateListItem
else
Result := TListItem.Create(Self);
AddItem(Result);
end;
Siempre es bueno revisar el código fuente.
El código para llenar la lista es el siguiente:
procedure TForm1.MostrarArchivos;
var
Arch:TSearchRec;
li:TListItem;
den:String='';
begin
lista.Clear;
opciones:=GetOpciones;
case opciones of
0 : if FindFirst(arbol.Path+'*',faHidden or faDirectory,Arch)<>0 then Exit; //Si encontró devuelve 0 cero.
1 : if FindFirst(arbol.Path+'*',faDirectory,Arch)<>0 then Exit;
2 : if FindFirst(arbol.Path+'*',not faHidden and not faDirectory,Arch)<>0 then Exit;
3 : if FindFirst(arbol.Path+'*',faHidden and not faDirectory,Arch)<>0 then Exit;
end;
repeat
if ((Arch.Name<>'.') and (Arch.Name<>'..')) then //Evita los directorios ocultos en Linux
begin
li:=lista.Items.Add;
li.Caption:=Arch.Name;
if (Arch.Attr and faDirectory)<>0 then
begin
li.ImageIndex:=0;
li.SubItems.Add('--');
end
else
begin
li.ImageIndex:=1;
li.SubItems.Add(FormatFloat('0.00',Tamanio(den,Arch.Size))+' '+den);
end;
li.SubItems.Add(DateTimeToStr(FileDateToDateTime(Arch.Time)));
end;
until FindNext(Arch)<>0;
FindClose(Arch);
lista.Sort;
end;
La primer columna corresponde al texto del item, en este caso, li.Caption, las restantes son subitems y el texto se asigna mediante el métodos Add.
En cuanto a la imágenes que utilizamos como iconos las cargamos en li.ImageIndex siendo 0 para carpetas y 1 para archivos.
Para obtener los datos de una lista del tipo TListView también lo hacemos mediante la clase TListItem, por ejemplo:
li:=Lista.Items[i];
ShowMessage(li.Caption);
Descargar código fuente : TListView_Columns.7z
No hay comentarios:
Publicar un comentario