妖哥来看,关于webbrowser的问题

noibird 2011-01-20 06:18:05
1. 照妖哥网站文档www.ccrun.com/article.asp?i=169&d=st0528中,“如何改变cppWebBrowser的HTML内容”, 我执行后最后部分:

delete psi;
delete stream;

错误代码为:

Access violation at adress ... in module 'borlndmm.dat'. Read of address 00000000.


2. 本来我设置browser的边框为0, 没有滚动条,背景为蓝色。。。(函数2)但是按照1的方式写入字符串到browser之后,就会失去以前的设置。另外,如果在执行1的函数后,我执行函数2,也不能改变browser的样式。


请教。。。。。。。。。。。
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
noibird 2011-01-21
  • 打赏
  • 举报
回复
妖哥,webbrowser是作为editbox来使用的,可编辑模式下怎么使用css呢?
我setHTML之后,webbrowser的原有格式会失效,这个怎么处理呢?
CrnSetHtmlContent();
setStyle(); // 这句没有用


但是这样使用:
setStyle(); // 只此一句的话就有用
ccrun.com 2011-01-21
  • 打赏
  • 举报
回复
可以的,用CSS来控制。
noibird 2011-01-21
  • 打赏
  • 举报
回复
谢谢妖哥!!
另外,webbrowser的行间距能不能设置啊?
ccrun.com 2011-01-20
  • 打赏
  • 举报
回复
与先前函数不同的地方,你需要从WebBrowser对象中获取到IHTMLDocument2接口。

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

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

if (SUCCEEDED(hr))
{
// ...
// 获取成功的后续操作
// ...

// 最后释放一下
spDoc->Release();
}
ccrun.com 2011-01-20
  • 打赏
  • 举报
回复
旧文档中,那段函数逻辑上不太严谨。用这个试试:
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;
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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