首页 > 解决方案 > Inno Setup 在自定义表单标题栏上使用不同的图标

问题描述

默认情况下,自定义表单在标题栏中使用与 main 相同的图标,WizardFormSetupIconFile. 有没有办法在它的标题栏上给自定义表单一个不同的图标?

[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,但似乎没有,我在任何地方都找不到有关此的任何信息。

标签: inno-setuppascalscript

解决方案


您必须使用 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 的唯一版本)

在此处输入图像描述


推荐阅读