Difference between revisions of "JA/Documentation/BASIC Guide/Working With Forms"

From Apache OpenOffice Wiki
Jump to: navigation, search
(New page: {{JA/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=Documentation/BASIC Guide/Forms |NextPage=Documentation/BASIC Guide/Control Element Forms |form=block ...)
 
Line 6: Line 6:
 
|form=block
 
|form=block
 
}}
 
}}
{{DISPLAYTITLE:▼フォームの使用}}
+
{{DISPLAYTITLE:フォームの使用}}
 
   
 
   
{{OOo}} ▼ のフォームは、文章ドキュメントまたは\'95\'5c計算ドキュメントの上に、テキスト\'83\'7bックス、リスト\'83\'7bックス、ラジオ\'83\'7bタンをはじめとする各種のコントロール要素を直接配置することにより\'8d\'5c成されます。フォームの編集には、フォームの機能ツールバー を利用します。
+
{{OOo}} のフォームは、文章ドキュメントまたは表計算ドキュメントの上に、テキストボックス、リストボックス、ラジオボタンをはじめとする各種のコントロール要素を直接配置することにより構成されます。フォームの編集には、フォームの機能ツールバー を利用します。
  
{{OOo}} フォームには、デザインモードとディスプレイモードの 2 種類のモードが存在します。▼デザインモードでは、コントロール要素の\'95\'5c示位置を調整したり、属性ウィンドウにより属性 (プロパティー) を変更したりすることができます。
+
{{OOo}} フォームには、デザインモードとディスプレイモードの 2 種類のモードが存在します。デザインモードでは、コントロール要素の表示位置を調整したり、属性ウィンドウにより属性 (プロパティー) を変更したりすることができます。
  
▼モードの切り替えは、フォームの機\'94\'5cツールバー から行えます。
+
モードの切り替えは、フォームの機能ツールバー から行えます。
  
==▼オブジェクトフォームの指定==
+
==オブジェクトフォームの指定==
  
{{OOo}} ▼ のフォームで用いるコントロール要素は、\'90\'7d形描画オブジェクトと同じレベルに配置されます。実際のオブジェクトフォームには、図形描画レベルの Forms リストを利用してアクセスできます。▼文書ドキュメント上のオブジェクトへは、以下のサンプルコードのようにしてアクセスします。
+
{{OOo}} のフォームで用いるコントロール要素は、図形描画オブジェクトと同じレベルに配置されます。実際のオブジェクトフォームには、図形描画レベルの Forms リストを利用してアクセスできます。文書ドキュメント上のオブジェクトへは、次のサンプルコードのようにしてアクセスします。
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 28: Line 28:
 
</source>
 
</source>
  
<tt>ここで GetByIndex</tt> メソッドの戻り値としては、インデックス値 0 のフォームが返されます。
+
ここで <tt>GetByIndex</tt> メソッドの戻り値としては、インデックス値 0 のフォームが返されます。
  
 
表計算ドキュメントの場合は、図形描画レベルが表計算ドキュメントの直下ではなく個々のシート (表) に置かれているため、Sheets リストを経由してアクセスする必要があります。
 
表計算ドキュメントの場合は、図形描画レベルが表計算ドキュメントの直下ではなく個々のシート (表) に置かれているため、Sheets リストを経由してアクセスする必要があります。
Line 44: Line 44:
 
</source>
 
</source>
  
<tt>GetByIndex</tt> というメソッド名からも分かるように、1 つのドキュメントで複数のフォームを利用することができます。▼こうした機\'94\'5cは、複数のデータベースの内容を 1 つのドキュメント上に\'95\'5c示させたり、1 対 n のリレーション関係にあるデータベース情報を 1 つのフォームで\'95\'5c示させる場合に便利です。▼またこの種の処理に関しては、サブフォームの作成機\'94\'5cも用意されています。
+
<tt>GetByIndex</tt> というメソッド名からも分かるように、1 つのドキュメントで複数のフォームを利用することができます。こうした機能は、複数のデータベースの内容を 1 つのドキュメント上に表示させたり、1 対 n のリレーション関係にあるデータベース情報を 1 つのフォームで表示させる場合に便利です。またこの種の処理に関しては、サブフォームの作成機能も用意されています。
  
==▼フォーム用コントロール要素の\'8d\'5c成==
+
==フォーム用コントロール要素の構成==
  
▼フォーム用のコントロール要素は、以下のような 3 段階\'8d\'5c成になっています。
+
フォーム用のコントロール要素は、次のような 3 段階構成になっています。
  
*コントロール要素の '''モデル'''は、フォーム用コントロール要素を操作する場合、{{OOo}} Basic のプログラマにとって重要なオブジェクトです。
+
*コントロール要素の'''モデル'''は、フォーム用コントロール要素を操作する場合、{{OOo}} Basic のプログラマにとって重要なオブジェクトです。
*▼これに対して各コントロール要素の '''View''' (ビュー) オブジェクトは、実際に\'95\'5c示する情報を扱います。
+
*これに対して各コントロール要素の '''View''' (ビュー) オブジェクトは、実際に表示する情報を扱います。
*▼そして、ドキュメントに配置するフォーム用のコントロール要素は、一種の特殊な\'90\'7d形描画要素として扱われるため、\'90\'7d形描画要素に固有のコントロール要素属性を、'''Shape''' (シェイプ) オブジェクトというものを用いて処理しています (主として位置とサイズ)。
+
*そして、ドキュメントに配置するフォーム用のコントロール要素は、一種の特殊な図形描画要素として扱われるため、図形描画要素に固有のコントロール要素属性を、'''Shape''' (シェイプ) オブジェクトというものを用いて処理しています (主として位置とサイズ)。
  
==▼フォーム用コントロール要素のモデルへのアクセス==
+
==フォーム用コントロール要素のモデルへのアクセス==
  
 
フォーム用コントロール要素のモデルへのアクセスには、フォームオブジェクトの <tt>GetByName</tt> メソッドを利用します。
 
フォーム用コントロール要素のモデルへのアクセスには、フォームオブジェクトの <tt>GetByName</tt> メソッドを利用します。
Line 91: Line 91:
 
</source>
 
</source>
  
上記のサンプルコードでは、<tt>HasByName</tt> メソッドを用いて、<tt>MyListBox</tt> というコントロール要素モデルがあるかを、文書ドキュメント上のすべてのフォームを対象にチェックしています。▼そして該当するモデルを検出した段階で、変数 <tt>Ctl</tt> にその参照情報を格納して、検索処理を終了しています。
+
上記のサンプルコードでは、<tt>HasByName</tt> メソッドを用いて、<tt>MyListBox</tt> というコントロール要素モデルがあるかを、文書ドキュメント上のすべてのフォームを対象にチェックしています。そして該当するモデルを検出した段階で、変数 <tt>Ctl</tt> にその参照情報を格納して、検索処理を終了しています。
  
==▼フォーム用コントロール要素のビューへのアクセス==
+
==フォーム用コントロール要素のビューへのアクセス==
  
フォーム用コントロール要素のビューにアクセスするには、関連付けられたモデルが必要です。▼そしてこのモデルをドキュメントコントローラに指定することにより、コントロール要素のビューを取得します。
+
フォーム用コントロール要素のビューにアクセスするには、関連付けられたモデルが必要です。そしてこのモデルをドキュメントコントローラに指定することにより、コントロール要素のビューを取得します。
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 120: Line 120:
 
</source>
 
</source>
  
▼上記のサンプルコードは、1 つ前に見たコントロール要素のモデル検索用サンプルコードと非常によく似ています。▼ただしこのサンプルコードでは <tt>Doc</tt> というドキュメントオブジェクトに加えて、現在のドキュメントウィンドウの参照用に <tt>DocCrl というドキュメントコントローラオブジェクトを用意しています。</tt>そして、このコントローラオブジェクトに対して、先に用意したコントロール要素のモデルを渡すことにより、<tt>GetControl</tt> メソッドを使用して、フォーム用コントロール要素のビュー (ここでは変数 <tt>CtlView</tt>) を特定しています。
+
上記のサンプルコードは、1 つ前に見たコントロール要素のモデル検索用サンプルコードと非常によく似ています。ただしこのサンプルコードでは <tt>Doc</tt> というドキュメントオブジェクトに加えて、現在のドキュメントウィンドウの参照用に <tt>DocCrl</tt> というドキュメントコントローラオブジェクトを用意しています。そして、このコントローラオブジェクトに対して、先に用意したコントロール要素のモデルを渡すことにより、<tt>GetControl</tt> メソッドを使用して、フォーム用コントロール要素のビュー (ここでは変数 <tt>CtlView</tt>) を特定しています。
  
==▼フォーム用コントロール要素のシェイプオブジェクトへのアクセス==
+
==フォーム用コントロール要素のシェイプオブジェクトへのアクセス==
  
▼コントロール要素のシェイプオブジェクトへアクセスする場合も、ドキュメントの\'90\'7d形描画レベルを使用します。▼特定のコントロール要素を特定するには、\'90\'7d形描画レベルにあるすべての\'90\'7d形描画要素を検索する必要があります。
+
コントロール要素のシェイプオブジェクトへアクセスする場合も、ドキュメントの図形描画レベルを使用します。特定のコントロール要素を特定するには、図形描画レベルにあるすべての図形描画要素を検索する必要があります。
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 143: Line 143:
 
</source>
 
</source>
  
上記のサンプルコードでは、すべての図形描画要素をチェックして、フォーム用コントロール要素に必要な <idl>com.sun.star.drawing.XControlShape</idl> インターフェースをサポートしているものがあるかを確認しています。該当するものがある場合は、<tt>Control.Name</tt> 属性を用いて、<tt>MyListBox</tt> という名前のコントロール要素があるかをチェックします。▼そしてこの条件も満たされたならば、検索処理を終了します。
+
上記のサンプルコードでは、すべての図形描画要素をチェックして、フォーム用コントロール要素に必要な <idl>com.sun.star.drawing.XControlShape</idl> インターフェースをサポートしているものがあるかを確認しています。該当するものがある場合は、<tt>Control.Name</tt> 属性を用いて、<tt>MyListBox</tt> という名前のコントロール要素があるかをチェックします。そしてこの条件も満たされたならば、検索処理を終了します。
  
===▼コントロール要素のサイズと位置===
+
===コントロール要素のサイズと位置===
  
 
先に述べたように、コントロール要素のサイズと位置の処理には、<tt>shape</tt> オブジェクトを利用します。このような処理を行うため、コントロール要素のシェイプには、他のすべての <tt>shape</tt> オブジェクトと同じように、<tt>Size</tt> および <tt>Position</tt> という属性が用意されています。
 
先に述べたように、コントロール要素のサイズと位置の処理には、<tt>shape</tt> オブジェクトを利用します。このような処理を行うため、コントロール要素のシェイプには、他のすべての <tt>shape</tt> オブジェクトと同じように、<tt>Size</tt> および <tt>Position</tt> という属性が用意されています。
Line 152: Line 152:
 
;<tt>Position (struct)</tt>:コントロール要素の位置 (<idl>com.sun.star.awt.Point</idl> データ構造)。
 
;<tt>Position (struct)</tt>:コントロール要素の位置 (<idl>com.sun.star.awt.Point</idl> データ構造)。
  
▼以下のサンプルコードでは、シェイプオブジェクトを用いた、コントロール要素のサイズと位置の指定方法を示します。
+
次のサンプルコードでは、シェイプオブジェクトを用いた、コントロール要素のサイズと位置の指定方法を示します。
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 166: Line 166:
 
</source>
 
</source>
  
このサンプルコードは、コントロール要素の <tt>shape</tt> オブジェクトは既知であることを前提としています。▼既知でない場合は、先のコードを利用して必要な判定処理を行う必要があります。
+
このサンプルコードは、コントロール要素の <tt>shape</tt> オブジェクトは既知であることを前提としています。既知でない場合は、先のコードを利用して必要な判定処理を行う必要があります。
  
 
{{PDL1}}
 
{{PDL1}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Working With Forms}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Working With Forms}}

Revision as of 22:10, 27 November 2008

doc OOo
Book.png


Apache OpenOffice のフォームは、文章ドキュメントまたは表計算ドキュメントの上に、テキストボックス、リストボックス、ラジオボタンをはじめとする各種のコントロール要素を直接配置することにより構成されます。フォームの編集には、フォームの機能ツールバー を利用します。

Apache OpenOffice フォームには、デザインモードとディスプレイモードの 2 種類のモードが存在します。デザインモードでは、コントロール要素の表示位置を調整したり、属性ウィンドウにより属性 (プロパティー) を変更したりすることができます。

モードの切り替えは、フォームの機能ツールバー から行えます。

オブジェクトフォームの指定

Apache OpenOffice のフォームで用いるコントロール要素は、図形描画オブジェクトと同じレベルに配置されます。実際のオブジェクトフォームには、図形描画レベルの Forms リストを利用してアクセスできます。文書ドキュメント上のオブジェクトへは、次のサンプルコードのようにしてアクセスします。

Dim Doc As Object
Dim DrawPage As Object
Dim Form As Object
 
Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

ここで GetByIndex メソッドの戻り値としては、インデックス値 0 のフォームが返されます。

表計算ドキュメントの場合は、図形描画レベルが表計算ドキュメントの直下ではなく個々のシート (表) に置かれているため、Sheets リストを経由してアクセスする必要があります。

Dim Doc As Object
Dim Sheet As Object
Dim DrawPage As Object
Dim Form As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

GetByIndex というメソッド名からも分かるように、1 つのドキュメントで複数のフォームを利用することができます。こうした機能は、複数のデータベースの内容を 1 つのドキュメント上に表示させたり、1 対 n のリレーション関係にあるデータベース情報を 1 つのフォームで表示させる場合に便利です。またこの種の処理に関しては、サブフォームの作成機能も用意されています。

フォーム用コントロール要素の構成

フォーム用のコントロール要素は、次のような 3 段階構成になっています。

  • コントロール要素のモデルは、フォーム用コントロール要素を操作する場合、Apache OpenOffice Basic のプログラマにとって重要なオブジェクトです。
  • これに対して各コントロール要素の View (ビュー) オブジェクトは、実際に表示する情報を扱います。
  • そして、ドキュメントに配置するフォーム用のコントロール要素は、一種の特殊な図形描画要素として扱われるため、図形描画要素に固有のコントロール要素属性を、Shape (シェイプ) オブジェクトというものを用いて処理しています (主として位置とサイズ)。

フォーム用コントロール要素のモデルへのアクセス

フォーム用コントロール要素のモデルへのアクセスには、フォームオブジェクトの GetByName メソッドを利用します。

Dim Doc As Object
Dim Form As Object
Dim Ctl As Object
 
Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Form.getByName("MyListBox")

上記のサンプルコードでは、現在開いている文書ドキュメントの最初のフォームにある MyListBox というコントロール要素のモデルへアクセスするものとしています。

コントロール要素の配置されたフォームがどれであるか不明な場合は、すべてのフォームを対象として該当するコントロール要素を検索することもできます。

Dim Doc As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer
 
Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms
 
For I = 0 To Forms.Count - 1
  Form = Forms.GetbyIndex(I)
  If Form.HasByName("MyListBox") Then
    Ctl = Form.GetbyName("MyListBox")
    Exit Function
  End If
Next I

上記のサンプルコードでは、HasByName メソッドを用いて、MyListBox というコントロール要素モデルがあるかを、文書ドキュメント上のすべてのフォームを対象にチェックしています。そして該当するモデルを検出した段階で、変数 Ctl にその参照情報を格納して、検索処理を終了しています。

フォーム用コントロール要素のビューへのアクセス

フォーム用コントロール要素のビューにアクセスするには、関連付けられたモデルが必要です。そしてこのモデルをドキュメントコントローラに指定することにより、コントロール要素のビューを取得します。

Dim Doc As Object
Dim DocCrl As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim CtlView As Object
Dim I as Integer
 
Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentControler()
Forms = Doc.Drawpage.Forms
 
For I = 0 To Forms.Count - 1
  Form = Forms.GetbyIndex(I)
  If Form.HasByName("MyListBox") Then
    Ctl = Form.GetbyName("MyListBox")
    CtlView = DocCrl.GetControl(Ctl)
    Exit Function
  End If
Next I

上記のサンプルコードは、1 つ前に見たコントロール要素のモデル検索用サンプルコードと非常によく似ています。ただしこのサンプルコードでは Doc というドキュメントオブジェクトに加えて、現在のドキュメントウィンドウの参照用に DocCrl というドキュメントコントローラオブジェクトを用意しています。そして、このコントローラオブジェクトに対して、先に用意したコントロール要素のモデルを渡すことにより、GetControl メソッドを使用して、フォーム用コントロール要素のビュー (ここでは変数 CtlView) を特定しています。

フォーム用コントロール要素のシェイプオブジェクトへのアクセス

コントロール要素のシェイプオブジェクトへアクセスする場合も、ドキュメントの図形描画レベルを使用します。特定のコントロール要素を特定するには、図形描画レベルにあるすべての図形描画要素を検索する必要があります。

Dim Doc As Object
Dim Shape as Object
Dim I as integer
 
Doc = StarDesktop.CurrentComponent
 
For i = 0 to Doc.DrawPage.Count - 1
  Shape = Doc.DrawPage(i)
  If HasUnoInterfaces(Shape, "com.sun.star.drawing.XControlShape") Then
    If Shape.Control.Name = "MyListBox" Then
      Exit Function
    End If
  End If
Next

上記のサンプルコードでは、すべての図形描画要素をチェックして、フォーム用コントロール要素に必要な com.sun.star.drawing.XControlShape インターフェースをサポートしているものがあるかを確認しています。該当するものがある場合は、Control.Name 属性を用いて、MyListBox という名前のコントロール要素があるかをチェックします。そしてこの条件も満たされたならば、検索処理を終了します。

コントロール要素のサイズと位置

先に述べたように、コントロール要素のサイズと位置の処理には、shape オブジェクトを利用します。このような処理を行うため、コントロール要素のシェイプには、他のすべての shape オブジェクトと同じように、Size および Position という属性が用意されています。

Size (struct)
コントロール要素のサイズ (com.sun.star.awt.Size データ構造)。
Position (struct)
コントロール要素の位置 (com.sun.star.awt.Point データ構造)。

次のサンプルコードでは、シェイプオブジェクトを用いた、コントロール要素のサイズと位置の指定方法を示します。

Dim Shape As Object
 
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
 
Shape.Size = Size
Shape.Position = Point

このサンプルコードは、コントロール要素の shape オブジェクトは既知であることを前提としています。既知でない場合は、先のコードを利用して必要な判定処理を行う必要があります。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools