WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT Index
Table of contents


샘플 이벤트 프로시저:입력 필드편



Enter키로 특정의 이벤트 프로시저를 실행하기에는

이벤트 프로시저에서 특정의 이벤트 프로시저를 기동하도록 해법시다. 여기서는 Enter키의 입력으로 "입력확정"이라는 명칭을 가지는 이벤트 프로시저를 기동하는 예를 들입니다.

(* WSEV_KEY_HOOK 트리거(trigger)로 WSCvifield  인스턴스에 설정합니다. *)
let cbop obj =
  (* (A) 입력되여있는 키를 취득. *)
  let key = get_int (_WSGIappKeyboard '() -> getKey ()) in
  (* (B) 키가 Enter키이며는    *)
  if (key = get_int _WSK_Return) then
    (* "입력확정"이란 명칭을 가지는 이벤트 프로시저를 실행. *)
    ignore(obj -> execProcedure ("입력확정"));
  ()
let _ = Callback.register "cbop" cbop

(A)에서 자판 전역 인스턴스에서 지금 입력되여있는 키를 취득합니다.

(B)에서 Enter키인지를 판별해서,그랫더라면 (C)에서 "입력확정"이란 EP명칭을 가지는 EP를 실행시킵니다. 그 입력확정 실행 이벤트 프로시저는 Enter키에위한 입력확정 동작을 할 경우에 자주 이용됩니다.

초기때 입력으로 전에 입력문자열을 치우기에는

새로 초점이 맞아서 입력을 시작할 경우나 새로 마우스로 클릭되여서 입력을 시작하는 경우에 전에 입력한 문자열을 치우는 이벤트프로시저를 작성해봅시다. 주로의 흐름은 다음과 같습니다.

(* 초점이 맞아있으면 입력 필드를 보지할 변수 *)
let focus_if = C_void

(* WSEV_FOCUS_CH 트리거(trigger)로 기동될 서브EP *)
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)다른 객체에서 초점이 이동해온 경우, *)
    (* 치울 타이밍을 프래그(flag)에 외어놓다  *)
    ignore(obj -> setVariantData ("CLEAR TIMING", 1 ));
  end;
  ()
let _ = Callback.register "_focus_ch_" _focus_ch_

(* WSEV_MOUSE_PRESS 트리거(trigger)로 기동되는 서브EP *)
let _btn_press_ obj =
  (* (E)새로 초점이 맞은것이 자신.           *)
  let focus_if = obj in
  (* (D) 마우스로 클릭되며는                 *)
  (* 치울 타이밍을 프래그(flag)에 외어놓다   *)
  obj -> setVariantData("CLEAR TIMING",1);
  obj -> setProperty("cursorPos",0);
  ()
let _ = Callback.register "_btn_press_" _btn_press_

(* WSEV_KEY_PRESS 트리거(trigger)로 기동되는 서브EP *)
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)치울 타이밍 프래그(flag)를 치운다. *)
      ignore(obj -> setVariantData("CLEAR TIMING",0));
    end;
  end;
  ()
let _ = Callback.register "_key_hook_" _key_hook_

(* 전에 입력된 문자열을 치울 본체                              *)
(* WSEV_INITIALIZE  트리거(trigger)로 입력 필드에 설정합니다.  *)
let ifdclr obj =
  (* 초점이 맞은 경우에 기동되는 서브EP를 설정        *)
  obj -> addProcedure( "ac1", "_focus_ch_", _WSEV_FOCUS_CH);
  (* 마우스가 클릭되였을때 기동되는 서브EP를 설정     *)
  obj -> addProcedure( "ac2", "_btn_press_", _WSEV_MOUSE_PRESS);
  (* 키 입력되였을때 기동되는 서브EP를 설정           *)
  obj -> addProcedure( "ac3", "_key_hook_", _WSEV_KEY_HOOK);
  ()
let _ = Callback.register "ifdclr" ifdclr

먼저 초점관련의 서브EP에관하여 설명합니다. 초점이 새로 맞은것을 알기위해 전에 초점이 맞았던 객체를 정적(static)변수에 보지해놓겠습니다.

(A)에서는 우선 보지해놓은 객체와 자신이 다른 객체인가를 조사합니다. 다르면 새로 초점이 맞은것을 의미해서, (B)에서 치울 프래그(flag)를 세워놓습니다. 그 다음에 (C)에서 자신을 그 정적(static) 변수에 보지합니다.

다음에는 마우스의 클릭관련에 서브EP에관에서 설명합니다. (D)에서 치울 프래그를 세워서 입력 카설을 선두로 설정합니다. 그후에 (E)에서 자신을 초점보지의 정적(static) 변수에 보지합니다.

다음에는 키 입력관련의 서브EP에 대해서 설명합니다. 키 입력관련의 서브EP에서는 치울 프래그(flag)를 세울 경우, 문자열를 치워서 그 치울 프래그(flag)를 치웁니다. 우선 (F)에서 치울 프래그(flag)가 세워저있는가를 조사합니다. (G)에서는 이동 키를 입력한것으로 치워지지않도록 그 키를 판별해서, (H)로 치워서 (I)로 치울 프래그(flag)를 치웁니다.

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