Evento OnResize com o objeto de classe
Pergunta
Aqui está o meu 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;
Existe uma maneira de adicionar um evento no resumo do meu TNAV, ou mesmo para enviar os valores de largura/altura do Form1?
Agradeço antecipadamente!
Solução
Você quer adicionar um manipulador "OnResize" a todas as instâncias do TNav
(internamente), ou você só quer o TNav
para exibir um OnResize
Evento para que você possa defini -lo no aplicativo? No primeiro caso, basta fazer
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;
e
procedure TNav.Resize;
begin
inherited;
// Do something
end;
Neste último caso, basta adicionar
published
property OnResize;
Para acessar as propriedades da forma pai (se houver), no TNav
classe do (por exemplo)
GetParentForm(Self).Width
A propósito, você está ciente do Anchors
propriedade de TPanel
? Adicione a TPanel
para uma forma e definir Anchors := [akLeft,akTop,akRight]
no editor de propriedades. Isso é algo que você pode usar?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow