PDA

Просмотр полной версии : проблема с Key


KoLar
24.04.2007, 06:44
У меня следующая проблема.
Flash реагирует не на все нажатия клавиш. При нажатии на клавиши ESC, TAB, BACKSPACE, ENTER не вызывается даже событие onKeyDown.
Клавиша DELETE при использовании её в таком коде:

listner = new Object();
listner.onKeyDown = function()
{
if (Key.isDown(Key.DELETEKEY))
{
// Действия
}
}
Key.addListener(listner);

работает только в режиме отладки.
В режиме просмотра и в SWF не работает.:rtfm:

Попробовал так:

listner = new Object();
listner.onKeyDown = function()
{
if (Key.getCode() == Key.DELETEKEY)
{
// Действия
}
}
Key.addListener(listner);

не работает. Опытным путём установил, что для клавиши DELETE Key.getCode() = 255, а Key.getAscii() = 0
Более того опытным путём обнаружил, что код 255 имеют все дополнительные клавиши (типа "Калькулятор", ...), т.е. нестандартные, которые Flash не знает. Почему же у DELETE такой же код?
По документации к Flash клавиша DELETE имеет код 46

Вообщем, я уже вообще запутался!:confused: Нужна помощь! Помогите!

iNils
24.04.2007, 07:11
В режиме просмотра, часть клавиш используется флешом для управления, поэтому чтобы отлавливать все клавиши, надо выбрать Control > Disable Keyboard Shortcuts. В swf поможет
fscommand ("trapallkeys", true);
А проблем с delete я у себя не нашел.

KoLar
24.04.2007, 13:02
Я пробовал
fscommand ("trapallkeys", true);
не получалось!

Нашёл причину - корявый Flash. Установил себе нормальный Flash - заработало:yahoo:

Осталась небольшая проблемка. При тестировании такой программки:

list = new Object();
list.onKeyDown = function()
{
trace("keyCode: "+Key.getCode()+"\t\t keyAscii: "+Key.getAscii());
};
Key.addListener(list);
fscommand("trapallkeys", "true");

при нажатии на DELETE окно trace отображает следующее:

keyCode: 255 keyAscii: 0
keyCode: 46 keyAscii: 127

то есть событие вызывается 2 раза: одно как для клавиши, которую он не знает, а второе нормальное DELETE-овское.
Конечно проблема не сильно страшная, но неприятно.
Можно ли избежать подобного эффекта?

iNils
24.04.2007, 14:51
У меня keyCode: 255 keyAscii: 0 не выводится

KoLar
24.04.2007, 20:18
У меня keyCode: 255 keyAscii: 0 не выводится
А у тебя NumLock включен?
Нашёл сейчас странную особенность:
NumLock-овский Delete всегда работает нормально (и в режиме точки и в режиме Del).
А вот обычный Delete при включенном NumLock работает как я описывал выше, а при выключенном - нормально (keyCode: 255 keyAscii: 0 не выводится).

Но по-моему никакой связи между DELETE и NumLock не существует или я ошибаюсь?