ユーザーインターフェイスに興味のある方なら、On before keystroke とOn after keystroke イベントをすでに使っているかもしれませんね。4D v18 R5 では、これらのイベントのハンドリングが大幅に強化されましたので、きっとご満足いただけることでしょう。さらに、On before keystroke イベントが発生したときに、進行中の入力があるかどうかを判断する新しいコマンドも作成されました。それでは、詳細をご覧ください。
テキスト入力
テキスト入力の際、言語やOSに関係なく、システムが介入してくれる場合があります。例えば、フランス語やスペイン語でアクセントのある文字を入力する場合を考えてみましょう。”ê””ü””ñ”.macOSでこれらの文字を入力する場合、最も簡単な方法は、対応するキーを押し続けてダイアログボックスを表示させることです。
入力したい文字を選択するには、矢印キーを使用し、「return」または「enter」キーで選択内容を確認する必要があります。
4D v18 R5では、このタイプのシステムダイアログ(別名IME)が検証されると、On before keystroke とOn after keystroke イベントが生成されるだけです。最後の文字だけが重要なのに、矢印キーや バリデーションキーに対応するコードを受信する必要はありません!
リストボックス
リストボックスも強化されました。セルが入力されていなくても、キーが入力されたときにリストボックスにフォーカスが当たると、すぐにOn before keystroke イベントが生成されます。これにより、どのキーが押されたかを知ることができ、新しい検索を開始したり、現在の選択範囲を変更したりといった判断をプログラムで行うことができるようになりました!
新しいコマンドでMoRE INFO
イベントが実際の入力中に発生したのか、それとも単にキーボードのキーが押された瞬間にリストボックスにフォーカスが当たったのかを知るには、どうすればよいのでしょうか。答えはとても簡単です。新しいコマンド、Is editing text 。このコマンドは、ユーザーが入力フォームオブジェクトに値を入力している場合はTrueを返し、それ以外の場合はFalseを返します。
サンプルコード
このサンプルでは、キーボードから A から Z までの文字が入力されると、すぐにクエリーを実行します(このサンプルでは、他の文字はすべて無視されます)。
もちろん、セルが変更されている間はクエリを実行することはできません。そのため、新しいクエリを実行する前に、新しいIs editing text コマンドを使用します。
var $char :Text
。
Case of
:( FORM Event .code=On Before Keystroke)
If
Form.people:=(Not(Is editing text))// check not in input mode
$char :=Keystrokeds .people.query("firstname = :1 or lastname = :1";$char+"@")
End if
End case
別の例?
次のアニメーションGIFは、このイベントを他のボタンや入力エリアなしで、リストボックスで使用できることを示しています(アニメーションGIFに表示される文字は、キーボードで入力されたキーを示すためにのみ表示されています)。
このコマンドの詳細については、ドキュメントセンターを参照してください。
まとめ
この機能は、よりユーザーフレンドリーなインターフェイスの作成に役立ちます。開発者として、ユーザーエクスペリエンスをさらに向上させるために、この機能を使用することは間違いありません
より詳細な情報については、ドキュメントを参照してください。