Delphiで画面の使用可能な座標を取得する方法
質問
Screen.DesktopHeightとScreen.DesktopWidthを使用すると、「仮想」サイズを取得できます。デスクトップと私はそれが1つまたは複数のモニターで動作すると信じています。
アプリケーションを閉じるときに、アプリケーションの位置(上と左)とサイズ(高さと幅)をレジストリに保存します。開いたとき、表示領域の外側に部分的に移動したり、画面設定やモニターの削除などによって画面サイズが変更されたりする可能性があるため、完全に表示されるようにします。
基本的には次のコードでできます:
if MyForm.Width > screen.DesktopWidth then
MyForm.Width := screen.DesktopWidth;
if MyForm.Height > screen.DesktopHeight then
MyForm.Height := screen.DesktopHeight;
if (MyForm.Left + MyForm.Width) > screen.DesktopWidth then
MyForm.Left := screen.DesktopWidth - MyForm.Width;
if MyForm.Left < 0 then MyForm.Left := 0;
if (MyForm.Top + LogoAppForm.Height) > screen.DesktopHeight then
MyForm.Top := screen.DesktopHeight - LogoAppForm.Height;
if MyForm.Top < 0 then MyFormTop := 0;
これは正常に機能しますが、デスクトップの下部にある(ただし常にではない)タスクバーを考慮に入れない点が異なります。そのため、タスクバーが私のアプリケーションのウィンドウの邪魔になると、私のアプリケーションは見えなくなります。
タスクバーの場所を除外する画面の使用可能な位置とサイズ設定を取得するにはどうすればよいですか?
解決
Windowsが実際にあなたが思うように動作するかどうかはわかりません-私は複数のモニターを持っていますが、それらは同じ高さを持っていません-したがって、私のデスクトップはすべてのモニターにわたって均一な高さを持ちません。
私が行うことは、Screen.MonitorCountとScreen.Monitors配列を使用して、どのモニターにほとんどのウィンドウが含まれているかを調べ、その画面で適切な長方形を見つけることです。 TMonitorのWorkareaRectプロパティは、特定のモニターの作業領域の境界を提供しますが、タスクバーやツールバーは除外されます。
他のヒント
Screen.WorkArea *プロパティを使用する必要があります。
Screen.WorkAreaRect
Screen.WorkAreaHeight
Screen.WorkAreaLeft
Screen.WorkAreaTop
Screen.WorkAreaWidth
または
Screen.Monitors[I].WorkareaRect
現在のフォームの作業領域を決定するには、Monitor.WorkareaRectを使用します。例:
BoundsRect := Monitor.WorkareaRect;
フォームサイズを最大化せずに最大領域に設定します。
TCustomForm.MakeFullyVisible メソッド。
D2006ヘルプから:
&quot; MakeFullyVisibleは、フォームが指定されたモニターに完全に適合するかどうかを確認します。そうでない場合は、可能であれば、収まるようにフォームを再配置します。&quot;