TListView 上のディレクトリ上のファイルの一覧表示
質問
必要なプログラムを構築しています Form_Create
, を入力します。 TListView
呼ばれた FileList
, 、移入したいディレクトリは、コンパイルされたプログラムが存在する場所です。 \Files
, 、私は使ったことがないので、 TListView
その方法を知りたいのですが?
解決
あなたの質問には複数の部分があります。提供させていただきます 概要 ここ。特定の手順についてサポートが必要な場合は、より具体的なフォローアップの質問を投稿してください。
「コンパイルされたプログラムの場所」が何を指すのかを判断します。
EXE ファイルのフルパスを取得するには、次のコマンドを呼び出します。
ParamStr(0)
. 。その文字列から EXE ファイル名を削除してディレクトリ部分だけを得るには、次のように呼び出します。ExtractFilePath
. 。バックスラッシュ (IncludeTrailingPathDelimiter
) そして、「Files」ディレクトリを追加します。ファイルのリストを取得します。
使用
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;
ファイルを表すノードをコントロールに追加します。
これを仮説で実行したいと思うかもしれません
DoSomethingWithFile
上で述べた機能。リストビューを使用するItems
新しいアイテムの追加など、アイテムを操作するためのプロパティ。var Item: TListItem; begin Item := ListView.Items.Add; Item.Caption := FileName; end;
TListItem
追加のプロパティがあります。詳細についてはドキュメントを確認してください。のSubItems
このプロパティは、単一ノードに複数の列が存在する可能性がある「レポート」モードでリスト ビューを表示している場合に便利です。画像をアイテムに関連付けます。
リスト ビュー内のノードのイメージは、関連付けられたイメージ リストから取得されます。
LargeImages
そしてSmallImages
. 。それらは 1 つ以上のことを指しますTImageList
フォーム上のコンポーネント。そこにアイコン画像を配置し、項目を割り当てます。ImageIndex
プロパティを対応する番号に割り当てます。
プログラムをどの程度精巧にしたいかによっては、Delphi の使用をお勧めします。 TShellListView
上記の作業をすべて自分で行うのではなく、制御します。
他のヒント
、あなたは以下のコードを使用することができます。
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する だから、両方からあなたのアイデアを得ることができます。