Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   вызов PDF (http://www.flasher.ru/forum/showthread.php?t=116008)

Lukichev 17.09.2008 21:45

вызов PDF
 
здравствуйте...такой вопрос...есть презентация на флеше... и есть куча pdf файлов(штук 70), которые по ТЗ должны загружаться в Reader'e...натолкните на мысль, как это реализовать и про что хэлп читать... кучу bat' ников делать - не тема! :umnik2:

alexcon314 17.09.2008 22:43

Чего-то готовых решений не приходит на ум. Разве что пресловутый Zinc. Но за деньги.
Бесплатно:
пишите простенький ехе-запускашку, который держит связь с флеш-прожектором, слушает чего запускать по LocalConnection (вполне реально, испробовано), или через ClipBoard (это я не пробовал). Можно еще сокет использовать для отдачи команд запускашке, но это перебор наверно.
Не очень оригинально, к сожалению. Но куча батников тоже не блеск.

Lukichev 18.09.2008 08:44

Идею принял. Спасибо..попробую разобраться...может быть еще варианты есть?

chingachgoog 18.09.2008 14:30

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

alexcon314 18.09.2008 15:16

http://flasher.ru/forum/showthread.php?t=114844
Вот, например, только в варианте с инишником.
Для 70 пдфов придется делать 70 копий такой ехе-запускашки. Не катит.

Lukichev 18.09.2008 19:38

всеравно спасибо, перерыв кучу всего, так и не нашел иного способа...ну чтож, наберусь терпения и приготовлю кучу ini'шек...

alexcon314 19.09.2008 02:23

Если вы наберетесь терпения, к вечеру я постараюсь выложить запускашку, о которой я говорил, использующую LocalConnection.

alexcon314 19.09.2008 11:34

Вложений: 1
Ну вот, готово.
Итак, во вложении находится пример, демонстрирующий, как из флэш-прожектора можно открывать любые файлы - .exe, .doc, .pdf, txt и т.д. в неограниченных количествах :).
Принцип работы вкратце:
в прожекторе создается экземпляр LocalConnection с определенными параметрами (их менять нельзя):
Код:

var client:LocalConnection = new LocalConnection();
client.connect("fromExe");
fscommand("exec", "flrun.exe");
send_btn.onRelease = function() {
        // В коде путь пишем с двойными слэшами, в текстовом поле можно с одинарными
        //client.send("toExe", "run", ".\\файл.pdf");
        //client.send("toExe", "run", "d:\\файл.pdf");
        client.send("toExe", "run", toSend.text);
};

и запускается "запускашка" (:D) flrun.exe.
flrun.exe "подхватывает" локалконнекшн в памяти, слушая его, принимает строку-команду из прожектора. И отдает ее как есть API-функции ShellExecuteA().
(тут-то и возникла извечная проблема кодировок.))) но поиск как всегда рулит.)
flrun.exe спроектирован так, что запускается в единственном экземпляре и только из-под прожектора при условии, что уже создан экземпляр LocalConnection. Закрывается flrun.exe вместе с прожектором автоматически.
Было бы интересно услышать мнения, замечания, пожелания, предложения.

scarbo 19.09.2008 11:43

У меня,чё-то не работает

MrXoT 19.09.2008 11:55

можно попробывать так
у меня например работает
getURL("name.pdf", "_blank");
открывается новое окно браузера и тама загружается пдф фаил....прям в браузере

Wolsh 19.09.2008 13:02

