WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index Table of contents

> ## 编辑范例事项过程的输入区域

> ### 使用回车键实行特定的事项过程

> 在事项过程中，试着启动特定的事项过程。这里，我们将启动名为”输入确定”的事项过程。

>     //A sample of WSEV_KEY_HOOK trigger.
>     #include "WSDkeyboard.h"
>     void cbop(WSCbase* object){
>       (A)Get the pressed key.
>       long key = WSGIappKeyboard()->getKey();
>       (B)If the key is return..
>       if (key == WSK_Return){
>         //Execute the procedure which name is "InputFixed".
>         object->execProcedure("InputFixed");
>       }
>     }

> (A)通过键盘取得正在输入的文字。
> (B)判断输入值是否为回车键，如果是，在(C)启动名为”输入确定”的EP。 这种通过输入确认是否实行事项过程的方法，常常被使用于通过输入回车键确定动作的情况。

> ### 输入文字时自动删除既有字符

> 接着制作当光标处开始输入新的文字时，该区域中既有字符自动删除的事项过程。大概的流程。如下。
> - (1)移动到光标处，启动删除处理。
> - (2)点击鼠标时，启动删除处理。
> - (3)文字被键入时，如果删除处理已经被启动，删除既有文字。
> - (1)，(2)，(3)的事项过程的子项目被初期化。

>     #include <WSDkeyboard.h>
>     //To contain the last focused input field.
>     static WSCbase* _focus_if = NULL;
>     //(1)A sub-procedure with WSEV_FOCUS_CH
>     static void _focus_on_(WSCbase* object){
>       //(A) Examine whether the Instance is focused.
>       if (_focus_if != object && object->getFocus() != False){
>         //(B)It need to clear the string!
>         //Set the clear flag True.
>         object->setUserData("CLEAR TIMING",(void*)1);
>         //(C)store that the last focused one is.
>         _focus_if = object;
>       }
>     }
>     //(2)A sub-procedure with WSEV_MOUSE_PRESS
>     static void _btn_press_(WSCbase* object){
>       //(D) if clicked by the mouse pointer,
>       // it needs to clear the string!
>       //  Set the clear flag True.
>       object->setUserData("CLEAR TIMING",(void*)1);
>       object->setProperty(WSNcursorPos,0);
>       //(E)store that the last focused one is.
>       _focus_if = object;
>     }
>     //(3)A sub-procedure with WSEV_KEY_PRESS
>     static void _key_hook_(WSCbase* object){
>       //(F) See the clear flag to clear the last input string.
>       long fl =(long)object->getUserData("CLEAR TIMING");
>       if (fl == 1){
>         long key = WSGIappKeyboard()->getKey();
>         //(G) Clear the string,if the key is not cursor key.
>         if (key != WSK_标签 &&
>             key != WSK_Up &&
>             key != WSK_Down &&
>             key != WSK_Left &&
>             key != WSK_Right ){
>           //(H)Clear...
>           object->setProperty(WSNlabelString,"");
>         }else{
>           return;
>         }
>       }
>       //(I)Set the clear flag False.
>       object->setUserData("CLEAR TIMING",(void*)0);
>     }

>     //The main-procedure.
>     //(4)Set the input field Instance with WSEV_INITIALIZE trigger.
>     void ifdclr(WSCbase* object){
>       //Setup the sub-procedure(1) with WSEV_FOCUS_CH
>       WSCprocedure* ac1 = new WSCprocedure("ac1",WSEV_FOCUS_CH);
>       ac1->setFunction(_focus_ch_,"_focus_ch_");
>       object->addProcedure(ac1);

>       //Setup the sub-procedure(2) with WSEV_MOUSE_PRESS
>       WSCprocedure* ac2 = new WSCprocedure("ac2",WSEV_MOUSE_PRESS);
>       ac2->setFunction(_btn_press_,"_btn_press_");
>       object->addProcedure(ac2);

>       //Setup the sub-procedure(3) with WSEV_KEY_PRESS
>       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.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | Table of contents

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004