子フォームをアクティブにしたとき、親フォームをアクティブにさせない方法

解決


肺山  2008-07-04 02:42:00  No: 31144

以下の条件でアプリケーションを作成しています。
・アプリケーションにはフォームAとフォームBの2つのフォームがある
・アプリケーションのメインフォームはフォームA
・フォームBはフォームAから呼ばれる(モードレス)
・フォームBのフォームスタイルはfsStayOnTop
・フォームBはエクスプローラからファイルをドラッグ&ドロップにより受け取る機能がある
・フォームAはフォームBの情報をドラッグ&ドロップにより受け取る機能がある
・コンパイルはDelphi2007
・対象OSはWindows2000、XP、Vista

フォームBはエクスプローラからファイルをドロップして受け取る機能を持つので、
エクスプローラが開いているとき、アプリケーションのZオーダは上から
  フォームB → エクスプローラ → フォームA
の順序で固定したいのですが、フォームBをマウスクリック等でアクティブにした際、
つられてフォームAがエクスプローラより前面に来てしまいます。
これを防ぐ方法はないでしょうか。

ファイルドロップを行う際はフォームAを非表示にし、ドロップが終わったときに
再び表示させるという方法もありますが、フォームA-B間での連携は常に使用可能に
したいことと、できるだけシンプルなアプリケーションにしたいという理由により、
もし可能であればフォームAは表示したままにしたいです。
また、フォームAとフォームBを別のExeにすれば良さそうですが、起動速度を
重視したいので、これも避けたいです。

なにかよい方法はありますでしょうか。


肺山  2008-07-04 18:44:26  No: 31145

自己解決しました。
FormのCreateParamsをオーバーライドし、
Params.WndParent := 0;
とすることで望んでいた動きになりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加