• 検索結果がありません。

OpenForm メソッドを使用する

ドキュメント内 PowerCOBOL ユーザーズガイド (ページ 159-165)

第8章 プログラミングテクニック

8.3 複数ウィンドウをもつアプリケーションを作成する

8.3.1 OpenForm メソッドを使用する

OpenFormメソッドを使用することにより、PowerCOBOLで作成した別のフォームを開くことができます。

OpenFormメソッドの書き方

OpenFormメソッドは、以下のように記述します。

INVOKE POW-SELF ”OpenForm”

USING ”フォーム名”

[”DLL名”] [フォーム識別ID]

RETURNING 復帰値 POW-SELF

これから子フォームを開こうとしている親フォーム自身を表しています。POW-SELFの代わりに、親フォーム自身のフォーム名を使う こともできます。

フォーム名については、「4.7 プロジェクト構成要素の命名規則」を参照してください。

フォーム名

これから開こうとしている子フォームの名前を指定します。

DLL名

開こうとしている子フォームが別のDLL(モジュール)に含まれている場合、そのDLLファイル名を指定します。

フォーム識別ID

複数の子フォームを開き、それらのどれかが閉じられた場合に、親フォームのCloseChildイベントで閉じられた子フォームを識別す るために使用するIDです。

復帰値

OpenFormメソッドを使った複数ウィンドウの使用例

本節では、「第4章 アプリケーションを作成しよう」で作成したアプリケーションに新しくフォームを追加し、フォームの呼び出し方法のサ ンプルプログラムを作成します。このサンプルプログラムでは、表に入力できる商品が追加できるよう、以下の機能を追加しています。

・ [商品の追加]ボタンをクリックすると、商品の情報を追加するための、[商品の追加]ウィンドウが表示されます。

・ [商品の追加]ウィンドウが表示されると、[購入商品の入力画面]ウィンドウの[商品の追加]ボタンが無効になります。

・ [商品の追加]ウィンドウで[商品名]と[単価]を入力し、[追加]ボタンをクリックすると、商品ファイルに商品の情報が追加されま す。

・ 追加した商品は、[購入商品の入力画面]ウィンドウの表で使用することができるようになります。

・ [商品の追加]ウィンドウの[閉じる]ボタンをクリックすると、[商品の追加]ウィンドウが閉じます。

・ [商品の追加]ウィンドウが閉じられると、[商品の追加]ボタンが有効になります。

アプリケーションは、以下の手順で作成します。

1. モジュールに子ウィンドウとなる新しいフォームを追加し、名前を設定します。

2. 追加した子ウィンドウを開くためのボタンを、呼び出し元のフォームに追加します。

3. 呼び出し元のフォームに、フォームを開くための手続きを記述します。

4. コントロールを新しいフォームの適切な位置に配置し、大きさを変更します。

5. 新しいフォームの手続きを記述します。

ポイント

本節で作成するサンプルプログラムは、"SimpleForm\Table2.ppj"に格納されています。必要に応じて参照してください。

モジュールに新しいフォームを追加する

以下の操作により、モジュールに新しいフォームを追加し、名前を設定します。

1. プロジェクトウィンドウのデザインツリーウィンドウで、モジュールを選択します。

2. ポップアップメニューの[フォーム作成]コマンドを選択します。

3. モジュールにCfFormN(Nは正数値)という名前でフォームが追加され、フォーム編集ウィンドウが表示されます。

4. フォームのプロパティ設定ダイアログボックスを開き、[名前]を"AddForm"に変更します。

5. [キャプション]を"商品の追加"に変更します。

呼び出し元のフォームを編集する

新しく作成したフォームを呼び出すために、以下の手順でフォームを編集します。

1. MainFormのポップアップメニューで[開く]コマンドを選択し、フォーム編集ウィンドウを表示します。

2. 下図のように、コマンドボタンコントロールをフォームの空いている位置に任意に配置します。

3. 配置したコマンドボタンコントロールのプロパティ設定ダイアログボックスで、[キャプション]を"商品の追加"、[名前]を"BT-ADD"

に変更します。

フォームを開くための手続きを記述する

新しく作成したフォームを開くために、以下の手続きを追加します。

・ 開くフォームを識別するためのIDの定義(WORKING-STORAGE)

・ [商品の追加]ボタンをクリックしたときの手続き(BT-ADD-Click)

・ 開いたフォームが閉じられたときの手続き(MainForm-CloseChild) WORKING-STORAGE

フォームの作業場所節(WORKING-STORAGE)に以下の定義を追加します。

* 商品追加用フォームのID

01 ADD-FORM-ID PIC S9(9) COMP-5 VALUE 1 GLOBAL.

BT-ADD-Click

[商品の追加]ウィンドウを開き、[商品の追加]ボタンを無効(淡色表示)にします。

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 ReturnValue PIC S9(9) COMP-5.

PROCEDURE DIVISION.

* 商品追加用のフォームを開きます。

INVOKE POW-SELF "OpenForm" USING "AddForm" ADD-FORM-ID RETURNING ReturnValue * フォームが開くことができたら、ボタンを無効にします。

IF ReturnValue = 0 THEN

MOVE POW-FALSE TO "Enabled" OF BT-ADD END-IF

ポイント

- 商品の追加]ボタンを無効にするのは、ボタンが重複してクリックされることを防ぐためです。ボタンが重複してクリックされると、

- このサンプルプログラムでは、OpenFormメソッドの第2引数(DLLの名前)を省略しています。DLLとして作成された他のモジュー ルに含まれるフォームを開く場合は、第2引数にDLL名を指定してください。OpenFormメソッドについての詳細は、『リファレン ス』を参照してください。

MainForm-CloseChild

CloseChildイベントは、このフォーム中の手続きから開かれたフォームが閉じられた場合に発生します。したがって、BT-ADD-Click イベントで開いた[商品の追加]ウィンドウ(AddForm)が閉じられたとき、ここに記述した手続きが実行されます。ここでは、[商品の 追加]ウィンドウが閉じられたら、再び[商品の追加]ボタンがクリックできるよう、ボタンを有効にしています。

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

LINKAGE SECTION.

01 POW-COOKIE PIC S9(9) COMP-5.

PROCEDURE DIVISION POW-COOKIE.

* 商品追加用フォームが閉じられたら、ボタンを有効にします。

EVALUATE POW-COOKIE WHEN ADD-FORM-ID

MOVE POW-TRUE TO "Enabled" OF BT-ADD END-EVALUATE

ポイント

このイベントのパラメタ(POW-COOKIE)には、OpenFormメソッドのパラメタで指定した、フォームの識別IDが渡ってきます。このパラ メタは、2つ以上のフォームをOpenFormメソッドで開いた場合に、どのフォームが閉じられたかを判定するために使用します。この サンプルプログラムでは、1つのフォームを開いただけなので、とくにこのパラメタを判定する必要はありませんが、例として記述して います。

新しいフォームにコントロールを配置する

新しく作成したフォームを開き、以下のコントロールを配置します。

・ スタティックテキストコントロールを4つ(CmStatic1~CmStatic4)

・ テキストボックスコントロールを3つ(CmText1~CmText3)

・ コマンドボタンコントロールを2つ(CmCommand1~CmCommand2)

各コントロールのプロパティ設定ダイアログボックスを使って、以下のようなフォームを作成します。

各コントロールのプロパティ設定ダイアログボックスでの設定内容を、以下に示します。

CmStatic1のプロパティ設定

- [スタティックテキスト]タブの[キャプション]を"追加する商品の情報を入力してください。"に変更します。

- [共通]タブの[名前]を"ST-TITLE"に変更します。

CmStatic2のプロパティ設定

- [スタティックテキスト]タブの[キャプション]を"商品コード:"に変更します。

