Руководство по actionscript. часть 4, стр. 078
Когда используется клавиатура с раскладкой U. S. English, значение переменной charCode представляет код символа из таблицы ASCII, который логически соответствует последней нажатой или отпущенной клавише. В некоторых случаях для одной и той же клавиши переменная charCode может принимать два возможных значения в зависимости от того, была ли нажата клавиша Shift. Например, код символа для клавиши S на клавиатуре с раскладкой U. S. English соответствует значению 115 при отпущенной клавише Shift и значению 83 при нажатой клавише Shift. Для клавиш, у которых нет соответствующих отображаемых символов в таблице ASCII, переменной KeyboardEvent. charCode устанавливается значение 0.
Когда используется клавиатура с другой раскладкой, отличной от раскладки U. S. English, значение переменной charCode представляет код символа в таблице ASCII для эквивалентной клавиши на клавиатуре с раскладкой U. S. English. Например, на японской клавиатуре для клавиши с иероглифом t3> которая находится в той же позиции, что и клавиша А на клавиатуре с раскладкой U. S. English, переменная charCode будет по-прежнему возвращать либо значение 97, либо значение 65 (символы «а» и «А» из таблицы ASCII соответственно), но не значение 12 385 (кодовая точка Unicode для иероглифа t=>).
Чтобы преобразовать код символа в фактическую строку, используется метод экземпляра f romCharCode ( ) класса String. Эта методика продемонстрирована в листинге 22.12 — измененный класс KeyViewer (который был представлен ранее в листинге 22.11) отображает символ, связанный с последней нажатой клавишей.
Листинг 22.12. Получение кода клавиши и кода символа нажатой клавиши
package { import flash. display.*; import flash. events.*; import flash. text.*; import flash. ui.*;
// Отображает код клавиши и код символа для любой нажатой клавиши public class KeyViewer extends Sprite { private var keyoutput:TextField; public function KeyViewer ( ) {
keyoutput = new TextField( );
keyoutput. text = «Press any key…»;
keyoutput. autoSize = TextFieldAutoSize. LEFT;
keyoutput. border = true;
keyoutput. background = true;
addChild(keyoutput);
stage. addEventLi stener(KeyboardEvent. KEY_D0WN, keyDownLi stener);
}
private function keyDownListener (e:KeyboardEvent):void { keyoutput. text = «The key code for the key you pressed is; «
+ е. keyCode + «\п»; keyoutput. appendText(«The character code for the key you pressed is: «
+ e. charCode + «\n»); keyoutput. appendText(«The character for the key you pressed is: «
+ String. fromCharCode(e. charCode)):
}
}
}
Результат выполнения приложения KeyViewer из листинга 22.12 для нажатой клавиши S на клавиатуре с раскладкой U. S. English выглядит следующим образом:
The key code for the key you pressed is: 83
The character code for the key you pressed is: 115
The character for the key you pressed is: s
Результат выполнения приложения KeyViewer из листинга 22.12 для нажатой клавиши Shift в сочетании с клавишей S на клавиатуре с раскладкой U. S. English выглядит следующим образом:
The key code for the key you pressed is: 83
The character code for the key you pressed is: 83
The character for the key you pressed is: S
Как и в случае с переменной экземпляра keyCode класса KeyboardEvent, переменная charCode не поддерживается, если используется редактор методов ввода, и не предназначена для использования в качестве средства получения вводимых текстовых данных. Для получения вводимых текстовых данных применяется событие TextEvent. TEXT INPUT совместно с объектом TextField, которые рассматриваются в следующем разделе.