拡大・縮小
ダイアログの書き方の練習です。
ダイアログが二回出てくる。実用性とても低い。
Windows版InDesign CS3にて検証。
あえてtransformメソッドを使わずresizeメソッドを使ったため、
一時的にScriptVersionをCS2に落とし、処理後にCS3に戻している。
16:00/書いた直後にエラーが含まれているのに気付いた。未修正。
16:30/修正した。
20:00/複数オブジェクトの選択に対応した、個別に拡大・縮小版も追記。
こっちはそれなりに使う場面があるかも(?)
////////////////////////////////////////////エラー処理 function myerror(mess) { if (arguments.length > 0) { alert(mess); } exit(); } ////////////////////////////////////////////ラジオダイアログ /* my_title ダイアログ(バー)のタイトル my_prompt メッセージ my_list ラジオボタンに展開するリスト result 選択したリスト番号 */ function radioDialog(my_title, my_prompt, my_list){ var my_dialog = app.dialogs.add({name:my_title, canCancel:true}); with(my_dialog) { with(dialogColumns.add()) { // プロンプト staticTexts.add({staticLabel:my_prompt}); with (borderPanels.add()) { var my_radio_group = radiobuttonGroups.add(); with (my_radio_group) { for (var i = 0; i < my_list.length; i++){ if (i == 0) { radiobuttonControls.add({staticLabel:my_list[i], checkedState:true}); } else { radiobuttonControls.add({staticLabel:my_list[i]}); } } } } // staticTexts.add({staticLabel:"パーセント値を入力してください(1〜1600)"}); // with (borderPanels.add()) { // with (dialogColumns.add()){ // var my_Per = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); // } // } } } if (my_dialog.show() == true) { var ans = my_radio_group.selectedButton; //正常にダイアログを片付ける my_dialog.destroy(); //選択したアイテムの番号を返す return ans; } else { // ユーザが「キャンセル」をクリックしたので、メモリからダイアログボックスを削除 my_dialog.destroy(); } } ////////////////まずは選択しているもののチェック if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")} var mydocument = app.activeDocument; if (mydocument.selection.length != 1) {myerror("オブジェクトまたはグループを1つ選択してください")} var mysel = mydocument.selection[0]; ////////////////処理の選択 var myList = ["上左", "上中", "上右", "中左", "中央中心", "中右", "下左", "下中", "下右"]; var ans_int = radioDialog("scaling_anchor", "オブジェクトを拡大または縮小します。基点を選択してください\n", myList); ////////////////実行 if (ans_int == 0) {//基点は上左 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:800}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.topLeftAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 1) {//基点は上中 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.topCenterAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 2) {//基点は上右 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.topRightAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 3) {//基点は中左 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.leftCenterAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 4) {//基点は中央中心 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.centerAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 5) {//基点は中右 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.rightCenterAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 6) {//基点は下左 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.bottomLeftAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 7) {//基点は下中 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.bottomCenterAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } } else if (ans_int == 8) {//基点は下右 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; mysel.resize(my_Val1,my_Val1,AnchorPoint.bottomRightAnchor); app.scriptPreferences.version=my_ScrVer; mysel.redefineScaling(); } }
複数選択対応、個別に拡大・縮小版
標準機能で複数選択して変形パレットで%値を打ち込んで拡大・縮小するのと違い、
それぞれのオブジェクトをその位置に置いたまま、選択した基点をもとに拡大・縮小する。
////////////////////////////////////////////エラー処理 function myerror(mess) { if (arguments.length > 0) { alert(mess); } exit(); } ////////////////////////////////////////////ラジオダイアログ /* my_title ダイアログ(バー)のタイトル my_prompt メッセージ my_list ラジオボタンに展開するリスト result 選択したリスト番号 */ function radioDialog(my_title, my_prompt, my_list){ var my_dialog = app.dialogs.add({name:my_title, canCancel:true}); with(my_dialog) { with(dialogColumns.add()) { // プロンプト staticTexts.add({staticLabel:my_prompt}); with (borderPanels.add()) { var my_radio_group = radiobuttonGroups.add(); with (my_radio_group) { for (var i = 0; i < my_list.length; i++){ if (i == 0) { radiobuttonControls.add({staticLabel:my_list[i], checkedState:true}); } else { radiobuttonControls.add({staticLabel:my_list[i]}); } } } } // staticTexts.add({staticLabel:"パーセント値を入力してください(1〜1600)"}); // with (borderPanels.add()) { // with (dialogColumns.add()){ // var my_Per = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); // } // } } } if (my_dialog.show() == true) { var ans = my_radio_group.selectedButton; //正常にダイアログを片付ける my_dialog.destroy(); //選択したアイテムの番号を返す return ans; } else { // ユーザが「キャンセル」をクリックしたので、メモリからダイアログボックスを削除 my_dialog.destroy(); } } ////////////////まずは選択しているもののチェック if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")} var mydocument = app.activeDocument; if (mydocument.selection.length == 0) {myerror("オブジェクトを選択してください")} var mysel = mydocument.selection; ////////////////処理の選択 var myList = ["上左", "上中", "上右", "中左", "中央中心", "中右", "下左", "下中", "下右"]; var ans_int = radioDialog("scaling_anchor", "オブジェクトを拡大または縮小します。基点を選択してください\n", myList); ////////////////実行 if (ans_int == 0) {//基点は上左 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:800}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.topLeftAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 1) {//基点は上中 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.topCenterAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 2) {//基点は上右 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.topRightAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 3) {//基点は中左 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.leftCenterAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 4) {//基点は中央中心 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.centerAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 5) {//基点は中右 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.rightCenterAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 6) {//基点は下左 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.bottomLeftAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 7) {//基点は下中 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.bottomCenterAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } } else if (ans_int == 8) {//基点は下右 my_dialog2 = app.dialogs.add({name:"オブジェクトを拡大縮小"}); with(my_dialog2){ with(dialogColumns.add()){ staticTexts.add({staticLabel:"%値を入力"}); with(borderPanels.add()){ with (dialogColumns.add()){ var myPercent = percentEditboxes.add({editValue:100,minimumValue:1,maximumValue:1600}); } } } } var myReturn = my_dialog2.show(); //ここから処理を行う if (myReturn == true){ var my_Val1 = myPercent.editValue; my_dialog2.destroy(); indd_kakusyuku(my_Val1); } else{ my_dialog2.destroy(); } //拡大縮小 function indd_kakusyuku(my_Val1){ my_ScrVer = app.scriptPreferences.version; app.scriptPreferences.version=4; for (var j=0; j<mysel.length; j++) { mysel[j].resize(my_Val1,my_Val1,AnchorPoint.bottomRightAnchor); } app.scriptPreferences.version=my_ScrVer; for (var k=0; k<mysel.length; k++) { mysel[k].redefineScaling(); } } }