Inno自定义界面学习笔记(四)之自定义按钮

Inno自定义界面学习笔记(四)之自定义按钮

上一篇讲了如何替换背景图片,这一篇讲讲如何绘制自定义按钮。

可以看到背景图被替换后,按钮的风格却是格格不入。

我们希望效果图是这样的。首先增加一键安装按钮

添加安装按钮

先在var区添加按钮变量的声明

button_setup_or_next :hwnd;//安装/下一步按钮 button

并且在Fils区和 extract_temp_files 过程中分别加载和释放图片资源

[Files]
Source: ".\{tmp}\button_setup_or_next.png";        DestDir: "{tmp}"; Flags: dontcopy solidbreak; Attribs: hidden system

[Code]
//释放需要的临时资源文件
procedure extract_temp_files();
begin
  ...
  ExtractTemporaryFile('button_setup_or_next.png');
  ...
end;

然后在 InitializeWizard 中对控件初始化

//函数声明:
//重载安装程序初始化函数(和上边那个不一样),进行初始化操作
procedure InitializeWizard();
begin 
    ...

    //安装或下一步初始化
    button_setup_or_next := BtnCreate(WizardForm.Handle, ScaleX(211), ScaleY(305), ScaleX(178), ScaleY(43), ExpandConstant('{tmp}\button_setup_or_next.png'), 0, False);
    //BtnSetEvent(button_setup_or_next, ID_BUTTON_ON_CLICK_EVENT, WrapBtnCallback(@button_setup_or_next_on_click, 1));
    ...
end;

BtnCreate 的作用是将按钮 初始化到{x,y}={211,305} {宽,高}={178,43}的位置,并且加载图片资源 button_setup_or_next.png

图片资源中已经包括了按钮的四态(正常,悬浮,点击,失效),配合BtnCreate我们就不用再额外管理按钮的状态了。

添加按钮的回调函数

现在我们点击一键安装按钮是没响应的。我们需要使用BtnSetEvent来设置按钮的回调函数。

但在此之前,我们还要添加一些变量和类型

在常量区添加  ID_BUTTON_ON_CLICK_EVENT 的定义和TBtnEventProc的定义

[Code]
type
  TBtnEventProc = procedure(h : hwnd);
const 
  ID_BUTTON_ON_CLICK_EVENT = 1;

这些定义应该是bovta中要求的数据结构,本文对此不展开。有兴趣的请自行搜索。

然后在api声明区中声明WrapBtnCallback

function WrapBtnCallback(Callback : TBtnEventProc; ParamCount : integer) : longword; external 'wrapcallback@files:innocallback.dll stdcall delayload';

 最后定义回调函数

//主界面安装按钮按下时的回调函数
procedure button_setup_or_next_on_click(hBtn : hwnd);
begin
  WizardForm.NextButton.OnClick(WizardForm);
end;

类似的将自定义安装按钮和协议同意按钮添加好后的效果:

全篇的脚本资源已上传到csdn,可以自行下载研究:

Inno自定义界面学习笔记(四)之自定义按钮的代码资源-Delphi文档类资源-CSDN下载

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InnoSetup是一个开放源代码的安装程序制作工具,它提供了自定义安装界面的功能,可以方便地在安装过程中添加文本框等控件。以下是如何使用InnoSetup制作带有文本框的自定义界面的简要步骤: 1. 在InnoSetup的脚本文件中声明变量,用于存储用户在文本框中输入的内容。例如: ``` [Code] var MyTextBox: TNewEdit; function InitializeSetup(): Boolean; begin MyTextBox := TNewEdit.Create(WizardForm); MyTextBox.Parent := WizardForm; MyTextBox.Left := 100; MyTextBox.Top := 100; MyTextBox.Width := ScaleX(200); MyTextBox.Text := '请输入您的名字'; Result := True; end; function NextButtonClick(CurPageID: Integer): Boolean; begin if CurPageID = wpWelcome then begin MsgBox('您好,' + MyTextBox.Text + '!', mbInformation, MB_OK); end; Result := True; end; ``` 在上述代码中,通过使用TNewEdit控件创建一个文本框,并在InitializeSetup()函数中将其添加到安装向导中。在NextButtonClick()函数中,当用户点击“下一步”按钮时,会弹出一个消息框,显示用户在文本框中输入的内容。 2. 根据需要,可以对文本框进行进一步格式设置,例如设置文本框的字体、背景色等属性,以及添加输入限制等功能。例如: ``` MyTextBox.Color := clYellow; MyTextBox.Font.Style := [fsBold]; MyTextBox.MaxLength := 10; MyTextBox.CharCase := ecUpperCase; ``` 在上述代码中,通过设置MyTextBox的Color属性和Font.Style属性,使文本框的外观更加美观。通过设置MaxLength属性,可以限制用户在文本框中输入的字符个数;通过设置CharCase属性,可以将用户在文本框中输入的字符自动转换为大写字母。 3. 最后,可以将自定义界面整合到安装程序的完整过程中。在InnoSetup的脚本文件中,可以将各个自定义页面添加到页面序列中,并在各自定义页面中添加相应的控件。例如: ``` [Code] procedure InitializeWizard(); begin WizardForm.WizardPages.Add(CreateInputPage(wpWelcome, '欢迎使用InnoSetup', '请输入您的名字:')); end; function NextButtonClick(CurPageID: Integer): Boolean; begin case CurPageID of wpWelcome: begin if MyTextBox.Text = '' then begin MsgBox('请输入您的名字!', mbError, MB_OK); Result := False; Exit; end; end; end; Result := True; end; ``` 在上述代码中,通过使用CreateInputPage()函数创建一个自定义页面,并在其中添加一个文本框。在NextButtonClick()函数中,可以对用户在文本框中输入的内容进行检查,确保用户输入了有效的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值