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- | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4- | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5- | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6- | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7- | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ |
Второй — это расширение 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 | < Назад | Оглавление | Далее > |