Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не происходит сообщения WM_SETFOCUS,WM_KILLFOCUS [WinXP]


Vlad Oshin ©   (2008-09-04 15:03:00) 

Есть форма, на ней есть эдиты
есть 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;//case MSG.message of
end;


WM_KILLFOCUS Окно потеряло фокус ввода от клавиатуры  
WM_SETFOCUS Окно получило фокус ввода от клавиатуры

Ничего не происходит,  как бы не скакал по Editam
хоть с помощью мышки, хоть Tab, хоть переключившись туда-назад в другое приложение.

Почему?


Игорь Шевченко   (2008-09-05 09:54:00) [1]

Application.OnMessage ловит только сообщения, посланные через PostMessage, а эти сообщения (WM_SETFOCUS, WM_KILLFOCUS) посылаются через SendMessage


Leonid Troyanovsky   (2008-09-04 18:16:00) [2]


> Vlad Oshin ©   (04.09.08 18:00) [8]

> И как?

Например, длл без объектов, тот же самый хук на
WM_SETFOCUS,WM_KILLFOCUS or/and subclassing.

Словом, то, на что длл заточена.
Или не длл, а bpl or ocx.

--
Regards, LVT.


Vlad Oshin   (2008-09-04 18:00:00) [3]


> Никак, если не передать из приложения Screen.

передаю, передаю..application, screen


> объекты в длл - MD

ну а как же?
Вот есть приложение, 13 метров с пакетами если.
Надо написать еще одну функцию, возможность выбрать чего-то из сиска(DbGrid).
пишем dll, втыкаем туда форму, подписываемся на сообщение от осн.программы(которая и знать не знает о всех своих dll) об установлении ею коннекта с БД, получаем хендл соединения, делаем запрос, отображаем список.
Выбранный id отсылаем сообщением в программу, которая отсылает сообщение (ничего не зная о том что оно обозначает!) всем своим формам.
Кто подписан на это сообщение - тот извлекает из него id, работает как надо.

dll - 50кб
все - 13 метров

Разослать нужно ~ 2000 мест только в Москве,
еще Питер, Саратов, ННовгород..

И как?


Leonid Troyanovsky   (2008-09-04 17:31:00) [4]


> Vlad Oshin ©   (04.09.08 16:39) [4]

> кстати, да, как же забыл.. Спасибо. Надо проверить как это
> будет в dll

Никак, если не передать из приложения Screen.
И, во-ще, объекты в длл - MD.

--
Regards, LVT.


Vlad Oshin   (2008-09-04 17:01:00) [5]

понял, спасибо
но по другому уже начал делать


Palladin   (2008-09-04 16:45:00) [6]

Что именно не ты им можешь писать? TControl.WindowProc это вообще-то свойство, а не метод. F1 то нажимал? Простой обход по компонентам с заменой свойства и ничего более.


Vlad Oshin   (2008-09-04 16:39:00) [7]


> Менять надо не формам, а TEdit.

да это понятно, но и им не могу. Их вообще не я могу писать

Screen.OnActiveControlChange
кстати, да, как же забыл.. Спасибо. Надо проверить как это будет в dll


Leonid Troyanovsky   (2008-09-04 15:51:00) [8]


> Vlad Oshin ©   (04.09.08 15:39) [2]

> Не могу я для всех(в том числе еще не написанных) форм Оконную
> процедуру менять

Менять надо не формам, а TEdit. Напиши потомка, поменяй WndProc.
А, во-ще, Screen.OnActiveControlChange.

--
Regards, LVT.


Vlad Oshin   (2008-09-04 15:39:00) [9]

но клики по ним отлавливаются

   WM_LBUTTONDOWN,WM_RBUTTONDOWN:
   begin
     memo1.Lines.Add('dasfafadf' );
   end;
и WM_CHAR тоже ловится

может не все сообщения, на самом деле передаются..
А WindowProc мало интереса переписывать,
в том и дело, что это ApplicationEvents1Message последний рубеж
Не могу я для всех(в том числе еще не написанных) форм Оконную процедуру менять


Palladin   (2008-09-04 15:30:00) [10]

У Edit'ов своя очередь сообщений и Application здесь ни причем. Если хочешь ловить сообщения для Edit'ов см. TControl.WindowProc (+ F1)


Наверх

Титульная страница Поиск, карта сайта Написать письмо