Управление где (x, y) недавно открытого окна в Delphi 2006 - PullRequest
2 голосов
/ 19 декабря 2008

Я пытаюсь контролировать координаты, где моя программа открывает новое окно, потому что в настоящее время они открываются друг над другом. У кого-нибудь есть рабочий пример, как это сделать?

Ответы [ 2 ]

6 голосов
/ 19 декабря 2008

Вы всегда можете установить свойства .Top и .Left вручную, например:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm : TForm;
begin
  frm := TForm.Create(Self);
  frm.Left := 100;  //replace with some integer variable
  frm.Top := 100;  //replace with some integer variable
  frm.Show;
end;

Однако в Windows есть алгоритм размещения окон по умолчанию, который пытается сохранить заголовки каждого окна видимыми. На моем компьютере повторные нажатия на эту процедуру Button1 дают красиво сложенные окна:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm : TForm;
begin
  frm := TForm.Create(Self);
  frm.Show;
end;

Также не забывайте, что вы можете использовать встроенный набор местоположений TPosition:

procedure TForm1.Button1Click(Sender: TObject);
var
  frm : TForm;
begin
  frm := TForm.Create(Self);
  frm.Position := poOwnerFormCenter;
  {
  Other possible values:
    TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly,
      poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);

  //}
  frm.Show;
end;
4 голосов
/ 20 декабря 2008

Этот тип функциональности был объяснен для C # в другой вопрос по SO .

Также, для Delphi, ознакомьтесь с Понимание и использование функций обратного вызова Windows в Delphi, в котором описывается получение дескрипторов для открытых в данный момент окон. И посмотрите Встряхните окно (форму) из кода Delphi , который описывает, как переместить окно, как только вы получите его дескриптор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...