コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

016.【ID】電卓パネルを表示

書いたコード

#targetengine "calculator"
var myDlg = new Window("palette", "電卓");
var main = myDlg.add("group {alignChildren: 'left', orientation: 'row'}");
var leftColumn = main.add("panel", undefined, "計算式");
var formula = leftColumn.add("edittext", [0, 0, 130, 50], undefined, {multiline: true});
var rightColumn = main.add("panel", undefined, "解答");
var result = rightColumn.add("edittext", [0, 0, 50, 50], undefined, {multiline: true});

// クリップボード内が数値だったら利用する
var tempTF = app.activeDocument.textFrames.add();
tempTF.visibleBounds = [0, 0, 297, 210]
app.select(tempTF.insertionPoints[0])
app.paste();
var tempTxt = tempTF.contents;
tempTF.remove()

if (/\d/.exec(tempTxt.charAt(0)) != null) {
  formula.text = tempTxt
  result.text = eval(formula.text)
}
myDlg.show();

formula.addEventListener("change", function () {
  result.text = eval(formula.text);
})

メモ

疑問点

edittext内でEnterを押すとドキュメントの方で改行が入ってしまう。

積み残し

  • 長さ値を含む計算
  • 入力されたのが計算式じゃなかったら止める?
  • EnterやTabキーが押されたら解答欄をアクティブにする(できない?)
  • 解答欄がアクティブになったら解答欄に出ているテキストをクリップボードに入れる(できない?)
  • ダイアログを出した後でもペーストしたい(できない?)

😭

現状ひどすぎる出来だけど、なんやかやすれば疑似コンソールとしても使えるようにできるかも。必要かどうかはともかく。

参考