Memo中的html代码怎么直接用TWebBrowser打开?

hyz_cs 2013-12-02 11:14:04
不想让用户看到html代码所以不想保存成文件再用TWebBrowser打开.
...全文
609 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝龙哥 2013-12-04
  • 打赏
  • 举报
回复
这些方式好像不支持html代码中的文件的显示的
hyz_cs 2013-12-04
  • 打赏
  • 举报
回复
引用 16 楼 ccrun 的回复:
CrnSetHtmlContent(spDoc, Memo1->Lines->Text.c_str());


传个示例html. 把扩展名.jpg改成.html



ccrun.com 2013-12-04
  • 打赏
  • 举报
回复
引用 17 楼 hyz_cs 的回复:
[quote=引用 16 楼 ccrun 的回复:]
CrnSetHtmlContent(spDoc, Memo1->Lines->Text.c_str());
_tcslen 要包含哪个头文件?[/quote] #include <stdio.h> #include <tchar.h>
sololie 2013-12-03
  • 打赏
  • 举报
回复
改一下,给html分配内存,不然调试运行时SafeArrayDestroy释放失败会蹦出CPU窗口 v->bstrVal = SysAllocString(html);
sololie 2013-12-03
  • 打赏
  • 举报
回复
直接往里面写Write就可以了啊
hyz_cs 2013-12-03
  • 打赏
  • 举报
回复
引用 9 楼 jiangsheng 的回复:
不让用户看?能防止用户去翻IE缓存目录不?
知道去翻IE缓存目录的用户根本就不需要去翻这些目录.
hyz_cs 2013-12-03
  • 打赏
  • 举报
回复
引用 8 楼 sololie 的回复:
关于SafeArrayCreate,看MSDN
http://msdn.microsoft.com/en-us/library/windows/desktop/ms221234(v=vs.85).aspx


在IDE中运行时




脱离IDE运行时

蒋晟 2013-12-03
  • 打赏
  • 举报
回复
不让用户看?能防止用户去翻IE缓存目录不?
hyz_cs 2013-12-03
  • 打赏
  • 举报
回复
引用 16 楼 ccrun 的回复:
CrnSetHtmlContent(spDoc, Memo1->Lines->Text.c_str());
_tcslen 要包含哪个头文件?
ccrun.com 2013-12-03
  • 打赏
  • 举报
回复
CrnSetHtmlContent(spDoc, Memo1->Lines->Text.c_str());
ccrun.com 2013-12-03
  • 打赏
  • 举报
回复
不要把简单的事情复杂化.
__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 (!spDoc)
        return bResult;

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

    HGLOBAL hHTMLText = ::GlobalAlloc(GPTR, nLen * sizeof(TCHAR) + 1);
    if (!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)
{
    IHTMLDocument2 *spDoc = NULL;
    HRESULT hr = CppWebBrowser1->Document->QueryInterface(
            ::IID_IHTMLDocument2, (void **)&spDoc);

    if (SUCCEEDED(hr))
    {
        CrnSetHtmlContent(spDoc, TEXT("YY挖卡卡"));
        spDoc->Release();
    }
}
sololie 2013-12-03
  • 打赏
  • 举报
回复
sololie 2013-12-03
  • 打赏
  • 举报
回复

    #include <mshtml.h>
    //....
    cpwbrwsr1->Navigate(L"about:blank");
    VARIANT* v;
    IHTMLDocument2* dom = NULL;
    (void*)dom = cpwbrwsr1->Document;
    tagSAFEARRAYBOUND sab[1];
    sab[0].lLbound = 0;
    sab[0].cElements = 1;
    tagSAFEARRAY* sa = SafeArrayCreate(VT_VARIANT, 1, sab);

    HRESULT hr = SafeArrayAccessData(sa, (LPVOID*)&v);
    if (SUCCEEDED(hr))
    {
       BSTR html = L"<H3>hello web...</H3>"; // HTML内容
       v->vt = VT_BSTR;
       v->bstrVal = html;
       SafeArrayUnaccessData(sa);
       dom->write(sa);
    }
    SafeArrayDestroy(sa);
    dom->Release();
    //....
sololie 2013-12-03
  • 打赏
  • 举报
回复
如果你发现第二次点击写入HTML代码时无效,可以在Navigate后加入Refresh刷新一下 cpwbrwsr1->Navigate(L"about:blank"); cpwbrwsr1->Refresh(); //刷新 VARIANT* v; IHTMLDocument2* dom = NULL; .....
sololie 2013-12-03
  • 打赏
  • 举报
回复

cpwbrwsr1->Navigate(L"about:blank");
VARIANT* v;
IHTMLDocument2* dom = NULL;
(void*)dom = cpwbrwsr1->Document;
tagSAFEARRAYBOUND sab[1];
sab[0].lLbound = 0;
sab[0].cElements = 1;
tagSAFEARRAY* sa = SafeArrayCreate(VT_VARIANT, 1, sab);

HRESULT hr = SafeArrayAccessData(sa, (LPVOID*)&v);
if (SUCCEEDED(hr))
{
v->vt = VT_BSTR;
v->bstrVal = SysAllocString(WideString(mmo1->Text)); // HTML内容
dom->write(sa);
SafeArrayUnaccessData(sa);
}
SafeArrayDestroy(sa);
dom->Release();


hyz_cs 2013-12-02
  • 打赏
  • 举报
回复
引用 4 楼 sololie 的回复:
http://hi.baidu.com/cq51888/item/07e677cdcf1bc20bac092fe1 导航到一个空白页后,然后把memo中的html代码(字符串)写进去
我也有搜到一个,不过到这一句时不知道怎么改了. delphi 下是这样的 ? if Assigned(wbRecvContent.Document) then (wbRecvContent.Document as IPersistStreamInit).Load(TStreamAdapter.Create(aMemory));
sololie 2013-12-02
  • 打赏
  • 举报
回复
http://hi.baidu.com/cq51888/item/07e677cdcf1bc20bac092fe1 导航到一个空白页后,然后把memo中的html代码(字符串)写进去
sololie 2013-12-02
  • 打赏
  • 举报
回复
你可以先让TWebBrowser导航到一个空白html页,然后往再往里面写入内容
hyz_cs 2013-12-02
  • 打赏
  • 举报
回复
引用 1 楼 sczyq 的回复:
开个127.0.0.1:xxx 端口再去打开吧
程序里面生成html代码到memo里面,然后用TWebBrowser控件打开. 你说的是什么意思? 开端口打开什么?
sczyq 2013-12-02
  • 打赏
  • 举报
回复
开个127.0.0.1:xxx 端口再去打开吧

1,317

社区成员

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

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