Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Как в Delphi сделать окно всегда неактивным

#windows #delphi #winapi #firemonkey


То есть даже при нажатии кнопки внутри окна оно само не должно становиться активным.
Подходит любое решение, через WinAPI в том числе. 

Фреймворк FMX
    


Ответы

Ответ 1



Для VCL Вам нужно у формы переопределить метод CreateParams и в поле Params.ExStyle добавить флаг WS_EX_NOACTIVATE procedure TForm1.CreateParams(var AParams: TCreateParams); begin inherited CreateParams(AParams); AParams.ExStyle := AParams.ExStyle or WS_EX_NOACTIVATE; end; При работе с WinAPI этот флаг нужно добавить в первый параметр функции CreateWindowEx() Для FMX, исходя из метода TPlatformWin.CreateWindow вы параметр ExStyle не переопределите Если отказаться от кроссплатфоменности FMX, то для созданного окна можно поменять параметр EX_STYLE вызвав функцию SetWindowLongPtr procedure MakeNoActivate(AWnd: HWND); var LOldVal: NativeInt; begin LOldVal := GetWindowLongPtr(AWnd, GWL_EXSTYLE); SetWindowLongPtr(AWnd, GWL_EXSTYLE, LOldVal or WS_EX_NOACTIVATE); end; Получить HWND у FMX формы можно так uses FMX.Platform.Win; ............ var LWnd: HWND begin LWnd := FmxHandleToHWND(Form1.Handle); ................ end;

Комментариев нет:

Отправить комментарий