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!

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top