Contidos dentroLocalizar Mais DocumentaçãoDestaques de Recursos de Suporte | Fazer download desta apostila em PDF (1383 KB)
第 12 章 フォームStarSuite に用意されているフォーム機能には、前章で説明したダイアログと共通する部分が多くあります。 その一方で、両者には以下のような相違点もあります。
フォームに用意されているイベントハンドル用メソッドの使用法については、第 11 章「ダイアログ」を参照してください。 ここで説明してある内容は、フォームの場合でも同様です。 フォームの使用StarSuite のフォームは、文章ドキュメントまたは表計算ドキュメントの上に、テキストボックス、リストボックス、ラジオボタンをはじめとする各種のコントロール要素を直接配置することにより構成されます。 フォームの編集には、フォームの機能ツールバー を利用します。 StarSuite フォームには、デザインモードとディスプレイモードの 2 種類のモードが存在します。 デザインモードでは、コントロール要素の表示位置を調整したり、属性ウィンドウにより属性 (プロパティ) を変更したりすることができます。 モードの切り替えは、フォームの機能ツールバー から行えます。 オブジェクトフォームの指定StarSuite のフォームで用いるコントロール要素は、図形描画オブジェクトと同じレベルに配置されます。 実際のオブジェクトフォームには、図形描画レベルの 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 段階構成になっています。
フォーム用コントロール要素のモデルへのアクセスフォーム用コントロール要素のモデルへのアクセスには、フォームオブジェクトの 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 というドキュメントコントローラオブジェクトを用意しています。 そして、このコントローラオブジェクトに対して、先に用意したコントロール要素のモデルを渡すことにより、フォーム用コントロール要素のビュー (ここでは変数 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 という属性が用意されています。
以下のサンプルコードでは、シェイプオブジェクトを用いた、コントロール要素のサイズと位置の指定方法を示します。 Dim Shape As Object Point.x = 1000 Point.y = 1000 Size.Width = 10000 Size.Height = 10000 Shape.Size = Size Shape.Position = Point このサンプルコードは、コントロール要素の shape オブジェクトは既知であることを前提としています。 既知でない場合は、先のコードを利用して必要な判定処理を行う必要があります。 フォーム用コントロール要素の詳細フォームの作成に用いるコントロール要素は、ダイアログ用のコントロール要素と多くの共通点があります。 ここでは、テキストボックスをはじめ、リストボックスとコンボボックスおよび各種のボタンについて説明します。 以下に、フォーム用コントロール要素の属性のうち、重要度の高いものをまとめます。 これらの属性は、対応するモデルオブジェクトにも関係してきます。 フォームの場合、通常のコントロール要素に加えて、テーブルコントロール要素が使用でき、これを配置することでデータベーステーブル内のデータを直接表示することができます。 具体的な扱い方については、第 12 章「フォーム」の「「データベースフォーム」」の節で説明しています。 ボタンフォーム用ボタンのモデルオブジェクトには、以下の属性が用意されています。
ButtonType 属性の指定値は、ボタンをクリックした際に実行するアクションを規定します。 com.sun.star.form.FormButtonType には、この属性指定用に以下の定数値が定められています。
ダイアログの場合の OK および キャンセル のボタンは、フォームでは用意されていません。 ラジオボタンラジオボタンのモデルオブジェクトには、以下の属性が用意されています。
ラジオボタンをグループ化する方法は、ダイアログとフォームとで異なります。 ダイアログの場合は、タブストップの順番が連続したものは自動的にグループ化されますが、フォームの場合は、コントロール要素の名前を基準にしてグループ化が行われます。 つまりグループ化するラジオボタンには、すべて同じ名前をつけます。 その際に StarSuite は、グループ内の全コントロール要素を 1 つの配列として管理するため、StarSuite Basic によるボタン制御はこれまでと同様の方式で実行できます。 以下のサンプルコードでは、グループ化したコントロール要素へのアクセス法を示します。 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("MyOptions") Then
Ctl = Form. GetGroupbyName("MyOptions")
Exit Function
End If
Next I
上記のサンプルコードの処理の流れは、グループ化しない単独のコントロール要素へのアクセス法を説明した、先のサンプルコードのものと基本的に同じです。 ここでは、現在の文書ドキュメントにあるすべてのフォームを取得してから、ループと HasByName メソッドを用いて、MyOptions という名前のコントロール要素が配置されたフォームがあるかをチェックしています。 そして該当するフォームを検出した時点で、目的とするモデル配列への参照情報を GetGroupByName メソッドにより取得します (グループ化していないモデルの場合に使用したメソッドは GetByName)。 チェックボックスフォーム用のチェックボックスのモデルオブジェクトには、以下の属性が用意されています。
テキストボックス (テキストフィールド)フォーム用のテキストボックス (テキストフィールド) のモデルオブジェクトには、以下の属性が用意されています。
リストボックスフォーム用のリストボックスのモデルオブジェクトには、以下の属性が用意されています。
注 – フォーム用のリストボックスに用意された ValueItemList 属性は、VBA の ItemData 属性に相当するもので、リストの各項目に追加情報を付加する際に利用できます。 リストボックスの場合、ビューオブジェクトに対して以下の属性が用意されています。
データベースフォームStarSuite のフォームは、データベースと直接リンクさせることができます。 このようなフォームでは、特別なプログラムを用意することなく、データベースのフロントエンド機能をそのまま利用できます。 ユーザーが選択したテーブルやクエリーに対しては、ブラウズや検索をはじめ、データレコードの変更や新規挿入などの処理が行えます。データベースからのデータの取得や、変更したデータのデータベースへの書き込み処理は、StarSuite が自動的に実行します。 データベースフォームの構造は、基本的に StarSuite の通常のフォームと同じものです。 ただし、通常の属性の他に以下のようなデータベース固有の属性があるため、これらに対して必要な設定をする必要があります。
com.sun.star.sdb.CommandType には以下の値を指定できます。
個々のコントロール要素へのデータベースフィールドの割り当ては、以下の属性で指定します。
テーブルデータベースの操作用には、テーブルコントロールというコントロール要素も用意されています。このコントロールを用いると、テーブルやクエリーのデータを直接表示させることができます。 たとえばテーブルコントロールからデータベースへのリンクの構築は、オートパイロットによるフォーム作成機能を利用すると簡単に実行でき、その際にはデータベースフィールドとテーブル列のリンクに関する必要な設定を行うこともできます。 ただし、この処理に関係する API は非常に複雑であるため、ここでは説明しません。 |