Программирование на Delphi - обмен опытом / Язык и раскладка клавиатуры

© Зайцев Олег 1998-2004
Лучшая портативная техника. Плееры Камеры Телефоны Компьютеры
Покупателям, пришедшим на www.porta.ru по этой ссылке - дополнительная скидка 1%
Железо | Система | WEB | Компоненты | Графика | Ссылки | Мультимедиа | Сети | Прочее | Реестр | Литература

Статистика

Язык и раскладка клавиатуры

Рекомендую:
Главная страница \ Железо \ Работа с клавиатурой \ Язык и раскладка клавиатуры

  • Язык и раскладка клавиатуры

    Язык и раскладка клавиатуры

    Переключение языка из программы * * Задать вопрос Наверх
    Для переключения языка применяется вызов LoadKeyboardLayout:
    var 
     russian, latin: HKL; 
    
     russian := LoadKeyboardLayout('00000419', 0);
     latin   := LoadKeyboardLayout('00000409', 0);
    
    -- -- -- -- -- где то в  программе --- --- --- 
    
     SetActiveKeyboardLayout(russian);
    

    Регистрация переключения раскладки клавиатуры * * Задать вопрос Наверх
    При переключении языка ввода активное окно активного приложения получает два сообщения:

    Продемострировать работу с данными сообщениями можно на следующем примере:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Application.OnMessage := MsgHandler;
    end;
    
    procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
    begin
     if Msg.message = WM_INPUTLANGCHANGEREQUEST then begin
      Memo1.Lines.Add('Запрос на смену языка ввода - '+IntToStr(Msg.lParam));
     end;
     if Msg.message = WM_INPUTLANGCHANGE then begin
      Memo1.Lines.Add('Язык ввода изменен - '+IntToStr(Msg.lParam));
     end;
    end;
    
    В данном примере производится перехват всех сообщений, получаемых приложением. Любопытно заметить, что приложение получает сообщения WM_INPUTLANGCHANGEREQUEST и WM_INPUTLANGCHANGE, но наш обработчик получает только WM_INPUTLANGCHANGEREQUEST. Поэтому использовать следует именно WM_INPUTLANGCHANGEREQUEST, при этом можно анализировать значение, передаваемое ему через lParam - этот параметр содержит HKL - Handle клавиатурной ракладки (его можно узнать при помощи функции LoadKeyboardLayout).

    Блокировка переключения раскладки клавиатуры * * Задать вопрос Наверх
    Блокировка переключения раскладки клавиатуры в приложении реализуется достаточно просто - необходимо перехватить сообщение WM_INPUTLANGCHANGEREQUEST. Это реализовано в примере:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Application.OnMessage := MsgHandler;
    end;
    
    procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
    begin
     if Msg.message = WM_INPUTLANGCHANGEREQUEST then 
      if CheckBox1.checked then 
       Handled := true;
    end;
    
    В данном случае при включении переключателя CheckBox1 переключение раскладки клавиатуры в приложении блокируется (но в других приложениях оно будет работать)


    © Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA - Хостинг от AGAVA.ru