StarSuite 8 Basic プログラミングガイド
  Procure somente este livro
Fazer download desta apostila em PDF (1383 KB)

第 12 章 フォーム

StarSuite に用意されているフォーム機能には、前章で説明したダイアログと共通する部分が多くあります。 その一方で、両者には以下のような相違点もあります。

  • 各ダイアログは独立したウィンドウとして表示され、ダイアログを終了するまで、ドキュメント上に表示されているダイアログ以外の操作を行うことはできません。 これに対してフォームは、図形描画要素などと同様に、ドキュメント上に直接表示されます。

  • ダイアログの作成には、StarSuite Basic 開発環境に用意されているダイアログエディタを利用します。 フォームの作成は、フォームの機能のツールバー を利用して、ドキュメント上に直接配置します。

  • ダイアログの機能は、すべての 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 段階構成になっています。

  • まず最初にくるのが、各コントロール要素の Model (モデル) オブジェクトです。 フォーム用のコントロール要素を StarSuite 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 というドキュメントコントローラオブジェクトを用意しています。 そして、このコントローラオブジェクトに対して、先に用意したコントロール要素のモデルを渡すことにより、フォーム用コントロール要素のビュー (ここでは変数 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 (構造体) - コントロール要素のサイズ (com.sun.star.awt.Size に定められた構造体)。

  • Position (構造体) - コントロール要素の位置 (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 オブジェクトは既知であることを前提としています。 既知でない場合は、先のコードを利用して必要な判定処理を行う必要があります。

フォーム用コントロール要素の詳細

フォームの作成に用いるコントロール要素は、ダイアログ用のコントロール要素と多くの共通点があります。 ここでは、テキストボックスをはじめ、リストボックスとコンボボックスおよび各種のボタンについて説明します。

以下に、フォーム用コントロール要素の属性のうち、重要度の高いものをまとめます。 これらの属性は、対応するモデルオブジェクトにも関係してきます。

フォームの場合、通常のコントロール要素に加えて、テーブルコントロール要素が使用でき、これを配置することでデータベーステーブル内のデータを直接表示することができます。 具体的な扱い方については、第 12 章「フォーム」の「「データベースフォーム」」の節で説明しています。

ボタン

フォーム用ボタンのモデルオブジェクトには、以下の属性が用意されています。

  • BackgroundColor (ロング整数) - 背景色。

  • DefaultButton (ブール値) - 標準ボタンとする指定。 True を指定した場合、フォーカスのない状態で Enter キーを押した場合に反応します。

  • Enabled (ブール値) - コントロール要素をアクティブにする指定。

  • Tabstop (ブール値) - コントロール要素を Tab キーによるフォーカス移動の対象にする指定。

  • TabIndex (ロング整数) - Tab キーによるフォーカス移動の順序の指定。

  • FontName (文字列) - フォントの名前。

  • FontHeight (整数) - ポイント単位 (pt) で指定した文字の高さ。

  • Tag (文字列) - プログラム制御によるアクセス用にボタンに格納しておく追加情報用の文字列。

  • TargetURL (文字列) - ボタンを URL にリンクさせる場合のターゲット URL。

  • TargetFrame (文字列) - TargetURL のターゲット URL の内容を開くウィンドウ (または フレーム) の名前 (URL リンク型のボタンをクリックした場合)。

  • Label (文字列) - ボタンのラベル (タイトル)。

  • TextColor (ロング整数) - コントロール要素のテキストの色。

  • HelpText (文字列) - コントロール要素にマウスポインタを重ねた際に表示するヘルプテキスト。

  • HelpURL (文字列) - コントロール要素で使用するオンラインヘルプの URL。

  • ButtonType (列挙型) - ボタンに実行させるアクションの種類 (com.sun.star.form.FormButtonType に定められた値)。

ButtonType 属性の指定値は、ボタンをクリックした際に実行するアクションを規定します。 com.sun.star.form.FormButtonType には、この属性指定用に以下の定数値が定められています。

  • PUSH - 標準のプッシュ式ボタン。

  • SUBMIT - フォーム入力の終了用 (主として HTML フォームで使用)。

  • RESET - すべてのフォーム入力値の初期状態へのリセット用。

  • URL - TargetURL に指定した URL の呼び出し用 (表示先は TargetFrame の指定ウィンドウ)。

ダイアログの場合の OK および キャンセル のボタンは、フォームでは用意されていません。

ラジオボタン

ラジオボタンのモデルオブジェクトには、以下の属性が用意されています。

  • Enabled (ブール値) - コントロール要素をアクティブにする指定。

  • Tabstop (ブール値) - コントロール要素を Tab キーによるフォーカス移動の対象にする指定。

  • TabIndex (ロング整数) - Tab キーによるフォーカス移動の順序の指定。

  • FontName (文字列) - フォントの名前。

  • FontHeight (整数) - ポイント単位 (pt) で指定した文字の高さ。

  • Tag (文字列) - プログラム制御によるアクセス用にボタンに格納しておく追加情報用の文字列。

  • Label (文字列) - ボタンのラベル (タイトル)。

  • Printable (ブール値) - コントロール要素を印刷可能とする指定

  • State (整数) - オプションをアクティブとするか (属性値を 1 とした場合)、非アクティブとするかの指定 (その他の値の場合)。

  • RefValue (文字列) - 追加情報用の文字列 (データレコード ID の管理用などに使用)。

  • TextColor (ロング整数) - コントロール要素のテキストの色。

  • HelpText (文字列) - コントロール要素にマウスポインタを重ねた際に表示するヘルプテキスト。

  • HelpURL (文字列) - コントロール要素で使用するオンラインヘルプの URL。

ラジオボタンをグループ化する方法は、ダイアログとフォームとで異なります。 ダイアログの場合は、タブストップの順番が連続したものは自動的にグループ化されますが、フォームの場合は、コントロール要素の名前を基準にしてグループ化が行われます。 つまりグループ化するラジオボタンには、すべて同じ名前をつけます。 その際に 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)。

チェックボックス

フォーム用のチェックボックスのモデルオブジェクトには、以下の属性が用意されています。

  • Enabled (ブール値) - コントロール要素をアクティブにする指定。

  • Tabstop (ブール値) - コントロール要素を Tab キーによるフォーカス移動の対象にする指定。

  • TabIndex (ロング整数) - Tab キーによるフォーカス移動の順序の指定。

  • FontName (文字列) - フォントの名前。

  • FontHeight (整数) - ポイント単位 (pt) で指定した文字の高さ。

  • Tag (文字列) - プログラム制御によるアクセス用にボタンに格納しておく追加情報用の文字列。

  • Label (文字列) - ボタンのラベル (タイトル)。

  • Printable (ブール値) - コントロール要素を印刷可能とする指定

  • State (整数) - オプションをアクティブとするか (属性値を 1 とした場合)、非アクティブとするかの指定 (その他の値の場合)。

  • RefValue (文字列) - 追加情報用の文字列 (データレコード ID の管理用などに使用)。

  • TextColor (ロング整数) - コントロール要素のテキストの色。

  • HelpText (文字列) - コントロール要素にマウスポインタを重ねた際に表示するヘルプテキスト。

  • HelpURL (文字列) - コントロール要素で使用するオンラインヘルプの URL。

テキストボックス (テキストフィールド)

フォーム用のテキストボックス (テキストフィールド) のモデルオブジェクトには、以下の属性が用意されています。

  • Align (整数) - テキストの配置 (0: 左揃え、1: 中央揃え、2: 右揃え)。

  • BackgroundColor (ロング整数) - コントロール要素の背景色。

  • Border (整数) - 外枠の種類 (0: なし、1: 3D 表示、2: 平坦な線)。

  • EchoChar (文字列) - パスワードフィールドとしての利用時のマスク記号。

  • FontName (文字列) - フォントの名前。

  • FontHeight (整数) - ポイント単位 (pt) で指定した文字の高さ。

  • HardLineBreaks (ブール値) - コントロール要素のテキスト内で改行する指定。

  • HScroll (ブール値) - 水平スクロールバーを表示する指定。

  • MaxTextLen (整数) - 表示テキストの最大数で、0 の指定は制限無しに対応。

  • MultiLine (ブール値) - 複数行表示を許可する指定。

  • Printable (ブール値) - コントロール要素を印刷可能とする指定

  • ReadOnly (ブール値) - コントロール要素を読み取り専用とする指定。

  • Enabled (ブール値) - コントロール要素をアクティブにする指定。

  • Tabstop (ブール値) - コントロール要素を Tab キーによるフォーカス移動の対象にする指定。

  • TabIndex (ロング整数) - Tab キーによるフォーカス移動の順序の指定。

  • FontName (文字列) - フォントの名前。

  • FontHeight (整数) - ポイント単位 (pt) で指定した文字の高さ。

  • Text (文字列) - コントロール要素の表示テキスト。

  • TextColor (ロング整数) - コントロール要素のテキストの色。

  • VScroll (ブール値) - 垂直スクロールバーを表示する指定。

  • HelpText (文字列) - コントロール要素にマウスポインタを重ねた際に表示するヘルプテキスト。

  • HelpURL (文字列) - コントロール要素で使用するオンラインヘルプの URL。

リストボックス

フォーム用のリストボックスのモデルオブジェクトには、以下の属性が用意されています。

  • BackgroundColor (ロング整数) - コントロール要素の背景色。

  • Border (整数) - 外枠の種類 (0: なし、1: 3D 表示、2: 平坦な線)。

  • FontDescriptor (構造体) - 表示フォントの詳細指定用の構造体 (com.sun.star.awt.FontDescriptor に定められた構造体)。

  • LineCount (整数) - コントロール要素の行数。

  • MultiSelection (ブール値) - 項目の複数選択を許可する指定。

  • SelectedItems (文字列配列) - 強調表示中の項目のリスト。

  • StringItemList (文字列配列) - すべての項目のリスト。

  • ValueItemList (文字列配列) - 個々の項目に付加する追加情報のリスト (データレコード ID の管理用などに使用)。

  • Printable (ブール値) - コントロール要素を印刷可能とする指定

  • ReadOnly (ブール値) - コントロール要素を読み取り専用とする指定。

  • Enabled (ブール値) - コントロール要素をアクティブにする指定。

  • Tabstop (ブール値) - コントロール要素を Tab キーによるフォーカス移動の対象にする指定。

  • TabIndex (ロング整数) - Tab キーによるフォーカス移動の順序の指定。

  • FontName (文字列) - フォントの名前。

  • FontHeight (整数) - ポイント単位 (pt) で指定した文字の高さ。

  • Tag (文字列) - プログラム制御によるアクセス用にボタンに格納しておく追加情報用の文字列。

  • TextColor (ロング整数) - コントロール要素のテキストの色。

  • HelpText (文字列) - コントロール要素にマウスポインタを重ねた際に表示するヘルプテキスト。

  • HelpURL (文字列) - コントロール要素で使用するオンラインヘルプの URL。


注 –

フォーム用のリストボックスに用意された ValueItemList 属性は、VBA の ItemData 属性に相当するもので、リストの各項目に追加情報を付加する際に利用できます。


リストボックスの場合、ビューオブジェクトに対して以下の属性が用意されています。

  • addItem (Item, Pos) - Item として渡された文字列を、Pos で指定するリスト位置に挿入します。

  • addItems (ItemArray, Pos) - 文字列データフィールド ItemArray の形で渡された複数の項目を、Pos で指定するリスト位置に挿入します。

  • removeItems (Pos, Count)Pos で指定するリスト位置から、Count 個の項目を削除します。

  • selectItem (Item, SelectMode) - 文字列 Item に指定された項目の強調表示を、ブール値 SelectMode の指定に応じて切り換えます。

  • makeVisible (Pos) - Pos の指定位置にある項目を表示するよう、リストフィールドをスクロールします。

データベースフォーム

StarSuite のフォームは、データベースと直接リンクさせることができます。 このようなフォームでは、特別なプログラムを用意することなく、データベースのフロントエンド機能をそのまま利用できます。

ユーザーが選択したテーブルやクエリーに対しては、ブラウズや検索をはじめ、データレコードの変更や新規挿入などの処理が行えます。データベースからのデータの取得や、変更したデータのデータベースへの書き込み処理は、StarSuite が自動的に実行します。

データベースフォームの構造は、基本的に StarSuite の通常のフォームと同じものです。 ただし、通常の属性の他に以下のようなデータベース固有の属性があるため、これらに対して必要な設定をする必要があります。

  • DataSourceName (String) - データソースの名前 (第 10 章「データベースアクセス」の説明を参照。StarSuite のデータソースは広域アクセスできるよう準備しておく必要あり)。

  • Command (文字列) - テーブル、クエリー、SQL 選択コマンドなどのリンク対象の名前。

  • CommandType (定数) - Command 属性の対象がテーブル、クエリー、SQL コマンドのいずれであるかの指定 (com.sun.star.sdb.CommandType に定められた列挙型)。

com.sun.star.sdb.CommandType には以下の値を指定できます。

  • TABLE - テーブル

  • QUERY - クエリー

  • COMMAND - SQL コマンド

個々のコントロール要素へのデータベースフィールドの割り当ては、以下の属性で指定します。

  • DataField (文字列) - リンクするデータベースフィールドの名前。

テーブル

データベースの操作用には、テーブルコントロールというコントロール要素も用意されています。このコントロールを用いると、テーブルやクエリーのデータを直接表示させることができます。 たとえばテーブルコントロールからデータベースへのリンクの構築は、オートパイロットによるフォーム作成機能を利用すると簡単に実行でき、その際にはデータベースフィールドとテーブル列のリンクに関する必要な設定を行うこともできます。 ただし、この処理に関係する API は非常に複雑であるため、ここでは説明しません。