私のアプリケーションのウィンドウは画面の端からポップアップします。もちろん、これは問題です。一部のウィンドウはモーダルであり、閉じることができないためです(ウィンドウがそこにあることすらわかりません)。
各フォームの場所とサイズを記憶し、フォームが再び表示されたときにそれを復元するTurboPowerOrpheusコンポーネントを使用しています。サイズと配置をINIファイルに保存します。
ウィンドウが画面の横に表示されないようにするにはどうすればよいですか?
私のアプリケーションのウィンドウは画面の端からポップアップします。もちろん、これは問題です。一部のウィンドウはモーダルであり、閉じることができないためです(ウィンドウがそこにあることすらわかりません)。
各フォームの場所とサイズを記憶し、フォームが再び表示されたときにそれを復元するTurboPowerOrpheusコンポーネントを使用しています。サイズと配置をINIファイルに保存します。
ウィンドウが画面の横に表示されないようにするにはどうすればよいですか?
この種の事態は、ラップトップのドッキングを解除する場合など、複数のモニターを使用してから1台を切断した場合に発生するのが一般的です。または、ラップトップをより高い解像度の画面にドッキングする場合。または、リモートデスクトップなどを使用します。解決策は、「位置を記憶する」動作を健全性チェックでオーバーライドして、左+幅が画面の幅を超えているかどうかを確認することです(Screen.Monitors配列、実際には-ありがとうございます)。トップ+ハイトの場合はその逆です。
理想的には、差を差し引くことで「バンプ」するので、ウィンドウがまたがりたいエッジに突き当たっています。
また、これを修正するOrpheusのアップデートがあるかどうかを確認してください。そうでない場合は、ソースを取得し、修正(オプション)を行って、プロジェクトに貢献することができます。私が覚えているように、それはOSSです。
それらのDefaultMonitor
プロパティを確認し、からのコードを読んで、TCustomForm.SetWindowToMonitor
に相対的なポジショニングを処理する方法を確認することをお勧めしScreen.Monitors
ます。
Use DefaultMonitor to associate a form with a particular monitor in a multi-monitor application. The following table lists the possible values:
Value Meaning
dmDesktop No attempt is made to position the form on a specific monitor.
dmPrimary The form is positioned on the first monitor listed in the global screen object's Monitors property.
dmMainForm The form appears on the same monitor as the application's main form.
dmActiveForm The form appears on the same monitor as the currently active form.
Note: DefaultMonitor has no effect if the application does not have a main form.
フォームの以前の位置を呼び出すには、(画面がプラグオフされているか解像度が変更されているために)使用できなくなった領域に突然フォームを配置することなく、電話をかけるだけです。
TForm.MakeFullyVisible;
それでおしまい。ドキュメントを参照してください。