TextFrameのFont情報設定について

[9210]TextFrameのFont情報設定について 投稿者:小林 投稿日:2006/06/01(Thu) 17:28
始めまして。現在InDesign.CS2_J上でVBにてスクリプトを作成しているのですが、TextFrameに対してフォント情報を設定をするプロパティが分からず困っております。
TextFrameのr/wなプロパティに
Dim myFont As InDesign.Font
myFont = myInDesign.Fonts.Item("小塚ゴシック Pro")
myTextFrame.XXX = myFont
の様な事も試してみたのですが駄目でした。何か根本的な部分での理解が間違っているのでしょうか?
スクリプティングガイドやAdobeフォーラムも見てみたのですが、バージョンが違うせいかどれを試しても駄目で3日ほど唸っています。
何方かご存知の方がいらっしゃいましたらヒントだけでも頂けませんでしょうか?
» 1
[9210へのレス]Re: TextFrameのFont情報設定について 投稿者:流星 投稿日:2006/06/01(Thu) 18:20
私が書いたソースで良ければ。
確認はCSです。
Function内で選択しているオブジェクトの種類を調べてからフォント変更しています。

Call FontNameChange("小塚ゴシック Pro" & vbTab & "M")
'--------------------------------------------------------
Function FontNameChange(MyFontName)
Set MyInDesign = CreateObject("InDesign.Application.CS")
With MyInDesign
For S = 1 To .Selection.Count
Set MySelect = .Selection(S)
If TypeName(MySelect) = "Text" Then
MySelect.AppliedFont = .Fonts.Item(MyFontName)
ElseIf TypeName(MySelect) = "TextFrame" Then
For Each M_Text In MySelect.Texts
M_Text.AppliedFont = .Fonts.Item(MyFontName)
Next
ElseIf TypeName(MySelect) = "Cell" Then
For Each M_Cell In MySelect.Texts
M_Cell.AppliedFont = .Fonts.Item(MyFontName)
Next
End If
Next
End With
End Function
'--------------------------------------------------------
» 2
[9210へのレス]Re: TextFrameのFont情報設定について 投稿者:小林 投稿日:2006/06/01(Thu) 22:37
流星様
コードのご提示、どうもありがとうございました。まず、ご報告ですが、CS2でも問題なく動きました。
私の説明が足りなくて上手に質問が出来なかったのですが、現在私はスクリプト上(VB.NET)でTextFrameを作成し、
その作成したTextFrameのフォントを同様にスクリプトで設定しようとしているのですが、どうにもうまくいきません。
JavaScriptではTextFrame.AppliedFontの様なプロパティがあり、てっきりVBでも同様かと思っていたのですが、
幾らオブジェクトブラウザを見ても見当たらず、これはTextオブジェクトの段階でプロパティを設定してから
TextFrame.Contentsに入れるのかな?とか色々と試してみたのですがやっぱり駄目でした。

ご提示頂いたコードを早速見ていたのですが、まずスクリプト起動時に選択されているのがTextかTextFrameかを
判別しているのは分かるのですが、その先のM_Text.AppliedFont や M_Cell.AppliedFontのM_XXXの部分が良く分かりません。

もし、よろしければその部分だけご教示頂けませんでしょうか?

でもTextFrame.AppliedFontなんて言うのはやっぱりないんでしょうか?てっきりプロパティにフォント名を入れてあげれば
良いとばかり考えていました。
InDesignのスクリプトを始めてまだ3日目なので、まだまだ修行が足りないのですが、最初から大きな壁に当たってしまった様です(笑)

コードのご提示本当にありがとうございました。
もう少し英語のプレファレンスと格闘してみます。
» 3
[9210へのレス]Re: TextFrameのFont情報設定について 投稿者:流星 投稿日:2006/06/02(Fri) 00:21
>M_XXXの部分が良く分かりません。
Select Case文の方が理解しやすいかも…と思い
先に示したScriptを手直ししました。

