Конференция "WinAPI" » Не происходит сообщения WM_SETFOCUS,WM_KILLFOCUS [WinXP]
 
  • Vlad Oshin © (04.09.08 15:03) [0]
    Есть форма, на ней есть эдиты
    есть 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, хоть переключившись туда-назад в другое приложение.

    Почему?
  • Palladin © (04.09.08 15:30) [1]
    У Edit'ов своя очередь сообщений и Application здесь ни причем. Если хочешь ловить сообщения для Edit'ов см. TControl.WindowProc (+ F1)
  • Vlad Oshin © (04.09.08 15:39) [2]
    но клики по ним отлавливаются

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

    может не все сообщения, на самом деле передаются..
    А WindowProc мало интереса переписывать,
    в том и дело, что это ApplicationEvents1Message последний рубеж
    Не могу я для всех(в том числе еще не написанных) форм Оконную процедуру менять
  • Leonid Troyanovsky © (04.09.08 15:51) [3]

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

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

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

    --
    Regards, LVT.
  • Vlad Oshin © (04.09.08 16:39) [4]

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

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

    Screen.OnActiveControlChange
    кстати, да, как же забыл.. Спасибо. Надо проверить как это будет в dll
  • Palladin © (04.09.08 16:45) [5]
    Что именно не ты им можешь писать? TControl.WindowProc это вообще-то свойство, а не метод. F1 то нажимал? Простой обход по компонентам с заменой свойства и ничего более.
  • Vlad Oshin © (04.09.08 17:01) [6]
    понял, спасибо
    но по другому уже начал делать
  • Leonid Troyanovsky © (04.09.08 17:31) [7]

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

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

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

    --
    Regards, LVT.
  • Vlad Oshin © (04.09.08 18:00) [8]

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

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


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

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

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

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

    И как?
  • Leonid Troyanovsky © (04.09.08 18:16) [9]

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

    > И как?

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

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

    --
    Regards, LVT.
  • Игорь Шевченко © (05.09.08 09:54) [10]
    Application.OnMessage ловит только сообщения, посланные через PostMessage, а эти сообщения (WM_SETFOCUS, WM_KILLFOCUS) посылаются через SendMessage
 
Конференция "WinAPI" » Не происходит сообщения WM_SETFOCUS,WM_KILLFOCUS [WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]