Как работать с одним экземпляром Internet Explorer я знаю —
Dim WithEvents wbrowser1 As SHDocVw.InternetExplorer
Private Sub Form_Load()
Set wbrowser1 = CreateObject("InternetExplorer.Application")
wbrowser1.Navigate ("http://www.mail.ru")
End Sub
Private Sub Wbrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
MsgBox "Загрузка завершена"
End Sub
А как создать и главное обрабатывать события нескольких IE мне не понятно.
Единственное что мне пришло в голову, это объявить объект как массив элементов и создавать новый экземпляр как элемент этого массива —
Dim wbrowser1(20) As Object
index = 0
Set wbrowser1(index) = CreateObject("InternetExplorer.Application")
index = index + 1
wbrowser1(index).Navigate "http://www.mail.ru"
В этом случае всё создаётся правильно, но как обрабатывать события этих экземпляров не понятно.
Есть какие-нибудь варианты?
Желательно с текущим кодом.
Здравствуйте, agat344, Вы писали:
A>Как работать с одним экземпляром Internet Explorer я знаю -
A>A>Dim WithEvents wbrowser1 As SHDocVw.InternetExplorer
A>Private Sub Form_Load()
A>Set wbrowser1 = CreateObject("InternetExplorer.Application")
A>wbrowser1.Navigate ("http://www.mail.ru")
A>End Sub
A>Private Sub Wbrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
A>MsgBox "Загрузка завершена"
A>End Sub
A>
A>А как создать и главное обрабатывать события нескольких IE мне не понятно.
A>Единственное что мне пришло в голову, это объявить объект как массив элементов и создавать новый экземпляр как элемент этого массива -
A>A>Dim wbrowser1(20) As Object
A>index = 0
A>Set wbrowser1(index) = CreateObject("InternetExplorer.Application")
A>index = index + 1
A>wbrowser1(index).Navigate "http://www.mail.ru"
A>
A>В этом случае всё создаётся правильно, но как обрабатывать события этих экземпляров не понятно.
A>Есть какие-нибудь варианты?
A>Желательно с текущим кодом.
Создай отдельный класс и создавай отдельный экземпялр класса для перехвата событий каждого экземпляра InternetExplorer.Application
class: InternetExplorerHolder:
Dim WithEvents wbrowser1 As SHDocVw.InternetExplorer
Public Sub Initilize(ByVal url as String)
Set wbrowser1 = CreateObject("InternetExplorer.Application")
wbrowser1.Navigate url
end Sub
' Всю логику обработки событий IE, перенести из основной формы сюда.
Private Sub Wbrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
MsgBox "Загрузка завершена"
End Sub
На твоей старой форме:
Dim Holders as New Collection
private Sub AppendExplorer(ByVal url as String)
Dim Holder as InternetExplorerHolder
Set Holder = New InternetExplorerHolder
Holder.Initilize url
Holders.Add Holder
end sub
Private Sub Form_Load()
AppendExplorer "http://www.mail.ru"
AppendExplorer "http://www.ya.ru"
...
End Sub
Я при работе с IE создавал два класса, один — обертка IE, второй коллекция оберток.
Первый отслеживает события IE, второй отслеживает их открытие, закрытие и удаляет из коллекции обертку, если соответствующий IE закрыт.
Если нужно могу поискать код классов.