delphi 获取文件图标
{根据文件的名字得到此文件在系统中对应大小的图标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;
最新文章
- Sprintf新解 (ZT)
- android添加第三方字体并设置的简单使用
- jQuery 的属性
- ADB常用命令(Android Debug Bridge)
- webApp路由控制-vue-router2.0
- jenkins使用deploy-plugin自动构建部署war包
- MySQL执行存储过程权限
- setjmp 与 longjmp
- Raspberry Pi3 ~ 安装samba服务
- 解读XMP元数据中ALAssetRepresentation
- 【转】Linux内核调试方法总结
- vim下高级操作以及文本替换命令
- hdu1501 Zipper
- gstreamer在Ubuntu下构建开发环境
- TCP端口检测工具
- 面向对象的 __slots__
- nginx介绍(六) - 通过反向代理实现跨域访问
- 整体二分求动态区间第k大
- Maximum Average Subarray I LT643
- 从头开始学习vue-router
热门文章
- javascript笔记 (持续更新)
- springcloud feign增加熔断器Hystrix
- 【leetcode】133. Clone Graph
- MySQL - primary key PK unique key,key PK index
- HBase与Sqoop集成案例
- NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))
- Transactional事务管理操作
- targetSdkVersion和与target属性的区别
- CF C. Fly
- 天梯L3-003. 社交集群——并查集