サンプルイベントプロシージャ・インプットフィールド編リターンキーで特定のイベントプロシージャを実行するにはイベントプロシージャにおいて、特定のイベントプロシージャを起動することをしてみましょう。 ここでは、リターンキーを入力で、"入力確定"なる名称を持つイベントプロシージャを 起動する例をあげます。
//WSEV_KEY_HOOKトリガで WSCvifield インスタンスに設定します。
#include "WSDkeyboard.h"
void cbop(WSCbase* object){
(A)入力されつつあるキーを取得。
long key = WSGIappKeyboard()->getKey();
(B)キーがリターンキーであれば
if (key == WSK_Return){
//"入力確定"なる名称をもつイベントプロシージャを実行。
object->execProcedure("入力確定");
}
}
(A)でキーボードグローバルインスタンスから、入力されつつあるキーを取得します。
(B)でリターンキーかどうか判別し、もしそうだったら(C)で、"入力確定"なるEP名称を
もつEPを実行させます。この入力確定実行イベントプロシージャは、リターンキーによる入力確定動作を行い たい場合によく用いられます。 初期時入力で前回入力文字列をクリアするには新たらにフォーカスがあたって入力を開始する場合や 新たらにマウスでクリックされて入力を開始する場合に 前回入力文字列をクリアするイベントプロシージャを作成してみましょう。 大きな流れとしては次の様になります。
#include <WSDkeyboard.h>
//フォーカスがあたっていたインプットフィールドを保持する変数
static WSCbase* _focus_if = NULL;
//WSEV_FOCUS_CH トリガで起動するサブEP
static void _focus_ch_(WSCbase* object){
//(A) フォーカスが移動して来たのかを調査
if (_focus_if != object && object->getFocus() != False){
//(B)他のオブジェクトからフォーカスが移動してきた場合、
//クリアするタイミング。そのことをフラグに覚えておく
object->setUserData("CLEAR TIMING",(void*)1);
//(C)新たにフォーカスがあたったのは、自分。
_focus_if = object;
}
}
//WSEV_MOUSE_PRESS トリガで起動するサブEP
static void _btn_press_(WSCbase* object){
//(D) マウスでクリックされたら
//クリアするタイミング。そのことをフラグに覚えておく
object->setUserData("CLEAR TIMING",(void*)1);
object->setProperty(WSNcursorPos,0);
//(E)新たにフォーカスがあたったのは、自分。
_focus_if = object;
}
//WSEV_KEY_PRESS トリガで起動するサブEP
static void _key_hook_(WSCbase* object){
//(F) キー入力時に、クリアタイミングかどうか調査
long fl =(long)object->getUserData("CLEAR TIMING");
if (fl == 1){
long key = WSGIappKeyboard()->getKey();
//(G)クリアタイミングで、移動キーでなければ
if (key != WSK_Tab &&
key != WSK_Up &&
key != WSK_Down &&
key != WSK_Left &&
key != WSK_Right ){
//(H)クリア。
object->setProperty(WSNlabelString,"");
}else{
return;
}
}
//(I)クリアタイミングフラグを落とす。
object->setUserData("CLEAR TIMING",(void*)0);
}
//前回入力文字列クリア本体
//WSEV_INITIALIZE トリガでインプットフィールドに設定します。
void ifdclr(WSCbase* object){
//フォーカスがあたったときに起動するサブEPを設定
WSCprocedure* ac1 = new WSCprocedure("ac1",WSEV_FOCUS_CH);
ac1->setFunction(_focus_ch_,"_focus_ch_");
object->addProcedure(ac1);
//マウスがクリックされたときに起動するサブEPを設定
WSCprocedure* ac2 = new WSCprocedure("ac2",WSEV_MOUSE_PRESS);
ac2->setFunction(_btn_press_,"_btn_press_");
object->addProcedure(ac2);
//キー入力されたときに起動するサブEPを設定
WSCprocedure* ac3 = new WSCprocedure("ac3",WSEV_KEY_HOOK);
ac3->setFunction(_key_hook_,"_key_hook_");
object->addProcedure(ac3);
}
まずフォーカス関連のサブEPについて説明します。
フォーカスが新たにあたったことを知るために、前回フォーカスがあたっていた
オブジェクトを静的変数で保持しておきます。
(A)では、ます、保持しておいたオブジェクトと自分が異なるかを調べます。
異なれば新たにフォーカスがあたったことを意味し、(B)でクリアフラグを
立てます。次に(C)で自分をその静的変数に保持します。次にマウスのクリック関連のサブEPについて説明します。 (D)でクリアフラグを立てて入力カーソルを先頭に設定します。 次に(E)で自分をフォーカス保持の静的変数に保持します。 次にキー入力関連のサブEPについて説明します。 キー入力関連のサブEPでは、クリアフラグがたっている場合、文字列をクリアして、 そのクリアフラグを落とします。まず、(F)でクリアフラグが立っているか調べます。 (G)では移動キーで、クリアされては悲しいので、そのキーを判別して、 (H)でクリアし、(I)でクリアフラグを落とします。 Document Release 3.00 For Use with Wide Studio Release 3.00, Summper 2002
|