データ モジュールに idudpserver があり、この DM をサーバー フォームにリンクしています。私のサーバー フォームは、このデータ モジュールを使用します。クライアントが udp ポートからサーバーにメッセージを送信すると、データ モジュールの IdUDPServer1UDPRead イベントが発生しますが、サーバーでこのイベントを使用して結果をサーバーのメモに書き込む必要があります。どうやってやるの?
データ モジュールはサーバーから完全に独立している必要があります。
サーバー フォームから設定できるイベント プロパティをデータ モジュールに追加します。
割り当てられている場合は、データモジュールから呼び出します。
例: データモジュール
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;