
The GUI Planning and Development Tools.
Version 2.0
「パネルで〜ぐ Version 2.0」は、MS-DOS版のアプリケーションでGUIを設計し、作成するためのツールとライブラリのシステムです。高機能なウィンドウ形式のアプリを簡単に手早く作成することができます。
パネルで〜ぐのイベント
パネルで〜ぐにはイベントと言う、システムがユーザ関数をコールする機構を用意しました。普通のプログラムでは、ユーザがメイン部分を記述しライブラリをコールしますが、イベントでは逆です。ではイベントがなぜ発生し、どんな役に立つのでしょうか。
例えばマウスやキーの操作で、カレントのエレメントが移動するときには、現在カレントのエレメント番号で、PIV_POST イベントが発生し、そしてカレントを移動し、新しくカレントになったエレメントの番号で、 PIV_PRE イベントが発生します。ユーザがイベントで何もしなければ、通常の処理でカレントが移動します。しかし入力した内容によって移動するエレメントを変えたいとか、何の入力するのかメッセージを表示したいと言う様な、通常でない動作が必要なことがあります。この場合は、PIV_POST,PIV_PRE 等のイベントで、ユーザが小さなプログラムを記述することでそれが可能です。
つまりイベントは、通常でない動作をユーザがプログラムを記述することで可能にする手段を提供します。通常でない動作を記述したプログラムを、例外処理と呼んでいます。そして例外処理の関数をイベント関数と呼びます。イベントを上手に使
うことによって、さまざまなテクニックを行使できます。紹介プログラムのTECNIXでその一部を紹介していますので参考にしてください。
イベント関数ではまず種類を調べ自分が使用したいイベントか調べます。その後で普通なら、処理したいエレメントかどうか調べます。この様にイベント種類やエレメント番号を調べて目的の物だけ探すことを、イベントをフックすると言います。これは、多種多様なイベントのうち必要な物だけ「針を掛けて釣り上げて処理する」と言う意味あいがあります。
WINDOWシステムが発行するイベントの種類
| WINV_CLOSE | ウィンドウがクローズする場合に発生 |
| WINV_OPEN | ウィンドウがオープンする場合に発生 |
| WINV_MOVE | ウィンドウを移動した時に発生 |
| WINV_RESIZE | ウィンドウのサイズを変更した時に発生 |
| WINV_MAXFRAME | ウィンドウを最大化した時に発生 |
| WINV_MINIMUM | ウィンドウを最初化した時に発生 |
| WINV_RESTORE | ウィンドウを復元した時に発生 |
| WINV_HELP | ヘルプボタンを押した時に発生 |
| WINV_CURRENT | ウィンドウがカレントになった時に発生 |
| WINV_UNCURRENT | ウィンドウが非カレントになった時に発生 |
| WINV_PRIORITY | プライオリティボタンを押した時に発生 |
| WINV_DISP | クライアント領域を表示する必要がある時に発生 |
| WINV_KEY | 何かキーが押されると発行 |
| WINV_MOUSE | マウスカーソルの移動かボタンが押された時に発生 |
| WINV_IDLE | 1ループごとに発生 |
| WINV_GETFONT | ユーザフォントを取得する時に発生 |
WINV_CLOSE,WINV_OPEN 等は、その処理を実行する前と後の2回コールします。前ではその処理をキャンセルでき、後ではメモリの確保や解放を行えます。
PIシステムが発行するイベント
PIV_DISP
このイベントは、ユーザが独自の表示を行うためのイベント
です。エレメントの各部を表示する際に、ユーザが描けたら多
彩な表現が可能な部位を選んでイベントが発生します。wparam
で部位を表します。よってエレメントの種類や部位によってそ
の変数は大きく異なります。例えばスライダの'つまみ'の表示
の場合は、wparam が PIDV_SLDTUMAMI で ep に以下の内容が
入ってイベントが発生します。
pp->ep.i[0] x1座標
pp->ep.i[1] y1座標
pp->ep.i[2] x2座標
pp->ep.i[3] y2座標
pp->ep.i[4] 0・オフ描画 1・オン描画
PIV_PRE,PIV_POST
キーやマウスの操作でカレントのエレメントが移動したとき
に、現在のカレントエレメントのパラメータで PIV_POST を発
行し、新たにカレントになるエレメントで PIV_PRE を発行し
ます。
PIV_KEY
キーの入力後、カレントのエレメントでキーの判断を行いま
す。そして入力したキーがエレメントの操作キーならその機能
番号を wparam にしてコールします。wparam はその内容がエ
レメントによって異なります。0 を返せば通常処理を行います
が 1 を返した場合は入力したキー操作をキャンセルします。
PIV_MOUSE
マウスカーソルの位置を調べ、もしそれがエレメントの対象
部位にあればこのイベントがコールされます。wparam にその
部位の名称とクリックの情報が渡されます。マウスカーソルが
移動するだけでイベントが発生します。イベントが返す値によ
りキャンセルできます。
PIV_CHANGE
キーやマウスの操作で、エレメントの値(内容)が変更され
た場合にこのイベントが発生します。但し選択系のエレメント
で PIELEM の at の PISEL_CEVENT が立っている場合は、キー
やマウスの操作で値が同じでも、選択動作を実行するとこのイ
ベントが発生します。
PIV_EXEC
実行エレメントがコールするイベントです。メニューの場合
は、PISUBM の next の下16ビット値が wparam に渡されま
す。ボタンの場合は PIELEM の def の下16ビットを渡しま
す。
メニュー系の実行エレメントでは、PIPARAM の ep.c にメニ
ューの何番目のボタンを押したかの情報がネストの深さだけ順
に格納されます。
PIV_STRCNV
整数・小数・16進・日付・時間エレメントなどで、入力され
た文字列を数値に変換する時にこのイベントが発生します。0
を返すと、システムが標準の変換処理を行います。エラーの判
断や特別の入力に対応した処理を加えたい時に使用します。
PIV_NUMBTN
このイベントは、数値系のエレメントに付属の[+][−]のボ
タンを、マウスかキーで操作したときに発生します。
PIV_SLIDER
スライダの「つまみ」を操作して、値が変わった時にこのイ
ベントが発生します。ただし pp->el->at の b14:PISLD_EVENT
が立ってない場合はこのイベントは発生しません。その場合は
変わりに PIV_CHANGE イベントが発生します。
しかし、PIV_CHANGE イベントではドラッグ中のイベントはあ
りませんが、この PIV_SLIDER は値を変更する度に発生します。
wparam に旧値が入っています。新値は、*(int *)pp-v です。
PIV_ROLLSEL
PIELEM の at の PIROLL_PRG が立っているときにこのイベン
トが発生します。ローリング選択エレメントのn個目(0〜)の選
択肢のポインタを pp->lparam に代入してください。システム
はその文字列を表示します。
PIV_SCRSEL
PIELEM の at が PISSEL_PRG のときにこのイベントが発生
します。スクローリング選択エレメントのn行目(0〜)の選択
肢のポインタを pp->lparam に代入してください。システムは
その文字列を表示します。
PIV_TBL2MEM,PIV_MEM2TBL
表構造の行干渉のイベントです。値をパックする必要がある
場合や、ファイルから内容を取得するときや、行単位に操作を
加える時に使用します。システムが、行単位のデータを読み出
す時と、書き出す必要があるときに、このイベントが発生しま
す。フラグによってはT行分のデータしか確保しません。
PIV_EDIT2
このイベントは、エディト入力エレメントの検索や置換のパ
ラメータの入力を行うイベントです。もしこのイベントをフッ
クしないで0を返すと、システムは何もしないで終了します。
つまり検索や移動や置換を何も行いません。
PIV_IDLE
このイベントは、メーター系エレメントが発行するイベント
です。PIEL_IDLE(WINV_IDLEで実行)でこのイベントが発生しま
す。ユーザは対象のメーターエレメントのために値を取得し、
pp->v に設定します。もし値を変更してメーターを表示する時
は、1か−1を返し、表示をしない場合は0を返します。
PIV_USER
このイベントはユーザ処理エレメントが発行するイベントで
す。wparam にはいろいろな情報がふくまれています。
PIV_UDRAW
このイベントは、描画エレメントにユーザ描画エレメントが
あるときに発行します。ツールで設定した座標や色情報が渡さ
れます。
ホームページに戻る
パネルで〜ぐのホームページに戻る
株式会社アークピット