Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];
Внизне вызывается 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.111 c