onResize evento con oggetto classe
Domanda
Ecco il mio codice:
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;
C'è un modo per aggiungere un evento onResize per il mio TNAV, o anche per inviare i valori di larghezza / altezza dal Form1?
Grazie in anticipo!
Soluzione
Vuoi aggiungere un gestore "OnResize" per ogni istanza della TNav
(internamente), o volete solo il TNav
per visualizzare un evento OnResize
in modo che è possibile impostare l'applicazione? Nel primo caso, basta fare
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;
In quest'ultimo caso, è sufficiente aggiungere
published
property OnResize;
Per accedere alle proprietà del form padre (se presenti), nella classe TNav
fare (per esempio)
GetParentForm(Self).Width
A proposito, siete a conoscenza della proprietà Anchors
di TPanel
? Aggiungi un TPanel
ad una forma, e insieme Anchors := [akLeft,akTop,akRight]
nel Property Editor. E 'questo qualcosa che si può usare?