Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Webbrowser Вопрос не из простых...

8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
1) Как в Webbrowsere отключить загрузку картинок??? (причем не через реестр!, а програмно должна быть какая то процедурка, причем не большая.)
2) Как обновить конкретный фрейм через webbrowser? (Webbrowser.refresh или Webbrowser.refresh2 - обновляют весь сайт, а мне нужно обновить только один фрейм из Н-ного количества загруженных...)
В интеренте искал, не нашел, паникую :(
339
06 июня 2006 года
verybadbug
619 / / 12.09.2005
работа с фреймами

 
Код:
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;
356
06 июня 2006 года
molnij
159 / / 20.06.2000
[QUOTE=ratttx]1) Как в Webbrowsere отключить загрузку картинок??? (причем не через реестр!, а програмно должна быть какая то процедурка, причем не большая.)
[/QUOTE]
вебброузер - это сервис эксплорера, отдельно для него насколько мне известно отключить картинки нельзя. Отключение будет происходить для всей системы (т.е. для самого эксплорера, для броузеров построенных на его базе типа myIE и т.д.)
Процедурка правки записи в реестре тебя не устраивает? тогда имхо никак
2.0K
06 июня 2006 года
Dstr
158 / / 27.04.2006
[QUOTE=ratttx]1) Как в Webbrowsere отключить загрузку картинок??? (причем не через реестр!, а програмно должна быть какая то процедурка, причем не большая.)
2) Как обновить конкретный фрейм через webbrowser? (Webbrowser.refresh или Webbrowser.refresh2 - обновляют весь сайт, а мне нужно обновить только один фрейм из Н-ного количества загруженных...)
В интеренте искал, не нашел, паникую :([/QUOTE]

У меня пока только 1 ответ:"Никак".В этом нам помог великий еб**й Гейтс созданием очередного своего идиотского Exploler'а,а Twebbrowser как раз использует его движок.Посмотрев все проги написанные на его движке(Maxton там и тп) и самого експлолера,можешь убедиться,что там нету таких приблуд,и если ты выключишь в одной из таких прог картинки-в експлолере будет анологично...(
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
[QUOTE=verybadbug]работа с фреймами

 
Код:
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;
[/QUOTE]
Как с фреймами работать я знаю, но проблема в том, как обновить этот самый фрейм.....
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
Только я не знаю, куда его вставить, может вы поможете??????

Оно именно так и работает!
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
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
http://rsdn.ru/Forum/?mid=191577
Вот ссылка с описанием этих процедур, но я там ничего не понял :(
Может вы поймете, и обьясните?
339
06 июня 2006 года
verybadbug
619 / / 12.09.2005
[QUOTE=ratttx]Как с фреймами работать я знаю, но проблема в том, как обновить этот самый фрейм.....[/QUOTE]

попробуй так..... в uses нужно включить mshtml
 
Код:
var
  Doc: IHTMLDocument2;
  v: olevariant;
begin
  Doc := WebBrowser1.OleObject.Document.frames.item(0).document as IHTMLDocument2;
  Doc.execCommand('Refresh', True, v);
end;
339
06 июня 2006 года
verybadbug
619 / / 12.09.2005
[QUOTE=ratttx]Только я не знаю, куда его вставить, может вы поможете??????

Оно именно так и работает!
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;

пишешь в секции 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;

это пишешь в секции Implementation.....
потом программно создаешь браузер..... не TWebBrowser, а TMyBrowser...

либо создаешь новый визуальный компонент... регистрируешь его.... и пользуешься как обычным TWebBrowser (кидаешь на форму, устанавливаешь свойства и тд.)
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
Он ругается!!! :(
"Operator not applicable to this operand typ"

Что делать?
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
[QUOTE=verybadbug]
 
Код:
TMyBrowser = class(TWebBrowser, IDispatch)
    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;

это пишешь в секции Implementation.....
потом программно создаешь браузер..... не TWebBrowser, а TMyBrowser...

либо создаешь новый визуальный компонент... регистрируешь его.... и пользуешься как обычным TWebBrowser (кидаешь на форму, устанавливаешь свойства и тд.)[/QUOTE]

Что то не пашет.... Вставил все как надо, картинки все равно есть :(
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
Я же говорил, что вопрос не из простых.....
8.4K
06 июня 2006 года
ratttx
64 / / 06.06.2006
Ну что? Мне никто не поможет до конца???? :confused: :confused: :confused:
339
07 июня 2006 года
verybadbug
619 / / 12.09.2005
[QUOTE=ratttx]Ну что? Мне никто не поможет до конца???? :confused: :confused: :confused:[/QUOTE]


Вот тебе текст файлика 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.
339
07 июня 2006 года
verybadbug
619 / / 12.09.2005
 
Код:
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;
8.4K
07 июня 2006 года
ratttx
64 / / 06.06.2006
Спасибо большое за код, но есть проблемка....
Я ТУПОЙ!!!!! :-( Опишите дословно, что делать с этим.....
Я так и не понял, куда это надо запихивать.....
Если компонент инсталить новый, то он орет, что нет .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-я процедурка, тоже орет, когда я ее в буттон клик запизиваж, толи на доступ, толи на то, что такие методы не используются, уже не помню...
8.4K
08 июня 2006 года
ratttx
64 / / 06.06.2006
Мучаюсь, мучаюсь, а ничего не выходит :(
339
10 июня 2006 года
verybadbug
619 / / 12.09.2005
1. запускаем delphi... ))))) (delphi должен быть запущен 1 раз!!!)
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, то идём пить пыва, как минимум по литру на каждого!!!.... )))))
339
10 июня 2006 года
verybadbug
619 / / 12.09.2005
если будут какие-то срочные вопросы - пиши в асю
8.4K
10 июня 2006 года
ratttx
64 / / 06.06.2006
Пасибо!, Работает! :) А в асю уже написал, жду ответа. :))))))
У меня еще 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) Как обновить КОНКРЕТНЫЙ ФРЕЙМ, не затрагивая остальных фреймов???????? Тот способ, что в этой теме находится выше, не работает..... Ругается на что то - на что не помню...
339
10 июня 2006 года
verybadbug
619 / / 12.09.2005
[QUOTE=ratttx]Пасибо!, Работает! :) А в асю уже написал, жду ответа. :))))))
У меня еще 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;
242
10 июня 2006 года
Оlga
2.2K / / 04.02.2006
посты такого типа :
[quote=ratttx]Ну что? Мне никто не поможет до конца???? :confused: :confused: :confused:[/quote]
не одобряются на форуме,
поэтому в будущем просьба воздержаться.
когда кто то сможет и захочет помочь -> помогут,
просто надо подождать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог