ImageList,带alpha通道图标,manifest文件

前些时间突然希望让LE能在Vista下运行,当时已知有几个情况不能正常运行:

1.菜单显示不正确

2.工具栏图标全部显示不正常,没有了透明效果

3.不能使用myacc.dll,也就是不能使用"页面元素过滤"的功能

 

第一项已经解决了,第三项可以屏蔽掉,剩下的是第二项.

我一直以为是ImageList_Draw 或 ImageList_Create 函数在Vista中有了新的变化,查遍了MSDN没有发现有什么特别.

纳闷之际,做了个测试程序,尝试在XP中编译了再在Vista中运行,岂料编译的exe文件在xp中运行起来也不正常了.这就更奇怪了,那为什么LE在xp下能正常呢?

无意间在测试程序的目录下放了一个manifest文件,运行,竟然显示正常了,喜.再放到Vista中,也显示正常了.于是才突然恍然大悟...

 

IDE环境中显示正常,是因为我在VB的安装目录下放了个manifest文件,编译好的LE显示正常是因为我将manifest文件放在了LE的资源文件里面了.ImageList能正常显示透明图标,版本应该是要6.0,而只有使用了manifest文件系统才会使用6.0的ImageList.

 

至此问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种可视化的编程语言和集成开发环境,可用于创建各种应用程序。修改文件图标是其中的一个功能,下面介绍如何使用Delphi来实现该功能。 我们可以使用ShellAPI单元中的ExtractIconEx函数来获取系统中的图标,并使用SHChangeNotify函数通知系统文件更改。 首先,在程序中添加ShellAPI单元,然后创建一个TImageList组件,其用于存储我们获取到的图标。接下来定义一个函数GetFileIcon用于获取文件图标。 函数的代码如下: procedure GetFileIcon(const AFileName: string; ImageList: TImageList; var IconIndex: integer); var Icon: HICON; IconCount: integer; begin IconCount := ExtractIconEx(PChar(AFileName), -1, nil, nil, 0); if IconCount > 0 then begin IconIndex := ImageList.AddIcon(Icon); DestroyIcon(Icon); end; end; 接着,在主窗体的OnCreate事件中定义一个图标索引值,用于保存我们刚刚添加的图标: var IconIndex: integer; ... procedure TForm1.FormCreate(Sender: TObject); begin ... IconIndex := -1; end; 最后,在我们需要修改文件图标的地方,我们可以调用GetFileIcon函数来获取需要修改的文件图标,然后将其设置为相应的文件图标。 代码如下: procedure TForm1.Button1Click(Sender: TObject); var Icon: HICON; FileInfo: TSHFileInfo; begin if SelectDirectory('请选择需要修改图标的目录', '', s) then begin if IconIndex = -1 then begin Icon := LoadIcon(hInstance, 'MAINICON'); ImageList1.Clear; ImageList_AddIcon(ImageList1.Handle, Icon); IconIndex := ImageList1.Count - 1; end; SHGetFileInfo(PChar(s), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); FileInfo.hIcon := ImageList1.GetIcon(IconIndex); SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); ShowMessage('文件图标修改成功!'); end; end; 通过以上步骤,我们就可以使用Delphi实现修改文件图标的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值