トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     IME文字確定の[ENTER]なのか、ただの[ENTER]キーなのかを判定したい
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
clubMember
Åê¹ÆNo.3560
投稿日時: 2004-2-6 11:35
新米
居住地:
投稿: 18
使用環境:
Pro(7.2) Pro(SP2)
ありがとうございます!
fumio先生

clubMemberです。いつもお世話になっております。
昨日PC触れなくてお礼が遅くなって申し訳ございませんでした。

本当にありがとうございます!
サンプルファイルまで用意してくださって、感動しました。

頑張ります。

clubMember
野中文雄
Åê¹ÆNo.3524
投稿日時: 2004-2-4 22:35
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: IME文字確定の[ENTER]なのか、ただの[ENTER]キーなのかを判定したい
TextField.onChangedメソッドでは、入力値の変更が必要になりますので、限界はありますね。
引用:
clubMemberさんは書きました:
[ENTER]キーのカウントと、テキストフィールドのonChangeイベントの発生で、IME全角入力の文字確定の[ENTER]なのか、次のフォーカスに移動するリクエストを出す[ENTER]なのかを判定しています。

押されたキーが[Enter]に等しくなければ、そのキーは[Enter]ではありません。else ifでなく、elseを使えば足ります。
	if (Key.getCode() == Key.ENTER) {
		_global.enterKeyCount++;
	} else if (Key.getCode() != Key.ENTER) {

Flashは基本的に、ホストアプリケーション(ブラウザ)の外にアクセスすることが、厳格に制限されています。IMEの設定を、調べることもできません。それに、それがわかったとしても、以下の問題を解決することはできないでしょう(日本語モードでなくても、同じ問題は発生しますよね)。
引用:
・何も入力しないまま次へフォーカスを移したい時、[ENTER]を2回押さなければならない
・以前入力してあるテキストフィールドに再びフォーカスが当たった時、前に入力した内容が選択された状態になり、その状態でまったく同じ文字(1バイト文字1文字、あるは任意2バイト文字の文字列)を入力した場合、テキストフィールドonChangeにならないため、文字が確定された後に更に[ENTER]キーを2回押さなければフォーカスが次へ行かない
...
FLASHはIMEを制御できないのですが、IMEはどのモードになっているかを探知することも出来ないでしょうか。

異なったアプローチで、日本語入力の確定と、改行キーの[Enter]を区別することが一応できました。
// MovieClip: TextFieldインスタンスmy_txtを配置
// フレームアクション
keyListener = new Object();
my_txt.onSetFocus = function() {
  xListenEnter(keyListener);
  // コールバック関数
  // 引数bEnter: 普通の改行ならtrue、日本語入力確定ならfalse
  keyListener.onGetEnter = function(bEnter) {
    if (bEnter) {
      trace("Enter");
    } else {
      trace("確定");
    }
  };
};
my_txt.onKillFocus = function() {
  Key.removeListener(keyListener);
};
function xListenEnter(oListener) {
  Key.addListener(oListener);
  oListener.onKeyDown = function() {
    this.nDownKey = Key.getCode();
  };
  oListener.onKeyUp = function() {
    this.nUpKey = Key.getCode();
    if (this.nUpKey == Key.ENTER) {
      if (this.nUpKey == this.nDownKey) {
        this.onGetEnter(true);
      } else {
        this.onGetEnter(false);
      }
    }
  };
}


----------------
 

clubMember
Åê¹ÆNo.3523
投稿日時: 2004-2-4 19:20
新米
居住地:
投稿: 18
使用環境:
Pro(7.2) Pro(SP2)
IME文字確定の[ENTER]なのか、ただの[ENTER]キーなのかを判定したい
clubMemberです。どうもです。

[ENTER]キーで次のテキストフィールドにフォーカスを移す仕組みを本(伊藤博康先生著「FLASH MX ActionScript RDBMS プログラミング」)を読みながら作りました。

[ENTER]キーのカウントと、テキストフィールドのonChangeイベントの発生で、IME全角入力の文字確定の[ENTER]なのか、次のフォーカスに移動するリクエストを出す[ENTER]なのかを判定しています。

_global.enterKeyCount = 0;
watchKeyListner = new Object();
watchKeyListner.onKeyUp = function() {
	focusObj = Selection.getFocus();
	trace(Key.getCode());
	if (Key.getCode() == Key.ENTER) {
		_global.enterKeyCount++;
	} else if (Key.getCode() != Key.ENTER) {
		if (_root.input_data == 1) {
			_global.enterKeyCount=1;
			_root.input_data = 0;
		}
	}
	if (_global.enterKeyCount>=2) {
		switch (focusObj) {
			case "_level0.text1_txt" :
				Selection.setFocus("_root.text2_txt");
				_global.enterKeyCount = 0;
				break;
			case "_level0.text2_txt" :
				Selection.setFocus("_root.text1_txt");
				_global.enterKeyCount = 0;
		} 
	}
}
Key.addListener(watchKeyListner);
watchTFListner = new Object();
watchTFListner.onChanged = function() {
	_global.enterKeyCount = 0;
	_root.input_data = "1";
}
_root.text1_txt.addListener(watchTFListner);
_root.text2_txt.addListener(watchTFListner);


これで「ある程度」判定が出来るようになりました。
しかし、シンプルなキー判定とは別に、onChangeを使っている以上、下記の欠陥があります。

・何も入力しないまま次へフォーカスを移したい時、[ENTER]を2回押さなければならない
・以前入力してあるテキストフィールドに再びフォーカスが当たった時、前に入力した内容が選択された状態になり、その状態でまったく同じ文字(1バイト文字1文字、あるは任意2バイト文字の文字列)を入力した場合、テキストフィールドonChangeにならないため、文字が確定された後に更に[ENTER]キーを2回押さなければフォーカスが次へ行かない

これらの問題を何とか解決したいですが、ロジックが複雑になりすぎると、思わぬところでバグッたりしやすいので、怖いです。

FLASHはIMEを制御できないのですが、IMEはどのモードになっているかを探知することも出来ないでしょうか。

何とかFLASHでWindowsアプリケーションみたいな[ENTER]キーによるフィールド移動を実現させたいので、どなたか是非御知恵を貸して下さい!よろしくお願いします!

clubMember
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops