Форум: "Основная";
Текущий архив: 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