2009-06-03 2 views
3

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

ответ

0

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

+0

Разве он не хочет иметь прямо противоположное? Основная форма должна быть в состоянии стать поверх других окон, что изменили Delphi 2007 и 2009. –

7

С 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; 
Смежные вопросы