PDA

Просмотр полной версии : Модальные окна, поделитесь опытом


Mur4ik
08.09.2008, 22:27
Кто и как делает модальные окна, это что то вроде открылось окошко и нельзя ничего делать пока не закроешь его...

Т.е как дождаться ответа пользователя и выполнить соответствующие действия (или вернуться в ту чать программы которая проверит значения которые вернуло окно)...

Как вариант я думаю сделать так:
На фоне окна прозрачная кнопка с useHandCursor = false;
чтоб при открытии окна все остальные элементы под ним были не активны,
дальше сама функция вызова этого окна имеет тип boolean
с помощью watch (я тут недавно интересовался :) ) отслеживать что выбрал пользователь и исполнять нужный код в зависимости от ситуации.

Или еще вариант вешать на кнопки окна вызов функции, которая проанализирует выбор пользователя...

Есть еще какие-нибудь идеи-способы? Поделитесь опытом, пожалуйста...

Obi
09.09.2008, 19:27
Как вариант — положить под окно черный мув на весь экран с прозрачностью 50% (это даст понять юзеру, что остальной мув неактивен). Насколько я помню, в ас1\2 вложенные мувклипы не умеют реагировать на мышиные евенты. Могу ошибаться

Mur4ik
09.09.2008, 19:58
Спасибо, уже так и сделал ;), но меня больше техническая часть вопроса интересует именно как реализовать такое окно с точки зрения кода и обработки ответа пользователя?
Я пока на все случаи окон наплодил и каждому на кнопки повешал функции разные,
но думаю есть же решение по элегантней и правильней...
Благо в данном случае у меня таких окон получилось всего два-три, а если больше...
Думаю это не только меня интересует...

Obi
09.09.2008, 20:57
но думаю есть же решение по элегантней и правильней...

Конечно есть. ООП называется.

Mur4ik
09.09.2008, 21:51
Конечно есть. ООП называется.
Это ж не ответ... зачем вообще подобное писать, не понимаю, так для галочки и количества...Объектно-ориентированное программирование только для модальных окон решение? :)

Нельзя ли по конкретней?
Сам принцип, даже готовый код не прошу, хотя тоже было б не плохо :)

Obi
09.09.2008, 22:05
Конкретнее: пишете класс окна, определяете необходимые для вашего окна методы и свойства. Тогда чтобы создать окно, вам просто нужно будет создать екземпляр вашего класса с необходимыми параметрами.

Mur4ik
09.09.2008, 22:15
to Obi:
Опять ничего конкретного...
Я про методы решения... а Вы мне про принципы ООП :)

etc
09.09.2008, 23:17
to Obi:
Опять ничего конкретного...
Я про методы решения... а Вы мне про принципы ООП :)
Вам и описали метод решения. Метод решения — это не готовый код, а описание логики.

Mur4ik
10.09.2008, 00:03
Вам и описали метод решения. Метод решения — это не готовый код, а описание логики.

И где же в ваших ответах описание логики?...

По Вашему получается таким образом можно на все вопросы на форуме отвечать... "создайте нужную функцию, в ней пропишите нужный код определите ей нужные параметры и все у вас заработает", так ведь...
Это по Вашему описание логики? Да, но очень, очень обобщенно...

Если нечего сказать, лучше стороной пройти, как многие уже сделали (около 70 человек просмотрело, а ответов/советов конкретных нет)

Интересно Вам, __etc, приходилось что либо спрашивать на форуме,
и если б Вы в ответ получили нечто подобное, это для Вас сразу определило бы логику алгоритма?

darksranger
10.09.2008, 00:20
а что вам не понятно то ? у вас есть код создания вашего модельного окна ? так вот и сделайте из него класс

для маленьких ( это если не понятен принцип ООП )
сделайте function из своего кода, по созданию окна, принимающий параметры описывающие ваши потребности и на основе принимаемых параметров отрисовыващее то что вам нужно

собственно если хотите в классе ( более рационально с точки зрения читаемости кода), то создайте класс, в него поместите функцию которую я описал сверху и создавайте экземпляр своего класса, передавая ему нужные параметры

PS вам доходчиво обьяснили еще в первом ответе ....

Mur4ik
10.09.2008, 00:33
...у вас есть код создания вашего модельного окна ?...

PS вам доходчиво обьяснили еще в первом ответе ....

В том то все и дело что кода нету... был бы я б не спрашивал здесь что да как...
И в первом ответе ничего доходчивого, это я еще в своем вопросе написал, что чтоб заблокировать все от нажатий пользователя я ложу кнопку на все рабочее поле флешки...

Тут вопрос как код заблокировать/застопорить чтоб после отработки окна вернуться в нужное место и выполнить нужный код или в зависимости от выбора пользователя выполнить нужную для данного случая функцию...
Я же вызываю окно, а дальше то код продолжает выполняться...
а мне нужно дождаться решения пользователя и выполнять код дальше...

Например, есть удаление сообщений разных из разных мест, я хочу чтоб это можно было подтвердить, т.е на кнопку удаления я вешаю вызов такого "модального" окна которое переспросит пользователя и только после его ответа продолжит выполнение кода, и чтоб не делать для каждого случая новое окно с повешаной на его кнопку функцией, хотелось бы более красивого и правильного решения...

dirigableNorge
10.09.2008, 01:38
Ну ведь всё зависит от архитектуры программы.
Если у человека код работает, как процедура, а не как система взаиомосвязанных объектов, то нужно будет очень хорошо постраться, чтобы написать остановку выполнения алгоритмов. А если это ооп, то каждый экземпляр любого класса подписывается на определенное событие типа onStopWork, блокирующую выполнения текущего алгоритма, а после выбора пользователя onRestartWork, с передачей параметра от пользователя. В любом случае сначала нужно знать, что именно делает программа каждый момент времени, а затем уже создавать объекты и методы в соответствии с выработанной методологией.
А код тебе никто писать не будет. Потому, что код это всего лишь инструмент для решения задачи, а когда задача это сделать инструмент, то сам понимаешь это туфта - тако инструмент никому не нужен.

wvxvw
10.09.2008, 01:57
Вобщем-то, как правило, алерт не должен прекращать работу других компонентов, а просто предотвратить интеракцию с пользователем, так что останавливать их нет смысла...
По поводу архитектуры - логичо, на мой взгляд иметь менеджер окон, абстрактный класс окна и фабрику, которая эти окна создает.
Менеджер осуществляет открытие окна и диспатчит соответствующее событие, все, кому нужно это событие на него подписываются. Далее, все подписавшиеся могут получить от менеджера ссылку на открытое окно и подписаться на события окна. Соответственно, перед закрытием менеджер диспатчит событие закрытия, все, кто должен был отреагировать на него - отписываются от событий окна.
Абстракный класс / интерфейс окна позволяет унифицировать доступ / подписку. Ну а фабрика нужна для того, чтобы создавать схожие по типу доступа, но разные по функционалу окна.

Mur4ik
10.09.2008, 02:09
Короче дело ясное что дело темное....

Пока не подросту чтоб потом всем новичкам тут тоже так умно отвечать,
буду делать так:
модальное окно вызываю функцией в параметрах которой передам имя функции которую нужно выполнить после решения пользователя,
на код кнопок повешаю функцию обработки результатов окна которая в зависимости от выбора пользователя - "Да - Нет" выполнит нужную функцию переданную параметром при вызове окна...
будет ли это хорошо и более менее правильно?

Mur4ik
10.09.2008, 02:13
Вобщем-то, как правило, алерт не должен прекращать работу других компонентов, а просто предотвратить интеракцию с пользователем, так что останавливать их нет смысла...
...Ну а фабрика нужна для того, чтобы создавать схожие по типу доступа, но разные по функционалу окна.

Вот это я понимаю совет или толковый ответ :)
Спасибо... но думаю на данном этапе развития это для меня еще сложновато будет....т.е. суть я примерно понял, но реализацию не потяну, наверное, еще...
А так я скопирую это все в заметки и когда нибудь воспользуюсь...
Еще раз огромное спасибо wvxvw

skald
10.09.2008, 02:52
Тут вопрос как код заблокировать/застопорить чтоб после отработки окна вернуться в нужное место и выполнить нужный код или в зависимости от выбора пользователя выполнить нужную для данного случая функцию...


а если просто создать цыкл, выходом из которого будет решение пользователя??
тормознуто, зато просто в реализации и понимании .... ;)

Mur4ik
10.09.2008, 05:35
а если просто создать цыкл, выходом из которого будет решение пользователя??
тормознуто, зато просто в реализации и понимании .... ;)

Пробовал - очень тормознуто, причем в swf есть ограничение на бесконечность циклов (чтоб скрипты не вешали swf-ки) в 15 сек.,
можно и изменить этот порог, но очень уж тормознуто все получается ),
поэтому такое решение не выход.

Double
10.09.2008, 06:56
...Как вариант я думаю сделать так:
На фоне окна прозрачная кнопка с useHandCursor = false;
очень правильная мысль, если пресловутая "фабрика окон" )))) пугает. просто экранируй всё этой кнопкой, а окошко своё повесь над этим экраном. при закрытии окна удали экран и всё. вообще на старте есть смысл пытаться упрощать задачи, а не обобщать их(==унифицировать решения).