如何将HTML代码直接写到TWebBrowser里?

hangzhou_joe 2002-05-27 11:40:52
在ChinaOk (授人以鱼,不如授人以渔) 的帖子里有一段代码,
http://www.csdn.net/expert/topic/638/638770.xml?temp=.2672388
但是似乎有错误,
我对delphi还不是很了解
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));------这句代码有错误吗,是什么意思,有高手能为我指点一下吗?
...全文
76 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
blucecat 2002-09-01
还是不能浏览图片
回复
王集鹄 2002-06-06
(WebBrowser.Document as IPersistStreamInit) //绝对强制转换
//有点象这样的语句 IPersistStreamInit(WebBrowser.Document)

//请参考//from
http://kingron.myetang.com/zsfunc1a.htm

(*//
标题:显示超文本
说明:在WebBrowser直接载入流,不通过文件
设计:Zswang
日期:2002-06-06
支持:wjhu111@21cn.com
//*)

///////Begin Source
uses ActiveX;

function ShowHtml(mWebBrowser: TWebBrowser; mStrings: TStrings): Boolean;
var
vMemoryStream: TMemoryStream;
begin
Result := False;
if not (Assigned(mStrings) and Assigned(mWebBrowser)) then Exit;
mWebBrowser.Navigate('about:blank');
if not Assigned(mWebBrowser.Document) then Exit;
vMemoryStream := TMemoryStream.Create;
try
mStrings.SaveToStream(vMemoryStream);
try
vMemoryStream.Position := 0;
Application.ProcessMessages; // :)
(mWebBrowser.Document as IPersistStreamInit).Load(
TStreamAdapter.Create(vMemoryStream));
except
Exit;
end;
finally
vMemoryStream.Free;
end;
Result := True;
end; { ShowHtml }
///////End Source

///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowHtml(WebBrowser1, Memo1.Lines);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Text :=
'<html>'#13#10 +
'<body bkcolor=#FF00FF><b>Hello Worlds!</b></body>'#13#10 +
'</html>'#13#10;
end;
///////End Demo

回复
王集鹄 2002-06-06
我测试了一下,没有问题呀!当然,如果你的html有问题的话就会出现异常!
回复
stanely 2002-06-06
如果你的意思是想不通过硬盘而是通过内存显示html源代码,那么如下:

WebBrowser.OleObject.document.body.innerHTML:=你象显示的html源代码string.


但是只能解释html源代码并显示,不能自动显示里面标记的别的连接,比如图片。

而且察看源代码里面看到的是你设置之前的内容。





回复
andyou2000 2002-06-06
var
vWebDoc: OleVariant;

vWebDoc := WebBrowser1.Document;
vWebDoc.write('<html>');

是不是这个意思
回复
hangzhou_joe 2002-05-27
谢谢楼上的兄弟,
但是我是想直接将代码写进去,而不是生成一个临时文件的方式,
还有其他办法吗?
回复
lxpbuaa 2002-05-27
procedure TForm1.Button1Click(Sender: TObject);
var
FileContent,FielName: String;
f: TFileStream;
begin
FileContent := '<html><img src="http://mydown.d2g.com/lb5000/usr/16/16_486.gif"></html>';0D
FielName := 'TempStrFile.htm';
f := TFileStream.Create(WebBrowser1.Path + FielName, fmCreate);
f.Write(PChar(FileContent)^,Length(FileContent));
FreeAndNil(f);
WebBrowser1.Silent := true;
WebBrowser1.Navigate(WebBrowser1.Path + FielName);
end;

—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
I.Desire := '加不加分随你';
—————————————————————————————————


回复
TechnoFantasy 2002-05-27
webbrowser1.Navigate('about:blank');
vv:=VarArrayCreate([0,0],varVariant);
vv[0]:=htmlstr;
html:=WebBrowser1.Document as IHTMLDocument2;
html.write(PSafeArray(TVarData(vv).VArray)); //这会出现异常
html.Close;

需要引用MSHTML,参考:
http://www.csdn.net/expert/topic/755/755501.xml?temp=.2549707
回复
bcb_fans 2002-05-27
当然可以,看下面的代码。这个问题是老问题了,在程序员2001上就有,为什么不找一下。
__fastcall TCriteriaDescForm::TCriteriaDescForm(TComponent* Owner)
: TForm(Owner)
{
CriteriaBrowser->Navigate2(&TVariant("about:blank"));
}
//---------------------------------------------------------------------------
void __fastcall TCriteriaDescForm::SetDescription(AnsiString DescContent)
{
IPersistStreamInit *psi;
IStream *pContentStream;
HGLOBAL hMemHandle;
HRESULT hr;

// 在构造函数中调用函数Navigate2时,必须等待它启动成功
while(CriteriaBrowser->Document==NULL)
{
Sleep(10);
Application->ProcessMessages();
}

hr=CriteriaBrowser->Document->QueryInterface(IID_IPersistStreamInit,(void**)&psi);
if(SUCCEEDED(hr))
{
hMemHandle=GlobalAlloc(GPTR,DescContent.Length());
if(hMemHandle==NULL)
{
SetErrorResult((HRESULT)GetLastError());
return;
}
CopyMemory((PVOID)hMemHandle,DescContent.c_str(),DescContent.Length());

hr=CreateStreamOnHGlobal(hMemHandle,true,&pContentStream);
if(SUCCEEDED(hr))
{
hr=psi->InitNew();
if(SUCCEEDED(hr))
{
hr=psi->Load(pContentStream);
if(FAILED(hr))
SetErrorResult(hr);
}
else SetErrorResult(hr);
}
else SetErrorResult(hr);

GlobalFree(hMemHandle);
psi->Release();
}
else SetErrorResult(hr);
}
//---------------------------------------------------------------------------
void __fastcall TCriteriaDescForm::SetErrorResult(HRESULT hr)
{
int WinErrCode=HRESULT_CODE(hr);

MessageBox(this->Handle,AnsiString(Msgconst_FailedSetHtml+" [ "+SysErrorMessage(WinErrCode)+" ]").c_str(),
NULL,MB_OK | MB_APPLMODAL | MB_ICONWARNING);
}
//---------------------------------------------------------------------------
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4924

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2002-05-27 11:40
社区公告
暂无公告