Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Браузер на основе TWebBrowser.   Найти похожие ветки 

 
Glex ©   (2006-03-13 08:33) [0]

Пишу клиент для онлайн игры.

По сути многооконный браузер.

Как обрабатываю поход по адресу
procedure TMainForm.WebBrowser1BeforeNavigate2(Sender: TObject;
 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
 Headers: OleVariant; var Cancel: WordBool);
var
 NewIndex: Integer;
begin
 NewIndex := HistoryList.IndexOf(URL);
 if NewIndex = -1 then
 begin
...
 if (TWinControl(TWebBrowser(Pages.ActivePage.Controls[0])).Name="WebBrowser1")and(T TabSheet(TWinControl(TWebBrowser(Sender)).Parent).Caption<>"sTabSheet1") then begin
   NewPageAction.Execute;
   end;
end;


Я использовал (TWinControl(TWebBrowser(Pages.ActivePage.Controls[0])) вместо  Sender из-за удивительного бага:
Какому бы браузеру я ни присваивал OnNBeforeNavigate2:= WebBrowser1BeforeNavigate2, при его вызове Sender всегда WebBrowser1!!!!!!

Как я создаю новый Tab

procedure TMainForm.NewPageActionExecute(Sender: TObject);
var NewTabSheet: TsTabSheet;
NewBrowser: TWebBrowser;
t: integer;
begin
t:= Pages.ActivePage.Tag+1;
NewTabSheet:= TsTabSheet.Create(Pages);
NewTabSheet.PageControl:= Pages;
NewBrowser:= TWebBrowser.Create(Self);
TWinControl(NewBrowser).Parent:= NewTabsheet;
TWinControl(NewBrowser).Align:= alClient;
TWebBrowser(NewBrowser).OnBeforeNavigate2:= WebBrowser1.OnBeforeNavigate2;
TWebBrowser(NewBrowser).OnDownLoadBegin:= WebBrowser1.OnDownloadBegin;
TWebBrowser(NewBrowser).OnDownloadComplete:= WebBrowser1.OnDownloadComplete;
Pages.ActivePage:= NewTabSheet;
NewTabSheet.Tag:= t;
NewTabSheet.OnShow:= sTabSheet1.OnShow;
NewTabSheet.Show;
end;


Как я иду по адресу...
procedure TMainForm.FindAddress;
var
 Flags: OLEVariant;
begin
 Flags := 0;
 MainForm.UpdateCombo := True;
 Browser.Navigate(WideString(Urls.Text), Flags, Flags, Flags, Flags);
 Pages.ActivePage.Caption:= Urls.Text;
end;


Как обратываю изменение активного браузера

procedure TMainForm.sTabSheet1Show(Sender: TObject);
begin
Browser:= TWebBrowser((Sender as TsTabSheet).Controls[0]);
end;

-----------------------------------
Также есть небольшой вопросик про тулбар:

WidgetBtnClick: TNotifyEvent;
...
procedure WidgetBtnClick(Sender: TObject);
var s: string;
begin
s:= "Utils/"+(Sender as TToolButton).Hint;
ShellExecute(0, "open", PChar(s), nil, nil, SW_SHOWNORMAL);
end;
...
procedure TMainForm.LoadWidgets(WidgetsList: TStringList);
var i: integer;
s: string;
btns: array of TToolButton;
begin
setlength(btns, WidgetsList.Count);
for i:=0 to WidgetsList.Count-1 do begin
 btns[i]:= TToolButton.Create(Self);
 btns[i].Parent:= WidgetBar;
 btns[i].Hint:= WidgetsList[i];
 btns[i].ImageIndex:= i;
 btns[i].OnClick:= WidgetBtnClick;
 end;
end;


Почему событие на Click не вызывается?!!!


 
Glex ©   (2006-03-13 08:39) [1]

Ах да, как сделать, чтобы браузер не зависал наглухо, если на сайте происходит "Ошибка выполнения сценария"?


 
Glex ©   (2006-03-13 17:38) [2]

Блиин(((
Помогите plz


 
SergP.   (2006-03-13 18:48) [3]


> Glex ©   (13.03.06 08:39) [1]
> Ах да, как сделать, чтобы браузер не зависал наглухо, если
> на сайте происходит "Ошибка выполнения сценария"?


silent ???


 
Glex ©   (2006-03-13 19:35) [4]

Silent - половинчатое решение, ибо с ним диалоги не показываются вообще, но это не является приоритетной задачай, поэтому пока сойдёт, SergP, спасибо!!!

Буду очень благодарен, если кто-нибудь расскажет о том,

1) как получить Title загружаемой страницы.
2) как сделать так, чтобы при открытии в новом окне открывалось не окно IE, а новый таб в моём Browser"e(это 100% возможно, т.к. я знаю такой браузер, написанный на D7, но он с закрытыми исходниками)
3) как  
 а) добавить на верхний второй сверху загружаемой(загруженной) странички кнопку, действие которой зависит от содержания страницы.
 б) поменять пункт в меню, выплывающим на JavaScript
 в) отловить сообщения, которые юзер добавляет в чат из Edit"a
