CppWebBrowser的问题

beilas 2007-06-25 05:22:59
我现在有一个String 型的字符串。内容如下:
怎么用CppWebBrowser把它显示成网页啊。救我啊。。。。。。。。。谢谢了。





<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1593" name=GENERATOR></HEAD>
<BODY bgColor=#eaeaea><FONT size=2><FONT face=宋体>您好!</FONT> </FONT>
<DIV> </DIV>
<DIV><FONT face=宋体 size=2>  不好意思,早忘了</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=宋体 size=2>======== 2007-06-19 16:34:00 您在来信中写道:
========</FONT></DIV>
<DIV> </DIV>
<DIV><FONT size=2>
<TABLE width="100%">
<TBODY>
<TR>
<TD width="100%">
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>还有些问题如果你解决了的话能帮助我一下吗?</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV><BR><!-- footer --><BR>
<HR>
<A
style="FONT-SIZE: 14px; COLOR: #000; LINE-HEIGHT: 15px; TEXT-DECORATION: none"
href="http://event.mail.163.com/chanel/xyq.htm?from=163_NO1"
target=_blank><SPAN style="COLOR: blue; TEXT-DECORATION: underline">150
万 人 同 时 在 玩 的 网 游,你 不 试 试 吗 ?
</SPAN></A></BLOCKQUOTE></TD></TR></TBODY></TABLE></FONT></DIV>
<DIV>
<P><FONT face=宋体 size=2>= = = = = = = = = = = = = = = = = = = = = = </FONT></P>
<P><FONT face=宋体 size=2>        致<BR>礼!</FONT></P>
<DIV> </DIV>
<DIV><FONT face=宋体 size=2>              </FONT></DIV>
<DIV><FONT face=宋体 size=2><FONT face=宋体 size=2>              </FONT><A
href=""></A></FONT></DIV>
<DIV><FONT face=宋体 size=2>               2007-06-20</FONT></DIV>
<DIV> </DIV></DIV></BODY></HTML>
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
csd08 2007-06-26
  • 打赏
  • 举报
回复

其实cczlp(不惑)的 SetHtml方法是比较好的方法,他的方法缺点在于不能用于第一次显示网页上。
因为_di_IDispatch di = WebBrowser->Document ;这个语句如果在CppWebBrowser第一次载入内容的时候,WebBrowser->Document =NULL,因此必然出错。如果是CppWebBrowser已经显示有内容,则SetHtml方法就能正确执行。

可以象下面一样测试一下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CppWebBrowser1->Navigate(L"");
Application->ProcessMessages();
AnsiString str = Memo1->Lines->Text;
SetHtml(CppWebBrowser1,str);
}

同时,在SetHtml函数中增加NULL值的判断:
_di_IDispatch di = WebBrowser->Document ;
if(di == NULL)
{
return;
}

这样的话,就不管是否有头标记都可以正确显示出来。

这个方法在执行到
CppWebBrowser1->Navigate(L"");
Application->ProcessMessages();
的时候,CppWebBrowser会有跳动,也有可能执行失败,不是很好。
实在抱歉,希望能给你带来点思路。
谢谢
^_^

beilas 2007-06-26
  • 打赏
  • 举报
回复
csd08(jone)谢谢。你的我试了可以显示。但像:


<DIV >啊哈哈哈哈。</DIV><br><!-- footer --><br><hr>
<a style="font-size:14px;line-height:15px; color:#000; text-decoration:none" href="http://event.mail.163.com/chanel/xyq.htm?from=126_NO6" target="_blank"><span style="text-decoration:underline; color:blue">人 山 人 海 盛 景,尽 在 梦 幻 西 游 </span> </a>

这种没有头标记的还是不行。不知道如何也能让它显示成HTML。

cczlp(不惑) 的我看不懂啊。刚学BCB。试了试有问题也不知道怎么解决。还是先给分吧。你们再帮我想想
cczlp 2007-06-25
  • 打赏
  • 举报
回复
void __fastcall SetHtml( TCppWebBrowser *WebBrowser,AnsiString Html )
{
HRESULT hr;
IPersistStreamInit* pPersistStreamInit;
_di_IDispatch di = WebBrowser->Document ;

hr = di->QueryInterface( IID_IPersistStreamInit, (void**)&pPersistStreamInit );

IStream* pStream = NULL;
HGLOBAL hHtmlText = GlobalAlloc(GMEM_FIXED , Html.Length() + 1 );

if (hHtmlText)
{
strcpy((char*)hHtmlText, Html.c_str());
hr = CreateStreamOnHGlobal(hHtmlText, FALSE, &pStream );
if (SUCCEEDED(hr))
{
pPersistStreamInit->InitNew();
pPersistStreamInit->Load(pStream);
pStream->Release();
}
GlobalFree(hHtmlText);
}

pPersistStreamInit->Release();

}
csd08 2007-06-25
  • 打赏
  • 举报
回复
简单一点就是将字符串载入到一个TStringList中,然后保存为一个文件,然后再用CppWebBrowser打开就可以了,例如:
AnsiString str = "c:\\a.a";
Memo1->Lines->SaveToFile(str);
CppWebBrowser1->Navigate(WideString(str));

假设Memo1中的内容就是你所说的String 型的字符串。

^_^

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