小弟最近做一个语音聊天室的窗体框架,其中用了RZpagecontrol,和webborwers实现了动态添加的多标签
webborwers中就是网页,网页在服务器挂好了,网页中有ocx控件主要实现语音、视频等,现在遇到问题就是我点进一个聊天室房间,声音视频都没问题,关闭RZpagecontrol的tabsheet标签页,该聊天室内语音已然活动,我还是能听到聊天室里面的人聊天和唱歌,已经困扰我一个星期了,感觉是因为聊天室网页ocx控件的问题,关闭tabsheet释放webborwers后 聊天室网页控件已然运行 这个怎么办啊,请高人指点~!

解决方案 »

  1.   

    关闭前,先自动替webbrowser加载一个空白页面
      

  2.   


    理论上这样是可以的,在关闭RZpagecontrol的事件里面写WB[i].Navigate('about:blank');
      

  3.   

    private
      TS: TRzTabSheet;
      WB:array[0..10]of TWebbrowser;
    主窗体代码如下
    procedure TFrmMain.FormCreate(Sender: TObject);
    begin;   TS:=TRzTabSheet.Create(RzPageControl1);
       TS.PageControl:=RzPageControl1;
       RzPageControl1.ActivePageIndex:=i;
       WB[i]:=TWebbrowser.Create(TS);
       Twincontrol(WB[i]).Parent:=FrmMain.RzPageControl1.Pages[i];
       Twincontrol(WB[i]).Align:=alclient;
       WB[i].Silent:=true;
       WB[i].Navigate('http://www.netliao.com');
       WB[i].OnDocumentComplete :=WebBrowserDocumentComplete;
       WB[i].OnNewWindow2:= WebBrowserNewWindow2;end;
    procedure TFrmMain.WebBrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);begin
    {========多页面部分=======}
       i:=i+1;   TS:=TRzTabSheet.Create(RzPageControl1);
       TS.PageControl := RzPageControl1;
       WB[i]:=TWebBrowser.Create(TS);
       WB[i].Align := alClient;
       WB[i].Silent:=true;
       WB[i].OnDocumentComplete :=WebBrowserDocumentComplete;
       WB[i].OnNewWindow2:= WebBrowserNewWindow2;
       TS.InsertControl(WB[i]);
       RzPageControl1.ActivePage := TS;
       ppDisp := WB[i].Application;end;
       
    关闭代码
    procedure TFrmMain.RzPageControl1Close(Sender: TObject;
      var AllowClose: Boolean);
    begin  WB[i].Navigate('about:blank');
      AllowClose := RzPageControl1.ActivePage.Caption <> '网聊娱乐大厅';end;
      

  4.   

    关闭改进了一下
    procedure TFrmMain.RzPageControl1Close(Sender: TObject;
      var AllowClose: Boolean);
      var
      lsIndex:Integer;
    begin
          lsIndex:=RzPageControl1.ActivePageIndex;
          WB[lsIndex].Navigate('about:blank');
          (RzPageControl1.ActivePage.Controls[0] as TWebBrowser).Free;      RzPageControl1.ActivePage.Free;
          if lsIndex>RzPageControl1.PageCount-1 then
          lsIndex:=RzPageControl1.PageCount-1;
          RzPageControl1.ActivePageIndex:=lsIndex;
      AllowClose := RzPageControl1.ActivePage.Caption <> '网聊娱乐大厅';end;
    还是不行 依然有声音,winfrom下没问题,delphi就不行,弹窗没问题,多标签就不行 我就郁闷了
      

  5.   

    首先webbrowser都是模拟网页方式操作的,如果用IE浏览器打开那个网址,关闭后依然有声音出现,那应当是它网页的问题;如果浏览器的标签页关闭后,就没有了声音那就是你程序的问题;区分这两类情况后再做处理
      

  6.   

    我刚学delphi一个星期 本以为只是给网页搭个框架 看起来像客户端而已 为什么关闭pagecontrol却这么麻烦呢
      

  7.   

    你的语音聊天是不是一个OCX?
      

  8.   

    实在不行 这样子通过JS 指向空白页  (wb1.Document as IHTMLDocument2).parentWindow.execScript(
       'parent.window.open("about:blank", "_self");'
       , 'JavaScript');
    在web1.onNavigateComplete2 事件完成后释放 TSHEET 和 web1
      

  9.   

    说到底,不就是webbroswer没释放么
      

  10.   

    //使用你提供的url需要做什么设置才能出声音?//--------------------------------------
    //TWebBrowser 加载了百度音乐, 可以正常关闭
    'http://play.baidu.com/?__m=mboxCtrl.playSong&__a=33847306&__o=/song/33847306_playBtn#loaded'//--------------------------------------
    //关闭标签的代码
    procedure TForm11.btnCloseTabClick(Sender: TObject);
    var
      i : integer;
    begin
      for i := 0 to pgc1.ActivePage.ComponentCount - 1 do
      begin
        if pgc1.ActivePage.Components[i] is TWebBrowser then
        begin
          TWebBrowser(pgc1.ActivePage.Components[i]).Navigate('about:blank');
          TWebBrowser(pgc1.ActivePage.Components[i]).Free;
        end;
      end;
      pgc1.ActivePage.free;
    end;
      

  11.   

    TWebBrowser(pgc1.ActivePage.Components[i]).Navigate('about:blank');       
    TWebBrowser(pgc1.ActivePage.Components[i]).Free;
    这样子写 有最大问题就是网页并没有加载完成 就执行了下面的操作TWebBrowser(pgc1.ActivePage.Components[i]).Navigate('about:blank'); 后需要在Complete事件里 处理释放。不然的话  并没有指向空白页就会释放。就释放不掉了。可能还会出问题
      

  12.   

    在Complete事件里可以写中断方法吗?
      

  13.   

    拆为两个动作 ,关闭页面前  一个按钮为停止   一个按钮为关闭  停止为TWebBrowser(pgc1.ActivePage.Components[i]).Navigate('about:blank'); complete 改变 ACTION相关变量,使关闭可点关闭为真正释放
      

  14.   

    類似RZPAGECONTRONL這個問題,經過測試成功后發現並非如上問題。