パーツマネージャは、 外殻の HMI 機能の 1 つとして位置付けられ、 各種の標準コントロールパーツの表示 / 操作 / 登録 / 削除等の機能を提供している。 アプリケーションプログラムは、 このパーツマネージャを通して容易に標準コントロールパーツを使用することができる。
パーツマネージャは、 各パーツの表示 / 操作を行なう基本的な関数群を提供しているが、 パーツとしての総合的な動作を実現するためには、 アプリケーションプログラムがコントロールパーツのルールに従ってパーツマネージャの関数群を使用する必要がある。
本仕様書では、 パーツの標準的な形状に関して説明しているが、 表示形状の詳細はインプリメントに依存する。
テキストボックス | (TB) |
シークレットテキストボックス | (XB) |
数値ボックス | (NB) |
シリアルボックス | (SB) |
テキストオルタネートスイッチ | (AS) |
テキストモーメンタリスイッチ | (MS) |
ピクトグラムオルタネートスイッチ | (PA) |
ピクトグラムモーメンタリスイッチ | (PM) |
スイッチセレクタ | (WS) |
スクロールセレクタ | (SS) |
ボリューム | (VL) |
アプリケーションプロセスは、使用するパーツを登録し、 登録時に得られるパーツIDを使用して実際の表示 / 操作等を行なう。
登録の方法としては大きく 2 種類あり、 メモリ上に存在するパーツデータ構造を直接指定して登録する場合と、 データマネージャにより管理されているパーツデータ構造を示すデータ番号を指定して登録する場合がある。 パーツは必ず 1 つの独立したウィンドウまたはパネルに属する形で登録され使用される。 即ち、パーツの登録の際にそのパーツを使用するウィンドウID / パネルIDを指定することになる。
パーツは基本的に登録したウィンドウ / パネルに属しており、 登録したウィンドウ / パネルが削除されると、 パーツも自動的に削除される。 さらに、登録したプロセスが終了した場合にもパーツの登録は自動的に削除される。
パーツは基本的にそれを登録したプロセスに属しており、 登録したプロセスが終了すると自動的に登録も削除される。 同様に登録したウィンドウ / パネルにも属しており、 登録したウィンドウ / パネルが削除されると、 パーツも削除される。
パーツは基本的にそのパーツを登録したプロセスにより使用されるが、 他のプロセスからでも同一のパーツIDによりそのパーツを使用することが可能である。 従って、パーツID自体はプロセスグローバルであり、 またパーツの登録データもすべてのプロセスからアクセスできる。 ただし、パーツによっては登録データとして文字列等への参照ポインタを持つ場合があり、 そのポインタがプロセスローカルメモリ領域を示している場合は、 そのパーツは他のプロセスでは、 使用できないことになる。 ただし、他プロセスからの描画時等においては、 プロセス間通信や、セマフォ等により、 排他的制御を行なう必要がある。
パーツはそれぞれのタイプにより異なる定義構造を持ち、 また構成要素により可変サイズであるが、 これらをすべてまとめた以下の構造により取り扱われる。
typedef UNION { TEXTBOX tb; -- (シークレット)テキストボックス NUMBOX nb; -- 数値ボックス SERBOX sb; -- シリアルボックス SWSEL ss; -- テキストオルターネート / モーメンタリスイッチ、 スイッチ/スクロールセレクタ PICTSW pw; -- ピクトグラムオルターネート / モーメンタリスイッチ VOLUME vl; -- ボリューム } PARTS;
各タイプに対応した定義構造は、基本的に以下の構造を持っている。
struct { UW type; -- パーツのタイプ / 属性 / 状態 RECT r; -- パーツ表示矩形領域 ..... -- 個々のパーツにより異なる }
type
は以下の形式でパーツのタイプ / 属性 / 状態を示している。
タイプとしては以下の値が使用される。
TB_PARTS | 1 | -- テキストボックス |
XB_PARTS | 2 | -- シークレットテキストボックス |
NB_PARTS | 3 | -- 数値ボックス |
SB_PARTS | 4 | -- シリアルボックス |
AS_PARTS | 5 | -- テキストオルタネートスイッチ |
MS_PARTS | 6 | -- テキストモーメンタリスイッチ |
PA_PARTS | 7 | -- ピクトグラムオルタネートスイッチ |
PM_PARTS | 8 | -- ピクトグラムモーメンタリスイッチ |
WS_PARTS | 9 | -- スイッチセレクタ |
SS_PARTS | 10 | -- スクロールセレクタ |
VL_PARTS | 11 | -- ボリューム |
属性はパーツの動作の属性を示すもので登録後の変更はできない。 状態はパーツの表示 / 操作に関する状態を示すもので、登録後も変更可能である。
r
はパーツの表示矩形領域であり、
パーツ全体を囲む最小の矩形であり、
属するウィンドウ / パネルの相対座標で指定される。
登録後も移動 / 変形が可能である。
パーツの登録時には、
以下に示す表示属性を指定することが可能である。
この表示属性は登録後は変更することはできない。
表示属性を指定せずに登録したパーツに対しては、
デフォルトの表示属性が適用される。
また、表示属性のビットは定義時のみ有効であり、
cget_sts()
では、
常に 0 となって得られる。
typedef struct { W frpat; /* 枠のパターン(0:デフォルト) */ W bgpat; /* 背景パターン(0:デフォルト) */ COLOR chcol; /* 文字色 (<0:デフォルト) */ W misc; /* 各種のパターン/色 */ } PARTDISP;
frpat
, bgpat
はそれぞれ、
枠と背景のパターンを示し、"PAT_DATA"
タイプとしてデータボックスに登録されているデータのデータ番号で指定される。
0 はデフォルトを意味する。
また、データ番号で指定されたデータがデータボックスにない場合は、
デフォルトパターンを用いて描画する。
chcol
は、文字の色を表わす。
これは、パーツの種類によっては使用されない
(ただし、後述するメタコードによる色指定の方が優先される)。
misc
は、パーツの種類によって異なる意味に使用されるデータで、
COLORVAL
として使用される場合と、
2 個のデータ番号として使用される場合がある。
パーツの定義において、通常、 文字列はその属性指定のために先頭文字として特殊な意味を持つ属性コード(メタコード)が置かれる場合がある。 この属性コードは文字列等の区切りの意味も持つ。
MC_FIG = 0
の時のみ有効)MC_FIG = 0
の時のみ有効)
文字データの時、MC_ATTR = 1
の場合は直後に 6 ワードの文字属性指定コード列が存在し、
その後に項目としての文字列がくる。
MC_ATTR = 0
の場合は文字属性指定コードは存在せず、
直後にデータとしての文字列がくる。
文字列は属性コードまたは TNULLコード ( = 0 )
で終了し、
後者の場合は全体の終了を意味する。
文字列としては表示可能な任意の文字が許され、それ以外のものは無視される。
文字属性指定コードは以下に示すものであり、 ワードの値が 0 となる場合もあることに注意が必要である。
COLOR chcol -- 文字色指定 (-1は文字色指定無し) W class -- フォントクラス指定 (-1はデフォルトフォント) UW attr -- フォント属性指定 (0は通常体) PNT csize -- フォントサイズ指定 (csize.c.h または csize.c.v が0以下はデフォルトサイズ)
MC_ATTR = 0
は、 文字色指定無し、デフォルトフォント、
通常体を意味する。文字色指定無しの場合は、
パーツの表示属性として定義された文字色が適用される。
図形データの場合は、図形の矩形表示となり、
MC_ATTR
は無視される。
この場合、直後に以下の2ワードの図形指定コードがくる。
TTTT DDDD DDDD DDDD 0000 0000 LLLL LLLL T:図形のデータタイプID 0: ポインタイメージ ("PTR_DATA") 1: ピクトグラムイメージ ("PICT_DATA") 2: パターンデータ ("PAT_DATA") 3: ビットマップデータ ("BMAP_DATA") 4〜: 予約 D:図形のデータ番号 (0の場合、または存在しないデータの場合は何も表示されない) L:図形の横幅文字数 図形項目は、Lで指定した文字分の矩形領域に左上詰めで表示される。
登録されたパーツは、以下の状態を保持している。
登録時に指定した定義データそのものであり、登録後は変更できない。
登録時に指定した定義データを初期状態とするが、登録後も変更可能である。
表示/消去状態 | :P_DISP | =1 | : パーツは表示状態 |
0 | : パーツは消去状態 | ||
点滅状態 | :P_BLINK | =1 | : パーツは点滅状態である |
0 | : パーツは点滅状態でない | ||
(P_DISP=0の場合は常に0となる) | |||
不能 / 可能状態 | :P_INACT | =1 | : パーツは不能状態 |
0 | : パーツは可能状態 | ||
禁止 / 許可状態 | :P_DISABLE | =1 | : パーツは操作禁止(表示のみ) |
0 | : パーツの操作許可 | ||
枠の有無状態 | :P_NOFRAME | =1 | : パーツの矩形枠なし |
0 | : パーツの矩形枠あり | ||
枠の強調状態 | :P_EMPHAS | =1 | : 強調枠(3ドット程度) |
0 | : : 通常枠(1ドット程度) |
不能 / 可能状態は、パーツが登録されているウィンドウ /
パネルの状態変化により自動的に変更されるもので、
ウィンドウ / パネルが入力受付状態に移行した場合に、
P_INACT = 0
に設定され、入力不可状態に移行した場合に、
P_INACT = 1
に設定される。
この設定はウィンドウマネージャ / パネルマネージャによりそのウィンドウ /
パネルに登録されているすべてのパーツに対して一括して行なわれる
(但し、P_SBAR = 1
のボリュームは対象外となる)。
パーツの登録時に指定されたそのパーツの属するウィンドウ / パネルID。
パーツの描画環境は属するウィンドウ / パネルの描画環境に等しく、
座標系、クリッピング領域、
背景等の各種パターン等は属するウィンドウ / パネルの描画環境が適用される。
このIDは、指定したウィンドウ / パネルに属するすべてのパーツに対するグループ処理にも使用される。
ただし、P_SBAR = 1
のボリュームは特別に扱われ、
登録したウィンドウ / パネルの作業領域(フレーム長方形のクリップ領域)をはみ出して描かれることになる。
また、後述する cidl_par()
を除いては、
ウィンドウ / パネルに対するグループ処理の対象外とされる。
パーツが現在表示されている矩形領域であり登録時に指定するが、 登録後の変更 (移動、大きさ変更) も可能である。 属するウィンドウ / パネルの相対座標により示される。
各種ボックスパーツ群では、 キー入力の受け付けが可能か否かの状態が定義される。 ボックス以外のパーツではこの状態は定義されない。 「入力状態」では、ボックス内の選択領域 ( 部分文字列 ) が「ちらつき枠」で囲まれて表示され、 ヌル選択の場合は選択ギャップが点滅して表示される。 さらにカレットも表示され、 キー入力が受け付け可能であることを示す。 「非入力状態」では、「ちらつき枠」やカレットは表示されず、 キー入力が受け付け不可能であることを示す。 「入力状態」のパーツはシステムに 0 または 1 つであり、 あるボックスが「入力状態」になった場合、 いままで「入力状態」であったボックスは自動的に「非入力状態」となる。
各パーツは、パーツとしての現在値を保持しており、 その初期値は登録時に指定した値となり、 パーツの操作により変更される。値の内容 / 意味はパーツのタイプに依存する。
各種ボックスパーツ群では、
選択領域の情報を保持している。
ボックス以外のパーツでは適用されない。
登録時にはテキストボックスではデフォルト選択 ( P_APPEND
)
に従って選択領域が設定され、
シークレットテキストボックスでは常に全体が選択領域となり、
シリアルボックスでは先頭フィールドが選択領域となる。
各パーツは、 現在値の他に登録時に指定した表示用の文字列等の各種のパラメータを保持している。 このパラメータは登録後も変更可能であり、 パラメータの内容 / 意味はパーツのタイプに依存する。
テキストボックスは1行の文字列を表示し、 文字列の入力 / 編集を行なうパーツである。 編集はボックス内部で、 通常のリプレースエディタとして行なうことができ、 部分文字列の選択、ドラッグ & リリース による移動 / 複写、 トレイ経由のカット &貼り込み操作も可能である。 日本語の入力に関しては仮名漢字変換が行なわれる。
矩形枠の中に左詰めで文字列が表示され、 「入力状態」、かつ「可能状態」の場合、 内部にカレットと選択領域 (「ちらつき枠」) または点滅する文字カーソルが存在する。 矩形枠より長い文字列の場合はキー入力や、 選択動作により自動的に水平スクロールが行なわれる。
「禁止状態」の場合は矩形枠ではなく下線が引かれる。 また「入力状態」には成り得ない。
P_DISP | : 0 (消去状態) | : パーツは表示されていない |
: 1 (表示状態) | : パーツは表示されている | |
P_BLINK | : 適用されない | |
P_INACT | : 0 (可能状態) | : 入力状態の時、選択領域、カレットの表示有り |
: 1 (不能状態) | : 選択領域、カレットの表示無し | |
P_DISABLE | : 0 (許可状態) | :矩形枠の表示 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (禁止状態) | :下線の表示 ( P_NOFRAME = 0 の時のみ有効) | |
P_NOFRAME | : 0 (枠有り) | : 矩形枠/下線の表示有り |
: 1 (枠無し) | : 矩形枠/下線の表示無し | |
P_EMPHAS | : 0 (通常状態) | : 通常枠/下線 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | : 強調枠/下線 ( P_NOFRAME = 0 の時のみ有効) | |
P_APPEND | : 0 (置換) | : デフォルト選択時、文字列全体が選択される |
: 1 (追加) | : デフォルト選択時、文字列の最後がヌル選択される | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
キー入力により、リプレースエディタとしての動作を行ない、 入力文字がボックス内に表示される。 ボックスの幅を超えた場合は、表示は自動的に左スクロールして、入力は可能となる。
指定した最大文字数を超えた場合は、 入力は捨てられ、ビープが鳴る。 最大文字数はボックスの幅とは無関係である。
ボックス内のプレスにより、 リリース位置までを選択状態とすることができる。 プレスしたまま、 ボックスの両端を超えた場合は、 その方向にある見えない部分が見えるように、 全体が横スクロールする。ドラッグしている間は、 そこでリリースした場合に選択される部分文字列の枠の影がドラッグに追従する。
ボックス内の任意の位置での、 ダブルクリックにより、 文字列全体を選択状態とすることができる。
選択領域上にポインタを持ってくるとポインタは、 「移動手」となり、プレスすることにより、「握り」となり、 選択された部分文字列を、ドラッグして移動 / 複写できる。 リリース場所が、ボックス内部の場合は、移動 / 複写処理が行なわれ、 入力処理は続行するが、リリース場所が、ボックス外の場合は、入力処理は終了する。 リリースした時点で、ポインタは元の形状に戻る。
[タブ], [入力終], [改段落 / 改行] キー、 ボックス外での PD のプレス、ドラッグ後のボックス外での PD のリリース、 およびメニュー指定により入力処理は終了する。 但し、[入力終] キーは、 仮名漢字変換の未確定文字列が存在する場合は、 その確定を行なうため、 未確定文字列が存在していない場合にのみ入力処理の終了となる。 [タブ][改段落 / 改行] キーは未確定文字列の確定とともに入力処理を終了する。
一般にパネル上で使用される場合は、以下のようにする。
[タブ] | -- 次のボックスに移動 |
[入力終] | -- 入力の終了(評価)、ボックスの再選択 |
[改段落 / 改行] | -- パネルを抜ける |
[タブ], [入力終], [改段落 / 改行]
キーにより終了した場合は、非入力状態となり、
選択領域とカレットの表示は消え、
選択領域はデフォルト選択 ( P_APPEND
) に従って変更される。
その他の場合で終了した場合は、入力状態のままとなり、
選択領域とカレットの表示は終了時の状態のままとなる。
[命令] + [タブ], [入力終], [改段落 / 改行] キーにより、 それぞれを文字として文字列中に入力することができる。
入力処理終了時には仮名漢字変換の未確定文字列は強制的に確定状態とされる。
typedef struct { UW type; -- タイプ(TB_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W txsize; -- 最大文字数 TC* text; -- 初期表示データ文字列へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } TEXTBOX;
text
は初期の表示文字列へのポインタであり、
編集結果が格納される領域ではない。text = NULL
の場合は、
何も表示されない。
また、先頭の属性コードは、MC_STR, MC_ATTR
のみ有効で、
省略しても構わない。従って、text
の先頭が MC_ATTR
で始まらない場合は標準フォントとして扱われる。
また、
文字属性の指定は登録時のみ有効で登録後の変更は一切受け付けない。
txsize
は、
入力可能な最大の文字数である ( TNULL
を含む)。
内部で使用されるバッファのサイズを意味する。
指定できる最大値はインプリメント依存(80文字以上)とする。
パーツとして登録した後は、text
のメモリ内容は参照されないため、変更してもそれは反映されない。
登録したパーツは常にグローバルに使用可能である。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : ( COLORVAL ) カレット、および「ちらつき枠」の色 |
シークレットテキストボックスは、 基本的にテキストボックスと同様の機能を持つが、 隠し名や合言葉等の入力に使用される、 外から「読みにくい」ようにした特殊なテキストボックスである。 シークレットテキストボックスでは、 文字列の表示は荒い斜線パターンで OR され、 読みにくくなっており、 また編集は、「一字消」のみであり、 部分文字列の選択、ドラッグ & リリース による移動 / 複写、 トレイ経由のカット & 貼り込み操作等はできない。 日本語の入力に関しては仮名入力のみである。
初期文字列が存在する場合は、 矩形枠の中全体が荒い斜線パターンで埋められ実際に文字列は表示されない。 初期文字列が存在しない場合は、矩形枠の中は空白となる。
「入力状態」で、かつ「可能状態」の場合、 初期文字列が存在する場合は、 斜線パターンが「ちらつき枠」で囲まれ、 その直後にカレットが表示される。 初期文字列がない場合は、先頭に点滅する文字カーソルが表示される。
「禁止状態」の場合は矩形枠ではなく下線が引かれる。 また「入力状態」には成り得ない。
P_DISP | : 0 (消去状態) | : パーツは表示されていない |
: 1 (表示状態) | : パーツは表示されている | |
P_BLINK | : 適用されない | |
P_INACT | : 0 (可能状態) | : 入力状態の時、選択領域、カレットの表示有り |
: 1 (不能状態) | : 選択領域、カレットの表示無し | |
P_DISABLE | : 0 (許可状態) | :矩形枠の表示 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (禁止状態) | :下線の表示 ( P_NOFRAME = 0 の時のみ有効) | |
P_NOFRAME | : 0 (枠有り) | : 矩形枠/下線の表示有り |
: 1 (枠無し) | : 矩形枠/下線の表示無し | |
P_EMPHAS | : 0 (通常状態) | : 通常枠/下線 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | : 強調枠/下線 ( P_NOFRAME = 0 の時のみ有効) | |
P_APPEND | : 0 (置換) | : デフォルト選択時、文字列全体が選択される |
: 1 (追加) | : デフォルト選択時、文字列の最後がヌル選択される | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
キー入力により、 リプレースエディタとしての動作を行ない、 斜線パターンで OR された入力文字がボックス内に表示される。 ボックスの幅を超えた場合は、表示は自動的に左スクロールして、入力は可能となる。
指定した最大文字数を超えた場合は、 入力は捨てられ、ビープが鳴る。最大文字数はボックスの幅とは無関係である。
ボックス内のシングルクリックにより、 文字列全体を選択状態とすることができる。
[タブ], [入力終], [改段落 / 改行] キー ボックス外での PD のプレス、およびメニュー指定により入力処理は終了する。 入力処理が終了した場合、最終結果として文字列が存在する場合は、 文字の表示が消え、ボックスの内部全体が斜線で覆われる。 文字列が空となった場合は空白となる。
一般にパネル上で使用される場合は、以下のようにする。
[タブ] | -- 次のボックスに移動 |
[入力終] | -- 入力の終了(評価)、ボックスの再選択 |
[改段落 / 改行] | -- パネルを抜ける |
[タブ], [入力終], [改段落 / 改行] キー 終了した場合は、非入力状態となり、選択領域とカレットの表示は消えるが、 その他の場合で終了した場合は、入力状態のままとなり、 選択領域とカレットの表示は終了時の状態のままとなる。
typedef struct { UW type; -- タイプ(XB_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W txsize; -- 最大文字数 TC* text; -- 初期表示データ文字列へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } TEXTBOX;
text
は初期の表示文字列へのポインタであり、
編集結果が格納される領域ではない。text = NULL
の場合は何も表示されない。
また、先頭の属性コードは、MC_STR
, MC_ATTR
のみ有効で省略しても構わない。
従って、text
の先頭が MC_ATTR
で始まらない場合は標準フォントとして扱われる。
また、文字属性の指定は登録時のみ有効で、登録後の変更は一切受け付けない。
txsize
は、入力可能な最大の文字数である ( TNULL
を含む)。
内部で使用されるバッファのサイズを意味する。
指定できる最大値はインプリメント依存 ( 80 文字以上 ) とする。
登録したパーツは常にグローバルに使用可能である。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色、斜線のパターンの色 |
misc | : ( COLORVAL ) カレット、および「ちらつき枠」の色 |
数値ボックスは、1 つの数値を指定した形式で表示し、 数値の入力 / 編集を行なうパーツである。 編集はボックス内部で、 通常のリプレースエディタとして行なうことができ、 部分数値列の選択、ドラッグ & リリース による移動 / 複写、 トレイ経由のカット& 貼り込み操作も可能である。 但し、入力は数値に制限され、仮名漢字変換は行なわれない。
矩形枠の中に数値が右詰めで表示され、 「入力状態」、かつ「可能状態」の場合、 内部にカレットと選択領域 (「ちらつき枠」) または点滅する文字カーソルが存在する。 矩形枠より長い文字列の場合はキー入力や、 選択動作により自動的に水平スクロールが行なわれる。
「禁止状態」の場合は矩形枠ではなく下線が引かれる。 また「入力状態」には成り得ない。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | : 適用されない | |
P_INACT | : 0 (可能状態) | :入力状態の時、選択領域、カレットの表示あり |
: 1 (不能状態) | :選択領域、カレットの表示なし | |
P_DISABLE | : 0 (許可状態) | :矩形枠の表示 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (禁止状態) | :下線の表示 ( P_NOFRAME = 0 の時のみ有効) | |
P_NOFRAME | : 0 (枠有り) | :矩形枠 / 下線の表示あり |
: 1 (枠無し) | :矩形枠 / 下線の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 / 下線 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 / 下線 ( P_NOFRAME = 0 の時のみ有効) | |
P_APPEND | : 0 (置換) | :デフォルト選択時、文字列全体が選択される |
: 1 (追加) | :デフォルト選択時、文字列の最後がヌル選択される | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
数値キー入力により、 リプレースエディタとしての動作を行ない、 入力数値がボックス内に表示される。 ボックスの幅を超えた場合は、 表示は自動的に左スクロールして、 入力は可能となる。キー入力は、符号、数値、小数点(実数の場合)のみ可能で、 かつその結果としての文字列が指定したタイプの数値としての正しい形式をとる場合のみ可能で、 そうでないものはビープが鳴り、入力されない。
ボックス内のプレスにより、リリース位置までを選択状態とすることができる。 プレスしたまま、ボックスの両端を超えた場合は、 その方向にある見えない部分が見えるように、 全体が横スクロールする。ドラッグしている間は、 そこでリリースした場合に選択される部分数値列の枠の影がドラッグに追従する (ただし、ドラッグ中の横スクロールは禁止される)。
ボックス内の任意の位置での、ダブルクリックにより、 数値列全体を選択状態とすることができる。
選択領域上にポインタを持ってくるとポインタは、 「移動手」となり、プレスすることにより、 「握り」となり、選択された部分数値列を、 ドラッグして移動 / 複写できる。 リリース場所が、ボックス内部の場合は、移動 / 複写処理が行なわれ、 入力処理は続行するが、リリース場所が、ボックス外の場合は、入力処理は終了する。 リリースした時点で、ポインタは元の形状に戻る。
[タブ], [入力終], [改段落 / 改行] キー、 ボックス外での PD のプレス、ドラッグ後のボックス外での PD のリリース、 およびメニュー指定により入力処理は終了する。
一般にパネル上で使用される場合は、以下のようにする。
[タブ] | -- 次のボックスに移動 |
[入力終] | -- 入力の終了(評価)、ボックスの再選択 |
[改段落 / 改行] | -- パネルを抜ける |
[タブ], [入力終], [改段落 / 改行]
キーにより終了した場合は、非入力状態となり、
選択領域とカレットの表示は消え、
選択領域はデフォルト選択 ( P_APPEND
) に従って変更される。
その他の場合で終了した場合は、入力状態のままとなり、
選択領域とカレットの表示は終了時の状態のままとなる。
typedef struct { UW type; -- タイプ(NB_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 UW fmt; -- 数値フォーマット指定 union { -- 現在値 W l; -- 整数の場合 DOUBLE d; -- 実数の場合 } cv; PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } NUMBOX;
fmt
は数値の形式を規定するもので、
以下の内容を持つ。数値表示がボックスに入りきらない場合は、
数値文字列の先頭(左側)のみが表示される。
fmt = SSSS SSSS TPxF DDDD
数値の表示は、以下のように行なわれる。
T = 0
( 整数 ) の場合 :
T = 1
( 実数 ) の場合 :
cv
は現在値であり、
L_UNDEF
( 負の最大値 ) または D_UNDEF
( NaN
, または±∞) の場合は表示は空白となる。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : ( COLORVAL ) カレット、および「ちらつき枠」の色 |
シリアルボックスは、 複数のフィールドから構成される特定の形式を持ったパラメータを表示し変更を可能とするものである。 各フィールドに入る内容は、ある連続範囲内の整数値、 もしくは順序付けされた文字列の集合であり、 各フィールド間は任意の固定文字列により分離される。
整数値フィールドの値の変更は 1 づつの値の増加 / 減少、 またはキーによるの直接入力により行なわれ、 文字列フィールドの変更は、 順序付けされた文字列の正方向 / 逆方向への切換えにより行なわれる。
なお、フィールドの一部分の選択、ドラッグ & リリース による移動 / 複写、 トレイ経由のカット & 貼り込み操作等の編集機能は持たない。
矩形枠の内部には適当な固定文字列により分割された複数のフィールドの連鎖が存在する ( 一つでもよい )。
「入力状態」かつ「可能状態」では、 選択されたフィールド全体が反転表示され、 内容を変更できることをあらわす。 さらに、全体を囲む矩形の後端に "▲" と "▼" の記号が縦に並んだ矩形 ( 操作ボックス ) が現れる。 ただし、記号の表示方法はインプリメントに依存し、 選択されたフィールドの直下に "▼" と "▲" の記号が並んで現れるというようなバリエーションも考えられる。 ただし横表示の場合、"▼" ( 減少方向 ) は左、"▲" ( 増加方向 ) は右に規定される。
「禁止状態」の場合は矩形枠ではなく下線が引かれる。 また「入力状態」には成り得ない。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | : 適用されない | |
P_INACT | : 0 (可能状態) | :入力状態の時、選択領域表示あり |
: 1 (不能状態) | :選択領域の表示なし | |
P_DISABLE | : 0 (許可状態) | :矩形枠の表示 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (禁止状態) | :下線の表示 ( P_NOFRAME = 0 の時のみ有効) | |
P_NOFRAME | : 0 (枠有り) | :矩形枠 / 下線の表示あり |
: 1 (枠無し) | :矩形枠 / 下線の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 / 下線 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 / 下線 ( P_NOFRAME = 0 の時のみ有効) | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
ボックス内のプレスにより、 その位置に最も近いフィールドが選択され、 反転表示となる。選択は1つのフィールド全体であり、 フィールド内の部分選択はできない。 選択状態では、後端に操作ボックスが表示される。 なお操作ボックス下のイメージは保存される。
PDで後端の操作ボックスをプレスすると "▲" または "▼" の記号を囲む矩形内 ( 即ち操作ボックスの上または下半分 ) が反転表示し、 選択されたフィールドの現在の値が正方向または逆方向に 1 づつ変化する。 プレスし続ける事により適当な間隔で連続的に変化していき、 リリースした時点の値が新たな値となる。
プレス中に操作ボックスを離れると、 操作ボックスの反転表示は解除され、値の変化も停止する。 そのままリリースするとその時点の値が新しい値となる。 操作ボックスに戻ると値の変化は継続する。 プレスしたまま操作ボックス内の逆の記号側に移動すると、 反転表示は切り換わり変化の方向も逆転する。
最大値の次の正方向は最小値、 最小値の次の逆方向は最大値と見なす。 また、フィールドが空白(未定義)の場合、 現在値は最大値と最小値の中間と考え、 最初の正方向の値は最小値、逆方向の値は最大値となる。
[変換]と[逆変換]キーは、 後端の操作ボックスを PD プレスすることと同様の機能を持ち、 押し続けることで連続的に値が変化する。 [変換] が "▲" に対応し、 [逆変換] が "▼" に対応する。
整数値フィールドが選択されている場合は、 選択後の最初の数値キー入力により、 反転表示されている現在の内容がリプレースされ、 その後順次右詰めで入力が入っていく。 この場合、フィールドは常に反転表示されたままである。 数値キー入力はその結果として指定範囲内の数値になるもののみ可能で、 そうでないものはビープが鳴り、入力を受け付けない。 入力中の文字の変更は [一字消] によるのみである。
選択されているフィールドが文字列の場合は、キー入力は無視される。
[タブ] キーにより次のフィールドが選択されるが、 最後のフィールドの場合は入力処理が終了する。
[入力終], [改段落 / 改行] キー、 ボックス外での PD のプレス、およびメニュー指定により入力処理は終了する。
一般にパネル上で使用される場合は、以下のようにする。
[タブ] | -- 次のボックスに移動 |
[入力終] | -- 入力の終了(評価)、ボックスの再選択 |
[改段落 / 改行] | -- パネルを抜ける |
[タブ], [入力終], [改段落 / 改行] キーにより終了した場合は、非入力状態となり、 選択領域の表示は消え、 選択フィールドは先頭フィールドに変更される。 その他の場合で終了した場合は、入力状態のままとなり、 選択領域の表示は終了時の状態のままとなる。
typedef struct { UW type; -- タイプ(SB_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 TC* fmt; -- 表示フォーマット指定 W nfld; -- データフィールド数 W *cv; -- 初期フィールド値配列へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } SERBOX;
fmt
は表示フォーマットを指定するワードデータ列であり、
先頭に属性コード、次に以下に示す要素を並べ、最後に終端コード ( 1 ワードの 0 ) を置いたものである。
ただし、先頭の属性コードは、MC_STR
, MC_ATTR
のみ有効で省略しても構わない。
従って、fmt
の先頭が MC_ATTR
で始まらない場合は、
標準フォントとして扱われる。
また、先頭の属性コードは整数フィールド、
固定文字列に有効で項目フィールドでは、項目リスト中の属性コードを優先する。
<整数フィールド指定> | -- 指定した範囲の整数値の選択表示(可変) |
<項目フィールド指定> | -- 指定した項目リストの選択表示(可変) |
<固定文字列> | -- 固定文字列表示 |
<固定文字列> は、固定的に表示される文字列であり、 偶数バイトでなくてはいけないため、 必要によっては、最後に1バイトの0をパッドしたものである。
<整数フィールド指定> は以下の 3 ワード固定のデータとなる。
0000 11ZA SSSS SSSS -- 数値フィールド指定 NNNN NNNN NNNN NNNN -- 最小値 NNNN NNNN NNNN NNNN -- 最大値
<項目フィールド指定> は以下の形式の可変長のデータとなる。
候補項目リストは候補となる表示項目を項目データの形式で並べたものであり終端コード
( 1 ワードの 0 ) で終了する。
なお、fmt
の最後に<項目フィールド指定>がある場合は、
終端コードが 2 つ連続することになる。
0000 1000 SSSS SSSS -- 項目フィールド指定 : : -- 候補項目リスト : : 0000 0000 0000 0000 -- 終端コード
[1000][e02][1][c]/[e02][1][15]/[e02][50][63] [e02][0][b]: [e02][0][3b] [801][1000]A[1000]P[0]M[0]
nfld
はフィールドの数で、
fmt
中含まれるフィールド指定の数と一致していなくてはいけない。
フィールドは最大 16 個までとする。
cv
は各フィールドの初期値配列へのポインタであり、
フィールドが文字列の場合は何番目かを示している ( 先頭は 0 )。
cv[i]
が L_UNDEF
( 負の最大値 ) の場合、
i + 1
番目のフィールドの表示は空白となる。
この値は、初期値としてのみ使用され、値の変更は反映されない。
fmt
で示されるメモリ内容は、
パーツとして登録した後も参照されるので領域は保持しておく必要がある。
従って、fmt
がローカルメモリ領域にある場合は、
登録したパーツはグローバルに使用できない。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : ( COLORVAL ) 操作ボックスの "▲" と "▼" の記号の色 |
frpat
、背景は、bgpat
を適用するものとする。
テキストオルタネートスイッチは、文字列で表記されたスイッチ名と、 ON / OFF 状態を示す矩形インジケータから構成されるスイッチであり、 ON / OFF 状態の表示 / 切り換えに使用する。
角を丸めた矩形枠の中にインジケータとスイッチ名が左詰めで表示される。 インジケータは "=" が OFF 状態、"≠" が ON 状態を表わす。 また、表示属性の指定がない場合、 ON 状態のインジケータをデフォルト色で強調するインプリメントも考えられる。
「禁止状態」または「不能状態」では、 スイッチ名、およびインジケータは灰色化表示される。
「点滅状態」では、インジケータ部分のみが点滅表示する。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | : 0 (通常状態) | :正常表示 |
: 1 (点滅状態) | :インジケータ部分が点滅表示 | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :灰色化表示 | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :灰色化表示 | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
矩形枠内でプレスすると、 インジケータをマージン 1 ドットで囲む矩形領域が反転表示される。 そのままリリースするとスイッチの状態は逆転し ( ON → OFF / OFF → ON )、 インジケータの反転表示は解除されて、 逆転した状態の表示となる。
プレスしたままドラッグしてスイッチの枠外へ出ると反転表示は解除され、 そのまま枠外でリリースした場合は何の変化も起らない。 最初にプレスした枠内に戻ると反転表示は復活し、 リリースすることによりスイッチの状態が逆転し、 インジケータの表示も逆転する。
typedef struct { UW type; -- タイプ(AS_PARTS)/属性/状態 RECT r; -- パーツの矩形領域 W cv; -- 現在値 (0:OFF/1:ON) TC* name; -- スイッチ名へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } SWSEL;
name
はスイッチ名文字列へのポインタであり、
先頭文字は属性コードとして特殊な意味を持つ(MC_EMPHAS
, MC_INACT
は無視される)。
name
で示されるメモリ内容は、
パーツとして登録した後も参照されるので領域は保持しておく必要がある。
従って、name
がローカルメモリ領域にある場合は、
登録したパーツはグローバルに使用できない。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : 下位ワード -- インジケータ描画用のデータ番号 (" PAT_DATA " タイプで矩形の大きさは、
図 87 : インジケータの反転表示固定)上位ワード -- 未使用 |
テキストモーメンタリスイッチは、 文字列で表記されたスイッチ名のみで構成されるスイッチであり、 ON / OFF状態を保持する機能はなく、 何らかの動作の起動、または押している間だけ何らかの動作をさせる場合に使用される。
このスイッチに対する操作としては、プレス、リリース、ダブルクリックがある。
角を丸めた矩形枠の中にスイッチ名が中央揃えで書かれている。 特に頻度の多いデフォルトと考えられるスイッチは太枠で強調表示される (但し矩形枠内にスイッチ名が入りきらない場合は左詰めに表示する)。
「禁止状態」または「不能状態」では、スイッチ名は灰色化表示される。
「点滅状態」では、スイッチ名のみが点滅表示する。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | : 0 (通常状態) | :正常表示 |
: 1 (点滅状態) | :スイッチ名部分が点滅表示 | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :灰色化表示 | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :灰色化表示 | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_DCLICK | : 0 | :ダブルクリックは検出しない |
: 1 | :ダブルクリックを検出する | |
P_PRESS | : 0 | :プレス中の動作を行なわない |
: 1 | :プレス中の動作を行なう | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
矩形枠内でプレスすると、 枠の内部が反転表示される。 ここでリリースすると反転表示は解除され、 スイッチを ON にしたことになる。
プレスしたままドラッグして枠外へ出ると反転表示が解除され、 そのまま枠外でリリースした場合は何も起らない。 最初にプレスした枠内に戻ると反転表示は復活し、 リリースすることによりスイッチを ON したことになる。
P_DCLICK = 1
の場合は、
ダブルクリック動作を検出し、
シングルクリックかダブルクリックかの情報をアプリケーションに戻す。
0 の場合は、ダブルクリック動作は検出されず、
最初のリリース状態が即時にアプリケーションに戻される。
P_PRESS = 1
の場合は、
矩形枠内でプレス中 ( 反転表示されている状態 ) の状態が検出され、
アプリケーションに戻される。
0 の場合は、アプリケーションには戻されない。
テキストオルタネートスイッチと同じ構造となる。
typedef struct { UW type; -- タイプ(MS_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W cv; -- 現在値 (未使用) TC* name; -- スイッチ名へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } SWSEL;
cv
は意味を持たない
( 現在値を取り出すと常に 0 となる ) 。
name
はスイッチ名文字列へのポインタであり、
先頭文字は属性コードとして特殊な意味を持つ
(MC_EMPHAS
, MC_INACT
は無視される)。
name
で示されるメモリ内容は、
パーツとして登録した後も参照されるので領域は保持しておく必要がある。
従って、name
がローカルメモリ領域にある場合は、
登録したパーツはグローバルに使用できない。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : 未使用 |
ピクトグラムオルタネートスイッチはテキストオルタネートスイッチと同様の機能を持つが、 スイッチ名 / インジケータの代わりに ON / OFF 状態を示す 2 つの任意の図形 ( ビットマップデータ ) が表示される。
角を丸めた矩形枠の中に ON / OFF 状態のそれぞれに対応した指定された図形が中央揃えで書かれる。 また、拡大 / 縮小は行なわず、 指定された図形が矩形より大きい場合はクリッピングされる。
「禁止状態」または「不能状態」では、 図形は灰色化表示される。
「点滅状態」では、図形のみが点滅表示する。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | : 0 (通常状態) | :正常表示 |
: 1 (点滅状態) | :図形部分が点滅表示 | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :灰色化表示 | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :灰色化表示 | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
矩形枠内でプレスすると、 図形パターンが反転表示される。 ここでリリースするとスイッチの状態は逆転し ( ON → OFF / OFF → ON )、 図形の反転表示は解除されて、 逆転した状態の図形の表示となる。
プレスしたままドラッグしてスイッチの枠外へ出ると反転表示は解除され、 そのまま枠外でリリースした場合は何の変化も起らない。 最初にプレスした枠内に戻ると反転表示は復活し、 リリースすることによりスイッチの状態が逆転し、 図形の表示も逆転する。
typedef struct { UW type; -- タイプ(PA_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W cv; -- 現在値 (0:OFF / 1:ON) W onpat; -- ON状態の「BMAP_DATA」タイプの番号 W offpat; -- OFF状態の「BMAP_DATA」タイプの番号 PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } PICTSW;
onpat
, offpat
はそれぞれ、
データマネージャが管理するビットマップデータのデータ番号で、
データタイプは 「BMAP_DATA
」 タイプに固定される。
offpat = 0
の場合は、 offpat
は onpat
の反転であると見なされる。
また onpat = 0
の場合は何も表示されない(空白となる)。
登録したパーツはグローバルに使用可能である。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 未使用 |
misc | : 未使用 |
ピクトグラムモーメンタリスイッチはテキストモーメンタリスイッチと同様の機能を持つが、 スイッチ名の代わりに任意の図形(ビットマップデータ)が表示される。
角を丸めた矩形枠の中に指定された図形が中央揃えで書かれる。 また、 ピクトグラムオルタネートスイッチ同様、 拡大 / 縮小は行なわない。
「禁止状態」または「不能状態」では、 図形は灰色化表示される。
「点滅状態」では、図形のみが点滅表示する。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | : 0 (通常状態) | :正常表示 |
: 1 (点滅状態) | :図形部分が点滅表示 | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :灰色化表示 | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :灰色化表示 | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_DCLICK | : 0 | :ダブルクリックは検出しない |
: 1 | :ダブルクリックを検出する | |
P_PRESS | : 0 | :プレス中の動作を行なわない |
: 1 | :プレス中の動作を行なう | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
矩形枠内でプレスすると、 図形は反転表示される。 ここでリリースすると反転表示は解除され、 スイッチを ON にしたことになる。
プレスしたままドラッグして枠外へ出ると反転表示が解除され、 そのまま枠外でリリースした場合は何も起らない。 最初にプレスした枠内に戻ると反転表示は復活し、 リリースすることによりスイッチを ON したことになる。
P_DCLICK = 1
の場合は、ダブルクリック動作を検出し、
シングルクリックかダブルクリックかの情報をアプリケーションに戻す。
0 の場合は、ダブルクリック動作は検出されず、
最初のリリース状態が即時にアプリケーションに戻される。
P_PRESS = 1
の場合は、
矩形枠内でプレス中 ( 反転表示されている状態 ) の状態が検出され、
アプリケーションに戻される。
0 の場合は、アプリケーションには戻されない。
ピクトグラムオルタネートスイッチと同じ構造であるが、offpat は使用しない。
typedef struct { UW type; -- タイプ(PM_PARTS)/属性/状態 RECT r; -- パーツの矩形領域 W cv; -- 現在値 (未使用) W onpat; -- 「BMAP_DATA」タイプのデータ番号 W offpat; -- 未使用 PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } PICTSW;
onpat
はデータマネージャが管理するビットマップデータのデータ番号で、
データタイプは「BMAP_DATA
」タイプに固定される。
また onpat = 0
の場合は何も表示されない(空白となる)。
cv
は意味を持たない(現在値を取り出すと常に0となる)。
登録したパーツはグローバルに使用可能である。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 未使用 |
misc | : 未使用 |
スイッチセレクタは複数の選択肢のうち、 1 個ないしは 0 個の選択肢を選択するために使用され、 すべての選択肢の名称と、 その状態を示すインジケータから構成される。
すべての選択肢を角の丸い矩形で囲んで表示される。 選択肢の前にはインジケータがあり、 "=" で OFF、 "≠" で ON を表わす。 (インジケータに関しては、テキストオルタネートスイッチを参照)
状態の変更が禁止されている、 「不能項目」の選択肢は、選択肢名と、インジケータが灰色化表示される。
「禁止状態」または「不能状態」の場合は、 全体が灰色化表示される。
配置は、縦、横 または2段組のいずれかである。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | 適用されない | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :全体が灰色化表示 | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :全体が灰色化表示 | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_NOSEL | : 0 | :必ず1つは選択される |
: 1 | :1つも選択されなくてもよい | |
P_DOUBLE | : 0 | :縦または横一列 |
: 1 | :2 段組み | |
P_PARTDISP | : 0 | :縦一列 ( P_DOUBLE = 0 の時のみ有効) |
: 1 | :横一列 ( P_DOUBLE = 0 の時のみ有効) | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
OFF 状態の選択肢を囲む仮想的な矩形を考え、 この矩形の中でプレスした場合、 インジケータをマージン 1 ドットで囲む矩形領域が反転表示される。 ここで、リリースすると、インジケータの表示が "≠" になり状態が ON に変わったことを示す。 同時に他の ON 状態であった選択肢のインジケータの状態は OFF となり "=" の表示に変化する。 ( インジケータの反転表示に関しては、テキストオルタネートスイッチを参照)
ドラッグして最初にプレスした選択肢を囲む仮想的な矩形外へ出ると、 インジケータの反転表示は解除され、 そのまま外でリリースした場合は何の変化も起らない。
最初にプレスした選択肢内に戻った場合は反転表示は復活し、 リリースすることによってその選択肢の状態を ON にできる。
ON 状態の選択肢を囲む矩形中でプレスした場合も、
同様にインジケータは反転表示となり、P_NOSEL = 0
の時は、
その矩形領域内でリリースしても状態は ON のままで変化しないが、
P_NOSEL = 1
の時は、
状態は OFF に変化する。
不能項目の選択肢を囲む矩形中でプレスした場合は、 何も起らない。
typedef struct { UW type; -- タイプ(WS_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W cv; -- 現在値 (選択番号 0〜) TC* name; -- 選択肢名列へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } SWSEL;
cv
は現在選択されている選択肢の番号 ( 1 〜 ) を示す。
何も選択されていない場合は 0 となる。
name
は各選択肢の文字列を属性コードで区切って繋げたものである。
属性コードが区切りと同時に次の文字列の属性を指定している。
選択肢は最大 32 個までとする。
<属性コード><第1選択肢名><属性コード ><第2選択肢名> .... <TNULL>
<属性コード>が MC_INACT
の場合は、対応する選択肢は不能項目であり、灰色化表示される。
name
で示されるメモリ内容は、
パーツとして登録した後も参照されるので領域は保持しておく必要がある。
従って、name
がローカルメモリ領域にある場合は、
登録したパーツはグローバルに使用できない。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : 下位ワード -- インジケータのデータ番号 (" PAT_DATA " タイプで矩形の大きさは、
図 87 : インジケータの反転表示固定)上位ワード -- 未使用 |
スクロールセレクタはスイッチセレクタと同様に複数の選択肢のうち、 1 個ないしは 0 個の選択肢を選択するために使用されるが、 選択肢の一部のみ表示され全体はスクロールすることにより見ることができる。
これは、選択肢が多く全てを表示すると場所を取りすぎる場合や、 アプリケーションの実行中に選択肢を動的に変化させる場合に使用する。
スクロールセレクタは、 キーボードからの入力によっても操作できる。
右辺にスクロールバーを持った矩形のなかに選択肢が表示される。 現在選択されている選択肢にはインジケータ ( ≠ ) が付けられている。 選択肢の文字列の幅が表示領域より大きくて全体が表示できない場合は最後に 「…」を付加し、後半が省略されていることが明白に示される。
番号付けが指定されている場合には、 選択肢名の直前に1〜 の連続番号が付けられて表示される。
スクロールバーは、中央にトンボがあるノブ ( 白 ) 部分と灰色パターン部により表示される。
状態の変更が禁止されている、「不能項目」の選択肢は、選択肢名が灰色化表示される。
「禁止状態」または「不能状態」の場合は、 選択肢全体が灰色化表示される。 また、「不能状態」の場合は、スクロールバーのトンボは表示されず、 灰色パターンの部分は、 白部分との境界線を残して白くなる(不能表示)。
配置は、縦のみである。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | 適用されない | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :選択肢全体が灰色化表示、スクロールバーが不能表示 | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :選択肢全体が灰色化表示 | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_NOSEL | : 0 | :必ず1つは選択される |
: 1 | :1つも選択されなくてもよい | |
P_NUMBER | : 0 | :番号付けは行なわない |
: 1 | :番号付けを行なう | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
インジケータの付かない状態の選択肢を囲む仮想的な矩形を考え、 この中でプレスすると、矩形内部が反転表示される。 リリースすると、選択肢の先頭にインジケータが現れ選択されたことを示す。 同時に今まで選択されていた選択肢のインジケータが消える ( 見えていない位置にあった場合はその変化は見えない ) 。
スクロールエリア内に見えていない選択肢を扱う場合はスクロールバー ( ボリュームと同様の操作、ジャンプ移動、スムース移動、エリア移動 ) により選択肢をスクロールさせる。 また、スクロールバーに伴う処理はパーツマネージャ側が行ない、 エリア移動の場合、 表示されている選択肢数 - 1 個ずつスクロールする。
インジケータの付いた選択肢を囲む矩形中でプレスした場合も、
反転表示されるが、リリースした場合、選択状態のままで変化しないか、
選択状態でなくなるかは P_NOSEL
に依存する。
ドラッグにより最初にプレスした選択肢外へ出て他の選択肢の位置にいった場合、 それにつれて反転表示も移動する。 そのままスクロールエリアの左右の境界を超えずに上下の境界だけを超えて外に出た場合、 ドラックしている間はその方向と逆方向へのスクロールが起り、 その方向にある見えていない選択肢が見えるようになる ( 同時にスクロールバーの表示も変化する )。 スクロールエリアのその方向の端にある選択肢が反転状態になっている。 選択肢の列が跡切れた段階でスクロールは停止し、 末端の選択肢が反転表示され、 リリースすると、 末端の選択肢の選択状態が反転する。 スクロールエリアの左右の境界を超えた場合反転表示が消え、 そのままリリースした場合は何の変化も起らない。
選択肢の数が少なく必要な行数がスクロールエリアの縦より小さい場合、 スクロールバー内部に灰色の部分は見えなくなり、 最後の選択肢とスクロールエリアの下辺との間に選択肢のない隙間ができる。 この部分でプレスした場合は何もおこらない。
スクロールセレクタによっては、[変換]、 [逆変換]キーによって操作を行なうことが可能な場合もあり、 その場合の操作法は基本的にアプリケーションに依存するが、 標準的には以下の操作となる。
[変換]、[逆変換]キーをプレスすると、 現在インジケータが付いている選択肢から下 ( [変換] ) または上 ( [逆変換] ) にある選択肢が選択され、 インジケータが移動する。 キーのプレスを続けると、連続的に選択した選択肢が移動し、 スクロールも行なわれる。
[シフト]キーと同時に[変換]、[逆変換]キーをプレスした場合も、 同様に選択肢の選択が移動していくが、 1 個ずつではなく適当な個数 ( 通常は表示されている選択肢の数 - 1 ) ずつ移動する。
P_NUMBER = 1
の場合は、
選択肢の直前に 1 〜 の連続番号が表示され、
数字をキーボードから入力し [変換] キーを押すことで、
指定した番号の選択肢を直接選択することができる。
スイッチセレクタと同じ構造である。
typedef struct { UW type; -- タイプ(SS_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W cv; -- 現在値 (選択番号 0〜) TC* name; -- 選択肢名列へのポインタ PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } SWSEL;
cv
は現在選択されている選択肢の番号 ( 0 〜 ) を示す。
何も選択されていない場合は0となる。
name
は各選択肢の文字列を属性コードで区切って繋げたものである。
属性コードが区切りと同時に次の文字列の属性を指定している。
<属性コード><第1選択肢名><属性コード ><第2選択肢名> .... <TNULL>
<属性コード>が MC_INACT の場合は、対応する選択肢は不能項目であり、灰色化表示される。
name
で示されるメモリ内容は、
パーツとして登録した後も参照されるので領域は保持しておく必要がある。
従って、name
がローカルメモリ領域にある場合は、
登録したパーツはグローバルに使用できない。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : 矩形領域の背景パターン |
chcol | : 文字の色 |
misc | : 下位ワード -- インジケータのデータ番号 (" PAT_DATA " タイプで矩形の大きさは、
図 87 : インジケータの反転表示固定)上位ワード -- スクロールバーのパターン部のデータ番号 (" PAT_DATA "タイプ) |
frpat
、ノブ部分は bgpat
が適用されるものとする。
ボリュームは数値パラメータをアナログ的に表示し、 同時にパラメータを設定する手段を与えるものである。
これは、通常はスクロールバーとして表示領域の制御に使用するが、 ユーザからは操作できないようにして達成度の表示等にも使用される。
細長い帯状の矩形エリアで、通常 ( デフォルト表示 ) では白の部分とパターンに埋められた部分に分かれている。 白の部分は全体との相対位置で設定されている範囲を示しノブと呼ぶ。 ノブの中心にはバーの方向に垂直な線 ( トンボ ) がある ( デフォルト色によってトンボを強調するインプリメントも考えられる )。
見えている部分がごくわずかの場合は、 ノブは以下のようになり、これ以上圧縮されることはない。
基本的には水平のボリュームでは基準レベルは左端とし、 右方向を増加方向とする。 垂直のボリュームでは基準レベルは下端とし、上方向を増加方向とする。
ボリュームの目盛り等の外側の表示はパーツとしてはサポートしていない。
「不能状態」の場合は、パターンはノブとの境界線を残して白くなり、 トンボも表示されない(不能表示)。
「禁止状態」のボリュームでは「不能状態」に無関係に表示は常に正常となる。 この場合は、通常トンボは表示しないようにする。
P_DISP | : 0 (消去状態) | :パーツは表示されていない |
: 1 (表示状態) | :パーツは表示されている | |
P_BLINK | 適用されない | |
P_INACT | : 0 (可能状態) | :正常表示 |
: 1 (不能状態) | :許可状態の場合、不能表示となる | |
P_DISABLE | : 0 (許可状態) | :正常表示 |
: 1 (禁止状態) | :正常表示 (通常、P_NONOB = 1 とする) | |
P_NOFRAME | : 0 (枠有り) | :矩形枠の表示あり |
: 1 (枠無し) | :矩形枠の表示なし | |
P_EMPHAS | : 0 (通常状態) | :通常枠 ( P_NOFRAME = 0 の時のみ有効) |
: 1 (強調状態) | :強調枠 ( P_NOFRAME = 0 の時のみ有効) | |
P_NONOB | : 0 | :トンボを表示する |
: 1 | :トンボを表示しない | |
P_SBAR | : 0 | :常のボリュームとして登録する |
: 1 | :ウィンドウのスクロールバーとして登録する | |
P_HALIGN | : 0 | : (縦) 垂直ボリューム |
: 1 | : (横) 水平ボリューム | |
P_PARTDISP | : 0 (デフォルト表示) | :デフォルトの表示属性で表示 |
: 1 (表示属性指定) | :指定された表示属性で表示 |
可能状態のボリュームのノブの部分にポインタを持ってくると、 ポインタは縦または横の「移動手」となり、そこでプレスすると「握り」となりドラッグが可能になる。 不能状態の場合は、プレスした時点で可能状態に変化し、 ポインタは、一瞬「移動手」となり、その後「握り」となりドラッグが可能になる。
ドラッグに従い影 ( ノブと同じ大きさの XOR で描かれた矩形 ) が現れ移動するので、 移動比率に見合った望みの位置に持っていきリリースする。 この時点で、影の位置にノブが移動し、 それに従って数値パラメータの値が変化する(ポインタは「移動手」に戻る)。
ドラッグの途中でポインタをボリュームの外に出した場合は、 ボリューム中心から 12 〜 16 ドット程度離れるまでは影のドラッグは継続し、 それ以上離れると影は消えてしまいリリースしても何も起らない。 ボリューム中心よりに戻すと、再び影が現れ動作が継続される。 影が消えた場合は、ポインタは「移動手」となる。
可能状態のボリュームのパターンの部分をプレスすると、 パターンの部分がプレスされている間、 その方向へノブを近づけるように数値パラメータが徐々に変化する。 この場合の変化の最小単位はアプリケーションに依存する。 ノブが移動してその中心がプレスした位置に来た時点、 またはパターン部分が無くなった時点で変化が停止する。 また、ドラッグするとその時点の位置により上記動作が連続して行なわれる。
プレスした位置と、トンボの距離に比例した速度で変化するようにすることが望ましい。 不能状態の場合は、 プレスした時点で可能状態となり同様の処理が行なわれる。
可能状態のボリュームのパターンの部分をダブルクリックすると、 その方向へ ( ノブの幅 - 最小移動幅 ) 分だけノブを近づけるように数値パラメータが変化する。 最小移動幅は、アプリケーションに依存する。
不能状態の場合は、 プレスした時点で可能状態となり同様の処理が行なわれる。
全ての変更は、 ノブが全体の幅からはみ出さない範囲で行なわれ、 ノブの端が全体の端にたどり着いた時点でその方向への設定の変更は停止する。
typedef struct { UW type; -- タイプ(VL_PARTS) / 属性 / 状態 RECT r; -- パーツの矩形領域 W clo,chi; -- ノブの最小値、最大値 W lo,hi; -- 全体の最小値、最大値 W patnum; -- パターン指定のデータ番号 PARTDISP atr; -- 表示属性(type の MSB が1の時のみ) } VOLUME;
lo
, hi
はそれぞれ右端 ( 上端 ) と左端 ( 下端 ) の値を示し、
clo
, chi
はノブの右端 ( 上端 ) と左端 ( 下端 ) の値を示す。
大小関係は特に意味はない。
patnum
は、「PAT_DATA
」タイプのデータ番号を指定する。
0 の場合は標準の灰色パターンとなる。
登録したパーツはグローバルに使用可能である。
frpat | : 枠、または下線のパターン ( P_NOFRAME = 0 の時のみ有効 ) |
bgpat | : スクロールバーのノブ ( 白 ) 部分のパターン |
chcol | : 未使用 |
misc | : 未使用 |
typedef W PAID; /* パーツID */
typedef struct { W frpat; /* 枠のパターン(0:デフォルト) */ W bgpat; /* 背景パターン(0:デフォルト) */ COLOR chcol; /* 文字色 (<0:デフォルト) */ W misc; /* 各種のパターン/色 */ } PARTDISP;
typedef struct textbox { /* TB_PARTS,XB_PARTS */ UW type; RECT r; W txsize; TC *text; PARTDISP atr; } TEXTBOX;
typedef struct numbox { /* NB_PARTS */ UW type; RECT r; UW fmt; /* 数値フォーマット */ union { W l; double d; } cv; PARTDISP atr; } NUMBOX;
typedef struct serbox { /* SB_PARTS */ UW type; RECT r; TC *fmt; /* 表示フォーマット指定 */ W nfld; /* データフィールド数 */ W *cv; /* 初期フィールド値配列 */ PARTDISP atr; } SERBOX;
typedef struct swsel { /* AS/MS_PARTS, WS_PARTS, SS_PARTS */ UW type; RECT r; W cv; /* 1:on, 0:off / 現在値 (選択番号 0..) */ TC *name; /* スイッチ名/選択肢名列へのポインタ */ PARTDISP atr; } SWSEL;
typedef struct pictsw { /* PA_PARTS, PM_PARTS */ UW type; RECT r; W cv; /* 現在値 0:off, 1:on / 未使用 */ W onpat; /* on状態の BMAP_DATA タイプの番号 */ W offpat; /* off状態の BMAP_DATA タイプの番号 / 未使用 */ PARTDISP atr; } PICTSW;
typedef struct volume { /* VL_PARTS */ UW type; RECT r; W clo, chi; /* ノブの最小値、最大値 */ W lo, hi; /* 全体の最小値、最大値 */ W patnum; /* パターン指定のデータ番号 */ PARTDISP atr; } VOLUME;
typedef union parts { TEXTBOX tb; /* TB_PARTS,XB_PARTS */ NUMBOX nb; /* NB_PARTS */ SERBOX sb; /* SB_PARTS */ SWSEL ss; /* AS_PARTS,MS_PARTS,WS_PARTS,SS_PARTS */ PICTSW pw; /* PA_PARTS,PM_PARTS */ VOLUME vl; /* VL_PARTS */ } PARTS;
#define TB_PARTS 1 /* テキストボックス */ #define XB_PARTS 2 /* シークレットテキストボックス */ #define NB_PARTS 3 /* 数値ボックス */ #define SB_PARTS 4 /* シリアルボックス */ #define AS_PARTS 5 /* テキストオルタネートスイッチ */ #define MS_PARTS 6 /* テキストモーメンタリスイッチ */ #define PA_PARTS 7 /* ピクトグラムオルタネートスイッチ */ #define PM_PARTS 8 /* ピクトグラムモーメンタリスイッチ */ #define WS_PARTS 9 /* スイッチセレクタ */ #define SS_PARTS 10 /* スクロールセレクタ */ #define VL_PARTS 11 /* ボリューム */
#define P_TYPE 0x001f /* タイプマスク */
#define P_HALIGN 0x0020 /* 垂直/水平配置 */ #define P_PRESS 0x0040 /* プレス動作指定 */ #define P_NUMBER 0x0040 /* 番号付け指定 */ #define P_DOUBLE 0x0040 /* 2 段組み配置 */
#define P_SBAR 0x0040 /* スクロールバー指定 */ #define P_DCLICK 0x0080 /* ダブルクリック動作指定 */ #define P_NOSEL 0x0080 /* 0 選択可能 */ #define P_APPEND 0x0080 /* 追加選択モード */ #define P_NONOB 0x0080 /* トンボ表示無し */
#define P_EMPHAS 0x0200 /* 強調枠/通常枠 */ #define P_NOFRAME 0x0400 /* 枠無し/枠有り */ #define P_DISABLE 0x0800 /* 操作禁止/操作許可 */ #define P_INACT 0x1000 /* 不能状態/可能状態 */ #define P_BLINK 0x2000 /* 点滅状態 */ #define P_DISP 0x4000 /* 表示状態/消去状態 */
#define P_PARTDISP 0x8000 /* 表示属性指定 */
#define MC_STR 0x1000 /* 文字列 */ #define MC_FIG 0x1001 /* 図形データ */ #define MC_ATTR 0x1002 /* 文字属性指定 */ #define MC_EMPHAS 0x1400 /* 強調項目 */ #define MC_INACT 0x1800 /* 不能項目 */
#define MC_SFLD 0x0800 /* 文字列フィールド指定 */ #define MC_NFLD 0x0c00 /* 数値フィールド指定 */ #define MC_NZERO 0x0200 /* 前ゼロ表示 */ #define MC_NLEFT 0x0100 /* 左揃え */
#define P_LNUM 0x0000 /* 整数 (32ビット) */ #define P_DNUM 0x0080 /* 実数 (64ビット) */ #define P_FIX0 0x0000 /* 固定小数点表現 - 0 */ #define P_FIX1 0x0010 /* 固定小数点表現 - 1 */ #define S_UNDEF 0x8000 /* 負の最大値 */ #define L_UNDEF 0x80000000 /* 負の最大値 */ #define D_UNDEF 1.797693e308 /* NaN */
#define P_CHANGE 0x1000 /* 変化あり */ #define P_BREAK 0x2000 /* 処理の中断 */ #define P_SMASK 0x0fff /* 終了/中断状態のマスク */ #define P_MENU 0x6010 /* メニュー指定で中断 */ #define P_EVENT 0x6020 /* 他のイベント発生で中断 */
#define P_SGL 1 /* 有効なシングルクリック */ #define P_DBL 2 /* 有効なダブルクリック */
#define P_TAB 0 /* タブで終了 */ #define P_NL 1 /* 改段落/改行で終了 */ #define P_END 2 /* 入力終で終了 */ #define P_BUT 3 /* ボックス外でのプレス */ #define P_MOVE 4 /* ボックス外への移動 */ #define P_COPY 5 /* ボックス外への複写 */
#define P_UP 0 /* 上方向 への移動 */ #define P_DOWN 1 /* 下方向 への移動 */ #define P_LEFT 2 /* 左方向 への移動 */ #define P_RIGHT 3 /* 右方向 への移動 */
#define P_SMOOTH 0 /* スムース移動 */ #define P_AREA 4 /* エリア移動 */ #define P_JUMP 8 /* ジャンプ移動 */
#define P_ERASE 0x0000 /* 消去 */ #define P_NODISP 0x1000 /* 消去状態に */ #define P_RDISP 0x8000 /* 再表示 */
#define P_NORMAL 0x0002 /* 通常枠 */ #define P_FRAME 0x0004 /* 枠有り */ #define P_ENABLE 0x0008 /* 操作許可 */ #define P_ACT 0x0010 /* 可能状態 */
|
PAID ccre_par(W wid, PARTS *parts)
W wid ウィンドウID PARTS *parts パーツデータ
≧0 正常(パーツID>0) <0 エラー(エラーコード)
parts
により定義したコントロールパーツを wid
で指定したウィンドウ / パネルに属するパーツとして登録し、
関数値として登録されたパーツのパーツID ( pid > 0
)を戻す。
パーツの定義データの状態が「表示状態」の場合はパーツの表示が行なわれるが、
「消去状態」の場合は、登録のみで表示は行なわれない。
EX_ADR : アドレス(parts等)のアクセスは許されていない。 EX_NOSPC : システムのメモリ領域が不足した。 EX_PAR : パラメータが不正である。 EX_WID : ウィンドウ(wid)は存在していない。 EX_DNUM : データ(onpat,offpat,patnum)はデータマネージャに登録されていない。
|
PAID ccre_tbx(W wid, UW ty, RECT *r, W txsize, TC *text, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて TB_PARTS に固定される) RECT *r パーツ領域 W txsize 最大文字数 TC *text 初期文字列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
テキストボックスパーツを作成しそのパーツ ID を戻す。
|
PAID ccre_xbx(W wid, UW ty, RECT *r, W txsize, TC *text, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて XB_PARTS に固定される) RECT *r パーツ領域 W txsize 最大文字数 TC *text 初期文字列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
シークレットテキストボックスパーツを作成しそのパーツIDを戻す。
|
PAID ccre_nbx(W wid, UW ty, RECT *r, UW fmt, W *val, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて NB_PARTS に固定される) RECT *r パーツ領域 UW fmt 書式 W *val 初期値 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
数値ボックスパーツを作成しそのパーツIDを戻す。
|
PAID ccre_sbx(W wid, UW ty, RECT *r, TC *fmt, W nfld, W *cv, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて SB_PARTS に固定される) RECT *r パーツ領域 TC *fmt 書式 W nfld フィールド数 W *cv 初期値配列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
シリアルボックスパーツを作成しそのパーツIDを戻す。
|
PAID ccre_asw(W wid, UW ty, RECT *r, W cv, TC *name, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて AS_PARTS に固定される) RECT *r パーツ領域 W cv 初期値 TC *name スイッチ名文字列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
テキストオルタネートスイッチパーツを作成しそのパーツIDを戻す。
|
PAID ccre_msw(W wid, UW ty, RECT *r, TC *name, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて MS_PARTS に固定される) RECT *r パーツ領域 TC *name スイッチ名文字列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
テキストモーメンタリスイッチパーツを作成しそのパーツIDを戻す。
|
PAID ccre_pas(W wid, UW ty, RECT *r, W cv, W onp, W offp, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて PA_PARTS に固定される) RECT *r パーツ領域 W cv 初期値 W onp オン時の BMAP_DATA タイプのデータ番号 W offp オフ時の BMAP_DATA タイプのデータ番号 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
ピクトグラムオルタネートスイッチパーツを作成しそのパーツIDを戻す。
|
PAID ccre_pms(W wid, UW ty, RECT *r, W onp, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて PM_PARTS に固定される) RECT *r パーツ領域 W onp オン時の BMAP_DATA タイプのデータ番号 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
ピクトグラムモーメンタリスイッチパーツを作成しそのパーツIDを戻す。
|
PAID ccre_sel(W wid, UW ty, RECT *r, W cv, TC *name, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて WS_PARTS に固定される) RECT *r パーツ領域 W cv 初期値 TC *name スイッチセレクタ文字列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
スイッチセレクタパーツを作成しそのパーツIDを戻す。
|
PAID ccre_scr(W wid, UW ty, RECT *r, W cv, TC *name, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて SS_PARTS に固定される) RECT *r パーツ領域 W cv 初期値 TC *name スクロールセレクタ文字列 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
スクロールセレクタパーツを作成しそのパーツIDを戻す。
|
PAID ccre_vol(W wid, UW ty, RECT *r, W *val, W patnum, PARTDISP *atr)
W wid ウィンドウID UW ty パーツ属性(タイプは無視されて VL_PARTS に固定される) RECT *r パーツ領域 W *val 初期値配列 W patnum ノブの PAT_DATA タイプのデータ番号 PARTDISP *atr 表示属性
≧0 正常(パーツID>0) <0 エラー(エラーコード)
ボリュームパーツを作成しそのパーツIDを戻す。
|
PAID copn_par(W wid, W dnum, PNT *pos)
W wid ウィンドウID W dnum PARTS_DATA タイプのデータ番号 PNT *pos パーツの矩形領域の左上の点(相対座標)
≧0 正常(パーツID>0) <0 エラー(エラーコード)
dnum
で指定したデータ番号の "PARTS_DATA
"
タイプのデータにより定義されるコントロールパーツを
wid
で指定したウィンドウ / パネルに属するパーツとして登録する。
*pos
はパーツの矩形領域の左上の点を指定したウィンドウ / パネルの相対座標で指定するもので、
パーツ定義データで定義された位置を移動して登録する。
pos = NULL
の場合は、
パーツ定義データ上で定義された位置で登録することを意味する。
パーツの定義データの状態が「表示状態」の場合はパーツの表示が行なわれるが、 「消去状態」の場合は、登録のみで表示は行なわれない。
EX_ADR : アドレス(pos)のアクセスは許されていない。 EX_DNUM : データ(dnum等)はデータマネージャに登録されていない。 EX_NOSPC : システムのメモリ領域が不足した。 EX_PAR : パラメータが不正である。 EX_WID : ウィンドウ(wid)は存在していない。
|
ERR cdel_par(W pid, W opt)
W opt ::= ( CLR ‖ NOCLR )
≧0 正常 <0 エラー(エラーコード)
pid
で指定した登録済みパーツを削除する。
opt
により、削除したパーツの表示を消去するか否かを指定する。
パーツを登録したプロセスが終了した場合、
またはパーツが属するウィンドウ / パネルが削除された場合には、
自動的にパーツは削除されるが、
原則的には不要になった時点で明示的に削除すべきである。
EX_PID : パーツ(pid)は存在していない。
|
ERR cdel_pwd(W wid, W opt)
W wid ウィンドウID W opt cdel_par と同じ
≧0 正常 <0 エラー(エラーコード)
wid
で指定したウィンドウ / パネルに属する登録済みパーツをすべて削除する。
但し、P_SBAR = 1
の属性を持つボリュームは対象外となり削除されない。
opt
により、削除したパーツの表示を消去するか否かを指定し、
その内容は cdel_par()
の場合と同一である。
パーツを登録したプロセスが終了した場合、 またはパーツが属するウィンドウ / パネルが削除された場合には、 自動的にパーツは削除されるが、 原則的には不要になった時点で明示的に削除すべきである。
EX_WID : ウィンドウ(wid)は存在していない。
|
ERR cdsp_par(W pid, UW vis)
W pid パーツID UW vis 以下のいずれかの値をとり、消去/表示/点滅/再表示の指定を行なう。
P_ERASE
( 消去 ) :
パーツが「表示状態」の場合、
背景パターンでパーツの矩形領域を塗り潰し「消去状態」とし「点滅状態」をリセットする。
それ以外の場合は何も行なわない。結果としての状態は P_DISP = 0
,P_BLINK = 0
となる。
P_NODISP
( 消去状態に ) :
状態のみを消去状態とする。
結果としての状態は P_DISP = 0
,P_BLINK = 0
となる。
P_DISP
( 表示 ) :
パーツが「消去状態」、または「点滅状態」の場合、表示を行ない「表示状態」とし「点滅状態」をリセットする。
それ以外の場合は何も行なわない。結果としての状態は P_DISP = 1
,P_BLINK = 0
となる。
P_BLINK
(点滅) :
パーツが「点滅状態」でない場合、「表示状態」かつ「点滅状態」とする。
実際の点滅表示は cidl_par()
により行なわれる。
それ以外の場合は何も行なわない。
「点滅状態」が定義されていないパーツの場合は、P_DISP
と同じ動作となる。
結果としての状態は P_DISP = 1
,P_BLINK = 1
となる。
P_RDISP
( 再表示 ) :
パーツの状態に関係なく表示を行ない「表示状態」とし、
「点滅状態」をリセットする。
結果としての状態は P_DISP = 1
,P_BLINK = 0
となる。
≧0 正常 <0 エラー(エラーコード)
pid
で指定したパーツの消去 / 表示 / 点滅 / 再表示を行なう。
EX_PAR : パラメータが不正である(vis が不正)。 EX_PID : パーツ(pid)は存在していない。
|
ERR cdsp_pwd(W wid, RECT *r, UW vis)
W wid ウィンドウID RECT *r 表示したいウィンドウ内の矩形領域 UW vis 消去 / 表示 / 点滅 / 再表示の指定を行なうもので、 その内容は cdsp_par() の場合と同一である。
≧0 正常 <0 エラー(エラーコード)
wid
で指定したウィンドウ / パネルに属している登録済みのパーツのうち、
*r
で指定した矩形領域に重なるパーツの消去 / 表示 / 点滅 / 再表示を行なう。
但し、P_SBAR = 1
の属性を持つ、
ボリュームは対象外となる。 消去 / 表示 / 点滅 / 再表示の処理は登録された順番に行なわれる。
*r
は指定したウィンドウ / パネルの相対座標で指定され、
r = NULL
の場合は、ウィンドウ / パネル全体の領域を意味する。
EX_ADR : アドレス(r)のアクセスは許されていない。 EX_PAR : パラメータが不正である(vis が不正)。 EX_WID : ウィンドウ(wid)は存在していない。
|
W cchk_par(W pid, PNT pos)
W pid パーツID PNT pos 位置座標
≧0 正常(関数値はパーツのタイプ(含まれていない場合は0)) <0 エラー(エラーコード)
pos
で指定した位置の点が pid
で指定したパーツの矩形領域に含まれているか否かをチェックし、
含まれていない場合は 0、
含まれていた場合はそのパーツのタイプコード ( 1 〜 ) を関数値として戻す。
ただし、禁止状態 ( P_DISABLE = 1
) のパーツ、
消去状態 ( P_DISP = 0
)
のパーツはチェックの対象外となり関数値は常に 0 となる。
pos
はウィンドウ内の相対座標で指定される。
EX_PID : パーツ(pid)は存在していない。
|
W cfnd_par(W wid, PNT pos, W *pid)
W wid ウィンドウID PNT pos 位置座標 W *pid パーツID格納領域
≧0 正常(関数値はパーツのタイプ(含まれていない場合は0)) <0 エラー(エラーコード)
wid
で指定したウィンドウ / パネルに属する登録済みパーツに対して、
pos
で指定した位置の点が含まれているか否かを登録された順番にサーチし、
含まれていた場合は、
そのパーツIDを *pid
に戻し、
含まれていない場合は 0 を *pid
に戻す。
ただし、禁止状態 ( P_DISABLE = 1
) のパーツ、
消去状態 ( P_DISP=0
) のパーツ、
および P_SBAR = 1
の属性を持つボリュームはサーチの対象外となる。
関数値としては、含まれていない場合は 0 が戻り、 含まれていた場合はそのパーツのタイプコード ( 1 〜 ) が戻る。
EX_ADR : アドレス(pid)のアクセスは許されていない。 EX_WID : ウィンドウ(wid)は存在していない。
|
W cact_par(W pid, WEVENT *ev)
W pid パーツID WEVENT *ev パーツ動作のきっかけとなったイベント
≧0 正常(関数値下位16bit): 01PC SSSS SSSS SSSS P = 0: 処理の終了 = 1: 処理の中断 C = 0: 現在値/状態の変化無し = 1: 現在値/状態の変化有り S : 各種のコード <0 エラー(エラーコード)
pid
で指定したパーツの固有の動作を開始する。
*ev
はパーツの動作の起動とする、
ウィンドウイベントであり、パーツの動作終了、中断時には、
終了、中断の契機となったイベントが設定されて戻る。
この関数の動作はパーツのタイプによって異なり、
起動となりうるイベントの種類、
リターン時の関数値の意味も異なるが、共通的に以下の場合は、
何もせず、関数値として0を戻す。この時、*ev
の内容は変化しない。
P_DISABLE = 1
) の場合。
*ev
で指定したイベントのタイプがそのパーツの処理対象でない場合。
EV_BUTDWN
または EV_SWITCH
で、
イベント発生位置(ev->e.pos)がパーツの領域外であった場合。
処理の中断の場合は、アプリケーション側で適当な処理を行なった後、
*ev
のイベントタイプに EV_NULL
を設定して、
再び cact_par()
をコールする必要がある。
なお、指定したパーツの属するウィンドウ/パネルが入力受付状態でない場合、 およびアクティブプロセスでない場合は、何もせずに関数値0を戻す。
EV_BUTDWN
または EV_SWITCH
の場合 :
EV_KEYDWN
または EV_NULL
の場合 :
入力 / 編集処理は以下の内容となる。
EV_BUTDWN,EV_BUTUP,EV_KEYDWN,EV_KEYUP,EV_AUTKEY
以外のイベントが発生した場合、または、メニュー指定が発生した場合は、
そのままの状態で処理を中断する。*ev
には得られたイベントが設定され、
関数値は以下のものとなる。
関数値: 他のイベントの場合 (P_EVENT): 0110 0000 0010 0000 メニュー指定の場合 (P_MENU): 0110 0000 0001 0000 なお、メニュー指定とは、以下のいずれかの場合を示す。 (1) メニューボタンのクリック (2) 「命令」キーを押した状態でのプレス (3) 「命令」キーと別のキーの同時押し(キーマクロ)
アプリケーションは、対応する処理を行なった後、
*ev
のイベントタイプに EV_NULL
を設定して、
再び cact_par()
をコールして処理を再開する必要がある。
*ev
に設定される。
関数値:010C 0000 0000 0SSS C = 0: 現在値の変化無し = 1: 現在値の変化有り S = P_TAB 「タブ」 = P_NL 「改段落/改行」 = P_END 「入力終」 = P_BUT ボックス外でのプレス = P_MOVE ボックス外への移動 = P_COPY ボックス外への複写
EV_BUTDWN
または EV_SWITCH
の場合 :
EV_KEYDWN
または EV_NULL
の場合 :
*ev
の内容は変化しない)
入力 / 編集処理は以下の内容となる。
EV_BUTDWN, EV_BUTUP, EV_KEYDWN, EV_KEYUP, EV_AUTKEY
以外のイベントが発生した場合、
またはメニュー指定が発生した場合は、
そのままの状態で処理を中断する。*ev
には得られたイベントを設定され、
関数値は以下のものとなる。
関数値: 他のイベントの場合 (P_EVENT): 0110 0000 0010 0000 メニュー指定の場合 (P_MENU): 0110 0000 0001 0000アプリケーションは、対応する処理を行なった後、
*ev
のイベントタイプに EV_NULL
を設定して、
再び cact_par()
をコールして処理を再開する必要がある。
*ev
に設定される。
関数値:010C 0000 0000 0SSS C = 0: 現在値の変化無し = 1: 現在値の変化有り S = P_TAB 「タブ」 = P_NL 「改段落/改行」 = P_END 「入力終」 = P_BUT ボックス外でのプレス
EV_BUTDWN
または EV_SWITCH
の場合 :
関数値:010C 0000 0000 000S C = 0: 現在値の変化無し。(矩形外でのリリース) = 1: 現在値の変化有り。(矩形内でのリリース) S : 現在値 (0:OFF, 1:ON)
EV_BUTUP
はイベントキューから取り除かれる。
また処理中に発生した EV_KEYDWN, EV_KEYUP, EV_AUTKEY
はイベントキューから取り除かれて無視されるが、その他のイベントはイベントキューに残る。
*ev
の内容は変化しない)
EV_BUTDWN
または EV_SWITCH
の場合 :
P_PRESS = 1
( プレス中の動作を行なう ) の場合は、
プレス中で、かつパーツの矩形領域内にある場合
( 反転表示されている状態 ) は、
以下の関数値を戻して処理を中断する。
この時 *ev
のイベントタイプは EV_NULL
に設定される。
関数値:0110 0000 0000 0000
アプリケーションは、
プレス中の動作を行なった後、再び cact_par()
をコールする必要がある。
P_DCLICK = 0
( ダブルクリックの検出なし ) の場合は、
リリースされた時点ですぐ処理を終了するが、
P_DCLICK = 1
の場合は、
ダブルクリックか否かをチェックした後リターンする
(なお、ダブルクリックは最初のプレスから2回目のリリースまでの時間で判断される)。
関数値:010C 0000 0000 00DS C = 0: 状態の変化無し。(リリースが矩形領域外) = 1: 状態の変化有り。(リリースが矩形領域内) D = 1: ダブルクリック (P_DCLICK=1の時のみ) S = 1: シングルクリック (C=0の場合は、D,Sも0となる)
EV_BUTUP
はイベントキューから取り除かれる
(ダブルクリックの場合は途中の EV_BUTUP
, EV_BUTDWN
も取り除かれる)。
また処理中に発生した EV_KEYDWN, EV_KEYUP, EV_AUTKEY
はイベントキューから取り除かれて無視されるが、
その他のイベントはイベントキューに残る。
EV_NULL
の場合 :
EV_BUTDWN
と同様の処理を行なう。
*ev
の内容は変化しない)。
EV_BUTDWN
または EV_SWITCH
の場合 :
関数値:010C SSSS SSSS SSSS C = 0: 現在値の変化無し = 1: 現在値の変化有り S : 現在値 (現在の選択肢の番号、0:選択無し)
現在値が4095を超える場合には、返される現在値は不定となる。
EV_BUTUP
はイベントキューから取り除かれる。
また処理中に発生した EV_KEYDWN, EV_KEYUP, EV_AUTKEY
はイベントキューから取り除かれて無視されるが、
その他のイベントはイベントキューに残る。
*ev
の内容は変化しない)。
EV_BUTDWN
または EV_SWITCH
の場合 :
関数値:010C SSSS SSSS SSSS C = 0: 現在値の変化無し。 = 1: 現在値の変化有り。 S : 現在値 (現在の選択肢の番号、0:選択無し)
現在値が 4095 を超える場合には、返される現在値は不定となる。
EV_BUTUP
はイベントキューから取り除かれる。
また処理中に発生した
EV_KEYDWN, EV_KEYUP, EV_AUTKEY
はイベントキューから取り除かれて無視されるが、
その他のイベントはイベントキューに残る。
*ev
の内容は変化しない)。
【注意】キー操作によるスクロールセレクタの操作は
cact_par()
としては一切行なわず、
スクロールセレクタの現在値 ( 選択肢の番号 ) を直接設定することにより行なう。
また、選択肢番号をキーボードから入力し[変換]キーを押すことで、
指定した番号の選択肢を直接選択する等の操作も全てアプリケーションによって実現される。
EV_BUTDWN
または EV_SWITCH
の場合 :
イベント発生位置 ( ev->e.pos ) がノブ ( 白 ) 部分の場合、
ノブ部分の枠の影をドラッグに追従させて移動し、
リリースされた場合は、その位置に応じて現在値 ( clo, chi
) / 表示を更新して処理を終了する。
この場合、ポインタはボリュームの方向に合わせた縦または横の「握り」になり、
リリース時点で元の形に戻る。
なお、選択状態でなかった場合は、
一度ポインタの形状を縦または横の「移動手」とする。
イベント発生位置 ( ev->e.pos ) がパターン部分の場合、 ダブルクリックか否かを判断し、 ダブルクリックの場合は、そのまま処理を終了する。 現在値 / 表示の更新は行なわれない。
ダブルクリックでない場合は、プレス中で、
ボリュームの矩形領域内にあり、
トンボとの距離がある場合は、
すぐに以下の関数値を戻して処理を中断する。
この時 *ev
のイベントタイプは
EV_NULL
に設定される。
関数値:0110 0000 0000 00DD D = 0: P_UP -- 上方向 への移動 = 1: P_DOWN -- 下方向 への移動 = 2: P_LEFT -- 左方向 への移動 = 3: P_RIGHT -- 右方向 への移動
アプリケーションは、対応する処理を行ないボリュームの現在値
(clo, chi
) を更新した後、
再び cact_par()
をコールする必要がある。
関数値:010C 0000 0000 SSDD C = 0: 状態の変化無し = 1: 状態の変化有り D = 0: P_UP -- 上方向 への移動 = 1: P_DOWN -- 下方向 への移動 = 2: P_LEFT -- 左方向 への移動 = 3: P_RIGHT -- 右方向 への移動 S = 0: P_SMOOTH -- スムース移動 = 1: P_AREA -- エリア移動 = 2: P_JUMP -- ジャンプ移動
EV_BUTUP
はイベントキューから取り除かれる
(ダブルクリックの場合は途中の EV_BUTUP, EV_BUTDWN
も取り除かれる)。
また処理中に発生した EV_KEYDWN, EV_KEYUP, EV_AUTKEY
はイベントキューから取り除かれて無視されるが、
その他のイベントはイベントキューに残る。
EV_NULL
の場合 :
EV_BUTDWN
のスムース処理と同様の処理を行なう。
EX_ADR : アドレス(ev)のアクセスは許されていない。 EX_PID : パーツ(pid)は存在していない。
|
W cget_val(W pid, W size, W *value)
W pid パーツID W size value のサイズ(ワード数またはハーフワード数) W *value 値を格納する配列
≧0 正常(関数値は現在値のワード数) <0 エラー(エラーコード)
pid
で指定したパーツの値を取り出して、
value
で指定した領域に格納する。size
は、value
の領域のデータ数
( ワード数またはハーフワード数 ) を指定する。
格納される value
の内容、および関数値の意味はパーツのタイプによって異なる。
(TC*) value
で指定した領域に格納する。
size
はその領域のハーフワード数 ( 文字数 ) を示し、
領域が不足した場合は先頭から ( size - 1 )
文字のみが格納され、
最後に TNULL
が格納される。
関数値として格納された文字列長が戻る。
size≦0
、または value=NULL
の場合は、
文字列の取り出しは行なわれず、最大文字数が関数値として戻る。
cv
の値を取り出し、value
で指定した領域に格納する。
size
はその領域のワード数を示し、
領域が不足した場合は、その size
分だけ格納される。1 -- 整数の場合 (32ビット) 2 -- 実数の場合 (64ビット浮動小数点)
size ≦ 0
、または value = NULL
の場合は、
値の取り出しは行なわれず、全体のワード数が関数値として戻る。
cv
値を順番に取り出し、
value
で指定した領域に格納する。
size
はその領域のワード数を示し、
領域が不足した場合は、その size
分だけ格納される。
関数値として全体のワード数 ( フィールド数 ) が戻る。
size≦0
、または value = NULL
の場合は、
値の取り出しは行なわれず、全体のワード数が関数値として戻る。
value
で指定した領域に格納する。
現在値は常に 1 ワードであるため、size
は通常 1 とする。
関数値として現在値が戻る。
size≦0
、または value = NULL
の場合は、
値の取り出しは行なわれず、現在値が関数値として戻る。
size = 2,3
とすると、
value
には、以下の値が格納される。
value[0] : 現在値 (size > 0の時) value[1] : 表示されている選択肢の数 (size > 1の時) value[2] : 一番上に表示されている選択肢の番号 (size > 2の時)
ボリューム
clo, chi, lo, hi
の値を順番に取り出し、
value
で指定した領域に格納する。
size
はその領域のワード数を示し、
領域が不足した場合は、
その size
分だけ格納される。
関数値としては、全体のワード数 ( = 4 ) が戻る。
size≦0
、
または value = NULL
の場合は、
値の取り出しは行なわれず、全体のワード数 ( = 4 ) が関数値として戻る。
EX_ADR : アドレス(value)のアクセスは許されていない。 EX_PID : パーツ(pid)は存在していない。
|
W cset_val(W pid, W size, W *value)
W pid パーツID W size value のサイズ W *value 設定値を格納した配列
≧0 正常(関数値は設定したワード数) <0 エラー(エラーコード)
pidで指定したパーツの現在値を
*valueで指定した値に変更し、 パーツが「表示状態」の時は、再表示を行なう。
size
は、設定するデータ数
( ワード数またはハーフワード数 ) を指定する。
設定する現在値の内容、
および関数値の意味はパーツのタイプによって異なる。
value
で指定した領域に格納されている文字列を設定する。
size
および関数値はハーフワード単位である。
設定される文字列は TNULL
で終了するか、
または size
文字数までであり、
最大文字数 ( txsize
) より大きい場合、
後ろは切り捨てられ実際に設定された文字列長
(つまり、TNULL
を除いた文字数)が
関数値として戻る。
size≦0
、または value = NULL
の場合は、
空文字列の設定となり、関数値として 0 が戻る。
value
で指定した領域に格納されている cv
の値を設定する。
size
および関数値は W 単位であり、
整数型の場合は1、実数型の場合は2になる。
size
が必要なワード数より少ない場合、
または value = NULL
の場合は、
何も設定されず、
関数値として 0 が戻る。
また size
が大きすぎる場合は必要な分のみ設定される。
value
で指定した領域に順番に格納されている各フィールドの cv
値を設定する。
size
および関数値はW単位である。
size
が必要なワード数より少ない場合、
その分のみ設定され、実際に設定されたワード数が関数値として戻る。
従って、size
の値によっては一部のフィールドの値のみの設定も可能である
(但し、先頭のフィールドから)。
size≦0
、または value = NULL
の場合は、何も設定されず、
関数値として0が戻る。また size
が大きすぎる場合は必要な分のみ設定される。
*value
で指定した値を現在値として設定する。
size
および関数値は W 単位である。
関数値としては、1 が戻る。
size≦0
、または value = NULL
の場合は、
何も設定されず、
関数値として 0 が戻る。また size
が大きすぎる場合は必要な分のみ設定される。
size = 1
の場合は、value[0]
の値を現在値として設定し、
設定した現在値が見えるように最低限のスクロールを行なう。
また、P_NOSEL
で現在値が 0 の場合は、
インジケータの消去のみを行なう。
size = 2
の場合は、
value[0]
の値を現在値として設定し、
value[1]
で指定した位置に設定した現在値が見えるようにスクロールを行なう。
value[1]
で指定する値は、0 が一番上で、表示できる選択肢の数 -1 が一番下となる。
value[1]
の値がレンジを超えている場合は、
それぞれ 0 または最大値と見なされる。
また、現在値が 0 の場合、value[1]
は、
先頭に表示する項目番号を表す。
これは、キー等により現在値を変更せずにスクロールだけを行なうような場合、
使用する。
value
で指定した領域に順番に格納されている clo, chi, lo, hi
の値を設定する。size
および関数値はW単位である。
size
が必要なワード数より少ない場合、
その分のみ設定され、
実際に設定されたワード数が関数値として戻る。
従って、size
の値によっては clo, chi
のみの設定も可能となる。
size≦0
、または value = NULL
の場合は、
何も設定されず、関数値として 0 が戻る。
また size
が大きすぎる場合は必要な分のみ設定される。
EX_ADR : アドレス(value)のアクセスは許されていない。 EX_PAR : パラメータが不正である(設定値が範囲外)。 EX_PID : パーツ(pid)は存在していない。
|
ERR cget_dat(W pid, W *par)
W pid パーツID W *par パーツデータ格納領域
≧0 正常 <0 エラー(エラーコード)
pid
で指定したパーツのデータを取り出して、
par
で指定した領域に格納する。
取り出されるデータは、パーツのタイプによって異なる。
テキストボックス | (W) txsize |
シークレットテキストボックス | (W) txsize |
数値ボックス | (UW) fmt |
シリアルボックス | (TC*) fmt |
テキストオルタネートスイッチ | (TC*) name |
テキストモーメンタリスイッチ | (TC*) name |
ピクトグラムオルタネートスイッチ | (W) onpat(par[0]), offpat(par[1]) |
ピクトグラムモーメンタリスイッチ | (W) onpat |
スイッチセレクタ | (TC*) name |
スクロールセレクタ | (TC*) name |
ボリューム | (W) patnum |
(TC*) fmt
と (TC*) name
の場合は、
ポインタの取出しであり、実際の文字列は直接は得られない。
= 0 (E_OK) : 正常終了 < 0 : エラー (関数値はエラーコード)
|
ERR cset_dat(W pid, W par)
W pid パーツID W par パーツデータ(PA_PARTS の場合は W*)
≧0 正常 <0 エラー(エラーコード)
pid
で指定したパーツのデータを、par
で指定した値に変更し、
パーツが「表示状態」の場合は再表示を行なう。
設定されるデータは、パーツのタイプによって異なる。
テキストボックス | (W) txsize |
シークレットテキストボックス | (W) txsize |
数値ボックス | (UW) fmt |
シリアルボックス | (TC*) fmt |
テキストオルタネートスイッチ | (TC*) name |
テキストモーメンタリスイッチ | (TC*) name |
ピクトグラムオルタネートスイッチ | (W*) onpat(par[0]), offpat(par[1]) |
ピクトグラムモーメンタリスイッチ | (W) onpat |
スイッチセレクタ | (TC*) name |
スクロールセレクタ | (TC*) name |
ボリューム | (W) patnum |
(TC*) fmt
と (TC*) name
の場合は、
ポインタの設定である。fmt, name
で指定される文字列の内容を直接変更し、
fmt, name
自体の値が変化していない場合でも、
cset_dat()
を行なわない限り変更の反映は保証されない。
シリアルボックスの fmt
を変更しても、
項目の値や項目総数は現在のままとなる。
このため、現在の項目の値が新しい fmt
に適用できない場合や、
項目総数が現在と同じでない場合は、
EX_PAR
のエラーになり、
fmt
は変更されない。
= 0 (E_OK) : 正常終了 < 0 : エラー (関数値はエラーコード)
EX_DNUM : データ(onpat,offpat,patnum)はデータマネージャに登録されていない。 EX_PAR : パラメータが不正である。 EX_PID : パーツ(pid)は存在していない。
|
W ccut_txt(W pid, W size, TC *buff, W cut)
W pid パーツID W size buff の文字数 TC *buff 文字列取り出し用領域
≧0 正常(関数値は選択領域の文字数) <0 エラー(エラーコード)
pid
で指定したテキスト / 数値ボックスの選択領域の文字列を取り出して、
buff
で指定した領域に格納し、選択領域全体の文字数を関数値として戻す。
size
は buff
で指定した領域の文字数の指定であり、
領域が不足した場合は先頭から ( size - 1 )
文字のみが格納され、
最後に TNULL
が格納される。
選択領域がヌルの場合は、buff
には空文字列、
即ち、*buff
に TNULL
が設定され、
関数値として 0 が戻る。
cut = 0
の場合は、
取り出した選択領域はそのままボックスのデータとして残し、
cut != 0
の場合は削除する。
buff = NULL
の場合は、格納は行なわないが、
選択領域全体の文字数が関数値として戻る。
この場合は、cut
は無視され、選択領域が削除されることはない。
なお、ボックスが「表示状態」の時は、 再表示が行なわれる。
EX_ADR : アドレス(buff)のアクセスは許されていない。 EX_PAR : パラメータが不正である(size が不正)。 EX_PID : パーツ(pid)は存在していない(テキスト/数値ボックスではない)。
|
W cins_txt(W pid, PNT pos, TC *buff)
W pid パーツID PNT pos 挿入位置 TC *buff 挿入文字列
≧0 正常(関数値は全体の文字数) <0 エラー(エラーコード)
pid
で指定したテキスト / 数値ボックスの pos
で指定した位置に、
buff
で指定した領域に格納されている文字列
(最後は TNULL
) を挿入し、
そのボックスを「入力状態」とし、
挿入した文字列を新たな選択領域とする。
pos
はウィンドウ / パネルの相対座標で指定される。
挿入した結果、最大の文字数を超えた場合は、
後ろは切り捨てられる。関数値としては挿入後の全体の文字数が戻る。
pos
として {0x8000, 0x8000}
を指定することで、
buff
で指定した文字列によって選択領域を置換することができる。
これは、メニューによるトレー操作に対応する。
なお、パーツが「表示状態」の時は、再表示が行なわれる。
EX_ADR : アドレス(buff)のアクセスは許されていない。 EX_PAR : パラメータが不正である(挿入テキスト/挿入位置が不正)。 EX_PID : パーツ(pid)は存在していない(テキスト/数値ボックスではない)。
|
ERR cget_pos(W pid, RECT *r)
W pid パーツID RECT *r パーツ位置矩形
≧0 正常 <0 エラー(エラーコード)
pid
で指定したパーツの現在の表示領域を取り出し、
r
で指定した領域に格納する。
取り出された表示領域は、パーツの属するウィンドウ/パネルの相対座標で示される。
EX_ADR : アドレス(r)のアクセスは許されていない。 EX_PID : パーツ(pid)は存在していない。
|
ERR cset_pos(W pid, RECT *r)
W pid パーツID RECT *r パーツ位置矩形
≧0 正常 <0 エラー(エラーコード)
pid
で指定したパーツの表示領域を r
で指定した領域に変更する。
これは、位置の移動と大きさの両方の変更となる。
r
は、そのパーツの属するウィンドウ / パネルの相対座標で指定する。
パーツが「表示状態」の場合は、新しい領域に再表示されるが、 元の領域の表示に関しては何も行なわない。
EX_ADR : アドレス(r)のアクセスは許されていない。 EX_PID : パーツ(pid)は存在していない。 EX_PAR : パラメータが不正である(指定矩形値が不正)。
|
W cget_sts(W pid, W *wid)
W pid パーツID W *wid ウィンドウID格納領域
≧0 正常(関数値はパーツのタイプ/属性/状態) <0 エラー(エラーコード)
pid
で指定したパーツが属するウィンドウ/パネルIDを取り出し、
wid
で指定した領域に格納し、パーツのタイプ/属性/状態ワード
(図79 パーツのタイプ/属性/状態参照)
を関数値として戻す。
wid=NULL
の場合は、ウィンドウ / パネルIDは戻されない。
また、表示属性のビットは常に 0 となっている(登録時のみ有効)。
EX_ADR : アドレス(wid)のアクセスは許されていない。 EX_PID : パーツ(pid)は存在していない。
|
ERR cchg_par(W pid, UW cmd)
W pid パーツID UW cmd cmd は以下の4種の状態指定の任意の組合せ (OR) となる。
P_EMPHAS / P_NORMAL | -- 強調枠 / 通常枠 |
P_NOFRAME / P_FRAME | -- 枠無し / 枠有り |
P_DISABLE / P_ENABLE | -- 操作禁止 / 操作許可 |
P_INACT / P_ACT | -- 不能状態 / 可能状態 |
≧0 正常 <0 エラー(エラーコード)
pid
で指定したパーツの状態を、
cmd
で指定した内容に変更する。
パーツが「表示状態」の時は、再表示が行なわれる。
EX_PAR : パラメータが不正である(cmdが不正:P_EMPHASとP_NORMALの組み合わせ等)。 EX_PID : パーツ(pid)は存在していない。
|
ERR cchg_pwd(W wid, UW cmd)
W wid ウィンドウID W cmd cchg_par() の場合と同じ。
≧0 正常 <0 エラー(エラーコード)
wid
で指定したウィンドウ/パネルに属する全てのパーツの状態を、
cmd
で指定した内容に変更する。
但し、P_SBAR = 1
の属性を持つ、ボリュームは対象外となる。
パーツが「表示状態」の時は、再表示が行なわれる。
EX_PAR : パラメータが不正である(cmdが不正:P_EMPHASとP_NORMALの組み合わせ等)。 EX_WID : ウィンドウ(wid)は存在していない。
|
ERR cidl_par(W wid, PNT *pos)
W wid ウィンドウID PNT *pos ポインタ位置座標
≧0 正常 <0 エラー(エラーコード)
wid
で指定したウィンドウ/パネルに属するすべてのパーツに対しての定常処理を行なう。
この場合、P_SBAR = 1
の属性のボリュームも対象となる。
指定したウィンドウが、
入力受付状態でない場合は、何もしない。
*pos
は、その時点のポインタの wid
で指定したウィンドウの相対座標位置であり、
ポインタの形状変更に使用される。pos = NULL
とすればポインタの形状変更を行なわないが、
通常 1 つでもパーツを有するウィンドウ / パネルは pos != NULL
で、この関数をコールする必要がある。
定常処理とは以下に示す内容のものである。
pos
が NULL
でない場合、pos
で示された位置に応じて、
ポインタの形状の更新を行なう(「可能状態」、「許可状態」かつ「表示状態」のパーツが対象となる)。
ボリューム/スクロールセレクタのノブ部分の場合 -- 縦、または横の「移動手」 テキストボックス/数値ボックスの選択領域の場合 -- 斜めの「移動手」 対象パーツ上で上記以外の場合 -- 「選択指」 対象パーツ上にない場合 -- 変更しない
EX_ADR : アドレス(pos)のアクセスは許されていない。 EX_WID : ウィンドウ(wid)は存在していない。
|
W cexe_par(W pid, WEVENT *ev)
W pid パーツID WEVENT *ev 処理するイベント
≧0 正常(関数値下位16bit): 01PC SSSS SSSS SSSS P = 0: 処理の終了 = 1: 処理の中断 C = 0: 現在値/状態の変化無し = 1: 現在値/状態の変化有り S : 各種のコード <0 エラー(エラーコード)
pid
で指定したパーツの固有の動作をおこなう。
*ev
はパーツが処理するウィンドウイベントである。
テキストボックスシークレットテキストボックス数値ボックスシリアルボックス
(以下、ボックスパーツ)
を動作させた場合にもパーツ内でイベント待ちにならないのを除いて、
cact_par
と同じ機能を持つ。
ボックスパーツを実行した場合、
範囲選択などのドラッグ操作中は cact_par
と同じにイベントが取り出されるが、
それ以外ではイベントは取り出されず、ev
に EV_NULL
を格納して
P_EVENT
を返す
(通常は、P_EVENT
で EV_NULL
が設定されることはない)。
この場合、アプリケーションは wget_evt
によって新たなウィンドウイベントを取り出し
cexe_par
に渡す必要がある(イベントを正しく渡さなかった場合の動作は保証されない)。
なお、P_EVENT
が得られた場合で
EV_NULL
でなかった場合は、cact_par
と同様にイベントを処理し、
ev
に EV_NULL
を格納して再度
cexe_par
を呼ぶ必要がある。
EX_ADR : アドレス(ev)のアクセスは許されていない。 EX_PID : パーツ(pid)は存在していない。