Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Браузер на основе 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.061 c
15-1143440491
Ega23
2006-03-27 10:21
2006.04.16
С Днём рождения! 26 марта


15-1143311396
Топоним
2006-03-25 21:29
2006.04.16
Об употреблении некоторых топонимов


2-1143702326
thvfrjd
2006-03-30 11:05
2006.04.16
проблем с параметрами


2-1143782019
Рафик
2006-03-31 09:13
2006.04.16
Char в Integer


3-1140605813
DelphiLexx
2006-02-22 13:56
2006.04.16
FIBDataSet - MasterDetail





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский