Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Язык ввода


Автор: Artemon 3.2.2006, 09:57
Добавил обработчик нажатия на кнопку клавиатуры, для того что бы в своей программе - знать какой язык ввода стоит.

Но как-то странно это работает........

При проходе дебагером - вижу (на трее) стоит английский язык, а ф-ия говорит что русский.

А иногда наооборот.

В чем дело?

Код


  void __fastcall TFormMain::ApplicationEvents1Message(tagMSG &Msg,
                             bool &Handled)
{

  switch( Msg.message )
        {
        case WM_KEYDOWN:
                       if( (BYTE)(Msg.wParam) == 16 )
                         {
                         char mas[KL_NAMELENGTH];
                         ZeroMemory(mas, sizeof(mas)/sizeof(char));
                         GetKeyboardLayoutName( mas );

                          if( strcmp(mas, "00000419") == 0 )
                            {
                            FormSearchExpert->RBRu->Checked = true;
                            }
                            else
                          if( strcmp(mas, "00000409") == 0 )
                            {
                            FormSearchExpert->RBEn->Checked = true;
                            }
                         }
        }
}


Автор: _hunter 3.2.2006, 12:02
во-первых: интересно ты массив обнуляеш...
во-вторых: лучше GetKeyboardLayout() юзай...

Автор: Artemon 4.2.2006, 15:17
А яем это не нравится моё обнуление?

Автор: _hunter 6.2.2006, 11:37
тем, что sizeof(mas) ( а точнее sizeof(любой_массив) ) всегда == 4 ( на IA32 ) поэтому ты обнуляеш только первые четыре байта.

Автор: Artemon 6.2.2006, 16:07
__Hunter, а вот тут я не согласен.
если массив константного размера - то sizeof - вернет размер массива.

Автор: _hunter 6.2.2006, 16:44
хм... действительно...

+ только сейчас заметил. у тебя не совпадают показания программы с реальными в момент отладки?

Автор: Artemon 6.2.2006, 18:19
__Hunter, ты мне в форуме по WinApi, посоветовал, ловить сообщение, которое приходит после смены языка - так вот - ОНО НЕ ПРИХОДИТ ВООБЩЕ.


Удалось поймать сообщение которое приходит до смены языка.


P.S.
Не помню название ни того ни другого smile
Добавлено @ 18:20
А что касается приведенног в данном топике кода - так ОН МОРАЛЬНО УСТАРЕЛ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)