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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.06.2009, 09:01
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 21  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Нет все гораздо проще. Каждый раз как нажимается кнопка производится поиск в файле xml настроек для текущей раскладки. На каждую клавишу завел такую строчку
PHP код:
<key id="53" k1="5" k2="%" c="1" /> 
где id - код клавиши
k1 -клавиша без шифта
k2 - клавиша с шифтом
с - флаг для отключения CAPS. Там где флаг задан 1 состояние CapsLock не анализируется для получения клавиши.
Шифт виртуальный работает по принципу один раз нажали, после ввода текста он выключается. CAPS до тех пор пока его не выключат.
А вообще виртуальная клавиатура отлавливает на входе событие KeyboardEvent.KeyDown и обрабатывает его прерывая дальнейшее распространение. По коду клавиши вызвавшей событие ищем в файле xml строку настройки. Определяем состояние шифт в переменную. После проверяем флаг "с" и состояние Caps, если необходимо меняем состояние в переменной шифт. Ну а дальше просто, если шифта нет берем k1, а если есть то k2.
Таким образом пользователь работает как с реальной клавиатурой, так и с виртуальной одновременно. Shift при этом определяется состояние нажатый если он нажат на одной из клавиатур (реальной или виртуальной)Единственное с чем ничего не смог сделать это переключение раскладки и CAPS. Flash не дает возможности менять их программно. Поэтому раскладка для ввода по умолчанию берется та, которая активна в данный момент на виртуальной клавиатуре. При этом сделал что с помощью реальной клавиатуры можно менять значения: CapsLock реальный меняет регистр на виртуальной клавиатуре, а Ctrl+Shift меняет раскладку (Alt+Shift не работает потому что alt используется плеером или браузером для горячих клавиш)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 05.06.2009, 09:35
kkin вне форума Посмотреть профиль Отправить личное сообщение для kkin Найти все сообщения от kkin
  № 22  
Ответить с цитированием
kkin
 
Аватар для kkin

Регистрация: Dec 2008
Адрес: Лапландия
Сообщений: 67
SunShadow
Я тебе со 100% уверенностью скажу тач отлично работает с Fleshoм. Так как нажатия пльцем соответсвует нажатию левой кнопки мыши.

Добавлено через 5 минут
SunShadow
У меня в принципе подобная задача стоит, только мне не нужно заморачиваться на шифтах и CapsLockах. Мне нужно просто английская клава. Есть более простой вариант реализации без xml. В принципе каждой кнопке можно назначить функцию но это получиться маразм.

Старый 05.06.2009, 09:47
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 23  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
s_8000 давал ссылку на то как делают другие, там простой вариант вполне подходящий для твоих целей)
В любом случае каждой кнопке придется назначать функцию. Я делал это через наследников класса, у всех прописывал в главном методе вызов dispatchEvent с разными кодами и флагами. Можно спрятать кнопку раскладки и работать только с одной. Пусть лучше код будет гибче, вдруг в будущем придется расширять.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 05.06.2009, 10:01
kkin вне форума Посмотреть профиль Отправить личное сообщение для kkin Найти все сообщения от kkin
  № 24  
Ответить с цитированием
kkin
 
Аватар для kkin

Регистрация: Dec 2008
Адрес: Лапландия
Сообщений: 67
блин конечно дурацкий вопрос, а не можешь мне скинуть свой рабочий проект

Старый 05.06.2009, 10:04
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 25  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
боюсь у тебя он не будет работать, он заточен под движок.
Необходимо:
1) Получить разрешение от клиента на предоставление;
2) Модифицировать под твою задачу.
В общем то задача не сложная, но требует времени которого к сожалению сейчас крайне мало. И самое главное не думаю что заказчик даст добро.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

Регистрация: Dec 2008
Адрес: Лапландия
Сообщений: 67
думаю точно закзчику это не понравиться, лано попробую чтонибудь налабать.

Старый 05.06.2009, 10:19
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 27  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Я через неделю буду дополнять код по проекту коментариями, могу как закончу выслать классы по виртуальной клавиатуре. Только работать не будет, потому как требуется движок (загрузка и настройка свойств вынесена в отдельные модули)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 05.06.2009, 10:35
kkin вне форума Посмотреть профиль Отправить личное сообщение для kkin Найти все сообщения от kkin
  № 28  
Ответить с цитированием
kkin
 
Аватар для kkin

Регистрация: Dec 2008
Адрес: Лапландия
Сообщений: 67

SunShadow
Если интеренсно я решил свою задачу вот таким простым ламерским способом

Код AS3:
A.addEventListener(MouseEvent.CLICK, WkeyDownHandler);
B.addEventListener(MouseEvent.CLICK, WkeyDownHandler);
 
 
function WkeyDownHandler(event:MouseEvent){
 
  switch (event.target.name){
 
	case 'A':rewrite('Привет'); break;
	case 'B':rewrite('Вася'); break;
	}
}
 
function rewrite(st:String){
	txt.appendText(st);
 
	}

Старый 05.06.2009, 10:57
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 29  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Это вариант если вам нужно сделать быстро и в дальнейшем вы эту клаву больше развивать не будете.
Передо мной стояла задача чтобы помимо виртуальной клавиатуры можно было одновременно работать с реальной. То есть я могу щелкнуть по клавише на виртуальной (например переключить язык) а дальше набирать на реальной и в любой момент опять переключиться на виртуальную, результат будет тот же самый.
Одним словом я делал модуль, чтобы его можно было в дальнейшем добавлять в любой проект.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 05.06.2009 в 11:01. Причина: природная грамотность
Старый 05.06.2009, 11:05
kkin вне форума Посмотреть профиль Отправить личное сообщение для kkin Найти все сообщения от kkin
  № 30  
Ответить с цитированием
kkin
 
Аватар для kkin

Регистрация: Dec 2008
Адрес: Лапландия
Сообщений: 67
конечно я согласен если передо мной стояла сложная задача пришлось бы выкручиваться, на данном этапе у меня уже утвержденное задание и клава останется неизменной, так что мне проще ))))

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

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

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


 


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


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