alexcon314, у меня тоже не работает((((

alexcon314 19.09.2008 14:56

Вложений: 1
Досадно.)
Ну что, будем дебажить? Или не стоит того?
Во вложениеи lctrace.exe - консольный вариант flrun.exe.
Кому не лень, замените flrun.exe на lctrace.exe (переименовать или заменить в прожекторе fscommand("exec", "lctrace.exe")) в моем примере. И отпишитесь что видно )).

Lukichev 19.09.2008 16:26

что-то с LocalConnection не работет....домой приду, посмотрю поподробнее...

Lukichev 19.09.2008 16:31

alexcon314, с абсолютными путями все ок, а вот с относительными не пашет..(

alexcon314 19.09.2008 16:37

Может я какую-то деталь упустил в описании как юзать.. у меня все пашет.
Что видно в трейсе (lctrace.exe)?
Приведите пример строки-команды, плз, того, что пишете в прожекторе в текст инпут.

Wolsh 19.09.2008 16:47

Во, эта пашет! Только трейсер теперь аккуратно из нее убери пожалуйста))))
И это, то что точки в относительном пути тоже надо двоить, както пугает. Это нельзя исправить?
А так просто супер, за такое на родине памятник ставят)))
А, и еще баг-не баг, но портабельный офис запускается, но открыть файл не может, ошибку пути выдаёт. Впрочем это уже его проблемы))))
Спасибо большое, только доделай до релиза плиз))))

alexcon314 19.09.2008 17:03

Вложений: 1
Удалил.
...
опа.. с точками не понял. подробней можно? Честно, меня больше русские буквы в путях напрягли..

Wolsh 19.09.2008 17:27

А, нет, сорри, чето я затупил! Все правильно, это косые меня сбили.
Еще раз СПАСИБО! Всё работает.

Lukichev, относительный путь примерно так
Код:

client.send("toExe", "run", "..\\PDFfiles\\file.pdf");
Это файл file.pdf, лежащий в папке PDFfiles, которая в одной директории с проектором.

alexcon314 19.09.2008 17:32

Уточняю, относительный путь берется ОТНОСИТЕЛЬНО ЗАПУСКАШКИ (flrun.exe).

Mnilionic 19.09.2008 19:10

Здорово! спасибо за такой подарок :)
Работает замечательно.
Единственное, при старте, секунд 5 курсор сиволизирует занятость системы.

ps в сообщении с примером использования опечатка при указании адреса "на уровень выше" - вместо двух точек стоит одна.

alexcon314 20.09.2008 02:16

Ок. Спасибо всем.
Релиз постараюсь сделать в ближайшее время.))
Цитата:

Единственное, при старте, секунд 5 курсор символизирует занятость системы.
Да, это есть. Мелочь, но неприятно). Попробую устранить.
Если есть пожелания в плане функционала - милости просим.)) Пока, за отправную точку, возьмем что есть.

Mnilionic 20.09.2008 02:50

а что будет, теоретически, если запустить два или более проектора (у каждого своя запускашка)?
Мне казалось будут баги из-за идентификаций проекторов, но вроде всё работает нормально.

alexcon314 20.09.2008 11:03

Запускашка одна на все запущенные прожекторы (вторая просто не запустится). И она будет работать пока не закроют последний прожектор (точнее, пока не будет убит последний LocalConnection среди прожекторов). Это своего рода "сервер". Она принимает "запросы"-команды и выполняет их. Идентификации как таковой нет, точнее она одинакова для всех - это имя соединения и имя метода в LocalConnection. Запускал до десятка прожекторов - работало, но, конечно, можно попытаться сэмулировать ситуацию, когда один запрос затрет другой, необработанный еще..Они же пишутся в одну область памяти. При скане памяти каждые 100мс это сделать можно, наверно, только программно. И потом, когда запускашка читает очередной запрос, ни один прожектор не может ничего послать, блокировка работает, и прожекторы соответственно одновременно посылать запросы не могут. Некая очередность организована.. Один пишет запрос, другой - ждет.
Вообще, можно все это и по другому разрулить, по примеру "клиент-сервер", сервер написать более продвинутый. Это, возможно, потребуется, когда не только прожектор будет слать "запросы" запускашке, но и от запускашки будут приходить в прожектор "ответы". Тогда без строгой идетификации не обойтись. Либо просто снабжать каждый прожектор своей запускашкой, снабженной индивидуальной конфигурашкой (:D) - файликом с именами соединения и метода клиента, с которым ей предстоит работать..
Пока не вижу причин все усложнять.

