Отладка, какое событие отправляется, когда я дважды щелкаю мышью - PullRequest
0 голосов
/ 13 мая 2011

В настоящее время я работаю с инструментом рисования для API сопоставления, и каждый раз, когда я дважды щелкаю мышью, картографический сервис выполняет измерение и отображает длину линии, которую я рисую.

Я хочу имитировать этот двойной щелчок вручную, отправив MouseEvent.DOUBLE_CLICK, но картографический сервис не прослушивает это событие Flex по умолчанию. Я подозреваю, что API создал пользовательский MapMouseEvent или что-то подобное, которое отправляется, когда пользователь дважды щелкает мышью.

Есть ли способ определить, какое событие отправляется, когда я дважды щелкаю мышью?

Ответы [ 2 ]

0 голосов
/ 14 мая 2011

API не обязательно отправляет свое собственное событие. Даже если это так, он должен сначала прослушать MouseEvents. Можно было обнаружить двойной щелчок, используя MouseEvent.DOUBLE_CLICK или прослушивая последовательные MouseEvent.CLICK или MouseEvent.MOUSE_DOWN события. Там нет никакого способа (только внутри Flash), чтобы обнаружить двойной щелчок, не прослушивая одно или несколько из этих событий где-то.

Также возможно, что картографический сервис прослушивает событие DOUBLE_CLICK, но вы не отправляете MouseEvent из нужного объекта. Например, если картографический сервис делает это:

mapRoot.mapChild.addEventListener(MouseEvent.DOUBLE_CLICK, performMeasurement);

и вы делаете это:

mapRoot.dispatchEvent(new MouseEvent(MouseEvent.DOUBLE_CLICK));

ничего не произойдет.

Есть и другие возможности:
Когда вы фактически выполняете двойной щелчок мышью, вы вызываете несколько событий: MOUSE_DOWN, MOUSE_UP, CLICK, MOUSE_DOWN, MOUSE_UP, CLICK, DOUBLE_CLICK

Возможно, картографический сервис прослушивает MOUSE_DOWN и добавляет прослушиватель DOUBLE_CLICK в обработчик MOUSE_DOWN, например:

mapRoot.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler);

private function _mouseDownHandler(event:MouseEvent):void
{
    var targ:InteractiveObject = event.target as InteractiveObject;
    targ.addEventListener(MouseEvent.DOUBLE_CLICK, _doubleClickHandler);
}

private function _doubleClickHandler(event:MouseEvent):void
{
    var targ:InteractiveObject = event.target as InteractiveObject;
    targ.removeEventListener(MouseEVent.DOUBLE_CLICK, doubleClickHandler);
    performMeasurement();
}

Таким образом, вам может потребоваться отправить комбинацию событий для запуска обработчика.


Вы можете попробовать следующее:

Используйте DisplayObjectContainer.getObjectsUnderPoint(), чтобы получить массив всех объектов, которые могут реагировать на щелчок. Затем от каждого из объектов в этом массиве попробуйте отправлять различные последовательности MouseEvents, пока не получите правильные события из правильного объекта.

Обратите внимание, что если areInaccessibleObjectsUnderPoint() возвращает true для точки, в которой вы тестируете, тогда есть некоторые объекты, к которым вы не сможете получить доступ, и если это те, которые прослушивает картографический сервис, то вам не повезло.

0 голосов
/ 14 мая 2011
public function cbMouseEvents( e:MouseEvent ):void{
    trace( e.type )
}
...