私はDelphi 10を使用しています。デフォルトのvclアプリケーションを作成してアプリケーションを実行すると、メインフォームが常に最初のモニタに表示されます。デフォルトで2番目のモニター?メインフォームを第2のモニタに表示する方法
これは、IDEまたはプロパティまたはコード内のオプション
おかげ
私はDelphi 10を使用しています。デフォルトのvclアプリケーションを作成してアプリケーションを実行すると、メインフォームが常に最初のモニタに表示されます。デフォルトで2番目のモニター?メインフォームを第2のモニタに表示する方法
これは、IDEまたはプロパティまたはコード内のオプション
おかげ
TForm
は、デフォルトでdmActiveForm
に設定されているDefaultMonitor
性質を持っているかもしれません。フォームがアクティブでない場合、プライマリモニタが使用されます。ただし、DefaultMonitor
を2番目のモニターに具体的に設定する方法はありません。
TForm
も、Monitor
プロパティを持っていますが、何らかの理由で読み取り専用です。
だから、あなたはその後、グローバルTScreen.Monitors[]
リストで希望するモニターを見つけ、することができ、特定のモニターにTForm
を表示するには、次のいずれか手動でXにフォームのLeft
/Top
プロパティを設定
BoundsRect
またはWorkareaRect
プロパティの境界内にあるY座標。モニターをフォームの公開MakeFullyVisible()
メソッドに渡します。
* TFormにはMonitorプロパティもありますが、何らかの理由で読み取り専用です* *私はこのプロパティが読み込み専用であることに驚いていません。このプロパティを設定した場合、フォームはどうしたらよいでしょうか? –
@SirRufoそれは 'MakeFullyVisible()' alrwadyと同じことをすることができます - 指定されたモニタにフォームを移動してください –
かもしれませんが、MakeFullyVisibleはモニタの変更だけではなく、それ。プロパティを変更するだけで、望ましくない動作が発生する可能性があります。私はそれを読み取り専用として実装していただろう –
私は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;
が、私はその助けのあなたを願っています。
*デフォルトで*?いいえ。コードですか?はい。 –
私はあなたがこれをしないことをお勧めします。ユーザーがフォームを置いて、どこを去ったかを覚えて、次回に表示します。デザインはユーザーから離れています。 –
また、このデザインは、2番目のモニターが存在しない場合に失敗します。したがって、Davidが述べるように、一般的なパターンは、閉じたときのフォームのX、Yの位置を覚えておくことです。また、それが可視のモニタ上の可視領域であれば、復元時に初期位置として使用できます。モニタレイアウトが変更されたときにフォームが表示されないように注意する必要がある場合は、フォームの位置を保存できるようにするコードがかなりあります。 –