私はBoundsRectが保存されている起動時に2番目のモニタに子フォームが配置されたマルチフォームアプリケーションを持っています。Delphi:モニタの設定が変更されたときにフォームの元の場所を復元する方法
コンピュータの表示構成が変更されると、Windowsは最初の(プライマリ)モニタにフォームを移動します。私はWM_DISPLAYCHANGEでこの変更をキャッチすることができます:
procedure WMDisplayChange(var msg: TWMDisplayChange); message WM_DISPLAYCHANGE;
それは設定で再表示されたときに私は何をやってに興味がバックセカンドモニタに子フォームを移動さ(すなわちScreen.MonitorCountが1から2に行きます)、例えば:
childForm.BoundsRect := childForm.m_WorkingBounds;
// (or)
childForm.BoundsRect := Screen.Monitors[Screen.MonitorCount-1].BoundsRect;
しかし、この割り当てはありません影響を及ぼすある - 子フォームはありません成功し、モニター0私は、このようなSetWindowPos()などの他のアプローチを、試してみた
にとどまります。.. 。
「BoundsRect」に何らかの形で割り当てても機能しないことは、私にはあまりにも信じられないようです。私はそれが正しく動作することを知っていると思います。明らかに 'SetWindowPos'でその呼び出しを置き換えても、' SetWindowPos'の呼び出しではなく 'BoundsRect'への代入がどのように実装されていると思いますか。したがって、可能性のある説明は、割り当てのrhsがあなたが期待するものではないということです。あなたは実際に 'Screen.Monitors [Screen.MonitorCount-1] .BoundsRect'の値があなたの期待に合っているかどうかチェックしましたか?あなたは言い換えればどんなデバッグをしましたか? –
非常に特殊な用途でない場合は、これは妥当ではありません。別の場所に別のモニタが表示されることがあります。 –
@David:はい私はデバッガでこれらの値を調べました。すべては予想どおりでした。 –