8

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;

これは問題なく動作しますが、通常は (常にではありませんが) デスクトップの下部にあるタスクバーが考慮されていません。したがって、タスクバーがアプリケーションのウィンドウの邪魔になると、アプリケーションが見えなくなります。

タスクバーの位置を除いた画面の使用可能な位置とサイズの設定を取得するにはどうすればよいですか?

4

3 に答える 3

15

Windows が実際にあなたが思っているように機能するかどうかはわかりません。私は複数のモニターを持っていますが、それらの高さが同じではありません。そのため、私のデスクトップはすべてのモニターで高さが均一ではありません。

私がしていることは、Screen.MonitorCount と Screen.Monitors 配列を使用して、どのモニターにほとんどのウィンドウが含まれているかを判断し、その画面で適切な四角形を見つけることです。TMonitor の WorkareaRect プロパティは、タスクバーやツールバーを除外した、特定のモニターの作業領域の境界を示します。

于 2009-09-15T03:15:11.213 に答える
13

Screen.WorkArea* プロパティを使用する必要があります。

  Screen.WorkAreaRect
  Screen.WorkAreaHeight
  Screen.WorkAreaLeft
  Screen.WorkAreaTop
  Screen.WorkAreaWidth

また

Screen.Monitors[I].WorkareaRect
于 2009-09-15T03:21:48.080 に答える
6

現在のフォームの作業領域を確認するには、Monitor.WorkareaRect を使用します。例えば

BoundsRect := Monitor.WorkareaRect;

フォーム サイズを最大化せずに最大領域に設定します。

TCustomForm.MakeFullyVisibleメソッドも見てください。

D2006 ヘルプから:

「MakeFullyVisible は、フォームが指定されたモニターに完全に収まるかどうかをチェックします。そうでない場合は、フォームが収まるように再配置します (可能であれば)。」

于 2009-09-15T05:01:24.650 に答える