Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 25.06.2002, 13:49
Urson вне форума Посмотреть профиль Отправить личное сообщение для Urson Найти все сообщения от Urson
  № 1  
Urson

Регистрация: Jun 2002
Сообщений: 4
По умолчанию Обработчик double-click ???

Здравствуйте, уважаемые флэшеры!

А не подскажет ли кто, как в ListBox-е прикрутить обработчик дабл-клика по строке ListBox-а ????

Очень нужно, срочно...

Заранее огромное спасибо,
С уважением,
Юрий Ибрагимов.

Старый 25.06.2002, 21:19
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 2  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: 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() {
}
К листбоксу сам прикрепишь...
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 26.06.2002, 01:35
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: 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();
	}
};
всего две функции, и никаких лишних флажков

Старый 26.06.2002, 03:42
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 4  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: 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;
'lst' - это имя инстанса листбокса


Последний раз редактировалось Nox Noctis; 26.06.2002 в 03:45.
Старый 26.06.2002, 14:42
Urson вне форума Посмотреть профиль Отправить личное сообщение для Urson Найти все сообщения от Urson
  № 5  
Urson

Регистрация: Jun 2002
Сообщений: 4
Спасибо огромное!
Вы меня просто спасли... начальство тоже счастливо
Это последняя мелочь их не устраивала. Все. Завтра сдаю проект!

Старый 26.06.2002, 15:26
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 6  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: 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.
Старый 26.06.2002, 20:22
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 7  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
2Nox

Респект.
Но у тебя если мышой дернуть то это не отслеживается, а без отслеживания мыши у меня короче :-Р
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 26.06.2002, 20:27
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 8  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ну да, согласен...
только в первом варианте кода движение мышки не отслеживалось
но все равно, нужно-то добавить всеголишь функцию онМаусМув, которая будет убивать ссылку ready
так что будет три функции


Последний раз редактировалось Nox Noctis; 26.06.2002 в 20:36.
Старый 21.01.2004, 20:03
catilina вне форума Посмотреть профиль Отправить личное сообщение для catilina Найти все сообщения от catilina
  № 9  
catilina

Регистрация: May 2003
Сообщений: 144
поднимаю
а твой скрипт(предпоследний) точно работает под List флеша MX2004?
я сделал простой copy/pastle, создал лист с нужным инстансом, все это в одном и единственном фрейме мувика, и вроде как не пашет...

последний твой скрипт дает 14 ерроров...


Последний раз редактировалось catilina; 21.01.2004 в 20:09.
Старый 21.01.2004, 20:24
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 10  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
все работает, гарантировано :)

но только для АС1.0 (надо указать в паблиш сеттингах).. если необходимо исправить под АС2.0 - надо подумать :)

Создать новую тему   Часовой пояс GMT +4, время: 20:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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