Top > OOobbs > 84

OOobbs/84 Edit

  • サマリ: Writerに貼り付けた数式でフォントサイズを変更後、数式枠を調整するには
  • 環境: Writer
  • 状態: 解決
  • 投稿者: kawap?
  • 投稿日: 2005-12-09 (金) 18:19:51

質問 Edit

Writer上に数式を挿入し、Writerのマクロから数式の基本フォントサイズを変更するマクロを作成しています。

しかし、大きなフォントサイズへ変更した場合、数式のイメージは大きくなりますが、Writer上の枠サイズが変更されないため、途切れた表示になってしまいます。

例:

objects = ThisComponent.EmbeddedObjects
For I=0 To objects.Count-1
 object = objects(I)
 if  object.FrameStyleName  = "Formula" Then
    object.EmbeddedObject.BaseFontHeight=50
 end if
Next

上記を実行するとフォントサイズが50になりますが、Writer上で 数式をダブルクリックして数式編集状態にして初めてWriter上のサイズが調整されています。

埋め込んだ数式の枠サイズを調整する方法を教えて頂けませんでしょうか。よろしくお願いします。

回答 Edit

  • ご質問は、マクロで変更したフォントサイズに応じて自動的に枠サイズを調節する方法ですね。調べてみた所、埋め込みオブジェクトは別アプリになっていて数式編集状態になった時にWriterからMathへアプリが切り替わるようです。Writer上のマクロでMathオブジェクトのフォントサイズを操作した場合の変更通知がWriterからMathアプリに切り替わるまでMathアプリ側に伝わっていない為に上記の現象になるのではないでしょうか。
    Sub Main
       objects = ThisComponent.EmbeddedObjects
       For I=0 To objects.Count-1
       object = objects(I)
       if  object.FrameStyleName  = "Formula" Then
           With object.EmbeddedObject
               .BaseFontHeight=50
               .setModified(True)
           End With
       end if
       Next
    End Sub
    明示的に数式アプリ側に変更通知を発生させる.setModified(True)を書いてみました。埋め込み処理で他にも色々応用出来るかもしれません。 -- 河井? 2005-12-10 (土) 13:07:39
  • OpenOffice.org 1.14と異なり、OpenOffice.org2.0では、またまた仕様が変わっていて上記処理では、枠サイズが自動的に変わらなくなっているようです。どちらのバージョンでも動作するように以下のようにしてみました。
    Sub Main
    Dim oSize As New com.sun.star.awt.Size
    Dim oNewSize As New com.sun.star.awt.Size
    Dim iNewBaseFontHeight As Integer
    Dim dRatio As Double
       iNewBaseFontHeight = 50
       objects = ThisComponent.EmbeddedObjects
       For I=0 To objects.Count-1
       object = objects(I)
       if  object.FrameStyleName  = "Formula" Then
           With object.EmbeddedObject
               if getSolarVersion() >= 680 then 'OOo 2.0以上なら
                 dRatio = CDbl(iNewBaseFontHeight) / CDbl(object.EmbeddedObject.BaseFontHeight)
                 oSize = .getVisualAreaSize(com.sun.star.embed.Aspects.MSOLE_CONTENT)
                 With oNewSize
                   .Width = oSize.Width * dRatio
                   .Height = oSize.Height * dRatio
                 End With
                 .BaseFontHeight = iNewBaseFontHeight
                 .setVisualAreaSize(com.sun.star.embed.Aspects.MSOLE_CONTENT, oNewSize)
               else 'OOo 1.x の時
                 .BaseFontHeight = iNewBaseFontHeight
                 .setModified(True)
               end if
           End With
       end if
       Next
    End Sub
    com.sun.star.embed.XVisualObjectインターフェイスが追加されてgetVisualAreaSize()関数とsetVisualAreaSize()関数の2つが新たに追加されてより細かくサイズを指定できるようになったようです。これを利用して指定するベースフォントの高さと現在のベースフォントの高さから比率を出して、サイズを変更しています。 -- 河井? 2005-12-11 (日) 14:36:09
  • 上記 OpenOffice.org2.0 のソースでうまくいきました。ありがとうございます。 -- kawap? 2005-12-12 (月) 18:24:22


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes