inDesignでダイアログを表示させる場合、内容を表示するだけのときと、ダイアログにtextareaなど、値を入力し、その値を使ってその後の処理を行うときで全く異なるダイアログを生成する必要があったため、メモ
環境
- inDesignCC(2024)
- Visual Studio Code
- plugin: ExtendScript Debugger v2.0.3
1, ダイアログに内容を表示しておくだけの場合
function RsDialog(text) {
// ScriptUIダイアログを作成
var dialog = new Window("dialog", "Results Dialog");
// テキストエリアを追加
var textarea = dialog.add("edittext", [0, 0, 640, 200], 'ここにテキストを入力...', {multiline: true});
textarea.text = text;
// OKボタンを追加
var okButton = dialog.add("button", undefined, "OK");
// ダイアログを表示
okButton.onClick = function () {
// テキストエリアの内容を取得
dialog.destroy();
};
return dialog;
}
// 実行
(function(){
new RsDialog('come').show();
})();
2, ダイアログに入力項目を入れておく場合
1の方法で入力項目をダイアログに設置した場合、入力値は取得できるが、背景で開いているドキュメントの要素にアクセスできなかった。
ダイアログに入力された値をドキュメントに反映させるため、以下の方法を用いた
var selectedMode = 0;
var inputContent = '';
function myDialog() {
var myDialog = app.dialogs.add({name:"My Dialog"});
with(myDialog){
with(myDialog.dialogColumns.add()){
// ラジオボタンの追加
with(dialogRows.add()){
with(borderPanels.add()){
var myButtons = radiobuttonGroups.add();
with(myButtons){
radiobuttonControls.add({staticLabel:"チェック1", checkedState:true});
radiobuttonControls.add({staticLabel:"チェック2"});
}
}
}
// EditTextの追加
with (dialogRows.add()) {
var myEditText = textEditboxes.add({editContents: "", minWidth: 200});
}
}
}
var myReturn = myDialog.show();
if (myReturn == true){
selectedMode = myButtons.selectedButton;
inputContent = myEditText.editContents;
myDialog.destroy();
myFunction();
}
else{
myDialog.destroy();
};
}
function myFunction() {
var doc = app.activeDocument;
alert(selectedMode + '\n' + inputContent);
}
// 実行
(function(){
myDialog();
})();