我定义一个资源文件 .rc
MySwf RC_DATA "c:\123.swf" 再用brcc32编译生成.res文件
但是怎么样才能在FORM窗体下用sockwaveflash控件播放这个文件呢
要写什么代码

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var res:tresourcestream;
        strFileName:String;
    begin
      //用土办法,直接将资源另存为本地文件,然后播放它
      res:=tresourcestream.create(hinstance,'MySwf','RC_DATA');
      strFileName:=ExtractFilePath(Application.ExeName) + 'MySwf.swf';
      res.SaveToFile(strFileName);
      res.Free;
      //
      //播放,(此前要安装shockwave的ocx播放器组件),然后将播放控件加入窗口中
      shockwaveFlash1.LoadMovie(0,strFileName);
      shockwaveFlash1.play;
    end;
      

  2.   

    unit uFlashRes;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, Menus;type
      TFlashResFrm = class(TForm)
        ShockwaveFlash1: TShockwaveFlash;
        PlayResFileBtn: TButton;
        RightPM: TPopupMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        procedure PlayResFileBtnClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure N1Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        { 自定义鼠标右键弹出消息 }
        procedure MouseRightMessage(var Msg: TMsg; var Handled: Boolean);
        { 防止对话框ALT+F4关闭 }
        procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
      public
        { Public declarations }
      end;var
      FlashResFrm: TFlashResFrm;implementation{$R *.dfm}
    {$R SwfFile.RES} //引用资源文件procedure TFlashResFrm.MouseRightMessage(var Msg: TMsg;
      var Handled: Boolean);
    begin
      if (Msg.message = WM_RBUTTONDOWN) and (Msg.hwnd = ShockwaveFlash1.Handle) then
      begin
        Handled := True;
        RightPM.Popup(Mouse.CursorPos.X,Mouse.CursorPos.y);
      end;
    end;procedure FlashResToFile(const ResName, ResType, FileName: string);
    var
      FlashRes: TResourceStream;
    begin
      FlashRes := TResourceStream.Create(HInstance, ResName, PChar(ResType));
      try
        FlashRes.SaveToFile(FileName); //将资源保存为文件,即还原文件
      finally
        FlashRes.Free;
      end;
    end;procedure TFlashResFrm.PlayResFileBtnClick(Sender: TObject);
    begin
      if FileExists(ExtractFilePath(ParamStr(0)) + 'Thanks.SWF') then
        DeleteFile(ExtractFilePath(ParamStr(0)) + 'Thanks.SWF');
        FlashResToFile('FLASH', 'SwfFile1', 'Thanks.SWF');
        ShockwaveFlash1.Movie := ExtractFilePath(ParamStr(0)) + 'Thanks.SWF';
        ShockwaveFlash1.Play;
    end;procedure TFlashResFrm.FormCreate(Sender: TObject);
    begin
      Application.OnMessage:= MouseRightMessage;
      SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    end;procedure TFlashResFrm.N1Click(Sender: TObject);
    begin
      Application.MessageBox('Flash资源文件的应用', '信息提示', MB_OK)
    end;procedure TFlashResFrm.N2Click(Sender: TObject);
    begin
      if Application.MessageBox('确定要退出当前程序吗?','信息提示',MB_OKCANCEL+MB_ICONQUESTION) = IDOK then
        begin
          Close;
        end
      else
        Exit;
    end;procedure TFlashResFrm.FormDestroy(Sender: TObject);
    begin
      ShockwaveFlash1.FreeOnRelease;
      FlashResFrm := nil;
    end;procedure TFlashResFrm.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action := caFree;
    end;procedure TFlashResFrm.WMSysCommand(var Msg: TWMSysCommand);
    begin
      if Msg.CmdType <> SC_CLOSE then
        inherited
    end;end.
      

  3.   

    SwfFile.rc文件内容如下.
    Flash SwfFile1 Thanks.SWF
    批处理文件
    BRCC32 SwfFile.rc