![]() | Programming Guide | WideStudio/MWT Index Table of contents |
输入字段事件过程范例
使用回车键实行特定的事件过程
在事件过程中启动特定的事件处理。这里,我们将启动名为”输入确定”的事件过程。(* 在 WSCvifield 实例中设置 WSEV_KEY_HOOK 触发器 *) let cbop obj = (* (A)获得输入的键值 *) let key = get_int (_WSGIappKeyboard '() -> getKey ()) in (* (B)如果输入的是回车键 *) if (key = get_int _WSK_Return) then (* Execute the procedure which name is "InputFixed". *) (* 执行"输入确定"事件处理过程 *) ignore(obj -> execProcedure ( "InputFixed" )); ignore(obj -> execProcedure("输入确定")); () let _ = Callback.register "cbop" cbop(A)通过键盘取得正在输入的文字。
(B)判断输入值是否为回车键,如果是,在(C)启动名为”输入确定”的事件过程。 这种通过输入确认是否实行事件过程的方法,常常被使用于通过输入回车键 确定动作的场合。输入文字时自动删除既有字符
接着制作当光标处开始输入新的文字时,该区域中既有字符自动删除的事件过程。具体步骤如下所示。
- (1)移动到光标处,启动删除处理。
- (2)点击鼠标时,启动删除处理。
- (3)文字被键入时,如果删除处理已经被启动,删除既有文字。
- (1),(2),(3)的事项过程的子对象被初期化。
(* 保存获得输入焦点的输入字段的变量 *) let focus_if = C_void (* WSEV_FOCUS_CH 触发器启动的事件过程 *) let _focus_ch_ obj = (* (A) 判断是否获得输入焦点 *) if ( focus_if <> C_void) && ( get_string (focus_if -> getInstanceName()) <> get_string (obj -> getIsntanceName ()) ) && ( get_int (obj -> getFocus ()) == get_int _False ) then begin (* (C)保存当前获得输入焦点的对象 *) let focus_if = obj in (* (B)输入焦点从其他对象处移动过来时,清除标志位置位 *) ignore(obj -> setVariantData ("CLEAR TIMING", 1 )); end; () let _ = Callback.register "_focus_ch_" _focus_ch_ (* WSEV_MOUSE_PRESS 触发器启动的事件过程 *) let _btn_press_ obj = (* (E)保存当前获得输入焦点的对象 *) let focus_if = obj in (* (D) 鼠标点击后,清除标志位置位 *) obj -> setVariantData("CLEAR TIMING",1); obj -> setProperty("cursorPos",0); () let _ = Callback.register "_btn_press_" _btn_press_ (* WSEV_KEY_PRESS 触发器启动的事件过程 *) let _key_hook_ obj = (* (F) 键盘输入时,清除标志位置位 *) let fl = get_int (obj -> getVariantData("CLEAR TIMING")) in if (fl == 1) then begin let key = get_int (_WSGIappKeyboard '() -> getKey()) in (* (G)如果不是光标键,则清除输入内容 *) if (key <> get_int _WSK_Tab && key <> get_int _WSK_Up && key <> get_int _WSK_Down && key <> get_int _WSK_Left && key <> get_int _WSK_Right) then begin (* (H)清除 *) ignore(obj -> setProperty("labelString","")); (* (I)清除标志位复位 *) ignore(obj -> setVariantData("CLEAR TIMING",0)); end; end; () let _ = Callback.register "_key_hook_" _key_hook_ (* 清除前次输入内容 *) (* 设置 WSEV_INITIALIZE 触发器 *) let ifdclr obj = (* 获得输入焦点后,启动事件过程 *) obj -> addProcedure( "ac1", "_focus_ch_", _WSEV_FOCUS_CH); (* 鼠标点击后,启动事件过程 *) obj -> addProcedure( "ac2", "_btn_press_", _WSEV_MOUSE_PRESS); (* 键盘输入后,启动事件过程 *) obj -> addProcedure( "ac3", "_key_hook_", _WSEV_KEY_HOOK); () let _ = Callback.register "ifdclr" ifdclr首先对光标关联的子项目EP进行说明。为了知道光标是否改变了位置, 以静态变量预先保持上次光标位置。
(A),判断现位置与预先保持的位置是否不同。如果不同,即可知道光标被改变, 在(B)处启动删除处理。然后在(C)处将该静态变量赋予自身。
然后对鼠标点击相关的事件过程进行说明。在(D)处启动删除处理,并设定输入光标于前头。 然后在(E)处将新的值赋予光标保持的静态变量中。
然后对键入关联的事件过程进行说明。该事件过程中,如果删除处理已被启动,将删除字符串, 并结束删除处理。首先,在(F)处判断删除处理是否启动中。在(G)处辨别新输入文字。 在(H)删除既有文字。在(I)处结束删除处理。
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |