关于桌面图标的问题,高手帮把手(80分)

  • 主题发起人 主题发起人 wubo830814
  • 开始时间 开始时间
W

wubo830814

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想实现的功能是:将“我的电脑”拖进我写的程序中时,image上显示我的电脑的图标,具体该怎么做,谢谢,问题解决后再加100分
 
uses shellapi;

第一步 取得系统的图标列表的句柄,将之赋予一个图像列表控件。
procedure GetSystemImageList(imagelist:TImageList);
var
SysIL: THandle;
SFI: TSHFileInfo;
begin
// 取小图标,如果将SHGFI_SMALLICON替换成
//SHGFI_LARGEICON则表示取大图标
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0 then begin
//将imagelist的图像列表句柄指向系统图像句柄
imagelist.Handle := SysIL;
//防止组件释放时释放图像句柄,很重要
imagelist.ShareImages := TRUE;
end;
end;

第二步 取得要处理文件的图标索引
//取一个文件的图标索引
function GetIconIndex(const AFile: string; Attrs: DWORD): integer;
//Attrs可以为表示文件或路径FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY
var
SFI: TSHFileInfo;
begin
SHGetFileInfo(PChar(AFile), Attrs, SFI, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
Result := SFI.iIcon;
end;
//获取一个文件的imageindex;
function GetIconIndex(const APath: string; Attrs: DWORD): integer;
var
SFI: TSHFileInfo;
begin
if FileExists(APath) or DirectoryExists(APath) then
// If the file or directory exists, just let Windows figure out it's attrs.
SHGetFileInfo(PChar(APath), 0, SFI, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX)
else
// File doesn't exist, so Windows doesn't know what to do with it. We have
// to tell it by passing the attributes we want, and specifying the
// SHGFI_USEFILEATTRIBUTES flag so that the function knows to use them.
SHGetFileInfo(PChar(APath), Attrs, SFI, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
Result := SFI.iIcon;
end;

实例调用:
//如在TreeView中得到c:/mydir的图标,因为是路径所以要加上路径的标志
aNode.ImageIndex := GetIconIndex('c:/mydir/',
FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY);
//如在TreeView中得到c:/index.html的图标
aNode.ImageIndex := GetIconIndex('c:/index.html',FILE_ATTRIBUTE_NORMAL);
你参考参考。
 
szhcracker:
再问一下,我的程序处于可接受状态,exe以及其它类型的文件都可以接收,但是我的电脑,网上邻居这些虚路径的就接收不了,有没有什么办法呀
 
我的电脑,网上邻居这些东西的图标可能是在C:/WINDOWS/system32/SHELL32.dll中的,你查查就知道了。
 
这个我知道,现在的问题是,我把我的电脑拖放到我的程序时,光标是不接受状态,但如果拖放exe的话就是接收状态,你明白我的意思吗?
 
我的QQ是253817622
方便的话加我
 
虽然还未解决,但是还是结贴吧,
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3918131
szhcracker谢谢你,到这个中领分吧
 

Similar threads

D
回复
0
查看
811
DelphiTeacher的专栏
D
D
回复
0
查看
758
DelphiTeacher的专栏
D
D
回复
0
查看
707
DelphiTeacher的专栏
D
后退
顶部