Delphi的动态图标问题(100分)

  • 主题发起人 主题发起人 秋江
  • 开始时间 开始时间

秋江

Unregistered / Unconfirmed
GUEST, unregistred user!
我是一名Delhpi爱好者,最近正在编写试验一本书提供的实例,其中用到了ListView
控件列举文件、文件夹,想自己添加代码实现象我的电脑那样显示和文件或文件夹相关的图
标。经过一番查找资料,在网上看到了李晓方的一篇文章《在Delphi中使用动态图标》,并
下载了示例程序,并试着将我需要的代码加入我的实例程序中,结果运行成功。

其想法是每找到一个文件或文件夹,都是提取其图标然后拷贝到与ListView关联的
ImageList中,指定图标索引,以显示相关图标。但是有一个问题,如果要查找的文件很多,
比如Windows及其子目录,那么ImageList中图标会很多,但是它的容量总是有限的,我试验
过,后面图标显示不出来,结果程序报错终止。不知各位大侠是否有什么好的解决方法。我
看到一些资料,说可以利用ShellAPI中的SHGetFileInfo函数获取文件或文件夹中的图标信
息,但是没有成功,所以总觉得很遗憾。

还望各位大侠不吝赐教。
 
看一下这个:http://www.delphibbs.com/delphibbs/DispQ.asp?LID=594919
 
明天告诉你
 
还可以看看D5所带例子,在 Demo 下 Virtual Listview 中。
 
初学者1
最近怎么样啊?
 
呵呵借宝地一用:
小猪:最近还好,界面技术问题基本解决。20号交货。你最近怎么样?
我的qq号是57687635。不过现在只有晚上在,白天全在jn。以后多指教
 
extractIConEx
 
var smallimages: Timagelist;
begin
smallimages:= Timagelist.create;
SmallImages.Handle:= ShGetFileInfo(nil, 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
end;
//所有系统图标在smallimages中

function GetFileIconIndex(FileName: string): integer;
var
Ext:String;
begin
Ext:=FileName;
ShGetFileInfo(Pchar(Ext), 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_LARGEICON or
SHGFI_SYSICONINDEX or SHGFI_TYPENAME);
Result:=SHFileInfo.iIcon;
{ 返回获取的图标序号 }
end;
用GetFileIconIndex得到序号,比如filename是"c:/",返回的号为2(也是比如),那么在
smallimags中的index为2。
 
謝謝你的的幫助。
 
D5那个例子,代码太多了,我也想看过。可是。。。
 
不好意思,时至今日,才给大家分配积分。一年多以前初次上富翁网,开始不知道怎么分配积分,后来就没有机会上网了。
to liujh:
[8D],你说的对我帮助很大,虽然没有达到我预期的效果,但是至今我还是印象深刻,还是有问题的,需将此行代码:
SmallImages.Handle:= ShGetFileInfo(nil, 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
中的第一个参数nil换为带有通配符的文件名,如“C:/*.*”,因为对我启发很大,所以给了你80%的分。

to omvm:
[:)],至今我尚未来得及看,大概是我用liujh的方法实现后,就忘了。不过,你给了我一个教训:Demo是需要好好看和品味的。
 
后退
顶部