[ 前へ | 目次 | 次へ ]

イベント処理

ここでは、ユーザーがGUIコンポーネントを操作した際に処理を行う、「イベント処理」について解説します。

スポンサーリンク


イベントとは

イベントとは、プログラムの外側から、プログラムに対して行われる操作の事です。 例えば、ユーザーがボタンをクリックする事や、マウスを動かす事、ウィンドウを閉じる事などが挙げられます。

GUIを備えたプログラムが、アプリケーション・ソフトウェアとして意味を持つためには、 イベントが発生した際に何らかの処理を実行しなければなりません。 さもなければ、GUIコンポーネントはただの飾りとなってしまいます。

イベントハンドラ関数

VCSSLを含む一般のプログラミング言語では、 イベントが発生すると、それに対応する関数がシステム側から呼ばれます。 このような関数の事を一般に「イベントハンドラ関数」と呼びます。 イベントハンドラ関数の内容はあらかじめ用意されているのではなく、 プログラマが独自に記述します。

イベントハンドラ関数の模式図。
イベントハンドラの概念図
「ボタンがクリックされる」などのイベントが発生すると、イベントハンドラ関数が実行される。

VCSSLでは、処理したいイベントの種類に応じて特定の関数名と引数を持たせると、 それが自動的にイベントハンドラ関数と見なされ、 イベント発生時に呼び出されます。呼び出し時の引数には、 イベントに関する情報が送られてきます。 イベントハンドラ関数の中身には、イベントが発生した際に行わせたい処理を記述します。 なお、VCSSLのイベントハンドラ関数は基本的にvoid型であり、戻り値を返しません。

ウィンドウイベント処理

ウィンドウに関するイベントを処理するには、以下のイベントハンドラ関数を使用します。

イベントハンドラ関数 引数 イベント
onWindowOpen int id ウィンドウが起動した際に呼び出されます。
onWindowClose int id ウィンドウが閉じた際に呼び出されます。
onWindowMove int id,
int x,
int y
ウィンドウが動いた際に呼び出されます。
onWindowResize int id,
int width,
int height
ウィンドウサイズが変わった際に呼び出されます。
onWindowShow int id ウィンドウが表示された際に呼び出されます。
onWindowHide int id ウィンドウが非表示になった際に呼び出されます。

引数のidには、イベントが発生したウィンドウのGUIコンポーネントIDが渡されます。 また、引数のwidth, heightには、それぞれウィンドウの幅、高さが渡されます。

ここで特に重要なのがonWindowClose関数です。 このイベントハンドラ関数内でexit命令をコールするようにすると、 一般的なソフトウェアのような「 ウィンドウを閉じると処理を終了する 」という機能を実現できます。

これまで、VCSSLプログラムを終了させるには、 VCSSLコンソールを手動で閉じるしかありませんでした。 しかし、ウィンドウを閉じればプログラムが自動終了するようにしておけば、 VCSSLコンソールは不要なので、hide( )命令で隠してしまっても問題ありません。

ボタンイベント処理

ボタンに関するイベントを処理するには、以下のイベントハンドラ関数を使用します。

イベントハンドラ関数 引数 イベント
onButtonClick int id,
string text
ボタンがクリックされた際に呼び出されます。

引数のidには、イベントが発生したボタンのGUIコンポーネントIDが渡されます。 また、引数のtextには、たボタンの文字列が渡されます。

セレクトフィールドイベント処理

セレクトフィールドに関するイベントを処理するには、以下のイベントハンドラ関数を使用します。

イベントハンドラ関数 引数 イベント
onSelectFieldClick int id,
string text
セレクトフィールドがクリックされ、項目が選択された際に呼び出されます。

引数のidには、イベントが発生したセレクトフィールドのGUIコンポーネントIDが渡されます。 また、引数のtextには、選択された項目名が渡されます。

チェックボックスイベント処理

チェックボックスに関するイベントを処理するには、以下のイベントハンドラ関数を使用します。

イベントハンドラ関数 引数 イベント
onCheckBoxClick int id,
bool state
チェックボックスがクリックされた際に呼び出されます。

引数のidには、イベントが発生したチェックボックスのGUIコンポーネントIDが渡されます。 また、引数のstateには、チェックボックスのON/OFF状態が渡されます。

キーイベント処理

GUIコンポーネント上でキーボードのキーを操作した際には、キーイベントが発生します。

ただし、キーイベントを利用するには注意が必要です。 それは、キー操作がどのGUIコンポーネントに対して行われるかという点に関してです。 キーイベントを利用するには、ウィンドウ上に、 テキストフィールドなどのキーボード入力を扱うGUIコンポーネントを配置してはいけません。 また、ボタンなどの特定のキー操作(ENTERなど)に反応するGUIコンポーネントの存在も考慮が必要です。

キーイベントを利用する際は、 ウィンドウ上に配置するのはなるべく テキストラベルかグラフィックスラベルのみに限定する事が推奨されます。

キーイベントを処理するには、以下のイベントハンドラ関数を使用します。

イベントハンドラ関数 引数 イベント
onKeyDown int id,
string key
キーが押された際に呼び出されます。引数keyには、キーラベルの文字列が格納されています。記号のキーは、記号の文字列に変換されます。
onKeyUp iint id,
string key
キーが離された際に呼び出されます。引数keyには、キーラベルの文字列が格納されています。記号のキーは、記号の文字列に変換されます。
onKeyDown int id,
int keyCode
キーが押された際に呼び出されます。引数keyCodeには、キーを区別するため、GUIライブラリに1対1で定義された値が格納されています。
onKeyUp iint id,
int keyCode
キーが離された際に呼び出されます。引数keyCodeには、キーを区別するため、GUIライブラリに1対1で定義された値が格納されています。

引数のidには、イベント発生対象のGUIコンポーネントIDが渡されます。

なお、2つめの引数は、string 型とint型の2通りがあります。 前者は、キーの表面に印字された(キーラベルの)文字列が格納されます。 例えば「A」のキーを押した際は ”A” が、「@」のキーを押した際は ”@” が格納されます。 それに対して後者は、キーに1対1で割り振られた整数値が格納され、 例えば「@」のキーを押した際はKEY_ATの値が格納されます。

前者と後者にはそれぞれメリットとデメリットがあります。 前者は比較的手軽に扱える上、 連続したキー入力内容をstring変数末尾に追記していくような処理に便利です。 反面、キー判別に key == "DOWN" といったリテラルの文字列比較を多用するのはミスタイプに弱く、 厳格性に欠けるため、大きなプログラムでは好ましくありません。 それに対して後者は、厳格な記述が可能ですが、 小さなプログラムでは記述が面倒になる場合があります。

文字列 キーコード 文字列 キーコード
A〜Z KEY_A〜KEY_Z 0〜9 KEY_0〜KEY_9
F1〜F12 KEY_F1〜KEY_F12 @ KEY_AT
/ KEY_SLASH
ENTER KEY_ENTER + KEY_PLUS
SPACE KEY_SPACE - KEY_MINUS
TAB KEY_TAB , KEY_COMMA
SHIFT KEY_SHIFT . KEY_PERIOD
CONTROL KEY_CONTROL ALT KEY_ALT
; KEY_SEMICOLON [ KEY_LEFT_SQUARE_BRACKET
^ KEY_CIRCUMFLEX ] KEY_RIGHT_SQUARE_BRACKET
UP KEY_UP DOWN KEY_DOWN
LEFT KEY_LEFT RIGHT KEY_RIGHT

マウスウイベント処理

GUIコンポーネント上でマウスを動かしたり、 クリックしたりすると、マウスイベントが発生します。 マウスイベントを処理するには、以下のイベントハンドラ関数を使用します。

マウス操作は行えるアクションが多彩なので、 それに応じてイベントハンドラも様々なものが用意されています。

イベントハンドラ関数 引数 イベント
onMouseOver int id,
int x,
int y
マウスがコンポーネント領域内に入った際に呼び出されます。引数x, y には、コンポーネントの左上を原点とするマウスカーソル座標が格納されます。
onMouseOut int id,
int x,
int y
マウスがコンポーネント領域外に出た際に呼び出されます。引数x, y には、コンポーネントの左上を原点とするマウスカーソル座標が格納されます。
onMouseMove iint id,
int x,
int y
マウスがコンポーネント領域内で動いた際に呼び出されます。引数x, y には、コンポーネントの左上を原点とするマウスカーソル座標が格納されます。
onMouseCkick int id,
int x,
int y,
int button,
int count

マウスのボタンがクリックされた際に呼び出されます。具体的には、環境に設定された短い時間内で、マウスボタンが「 押し離し 」された場合に呼ばれます。

