带有类对象的onResize事件

时间:2010-10-03 11:52:13

标签: delphi class object onresize

这是我的代码:

type TNav = class(TPanel)
private
  procedure CMMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE;
public
end;

type TForm1 = class(TForm)
  ...
  procedure FormCreate(Sender: TObject);
private
public
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TNav.Create(Form1) do begin
    Parent := Self;
    Name := 'nav';
    Top := 0;
    Left := 0;
    Height := 27;
    Width := Form1.Width - 8;
    Visible := true;
    Caption := '';
  end;      
end;

procedure TNav.CMMouseEnter(var AMsg: TMessage);
begin
  Self.Top := 0;
end;

procedure TNav.CMMouseLeave(var AMsg: TMessage);
begin
  Self.Top := -23;
end;

有没有办法为我的TNav添加onResize事件,甚至从Form1发送宽度/高度值?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

是否要为TNav(内部)的每个实例添加“OnResize”处理程序,或者您只是希望TNav显示OnResize事件,以便您可以在应用程序中设置它吗?在第一种情况下,只需做

type
  TNav = class(TPanel)
  private
    procedure CMMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE;
  protected
    procedure Resize; override;
  public
  end;

procedure TNav.Resize;
begin
  inherited;
  // Do something
end;

在后一种情况下,只需添加

published
  property OnResize;

要访问父表单的属性(如果有),请在TNav类中执行(例如)

GetParentForm(Self).Width

顺便提一下,你知道Anchors的{​​{1}}属性吗?将TPanel添加到表单,然后在属性编辑器中设置TPanel。这是你可以使用的东西吗?