5

メイン フォームが表示された後にウィザードを起動する Delphi 6 アプリケーションがあります。ウィザードはモーダル フォームです。ユーザーの 1 人が、Windows デスクトップを複数のモニターに拡張しています。この場合、メイン フォームはプライマリ モニタに表示され、ウィザードは拡張モニタに表示されます。メインフォームをクリックしようとすると、アプリがフリーズしたと思うため、混乱が生じます。ウィザードは開いていてモーダルであるため、フォームが入力を受信できないことを知らせる警告音が聞こえる以外は何も起こりません。

ウィザード フォームがメイン フォームと同じモニター (この場合はプライマリ モニター) に表示されるようにするにはどうすればよいですか? ウィザード フォームを poDesktopCenter に設定しました。

4

1 に答える 1

8

手動理論:

フォームを の中央に配置する場合に使用poMainFormCenterしますApplication.MainForm。つまり、アプリケーションのメイン フォームは、アプリケーションを実行したときに最初に表示されるフォームです。このメイン フォームは、新しいフォームを作成して中央に配置するアクティブなウィンドウとは別のモニター上にある可能性があることを考慮する必要があります。

または、フォームをその で中央に配置する場合は、ユーザー エクスペリエンスに優れた をOwner使用します。これは、2 つ以上のウィンドウを互いに開いている場合、ウィンドウを別のモニターに移動して、モニター上に新しいウィンドウを作成できるためです。poOwnerFormCenterユーザーは現在取り組んでいます。

実際のユースケース:

ユーザーは最初のモニターでアプリケーションを実行しました。アプリケーションは、Form2その から を作成しましたMainForm。ユーザーはそれForm2を 2 番目のモニターに移動し、そこから別のフォームを作成するボタンを押しましたForm3

位置Form3を使用するように設計した場合、は、現時点で別のモニターにあるによって中央に配置されます。poMainFormCenterForm3MainForm

ここに画像の説明を入力

の作成と表示に次のようなコードを使用する場合Form3:

procedure TForm2.Button1Click(Sender: TObject);
begin
  // the Owner parameter Self (or Form2 here) in the Form3 constructor along 
  // with the Position set to poOwnerFormCenter will ensure you that the form 
  // will be centered by the current form position, so on the current monitor 
  // where the user works on as well
  Form3 := TForm3.Create(Self);
  try
    Form3.Position := poOwnerFormCenter;
    Form3.ShowModal;
  finally
    Form3.Free;
  end;
end;

Form3集中しますが、主に現在取り組んでいるものForm2と同じモニター上にあります。Form2

ここに画像の説明を入力

于 2012-06-22T11:24:08.850 に答える