程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi的TWebBrowser編程綜述(6)

Delphi的TWebBrowser編程綜述(6)

編輯:Delphi

8、直接從TWebBrowser得到網頁源碼及Html

下面先介紹一種極其簡單的得到TWebBrowser正在訪問的網頁源碼的方法。一般方法是利用TWebBrowser控件中的Document對象提供的IPersistStreamInit接口來實現,具體就是:先檢查WebBrowser.Document對象是否有效,無效則退出;然後取得IPersistStreamInit接口,接著取得HTML源碼的大小,分配全局堆內存塊,建立流,再將Html文本寫到流中。程序雖然不算復雜,但是有更簡單的方法,所以實現代碼不再給出。其實基本上所有IE的功能TWebBrowser都應該有較為簡單的方法來實現,獲取網頁源碼也是一樣。下面的代碼將網頁源碼顯示在Memo1中。

Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml);

同時,在用TWebBrowser浏覽Html文件的時候要將其保存為文本文件就很簡單了,不需要任何的語法解析工具,因為TWebBrowser也完成了,如下:

Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterText);

9、“查找”功能

查找對話框可以在文檔獲得焦點的時候通過按鍵Ctrl-F來調出,程序中則調用IOleCommandTarget對象的成員函數Exec執行OLECMDID_FIND操作來調用,下面給出的方法是如何在程序中用代碼來做出文字選擇,即你可以自己設計查找對話框。

var
       Doc: IHtmlDocument2;
       TxtRange: IHtmlTxtRange;
      begin
       Doc :=WebBrowser1.Document as IHtmlDocument2;
       Doc.SelectAll; //此處為簡寫,選擇全部文檔的方法請參見第三條命令操作
                   //這句話尤為重要,因為IHtmlTxtRange對象的方法能夠操作的前提是
                   //Document已經有一個文字選擇區域。由於接著執行下面的語句,所以不會
                   //看到文檔全選的過程。
       TxtRange :=Doc.Selection.CreateRange as IHtmlTxtRange;
       TxtRange.FindText('Text to be searched',0.0);
       TxtRange.Select;
      end;

還有,從Txt.Get_text可以得到當前選中的文字內容,某些時候是有用的。

10、提取網頁中所有鏈接

這個方法來自大富翁論壇hopfIEld朋友的對一個問題的回答,我本想自己試驗,但總是沒成功。

var
      doc:IHtmlDocument2;
      all:IHtmlElementCollection;
      len,i:integer;
      item:OleVariant;
     begin
      doc:=WebBrowser1 .Document as IHtmlDocument2;
      all:=doc.Get_links; //doc.Links亦可
      len:=all.length;
      for i:=0 to len-1 do begin
       item:=all.item(i,varempty); //EmpryParam亦可
       memo1.lines.add(item.href);
      end;
     end;

11、設置TWebBrowser的編碼

為什麼我總是錯過很多機會?其實早就該想到的,但是一念之差,便即天壤之別。當時我要是肯再多考慮一下,多試驗一下,這就不會排到第11條了。下面給出一個函數,搞定,難以想象的簡單。

procedure SetCharSet(AWebBrowser: TWebBrowser; ACharSet:
   String);
     var
      RefreshLevel: OleVariant;
     Begin
      IHtmlDocument2(AWebBrowser.Document).Set_CharSet(ACharSet);
      RefreshLevel :=7; //這個7應該從注冊表來,幫助有Bug。
      AWebBrowser.Refresh2(RefreshLevel);
     End;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved