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

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

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

Регистрация: May 2008
Сообщений: 41
По умолчанию standalone фотогалерея с подгрузкой картинок через xml

Тема эта поднималась уже где-то на форуме, но хотелось бы более подробного объяснения затронутого вопроса, желательно на пальцах. К примеру есть папка my_cat, в ней исходник фотогалереи my.fla, папка с картинками images и файл my.xml с описанием структуры галереи. Таким образом, картинки не внедряются в .swf, а подгружаются с помощью .xml. Как правильно прописать пути к картинкам и .xml, чтобы после копмпиляции в Zinc, эти картинки подгружались в экзешник также, как и в .swf? Знаю, есть свойство mdm.Application.path, но не могу разобраться, как его нужно правильно использовать.

Старый 15.01.2009, 09:39
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
mdm.Application.path - абсолютный путь к папке, из которой был запущен цинк-ехе. Допустим, "с:\my_cat".
Хмл лежит в той же папке.
URL для хмл будет "с:\my_cat\my.xml" или mdm.Application.path + "my.xml".
В хмл в пишете < path="images/foto1.jpg" ...>.
Путь к картинке mdm.Application.path + "images\\foto1.jpg".
Т.е. содержание атрибута path надо добавить к абсолютному пути до рабочей папки.
Вообще, может работать и с относительными путями. Но лучше все-таки использовать абсолютные. Для того, чтобы вычислить налету абсолютный путь и предназначен mdm.Application.path.

Старый 16.01.2009, 00:39
starserfer вне форума Посмотреть профиль Отправить личное сообщение для starserfer Найти все сообщения от starserfer
  № 3  
Ответить с цитированием
starserfer

Регистрация: May 2008
Сообщений: 41
Однако, не пойму. Порассуждаем: если в своем исходнике я имею такую переменную,
Код:
var myXml:String="my.xml";
то правильная загрузка xml (пока без Цинка) выглядит следующим образом
Код:
sourceXML = new XML(); ...sourceXML.load(myXml);
Теперь, имея в виду дальнейшую обработку в Zinc, вместо последней строчки пытаемся написать (заранее сомневаясь):
Код:
sourceXML.load(mdm.Application.path+myXml);
и конечно же, ничего не работает. SWF не компилируется: "Error opening URL ". Очевидно, что так: mdm.Application.path+xmlFile - писать неправильно. Очевидно, что надо дать swf нормально загрузить xml, используя свои инструменты, а потом уже, во время компиляции Цинком должны отработать скрипты mdm. В этом, собственно и состоял вопрос: понимаю, как должен загружаться xml без цинка; думаю, что понимаю, как работает mdm.Application.path, но не разберусь, как правильно обеспечить взаимосвязь скриптов.

Старый 16.01.2009, 03:22
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
SWF не компилируется: "Error opening URL
Это ошибка исполнения скрипта, а не ошибка компиляции. Жмите не ctrl+Enter (Test Movie), а shift+F12 (Publish). Переключайтесь на цинк и компилируйте опубликованный таким образом swf в ехе.
Флэш не воспринимает в скрипте ничего, что начинается с mdm., для него это пустой звук - undefined. Все эти mdm-вставки начинают работать только после компиляции в цинке, тогда флэш все mdm. видит как надо и выполняет что нужно.
Я таки рекомендую использовать абсолютные пути.


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

Регистрация: May 2008
Сообщений: 41
Кажется, получилось. И все оказалось проще, чем представлялось. Вот старое объявление переменной с адресом основного xml в оригинальном исходнике (исходник взят где-то на форуме. Автор - участник форума Wolsh):
Код:
var xmlFile:String = "test.xml";
меняем на
Код:
var xmlFile:String = mdm.Application.path + "test.xml";
Теперь разбираемся с адресом папки с картинками. Переменная, хранящая ссылку на необходимый узел XML:
Код:
...var imageList:XMLNode = pageXML.firstChild.firstChild;
Искомая переменная с адресом папки с картинками. Было:
Код:
img_folderURL:String = imageList.attributes.imageFolder;
Стало
Код:
img_folderURL:String = mdm.Application.path + imageList.attributes.imageFolder;
pageXML здесь - переменная, хранящая содержимое нашего xml, imageFolder - атрибут узла xml, содержащий адрес папки с картинками в виде :"images/". И все. Вот это я называю объяснением "на пальцах". Конечно, галерея не доделана, здесь грузятся только превьюшки, но картинки снаружи, они грузятся, и это главное.
Спасибо, alexcon314. Хотел бы задать еще один вопрос по поводу управления дочерними формами. Заранее извиняюсь за offtopic, да и вообще, за столь пространное сообщение, но не хочется плодить темы на одно сообщение, тем более вопросы, в некотором роде, перекликаются. Итак. Здесь на форуме в faq-е читаем:
Цитата:
Чтобы дочерняя форма нормально инициализировалась при старте приложения и не мелькала при этом на экране - в IDE при компиляции задать ей отрицательную x- или y-координату и свойство visible=true.
Дело в том, что обращаться к функциям дочерней формы из основной формы можно только после первого появления дочерней формы на экране. до этого момента ее "как бы" нет.
При задании отрицательных координат при visible=true формально при старте форма будет "показана" (но не буквально), что и устраняет указанное препятствие. Далее, можно оперировать с ее координатами или с ее свойством visible из основной формы, показывая ее когда необходимо, предварительно подгрузив в нее нужный swf.
Я делаю по другому. Просто сразу присваиваю дочерней форме visible=false, а когда мне нужно визуализировать ее, делаю это при помощи mdm.Forms.SubForm.show();
Так неправильно? И еще. Что фактически происходит, когда мы используем show() или hide(). Включаем-выключаем форму, делая ее при hide() абсолютно безразличной к манипуляциям с активной формой, как будто нажимая на значок закрытия окна, или просто невидимой. но каким-то образом реагирующей на движения и щелчки мыши?

