Немодальное дочернее окно, позволяющее рисовать главную форму сверху - Delphi - PullRequest
3 голосов
/ 04 июня 2009

В Delphi (2009 Pro) - у меня есть основная форма, которая может создавать немодальные дочерние окна. Я хочу, чтобы какая-либо форма фокусировалась сверху, даже если фокус находится на главном окне.

Ответы [ 2 ]

7 голосов
/ 04 июня 2009

С Delphi 2007/2009 VCL изменил свое поведение в отношении родителя формы. В Delphi 1-2006 родителем формы было скрытое окно приложения (Application.Handle). В Delphi 2007/2009 родитель форм является основной формой, а родитель главной формы - рабочий стол.

Если вы хотите изменить это, вы можете либо изменить строку * .dpr Application.MainFormOnTaskbar на False, что возвращает старое поведение, но также делает ваше приложение странным в Vista и Windows 7. Или вы можете переопределить виртуальный метод CreateParams во всех ваших немодальных дочерних формах и установите поле Params.WndParent для рабочего стола (HWND_DESKTOP) или все еще существующее Application.Handle.

type
  TMyChildForm = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := Application.Handle;
end;
0 голосов
/ 04 июня 2009

Несколько окон не могут иметь фокус одновременно. Я предполагаю, что вы хотели сказать, что хотите, чтобы ваша немодальная дочерняя форма была на вершине, когда только MainForm имеет фокус. Вы уже пытались установить для свойства FormStyle дочерней формы значение fsStayOnTop?

...