小弟最近做一个语音聊天室的窗体框架,其中用了RZpagecontrol,和webborwers实现了动态添加的多标签
webborwers中就是网页,网页在服务器挂好了,网页中有ocx控件主要实现语音、视频等,现在遇到问题就是我点进一个聊天室房间,声音视频都没问题,关闭RZpagecontrol的tabsheet标签页,该聊天室内语音已然活动,我还是能听到聊天室里面的人聊天和唱歌,已经困扰我一个星期了,感觉是因为聊天室网页ocx控件的问题,关闭tabsheet释放webborwers后 聊天室网页控件已然运行 这个怎么办啊,请高人指点~!
webborwers中就是网页,网页在服务器挂好了,网页中有ocx控件主要实现语音、视频等,现在遇到问题就是我点进一个聊天室房间,声音视频都没问题,关闭RZpagecontrol的tabsheet标签页,该聊天室内语音已然活动,我还是能听到聊天室里面的人聊天和唱歌,已经困扰我一个星期了,感觉是因为聊天室网页ocx控件的问题,关闭tabsheet释放webborwers后 聊天室网页控件已然运行 这个怎么办啊,请高人指点~!
解决方案 »
- 请问在DELPHI中如何知道哪些数据被修改过?并且只保存当前被修改过的记录?
- 今天去一家公司面试,老板要我先学好dephi在去找他谈!
- 如何判断一个字符组Tstrings是否包含某个字符
- 如何做一个后台运行的浏览器,让它模拟鼠标方式点击指定坐标的链接
- 求sql语句!
- 怎么判断clientdataset.delta的内容是空的
- 都来讨论:是什么导致delphi可执行程序速度慢,是数据表太多,还是Form太多,或者其他的原因。
- 急急急!!!关于SQL SERVER问题???
- 解答: Indy 是如何实现 服务器端发送数据,客户端接收数据的~!
- sos:sql server 7.0 image 数据类型的存入,读出如何完成???
- MSHTML 的框架问题
- webbrowser 問題
理论上这样是可以的,在关闭RZpagecontrol的事件里面写WB[i].Navigate('about:blank');
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;
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就不行,弹窗没问题,多标签就不行 我就郁闷了
'parent.window.open("about:blank", "_self");'
, 'JavaScript');
在web1.onNavigateComplete2 事件完成后释放 TSHEET 和 web1
//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;
TWebBrowser(pgc1.ActivePage.Components[i]).Free;
这样子写 有最大问题就是网页并没有加载完成 就执行了下面的操作TWebBrowser(pgc1.ActivePage.Components[i]).Navigate('about:blank'); 后需要在Complete事件里 处理释放。不然的话 并没有指向空白页就会释放。就释放不掉了。可能还会出问题