Примеры нетривиального использования WebBrowser в Delphi?
От: Аноним  
Дата: 24.09.02 11:09
Оценка:
Никак не могу найти толковых примеров не совсем тривиального использования WebBrowser в Delphi... Перерыл кучу книг, пытался найти в интернете, а ничего не находится... Если есть какие-то примеры, то для имбицилов, в стиле "поместите контрол на форму и теперь можно даже вызвать несколько классных методов!". Идея в том, что мне нужно поиметь доступ к загруженному HTML-документу, а это, как выясняется, нужно делать через интерфейс IDispatch. Но как? Учитывая полное отсутствие опыта в работе с COM/OLE хотелось бы посмотреть на конкретные примеры, как это сделано именно с WebBrowser. Но увы...

Может, кто-нибудь подскажет, где найти толковые материалы по теме?
Буду безмерно благодарен...
Re: Примеры нетривиального использования WebBrowser в Delphi
От: Максим Алексейкин Россия  
Дата: 24.09.02 12:18
Оценка:
Здравствуйте Аноним, Вы писали:

А>Никак не могу найти толковых примеров не совсем тривиального использования WebBrowser в Delphi... Перерыл кучу книг, пытался найти в интернете, а ничего не находится... Если есть какие-то примеры, то для имбицилов, в стиле "поместите контрол на форму и теперь можно даже вызвать несколько классных методов!". Идея в том, что мне нужно поиметь доступ к загруженному HTML-документу, а это, как выясняется, нужно делать через интерфейс IDispatch. Но как? Учитывая полное отсутствие опыта в работе с COM/OLE хотелось бы посмотреть на конкретные примеры, как это сделано именно с WebBrowser. Но увы...

А>Может, кто-нибудь подскажет, где найти толковые материалы по теме?

Материалов не видел, но могу привести пример доступа к таблицам в HTML странице (на VB, в Дельфе думаю примерно также должно выглядеть):
' эта процедура удаляет все строки из таблицы
' WB - WebBrowser control на форме
' tabId - ID таблицы, атрибут ID в тэге <table> 
Public Sub Table_Del_Rows (tabId As String, WB As Object)
Dim table As Object
Dim l As Integer
Dim i As Integer
    '
    Select Case tabId
    Case "Status"
        Set table = WB.Document.All("Status")
    Case "Attrs"
        Set table = WB.Document.All("Attrs")
    Case Else
        MsgBox "Del Rows: Unknown table ID " & tabId, vbCritical Or vbOKOnly
        Exit Sub
    End Select
    If table.rows.length > 1 Then
        l = table.rows.length
        For i = 1 To (l - 1)
            table.deleteRow (0)
        Next i
    End If
End Sub

' эта процедура добавляет строки, столбци в эти строки и данные в столбцы
Public Sub Table_Add_Rows (tabId As String, Name As String, val As String, WB As Object)
Dim newRow As Object, newName As Object, newImg As Object, newVal As Object
    '
    Select Case tabId
    Case "Status"
        Set newRow = WB.Document.All("Status").insertRow()
    Case "Attrs"
        Set newRow = WB.Document.All("Attrs").insertRow()
    Case Else
        MsgBox "Add Rows: Unknown table ID " & tabId, vbCritical Or vbOKOnly
        Exit Sub
    End Select
        
    Set newName = newRow.insertCell()
    newName.Style.backgroundColor = "#ff9966"
    newName.innerText = Name
    Set newImg = newRow.insertCell()
    newImg.Style.backgroundColor = "#ffffff"
    Set newVal = newRow.insertCell()
    newVal.Style.backgroundColor = "#e3e3e3"
    newVal.innerText = val
    '
End Sub

В примере:
1 — HTML документ написан мной, поэтому я знаю его структуру. лежит в ресурсах программы.
2 — WB это WebBrowser контрол от MS. Лежит на форме.
3 — Status и Attrs это две таблицы в HTML документе.

Удачи.
ICQ #311116826
Re[2]: Примеры нетривиального использования WebBrowser в Del
От: Аноним  
Дата: 24.09.02 12:27
Оценка:
Здравствуйте Максим Алексейкин, Вы писали:

МА> Set table = WB.Document.All("Status")


В Delphi так просто нельзя поиметь доступ к свойству Document, только через интерфейс IDispatch, и именно подключение к нему (или как там это называется) является основной проблемой... Точнее даже не проблемой, а я просто не знаю, как это сделать. А в Твоём примере я этого не нашёл, увы... Или я чего-то недопонимаю?
Re[3]: Примеры нетривиального использования WebBrowser в Del
От: Максим Алексейкин Россия  
Дата: 24.09.02 12:35
Оценка:
Здравствуйте Аноним, Вы писали:

А>Здравствуйте Максим Алексейкин, Вы писали:


МА>> Set table = WB.Document.All("Status")


А>В Delphi так просто нельзя поиметь доступ к свойству Document, только через интерфейс IDispatch, и именно подключение к нему (или как там это называется) является основной проблемой... Точнее даже не проблемой, а я просто не знаю, как это сделать. А в Твоём примере я этого не нашёл, увы... Или я чего-то недопонимаю?


Вообще я не в курсе позволяет Делфи также легко работать с IDispatch как и VB (разве он не клиент автоматизации?).
Но если не позволяет тогда могу накатать сюда перевод описания IDispatch c методами (нужен в общемто только Invoke и GetIDsOfNames) ну и, если лень не будет примерчик.
Удачи.
ICQ #311116826
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.