この章の目次にもどる
前頁:2.5 データボックスにもどる
次頁:2.7 メニューにすすむ

2.6 パネル

パネルのシステムコールを直接使用せずに、 標準的なパネルが容易に使えるようにしたライブラリである。

panel
 
標準パネルの表示/実行

【形式】

W   panel(W pnl)

【パラメータ】

W   pnl データ番号

【リターン値】

処理関数のリターン値(dostdpnl()のリターン値)

【解説】

pnl で指定したデータ番号の標準パネルを dostdpnl() を使用して表示/実行する。

グローバル変数 _inh_panel≠0 の時は、何も行わない。

bgpanel
 
バックグラウンド時パネル表示


【形式】

W   bgpanel(W pnl)

【パラメータ】

W   pnl パネルのデータ番号

【リターン値】

処理関数のリターン値(dostdpnl()のリターン値)

【解説】

pnl で指定したデータ番号の標準パネルを panel() を使用して表示/実行する。

グローバル変数 _no_errpanel を 1 に設定してから panel() を実行する。 これによりパネルが生成できなかった時に、 致命的エラーパネルは表示されないようになる。

errpanel
 
エラーパネル表示


【形式】

W   errpanel(W pnl, W err)

【パラメータ】

W   pnl 標準パネルのデータ番号
W   err 表示するエラーコード

【リターン値】

処理関数のリターン値 ( dostdpnl() のリターン値 )

【解説】

pnl で指定したデータ番号の標準パネルを panel() を使用して表示/実行する。

  1. err で示されたエラーコードに対応する詳細エラー情報をデータボックスから取り出して、 そのポインタを _spc_text_ptr に設定する。
  2. panel() によりパネルを表示/実行する。
  3. _spc_text_ptrNULL に設定する。
initstdpnl
 
パネル初期化

【形式】

VOID    initstdpnl(void)

【パラメータ】

なし

【リターン値】

なし

【解説】

初期化のため、パネル表示用のスペアメモリを get_lmb() で獲得する。

パネルが表示できないケースをできるだけ減らすために、 パネルの生成エラー時にスペアメモリを解放して再度、試す場合に使用する。 一度解放したスペアメモリは、パネルを削除する時点で再度確保する。

clsstdpnl
 
パネル削除


【形式】

W   clsstdpnl(void)

【パラメータ】

なし

【リターン値】

不定

【解説】

現在表示中のパネルを削除する。

opnstdpnl
 
標準パネル生成/表示


【形式】

W   opnstdpnl(W pnl, FUNCP fn)

【パラメータ】

W       pnl パネルのデータ番号
FUNCP   fn  パネル処理関数

【リターン値】

≧0        パネルID
<0        エラーコード

【解説】

pnl で指定したデータ番号の標準パネルを生成、 表示する。fn はパネル処理関数を示し、 パネル処理関数がない場合は NULL とする。

  1. データボックス内の標準パネル定義データに従って、 パネルマネージャに渡すパネル定義データを作業エリア内に生成する。
    最初にパネル全体の大きさを計算し、 各項目の水平位置を再度計算し直す。 同時に内部番号の変換テーブルも生成する。
    内部番号 31 のテキスト項目の場合は、 実際のテキストは _spc_text_ptr から取り出す (errpanel() の詳細エラー情報に対応する処理)。
  2. パネルを画面の中央に位置する。左端はバイト境界とする。
  3. パネル処理関数が定義されている場合は、処理関数を生成前処理として実行する。
    処理関数の関数値が 0x8000 の時は、 実際のパネルは生成せずに、 関数値 0x8000 でリターンする。
  4. pcre_pnl() により、 パネルを生成、表示する。
    生成エラーの場合 :
  5. 警告パネルの場合は、ビープを鳴らす。
  6. パネル ID を関数値としてリターンする。
exstdpnl
 
パネルの実行処理

【形式】

