Сегодня будем писать на Delphi, простенький, за то свой собственный браузер. Создавать мы его будем на базе компонента WebBrowser со вкладки палитры компонентов - Internet. Для этого первым делом разместим на форме все самое необходимое... 1) Один компонент WebBrowser со вкладки Internet , 13-шт компонентов SpeedButton, 1- компонент ComboBox, 1 - компонент Panel, 1 - компонент ProgressBar, 1 - компонент StatusBar, 1 - компонент OpenDialog и 1 - компонент SaveDialog. Разместим их на форме примерно следующим образом:
В uses подключаем MSHTML и ActiveX Иконки для кнопок SpeedButton мной были подготовлены заранее, поэтому заготовка в принципе имеет вполне презентабельный вид. Итак начнем. 2) Создадим событие OnCreate на форме и запишем в нем следующий код: begin
WebBrowser1.Navigate('http://www.google.com');
end; Вместо google.com можно ввести адрес любой странички, которую бы вы хотели лицезреть при запуске браузера.
Далее пропишем клавишу "вперед", то есть ту самую кнопку при помощи которой, мы будем бороздить просторы интернета. Kнопку, которую будем нажимать после ввода адреса в ComboBox. Для этого: 3) Создадим событие OnClick на SpeedButton6 например, и в коде напишем: var
a:string;
begin
WebBrowser1.Navigate(ComboBox1.Text); // Передаем в поиск, введенный адрес из ComboBox1; a:=ComboBox1.text; // Записываем параллельно этот адрес в переменную;
ComboBox1.Items.Add(a); // Загружаем введенное в список
ComboBox1;
end;
Заморочка с помещением введенного адреса в выпадающий список, будет позволять нам при нажатии на СomboBox, просматривать историю вводимых вручную адресов, в строку браузера.
Далее для удобства сделаем так, чтобы данный механизм работал не только от SpeedButton6, но и от нажатия нами на клавишу Enter, для этого: 3) Создадим событие OnKeyPress y компонента ComboBox1 запишем следующее: var
a:string;
begin
if Key=#13 then
begin
WebBrowser1.Navigate(ComboBox1.Text);
a:=ComboBox1.text;
ComboBox1.Items.Add(a);
end;
end; теперь серфить можно и по нажатии клавиши Enter.
Теперь заставим работать клавиши - шаг назад и шаг вперед. 4) Для клавиши - Шаг назад, пишем в событии OnClick у кнопки SpeedButton1: var
Doc, Histor: Variant;
begin
Doc:= WebBrowser1.OleObject.document; //Ссылаемся на интерфейс документа;
if TVarData(Doc).VDispatch = nil then Exit; //Если документ отсутствует, тогда выходим; Histor:=Doc.parentWindow.history; {Объект документа - объект родительского окна - объект содержащий
историю переходов Шаг назад к предыдущему URL.};
Histor.go(-1);
end;
5) Для клавиши - Шаг вперед пишем в событии OnClick у кнопки SpeedButton2: var
Doc, Histor: Variant;
begin
Doc:= WebBrowser1.OleObject.document; //Ссылаемся на интерфейс документа;
if TVarData(Doc).VDispatch = nil then Exit; //Если документ отсутствует, тогда выходим;
Histor:=Doc.parentWindow.history; {Объект документа - объект родительского окна - объект содержащий
историю переходов Шаг вперед к предыдущему URL.};
Histor.go(1);
end;
6) Для перехода на домашнюю страничку в
OnClick
на SpeedButton5 пишем; begin
WebBrowser1.GoHome;
end;
7) Для остановки загрузки в OnClick
на SpeedButton4 пишем;
begin
WebBrowser1.Stop;
end;
8) Для обновления странички в OnClick на SpeedButton3 пишем; begin
WebBrowser1.Refresh;
end;
Итак, мы успешно прописали основные клавиши для работы нашего браузера. Теперь пропишем еше ряд батонов, придав нашему приложению дополнительную функциональность. Например, обеспечим открытие файлов в нашем браузере расположенных на локальных дисках.
9) Для этого
в OnClick на SpeedButton7 пишем: begin
if OpenDialog1.Execute then
begin
WebBrowser1.Navigate(OpenDialog1.FileName);
ComboBox1.Text:=OpenDialog1.FileName;
end;
end;
10) Для возможности нашего браузера также сохранять странички на компьютер, в
OnClick на SpeedButton9 пишем:
begin
WebBrowser1.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT); //Сохраняем содержимое WebBrowser1;
end;
11) Для получения возможности печати по нажатию на SpeedButton8 в OnClick последнего пропишем:
var
PostData, Headers: OLEvariant;
begin
WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, PostData, Headers); //Печатаем содержимое TWebBrowser;
end;
12) Для предварительного просмотра странички перед печатью, в OnClick на SpeedButton10 пишем:
begin
WebBrowser1.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT); //Предварительный просмотр;
end;
13) А для предварительной настройки ее параметров, в OnClick на SpeedButton11 пишем:
begin
WebBrowser1.ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT); //Параметры страницы;
end;
14) Теперь организуем поиск слов на страничке, и в OnClick на SpeedButton12 пишем:
begin
WebBrowser1.ExecWB(OLECMDID_FIND, OLECMDEXECOPT_DODEFAULT); //Поиск слов на сайте;
end;
15) Чтобы сохранить исходный код в текстовый файл нужно:
а) В разделе Public записываем следующую процедуру: procedure SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser); //процедура сохранения Url;
б) Жмем Ctrl+Shift+C;
в) В сгенерированном автоматически шаблоне TForm1.SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser); прописываем:
var PersistStream: IPersistStreamInit; FileStream: TFileStream; Stream: IStream; SaveResult: HRESULT;
begin PersistStream := WB.Document as IPersistStreamInit; FileStream := TFileStream.Create(FileName, fmCreate);
try Stream := TStreamAdapter.Create(FileStream, soReference) as IStream; SaveResult := PersistStream.Save(Stream, True);
if FAILED(SaveResult) then MessageBox(Handle, 'Fail to save HTML source', 'Error', 0);
finally FileStream.Free;
end;
end;
г) Пишем в OnClick на SpeedButton13:
begin if SaveDialog1.Execute then
SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);
end;
16) Можно даже настроить режим уведомления об успешных загрузках документов, для этого в свойстве OnDocumentComplete компонента WebBrowser1, нужно прописать следующее:
begin
if URL=WebBrowser1.LocationURL Then
begin
ShowMessage('Документ успешно загружен');
end;
end;
17) Чтобы ProgressBar1 отображал ход загрузки страниц, в свойстве OnProgressChange компонента WebBrowser1, нужно прописать:
begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
end;
18) Если в событии OnStatusTextChange компонента WebBrowser1, прописать:
begin
StatusBar1.Panels[0].text:=text;
end;
то URL хода загрузки, будет корректно отображаться в StatusBar;
Ну вот в принципе и все, на сегодня. Если вы внимательно все повторяли, браузер должен работать как часики. В любом случае выкладываю исходник - /Ishodniki/Statji/WebBrowser/brauzer_v_delphi.rar, скачивайте, юзайте, сверяйтесь. Можете его доработать по своему, что то убрав, либо что то добавив. Так что, удачных экспериментов друзья!!! Пишите комменты, если че...
|