(WebBrowser1.document as IHTMLDOCUMENT2).body.toString返回类型是wideString,确不能复值给wids

  • 主题发起人 火狐狸
  • 开始时间

火狐狸

Unregistered / Unconfirmed
GUEST, unregistred user!
(WebBrowser1.document as IHTMLDOCUMENT2).body.toString返回类型是wideString,确不能复值给widstring类型的变量:((100分)<br />代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
S : wideString;
begin
WEBBROWSER1.Navigate('http://www.marcocantu.com/EPascal/chinese/ch07str.htm');
S:=(WEBBROWSER1.Document AS ihtmldocument2).body.toString
// <- 运行出错
end;

ihtmldocument2是倒入的 MSHTML_TLB
帮忙看看怎么回事 谢了,顺祝 国庆愉快
向国庆期间还坚守dfw的各位富翁表示诚挚的问候和衷心的感谢——赫赫,大分送上廖表心意,:D
 
打开网页是异步操作,需要一定时间的,你应该在WebBrowser的DocumentComplete事件中使用body
此外没有浏览过网页的WebBrowser也是无法使用body的,应该用Navigate('about:blank')初始化之
 
有没有可能是引入的类型库的问题 ?

照flier的试了一下 不行 :( ...
 
将上面的语句分开,点击button1后等显示滚动条后再点击 button2 即可:
应用时可捕捉异常,若出错,说明控件还未调用完成。
procedure TForm1.Button1Click(Sender: TObject);
begin
WEBBROWSER1.Navigate('http://www.marcocantu.com/EPascal/chinese/ch07str.htm');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
S : String;
begin
S:=(WEBBROWSER1.Document AS ihtmldocument2).body.innerText;
// ---------
// ^<<这里改一下
showmessage(s);
end;
 
WEBBROWSER1.Navigate('http://www.marcocantu.com/EPascal/chinese/ch07str.htm');
S:=(WEBBROWSER1.Document AS ihtmldocument2).body.toString
// <- 运行出错
出错的原因是你那个网页还没有Navigate完。
 
ft...偶n多程序都是这么处理的,
手头没有Delphi版的,贴个BCB的例子

__fastcall TfrmDetailInfo::TfrmDetailInfo(TComponent* Owner)
: TFrame(Owner), m_fWebBrowserInitilized(false)
{
Navigate(L"about:blank")
// 显示空白页面
}

//---------------------------------------------------------------------------
void __fastcall TfrmDetailInfo::cwbDetailDocumentComplete(TObject *Sender,
LPDISPATCH pDisp, Variant *URL)
{
if(!m_fWebBrowserInitilized)
{
m_fWebBrowserInitilized = true;

// 这里就可以对Document.body进行操作了

if(!m_strHtml.IsEmpty())
{
SetHtml(cwbDetail, m_strHtml)
// 初始化后显示指定HTML页面
}
}
}
 
多人接受答案了。
 
顶部