Mnilionic 20.09.2008 11:18

понятно. Тогда единственное что стоит добавить это сообщение "фаил по такому-то пути не найден", когда файла действительно нет, а то сейчас он предательски молчит :)

alexcon314 20.09.2008 11:37

Реализую. Мессаджбоксом.

alexcon314 21.09.2008 00:35

Вложений: 1
Релиз.

Wolsh 21.09.2008 01:04

Низкий поклон)))) Решить многолетнюю проблему флэшовых медиамейкеров - ты вошел в историю. Это надо расшарить - сделать страницу, или в блогах разместить. Людям это нужно. Ты молодчина!

alexcon314 21.09.2008 01:12

Wolsh, cпасибо. Если успел качнуть - перекачай. Там маленькое исправление.
Когда неправильный путь - он в мессаджбокс выводится. Mnilionic предложил. Так всегда с релизами - чего-нибудь да забудешь)))). Провозился с
Код:

Единственное, при старте, секунд 5 курсор символизирует занятость системы.

Wolsh 21.09.2008 11:20

Ага, только знаешь... давай это окошко с месседжем всеже очеловечим. Пусть там будет написано например File not found и во второй строчке - путь. А то, согласись, для конечного юзера окошко с кусками инопланетного кода)))) будет выглядеть пугающе. И заголовок окна катострофически не влазит. Почему бы не сделать просто Error. А вот что не стал пугающие значки вставлять в сообщение - это правильно)))

scarbo 21.09.2008 14:48

alexcon314, а у меня не пашет.
Распаковал на диск С,там же где и flrun.exe лежит положил txt и pdf файлы,не один не запускается,и вообще нет никакой реакци

Wolsh 21.09.2008 18:34

scarbo, без кода и раскладки вам как помочь? Покажите запросы и опишите кто где лежит.

Mnilionic 21.09.2008 20:14

alexcon314, оперативный релиз )
wolsh прав - заголовок окна пугающий :)
На мой взгляд, было бы удобный выводить апсолютный путь файла. То есть реальный адрес по которому не удалось найти фаил.

ещё страшная вещь:
меседжбокс появляется !под! окном флеша.
То есть если флеш в режиме фулскрин - фенита ля камедия, спасает альт+таб с поиском окна ошибки либо диспетчер задач.

Wolsh 21.09.2008 20:26

Кстати, это ведь кажется нерешаемая проблема - поверх фуллскрина (а каждая уважающая себя презентация обычно в фуллскрине))) уже ничего не покажешь, т.е. режим будет сброшен. Если при этом открывается нужный файл, еще ниче, а так... Может (правда не уверен) было бы интересно получать во флэшку сообщение что файл не нашли? И там уже стильно извиняться))))

Про абсолютный путь тоже ЗА. Только настаиваю на необходимости поясняющего ситуацию текста, а не просто пути.

Mnilionic 21.09.2008 21:35

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

+
ха, или чтоб flrun.exe запускала альтернативный error.exe с пояcнительным текстом, который благополучно откроется поверх фулскрина :D

scarbo 21.09.2008 22:18

Странно,у меня ни чего не получалось на ноуте.
А на компе все прекрасно работает.
Ни чё не понимаю,все тож самое делаю:boredom:

alexcon314 22.09.2008 00:16

Вот оно, началось :). Стоит только выйти "релизу" - сразу куча багов :D.
Каюсь, Wolsh меня так "разогрел", что бросился сломя голову шлепать версии как будто в первый раз.
Ок. Работка предстоит серьезная. Давайте по порядку.
1. Отображение/обработка ошибок.
МессаджБокс - в урну. Не по нашенски это, не по флешерски.
Однако, заменой ему может быть только вариант отдачи ошибки (пусть и не обязательно "кривой путь") обратно в прожектор . Технически это не очень заморочно. Код в прожекторе изменится минимально - добавится метод у локалконнекшн и все. Типа:
Код:

