WideStudio Application Builder User's Guide(Perl言語)

サンプルイベントプロシージャ・インプットフィールド編



リターンキーで特定のイベントプロシージャを実行するには

イベントプロシージャにおいて、特定のイベントプロシージャを起動するこ とをしてみましょう。ここでは、リターンキーを入力で、"入力確定"なる名 称を持つイベントプロシージャを起動する例をあげます。

use mwt;
# WSEV_KEY_HOOKトリガで WSCvifield インスタンスに設定します。
sub cbop {
  my ($object) = @_;
  # (A)入力されつつあるキーを取得。
  $key = mwt::WSGIappKeyboard()->getKey();

  # (B)キーがリターンキーであれば
  if ($key == $mwt::WSK_Return){
    # "入力確定"なる名称をもつイベントプロシージャを実行。
    $object->execProcedure("入力確定");
  }
  return;
}
1;

(A)でキーボードグローバルインスタンスから、入力されつつあるキーを取得します。

(B)でリターンキーかどうか判別し、もしそうだったら(C)で、"入力確定"な るEP名称をもつEPを実行させます。 この入力確定実行イベントプロシージャ は、リターンキーによる入力確定動作を行いたい場合によく用いられます。

初期時入力で前回入力文字列をクリアするには

新たらにフォーカスがあたって入力を開始する場合や新たらにマウスでクリッ クされて入力を開始する場合に前回入力文字列をクリアするイベントプロシー ジャを作成してみましょう。大きな流れとしては次の様になります。


  • (1)フォーカスが新たにあたった場合、クリアフラグを立てます。

  • (2)マウスがクリックされた場合、クリアフラグを立てます。

  • (3)キー入力された場合、クリアフラグがたっていたら、クリアします。

  • (1),(2),(3)のサブイベントプロシージャを張り付けて初期化します。

use mwt;
# フォーカスがあたっていたインプットフィールドを保持する変数
$focus_if = 0;

# WSEV_FOCUS_CH トリガで起動するサブEP
sub _focus_ch_ {
  my ($object) = @_;
  # (A) フォーカスが移動して来たのかを調査
  if ($focus_if != 0 &&
      $focus_if->getInstanceName() != $object->getInstanceName() &&
      $object->getFocus() != &mwt::False ){

    # (B)他のオブジェクトからフォーカスが移動してきた場合、
    # クリアするタイミング。そのことをフラグに覚えておく
    $object->setVariantData("CLEAR TIMING",1);
    # (C)新たにフォーカスがあたったのは、自分。
    $focus_if = $object;
  }
  return;}
#WSEV_MOUSE_PRESS トリガで起動するサブEP
sub _btn_press_ {
  my ($object) = @_;
  # (D) マウスでクリックされたら
  # クリアするタイミング。そのことをフラグに覚えておく
  $object->setVariantData("CLEAR TIMING",1);
  $object->setProperty("cursorPos",0);
  # (E)新たにフォーカスがあたったのは、自分。
  $focus_if = $object;
  return;
}
# WSEV_KEY_PRESS トリガで起動するサブEP
sub _key_hook_ {
  my ($object) = @_;
  # (F) キー入力時に、クリアタイミングかどうか調査
  $fl = $object->getVariantData("CLEAR TIMING");
  if ($fl->getLong() == 1){
    $key = WSGIappKeygoard()->getKey();
    # (G)クリアタイミングで、移動キーでなければ
    if ($key != $mwt::WSK_Tab &&
        $key != $mwt::WSK_Up &&
        $key != $mwt::WSK_Down &&
        $key != $mwt::WSK_Left &&
        $key != $mwt::WSK_Right ){
      # (H)クリア。
      $object->setProperty("labelString","");
    }else{
      return;
    }
  }
  # (I)クリアタイミングフラグを落とす。
  $object->setVariantData("CLEAR TIMING",0);
  return;
}

# 前回入力文字列クリア本体
# WSEV_INITIALIZE トリガでインプットフィールドに設定します。
sub ifdclr {
  my ($object) = @_;
  # フォーカスがあたったときに起動するサブEPを設定
  $object->addProcedure("ac1","_focus_ch_",$mwt::WSEV_FOCUS_CH);

  # マウスがクリックされたときに起動するサブEPを設定
  $object->addProcedure("ac2","_btn_press_",$mwt::WSEV_MOUSE_PRESS);

  # キー入力されたときに起動するサブEPを設定
  $object->addProcedure("ac3","_key_hook_",$mwt::WSEV_KEY_HOOK);
}
1;

まずフォーカス関連のサブEPについて説明します。フォーカスが新たにあたっ たことを知るために、前回フォーカスがあたっていたオブジェクトを静的変 数で保持しておきます。

(A)では、ます、保持しておいたオブジェクトと自分が異なるかを調べます。 異なれば新たにフォーカスがあたったことを意味し、(B)でクリアフラグを 立てます。次に(C)で自分をその静的変数に保持します。

次にマウスのクリック関連のサブEPについて説明します。(D)でクリアフ ラグを立てて入力カーソルを先頭に設定します。次に(E)で自分をフォーカ ス保持の静的変数に保持します。

次にキー入力関連のサブEPについて説明します。キー入力関連のサブEPでは、 クリアフラグがたっている場合、文字列をクリアして、そのクリアフラグを 落とします。まず、(F)でクリアフラグが立っているか調べます。(G)では移 動キーで、クリアされては悲しいので、そのキーを判別して、(H)でクリア し、(I)でクリアフラグを落とします。
Document Release 3.80 for WideStudio ver 3.80, Jan 2005


WideStudio documents index | 目次
バグ情報、ご質問等ございましたら、メーリングリストでご確認の上、 御気軽にこちらの方までよろしくお願いいたします。