質問

必要なプログラムを構築しています Form_Create, を入力します。 TListView 呼ばれた FileList, 、移入したいディレクトリは、コンパイルされたプログラムが存在する場所です。 \Files, 、私は使ったことがないので、 TListView その方法を知りたいのですが?

役に立ちましたか?

解決

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

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

    EXE ファイルのフルパスを取得するには、次のコマンドを呼び出します。 ParamStr(0). 。その文字列から EXE ファイル名を削除してディレクトリ部分だけを得るには、次のように呼び出します。 ExtractFilePath. 。バックスラッシュ (IncludeTrailingPathDelimiter) そして、「Files」ディレクトリを追加します。

  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 このプロパティは、単一ノードに複数の列が存在する可能性がある「レポート」モードでリスト ビューを表示している場合に便利です。

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

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

プログラムをどの程度精巧にしたいかによっては、Delphi の使用をお勧めします。 TShellListView 上記の作業をすべて自分で行うのではなく、制御します。

他のヒント

あなたがTListviews LargeImagesプロパティにTImageListのを割り当て、(ディレクトリ用に1つのフォアファイルなど)に二つの画像をフォームにTImageListのをドロップする場合は、

、あなたは以下のコードを使用することができます。

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;

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

これはあなたのアイデアを与える必要があります。 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する だから、両方からあなたのアイデアを得ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top