Шаг 36.
Создание Internet-приложений в среде Delphi. Компонент TNMTime

    На этом шаге мы рассмотрим компонент TNMTime и приведем пример его использования.

    Компонент TNMTime получает данные от серверов времени в соответствии с протоколом RFC 868.

    Перед тем, как запросить время у сервера времени, необходимо в свойстве Host указать имя сервера или его IP-адрес. Свойство Port изменяется только в том случае, если сервер, к которому обращается программа, "слушает" нестандартный порт.

    После задания имени сервера читается содержание свойства TimeStr, в которое записывается полученное от сервера времени, значение.

    У этого компонента нет собственных методов и событий, и только два своих свойства TimeStr и TimeInt, остальные наследуются от TComponent и TPowersock.


    Пример.

    Чтобы создать рассматриваемую программу с компонентом TNMTime, нужно поместить в форму нового приложения панель и на панели разместить кнопку, две метки, окна редактирования и компонент TNMTime. Кроме этого, на форму нужно добавить еще одну метку и строку состояния. Назначение этих компонентов понятно из рисунка 1.


Рис.1. Приложение на этапе проектирования

    Затем следует записать в обработчик события OnClick кнопки Button1 следующий текст:

  NMTime1.Host := Edit1.Text; 
  NMTime1.Port := StrToInt(Edit2.Text); 
  NMTime1.TimeOut := 30000; 
  Labe13.Caption := StdCap+NMTime1.TimeStr;

    Перед тем, как нажать на кнопку "Получить время", вводится имя сервера "time.nist.gov". Время ожидания задается равным 30 секундам.

    Текст программы приводится ниже.

unit TiraeDem;
interface
uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
     StdCtrls, Psock, ExtCtrls, NMTime, ComCtrls;
type
    TForm1 = class(TForm) 
    Pane11: TPane1;
    Edit2: TEdit;       //окно ввода номера порта
    Labe11: TLabe1;     //"Сервер"
    Labe12: TLabe1;     //"Порт"
    Button1: TButton;   //"Получить время"
    Labe13: TLabe1;     //текущее время
    NMTime1: TNMTime; 
    StatusBar1: TStatusBar;
    Edit1: TEdit;       //окно ввода имени сервера
    procedure Button1Click(Sender: TObject);
    procedure NMTime1Connect(Sender: TObject); 
    procedure NMTime1ConnectionFailed(Sender: TObject); 
    procedure NMTime1Disconnect(Sender: TObject); 
    procedure NMTime1HostResolved(Sender: TComponent);
    procedure NMTime1InvalidHost(var handled: Boolean);
    procedure NMTime1Status(Sender: TComponent; Status: String); 
    private
      { Private declarations } 
    public
      { Public declarations } 
   end;
    const
      StdCap = 'Текущее время : ';    
    var
      Form1: TForm1;
    implementation 
    {$R *.DFM}
    procedure TForm1.Button1Click(Sender: TObject); 
     begin
      NMTime1.Host := Edit1.Text;
      NMTime1.Port := StrToInt(Edit2.Text) ;
      NMTime1.Timeout := 30000;
      Labe13.Caption := StdCap+NMTime1.TimeStr; 
     end;

    procedure TForm1.NMTime1Connect(Sender: TObject); 
     begin
      StatusBar1.SimpleText := 'Соединение установлено'; 
     end;

    procedure TForm1.NMTime1ConnectionFailed(Sender: TObject);   
     begin
      ShowMessage('Ошибка соединения'); 
     end;

    procedure TForm1.NMTime1Disconnect(Sender: TObject); 
      begin
        if StatusBar1 <> nil then
           StatusBar1.SimpleText:= 'Соединение завершено'; 
      end;

    procedure TForm1.NMTime1HostResolved(Sender: TComponent); 
     begin
      StatusBar1.SimpleText := 'Соединение с узлом'; 
     end;

    procedure TForm1.NMTime1InvalidHost(var handled: Boolean);     
    var
      TmpStr: String; 
    begin
      if (InputQuery('Указано неверное имя сервера', 'Введите 
          правильное имя', TmpStr)) then
           begin
             NMTime1.Host := TmpStr;
             Edit 1.Text := TmpStr;
             handled := true;
          end;
    end; 

   procedure TForm1.NMTime1Status(Sender: TComponent; Status: String); 
    begin
      if (StatusBar1 <> nil) then
        StatusBar1.SimpleText := Status; 
    end;
   end.
Текст этого приложения можно взять здесь.

    На следующем шаге мы рассмотрим компоненты TNMMsg и TNMMsgServ.




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