netlib.narod.ru< Назад | Оглавление | Далее >

Обработка информации при вводе с иноязычных клавиатур

Всегда полезно протестировать свои программы на разных типах клавиатур, отличных от установленной на вашей машине, в частности, на иноязычных клавиатурах 1. При этом запустить программу с русской раскладкой клавиатуры намного легче, чем съездить в Москву. Для такого тестирования можно установить иноязычные раскладки клавиатуры — небольшие файлы, позволяющие с имеющейся клавиатуры генерировать коды символов других языков.

Ниже вы найдете инструкции по установке иноязычных раскладок клавиатуры в английской версии Windows 2000.

Откройте Панель управления и щелкниет по значку Regional Options (Язык и стандарты), а затем в открывшемся окне перейдите на вкладку General (Общие). В списке Language Settings For The System (Языковые параметры системы) скорее всего будет отмечена лишь Western Europe and United States (Западная Европа и США) как раскладка по умолчанию. Установите флажки для Arabic, Cyrillic, Greek и Hebrew (Арабский, Кириллица, Греческий, Иврит) и щелкните ОК. Система попросит вставить диск Windows 2000 CD. после чего последует ее перезагрузка.

После перезагрузки вызовите Панель управления и щелкните по значку Keyboard (Клавиатура). Перейдите на вкладку Input Locales (Языки и раскладки). В разделе Installed Input Locales (Установленные языки ввода и раскладки клавиатуры) щелкните кнопку Add (Добавить) и по очереди добавьте следующие языки ввода, если они еще не установлены: Arabic (Egypt), English (United Kingdom), English (United States), German (Germany), Greek, Hebrew и Russian. В результате будут также установлены раскладки клавиатуры, ассоциированные с этими региональными параметрами.

Если раньше вы не устанавливали дополнительные раскладки клавиатуры и оставили в диалоговом окне Keyboard Properties (Свойства: Клавиатура) флажок Enable Indicator On Taskbar (Отображать индикатор на панели задач), то в системном меню вы увидите новый значок в виде квадратика с буквами EN (что означает English). Щелкнув его, можно переключиться на альтернативную английскую, арабскую, немецкую, греческую, русскую клавиатуру или клавиатуру для иврита. Эти изменения повлияют лишь на текущее активное приложение.

А теперь поэкспериментируем с программами KeyExamine и KeyExamineWithScroll. Запустите одну из них и переключитесь на раскладку English (United State}, если она еще не включена. Нажмите Shift + 3 — вы получите код KeyChar 0x0023 и символ #. А теперь переключитесь на раскладку English (United Kingdom) и нажмите ту же комбинацию клавиш. Теперь вы получите код 0х00A3 и символ £.

Переключитесь на раскладку German (Germany), нажмите Y и Z. Заметьте, что как коды KeyCode, так и KeyChar показывают символ Z, когда вы нажимаете Y, и наоборот. Это так, поскольку на немецкой клавиатуре эти символы поменялись местами.

Не переключая раскладку клавиатуры, нажмите клавишу +/= (при этом значение KeyCode будет равно 221, что соответствует Keys.OemCloseBrackets), затем клавишу А. В результате появляется символ а с акутом (острым ударением): á;, соответствующий символу Unicode 0x00E1. В немецкой клавиатуре клавиша +/= называется мертвой. Если после мертвой клавиши нажать подходящий символ, получится символ со знаком ударения. С мертвой клавишей можно использовать любые гласные в верхнем или нижнем регистре: a, e, i, o, u или y (в немецкой раскладке последний символ водится клавишей Z). Если нажать +/= в верхнем регистре, затем гласную в любом регистре (в этом случае a, e, i, o, u, но не y), получится буква со знаком грависа, например: à.

