onResize Ereignis mit Klassenobjekt
Frage
Hier ist mein Code:
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;
Gibt es eine Möglichkeit, ein onResize Ereignis für meine TNAV hinzuzufügen, oder sogar die Breite / Höhe Werte aus dem Form1 zu schicken?
Vielen Dank im Voraus!
Lösung
Haben Sie eine „OnResize“ Handler für jede Instanz des TNav
(intern) hinzufügen möchten, oder wollen Sie einfach nur die TNav
ein OnResize
Ereignis angezeigt werden, so dass Sie es in der Anwendung einstellen kann? Im ersten Fall, nur tun
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;
und
procedure TNav.Resize;
begin
inherited;
// Do something
end;
Im letzteren Fall, fügen Sie einfach
published
property OnResize;
Um die Eigenschaften des übergeordneten Formulars zugreifen (falls vorhanden), in der TNav
Klasse tun (zum Beispiel)
GetParentForm(Self).Width
By the way, sind Sie sich bewusst von der Anchors
Eigenschaft TPanel
? Fügen Sie eine TPanel
zu einem Formular und Satz Anchors := [akLeft,akTop,akRight]
im Eigenschaftseditor. Ist das etwas, das Sie verwenden können?