- [共通]タブの[名前]を"ST-CODE"に変更します。

CmStatic3のプロパティ設定

- [スタティックテキスト]タブの[キャプション]を"商品名:"に変更します。

- [共通]タブの[名前]を"ST-NAME"に変更します。

CmStatic4のプロパティ設定

- [スタティックテキスト]タブの[キャプション]を"単価:"に変更します。

- [共通]タブの[名前]を"ST-PRICE"に変更します。

CmText1のプロパティ設定

- [テキストボックス]タブの[テキスト]をクリアします。

- [テキスト属性]タブの[テキスト種別]を"1 - COBOL PICTURE属性"に変更します。

- [PICTURE文字列]を"9(5)"に変更します。

- [共通]タブの[名前]を"TX-CODE"に変更します。

CmText2のプロパティ設定

- [テキストボックス]タブの[テキスト]をクリアします。

- [テキスト属性]タブの[テキスト種別]を"1 - COBOL PICTURE属性"に変更します。

- [PICTURE文字列]を"N(10)"に変更します。

- [共通]タブの[名前]を"TX-NAME"に変更します。

CmText3のプロパティ設定

- [テキストボックス]タブの[テキスト]を"0"に変更します。

- [テキスト属性]タブの[テキスト種別]を"1 - COBOL PICTURE属性"に変更します。

- [PICTURE文字列]を"\\\,\\9"に変更します。

- [共通]タブの[名前]を"TX-PRICE"に変更します。

CmCommand1のプロパティ設定

- [コマンドボタン]タブの[キャプション]を"追加"に変更します。

- [共通]タブの[名前]を"BT-ADD"に変更します。

CmCommand2のプロパティ設定

- [コマンドボタン]タブの[キャプション]を"閉じる"に変更します。

- [共通]タブの[名前]を"BT-EXIT"に変更します。

新しいフォームの手続きを記述する

新しく作成したフォームに、以下の手続きを記述します。

・ 使用するファイルの宣言(FILE-CONTROL)

・ フォームが開かれたときの手続き(AddForm-Opened)

・ [追加]ボタンをクリックしたときの手続き(BT-ADD-Click)

・ [閉じる]ボタンをクリックしたときの手続き(BT-EXIT-Click)

FILE-CONTROL

* 商品コードをキーとして、商品名および単価をもちます。

SELECT 商品ファイル ASSIGN TO "..\PRODUCTS.TBL"

ORGANIZATION IS RELATIVE RELATIVE KEY IS 商品-キー ACCESS MODE IS RANDOM FILE STATUS IS FS.

FILE

FD 商品ファイル GLOBAL.

01 商品レコード.

02 商品-名 PIC N(10).

02 商品-単価 PIC 9(5).

WORKING-STORAGE

01 商品-キー PIC 9(5) BINARY GLOBAL.

01 FS PIC XX GLOBAL.

AddForm-Opened

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 W-CODE PIC S9(8) COMP-5.

PROCEDURE DIVISION.

* 現在のレコード数を求め、次の商品コードを決定します。

OPEN INPUT 商品ファイル MOVE 1 TO W-CODE PERFORM WITH NO LIMIT MOVE W-CODE TO 商品-キー READ 商品ファイル INVALID KEY

PERFORM 最終レコード到達 END-READ

ADD 1 TO W-CODE END-PERFORM .

最終レコード到達.

MOVE W-CODE TO "Text" OF TX-CODE CLOSE 商品ファイル

* 最初の入力箇所にフォーカスを設定します。

INVOKE TX-NAME "SetFocus"

EXIT PROGRAM.

BT-ADD-Click

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

PROCEDURE DIVISION.

* 入力内容をチェックします。

IF "Text" OF TX-NAME = SPACE THEN INVOKE POW-SELF "DisplayMessage" USING "商品名を入力してください。"

EXIT PROGRAM

ドキュメント内 PowerCOBOL ユーザーズガイド (ページ 159-165)