4

私は on を必要とするプログラムを構築しておりForm_CreateTListView呼び出されFileListた.\FilesTListView

4

3 に答える 3

16

あなたの質問には複数の部分があります。ここで概要を説明します。特定のステップについてサポートが必要な場合は、より具体的なフォローアップの質問を投稿してください。

  1. 「コンパイルされたプログラムの場所」が何を指しているかを判別します。

    EXE ファイルのフル パスを取得するには、 を呼び出しますParamStr(0)。その文字列から EXE ファイル名を削除して、ディレクトリ部分だけを取得するには、 を呼び出しますExtractFilePath。バックスラッシュ ( IncludeTrailingPathDelimiter) で終わっていることを確認してから、「ファイル」ディレクトリを追加します。

  2. ファイルのリストを取得します。

    FindFirstとを使用FindNextして、すべてのファイルを調べるループを作成します。名前には「.」が含まれます。および「..」相対ディレクトリ名なので、それらを除外したい場合があります。ファイルは特定の順序で列挙されていないことに注意してください。たとえば、アルファベット順に並べ替える必要がある場合は、自分で行う必要があります。(テストではアルファベット順に表示される場合がありますが、常にそうであるとは限りません。)

    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. コントロールにノードを追加して、ファイルを表します。

    DoSomethingWithFile上記の仮想関数でこれを実行したい場合があります。リスト ビューのItemsプロパティを使用して、新しいアイテムを追加するなど、アイテムを操作します。

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

    TListItem追加のプロパティがあります。詳細については、ドキュメントを確認してください。このSubItemsプロパティは、1 つのノードに対して複数の列が存在する可能性がある "レポート" モードでリスト ビューを表示している場合に便利です。

  4. 画像をアイテムに関連付けます。

    リスト ビュー内のノードのイメージは、関連するイメージ リストから取得されLargeImagesますSmallImages。フォーム上の1 つ以上のTImageListコンポーネントを参照します。そこにアイコン画像を配置し、アイテムのImageIndexプロパティを対応する番号に割り当てます。

プログラムをどれだけ精巧なものにしたいかによってはTShellListView、上記のすべての作業を自分で行う代わりに、Delphi のコントロールを使用したい場合があります。

于 2010-01-07T15:49:55.790 に答える
2

2 つの画像 (ファイル用に 1 つ、ディレクトリ用に 1 つ) を含むフォームに TImagelist をドロップし、TImagelist を TListviews の LargeImages プロパティに割り当てると、次のコードを使用できます。

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;

次に、さまざまなファイル タイプの TImageList にさまざまな画像を追加し、ExtractFileExt(SR.Name) を使用してファイル拡張子を取得することで、これを構築できます。

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;
于 2010-01-07T15:43:18.690 に答える
1

行を描画するときに画像を表示する必要があります。

これはあなたにアイデアを与えるはずです: http://www.delphidabbler.com/articles?article=16 http://delphi.about.com/od/delphitips2008/qt/lv_checkbox_bmp.htm

唯一の違いは、アイコン/画像を描画することです。ここでは、グリッドでそれを行う方法を学びます: http://delphi.about.com/library/weekly/aa032205a.htm したがって、両方からアイデアを得ることができます。

于 2010-01-07T15:14:29.997 に答える