-1

だから、私はこの仮想キーボードを持っています...

これは dll 内にあり、StayOnTop Modal フォームに基づいています。これは、入力されたテキストを含む WideString を返す関数によって呼び出されます。この仮想キーボードには独自の TEdit があり、ユーザーが書いた内容を確認できます。

必要な動作は、Esc キーまたは Enter キーが押されるまで、KB フォームが最上位にあり、フォーカスを維持することです。

このキーボードへの呼び出しの 1 つは、メイン フォームの OnShow イベント内で発生するため、キーボードが最初に呼び出されるまでには表示されません。

これは今までいつもそうでした。

メイン フォームが実際にロードされる瞬間までに発生するさまざまな手順 (スキンのロード、プラグインのロード、データベースの初期化など) をユーザーに案内するスプラッシュ フォームを作成しました。

スプラッシュ スクリーンは、DataModule OnCreate が実行されるとすぐに表示され、メイン フォームの OnActivate で閉じられます。したがって、このスプラッシュ フォームは StayOnTop ではありません。メイン フォームが表示された瞬間に閉じる必要があるため、その必要はありません。

途中でキーボードが表示されるので、ユーザーは必要なデータを入力できます。

私のアカウントでは、キーボードはモーダル ウィンドウであるため、フォーカスを取得する必要がありますが、実際には、キーボード フォームをクリックするまでスプラッシュ フォームにフォーカスがあります。これは回避したいことです。

スプラッシュ フォームがキーボードの前に呼び出された場合、Modal も StayOnTop もありません。誰かがフォーカスを維持する理由と、可能であればそれを回避する方法を教えてください。

PS: SO で同様の問題に関する他の質問を見つけましたが、逆であることが判明しました: StayOnTop フォームがメインのフォームに焦点を合わせないようにすることです。それは私が必要とするものではありません。

4

1 に答える 1

0

さて、私は私の問題を解決しました。そして、それは単純なものでした...

キーボードを呼び出す直前にApplication.ProcessMessagesを追加しました。

キーボードが表示されている限り、フォーカスがキーボードに移動するようになりました。

于 2014-03-02T14:39:09.970 に答える