[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:954) Re: [InDesign CS]document id, window id等の取得



>懐かしい。MNAR。SAPCOL。中村征宏万歳(^^;;;;; 

もはや、遠くなりにけりですね。
決して新ゴを進んで使いたいわけではないんですが。

>っていうか、indexではダメなんでしょうか? いまひとつ疑問なんですが、IDは参照と同義なので、いまひとつ利用方法がわかりません(笑)

やりたかったことは、最前面ウインドウのワンキーでのサイクリックな切り替えです。
index of windowsは、やってみると分かるのですがユニークな値になりません。

なぜidが必要になったかというと、windowsを変数に代入すると、
その時点で中身の順列が毎回変わっていたからです(なぜなんでしょう)。
ならばと参照のリスト自体をソートしようと思ったのですが、一度テキストに
型変換しないとできませんから、それは無理(らしい)。

それならば、ユニークな値であるidを取得してそれをソートし、
ソートしたものを「インデックス」としようと思ったけれども、
idが取得できない。取得できる name も index もユニークじゃないんじゃ、
どうしたらいいのかと。まあ、それで困っていたわけです。

以下を試してみると、うまくサイクリックにならないことが分かります。
なんでwindowsをmyWindowsに代入した時点で中身の順序が浮動するのかがよく分かりません。
また、(item previousWindow of myWindows)の部分を(item previousWindow of windows)にしても、うまく動きません。

■やりたいことを素直に書いたが、うまく動かないもの
■なぜなら、myWindowsの順序が毎回浮動するから

property previousWindow : 1

tell application "InDesign CS_J"
	copy windows to myWindows
	set myCount to (count of myWindows)
	if (previousWindow > myCount) then
		set previousWindow to 1
		bring to front (item previousWindow of myWindows)
	else
		bring to front (item previousWindow of myWindows)
		set previousWindow to previousWindow + 1
	end if
end tell

■対策して動くようにしたもの
■windowsを変数に代入した後は、ウインドウの状態が前回起動から
■変わっていないと推測できれば、windowsを更新しない。

--InDesignのウインドウを実行の度にサイクル表示する
property previousCurrnetItem : 1
property CurrnetItemNumber : 1
property myUnSortedWindowList : {}

tell application "InDesign CS_J"
if (CurrnetItemNumber is not equal to (count of windows)) or (myUnSortedWindowList is equal to {}) then
set myUnSortedWindowList to windows
set CurrnetItemNumber to (count of windows)
end if
if previousCurrnetItem is greater than (count of myUnSortedWindowList) then
set previousCurrnetItem to 1
end if
try
bring to front (item previousCurrnetItem of myUnSortedWindowList)
on error
set myUnSortedWindowList to windows
bring to front (item previousCurrnetItem of myUnSortedWindowList)
set previousCurrnetItem to previousCurrnetItem + 1
return
end try
set previousCurrnetItem to previousCurrnetItem + 1
end tell