Q&A

  • 여러 DDE item 을 연결했을때...
밑에 질문을 드렸는데 아무도 대답을 안해 주어서리....

질문을 조금 바꾸었습니다.



3개의 DdeClientItem을 놓고 DdeClientItem의 DdeConv를 동일한 DdeClientConv와 연결하였습니다. 그리고 item은 다른것을 입력하였습니다.



실행결과 처음 SetLink를 할때는 각각 연결된 값을 잘 읽습니다만, DdeServer의

값이 변경될때 처음 연결된 item만 OnChange event가 발생하고 나머지는 발생하지 않습니다.



어떻게 하면 나머지 item도 server의 data가 바뀔때 OnChange event가 일어나겠습니까?

많은 도움 바랍니다.



첨부한 File은 Excel을 상대로 Test한 것입니다. 참고 바랍니다.

unit MultiDDE;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, DdeMan, ExtCtrls;



type

TForm1 = class(TForm)

DdeClientConv1: TDdeClientConv;

DdeClientItem1: TDdeClientItem;

edtLink1_1: TEdit;

DdeClientItem2: TDdeClientItem;

edtTopic1: TEdit;

edtTopic2: TEdit;

edtItem1_1: TEdit;

edtLink1_2: TEdit;

edtItem1_2: TEdit;

edtLink1_3: TEdit;

edtItem1_3: TEdit;

edtLink2_2: TEdit;

edtItem2_2: TEdit;

edtLink2_3: TEdit;

edtItem2_3: TEdit;

edtLink2_1: TEdit;

edtItem2_1: TEdit;

DdeClientItem3: TDdeClientItem;

DdeClientItem4: TDdeClientItem;

DdeClientItem5: TDdeClientItem;

DdeClientItem6: TDdeClientItem;

setDDE: TButton;

Poke: TButton;

Request: TButton;

Bevel1: TBevel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Bevel2: TBevel;

Label1: TLabel;

Label2: TLabel;

DdeClientConv4: TDdeClientConv;

Button4: TButton;

Button5: TButton;

Advise: TButton;

Button6: TButton;

procedure setDDEClick(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure DdeClientItem1Change(Sender: TObject);

procedure DdeClientItem2Change(Sender: TObject);

procedure DdeClientItem3Change(Sender: TObject);

procedure DdeClientItem4Change(Sender: TObject);

procedure DdeClientItem5Change(Sender: TObject);

procedure DdeClientItem6Change(Sender: TObject);

procedure RequestClick(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure AdviseClick(Sender: TObject);

private

{ Private declarations }

procedure proSetDDE1;

procedure proSetItem1;

procedure proSetDDE2;

procedure proSetItem2;

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.proSetDDE1;

begin

if not DdeClientConv1.SetLink('Excel',edtTopic1.Text+'.xls') then

begin

Label1.Caption := 'NG';

Exit;

end;

label1.Caption := 'OK';

{ if not DdeClientConv2.SetLink('Excel',edtTopic1.Text+'.xls') then

begin

Label1.Caption := 'NG';

Exit;

end;

{ if not DdeClientConv3.SetLink('Excel',edtTopic1.Text+'.xls') then

begin

Label1.Caption := 'NG';

Exit;

end;

}

end;



procedure TForm1.proSetItem1;

begin

DdeClientItem1.DdeItem := edtItem1_1.Text;

DdeClientItem2.DdeItem := edtItem1_2.Text;

DdeClientItem3.DdeItem := edtItem1_3.Text;

end;



procedure TForm1.proSetDDE2;

begin

if not DdeClientConv4.SetLink('Excel',edtTopic2.Text+'.xls') then

begin

Label2.Caption := 'NG';

Exit;

end;

label2.Caption := 'OK';

{ if not DdeClientConv5.SetLink('Excel',edtTopic2.Text+'.xls') then

begin

Label2.Caption := 'NG';

Exit;

end;

if not DdeClientConv6.SetLink('Excel',edtTopic2.Text+'.xls') then

begin

Label2.Caption := 'NG';

Exit;

end;

}

end;



procedure TForm1.proSetItem2;

begin

DdeClientItem4.DdeItem := edtItem2_1.Text;

DdeClientItem5.DdeItem := edtItem2_2.Text;

DdeClientItem6.DdeItem := edtItem2_3.Text;

end;



procedure TForm1.setDDEClick(Sender: TObject);

begin

proSetDDE1;

proSetItem1

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

proSetDDE2;

proSetItem2;

end;



procedure TForm1.DdeClientItem1Change(Sender: TObject);

begin

edtLink1_1.Text := DdeClientItem1.Text;

// proSetDDE1;

end;



procedure TForm1.DdeClientItem2Change(Sender: TObject);

begin

edtLink1_2.Text := DdeClientItem2.Text;

// proSetDDE1;

end;



procedure TForm1.DdeClientItem3Change(Sender: TObject);

begin

edtLink1_3.Text := DdeClientItem3.Text;

// proSetDDE1;

end;



procedure TForm1.DdeClientItem4Change(Sender: TObject);

begin

edtLink2_1.Text := DdeClientItem4.Text;

// proSetDDE2;

end;



procedure TForm1.DdeClientItem5Change(Sender: TObject);

begin

edtLink2_2.Text := DdeClientItem5.Text;

// proSetDDE2;

end;



procedure TForm1.DdeClientItem6Change(Sender: TObject);

begin

edtLink2_3.Text := DdeClientItem6.Text;

// proSetDDE2;

end;



procedure TForm1.RequestClick(Sender: TObject);

begin

DdeClientConv1.RequestData(edtItem1_2.Text);

end;



procedure TForm1.Button4Click(Sender: TObject);

begin

DdeClientConv1.OpenLink;

end;



procedure TForm1.Button5Click(Sender: TObject);

begin

DdeClientConv1.CloseLink;

end;



procedure TForm1.AdviseClick(Sender: TObject);

begin

DdeClientConv1.StartAdvise;

end;



end.



0  COMMENTS