История переиздания | ||
---|---|---|
Издание 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. Привожу несколько общеупотребительных:
LANG_BELARUSIAN;
LANG_ENGLISH;
LANG_FRENCH;
LANG_GERMAN;
LANG_POLISH;
LANG_RUSSIAN;
LANG_UKRAINIAN.
Надеюсь, данный материал поможет добавить вашим программам профессионализма и получить признание пользователей.
Скачать модуль bs_lib