Home | Delphi SWF SDK | SlideShow Engine | Free source samples | Code library | Forum | Contact

Code library

Miscellanius SWF-files

Converting SWF to EXE

Actually, there is not conversion as such. The exe file (another name is Projector) consists of an executable player and SWF-movie. So "converting" is the creating of a single file from these two ones. It is possible to use Macromedia Player (SAFlashPlayer.exe) as an exe-part and it does not request Flash Player have been installed before.

function SWF2Exe(SourceName, DestName, PlayerName: string): boolean;
var
 RStream, WStream: TFileStream;
 flag, SwfFileSize: DWord;
begin
 result := false;
 WStream := TFileStream.Create(DestName, fmCreate);
 try
   RStream := TFileStream.Create(PlayerName, fmOpenRead or fmShareDenyWrite);
   try
     WStream.CopyFrom(RStream, RStream.Size);
   finally
     RStream.Free;
   end;

   RStream := TFileStream.Create(SourceName, fmOpenRead or fmShareDenyWrite);
   try
     WStream.CopyFrom(RStream, RStream.Size);
     flag := $FA123456;
     WStream.Write(flag, 4);
     SwfFileSize := RStream.Size;
     WStream.Write(SwfFileSize, 4);
     result := true;
   finally
     RStream.Free;
   end;
 finally
   WStream.Free;
 end;
end;

...
Procedure TMyForm.Button1Click(Sender: TObject);
begin
SWF2Exe('my.swf', 'my.exe', 'c:\Flash MX\Players\SAFlashPlayer.exe');
end;

Converting EXE to SWF

SWF can be extracted in case the exe-file is Macromedia Projector only.

function Exe2SWF(SourceName, DestName: string): boolean;
var
 RStream, WStream: TFileStream;
 flag, SwfFileSize: DWord;
begin

 Try
   RStream := TFileStream.Create(SourceName, fmOpenRead or fmShareDenyWrite);
   try
     RStream.Seek(8, soFromEnd);
     RStream.Read(flag, 4);
     if flag = $FA123456 then
       begin
         RStream.Read(SwfFileSize, 4);
         RStream.Seek(SwfFileSize + 8, soFromEnd);
         WStream := TFileStream.Create(DestName, fmCreate);
         try
           WStream.CopyFrom(RStream, SwfFileSize);
           Result := true;
         finally
           WStream.Free;
         end;
       end;
   finally
     RStream.Free;
   end;
 except
   result := false;
 end;
end;

...
Procedure TMyForm.Button1Click(Sender: TObject);
begin
Exe2SWF('my.exe', 'my.swf');
end;

to top

Copyright 2004-2008 FeatherySoft, Inc. All rights reserved
Delphi is a trademark of Borland Software Corporation
Macromedia and Shockwave Flash are trademarks of Macromedia, Inc