[高分]如何在Delphi里面显示透明Flash???? 就像很多的网页上用的透明FLASH 非常漂亮的那种比如游动的金鱼啊什么的 怎么在Delphi窗体上显示呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也许使用透明背景的gif图片可是实现一种透明背景的动画,至于flash就不太清楚了 是由FLASH决定的。而不是在DELPHI中实现。 应该不好做,delphi不是做网页的工具呀。你的意思是不是flash在底层动,flash的上层还可以放文字,控件什么的? 用Flash+Dreamweaver做好网页,然后用WebBrowser调用在窗体上显示。 FLASH做好,可以顯示FLASH的組件可以滿足條件,或者窗體透明,然後放FLASH的GIF文件. 举个例子: QQ的魔法表情....完全用程序实现的这个东西似乎Flash那个控件本身的缺陷,我感觉实现比较困难的不过国外有人弄出来了,有一个TFlashPlayerControl控件,可以实现,不过源代码卖499$!!!~~~ QQ的魔法表情 就是用Flash做的 QQ下面有一个播放器 直接将程序参数设置成swf文件可以播放我做过这样的程序,只能告诉你原理1、捕获Flash的WM_PAINT消息2、获得Flash的画面,通过背景色处理成不规则区域并将Flash窗体设置为该区域参考API函数:CombineRgn()、ExtCreateRegion()、SetWindowRgn()等 单元文件:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;type TForm1 = class(TForm) ShockwaveFlash1: TShockwaveFlash; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } Buffer : TBitmap; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin Buffer := TBitmap.Create; Buffer.Width := ShockwaveFlash1.Width; Buffer.Height := ShockwaveFlash1.Height; ShockwaveFlash1.Movie :='D:\temp\flash.swf'; ShockwaveFlash1.Play;end;procedure TForm1.Timer1Timer(Sender: TObject);var ARect : TRect; ACanvas : TCanvas;begin if ShockwaveFlash1.Playing then begin ACanvas := TCanvas.Create; ACanvas.Handle := GetDC(Form1.Handle); ARect.Left := ShockwaveFlash1.Left - ShockwaveFlash1.Width; ARect.Top := ShockwaveFlash1.Top; ARect.Right := ARect.Left + ShockwaveFlash1.Width; ARect.Bottom := ARect.Top + ShockwaveFlash1.Height; Buffer.Transparent := False; ShockwaveFlash1.PaintTo(Buffer.Canvas,0,0); Buffer.PixelFormat := pf24bit; Buffer.Canvas.Brush.Style := bsClear; Buffer.Transparent := True; ACanvas.CopyRect(Rect(ShockwaveFlash1.Left,ShockwaveFlash1.Top,ShockwaveFlash1.Left+ShockwaveFlash1.Width,ShockwaveFlash1.Top+ShockwaveFlash1.Height),ACanvas,ARect); ACanvas.Draw(ShockwaveFlash1.Left,ShockwaveFlash1.Top,Buffer); ReleaseDC(Form1.Handle,ACanvas.Handle); ACanvas.Free; end;end;end.窗体文件:object Form1: TForm1 Left = 192 Top = 114 Width = 870 Height = 640 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate DesignSize = ( 862 606) PixelsPerInch = 96 TextHeight = 13 object ShockwaveFlash1: TShockwaveFlash Left = 537 Top = 360 Width = 81 Height = 81 Anchors = [akRight, akBottom] TabOrder = 0 Visible = False ControlData = { 67556655100700005F0800005F08000008000200000000000800000000000800 0000000008000E000000570069006E0064006F00770000000B00FFFF0B00FFFF 08000A0000004800690067006800000008000200000000000B00FFFF08000200 0000000008000E00000061006C00770061007900730000000800100000005300 68006F00770041006C006C0000000B0000000B00000008000200000000000800 02000000000008000200000000000D0000000000000000000000000000000000 0B0001000B000000080000000000030000000000} end object Timer1: TTimer Interval = 100 OnTimer = Timer1Timer Left = 40 Top = 520 endend窗体上有两个控件,一个Timer,另一个是ShockwaveFlash1,注意设置ShockwaveFlash1的Visible的属性为False 5多嘴一句。全都冒用的,要从TOleControl改。网上美金$299有售。 to hqhhh(枫叶) 你的程序有些问题,几个rect作标似乎有问题我弄好之后,运行出来闪烁很厉害啊,难不成还得用多线程双缓冲可能是可以的,我再试试 在canvas.draw 前加一句话就不闪烁了ACanvas.FillRect(Rect(ShockwaveFlash1.Left,ShockwaveFlash1.Top,ShockwaveFlash1.Left+ShockwaveFlash1.Width,ShockwaveFlash1.Top+ShockwaveFlash1.Height)); 回复人: zswang(伴水清清)(专家门诊清洁工) ( ) 信誉:175 2006-1-9 21:26:51 得分: 0 QQ的魔法表情 就是用Flash做的 QQ下面有一个播放器 直接将程序参数设置成swf文件可以播放我做过这样的程序,只能告诉你原理1、捕获Flash的WM_PAINT消息2、获得Flash的画面,通过背景色处理成不规则区域并将Flash窗体设置为该区域参考API函数:CombineRgn()、ExtCreateRegion()、SetWindowRgn()等 =============================================请问该如何获得flash画面呢? 接口声明下一行的GUID有什么用? 敬请前辈介绍一下学习的步骤 控制listview!! 在三层架构中,若是客户端数目达到1500个应该使用哪种方案? DBGrid多行选择的问题! ini文件 一个问题,望大家支持! 菜鸟问题,new(新建)里有一个frame选项,这个窗体有什么作用啊?怎么用呢? 高手指教,TTable与TQuery用哪个好些?如何用? 这样的SQL语句为什么总是会出错呢? 本人目前接到一个防伪项目,希望做过的兄弟给点意见. 怎么把IE嵌入到应用程序中呀?
2、获得Flash的画面,通过背景色处理成不规则区域并将Flash窗体设置为该区域参考API函数:CombineRgn()、ExtCreateRegion()、SetWindowRgn()等
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;type
TForm1 = class(TForm)
ShockwaveFlash1: TShockwaveFlash;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
Buffer : TBitmap; public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Buffer := TBitmap.Create;
Buffer.Width := ShockwaveFlash1.Width;
Buffer.Height := ShockwaveFlash1.Height; ShockwaveFlash1.Movie :='D:\temp\flash.swf';
ShockwaveFlash1.Play;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
ARect : TRect;
ACanvas : TCanvas;
begin
if ShockwaveFlash1.Playing then
begin
ACanvas := TCanvas.Create;
ACanvas.Handle := GetDC(Form1.Handle); ARect.Left := ShockwaveFlash1.Left - ShockwaveFlash1.Width;
ARect.Top := ShockwaveFlash1.Top;
ARect.Right := ARect.Left + ShockwaveFlash1.Width;
ARect.Bottom := ARect.Top + ShockwaveFlash1.Height; Buffer.Transparent := False;
ShockwaveFlash1.PaintTo(Buffer.Canvas,0,0);
Buffer.PixelFormat := pf24bit;
Buffer.Canvas.Brush.Style := bsClear;
Buffer.Transparent := True; ACanvas.CopyRect(Rect(ShockwaveFlash1.Left,ShockwaveFlash1.Top,ShockwaveFlash1.Left+ShockwaveFlash1.Width,ShockwaveFlash1.Top+ShockwaveFlash1.Height),ACanvas,ARect);
ACanvas.Draw(ShockwaveFlash1.Left,ShockwaveFlash1.Top,Buffer);
ReleaseDC(Form1.Handle,ACanvas.Handle);
ACanvas.Free;
end;
end;end.窗体文件:
object Form1: TForm1
Left = 192
Top = 114
Width = 870
Height = 640
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
DesignSize = (
862
606)
PixelsPerInch = 96
TextHeight = 13
object ShockwaveFlash1: TShockwaveFlash
Left = 537
Top = 360
Width = 81
Height = 81
Anchors = [akRight, akBottom]
TabOrder = 0
Visible = False
ControlData = {
67556655100700005F0800005F08000008000200000000000800000000000800
0000000008000E000000570069006E0064006F00770000000B00FFFF0B00FFFF
08000A0000004800690067006800000008000200000000000B00FFFF08000200
0000000008000E00000061006C00770061007900730000000800100000005300
68006F00770041006C006C0000000B0000000B00000008000200000000000800
02000000000008000200000000000D0000000000000000000000000000000000
0B0001000B000000080000000000030000000000}
end
object Timer1: TTimer
Interval = 100
OnTimer = Timer1Timer
Left = 40
Top = 520
end
end窗体上有两个控件,
一个Timer,另一个是ShockwaveFlash1,注意设置ShockwaveFlash1的Visible的属性为False
QQ的魔法表情 就是用Flash做的 QQ下面有一个播放器 直接将程序参数设置成swf文件可以播放我做过这样的程序,只能告诉你原理1、捕获Flash的WM_PAINT消息
2、获得Flash的画面,通过背景色处理成不规则区域并将Flash窗体设置为该区域参考API函数:CombineRgn()、ExtCreateRegion()、SetWindowRgn()等
=============================================请问该如何获得flash画面呢?