![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2002
Сообщений: 4
|
Здравствуйте, уважаемые флэшеры!
А не подскажет ли кто, как в ListBox-е прикрутить обработчик дабл-клика по строке ListBox-а ???? Очень нужно, срочно... ![]() Заранее огромное спасибо, С уважением, Юрий Ибрагимов. |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Не для листбокса, а вообще
_clicken = false;
_timeout = 0;
function onMouseDown() {
if (_clicken) {
onEnterFrame = null;
_clicken = false;
// вот он, момент торжества!
onDblClick();
} else {
_clicken = true;
_timeout = 10;
onenterFrame = onTimer;
}
}
function onTimer() {
if (--_timeout == 0) {
onEnterFrame = null;
_clicken = false;
}
}
// для строгого даблклика "не дернув мышью"
function onMouseMove() {
onEnterFrame = null;
_clicken = false;
}
function onDblClick() {
}
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
а можно так:
this.doubleClick = function() {
trace("And He said: 'Let there be light'");
trace("...and there was light !");
};
this.onMouseDown = function() {
if (!this.ready) {
this.ready = this.doubleClick;
this.suicide = function() {
clearInterval(this.memo);
this.ready = null;
delete this.suicide;
delete this.memo;
};
this.memo = setInterval(this, "suicide", 500);
} else {
this.ready();
this.suicide();
}
};
![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
а вот в уже прикрученном виде:
// собственно даблклик
doubleClick = function () {
trace((lst.getItemAt(lst.memo[1])).label);
trace("And He said: 'Let there be light'");
trace("...and there was light !");
};
// запускаем ожидание второго клика по строке
waitDouble = function () {
cancel();
// время ожидания второго клика
var clickTime = 500;
var item = lst.getSelectedIndex();
lst.ready = doubleClick;
// запоминаем ID интервала и строку, по которой кликнули
lst.memo = [setInterval(cancel, clickTime), item];
};
// убиваем ожидание второго клика
cancel = function () {
if (lst.memo) {
clearInterval(lst.memo[0]);
lst.ready = null;
delete lst.memo;
}
};
// кличем :)
this.onMouseDown = function() {
// если кликнули по листбоксу
var right = lst.hitTest(_root._xmouse, _root._ymouse);
// если кликнули по скроллбару листбокса
var wrong = lst.container.scrollBar_mc.hitTest(_root._xmouse, _root._ymouse);
if (right && !wrong) {
if (lst.ready) {
lst.ready();
cancel();
}
}
};
lst.setChangeHandler("waitDouble");
lst.onMouseMove = cancel;
Последний раз редактировалось Nox Noctis; 26.06.2002 в 03:45. |
|
|||||
|
Регистрация: Jun 2002
Сообщений: 4
|
Спасибо огромное!
Вы меня просто спасли... начальство тоже счастливо ![]() Это последняя мелочь их не устраивала. Все. Завтра сдаю проект! ![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
мда... в три часа ночи я начинаю городить огород
вот универсальный способ: // ----- Global DoubleClick Event -----
Mouse.isDouble = function() {
if (!Mouse.clickFlag) {
if (!Mouse.clickTimeout) {
Mouse.clickTimeout = 300;
}
Mouse.clickFlag = setInterval(Mouse.cancelDouble, Mouse.clickTimeout);
} else {
Mouse.broadcastMessage("onDoubleClick");
Mouse.cancelDouble();
}
};
Mouse.cancelDouble = function() {
if (Mouse.clickFlag) {
clearInterval(Mouse.clickFlag);
delete Mouse.clickFlag;
}
};
ASBroadcaster.initialize(Mouse);
Mouse.doubleListener = {onMouseMove:Mouse.cancelDouble, onMouseDown:Mouse.isDouble};
Mouse.addListener(Mouse.doubleListener);
// -------------------------------------
//
// method for registering doubleclick-on-item event of Listbox
FListBoxClass.prototype.setItemDblClick = function(action) {
this.onDoubleClick = function() {
var right = this.hitTest(_root._xmouse, _root._ymouse);
var wrong = this.container.scrollBar_mc.hitTest(_root._xmouse, _root._ymouse);
if (right && !wrong) {
action(arguments);
}
};
Mouse.addListener(this);
};
// -------------------------------------
//
// example:
// setting time threshold between two successive clicks
Mouse.clickTimeout = 200;
// some function - just for example
doubleClick = function () {
trace((lst.getSelectedItem()).label);
trace("And He said: 'Let there be light'");
trace("...and there was light !");
};
// registering dblclick action
lst.setItemDblClick(doubleClick);
скрипт огороженный комментарием "Global DoubleClick Event" регистрирует новое событие мышки: onDoubleClick. добавляем этот код в начало мувика, а потом в любом месте пишем: любой_объект.onDoubleClick = function () {.......}; Mouse.addListener(любой_объект); – и это будет действовать как любое из стандартных событий. дальше добавляем в класс ФЛистбоксКласс метод, который регистрирует для данного листбокса событие онДаблКлик пишем: имя_любого_листбокса.setItemDblClick(любая_функция); ...и любая_функция будет срабатывать по даблклику на строке листбокса ![]() такие пироги ![]() Последний раз редактировалось Nox Noctis; 21.01.2004 в 20:25. |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
2Nox
Респект. Но у тебя если мышой дернуть то это не отслеживается, а без отслеживания мыши у меня короче :-Р
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ну да, согласен...
только в первом варианте кода движение мышки не отслеживалось ![]() но все равно, нужно-то добавить всеголишь функцию онМаусМув, которая будет убивать ссылку ready ![]() так что будет три функции ![]() Последний раз редактировалось Nox Noctis; 26.06.2002 в 20:36. |
|
|||||
|
Регистрация: May 2003
Сообщений: 144
|
поднимаю
![]() а твой скрипт(предпоследний) точно работает под List флеша MX2004? я сделал простой copy/pastle, создал лист с нужным инстансом, все это в одном и единственном фрейме мувика, и вроде как не пашет... последний твой скрипт дает 14 ерроров... ![]() Последний раз редактировалось catilina; 21.01.2004 в 20:09. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
все работает, гарантировано :)
но только для АС1.0 (надо указать в паблиш сеттингах).. если необходимо исправить под АС2.0 - надо подумать :) |
![]() |
Часовой пояс GMT +4, время: 12:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|