webbrowser里显示的网页页面关闭后,webbrowser怎么再次调用啊!? ( 积分: 100 )

  • 主题发起人 主题发起人 geekqk
  • 开始时间 开始时间
G

geekqk

Unregistered / Unconfirmed
GUEST, unregistred user!
一些BS系统在登陆时输入用户名和密码后,就关闭登陆界面,重新弹一个新窗口显示主界面,如果我用一个webbrowser(叫wb1)显示登陆界面,然后设他的newwindows指向另一个webbrowser,那登陆程控后,wb1还存在吗?如果还存在他是个什么状态,怎么显示他啊!?
 
一些BS系统在登陆时输入用户名和密码后,就关闭登陆界面,重新弹一个新窗口显示主界面,如果我用一个webbrowser(叫wb1)显示登陆界面,然后设他的newwindows指向另一个webbrowser,那登陆程控后,wb1还存在吗?如果还存在他是个什么状态,怎么显示他啊!?
 
你wb1:=nil,理论上他就释放,不在了。
 
那我用Assigned(wb1)检测wb1时,他还存在啊!
 
COM是在赋值等于nil的时候引用记数减少1,如果不为0就释放,你只要保证你wb1:=1了就可以了。真正的释放是他自己控制的。
 
那我怎么获得他的引用计数值了?那我用wb1.free能强制释放吗!?
 
wb1.free也是减引用记数,不推荐自己强制去释放COM,你只要wb1:=nil就可以了,其他的不需要你管。
 
可以我现在的程序里不定期的报:"Access violation at address 0048C04F in module 'project1.exe' Read of address 00000000"这个错误,
我的程序是这样的:
总共有4个webbrowser,分别叫wb1、wb2、wb3、wb4。其中wb1、wb2动态生成,wb3、wb4在程序设计时就放入。我现在要登录一个网站,然后提交数据,其中wb1动态生成后用于显示网站的登录界面(由于登录界面在输入用户名和密码,进入主页面后就自动关闭),所以设置其newwindow事件中"ppdisp:=wb2.Application",wb2也是动态生成,用于显示网站的主页面。然后在wb3、wb4中显示网站的某些功能,并向其提交数据库中的数据,在提交后,关闭数据库,触发一个timer,timer中释放开始动态产生的wb1后,再动态产生一个wb1,然后循环以前的流程。但在程序执行后,有时几十分钟就报上面的错误,但有时候隔好几个小时才报一次。能帮忙解释一下啊
 
哈哈,问题解决了,我说一下我的解决办法:
1、把动态生成wb1、wb2控件改为设计程序时就生成(因为动态生成的话有内存漏洞)。
2、放一个ApplicationEvents1控件
3、在ApplicationEvents1的onmessage事件添加如下代码
if (Msg.message = WM_CLOSE) and (Msg.hwnd = WebBrowser1.Handle) then
PeekMessage(Msg,Msg.Hwnd,0,0,PM_REMOVE)//
else
inherited;
end;
来截获wb1中的网页脚本关闭窗口的函数
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
826
DelphiTeacher的专栏
D
后退
顶部