DTP駆け込み寺
  1. [20785] 選択したグループを移動させるスクリプト 柴犬 2022/01/19 18:44
    1. [20786] Re: 選択したグループを移動させるスクリプト (z-) 2022/01/20 10:36
      1. [20787] Re^2: 選択したグループを移動させるスクリプト (z-) 2022/01/20 10:38
        1. [20788] Re^3: 選択したグループを移動させるスクリプト 柴犬 2022/01/20 12:35

[ 返信 ]

選択したグループを移動させるスクリプト

インデザインスクリプトの勉強の為、ドキュメントの固定位置にボタン一つで移動させるコントローラー(パレット)を現在作成中なのですが…今書いているものだとボタンを押した瞬間に移動のアクションを行わずパレットを閉じてしまいます。
期待する動きとしては、パレットはずっと表示されたまま、ボタンを押すとアイテムが移動。
おそらく原因は【.onClick】のfunctionに【.close】となっているから…だとは思うのですが、この【.close】の代替になる単語はあるのでしょうか。

//paletteを正しく表示する為に必要
#targetengine 'ObjMove'
//パレット表示
var palWin = new Window ("palette", "移動場所", [0,0,260,180]);
//タイトル
palWin.add("statictext", [20,10,260,40], "ボックスを動かす位置を選択してください");
//グループ化
var objGrp01= palWin.add("group", [0, 40, 260, 200]);
palWin["L1"] = objGrp01.add("button", [20, 20, 60, 60], "左1");
palWin["L2"] = objGrp01.add("button", [80, 20, 120, 60], "左2");
palWin["L3"] = objGrp01.add("button", [140, 20, 180, 60], "左3");
palWin["L4"] = objGrp01.add("button", [200, 20, 240, 60], "左4");
//終了ボタン
palWin["esc"] = palWin.add("button", [260-60, 180-40, 260-20, 180-20], "終了", {name:"esc"});
//イベント起点
palWin["L1"].onClick = function(){palWin.close(0);}
palWin["L2"].onClick = function(){palWin.close(1);}
palWin["L3"].onClick = function(){palWin.close(2);}
palWin["L4"].onClick = function(){palWin.close(3);}
palWin["esc"].onClick = function(){palWin.close(-1);}
//ウィンドウ表示
palWin.center ();
palWin.show ();
//動かす
function (){
var doc = app.activeDocument;
var Mobj = doc.selection[0];
var actMove = palWin.show ();
switch (actMove){
case 0:Mobj.move([17.15, -87.867]);break;//左1
case 1:Mobj.move([27.15, -87.867]);break;//左2
case 2:Mobj.move([37.15, -87.867]);break;//左3
case 3:Mobj.move([47.15, -87.867]);break;//左4
}
}

【.close】が解決されても、【switch(actMove)】を押した瞬間にパレットが表示されると同時に【case 0】が発動してしまう可能性を考慮すると…問題は【var actMove = palWin.show ();】に…?
よろしければ知恵をお貸しください

[20785] 柴犬 (2022/01/19 Wed 18:44)

[ 返信 ]


Re: 選択したグループを移動させるスクリプト

スクリプト全体としては、
//動かす のすぐ上の palWin.show (); でパレットを出してるんですが、これだとボタンを押したときのclose()の引数0〜3が以降の処理に伝わらない。
伝えるためには var actMove = palWin.show (); のほうが正しいんだけど、親ブロックの無名関数 function() は書いただけで呼ばれていないから実行されていない。
というのが動かないそもそもの原因のようです。
お察しの通り、palWin.close() がパレットが閉じられてしまう原因ではあります。

直し方としては、
まず関数に名前(hoge)をつける。引数(actMove)を宣言する。
function hoge(actMove){

各ボタンのハンドラ内でその関数を実行する
palWin["L3"].onClick = function(){hoge(2);}

var actMove = palWin.show (); は消す

でたぶんおっけーです。

[20786] (z-) (2022/01/20 Thu 10:36) web

[ 返信 ]


Re^2: 選択したグループを移動させるスクリプト

> //動かす のすぐ上の palWin.show (); でパレットを出してるんですが、これだとボタンを押したときのclose()の引数0〜3が以降の処理に伝わらない。

すみません華麗に文字化けしてました。。
引数 0 から 3 まで が以降の処理に です

[20787] (z-) (2022/01/20 Thu 10:38) web

[ 返信 ]


Re^3: 選択したグループを移動させるスクリプト

> > //動かす のすぐ上の palWin.show (); でパレットを出してるんですが、これだとボタンを押したときのclose()の引数0〜3が以降の処理に伝わらない。
>
> すみません華麗に文字化けしてました。。
> 引数 0 から 3 まで が以降の処理に です

ありがとうございます!無事に期待通りに動きました!!
初めてのGUIとswitch構文でそちらばかりに気をやっていましたが、直してみると初歩的なところで躓いていたんですね…。
これを元にして改良を重ねていこうと思います。助かりました〜!!

[20788] 柴犬 (2022/01/20 Thu 12:35)