一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

WebBrowser顯示字符串內(nèi)容后如何保存的問題

 aaie_ 2012-04-12

程序中需要顯示一個網(wǎng)頁的內(nèi)容,但這個網(wǎng)頁的html文本是在程序中動態(tài)從數(shù)據(jù)庫里查詢出來的。用WebBrowser顯示出來,沒有任何問題。但是保存的時候,選擇不同的保存類型,有的保存是空的html頁面,保存成文本的時候,有時候是亂碼。

我用以下三種方法把html代碼顯示在WebBrowser中,沒有一個能完整保存成功的,不知道是顯示的問題還是保存的問題。請做過這方面的幫助一下,謝謝!

其中,'c:\s.txt'文件是隨便找一個網(wǎng)頁,查看源文件,保存成txt文件,此為了演示方便。代碼有點多,直接貼到delphi里面就可以運行。

uses
mshtml,ActiveX;

var
s: String;

//方法2調(diào)用
function ShowHtmls(mWebBrowser: TWebBrowser; mStrings: TStrings): Boolean; overload;
var
vMemoryStream: TMemoryStream;
begin
Result := False;
if not (Assigned(mStrings) and Assigned(mWebBrowser)) then Exit;
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;

//方法3調(diào)用
procedure ShowHtmls(browser:TwebBrowser;content:widestring); overload;
var
Document: IHTMLDocument2;
V: OleVariant;
begin
try
Document := browser.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);
V[0] := content;
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
except
end;
end;

//先給字符串賦值
procedure TForm1.Button1Click(Sender: TObject);
begin
if FileExists('c:\s.txt') then
begin
Memo1.Lines.LoadFromFile('c:\s.txt');
s:= Memo1.Text;
end;
end;

//顯示方法1
procedure TForm1.Load1Click(Sender: TObject);
begin
(WebBrowser.Document as IHtmlDocument2).Body.innerHTML:= s;
end;

//顯示方法2
procedure TForm1.Load2Click(Sender: TObject);
var
ts : TStrings;
begin
ts := TStringList.Create;
ts.Add(s);
ShowHtmls(WebBrowser,ts);
ts.Free;
end;

//顯示方法3
procedure TForm1.Load13Click(Sender: TObject);
begin
ShowHtmls(WebBrowser,s)
end;

//保存
procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser.ExecWB(OLECMDID_SAVEAS,OLECMDEXECOPT_PROMPTUSER);
end;

//初始化WebBrowser.Document對象。
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser.Navigate('about:blank');
end;


initialization
OleInitialize(nil);

finalization
try
OleUninitialize;
except
end;
問題點數(shù):200、回復次數(shù):27Top

1 樓outer2000(天外流星) 回復于 2004-09-22 16:32:33 得分 70

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('www.csdn.net');

end;

procedure TForm1.Button2Click(Sender: TObject);
var
Document: IHTMLDocument2;
begin
try
Document := Webbrowser1.Document as IHtmlDocument2;
showmessage(Document.body.innerText);
Document.Close;
except
end;

end;
Top

2 樓outer2000(天外流星) 回復于 2004-09-22 16:33:22 得分 0

Document.body.innerHTML; 這個就可以顯示HTML代碼了Top

3 樓Dlwxn(Dlwxn) 回復于 2004-09-22 16:36:10 得分 0

并不是這樣的,是一段html代碼的字符串,用Webbrowser顯示出來,然后再保存。Top

4 樓Dlwxn(Dlwxn) 回復于 2004-09-22 16:37:13 得分 0

你的方法剛好和我要做的反了過來。Top

5 樓lzy6204(為了忘卻的記憶) 回復于 2004-09-22 16:41:43 得分 0

你要保存的是webbrowser顯示的內(nèi)容,還是網(wǎng)頁的源代碼Top

6 樓outer2000(天外流星) 回復于 2004-09-22 16:44:12 得分 0

procedure TForm1.Button1Click(Sender: TObject);
begin
// webbrowser1.Navigate('www.csdn.net');
webbrowser1.Navigate('about:blank');
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Document: IHTMLDocument2;
begin

try
Document := Webbrowser1.Document as IHtmlDocument2;
Document.body.innerText:='<html>hello</html>';
except
end;

end;Top

7 樓outer2000(天外流星) 回復于 2004-09-22 16:44:55 得分 0

寫這個時間里好了
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
Document: IHTMLDocument2;
begin

try
Document := Webbrowser1.Document as IHtmlDocument2;
Document.body.innerText:='<html>hello</html>';
except
end;

end;Top

8 樓Dlwxn(Dlwxn) 回復于 2004-09-22 16:45:07 得分 0

to lzy6204
和IE瀏覽器中的"文件" "另存為..."樣,注意那個窗口中的“保存類型”,要求每種都能完整的保存。Top

9 樓Dlwxn(Dlwxn) 回復于 2004-09-22 16:54:14 得分 0

