请问关于组件之间的消息通信的问题.(100分)

  • 主题发起人 主题发起人 xwings
  • 开始时间 开始时间
X

xwings

Unregistered / Unconfirmed
GUEST, unregistred user!
我有3个组件. 一个负责发送一个自定义消息.另外2个(TWinControl)获得这个消息之后作出相应处理.

现在的问题是 发送消息时,相谁发送? ;用postMessage. ? ;获得消息的两个组件名字和HWND未知(动态生成),
我先试着向窗体发消息, 窗体的winproc可以响应的. 但是我的组件无法收到这个消息.
如何让form派发这个消息给它的子对象?

我还有个想法: 法消息的组件枚举form上的所有收这个消息的对象, 挨个postMessage..不过我感觉这样不好.
因为我的组件也许在panel上.
用 form的broadcast ?(这个好像就是循环postMessage的) ;我不想牵扯到窗体来处理这个消息. 只想在3个组件中处理.

谁可以解答?.
谢谢
 
;for i:= 1 to n do
; (FindComponent('wincontrol'+IntToStr(i)) as TWinControl).handle;
 //就是要接受消息的控件句柄。
 解释:FindComponent('edit2' as Tedit);就可以返回edit2
 
但是我的组件名字也是不固定的.就是说不一定是 edit1 edit2 ...
能不能根据类名来发消息. ;比如我接收消息的组件类是 TXAniButton的话.
我只需查找这个组件类就可以了.
 
我已经搞定了.
procedure send();
var
; obj : TComponent;
; procedure SendMsg(obj:TWinControl);
; var
; ; i : Integer;
; begin
; ; with obj do
; ; ; for i := 0 to ComponentCount -1 do
; ; ; ; if Components is TWinControl then
; ; ; ; begin
; ; ; ; ; if Components.ClassType=TXAinButton then
; ; ; ; ; ; PostMessage(TWinControl(Components).Handle,XM_ONTIMER,0,0);
; ; ; ; ; SendMsg(TWinControl(Components));
; ; ; ; end;
; end;
begin
; repeat
; ; obj := Self.Owner;
; until (obj is TForm) or (obj=nil);
; inherited;
; SendMsg(TWinControl(obj));
end;

大家看看有什么问题
 
接受答案了.
 
后退
顶部