inno-setup - Inno Setup 在自定义表单标题栏上使用不同的图标
问题描述
默认情况下,自定义表单在标题栏中使用与 main 相同的图标,WizardForm
即SetupIconFile
. 有没有办法在它的标题栏上给自定义表单一个不同的图标?
[Code]
var
CustomWindowForm: TForm;
{ Create and show the Custom window }
procedure ShowCustomWindow();
begin
CustomWindowForm := TForm.Create(WizardForm);
with CustomWindowForm do
begin
BorderStyle := bsSingle;
Position := poOwnerFormCenter;
Caption := 'Window Title';
ClientWidth := ScaleX(400);
ClientHeight := ScaleY(400);
Show;
end;
end;
我需要的是类似于 的Icon
属性的东西TForm
,但似乎没有,我在任何地方都找不到有关此的任何信息。
解决方案
您必须使用 WinAPI,尤其是LoadImage
函数和WM_SETICON
消息:
[Files]
Source: "custom.ico"; Flags: dontcopy
[Code]
const
IMAGE_ICON = 1;
LR_LOADFROMFILE = $10;
WM_SETICON = $80;
ICON_SMALL = 0;
function LoadImage(
hInst: Integer; ImageName: string; ImageType: UINT; X, Y: Integer;
Flags: UINT): THandle; external 'LoadImageW@User32.dll stdcall';
procedure CustomFormShow(Sender: TObject);
var
Icon: THandle;
begin
ExtractTemporaryFile('custom.ico');
Icon := LoadImage(
0, ExpandConstant('{tmp}\custom.ico'), IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
SendMessage(TForm(Sender).Handle, WM_SETICON, ICON_SMALL, Icon);
end;
var
CustomWindowForm: TForm;
{ Create and show the custom window }
procedure ShowCustomWindow();
begin
CustomWindowForm := TForm.Create(WizardForm);
with CustomWindowForm do
begin
{ your code }
OnShow := @CustomFormShow;
Show;
end;
end;
(代码适用于 Inno Setup 的 Unicode 版本 – Inno Setup 6 的唯一版本)
推荐阅读
- javascript - Intl.Collator() 或 localeCompare() 中的“co”到底是什么?
- html - 检查后表达式已更改 - 打字稿
- java - Apache POI HWPFDocument 帮助插入超链接
- r - Ggplot:如何以给定的顺序显示箱线图?
- html - 带有 jQuery 的 Asp Mvc 视图
- ruby - 无法使 ruby omniauth-ebay-oauth gem 示例代码正常工作
- mysql - Mariadb 数据库被 wordpress “创建排序索引”卡住了
- laravel - 如何阻止 Laravel 队列缓存所有内容?
- python - 运行 python selenium 代码时在 Heroku cli 中显示类型错误
- c++ - 为什么我要对这个对象进行大括号初始化(值初始化)以使其成为 constexpr?