Delphi Модальная Форма Позиции - PullRequest
1 голос
/ 30 августа 2011

Все модальные формы отображаются в левой верхней части экрана, в то время как настройки следующие:

  BorderIcons = [biSystemMenu]
  BorderStyle = bsSingle
  Position = poOwnerFormCenter

Раньше он отображался в соответствии с настройкой, но недавно я внес некоторые изменения, которые вызывают проблему

Позвольте мне объяснить подробнее, чтобы вы могли предложить соответствующее решение.

В моем приложении более 50 форм, и я открываю их как CustomerForm.Show/ShowModal. Все формы унаследованы от одной корневой формы, которая имеет следующий код для отображения значка на панели задач

procedure TBaseForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_Ex_AppWindow;
  Params.WndParent := GetDesktopwindow;
end;

Была одна проблема, что всякий раз, когда открывалось или открывалось диалоговое окно сохранения файла из любой формы (будь то модальная форма или нет), главная форма приходила сверху, чтобы исправить это, я делала пустую основную форму и поместите Application.ShowMainForm := false; в файл проекта, и это работало нормально, но все модальные формы начали появляться в левом верхнем углу экрана.

Подскажите, пожалуйста, по этому поводу?

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Добавьте это к созданию вашей основной формы:

SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
  WS_EX_TOPMOST);
0 голосов
/ 30 августа 2011

Поскольку вы используете один и тот же предок для всех ваших окон, вы можете добавить свою собственную публичную функцию ShowModal с параметром Parent: TYourForm.

В этом методе вы получите положение Parent, рассчитайтецентр, и вы перемещаете ваше модальное окно в его центр.После этого вы вызываете настоящий ShowModal по-своему ...

...