onResize evento con objeto de clase
Pregunta
Aquí es mi código:
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;
¿Hay una manera de añadir un evento onResize para mi TNAV, o incluso para enviar los valores de anchura / altura del Form1?
Gracias de antemano!
Solución
¿Desea agregar un controlador "OnResize" a todas las instancias de la TNav
(internamente), o sólo desea que el TNav
para mostrar un evento OnResize
de manera que se puede establecer en la aplicación? En el primer caso, acaba de hacer
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;
y
procedure TNav.Resize;
begin
inherited;
// Do something
end;
En este último caso, sólo tiene que añadir
published
property OnResize;
Para acceder a las propiedades de la forma del padre (si los hay), en la clase TNav
hacer (por ejemplo)
GetParentForm(Self).Width
Por cierto, ¿es consciente de la propiedad Anchors
de TPanel
? Añadir un TPanel
a un formulario, y un conjunto Anchors := [akLeft,akTop,akRight]
en el Editor de propiedades. ¿Esto es algo que puede utilizar?