На этом шаге мы рассмотрим создание Web-браузера с помощью Delphi.
Поскольку WWW заняла в Интернет положение явного лидера, а инструменты для ее
просмотра, браузеры, стали, соответственно, чуть ли не самыми популярными программами, -
существует возможность изготовить такую программу самостоятельно с помощью Delphi.
Web-браузер в Delphi можно изготовить всего за несколько минут. Причем,
эта задача может иметь и практическое применение. Можно создать браузер, осуществляющий
доступ только на те серверы, которые требуются для служебных нужд. Во-вторых, многие
корпоративные задачи, также, можно решить, если в организации установить сервер Web.
В результате будет создано то, что называется интранет. В этом случае можно
использовать свой браузер и настроить его так, чтобы осуществлять доступ только к внутреннему Web-серверу компании.
Для создания браузера нужно выполнить следующие действия:
Align значение alTop и значение 60 для свойства Height. Свойство Caption очистите.
размера панели. Далее можно присвоить в качестве значения свойству Text имя
некоторого Web-сервера (например, http://www.rambler.ru).
формы. Измените значение свойства SimplePanel наTrue.
центре формы. После изменения свойства Align на alClient этот компонент заполнит
все свободное пространство формы. Теперь форма выглядит, как показано на рисунке 1.
Рис.1. Внешний вид формы
Для этого в Инспекторе Объектов на странице Events дважды щелкните на пустом поле
напротив события OnClick. В обработчик данного события нужно вставить следующий код:
if (ComboBox1.Text <> '') then WebBrowser1.Navigate(ComboBox1.Text);
if (Key = VK_RETURN) then begin Key: = 0; if (ComboBox1.Text = '') then exit; ComboBox1.Items.Insert(0,ComboBox1.Text); ComboBox1Click (Sender); end;
появится форма. Если в поле со списком указан правильный адрес, то в браузер должна загрузиться
страница с указанного ресурса. Если в адресе ошибка - нужно отредактировать строку и
опять нажать Enter. Результат работы приложения изображен на рисунке 2:
Рис.2. Результат работы приложения
Добавим еще несколько деталей.
Во всех популярных программах просмотра Web в строке состояния отображается процесс
загрузки документов. В данном приложении можно тоже реализовать эту возможность. На этом
примере можно рассмотреть еще несколько свойств компонента TWebBrowser. Для этого
вставим в процедуру обработки события OnProgressChange этого компонента следующий текст:
procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); var Percent: Integer; begin if Progress<=0 then StatusBar1.SimpleText:='Выполнено' else begin if ProgressMax=0 then Percent:=0 else Percent:=(Progress*100) div ProgressMax; StatusBar1.SimpleText:=Format('Получение документа:%d%% из %dK',[Percent,ProgressMax div 1024]); end; end;
Параметры Progress и ProgressMax обработчика события OnProgressChange содержат значения в байтах полученной части документа и его размера. В результате формула:
Percent: = (Progress *100) div ProgressMax;
будет давать процент загрузки документа. Когда документ получен полностью, параметр Progress принимает значение -1.
В этом случае в строке состояния будет пропечатываться слово "Выполнено".
В данной программе пока нет ни меню, ни кнопок. Далее можно добавить на панель пять командных
кнопок, на которых делаются надписи "Обновить", "Стоп", "Домой", "Вперед" и "Назад", а
в обработчики события OnClick этих кнопок добавить вызовы методов Refresh, Stop, GoHome, GoForward и
GoBack соответственно. Добавляемый текст можно увидеть в листинге.
Метод Home загружает домашнюю страницу. URL этой страницы выбирается из раздела
реестра Windows:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main,
где он помещtн под именем Startpage. Это значение можно изменить в Delphi с
помощью объектов TRegistry или TRegistryIniFile или непосредственно в Windows через настройки Internet Explorer'a.
Внешний вид окна браузера приведен на рисунке 3.
Рис.3. Окончательный вид браузера
Текст приложения:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, ComCtrls, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; ComboBox1: TComboBox; StatusBar1: TStatusBar; WebBrowser1: TWebBrowser; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure ComboBox1Click(Sender: TObject); procedure ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ComboBox1Click(Sender: TObject); begin if (ComboBox1.Text <> '') then WebBrowser1.Navigate(ComboBox1.Text); end; procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_RETURN) then begin Key:= 0; if (ComboBox1.Text = '') then exit; ComboBox1.Items.Insert(0,ComboBox1.Text); ComboBox1Click (Sender); end; end; procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); var Percent: Integer; begin if Progress<=0 then StatusBar1.SimpleText:='Выполнено' else begin if ProgressMax=0 then Percent:=0 else Percent:=(Progress*100) div ProgressMax; StatusBar1.SimpleText:=Format ('Получение документа:%d%% из %dK',[Percent,ProgressMax div 1024]); end; end; procedure TForm1.Button1Click(Sender: TObject); //Кнопка "Обновить". begin WebBrowser1.Refresh(); end; procedure TForm1.Button2Click(Sender: TObject); //Кнопка "Стоп". begin WebBrowser1.Stop(); StatusBar1.SimpleText:='Выполнено'; end; procedure TForm1.Button3Click(Sender: TObject); //Кнопка "Домой". begin WebBrowser1.GoHome(); end; procedure TForm1.Button4Click(Sender: TObject); //Кнопка "Вперед". begin WebBrowser1.GoForward(); end; procedure TForm1.Button5Click(Sender: TObject); //Кнопка "Назад". begin WebBrowser1.GoBack(); end; end.
Текст приложения можно взять здесь.
На следующем шаге мы приведем некоторый дополнительный теоретический материал.