- サマリ: Writerに貼り付けた数式でフォントサイズを変更後、数式枠を調整するには
- 環境: Writer
- 状態: 解決
- 投稿者: kawap?
- 投稿日: 2005-12-09 (金) 18:19:51
質問 
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上のサイズが調整されています。
埋め込んだ数式の枠サイズを調整する方法を教えて頂けませんでしょうか。よろしくお願いします。
回答 
- ご質問は、マクロで変更したフォントサイズに応じて自動的に枠サイズを調節する方法ですね。調べてみた所、埋め込みオブジェクトは別アプリになっていて数式編集状態になった時に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)を書いてみました。埋め込み処理で他にも色々応用出来るかもしれません。 -- 河井?
- 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つが新たに追加されてより細かくサイズを指定できるようになったようです。これを利用して指定するベースフォントの高さと現在のベースフォントの高さから比率を出して、サイズを変更しています。 -- 河井?
- 上記 OpenOffice.org2.0 のソースでうまくいきました。ありがとうございます。 -- kawap?