5,928
社区成员




// OnFSCommand 事件中判断是否播放完毕
procedure TForm1.shckwvflsh1FSCommand(ASender: TObject; const command,
args: WideString);
begin
// 播放完毕后停止计时器且隐藏img1
if command = 'window' then
begin
tmr1.Enabled := False;
img1.Hide;
end;
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;
type
TForm1 = class(TForm)
img1: TImage;
shckwvflsh1: TShockwaveFlash;
tmr1: TTimer;
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
bmpBuf: TBitmap;
procedure TForm1.FormPaint(Sender: TObject);
var
bmpFormBg: TBitmap;
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg);
bmpFormBg.Free;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Repaint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置跟 shckwvflash 控件宽高和xy 一致
bmpBuf := TBitmap.Create;
bmpBuf.PixelFormat := pf24bit;
bmpBuf.Transparent := False;
bmpBuf.Width := shckwvflsh1.Width;
bmpBuf.Height := shckwvflsh1.Height;
img1.Width := shckwvflsh1.Width;
img1.Height := shckwvflsh1.Height;
img1.Top := shckwvflsh1.Top;
img1.Left := shckwvflsh1.Left;
img1.Transparent := True;
shckwvflsh1.Visible := False;
shckwvflsh1.Movie := ExtractFilePath(Application.ExeName) + '1.swf';
shckwvflsh1.BackgroundColor := 127; // 即可最大程度去掉毛边,0~255自己调整,但别为0
tmr1.Interval := 100;
tmr1.Enabled := True;
DoubleBuffered := True;
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
// 间隔100毫秒画到img1控件中
shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0);
img1.Picture.Bitmap.Assign(bmpBuf);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpBuf.Free;
end;
end.
var
// bmpFormBg: TBitmap; 去掉
bmpBuf: TBitmap;
procedure TForm1.FormPaint(Sender: TObject);
var
bmpFormBg: TBitmap; // 放这里
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('c:\123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg);
bmpFormBg.Free; // 释放
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpBuf.Free;
// bmpFormBg.Free; 去掉
end;
另外你怎么解决的?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;
type
TForm1 = class(TForm)
img1: TImage;
shckwvflsh1: TShockwaveFlash;
tmr1: TTimer;
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
bmpFormBg: TBitmap;
bmpBuf: TBitmap;
procedure TForm1.FormPaint(Sender: TObject);
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('c:\123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Repaint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
// 设置跟 shckwvflash 控件宽高和xy 一致
bmpBuf := TBitmap.Create;
bmpBuf.PixelFormat := pf24bit;
bmpBuf.Transparent := False;
bmpBuf.Width := shckwvflsh1.Width;
bmpBuf.Height := shckwvflsh1.Height;
img1.Width := shckwvflsh1.Width;
img1.Height := shckwvflsh1.Height;
img1.Top := shckwvflsh1.Top;
img1.Left := shckwvflsh1.Left;
img1.Transparent := True;
shckwvflsh1.Visible := False;
shckwvflsh1.Movie := 'c:\1.swf';
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
// flash动画隔秒绘制到透明的img1控件中
shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0);
bmpBuf.Canvas.Brush.Style := bsClear;
bmpBuf.Transparent := True;
img1.Picture.Bitmap.Assign(bmpBuf);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpBuf.Free;
bmpFormBg.Free;
end;
end.