Просмотр полной версии : hitTest выпадающей части ComboBox
Здравствуйте!
Как заставить выпадающую часть ComboBoxа реагировать на hitTest?
Вот для примера.
onMouseDown = function ():Void {
if (cbx.hitTest(_root._xmouse, _root._ymouse, true)) {
trace("Попал");
} else {
trace("Мимо");
}
};
В принципе у комбобокса внутри есть некий мувик boundingBox_mc, вероятно как-то связанный с его границей.
for (i in cbx)
{
trace(i + ' ' + cbx[i]);
}
Но можно ли с ним работать - неизвестно, хиттест на него не срабатывает.
Решение только такое придумывается - проверять hitTest на область, ограниченную cbx._width и cbx._height - эти свойства вроде бы правильно отображают видимые размеры комбобокса при работе с ним.
onMouseDown = function () {
trace(cbx._height);
};
Да действительно показывает изменение в высоте, но только на открытие ComboBoxа. После его сворачивания показывает ту же высоту что и в развёрнутом состоянии.
Или я что-то не понимаю?
Да, поторопился я сказать по поводу "правильно отображают"...
Действительно, значение cbx._height после открытия комбобокса остается фиксированным, видимо, максимальным.
Даже если обернуть комбобокс в мувик и использовать высоту последнего, она также после открытия остается той же самой.
Идей больше нет.
Разе что свой комбобокс создать, с предсказуемыми свойствами.
Тогда может быть мой частный случай можно решить другим путём.
Вверху карты города, которая масштабируется колёсиком и перемещается нажатой левой кнопкой мышки присутствует список улиц в ComboBoxе. И вот когда список разворачивается, любые манипуляции с ползунком списка передаются также и на карту. Переставить список так чтоб он не пересекался с картой некуда.
Кроме hitTestа пробовал в условиях масштабирования и перемещения отслеживать высоту ComboBoxа, но тогда после сворачивания списка из за того что высота не возвращается масштабирование и перемещение перестаёт работать.
Пробовал ComboBoxу по клику подложить под выпадающую часть какой нибудь клип и потом отслеживать его. Но тогда список перестаёт разворачиваться, не помогает даже если назначить это событие родительскому клипу.
Заранее огромное спасибо всем кто откликнется.
rainbowrussia
16.08.2010, 01:40
Как вариант... периодически отрисовывать список в битмапдату и проверять через getPixel в определенной позиции цвет, где список выпадает. Если цвет не белый - список выпал - блокировать карту.
С битмапой - это как-то не по-человечески. Давайте-ка танцевать "от печки" и рассматривать событийную модель.
Автор, вам надо, чтобы если юзер начать использовать комбобокс, функции для работы с картой не работали.
И когда юзер закрывал бы комбобокс, эти функции опять бы включались.
Открываем хелп, видим, что у комбобокса есть подходящие события:
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, функция управления картой не будет выполнять свои действия.
Вот пример.
На карте используем колесико для изменения масштаба.
Как только открываем комбобокс, карта перестает реагировать на колесико.
Закрываем - карта опять реагирует на колесико.
По приведённому примеру сделал изменения. Всё работает отлично.
Огромное спасибо.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.