オブジェクトの左上にキャプションをつけるコードです。
まず準備としてオブジェクトデータマネージャでキャプションをつけたいオブジェクトの「名前」フィールドにキャプションとして付けたい文字を入力します。これで、キャプションとオブジェクトが泣き別れになることはありません。
つぎに、そのオブジェクトのみを選択した状態にして、このコードを実行します。
これだけです。コードの中のspという定数はオブジェクト上端とキャプション文字下端の隙間をmmで指定しています。また、fsという定数は、キャプション文字のフォントサイズをポイントで指定しています。必要に応じて変更してください
これ、実はまだ未完成です。(こればっか)
本当は、フォント名を変更し、基準オブジェクトの幅まで広げてやりたいんですが、フォント名の指定のための.text.fontproperties.nameと文字間隔指定のための.Text.SpaceProperties.CharacterSpacingというプロパティがうまく実行できないのです。(これがSP1を当てていないせいか、当ててもだめなのか、はたまた、私の勉強不足かはわかりません。)コードはエラーを起こさずに走るのですが、結果が変わらない。~デフォルトのアートテキストのスタイルに設定されているフォントとスペースになります。~
オブジェクトはOLEコンテナなども扱えますので、何にでもキャプション付けることができます。2001/01/12
ちょいと改良しました。
プロパティでやるのはあきらめて、スタイルで処理するようにしました。これなら、文字長さに応じた間隔の調整以外は欧文フォントと日本語フォントの使い分けも同時にできます。また、文字詰めを左寄せ、センタリング、右寄せの中から、キャプションを付ける場所をオブジェクト上方、下方のいずれかを選択できるようにしました。編集方針で同じ動作になると勝手に考え、コードの前の方に定数としてこれらの設定を集めました。そして、変形-スケール相当の機能としてオブジェクトサイズより大きなキャプションは横方向を圧縮するようにしました。
- sp
- 上述のまま、オブジェクトとキャプションの間隔をmm単位で指定します。
- af
- 文字詰めで、左寄せなら"L"、センタリングなら"C"、右寄せなら"R"と指定してください。
- bf
- キャプションを付ける位置で、下ならtrue、上ならfalseと指定してください。
- stylename
- 適用するスタイルです。ここにだけエラー処理施してありますので、指定したスタイルがなくてもエラーを出しません。
- zf
- キャプションのズームを選択します。ズームする場合はtrue、しない場合はfalseと指定してください。
オブジェクトデータマネージャはここにあります。
名前フィールドにキャプション文字を設定します
実行するとこのようになります
Sub mkcaption() 'copyright by Albatros 'Ver 1.00 2001/01/07 Initial Version 'Ver 1.01 2001/01/12 センタリング,スタイル使用,下側,右寄せ,ズーム Const sp As Long = 2 'gap in mm Const af As String = "C" '左寄せ="L",センタリング="C",右寄せ="R" Const bf As Boolean = False '下=true,上=false Const stylename As String = "caption" Const zf As Boolean = True 'zoom=true, no-zoom=false Dim orp As Integer, ou As Integer Dim o As Shape, oo As Shape Dim x As Double, y As Double Dim spd As Double Dim caption As String spd = sp * 10000 * IIf(bf, -1, 1) If ActiveDocument Is Nothing Then MsgBox "ドキュメントがありません", vbCritical, "Error" Exit Sub End If If Application.ActiveSelection.Shapes.Count <> 1 Then MsgBox "オブジェクトが複数選択されています", vbCritical, "Error" Exit Sub End If ou = ActiveDocument.Unit orp = ActiveDocument.ReferencePoint ActiveDocument.Unit = cdrTenthMicron If bf Then ActiveDocument.ReferencePoint = cdrBottomLeft Else ActiveDocument.ReferencePoint = cdrTopLeft End If Set oo = ActiveSelection.Shapes(1) caption = oo.ObjectData("名前").Value If caption <> "" Then ActiveSelection.Shapes(1).GetPosition x, y Set o = ActiveLayer.CreateArtisticText(x, y + spd, caption) On Error Resume Next CorelScript.ApplyStyle stylename If zf And oo.SizeWidth < o.SizeWidth Then o.Stretch (oo.SizeWidth / o.SizeWidth), 1# End If Select Case af Case "C" o.PositionX = o.PositionX + (oo.SizeWidth - o.SizeWidth) / 2 Case "R" o.PositionX = o.PositionX + (oo.SizeWidth - o.SizeWidth) End Select If bf Then o.PositionY = o.PositionY - o.SizeHeight End If End If ActiveDocument.Unit = ou ActiveDocument.ReferencePoint = orp End Sub