client.error = function(error_message){...}
На стороне запускашки, вобщем-то, тоже все готово у меня, были наработки давние. Но тут, господа медиамейкеры, возникает проблема множественного запуска прожекторов. Несколькими постами выше мы с Mnilionic коснулись этого вопроса. Вариантов видится два:
- налаживать идентификацию прожекторов, чтобы ОДИН экземпляр запускашки не слал мессаги наугад. Видимо, следует слать запускашке некий "ини-запрос", ответом на который будет id-инфа для клиента. Либо снабжать этой инфой каждый запрос изначально. Своего рода протокол нужен, вобщем.
- делать под каждый прожектор свой экземпляр запускашки и конфигурять ее через ини-файл. Тогда только два (или несколько) идентичных прожектора смогут работать с одной и той же запускашкой и, возможно, некорректно получать сообщения от запускашки. Этот вариант более простой. Но появляется лишний файл - файл настроек. И для разработчиков лишняя морока. Да проблема вцелом не снимается, сужается только.

Проблема в том, что такова особенность локал коннекшн: для обмена мессагами используется общий, так сказать, котел, читай область памяти с фиксированным адресом. Все месаги варятся там, пока не будут прочитаны (прочитанное сообщение не затирается как таковое, просто сбрасываются в ноль битовые поля, хранящие его размер), либо затерты вновь отосланным сообщением. Выцепить адресованное тебе сообщение из этого котла можно только по заголовку - пара имя коннекта/имя метода. И то - если успеешь.
Сообщения не складываются "стопкой", которую можно последовательно неспеша разбирать. Скорее наоборот - жаждущие прочитать/отправить сообщение выстраиваются в очередь. И не факт, что корректно будут писаться/читаться сообщения при множестве клиентов. Впрочем, можно попробовать, но теоретически - не факт.
Я все-таки думаю, если непрограммно, ручками, по нажатию кнопок-ссылок юзером каждый прожектор будет слать сообщения - то проблем может и не возникнет и без какой-либо идентификации. Невозможно представить, чтобы юзер метался от прожектора к прожектору и тыкал кнопки :). Ну то есть пока он доберется до кнопки в другом прожекторе, запускашка сто раз успеет прочитать последнее сообщение и двести раз отправить ответ на него. Но вот то что ответ это будет прочитан именно отправителем последнего сообщения - опять же не факт. Если программно слать, в цикле там или еще как - то вообще.. фиг его знает, хотя зачем пулять сообщения очередями в рамках презентации? Верно? Ну, вобщем небезнадежно .
Вкратце примерно так. Какие будут варианты решения проблемы "нескольких прожекторов"? Очень интересно услышать ваши соображения. Не стесняйтесь :). Может быть эта проблема не особо актуальна? Хотя... проблема есть, полюбому ее как-то придется сгладить.

Ну и остается вариант с МессаджБоксом-таки. Или с его разновидностью (запуск error.exe). Это уже не имеет к локалконнекшн отношения, ибо "обратки" в этом случае нет и все будет работать примерно так, как сейчас, если, конечно, проработать вопрос с правильным показом этого самого МесаджБокса.. Если не гуд только то что не поверх прожетора он вываливается - решить можно.

2. Проблема с ноутом scarbo. Обобщая - проблема переносимости. Тут треба подсобрать инфу. Но сразу скажу, что я программировал только под винду до XP Pro SP3 включительно. Оговорюсь, что в коде запускашки нет ничего "такого". Но тем не менее. Кстати, а не виста-ли у вас на ноуте, scarbo?

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

Mnilionic 22.09.2008 01:47

если запускаются два прожектора использующие одину общую запускашку, то никаких броблем нету.
Проблема появляется, если вдруг кое-кто свистнет и пользователь запустит одновременно два (более?) !разных! прожектора, использующих разные запускашки и запускаемые файлы.
То есть если я смотрю презентация с диска, то в фоне висит его запускашка.
И при попытке запустить фаил с другой презентации, которая у меня на рабочем столе поиск запускаемого файла будет осуществлён относительно дисковой запускашки (как я понял они так устроены)

