Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   {mdm}Zinc (http://www.flasher.ru/forum/showthread.php?t=81193)

udaaff 02.05.2007 16:39

неа, не надоел :)
Мануал отличный! Я, кстати, много интересного для себя нахожу на сайте http://www.intuit.ru/courses.html -- всем советую.

udaaff 02.05.2007 17:21

В 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);
//}

Работает только при включенной английской раскладке!!
У меня есть подозрения, что это как то можно обойти при помощи цинка. Есть какие-нибудь мысли по этому поводу?

alexcon314 02.05.2007 18:03

Вложений: 1
Уточни: ты автоматическую транслитерацию задумал сделать? Или тебе нужно просто, чтобы принудительно всегда печаталось по русски? Или нужно печатать по русски при реально включенной английской раскладке? Не догоняю..
Цитата:

Работает только при включенной английской раскладке!!
При включенной русской зачем пропускать через массив? И так по русски все будет...Или я чего-то не понимаю? Поясни :)
А не работает до конца потому, что при смене раскладки Key.getAscii() может для некотрых кнопок возвращать разные значения в отличие от Key.getCode(), кстати, который возвращает код клавиши один и тот же не зависимо от раскладки.
В подмогу вложение.

udaaff 03.05.2007 01:37

ты своей флэшкой сам ответил на свой вопрос!! :)
и при русской и при аглийской раскладке возвращаются английский аски!!! Т.е. в любом случае вернется нерусский код :)
Попрубуй после того как ты считал код нажатой клавиши, вывести русский символ -- ничего не получится!! Как узнать код русской нажатой клавиши? -- вот это я имел ввиду.

etc 03.05.2007 12:07

Код клавиши (не символа) не зависит от раскладки. Просто потому что кнопки на клавиатуре одни и те же.

alexcon314 03.05.2007 14:20

Вложений: 1
Неужели это продолжение темы http://flasher.ru/forum/showthread.php?t=92449 ? Значит ли это, что тебе нужно ТОЛЬКО узнать КОД символа на нажатой кнопке в русской раскладке и напечатать его? Тогда попробуй вот это - см. вложение.
Если без цинка. И если это то, что тебе надо.
С цинком должно быть проще - принудительно переключать раскладку на русскую по какому нибудь событию и какие проблемы после этого - я не понимаю.

alexcon314 03.05.2007 18:23

Вдогонку
 
Вложений: 1
Забыл "залипание" SHIFT'а сделать. Исправился.

udaaff 04.05.2007 01:25

2 alexcon314 выложи свой код поджалуйста!
флэшки мне мало о чем говорят...

alexcon314 04.05.2007 08:31

Код
 
Вложений: 1
код во .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);

include во вложении
Привязка происходит именно к кодам клавиш, а не к Ascii. В remap.as просто вручную расписаны по кнопкам символы. Все это можно заточить получше. Это всего лишь рабочий вариант.
Косяк: если вручную нарисовать TextField и дать ему тип input - работать будет гораздо хуже. Поможет my_txt.restrict = "^a-z\\A-Z"

alexcon314 04.05.2007 20:31

Попытался построить broadcaster-listener события "изменилась раскладка". Вариант с вызовом dll-функции по интервалу из цинка через setInterval или onEnterFrame отпадает, т.к. при коротких интервалах вызова цинк падает. Почему - не выяснял.
Пробовал вариант .onKeyDown (.isDown) c клавишами Ctrl+Shift или Alt+Shift. Установленный в системе способ переключения раскладки клавишами можно о узнать в реестре. С Ctrl куда ни шло. А вот Alt засечь не получается. Тупик.


Часовой пояс GMT +4, время: 22:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.