|
Вопрос # 855/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
Для проигрывания .swf-роликов в приложении я использую ActiveX библиотеку ShockwareFlash. Для этого необходимо указать полный путь к swf-файлу, а если убрать или удалить файл, то приложение соответсвенно ничего воспроизводить не будет. Возможно ли "прищепить" ролик к приложению в виде ресурса и проиграть независимо (к примеру как в exe-флешках flash-player (5-7))? Как вариант- через свойство moviedata. Заранее спасибо
 |
Вопрос задал: Phoenix (статус: Посетитель)
Вопрос отправлен: 16 августа 2007, 22:16
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Phoenix!
Всё можно, если осторожно:)
Можно добавить мувик в ресурс, а потом при воспроизведении распаковывать в временный каталог. Рядом с программой не стоит - пользователь может юмор не понять да и на новомодной висте такой код может страшно глючить. А зачем пользователю различны непонятки?
Итак, первым долгом нужно в ресурс добавить. Это просто.
Делаем текстовый файл и пишем в нём такое
MY_MOV ANYOL "movie.swf"
сохраним его как swf.rc.
Теперь его надо скомпилировать. Это наиболее просто сделать так.
Делаем ещё один текстовый документ, где пишем такое
BRCC32 swf.rc
и сохраним под именем compile.cmd
Теперь кликнув дважды по этому файлу(который ещё называют батник) увидите консольное окошко. Если всё хорошо, то в папке должен появиться файл swf.res
Дальше, если мувик поменялся, то перед компиляцией проекта нужно будет запустить этот батник, что бы он пересобрал файл ресурса
Теперь подключим ресурс к программе. возле строки {$R *.dfm}
напишем {$r swf.res}
Теперь осталось написать код распаковки
он выглядит где то так
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(hInstance, \'MY_MOV\', Pchar(\'ANYOL\'));
Res.SavetoFile(sGetTempPath+\'movie.swf\');
Res.Free;
end;
где sGetTempPath - функция поиска каталога temp
function sGetTempPath: string;
var
Buffer: array[0..1023] of Char;
begin
SetString(Result, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer));
end;
Ну и наверно после окончания работы программы не забывайте подчищать за собой
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 16 августа 2007, 23:03
Оценка за ответ: 5
Комментарий к оценке: Потрясающе, отличный способ! все в лучшем виде как всегда.
|
Ответ #2. Отвечает эксперт: min@y™
Есть способ проигрывать Flash без использования временных файлов. Вот что я нашёл:
Цитата:
TFlashPlayerControl - компонент для Delphi / Builder / VCL, расширяющий возможности Flash Player ActiveX. Компонент не использует свой движок для работы с Flash, но предоставляет обертку вокруг официального кода flash.ocx / swflash.ocx, что позволило расширить возможности стандартного Flash ActiveX. Что можно делать с помощью TFlashPlayerControl? * загружать флеш-ролики из любых источников напрямую (ресурсов, памяти). Без использования временных файлов! * создавать полупрозрачные flash-based формы. * проигрывать FLV непосредственно из любого TStream. * создавать приложения, способные работать даже когда Flash ActiveX не установлен в системе. Забудьте о всех проблемах, связанных с регистрацией Flash ActiveX. Забудьте о нехватке прав пользователя для регистрации Flash ActiveX, о временных файлах! * создавать код, совместимый со всеми версиями флеша (3, 4, 5, 6, 7, 8). Используя TFlashPlayerControl, вы можете загружать ролики прямо из ресурсов или памяти, и из любого другого источника! Никаких временных файлов! По умолчанию компонент использует уже установленный в системе flash.ocx/swflash.ocx. Но вы можете указать компоненту использовать код flash.ocx/swflash.ocx из любого другого источника. Например, вы можете поместить код flash.ocx/swflash.ocx в ресурсы приложения и при старте просто сказать TFlashPlayerControl, чтобы он использовал в своей работе именно этот код. Код будет загружен в память и будет использоваться при работе с флеш-роликами. Никакой регистрации Flash ActiveX! Никаких временных файлов! Теперь не осталось никаких ограничений для использования Flash ActiveX в приложениях! Одна из проблем при работе с Flash ActiveX - это проблема версий. Например, свойство Stacking существует в 5-ой версии флеша, но отсутствует в более поздних (6-ой и 7-ой). TFlashPlayerControl автоматически распознает, с какой версией Flash ведется работа, и позволяет создавать код, совместимый со всеми версиями флеша. Разные версии флеша - один и тот же код!
Скачать можно вот отсюда.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 августа 2007, 08:30
Оценка за ответ: 5
Комментарий к оценке: Спасибо и на этом! пригодится когда-нибудь (жалко не располагаю возможностью выкачивания такого объема, как-никак 11 мб(!), тем более share)
|
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:29: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|