以其他形式使用数据模块事件

时间:2013-05-28 06:13:04

标签: delphi delphi-7

我在数据模块中有一个idudpserver,并将此DM链接到服务器表单。 我的服务器表单使用此数据模块。当客户端从udp端口向服务器发送消息时,会引发datamodule中的IdUDPServer1UDPRead事件,但我必须在服务器中使用此事件将结果写入服务器的备忘录中。我怎么能这样做?

我的数据模块必须完全独立于服务器。

1 个答案:

答案 0 :(得分:3)

将事件属性添加到数据模块,可以从服务器表单中进行设置 如果已分配,则从数据模块中调用它。

e.g。数据模块

type
  TCallBackMessage=Procedure (Sender:TObject;const msg:String) of object;

  TDataModule2 = class(TDataModule)
    Event: TTimer; // just for test
    procedure EventEvent(Sender: TObject);
  private
    FCallBackMessage: TCallBackMessage;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Property CallBack:TCallBackMessage read FCallBackMessage Write FCallBackMessage;
  end;

var
  DataModule2: TDataModule2;

implementation

{$R *.dfm}

procedure TDataModule2.EventEvent(Sender: TObject);
begin
   if Assigned(CallBack) then CallBack(self,'MyMessage')

end;

服务器

procedure TForm1.MyCallBack(Sender: TObject; const Msg: String);
begin
  Showmessage('Hallo')
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  if not Assigned(Datamodule2.CallBack) then
    Datamodule2.CallBack := MyCallBack;
end;