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

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

TWebBrowser и браузер по умолчанию [D5, XP]


Страницы:   1 2

Учусь ©   (2011-03-23 20:47:00) 

В программе есть форма, на которой лежит TWebBrowser, в него с сайта загружается инфа и пользователь может пройти по ссылке которая есть в этой инфе. При клике на ссылку TWebBrowser открывает свое окно - окно ИЕ, а не браузер установленный по умолчанию.
Подскажите можно ли заставить его открывать браузер установленный в системе "по умолчанию" ?


Игорь Шевченко   (2011-03-25 16:54:00) [1]


> Скажите, это правильное, "кошерное" решение?


Раввин что говорит ?


Учусь   (2011-03-25 15:53:00) [2]

Заставил работать как мне нужнои зменив таким образом:

const
// StartURL = 'httр://www.dеlphimaster.ru/';
// StartURL = 'file:///C:/Temp/web/index.htm';

StartURL = 'C:\TEMP\web\index.htm';

Скажите, это правильное, "кошерное" решение? Нет ли тут подводных камней?


Учусь   (2011-03-25 15:00:00) [3]


> Игорь Шевченко ©   (24.03.11 20:44) [17]

Вставил этот обработчик в код и поставил точки останова - не останавливается.
И как понять строчку: "use PathToURL" ? про такую функцию знает только гугл и то говорит что она в джаве.

В общем получился такой код:

const
// StartURL = 'httр://www.dеlphimaster.ru/';
StartURL = 'file:///C:/Temp/web/index.htm';

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate(StartURL);
end;

{ procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
var
URLString: string;
begin
if FStartPageComplete then
begin
  URLString := ((TWebBrowser(ASender).document as IHTMLDocument2)
    .activeElement as IHTMLElement).getAttribute('href', 0);
  Cancel := True;
  ShellExecute(Handle,'open',PChar(URLString), nil, nil, SW_SHOW);
end;
end; }  // это не работает в обоих случаях.

procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
URLString: string;
begin
if FStartPageComplete then
begin
  URLString := VarToStr(URL);
  Cancel := True;
  ShellExecute(Handle,'open',PChar(URLString), nil, nil, SW_SHOW);
end;
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
URLString: string;
begin
URLString := VarToStr(URL);
if URLString = StartURL then
  FStartPageComplete := True; end;

end.


При StartURL = ' http://www.delphimaster.ru/'; все работает как надо.
При StartURL = 'file:///C:/Temp/web/index.htm'; - все ссылки открываются в то же окне WebBrowserа.
Помогите сделать как надо, пожалуйста.


Игорь Шевченко   (2011-03-24 20:48:00) [4]

При target="_blank" вызывается другое событие, OnNewWindow2

Я проверял на таком html

<html>
<head>Here is the news</head>
<body>
<H1>Here is the news coming to you every hour on the hour</H1>
<BR>
<A HREF=" http://www.delphimaster.ru" target="_blank">Click here</A>
</body>
</html>



> URLString = StartURL - здесь нет равенства при StartURL
> = 'file:///C:/Temp/web/index.htm';


use PathToURL


Игорь Шевченко   (2011-03-24 20:44:00) [5]

procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
 var Cancel: WordBool);
var
 URLString: string;
begin
 if FStartPageComplete then
 begin
   URLString := ((TWebBrowser(ASender).document as IHTMLDocument2)
     .activeElement as IHTMLElement).getAttribute('href', 0);
   Cancel := True;
   ShellExecute(Handle,'open',PChar(URLString), nil, nil, SW_SHOW);
 end;
end;


Учусь   (2011-03-24 20:31:00) [6]

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
URLString: string;
begin
URLString := VarToStr(URL);
if URLString = StartURL then  // здесь
  FStartPageComplete := True;
end;


URLString = StartURL - здесь нет равенства при StartURL = 'file:///C:/Temp/web/index.htm';
Поэтому не выполняется условие в WebBrowser1BeforeNavigate2 и ничего не запускается.
Что-то я совсем запутался:) Помогите решить?


Учусь   (2011-03-24 20:19:00) [7]


> Игорь Шевченко ©   (24.03.11 19:04) [12]

Работает. Но стоит заменить:

const
StartURL = ' http://www.delphimaster.ru/';
на
StartURL = 'file:///C:/Temp/web/index.htm';

И получается та же история - клик открывает ссылку в том же окне WebBrowserа.  Чего я и хотел побороть:)
Думаю решение где-то на поверхности, но ничего не придумывается. Тут разница только в http: и file: Может он и ссылку пытается локально открыть, из кеша?


b z   (2011-03-24 19:31:00) [8]


> Игорь Шевченко ©   (24.03.11 19:04) [12]
По рефреш тоже откроет новое окно, а не должно. :)


b z   (2011-03-24 19:09:00) [9]


> А это не происходит.
Дэбаг форева. ;)


Игорь Шевченко   (2011-03-24 19:04:00) [10]

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
 TForm1 = class(TForm)
   WebBrowser1: TWebBrowser;
   procedure WebBrowser1BeforeNavigate2(ASender: TObject;
     const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
     Headers: OleVariant; var Cancel: WordBool);
   procedure FormCreate(Sender: TObject);
   procedure WebBrowser1DocumentComplete(ASender: TObject;
     const pDisp: IDispatch; var URL: OleVariant);
 private
   FStartPageComplete: Boolean;
 end;

var
 Form1: TForm1;

implementation
uses
 ShellApi;

const
 StartURL = ' http://www.delphimaster.ru/';

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.Navigate(StartURL);
end;

procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;
 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
 Headers: OleVariant; var Cancel: WordBool);
var
 URLString: string;
begin
 if FStartPageComplete then
 begin
   URLString := VarToStr(URL);
   Cancel := True;
   ShellExecute(Handle,'open',PChar(URLString), nil, nil, SW_SHOW);
 end;
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
var
 URLString: string;
begin
 URLString := VarToStr(URL);
 if URLString = StartURL then
   FStartPageComplete := True;
end;

end.


Учусь   (2011-03-24 18:54:00) [11]

Навигейт работает, но мне надо чтобы по клику на кнопку запустился дефолтный браузер.. Т.е. это:
ShellExecute(Application.Handle, 'open', PChar(txtURL), nil, nil, SW_NORMAL);

А это не происходит.


b z   (2011-03-24 18:46:00) [12]


> Нет, без него просто открывается в том же окне.
Без него навигейт работает (поставте точку останова на первой строке метода), а с ним ие "внутри" создает новое своё же окно/таб(сущетсвующего) и ему устанавливает локешн, ваш браузер ничего не знает про это.


Учусь   (2011-03-24 18:34:00) [13]


> всему виной tаrgеt='_blаnk'

Нет, без него просто открывается в том же окне.

Не происходит это:
ShellExecute(Application.Handle, 'open', PChar(txtURL), nil, nil, SW_NORMAL);
Вроде как WebBrowser1BeforeNavigate2 вообще не происходит. Такое возможно?


b z   (2011-03-24 18:02:00) [14]

всему виной tаrgеt='_blаnk'


Учусь   (2011-03-24 16:49:00) [15]

Да, еще, ставлю точку останова на строках:
 ShellExecute(Application.Handle, 'open', PChar(txtURL), nil, nil, SW_NORMAL);
и не останавливается. Такое ощущение что WebBrowser1BeforeNavigate2 при клике не происходит...


Учусь   (2011-03-24 16:46:00) [16]

Что-то ничего у меня не получается. Помогите пожалуйста, почсните, что я делаю не так? Есть такой код:

procedure TForm1.Button1Click(Sender: TObject);
var PAGE : String;
begin
  PAGE := 'C:/Temp/Web/index.htm';
  FIsStartPage := True;
  Webbrowser1.Navigate('file:///' + PAGE);
  FIsStartPage := False;
end;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var  txtURL: string;
begin
  txtURL := URL;
 if not FIsStartPage then
  begin
    Cancel := True;
    ShellExecute(Application.Handle, 'open', PChar(txtURL), nil, nil, SW_NORMAL);
  end;
end;

Он нормально открывает локальную страницу. Но на локальной странице есть ссылка вида:
<а hrеf='httр://mуsеrvеr/mypage'  tаrgеt='_blаnk'>
<img border="0" src="img/button.jpg" width="130" height="31"></a>

При клике на ней - открывается ИЕ. Хотя подефолту стоит Опера. В чем подвох?


Игорь Шевченко   (2011-03-24 16:30:00) [17]

ссылки из кода надо убрать


Учусь   (2011-03-24 16:27:00) [18]

Копипастю сюда текст кода и ничего не отображается.


Учусь   (2011-03-24 16:25:00) [19]

ничего не понимаю:(


Учусь   (2011-03-23 21:50:00) [20]

Спасибо, пошел разбираться:)


Страницы:   1 2

Наверх

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