引数buttonには、押されたボタンを区別するため、GUIライブラリに定義された値が格納されます。定数値は、右, 左, 中央ボタンがそれぞれMOUSE_RIGHT, MOUSE_LEFT, MOUSE_MIDDLEという名称です。

最後の引数countは、連続して押し離しされた回数が格納されます。つまりシングルクリックなら1、ダブルクリックなら2となります。この値は、GUIライブラリにもそれぞれMOUSE_SINGLE, MOUSE_DOUBLEと定義されており、比較などで用いるとミスタイプを防げます。

onMouseDown int id,
int x,
int y,
int button
マウスのボタンが押された際に呼び出されます。引数buttonには、押されたボタンを区別するため、GUIライブラリに定義された値が格納されます。定数値は、右, 左, 中央ボタンがそれぞれMOUSE_RIGHT, MOUSE_LEFT, MOUSE_MIDDLEという名称です。
onMouseUp int id,
int x,
int y,
int button
マウスのボタンが離された際に呼び出されます。引数buttonには、押されたボタンを区別するため、GUIライブラリに定義された値が格納されます。定数値は、右, 左, 中央ボタンがそれぞれMOUSE_RIGHT, MOUSE_LEFT, MOUSE_MIDDLEという名称です。
onMouseDrag int id,
int x,
int y,
int button
マウスのいずれかのボタンがドラッグされた際に呼び出されます。引数buttonには、押されたボタンを区別するため、GUIライブラリに定義された値が格納されます。定数値は、右, 左, 中央ボタンがそれぞれMOUSE_RIGHT, MOUSE_LEFT, MOUSE_MIDDLEという名称です。
onMouseScroll int id,
int degree
マウスホイールが操作された際に呼び出されます。引数degreeにはホイール回転量が渡されます。

引数のidには、イベント発生対象のGUIコンポーネントIDが渡されます。 また、引数のx,yには、GUIコンポーネント左上頂点から見たマウスカーソルの位置座標が渡されます。

プログラム例

実際に各種イベントハンドラ関数を使用してみましょう。 以下のように記述し、実行してみてください。

このプログラムを実行すると、ウィンドウが表示され、その上に様々なGUIコンポーネントが表示されます。 各GUIコンポーネントを操作すると、それに応じた処理が実行されます。

実行結果の図。
実行結果
※この画像は模式図です。実際のGUIデザインは、オペレーティングシステムの種類や、VCSSL処理システムのバージョン、その他環境によって異なります。


スポンサーリンク



この階層の目次
お知らせ

Vnanoがオープンベータ版に移行、VCSSLの実行環境で標準で実行可能に
2021年04月07日 - ソフト内組み込み用スクリプトエンジン&言語「 Vnano 」がオープンベータ版に移行し、併せて、VCSSLの実行環境でもVnanoコードの実行が可能になりました。詳細をお知らせします。

リニアングラフの最新版をリリース、2D版でも描画エンジンの直接操作が可能に
2021年04月03日 - リニアングラフ2D/3Dの最新版をリリースしました。それぞれのアップデート内容をお知らせします。今回から、2D版でもJava言語APIによる描画エンジンの直接操作が可能になりました。

RINPn のオープンベータ版をリリース! 詳細な公式ガイドも同梱&公開
2021年03月08日 - 2019年より開発進行中のプログラム関数電卓「 RINPn(りんぷん)」が、正式リリースに向けた最終準備段階として、オープンベータ版へと移行しました。その詳細をお知らせします。

新着
[公式ガイドサンプル] 引き算の結果を画面に表示する

「VCSSLスタートアップガイド」内のサンプルコードです。引き算を行って、結果を画面に表示します。
2021年07月08日
[公式ガイドサンプル] 式を複数行にわたって書く

「VCSSLスタートアップガイド」内のサンプルコードです。足し算を行う式を、複数行にわたって記述します。
2021年07月07日
[公式ガイドサンプル] 足し算の結果を画面に表示する

「VCSSLスタートアップガイド」内のサンプルコードです。足し算の結果を求めて、画面に表示します。
2021年07月06日
Vnano版 | ローレンツ方程式を数値的に解くプログラム

ローレンツ方程式を4次ルンゲ=クッタ法によって解き、グラフ描画用のデータを出力するプログラムです。
2021年02月12日
Vnano版 | 積分値のグラフ描画用データを出力するプログラム

数値的に積分を行い、結果の関数をグラフに描くためのデータを出力するコードです。
2020年12月20日
開発元Twitterアカウント