---- 大概大家還記得Delphi的範例程式中的那個瀏覽器的例子吧。在那個範例中,利用控制項THttp的屬性和方法製作了一個瀏覽器。此範例用於理解THttp控制項的使用方法,確實不錯。但很少人會用它作為一個真正的瀏覽器,原因很簡單,功能太有限了,不支援Frame,不支援Script腳本語言,不能以本機檔案方式查看HTML檔案等等。大部分使用者在使用IE或Navigator;我們程式設計師也樂意使用現成的瀏覽器,在需要使用瀏覽器時,就在程式中透過WinExec或CreatePRocess等方法呼叫外部瀏覽器讓使用者使用。這種方法確實挺省事的,但總讓筆者有點不甘心,把程式控制權讓給其它外部程式總讓自己很感到麻煩,尤其當應用軟體的使用者的電腦使用水準不是很高時。如果能有一個瀏覽器控件,就可把瀏覽器嵌入到自己的程式中,那應該挺不錯的。
---- 如果你的軟體的外部環境是WIN95+IE或WIN98(這樣的軟體使用率還很高的),那樣在系統中就已經有了一個IE瀏覽器控制可以使用了,也許是你長時間沒有發覺吧,別浪費資源了,拿來使用吧。當系統中已經安裝了IE3.X或IE4.X時,IE瀏覽器控制已經註冊到系統中了,請執行Regedit,用「編輯」功能表下的「尋找」功能,尋找「Shell.Explorer」鍵名,你會發現IE控件已經作為ActiveX控件註冊在系統中了,這樣就我們可以在Delphi中使用該控件了。
---- 由於IE瀏覽器控制項需要提供顯示功能才能使用,所以不能在程式中用CreateOleObject取得一個實例後直接使用其屬性和方法,否則程式在執行時會造成錯誤;這時需要用Delphi中提供的「Import ActiveX Control」功能,操作方法見下所述。
---- 在“Components”選單中,呼叫“Import ActiveX Control”功能,在Registered Controls (註冊控制項)清單中選擇“Microsoft Internet Controls(Version1.1)”,下方的提示欄中顯示出其路徑為C:PWin98SystemSHDOCVW.DLL,在Class Names(類型清單)中列出了可註冊的三個控制項: TWebBrowser_V1、TWebBrowser和TShellFolderViewOC,分別為IE3瀏覽器控制項、IE4瀏覽器控制項及「Microsoft外殼資料夾檢視路由器」控制項。按一下Install進行安裝。安裝完成後,在「ActiveX」 控制項列中,將增加三個控件,分別為TWebBrowser_V1、TWebBrowser和TShellFolderViewOC;在Delphi的Imports目錄下,將建立一個檔案SHDocVw_TLB.PAS,其中有這三個控制項的包裝細節,當然包含控制項的屬性和方法說明了,它可以作為我們使用控制項的參考資料。
----
以TWebBrowser(IE4瀏覽器控制項)為範例。 TWebBrowser的常見屬性和方法主要有:GoBack:方法,後退到上一個頁面。 GoForward:方法,前進到下一個頁面。 GoHome:方法,呼叫預設的主頁頁面,該頁面在IE的選項中設定。 GoSearch:方法,呼叫預設的搜尋頁面,該頁面在IE的選項中設定。 Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方法,呼叫指定頁面,具體參數如下:URL:指定頁面的URL。 Flags: Word類型,作用還不清楚,可設為0。 TargetFrameName:WideString,開啟頁面所在的Frame,當空字串時在目前的Frame中開啟;TargetFrameName指定的Frame存在時在Frame中開啟;TargetFrameName指定的Frame不存在時則新建一個視窗打開,此時就相當於呼叫外部的IE瀏覽器了。 PostData:boolean,是否允許傳送資料。 Headers:WideString,要傳送的URL請求的頭部資料。 Refresh:方法,刷新目前頁面。 Stop:方法,停止呼叫或開啟目前頁面。 LocationName:屬性(WideString),目前位置的名稱。 LocationURL:屬性(WideString),目前位置的URL。 Busy: 屬性(Boolean),是否正忙。 Visible: 屬性(Boolean),瀏覽器視窗是否可見。 (以下屬性為在TWebBrowser新增,TWebBrowser_V1中沒有,其作用有待探索)StatusBar: 屬性(Boolean),是否顯示狀態列。 StatusText: 屬性(WideString),狀態列內容。 ToolBar: 屬性(SYSINT),工具列中的內容。 MenuBar: 屬性(Boolean),是否顯示選單條。 FullScreen: 屬性(Boolean),是否全螢幕顯示。 Offline: 屬性(Boolean),是否離線瀏覽。 AddressBar: 屬性(Boolean),是否顯示網址列。 TWebBrowser的常見事件主要有:OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
---- 在狀態列提示資訊變化時發生,參數Text為當前狀態列提示訊息,我們可以根據該資訊來更新我們自己的狀態列提示資訊或處理其它的事務.
---- OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
---- 在開啟頁面的進度變化時發生,參數Progress為當前進度,ProgressMax為總進度,我們可以根據這兩個參數來更新我們自己的狀態列提示資訊或處理其它的事務.
---- OnCommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object;
---- 執行新的指令時發生,Command為指令標識,Enable為是否允許執行該指令. OnTitleChange = procedure(Sender: TObject; const Text: WideString) of object;
---- 在頁面的標題發生變化時發生,Text為當前標題.
---- OnPropertyChange = procedure(Sender: TObject; const Property_: WideString) of object;
---- 在頁面的屬性改變時發生,Property_為屬性名稱OnDownloadComplete: TNotifyEvent
---- 在下載頁面完成後發生.
---- OnDownloadBegin: TNotifyEvent
---- 在下載頁面開始前發生.
---- (1)製作自己的幫助系統
---- 我們利用IE瀏覽器控制項為使用者製作了一個幫助系統,幫助文件由多個HTML文件組成,一個主題對應一個HTML文件(Topic.HTM),每個主題下的項目對應HTML文件中的一個標籤(#Item)。這樣在我們的系統中,就不必再呼叫IE瀏覽器或WinHelp程式來為使用者提供幫助了。相信大家知道HTML幫助文件與傳統的HLP幫助文件相比的優勢所在吧。
---- 在下面範例中,示範了TWebBrowser(IE4瀏覽器控制項)的Navigate方法的使用方法。請注意程式中的註釋。 (下面為程式的主要片段)。
{根據主題和項目呼叫幫助文件}procedure ShowHelp( HelpTopic,HelpItem : String );var TargetFrameName,PostData,Heads,Flags : OleVariant; URL : widestring;begin TargetFrameName := ';{指定Frame的空字符串時, URL : widestring;begin TargetFrameName := ';{指定Frame的空字符串時,在目前Frame中開啟說明文件} PostData := false;{不傳送資料} Heads := ';{Header訊息為空} Flags := 0;{Flags設為0} URL := HelpTopic + '.HTM#'+HelpItem;{幫助訊息的URL} with formHelp.webbrowser do{在幫助視窗中的IE瀏覽器控制項中顯示幫助資訊} begin navigate(URL,Flags,TargetFrameName,PostData,Heads);{顯示幫助資訊} end;end;
----(2)顯示一個GIF動畫
---- 如果你還沒有一個適合的動畫顯示控件,不妨試試下面方法.
procedure ShowGIF( GIFFileName : String );var TargetFrameName,PostData,Heads,Flags : OleVariant; URL : widestring;begin TargetFrameName := ';{指定Frame的空字符串時,則在當前Frame中打開動畫文件} PostData:= false;{不傳送資料} Heads := ';{Header訊息為空} Flags := 0;{Flags設為0} URL := GIFFileName; with formGIF.webbrowser do{在指定視窗中的IE瀏覽器控制項中顯示動畫} begin navigate(URL,Flags,TargetFrameName,PostData,Heads);{顯示動畫檔案} end;end;
---- 以上程序在PWIN98+Delphi3.0下調試通過。