You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Inno向导中Next/Back/Cancel按钮的背景颜色?

Inno Setup 修改向导按钮背景色的解决方案

直接设置WizardForm.NextButton.Color无效是因为默认按钮采用系统原生样式,需要切换为自绘模式才能自定义背景色,以下是无需插件的实现方案:

实现步骤

在脚本的[Code]段中添加以下代码:

1. 定义按钮自绘处理过程

procedure DrawCustomButton(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  Button: TButton;
  Canvas: TCanvas;
  TextRect: TRect;
begin
  Button := TButton(Control);
  Canvas := Button.Canvas;
  
  // 清空画布区域
  Canvas.FillRect(Rect);
  
  // 设置按钮背景色(可替换为你需要的颜色值,如$464646)
  Canvas.Brush.Color := $464646;
  Canvas.Rectangle(Rect);
  
  // 设置文本样式(可根据背景色调整文本颜色)
  Canvas.Font.Color := clWhite;
  Canvas.Font := Button.Font;
  
  // 居中绘制按钮文本
  TextRect := Rect;
  DrawText(Canvas.Handle, PChar(Button.Caption), Length(Button.Caption), TextRect, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;

2. 在初始化向导时启用自绘

procedure InitializeWizard();
begin
  // 为Next/Back/Cancel按钮开启自绘并绑定处理过程
  WizardForm.NextButton.Style := bsOwnerDraw;
  WizardForm.NextButton.OnDrawItem := @DrawCustomButton;
  
  WizardForm.BackButton.Style := bsOwnerDraw;
  WizardForm.BackButton.OnDrawItem := @DrawCustomButton;
  
  WizardForm.CancelButton.Style := bsOwnerDraw;
  WizardForm.CancelButton.OnDrawItem := @DrawCustomButton;
end;

可选扩展

如果需要区分按钮的悬停/按下状态,可以在DrawCustomButton中通过State参数判断:

// 在设置Canvas.Brush.Color前添加判断
if odHotLight in State then
  Canvas.Brush.Color := $5A5A5A // 悬停状态颜色
else if odSelected in State then
  Canvas.Brush.Color := $333333 // 按下状态颜色
else
  Canvas.Brush.Color := $464646; // 默认状态颜色

内容的提问来源于stack exchange,提问作者ZeroFun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:45:41