Работа с несколькими экземплярами IE

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
agat344
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 22.09.2003 (Пн) 15:57

Работа с несколькими экземплярами IE

Сообщение agat344 » 13.02.2008 (Ср) 18:51

Как работать с одним экземпляром 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"



В этом случае всё создаётся правильно, но как обрабатывать события этих экземпляров не понятно.

Есть какие-нибудь варианты?
Желательно с текущим кодом.
[/list]

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.02.2008 (Ср) 19:20

agat344
Создать класс IEWindowEventHooker, а в нём написать

Код: Выделить всё
Public WithEvents MyWB As SHDocVw.InternetExplorer
Public EventServer As SomeOtherClassForExampleForm1
Private Sub MyWB_КакоеТоСобытиеКотороеТыХочешьОтловить
     EventServer.Event_КакоеТоСобытиеКотороеТыХочешьОтловить MyWB
End Sub

Private Sub MyWB_КакоеТоСобытие2КотороеТыХочешьОтловить(КакиеТоАргументы)
     EventServer.Event_КакоеТоСобытие2КотороеТыХочешьОтловить MyWB, КакиеТоАргументы
End Sub

Private Sub MyWB_КакоеТоСобытие3КотороеТыХочешьОтловить(КакиеТоАргументы1, КакиеТоАргументы2)
     EventServer.Event_КакоеТоСобытие3КотороеТыХочешьОтловить MyWB, КакиеТоАргументы1, КакиеТоАргументы2
End Sub


также создать класс SomeOtherClassForExampleForm1 (или использовать уже имеющуюся форму, в ней разместить

Код: Выделить всё
Private Sub Event_КакоеТоСобытиеКотороеТыХочешьОтловить (ByVal EventSender As SHDocVw.InternetExplorer)
    ' Судя сваливаются все события всех окон IE.
    ' Пользуясь аргументом EventSender, можем определить, от какого окна событие
End Sub

Private Sub Event_КакоеТоСобытие2КотороеТыХочешьОтловить (ByVal EventSender As SHDocVw.InternetExplorer, КакиеТоАргументы)
    ' Судя сваливаются все события всех окон IE.
    ' Пользуясь аргументом EventSender, можем определить, от какого окна событие
End Sub

Private Sub Event_КакоеТоСобытиеКотороеТыХочешьОтловить (ByVal EventSender As SHDocVw.InternetExplorer, КакиеТоАргументы1, КакиеТоАргументы2)
    ' Судя сваливаются все события всех окон IE.
    ' Пользуясь аргументом EventSender, можем определить, от какого окна событие
End Sub


При создании новых окон IE также создавать новые экземпляры IEWindowEventHooker (Set NewIEWindowEventHooker = new IEWindowEventHooker ) и делать им

Set NewIEWindowEventHooker.MyWB = wbrowser1(index)
Set NewIEWindowEventHooker.EventServer = Me

Разумеется, ссылки на объекты-хукеры надо держать (например, поместив их в коллекцию).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

agat344
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 22.09.2003 (Пн) 15:57

Сообщение agat344 » 14.02.2008 (Чт) 15:44

Ну я понимаю, что нужно написать примерно так -

Код: Выделить всё
Private Sub Wbrowser1_DocumentComplete(index As Integer, ByVal pDisp As Object, url As Variant)
MsgBox "Загрузка завершена"
End Sub



Здесь "index" будет передавать номер открытого окна массива.
Но как описать события несуществующего пока объекта?

Ведь так не опишешь -

Код: Выделить всё
Dim WithEvents wbrowser1(20) As SHDocVw.InternetExplorer


Это не работает.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 14.02.2008 (Чт) 15:48

Ну я понимаю, что нужно написать примерно так

Нет, так писать не нужно. Нужно делать так, как я описал.

Ты, судя по всему, совершенно не понял ничего из того, что я описал. Жалко. Много времени потратил на описание.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

agat344
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 22.09.2003 (Пн) 15:57

Сообщение agat344 » 14.02.2008 (Чт) 16:25

Хакер писал(а):
Ты, судя по всему, совершенно не понял ничего из того, что я описал. Жалко. Много времени потратил на описание.


Нет, это я всё понял. Просто хотелось как-нибудь проще.
Например, как в WebBrowser, который добавлен на форму.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.02.2008 (Чт) 16:53

Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: The trick и гости: 28

    TopList  
cron