この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

head2.gif 7.7.7 雑多な処理
 以上で,伝票に関するほとんどの処理は実装したことになる。残る検索機能と印刷機能などを,まとめて実装してゆく。

●カレント行が移動したときの処理
 FormSlipフォーム(Fig.7-86)では,伝票一覧を表示するDGrid_Slipデータグリッドのカレント行(マーキーの指す位置)が変更されたときに,一部のボタンを淡色表示にして無効にする処理が必要となる場面がある。たとえば,カレント行が空であれば,[新規]ボタン以外のほとんどのボタンは使えないようにすべきだし,カレント行が承認されるまえの伝票であれば,[発送]ボタンや[経理処理]ボタンなどを使えないようにする必要がある。

 DGrid_Slipデータグリッドと結び付けられているADODB.Recordsetオブジェクトはグローバル変数g_objRecに格納されている。そこで,グローバル変数g_objRecに保存されているADODB.Recordsetオブジェクトに対して発生するMoveCompleteイベントの処理をList 7-139のように実装する。

 List 7-139は,伝票の状態に加え,ユーザーが所属しているロールによってもボタンの状態を変更しているために,かなり長いプログラムになっている。しかし,長い割には複雑というわけではなく,伝票やロールの状態に応じて各ボタンの通常表示と淡色表示とを切り替えているだけなので,理解は難しくないだろう。

●[最新の情報に更新]ボタンが押されたときの処理
 ユーザーが[最新の状態に更新]ボタン(BTN_REFRESHボタン)を押したときには,DGrid_Slipデータグリッドの内容を更新する。その実装はList 7-140のようになる。List 7-140では,List 7-116で実装しておいたRefreshDataプロシージャを呼び出してDGrid_Slipデータグリッドを更新し,その後カレント行を設定し直しているだけである。

●検索処理
 ユーザーが[検索]ボタン(BTN_SEARCHボタン)を押したときには,TXT_SEARCHテキストボックスに入力された条件と合致するレコードをカレント行とするような検索をする。この処理内容は「7.4.6 顧客の検索」で説明した内容とほぼ同じで,その実装はList 7-141のようになる。

●印刷処理
 ユーザーが[印刷]ボタン(BTN_PRINTボタン)を押したときには,DGrid_Slipデータグリッドに表示されている内容を印刷する。その処理内容は,List 7-142のようになる。List 7-142では,「7.4.7 顧客情報の印刷処理」で実装したFormPrintPreviewフォーム(Fig.7-45)のSetTitleプロシージャ(List 7-36)を呼び出し,印刷(プレビュー)すべきタイトル文字列とデータグリッドコントロールを引き渡したのち,FormPrintPreviewフォームをモーダルウィンドウとして表示するという処理になっている。

お詫びと訂正

 「7.4.7 顧客情報の印刷処理」で実装したFormPrintPreviewフォーム(Fig.7-45)のDrawBoxプロシージャ(List 7-72)に不具合があることが判明した。DrawBoxプロシージャは,指定された幅で折り返して文字列を描画するルーチンである。ところが,引数に渡された幅が狭すぎ,1文字も描画できない場合には,無限ループに陥るという問題が判明した。そこで,DrawBoxプロシージャをList 7-143に示すように変更する。

 List 7-143の変更箇所は,74行目の部分である。ここに“Len(putText) > 1”という条件式を追加し,いくら横幅が狭くても必ず1文字は強制的に描画するという処理にした。この処理によって,無限ループに陥ることはなくなり,どんなに狭い幅が渡されても,必ず1文字は描画されるようになる(この場合,指定された幅よりも文字がはみ出してしまうということを意味する)。

 また,List 7-143では,不具合の修正とは別に64〜72行目の処理を修正し,渡された文字列中にvbCrLf(文字コードでChr(13)Chr(10))があったときには,その部分で強制的に改行するように改良した。これにより,改行を含む文字列をDrawBoxプロシージャに渡した場合,そこで改行されて描画されるようになる。

●[表示項目]ボタンが押されたときの処理
 ユーザーが[表示項目]ボタン(BTN_VIEWボタン)を押したときには,FormSetGridフォーム(Fig.7-31)を表示し,どの列をデータグリッドコントロールに表示するのかをユーザーが選択できるようにする。その処理は,List 7-144のようになる。List 7-144は,まず引数にDGrid_Slipデータグリッドを渡してFormSetGridフォームのSetColumnプロシージャ(List 7-21)を呼び出し,ユーザーに表示項目を設定させる。そのあと,COMBO_SEARCHFIELDコンボボックスにDGrid_Slipデータグリッドの列見出しを再設定するべく,SetFieldListプロシージャ(List 7-118)を呼び出す。

Prev 108/134 Next