自宅のiMac 24inch(Mid 2007)のHDDがぶっ壊れたので換装した。購入後の1年保証が切れて2日目でした。なんとかタイマーってヤツか・・・
最初は、何をするにも時間がかかる症状だった。再起動しても直らないので、そりゃまあHDDの不良が疑われますわな。何だこりゃと思って、何も考えずにDVD起動してディスクユーティリティでFirst Aidをかけた。すると修復失敗。タイムマシンでバックアップしてあるからいいや(最終的にはインストールされたアプリも含めてデータは99%ほぼ完全復活した。スゲー機能だと実感)と思ってフォーマットするも失敗。もう一度First Aidを確認すると…
完全にイカレてしまったようだ。そしてHDDを買いに走りましたということで。
新しいHDDはWestern DigitalのWD6400AAKS。640GB(320GBプラッタ×2) 7200rpm 16MB。換装して、やっぱし動作がやや速くなったような気がする。BootCampのVistaでHDDエクスペリエンススコアは5.9だった。
で、この以下の記事は次になにかあった場合の自分用メモです。めんどくさいです。製品保証もなくなります。この情報が元で誰かのMacに事故や部品の破損があってもワタクシは責任取れませんのであしからず。
...
↓iPhoneでこれ見ながらやった
http://ascii.jp/elem/000/000/059/59034/index-2.html
↓あとでみつけたけどこっちのほうが詳しい
http://ascii.jp/elem/000/000/137/137605/index-2.html
こっち知ってたら時間短縮できたな…
【ガラスの取り外しについて】
吸盤付のタオル掛けで十分。中央じゃなくて端のほうを吸盤で持ち上げたら、後は手でウニッとやっちゃってOK。
【フロントパネル周囲のネジ12本について】
長さが3種類あるうち、短い2種が記事では9mmと13mmって書いてあるけどそんなに違わなかったような気がする。そしてその短2種の位置が上下左右に対称ではない。これを間違えると最後にきついネジが残ってしまう。きついけど締まらないことはない。何ではいんねーのかと思って、長さが微妙に違うところまでは気が付いたけれど、位置が対象でないとは気が付かなかった。。。多分2つくらい間違えた位置にはめてしまったと思う。まあいいかとさっきまで思ってたけど、何かを圧迫していたらまずいような気がしてきた。今晩直そう…
【液晶パネルのケーブルについて】
液晶パネルのバックライト電源コネクターを外さなくても、DVDケース6個積みタワーを2つ作り、その上にiMacを仰向けに寝かせることで、バックライト電源コネクターが繋がった状態でも液晶パネルをiMacの上部外側にずらし、立てかけて作業を進めることができる。これだとテープをバリバリ外したりしなくて済む。
ただし作業中に液晶がパタンと倒れたら完全にアウアウな死亡遊戯なので次があるならちゃんと外せコノヤロー!ついでにT8ネジ外しもレンチタイプじゃ使いにくいんだよケチんねーでドライバー買っとけバーローと未来の自分に言わせてもらう。
それから映像信号用ケーブルは、T6ドライバーがなくても液晶パネル側コネクタ部分を指で挟んで外すことが可能。本体側を外したほうがラクなのかどうかは、やっていないのでわからない。
【HDD取り外しについて】
上記リンク記事の2つ目では「プラスチック製のホルダーを強く押し曲げて」とあるが、1つ目のリンク記事のように、ネジを外してホルダーを横にずらしたほうが良い。周囲の金属枠のT8ネジは外さなくていい。
【ガラスはめの前にホコリとり】
ガラス内部にホコリが残ると気になってしょうがないので(あとで取るのめんどくせーし)、ホコリとり用の化学ハンドモップみたいなものを用意しておくと良い。
■ということで用意しておくものリスト
トルクスドライバー T8、T6
DVDケース12個またはそれに準ずるもの(液晶をちゃんと外すにしても横に寝かすとラク)
化学ハンドモップ(ホコリが取れるもの)
吸盤付の取っ手(タオル掛けで十分)
2008年12月17日水曜日
2008年10月31日金曜日
Illustratorで変倍画像チェック
ある教えてサイトで困っている人に作ってあげたイラレ用の画像変倍チェックスクリプト。
実行すると、変倍の配置画像があればすべて選択された状態になり、ダイアログで何個あるか表示します。
画像にロック等がかかっているとうまく動作しないかも。
JavaScriptですので、Mac版でも動きます(確認してないけど)。
...
実行すると、変倍の配置画像があればすべて選択された状態になり、ダイアログで何個あるか表示します。
画像にロック等がかかっているとうまく動作しないかも。
JavaScriptですので、Mac版でも動きます(確認してないけど)。
...
#target Illustrator
Application.active
doc = app.activeDocument;
doc.selection = null;
allPlaceItem = doc.placedItems;
for(i=0; i<allPlaceItem.length; i++){
tatehi = Math.round((allPlaceItem[i].boundingBox[1] / allPlaceItem[i].height) * 100,1);
yokohi = Math.round((allPlaceItem[i].boundingBox[2] / allPlaceItem[i].width) * 100,1);
if(tatehi != yokohi) allPlaceItem[i].selected = true;
}
alert("Henbai count = " + doc.selection.length);
2008年7月11日金曜日
2008年7月5日土曜日
ソフトバンクショップに電話の巻【iPhone予約?】
さて、iPhoneの発売はいよいよ来週金曜日です。
手に入れる方法は次の2つ
1 予約する
2 ソフトバンクショップに朝から並ぶ
予約といっても孫社長が予約中止要請をショップに出しているとのことで、受け付けているかどうかすらわかりません。
とりあえず自宅近辺のソフトバンクショップへ電話をかけまくりんぐ...まずはA店…ふざけた兄ちゃんが笑いながら電話に出た。予約は受け付けていない。
次にB店…まじめそうな兄ちゃんが電話に出た。予約は受け付けていない。
C店…気さくな兄ちゃんが電話に出た。来店なら受け付けているとのこと!しかしすでに50人くらい予約しているそうで、発売当日はかなりムリっぽいといわれる。うは。
予約可能な店では他でもすでに相当数予約済みだろうと推測、ここで電話中止。そうかそうか、行動が遅かったですか私は。まあ電話前から薄々わかってはいましたよ…。う〜ん、こりゃ朝から並ぶほかないか。入荷数も聞いたんだけど、まだ決まっていないみたいだったし、感じのよかったB店に並んでみるか。いや、入荷数でいくとA店のほうが多そうだなぁ、場所的に。前日に聞いてから決めるか。
関係ないけど今日は映画を見に行くぜ!
まず川崎チネチッタでホット・ファズ(ダイノジのトークショー付)
その後で109みなとみらいへ行って老インディ
ホット・ファズはスゲー楽しみです。おもしろかったら感想かくっす。
あ、念のため書いておくと、楽しみなのはダイノジではなく本編ですからね。
手に入れる方法は次の2つ
1 予約する
2 ソフトバンクショップに朝から並ぶ
予約といっても孫社長が予約中止要請をショップに出しているとのことで、受け付けているかどうかすらわかりません。
とりあえず自宅近辺のソフトバンクショップへ電話をかけまくりんぐ...まずはA店…ふざけた兄ちゃんが笑いながら電話に出た。予約は受け付けていない。
次にB店…まじめそうな兄ちゃんが電話に出た。予約は受け付けていない。
C店…気さくな兄ちゃんが電話に出た。来店なら受け付けているとのこと!しかしすでに50人くらい予約しているそうで、発売当日はかなりムリっぽいといわれる。うは。
予約可能な店では他でもすでに相当数予約済みだろうと推測、ここで電話中止。そうかそうか、行動が遅かったですか私は。まあ電話前から薄々わかってはいましたよ…。う〜ん、こりゃ朝から並ぶほかないか。入荷数も聞いたんだけど、まだ決まっていないみたいだったし、感じのよかったB店に並んでみるか。いや、入荷数でいくとA店のほうが多そうだなぁ、場所的に。前日に聞いてから決めるか。
関係ないけど今日は映画を見に行くぜ!
まず川崎チネチッタでホット・ファズ(ダイノジのトークショー付)
その後で109みなとみらいへ行って老インディ
ホット・ファズはスゲー楽しみです。おもしろかったら感想かくっす。
あ、念のため書いておくと、楽しみなのはダイノジではなく本編ですからね。
2008年6月18日水曜日
「iPhone」購入予定がある人が9%もいる!
「iPhone」の購入予定がない人は91%,アイシェアが調査
という記事を見て。なんと、iPhoneという1つの端末が日本で9%のシェアを占めるかもしれないという結果が出ています!
そして「携帯のバッテリーは外せたほうがいいですか?」という設問からは...52.5%の人たちが電池交換をしたことはないという結果が!
つまりiPhoneの電池交換ができなくても実際には困らない人が過半数を占める、ということが読み取れますね。
・・・ていうかサンプル数402名って少なすぎでは?
そんな調査会社アイシェアの発表資料はこちら
という記事を見て。なんと、iPhoneという1つの端末が日本で9%のシェアを占めるかもしれないという結果が出ています!
そして「携帯のバッテリーは外せたほうがいいですか?」という設問からは...52.5%の人たちが電池交換をしたことはないという結果が!
つまりiPhoneの電池交換ができなくても実際には困らない人が過半数を占める、ということが読み取れますね。
・・・ていうかサンプル数402名って少なすぎでは?
そんな調査会社アイシェアの発表資料はこちら
2008年6月12日木曜日
MobileMeのアカウント(続報)
mac.com メールアドレスのほかに、同じユーザ名の me.com アカウントを取得ということだった。どちらのアカウントからも送信が可能で、受信メールは両方のアカウントに届くということになっている。
ところで、.Macではカレンダーへのイベント追加はできなかったのね。早川の〈氷と炎の歌〉の第4部単行本が7月25日に発売という情報を得たので、忘れないようにイベント追加しようとしたらできなかった。オイオイと思ったけど、MobileMeになればWeb上でイベント追加も可能になるとのこと。それくらい.Macでもやっておいて欲しかった。まあいいや、ちっと待つか。【了】
ところで、.Macではカレンダーへのイベント追加はできなかったのね。早川の〈氷と炎の歌〉の第4部単行本が7月25日に発売という情報を得たので、忘れないようにイベント追加しようとしたらできなかった。オイオイと思ったけど、MobileMeになればWeb上でイベント追加も可能になるとのこと。それくらい.Macでもやっておいて欲しかった。まあいいや、ちっと待つか。【了】
2008年6月11日水曜日
.MacがMobileMeになってドメインがダサくなる件
xxxx@mac.com
↓
xxxx@me.com
きっとWin + iPhone G3のユーザにもこのサービスを訴求するため、Mac色を薄くするのだろう。
mac.comドメインのメールアドレスが欲しい人は7月11日前に.macを購入すればよい。
でもAppleの説明で、
って、2つアカウントをもらえることになるのだろうか?
me.comを選んだらmac.comが使えなくなるなら、mac.comを使うなぁ。
あと考えられるのは、片方が変更不可能のメールエイリアスになったりとか。
そんなケチ臭いことしないでね。安くないお金払ってんだから。【了】
↓
xxxx@me.com
きっとWin + iPhone G3のユーザにもこのサービスを訴求するため、Mac色を薄くするのだろう。
mac.comドメインのメールアドレスが欲しい人は7月11日前に.macを購入すればよい。
でもAppleの説明で、
って、2つアカウントをもらえることになるのだろうか?
me.comを選んだらmac.comが使えなくなるなら、mac.comを使うなぁ。
あと考えられるのは、片方が変更不可能のメールエイリアスになったりとか。
そんなケチ臭いことしないでね。安くないお金払ってんだから。【了】
2008年6月3日火曜日
【追記】Illustratorで文字あふれしたテキストフレームを全選択する
先日のイラレ文字あふれエントリーについて。
「VBS for Adobe InDesign+」のおーまちさんが、同じことをするスクリプトを(だいぶ前に)作っていた事を発見。いつも参考にさせていただいているサイトなので、考え方がほぼ同じだったことがちょっとうれしい。ただし、あちらは文字数をカウントして比較しているのに対し、こちらはテキストそのものを比較している。フレーム内の文字数がすんごく多かった場合に、ウチはなんか不具合がおきそうな気がしないでもない。それになんか文字の置換とかしちゃってややこしさ3倍(当社比)なかんじ・・・
しかし、選択状態の解除部分は勝ってるとおもいますぞ(勝手に勝負すんな)。【了】
「VBS for Adobe InDesign+」のおーまちさんが、同じことをするスクリプトを(だいぶ前に)作っていた事を発見。いつも参考にさせていただいているサイトなので、考え方がほぼ同じだったことがちょっとうれしい。ただし、あちらは文字数をカウントして比較しているのに対し、こちらはテキストそのものを比較している。フレーム内の文字数がすんごく多かった場合に、ウチはなんか不具合がおきそうな気がしないでもない。それになんか文字の置換とかしちゃってややこしさ3倍(当社比)なかんじ・・・
しかし、選択状態の解除部分は勝ってるとおもいますぞ(勝手に勝負すんな)。【了】
2008年5月30日金曜日
Illustratorで文字あふれしたテキストフレームを全選択する
Illustratorで、文字あふれしているテキストフレームだけををすべて選択するスクリプトです。
...
textFrameのlinesプロパティでは表示されているテキストだけが取得されることを利用して、フレーム内の全テキストと表示テキストの文字列が違った場合に、文字あふれしていると判断します。
なぜこんな処理をするかというと、テキストフレームにオーバーフローのプロパティがない(らしい)からです(あったら教えて…)。
表示テキストを取得する際に、linesプロパティでは改行コードが取り出せません。表示テキストには改行がなくて、全テキストには改行があるということでは両者を正しく比較できないので改行を戻してやる必要がある…ところが、linesプロパティで取り出されるのは段落ではなく、あくまで見かけの行なので、lineの後ろに必ず改行が入るわけではありません。すると、ちょっと面倒な処理になりそうです。
考えた結果、押してだめなら引いてみな、ということで全テキストの方から改行をすべて取る処理
をしています。
「/\r/g」は、「すべての改行(キャリッジリターン)」という意味です。よくわからない方は「正規表現」でググってください。Illustratorでの改行コードは、Windows版でも「\r」のみで扱われているようなので、このままでOKです(つーかWin版でしか動作確認してない)。
...
#target Illustrator
Application.active
//まず選択解除
app.activeDocument.selection = null;
doc = app.activeDocument;
Frs = doc.textFrames;
visibleText = "";
for(Fr=0; Fr < Frs.length; Fr++){
//あふれ部分含む全テキスト抽出
allText = Frs[Fr].contents;
//改行をすべて取る
allText = allText.replace(/\r/g, "");
//あふれていないテキスト部分だけを抽出する
for(i=0; i < Frs[Fr].lines.length; i++) {
visibleText = visibleText + Frs[Fr].lines[i].contents;
}
if(allText != visibleText) {
Frs[Fr].selected = true;
}
}
alert("文字あふれは" + doc.selection.length + "個所");
textFrameのlinesプロパティでは表示されているテキストだけが取得されることを利用して、フレーム内の全テキストと表示テキストの文字列が違った場合に、文字あふれしていると判断します。
なぜこんな処理をするかというと、テキストフレームにオーバーフローのプロパティがない(らしい)からです(あったら教えて…)。
表示テキストを取得する際に、linesプロパティでは改行コードが取り出せません。表示テキストには改行がなくて、全テキストには改行があるということでは両者を正しく比較できないので改行を戻してやる必要がある…ところが、linesプロパティで取り出されるのは段落ではなく、あくまで見かけの行なので、lineの後ろに必ず改行が入るわけではありません。すると、ちょっと面倒な処理になりそうです。
考えた結果、押してだめなら引いてみな、ということで全テキストの方から改行をすべて取る処理
allText = allText.replace(/\r/g, "");
をしています。
「/\r/g」は、「すべての改行(キャリッジリターン)」という意味です。よくわからない方は「正規表現」でググってください。Illustratorでの改行コードは、Windows版でも「\r」のみで扱われているようなので、このままでOKです(つーかWin版でしか動作確認してない)。
2008年5月29日木曜日
【InDesign】【VBS】スクリプト未対応の操作を呼出すには?(文字あふれの検索)/解説編
前エントリーの解説です。
VBSで作ったInDesign CS2のスクリプト。Windows版専用です。
※当ブログのスクリプトを実行した結果、データが壊れたとか、パソコンが壊れたとか、なんかおかしくなったとか、あらゆる損害にたいする苦情等は受け付けられません。すべて自己責任でご利用ください。
【動作内容】
文字あふれしたテキストフレームを探し出し、そのフレームを画面中央に表示、あふれている内容をダイアログで確認できるスクリプトです。改行は「¶」として表現します。でないと改行だけであふれている場合にわかりにくいからね。
文字あふれがあったらその場で修正したいこともあるでしょうから、他の文字あふれフレームも続けて表示するかどうか問いかけます。
表示しないことを選択した場合も文字あふれフレームの検索は(裏で)行い、最終的な文字あふれフレーム数をダイアログで表示して終わります。
...
※連結されているフレームからあふれた内容を取得するのはメンドクサイ&長くなりそう、という理由で未対応です(検索自体はできます。また、内容を取得できませんという表示はしています)。
※[オブジェクト全体を表示]のショートカットキー([Alt]+[Ctrl]+[-])を変更していると、予測不能の結果になります。
【スクリプト未対応の操作とは】
InDesignのスクリプトでは、あるフレームを画面に表示するというメソッドが用意されていません(少なくともCS2で私が調べた範囲では。あったらショック)。
そこで私はWindows Script Hostを利用し、ショートカットキーが押されたという情報を直接InDesignに送り込むという荒業を考えました。InDesign上のJavaScriptでWindows Script Hostを利用する方法がわからなかったので、Windows専用スクリプトとなってしまうVBSです(つーかJSで作れたところで使う機能がWin専用だけど)。MacならAppleScriptでなんとかしてアプリにショートカットを送信できれば、同じようなことができるかもしれませんね。どうかな?
しかしあまり褒められたやり方ではないと思いますが・・・まあ、この世は結果がすべてということで。
・2,3行目(Windows Script Hostの利用準備)
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
・24行目(ショートカットキー送信)
WshShell.SendKeys "%^-"
これで[オブジェクト全体を表示]コマンドのショートカットキー([Alt]+[Ctrl]+[-])がInDesignに送信されます。他にも、スクリプトでは実行不可能な機能に対してショートカットキーを割り当てられれば、この方法で何とかなるのではないでしょうか。
ちなみに、ショートカットキーを送ってからすぐに次の処理を始めると、InDesignの画面切り替え処理が追いつかないため、次の25行目で無駄な処理を行うslp関数を呼び出しています。この無駄がないと、文字あふれ発見ダイアログが画面の切り替えより早く出てしまい、文字あふれフレームの表示がうまくいきません。ダイアログを閉じた後で表示されるとか(これでスゲー悩んだ・・・)。このまま実行してもうまく[オブジェクト全体を表示]が働かない場合は、slp関数に渡す数値を増やしてみてください。サンプルでは10000としていますが、当方Core2 Duo 1.8GHz(メモリ1GB)のマシンでいい感じに動いています。
VBSで作ったInDesign CS2のスクリプト。Windows版専用です。
※当ブログのスクリプトを実行した結果、データが壊れたとか、パソコンが壊れたとか、なんかおかしくなったとか、あらゆる損害にたいする苦情等は受け付けられません。すべて自己責任でご利用ください。
【動作内容】
文字あふれしたテキストフレームを探し出し、そのフレームを画面中央に表示、あふれている内容をダイアログで確認できるスクリプトです。改行は「¶」として表現します。でないと改行だけであふれている場合にわかりにくいからね。
文字あふれがあったらその場で修正したいこともあるでしょうから、他の文字あふれフレームも続けて表示するかどうか問いかけます。
表示しないことを選択した場合も文字あふれフレームの検索は(裏で)行い、最終的な文字あふれフレーム数をダイアログで表示して終わります。
...
※連結されているフレームからあふれた内容を取得するのはメンドクサイ&長くなりそう、という理由で未対応です(検索自体はできます。また、内容を取得できませんという表示はしています)。
※[オブジェクト全体を表示]のショートカットキー([Alt]+[Ctrl]+[-])を変更していると、予測不能の結果になります。
【スクリプト未対応の操作とは】
InDesignのスクリプトでは、あるフレームを画面に表示するというメソッドが用意されていません(少なくともCS2で私が調べた範囲では。あったらショック)。
そこで私はWindows Script Hostを利用し、ショートカットキーが押されたという情報を直接InDesignに送り込むという荒業を考えました。InDesign上のJavaScriptでWindows Script Hostを利用する方法がわからなかったので、Windows専用スクリプトとなってしまうVBSです(つーかJSで作れたところで使う機能がWin専用だけど)。MacならAppleScriptでなんとかしてアプリにショートカットを送信できれば、同じようなことができるかもしれませんね。どうかな?
しかしあまり褒められたやり方ではないと思いますが・・・まあ、この世は結果がすべてということで。
・2,3行目(Windows Script Hostの利用準備)
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
・24行目(ショートカットキー送信)
WshShell.SendKeys "%^-"
これで[オブジェクト全体を表示]コマンドのショートカットキー([Alt]+[Ctrl]+[-])がInDesignに送信されます。他にも、スクリプトでは実行不可能な機能に対してショートカットキーを割り当てられれば、この方法で何とかなるのではないでしょうか。
ちなみに、ショートカットキーを送ってからすぐに次の処理を始めると、InDesignの画面切り替え処理が追いつかないため、次の25行目で無駄な処理を行うslp関数を呼び出しています。この無駄がないと、文字あふれ発見ダイアログが画面の切り替えより早く出てしまい、文字あふれフレームの表示がうまくいきません。ダイアログを閉じた後で表示されるとか(これでスゲー悩んだ・・・)。このまま実行してもうまく[オブジェクト全体を表示]が働かない場合は、slp関数に渡す数値を増やしてみてください。サンプルでは10000としていますが、当方Core2 Duo 1.8GHz(メモリ1GB)のマシンでいい感じに動いています。
【InDesign】【VBS】スクリプト未対応の操作を呼出すには?(文字あふれの検索)
文字あふれしたテキストフレームを探し出し、そのフレームを画面中央に表示、あふれている内容をダイアログで確認できるスクリプトです。
長いので説明は次のエントリーを参照。
...
長いので説明は次のエントリーを参照。
...
Dim app
Set app = CreateObject("InDesign.Application.CS2_J")
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
Dim pageObj
Dim cont, flag, all_len,show_len,all_text,show_text,over_text
Dim i,j,BtnCode, eachTMP
cnt = 0
flag = true
Set pageObj = app.activeDocument.AllPageItems
for each eachTMP in pageObj
if typename(eachTMP) = "TextFrame" then
if (eachTMP.overflows) then 'あふれているかどうか?
cnt = cnt+1 '文字あふれをカウント
if (flag) then 'フレームを表示するか?
eachTMP.select() 'フレームの選択
WshShell.SendKeys "%^-" 'ショートカットキーの送信
call slp(10000) '表示切替待ち
all_len = len(eachTMP.ParentStory.contents) '全文字数を取得
show_len = len(eachTMP.contents) '表示されている文字数を取得
all_text = eachTMP.parentStory.contents '全テキスト内容を取得
over_text = mid(all_text, show_len+1, (all_len-show_len+1)) 'あふれている部分を取得
over_text = ReplaceText(over_text, chr(13), "¶"& chr(13)) '改行マークを追加
if eachTMP.Id <> eachTMP.PreviousTextFrame.Id then
over_text = "【!】連結フレームの場合はあふれた内容を表示できません"
end if
BtnCode = WshShell.Popup("【あふれた内容】" & chr(13) & chr(13) & over_text & chr(13) & chr(13) & chr(13) & chr(13) & "【次の文字あふれフレームを表示しますか?】",0,"文字あふれ発見",4+32+4096)
if BtnCode = 7 then flag = false
end if
end if
end if
next
if (cnt = 0) then
BtnCode = WshShell.Popup("文字あふれはありません", 0, "ドキュメント全体の検索完了" , 0+64+4096)
else
BtnCode = WshShell.Popup("全部で " & cnt & " 個の文字あふれフレームが存在します", 0, "ドキュメント全体の検索完了" , 0+64+4096)
end if
Function ReplaceText(str1, patrn, replStr)
Dim regEx
Set regEx = New RegExp ' 正規表現を作成
regEx.Pattern = patrn ' パターンを設定
regEx.IgnoreCase = True ' 大文字と小文字を区別しないように設定
regEx.Global = True ' 文字列全体を検索
ReplaceText = regEx.Replace(str1, replStr) ' 置換
End Function
sub slp(cnt)
for j=1 to cnt
j = j
next
end sub
2008年5月26日月曜日
【InDesign】テキストフレームを全選択
スプレッド内のテキストフレームだけを全選択するスクリプトです。
どんな場面で使用するかはわかりませんが。
...
InDesign CS2で動作確認。他のバージョンは知りません。CSやCS3でも多分動く・・・と思う。
JAVASriptなのでMac、Win両対応だと思います。Winでしか確認してないけど。
グループ化されているオブジェクトの処理に、関数「groupCheck」を作りました。もっといいやり方があるかもしれない。
InDesignスクリプトでは、グループ化されているオブジェクト群が1つのオブジェクトとされるため、グループ化されているテキストフレームがあると、そのフレームはactiveSpread.textFramesで取り出すことができません。したがってスプレッド内にグループが存在すれば、グループ毎に処理を行います。さらに多重グループ化されていたら・・・なので、グループが発見されるたびにgroupCheckを再帰的に呼び出しています。
どんな場面で使用するかはわかりませんが。
...
InDesign CS2で動作確認。他のバージョンは知りません。CSやCS3でも多分動く・・・と思う。
JAVASriptなのでMac、Win両対応だと思います。Winでしか確認してないけど。
グループ化されているオブジェクトの処理に、関数「groupCheck」を作りました。もっといいやり方があるかもしれない。
InDesignスクリプトでは、グループ化されているオブジェクト群が1つのオブジェクトとされるため、グループ化されているテキストフレームがあると、そのフレームはactiveSpread.textFramesで取り出すことができません。したがってスプレッド内にグループが存在すれば、グループ毎に処理を行います。さらに多重グループ化されていたら・・・なので、グループが発見されるたびにgroupCheckを再帰的に呼び出しています。
#target InDesign
app.activeDocument.selection = null;
if (app.layoutWindows[0].activeSpread.textFrames.length > 0)
{
textITM = app.layoutWindows[0].activeSpread.textFrames;
selectFrames(textITM);
}
if (app.layoutWindows[0].activeSpread.groups.length > 0) groupCheck(app.layoutWindows[0].activeSpread.groups);
function selectFrames(itemLST)
{
var i;
for(i = 0; i < itemLST.length; i++)
{
hkITM = itemLST[i].select(SelectionOptions.addTo);
}
}
function groupCheck(itemLST)
{
var i;
for(i=0; i < itemLST.length; i++)
{
if (itemLST[i].textFrames.length > 0) selectFrames(itemLST[i].textFrames);
if (itemLST[i].groups.length > 0) groupCheck(itemLST[i].groups);
}
}
2008年5月23日金曜日
【InDesign】同じスウォッチを使用しているオブジェクトを選択
Illustratorでは同じ塗りや線色のオブジェクトをまとめて選択するコマンドがありますが、InDesignでも同じことをやれるスクリプトです。
...
【使い方】
1つだけフレームを選択してスクリプトを実行すると、そのフレームと同じ塗り色&同じ線色のフレームをすべて選択状態にします。
※「同じ色」というのはスウォッチ名で判断しているので、スウォッチ登録していない色では反応しません。
※シェード(濃淡)の違いは判断しません。同じスウォッチ名なら薄いのも濃いのも同じ色として判断します。
※作業中のスプレッドが対象です。ドキュメント全体ではありません。
ちなみにInDesign CS2で確認しています。他のバージョンは動くかどうかわかりません。
そして、JAVASriptです。Mac、Win両対応だと思います。Winでしか確認してないけど。
一応、このスクリプトのミソはselectFillAndStrokeColor関数です。引数として渡されたオブジェクトのfillColorを調べて判断するのですが、引数としてグループ化されたオブジェクトが渡されている可能性もあります。なぜかというとpageItemsプロパティでは、グループも1つのオブジェクトとなっているからです。fillColorプロパティを見ようとしたとき、これがグループであるとエラーになります。そこでエラーメッセージをキャッチして、グループだと判断した場合はグループのpageItemsプロパティを取り出し、自身を再帰呼び出ししています。再帰呼び出ししているので、多重グループ化されているオブジェクトでも問題なく処理できます。
...
【使い方】
1つだけフレームを選択してスクリプトを実行すると、そのフレームと同じ塗り色&同じ線色のフレームをすべて選択状態にします。
※「同じ色」というのはスウォッチ名で判断しているので、スウォッチ登録していない色では反応しません。
※シェード(濃淡)の違いは判断しません。同じスウォッチ名なら薄いのも濃いのも同じ色として判断します。
※作業中のスプレッドが対象です。ドキュメント全体ではありません。
ちなみにInDesign CS2で確認しています。他のバージョンは動くかどうかわかりません。
そして、JAVASriptです。Mac、Win両対応だと思います。Winでしか確認してないけど。
一応、このスクリプトのミソはselectFillAndStrokeColor関数です。引数として渡されたオブジェクトのfillColorを調べて判断するのですが、引数としてグループ化されたオブジェクトが渡されている可能性もあります。なぜかというとpageItemsプロパティでは、グループも1つのオブジェクトとなっているからです。fillColorプロパティを見ようとしたとき、これがグループであるとエラーになります。そこでエラーメッセージをキャッチして、グループだと判断した場合はグループのpageItemsプロパティを取り出し、自身を再帰呼び出ししています。再帰呼び出ししているので、多重グループ化されているオブジェクトでも問題なく処理できます。
// 選択-スウォッチの塗りと線色.jsx
// For InDesign CS2
// (c)Gyoniso
// 2008/5/23 v1.0
#target InDesign
chkFillColor = "";
chkStrokeColor = "";
baseITM = app.selection;
if (baseITM.length == 1)
{
typeArray = new Array("Oval", "Rectangle", "Polygon", "GraphicLine", "TextFrame")
for (i=0; i < typeArray.length; i++)
{
worktype = typeArray[i];
if (worktype.indexOf(baseITM[0].constructor.name) >= 0)
{
chkFillColor = baseITM[0].fillColor;
chkStrokeColor = baseITM[0].strokeColor;
}
}
}
if ((chkFillColor != "") & (chkStrokeColor != ""))
{
allITM = app.layoutWindows[0].activeSpread.pageItems;
selectFillAndStrokeColor(chkFillColor, chkStrokeColor, allITM);
} else {
alert("有効なオブジェクトを1つだけ選択してください");
}
function selectFillAndStrokeColor(fCol, sCol, itemLST)
{
var i, chkITM
for(i = 0; i < itemLST.length; i++)
{
chkITM = itemLST[i];
try
{
if ((chkITM.fillColor == fCol) & (chkITM.strokeColor == sCol))
{
chkITM.select(SelectionOptions.addTo);
}
}
catch(e)
{
if (e == "Error: このオブジェクトのコンテンツは、この画像属性の値を複数有しています。")
{
selectFillAndStrokeColor(fCol, sCol, chkITM.allPageItems);
}
}
}
}
登録:
投稿 (Atom)