0

Delphi XE3 に移植した大きな Delphi 6 アプリがあります。ある時点で、メイン フォームが別の非モーダル フォームを起動します。1 ~ 2 秒後に (たとえば 50%)、新しく作成されたフォームがメイン フォームの後ろに移動することがあります。後ろにあるとはいえ、新しく作成されたフォームにはまだフォーカスがあるため、アクティブ化/非アクティブ化イベントはありません。いくつかのタイマー コントロールがあり、それらを無効にしました。それはまだ起こります。

私のコードがこれを行っていることは受け入れられますが、何が起こっているのかを知るにはどうすればよいでしょうか? その後新形態が奥に移動した際に迎撃する方法はありますか?

明確にするために、両方のフォームを別々に使用したいと考えています。それらのいずれかが他の背後に表示される可能性があります。現時点で起こっていることは、z オーダーが変化しているように見えるということです。

4

1 に答える 1

0

私はこれに対する答えを見つけました。これを行う CreateParams オーバーライドを追加したことがわかりました。

  // make a taskbar window
 inherited CreateParams( params );
 params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
 params.WndParent := GetDesktopwindow; // this line caused the problem

WndParent にコメントすると解決しました。効果は微妙ですが。これは、ウィンドウを他のウィンドウの背後に強制するキーまたはマウス イベントの約 1 秒後にタイマーが作動するかのようです。CreateParam のステップについてコメントしてくれた David Heffernan に感謝します。

于 2013-04-11T13:30:02.737 に答える