web-dev-qa-db-ja.com

2台目のモニターでプログラムを開始しますか?

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

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

20
stukelly

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

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

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

23
Barry Kelly

グローバルScreenオブジェクト(Formsの一部)には、モニターの概念があります。これはDelphi6または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;

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

28
Jim McKeeth

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

1
Nathen Silver
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;
1
sukhoy