这是我的代码:
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发送宽度/高度值?
提前谢谢!
答案 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
。这是你可以使用的东西吗?