この章の目次にもどる
前頁:3.3 パーツマネージャにもどる
次頁:3.5 トレーマネージャにすすむ

3.4 パネルマネージャ

3.4.1 パネルマネージャの機能

3.4.1.1 概要

パネルマネージャは、外殻の HMI 機能の 1 つとして位置付けられ、 ダイアローグタイプのパネルの生成 / 削除 / 操作等の機能を提供している。 アプリケーションプログラムは、 このパネルマネージャを通して容易にダイアローグタイプのパネルを使用することができる。

また、システムメッセージパネルの表示機能もパネルマネージャが提供している。

なお、フローティングタイプのパネルに関しては、 パネルマネージャでは特に機能を提供せず、 アプリケーションが通常のウィンドウとして処理することになる。

なお、今後単にパネルといった場合は、ダイアローグタイプのパネルを示すものとする。

本仕様書では、パネルの標準的な形状に関して説明しているが、表示形状の詳細はインプリメントに依存する。

3.4.1.2 パネル

( ダイアローグタイプの ) パネルは、 パラメータの設定や、確認等を求めるパネルであり、 その設定 / 操作が終了しないと先の処理に進めない場合に使用されるもので、 スクリーン上で通常ウィンドウの前面 / 前面ウィンドウの下に表示され移動 / 変形ができないものである。

パネルは表示された時点で強制的にユーザからの入力受付状態となり、 そのパネルで要求している設定や操作を終了した時点でパネルは消滅し、 以前に入力受付状態であったウィンドウに入力受付状態は戻る。

パネルは多重にネスティングされて表示される場合があり、 その場合は発生順にオーバーラップされて表示され、 入力受付状態も最後に発生したパネルに順次切り換わっていく。 パネルの操作を終了した場合は、 発生の逆順に表示が消えて入力受付状態が戻る。

アプリケーションプログラムはパネルマネージャを使用してパネルを生成し、 生成時に得られるパネルID ( >0 ) を使用して操作等を行なう。

生成したパネルは、基本的に登録したプロセスに依存し、 そのプロセスが終了するとパネルも自動的に削除されるが、 ある種のパネルは複数プロセスで使用される場合があるため、 パネル ID はプロセスグローバルであり、 またパネルの定義データはすべてのプロセスからアクセスできる領域にある必要がある。 このような複数プロセスで使用されるパネルは、 ローカルメモリ領域のデータを参照していないように作成する必要があるが、 パネルマネージャは特にこのための保証は行なわない。

パネルマネージャは内部的には、 ウィンドウマネージャを使用して特殊なウィンドウとしてのパネルを生成する。 従ってパネル ID は、 ウィンドウマネージャにより生成されたウィンドウ ID に等しいことになる。

3.4.1.3 システムメッセージパネル

システムメッセージパネルはスクリーンの下部に 1 行分の大きさで常に表示されている特殊なパネルであり、 他のウィンドウ / パネル等で決してオーバーラップされない領域である。

フルスクリーンモードでは、システムメッセージパネルは隠れて見えなくなる。

このパネルでは一切の操作はできず、 単にメッセージの表示のみが行なわれる。 一度表示されたメッセージは、 別のメッセージによりオーバーライトされない限り消えることはない。

システムメッセージパネルはシステムの初期化の時点で自動的に生成されるため、 アプリケーションが表示を行なう場合は単に表示用の関数をコールすればよいが、 システムメッセージパネルの目的にあった使用法に限定すべきである。

システムメッセージパネル
図 96 : システムメッセージパネル

3.4.1.4 パネルの表示形状

パネルは、一般的にウィンドウと同様に下図のように右下に影が付いた境界線により囲まれた矩形領域として表示される。

パネルの一般的な境界線
図 97 : パネルの一般的な境界線

パネルの内部には通常、強調用の内枠を表示する。 内枠は、パネルの境界線の内側に狭い隙間を開けて描かれる、 境界線より太い枠である。なお、境界線のことを外枠とも呼ぶ。

内枠としては任意のパターンが指定可能であるが、 通常はパネルの用途に応じて「通常パネル」「警告パネル」「重大警告パネル」の 3 種類のパターンが使用される。

内枠の内側がパネルの作業領域であり、 その表示内容はアプリケーションに依存し、 各種コントロールパーツ、図形イメージデータ、文字列の任意の組み合せとなる。 また、通常はパネルの操作を終了するためのモーメンタリスイッチが存在する。

パネルの一般的な形状
図 98 : パネルの一般的な形状

パネルの表示に関する以下の項目は、パネルの生成時に指定することができる。

3.4.1.5 パネルのデータ構造

パネルの全体構造

パネルは以下のデータ構造により定義される。

    typedef struct panel {
        UW  oframe;     /* 境界線(外枠)の属性 */
        UW  iframe;     /* 内枠の属性 */
        W   bgpat;      /* 背景パターン */
        RECT    r;      /* 表示領域 */
        W   defsw;      /* デフォールトスイッチ番号 */
        W   nitem;      /* 項目数 */
        PNL_ITEM *item; /* 項目配列へのポインタ */
    } PANEL;
oframe :
パネルの境界線の属性を指定するもので、以下の内容を持つ。境界線の幅は影の部分を含まない幅である。
パネルの境界線の属性
図 99 : パネルの境界線の属性
frame :
パネルの内枠の属性を指定するもので、以下の内容を持つ。
パネルの内枠の属性
図 100 : パネルの内枠の属性
bgpat:
パネルの背景パターンを指定する、"PAT_DAT" タイプのデータ番号。0 の場合はデフォールトを意味する。
r:
パネルの境界線を囲む全体の表示矩形領域を絶対座標で指定したものである。
defsw:
デフォールトスイッチとして使用されるモーメンタリスイッチパーツの項目番号を示す。
パネルには通常「保存」「承認」等のモーメンタリスイッチが 1 つ存在し、 このスイッチは[改段落 / 改行]キーにより ON となりパネルの処理が終了する。 デフォールトのスイッチは太枠で強調表示される。 デフォールトスイッチが存在しない場合は 0 とする。
nitem:
パネル内に表示される項目の数であり、項目配列の要素数を示す。
item:
nitem 個の要素からなる項目配列へのポインタである。
各項目はこの配列のインデックス + 1 ( 1 〜 nitem ) である項目番号で識別される。
パネルの項目の構造

パネルの構成項目 ( PNL_ITEM ) は、 以下のように定義される。

    typedef struct pnl_item {
        UW  itype;      /* 項目タイプ */
        UW  info;       /* 各種情報 */
        RECT    ir;     /* 表示領域 */
        W   desc;       /* 内部ディスクリプタ */
        W   dnum;       /* データ番号 */
        H   *ptr;       /* データポインタ */
    } PNL_ITEM;
itype:
項目のタイプを指定する以下のいずれかの値であり、 この値はデータマネージャのデータタイプに 1 対 1 に対応している。
NULL_ITEM 0-- 空項目
PTR_ITEM 1-- ポインタイメージ
PICT_ITEM 2-- ピクトグラムイメージ
PAT_ITEM 3-- パターンイメージ
BMAP_ITEM 4-- ビットマップイメージ
5-- 予約
TEXT_ITEM 6-- 文字列
PARTS_ITEM 7-- コントロールパーツ
ACT_ITEM 0x80-- 動作項目( PD プレスの通知)
ATR_TEXT 0x20-- 属性付き文字列
ACT_ITEM, ATR_TEXT の指定は上記項目タイプに OR で指定される。

ATR_TEXT 指定は TEXT_ITEM に対してのみ適用され、 その文字列項目が属性データを含んでいることを意味する。

コントロールパーツ以外は表示のみの項目であり基本的に操作はできないが、 ACT_ITEM 指定を行なった場合は、 その表示領域で PD のプレスが発生した場合、 アプリケーションに通知される。 コントロールパーツの場合は、ACT_ITEM 指定は無関係であり、 パーツの操作を行なった場合は常にアプリケーションに通知される。