Старый 16.01.2009, 20:44
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Сказанное в цитате относится к другому контексту. Так следует делать, когда вторая форма сразу нужна для работы с ней из основной формы, например через Flash.cаllFunction или еще что-то, а именно это и нужно делать в контексте поста, откуда вы взяли цитату.. Это просто особенность (можно назвать и косяк) цинка - дочерняя форма недоступна для работы с ее содержимым, пока она не будет хотя бы раз отображена нормально...
Хиде форма помещается в точку с координатами -30000,-30000, так во всяком случае ведут себя обычные окна. Она просто "висит" там, никак не проявляя себя и не реагируя ни на какие манипуляции. Однако, если она уже была хотя бы один раз показана (см. выше), то загруженный в нее ролик продолжает жить нормальной жизнью, производятся вычисления, с ним можно "общаться" и т.д.
Цитата:
Я делаю по другому. Просто сразу присваиваю дочерней форме visible=false, а когда мне нужно визуализировать ее, делаю это при помощи mdm.Forms.SubForm.show();Так неправильно?
Если для вашего приложения указанная выше особенность цинка некритична, а так оно, видимо, и есть - все нормально. Иначе, вы бы по-другому спрашивали .
Замечу, что все сказанное мной в отношении цинка на этом форуме за редким исключением относится, главным образом, к версии цинка 2.5.0.34.

Старый 16.01.2009, 23:32
starserfer вне форума Посмотреть профиль Отправить личное сообщение для starserfer Найти все сообщения от starserfer
  № 7  
Ответить с цитированием
starserfer

Регистрация: May 2008
Сообщений: 41
Большое спасибо. Но как же все таки насчет show() и hide()? Правильно ли будет считать, что выполняя mdm.Forms.SubForm.hide(), я как бы "выключаю" форму (аналог нажатия кнопки закрытия окна), а не просто прячу ее? Другими словами, после применения этой команды, если я совершаю какие-нибудь действия с главной, активной формой, реагирует ли на эти действия скрытая форма? Интересуюсь, главным образом потому, что хочу вызывать дочернюю форму без Caption, а закрывать ее с помощью hide(). Может вместо hide-show, нужно для этих целей использовать другие команды?
Цитата:
Замечу, что все сказанное мной в отношении цинка на этом форуме за редким исключением относится, главным образом, к версии цинка 2.5.0.34.
Если данная цитата подразумевает, что данная версия цинка не поддерживает mdm.Forms.SubForm.hide(), mdm.Forms.SubForm.show(), то, естественно, вопрос снимается.


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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Сокрытие формы скорее аналогично нажатию кнопки "свернуть" для окна. Но при использовании hide() она еще и с таскбара пропадает.
Цитата:
...если я совершаю какие-нибудь действия с главной, активной формой, реагирует ли на эти действия скрытая форма?
Какие действия? Вы попробуйте сделать так как вам нужно, чтобы было. Если не выйдет или что-то не так - будет предмет для разговора. Не усложняйте себе жизнь раньше времени. Кроме того в предыдущем посте я ответил вам на ваш вопрос.
Другие команды использовать можно, например, mdm.Forms.SubForm.x = -5000 (или 8000 или 10000 или...). Но тоже самое происходит при команде hide(). Я не помню только точно ли отображается в цинке дочерняя форма на таскбаре, но вроде там это можно отключить вручную, через установку какого-то флажка..если уж вам ее надо совсем скрыть)).

Старый 17.01.2009, 01:39
starserfer вне форума Посмотреть профиль Отправить личное сообщение для starserfer Найти все сообщения от starserfer
  № 9  
Ответить с цитированием
starserfer

Регистрация: May 2008
Сообщений: 41
Наконец, понял. "Хиде" меня вначале озадачило из поста №6. Спасибо.

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

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

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


 


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


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