+ -
当前位置:首页 → 问答吧 → showmessage(WebBrowser2.OleObject.document.all.item('text1',0).value);当断开网络时就会出错

showmessage(WebBrowser2.OleObject.document.all.item('text1',0).value);当断开网络时就会出错

时间:2009-04-22

来源:互联网

我是想从WebBrowser2中的页面取出text1的值
procedure TForm1.WebBrowser2DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
try
  showmessage(WebBrowser2.OleObject.document.all.item('text1',0).value);
except
close;
end;
end;
当网络连接断开时出现下面的错误:
project crazyprpr.exe raised exception class eaccessviolation with message 'access violation at address 0047181f in module 'crazyprpr.exe'.red of addess 00000000'.

请问我该怎么避免这种错误,这错误看不懂,用try...except...也没用。也搞不懂try怎么会没用呢

我想我可以通过先判断网络连接是否正常,当正常时再执行上述代码,判断网络是否连接正常代码如下:
procedure TForm1.Button2Click(Sender: TObject);
function GetOnlineStatus : Boolean;
  var ConTypes : Integer;
  begin
  ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
  if (InternetGetConnectedState(@ConTypes, 0) = False)
  then Result := False
  else Result := True;
  end;

begin
 if GetOnlineStatus then
  ShowMessage(' Connected')
  else ShowMessage(' not Connected');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if InternetCheckConnection('http://www.baidu.com/', 1, 0) then
  ShowMessage('Connected')
  else
  ShowMessage('Disconnected');
end;

可在网上搜了一些关于网络连接的帖子,有一些网友回复,这些方法并不十分可靠。所以我都没敢用进去,如果没有正确判断出网络连接的话,上述错误还是一样的会发生。

求解答!!!谢谢!

作者: jiang1hai2zhou3   发布时间: 2009-04-22

使用InternetGetConnectedState函数判断网络是否联通
Delphi(Pascal) code

uses WinInet;

if InternetGetConnectedState(nil, 0) then ShowMessage('已连接');


作者: bdmh   发布时间: 2009-04-22

谢谢bdmh;
网友也推荐用InternetGetConnectedState,不知道是否可靠。因为有部分网友用了,貌似没有检测正确。
我是想从WebBrowser2中的页面取出text1的值 
procedure TForm1.WebBrowser2DocumentComplete(Sender: TObject; 
  const pDisp: IDispatch; var URL: OleVariant); 
begin 
try 
  showmessage(WebBrowser2.OleObject.document.all.item('text1',0).value); 
except 
close; 
end; 
end; 
当网络连接断开时出现下面的错误: 
project crazyprpr.exe raised exception class eaccessviolation with message 'access violation at address 0047181f in module 'crazyprpr.exe'.red of addess 00000000'. 

请问我该怎么避免这种错误,这是什么错误,用try...except...也没用。怎么try会没有派上用场? 
谢谢

作者: jiang1hai2zhou3   发布时间: 2009-04-22

这是组件内部的错误提示,try不行的,至于如何屏蔽,不清楚,可以看看msdn,看看上面是否有帮助
但是奇怪的是为什么必须要联网才能正常呢?不解,期待

作者: bdmh   发布时间: 2009-04-22

继续等待

作者: jiang1hai2zhou3   发布时间: 2009-04-22

期待

作者: jiang1hai2zhou3   发布时间: 2009-04-22

try...except起作用了,错误对话框的title很清楚,那是ide的Debugger蹦出来的,在程序自身产生处理前,debugger已经先处理了一遍提示给你看了
看你的背景ide应该是bds,要是嫌烦的话,在tools->options->debugger options->language exceptions中(delphi ide的话debugger options是独立于options的),把notify(stop) on language exceptions勾掉

作者: Seamour   发布时间: 2009-04-22

谢谢Seamour 
你说得很正确!如果我单独把exe文件拷贝出来,再运行确实不会出现上述错误。
请问这种错误产生的原因是?

也想知道,大家判断网络连接是否成功,用的是那些程序呀。查了资料,说法不一。
大致用到
InternetGetConnectedState
InternetQueryOption
InternetCheckConnection
这三个函数,

作者: jiang1hai2zhou3   发布时间: 2009-04-22

问题解决还不揭帖,很不厚道哦,亲

作者: youyidianmimang   发布时间: 2011-11-22

该回复于2011-11-22 15:43:03被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#10楼 得分:0回复于:2011-11-22 17:12:48
WebBrowser2.OleObject.document.all.item('text1',0).value
地址访问错误应该是由于里头某个对象是nil导致
逐层做个判断,应该是可以找到哪个对象在断网下是nil,比如
if WebBrowser2.OleObject.document.all.item('text1',0)=nil then
...

作者: scu96124678   发布时间: 2011-11-22

就用InternetCheckConnection判断就可以了
try ... except end是在编译环境报错,那是IDE可以设置的,生成exe后是处理掉的,没关系

作者: lynmison   发布时间: 2011-11-22