Files
jpexs-decompiler/trunk/libsrc/Swf2Exe/uMain.pas

95 lines
2.1 KiB
ObjectPascal

unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ExtCtrls;
type
TfrmMain = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMySWF = class(TShockwaveFlash)
public
Procedure CreateWnd; override;
end;
var
frmMain: TfrmMain;
flaPreview: TMySWF;
implementation
{$R *.dfm}
Procedure TMySWF.CreateWnd;
begin
inherited;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
const
exeSize = 470016;
var
stream: TFileStream;
buffer: array of Byte;
tempFile: array[0..MAX_PATH - 1] of Char;
tempPath: array[0..MAX_PATH - 1] of Char;
flashVarData : TVarData;
width: Integer;
height: Integer;
scaleMode: Byte;
begin
flaPreview := TMySWF.Create(frmMain);
flaPreview.Parent := frmMain;
flaPreview.Anchors := [akLeft, akRight, akTop, akBottom];
flaPreview.Align := alClient;
GetTempPath(MAX_PATH, TempPath);
if GetTempFileName(TempPath, PAnsiChar('ffd'), 0, TempFile) = 0 then
raise Exception.Create(
'GetTempFileName API failed. ' + SysErrorMessage(GetLastError)
);
try
stream := TFileStream.Create(ParamStr(0), fmOpenRead);
stream.Seek(exeSize, soBeginning);
stream.Read(width, 4);
stream.Read(height, 4);
stream.Read(scaleMode, 1);
SetLength(buffer, stream.Size - exeSize);
try
stream.Read(buffer[0], Length(buffer));
finally
stream.Free;
end;
except
width := 12800;
height := 9600;
scaleMode := 3;
end;
ClientWidth := width div 20;
ClientHeight := height div 20;
stream := TFileStream.Create(tempFile, fmOpenWrite);
try
stream.Write(buffer[0], Length(buffer));
finally
stream.Free;
end;
flaPreview.Movie := tempFile;
flaPreview.ScaleMode := scaleMode;
end;
procedure TfrmMain.FormResize(Sender: TObject);
begin
flaPreview.CreateWnd;
end;
end.