Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sharpc.livejournal.com
 Профиль | | #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
Option Explicit

Public Sub DocumentComplete(ByVal Index As Long, wb As SHDocVw.InternetExplorer)
    
End Sub


Класс WBArray
Option Explicit

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


Форма
Option Explicit

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

Ну и батон не забудьте :)
(с) - Я & Гуголь :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам