Search This Blog

gravatar

Play Flash File in Delphi

To make use of SWF files in your Delphi application you should have the swf plugin installed then follow these steps:

In the Delphi IDE
- click on "Component", "Import ActiveX Control"
- chose "Shockwave Flash" and click on "install".

Now you have a TShockwaveFlash component in your IDE on the ActiveX tabsheet. Place the TShockwaveFlash Component onto your form, resize it as needed but for now do not assign a movie to it.

You will need to register the ocx file if it is not installed on the target computer. So you should have a resource file with
- the swflash.ocx and your Flash ( *.swf) file.
- Copy swflash.ocx (from i.e. windows\system32\macromed\flash) and your custom swf file to your project path.
- Create a textfile with a code like this:

SHOCKWAVEFILE RCDATA yourfile.swf
SHOCKWAVEOCX RCDATA swflash.ocx

(Where yourfile.swf is your swf-file)

- Save this file as flash.rc
- Goto Commandline, change to your project dir and enter the line:
"Brcc32 -r flash.rc"
- Now you have your new resource as flash.res file


uses ShockwaveFlashObjects_TLB; // will be used automatically
{...}

implementation

{$R *.DFM}
{$R flash.res} // your new created resource
{...}

procedure TForm1.FormCreate(Sender: TObject);
var
SystemDir : array[0..MAX_PATH] of Char;
SWFDir, AppDir: String;
Fres: TResourceStream;
Ffile: TFileStream;
begin
GetSystemDirectory(@SystemDir,MAX_PATH);
SWFDir := SystemDir+'\macromed\flash\';
GetDir(0,AppDir); // Get current directory

//check whether the sw-flash ocx is already installed
if fileexists(SWFDir+'swflash.ocx')=false then begin
//create directories if needed and extract file from resource.
{$i-} //compiler directive to suppress i/o error messages
MkDir(SystemDir+'\macromed');
MKDir(SystemDir+'\macromed\flash');
{$i+}
Fres := TResourceStream.Create(0,'SHOCKWAVEOCX',RT_RCDATA);
Ffile := TFileStream.Create(SWFDir+'swflash.ocx',fmCreate);
Ffile.CopyFrom(Fres,Fres.Size);
Fres.Free;
Ffile.Free;

//register ocx (simple but useful)
winexec(PChar('regsvr32 /s '+SWFDir+'swflash.ocx'),SW_HIDE);
end;
// extract ShockwaveFile from resource to application directory
Fres := TResourceStream.Create(0,'SHOCKWAVEFILE',RT_RCDATA);
Ffile := TFileStream.Create('flashmovie.swf',fmCreate);
Ffile.CopyFrom(Fres,Fres.Size);
Fres.Free;
Ffile.Free;

//Assign the extracted swf file to your TShockwaveFlash object
FlashMovie.Movie := AppDir+'\flashmovie.swf';
end;


If you dont want to have the popup menu displayed on right click you may use this step.

Place an "Application Events" component onto the form.
On the "OnMessage" Event place the following code:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_RBUTTONDOWN then Handled := True;
end;

If by chance you wanted to place your own popupmenu, then do the following:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_RBUTTONDOWN then
begin
popupmenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Handled := True;
end;
end;

Hope that helps someone that wanted to know how to do this