Вниз
Скачать: CL | DM;

Проблема с WM_INPUTLANGCHANGE   Найти похожие ветки 

← →
Fred Perry   (2004-04-16 18:18) [0]

Доброго времени суток!

Хочу в свою прогу добавить индикатор текущей раскладки клавиатуры. На пустой форме все работет нормально. Но если положить на форму например TEdit, то получается облом... Опытным путем удалось выяснить, что в данном случае сообщение (сабж) вообще не приходит Form"е. Мне думается, что оно посылается только Edit"у (или какому-либо другому контролу, активному в текущий момент). Как побороть?

Заранее благодарен.


← →
WebErr ©   (2004-04-16 18:22) [1]

The WM_INPUTLANGCHANGE message is sent to the topmost affected window after a task"s locale has been changed. It should be used to make any application-specific settings and passed on to the DefWindowProc function to be passed on to any children.


← →
Fred Perry   (2004-04-16 18:29) [2]

Ну так все правильно, только вот у меня оно и НЕ посылается topmost окну. Или topmost в моем случае и будет TEdit, а не форма?


← →
Тимохов ©   (2004-04-16 18:31) [3]


> будет TEdit, а не форма?

будет edit.


← →
WebErr ©   (2004-04-16 18:34) [4]


> Как побороть?

Поймал - передай Parent"у!


← →
Fred Perry   (2004-04-16 18:37) [5]

Хм... плохо... это мне на каждом контроле чтоль эту мессагу ловить? А есть какой-нить другой способ отловить момент смены раскладки? Как в systray"е это происходит?


← →
Fred Perry   (2004-04-16 18:39) [6]

тьфу! не в systray"е, а в internat"е


← →
Fred Perry   (2004-04-17 16:42) [7]

Ну что же вы, мастера?


← →
Боян Георгиев   (2004-04-17 18:13) [8]

GetKeyboardLayout + TTimer


← →
Игорь Шевченко ©   (2004-04-17 21:08) [9]

http://www.schevchenko.net.ru/SRC/EnumFunctions_60.zip


← →
nikkie ©   (2004-04-17 21:30) [10]

да, странно. ощущение, что посылается не topmost окну, а focused.
ловить у всех детей не надо. ловить надо в Application.OnMessage.


← →
Игорь Шевченко ©   (2004-04-17 22:25) [11]

[10] nikkie ©   (17.04.04 21:30)

Цитата из моей ссылки:

procedure TfMain.ApplicationEventsMessage(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if Msg.message = WM_INPUTLANGCHANGEREQUEST then begin
   FCurrentKeyboardLanguage := LOWORD(Msg.lParam);
   KeyboardLayoutsListBox.Repaint();
 end;
end;


← →
nikkie ©   (2004-04-17 23:04) [12]

теперь вижу :)
но WM_INPUTLANGCHANGEREQUEST написано "is posted to the window with the focus", а вот про - почему-то WM_INPUTLANGCHANGE "is sent to the topmost affected window".



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
3-1083051197
kdv1977
2004-04-27 11:33
2004.05.23
фильтр БД


1-1084255430
Elast
2004-05-11 10:03
2004.05.23
запуск программы


1-1083949911
LAnd
2004-05-07 21:11
2004.05.23
Переменные в DLL


8-1078767391
DDA
2004-03-08 20:36
2004.05.23
Изображение на изображение с инверсией цвета


4-1081427159
igornov
2004-04-08 16:25
2004.05.23
Как на чужой форме запретить нажатие кнопок?




   Наверх