关于文件夹图标的问题2,再次请教一下!(cxz9请进)(100分)

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

lonelybug

Unregistered / Unconfirmed
GUEST, unregistred user!
主要的问题是,我想知道如何在formcreate中用SHGetFileInfo这个函数一次把所有的系统的图标都提出来放到imagelist中,我发现如果用
SHGetFileInfo('', 0, vSHFileInfo, SizeOf(vSHFileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
这个方法的话,它只能以提取6个图标,可是有些图标(比如My Picture,favorite这些目录的图表就不能显示了)
就是说,程序已开始就可以使用一些系统特有的图表,而不是要选择了那个带有系统不标的目录的时候在加载,谢谢了!
 
我做的时候不知道怎么都读不出来!~~[:(]
 
upupup
help us
 
ImageListHandle:=ShGetFileInfo('C:/',0,SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
 
axcom:我是这么写的,可是c:/windows/Tasks,Downloaded Program Files,Offline Web Pages这几个目录的文件夹好想不能提取!?
还有一个问题,就是为什么我用TOpenDialog打开不同的文件之后ShGetFileInfo('C:/',0,SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
这个函数的所得到的图表也不同能,能不能有什么方法固定一下,我试过了吧'c:/'换成我想要的目录刻是不行呀!比如c:/windows/system32这个样子就不行,而如果用TOpenDialog打开这个目录下的文件之后imagelist里面的图表就会改变了?
请指点一下!谢谢了!
 
{ 获取图标的序号函数 }
function GetFileIconIndex(FileName:string):integer;
var
Ext:String;
FileInfo: TSHFileInfo;
Flags: Integer;
begin
Ext:=FileName;
FillChar(FileInfo, SizeOf(FileInfo), #0);
Flags := SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_ICON;
if ShGetFileInfo(Pchar(Ext), 0, FileInfo, SizeOf(FileInfo), Flags)<>0 then
Result:=FileInfo.iIcon
else
Result:=0;
{ 返回获取的图标序号 }
end;
 
接受答案了.
 
顶部