NULL_ITEM として指定した領域には何も表示されないが ACT_ITEM と組合わせて、 指定した領域内での PD プレスを検出するために使用される。

info:
項目のタイプにより以下の意味を持つ。
ir:
項目を表示する矩形領域の指定であり、 パネルの全体領域(境界線を含む)の左上の点を (0,0) とした座標値で指定される。各項目の表示はこの領域でクリッピングされ、 はみ出ることはない。
なお、表示領域が空の場合は、その項目は表示されない。
項目がコントロールパーツの場合は、パーツの定義データの中に表示領域が定義されおり、 その左上の点を ir の左上の点に一致するように移動したものが実際の表示領域となる。 したがって、この場合は、ir の右下の点は使用されない。
desc:
以下の意味を持つ内部ディスクリプタであり、定義時には何も設定する必要はない。
dnum:
項目のデータとして、データボックスに定義されているデータを使用する場合、 そのデータ番号 ( > 0 ) を指定する。 項目のタイプがデータタイプとして適用される。 dnum ≠ 0 の場合は ptr は無視される。
ptr:
項目のデータを直接メモリ上に定義している場合に、 そのポインタを指定する。この場合は、dnum = 0 とする必要がある。
グループスイッチ

複数のオルタネートスイッチをグループ化して排他的動作を行なわせるものをグループスイッチと呼ぶ。 即ち、グループ内のあるスイッチが ON 状態となった場合には、 同一グループ内で既に ON 状態となっているスイッチは自動的に OFF 状態となる。 グループスイッチでは、常に 0 個または 1 個のスイッチのみ ON 状態となる。

グループスイッチは、info データのグループに対応するビットを "1" にセットすることにより指定される。 即ち、info データの同一ビットが "1" にセットされているスイッチ群が同一のグループに属することになる。 グループは最大32個まであり、1つのスイッチを2つ以上のグループに属させることも可能である。

グループスイッチの例を以下に示す。

    スイッチ1のinfo = 0x01
    スイッチ2のinfo = 0x01
    スイッチ3のinfo = 0x10
    スイッチ4のinfo = 0x10
    スイッチ5のinfo = 0x11
属性付き文字列

ATR_TEXT 指定の付いた文字列項目は、 文字の属性を指定するために、TAD で規定されている以下の文章付箋セグメントを文字列の中に含むことができる。

上記以外の付箋は無視される。 また、属性付き文字列を ATR_TEXT 指定せずに登録した場合、 その表示は保証されない。属性付き文字列は、表示領域の上端に合わせて表示される。

3.4.1.6 パネルの描画環境

パネルは 1 つの独立した描画環境を持ち、 パネルの生成時に対応した描画環境が割り当てられ、 その描画環境上でパネルの描画が行なわれる。

この描画環境の内容の詳細はインプリメントに依存したパネル描画のための標準的な設定となっているが、 座標系とクリッピング領域は以下のようになっている。

座標系 :
パネルの表示領域の左上の点を( 0 , 0 ) とした座標系
クリッピング領域 :
フレーム長方形 -- パネルの表示領域(境界線を含む)
表示長方形 -- パネルの作業領域(内枠の内部)

ウィンドウと異なり、作業領域の左上の点は ( 0 , 0 ) でない点に注意が必要である。

パネルの描画環境
図 101 : パネルの描画環境

アプリケーションが、パネル上に特殊な描画を行ないたい場合は、 パネルに割り当てられている描画環境IDを取り出し、 その描画環境に対して描画を行なうことにより可能である。 ただし、アプリケーションが、 描画環境のパラメータを変更した場合のパネルの表示は保証されなくなるため、 変更した場合は必ず元に戻すか、 描画環境の複製を作成して使用する必要がある。

3.4.1.7 パネルの動作

パネルは入力受付状態を占有した形で動作し、 発生したイベントは基本的にすべて現在表示されているパネルを対象とする。 従って、PDプレスによる自動的なウィンドウ / パネルの入力受付状態の切り換えは行なわれず、 パネル以外の場所での PD プレスの操作は通常は無視される。

パネルの動作、即ちイベント処理は、以下に示す 2 つの方法により行なう。

(1)
アプリケーションが直接イベントを取り出し、その処理を行なう。

この場合、アプリケーションは取り出したイベントの発生場所をチェックし、 対応する動作をパーツマーネージャ等の関数を使用して直接行なう必要がある。
なお、 この場合は、 他のウィンドウへの切換えが発生しないようにwget_evt()NOMSG 指定で実行する必要がある。

(2)

パネルマネージャで用意されている標準パネル動作関数 (pact_pnl)を使用する。
この場合、パネルマネージャがイベントを順次取り出し、 対応する処理を行ない、その結果、イベントがアプリケーションに戻される。

通常は、(2)の方法を用いるが、イベントに対する特殊な動作を必要とする場合は、 (1)の方法を使用することになる。

3.4.2 データ/定数の定義

□ パネルID

typedef W       PNID;   /* パネルID */

□ 項目タイプ

#define NULL_ITEM   0   /* 無し */
#define PTR_ITEM    1   /* ポインタ */
#define PICT_ITEM   2   /* ピクトグラム */
#define PAT_ITEM    3   /* パターン */
#define BMAP_ITEM   4   /* ビットマップ */
#define FIG_ITEM    5
#define TEXT_ITEM   6   /* 文字列 (1行) */
#define PARTS_ITEM  7   /* コントロールパーツ */
#define ACT_ITEM    0x80    /* 動作項目(上記項目にORで指定) */
#define BLT_TEXT    0x40
#define ATR_TEXT    0x20    /* 属性付き文字列(上記項目にORで指定) */

□ パネル項目

typedef struct pnl_item {
    UW  itype;      /* 項目タイプ */
    UW  info;       /* 各種情報 */
    RECT    ir;     /* 表示領域 */
    W   desc;       /* 内部ディスクリプタ */
    W   dnum;       /* データ番号 */
    H   *ptr;       /* データポインタ */
} PNL_ITEM;

□ パネル

typedef struct panel {
    UW  oframe;     /* 境界線(外枠)の属性 */
    UW  iframe;     /* 内枠の属性 */
    W   bgpat;      /* 背景パターン */
    RECT    r;      /* 表示領域 */
    W   defsw;      /* デフォールトスイッチ番号 */
    W   nitem;      /* 項目数 */
    PNL_ITEM *item; /* 項目配列へのポインタ */
} PANEL;

3.4.3 パネルマネージャの関数

ここでは、パネルマネージャがサポートしている各関数の詳細を説明する。 これらの関数群は外殻の拡張システムコールとして提供される。

各関数のエラーコードとしては、ここで示した以外にも、 核や他の外殻でエラーが検出された場合は、そのエラーコードが直接戻る。

pcre_pnl
 
パネルの生成

【形式】

PNID    pcre_pnl(PANEL *pnl, PNT *p)

【パラメータ】

PANEL   *pnl    パネル定義データ
PNT     *p  パネル表示位置

【リターン値】

≧0    正常(パネルID)
<0    エラー(エラーコード)

【解説】

pnl で定義したパネルを生成し、 p で指定した位置にパネルの表示を行なう。

パネルはオープンされると入力受付状態を横取りした形で占有し、 パネルをオープンしたプロセスがアクティブプロセスとなる。 パネルをオープンしたプロセスがアクティブプロセスでなかった場合は、 元の入力受付状態のウィンドウに対して EV_INACT が送られ、 EV_INACT が受信された後にパネルがオープンされる。 パネルをオープンしたプロセスが既にアクティブプロセスであった場合は、 EV_INACT は送られない。

パネルをクローズした場合、 オープンした時に入力受付状態であったウィンドウに入力受付状態が戻り、 EV_INACT を送った場合は、 EV_SWITCH (W_SWITCHコマンド) が送られる。

p はパネルの境界線を含む全体の表示領域の左上の点を絶対座標で指定したもので、 p = NULL の場合は、パネルの定義データ内に定義された位置に表示される。 指定したパネルの定義データは生成後も参照されるので、保存しておかなければいけない。 p->x に 0x8000 を指定すると水平方向にセンタリングされ、 p->y に 0x8000 を指定すると垂直方向にセンタリングされる。

パネルの境界線, 内枠, 背景の各パターンを指定したデータ番号が不正な場合は、 デフォルトパターンが適用される。また、デフォルトスイッチ番号が不正な場合は、 デフォルトスイッチが無いものとしてパネルを生成する。

関数値としてパネルID( > 0 )が戻され、 以後の操作の際に指定する。

【エラーコード】

EX_ADR      : アドレス(pnl,p)のアクセスは許されていない。
EX_NOSPC    : システムのメモリ領域が不足した。
EX_PAR      : パラメータが不正である(パネルの定義データが不正)。
EX_SAVE     : イメージのセーブ領域が不足した(ネスティングしたパネルの場合)。
popn_pnl
 
パネルのデータボックスからの生成

【形式】

PNID    popn_pnl(W dnum, PNT *p)

【パラメータ】

W   dnum    PANEL_DATA タイプのデータ番号
PNT *p  パネル表示位置

【リターン値】

≧0    正常(パネルID)
<0    エラー(エラーコード)

【解説】

dnumで指定したデータ番号を持つ、"PANEL_DATA" タイプのデータで定義したパネルを生成し、p で指定した位置にパネルの表示を行なう。

パネルはオープンされると入力受付状態を横取りした形で占有し、 パネルをオープンしたプロセスがアクティブプロセスとなる。 パネルをオープンしたプロセスがアクティブプロセスでなかった場合は、 元の入力受付状態のウィンドウに対して EV_INACT が送られ、 EV_INACT が受信された後にパネルがオープンされる。 パネルをオープンしたプロセスが既にアクティブプロセスであった場合は、 EV_INACT は送られない。

パネルをクローズした場合、 オープンした時に入力受付状態であったウィンドウに入力受付状態が戻り、 EV_INACT を送った場合は、EV_SWITCH ( W_SWITCH コマンド ) が送られる。

p はパネルの境界線を含む全体の表示領域の左上の点を絶対座標で指定したもので、 p = NULL の場合は、パネルの定義データ内に定義された位置に表示される。 p->x に0x8000を指定すると水平方向にセンタリングされ、 p->y に0x8000を指定すると垂直方向にセンタリングされる。

パネルの境界線, 内枠, 背景の各パターンを指定したデータ番号が不正な場合は、 デフォルトパターンが適用される。また、デフォルトスイッチ番号が不正な場合は、 デフォルトスイッチが無いものとしてパネルを生成する。

関数値としてパネルID( > 0 ) が戻され、 以後の操作の際に指定する。

【エラーコード】

EX_ADR      : アドレス(p)のアクセスは許されていない。
EX_DNUM     : データ(dnum)はデータマネージャに登録されていない。
EX_NOSPC    : システムのメモリ領域が不足した。
EX_PAR      : パラメータが不正である(パネルの定義データが不正)。
EX_SAVE     : イメージのセーブ領域が不足した(ネスティングしたパネルの場合)。
pdel_pnl
 
パネルの削除

【形式】

ERR pdel_pnl(W pnid)

【パラメータ】

W   pnid    パネルID

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

pnid で指定したパネルを削除し、パネルの表示を消去する。 消去するパネルは最前面に表示されているパネル、即ち、最も最後に生成したパネルでなくてはいけない。

パネルを削除した場合にはパネルに属しているパーツ群も自動的に削除される。 また、パネルを生成したプロセスが終了した場合は、パネルは自動的に削除される。

【エラーコード】

  EX_PNID     : パネル(pnid)は存在していない(最前面のパネルでない)。
pact_pnl
 
パネルの標準動作

【形式】

W   pact_pnl(W pnid, EVENT *ev, W *itemno)

【パラメータ】

W       pnid    パネルID
EVENT   *ev     動作結果のイベントが格納される
W       *itemno 動作結果の項目番号が格納される

【リターン値】

≧0    正常(関数値は項目の処理状態コード)
<0    エラー(エラーコード)

【解説】

pnid で指定したパネルの標準動作を行ない、 動作結果としてのイベント、および項目番号をそれぞれ、 ev, itemno で指定した領域に格納して、 操作した項目の状態を関数値として戻す。

この関数により、以下に示す内容の処理が行なわれる。 通常はデフォールトスイッチが押されてパネルの処理が完全に終了するまで、 pact_pnl() を繰り返し実行することになる。

(1)
操作許可状態のボックスタイプのパーツが存在し、 かつ「入力状態」のボックスが存在しない場合は、 最も小さい項目番号のボックスを「入力状態」とし、 キー入力を受け付けるようにする。
(2)
(ウィンドウ)イベントを順次取り出し、 そのイベントがパネル内に存在するパーツに対して適用される場合、 そのパーツに対して cact_par() を実行する。 その結果パーツの状態が変更されなかった場合は (5) の処理を行ない、 状態が変更された場合は (3)、(4) の処理を行なう。
(3)
ボックスタイプのパーツの cact_par() を実行した場合:
(4)
ボックス以外のパーツの cact_par() を実行した場合:
(5)
ACT_ITEM が設定された表示項目で PD がプレスされた場合は、 プレスされた時点で、pact_pnl() からリターンする。 この時、*itemno にはその項目番号が設定され、 *ev には得られたイベント ( EV_BUTDWN )が設定される。 関数値は 0 となる。
(6)
(2),(5) に該当しない、ボタン / キー関連のイベントは無視される。
ボタン / キー関連以外のイベント、またはメニュー指定のイベントが得られた場合は、 *itemno に現在「入力状態」であるボックスパーツの項目番号 ( 無い場合は 0 ) を、*ev には得られたイベントを設定して戻る。 関数値は以下の値となる(cact_par() の値と同一)。
        メニュー指定:  P_MENU  (0x6010)
        他のイベント:  P_EVENT (0x6020)
なお、メニュー指定とは、以下のいずれかの場合を示す。
        (1)  PD のメニューボタンを押した状態でのクリック
        (2) 「命令」キーを押した状態でのプレス
        (3) 「命令」キーと別のキーの同時押し(キーマクロ)
        (4) メニュー起動ボタンでのクリック(タッチパネルの場合)

なお、イベントとしてEV_REQUESTW_REDISP が返った場合は、 wid で指定されたパネルやウィンドウの再表示をおこなう必要がある。 パネルの再表示の場合、パネル構造体で定義した部分は再描画がおこなわれているので、 アプリケーションで描画した部分があれば再表示することになる。 なお、アクティブでないパネルや、ウィンドウに対しても再表示要求が発生することに注意が必要である。

【エラーコード】

EX_ADR      : アドレス(ev,itemno)のアクセスは許されていない。
EX_PNID     : パネル(pnid)は存在していない。
pget_itm
 
パネル項目の取出し

【形式】

W   pget_itm(W pnid, W itemno, PNL_ITEM *item)

【パラメータ】

W   pnid    パネルID
W   itemno  項目番号
PNL_ITEM *item  パネル項目データ

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

pnid で指定したパネル内の itemno で指定した項目の定義データを取り出し、 item で指定した領域に格納する。 格納される内容は定義した内容と同一であるが、内部ディスクリプタ ( item->desc ) には、以下の値が格納され、 関数値として、この内部ディスクリプタの値が戻る。

    コントロールパーツの場合:      -- 登録されたパーツID
    コントロールパーツ以外の場合:  -- 0

item = NULL の場合は項目の定義データの取り出しは行なわれないが、 関数値として上記の内部ディスクリプタの値が戻る。

【エラーコード】

EX_ADR      : アドレス(item)のアクセスは許されていない。
EX_PAR      : パラメータが不正である(itemnoが不正)。
EX_PNID     : パネル(pnid)は存在していない。
pset_itm
 
パネル項目の設定

【形式】

W   pset_itm(W pnid, W itemno, PNL_ITEM *item)

【パラメータ】

W   pnid        パネルID
W   itemno      項目番号
PNL_ITEM *item  パネル項目データ

【リターン値】

≧0    正常(関数値は項目の内部ディスクリプタ)
<0    エラー(エラーコード)

【解説】

pnid で指定したパネル内の itemno で指定した項目の定義データを item で指定した領域の内容に変更し、 パネルの再表示を行なう。

item = NULL の場合は再設定を行なわず、 指定した項目の再表示のみを行なう。 特に pset_itm(pnid, -1,NULL)の場合は、 すべての項目の再表示を行う。

関数値として、項目定義データ設定後の以下の内部ディスクリプタの値が戻る。

    コントロールパーツの場合:      -- 登録されたパーツID
    コントロールパーツ以外の場合:  -- 0
psel_box
 
パネルの入力ボックスの選択

【形式】

W   psel_box(W pnid, W itemno)

【パラメータ】

W   pnid    パネルID
W   itemno  項目番号

【リターン値】

≧0    正常(関数値は入力状態のボックスの項目番号(該当なしの場合は0))
<0    エラー(エラーコード)

【解説】

pnid で指定したパネル内で、 itemno で指定した項目番号を持つボックスパーツを「入力状態」のボックスとして選択し、 そのボックスパーツの項目番号を関数値として戻す。 「入力状態」として選択したボックスパーツが、 pact_pnl() を実行した場合にキー入力を受け付けることになる。

itemno = 0 の場合は、ボックスパーツの入力状態の変更は行なわれず、 単に現在入力状態であるボックスパーツの項目番号を関数値として戻す。 該当するものが無い場合は、関数値として 0 が戻る。

itemno で指定した項目が操作許可状態のボックスパーツでない場合は、 EX_PAR のエラーとなる。

【エラーコード】

EX_PAR      : パラメータが不正である(itemno が不正,操作許可のボックスパーツでない)。
EX_PNID     : パネル(pnid)は存在していない。
pget_gid
 
描画環境IDの取出し

【形式】

GID pget_gid(W pnid)

【パラメータ】

W   pnid    パネルID

【リターン値】

≧0    正常(関数値はパネルの描画環境ID)
<0    エラー(エラーコード)

【解説】

pnid で指定したパネルで使用している描画環境IDを取り出し、 関数値として戻す。

アプリケーションがこの描画環境IDを用いてパネル上に直接描画する場合は、 基本的に必要なパラメータを再設定し、描画後は元の設定に戻しておく必要がある。 パラメータを変更したままの状態でパネルの表示/操作等を行なった場合の動作は保証されないので注意が必要である。

【エラーコード】

EX_PNID     : パネル(pnid)は存在していない。
pact_err
 
標準エラー警告パネル処理

【形式】

W   pact_err(W kind, TC *arg1, TC *arg2, TC *arg3)

【パラメータ】

W   kind    PANEL_DATA タイプのデータ番号
TC  *arg1   文字列1
TC  *arg2   文字列2
TC  *arg3   文字列3

【リターン値】

≧0    正常(関数値はスイッチの種別(デフォールトスイッチは0))
<0    エラー(エラーコード)

【解説】

kind で指定した "PANEL_DATA" タイプのデータ番号をもつ標準エラー警告パネルを表示する。 kind < 0 の場合は、- kind をデータ番号とする。

標準エラー警告パネルは、データ番号が 1000 以上のため、 kind ≧ 1000 または kind ≦ -1000でなくてはいけない。

パネルの定義データの先頭の 3 つまでの項目が文字列項目の場合は、 順番に、arg1 〜arg3 で指定した文字列項目に置き替えられる。

    例: 項目1 文字列項目       -- arg1 に置き替えられる。
        項目2 文字列項目       -- arg2 に置き替えられる。
        項目3 文字列項目でない -- arg3 は無視される。

    例: 項目1 文字列項目       -- arg1 に置き替えられる。
        項目2 文字列項目でない -- arg2, arg3 は無視される。

デフォールトスイッチ項目は必ず存在し、 デフォールトスイッチから連続した n 個のモーメンタリスイッチ項目 (ピクトグラムモーメンタリも含む)のいずれかのプレスで処理を終了し、 (プレスされたモーメンタリスイッチ項目番号) - (デフォールトスイッチ項目番号) の値 ( 0 〜 n - 1 ) を関数値として戻す。

例: デフォールトスイッチ項目番号を 4 とし、項目 7 までが、モーメンタリスイッチの場合、 4 〜 7 のスイッチのプレスで処理を終了し、 関数値として 0 〜 3 を戻す。

kind で指定した番号の "PANEL_DATA" タイプのデータが登録されていない場合、 およびデフォールトスイッチ項目が規定されていない場合は、 EX_PAR のエラーとなる。

また、デフォールトスイッチ項目番号より小さい項目番号の PARTS_ITEM 項目が存在する場合は、 EX_PAR のエラーとなる。

【エラーコード】

EX_ADR      : アドレス(arg1〜3)のアクセスは許されていない。
EX_PAR      : パラメータが不正である(-1000 < kind < 1000、パネルデータが登録され
              ていない、デフォールトスイッチが未定義、デフォールトスイッチ項目
              番号より小さい番号のパーツ項目が存在する)。
EX_SAVE     : イメージのセーブ領域が不足した
              (kind > 0 でネスティングしたパネルの場合)。
pdsp_msg
 
システムメッセージパネルの表示

【形式】

W   pdsp_msg(TC *msg)

【パラメータ】

TC  *msg    文字列

【リターン値】

≧0    正常(関数値は表示文字数)
<0    エラー(エラーコード)

【解説】

システムメッセージパネルに現在表示されているメッセージを消去し、 msg で指定したメッセージを新たに表示する。 msg = NULL の場合は、単に現在の表示の消去を行なう。

メッセージは、システムのデフォールトフォント、 通常体、デフォールトカラーで表示され、 領域をはみでた部分はクリップされる。

関数値としてはクリップされずに実際に表示された文字数が戻る。

【エラーコード】

EX_ADR      : アドレス(msg)のアクセスは許されていない。
pdsp_tim
 
システムメッセージパネルの時刻表示

【形式】

ERR pdsp_tim(UW stat)

【パラメータ】

UW  stat    メタキー状態

【リターン値】

≧ 0     正常
< 0     エラー(エラーコード)

【解説】

statで指定したメタキー状態に対応した言語モード、 入力補助モード、および現在時刻をシステムメッセージパネルに表示する。 実際には、現在表示している言語モード、入力補助モード、 現在時刻と異なっている場合のみ表示の更新を行なう。

この関数は、メターキー状態が変更された場合、 および適当な周期でウィンドウマネージャにより実行されるため、 通常のアプリケーションでは実行する必要はない。

【エラーコード】

pact_msg
 
システムメッセージパネルのイベント処理

【形式】

ERR pact_msg(WEVENT* ev)

【パラメータ】

WEVENT  *ev ウィンドウイベント

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

システムメッセージパネルに対して発生したイベント ev に応じて、 システムメッセージパネルの表示の更新を行なう。 NULLイベントや再表示イベントを受け付ける。 関数値として、処理したイベントのタイプが返る。

このシステムコールは、ウィンドウマネージャによって自動的に実行されるため、 通常のアプリケーションでは実行する必要はない。

【エラーコード】

  EX_ADR      : アドレス(ev)のアクセスは許されていない。

この章の目次にもどる
前頁:3.3 パーツマネージャにもどる
次頁:3.5 トレーマネージャにすすむ