WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index 目次

> ## サンプルイベントプロシージャ・インプットフィールド編

> ### リターンキーで特定のイベントプロシージャを実行するには

> イベントプロシージャにおいて、特定のイベントプロシージャを起動するこ とをしてみましょう。ここでは、リターンキーを入力で、"入力確定"なる名 称を持つイベントプロシージャを起動する例をあげます。

>     //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を実行させます。 この入力確定実行イベントプロシージャ は、リターンキーによる入力確定動作を行いたい場合によく用いられます。

> ### 初期時入力で前回入力文字列をクリアするには

> 新たらにフォーカスがあたって入力を開始する場合や新たらにマウスでクリッ クされて入力を開始する場合に前回入力文字列をクリアするイベントプロシー ジャを作成してみましょう。大きな流れとしては次の様になります。
> - (1)フォーカスが新たにあたった場合、クリアフラグを立てます。
> - (2)マウスがクリックされた場合、クリアフラグを立てます。
> - (3)キー入力された場合、クリアフラグがたっていたら、クリアします。
> - (1),(2),(3)のサブイベントプロシージャを張り付けて初期化します。

>     #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)で自分をその静的変数に保持します。
> 次にマウスのクリック関連のサブＥＰについて説明します。(D)でクリアフ ラグを立てて入力カーソルを先頭に設定します。次に(E)で自分をフォーカ ス保持の静的変数に保持します。
> 次にキー入力関連のサブEPについて説明します。キー入力関連のサブEPでは、 クリアフラグがたっている場合、文字列をクリアして、そのクリアフラグを 落とします。まず、(F)でクリアフラグが立っているか調べます。(G)では移 動キーで、クリアされては悲しいので、そのキーを判別して、(H)でクリア し、(I)でクリアフラグを落とします。

Document Release 3.20 for WideStudio ver 3.20, Oct 2002

WideStudio documents index | 目次

Copyright(C) T. Hirabayashi, 2000-2002 | Last modified: Oct 27, 2002