Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 01:38   #1
pavlodar
 
Регистрация: 11.04.2011
Сообщений: 4
По умолчанию swf2exe без сторонних плееров

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

flash1.movie:='........swf';

ниже один из вариантов склеивания, который я использую
Цитата:
function Swf2Exe(S, D, F: string): string;
//S = Source file (swf)
//D = Destionation file (exe)
//F = Flash Player
var
SourceStream, DestinyStream, LinkStream: TFileStream;
flag: Cardinal;
SwfFileSize: Integer;
begin
Result := 'something error';
DestinyStream := TFileStream.Create(D, fmCreate);
try
LinkStream := TFileStream.Create(F, fmOpenRead or fmShareExclusive);
try
DestinyStream.CopyFrom(LinkStream, 0);
finally
LinkStream.Free;
end;
SourceStream := TFileStream.Create(S, fmOpenRead or fmShareExclusive);
try
DestinyStream.CopyFrom(SourceStream , 0);
flag := $FA123456;
DestinyStream.WriteBuffer(flag, SizeOf(Integer));
SwfFileSize := SourceStream.Size;
DestinyStream.WriteBuffer(SwfFileSi ze, SizeOf(Integer));
Result := '';
finally
SourceStream.Free;
end;
finally
DestinyStream.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Swf2Exe('flash.swf', 'finish.exe',
'player.exe');
Если player.exe будет стороних производителей (adobe), то то все работает сразу, ставлю свою программу флещ плеера - не работает.

Ну и сразу еще один вопрос Как в мем флеш плеере (маленькая программа с компонентом TShockwaveFlash) отключить правую кнопу?
Буду благодарен за любую подсказку.
pavlodar вне форума Ответить с цитированием
Старый 11.04.2011, 16:44   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Попробуйте вот это я не знаю сработает или нет но все равно попробуйте
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
if paramstr(1)<>'' then begin
{Сюда пропишите загрузку swf файла и его проигрывание}
end;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 11.04.2011, 20:49   #3
pavlodar
 
Регистрация: 11.04.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
if paramstr(1)<>'' then begin
{Сюда пропишите загрузку swf файла и его проигрывание}
end;
end;
это не помогло...
но я сегодня весь день копал интернет, и кое что нарыл.
Код:
begin
 RStream := TFileStream.Create('my_program.exe', fmOpenRead or fmShareDenyWrite);

RStream.Seek(-8, soFromEnd);
RStream.Read(Flag, 4);
RStream.Read(SFileSize, 4);
if Flag = $FA123456 then
  begin
  RStream.Seek(-SFileSize - 8, soFromEnd);
  //WStream := TFileStream.Create('4.swf', fmCreate);
  //WStream.CopyFrom(RStream, SFileSize);
 rStream.Free;
// wStream.Free;
   end;
это код в плеере. Если убрать закоментированные места, то все начинает работать, но не совсем как надо. Создается файл 4.swf и с помощью команды flash1.movie:='_полный путь_\4.swf'; все начинает работать. Конечно, можно сохранить этот файл куда нибудь подальше и удалить при закрытии программы, но что это будет за плеер? Думаю надо перевести содержимое RStream в буфер и от туда проигрывать. Правильное ли это решение? Как его лучше реализовать?
pavlodar вне форума Ответить с цитированием
Старый 16.04.2011, 21:23   #4
pavlodar
 
Регистрация: 11.04.2011
Сообщений: 4
По умолчанию

долго мучался, так ни чего и не получилось, пока не скачал компонент TsfFlashPlayer. В его настройках есть очень много, в том числе и чтение с потока. И вот все заработало, но... кроме маленькой детали, которую удавалась победить в стандартном Флеш плеере (в Д7) - фокус не передается на элементы плеера. Этот компонент рассчитан на работу с FLV файлами, хотя поддержка SWF тоже имеется. Но на моей форме несколько кнопок, и фокус с них и не думает уходить. А в моем SWF файле нужно вводить данные. Тех характеристики компонента нету, потому как он пиратский, все варианты в нем перепробывал.
Как програмно передать фокус определенному компоненту (flash)?
pavlodar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исходный код сторонних разработчиков sawer6 Свободное общение 2 08.01.2011 17:01
Создание игр для DVD плееров qwert2008 Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 19.04.2010 14:06
Отследить запуск сторонних программ... prizrak1390 Общие вопросы Delphi 5 16.03.2010 00:55
Определение типа курсора в сторонних приложениях. lazutov Win Api 1 11.09.2008 20:59
Мало мне плееров которые есть, вот свой решил замутить. Magog Qt и кроссплатформенное программирование С/С++ 0 16.03.2008 18:48