Thursday, December 01, 2005

Delphi / DDE #3

「TDdeClientConv」で、DDEリンクの接続と切断の仕方を覚えます。
 空フォームにTButton x 2, TDdeClientConv x 1 を追加して、それぞれのボタンのイベントを以下のようにします。

procedure TForm1.Button1Click(Sender: TObject);
begin
 // リンク接続
 DdeClientConv1.ConnectMode := ddeAutomatic;
 if DdeClientConv1.SetLink('ddeserver', 'topic1') then
 begin
   // データ読み出し
  Button1.caption := DdeClientConv1.RequestData('item1');
 end;
 // リンク切断
 DdeClientConv1.CloseLink;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 // リンク接続
 DdeClientConv1.ConnectMode := ddeManual;
 DdeClientConv1.SetLink('ddeserver', 'topic1');
 if DdeClientConv1.OpenLink then
 begin
  // データ読み出し
   Button2.caption := DdeClientConv1.RequestData('item2');
 end;
 // リンク切断
 DdeClientConv1.CloseLink;
end;

 #2のテスト・サーバを先に起動しておいてから、このプログラムを実行します。ボタンを押すとサーバ側、上2つのスクロールバーの値をそれぞれ取得できるはずです。

 通信手順的には、「リンク接続 >> 通信可 >> リンク切断」となります。「.SetLink('サービス', 'トピック')メソッド」が接続の開始です。テストサーバのサービスは、「ddeserver」、トピックは、「topic1」と「topic2」です。よって、「DdeClientConv1.SetLink('ddeserver', 'topic1')」という形式で指定します。

 「ConnectModeプロパティ」が、「ddeAutomatic」と「ddeManual」の時、それぞれリンク接続の仕方が違います。「ddeAutomatic」ならば、「.SetLink」だけで接続されますが、「ddeManual」の時は、自分で「.OpenLink」を呼び出さなければなりません。

 接続・切断は、特に理由がないのなら一度接続したら終了時まで繋いだままで構いません。この同時に接続できる数の上限が、300個です。リンク接続時に若干の時間は掛かりますが、繋がってしまえば、変化のあった項目だけを自動更新してくれる仕組みが、「TDdeClientItem」にあります。

 「.RequestData('アイテム')メソッド」で、データを読み込めますが、特殊な使い方するとき以外は使わないと思います。
 <宿題1>

 ・TButton x 1
 ・TLabel x 6
 ・TDdeClientConv x 2

 ・起動時にリンク接続、終了時にリンク切断
 ・ボタン押したら、6つのデータをラベルに表示する

0 Comments:

Post a Comment

<< Home