CppWebBrowser隐藏的问题。

sw4419 2010-07-05 01:24:47
我在CppWebBrowser1NavigateError事件里隐藏CppWebBrowser,怎么不起作用呢?
void __fastcall TForm1::CppWebBrowser1NavigateError(TObject *Sender,
LPDISPATCH pDisp, Variant *URL, Variant *Frame, Variant *StatusCode,
VARIANT_BOOL *Cancel)
{
ShowMessage("页面不可访问");
CppWebBrowser->Visible=false;
*Cancel = true;
}


我想实现的效果,当出现CppWebBrowser定向到指定url出现错误的时候,就隐藏CppWebBrowser控件,该如何实现。
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sw4419 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ccrun 的回复:]
这个实在难理解。可曾调用CppWebBrowser的Navigate方法?
[/Quote]
确实调用了CppWebBrowser的Navigate方法,但内容仍然没有变化。
ccrun.com 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sw4419 的回复:]
一运行,就弹出那个CPU调试信息。
[/Quote]
检查你其他代码吧。和我4楼的代码无关。

[Quote=引用 7 楼 sw4419 的回复:]
另外,如何让CppWebBrowser1加载的url的内容强制刷新?
比如,开始CppWebBrowser1导航的url对应的文本内容“页面版本1”,当程序运行后,我将url页面的文本内容改为“页面版本2”。但在CppWebBrowser1中显示的内容仍然是“页面版本1”,该如何解决。谢谢
[/Quote]
这个实在难理解。可曾调用CppWebBrowser的Navigate方法?
sw4419 2010-07-05
  • 打赏
  • 举报
回复
一运行,就弹出那个CPU调试信息。
另外,如何让CppWebBrowser1加载的url的内容强制刷新?
比如,开始CppWebBrowser1导航的url对应的文本内容“页面版本1”,当程序运行后,我将url页面的文本内容改为“页面版本2”。但在CppWebBrowser1中显示的内容仍然是“页面版本1”,该如何解决。谢谢
ccrun.com 2010-07-05
  • 打赏
  • 举报
回复
下个断点,看哪一句出错了?我在Win7 + CB6下测试没有问题。
sw4419 2010-07-05
  • 打赏
  • 举报
回复
妖哥,运行会出错~
ccrun.com 2010-07-05
  • 打赏
  • 举报
回复
楼主自问自答,很好嘛。

回答你3楼的问题,还是用CppWebBrowser控件:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
CppWebBrowser1->Navigate(L"about:blank");
}
//---------------------------------------------------------------------------
#include <mshtml.h>

BOOL __stdcall CrnSetHtmlContent(IHTMLDocument2 *spDoc, LPCTSTR lpText)
{
BOOL bResult(FALSE);

if (NULL == spDoc)
return bResult;

IStream *pStream;
IPersistStreamInit *psi;
int nLen = _tcslen(lpText);

HGLOBAL hHTMLText = ::GlobalAlloc(GPTR, nLen * sizeof(TCHAR) + 1);
if (NULL == hHTMLText)
return bResult;

::CopyMemory(hHTMLText, lpText, nLen * sizeof(TCHAR));
HRESULT hr = ::CreateStreamOnHGlobal(hHTMLText, true, &pStream);
if (SUCCEEDED(hr))
{
hr = spDoc->QueryInterface(IID_IPersistStreamInit, (void **)&psi);
if (SUCCEEDED(hr))
{
hr = psi->Load(pStream);

bResult = SUCCEEDED(hr);

psi->Release();
}
pStream->Release();
}
::GlobalFree(hHTMLText);

return bResult;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString strXXX="kkkk<br>dddddd<h1>dddd</h1>";

while (CppWebBrowser1->Busy)
Application->ProcessMessages();

IHTMLDocument2 *spDoc = NULL;
HRESULT hr = CppWebBrowser1->Document->QueryInterface(
::IID_IHTMLDocument2, (void **)&spDoc);

if (SUCCEEDED(hr))
{
CrnSetHtmlContent(spDoc, strXXX.c_str());

spDoc->Release();
}
}
sw4419 2010-07-05
  • 打赏
  • 举报
回复
请教一个编码的问题,AnsiString strXXX="kkkk<br>dddddd<h1>dddd</h1>";
也就是说我的这个字符串是html代码,要使用什么控件,才能让显示的内容和html的内容一致呢,谢谢。
sw4419 2010-07-05
  • 打赏
  • 举报
回复
想到了,
CppWebBrowser->Show();
sw4419 2010-07-05
  • 打赏
  • 举报
回复
实验出,应该这样写:

CppWebBrowser->Hide();

但,被hide后的CppWebBrowser,该如何又让它显示出来呢?

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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