Rob*_*ley 4 inno-setup pascalscript
我正在尝试MsgBox使用三个按钮和三个结果创建一个,但我无法看到如何创建第三个结果?我目前有两个按钮的代码MsgBox,它完美地工作:
if ((strExistingInstallPath <> '') and (strExistingVersion = '2.5.3')) then
begin
if SuppressibleMsgBox('Setup has detected that ' + strMyAppName + ' ' + strExistingVersion + '.' + strExistingBuild + ' is installed.' + #13#10 + #13#10 +
'The existing version must be removed before installing or upgrading to ' + strMyAppVersion + '.' + strMyAppBuild + '.' + #13#10 + #13#10 +
'Would you like Setup to uninstall the existing version?',
mbConfirmation, MB_YESNO, IDYES) = IDYES then
begin
Exec(GetUninstallString, '', '', SW_SHOW,
ewWaitUntilTerminated, intResultCode);
Result := True;
end else
begin
MsgBox('The existing version must be removed first.' + #13#10 +
'Setup is unable to continue. Setup will now exit.',
mbError, MB_OK);
Result := False;
end;
end;
Run Code Online (Sandbox Code Playgroud)
如果我更改MB_YESNO为MB_YESNOCANCEL,我现在得到三个按钮,是,否和取消.但是,由于if语句已分配给MsgBox,我正在努力研究如何进行else if IDCANCEL then类型语句.我试图将MsgBox返回的ID常量分配给一个字符串,然后为该字符串创建单独的if语句,使其等于每个ID常量,但这很难失败.我在这里错过了什么?理想情况下,我希望将三个按钮标记为Yes,No和Silent,以便为第三个按钮提供/silent参数以防止卸载提示.那么,是否可以重命名按钮?
您可以编写多个if语句,但是您必须将返回的值存储到变量中并检查该变量值.但正如@Sertac在他的评论中提到的,你可以使用一个case语句,它更好地描述了代码中的目标,例如:
case SuppressibleMsgBox('Text', mbConfirmation, MB_YESNOCANCEL, IDYES) of
IDYES:
begin
{ user pressed Yes }
end;
IDNO:
begin
{ user pressed No }
end;
IDCANCEL:
begin
{ user pressed Cancel }
end;
end;
Run Code Online (Sandbox Code Playgroud)
出于对多个if陈述的好奇,它可能是:
var
MsgResult: Integer;
begin
MsgResult := SuppressibleMsgBox('Text', mbConfirmation, MB_YESNOCANCEL, IDYES);
if MsgResult = IDYES then
begin
{ user pressed Yes }
end
else
if MsgResult = IDNO then
begin
{ user pressed No }
end
else
if MsgResult = IDCANCEL then
begin
{ user pressed Cancel }
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |