Страница: 1 |
Страница: 1 |
Вопрос: Работа с несколькими экземплярами IE
Добавлено: 13.02.08 18:24
Автор вопроса: Отец Сергий | ICQ: 97578841
Как работать с одним экземпляром 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"
В этом случае всё создаётся правильно, но как обрабатывать события этих экземпляров не понятно.
Есть какие-нибудь варианты?
Желательно с текущим кодом.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 14.02.08 00:33
Ну примерно так же.. как ты обрабатывал бы собития массивая WebBrowserControl'ов если бы все они были на форме?
Номер ответа: 2
Автор ответа:
Отец Сергий
ICQ: 97578841
Вопросов: 6
Ответов: 3
Профиль | | #2
Добавлено: 14.02.08 14:52
Ну я понимаю, что нужно написать примерно так -
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
Это не работает.
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 15.02.08 01:14
Попробуй заверни в класс...
Номер ответа: 4
Автор ответа:
Отец Сергий
ICQ: 97578841
Вопросов: 6
Ответов: 3
Профиль | | #4
Добавлено: 15.02.08 10:10
Это как?
Поподробнее можно?
Хотя бы пример что-ли....
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 15.02.08 19:30
Мне кажется, или в последнее время слово «пример» стало синонимом «напиши за меня»?
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 16.02.08 00:25
вообще интересная тема, оказывается тут не всё так просто Я например напрочь уже забыл что такое имплементация, как создавать интерфейсы к классам итп.. а здесь такой бы подгод достаточно красиво выглядел. Щас наверное погуглю про классы, та попробую таки "написать за него" А то уж сильно зацепила меня тема ))
Номер ответа: 7
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #7
Добавлено: 16.02.08 00:59
если на .NET, то больше подойдут threads
для каждого объекта создаешь новый поток.
объявляешь делегат и вызываешь через invoke
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 16.02.08 03:20
та то понятно Я тоже сразу про это подумал, но инетересно на вб6
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 16.02.08 05:07
гы, получилось 2 класса и форма...
Класс IWBArrayEvents
Public Sub DocumentComplete(ByVal Index As Long, wb As SHDocVw.InternetExplorer)
End Sub
Класс WBArray
Public WithEvents wb As SHDocVw.InternetExplorer
Dim m_EventSink As IWBArrayEvents
Dim m_Index As Long
'
Private Sub Class_Initialize()
Set wb = CreateObject("InternetExplorer.Application"
End Sub
Private Sub Class_Terminate()
Set wb = Nothing
End Sub
Public Property Get Index() As Long
Index = m_Index
End Property
Public Property Let Index(ByVal newIndex As Long)
m_Index = newIndex
End Property
Public Property Get EventSink() As IWBArrayEvents
Set EventSink = m_EventSink
End Property
Public Property Set EventSink(ByRef newEventSink As IWBArrayEvents)
Set m_EventSink = newEventSink
End Property
Public Sub Wb_DocumentComplete(ByVal pDisp As Object, url As Variant)
Call m_EventSink.DocumentComplete(Index, wb)
End Sub
Форма
Implements IWBArrayEvents
Dim MyWBs(1) As WBArray
Private Sub Command1_Click()
Dim i As Long
For i = 0 To UBound(MyWBs)
Set MyWBs(i) = New WBArray
Set MyWBs(i).EventSink = Me
MyWBs(i).Index = i
Next
Call MyWBs(0).wb.Navigate("http://ya.ru"
Call MyWBs(1).wb.Navigate("http://r0.ru"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Long
For i = 0 To UBound(MyWBs)
Set MyWBs(i) = Nothing
Next
End Sub
Private Sub IWBArrayEvents_DocumentComplete(ByVal Index As Long, wb As SHDocVw.InternetExplorer)
Debug.Print "Event on WB(" & Index & " !"
Debug.Print wb.LocationName
Debug.Print "= = = = = = = = = = = = = = = = = ="
Beep
End Sub
Ну и батон не забудьте
(с) - Я & Гуголь