![]() | Programming Guide | WideStudio/MWT Index 目次 |
サンプルイベントプロシージャ・インプットフィールド編
リターンキーで特定のイベントプロシージャを実行するには
イベントプロシージャにおいて、特定のイベントプロシージャを起動するこ とをしてみましょう。ここでは、リターンキーを入力で、"入力確定"なる名 称を持つイベントプロシージャを起動する例をあげます。import mwt # WSEV_KEY_HOOKトリガで WSCvifield インスタンスに設定します。 def cbop(object): # (A)入力されつつあるキーを取得。 key = mwt.WSGIappKeyboard().getKey(); # (B)キーがリターンキーであれば if (key == mwt.WSK_Return): # "入力確定"なる名称をもつイベントプロシージャを実行。 object.execProcedure("入力確定"); return mwt.WSGFfunctionRegister("chop",chop)(A)でキーボードグローバルインスタンスから、入力されつつあるキーを取得します。
(B)でリターンキーかどうか判別し、もしそうだったら(C)で、"入力確定"な るEP名称をもつEPを実行させます。 この入力確定実行イベントプロシージャ は、リターンキーによる入力確定動作を行いたい場合によく用いられます。初期時入力で前回入力文字列をクリアするには
新たらにフォーカスがあたって入力を開始する場合や新たらにマウスでクリッ クされて入力を開始する場合に前回入力文字列をクリアするイベントプロシー ジャを作成してみましょう。大きな流れとしては次の様になります。
- (1)フォーカスが新たにあたった場合、クリアフラグを立てます。
- (2)マウスがクリックされた場合、クリアフラグを立てます。
- (3)キー入力された場合、クリアフラグがたっていたら、クリアします。
- (1),(2),(3)のサブイベントプロシージャを張り付けて初期化します。
import mwt # フォーカスがあたっていたインプットフィールドを保持する変数 focus_if = None # WSEV_FOCUS_CH トリガで起動するサブEP def _focus_ch_(object): # (A) フォーカスが移動して来たのかを調査 global focus_if if (focus_if != None and focus_if.getInstanceName() != object.getInstanceName() and object.getFocus() != mwt.False ): # (B)他のインスタンスからフォーカスが移動してきた場合、 # クリアするタイミング。そのことをフラグに覚えておく object.setVariantData("CLEAR TIMING",1); # (C)新たにフォーカスがあたったのは、自分。 focus_if = object; return mwt.WSGFfunctionRegister("_focus_ch_",_focus_ch_) #WSEV_MOUSE_PRESS トリガで起動するサブEP def _btn_press_(object): # (D) マウスでクリックされたら # クリアするタイミング。そのことをフラグに覚えておく object.setVariantData("CLEAR TIMING",1); object.setProperty("cursorPos",0); # (E)新たにフォーカスがあたったのは、自分。 global focus_if focus_if = object; return mwt.WSGFfunctionRegister("_btn_press_",_btn_press_) # WSEV_KEY_PRESS トリガで起動するサブEP def _key_hook_(object): # (F) キー入力時に、クリアタイミングかどうか調査 fl = object.getVariantData("CLEAR TIMING"); if (fl.getLong() == 1): key = mwt.WSGIappKeyboard().getKey(); # (G)クリアタイミングで、移動キーでなければ if (key != mwt.WSK_Tab and key != mwt.WSK_Up and key != mwt.WSK_Down and key != mwt.WSK_Left and key != mwt.WSK_Right ): # (H)クリア。 object.setProperty("labelString",""); else: return; # (I)クリアタイミングフラグを落とす。 object.setVariantData("CLEAR TIMING",0); return mwt.WSGFfunctionRegister("_key_hook_",_key_hook_) # 前回入力文字列クリア本体 # WSEV_INITIALIZE トリガでインプットフィールドに設定します。 def ifdclr(object): # フォーカスがあたったときに起動するサブEPを設定 object.addProcedure("ac1","_focus_ch_",mwt.WSEV_FOCUS_CH); # マウスがクリックされたときに起動するサブEPを設定 object.addProcedure("ac2","_btn_press_",mwt.WSEV_MOUSE_PRESS); # キー入力されたときに起動するサブEPを設定 object.addProcedure("ac3","_key_hook_",mwt.WSEV_KEY_HOOK); mwt.WSGFfunctionRegister("ifdclr",ifdclr)まずフォーカス関連のサブEPについて説明します。フォーカスが新たにあたっ たことを知るために、前回フォーカスがあたっていたインスタンスを静的変 数で保持しておきます。
(A)では、ます、保持しておいたインスタンスと自分が異なるかを調べます。 異なれば新たにフォーカスがあたったことを意味し、(B)でクリアフラグを 立てます。次に(C)で自分をその静的変数に保持します。
次にマウスのクリック関連のサブEPについて説明します。(D)でクリアフ ラグを立てて入力カーソルを先頭に設定します。次に(E)で自分をフォーカ ス保持の静的変数に保持します。
次にキー入力関連のサブEPについて説明します。キー入力関連のサブEPでは、 クリアフラグがたっている場合、文字列をクリアして、そのクリアフラグを 落とします。まず、(F)でクリアフラグが立っているか調べます。(G)では移 動キーで、クリアされては悲しいので、そのキーを判別して、(H)でクリア し、(I)でクリアフラグを落とします。
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |