Top > OOoBasic > Writer > frame

フレーム Edit

Writer ドキュメントの中にフレームを使用して文字を並べたり,絵を配置したりすることがあります。そのために使用されるのが, com.sun.star.text.TextFrame サービスです。

デフォルトではこのテキストフレームをメニューから挿入すると枠線があったり,サイズを指定したりと面倒です。そこで,よく使用するサイズや見た目のテキストフレームを挿入するマクロを用意しておくと便利かもしれません。

挿入 Edit

まずは,普通にフレームを挿入してみます。下のコードでは Writer ドキュメントの開始位置に簡単なテキストフレームを挿入します。

Sub textframe_1
Dim oDoc As Object, oText As Object
Dim oFrame As Object, oStart As Object
Dim aPos As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
  oDoc = ThisComponent

  oFrame = oDoc.createInstance("com.sun.star.text.TextFrame")

  oFrame.Width = 10000
  oFrame.Height = 1000

  oText = oDoc.getText()
  oStart = oText.getStart()

  oText.insertTextContent(oStart,oFrame,false)
End Sub

&ref(): File not found: "textframe_1.png" at page "OOoBasic/Writer/frame";

幅が 10 cm,高さが 1 cm のテキストフレームが挿入されます。

サイズのみを設定してテキストフレームを挿入すると,枠線があるフレームになります。

Edit

枠線をなくすには,次のような設定を行います。

Dim aBorder As New com.sun.star.table.BorderLine
  With aBorder
    .Color = RGB(0,0,0)
    .InnerLineWidth = 0
    .OuterLineWidth = 0
    .LineDistance = 0
  End With
  
  With oFrame
    .TopBorder = aBorder
    .BottomBorder = aBorder
    .LeftBorder = aBorder
    .RightBorder = aBorder
  End With

プロパティー OuterLineWidth を 0 に設定することで枠線が表示されなくなります。 これを使用して,次のようにします。

Sub textframe_2
Dim oDoc As Object, oText As Object
Dim oFrame As Object, oStart As Object
Dim aPos As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
Dim aBorder As New com.sun.star.table.BorderLine
  oDoc = ThisComponent

  oFrame = oDoc.createInstance("com.sun.star.text.TextFrame")

  oFrame.Width = 10000
  oFrame.Height = 1000

  With aBorder
    .Color = RGB(0,0,0)
    .InnerLineWidth = 0
    .OuterLineWidth = 0
    .LineDistance = 0
  End With
  
  With oFrame
    .TopBorder = aBorder
    .BottomBorder = aBorder
    .LeftBorder = aBorder
    .RightBorder = aBorder
  End With

  oText = oDoc.getText()
  oStart = oText.getStart()

  oText.insertTextContent(oStart,oFrame,false)
End Sub

&ref(): File not found: "textframe_2.png" at page "OOoBasic/Writer/frame";

こんな感じに,枠線がないテキストフレームが挿入されます。

背景色 Edit

背景色を設定するのは BackColor プロパティーです。

oFrame.BackColor = RGB(240,248,255)

などのように指定します。

ハイパーリンク Edit

フレームにハイパーリンクを張るときには HyperLinkURL プロパティーを使用します。また,ターゲットは HyperLinkTarget プロパティーで設定します。

サイズ指定 Edit

始めは,フレームのサイズがフレームの内容の大きさによって自動的に変更されるような設定になっています。これを変更するには SizeType プロパティーを変更します。

このプロパティーは定数 com.sun.star.text.SizeType を利用して設定します。

たとえば,フレームの高さが内容の最小値になるように設定するには,次のようにします。

oFrame.SizeType = com.sun.star.text.SizeType.MIN

そのほか,

VARIABLE無視
FIX指定したサイズ
MIN高さが最小

回り込み指定 Edit

テキストの回りこみなどを指定するには,TextWrap プロパティーを使用して次の値を指定することでおこないます。

enums of com.sun.star.text.WrapTextMode
NONE上下
THROUGHT折り返しなし
PARALLEL両側
DYNAMIC左右動的
LEFT
RIGHT
oFrame.TextWrap = com.sun.star.text.WrapTextMode.DYNAMIC

フレームに挿入 Edit

フレームに図形描写オブジェクトなどを挿入します。図形描写オブジェクトを add せずに insertTextContent メソッドなどでテキストに挿入、アンカータイプを変更します (変更前は文字としてアンカーが設定されています)。

Sub Main
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPage()
oFrame = oDoc.getTextFrames().getByIndex(0)

oControlShape = oDoc.createInstance("com.sun.star.drawing.ControlShape")

aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 3000
aSize.Height = 1000
oControlShape.setPosition(aPoint)
oControlShape.setSize(aSize)

oButtonModel = CreateUnoService("com.sun.star.form.component.CommandButton")

oControlShape.setControl(oButtonModel)

'oDrawPage.add(oControlShape)

oFrame.insertTextContent(oFrame.getEnd(), oControlShape, False)

oControlShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_FRAME
End Sub

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