Inno Setup MsgBox с тремя кнопками и тремя результатами
Я пытаюсь создать 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;
Если я изменю MB_YESNO
в MB_YESNOCANCEL
Теперь я получаю три кнопки: Да, Нет и Отмена. Тем не менее, так как if
заявление присваивается MsgBox
Я изо всех сил пытаюсь понять, как сделать else if IDCANCEL then
Тип заявления. Я попытался присвоить константе ID, возвращаемой MsgBox, строку, а затем создать отдельные операторы if для строки, равные каждой константе ID, но это с треском провалилось. Что мне здесь не хватает? В идеале я хотел бы, чтобы три кнопки были помечены как Да, Нет и Без звука, чтобы третьей кнопке можно было присвоить /silent
параметр, чтобы предотвратить приглашение удаления. Итак, возможно ли переименовать кнопки?
2 ответа
Вы могли бы написать несколько 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;
Из любопытства с несколькими 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;
Вот окончательный код на случай, если он пригодится кому-либо еще:
var
intMsgBoxResult: Integer;
if ((strExistingInstallPath <> '') and (strExistingVersion = '2.5.3')) then
begin
intMsgBoxResult := 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, IDIGNORE);
if intMsgBoxResult = IDYES then
begin
Exec(GetUninstallString, '/silent', '', SW_SHOW,
ewWaitUntilTerminated, intResultCode);
Result := True;
end;
if intMsgBoxResult = IDNO then
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;
if intMsgBoxResult = IDIGNORE then
begin
Exec(GetUninstallString, '', '', SW_SHOW,
ewWaitUntilTerminated, intResultCode);
Result := True;
end;
end;