PDA

Просмотр полной версии : hitTest выпадающей части ComboBox


adsl66
15.08.2010, 18:58
Здравствуйте!
Как заставить выпадающую часть ComboBoxа реагировать на hitTest?
Вот для примера.
onMouseDown = function ():Void {
if (cbx.hitTest(_root._xmouse, _root._ymouse, true)) {
trace("Попал");
} else {
trace("Мимо");
}
};

mooncar
15.08.2010, 20:21
В принципе у комбобокса внутри есть некий мувик boundingBox_mc, вероятно как-то связанный с его границей.
for (i in cbx)
{
trace(i + ' ' + cbx[i]);
}
Но можно ли с ним работать - неизвестно, хиттест на него не срабатывает.

Решение только такое придумывается - проверять hitTest на область, ограниченную cbx._width и cbx._height - эти свойства вроде бы правильно отображают видимые размеры комбобокса при работе с ним.

adsl66
15.08.2010, 22:08
onMouseDown = function () {
trace(cbx._height);
};
Да действительно показывает изменение в высоте, но только на открытие ComboBoxа. После его сворачивания показывает ту же высоту что и в развёрнутом состоянии.
Или я что-то не понимаю?

mooncar
15.08.2010, 22:51
Да, поторопился я сказать по поводу "правильно отображают"...
Действительно, значение cbx._height после открытия комбобокса остается фиксированным, видимо, максимальным.
Даже если обернуть комбобокс в мувик и использовать высоту последнего, она также после открытия остается той же самой.
Идей больше нет.
Разе что свой комбобокс создать, с предсказуемыми свойствами.

adsl66
15.08.2010, 23:49
Тогда может быть мой частный случай можно решить другим путём.
Вверху карты города, которая масштабируется колёсиком и перемещается нажатой левой кнопкой мышки присутствует список улиц в ComboBoxе. И вот когда список разворачивается, любые манипуляции с ползунком списка передаются также и на карту. Переставить список так чтоб он не пересекался с картой некуда.
Кроме hitTestа пробовал в условиях масштабирования и перемещения отслеживать высоту ComboBoxа, но тогда после сворачивания списка из за того что высота не возвращается масштабирование и перемещение перестаёт работать.
Пробовал ComboBoxу по клику подложить под выпадающую часть какой нибудь клип и потом отслеживать его. Но тогда список перестаёт разворачиваться, не помогает даже если назначить это событие родительскому клипу.

Заранее огромное спасибо всем кто откликнется.

rainbowrussia
16.08.2010, 01:40
Как вариант... периодически отрисовывать список в битмапдату и проверять через getPixel в определенной позиции цвет, где список выпадает. Если цвет не белый - список выпал - блокировать карту.

mooncar
16.08.2010, 01:55
С битмапой - это как-то не по-человечески. Давайте-ка танцевать "от печки" и рассматривать событийную модель.

Автор, вам надо, чтобы если юзер начать использовать комбобокс, функции для работы с картой не работали.
И когда юзер закрывал бы комбобокс, эти функции опять бы включались.

Открываем хелп, видим, что у комбобокса есть подходящие события:
ComboBox.open (Broadcast when the drop-down list begins to open.) и СomboBox.close (Broadcast when the list of the combo box begins to retract.)

Назначим на их обработку функции, которые бы переводили бы некий разрешающий триггер на false (когда происходит ComboBox.open) и на true (для СomboBox.close).

Останется в функциях для управления картой ввести проверку на этот триггер.
Если он будет в состоянии false, функция управления картой не будет выполнять свои действия.

mooncar
16.08.2010, 02:23
Вот пример.
На карте используем колесико для изменения масштаба.
Как только открываем комбобокс, карта перестает реагировать на колесико.
Закрываем - карта опять реагирует на колесико.

adsl66
16.08.2010, 17:10
По приведённому примеру сделал изменения. Всё работает отлично.
Огромное спасибо.