Files
jpexs-decompiler/libsrc/Swf2Exe/uMain.pas
2014-05-10 20:50:57 +02:00

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.