Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   При нажатии мышкой эмулировать удержание ctrl(клавиши)+Mouse.CLICK (http://www.flasher.ru/forum/showthread.php?t=154628)

farm.EHoT 20.04.2011 13:13

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

Имеется TileList --> myTileList

В сети нашёл рабочий пример для клавиши Вверх. Этот код просто как пример, что он работает , в использовании он НЕ нужен.
Код AS3:

var keyCode:uint = Keyboard.UP;
var e:KeyboardEvent = new KeyboardEvent( KeyboardEvent.KEY_DOWN, true, false, 0, keyCode);
myTileList.dispatchEvent( e );

}
А Следующий код нужен, но он не работает. При щелчке мышью по элементу в myTileList должна эмулироваться уже зажатая CTRL. Т.е. один раз кликаю и элемент выделяется, кликаю по другому он тоже выделяется, причём выделение не спадает пока не кликну ещё раз по этому же элементу. Ну т.е. обычное поведение клавиши CTRL.
Код AS3:

myTileList.allowMultipleSelection = true;
myTileList.addEventListener(Event.CHANGE, thumbnailClicked);
 
function thumbnailClicked(event:Event):void {
var keyCode:uint = Keyboard.CONTROL;
var ctrlKey:Boolean = true;
var e:KeyboardEvent = new KeyboardEvent( KeyboardEvent.KEY_DOWN, true, false, 0, keyCode,0,ctrlKey);
myTileList.dispatchEvent( e );

Пробовал передавать код клавиши 17. но такая же шляпа, trace ловит ctrl при щелчке мышью, но TileList не выделяет элемент при клике.

Пробовал мышкой эмулировать, но это вообще не в ту степь наверное.
Код AS3:

var m:MouseEvent = new MouseEvent(MouseEvent.CLICK,true,false,NaN,NaN,null,ctrlKey);

Гуглил и смотрел справки но решения проблемы так и не нашёл.
http://help.adobe.com/ru_RU/AS3LCR/F...KeyboardEvent()
http://help.adobe.com/en_US/FlashPla...t.html#ctrlKey
а также:
http://livedocs.adobe.com/flash/9.0/...ouseEvent.html

GBee 20.04.2011 14:29

Вы хотите мультиселект клавой? Не проще ловить вверх с ктрл и высчитывать элементы , которые селектятся и отдавать их в тайлЛист?

farm.EHoT 20.04.2011 14:53

нужно выделение элемента при одиночном нажатии мышкой, так, как будто бы это было сделано с использованием клавишей ctrl. т.е. кликнул по элементу он выделился, кликнул по другому он тоже выделился, но предыдущий не пропал и т.д. кликнул снова по ранее выделенному элементу выделение с него убралось.(ну та же в принципе функциональность как и у клавиши ctrl). Ранее думал это всё Checkbox-ами делать, там удобнее someVar.checked = !someVar.checked, но там слишком много кода получается чтобы сделать такую же функциональность как и просто TileList с нажатой клавишей ctrl.

Добавлено через 25 часов 26 минут
appendText() при клике по элементу ? окрашивать под "выделение" и затем считать как массив? Вы про этот вариант?
Каким способом можно узнать какие действия выполняет физическое нажатие CTRL вообще и применительно к TileList. Уважаемые профессионалы, есть идеи?

Лысый Червь 29.05.2011 00:41

а если внутри класса что-то в функции подправить?

Добавлено через 48 часов 8 минут
это надо вставить в функцию вызываемую слушателем:
Код AS3:

var _my_list:List = event.currentTarget as List;
        ar[_my_list.selectedIndex] = !ar[_my_list.selectedIndex];        //ar -логический массив
        m=0;
        _ar = new Array();
        for (i=0;i<=ar.length;i++){
                if (ar[i]){
                        _ar[m]=i;
                        m++
                }                               
        }
        my_list.selectedIndices=_ar;



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

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