{根据文件的名字得到此文件在系统中对应大小的图标large=true(64*64) false(32*32)}
procedure GetFileIcon(TypeName: Widestring; Icon: TIcon;Large:Boolean=False);
var
strTmp: Widestring;
IndexS, IndexL: HIcon;
ShFileInfo: TSHFileInfo ;
imgList: TImageList;
begin
strTmp := TypeName;
TypeName := Tnt_WideLowerCase(wideExtractFileExt(strTmp));
if pos('.', TypeName) = 0 then
TypeName := '.' + TypeName;
if Large then
begin
//如果是EXE、Ico文件,直接取文件的图标
if (TypeName = '.exe') or (TypeName = '.ico') then
begin
ExtractIconExw(pwidechar(strTmp), 0, IndexL, IndexS, 1);
if IndexS <> 0 then
begin
Icon.Handle := IndexL;
exit;
end;
end;
//在临时目录下建立一个空类型文件,便于取图标
TypeName := GetWindowsTempPath + TypeName;
if not wideFileExists(TypeName) then
with TUniFileStream.Create(TypeName, fmCreate) do
Free;
imgList := TImageList.CreateSize(64, 64);
try
{将系统图象列表连接到TListView控件上。注意我们设置动态建立的图象列表
的ShareImages属性为真,这可以确保我们不试图释放Windows系统拥有的图象}
imgList.ShareImages := True;
imgList.Handle := ShGetFileInfo ('', 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_LARGEICON);
ShGetFileInfo (pchar( string( TypeName)), 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_LARGEICON);
imgList.GetIcon(SHFileInfo.iIcon, Icon);
finally
imgList.Free;
end;
end else
begin
//如果是EXE、Ico文件,直接取文件的图标
if (TypeName = '.exe') or (TypeName = '.ico') then
begin
ExtractIconExw(pwidechar(strTmp), 0, IndexL, IndexS, 1);
if IndexS <> 0 then
begin
Icon.Handle := IndexS;
exit;
end;
end;
//在临时目录下建立一个空类型文件,便于取图标
TypeName := GetWindowsTempPath + TypeName;
if not wideFileExists(TypeName) then
with TUniFileStream.Create(TypeName, fmCreate) do
Free;
imgList := TImageList.CreateSize(32, 32);
try
imgList.ShareImages := True;
imgList.Handle := ShGetFileInfo ('', 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_SMALLICON);
ShGetFileInfo (pchar( string( TypeName)), 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_SMALLICON);
imgList.GetIcon(SHFileInfo.iIcon, Icon);
finally
imgList.Free;
end;
end;
end;

delphi 获取文件图标的更多相关文章

  1. C# 获取文件图标

    今天突然想到一个问题,如何去获取一个文件的关联图标呢?于是就上网搜索了一下.现总结如下: 首先明确问题:获取一个文件的关联图标或者是某个类型文件的显示图标. 在网上搜了一圈,发现方法还是比较多的,但是 ...

  2. Delphi获取文件名、文件名不带扩展名、文件名的方法;delphi 获取文件所在路径

    取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一:   Function Extrac ...

  3. Qt之根据扩展名获取文件图标、类型

    简述 在C++根据扩展名获取文件图标.类型一节中我们分享了如何根据扩展名来获取对应的文件图标.类型,下面.我们在Qt中使用它. 简述 示例 效果 源码 更多参考 示例 如下,我们根据扩展名来获取对应的 ...

  4. C++根据扩展名获取文件图标、类型

    简述 在Windows系统中,根据扩展名来区分文件类型,比如:.txt(文本文件)..exe(可执行程序).*.zip(压缩文件),下面,我们来根据扩展名来获取对应的文件图标.类型. 简述 源码 源码 ...

  5. Qt之QFileIconProvider(根据扩展名获取文件图标、类型)

    简述 在Qt之QFileIconProvider一节中已经讲解关于如何获取文件图标与类型.但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关 ...

  6. delphi 获取文件的最新修改时间 http://www.delphitop.com/html/wenjian/64.html

    delphi 获取文件的最新修改时间 作者:admin 来源:未知 日期:2010/1/28 13:15:22 人气:1054 标签: QQ空间新浪微博腾讯微博腾讯朋友QQ收藏百度空间百度贴吧更多0 ...

  7. c++ 获取文件图标,类型名称,属性 SHGetFileInfo

    SHGetFileInfo是一个相当实用的Windows API函数. // [MoreWindows工作笔记4] 获取文件图标,类型名称,属性 SHGetFileInfo #include < ...

  8. Delphi获取文件的大小(实际&物理)

    源:获取文件的大小(实际&物理) class function TDuoFile.GetFileSize(const AFile: TFileName): Int64; var sr:TSea ...

  9. delphi获取文件的创建/修改时间、按时间删除指定文件下的文件

    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrl ...

随机推荐

  1. python_django_admin

    admin 是Django提供的基于web的管理工具,是系统管理员用于数据的输入,删除和查询的管理工具. 超级管理员在settings中的集成:INSTALLED_APPS=['django.cont ...

  2. 数组对象用map修改键名

    用vue组件需要使用的数据格式和后台返回的不一样 console.log(res); this.optionsEp = res.map(item => { return { value: ite ...

  3. cmake build

    { //cmake CMakeLists.txt -G "Visual Studio 15 2017" }

  4. springCloud数据

    DROP DATABASE IF EXISTS springcloud_db01;CREATE DATABASE springcloud_db01 CHARACTER SET utf8;USE spr ...

  5. 最常用的C++序列化方案:protobuf

    参考链接:最常用的两种C++序列化方案的使用心得(protobuf和boost serialization) [c++] Google Protobuf库1. 什么是序列化?程序员在编写应用程序的时候 ...

  6. Extjs各版本的下载链接,包含ext3.4源码示例

    最近在维护一个老平台,用的是ext3.4,老东西在网上找示例发现既然还有人收钱,谷歌了一下总算找到了一位免费的发布的,感谢 yipanbo 分享 Extjs的版本繁多,本文收集了Extjs各个版本的下 ...

  7. The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder i

    参考资料: http://blog.csdn.net/competerh_programing/article/details/7377950 在创建Dialog的时候,出现: The method ...

  8. (转)OpenFire源码学习之八:MUC用户聊天室

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43413817 MUC 房间属性设置 以上属性存储在MUCPersistenceManag ...

  9. STM32嵌入式开发学习笔记(三):使用按键控制小灯

    按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入 ...

  10. CSS:CSS 图像透明/不透明

    ylbtech-CSS:CSS 图像透明/不透明 1.返回顶部 1. CSS 图像透明/不透明 使用CSS很容易创建透明的图像. 注意:CSS Opacity属性是W3C的CSS3建议的一部分. 更多 ...