2017-05-22 4 views
0

Ich versuche, mit einem Skript, das den Benutzer mit einem einfachen Dialogfeld mit drei Optionen präsentiert: "Ja", "Nein" und "Abbrechen". Basierend auf der Benutzereingabe erzeugt das Skript dann zwei verschiedene Arten von PDFs (Spezialbericht/Online-PDF) oder beendet den Prozess (falls sie auf "Abbrechen" geklickt haben). Das ist, was ich bisher herausgefunden habe. Obwohl ich in der Lage bin der Benutzer Klick zu erfassen, kann ich nicht das richtige Skript erhalten, auf der Auswahl des Benutzers laufen basiert:Capture Benutzer klicken: InDesign Scripting

function checkReportType(){ 
    //draw window 
    var askReportWindow = new Window("dialog", "Report Type");  
    askReportWindow.textmissing = askReportWindow.add('statictext{text:"Is this a Special Report?", justify:"center"}'); 
    var myInputGroup = askReportWindow.add("group");   
    var myButtonGroup = askReportWindow.add("group"); 
    myButtonGroup.alignment = "right";    
    //add buttons 
    var yesButton = myButtonGroup.add("button", undefined, "Yes"); 
    var noButton= myButtonGroup.add("button", undefined, "No"); 
    var cancelButton = myButtonGroup.add("button", undefined, "Cancel"); 
    //setting values to false for "yes" and "no" buttons 
    var yesClicked = false; 
    var noClicked = false; 
    //change button value on click 
    yesButton.onClick = function(){ 
     yesClicked = true; 
     //alert("k"); 
    }  
    noButton.onClick = function(){ 
     noClicked = true; 
     //alert("l");  
    } 
    //show window 
    askReportWindow.show(); 
    //check for click 
    if(yesClicked===true){ 
     exportSpecialReport(); 
    }else if(noClicked===true){ 
     exportOnlinePDF(); 
    }else{ 
     exit(); 
     askReportWindow.destroy(); 
    } 
}//end checkReportType() 

Antwort

3

function main() { 
 
\t var w = new Window ("dialog", "Please choose to do something…"), 
 
\t u, 
 
\t noBtn = w.add('button', u, 'NO'), 
 
\t outBtn = w.add('button', u, 'CANCEL'), 
 
\t yesBtn = w.add('button', u, 'YES'); 
 
\t 
 
\t noBtn.code = 0; 
 
\t outBtn.code = 1; 
 
\t yesBtn.code = 2; 
 
\t 
 
\t w.preferredSize.width = 150; 
 
\t w.alignChildren = ["fill", "top"]; 
 
\t 
 
\t noBtn.onClick = outBtn.onClick = yesBtn.onClick = function() { 
 
\t \t w.close(this.code) 
 
\t } 
 

 
\t var result = w.show(); 
 

 
\t if (result == 0) { 
 
\t \t alert("user clicked \"NO\""); 
 
\t } 
 
\t else if (result == 1) { 
 
\t \t alert("user clicked \"CANCEL\""); 
 
\t } 
 
\t else { 
 
\t \t alert("user clicked \"YES\""); 
 
\t } 
 
}

+0

Können Sie uns erklären, was 'this' bezieht sich auf in' w.close (this.code) ' im 'onClick'? Ich verstehe, dass was Sie tun, den Code speichern und dann basierend auf seinem Wert die verschiedenen Szenarien in der 'if/else' Anweisung ausführen. Vielen Dank übrigens, funktioniert wie ein Charme! –

+0

Dies bezieht sich auf die Schaltfläche, von der das Ereignis ausgelöst wurde. Ich benutze dies, um zu vermeiden, den gleichen Handler für die drei Knöpfe zu wiederholen, aber mit geringfügigem Unterschied. – Loic

1

Wenn Sie ScriptUI nicht verwenden müssen, können Sie dies tun mit dem InDesign in solchen Dialogen bauen.

/* global app, $*/ 
var diag = app.dialogs.add({ 
    name: 'my awesome dialog', 
    canCancel: true 
}); 
var col1 = diag.dialogColumns.add(); 
var radioGrp = col1.radiobuttonGroups.add(); 
var ctrl1 = radioGrp.radiobuttonControls.add({ 
    staticLabel: 'selection1', 
    checkedState: true 
}); 
var ctrl2 = radioGrp.radiobuttonControls.add({ 
    staticLabel: 'selection2' 
}); 

if(diag.show() === true) { 
    if(ctrl1.checkedState === true) { 
    $.writeln('user selected item 1'); 
    } else if(ctrl2.checkedState === true) { 
    $.writeln('user selected item 2'); 

    } 
    diag.destroy(); 
} 
0

Falls irgendwelche AppleScripters Diese Seite finden:

if button returned of ¬ 
    (display dialog "Is this a Special Report?" buttons {"Yes", "No", "Cancel"} default button 2) = "Yes" then 
    my exportSpecialReport() 
else 
    my exportOnlinePDF() 
end if 
+0

Ja, aber Sie reduzieren dann nur Ihren Code ton mac Benutzer. ExtendScript wird den Code für beide Plattformen kompatibel machen;) – Loic

Verwandte Themen