实现了文件搜索,但是怎么才能把文件名及其图标显示出来,关键要显示图标,点击就可打开文件

jefferwind 2005-08-24 02:44:43
同上
...全文
150 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Demogodyou 2005-08-25
  • 打赏
  • 举报
回复
合成以上两方法:
function GetSystemIconIndex(ToImagelist:TImageList; const FileName: String; LargeIcon: Boolean = false): Integer;
var
SysIL: THandle;
SFI: TSHFileInfo;
Attrs: DWORD;
begin
Result := -1;
// 取小图标,如果将SHGFI_SMALLICON替换成
//SHGFI_LARGEICON则表示取大图标
if LargeIcon then //取大图标。
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_LARGEICON)
else //取小图标。
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0 then
begin
//将imagelist的图像列表句柄指向系统图像句柄
ToImagelist.Handle := SysIL;
//防止组件释放时释放图像句柄,很重要
ToImagelist.ShareImages := TRUE;

if ExtractFileExt(FileName) = '' then //参数为路径。
begin
if Not DirectoryExists(FileName) then Exit;
Attrs := FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY;
end
else
begin //参数为文件全名。
if Not FileExists(FileName) then Exit;
Attrs := FILE_ATTRIBUTE_NORMAL;
end;
SHGetFileInfo(PChar(FileName), Attrs, SFI, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
Result := SFI.iIcon;
end;
end;
XY.Chen 2005-08-25
  • 打赏
  • 举报
回复
uses shellapi;

第一步 取得系统的图标列表的句柄,将之赋予一个图像列表控件。
procedure GetSystemImageList(imagelist:TImageList);
var
SysIL: THandle;
SFI: TSHFileInfo;
begin
// 取小图标,如果将SHGFI_SMALLICON替换成
//SHGFI_LARGEICON则表示取大图标
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0 then begin
//将imagelist的图像列表句柄指向系统图像句柄
imagelist.Handle := SysIL;
//防止组件释放时释放图像句柄,很重要
imagelist.ShareImages := TRUE;
end;
end;

第二步 取得要处理文件的图标索引
//取一个文件的图标索引
function GetIconIndex(const AFile: string; Attrs: DWORD): integer;
//Attrs可以为表示文件或路径FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY
var
SFI: TSHFileInfo;
begin
SHGetFileInfo(PChar(AFile), Attrs, SFI, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
Result := SFI.iIcon;
end;

实例调用:
//如在TreeView中得到c:\mydir的图标,因为是路径所以要加上路径的标志
aNode.ImageIndex := GetIconIndex('c:\mydir\',
FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY);
//如在TreeView中得到c:\index.html的图标
aNode.ImageIndex := GetIconIndex('c:\index.html',FILE_ATTRIBUTE_NORMAL);
jefferwind 2005-08-24
  • 打赏
  • 举报
回复
能举个例子怎么用吗,
ly_liuyang 2005-08-24
  • 打赏
  • 举报
回复
ShellAPI的
SHGetFileInfo

_____________________
http://lysoft.7u7.net

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