среда, 23 октября 2013 г.

Простенький браузер средствами Delphi


   Сегодня будем писать на 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 можно ввести адрес любой странички, которую бы вы хотели лицезреть при запуске браузера. Далее пропишем клавишу "вперед", то есть ту самую кнопку при помощи которой, мы будем бороздить просторы интернета, ее будем нажимать после ввода адреса в 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;

   Ну вот в принципе и все, на сегодня. Если вы внимательно все повторяли, браузер должен работать как часики. 

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.