Вопрос

Вот мой код:

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;

Есть ли способ добавить событие OnreSize для моего TNAV или даже отправлять значения ширины / высоты из формы1?

Заранее спасибо!

Это было полезно?

Решение

Вы хотите добавить обработчик «OnreSize» для каждого экземпляра TNav (внутренне) или вы просто хотите TNav отображать A. OnResize Событие, чтобы вы могли установить его в приложении? В первом случае просто делай

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;

и

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

В последнем случае просто добавьте

published
  property OnResize;

Для доступа к свойствам родительской формы (если есть), в TNav Класс делает (например)

GetParentForm(Self).Width

Кстати, вы знаете о Anchors свойство TPanel? Добавить TPanel в форму и установить Anchors := [akLeft,akTop,akRight] В редакторе недвижимости. Это то, что вы можете использовать?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top