Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.11.2009, 00:57
  № 1  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
По умолчанию Отмена действия клавиш по умолчанию в текстовом поле

Нужно, чтобы по нажатию на клавиши "вверх" (UP) и "вниз" (DOWN) выполнялись определенные действия (и только они).
Пишу:
Код AS3:
tf.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
//.......................................................................................
private function keyDownHandler(event:KeyboardEvent):void {
   if(event.keyCode==Keyboard.UP){
      //code1		
   }
   else if(event.keyCode==Keyboard.DOWN){
      //code2				
   }
}
Это работает. Но потом все равно выполняется действие предусмотренное для этих клавиш по умолчанию: UP - переводит курсор в начало текстового поля, DOWN - в конец. Как отменить эти действия?

Старый 20.11.2009, 01:00
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 2  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
event.preventDefault(), event.stopImmediatePropaganation()
__________________
Дело не в тебе

Старый 20.11.2009, 01:16
  № 3  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
походу не получается
Код AS3:
trace(event.cancelable);//false
Или можно?

Старый 20.11.2009, 01:35
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 4  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Тогда нельзя
__________________
Дело не в тебе

Старый 20.11.2009, 02:15
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 5  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
тогда надо ловить клавиатуру не TextField'ом, а своим каким-то объектом
__________________
...вселенская грусть

Старый 20.11.2009, 04:22
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 6  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
тогда надо ловить клавиатуру не TextField'ом, а своим каким-то объектом
Зачем? Отменить реакцию по умолчанию это не поможет. А ловит события текстфилд и так прекрасно.

Лучше уж тогда отнаследоваться от TextField и на KEY_DOWN повесить обработчик, в котором будут выполняться необходимые действия. Чтобы отменить переход курсора, можно попробовать сразу же по приходу события изменять позицию курсора в поле на ту, что была до вызова обработчика. Но не уверен, что сработает.

Старый 20.11.2009, 19:49
  № 7  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Цитата:
Сообщение от SamFR Посмотреть сообщение
можно попробовать сразу же по приходу события изменять позицию курсора в поле на ту, что была до вызова обработчика. Но не уверен, что сработает.
Так примерно и делаю, только смотрю не приход события, а результат после него. Потому что не знаю, как его отловить
Код AS3:
private function keyDownHandler(event:KeyboardEvent):void {
	if(event.keyCode==Keyboard.UP){
          //code1
	  interval = setInterval(setCaret,100);
        }else if(event.keyCode==Keyboard.DOWN){
          //code2
	  interval = setInterval(setCaret,100);
        }
 }
 
private function setCaret(){
	if (tf.caretIndex == 0 || tf.caretIndex == tf.text.length){
	  tf.setSelection(eI,eI);
	  clearInterval(interval);	  
       }
}

Старый 20.11.2009, 20:02
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 8  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от Xero201 Посмотреть сообщение
Так примерно и делаю, только смотрю не приход события, а результат после него. Потому что не знаю, как его отловить
Я имел в виду, в обработчике)

Чтобы обработчик сработал после встроенного, можно поробовать зарегистрировать его с отрицательным приоритетом. Но всё равно не факт, что стандартная реакция (переход курсора в начало/в конец) произойдёт после этого.

Если не сработает, лучше делать не по таймеру, а в следующем кадре. То есть в обработчике KEY_DOWN вешаем обработчик на ENTER_FRAME, он сработает в следующем кадре. В этом обработчике выполняем setCaret(), и удаляем обработчик. Как в схеме отложенной перерисовки, в общем.

Старый 20.11.2009, 20:31
  № 9  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
спасибо)

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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