msvb - Visual Basic - авторский сайт
 
Главная
Документы
Обзоры программ
Гостевая книга
 
Материалы раздела:

Использование WebBrowser и MSHTML в VB. Часть 1

В этой статье пойдёт речь об использовании лежащего в основе Internet Explorer элемента управления WebBrowser, и библиотеки Microsoft HTML Object Library (MSHTML). Имеет смысл рассказывать о них именно в связке, так как главная функция WebBrowser - отображать HTML документы, а MSHTML описывает и управляет структурой этих документов.

Области применения

Результат использования WebBrowser для создания интерфейса можно оценить на примере vb-программы PharmGuide надстройки Excel DataExtract

Включение элемента управления WebBrowser и библиотеки MSHTML в состав проекта

Для подключения браузера необходимо открыть меню Project / Components и выбрать компонент 'Microsoft Internet Controls' соответствующий файлу shdocvw.dll. В VBA проектах он называется 'Oбoзpeвaтeль вeб-cтpaниц (Microsoft)'.

Если вы намерены использовать в программе возможности динамического html - необходимо подключить библиотеку MSHTML. Меню Project / References и выбрать компонент 'Microsoft HTML Object Library' соответствующий файлу MSHTML.TLB.

Оба файла входят в состав всех версий Windows и существенных проблем с переносимостью кода быть не должно.

Способы загрузки содержания

Элемент управления WebBrowser предназначен для отображения html документов. Существует несколько способов определить содержимое этого документа.

Метод Navigate

В зависимости от источника документа используя различные протоколы:

  • HTTP:// - для доступа к файлам в сети интернет
  • FILE:// - для работы с локальными файлами
  • RES:// - для работы с файлами ресурсов
  • ABOUT: - для получения связанной с браузером информации

Есть и другие протоколы: HTTPS, FTP, ALP, MAILTO, MK. Последний используется в файлах справки (chm).

протокол about: прежде всего известен в качестве пустой страницы загрузки about:blank. На самом деле это не пустая страница. Она имеет вполне определённый адрес: res://mshtml.dll/blank.htm

К сожалению некоторые программы могут подменять этот адрес и в результате вместо быстрой загрузки пустого документа будет происходить долгая загрузка некой страницы из интернет. Для предотвращения этого можно напрямую вызывать эту страницу. Важным свойством этого протокола является возможность загрузки небольших html документов непосредственно из адресной строки.

Вот самый простой пример использования браузера.

  • Создайте новый проект и сохраните его
  • Создайте файл sample.htm в директории проекта c текстом "<html><body><b>привет</b></body></html>"
  • Подключите элемент управления WebBrowser, как показано выше и разместите его на форме
  • в коде формы добавить:
Private Sub Form_Load()
    WebBrowser1.Navigate App.Path & "\sample.htm"
End Sub

Вот пример загрузки данных из ресурсов:

Private Sub Form_Load()
    WebBrowser1.Navigate "res://shdoclc.dll/about.dlg"
End Sub

Использование протокола 'about'

Private Sub Form_Load()
    WebBrowser1.Navigate "about:<b>привет</b>"
End Sub

Данные, загружаемые из ресурсов должны находиться в разделе 'HTML'

Существует и нестандартный способ загрузки страницы при старте программы. Для этого необходимо открыть файл frmMain.frm и найти в разделе 'Begin SHDocVwCtl.WebBrowser WebBrowser1' строку 'Location = ""'. Это путь к документу, по умолчанию. Если его заменить на 'Location = "about:<b>привет</b>"', то слово 'привет' будет автоматически отображаться в браузере, даже в режиме конструктора.

Загрузка html кода из оперативой памяти

Способ основан на использовании динамического html, поэтому в состав проекта необходимо включить библиотеку mshtml. Для начала необходимо создать новый объект Document, а затем воспользоваться методом Write.

Private Sub Form_Load()
    Dim mStr As String
    Dim mDoc As MSHTML.IHTMLDocument
    
    'загрузка простого документа
    WebBrowser1.navigate "res://mshtml.dll/blank.htm"
    While WebBrowser1.document Is Nothing
    'ждём создания документа
        DoEvents
    Wend
    Set mDoc = WebBrowser1.document
    mStr = "<html><body><b>привет</b></body></html>"
    'меняем содержание всего документа
    mDoc.Write mStr
    Set mDoc = Nothing
End Sub

Формирование html документа путём добавления новых элементов

Для вывода информации не обязательно загружать новый файл. Есть возможность добавлять новые элементы документа или изменять существующие. Сначала необходимо получить элемент содержание которого надо поменять. Для этого существует множество способов. Удобнее всего обращаться к элементу по его уникальному идентификатору.
Ex: 'mDoc.all.Table1' или 'mDoc.getElementById("Table1")'
Если нет идентификатора, можно использовать метод getElementsByTagName
Ex: 'mDoc.getElementsByTagName("body").Item(0)'.
После того, как нужный элемент получен - можно менять его свойства и использовать его методы. Для добавления html кода используется свойство 'InnerHtml', для добавления текста - 'InnerText'. Для некоторых элементов удобнее пользоваться специальными методами. Например, использовать 'insertRow' для добавления новых строк в таблицу. Информацию об этих других свойствах и методах можно получить в
msdn.

Private Sub Form_Load()
    Dim mStr As String
    Dim mDoc As MSHTML.IHTMLDocument
    Dim mDiv As MSHTML.HTMLDivElement
    'загрузка простого документа
    WebBrowser1.navigate "res://mshtml.dll/blank.htm"
    While WebBrowser1.document Is Nothing
    'ждём создания документа
        DoEvents
    Wend
    Set mDoc = WebBrowser1.document
    mStr = "<html><body><div id=num1></div></body></html>"
    'меняем содержание всего документа
    mDoc.Write mStr
    'получаем элемент div по его идентифекатору
    Set mDiv = mDoc.All.num1
    'меняем содержание div
    mDiv.innerHTML = "<b>привет</b>"
    Set mDiv = Nothing
    Set mDoc = Nothing
End Sub

Источники информации

Найти эти документы можно через поисковики

В следующей статье речь пойдёт о перехвате и обработке событий в html документах.



 
Copyright © 2004—2005 marvan
msvb@yandex.ru
http://site-builders.ru/. | Hosted by uCoz