我从TCustomControl类继承了一个类想在其所在的窗体移动时做点事,如何截获这个消息?

解决方案 »

  1.   

    在主窗体 和父控件OnResize事件里写
    SendMessage到控件,控件收到消息就Do something
      

  2.   

    (Self.Parent as TForm).OnResize:=MyResize;
      

  3.   

    各位,能不能在控件里就能完成?这样老是发送消息多累啊:)
    to ehom:
    强行把OnResize的指针指向自定义的方法,不好,
    况且是窗体的,别人要在onResize里写代码,岂不是写不了?
      

  4.   

    TTest = class(TCustomControl)
    private
      FMyResize: TNotifyEvent;
    protected
      procedure MyResize(Sender: TObject);
      constructor Create(AOwner: TComponent); override;
    end;constructor TTest.Create(AOwner: TComponent);
    begin
      inherited;
      if Addr(TForm(AOwner).OnResize)<>nil then
        FMyResize:= TForm(AOwner).OnResize;
      TForm(AOwner).OnResize:= MyResize;
    end;procedure TTest.MyResize(Sender: TObject);
    begin
    if Addr(FMyResize)<>nil then FMyResize(nil);
    //加入你的代码
    end;
      

  5.   

    ehom(?!) 的替换是个好方法
      

  6.   

    to   ehom(?!) :
    这样一来,主窗体的onresize代码还是执行不了
      

  7.   

    怎么执行不了?不是用FMyResize替换了TForm(AOwner).OnResize吗?
      

  8.   

    试了,能来msn里说吗?
    [email protected]
      

  9.   

    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormResize(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      end;  TTest = class(TCustomControl)
      private
        FMyResize: TNotifyEvent;
      protected
        procedure MyResize(Sender: TObject);
        constructor Create(AOwner: TComponent); override;
      end;var
      Form1: TForm1;
      Test: TTest;
    implementation{$R *.dfm}
    constructor TTest.Create(AOwner: TComponent);
    begin
      inherited;
      if Addr(TForm(AOwner).OnResize)<>nil then
        FMyResize:= TForm(AOwner).OnResize;
      TForm(AOwner).OnResize:= MyResize;
    end;procedure TTest.MyResize(Sender: TObject);
    begin
    if Addr(FMyResize)<>nil then FMyResize(nil);
      ShowMessage('窗体大小改变-2');
    end;procedure TForm1.FormResize(Sender: TObject);
    begin
      ShowMessage('窗体大小改变-1');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Test:=TTest.Create(Self);
    end;end.试了???够详细了吗?
      

  10.   

    ehom ,谢谢你对我的问题的关注,用msn聊一聊,交个朋友啊 ,顺带再详细探讨一下