PDA

Просмотр полной версии : Как отключить действие клавиши?


Legoo
19.02.2010, 00:41
Есть динамическое текстовое поле, и требуется отключить действия таких клавиш как "Backspase", "Delete".
Кто-нибудь сталкивался с этим?

udaaff
19.02.2010, 01:15
Т.е., на сколько я понял, вам необходимо запретить пользователю изменять уже введенный текст. При помощи onChanged отслеживайте, изменился ли уже введенный текст, и если да, то меняйте его на старое значение.

samana
19.02.2010, 01:18
Возможно есть такой способ, но я его не знаю. Попробовал так, текст не удаляется, но каретка двигается влево.
Key.addListener(inputText);
snapText = "";
down = false;
inputText.onKeyDown = function() {
if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
snapText = this.text;
down = true;

}
};
inputText.onKeyUp = function() {
if (down) {
this.text = snapText;
down = !down;
}
};

Legoo
19.02.2010, 17:53
Спасибо за помощь!
Сама идея ясна, гениально !!!
Вот с реализацией загвоздка. Переменная "this.text" берет значание какого текстового поля.
Пытался вот так:

per = "";
down = false;

_root.createTextField("T",1,50,50,100,100);
_root.T.text="";
_root.T.border=true;
_root.T.type="input";

var obj:Object = {};
Key.addListener(obj);

per = T.text;

obj.onKeyDown = function() {

if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
T.text = per;
down = true;

}
};

obj.onKeyUp = function() {
if (down) {
per = T.text;
down = !down;
}
};


Если можно, уважаемый SAMANA, скинь fla файл :)

samana
19.02.2010, 18:04
У тебя были ошибки, ты перепутал немного. Вот правильный код, в коментах посмотри я написал где были ошибки
per = "";
down = false;

_root.createTextField("T",1,50,50,100,100);
_root.T.text="";
_root.T.border=true;
_root.T.type="input";

var obj:Object = {};
Key.addListener(obj);

//per = T.text; Зачем переопределять ведь это не нужно???

obj.onKeyDown = function() {

if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
per=T.text //Тут было наоборот T.text=per, а ведь смысл в том чтобы
//на этом этапе сохранить текст в переменную
down = true;

}
};

obj.onKeyUp = function() {
if (down) {
T.text=per// а тут уже тексту присваивается значение из переменной.
//А было опять же наоборот per=T.text
down = !down;
}
};

Legoo
19.02.2010, 18:28
И есть еще проблема в реализации от SAMANA. Kогда нажимаем "Backspace" долго, стирает все. Как избежать этого?

Добавлено через 6 минут
Спасибо за исправления :)

samana
20.02.2010, 00:27
Пошел другим путём, и он оказался лучше и логичнее, к тому же работает правильно.
_root.createTextField("inputText",1,0,0,200,30);
inputText.type = "input";
inputText.border = true;

Key.addListener(inputText);

inputText.onKeyDown = function() {
if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
this.type = "dynamic";

}
};
inputText.onKeyUp = function() {
this.type = "input";
};

Legoo
20.02.2010, 01:20
Супер!!!
Все гениальное просто :)