W   exstdpnl(W pnid, FUNCP fn)

【パラメータ】

W     pnid  パネルID
FUNCP   fn  パネル処理関数

【リターン値】

処理関数の関数値

【解説】

pnid で指定したパネルIDのパネルの実行処理を行う。 fn はパネル処理関数を示し、 パネル処理関数がない場合は NULL とする。

  1. パネル処理関数が定義されている場合は、処理関数を初期化処理として実行する。
  2. pact_pnl() によりパネル動作実行を行う。
  3. pact_pnl() の関数値により以下の処理を行う。
    P_EVENT の時 :
    evt_loop() が実行されている場合は、 wuget_evt()evt_proc() を連続して実行する。 evt_loop() が実行されていない場合は、 EV_DEVICE の時は oprc_dev() を実行し、 EV_MSG の時は、 メッセージキューの先頭をクリアする。
    その他のイベントは無視する ( evt_loop() が実行されているか否かは、 evt_loop 関数テーブルポインタ( _wfunc )が NULL か否かで判断する)。
    その後、2.へ戻る。
    P_MENU の時 :
    無視して、2. へ戻る。
    その他状態の変化がなかった時:
    2.へ戻る。
  4. pact_pnl() で得られたパネルの項目番号を内部番号に変換する。
  5. 内部番号が 0 の時は、「取り消し」またはスイッチが 1 つのみなので、 リターン値 = 0 で、7. へ進む。
  6. パネル処理関数が定義されている場合は、処理関数を実行する。
    処理関数の関数値≧ 0       :関数値をリターン値として(7)へ進む。
                    = 0x8000   :pnid を関数値としてリターンする。
                    < 0       :処理続行、(2) へ戻る。
    
  7. パネルをクローズして、リターンする。

pact_pnl() で得られたイベントはグローバル変数 _pnl_evt を使って外部から参照可能である。
パネル処理関数は、パネルの操作をした場合に実行される関数で以下の形式となる。

W   fn (W pnid, ino, value)

    pnid   : パネルID
    = -1   : 生成前処理
    ino    : 操作された項目の内部番号
    =  0   : 初期化処理
    = -1   : 生成前処理
    = -2   : 再表示処理
    value  : pact_pnl() からのリターン値

生成前処理は、パネルデータを作成した後、 pcre_pnl() を実行する直前に呼ばれる。 この時点では、内部番号を使用した、 rectstdpnl()ptrstdpnl()itemstdpnl() が使用できるので、 生成直前の細部の調整を行うことができる。 また、関数値として 0x8000 を戻すと、パネルの生成を止めることができる。

初期化処理は、pcre_pnl() を実行後、 pact_pnl() を実行する直前に呼ばれる。

再表示処理は、パネルの再表示が必要となったときに呼ばれる。 パネル定義データによって描画された内容やパーツ類が再表示されたあと、 この処理が呼ばれる。 アプリケーションがパネルに直接描画していなければ、 何もしなくてよい。

関数値として <0 を戻した場合は、 パネルの動作を続行し、≧0を戻した場合はパネルが削除され、 その値を exstdpnl() の関数値として戻す。

関数値 = 0x8000 の場合は、 特殊処理として パネルを削除せずにパネル ID を exstdpnl() の関数値として戻す。

dostdpnl
 
標準パネル生成、実行

【形式】

W   dostdpnl(W pnl, FUNCP fn)

【パラメータ】

W      pnl   パネルのデータ番号
FUNCP   fn  パネル処理関数

【リターン値】

処理関数の関数値

【解説】

pnl で指定したデータ番号の標準パネルを生成し、 実行する。fn はパネル処理関数を示し、 パネル処理関数がない場合は NULL とする。

  1. opnstdpnl() でパネルを生成、表示する。
  2. ポインタ形状を選択指にする。
  3. exstdpnl() でパネルを実行し、その関数値でリターンする。
rectstdpnl
 
パネル項目の領域獲得

【形式】

VOID    rectstdpnl(W ino, RECT *rp)

【パラメータ】

W       ino 内部番号
RECT    *rp 結果を戻す領域

【リターン値】

なし

【解説】

現在表示中のパネルの、 ino で指定した内部番号に対応するパネルの項目の領域を *rp に戻す。 ino = 0 の場合は、パネル全体の領域を戻す。

pidstdpnl
 
パネル項目のパーツID獲得


【形式】

W   pidstdpnl(W ino)

【パラメータ】

W   ino 内部番号

【リターン値】

≧0        パーツID
<0        該当パーツなし

【解説】

現在表示中のパネルの、ino で指定した内部番号に対応するパネルの項目のパーツIDを関数値として戻す。

ptrstdpnl
 
パネルの項目へのポインタ獲得

【形式】

TC* ptrstdpnl(W ino)

【パラメータ】

W   ino 内部番号

【リターン値】

≠NULL      パネルの項目へのポインタ
=NULL      該当項目なし

【解説】

現在表示中のパネルの、ino で指定した内部番号に対応するパネルの項目へのポインタを関数値として戻す。
itemstdpnl
 
パネル項目番号獲得


【形式】

W   itemstdpnl(W ino)

【パラメータ】

W   ino 内部番号

【リターン値】

≠NULL      パネルの項目番号
=NULL      該当項目なし

【解説】

現在表示中のパネルの、ino で指定した内部番号に対応するパネルの項目番号 ( 1 〜 ) を関数値として戻す。

offtoptr
 
データオフセットのポインタへの変換

【形式】

VOID    offtoptr(UW *ptr)

【パラメータ】

UW  *ptr    データオフセット

【リターン値】

なし

【解説】

ptr で指定したアドレスにあるデータオフセットをポインタへ変換する。 結果は ptr の指す先を直接変更する。

adjscalr
 
実座標値変換


【形式】

VOID    adjscalr(RECT *rp)

【パラメータ】

RECT    *rp 長方形

【リターン値】

なし

【解説】

*rp で指定された長方形の c.left < 0 の時、 1 / 16 標準文字サイズ単位の座標値とみなして実座標値に変換する。 変換した結果は *rp に格納される。
sysmsg
 
システムメッセージパネル表示

【形式】

VOID    sysmsg(W msg)

【パラメータ】

W   msg メッセージのデータ番号

【リターン値】

なし

【解説】

msg で指定したデータ番号の文字列データをデータボックスから取り出し、 システムメッセージパネルに表示し、ポインタ形状をビジー形状に変更する。

msg = 0 の場合は、 システムメッセージパネルをクリアし、 ポインタ形状を選択指に変更する。

グローバル変数 _inh_panel が 0 でない時は、何も行わない。

chgbgcol
 
ウィンドウ背景色パネル処理

【形式】

W   chgbgcol(W *mask, COLOR *color, COLOR bgcol)

【パラメータ】

W       *mask   マスク(0〜7)、0は仮身背景色と同じ
                1〜7は、 FILL0〜FILL100。(入出力)
COLOR   *color  背景色(入出力)
COLOR   bgcol   仮身背景色(入力)

【リターン値】

0   変更なし(または、エラー)
1   変更あり(*mask, *color に変更結果が戻される)

【解説】

ウィンドウの背景色のパネル処理全体を行う。

パネルは、標準パネルとしてデータボックス内に (0x8000+250) のデータ番号で定義されていなくてはならない。 実際のパネルの生成、動作は dostdpnl() 関数を使用する。

以下のグローバル変数を使用する ( getscreen() 関数をあらかじめ実行しておく必要がある)。

IMPORT        W   CHSSTD;
IMPORT  PATTERN BLACK100;
IMPORT  WEVENT  _pnl_evt;

この章の目次にもどる
前頁:2.5 データボックスにもどる
次頁:2.7 メニューにすすむ