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

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

var-параметры в событии OnBeforeNavigate2 TWebBrowser'a [D7, WinXP]


x-AL ©   (2004-04-21 21:43:00) 

Пишу так:

 WebBrowser.Navigate(' http://origin.url/');

При этом обработчик события такой:

procedureTForm1.WebBrowserBeforeNavigate2(Sender: TObject;
  constpDisp: IDispatch; varURL, Flags, TargetFrameName, PostData,
 Headers: OleVariant; varCancel: WordBool);
begin
 URL := ' http://other.url/';
end;


Однако браузер всё равно пытается перейти к origin.url,
хотя в справке явно сказано, что можно изменить значение URL, чтоб перенаправить браузер по другому адресу.
Или я что-то делаю не так ?..


213123   (2004-05-04 16:12:00) [1]

Урл может передаваться и для того, чтобы выборочно отменять загрузку....
Только если имзенение ни к чему не ведет, почему он передается как var?


nikkie   (2004-04-25 16:09:00) [2]

>Piter
>Но ведь сказано
в справке по TWebBrowser.OnBeforeNavigate2 написана лажа. почему - не знаю, спроси у Borland-а. я приводил цитату из MSDN из справки по DWebBrowserEvents2::BeforeNavigate2.

>А зачем тогда URL по ссылке передается?
наверное, такова специфика COM Automation. параметры передаются универсально как VARIANT, а определить какие параметры можно изменять - либо по документации, либо в run-time по наличию флага VT_BYREF в поле vt (в дельфийском синтаксисе TVarData(URL).VType).

если посмотреть в C++-декларации, то URL, Flags объявлены как VARIANT *. дельфийский import type library логично объявляет их как var OleVariant.


SergP   (2004-04-24 13:38:00) [3]

Piter ©   (24.04.04 10:47) [13]

Блин. Понял.. Просто почемуто слово "Ссылка" у меня первоначально асоциировалась с URL...

:-)))
Так иногда бывает...


Piter   (2004-04-24 10:49:00) [4]

Почему Cancel по ссылку передается - очевидно. А вот зачем URL? Если его изменение ни к чемун е ведет...


Piter   (2004-04-24 10:47:00) [5]

SergP (24.04.04 07:02) [12]

Видишь в обработчике стоит ' varCancel' - значит, этот параметр передается по ссылке, а не по значению. Ты знаешь разницу между этими понятиями?
Посмотри в справке, раздел "procedure calls", там выберешь "Calling procedures and functions", ткнешь на "Topic Groups", там увидишь "Value and variable parameters"


SergP   (2004-04-24 07:02:00) [6]

>Чего? Ты о чем? Я говорю - почему передается по ссылке, а не по значения параметр URL?

М-да. Я как-то не въехал в вопрос и хмурню написал...
Кстати до сих пор не могу в него въехать...

>А где можно взять TEmbeddedWB ?

http://euromind.com/iedelphi/


x-AL   (2004-04-24 00:36:00) [7]

А где можно взять TEmbeddedWB ?


Piter   (2004-04-24 00:32:00) [8]

SergP (24.04.04 00:16) [9]
>А зачем тогда URL по ссылке передается?

Ну для того чтобы ты мог его юзать хотя бы для read


Чего? Ты о чем? Я говорю - почему передается по ссылке, а не по значения параметр URL?

SergP (24.04.04 00:16) [9]
Юзай TEmbeddedWB. Там есть возможность изменять УРЛ, только не в OnBeforeNavigate2, а там для этого есть другой event


ага, можно и ручками. Реализовать IDocHostUIHandler... в общем,   http://www.compress.ru/Article.asp?id=1127


SergP   (2004-04-24 00:16:00) [9]

Piter ©   (23.04.04 23:08)

А зачем тогда URL по ссылке передается?

Ну для того чтобы ты мог его юзать хотя бы для read
Например очень удобно вырубать ненужные фреймы...

типа if URL='...' then cancel:=true;

x-AL   (21.04.04 21:43)

Юзай TEmbeddedWB. Там есть возможность изменять УРЛ, только не в OnBeforeNavigate2, а там для этого есть другой event. Да и на ихнем сайте есть примеры как его юзать...


Piter   (2004-04-23 23:08:00) [10]

Никто не знает?

>А зачем тогда URL по ссылке передается?


x-AL   (2004-04-22 20:26:00) [11]

Пути МелкоМягких неисповедимы... :)
Да еще самодеятельность Бормана...


SergP   (2004-04-22 20:18:00) [12]


> easy ©   (22.04.04 09:55) [4]
>    WebBrowser1.Stop;
>    WebBrowser1.Navigate( ' http://www.borland.com');


А если на страничке несколько фреймов, то получится что если мы хотим заменить один из фреймов, то новая фигня загрузится не в виде фрейма....


Piter   (2004-04-22 17:34:00) [13]

Согласен, возможна и такая трактовка.

А зачем тогда URL по ссылке передается?


easy   (2004-04-22 09:55:00) [14]

var Test : boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Test := false;
   WebBrowser1.Navigate(' http://www.microsoft.com');
end;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
 Headers: OleVariant; var Cancel: WordBool);
begin
 if not Test then
 begin
   Test := True;
   Cancel := True;
   WebBrowser1.Stop;
   WebBrowser1.Navigate( ' http://www.borland.com');
 end;
end;


Piter   (2004-04-21 23:34:00) [15]

Не понял... приведи лучше приме перенаправления в событии OnBeforeNavigate2.

Ты хочешь сказать, что в нем нельзя перенаправлять? Но ведь сказано

"URL is the Uniform Resource Locator of the resource the Web browser is looking up. Change this value to redirect the navigation operation to a different resource"


nikkie   (2004-04-21 23:00:00) [16]

это вы неправильную справку читаете

...
URL
[in] URL to be navigated to.
...
Cancel
[out] Address of a cancel flag. An application can set this parameter to TRUE to cancel the navigation operation, or to FALSE to allow it to proceed.


Piter   (2004-04-21 22:36:00) [17]

хм, мне тоже интересно... сказано четко
"URL is the Uniform Resource Locator of the resource the Web browser is looking up. Change this value to redirect the navigation operation to a different resource"


Наверх

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