В статье описано как осуществить многие возможности современных броузеров, которые не были описаны в первой статье.
Было зарегистрировано более трёх тысяч просмотров статьи «Как написать свой Web-броузер на VB6». Естественно, она породила поток писем с вопросами и дополнениями, и так как письма приходят до сих пор, я решил ответить на самые типичные в этой статье. Пожалуй, самый распространенный вопрос – как открыть ссылку в новом окне? Кликнув на ссылке при нажатой клавише Shift вместо созданного нами броузера вдруг возникал IE и вся дальнейшая навигация осуществлялась с помощью его. Это можно исправить следующим способом: Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean) 'Открыть в новом окне (Shift+LeftButton) Dim frmWB As Browser ' так называется моя форма - Browser.frm Set frmWB = New Browser Set ppDisp = frmWB.WebBrowser1.Object frmWB.Visible = True Set frmWB = Nothing End Sub Следующий вопрос – как сделать прогресс загрузки страницы. Для этого понадобиться ProgressBar. Я использую стандартный, но можно любой, навороченный. Далее пишем код: Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long) 'Прогресс загрузки страницы ProgressBar1.Visible = True If ProgressMax = 0 Then ProgressMax = 100 ProgressBar1.Max = ProgressMax If Progress < 0 Then Progress = 0 ProgressBar1.Value = Progress End Sub Следующий вопрос – как увидеть адрес ссылки, на которой стоит курсор мышки. Ну, это совсем просто: Private Sub WebBrowser1_StatusTextChange(ByVal Text As String) 'При наведении курсора на ссылку она появляется в текстовом окне Text1.Text = Text End Sub Для этой цели можно использовать и Label.Caption = Text, кому что нравиться, дело вкуса. А если TextBox и ProgressBar разместить на StatusBar, то получиться прямо как в IE… А как получить весь список ссылок на страничке? И это возможно! Воспользуемся для этого ListBox. При нажатии на кнопку с надписью «Список» (у меня Command7) в ListBox отображаются все ссылки на адреса ”A” и картинки “IMG”: Private Sub Command7_Click() 'Список ссылок Dim allCol Dim TagName As String List1.Clear Set allCol = WebBrowser1.Document.All allcount = allCol.length For i = 0 To allcount - 1 TagName = allCol.Item(i).TagName If TagName = "IMG" Or TagName = "A" Then TagName = TagName & " - " & allCol.Item(i).href List1.AddItem (TagName) End If Next End Sub Последний вопрос, который я хотел бы рассмотреть в статье – как просмотренную страницу сохранить? Я покажу как это сделать из меню. Под сохранить я понимаю действия: - записать - записать как -распечатать, установив предварительно параметры страницы Первый пункт меню стандартно File с именем menuFile. При выборе этого пункта проверяется – возможны ли вышеперечисленные действия: Private Sub menuFile_Click() Dim status As Boolean status = (WebBrowser1.QueryStatusWB(OLECMDID_SAVE) And OLECMDF_ENABLED) Me.menuFileSave.Enabled = status status = (WebBrowser1.QueryStatusWB(OLECMDID_SAVEAS) And LECMDF_ENABLED) Me.menuFileSaveAs.Enabled = status status = (WebBrowser1.QueryStatusWB(OLECMDID_PAGESETUP) And OLECMDF_ENABLED) Me.menuFilePageSetup.Enabled = status status = (WebBrowser1.QueryStatusWB(OLECMDID_PRINT) And OLECMDF_ENABLED) Me.menuFilePrint.Enabled = status End Sub И в зависимости от переменной status определяется доступность подпунктов меню с характерными названиями - Save - Save As - PageSetup - Print
При выборе доступного пункта меню выполняются следующие процедуры:
Private Sub menuFileSave_Click() On Error Resume Next WebBrowser1.ExecWB OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT End Sub Private Sub menuFileSaveAs_Click() On Error Resume Next WebBrowser1.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_PROMPTUSER End Sub Private Sub menuFilePageSetup_Click() On Error Resume Next WebBrowser1.ExecWB OLECMDID_PAGESETUP, OLECMDEXECOPT_PROMPTUSER End Sub Private Sub menuFilePrint_Click() On Error Resume Next WebBrowser1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER End Sub При выполнении этих процедур возникают стандартные диалоги, привычные глазу пользователя Win. Ну вот, все что знал, рассказал. Если кто то знает больше – милости прошу – поделитесь с нами! В статье использовались письма читателей, разработки Microsoft – всем спасибо за участие. Виталий