Q113:どのテキストフィールドにカーソルがあってもバーコードを読むと指定のテキストフィールドに入力されるようにしたい。
Q113-1:
入力システムで、入力の軽減の為に、キーボードインターフェイス型のバーコードを使ってみようと思い試行しています。
■やりたいこと
どのテキストフィールドにカーソルがあってもバーコードを読むと指定のテキストフィールドに入力される。
・社員番号のバーコードを読むと「社員番号入力フィールド」
・商品番号のバーコードを読むと「商品番号入力フィールド」
に値が入っていくようなものです。
■私の考え
そこで通常はそのフィールドに入力しないであろうコードをバーコードに仕込む。実際の社員番号は"987654"の場合。バーコードには "B 1987654"とし、最初の "B "はバーコードであるかどうか、次の "1" はどの入力フィールドか? でイベントを生成を試みました。
ここまでで、実際指定の「入力フィールド」に値を設定することはできたのですが、入力を行った「入力フィールド」から値を削除することができません。
デバックでは思い通り動いているような気がするのですが、ローダーでは動きません。
もちろん他の方法があれば良いのですが、どうにか実現することができるでしょうか。
またこの仕様に関係ないのかと思いますが、テキストフィールドに対し、データを設定した時にイベントが起きないようにすることはできるのでしょうか。
関連ファイル:例2.mzax、例1.mzax
A113-1:
@[テキストフィールド]からは
・一文字入力の都度、データ更新イベントが発生します。
・フィールド内でエンターキーを押すと、アクションイベントが発生します。
バーコードを読み取り[テキストフィールド]に入力した場合も同様です。
文字数分、データ更新イベントが発生し、最後にアクションイベントが発生します。
A大変申し訳ございませんが、複数のスレッド処理が同時に行われている場合、実際の処理の順番とデバッガーでの表示に違いが生じる可能性があります。
その場合にはビルダーのメニュー>[オプション]>[ログ出力レベル]>[すべて]としてlogフォルダ内のテキストログをご覧頂くと、ご参考になることがあります。(すべて記録したlogファイルはサイズが大きくなりますので、適宜削除して下さい)
お送り頂いたアプリケーションでは、[イベント生成(ID:14)] が呼び出され、いずれかの[テキストフィールド]にテキストが設定されると、[テキストフィールド]からデータ更新イベントが発生し、再び[ファンクション(ID:11)]が呼び出されることになります。
[等価演算(ID:15)] の演算が行われる前に、[ファンクション(ID:11)]の引数は変わってしまっているため、クリア処理が行われないものと考えられます。
@、Aからデータ更新イベントに処理を繋げるのは不都合が多く、アクションイベントをお勧め致します。
動作確認のためにアクションイベントに繋げたファイルを添付致します。
データ設定の際[テキストフィールド]からイベントを発生させないようにすることはできませんが、[イベント伝播制御]を使うと、発生したイベントに繋がる処理を行うかどうか設定することができます。
また、今回のご質問とは関係がないかも知れませんが[フォーカス移動]>[Enterキーによる移動]を「有効」にすると、各フィールドからアクションイベントが発生しないようになります。
関連ファイル:例2改変.mzax
備考:「テキストフィールド」の「Q&A12」にも掲載。