DelphiXE-TRibbonアクションは常にMainFormにフォーカスを送信します
質問
アプリケーションのMainFormではないフォームにTRibbonコントロールを配置すると、そのTRibbonのアクション(つまり、切り取り、貼り付け)は、アクションの実行後に常にメインフォームにフォーカスを戻します。
これは、TRibbonを保持するTFormがMainFormの子ではない場合でも発生します。
Windows 7 64ビット、Embarcadero RAD StudioXEバージョン15.0.3953.35171を使用しています。
TRibbonコントロールを誤って使用していますか、それともこれはTRibbonの問題ですか?
解決
これは明らかに設計によるものです。 'ribbonactnctrls.pas'のサンプルコードスニペット: ジェネラコディセタグプレ
ご覧のとおり、電話を回避するのに役立つ条件はチェックされていません。メニュー項目の選択とキー押下ハンドラーにも同じコードがあります。
フォーカスコールにコメントしているソースを変更し、副作用がないかどうかを確認しようと思います。
別の方法として、メインフォームに切り替えた後、フォーカスをフォームに戻すことができます。 'ActionList1'が not メインフォームの標準アクションを含むTActionListであるとします。 ジェネラコディセタグプレ
ただし、これにより、アクションが実行されるたびにメインフォームが短時間点滅します。それが望ましくない場合は、デザインを変更して、メインフォームが不要なフォーカスを取得していることを認識し、フォーカスされていないことを偽造することができます。
ユニット1: ジェネラコディセタグプレ
unit2: ジェネラコディセタグプレ
ただし、プロジェクトソースに「MainFormOnTaskBar」が設定されていない場合は、これだけでは不十分です。これにより、メインフォームがフォーカスされるだけでなく、前面に表示されます。この場合、両方のフォームは、zオーダーをフリーズすることにより、不要なフォーカスの変更/アクティブ化に応答できます。その場合、コードはunit1用になります。
ジェネラコディセタグプレ
およびunit2の場合: ジェネラコディセタグプレ