1

目の前にある C++ ビルダー 2010 プロジェクトで奇妙なシナリオが発生しました。時々、モーダル フォームがメイン フォームの背後にあるように見えます。メインウィンドウがあり、メインウィンドウのボタンを使用してセカンダリウィンドウを開き、メインウィンドウでモーダルフォームポップアップを生成するボタンを選択すると、これが発生するようです。モーダル フォームはメイン ウィンドウの後ろに表示されるので、Esc キーを押して閉じます。

もう一度開くと、モーダル ウィンドウが一番上に表示され、目的の結果が得られます。

これが完了すると、メイン ウィンドウがすべてのウィンドウの前面に表示されるようになります。独自のモーダル ウィンドウや子ウィンドウだけでなく、Windows エクスプローラー ウィンドウやその他のプログラムも含まれます。更新: これは、モーダル ウィンドウがメイン ウィンドウの背後に配置され、エスケープを使用して閉じられるたびに発生します。メイン ウィンドウを正常に動作させる唯一の方法は、アプリケーションを再起動することです。

メイン ウィンドウと最初の問題であったモーダル ポップアップの両方のFormStyleおよびPopupModeプロパティをチェックしていじりました。しかし、それは役に立たないようです。メインウィンドウには

FormStyle: fsNormal
PopupMode: pmNone

メイン ウィンドウの動作がおかしくなるので、問題はメイン ウィンドウにあるように感じます。モーダル ウィンドウにメイン ウィンドウを親として使用するように具体的に指示し、 FormStylePopupModeのすべての設定と組み合わせを変更せずに試してみました。

これに加えて、これらすべてが Vista 以前でも機能していたと報告されています (はい、これは古くて大きなアプリケーションです... へへ)

更新:主な原因は、すべての上にあるメイン ウィンドウにあるようです。これにより、モーダル フォームがその後ろに表示され、何か問題があるように見えます。これは初回のみ発生し、モーダル フォームを再度開くとメイン ウィンドウの前に描画されます。メイン ウィンドウは、デスクトップ上の他のすべてのものより前に表示されますが。さらに混乱を招くのは、メイン ウィンドウがこのような動作を開始することを決定したとき、非常にランダムに感じられることです。

4

2 に答える 2

0

この問題は、既知の問題とモーダル フォームが他のフォームの背後にあるという組み合わせであることが判明しました。Google"delphi modal form hidden behind other form"などで検索すると、多くの情報が見つかります。

もう 1 つの要因は、これらの問題に対処するための実装がアプリケーションに行われたという事実です。これに加えて、Windows と VCL 自体の両方に対する変更もうまくいきませんでした。そのため、「現在」の不要なジャンクをすべて取り除き、アプリケーションがウィンドウを処理する方法を書き直して、問題を解決しました。

于 2012-12-06T10:29:39.217 に答える