控件怎样接管所在form的自定义消息?(50分)

  • 主题发起人 主题发起人 一个过客
  • 开始时间 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
正在设计一个控件,它需要接收一个用户自定义的消息,当别的软件发送这个
自定义消息到控件所在form时,控件应该执行某项功能。问题是控件怎样接管
form的WndProc ??
 
CallWndProc
 
替换form.windowproc属性即可接管form的所有消息
 
大家伙说详细一点嘛!

我仅仅想接管某一个消息,其他的还是要form自己处理的
 
procedure OnWMApp(Message:Tmessage);message WM_APP;
 
book: 如果是发给form的消息,我用你的方法控件能收到该消息吗?
 
type
TNoUseControl = class(TControl)
private
OldFormWndProc: TWndMethod;
procedure NewFormWndProc(var Msg: TMessage);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;


constructor TNoUseControl.Create(AOwner: TComponent);
begin
inherited;
OldFormWndProc := TCustomForm(AOwner).WindowProc;
TCustomForm(AOwner).WindowProc := NewFormWndProc;
end;

destructor Destroy;
begin
if Assigned(OldFormWndProc) then
with TCustomForm(Owner) do
WindowProc := OldFormWndProc;
inherited;
end;

procedure TNoUseControl.NewFormWndProc(var Msg: TMessage);
begin
case Msg.Msg of
WM_DESTORY: // form窗口释放前恢复原windowproc值, 不然可能运行错
if csDestroying in TCustomForm(Owner).ComponentState then
with TCustomForm(Owner) do
begin
WindowProc := OldFormWndProc;
OldFormWndProc := nil;
WindowProc(Msg);
exit;
end;
WM_USER+5: // 假设是你自定义的消息
begin
.....
end;
end;
OldFormWndProc(Msg);
end;
 
多谢,正在测试上面的代码
 
接受答案了.
 
后退
顶部