WebBrowser и MSHTML - ряд вопросов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

WebBrowser и MSHTML - ряд вопросов

Сообщение marvan » 24.08.2004 (Вт) 9:52

1. В чём отличие MSHTML.HTMLDocument и MSHTML.IHTMLDocument и в каких случаях кого использовать
2. Тот же вопрос для классов с цифрами, таких как IHTMLElement, IHTMLElement2, IHTMLElement3, IHTMLElement4
3. Как заставить WebBrowser отображать кнопки и текстовые поля с использованием стилей XP. (использование Project1.EXE.manifest или InitCommonControlsEx) не помогает
4. Как используя MSHTML добраться до тега <BASE HREF=...>
5. Как загружать изображения в документ не из файла. (а то некрасиво получается: html гружу методом write, а картинки грузятся с диска)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 24.08.2004 (Вт) 10:39

1. HTMLDocument это объект. IHTMLDocument это интерфейс.
2. Версии объектов. В IXX3 есть что-то, чего нет в IXX2. Просто для совместимости когда появляються новые возможности старые интерфейсы сохраняються, а новые обозначаються с цифрой версией.
3. -- А у тебя какой Windows?
4. getElementsByTagName или getElementsBy... И выбираем подходящий.
5. --
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 24.08.2004 (Вт) 11:26

ANDLL писал(а):1. HTMLDocument это объект. IHTMLDocument это интерфейс.

Это я догадался, но не понимаю в каких случаях кого использовать
например:
Код: Выделить всё
'это не работает
'Dim WithEvents iDoc As MSHTML.IHTMLDocument
'а это работает
Dim iDoc As MSHTML.IHTMLDocument
Dim WithEvents mDoc As MSHTML.HTMLDocument

Dim iDiv As MSHTML.IHTMLDivElement
Dim WithEvents mDiv As MSHTML.HTMLDivElement

Private Sub Form_Load()
    Dim mStr As String
    mStr = "<html><body><div id=num1>текст<div></body></html>"
    WebBrowser.navigate "about:blank"
    Set mDoc = WebBrowser.document
    Set iDoc = WebBrowser.document
    'это не работает
    'mDoc.write mStr
    'а это работает
    iDoc.write mStr
   
    'а здесь вроде как всё равно?
    Set mDiv = mDoc.All.num1
    Set mDiv = iDoc.All.num1
End Sub

Private Sub mDiv_onmousedown()
    MsgBox ("mousedown")
End Sub

ANDLL писал(а):2. Версии объектов. В IXX3 есть что-то, чего нет в IXX2. Просто для совместимости когда появляються новые возможности старые интерфейсы сохраняються, а новые обозначаються с цифрой версией.

ну и как поступать то:
Код: Выделить всё
    Dim objElement As MSHTML.IHTMLElement
    'или
    Dim objElement As MSHTML.IHTMLElement3

ANDLL писал(а):3. -- А у тебя какой Windows?

XP
ANDLL писал(а):4. getElementsByTagName или getElementsBy... И выбираем подходящий.

спасибо, всё получилось.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2004 (Вт) 22:16

Имхо всегда стоит использовать MSHTML.HTMLDocument, вместо MSHTML.IHTMLElement(X).
VB сам разберётся что к чему.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.09.2004 (Ср) 7:53

MSHTML.HTMLDocument означает, что VB выбирает наивысшию(или наинизшую) допустимую версию. Если на компе пользователя будет DLL более низвой версии, програ работать не будет. Т.е. без нужды лучше использовать объекты с минимальной версией. Или поставлять с программой компоненты последних версий, что пожалуй даже лучше.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 01.09.2004 (Ср) 9:45

2 tyomitch
да я бы рад разделить свою судьбу с MSHTML.HTMLDocument, но как быть:
Код: Выделить всё
Dim WithEvents iDoc As MSHTML.IHTMLDocument 'это не работает
Dim WithEvents mDoc As MSHTML.HTMLDocument 'а это работает
...
mDoc.write mStr 'это не работает
iDoc.write mStr 'а это работает

почему IHTMLDocument не хочет ловить события, но справляется с методом write, а HTMLDocument наоборот

как то некрасиво подучается - приходится использовать обоих.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.09.2004 (Ср) 13:04

WithEvents не работает для интерфейсов. Только для классов, реализующих специальный интерфейс, IConnectionPoint, кажеться как-то так.

Метод write по каким-тр причинам не правильно указан в библиотеке типов.
Использую так:
Код: Выделить всё
Dim iDoc As MSHTML.IHTMLDocument
Dim WithEvents mDoc As MSHTML.HTMLDocument
set mDoc =New ...
set iDoc =mDoc
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 01.09.2004 (Ср) 13:33

Метод write по каким-тр причинам не правильно указан в библиотеке типов.

т.е. как это? был бы указан правильно - стал бы работать?

Ещё один вопросы:
6. Как лучше обращаться к элементам?
mDoc.All.num1
или
mDoc.All.("num1")
или ещё как?
7. Какие существуют способы оптимизации работы с shdocvw и mshtml?
единственное что мне известно, - лучше использовать WebBrowser.document.write вместо WebBrowser.navigate

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.09.2004 (Ср) 18:58

marvan писал(а):т.е. как это? был бы указан правильно - стал бы работать?

Да.
6.
marvan писал(а):mDoc.All.("num1")

По моему, это syntax error. Но суть ясна. Быстрее 2 метод, т.к. у функции по умолчанию меньше параметров, чем у Invoke. Хотя быстродействие ты вряд ли заметишь.
7.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.09.2004 (Ср) 19:18

ANDLL писал(а):WithEvents не работает для интерфейсов. Только для классов, реализующих специальный интерфейс, IConnectionPoint, кажеться как-то так.

Не совсем так - для классов, у которых в tlb указан [default, source] интерфейс. В этом случае, в частности, объект должен реализовывать IConnectionPointContainer и IConnectionPoint.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

    TopList