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

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

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

Регистрация: May 2008
Сообщений: 41
По умолчанию Zinс 3: обработчик событий мыши в дочерней форме срабатывает в главной

Имеем две формы: главную и дочернюю. При открытии приложения видна главная форма, а дочерняя скрыта. Она становится видимой по нажатию на специальную кнопку. Главная, соответственно, скрывается. В дочерней форме назначен такой обработчик событий мыши:
Код AS1/AS2:
var if_cursor:Boolean = true;
carrier.useHandCursor = false;//carrier - просто клип
var mouse_move:Number = Null;
 
var obj:Object = {};
Mouse.addListener(obj);
 
mouse_move = getTimer();
carrier.onEnterFrame = carrierOnEnterFrame;
 
obj.onMouseDown = function():Void 
{
	Mouse.show();
	mouse_move = getTimer();
	carrier.onEnterFrame = carrierOnEnterFrame;
};
 
function carrierOnEnterFrame():Void
{
 
 
	if (getTimer() >= mouse_move + 20000)
	{
		delete carrier.onEnterFrame;
		Mouse.hide();
		if_cursor = false;
	}
}
 
obj.onMouseMove = function():Void 
{
	if (!if_cursor)
	{
		Mouse.show();
		if_cursor = true;
	}
	else if (if_cursor)
	{
		mouse_move = getTimer();
		carrier.onEnterFrame = carrierOnEnterFrame;
 
	}
};
То есть предусматривается, что, когда открывается дочерняя форма, курсор должен исчезнуть через 20 сек. Так же он исчезает, если в течение 20 сек. мышь остается неподвижной. Проблемы или странности здесь две. Одна - это та, что абсолютно игнорируется команда mdm.Forms.SomeForm.setFocus(), то есть, невозможно установить фокус на любую из форм. Я уже поднимал когда-то эту тему, но ответа так и не нашел. Эта странность, в общем-то, не имеет к событиям мыши отношения, но, возможно именно из нее вытекает вторая странность. Она проявляется в том, что каждый раз, когда становится видимой главная форма, начинает срабатывать обработчик мыши для скрытой дочерней формы. Но происходит это только один раз. То есть, через 20 сек. курсор исчезает. Щелкаем или двигаем мышь - курсор появляется. И все. Мышь больше не исчезает. Делаем видимой-прячем дочернюю форму и в главной все повторяется снова. Для дочерней формы обработчик событий мыши может, в свою очередь, срабатывать неправильно, в зависимости от того, срабатывал он уже в главной форме или нет. Было предположение, что, возможно, все это происходит потому, что дочерняя форма, хоть и скрыта, но фактически находится под главной, и мышь реагирует на нее. Но задание координаты mdm.Forms.SubForm1.x=-50000 ни к чему не привело. Как же добиться того, чтобы в главной форме мышь не вела себя по сценарию дочерней?


Последний раз редактировалось starserfer; 10.03.2009 в 01:26.
Старый 10.03.2009, 17:39
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Занятный глюк. Жаль нет времени заниматься его воспроизведением у себя.
А как вы показываете дочернюю форму? Она у вас модальная или нет?
И еще такой момент: вы ведь зашили в дочернюю форму отдельный свф, так? Так вот, лучше будет, если все действия в клипе-дочерней-форме вы будете вызывать принудительно с помощью метода
Код:
mdm.Forms.formName.callFunction(functionName:String, parametersString:String, delimiter:String)
а не пускать все на "самотек" в этом дочернем свф-е. Дело в том, что клип начинает пригрываться сразу после загрузки формы, а может и еще как - не выяснял, но тут глючное место, точно.
Я делал так: "показывал" дочернюю форму сразу при старте приложения где-то в сторонке, типа x=-50000. При этом в нее загружался ее свф, но НЕ ПРОИГРЫВАЛСЯ, там не было ничего, кроме набора функций, вызовов их не производилось. Перед показом дочерней формы из главной делал callFunction в дочерней, указывая что надо приграть конкретно, т.е. какую функцию отработать. И показвал ее модально. При этом в главной форме все замирает. На финише отработки скриптов в дочерней форме, перед ее закрытием делал
Код:
mdm.Forms.MainForm.callFunction()
вызывая таким образом каллбэк в главной форме, передавая результаты отработки скриптов в дочерней форме. И так каждый раз, когда надо было показать дочернюю форму.
Насчет сокрытия курсора - можно, как вариант, использовать
Код:
mdm.Input.Mouse.hide(formName)


Последний раз редактировалось alexcon314; 10.03.2009 в 17:42.
Старый 10.03.2009, 19:42
starserfer вне форума Посмотреть профиль Отправить личное сообщение для starserfer Найти все сообщения от starserfer
  № 3  
Ответить с цитированием
starserfer

Регистрация: May 2008
Сообщений: 41
Дочерняя форма не модальная. И, честно говоря, как-то не совсем я разобрался с модальными формами в цинке. Но, тем не менее, некоторые ваши, alexcon314, рекомендации, оказались плодотворными. Сделал я следующее: весь свой вышеприведенный мышиный обработчик поместил в тело новой функции mouseEventInit(), которая вызывается теперь
Код AS1/AS2:
mdm.Forms.SubForm1.callFunction("mouseEventInit","","")
в главной форме каждый раз, когда нажимается кнопка, визуализирующая дочернюю форму. А в дочерней форме, в функции, скрывающей форму, добавил две строчки
Код AS1/AS2:
Mouse.removeListener(obj);
delete carrier.onEnterFrame;
Сейчас проверяю и так и сяк, как-будто все работает нормально. Может здесь глюка никакого и нет, а именно так и надо поступать в подобных случаях? Как бы-то ни было, спасибо.

Кстати, раз уж зашла речь о модальных формах, нельзя ли привести для общего развития пару строчек кода корректного создания (показа-сокрытия) модальной формы? Пытался открывать дочернюю форму из главной командой mdm.Forms.SubForm1.showModal(), но потом при закрытии ее не хотела показываться (mdm.Forms.MainForm.show()) главная. А если и главную визуализировать как модальную, она показывается, но не реагирует ни на мышь, ни на клавиатуру. И потом, что это за конструкция из мануала
Код AS1/AS2:
var exitResult = mdm.Forms.MainForm.showModal();
О какой результирующей переменной идет речь и зачем нужна Application.exitWithModalResult()? В общем, были бы весьма полезны некоторые пояснения.


Последний раз редактировалось starserfer; 10.03.2009 в 20:09.
Старый 11.03.2009, 17:37
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Показывать главную форму модально не имеет смысла, можно, конечно, придумать ситуацию, когда именно главная форма должна висеть поверх всех других окон и лочить инпут только на себя, но это уж.. как-то слишком.
Что касается кода, то вот:
Код:
// MainForm code
var exitCode = mdm.Forms.subForm.showModal();
if (exitCode == "cancel") {
	// start process "cancel"
}
if (exitCode == "ok") {
	// start process "ok"
}
// another if's


// SubForm code
mdm.Application.exitWithModalResult("ok");
// Valid modalResult values are: 
// none,ok,cancel,abort,retry,ignore,yes,no,all,notoall,yestoall
Т.е. exitCode - переменная, содержащая результат отработки модальной формы.
Возможно, будет работать и в том случае, если вместо "ok" или других валидных строк в
mdm.Application.exitWithModalResult() подставлять произвольную строку. Не проверял или забыл уже.


Последний раз редактировалось alexcon314; 11.03.2009 в 17:49.
Старый 11.03.2009, 20:28
starserfer вне форума Посмотреть профиль Отправить личное сообщение для starserfer Найти все сообщения от starserfer
  № 5  
Ответить с цитированием
starserfer

Регистрация: May 2008
Сообщений: 41
Ну, теперь я вижу, что в моем случае применение модальных форм не является необходимостью. Спасибо, alexcon314. Ваши пояснения действительно оказались весьма полезны.


Последний раз редактировалось starserfer; 11.03.2009 в 20:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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