2016-06-07 3 views
0

У меня есть обычное действие, которое я вставил перед диалоговым окном SetupProgress, в котором отображается диалоговое окно AskOptions, предлагающее некоторые варианты ярлыков.Использование кнопки диалога назад

По большей части, я вел себя так, как ожидалось, но есть одно поведение, которое я не могу понять. Если пользователь нажимает кнопку «Назад», я хочу, чтобы он перешел к предыдущему диалоговому окну и не продолжал диалог SetupProgress. Я использую следующий код для своего диалога (минус код, который на самом деле создает ярлыки).

function MyFunction(hMSI) 

    NUMBER nResult; 

    STRING szMsg, szText1, szText2, szText3; 
    NUMBER nReturn, nValue, nvCheck1, nvCheck2, nvCheck3; 

begin 
    SetDialogTitle(DLG_ASK_OPTIONS, "More Options"); 
    szMsg = "Select from the additional options below."; 

    szText1 = "Shortcut option 1"; 
    szText2 = "Shortcut option 2"; 
    szText3 = "Shortcut option 3"; 

    nvCheck1 = TRUE; 
    nvCheck2 = TRUE; 
    nvCheck3 = FALSE; 

    // Display the check box (NONEXCLUSIVE) dialog. 
    nValue = NONEXCLUSIVE; 
    nResult = AskOptions (nValue, szMsg, 
      szText1, nvCheck1, 
      szText2, nvCheck2, 
      szText3, nvCheck3); 


    //This is the troublesome code... Not sure how to handle this...  
    //if (nResult = BACK) then 
    // goto [Where?]; 
    //endif; 


end; 

Как вы можете видеть, есть строка в нижней части, где я мог бы обрабатывать кнопку назад, я просто не имею ни малейшего понятия о том, как на самом деле вернуться к предыдущему диалогу.

ответ

1

Я бы предложил не пытаться чередовать базовые диалоги с табличным интерфейсом MSI и диалоги с кодом, основанные на установкеScript. Это будет сложно, и, скорее всего, это приведет к некоторым нечетным проблемам воспитания в лучшем случае или к потере фокуса в худшем случае.

Подход goto <previous dialog label>; работает как часть скрипта, который показывает несколько диалогов. Перепрыгивая назад, он показывает диалог, следующий за этой меткой, как следующий. Поэтому вы хотите как-то имитировать это. Если вы показываете это диалоговое окно InstallScript из контрольного события, возможно, вам нужно установить его, чтобы вы могли определить, какое диалоговое окно будет показано дальше. Например, если установить свойство DLGBUTTON к СЛЕДУЮЩИЙ или НАЗАД, вы можете создать два события NewDialog управления с взаимоисключающими условиями, основанными на стоимости DLGBUTTON. Если это настраиваемое действие вызывается в другом месте, соответствующим образом настройте invoker.

Но, если возможно, попытайтесь реализовать это диалоговое окно с использованием таблиц MSI и избегайте множества трудностей с несовместимым интерфейсом.

+0

Определенно вернулся к использованию диалогов MSI. И с тех пор имел успех. Причина, по которой я пошел в диалоги InstallScript, - это то, что я изначально использовал диалоги MSI, но неправильно понял, как работают события. Теперь все разобралось. –