网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> Delphi编程 >> 文章正文
  以流的方式播放FLASH            【字体:
以流的方式播放FLASH
作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-7    

 

{首发csdn,泰州银监分局 姚佩云 rm932@yahoo.com}

     以前想在程序中嵌入FLASH,flash文件不能以资源的方式嵌入到文件中,也就是flash要以单独的文件一起发布,有点不爽,也有方法通过管道技术实现内存流的方式播放,但随着flash的升级,这种方法也不行了。
正在装载数据……
搜索google,一些商业性的控件实现了以流的方式来播放,要钱的,下载DEMO,反汇编跟踪,功力有限,半途而废,再搜,哈哈找到TFlashPlayerControl源码,贴出其中关键的代码

procedure TFlashPlayerControl.LoadMovieFromStream(Layer:Integer;Src: TStream);
 var
   unComdivss: TStream;
   Mem, Mem2: TMemoryStream;
   SRCSize: longint;
   PersistStream: IPersistStreamInit;
   SAdapt: TStreamAdapter;
   ISize: int64;
   B: byte;
   ASign: array [0..2] of char;
   isComdivss: boolean;
   ZStream: TDeComdivssionStream;
   rc:TRect;
   hdcScreen,hdcMem:HDC;
begin
  rc := ClientRect;
  hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
  hdcMem:=CreateCompatibleDC(hdcScreen);
  {$IFDEF DEMO_VERSION}
    DrawText(hdcMem, PChar('DEMO VERSION'), -1, rc, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
  {$ENDIF}
  Src.Read(ASign, 3);
  isComdivss := ASign = 'CWS';
  if isComdivss then
    begin
      unComdivss := TMemoryStream.Create;
      ASign := 'FWS';
      unComdivss.Write(ASign, 3);
      unComdivss.CopyFrom(Src, 1);
      SRC.Read(SRCSize, 4);
      unComdivss.Write(SRCSize, 4);
      ZStream := TDeComdivssionStream.Create(Src);
      try
        unComdivss.CopyFrom(ZStream, SRCSize - 8);
      finally
        ZStream.free;
      end;
      unComdivss.Position := 0;
    end else
    begin
      Src.Position := Src.Position - 3;
      SRCSize := Src.Size - Src.Position;
      unComdivss := Src;
    end;

  EmbedMovie := false;
  FOleObject.QueryInterface(IPersistStreamInit, PersistStream);
  PersistStream.GetSizeMax(ISize);
  Mem := TMemoryStream.Create;
  Mem.SetSize(ISize);
  SAdapt := TStreamAdapter.Create(Mem);
  PersistStream.Save(SAdapt, true);
  SAdapt.Free;

 
  Mem.Position := 1;
  Mem2 := TMemoryStream.Create;
  B := $66;
  Mem2.Write(B, 1);
  Mem2.CopyFrom(Mem, 3);
  Mem2.Write(SRCSize, 4);
  Mem2.CopyFrom(unComdivss, SRCSize);
  Mem2.CopyFrom(Mem, Mem.Size - Mem.Position);

 
  Mem2.Position := 0;
  SAdapt := TStreamAdapter.Create(Mem2);
  PersistStream.Load(SAdapt);
  SAdapt.Free;

 
  Mem2.Free;
  Mem.Free;
  PersistStream := nil;
  if isComdivss then unComdivss.Free;
end;

 

看到 {$IFDEF DEMO_VERSION} 了吗?以后TFlashPlayerControl发布新版本就可以很轻松的破解了,哈哈




本文来源:http://blog.csdn.net/soweb/archive/2007/07/30/1716188.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     在delphi中使用xml文档有…
     初探delphi 7 中的插件编…
     delphi 2006(dexter) & …
     获得windows的版本信息。
     “序列号输入助手”源代…
     rs232串口通讯模块
     ado方式下判断数据表是否…
  • 进程防杀与屏蔽WIN 、alt+ta…

  • 为有源头活水来——C++输入输…

  • 声音的播放————problem

  • vb.net 封装 组件 成 com的方…

  • delphi VC 操作 outlook的方…

  • jsp用超级链接方式实现“目标…

  • 在Java中实现UDP协议编程的方…

  • JSP 调用类的方法

  • Java中对XML四种操作方式的使…

  • JForum论坛单点登录的几种实…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David