質問

DelphiまたはC ++ Builderでアプリケーションを表示するモニターを指定する方法はありますか?

私は、ホスピタリティシステムによって生成されたセカンダリモニターにキッチンの注文を表示する、顧客向けの簡単なプログラムを開発しています。現在、2番目のモニターが起動した後、ウィンドウを手動で2番目のモニターにドラッグする必要があります。

役に立ちましたか?

解決

プログラムをシャットダウンする前にウィンドウの位置を保存し、起動時にそれらを復元します。マルチモニターディスプレイは、デスクトップのサイズを大きくするだけです。他のモニタサーフェスには、同じX / Y平面の異なるセクションがあり、その原点はプライマリモニタの左上にあります。

これは、複数のコンポーネントのいずれかによって自動的に実行できます。

ところで、FormsユニットのScreen変数には、MonitorCountというプロパティと、別のインデックス可能なプロパティMonitors [Index:Integer]:TMonitorがあります。 TMonitorには、左、上、幅、高さなどを示すプロパティがあるため、必要な情報はすべてそこにあります。

他のヒント

グローバルScreenオブジェクト(Formsの一部)には、モニターの概念があります。これはDelphi 6または7頃に追加されたと思います。次のコードが機能します。

// Put the form in the upper left corner of the 2nd monitor
//   if more then one monitor is present.
if Screen.MonitorCount > 1 then
begin
  Left := Screen.Monitors[1].Left;
  Top := Screen.Monitors[1].Top;
end;

その位置からの任意の正のオフセットを使用して、そのモニターのどこにでも配置できます。そこから幅と高さを取得して、寸法を知ることができます。

実際にはあなたの質問が示す答えではありませんが、アプリケーションが閉じられたときにウィンドウ設定(サイズ、位置、最大化状態)を保存し、起動時に適用できませんでしたか?

procedure TMDIChild.btnShowMonClick(Sender: TObject);
begin
    if Screen.MonitorCount > 1 then
    begin
      FormShow.Left:=Screen.Monitors[1].Left;
      FormShow.Top:=Screen.Monitors[1].Top;
      FormShow.Width:=Screen.Monitors[1].Width;
      FormShow.Height:=Screen.Monitors[1].Height;
    end
    else
    begin
        FormShow.Show;
    end;
end;

Delphi 5で少し前に似たようなことをしました:

procedure TForm18.FormCreate(Sender: TObject);
var
  Mon: TMonitor;
  MonitorIdx: Integer;
begin
  MonitorIdx := 1; // better read from configuration
  if (MonitorIdx <> Monitor.MonitorNum) and (MonitorIdx < Screen.MonitorCount) then begin
    Mon := Screen.Monitors[MonitorIdx];
    Left := Left + Mon.Left - Monitor.Left;
    Top := Top + Mon.Top - Monitor.Top;
  end;
end;

Windowsでは、CreateWindow API呼び出しでウィンドウの座標を指定できます。プロセスのその部分にアクセスできるかどうかを知るには、DelphiやC ++ Builderについて十分な知識がありません。

WM_CREATEハンドラーでウィンドウを移動できる場合もあります。

EnumDisplayMonitorsは、システム内の各モニターの座標を提供します。


明らかに、DelphiとC ++ Builderには、この答えをやや無関係にする機能があります。誰かがこの質問に出くわしたが、異なる環境で回答が必要な場合に備えて、ここに残しておきます。

Windowsシステムではあまり処理を行わないため、このようなハックをお勧めします。

表示可能なデスクトップの幅を取得し(両方のモニターを組み合わせて)、半分に分割して開始位置にします。

apiがmonitor2のサイズを示すものを調べることもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top