Если после мертвой клавиши нажать согласную букву, напечатается отдельно знак ударения (´ или `), за которым следует сама буква. Чтобы напечатать только знак ударения, после мертвой клавиши нажмите пробел.

Аналогично, если на немецкой клавиатуре после клавиши ~/` нажать a, e, i, o или u, получится буква со знаком циркумфлекса: â (клавиша ~/`, нажатая вместе с Shift, не является мертвой — она генерирует символ °). Умляуты существуют в немецком языке только в нижнем регистре: ä, ö и ü. Эти символы генерируются клавишами "/', :/; и {/[ соответственно.

До сих пор мы работали со значениями KeyChar, сопутствовавшими событиям KeyPress, из 8-разрядного диапазона. Это символы, определяемые одним или двумя стандартами, первый из которых  это ANSI Х3.4-1986 или 7-разрядный ASCII:


  -0-1-2-3 -4-5-6-7 -8-9-A-B -C-D-E-F
2-  !"# $%&' ()*+ ,-./
3- 0123 4567 89:; <=>?
4- @ABC DEFG HIJK LMNO
5- PQRS TUVW XYZ[ \]^_
6- `abc defg hijk lmno
7- pqrs tuvw xyz{ |}~ 

Второй — это расширение ASCII, документированное в ANSI/ISO 8859-1-1987, обычно его называют просто «Latin 1»:


  -0-1-2-3 -4-5-6-7 -8-9-A-B -C-D-E-F
A-  ¡¢£ ¤¥¦§ ¨©ª« ¬-®¯
B- °±²³ ´µ· ¸¹º» ¼½¾¿
C- ÀÁÂÃ ÄÅÆÇ ÈÉÊË ÌÍÎÏ
D- ÐÑÒÓ ÔÕÖ× ØÙÚÛ ÜÝÞß
E- àáâã äåæç èéêë ìíîï
F- ðñòó ôõö÷ øùúû üýþ 

Эти наборы символов годятся лишь для языков, использующих только латинский алфавит. Для поддержки алфавитов других языков (включая китайские, японские и корейские иероглифы) была разработана 16-разрядная кодировка — Unicode. В общем случае программы Windows Forms, написанные на С#, не требуют дополнительных мер для поддержки Unicode. Например, длина типа данных char в С# равна 16 разрядам.

Если переключиться на русскую раскладку и нажать несколько клавиш, будут набраны кириллические буквы, коды символов для которых находятся в диапазоне 0x0410 – 0x044F, определенном в стандарте Unicode как Основной русский алфавит. Аналогично можно переключиться на арабскую, греческую, еврейскую клавиатуру и набирать символы алфавитов этих языков.

Если раньше вы не сталкивались с этой проблемой, у вас может возникнуть вопрос: а как иноязычные алфавиты и клавиатуры работали до Unicode, когда коды символов были только 8-разрядными? Если коротко: с этим была полная неразбериха.

Чтобы информировать программу об изменении раскладки клавиатуры пользователем, можно установить обработчики событий InputLanguageCbanging и InputLanguageChanged или переопределять методы OnInputLanguageChanging и OnInputLanguageChanged, показанные в таблице (имена событий в методах, делегатах и аргументов событий заменены многоточием):


События Form (выборочно)



Событие Метод Делегат Аргумент

InputLanguageCbanging On... ...EventHandler ...EventArgs
InputLanguageChanged On... ...EventHandler ...EventArgs


Первым происходит событие InputLanguageCbanging, при этом объект InputLanguageChangingEventArgs содержит сведения о языке, на который хочет переключиться пользователь. Если программа не допускает такое переключение, присвойте свойству Cancel объекта InputLanguageChangingEventArgs значение true, иначе вскоре будет получено событие InputLanguageChanged.

Чтобы лучше разобраться в том, как это работает, взгляните на класс InputLanguage в пространстве имен System.Windows.Forms и класс CultureInfo в пространстве имен System.Globalization.



1 Диаграммы многих иноязычных клавиатур приведены в книге Nadine Kano «Developing International Software for Windows 95 and Windows NT». Эта книга вышла в издательстве Microsoft Press, а ее электронная версия доступна на Web-узле библиотеки MSDN (http://msdn.microsoft.com/librarу, раздел Development (General) and Internationalization).


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz