Шаг 10.
Создание Internet-приложений в среде Delphi. Создание Web-браузера

    На этом шаге мы рассмотрим создание Web-браузера с помощью Delphi.

    Поскольку WWW заняла в Интернет положение явного лидера, а инструменты для ее просмотра, браузеры, стали, соответственно, чуть ли не самыми популярными программами, - существует возможность изготовить такую программу самостоятельно с помощью Delphi. Web-браузер в Delphi можно изготовить всего за несколько минут. Причем, эта задача может иметь и практическое применение. Можно создать браузер, осуществляющий доступ только на те серверы, которые требуются для служебных нужд. Во-вторых, многие корпоративные задачи, также, можно решить, если в организации установить сервер Web. В результате будет создано то, что называется интранет. В этом случае можно использовать свой браузер и настроить его так, чтобы осуществлять доступ только к внутреннему Web-серверу компании.

    Для создания браузера нужно выполнить следующие действия:

  1. Создать новое приложение. Свойству Caption формы присвоить значение "Браузер".
  2. Поместить на форму компонент Panel и изменить его размеры, задав свойству Align значение alTop и значение 60 для свойства Height. Свойство Caption очистите.
  3. Добавить в панель компонент ComboBox и увеличить ширину этого компонента до размера панели. Далее можно присвоить в качестве значения свойству Text имя некоторого Web-сервера (например, http://www.rambler.ru).
  4. Добавить компонент StatusBar. Он автоматически поместится в нижней части формы. Измените значение свойства SimplePanel наTrue.
  5. Последним компонентом будет компонент TWebBrowser. Нужно поместить его в центре формы. После изменения свойства Align на alClient этот компонент заполнит все свободное пространство формы. Теперь форма выглядит, как показано на рисунке 1.


    Рис.1. Внешний вид формы

  6. Выберите поле со списком ComboBox1 и создайте обработчик события OnClick. Для этого в Инспекторе Объектов на странице Events дважды щелкните на пустом поле напротив события OnClick. В обработчик данного события нужно вставить следующий код:

      if (ComboBox1.Text <> '') then WebBrowser1.Navigate(ComboBox1.Text);
    
  7. Далее создайте обработчик события OnKeyDown, в него добавьте следующие строки:
      if (Key = VK_RETURN) then
      begin
        Key: = 0;
        if (ComboBox1.Text = '') then exit;
        ComboBox1.Items.Insert(0,ComboBox1.Text);
        ComboBox1Click (Sender);
      end;
    
  8. Откомпилируйте и запустите программу. Нажимите на клавишу Enter, когда на экране появится форма. Если в поле со списком указан правильный адрес, то в браузер должна загрузиться страница с указанного ресурса. Если в адресе ошибка - нужно отредактировать строку и опять нажать 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.

Текст приложения можно взять здесь.

    На следующем шаге мы приведем некоторый дополнительный теоретический материал.




Предыдущий шаг Содержание Следующий шаг