4) насильственно заменять картинки с адресами вида www.smth.ru/dirs/address/img.jpg на {$WORKDIR}/dirs/address/img.jpg, а если {$WORKDIR}/dirs/address/img.jpg отсутствует, то скачивать картинку и добавлять её в это {$WORKDIR}/dirs/address/.


Уффф, как всё расписал)
Красота!


 
Ihor Osov'yak ©   (2006-03-13 22:47) [5]

неосилил. много букв. давайте по одному вопросу, может осилю.

Зы. Багов в WB нет. Почти нет :-).


 
Glex ©   (2006-03-14 18:08) [6]

По одному вопрсу.
Всего вопросов четыре.

Вопрос первый))))

1) как получить Title загружаемой страницы.


 
Ihor Osov'yak ©   (2006-03-15 00:02) [7]

uses mshtml;
...

(wb.DefaultInterface.Document as IHTMLDocument2).title

естественно, предварительно проверив, что wb.DefaultInterface.Document <> nil и что от Document  можно получить IHTMLDocument2...

то есть более предпочтительный такой код:

var
 iDoc: IHTMLDocument2;
...
begin
 if not assigned(wb.DefaultInterface.Document) then exit;
 wb.DefaultInterface.Document.QueryInterface(IHTMLDocument2, iDoc);
 if not assigned(iDoc) then exit;
 чего-то-там  := iDoc.Title;


 
Ihor Osov'yak ©   (2006-03-15 00:05) [8]

да, и самое главное, RTFMSDN...


 
Glex ©   (2006-03-15 10:33) [9]

Ihor Osov"yak
TFMSDN is F hard to understand))))
Спасибо огромное!
Теперь я понял в какую сторону смотреть, чтобы сделать остальные мелочи)

Вопрос 2.
Как сделать так, чтобы при открытии в новом окне открывалось не окно IE, а новый таб в моём Browser"e(это 100% возможно, т.к. я знаю такой браузер, написанный на D7, но он с закрытыми исходниками)?


 
Glex ©   (2006-03-15 10:43) [10]

Посмотрел событие WebBrowser1NewWindow2,
но не понял, как из него адрес нового окна получить


 
easy ©   (2006-03-15 13:33) [11]


> Glex ©   (15.03.06 10:43) [10]

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
 var ppDisp: IDispatch; var Cancel: WordBool);
begin
 ppDisp := WebBrowser2.DefaultDispatch;
end;


 
Ihor Osov'yak ©   (2006-03-16 02:45) [12]

> но не понял, как из него адрес нового окна получить

не, не так. сначала создать, а потом подсунуть. Или уже воспользоваться существующим. Но тоже подсунуть. Один из вариантов - см. easy ©   (15.03.06 13:33) [11]



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
8-1131452209
kl0n™
2005-11-08 15:16
2006.04.16
Прозрачность


4-1138459145
maxim161
2006-01-28 17:39
2006.04.16
Отправка сообщений процессу


15-1143304649
Mozart
2006-03-25 19:37
2006.04.16
Delphi и Linux


2-1143483718
Shopot
2006-03-27 22:21
2006.04.16
Помогите разобраться с TChart ом.


15-1143031660
pavel_guzhanov
2006-03-22 15:47
2006.04.16
А что такое .net?