-
Есть форма, на ней есть эдиты есть ApplicationEvents1: TApplicationEvents;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
case MSG.message of
WM_SETFOCUS,WM_KILLFOCUS:
begin
memo1.Lines.Add('aaaaaaaaaaa');
end;
end; end;
WM_KILLFOCUS Окно потеряло фокус ввода от клавиатуры WM_SETFOCUS Окно получило фокус ввода от клавиатуры Ничего не происходит, как бы не скакал по Editam хоть с помощью мышки, хоть Tab, хоть переключившись туда-назад в другое приложение. Почему?
-
У Edit'ов своя очередь сообщений и Application здесь ни причем. Если хочешь ловить сообщения для Edit'ов см. TControl.WindowProc (+ F1)
-
но клики по ним отлавливаются
WM_LBUTTONDOWN,WM_RBUTTONDOWN: begin memo1.Lines.Add('dasfafadf' ); end; и WM_CHAR тоже ловится
может не все сообщения, на самом деле передаются.. А WindowProc мало интереса переписывать, в том и дело, что это ApplicationEvents1Message последний рубеж Не могу я для всех(в том числе еще не написанных) форм Оконную процедуру менять
-
> Vlad Oshin © (04.09.08 15:39) [2]
> Не могу я для всех(в том числе еще не написанных) форм Оконную > процедуру менять
Менять надо не формам, а TEdit. Напиши потомка, поменяй WndProc. А, во-ще, Screen.OnActiveControlChange.
-- Regards, LVT.
-
> Менять надо не формам, а TEdit.
да это понятно, но и им не могу. Их вообще не я могу писать
Screen.OnActiveControlChange кстати, да, как же забыл.. Спасибо. Надо проверить как это будет в dll
-
Что именно не ты им можешь писать? TControl.WindowProc это вообще-то свойство, а не метод. F1 то нажимал? Простой обход по компонентам с заменой свойства и ничего более.
-
понял, спасибо но по другому уже начал делать
-
> Vlad Oshin © (04.09.08 16:39) [4]
> кстати, да, как же забыл.. Спасибо. Надо проверить как это > будет в dll
Никак, если не передать из приложения Screen. И, во-ще, объекты в длл - MD.
-- Regards, LVT.
-
> Никак, если не передать из приложения Screen.
передаю, передаю..application, screen
> объекты в длл - MD
ну а как же? Вот есть приложение, 13 метров с пакетами если. Надо написать еще одну функцию, возможность выбрать чего-то из сиска(DbGrid). пишем dll, втыкаем туда форму, подписываемся на сообщение от осн.программы(которая и знать не знает о всех своих dll) об установлении ею коннекта с БД, получаем хендл соединения, делаем запрос, отображаем список. Выбранный id отсылаем сообщением в программу, которая отсылает сообщение (ничего не зная о том что оно обозначает!) всем своим формам. Кто подписан на это сообщение - тот извлекает из него id, работает как надо.
dll - 50кб все - 13 метров
Разослать нужно ~ 2000 мест только в Москве, еще Питер, Саратов, ННовгород..
И как?
-
> Vlad Oshin © (04.09.08 18:00) [8]
> И как?
Например, длл без объектов, тот же самый хук на WM_SETFOCUS,WM_KILLFOCUS or/and subclassing.
Словом, то, на что длл заточена. Или не длл, а bpl or ocx.
-- Regards, LVT.
-
Application.OnMessage ловит только сообщения, посланные через PostMessage, а эти сообщения (WM_SETFOCUS, WM_KILLFOCUS) посылаются через SendMessage
|