博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

利用消息在窗体之间传递命令

Posted on 2008-11-07 09:44  YangHe  阅读(191)  评论(0)    收藏  举报
利用消息在窗体之间传递命令
 如果一个对象单元中有其他单元需要调用的Func或Proc时怎么办,利用单元的对象引用?NO.虽然此方法常见,但非最好的。现用消息传递来实现。看例如下:
现设单元Main中的有个一Func CreateTV(在树状列表中显示员工信息),子单元Epy(员工信息表)要添加或删除员工时,Main中的员工列表信息即时的更新。
 
第一步:定义消息常量
Const WM_Refresh=WM_USER+0001; (要确保这个消息常量可以被任何单元引用到)
第二步:在接受消息的单元中设定消息过程(本例中是Main单元)
type
  TMain = class(Tform)
private
  procedure RefTV(var msg :TMessage);message WM_REFRSH;
public
end;
var
  Main: TMain;
implementation
{$R *.dfm}
 
procedure TMain.RefTV(var msg :TMessage);
begin
  CreateTV;
end;
第三步:在发送消息的单元中添加发送操作(本例中是Epy单元)
1、获取接受消息单元的句柄(本例中是Main单元)
type
  TEpy = class(Tform)
private
public
end;
var
  Epy: TEpy;
  EpyHandle :HWND:
implementation
{$R *.dfm}
 
procedure TEpy.FormCreate(Sender: TObject);
begin
  EpyHandle :=FMain.Handle;
end;
2、在完成添加或删除操作后发送消息
procedure TEpy.InsertExecute(Sender: TObject);
begin
   PostMessage(EpyHandle ,WM_REFRSH,0,0);
   //SendMessage(EpyHandle ,WM_REFRSH,0,0);
end;