線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1535
推到 Plurk!
推到 Facebook!

一個webbrowser轉成delphi

答題得分者是:leveon
linwinshin
一般會員


發表:8
回覆:13
積分:4
註冊:2015-03-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-01-24 15:07:03 IP:180.217.xxx.xxx 未訂閱
各位前輩好

我想改變webbrowser的
------
林文信
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2017-01-26 18:20:28 IP:183.17.xxx.xxx 未訂閱
你的问题不是这几行 code 那么简单了。


首先,这几行 code 是基于 Windows 底下的 IE 浏览器的一些 Interface 的。如果你用 FireMonkey,要注意其 TWebBrowser 在不同的平台下封装的东西不一样。在 Windows 底下它封装的是 IE。因此,你最好是在 VCL 的架构下使用 TWebBrowser 来进行实验。

背景交代完毕。

要使用对 IE 封装的 TWebBrowser,你必须在放了 TWebBrowser 的单元里面,uses 两个单元:SHDocVw, MSHTML

然后,你可以声明一个变量,类型是 IHTMLDocument2。

比如,我这样:FDoc: IHTMLDocument2;


然后,当你的 WebBrowser 打开完毕后,你可以通过以下的 code 获得它:

FDoc := WebBrowser1.Document as IHTMLDocument2;

注意,一定要等 WebBrowser 打开完毕,才能用上述那句 code。否则会失败。

插一句,如果你的 WebBrowser 不是通过 Navgagte 的方式来打开的,你仅仅想打开一个空白的没有内容的 WebBrowser,可以这样:

WebBrowser1.Navigate('About:Blank');

当你获得 FDoc 以后,就可以做你要做的事了,比如:

var
Range: IHTMLTxtRange;

if Assigned(FDoc) then
begin
Range := (FDoc.body AS IHTMLBodyElement).createTextRange;
Range.Collapse(False);
Range.PasteHTML(RS);
end;

简单解释一下:这个 FDoc 是 IHTMLDocument2,它声明在 MSHTML.pas 这个单元里面,你可以进去查看它都有些什么方法或者属性。它实际上是 IE 这个 COM 对象的 interface。要理解这些,你必须明白 Windows 的 COM 架构和 COM interface。




===================引 用 linwinshin 文 章===================
各位前輩好

我想改變webbrowser的
linwinshin
一般會員


發表:8
回覆:13
積分:4
註冊:2015-03-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2017-01-30 11:58:16 IP:220.132.xxx.xxx 未訂閱
本以為沒人回答 .很高興看到前輩的答覆. 
. 我用了以下的碼 ,但出錯在RS.不知該如何改進?
var
Range: IHTMLTxtRange; FDoc: IHTMLDocument2;

begin
if Assigned(nweb1) then
begin
FDoc := nWeb1.Document as IHTMLDocument2;
Range := (FDoc.body AS IHTMLBodyElement).createTextRange;
Range.Collapse(False);
Range.PasteHTML(RS);//error
end;


------
林文信
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2017-01-30 19:12:28 IP:183.17.xxx.xxx 未訂閱
你的这段 code 里面,RS 都没有声明,当然连 compile 都会通不过。

RS 在这里应该是一个 string 类型的东西。我的这段例子是在这个 Range 里面(也就是浏览器的网页里面)写入一段 HTML 文字。
linwinshin
一般會員


發表:8
回覆:13
積分:4
註冊:2015-03-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2017-01-31 21:04:04 IP:58.99.xxx.xxx 未訂閱
前輩能否提供例子
------
林文信
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2017-01-31 22:51:37 IP:183.17.xxx.xxx 未訂閱
你该去找本 PASCAL 语法书来看。
leveon
資深會員


發表:30
回覆:389
積分:303
註冊:2012-02-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2017-02-05 20:34:01 IP:220.132.xxx.xxx 未訂閱
照翻 但能不能達到你想要的效果就不知道了


uses
... Variants, MSHTML, ActiveX;

var
doc:IHtmlDocument2;
o:IHtmlTxtRange;
elm: IHTMLElement;
begin
doc := WebBrowser1.Document as IHtmlDocument2;
o := doc.selection.createRange as IHtmlTxtRange;
elm := o.parentElement;
elm.style.lineHeight := 11;



===================引 用 linwinshin 文 章===================
各位前輩好

我想改變webbrowser的
linwinshin
一般會員


發表:8
回覆:13
積分:4
註冊:2015-03-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2017-02-12 11:47:36 IP:58.99.xxx.xxx 未訂閱
感謝leveon 前輩.測試後可以了.想說可能無解.太感謝了
------
林文信
系統時間:2024-04-26 12:29:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!