在listview中显示D:\Program Files\网络游戏\中子目录中的.exe文件图标 |
答題得分者是:hagar
|
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
麻烦哪位大哥帮帮小弟!在程序的执行过程中出现问题,在前面问题中看到能够显示系统的图标文字,但是我想的是将游戏的可执行文件的图标显示在Listview中,在外边目录倒是没有问题,如果在“D:\Program Files\网络游戏\”这个目录里有.exe 文件,能够读出来,但是我想读出来在这个目录下的子目录中(多个目录)的可执行文件!谢谢各位大哥不吝赐教,小弟先在这儿谢谢!
procedure TForm1.btn1Click(Sender: TObject); begin // Assign a Imagelist to the ListView lv1.SmallImages := il1; // Show Listview in Report Style and add 2 Columns lv1.ViewStyle := vsReport; lv1.Columns.Add; lv1.Column[0].Caption:='文件名称'; lv1.Column[0].Width:=150; lv1.Column[1].Caption:='文件类型'; lv1.Column[1].Width:=100; lv1.ViewStyle:=vsSmallIcon; //lv1.Column[2].Caption:=''; lv1.Columns.Add; LV_InsertFiles('D:\Program Files\网络游戏\', lv1, il1); end; 就是想在标有蓝色字体的目录中的多个子目录中,能够读取子目录中的.exe文件!并使用32X32的图标显示在listview中! 小弟先行谢过了!
------
没有做不到,只有想不到! 編輯記錄
piaolingfeihu 重新編輯於 2007-06-07 14:15:09, 註解 無‧
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
<textarea class="delphi" rows="10" cols="60" name="code">
procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
ico: TIcon;
li: TListItem;
sFile: string;
sExt: string;
begin
FileListBox1.Directory := 'D:\Program Files\网?游?\'; for i := 0 to FileListBox1.Items.Count - 1 do
begin
sFile := FileListBox1.Items[i];
sExt := UpperCase(ExtractFileExt(sFile));
if sExt <> '.EXE' then Continue;
ico := TIcon.Create;
try
ico.Handle := ExtractIcon(Application.Handle, PChar(sFile), 0);
j := il1.AddIcon(ico);
li := lv1.Items.Add;
li.ImageIndex := j;
li.SubItems.Add(sFile);
finally
ico.Free;
end;
end;
end;</textarea>
|
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
我试了您的给我写的代码,在filelist中还是只加载了,第一层目录中的.exe文件。
这是我的代码,请您看一下! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ImgList,StrUtils, FileCtrl; type TForm1 = class(TForm) lv1: TListView; btn1: TButton; il1: TImageList; fllst1: TFileListBox; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses ShellApi; {$R *.dfm} procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList); var i: Integer; Icon: TIcon; SearchRec: TSearchRec; ListItem: TListItem; FileInfo: SHFILEINFO; begin // Create a temporary TIcon Icon := TIcon.Create; ListView.Items.BeginUpdate; try // search for the first file i := FindFirst(strPath '*.exe*', faAnyFile, SearchRec); while i = 0 do begin with ListView do begin // On directories and volumes if ((SearchRec.Attr and FaDirectory <> FaDirectory) and (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then begin ListItem := ListView.Items.Add; //Get The DisplayName SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME); Listitem.Caption := FileInfo.szDisplayName; // Get The TypeName SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME); ListItem.SubItems.Add(FileInfo.szTypeName); //Get The Icon That Represents The File SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); icon.Handle := FileInfo.hIcon; ListItem.ImageIndex := ImageList.AddIcon(Icon); // Destroy the Icon DestroyIcon(FileInfo.hIcon); end; end; i := FindNext(SearchRec); end; finally Icon.Free; ListView.Items.EndUpdate; end; end; procedure TForm1.btn1Click(Sender: TObject); begin // Assign a Imagelist to the ListView lv1.SmallImages := il1; // Show Listview in Report Style and add 2 Columns lv1.ViewStyle := vsReport; lv1.Columns.Add; lv1.Column[0].Caption:='文件名称'; lv1.Column[0].Width:=150; lv1.Column[1].Caption:='文件类型'; lv1.Column[1].Width:=100; lv1.ViewStyle:=vsSmallIcon; //lv1.Column[2].Caption:=''; lv1.Columns.Add; //AStrings11.Add(TmpList.Strings[i]); //SrchAndUpdate('D:\Program Files\网络游戏\'); LV_InsertFiles('D:\Program Files\网络游戏\', lv1, il1); //这是我原先写的代码,只能读第一层目录中的.exe文件 end; end. 我就是想通过递归能够查出子目录中的代码,但是搜索目录还是D:\Program Files\网络游戏\,给您添麻烦了,谢谢您!有时间帮我看一下!我是新手,不是太懂怎么递归的!开始我通过遍历,但是不知道怎么处理!谢谢您!
------
没有做不到,只有想不到! |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
1.mark lv1.ViewStyle := vsSmallIcon; 這一行
2.改成如下試試:
<textarea class="delphi" rows="10" cols="60" name="code">
procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList);
var
i: Integer;
Icon: TIcon;
SearchRec: TSearchRec;
ListItem: TListItem;
FileInfo: SHFILEINFO;
begin
// Create a temporary TIcon
Icon := TIcon.Create;
ListView.Items.BeginUpdate;
try
// search for the first file
i := FindFirst(strPath '*.*', faAnyFile, SearchRec);
while i = 0 do
begin
with ListView do
begin
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
begin
if (SearchRec.Attr and FaDirectory = FaDirectory) then
begin
LV_InsertFiles(strPath SearchRec.Name '\', ListView, ImageList);
end
else
begin
if Pos('.EXE', UpperCase(ExtractFileExt(SearchRec.Name))) > 0 then
begin
ListItem := ListView.Items.Add;
//Get The DisplayName
SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_DISPLAYNAME);
Listitem.Caption := FileInfo.szDisplayName;
// Get The TypeName
SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_TYPENAME);
ListItem.SubItems.Add(FileInfo.szTypeName);
//Get The Icon That Represents The File
SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
icon.Handle := FileInfo.hIcon;
ListItem.ImageIndex := ImageList.AddIcon(Icon);
// Destroy the Icon
DestroyIcon(FileInfo.hIcon);
end;
end;
end;
end;
i := FindNext(SearchRec);
end;
finally
Icon.Free;
ListView.Items.EndUpdate;
end;
end;</textarea>
|
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
|
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
您能够把您测试的那个小例程给我发到邮箱吗?我确实试了,但是只能显示两个exe文件!谢谢您,我的邮箱piaolingfeihu@126.com 不胜感激!
------
没有做不到,只有想不到! |
piaolingfeihu
一般會員 發表:7 回覆:12 積分:3 註冊:2007-06-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |