То есть даже при нажатии кнопки внутри окна оно само не должно становиться активным. Подходит любое решение, через 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;
Комментариев нет:
Отправить комментарий