procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to (WebBrowser1.OleObject.Document.frames.Length - 1) do
if WebBrowser1.OleObject.Document.frames.item(i).document.queryCommandEnabled('Copy') then
ShowMessage('copy command is enabled for frame no.' + IntToStr(i));
end;
Webbrowser Вопрос не из простых...
2) Как обновить конкретный фрейм через webbrowser? (Webbrowser.refresh или Webbrowser.refresh2 - обновляют весь сайт, а мне нужно обновить только один фрейм из Н-ного количества загруженных...)
В интеренте искал, не нашел, паникую :(
Код:
[/QUOTE]
вебброузер - это сервис эксплорера, отдельно для него насколько мне известно отключить картинки нельзя. Отключение будет происходить для всей системы (т.е. для самого эксплорера, для броузеров построенных на его базе типа myIE и т.д.)
Процедурка правки записи в реестре тебя не устраивает? тогда имхо никак
2) Как обновить конкретный фрейм через webbrowser? (Webbrowser.refresh или Webbrowser.refresh2 - обновляют весь сайт, а мне нужно обновить только один фрейм из Н-ного количества загруженных...)
В интеренте искал, не нашел, паникую :([/QUOTE]
У меня пока только 1 ответ:"Никак".В этом нам помог великий еб**й Гейтс созданием очередного своего идиотского Exploler'а,а Twebbrowser как раз использует его движок.Посмотрев все проги написанные на его движке(Maxton там и тп) и самого експлолера,можешь убедиться,что там нету таких приблуд,и если ты выключишь в одной из таких прог картинки-в експлолере будет анологично...(
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to (WebBrowser1.OleObject.Document.frames.Length - 1) do
if WebBrowser1.OleObject.Document.frames.item(i).document.queryCommandEnabled('Copy') then
ShowMessage('copy command is enabled for frame no.' + IntToStr(i));
end;
var
i: integer;
begin
for i := 0 to (WebBrowser1.OleObject.Document.frames.Length - 1) do
if WebBrowser1.OleObject.Document.frames.item(i).document.queryCommandEnabled('Copy') then
ShowMessage('copy command is enabled for frame no.' + IntToStr(i));
end;
Как с фреймами работать я знаю, но проблема в том, как обновить этот самый фрейм.....
Оно именно так и работает!
Flamer, вот кусок кода (сорри, что на D), который отрубает картинки:
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
Variant(VarResult^) := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
Смысл в том, что надо перегрузить IDispatch::Invoke(), и отлавливать нужный дисп_ид.
Полная инфа по этому поводу доступна на MSDN: WebBrowser Customization
http://rsdn.ru/Forum/?mid=191577
Вот ссылка с описанием этих процедур, но я там ничего не понял :(
Может вы поймете, и обьясните?
Вот ссылка с описанием этих процедур, но я там ничего не понял :(
Может вы поймете, и обьясните?
попробуй так..... в uses нужно включить mshtml
Код:
var
Doc: IHTMLDocument2;
v: olevariant;
begin
Doc := WebBrowser1.OleObject.Document.frames.item(0).document as IHTMLDocument2;
Doc.execCommand('Refresh', True, v);
end;
Doc: IHTMLDocument2;
v: olevariant;
begin
Doc := WebBrowser1.OleObject.Document.frames.item(0).document as IHTMLDocument2;
Doc.execCommand('Refresh', True, v);
end;
Оно именно так и работает!
Flamer, вот кусок кода (сорри, что на D), который отрубает картинки:
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
Variant(VarResult^) := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
Смысл в том, что надо перегрузить IDispatch::Invoke(), и отлавливать нужный дисп_ид.
Полная инфа по этому поводу доступна на MSDN: WebBrowser Customization[/QUOTE]
Код:
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
пишешь в секции Interface.... после type
Код:
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
Variant(VarResult^) := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
Variant(VarResult^) := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
это пишешь в секции Implementation.....
потом программно создаешь браузер..... не TWebBrowser, а TMyBrowser...
либо создаешь новый визуальный компонент... регистрируешь его.... и пользуешься как обычным TWebBrowser (кидаешь на форму, устанавливаешь свойства и тд.)
"Operator not applicable to this operand typ"
Что делать?
Код:
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
пишешь в секции Interface.... после type
Код:
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
Variant(VarResult^) := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
Variant(VarResult^) := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
это пишешь в секции Implementation.....
потом программно создаешь браузер..... не TWebBrowser, а TMyBrowser...
либо создаешь новый визуальный компонент... регистрируешь его.... и пользуешься как обычным TWebBrowser (кидаешь на форму, устанавливаешь свойства и тд.)[/QUOTE]
Что то не пашет.... Вставил все как надо, картинки все равно есть :(
Я же говорил, что вопрос не из простых.....
Ну что? Мне никто не поможет до конца???? :confused: :confused: :confused:
Вот тебе текст файлика MyBrowser.pas.... там компонент... зарегистрируй его... ошибки исправил... картинки он теперь не грузит (как и видео, как и звуки)....
Код:
unit MyBrowser;
interface
uses
SysUtils, Classes, ActnList, ShDocVw, ActiveX;
type
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
procedure Register;
implementation
uses Variants;
procedure Register;
begin
RegisterComponents('Samples', [TMyBrowser]);
end;
{ TMyBrowser }
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
TVarData(VarResult^).VType := VT_I4;
TVarData(VarResult^).VInteger := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
end.
interface
uses
SysUtils, Classes, ActnList, ShDocVw, ActiveX;
type
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
procedure Register;
implementation
uses Variants;
procedure Register;
begin
RegisterComponents('Samples', [TMyBrowser]);
end;
{ TMyBrowser }
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
TVarData(VarResult^).VType := VT_I4;
TVarData(VarResult^).VInteger := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
end.
Код:
var
v, f: OleVariant;
Doc: IHTMLDocument2;
begin
Doc := IHTMLDocument2(MyBrowser1.Document);
TVarData(v).VInteger := 0;//индекс фрэйма
f := Doc.frames.item(v);
TVarData(v).VType := VT_NULL;
IHTMLWindow2(TVarData(f).VDispatch).document.execCommand('Refresh', False, v);
end;
v, f: OleVariant;
Doc: IHTMLDocument2;
begin
Doc := IHTMLDocument2(MyBrowser1.Document);
TVarData(v).VInteger := 0;//индекс фрэйма
f := Doc.frames.item(v);
TVarData(v).VType := VT_NULL;
IHTMLWindow2(TVarData(f).VDispatch).document.execCommand('Refresh', False, v);
end;
Я ТУПОЙ!!!!! :-( Опишите дословно, что делать с этим.....
Я так и не понял, куда это надо запихивать.....
Если компонент инсталить новый, то он орет, что нет .dcu файла....
Создать новый компонент, то он орет, на индифер редикларед - когда я его инсталю...
unit MyBrowser;
interface
uses
SysUtils, Classes, ActnList, ShDocVw, ActiveX;
type
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
procedure Register;
implementation
uses Variants;
procedure Register;
begin
RegisterComponents('Samples', [TMyBrowser]);
end;
{ TMyBrowser }
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
TVarData(VarResult^).VType := VT_I4;
TVarData(VarResult^).VInteger := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
end.
2-я процедурка, тоже орет, когда я ее в буттон клик запизиваж, толи на доступ, толи на то, что такие методы не используются, уже не помню...
Мучаюсь, мучаюсь, а ничего не выходит :(
2. выбираем пункт меню component-new component
3. ancestor type выбираем TWebBrowser [SHDocVw]
class name пишем TMyBrowser
palette page пофиг... всёравно установится на samples
unit file name лучше, мне кажется, указать ту же директорию, в которой будет прога твоя...
нажимаем OK
4. в появившемся окне удаляем весь текст.... и пишем тот, который я писАл выше...
5. сохраняем изменения
6. выбираем пункт меню component-install component
7. если первая строчка (unit file name) пустая, то там указываем файл, который только что сделали
нажимаем OK
8. в открывшемся пакете нажимаем compile
затем install
9. смотрим закладку samples
если появился TMyBrowser, то идём пить пыва, как минимум по литру на каждого!!!.... )))))
если будут какие-то срочные вопросы - пиши в асю
У меня еще 6 вопросов :)))))))))
1) Как можно в новом броузере "mybrowser" включить или отключить загрузку картинок методом буттон клик???
2) У меня такая проблема, мне нужно вытащить ХТМЛ код со странички, но не загружая ее броузером....
Я использую компонент IDHTTP и пользуюсь процедуркой
richedit.text:=IDHTTP.get(url);
Так вот с простых страничек он ХТМЛ код достает, но вот с этой ссылки: "http://suncity.combats.ru/inf.pl?login=-крутик-"
инфу он доставать не хочет, вместо нее он достает "< и симпол в виде квадратика"
А если ту же ссылку грузить через простой броузер, то траница элементарно открывается, но мне не нужно что бы страница загружалась в броузере, мне просто нужен ее ХТМЛ код в ричэдите....
Помогите мне плиз, кто знает в чем ошибка или как лучше и проще это сделать....
3) Как ображаться с выдвижным списком(НА КОНКРЕТНОМ ФРЕЙМЕ № 2)?
Я получил такой ответ, но применить его ко второму фрейму не получилось......
procedure TForm1.GetOptions(SelectObject: IHTMLSelectElement);
var i: Integer;
OPT: IHTMLOptionElement;
begin
for i:=0 to SelectObject.length-1 do
begin
OPT := SelectObject.item(i,0) as IHTMLOptionElement;
Memo1.Lines.Add(OPT.value + ' ' + OPT.text);
end;
end;
4) Как обновить КОНКРЕТНЫЙ ФРЕЙМ, не затрагивая остальных фреймов???????? Тот способ, что в этой теме находится выше, не работает..... Ругается на что то - на что не помню...
У меня еще 6 вопросов :)))))))))
1) Как можно в новом броузере "mybrowser" включить или отключить загрузку картинок методом буттон клик???
[/QUOTE]
добавляем в TMyBrowser новое свойство
TMyBrowser = class(TWebBrowser, IDispatch)
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
private
FLoadImages: Boolean;
published
LoadImages: Boolean read FLoadImages write FLoadImages; default False;
end;
и изменяем немного обработчик
function TMyBrowser.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
if DispID = DISPID_AMBIENT_DLCONTROL
then begin
TVarData(VarResult^).VType := VT_I4;
if FLoadImages then TVarData(VarResult^).VInteger := DLCTL_DLIMAGES
else TVarData(VarResult^).VInteger := 0;
Result:= S_OK;
end
else Result:= inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr)
end;
далее открываешь пакет dclusr.dpk.... делаешь ему compile... и у твоего MyBrowser появится свойство LoadImages....
в батон_клик оно обрабатывается примерно так....
begin
MyBrowser1.LoadImages := True;
end;
[quote=ratttx]Ну что? Мне никто не поможет до конца???? :confused: :confused: :confused:[/quote]
не одобряются на форуме,
поэтому в будущем просьба воздержаться.
когда кто то сможет и захочет помочь -> помогут,
просто надо подождать.