从子组件处理父WndProc

时间:2012-12-15 14:19:05

标签: delphi winapi

我正在处理一个新的组件,我想处理所有父消息。

Type
 TMyComponent= class(TComponent)
//Bla bla
/..
//.
published
property Parent: TWinControl read FParent write SetParent;

end;

我希望能够访问Parent WndProc(处理所有父消息)。有没有办法从我的TMyComponent处理父WndProc?

1 个答案:

答案 0 :(得分:2)

像这样:

type
  TMyComponent = class(TComponent)
  private
    FParent: TWinControl;
    FParentWindowProc: TWndMethod;
    procedure WindowProc(var Message: TMessage);
    procedure SetParent(Value: TWinControl);
  published
    property Parent: TWinControl read FParent write SetParent;
  end;

procedure TMyComponent.SetParent(Value: TWinControl);
begin
  if Value=FParent then
    exit;

  if Assigned(FParent) then
    FParent.WindowProc := FParentWindowProc;
  FParentWindowProc := nil;

  FParent := Value;

  if Assigned(FParent) then
  begin
    FParentWindowProc := FParent.WindowProc;
    FParent.WindowProc := WindowProc;
  end;
end;

procedure TMyComponent.WindowProc(var Message: TMessage);
begin
  // do whatever we want with the message
  FParentWindowProc(Message);// delegate to parent's window procedure
end;