Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
ВнизTWebBrowser и браузер по умолчанию Найти похожие ветки
← →
Учусь (2011-03-23 20:47) [0]В программе есть форма, на которой лежит TWebBrowser, в него с сайта загружается инфа и пользователь может пройти по ссылке которая есть в этой инфе. При клике на ссылку TWebBrowser открывает свое окно - окно ИЕ, а не браузер установленный по умолчанию.
Подскажите можно ли заставить его открывать браузер установленный в системе "по умолчанию" ?
← →
Игорь Шевченко © (2011-03-23 21:37) [1]OnBeforenavigate перехватить линк, сказать ShellExecute ("open", ...) ?
← →
Учусь (2011-03-23 21:50) [2]Спасибо, пошел разбираться:)
← →
Учусь (2011-03-24 16:25) [3]ничего не понимаю:(
← →
Учусь (2011-03-24 16:27) [4]Копипастю сюда текст кода и ничего не отображается.
← →
Игорь Шевченко © (2011-03-24 16:30) [5]ссылки из кода надо убрать
← →
Учусь (2011-03-24 16:46) [6]Что-то ничего у меня не получается. Помогите пожалуйста, почсните, что я делаю не так? Есть такой код:
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:49) [7]Да, еще, ставлю точку останова на строках:
ShellExecute(Application.Handle, "open", PChar(txtURL), nil, nil, SW_NORMAL);
и не останавливается. Такое ощущение что WebBrowser1BeforeNavigate2 при клике не происходит...
← →
b z (2011-03-24 18:02) [8]всему виной tаrgеt="_blаnk"
← →
Учусь (2011-03-24 18:34) [9]
> всему виной tаrgеt="_blаnk"
Нет, без него просто открывается в том же окне.
Не происходит это:
ShellExecute(Application.Handle, "open", PChar(txtURL), nil, nil, SW_NORMAL);
Вроде как WebBrowser1BeforeNavigate2 вообще не происходит. Такое возможно?
← →
b z (2011-03-24 18:46) [10]
> Нет, без него просто открывается в том же окне.
Без него навигейт работает (поставте точку останова на первой строке метода), а с ним ие "внутри" создает новое своё же окно/таб(сущетсвующего) и ему устанавливает локешн, ваш браузер ничего не знает про это.
← →
Учусь (2011-03-24 18:54) [11]Навигейт работает, но мне надо чтобы по клику на кнопку запустился дефолтный браузер.. Т.е. это:
ShellExecute(Application.Handle, "open", PChar(txtURL), nil, nil, SW_NORMAL);
А это не происходит.
← →
Игорь Шевченко © (2011-03-24 19:04) [12]
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.
← →
b z (2011-03-24 19:09) [13]
> А это не происходит.
Дэбаг форева. ;)
← →
b z (2011-03-24 19:31) [14]
> Игорь Шевченко © (24.03.11 19:04) [12]
По рефреш тоже откроет новое окно, а не должно. :)
← →
Учусь (2011-03-24 20:19) [15]
> Игорь Шевченко © (24.03.11 19:04) [12]
Работает. Но стоит заменить:
const
StartURL = "http://www.delphimaster.ru/";
на
StartURL = "file:///C:/Temp/web/index.htm";
И получается та же история - клик открывает ссылку в том же окне WebBrowserа. Чего я и хотел побороть:)
Думаю решение где-то на поверхности, но ничего не придумывается. Тут разница только в http: и file: Может он и ссылку пытается локально открыть, из кеша?
← →
Учусь (2011-03-24 20:31) [16]
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:44) [17]
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:48) [18]При 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-25 15:00) [19]
> Игорь Шевченко © (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-25 15:53) [20]Заставил работать как мне нужнои зменив таким образом:
const
// StartURL = "httр://www.dеlphimaster.ru/";
// StartURL = "file:///C:/Temp/web/index.htm";
StartURL = "C:\TEMP\web\index.htm";
Скажите, это правильное, "кошерное" решение? Нет ли тут подводных камней?
← →
Игорь Шевченко © (2011-03-25 16:54) [21]
> Скажите, это правильное, "кошерное" решение?
Раввин что говорит ?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c