три условия:
одновременный просмотр двух !разных! прожекторов из !разных! директорий
они оба должны использовать мега-метод "Запускашка"
пути к файлам должны быть относительные

первые два могут слачатся только у любопытных (причём у разработчиков) :)


вариант с персональной запускашкой и ini файлом (например если вписывать туду идентификатор соединения)
Его флеш читает, создаёт соединение, запускается запускашка, читает фаил, слушает нужное соединение.
два камня:
1. все будут идентификатор оставлять дефолтный :)
2. нужно написать удобный интерфейс для юзания из флеша

вариант, когда под !каждый запрос! запускается своя запускашка и после запуска нужного файла запускашка отрубается.
один камень: удобный интерфес во флеше

А месаджБокса... повер флеша его, раз говорите не вопрос, и готово :)

Wolsh 22.09.2008 02:10

О, много)))
Ну я, признаться, не понимаю, что за несколько прожекторов, зачем... Если такая ситуация и будет возникать в каком-то проекте, это всеже очень единичные случаи. Я даже представить сходу не могу такой проект, заливающий таскбар кнопками. По-моему это неактуально. Но если ктото поделится идеей такого проекта из двух и более прожекторов, одновременно запускающих файлы, прочту с большим интересом))))
По поводу бокса. Я бы сам пожалуй лучше во флэше ошибку обрабатывал, но зная уровень программирования дизайнеров (а они чаще всего и делают презентации, все на таймлайне или вообще скринами) немного за них побаиваюсь. Кроме того, их еще надо суметь убедить, что ошибка возможна))))))) Делать "лишние", на всякий случай, окна - в реальности мало кто будет. Так что в идеале было бы здорово сделать эту фичу опциональной. В идеале, вообще говоря, хорошо бы настройки всякие иметь, коль уж пошла такая послабуха, что можно всякие параметры передавать, а не тупо запускать ехе. Что бы хотелось навскидку? Задавать текст сообщения об ошибке - это позволит, в частности, использовать разные языки и разные литературные стили по желанию автора презентации (не смейтесь, не только же годовые отчеты нефтекомбината бывают, ктото и на албанском загнуть захочет). Потом - выбор способа обработки ошибки - во флэше или боксом. Чтобы бедный дизайнер мог поставить параметр в "auto" и не греть голову, а лучше чтоб вообще ему ничего не ставить, и по-умолчанию открывать бокс, но дать желающим такую настройку, чтоб бокс не открывать, а получать в прожектор сообщение об ошибке и обрабатывать его по своему усмотрению (очень симпатичный синтаксис ты привел!)) Заголовок окна бокса, наверно, трудно сделать настраиваемым? Если трудно, пусть будет просто всем понятный Error)))
Насчет овчинки не соглашусь. Во флэше можно сделать сообщение "в стиль", не нарушая видеоряда презентации прыгающими окнами и чужеродным вин-интерфейсом. Человек нажимает красивую кнопочку в презентации, и - оппа - получает такое же красивое предложение листать потихоньку дальше))) а не удар молотком по пальцам.
Путь к ненайденному файлу - да, хорошо бы конечно полный, если это возможно.
Собственно, никогда не видел в подобных боксах относительных путей))
Спасибо за заботу о нас, медиасиротах)))

alexcon314 22.09.2008 02:32

Ок. Поработаю. Wolsh, Mnilionic - спасибо за отклик.
Предлагаю двигаться от простого - пусть будет все-таки вариант с одним прожектором, множественность пока оставим в стороне. Честно, очень не хочется огород городить))). Лучше потратиться на предложенную Wolsh'ем опциональность. Ну если придется - что ж.. Mnilionic разумно указал на возможные камни.
Короче, загрузили вы меня достаточно )). Посмотрим, что выйдет.

UDP: вышло вот что.

scarbo 22.09.2008 04:14

как раз на ноуте у меня XP,а вот на компе Vista


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

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