如何在 Inno Setup 中创建图像按钮?

Dra*_*kul 5 inno-setup pascalscript

Inno Wizard 页面中是否可以有一个图像按钮而不是纯标题文本?

我想要完成的是创建一个关闭/打开图像按钮,以在 Inno 安装程序运行时静音/播放音乐。

谢谢!

Mar*_*ryl 6

Inno Setup 中不直接支持设置按钮图像。

所以你必须恢复到 Win32 API。

function LoadImage(hInst: Integer; ImageName: string; ImageType: UINT;
  X, Y: Integer; Flags: UINT): THandle;
  external 'LoadImageW@User32.dll stdcall';
function ImageList_Add(ImageList: THandle; Image, Mask: THandle): Integer;
  external 'ImageList_Add@Comctl32.dll stdcall';
function ImageList_Create(CX, CY: Integer; Flags: UINT;
  Initial, Grow: Integer): THandle;
  external 'ImageList_Create@Comctl32.dll stdcall';

const
  IMAGE_BITMAP = 0;
  LR_LOADFROMFILE = $10;
  ILC_COLOR32 = $20;
  BCM_SETIMAGELIST = $1600 + $0002;

type
  BUTTON_IMAGELIST = record
    himl: THandle;
    margin: TRect;
    uAlign: UINT;
  end;

function SendSetImageListMessage(
  Wnd: THandle; Msg: Cardinal; WParam: Cardinal;
  var LParam: BUTTON_IMAGELIST): Cardinal;
  external 'SendMessageW@User32.dll stdcall';

function InitializeSetup(): Boolean;
var
  ImageList: THandle;
  Image: THandle;
  ButtonImageList: BUTTON_IMAGELIST;
begin
  ImageList := ImageList_Create(16, 16, ILC_COLOR32, 1, 1);
  Image := LoadImage(0, 'button.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

  ImageList_Add(ImageList, Image, 0);

  ButtonImageList.himl := ImageList;

  SendSetImageListMessage(
    WizardForm.NextButton.Handle, BCM_SETIMAGELIST, 0, ButtonImageList);
end;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 是的!我认为这就是要走的路...太棒了!谢谢你的提示...有点迷失了... (2认同)