Call FontNameChange("小塚ゴシック Pro" & vbTab & "M")
'--------------------------------------------------------
Function FontNameChange(MyFontName)
Set MyInDesign = CreateObject("InDesign.Application.CS") 'レイトバインディング
With MyInDesign 'Withコーディングにて高速化
'255個以上のアイテムの場合ForEachInループが使えないのでForToNextでループ
'さらに高速化のため、逆順でアクセス
For S = .Selection.Count To 1 Step -1
Set MySelect = .Selection(S) '選択しているアイテムをMySelect変数に格納
'Select Case文の方が理解しやすいので、それに変更しました。
Select Case TypeName(MySelect)
Case "Text": '文字(テキスト)を選択している時の処理
MySelect.AppliedFont = .Fonts.Item(MyFontName)
Case "TextFrame": 'テキストフレームを選択している時の処理
'元ソースでは255個以上のフレーム選択でエラーになるのでForToNextに変更
'さらに高速化のため、逆順でアクセス
For MTC = MySelect.Texts.Count To 1 Step -1
MySelect.Texts(MTC).AppliedFont = .Fonts.Item(MyFontName)
Next
Case "Cell": '表でセルを選択している時の処理
'M_Cellには表のコレクションアイテムが格納されます。
For Each M_Cell In MySelect.Texts
M_Cell.AppliedFont = .Fonts.Item(MyFontName)
Next
Case Else 'それ以外のTypeNameでは処理しない。
End Select
Next
End With
End Function

CSのリファレンスでAppliedFontで検索かけて
みたんですが、TextFrameではヒットしません
でした。

>(VB.NET)
私はVB6.0なので、コードで違うところがあるかもしれませんが、.NETの仕様に合わせて手直ししてください。そのままVBSにしてWSHで処理する分には問題ないかと思いますが。

※個人的にCS2のリファレンスも機会が
あるときに読破しておきたいものです。
» 4
[9210へのレス]Re: TextFrameのFont情報設定について 投稿者:お~まち 投稿日:2006/06/02(Fri) 09:15
TextFrameオブジェクトにAppliedFontプロパティはありません。フォントを指定する場合はTextFrame.Textで指定されるTextオブジェクトか、TextFrame.ParentStoryで指定されるStoryオブジェクトで指定する必要があります。
TextFrameが連結されておらず、かつ、あふれていない状態の時はTextFrame.TextとTextFrame.ParentStoryは等価になります。
このあたりはJavaScriptでも同じだと思うのですが...

> JavaScriptではTextFrame.AppliedFontの様なプロパティがあり
JavaScriptでTextFrame.appliedFontをやって見ましたが、エラーはでませんが結果は反映されませんでした。
» 5
[9210へのレス]Re: TextFrameのFont情報設定について 投稿者:小林 投稿日:2006/06/02(Fri) 11:33
流星様
早速のご教示本当にありがとうございました。早速ご提示頂いたコードを試しているのですが、
>For S = .Selection.Count To 1 Step -1
の部分で使われている S が何のオブジェクトか分からず試行錯誤中です。色々試してみます。
流星様のサイトも早速見させて頂きました。これから勉強させて頂きます。本当にどうもありがとうございました。

お~まち様
貴重な情報、ありがとうございました。
>TextFrameオブジェクトにAppliedFontプロパティはありません。フォントを指定する場合はTextFrame.Textで指定されるTextオブジェクトか、TextFrame.ParentStoryで指定されるStoryオブジェクトで指定する必要があります。
やっぱり根本的な理解が間違っていた様です。
実際にInDesign上でTextFrameを選択してからフォント名を設定出来るので「これはきっとTextFrameにそういうプロパティがあるに違いない」と勝手に思い込んでしまったのがそもそもの失敗でした。
>このあたりはJavaScriptでも同じだと思うのですが..
そうなのですか。もっと良く調べてみます。わざわざ検証までして頂き、どうもありがとうございました。

» 6
[9210へのレス]Re: TextFrameのFont情報設定について 投稿者:流星 投稿日:2006/06/02(Fri) 21:23
>S が何のオブジェクトか分からず試行錯誤中です。
S = .Selection.Count とあるように、
InDesignで選択しているモノの個数です。
その個数分ループさせています。
ループの際に逆順で回すと少し高速なので、
そのように書いてあります。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア