Господа, давно работаю с Delphi, но до сих пор есть проблемы с последовательностью обработки сообщений Windows и реакции на них. Если кто в этом ориентируется, подскажите, плиз.
Мне нужно что-то вроде экранной клавиатуры, то есть главная форма приложения должна принимать и обрабатывать клики мышкой, но приложение не должно активироваться. Подскажите, где, когда и что я должен перехватить после получения WM_LBUTTONDOWN, чтобы код выполнить, но не допустить... э-э-э "активации" приложения. Готов даже отказаться от других компонент: сам всё на форме нарисую как надо.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
21-04-2024 01:10
Похоже, я был дураком :-)
Я думал, что в процессе обработки клика мышки мы сами делаем наше окно активным. Но путём перехвата каких-то сообщений можно будет этого избежать. Однако когда окно получает WM_LBUTTONDOWN, оно уже активно, то есть активация происходит раньше и выполняется механизмами MS Windows. А чтобы окно не активировалось при клике мышкой, нужно его сразу создавать таким. Приведённый ниже код решает мою задачу
type
TForm1 = class(TForm)
private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.