![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Имеем две формы: главную и дочернюю. При открытии приложения видна главная форма, а дочерняя скрыта. Она становится видимой по нажатию на специальную кнопку. Главная, соответственно, скрывается. В дочерней форме назначен такой обработчик событий мыши:
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; } }; Последний раз редактировалось starserfer; 10.03.2009 в 01:26. |
|
|||||
|
listener
|
Занятный глюк. Жаль нет времени заниматься его воспроизведением у себя.
А как вы показываете дочернюю форму? Она у вас модальная или нет? И еще такой момент: вы ведь зашили в дочернюю форму отдельный свф, так? Так вот, лучше будет, если все действия в клипе-дочерней-форме вы будете вызывать принудительно с помощью метода mdm.Forms.formName.callFunction(functionName:String, parametersString:String, delimiter:String) Я делал так: "показывал" дочернюю форму сразу при старте приложения где-то в сторонке, типа x=-50000. При этом в нее загружался ее свф, но НЕ ПРОИГРЫВАЛСЯ, там не было ничего, кроме набора функций, вызовов их не производилось. Перед показом дочерней формы из главной делал callFunction в дочерней, указывая что надо приграть конкретно, т.е. какую функцию отработать. И показвал ее модально. При этом в главной форме все замирает. На финише отработки скриптов в дочерней форме, перед ее закрытием делал вызывая таким образом каллбэк в главной форме, передавая результаты отработки скриптов в дочерней форме. И так каждый раз, когда надо было показать дочернюю форму. Насчет сокрытия курсора - можно, как вариант, использовать Последний раз редактировалось alexcon314; 10.03.2009 в 17:42. |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Дочерняя форма не модальная. И, честно говоря, как-то не совсем я разобрался с модальными формами в цинке. Но, тем не менее, некоторые ваши, alexcon314, рекомендации, оказались плодотворными. Сделал я следующее: весь свой вышеприведенный мышиный обработчик поместил в тело новой функции mouseEventInit(), которая вызывается теперь
в главной форме каждый раз, когда нажимается кнопка, визуализирующая дочернюю форму. А в дочерней форме, в функции, скрывающей форму, добавил две строчки
Сейчас проверяю и так и сяк, как-будто все работает нормально. Может здесь глюка никакого и нет, а именно так и надо поступать в подобных случаях? Как бы-то ни было, спасибо. Кстати, раз уж зашла речь о модальных формах, нельзя ли привести для общего развития пару строчек кода корректного создания (показа-сокрытия) модальной формы? Пытался открывать дочернюю форму из главной командой mdm.Forms.SubForm1.showModal(), но потом при закрытии ее не хотела показываться (mdm.Forms.MainForm.show()) главная. А если и главную визуализировать как модальную, она показывается, но не реагирует ни на мышь, ни на клавиатуру. И потом, что это за конструкция из мануала О какой результирующей переменной идет речь и зачем нужна Application.exitWithModalResult()? В общем, были бы весьма полезны некоторые пояснения. Последний раз редактировалось starserfer; 10.03.2009 в 20:09. |
|
|||||
|
listener
|
Показывать главную форму модально не имеет смысла, можно, конечно, придумать ситуацию, когда именно главная форма должна висеть поверх всех других окон и лочить инпут только на себя, но это уж.. как-то слишком.
Что касается кода, то вот: // 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
Возможно, будет работать и в том случае, если вместо "ok" или других валидных строк в mdm.Application.exitWithModalResult() подставлять произвольную строку. Не проверял или забыл уже. Последний раз редактировалось alexcon314; 11.03.2009 в 17:49. |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Ну, теперь я вижу, что в моем случае применение модальных форм не является необходимостью. Спасибо, alexcon314. Ваши пояснения действительно оказались весьма полезны.
Последний раз редактировалось starserfer; 11.03.2009 в 20:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:32. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|