Главная страница
    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.051 c
3-1140346654
mif-e
2006-02-19 13:57
2006.04.16
Как делокализовать БД?


2-1143573708
mr1Andersen
2006-03-28 23:21
2006.04.16
Простой вопрос


2-1143693035
Sw
2006-03-30 08:30
2006.04.16
DBGrid


2-1143798876
KyRo
2006-03-31 13:54
2006.04.16
Фильтрация


1-1142417495
КиТаЯц
2006-03-15 13:11
2006.04.16
OpenOffice вместо MSExcel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский