Страницы

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

понедельник, 19 ноября 2018 г.

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

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


Ответ

Для 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;

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

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