Question

Voici mon 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;

Y at-il un moyen d'ajouter un événement onResize pour mon TNAV, ou même d'envoyer les valeurs largeur / hauteur de la Form1?

Merci d'avance!

Était-ce utile?

La solution

Voulez-vous ajouter un gestionnaire « OnResize » à chaque instance du TNav (interne), ou vous voulez juste l'TNav pour afficher un événement OnResize afin que vous pouvez le configurer dans l'application? Dans le premier cas, il suffit de

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;

et

procedure TNav.Resize;
begin
  inherited;
  // Do something
end;

Dans ce dernier cas, il suffit d'ajouter

published
  property OnResize;

Pour accéder aux propriétés de la forme mère (le cas échéant), dans la classe TNav faire (par exemple)

GetParentForm(Self).Width

Par ailleurs, vous êtes au courant de la propriété Anchors de TPanel? Ajouter un TPanel à une forme, et dans l'ensemble Anchors := [akLeft,akTop,akRight] éditeur de propriétés. Est-ce quelque chose que vous pouvez utiliser?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top