Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.14;
Скачать: CL | DM;

Вниз

не вызывается Invoke   Найти похожие ветки 

 
Е-Моё имя ©   (2003-07-30 15:40) [0]

Помогите разобраться с проблемкой.
надо управлять опциями загрузки TWebBrowser.
в MSDN:
The WebBrowser Control gives you control over what it downloads, displays, and executes. To gain this control, you need to implement your host"s IDispatch so it handles DISPID_AMBIENT_DLCONTROL. When the WebBrowser Control is instantiated, it will call your IDispatch::Invoke with this ID. Set pvarResult to a combination of following flags, using the bitwise OR operator, to indicate your preferences.

и пример
STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,
LCID lcid, WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
switch (dispidMember)
{
case DISPID_AMBIENT_DLCONTROL:
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_NO_SCRIPTS;
break;

default:
return DISP_E_MEMBERNOTFOUND;
}

return S_OK;
}

------------------------
делаю себе на форме с браузером:
TMyForm = class(TForm, IDispatch)
...
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
...


реализация

function TMyForm.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
var
I: Integer;
begin
if DispId = DISPID_AMBIENT_DLCONTROL then begin ( VarResult) Помогите разобраться с проблемкой.
надо управлять опциями загрузки TWebBrowser.
в MSDN:
The WebBrowser Control gives you control over what it downloads, displays, and executes. To gain this control, you need to implement your host"s IDispatch so it handles DISPID_AMBIENT_DLCONTROL. When the WebBrowser Control is instantiated, it will call your IDispatch::Invoke with this ID. Set pvarResult to a combination of following flags, using the bitwise OR operator, to indicate your preferences.

и пример
STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,
LCID lcid, WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
switch (dispidMember)
{
case DISPID_AMBIENT_DLCONTROL:
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_NO_SCRIPTS;
break;

default:
return DISP_E_MEMBERNOTFOUND;
}

return S_OK;
}

------------------------
делаю себе на форме с браузером:
TMyForm = class(TForm, IDispatch)
...
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
...


реализация

function TMyForm.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
var
I: Integer;
begin
if DispId = DISPID_AMBIENT_DLCONTROL then begin !!!здесь бряк!!!
I := DLCTL_DOWNLOADONLY + DLCTL_NO_DLACTIVEXCTLS +
DLCTL_NO_RUNACTIVEXCTLS+DLCTL_DLIMAGES;
PVariant(VarResult)^ :=VT_I4;
PVariant(VarResult)^ := I;
Result := S_OK;
end else
Result := DISP_E_MEMBERNOTFOUND;
end;

так вот, Invoke не вызывается при создании формы, на бряке не останавливается, результата тоже нет.
Подскажите что неправильно делаю?


 
Е-Моё имя ©   (2003-07-30 16:43) [1]

эта... ну хоть ткните куда копать...


 
Е-Моё имя ©   (2003-07-30 17:19) [2]

эта... я так понял на своей форме так извратиться нельзя? только с компонентом? сделал компоненту-наследника от браузера, так получилось

спасибо за внимание к моему монологу.


 
nikkie ©   (2003-07-30 17:26) [3]

отгадай, куда я тебя хочу ткнуть :)

TEmbeddedWB - там есть событие OnInvoke


 
Е-Моё имя ©   (2003-07-30 17:45) [4]

;))
я думал уже его поставить, но он много чо хочет - обновлять библиотеки типов...не надо мне это

тем более практика полезная ;)

так а почему приведенный вариант не работает? если я свою форму наследую от IDispatch, почему не вызывается Invoke? или так и должно быть (есть какие-то правила)? почему в компоненте работает, а в форме нет?


 
nikkie ©   (2003-07-30 18:17) [5]

>но он много чо хочет - обновлять библиотеки типов
Не правда. Может ему нужны файлы типа mshtml_tlb.pas - это исходники, автоматически создаваемые delphi при импорте библиотеки типов. Либо импортируй их, либо замени в исходниках компоненты mshtml_tlb.pas на mshtml.pas. Просто в более ранних версиях Дельфи mshtml.pas отсутствовал, поэтому было необходимо осуществить импорт самому, а компонента написана с поддержкой тех версий Дельфи.

>так а почему приведенный вариант не работает?
To gain this control, you need to implement your host"s IDispatch ...
Дело в том, что форма не является хостом для этого ActiveX контрола. Хостирование осуществляет vcl-ный класс TOleControl, откоторого и пронаследован TWebBrowser.


 
Е-Моё имя ©   (2003-07-30 18:59) [6]

>>форма не является хостом для этого ActiveX контрола

вона как... понятно..



Страницы: 1 вся ветка

Текущий архив: 2003.08.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
14-45120
_toltec
2003-06-18 04:24
2003.08.14
Доступ контролу чужого процесса


14-45156
K.o.Z
2003-07-30 18:18
2003.08.14
Виртуальная память


14-44981
Alles
2002-12-11 15:38
2003.08.14
TNMPopup


14-45083
WMag
2003-06-14 23:26
2003.08.14
WM_PAINT и inherited


14-45151
K.o.Z
2003-07-30 18:04
2003.08.14
Жесткий диск