全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2732
推到 Plurk!
推到 Facebook!

在listview中显示D:\Program Files\网络游戏\中子目录中的.exe文件图标

答題得分者是:hagar
piaolingfeihu
一般會員


發表:7
回覆:12
積分:3
註冊:2007-06-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-07 14:13:00 IP:58.48.xxx.xxx 訂閱
麻烦哪位大哥帮帮小弟!在程序的执行过程中出现问题,在前面问题中看到能够显示系统的图标文字,但是我想的是将游戏的可执行文件的图标显示在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-08 16:31:44 IP:59.124.xxx.xxx 未訂閱
你是檔案讀不出來?還是 EXE 判斷?還是 Icon 取不出來?還是... ?
piaolingfeihu
一般會員


發表:7
回覆:12
積分:3
註冊:2007-06-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-08 17:17:56 IP:58.48.xxx.xxx 訂閱
谢谢您能回复!主要是我想读出“D:\Program Files\网络游戏”这个文件夹下面子文件夹中的exe文件!显示在listview,我是新手,不是很明白,现在在D:\Program Files\网络游戏这个下面的exe可以显示,还请您指教!
------
没有做不到,只有想不到!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-09 11:22:24 IP:210.242.xxx.xxx 未訂閱
<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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-09 15:33:08 IP:58.48.xxx.xxx 訂閱
我试了您的给我写的代码,在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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-10 18:24:11 IP:123.192.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-11 10:08:44 IP:58.48.xxx.xxx 訂閱
您好,我试了您给我的代码。现在是能够读出子目录中的.exe文件,但是根目录中的找不到了。而且,现在只能读出根目录下面其中一个子目录中的exe文件。在D:\programe file\网络游戏\这个目录下面有很多个子目录,还要麻烦您,我初学delphi ,谢谢您的指点,您已经教了我很多了,心存感激,但是还要麻烦您!
------
没有做不到,只有想不到!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-11 12:11:20 IP:210.242.xxx.xxx 未訂閱
咦?
我自己這邊試可以列出一開始指定的目錄
也可以出指定目錄下所有子目錄的 exe 檔說...
piaolingfeihu
一般會員


發表:7
回覆:12
積分:3
註冊:2007-06-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-06-11 13:31:35 IP:58.48.xxx.xxx 訂閱
您好,谢谢您的回复,在我这儿就是这能够显示一个exe文件,您有邮件吗?我把那个这个的游戏目录的文件夹给您发过去,你测试一下看看!谢谢您!

------
没有做不到,只有想不到!
piaolingfeihu
一般會員


發表:7
回覆:12
積分:3
註冊:2007-06-07

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-06-11 13:37:46 IP:58.48.xxx.xxx 訂閱
您能够把您测试的那个小例程给我发到邮箱吗?我确实试了,但是只能显示两个exe文件!谢谢您,我的邮箱piaolingfeihu@126.com 不胜感激!
------
没有做不到,只有想不到!
piaolingfeihu
一般會員


發表:7
回覆:12
積分:3
註冊:2007-06-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-06-11 15:21:45 IP:58.48.xxx.xxx 訂閱
感激地话无以言表,太感谢了,是我自己没有弄好,都是一些exe的快捷方式,所以不能够被显示!谢谢您的细心教导!您太强了!请接受我的感激,谢谢!
------
没有做不到,只有想不到!
系統時間:2024-04-28 14:57:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!