Domanda

Sto costruendo un programma che ha bisogno di su Form_Create, popolare una TListView chiamato FileList, la directory che voglio per popolare è dove il programma compilato è + \Files, come non ho mai usato un TListView voglio sapere come fare questo?

È stato utile?

Soluzione

Non ci sono più parti per la tua domanda. Fornirò un Panoramica qui. Se hai bisogno di aiuto in qualsiasi fase particolare, si prega di inviare una più specifica domanda di follow-up.

  1. Determinare quali "dove il programma compilato è" si riferisce a.

    Per ottenere il percorso completo del file EXE, chiamare ParamStr(0) . Per rimuovere il nome del file EXE da quella stringa, in modo da avere solo la parte di directory, chiamare ExtractFilePath . Assicurarsi che termina con una barra rovesciata ( IncludeTrailingPathDelimiter ) e quindi aggiungere il vostro "File" directory.

  2. Ottenere un elenco di file.

    FindFirst e FindNext per fare un ciclo che guarda a tutti i file. I nomi includeranno il "" e ".." i nomi delle directory relative, così si potrebbe desiderare di escluderli. Attenzione che i file non vengono enumerati in un ordine particolare. Se avete bisogno di loro in ordine alfabetico, per esempio, è necessario farlo da soli. (Possono appaiono per essere in ordine alfabetico nei test, ma che non sarà sempre vero.)

    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. Aggiungi nodi al controllo per rappresentare i file.

    Si potrebbe voler fare questo nella funzione ipotetica DoSomethingWithFile ho citato sopra. Utilizzare proprietà Items della visualizzazione elenco per fare le cose con gli oggetti, come ad esempio aggiungerne di nuovi.

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

    TListItem ha proprietà aggiuntive; controllare la documentazione per i dettagli. La proprietà SubItems è utile se si sta mostrando la visualizzazione elenco in " report in modalità", dove non ci può essere più colonne per un singolo nodo.

  4. immagini associati con gli oggetti.

    immagini nodi in una vista elenco provenire dalle liste immagine associati, LargeImages e SmallImages . Essi si riferiscono a uno o più TImageList componenti sul modulo. Metti le immagini icona lì, e quindi assegnare ImageIndex proprietà le voci a i numeri corrispondenti.

A seconda di come elaborato si desidera che il programma sia, si potrebbe desiderare di utilizzare il controllo TShellListView di Delphi invece di fare tutto il lavoro da soli sopra.

Altri suggerimenti

Se si lascia cadere un TImageList sul modulo con due immagini in (file uno a prua e su per le directory), quindi assegnare il TImageList alla proprietà TListviews LargeImages, è possibile utilizzare il codice qui sotto.

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;

È quindi possibile costruire su questo con l'aggiunta di immagini differenti per il TImageList per i diversi tipi di file, e l'utilizzo di ExtractFileExt (SR.Name) per ottenere l'estensione dei file

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;

Avrete bisogno di mostrare le immagini al momento di elaborare le righe.

Questo dovrebbe dare un'idea: http://www.delphidabbler.com/articles?article=16 http://delphi.about.com/od/delphitips2008/qt/lv_checkbox_bmp. htm

L'unica differenza è che si disegna un'icona / immagine. Qui si impara come si fa in una griglia: http://delphi.about.com /library/weekly/aa032205a.htm Quindi, da entrambi è possibile ottenere l'idea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top