著作権の保護期間延長に反対します

2002年8月31日作成 2002年8月31日更新

Delphi 6 Personal で「伺か」をしゃべらせてみる

Delphi 6 Personal で「伺か」をしゃべらせてみようとおもったんです。TClientSocketを使えばよさそうってことは、なんとなくわかったんですが、Personal版にはTClientSocketのヘルプが含まれていないでしょう。使い方がよくわからなくて困ったなと思っていたら、MCI_Error's programming siteさんのwebサイトで、TClientSocketを使用した、簡単な通信コンポーネントの作成という記事を見つけまして、参考にしながら、なんとなーく書いてみました。

あ、SSTPについては、SSTPの仕様書を読んどいてください。


れんしゅうってことで、ボタンを押したら、伺かが何かしゃべるってのを作ってみます。

とりあえずこんなフォームをつくります。まあ、適当にやってください。

で、ボタンが押された時に、SSTPサーバーに接続するように、Button1のOnClickイベントに処理を書く。

  ClientSocket1.Host:='localhost';
  ClientSocket1.Port:=9801;
  ClientSocket1.Open;

接続が完了したら、ClientSocket1のOnConnectイベントが発生するので、そこでメッセージを送信する。

  ClientSocket1.Socket.SendText('NOTIFY SSTP/1.1'+#13#10);
  ClientSocket1.Socket.SendText('Sender: さくら'+#13#10);
  ClientSocket1.Socket.SendText('Event: OnMusicPlay'+#13#10);
  ClientSocket1.Socket.SendText('Reference0: 元祖高木ブー伝説'+#13#10);
  ClientSocket1.Socket.SendText('Reference1: 筋肉少女帯'+#13#10);
  ClientSocket1.Socket.SendText('IfGhost: なる,ゆうか'+#13#10);
  ClientSocket1.Socket.SendText('Script: \h\s0‥‥\w8\w8高木ブーだね。\u\s0‥‥\e'+#13#10);
  ClientSocket1.Socket.SendText('IfGhost: さくら,うにゅう'+#13#10);
  ClientSocket1.Socket.SendText('Script: \h\s0‥‥\w8\w8高木ブーだね。\u\s0‥‥\w8\w8むう。\e'+#13#10);
  ClientSocket1.Socket.SendText('Charset: Shift_JIS'+#13+#10);
  ClientSocket1.Socket.SendText(#13#10);

ここで、改行コードを入れ忘れないように注意しよう。

サーバーからなにかメッセージを受信したら、OnReadイベントが発生するので、そこで、受信したメッセージをmemoに表示する。

  Memo1.Lines.Append(ClientSocket1.Socket.ReceiveText);

ずいぶん簡単だけれど、これでおしまいだ。実行してみるとこんな感じ

ソース全体はこんな感じ。

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    ClientSocket1: TClientSocket;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket1.Host:='localhost';
  ClientSocket1.Port:=9801;
  ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ClientSocket1.Socket.SendText('NOTIFY SSTP/1.1'+#13#10);
  ClientSocket1.Socket.SendText('Sender: さくら'+#13#10);
  ClientSocket1.Socket.SendText('Event: OnMusicPlay'+#13#10);
  ClientSocket1.Socket.SendText('Reference0: 元祖高木ブー伝説'+#13#10);
  ClientSocket1.Socket.SendText('Reference1: 筋肉少女帯'+#13#10);
  ClientSocket1.Socket.SendText('IfGhost: なる,ゆうか'+#13#10);
  ClientSocket1.Socket.SendText('Script: \h\s0‥‥\w8\w8高木ブーだね。\u\s0‥‥\e'+#13#10);
  ClientSocket1.Socket.SendText('IfGhost: さくら,うにゅう'+#13#10);
  ClientSocket1.Socket.SendText('Script: \h\s0‥‥\w8\w8高木ブーだね。\u\s0‥‥\w8\w8むう。\e'+#13#10);
  ClientSocket1.Socket.SendText('Charset: Shift_JIS'+#13+#10);
  ClientSocket1.Socket.SendText(#13#10);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Append(ClientSocket1.Socket.ReceiveText);
end;

end.


webmaster@kyoutan.jpn.org

('A`)