![]() |
|
||||||||||
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
неа, не надоел
Мануал отличный! Я, кстати, много интересного для себя нахожу на сайте http://www.intuit.ru/courses.html -- всем советую. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
В ActionScript classes > Key > getAscii (Key.getAscii method) есть один недостаток -- The ASCII values returned are English keyboard values (т.е. какая бы раскладка не была включена, вернется все равно английский аски). Бился над этой проблемой кучу времени. Единсвенный, относительно нормальный, способ, который я придумал -- это английский аски код пропускать через массив.
this.createTextField("my_txt", 0, 100, 100, 100, 100);
//
var rusLayout:String = ' !Э№;%?э()*+б-ю.0123456789ЖжБ=Ю,"ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯх\\ъ:_ёфисвуапршолдьтщзйкыегмцчняХ/ЪЁ';
var rusLayoutCL:String = ' !э№;%?Э()*+Б-Ю.0123456789жЖб=ю,"ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯХ\\Ъ:_Ёфисвуапршолдьтщзйкыегмцчнях/ъё';
//
var filter:Array = new Array(32);
filter = filter.concat(rusLayout.split(""));
var filterCL:Array = new Array(32);
filterCL = filterCL.concat(rusLayoutCL.split(""));
//
var ascii:Number;
var rusSymbol:String;
var currentFilter:Array;
//
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
ascii = Key.getAscii();
//
if (!Key.isToggled(Key.CAPSLOCK)) {
currentFilter = filter;
} else {
currentFilter = filterCL;
}
//
rusSymbol = currentFilter[ascii];
//
my_txt.text = rusSymbol;
};
Key.addListener(keyListener);
//}
У меня есть подозрения, что это как то можно обойти при помощи цинка. Есть какие-нибудь мысли по этому поводу? Последний раз редактировалось udaaff; 02.05.2007 в 17:24. |
|
|||||
|
listener
|
Уточни: ты автоматическую транслитерацию задумал сделать? Или тебе нужно просто, чтобы принудительно всегда печаталось по русски? Или нужно печатать по русски при реально включенной английской раскладке? Не догоняю..
Цитата:
А не работает до конца потому, что при смене раскладки Key.getAscii() может для некотрых кнопок возвращать разные значения в отличие от Key.getCode(), кстати, который возвращает код клавиши один и тот же не зависимо от раскладки. В подмогу вложение. Последний раз редактировалось alexcon314; 02.05.2007 в 18:23. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
ты своей флэшкой сам ответил на свой вопрос!!
![]() и при русской и при аглийской раскладке возвращаются английский аски!!! Т.е. в любом случае вернется нерусский код ![]() Попрубуй после того как ты считал код нажатой клавиши, вывести русский символ -- ничего не получится!! Как узнать код русской нажатой клавиши? -- вот это я имел ввиду. Последний раз редактировалось udaaff; 03.05.2007 в 09:37. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Код клавиши (не символа) не зависит от раскладки. Просто потому что кнопки на клавиатуре одни и те же.
|
|
|||||
|
listener
|
Неужели это продолжение темы http://flasher.ru/forum/showthread.php?t=92449 ? Значит ли это, что тебе нужно ТОЛЬКО узнать КОД символа на нажатой кнопке в русской раскладке и напечатать его? Тогда попробуй вот это - см. вложение.
Если без цинка. И если это то, что тебе надо. С цинком должно быть проще - принудительно переключать раскладку на русскую по какому нибудь событию и какие проблемы после этого - я не понимаю. Последний раз редактировалось alexcon314; 03.05.2007 в 17:55. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
2 alexcon314 выложи свой код поджалуйста!
флэшки мне мало о чем говорят... |
|
|||||
|
listener
|
код во .fla:
#include "remap.as"
this.createTextField("my_txt", 0, 10, 10, 500, 220);
my_tex.type = "input";
my_txt.multiline = true;
my_txt.border = true;
ke = "";
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
var code:Number = Key.getCode();
if (code == 13) {
my_txt.text += newline;
return;
}
if (code == 32) {
my_txt.text += " ";
return;
}
if (Key.isDown(Key.SHIFT)) {
shift = true;
} else {
shift = false;
}
if (shift && !Key.isToggled(Key.CAPSLOCK)) {
ke = "0";
}
if (!shift && Key.isToggled(Key.CAPSLOCK)) {
ke = "0";
}
if (shift && Key.isToggled(Key.CAPSLOCK)) {
ke = "";
}
if (shift && code == 220) {
var ke = "0";
}
if (!shift && code == 220) {
var ke = "";
}
if (shift && code == 191) {
var ke = "0";
}
if (!shift && code == 191) {
var ke = "";
}
if (shift && code >= 48 && code <= 57) {
var ke = "0";
}
if (!shift && code >= 48 && code <= 57) {
var ke = "";
}
my_txt.text += String.fromCharCode(remap["i" + code + ke]);
ke = "";
};
Key.addListener(keyListener);
Привязка происходит именно к кодам клавиш, а не к Ascii. В remap.as просто вручную расписаны по кнопкам символы. Все это можно заточить получше. Это всего лишь рабочий вариант. Косяк: если вручную нарисовать TextField и дать ему тип input - работать будет гораздо хуже. Поможет my_txt.restrict = "^a-z\\A-Z" Последний раз редактировалось alexcon314; 04.05.2007 в 08:54. |
|
|||||
|
listener
|
Попытался построить broadcaster-listener события "изменилась раскладка". Вариант с вызовом dll-функции по интервалу из цинка через setInterval или onEnterFrame отпадает, т.к. при коротких интервалах вызова цинк падает. Почему - не выяснял.
Пробовал вариант .onKeyDown (.isDown) c клавишами Ctrl+Shift или Alt+Shift. Установленный в системе способ переключения раскладки клавишами можно о узнать в реестре. С Ctrl куда ни шло. А вот Alt засечь не получается. Тупик. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|