如何根据一个文件扩展名得到它相关联的图标?(50分)

  • 主题发起人 主题发起人 liaolion
  • 开始时间 开始时间
L

liaolion

Unregistered / Unconfirmed
GUEST, unregistred user!
如何根据一个文件扩展名得到它相关联的图标?
 
在注册表里读啊
 
在注册表什么地方啊?
 
不用那么麻烦吧?<br>API 函数 ExtractAssociatedIcon<br>就是解决这个问题的。<br>别忘了引用ShellAPI单元哦!
 
宝宝啊,你说的是从文件中提取图标吧?<br><br>可是问题好像是根据文件扩展名,得到关联图标的说~~~
 
delphi有一个DEMO自己看吧,叫什么exp...什么的。
 
uses shellapi;<br>var<br>&nbsp; &nbsp; IconIndex : word;<br>&nbsp; &nbsp; h : hIcon;<br>begin<br>&nbsp; &nbsp; &nbsp; &nbsp; IconIndex := 0;<br>&nbsp; &nbsp; &nbsp; &nbsp; h := ExtractAssociatedIcon(hInstance,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PChar(filename),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IconINdex);<br>&nbsp; &nbsp; &nbsp; &nbsp; //将图标显示出来DrawIcon(image1.Canvas.Handle,0,0,h);<br>end;
 
非也非也,我只有一个扩展名,就是三个字母。想得到关联的图标。
 
呵呵,做个小小的变通就是了嘛。<br>你在可以在一个临时文件夹下新建一个文件,零长度都行,如aaa<br>然后加上你的的扩展名如:.zip,形成aaa.zip 这样再读它的图标就是了。<br>只是ExtractAssociatedIcon可能在Win2000下不好使,换成ShGetFileInfo就好了<br>看这里:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=611351<br>
 
SHGetFileInfo, flag 参数用 SHGFI_TYPENAME or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES;
 
有个atshell控件,也是读注册表的。现在都懒得看源码了。想要的留个email下来吧
 
非常感谢honghs兄,我的EMail是:liao_wolf@163.com
 
这样来,获取某一类型扩展名的图标 :<br><br>function GetFileIcon(const Filename:String; SmallIcon:Boolean):HICON;<br>var info:TSHFILEINFO;<br>&nbsp; &nbsp; Flag: Integer;<br>begin<br>&nbsp; if SmallIcon then Flag:=(SHGFI_SMALLICON or SHGFI_ICON)<br>&nbsp; else Flag:=(SHGFI_LARGEICON or SHGFI_ICON);<br>&nbsp; SHGetFileInfo(Pchar(Filename),0,info,Sizeof(info),Flag);<br>&nbsp; Result:=info.hIcon;<br>end;
 
得到Hicon后怎么把它加入到IMAGELIST中呢?
 
看来你真的适合酿酒,我也适合喝,哈哈。<br>这个问题的基本解决办法如下,不一定完全对,但是试验成功了。[8D]<br><br>uses shellapi;<br><br>function GetFileIcon(const Filename: String; SmallIcon: Boolean): HICON;<br>var<br>&nbsp; info: TSHFILEINFO;<br>&nbsp; Flag: Integer;<br>begin<br>&nbsp; if SmallIcon then<br>&nbsp; &nbsp; Flag := (SHGFI_SMALLICON or SHGFI_ICON)<br>&nbsp; else<br>&nbsp; &nbsp; Flag := (SHGFI_LARGEICON or SHGFI_ICON);<br>&nbsp; SHGetFileInfo(Pchar(Filename), 0, info, Sizeof(info), Flag);<br>&nbsp; Result := info.hIcon;<br>end;<br><br>procedure TForm1.BitBtn1Click(Sender: TObject);<br>var<br>&nbsp; aa: TIcon;<br>begin<br>&nbsp; aa := TIcon.Create;<br>&nbsp; aa.Handle := GetFileIcon('C:/1.mdb', True);<br>&nbsp; ImageList1.AddIcon(aa);<br>&nbsp; aa.Free;<br>end;<br>
 
后退
顶部