我在 inno 中创建了一个自定义向导页面,需要在将文件安装到 {app} 文件夹后显示该页面。这是通过提供 wpInfoAfter 来实现的。问题是,它只显示“下一步”按钮,没有取消/返回按钮,右上角的对话框关闭按钮也被禁用。我知道不需要后退按钮,因为它需要删除已安装的文件。无论如何可以显示“取消”按钮吗?
问问题
2448 次
1 回答
6
该Cancel
按钮在安装后阶段没有任何功能,因为 InnoSetup 不希望在安装过程完成后执行需要取消的进一步操作。因此,即使您针对该事实显示按钮,您也会得到一个没有任何操作的按钮。
就个人而言,我更愿意在安装开始之前收集设置数据库所需的信息,因为考虑到用户安装应用程序的情况并简单地取消安装后向导(很容易发生这种情况)。之前这样做,您将能够强制您的用户在他们实际访问应用程序本身之前填写您需要的内容。但是,如果您在安装后仍想这样做,这里有一个解决该丢失取消按钮的方法。
作为一种解决方法,您可以创建自己的自定义按钮,该按钮将位于具有相同功能的相同位置。这是一个示例脚本,模拟取消按钮并仅在安装过程后放置的自定义页面上显示它。这只是一种解决方法,因为您至少需要解决此问题:
- 启用向导窗体的关闭十字(安装阶段完成后禁用)
- 以某种方式处理ESC快捷键(它也会调用退出提示对话框,但我找不到解决此问题的方法)
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
procedure ExitProcess(uExitCode: UINT);
external 'ExitProcess@kernel32.dll stdcall';
var
CustomPage: TWizardPage;
CancelButton: TNewButton;
procedure OnCancelButtonClick(Sender: TObject);
begin
// confirmation "Exit setup ?" message, if user accept, then...
if ExitSetupMsgBox then
begin
// stop and rollback actions you did from your after install
// process and kill the setup process itself
ExitProcess(0);
end;
end;
procedure InitializeWizard;
begin
// create a custom page
CustomPage := CreateCustomPage(wpInfoAfter, 'Caption', 'Description');
// create a cancel button, set its parent, hide it, setup the bounds
// and caption by the original and assign the click event
CancelButton := TNewButton.Create(WizardForm);
CancelButton.Parent := WizardForm;
CancelButton.Visible := False;
CancelButton.SetBounds(
WizardForm.CancelButton.Left,
WizardForm.CancelButton.Top,
WizardForm.CancelButton.Width,
WizardForm.CancelButton.Height
);
CancelButton.Caption := SetupMessage(msgButtonCancel);
CancelButton.OnClick := @OnCancelButtonClick;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
// show your fake Cancel button only when you're on some of your after
// install pages; if you have more pages use something like this
// CancelButton.Visible := (CurPageID >= FirstPage.ID) and
// (CurPageID <= LastPage.ID);
// if you have just one page, use the following instead
CancelButton.Visible := CurPageID = CustomPage.ID;
end;
于 2012-09-19T08:29:47.333 回答