Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.26.20] |
|
Сообщ.
#1
,
|
|
|
Вторая редакция
Будем исходить из того, что объектная модель ИЕ дает нам возможность реагировать на события, и главное для нас грамотно получить возможность реагировать на них. Для этого в проекте нужно создать ссылки на объекты: Microsoft HTML Object Library и Microsoft Internet Controls (Меню Project>Reference shdocvw.dll и mshtml.tlb) Далее нам нужно создать класс, отвечающий за работу с окном ИЕ. Он должен выглядеть так: clsBrowser Option Explicit Dim WithEvents brows As WebBrowser Dim HTMLdoc As HTMLDocument Public Sub Attach(ByVal obj As WebBrowser) Set brows = obj End Sub 'Здесь можно обрабатывать Загруженный документ Private Sub brows_DocumentComplete(ByVal pDisp As Object, URL As Variant) 'пустые страницы игнорировать If brows.LocationURL = "about:blank" Then Exit Sub Set HTMLdoc = brows.document 'выведем на экран содержимое документа, что бы было понятно, что это работает MsgBox HTMLdoc.documentElement.innerHTML End Sub Private Sub Class_Terminate() Set brows = Nothing Set HTMLdoc = Nothing End Sub Поясняю вышеизложенный код - метод Attach вернет в наш класс объект HTMLBrowser, тот самый, который отвечает за отображение страницы. Получив этот объект мы приобретаем доступ к его свойствам, методам и событиям. Одно из событий для наглядности я сразу и реализовал – DocumentComplete, оно происходит при полной загрузке документа, в нем содержимое документа будет выведено в MsgBox'e . Вам никто не мешает реализовать свой код для обработки этого или любого другого события из имеющихся у объекта WebBrowser. Теперь нам нужен класс назначающий уже открытым окнам ИЕ наш обработчик clsBrowser и добавляющий его новым создаваемым окнам ИЕ. В основе его работы лежит объект ShellWindows из Microsoft Internet Controls. В моём случае код немного громоздкий и извращенный, но других мыслей по этому поводу у меня нет, а код от этого хуже работать не будет, а может даже и лучше. Вот код: clsIE_Control Option Explicit Dim WithEvents IShellWindows As ShellWindows Dim BrowsersSpy() As New clsBrowser 'Назначение контролов уже открытым окнам ИЕ Private Sub Class_Initialize() Set IShellWindows = New ShellWindows AttachAll End Sub 'Чистим мусор Private Sub Class_Terminate() Set IShellWindows = Nothing DetachAll ReDim BrowsersSpy(0) End Sub 'связываем вновь созданное окно ИЕ с нашим объектом Private Sub IShellWindows_WindowRegistered(ByVal lCookie As Long) ReDim Preserve BrowsersSpy(0 To IShellWindows.Count) BrowsersSpy(IShellWindows.Count - 1).Attach ByVal IShellWindows.Item(IShellWindows.Count - 1) End Sub 'связываем окна ИЕ с нашими объектами Private Sub AttachAll() Dim i As Integer ReDim BrowsersSpy(0 To IShellWindows.Count) For i = 0 To IShellWindows.Count - 1 BrowsersSpy(i).Attach ByVal IShellWindows.Item(i) Next i End Sub 'разрываем связь между окнами ИЕ и чистим массив от объектов Private Sub DetachAll() Dim i As Integer For i = 0 To UBound(BrowsersSpy) Set BrowsersSpy(i) = Nothing Next i End Sub 'обрабатываем закрытие одного из окон Private Sub IShellWindows_WindowRevoked(ByVal lCookie As Long) DetachAll AttachAll End Sub Как вы поняли из кода, он просто следит за изменениями в объекте ShellWindows, который реагирует на создание окна ИЕ и его уничтожение. В случае создания окна мы получаем к нему доступ, создаем экземпляр нашего clsBrowser и передаем ему через метод Attach объект WebBrowser, что бы он мог сделать всю дальнейшую работу. Теперь последняя деталь, нам нужно объявить переменную класса clsIE_Control и инициализировать ее. Для этого предлагаю сделать форму и в ней разместить следующий код: Dim myIE As clsIE_Control Private Sub Form_Load() Set myIE = New clsIE_Control End Sub Private Sub Form_Unload(Cancel As Integer) Set myIE = Nothing End Sub Наша программа готова, она должна выводить массажбокс с хтмл-содержимым любой страницы, загруженной любым окном ИЕ. Но нам ничто не мешает в clsBrowser реализовать код, реагирующий на любые другие события, которые предоставляет WebBrowser. Желаю успехов! |