Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Определить нажатие shift или ctrl (http://www.flasher.ru/forum/showthread.php?t=210844)

Rembrant 14.05.2015 18:08

Определить нажатие shift или ctrl
 
Всем привет.
Подскажите, есть ли возможность определить в флешке, зажата ли сейчас клавиша shift или ctrl, в произвольный момент времени (нет возможности дёрнуть MouseEvent или KeyboardEvent)

Wormhole 14.05.2015 21:33

Цитата:

Сообщение от Rembrant (Сообщение 1182363)
Всем привет.
Подскажите, есть ли возможность определить в флешке, зажата ли сейчас клавиша shift или ctrl, в произвольный момент времени (нет возможности дёрнуть MouseEvent или KeyboardEvent)

Можно соответствующую ячейку памяти проверить. Номер таковой в windows не помню, в DOS'е была 0x417, последние два бита отвечали за левый и правый shift'ы, другие за ctrl, alt, капс лок, нум лок, скролл лок

caseyryan 15.05.2015 07:26

Цитата:

Можно соответствующую ячейку памяти проверить. Номер таковой в windows не помню, в DOS'е была 0x417, последние два бита отвечали за левый и правый shift'ы, другие за ctrl, alt, капс лок, нум лок, скролл лок
Можно пример как это сделать из флеш плеера? Что-то меня разбирают дикие сомнения по поводу возможности такой операции из as3 в принципе


По теме. Просто можно использовать этот класс:
Код AS3:

package  {
 
        import flash.display.Stage;
        import flash.display.StageDisplayState;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.geom.Rectangle;
        import flash.ui.Keyboard;
 
        public class Key {
 
                private static var initialized:Boolean = false;               
                private static var keysDown:Object = new Object();       
 
                public static function initialize(stage:Stage):void {
                        if (!initialized) {
                                stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
                                stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
                                stage.addEventListener(Event.DEACTIVATE, clearKeys);
                                initialized = true;
                        }
                }
 
                public static function isDown(keyCode:uint):Boolean {
                        if (!initialized) {
                                throw new Error("Key class has yet been initialized.");
                        }
                        return Boolean(keyCode in keysDown);
                }
                private static function keyPressed(event:KeyboardEvent):void {
                        if (event.ctrlKey) {
                                keysDown[Keyboard.CONTROL] = true;
                        } else if (event.shiftKey) {
                                keysDown[Keyboard.SHIFT] = true;
                        } else if (event.altKey) {
                                keysDown[Keyboard.ALTERNATE] = true;
                        }
                        keysDown[event.keyCode] = true;
 
                }
                private static function keyReleased(event:KeyboardEvent):void {
                        if (event.keyCode in keysDown) {
                                delete keysDown[event.keyCode];
                        }
                }
                private static function clearKeys(event:Event):void {
                        keysDown = new Object();
                }
        }
}

В документ классе инициализируем, скормив stage методу initialize(), а дальше в любом месте используем
Код AS3:

trace(Key.isDown(Keyboard.CONTROL));



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

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