to outer2000(天外流星)
對,就是你這樣的,然后我想把它保存起來,用
WebBrowser.ExecWB(OLECMDID_SAVEAS,OLECMDEXECOPT_PROMPTUSER);

你把,保存類型都試驗一下,保存后要打開你保存的文件看看,結(jié)果是什么?Top

10 樓Dlwxn(Dlwxn) 回復于 2004-09-22 16:57:09 得分 0

還有,是Html格式,不是Text的。Top

11 樓outer2000(天外流星) 回復于 2004-09-22 17:03:27 得分 0

這個就可以了啊,不明白,SHOW可以,寫成一個文本文件不就可以了嗎?
procedure TForm1.Button2Click(Sender: TObject);
var
Document: IHTMLDocument2;
begin
try
Document := Webbrowser1.Document as IHtmlDocument2;
showmessage(Document.body.innerText);
Document.Close;
except
end;

end;
Top

12 樓lzy6204(為了忘卻的記憶) 回復于 2004-09-22 17:05:57 得分 0

WebBrowser1.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT,
EmptyParam,
EmptyParam);
Top

13 樓lzy6204(為了忘卻的記憶) 回復于 2004-09-22 17:07:33 得分 0

我試了,可以的呀,沒有任何問題Top

14 樓Dlwxn(Dlwxn) 回復于 2004-09-22 19:08:48 得分 0

outer2000(天外流星) 和 lzy6204(為了忘卻的記憶)

單獨來說你們都是對的,現(xiàn)在我寫一個簡單的程序:

//WebBrowser里面是顯示出紅生的字體。
procedure TForm1.Load1Click(Sender: TObject);
var
ss: String;
begin
ss := '<HTML><HEAD><TITLE> New Document </TITLE></HEAD><BODY>'+
'<FONT SIZE="" COLOR="REd">我試了,可以的呀,沒有任何問題</FONT>'+
'</BODY></HTML>';
(WebBrowser.Document as IHtmlDocument2).Body.innerHTML:= ss;
end;

//保存,點后,出現(xiàn)保存對話框,這個也是對的。沒有任何問題。
procedure TForm1.Button2Click(Sender: TObject);
begin
//WebBrowser.ExecWB(OLECMDID_SAVEAS,OLECMDEXECOPT_PROMPTUSER);
WebBrowser.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT,
EmptyParam,
EmptyParam);

end;


但是假如我把它保存到桌面上,文件名稱是blank.htm,打開這個文件看看里面的內(nèi)容。

結(jié)果是空值。Top

15 樓Dlwxn(Dlwxn) 回復于 2004-09-22 19:19:23 得分 0

上面這個是比較簡單的例子,保存后看看結(jié)果是什么,不是出現(xiàn)保存對話框就行了。

而且保存的是多種格式的IE的“文件” “另存為...”的“保存類型” 有多種類型:
“網(wǎng)頁,全部(*.htm;*html)”、“Web檔案,單一文件(*.mht)”、“網(wǎng)頁,僅HTML(*.htm;*.html)”
“文本文件(*.txt)”。

我是從數(shù)據(jù)庫里把已有的html文本文件用WebBrowser顯示出來,然后保存成上面的幾種類型。
Top

16 樓Dlwxn(Dlwxn) 回復于 2004-09-22 19:55:54 得分 0

我把程序上傳到 ftp://Jobin:111111@218.75.15.69/steven/WebBrowser.rar 上,看一下保存的結(jié)

果,不是出現(xiàn)對話框框就行了。Top

17 樓dlwhxn(流云) 回復于 2004-09-23 08:32:53 得分 0

看了左輕候的大富翁離線瀏覽器的代碼,他的從數(shù)據(jù)庫里把html代碼取出在WebBrowser顯示后,并保存的功能和我的代碼一樣,他的就能保存,我的就不可以,奇怪。Top

18 樓dlwhxn(流云) 回復于 2004-09-23 08:58:07 得分 0

原來左輕候大俠也沒有完成這個功能,下面是他的離線瀏覽器Rich Explorer V2.1 簡介里內(nèi)容:

“不再使用臨時文件,而是直接將html字符串讀入webbrower中;

支持HTML頁面的保存和打?。ㄓ蠦UG,尚未修正)?!?
Top

19 樓lzy6204(為了忘卻的記憶) 回復于 2004-09-23 09:24:56 得分 0

保存為HTML文件好象是有些問題,其他類型的保存都沒有問題,我再看看Top

20 樓lzy6204(為了忘卻的記憶) 回復于 2004-09-23 09:49:14 得分 120

:( 搞不懂了

當保存的頁面不只是文字的時候,保存成任何文件都沒有問題

但是如果保存的頁面中只有文本內(nèi)容的時候,保存成全部類型的時候就是空的,其他的沒有問題

期待高手來解答

to dlwhxn(流云) 你一定要把所有功能都實現(xiàn)? 如果只是將其內(nèi)容保存下來,不是已經(jīng)實現(xiàn)了嗎.
我覺得保存成功與否好像跟顯示到WEBBROWSER的內(nèi)容有關Top

21 樓Dlwxn(Dlwxn) 回復于 2004-09-23 10:05:14 得分 0

to lzy6204(為了忘卻的記憶) 謝謝!

Top

22 樓WGYKING(修羅是誰?![就缺孩子了……]) 回復于 2004-09-23 17:54:24 得分 5

UPTop

23 樓masterjames(三月街) 回復于 2004-09-23 18:03:50 得分 5

MEMO.LINES.SAVETOFILE 一樣呀Top

24 樓Dlwxn(Dlwxn) 回復于 2004-09-23 20:12:33 得分 0

to masterjames(james):

謝謝你的關心,這和memo是沒有關系的。Top

25 樓Dlwxn(Dlwxn) 回復于 2004-09-24 10:03:08 得分 0

http://www./Programming/Programming_Languages/Delphi/Q_20886098.html#10370729

uses ActiveX;


procedure LoadStream(WebBrowser: TWebBrowser; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
MemoryStream: TMemoryStream;
begin
{Load empty HTML document into Webbrowser to make "Document" a valid HTML document}
WebBrowser.Navigate('about:blank');
{wait until finished loading}
repeat
Application.ProcessMessages;
Sleep(0);
until
WebBrowser.ReadyState = READYSTATE_COMPLETE;
{Get IPersistStreamInit - Interface}
if WebBrowser.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
{Clear document}
if PersistStreamInit.InitNew = S_OK then
begin
{Make local copy of the contents of Stream if you want to use Stream directly, you have to
consider, that StreamAdapter will destroy it automatically}
MemoryStream:= TMemoryStream.Create;
try
MemoryStream.CopyFrom(Stream, 0);
MemoryStream.Position:= 0;
except
MemoryStream.Free;
raise;
end;
{Use Stream-Adapter to get IStream Interface to our stream}
StreamAdapter:= TStreamAdapter.Create(MemoryStream, soOwned);
{Load data from Stream into WebBrowser}
PersistStreamInit.Load(StreamAdapter);
end;
end;
end;



{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringStream;
begin
S:= TStringStream.Create('<html><h1>Stream Test</h1><p>:This HTML content ' +
'is being loaded from a stream.</html>');
try
LoadStream(WebBrowser1, S);
finally
S.Free;
end;

End;Top

26 樓Dlwxn(Dlwxn) 回復于 2004-09-24 13:15:28 得分 0

上面是把html字符串顯示在WebBrowser里,下面是保存成Html文件:

function SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
var
ps: IPersistStreamInit;
fs: TFileStream;
sa: IStream;
begin
ps := WebBrowser.Document as IPersistStreamInit;
fs := TFileStream.Create(FileName, fmCreate);
try
sa := TStreamAdapter.Create(fs, soReference) as IStream;
Result := Succeeded(ps.Save(sa, True));
finally
fs.Free;
end;
end;

Call with:
SaveHTMLCode(WebBrowser1, 'C:\MyHTMLDoc.html');

//保存成流:
procedure SaveDocumentSourceToStream(Document: IDispatch; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
begin
Stream.Size := 0;
Stream.Position := 0;
if Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
StreamAdapter := TStreamAdapter.Create(Stream, soReference);
PersistStreamInit.Save(StreamAdapter, False);
StreamAdapter := nil;
end;
end;

Top

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章

    亚洲天堂精品1024| 麻豆精品视频一二三区| 好吊日在线观看免费视频| 国产欧美日本在线播放| 国产一级一片内射视频在线| 人妻内射精品一区二区| 欧美熟妇喷浆一区二区| 国产主播精品福利午夜二区| 久久一区内射污污内射亚洲| 美女黄色三级深夜福利| 美女被后入视频在线观看| 一二区中文字幕在线观看| 亚洲天堂有码中文字幕视频| 日本高清加勒比免费在线| 两性色午夜天堂免费视频| 欧美日韩亚洲国产综合网| 久热在线视频这里只有精品| 国产精品激情对白一区二区| 国产老熟女超碰一区二区三区| 国产又粗又长又大高潮视频| 毛片在线观看免费日韩| 又大又紧又硬又湿又爽又猛| 亚洲中文字幕在线视频频道| 国产日韩欧美在线播放| 九七人妻一区二区三区| 暴力三级a特黄在线观看| 色婷婷视频免费在线观看| 69精品一区二区蜜桃视频| 亚洲午夜精品视频观看| 国产日韩欧美综合视频| 国产成人精品午夜福利av免费| 欧美特色特黄一级大黄片| 五月激情综合在线视频| 亚洲一区二区精品免费视频| 久久99夜色精品噜噜亚洲av | 日本人妻的诱惑在线观看| 国产又长又粗又爽免费视频| 国产精品久久精品国产| 国产成人亚洲精品青草天美| 69老司机精品视频在线观看| 亚洲免费观看一区二区三区|