BERDAFLEX Software Systems
Главная > Delphi > Изменение языка ввода в программах

Изменение языка ввода в программах

История переиздания
Издание 1.0 2003 г. Сергей Бердачук

В процессе ввода в эксплуатацию ваших творений возникает множество замечаний от пользователей, связанных с повышением скорости ввода данных, удобства интерфейса пользователя и добавления функциональности программы. Часто можно услышать вопрос: "А можно...?", на что обычно отвечаешь: "Возможно все", записываешь все в блокнот, и начинаются поиски решения.

Процесс шлифовки программ продолжается постоянно. И обратная связь с пользователями позволяет создать действительно удобный и полезный продукт. Именно поэтому я приверженец спиральной модели разработки, когда циклы доработок повторяются постоянно как в процессе разработки, так и в процессе эксплуатации программного обеспечения.

Один из таких вопросов — "А возможно ли при вводе данных автоматически менять язык ввода данных?" — попробуем решить сегодня. Для этого воспользуемся системной функцией Windows API LoadKeyboardLayout.

Создадим две процедуры для смены языка и поместим их в общедоступный модуль. Вторая версия данной процедуры позволяет использовать более простой синтаксис вызова для общеупотребительных кодировок.

procedure SetKeyboardLayout(const aLayout: String);overload;
procedure SetKeyboardLayout(const primary LangID, subLangID: Word);overload;
. . .
implementation
. . .
procedure SetKeyboardLayout(const primary LangID, subLangID: Word);
var
  layout: array[0.. KL_NAMELENGTH] of char;
  d: word;
  s: string;
begin
  d:= (subLangID shl 10) or primaryLangID or (Longint(0) shl 16);
  s:= IntToHex(d,8);
  //Вызов функции Windows API для смены языка
  LoadKeyboardLayout(StrCopy(Layout,PChar (s)),KLF_ACTIVATE);
end;

procedure SetKeyboardLayout(const aLayout: String);
var
  primaryLangID, subLangID: Word;
begin
  if UpperCase(aLayout)='RU' then
    primaryLangID := LANG_RUSSIAN
  else if UpperCase(aLayout)='GE' then
    primaryLangID := LANG_GERMAN
  else
   primaryLangID := LANG_ENGLISH;
  SetKeyboardLayout(primaryLangID, SUBLANG_ DEFAULT);
end;

//Пример вызова созданной функции, переключающей язык ввода на русский
procedure TfrmPayment.dbedtFioEnter(Sen-der: TObject);
begin
  SetKeyboardLayout(LANG_RUSSIAN, SUBLANG_DEFAULT);
end;

//Либо более простой синтаксис
procedure TfrmPayment.dbedtFioEnter (Sender: TObject);
begin
  SetKeyboardLayout('RU');
end;

Список кодировок можно посмотреть в модуле windows.pas. Привожу несколько общеупотребительных:

Надеюсь, данный материал поможет добавить вашим программам профессионализма и получить признание пользователей.

Скачать модуль bs_lib

Rambler's Top100 Рейтинг@Mail.ru