#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;
Комментариев нет:
Отправить комментарий