Pregunta

Estoy construyendo un programa que necesita en Form_Create, rellenar una llamada TListView FileList, el directorio que quiero para poblar es donde el programa compilado es + \Files, como nunca he usado un TListView Quiero saber cómo hacer esto?

¿Fue útil?

Solución

Hay varias piezas a su pregunta. Voy a ofrecer un vista general aquí. Si necesita ayuda en cualquier paso en particular, por favor enviar una pregunta más específica de seguimiento.

  1. Determinar qué "donde el programa compilado es" se refiere a.

    Para obtener la ruta completa del archivo EXE, llame ParamStr(0) . Para quitar el nombre del archivo EXE de esa cadena, por lo que tiene solo la parte del directorio, llame ExtractFilePath . Asegúrese de que se termina con una barra invertida ( IncludeTrailingPathDelimiter ) y luego agregar su "Archivos" directorio.

  2. Obtener una lista de archivos.

    FindFirst y FindNext para hacer un bucle que se ve en todos los archivos. Los nombres incluirán el "" y ".." nombres de directorio relativos, por lo que es posible que desee excluirlos. Ten en cuenta que los archivos no se enumeran en un orden particular. Si necesitas ellos ordenados alfabéticamente, por ejemplo, tendrá que hacerlo usted mismo. (Pueden aparecen a estar en orden alfabético en sus pruebas, pero eso no siempre es cierto.)

    var
      Rec: TSearchRec;
    begin
      if FindFirst(path + '\*', faAnyFile, Rec) = 0 then try
        repeat
          if (Rec.Name = '.') or (Rec.Name = '..') then
            continue;
          if (Rec.Attr and faVolumeID) = faVolumeID then
            continue; // nothing useful to do with volume IDs
          if (Rec.Attr and faHidden) = faHidden then
            continue; // honor the OS "hidden" setting
          if (Rec.Attr and faDirectory) = faDirectory then
            ; // This is a directory. Might want to do something special.
          DoSomethingWithFile(Rec.Name);
        until FindNext(Rec) <> 0;
      finally
        SysUtils.FindClose(Rec);
      end;
    end;
    
  3. Agregar nodos al control para representar los archivos.

    Es posible que desee hacer esto en la función DoSomethingWithFile hipotética que he mencionado anteriormente. Usar Items la propiedad de la vista de lista para hacer cosas con los artículos, tales como añadir otras nuevas.

    var
      Item: TListItem;
    begin
      Item := ListView.Items.Add;
      Item.Caption := FileName;
    end;
    

    TListItem tiene propiedades adicionales; comprobar la documentación para más detalles. El SubItems propiedad es útil si usted está mostrando la vista de lista en " informe modo", donde puede haber varias columnas de un solo nodo.

  4. imágenes asociados con los artículos.

    Imágenes Nodos en una vista de lista provienen de las listas de imágenes asociadas, LargeImages y SmallImages . Se refieren a uno o más TImageList componentes en su formulario. Pon las imágenes de iconos allí, y luego asignar propiedades ImageIndex los artículos a los números correspondientes.

En función de cómo elaborar desea que su programa sea, puede que desee utilizar el control TShellListView de Delphi en lugar de hacer todo el trabajo por encima de sí mismo.

Otros consejos

Si se le cae un TImageList en el formulario con dos imágenes en archivos (una a proa y en los directorios), a continuación, asignar el TImageList a la propiedad TListviews LargeImages, puede utilizar el siguiente código.

procedure TForm2.Button1Click(Sender: TObject);
    var li:TListItem;
    SR: TSearchRec;
begin
    FileList.Items.BeginUpdate;
    try
        FileList.Items.Clear;

        FindFirst(ExtractFilePath(Application.ExeName) +'*.*', faAnyFile, SR);
        try
            repeat
                li :=  FileList.Items.Add;
                li.Caption := SR.Name;

                if ((SR.Attr and faDirectory) <> 0)  then li.ImageIndex := 1
                else li.ImageIndex := 0;

            until (FindNext(SR) <> 0);
        finally
            FindClose(SR);
        end;
    finally
        FileList.Items.EndUpdate;
    end;
end;

A continuación, puede construir sobre esto añadiendo diferentes imágenes al TImageList para diferentes tipos de archivos, y el uso de ExtractFileExt (SR.Name) para obtener la extensión de los archivos

if ((SR.Attr and faDirectory) <> 0)  then li.ImageIndex := 1
else if lowercase(ExtractFileExt(SR.Name)) = '.png' then li.ImageIndex := 2
else if lowercase(ExtractFileExt(SR.Name)) = '.pdf' then li.ImageIndex := 3
else li.ImageIndex := 0;

Tendrá que mostrar las imágenes en la elaboración de las filas.

Esto debe darle una idea: http://www.delphidabbler.com/articles?article=16 http://delphi.about.com/od/delphitips2008/qt/lv_checkbox_bmp. htm

La única diferencia es que vamos a dibujar un icono / imagen. Aquí se aprende cómo hacerlo en una cuadrícula: http://delphi.about.com /library/weekly/aa032205a.htm Por lo tanto se puede obtener la idea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top