起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 217|回复: 11

【结贴】关于消息**

[复制链接]
发表于 2008-9-16 16:29:53 | 显示全部楼层 |阅读模式
我做了两个功能,A功能调用B功能,B功能结束时,发消息给A功能通知A刷新数据集,刷新操作放在一个自定义函数中,请问,如何在A接收到消息后,调用我的自定义函数?
回复

使用道具 举报

发表于 2008-9-16 16:34:26 | 显示全部楼层
http://bbs.justep.com/forum.php?mod=viewthread&tid=18518
----------------------完整例子
发送端
---

procedure TMainForm.Button1Click(Sender: TObject);
var
     lMsg: TMyMessage;
begin
  lMsg := TMyMessage.Create();

  BizSys.GlobalContext.SendMessage(lMsg);
  lMsg.Free;

end;
自定义消息端
-----
   TMyMessage = class(TBizMessage)
  private

  public
    constructor Create();
    static function Name: String;

  end;

implementation

constructor TMyMessage.Create();
begin
  inherited Create(TMyMessage.Name);
end;

static function TMyMessage.Name: String;
begin
  Result := 'FLOW_MESSAGE';
end;
end.
---接收端
  自定义接收类
  //lxy
  TMyMessageHandler = class(TBizMessageHandler)
  private
       FOnMyDo: TNotifyEvent;
  public
    procedure DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean); override;
     property OnMyDo: TNotifyEvent read FOnMyDo write FOnMyDo;
  end;

procedure TMyMessageHandler.DoExecute(AMessage: TBizMessage; const AParam: THandleParam;
      var Handled: Boolean);
begin
  if AMessage is WDXXZY.TMyMessage then
  begin

   if Assigned(FOnMyDo) then
          FOnMyDo(nil);
    Handled := True;
  end;
end;
  ---操作对象
  //lxy
   lxymsg : TMyMessageHandler;
//lxy msg
    procedure setFlowBtn(Sender: TObject);

implementation   

procedure TSTANDARDSTYLEMAINFORM.BizFormShow(Sender: TObject);
begin
   省略自带代码
   ..................

  ///lxy msg
  lxymsg := TMyMessageHandler.Create;
  TMyMessageHandler(lxymsg).OnMyDo:=setflowbtn;
  BizSys.GlobalContext.AddMessageHandler(wdxxzy.TMyMessage.Name, lxymsg);

end;


procedure TSTANDARDSTYLEMAINFORM.setFlowBtn(Sender: TObject);
begin
       fbtPrev.Visible:=not        fbtPrev.Visible;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-16 16:57:29 | 显示全部楼层
编译报错:Incompatible types:"TNotifyEvent" and "Void"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-17 09:21:27 | 显示全部楼层
帮帮忙啊,是什么问题啊?
回复 支持 反对

使用道具 举报

发表于 2008-9-17 09:26:42 | 显示全部楼层
不知道,2楼是我自己写的例子,没报错呀。
NameSpace: Business.System
--------------------------------------------------------------------------------
TNotifyEvent = procedure(Sender: TObject) of Object;
回复 支持 反对

使用道具 举报

发表于 2008-9-17 09:33:38 | 显示全部楼层
3楼的错误是类型不匹配吧。楼主你怎么做得呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-17 09:36:48 | 显示全部楼层
TMyMessageHandler(lxymsg).OnMyDo:=setflowbtn 如果setflowbtn是窗体中控件的事件,就不报错,而且运行正确,但如果换成我自定义的事件,就会报不匹配的错。
回复 支持 反对

使用道具 举报

发表于 2008-9-17 09:42:11 | 显示全部楼层
setflowbtn 事件定义与你自定义的事件定义有什么区别么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-17 09:42:42 | 显示全部楼层
知道了,是参数的问题,TNotifyEvent类型的事件必须接收一个TObject类型的参数,而我的自定义函数是没有参数的,所以编译不过去,在我自定义的方法中加入一个参数就可以正常运行了。请问,有没有一种事件类型是不带参数的?因为我的自定义函数不需要参数。
回复 支持 反对

使用道具 举报

发表于 2008-9-17 09:45:37 | 显示全部楼层
哦,那你在你事件中加上一个TObject的参数就是了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 04:31 , Processed in 0.036184 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表