Delphi Labs: DataSnap XE - 簡易電卓サービス

By: Chikako Yonezawa

Abstract: Delphi XE と DataSnapを使用して、簡易電卓サービスとクライアントアプリケーションを構築するためのステップバイステップのチュートリアル

    簡易電卓サーバーアプリケーションの作成

まず最初に、“DataSnap Server”ウィザードで、新しい DataSnap サーバーアプリケーションを作成します。

Delphi XE を起動します。

メインメニューで [ファイル|新規作成|その他] を選択し、表示された「新規作成」ダイアログで、[Delphi プロジェクト|DataSnap Server] カテゴリの Data Snap Server アイコンをダブルクリックします。

Hide image
DataSnap01

Hide image
Click to see full-sized image

最初に「プロジェクトの種類」を選択します。ここではデフォルトの「VCLフォームアプリケーション」を選択し、次へ進みます。

Hide image
Click to see full-sized image

次にサーバーの機能を選択します。全てデフォルトのままの選択とします。後で、作成されたサンプルの DataSnap サーバーメソッドを独自の実装に置き換えます。

Hide image
Click to see full-sized image

次に「ポート番号」を指定します。TCP/IP ポートのデフォルトの値である 211のままとします。[ポートのテスト] のボタンをクリックすると、ポート番号が使用可能かどうかをテストすることができます。

Hide image
Click to see full-sized image

最後に、サーバーメソッドの上位クラスを指定します。デフォルトの TComponent を選択した状態とし、[完了] ボタンをクリックします。ウィザードは 3つのユニットをもった新しいプロジェクトを生成します。

[ファイル|すべて保存]をクリックしてプロジェクトを保存します。その際、例えば、“C:\DataSnapLabs\SimpleCalc” のような新しいディレクトリを作成し、このラボのすべてのファイルを格納します。

メインのアプリケーションフォーム名は “FormServerUnit”として保存します。そして、他のユニットはデフォルトの名前である “ServerContainerUnit1”、“ServerMethodsUnit1” のままとします。そして、プロジェクト名を “SimpleCalcServer” として保存します。

Delphi のプロジェクトマネージャー上で確認すると以下のようになります:

Hide image
DataSnap06

“ServerMethodsUnit1.pas” を開き、簡易電卓サービスの機能を実装します。ウィザードによって作成されたサンプルメソッド (“EchoString” と “ReverseString”) を、“Add”, “Subtract”, “Multiply”, “Divide” メソッドに置き換えます。

“ServerMethodsUnit1” のソースコードは以下のようになります:

unit ServerMethodsUnit1;

interface

uses
  Classes;

type
{$METHODINFO ON}
  TServerMethods1 = class(TComponent)
  private
    { Private declarations }
  public
    function Add(a, b: double): double;
    function Subtract(a, b: double): double;
    function Multiply(a, b: double): double;
    function Divide(a, b: double): double;
  end;
{$METHODINFO OFF}

implementation

{ TServerMethods1 }

function TServerMethods1.Add(a, b: double): double;
begin
  Result := a + b;
end;

function TServerMethods1.Subtract(a, b: double): double;
begin
  Result := a - b;
end;

function TServerMethods1.Multiply(a, b: double): double;
begin
  Result := a * b;
end;

function TServerMethods1.Divide(a, b: double): double;
begin
  Result := a / b;
end;

end.

Listing 1: ServerMethodsUnit1.pas.

サーバーの実装が完了しました。クライアントアプリケーションの開発の為にサーバーを動作させる必要があります。

[実行|デバッカを使わずに実行] でサーバープロジェクトを実行し、そのウィンドウを最小化しておきます。

このラボの作業が終了するまで、サーバーをシャットダウンしないで下さい。

    簡易電卓クライアントアプリケーションの作成

プロジェクトマネージャ内のプロジェクトグループを選択し、マウスの右ボタンをクリックします。表示されたポップアップメニューより「新規プロジェクトを追加」を選択します。

Hide image
DataSnap07

「新規作成」ダイアログの [Delphi プロジェクト] カテゴリの 「VCL フォームアプリケーション」を選択します。

Hide image
DataSnap08

[OK] ボタンをクリックして、プロジェクトグループに新しいプロジェクトを追加します。

メニューの[ファイル|すべて保存]でサーバープロジェクトと同じところに保存します。その際、クライアントアプリケーションのメインフォーム名を “FormClientUnit” とし、新しいプロジェクト名は “SimpleCalcClient” とします。また、プロジェクトグループ名は “SimpleCalcGrp” とします。

この時点で、プロジェクトマネージャには以下のように表示されます:

Hide image
DataSnap09

クライアントプロジェクトをアクティブにして、「新規作成」ダイアログから「DataSnap クライアントモジュールを選択します。

Hide image
DataSnap10

起動したウィザードでは、すべてデフォルトを選択することになります。

Hide image
Click to see full-sized image

DataSnapサーバーの場所は、ローカルサーバーのままとします。

Hide image
Click to see full-sized image

DataSnap サーバーは、スタンドアロンで、デフォルトのままとし、[次へ] をクリックします。

Hide image
Click to see full-sized image

サーバーでは接続プロトコルとして “TCP/IP” を使用しますので、デフォルトの選択のままとします。

Hide image
Click to see full-sized image

[接続テスト] をクリックして、デフォルトのポートである 211でサーバーと通信できるか確かめます。そして [完了]をクリックします。

このウィザードは、クライアントプロジェクトに “ClientClassesUnit1” と “ClientModuleUnit1” の2つのユニットを追加します。

このラボの最後の仕事として、クライアントアプリケーションのユーザーインターフェースの実装を行います。

まず最初に、クライアントフォームのユニットを開き、[ファイル|ユニットを使う]を選択し、クライアントのメインフォームのユニットで、“ClientModuleUnit1” を使用するように設定します。

クライアントフォームのコード内で、“ClientModule1.ServerMethods1Client” プロパティが公開するメソッドを使用する必要があります。これらのメソッドは、サーバー上で使用可能なメソッドと同じ名前、シグネチャです。.

以下が、メインのクライアントアプリケーションフォームの実装です。

unit FormClientUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    EditA: TEdit;
    ButtonAdd: TButton;
    EditB: TEdit;
    ButtonSub: TButton;
    ButtonMult: TButton;
    ButtonDiv: TButton;
    LabelResult: TLabel;
    procedure ButtonAddClick(Sender: TObject);
    procedure ButtonSubClick(Sender: TObject);
    procedure ButtonMultClick(Sender: TObject);
    procedure ButtonDivClick(Sender: TObject);
  private
    { Private declarations }
  public
    function GetA: double;
    function GetB: double;
    procedure ShowResult(aValue: double);
  end;

var
  Form3: TForm3;

implementation

uses ClientModuleUnit1;

{$R *.dfm}

function TForm3.GetA: double;
begin
  Result := StrToFloat(EditA.Text);
end;

function TForm3.GetB: double;
begin
  Result := StrToFloat(EditB.Text)
end;

procedure TForm3.ShowResult(aValue: double);
begin
  LabelResult.Caption := FloatToStr(aValue);
end;

procedure TForm3.ButtonDivClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Divide(GetA, GetB));
end;

procedure TForm3.ButtonMultClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Multiply(GetA, GetB));
end;

procedure TForm3.ButtonSubClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Subtract(GetA, GetB));
end;

procedure TForm3.ButtonAddClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Add(GetA, GetB));
end;

end.

Listing 2: クライアントのメインフォームの実装

クライアントの表示はこのようになります:

Hide image

これだけ!

Delphi XE で DataSnap サーバーとクライアントの作成がとても簡単にできますよね。

    まとめ

この Delphiラボでは、TCP/IP プロトコルを使用し、相互に通信するネイティブの Win32 アプリケーションのサーバーとクライアントから成る簡単な電卓の DataSnap XE サービスを Delphi XE で構築しました。

この記事のすべてのソースコードは http://cc.embarcadero.com/Item/28184 にあります。

この記事内の手順の説明ビデオバージョンが YouTube 上の(http://www.youtube.com/watch?v=Qm__RdmIWSg) にあります。

Delphi の詳細情報は、Delphi ホームページhttp://www.embarcadero.com/jp/products/delphi で得ることができます。

Server Response from: ETNASC03