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!

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top