2016-06-07 7 views
0

Ich habe eine einfache benutzerdefinierte Aktion, die ich vor dem SetupProgress Dialog eingefügt haben, dass ein AskOptions Dialogangebot Optionen einige Verknüpfung anzeigt.Dialog Mit Zurück-Taste

Zum größten Teil, ich habe es wie erwartet verhalten, aber es ist ein Verhalten, das ich nicht herausfinden kann. Wenn der Benutzer auf die Zurück-Schaltfläche klickt, möchte ich, dass er zum vorherigen Dialog wechselt und nicht zum SetupProgress Dialog weitergeht. Ich verwende den folgenden Code für meinen Dialog (abzüglich des Codes, der tatsächlich Verknüpfungen erstellt).

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; 

Wie Sie sehen können, gibt es eine Linie in der Nähe der Unterseite ist, wo ich die Zurück-Taste umgehen konnte, ich habe keine Ahnung, wie man tatsächlich zum vorherigen Dialog zurückzukehren.

Antwort

1

Ich würde vorschlagen, nicht verschachteln Basic MSI tabellengesteuerte Dialoge und InstallScript- Code gesteuerten Dialogen versuchen. Es wird schwierig werden, und wahrscheinlich wird es im besten Fall zu einigen seltsamen Problemen bei der Erziehung kommen, oder im schlimmsten Fall zum Verlust des Fokus.

Der goto <previous dialog label>; Ansatz funktioniert als Teil eines Skripts, das mehrere Dialoge zeigt. Indem er rückwärts springt, zeigt er dann den Dialog an, der nach diesem Label als nächstes kommt. Also willst du das irgendwie simulieren. Wenn Sie dieses InstallScript-Dialogfeld von einem Steuerelementereignis aus anzeigen, sollten Sie vielleicht eine Eigenschaft festlegen, mit der Sie bestimmen können, welcher Dialog als Nächstes angezeigt werden soll. Zum Beispiel, wenn Sie eine Eigenschaft DLGBUTTON zu NÄCHSTE oder BACK, können Sie zwei NewDialog Control-Ereignisse mit sich gegenseitig ausschließende Bedingungen basierend auf dem Wert von DLGBUTTON erstellen. Wenn diese benutzerdefinierte Aktion an anderer Stelle aufgerufen wird, passen Sie den Invoker entsprechend an.

Aber, wenn möglich, versuchen Sie diesen Dialog mit den MSI-Tabellen zu implementieren, und eine Menge Schwierigkeiten mit einer nicht-bindigen UI zu vermeiden. Auf jeden Fall

+0

ging zurück MSI Dialoge zu verwenden. Und haben seitdem Erfolg gehabt. Der Grund, warum ich zu InstallScript-Dialogen gegangen bin, ist, dass ich ursprünglich die MSI-Dialoge verwendet habe, aber nicht verstanden habe, wie die Ereignisse funktionierten. Alles jetzt aussortiert. –