2012-06-22 2 views
4

У меня есть приложение Delphi 6, которое запускает мастер после появления основной формы. Мастер - это модальная форма. Один из моих пользователей имеет рабочий стол Windows, расширенный для нескольких мониторов. В их случае основная форма отображается на основном мониторе, и мастер появляется на расширенном мониторе. Это создает путаницу, потому что они думают, что приложение застыло, когда они пытаются щелкнуть по основной форме. Поскольку Wizard является открытым и модальным, ничего не происходит, за исключением того, что они слышат предупреждающий тон «ding», который говорит вам, что форма не может получить вход.Форма Delphi 6, установленная для позиционирования с помощью poDesktopCenter, заканчивается на «расширенном» мониторе

Что я могу сделать, чтобы убедиться, что форма Wizard отображается на том же мониторе, что и основная форма, в этом случае основной монитор? У меня есть форма Wizard, установленная в poDesktopCenter.

+1

Delphi 6 как миллион лет, не так ли? Вы можете попробовать «poScreenCenter» (против «рабочего центра»). В противном случае выберите пользовательскую позицию. – paulsm4

+5

Вместо этого я обычно использую poMainFormCenter. –

+1

Рабочий стол распространяется на оба монитора. Вы получаете поведение, о котором вы просили. –

ответ

7

Руководство по теории:

Используйте poMainFormCenter, когда вы хотите, чтобы ваша форма будет центрируется Application.MainForm. Короче говоря, основная форма приложения - это первая форма, которую вы можете видеть при запуске приложения, и вы должны учитывать, что эта основная форма может быть на другом мониторе, чем активное окно, из которого вы создаете и центрируете новую форму.

Или, если вы хотите, чтобы центрировать свою форму в соответствии с его Owner, используйте poOwnerFormCenter, которая ИМХО лучше опыт пользователя, потому что если у вас есть более чем в два окна, открытые друг с другом, вы можете переместить окно на другой монитор и создать новое окно на мониторе, где пользователь работает.

Практическая UseCase:

Пользователь побежал приложение на 1-ом мониторе. Приложение создало Form2 от MainForm. Пользователь переместил Form2 на второй монитор и оттуда нажал кнопку, которая создала другую форму, Form3.

Если вы проектировали свой Form3 использовать poMainFormCenter положения, Form3 будет сосредоточено на MainForm, который в это время на другом мониторе, что ИМХО запутанным.

enter image description here

Если вы будете использовать такой код для создания и показывая 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 в настоящее время находится на, как вы в настоящее время работаете:

enter image description here

Смежные вопросы