delphi TWebBrowser组件使用详解
delphi TWebBrowser組件使用詳解
????? 該組件是一個瀏覽器組件,可以顯示一個指定地址的網頁、設置網頁打開時的主頁以及對網頁進行相關的操作,同時也可以對HTML文件進行剪切、復制、粘貼、刪除等操作。該
????? 組件在Internet組件頁中。
????? 1.屬性
????? (1)AddressBar屬性
????? 設置是否顯示地址欄,在TWebBrowser中沒有用。
????? 語法:
????? property AddressBar: WordBool;
????? (2)Busy屬性
????? 確定Web瀏覽器組件是否正在導航到一個新的URL地址或正在下載文檔。
????? 語法:
????? property Busy: WordBool;
????? 示例:
????? 如果該屬性值為True,則在開始一個新的操作前,可用Stop方法中止當前操作,然后再導航到其他的頁面,代碼如下:
????? procedure TForm1.BitBtn1Click(Sender: TObject);
????? begin
???????? if WebBrowser1.Busy then
?????????? WebBrowser1.Stop;
???????? WebBrowser1.Navigate('www.mingrisoft.com');
????? end;
????? (3)Container屬性
????? 訪問Web瀏覽器父類或容器的接口。
????? 語法:
????? property Container: IDispatch;
????? 示例:
????? 如果Web瀏覽器沒有一個具有Automation接口的容器,則該屬性的值為空。否則可以通過返回的接口,訪問Web瀏覽器父類或容器,代碼如下:
????? if WebBrowser1.Container <> nil then
????? begin
???????? WebBrowser1.Stop;
????? end
????? else
???????? ShowMessage('Web瀏覽器沒有一個具有Automation接口的容器');
????? (4)ControlInterface屬性
????? 訪問WebBrowser組件接口,這個接口允許一個Automation控制器訪問Web瀏覽器的屬性、方法和事件。
????? 語法:
????? property?? ControlInterface: IWebBrowser2;
????? 示例:
????? 顯示WebBrowser1組件的名稱,代碼如下:
????? Showmessage(WebBrowser1.ControlInterface.Name);
????? (5)FullName屬性
????? 指定主機上Web瀏覽器組件的可執行文件的完整的合法路徑名。
????? 語法:
????? property FullName: WideString;
????? 示例:
????? 顯示Web瀏覽器組件所在的可執行文件的名稱,并且包含路徑,代碼如下:
????? ShowMessage('Web組件所在的可執行文件為:'+WebBrowser1.FullName);
????? (6)LocationName屬性
????? 獲得當前在Web瀏覽器組件中顯示的資源名。
????? 語法:
????? property LocationName: WideString;
????? 示例:
????? 顯示網頁標題的名稱,代碼如下:
????? ShowMessage('網頁標題名:'+WebBrowser1.LocationName);
????? (7)LocationURL屬性
????? 確定當前顯示文檔、文件夾的URL或路徑。
????? 語法:
????? property LocationURL: WideString;
????? 示例:
????? 顯示地址的完整路徑,代碼如下:
????? ShowMessage('Web瀏覽器組件連接的URL為:'+WebBrowser1.LocationURL);
????? (8)Name屬性
????? 指定計算機上的TWebBrowser的名稱。
????? 語法:
????? property Name: WideString;
????? (9)Offline屬性
????? 指定Web瀏覽器是否從本地緩存中獲取文檔。該屬性為True時,表示Web瀏覽器以脫機方式工作,否則為在線方式。
????? 語法:
????? property Offline: WordBool;
????? 注意:可以使用IE瀏覽器保存HTML網頁到本地緩存,瀏覽器可以脫機方式工作。
????? (10)Path屬性
????? 指定主機上Web瀏覽器組件可執行文件的路徑名,不包括文件名。
????? 語法:
????? property Path: WideString;
????? 示例:
????? Str := WebBrowser1.Path;
????? (11)ReadyState屬性
????? 獲得指定Web瀏覽器組件的狀態信息,使用這個信息可避免Web瀏覽器執行未準備的操作。
????? 語法:
????? property ReadyState: TOleEnum;
????? (12)RegisterAsBrowser屬性
????? 設置該屬性為True時,當前使用的Web瀏覽器組件成為最高級別瀏覽器。
????? 語法:
????? property RegisterAsBrowser: WordBool;
????? (13)RegisterAsDropTarget屬性
????? 指出是否允許用戶拖放HTML文檔到當前Web瀏覽器。
????? 語法:
????? property RegisterAsDropTarget: WordBool;
????? 示例:
????? 該屬性為True時,允許用戶拖放HTML文檔到當前Web瀏覽器;否則拖放操作無效,代碼如下:
????? procedure TForm1.ToolButton4Click(Sender: TObject);
????? begin
???????? if not WebBrowser1.RegisterAsDropTarget then
?????????? WebBrowser1.RegisterAsDropTarget:=true;
????? end;
????? (14)Silent屬性
????? 指定TWebBrowser是否顯示對話框。該屬性為True時,該對話框不再顯示腳本錯誤。
????? 語法:
????? property Silent: WordBool;
????? (15)Type_屬性
????? 指定包含的文檔對象的類型名稱,讀取該屬性以確定Automation對象的類型,該對象的接口通過Document屬性表示。
????? 語法:
????? property Type_: WideString;
????? 示例:
????? 顯示文件的類型,代碼如下:
????? ShowMessage('Automation對象的類型為:'+WebBrowser1.Type_);
????? 2.方法
????? (1)ClientToWindow方法
????? IE使用該方法轉換客戶坐標與窗口坐標。一般不要使用該方法。
????? 語法:
????? procedure ClientToWindow(var pcx: SYSINT; var pcy: SYSINT);
????? pcx:坐標點X。
????? pcy:坐標點Y。
????? (2)ExecWB方法
????? 允許用戶用IOleCommandTarget接口傳遞一個命令到當前Web瀏覽器組件。Microsoft定義了一些常量來表示這些命令,但是Web瀏覽器不全部支持這些命令,可用QueryStatusWB方法使用這些命令。
????? 語法:
????? procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); overload;
????? procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn:
????? OleVariant);
????? overload;
????? procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn:
????? OleVariant;
????? var pvaOut: OleVariant); overload;
????? 示例:
????? 調用ExecWB方法能夠完成許多功能,例如停止網頁瀏覽,代碼如下:
????? WebBrowser1.ExecWB(OLECMDID_STOP,OLECMDEXECOPT_PROMPTUSER);
????? (3)GoBack方法
????? 返回到歷史列表中的上一個文檔。如果歷史列表中沒有包含另外的文檔,該方法將無效。
????? 語法:
????? procedure GoBack;
????? 示例:
????? 返回當前頁的上一頁,代碼如下:
????? WebBrowser1.GoBack();
????? (4)GoForward方法
????? 返回到歷史列表中的下一個文檔,與最后調用GoBack方法的效果相反。
????? 語法:
????? procedure GoForward;
????? 示例:
????? 返回當前頁的下一頁,但是如果歷史列表中沒有下一個文檔,則產生異常,代碼如下:
????? try
???????? WebBrowser1.GoForward();
????? except
???????? exit;
????? end;
????? (5)GoHome方法
????? 返回已注冊主頁或開始頁,在注冊表中指定主頁的注冊項為:HKEY_CURRENT_USER/Sof-
????? tware/Microsoft/IE/Main下的SStartpage名稱欄。可用TRegistry、TRegistryIniFile對象或IE瀏覽器“工具”中的Internet選項改變注冊主頁。
????? 語法:
????? procedure GoHome;
????? 示例:
????? 返回主頁,代碼如下:
????? if WebBrowser1.Busy then
???????? WebBrowser1.Stop;
????? WebBrowser1.GoHome;
????? (6)GoSearch方法
????? 打開已注冊的搜索網頁,在注冊表中指定搜索網頁的注冊項為:HKEY_CURRENT_USER/ Sof-
????? ware/Microsoft/IE/Main下的SearchPage名稱欄。可用TRegistry、TRegistryIniFile對象或IE瀏覽器中“工具”中的Internet選項改變注冊搜索網頁。
????? 語法:
????? procedure GoSearch;
????? 示例:
????? 打開已注冊的搜索網頁,代碼如下:
????? if WebBrowser1.Busy then
???????? WebBrowser1.Stop;
????? WebBrowser1.GoSearch();
????? (7)Navigate方法
????? 定位或下載指定的資源,發送HTTP消息到指定的URL并顯示指定文件的內容,也可用來顯示指定的文件。
????? 語法:
????? procedure Navigate(const URL: WideString); overload;
????? procedure Navigate(const URL: WideString; var Flags: OleVariant);
overload;
????? procedure Navigate(const URL: WideString; var Flags: OleVariant;var
????? TargetFrameName:
????? OleVariant); overload;
????? procedure Navigate(const URL: WideString; var Flags: OleVariant; var
????? TargetFrameName:
????? OleVariant; var PostData: OleVariant); overload;
????? procedure Navigate(const URL: WideString; var Flags: OleVariant; var
????? TargetFrameName:
????? OleVariant; var PostData: OleVariant; var Headers: OleVariant); overload;
????? Navigate方法語法中各參數的說明如表26.14所示。
????? 示例:
????? Navigate方法是TWebBrowser組件中最重要的方法之一,使用該方法能夠將當前TWebBrowser組件導航到任何存在的鏈接上,代碼如下:
????? if WebBrowser1.Busy then
???????? WebBrowser1.Stop;
????? WebBrowser1.Navigate(URL);???? //URL為網址
????? (8)Navigate2方法
????? 定位或下載指定的資源,發送HTTP消息到指定的URL并顯示指定文件的內容,或導航到不能表達為URL的資源。
????? 語法:
????? procedure Navigate2(var URL: OleVariant); overload;
????? procedure Navigate2(var URL: OleVariant; var Flags: OleVariant); overload;
????? procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; var
????? TargetFrameName:
????? OleVariant); Overload;
????? procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; var
????? TargetFrameName:
????? OleVariant; var PostData: OleVariant); overload;
????? procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; var
????? TargetFrameName:
????? OleVariant; var PostData: OleVariant; var Headers: OleVariant); overload;
????? 示例:
????? Navigate2方法與Navegate方法類似,能夠將當前TWebBrowser組件導航到指定的資源,代碼如下:
????? procedure TForm1.GoUrl2(URL: String);??? //URL為指定的資源的網址
????? var
???????? oUrl:Olevariant;
???????? oPost,oFram,oflag:Olevariant;
????? begin
???????? oUrl:=Url;
???????? oFram:=0;
???????? oFlag:=navOpenInNewWindow;???? //在新窗口中打開資源
???????? oPost:='';
???????? if WebBrowser1.Busy then
?????????? WebBrowser1.Stop;
???????? WebBrowser1.Navigate2(oUrl,oFlag,oFram,oPost);
????? end;
????? (9)QueryStatusWB方法
????? 確定可以使用ExecWB方法執行的命令,即Web瀏覽器支持的命令信息,該方法使用IOleCommandTarget接口的QueryStatus方法來得到命令狀態的信息。
????? 語法:
????? function?? QueryStatusWB(cmdID: OLECMDID): OLECMDF;
????? cmdID:指定要獲取其信息的命令。
????? (10)Refresh方法
????? 重新載入當前文檔。Web瀏覽器正在顯示的URL指定的資源可能已經發生變化時,這個方法非常有用。該方法總是發送一個參數,即非緩存標題,通知服務器不要返回緩存的復制,這對于某些服務器可能是一個問題。為阻止發送這個非緩存標題參數或只是刷新過期的網頁,可用Refresh2方法。
????? 語法:
????? procedure Refresh;
????? 示例:
????? 該方法完成了IE瀏覽器的刷新功能,可以使用該方法來重新載入當前頁面,如果當前TWebBrowser組件沒有載入任何的網頁,則會產生異常,代碼如下:
????? if WebBrowser1.LocationURL<>'' then
???????? WebBrowser1.Refresh;
????? (11)Refresh2方法
????? 調用Refresh2方法重新裝入當前文檔,與Refresh方法不同的是,該方法可指定要完成的刷新級別。
????? 語法:
????? procedure Refresh2; overload;
????? procedure Refresh2(var Level: OleVariant); overload;
????? Level:指定要被刷新信息的類型,其取值如表7所示。
????? 示例:
????? Refresh2方法提供了更加復雜的刷新方式,提供了多種刷新方法,通過該方法同樣能夠實現Refresh方法完成的任務,代碼如下:
????? procedure TForm1.ToolButton7Click(Sender: TObject);
????? var
???????? Level:Olevariant;
????? begin
???????? Level:=REFRESH_IFEXPIRED;
???????? if WebBrowser1.LocationURL<>'' then
?????????? WebBrowser1.Refresh2(Level);
????? end;
????? (12)Stop方法
????? 終止任何未完成的導航或下載操作,并終止任何動態的網頁元素,如背景音樂和動畫等。
????? 語法:
????? procedure Stop;
????? 示例:
????? 該方法實現了IE中的停止功能,即停止了一切載入工作,代碼如下:
????? WebBrowser1.Stop;
????? 3.事件
????? (1)OnBeforeNavigate2事件
????? Web瀏覽器導航到一個新的資源前被觸發。
????? 語法:
????? property OnBeforeNavigate2: TWebBrowserBeforeNavigate2;
????? type TWebBrowserBeforeNavigate2 = procedure(Sender: TObject; const pDisp:
????? IDispatch; var URL: OleVariant; var Flags: OleVariant; var
????? TargetFrameName: OleVariant; var PostData: OleVariant; var Headers:
????? OleVariant; var Cancel: WordBool) of object;
????? (2)OnCommandStateChange事件
????? 當執行TWebBrowser組件的某個方法的功能改變時被觸發,其狀態取值決定于執行Web瀏覽器中某個方法的功能。
????? 語法:
????? property OnCommandStateChange: TWebBrowserCommandStateChange;
????? type TWebBrowserCommandStateChange = procedure(Sender: TObject; Command:
????? Integer; Enable: WordBool) of object;
????? Sender:指出其功能已變化的Web瀏覽器組件。
????? Enable:指定CSC_NAVIGATEFORWARD或CSC_NAVIGATEBACK命令是否可用,其值為True時,可用;否則不可用。
????? 示例:
????? OnCommandStateChange事件提供了一個命令狀態改變后的處理功能,通過該事件能夠判斷執行某個命令后的當前瀏覽器狀態,例如控制“后退”、“前進”或“停止”按鈕是否可用,代碼如下:
????? procedure TForm1.WebBrowser1CommandStateChange(Sender: TObject;
???????? Command: Integer; Enable: WordBool);
????? begin
???????? case Command of
?????????? CSC_NAVIGATEBACK: ToolButton5.Enabled := Enable;???? //“后退”按鈕
?????????? CSC_NAVIGATEFORWARD: ToolButton4.Enabled := Enable;???? //“前進”按鈕
?????????? CSC_UPDATECOMMANDS: ToolButton2.Enabled := TWebBrowser(Sender).Busy;?
?????? //“停止”按鈕
???????? end;
????? end;
????? (3)OnDownloadBegin事件
????? Web瀏覽器開始下載一個文檔時被觸發,編寫其事件處理程序可以指定Web瀏覽器定位到一個文檔后下載該文檔前應采取的操作。
????? 語法:
????? property OnDownloadBegin: TNotifyEvent;
????? type TNotifyEvent = procedure (Sender: TObject) of object;
????? (4)OnDownloadComplete事件
????? 導航操作完成、暫停或操作失敗時被觸發,編寫其事件處理程序可以指定應采取的操作。
????? 語法:
????? property OnDownloadComplete: TNotifyEvent;
????? type TNotifyEvent = procedure (Sender: TObject) of object;
????? (5)OnNavigateComplete2事件
????? 當Web瀏覽器成功地導航到一個新的位置時被觸發,編寫其事件處理程序可以指定應執行的操作。這個事件可能產生在當前文檔下載完成前,但是事件結束時,至少已經接收到部分文檔并產生了文檔視圖。
????? 語法:
????? property OnNavigateComplete2: TWebBrowserNavigateComplete2;
????? type TWebBrowserNavigateComplete2 = procedure(Sender: TObject; const
pDisp:
????? IDispatch; var URL: OleVariant) of object;
????? Sender:導航到新的資源的Web瀏覽器。
????? pDisp:瀏覽器的Automation接口。
????? 示例:
????? 當TWebBrowser組件成功地導航到一個新的位置后觸發該事件,利用該事件能夠獲得當前狀態或URL地址,代碼如下:
????? if WebBrowser1.Offline then
???????? Statusbar1.Panels[Statusbar1.Panels.Count-1].Text:='脫機';
????? else
???????? Statusbar1.Panels[Statusbar1.Panels.Count-1].Text:='在線';
????? ComboBox1.Text:=WebBrowser1.LocationURL;
????? (6)OnProgressChange事件
????? 當更新下載操作的進度時被觸發,編寫其事件處理程序可以提供一個關于下載進度的可視化的反饋。
????? 語法:
????? property OnProgressChange: TWebBrowserProgressChange;
????? type TWebBrowserProgressChange = procedure(Sender: TObject; Progress:
????? Integer;
????? ProgressMax: Integer) of object;
????? Sender:正在下載文檔處理進程中的Web瀏覽器。
????? Progress:指出有多少文檔已經下載,取值范圍在0~ProgressMax之間。當其參數為−1時,操作結束。
????? PropressMax:指示下載操作的最大值。
????? 示例:
????? 利用該事件能夠設計一個準確的網頁載入進度條,該進度條表示了當前網頁的載入進度,代碼如下:
????? procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
???????? ProgressMax: Integer);
????? begin
???????? ProgressBar1.Max:=ProgressMax;
???????? if Progress = -1 then
?????????? ProgressBar1.Visible:=false
???????? else
???????? begin
?????????? ProgressBar1.Position := Progress;
?????????? ProgressBar1.Visible := True;
???????? end;
???????? if?? ProgressBar1.Position = ProgressMax then
?????????? ProgressBar1.Visible:=False;
????? end;
?
總結
以上是生活随笔為你收集整理的delphi TWebBrowser组件使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:孙卫强,博士,上海交通大学教授、博
- 下一篇: 【需求工程】需求