Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание WebBrowser`а средствами технологии COM средствами WinAPI


Страницы:   1 2

Klev ©   (2003-07-15 17:24:00) 

Hi All!
Нужно создать WebBrowser. Желательно без использования юнитов Sysutils, Comobj, Classes,... ,...
Сделать это можно, как выяснилось, только используя технологию COM.
Сначала я создал окно средствами WinApi, потом для создания собственно WebBrowser"a надо сделать примерно следующее:
CoInitialize(nil);
CoCreateInstance(...);
QueryInterface(...);
Далее следует создать оконный интерфейс в котором будет отображаться содержимое вебстраниц и использовать его в дальнейшем.

Но как это сделать остается загадкой 21 века.
Практических советов по этому вопросу я нигде не нашел.
Помогите пожалуйста решить данную нерешаемую проблему.


nikkie   (2003-07-17 16:42:00) [21]

>Marser
>То был "тонкий" намек на то, что на API прийдется начинать с нуля.

Да нет, никаких намеков :)
Я просто пытался чуть разобраться, что знает автор вопроса.

>Klev
>Вот бы где найти хорошую справку по COM на русском с примерами на delphi

Если начинать, то справка не поможет, нужна статья или книжка. Я читал про COM книгу Дейла Роджерсона "Основы COM" - хорошая книжка. Ее электронная версия есть здесь http://www.softzenware.com/ebook.htmlно если есть возможность, то лучше купить.

Примеры на дельфи есть в Delphi\Demos и Delphi\Source.

>Здесь интерфейс - это набор определенных методов, которые должны быть реализованы объектом COM, и которые "предоставляются" клиенту.
Но ведь иногда объекту COM нужно получать какую-то информацию от "клиента" или оповещать его о чем-то... А в COM все делается через интерфейсы. Значит, "клиент" или "хост" должен сам реализовать некоторые интерфейсы и дать возможность COM-объекту ими воспользоваться.

имхо, надо
1. добиться того, чтобы слова "реализовать интерфейс" были понятны
2. посмотреть какие интерфейсы реализует VCL для того, чтобы стать хостом ActiveX контролей (см. мой пост выше)
3. почитать в MSDN про эти интерфейсы, понять зачем они нужны и что является необходимым минимумом (вероятно, можно начать и с меньшего количества интерфейсов)
4. писать реализацию самому, пользуясь MSDN и сорсами VCL

ЗЫ сам я ActiveX не хостил :)


Klev   (2003-07-17 16:05:00) [22]

>[lamer]Barmaglot
Зашел я на сайт http://www.microsoft.com/Com/default.asp
и ничего там полезного найти не смог. Одна реклама чудо технологий COM, COM+, DCOM...
Про литературу разговоров много, да ничего скачать низя.
А от списка "рекомендуемых" книжек пользы мало.


Klev   (2003-07-17 15:46:00) [23]

Вот бы где найти хорошую справку по COM на русском с примерами на delphi.


[lamer]Barmaglot   (2003-07-17 11:09:00) [24]

Где начать с нуля? Ну наверное у того кто это придумал
http://www.microsoft.com/Com/default.asp


Klev   (2003-07-17 02:08:00) [25]

И самое странное, что в KOL & MCK кто-то пытался реализовать ActiveX, но почему-то получилось "не очень хорошо". Ни одна прога, написанная с KOL & MCK & ActiveX работать не захотела. Хотя у меня драйвера "Head.sys"&"Hand.sys" кажется установлены правильно.


Klev   (2003-07-17 02:00:00) [26]

>Marser
Да понятно, что с нуля. Только смотря где находится "нуль".


Klev   (2003-07-17 01:56:00) [27]

>nikkie
Где-то я уже видел похожий класс, а вернее не класс а интерфейс, и вроде даже в Activex.pas, и назывался он IOleWindow.
Да вот только у него методов поменьше было.
И совсем неясно как с помощью него создать окно.
Нет нужных методов.
Кстати IVCLFrameForm, используемый в OleCtnrs.pas явно взят из Stdvcl.dll.


Marser   (2003-07-17 01:38:00) [28]


> Klev (17.07.03 00:42)

То был "тонкий" намек на то, что на API прийдется начинать с нуля.


Klev   (2003-07-17 00:42:00) [29]

>nikkie
Здесь интерфейс - это набор определенных методов, которые должны быть реализованы объектом COM, и которые "предоставляются" клиенту.


nikkie   (2003-07-16 20:54:00) [30]

А какой смысл имеет слово "интерфейс" в COM знаешь?

Вообще-то, я говорил про OleCtnrs.pas, а не OleCtrls.pas, может и не прав был... В любом случае, думаю, стоит помедитировать над строчками:

OleCtnrs.pas
TOleContainer = class(TCustomControl, IUnknown, IOleClientSite,
( TWinControl, IUnknown, IOleClientSite,
IOleControlSite, IOleInPlaceSite, IOleInPlaceFrame, IDispatch,
IPropertyNotifySink, ISimpleFrameSite
)

А какой смысл имеет слово "интерфейс" в COM знаешь?

Вообще-то, я говорил про OleCtnrs.pas, а не OleCtrls.pas, может и не прав был... В любом случае, думаю, стоит помедитировать над строчками:

OleCtnrs.pas
TOleContainer = class(TCustomControl, IUnknown, IOleClientSite,
IOleInPlaceSite, IAdviseSink, IOleDocumentSite, IOleUIObjInfo)


OleCtrls.pas
TOleControl = class(TWinControl, IUnknown, IOleClientSite,
IOleControlSite, IOleInPlaceSite, IOleInPlaceFrame, IDispatch,
IPropertyNotifySink, ISimpleFrameSite)


Klev   (2003-07-16 19:43:00) [31]

>nikkie
Посмотрел я OleCtrls.pas. Действительно там есть некоторые функции типа TOleControl.CreateWnd. Но к сожалению они используют также axctrls.pas, controls.pas. Так же они используют библиотеку stdvcl.dll.
оконный интерфейс - средство взаимодействия программы с пользователем по средствам окна и его элементов управления.


nikkie   (2003-07-16 19:18:00) [32]

>надо сделать примерно следующее:
>CoInitialize(nil);
>CoCreateInstance(...);
>QueryInterface(...);
>Далее следует создать оконный интерфейс в котором будет отображаться >содержимое вебстраниц и использовать его в дальнейшем.

Судя по постановке вопроса, взялся ты за непосильную задачу.

>Вопрос кстати совершенно конкретный: как создать оконный интерфейс IE
Интересно было бы узнать, какой смысл ты вкладываешь в слово "интерфейс".

>см. Comobj ?
Мне кажется, все же смотреть надо на OleCtnrs.pas


Klev   (2003-07-16 18:59:00) [33]

>[lamer]Barmaglot
Вопрос кстати совершенно конкретный: как создать оконный интерфейс IE.
Этот вопрос я задал в самом начале.


[lamer]Barmaglot   (2003-07-16 14:42:00) [34]

Больно сложный вопрос ты задаешь. Чего конкретно тебе непонятно? Сам принцип Com? Или какие интерфейсы надо обрабатывать? Или ещё что-то? Конкретизируй, тогда возможно кто-то и ответит...


Klev   (2003-07-15 19:00:00) [35]

Есть еще некоторые соображения: Можно конечно обойтись и без COM.
Создаешь файл *.HTA, открываешь его с помощью shellexecute, ищешь окно, берешь его хендл, делаешь дочерним окном при помощи setparent, убираешь caption c помощью setwindowlong, делаешь updatewindow.
Вот так.
Правда при управлении таким образом созданным webbrowser"ом возникают большие проблемы.


Klev   (2003-07-15 18:05:00) [36]

>[lamer]Barmaglot
Да, конечно.
Но в Comobj все очень хорошо связано с SysUtils, Variants, итд
К тому же Comobj является связкой VCL и API.
В MsHtml, SHDocVw также все крепко привязано к VCL.


[lamer]Barmaglot   (2003-07-15 17:47:00) [37]

см. Comobj ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо