私は on を必要とするプログラムを構築しておりForm_Create
、TListView
呼び出されFileList
た.\Files
TListView
3 に答える
あなたの質問には複数の部分があります。ここで概要を説明します。特定のステップについてサポートが必要な場合は、より具体的なフォローアップの質問を投稿してください。
「コンパイルされたプログラムの場所」が何を指しているかを判別します。
EXE ファイルのフル パスを取得するには、 を呼び出します
ParamStr(0)
。その文字列から EXE ファイル名を削除して、ディレクトリ部分だけを取得するには、 を呼び出しますExtractFilePath
。バックスラッシュ (IncludeTrailingPathDelimiter
) で終わっていることを確認してから、「ファイル」ディレクトリを追加します。ファイルのリストを取得します。
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
プロパティは、1 つのノードに対して複数の列が存在する可能性がある "レポート" モードでリスト ビューを表示している場合に便利です。画像をアイテムに関連付けます。
リスト ビュー内のノードのイメージは、関連するイメージ リストから取得され
LargeImages
ますSmallImages
。フォーム上の1 つ以上のTImageList
コンポーネントを参照します。そこにアイコン画像を配置し、アイテムのImageIndex
プロパティを対応する番号に割り当てます。
プログラムをどれだけ精巧なものにしたいかによってはTShellListView
、上記のすべての作業を自分で行う代わりに、Delphi のコントロールを使用したい場合があります。
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;
行を描画するときに画像を表示する必要があります。
これはあなたにアイデアを与えるはずです: 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 したがって、両方からアイデアを得ることができます。