| WideStudio Programming Guide | WideStudio Index Table of contents

> ## 输入字段事件过程范例

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

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

>     use mpfc;
>     #在 WSCvifield 实例中设置 WSEV_KEY_HOOK 触发器
>     sub cbop {
>       my ($object) = @_;
>       # (A)获得输入的键值
>       $key = mpfc::WSGIappKeyboard()->getKey();

>       # (B)如果输入的是回车键
>       if ($key == $mpfc::WSK_Return){
>         # 执行"输入确定"事件处理过程
>         $object->execProcedure("输入确定");
>       }
>       return;
>     }
>     1;

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

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

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

>     use mpfc;
>     # 保存获得输入焦点的输入字段的变量
>     $focus_if = 0;

>     # A sub-procedure with WSEV_FOCUS_CH
>     sub _focus_ch_ {
>       my ($object) = @_;
>       # (A) 判断是否获得输入焦点
>       if ($focus_if != 0 &&
>           $focus_if->getInstanceName() != $object->getInstanceName() &&
>           $object->getFocus() != &mpfc::False ){

>         # (B)输入焦点从其他对象处移动过来时，清除标志位置位
>         $object->setVariantData("CLEAR TIMING",1);
>         # (C)保存当前获得输入焦点的对象
>         $focus_if = $object;
>       }
>       return;
>     }
>     #WSEV_MOUSE_PRESS 触发器启动的事件过程
>     sub _btn_press_ {
>       my ($object) = @_;
>       # (D) 鼠标点击后，清除标志位置位
>       $object->setVariantData("CLEAR TIMING",1);
>       $object->setProperty("cursorPos",0);
>       # (E)保存当前获得输入焦点的对象
>       $focus_if = $object;
>       return;
>     }
>     # WSEV_KEY_PRESS 触发器启动的事件过程
>     sub _key_hook_ {
>       my ($object) = @_;
>       # (F) 键盘输入时，清除标志位置位
>       $fl = $object->getVariantData("CLEAR TIMING");
>       if ($fl->getLong() == 1){
>         $key = mpfc::WSGIappKeyboard()->getKey();
>         # (G)如果不是光标键，则清除输入内容
>         if ($key != $mpfc::WSK_Tab &&
>             $key != $mpfc::WSK_Up &&
>             $key != $mpfc::WSK_Down &&
>             $key != $mpfc::WSK_Left &&
>             $key != $mpfc::WSK_Right ){
>           # (H)清除
>           $object->setProperty("labelString","");
>         }else{
>           return;
>         }
>       }
>       # (I)清除标志位复位
>       $object->setVariantData("CLEAR TIMING",0);
>       return;
>     }

>     # 清除前次输入内容
>     #设置 WSEV_INITIALIZE 触发器
>     sub ifdclr {
>       my ($object) = @_;
>       # 获得输入焦点后，启动事件过程
>       $object->addProcedure("ac1","_focus_ch_",$mpfc::WSEV_FOCUS_CH);

>       # 鼠标点击后，启动事件过程
>       $object->addProcedure("ac2","_btn_press_",$mpfc::WSEV_MOUSE_PRESS);

>       # 键盘输入后，启动事件过程
>       $object->addProcedure("ac3","_key_hook_",$mpfc::WSEV_KEY_HOOK);
>     }
>     1;

> 首先对光标关联的子项目EP进行说明。为了知道光标是否改变了位置， 以静态变量预先保持上次光标位置。
> (A)，判断现位置与预先保持的位置是否不同。如果不同，即可知道光标被改变， 在(B)处启动删除处理。然后在(C)处将该静态变量赋予自身。
> 然后对鼠标点击相关的事件过程进行说明。在(D)处启动删除处理，并设定输入光标于前头。 然后在(E)处将新的值赋予光标保持的静态变量中。
> 然后对键入关联的事件过程进行说明。该事件过程中，如果删除处理已被启动，将删除字符串， 并结束删除处理。首先，在(F)处判断删除处理是否启动中。在(G)处辨别新输入文字。 在(H)删除既有文字。在(I)处结束删除处理。

Document Release 3.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | Table of contents

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004