2016-06-12 8 views
0

私はDelphi 10を使用しています。デフォルトのvclアプリケーションを作成してアプリケーションを実行すると、メインフォームが常に最初のモニタに表示されます。デフォルトで2番目のモニター?メインフォームを第2のモニタに表示する方法

これは、IDEまたはプロパティまたはコード内のオプション

おかげ

+1

*デフォルトで*?いいえ。コードですか?はい。 –

+2

私はあなたがこれをしないことをお勧めします。ユーザーがフォームを置いて、どこを去ったかを覚えて、次回に表示します。デザインはユーザーから離れています。 –

+0

また、このデザインは、2番目のモニターが存在しない場合に失敗します。したがって、Davidが述べるように、一般的なパターンは、閉じたときのフォームのX、Yの位置を覚えておくことです。また、それが可視のモニタ上の可視領域であれば、復元時に初期位置として使用できます。モニタレイアウトが変更されたときにフォームが表示されないように注意する必要がある場合は、フォームの位置を保存できるようにするコードがかなりあります。 –

答えて

6

TFormは、デフォルトでdmActiveFormに設定されているDefaultMonitor性質を持っているかもしれません。フォームがアクティブでない場合、プライマリモニタが使用されます。ただし、DefaultMonitorを2番目のモニターに具体的に設定する方法はありません。

TFormも、Monitorプロパティを持っていますが、何らかの理由で読み取り専用です。

だから、あなたはその後、グローバルTScreen.Monitors[]リストで希望するモニターを見つけ、することができ、特定のモニターにTFormを表示するには、次のいずれか手動でXにフォームのLeft/Topプロパティを設定

  1. /モニタのBoundsRectまたはWorkareaRectプロパティの境界内にあるY座標。

  2. モニターをフォームの公開MakeFullyVisible()メソッドに渡します。

+0

* TFormにはMonitorプロパティもありますが、何らかの理由で読み取り専用です* *私はこのプロパティが読み込み専用であることに驚いていません。このプロパティを設定した場合、フォームはどうしたらよいでしょうか? –

+0

@SirRufoそれは 'MakeFullyVisible()' alrwadyと同じことをすることができます - 指定されたモニタにフォームを移動してください –

+0

かもしれませんが、MakeFullyVisibleはモニタの変更だけではなく、それ。プロパティを変更するだけで、望ましくない動作が発生する可能性があります。私はそれを読み取り専用として実装していただろう –

1

私は1600px幅の2つのモニターを持っています。私の主なモニターは右にあるので、左にフォームを置くには、自分のLeftプロパティに負の値を渡す必要があります。

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    // (3200/2 = + 1600) * -1 = -1600 
    Left := (Screen.DesktopWidth div 2) * -1; 
end; 

結果は私のセカンダリモニタの左側に最も意味-1600です。

あなたはまたScreen.Monitors[i].Left、このようなコードを呼び出すことにより、各モニターの「最も左」の位置を取得することができます:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    I: Integer; 
    lMens: string; 
begin 
    lMens := ''; 
    for I := 0 to Screen.MonitorCount - 1 do 
    begin 
    lMens := lMens + ' | ' 
      + Format('%d - Left = %d', [i, Screen.Monitors[i].Left]) 
    end; 
    ShowMessage(lMens); 
end; 

が、私はその助けのあなたを願っています。

関連する問題