Top > OOoBasic > Writer > frame

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

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

#contents

**挿入 [#t2e30816]

まずは,普通にフレームを挿入してみます。下のコードでは 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(textframe_1.png);

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

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

**枠 [#d68cbd29]

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

 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(textframe_2.png);

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

**背景色 [#i49b4d10]
背景色を設定するのは ''BackColor'' プロパティーです。

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

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

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

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

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

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

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

そのほか,

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

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

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

 oFrame.TextWrap = com.sun.star.text.WrapTextMode.DYNAMIC

**フレームに挿入 [#ld74e739]
フレームに図形描写オブジェクトなどを挿入します。図形描写オブジェクトを 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