PDA

Просмотр полной версии : посылка клавиатурнычх сообщений


gnus
17.08.2009, 13:28
добрый день. понадобилось решить такую задачу. надо посылать компоненту на котором фокус клавиатурные сообщения. то есть посылается сообщение с кодом нужного символа и чтобы компонент ловил и отображал этот символ. в общем типа виртуальная клавиатура. сделал такой тест:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
private function click():void
{

var event:KeyboardEvent=new KeyboardEvent(KeyboardEvent.KEY_DOWN);
event.charCode=97;
event.keyCode=65;

if(getFocus())getFocus().dispatchEvent(event);
}

private function hKeyDown(event:KeyboardEvent):void
{
trace(event);
}
]]>
</mx:Script>
<mx:TextInput x="23" y="10" keyDown="hKeyDown(event)" keyUp="hKeyDown(event)"/>
<mx:Button label="Button" x="82" y="113" click="click()" focusEnabled="false"/>
</mx:Application>


при нажатии на кнопку в трейс выводит такое:
[KeyboardEvent type="keyDown" bubbles=true cancelable=false eventPhase=3 charCode=97 keyCode=65 keyLocation=0 ctrlKey=false altKey=false shiftKey=false]
видно, что текстинпут ловит сообщение, но почему-то не пишет символ.
при чём если я нажму на клавиатуре символ "a", то сообщение приходит совершенно аналогичное, но символ отображается.
в чём может может быть проблема?

Добавлено через 5 часов 1 минуту
неужели никто не сталкивался с такой задачей?(

wvxvw
17.08.2009, 19:41
Не пробовал, но как мне кажется, текстовому полю логичнее было бы посылать "textInput" событие...

gnus
17.08.2009, 21:33
там будет не только текстовое поле, а вообще абстрактный компонент. например HTML в AIR. да и с textInput тоже не работает.

wvxvw
17.08.2009, 22:29
Ну значит текстовое поле не реагирует на события, которые диспатчит - как бы и не обязано вовсе :)

gnus
17.08.2009, 23:19
а можно ли сделать то, что мне надо вообще? если да, то каким способом

wvxvw
18.08.2009, 00:27
Ну, подпишитесь на события клика у нарисованых кнопок, и, вы же и так знаете, на какую кнопку пользователь "кликнул мышкой", просто добавьте ее код в текст текстового поля :)

gnus
18.08.2009, 00:57
всё это не то(
мне надо диспатчить в компонент HTML в AIR.

wvxvw
18.08.2009, 04:40
А в чем разница? в ХТМЛе создаете функцию printLetter(letter) {...}
которую вы вызываете и по событию и вручную... где / что не получается?

gnus
09.09.2009, 13:05
ХТМЛ не мой. он загружается извне. например http://ya.ru. вот в его поле поиски мне и надо затолкать что-либо. например...

wvxvw
09.09.2009, 13:31
Проще в загруженую страницу вписать нужную яваскрипт функцию.