2015-05-06 2 views
4

У меня есть приложение, которое состоит из формы с FormStyle, объявленной как «fsStayOnTop», так что она всегда отображается поверх всех других окон. Теперь я хотел бы временно показать другую форму, в которой пользователь может установить некоторые параметры. Эта форма также должна отображаться сверху, поэтому я изменяю свойство FormStyle основной формы на «fsNormal» и FormStyle формы, которую я хочу показать «fsStayOnTop». Когда временная форма закрывается, основная форма снова получает «fsStayOnTop».Как сделать форму всегда оставаться на вершине

Теперь форма настроек остается сверху, но только до тех пор, пока я не активирую ее одним щелчком мыши внутри формы. Когда я нажимаю на другое окно после этого, щелкнутая форма сверху, и определенный FormStyle, похоже, больше не действует. Может ли кто-нибудь помочь мне в этом?

Вот мой FormShow и FormClose mehtod:

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
    ScaleOpen := false; 
    SetForegroundWindow(TempHandle); 
    Form1.FormStyle := fsStayOnTop; 
end; 


procedure TForm3.FormShow(Sender: TObject); 
begin 
    TempHandle := GetForegroundWindow; 
    OldScaleM := Form1.GetScale; 
    SaveChanges := False; 
    ScaleOpen := true; 
    Form1.FormStyle := fsNormal; 
    Form3.FormStyle := fsStayOnTop; 
end; 
+0

Вы подтвердили, что, когда «FormStyle, кажется, не имеет никакого эффекта», это действительно 'fsStayOnTop', а не что-то еще? – ain

+0

вам нужно использовать 'ShowModal', когда вы хотите показать свою форму настроек ... – whosrdaddy

+0

Да, я использую showModal, чтобы показать его – Airogat

ответ

10

Вы можете установить форму в состояние «всегда сверху», используя этот код:

 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, 
        SWP_NoMove or SWP_NoSize); 

Вы вернуться в нормальный режим работы с этим код:

 SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, 
        SWP_NoMove or SWP_NoSize); 

Чтобы попробовать это, просто отпустите две кнопки в своей форме и сопоставьте вышеуказанный код с их соответствием для OnClick.

+0

Большое спасибо! Я использовал функцию SetWindowPos в методе OnShow формы настроек, и теперь она работает! – Airogat

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