WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT 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。 这种通过输入确认是否实行事项过程的方法,常常被使用于通过输入回车键确定动作的情况。

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

接着制作当光标处开始输入新的文字时,该区域中既有字符自动删除的事项过程。大概的流程。如下。


#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.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | Table of contents

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005