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;