2010-10-03 4 views
1

Вот мой код:OnResize события с объектом класса

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, или даже отправить значение ширины/высоты от Form1?

Спасибо заранее!

+0

Всегда ставьте 'begin' на новую строку. В противном случае обученный глаз не видит этого, и это смущает утверждение после того, как 'with' /' if'/... будет однострочным оператором, а не целым блоком кода. –

+3

@ Andreas Я бы хотел, чтобы вы перестали подталкивать свои предпочтения в стиле к другим. В то время как ваш глаз может быть обучен чтению кода в соответствии с вашими предпочтениями, и вы пропустите блок так, не все так предрасположены или настолько полностью зависят от стиля. И на самом деле многие из нас отвлекаются на то, чтобы начать новую линию. –

+0

@Marjan: Я почти ожидал комментариев по этому поводу. Да, я прекращу делать эти замечания. –

ответ

2

Вы хотите добавить обработчик «OnResize» для каждого экземпляра TNav (внутренне), или вы просто хотите TNav, чтобы отобразить 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] в редакторе свойств. Это то, что вы можете использовать?

+0

Дайам, я совсем забыл о якорях .. вот что происходит, когда вы не спите в течение нескольких дней. Спасибо, Андреас. Оба кода и напоминание были великолепны. – Grim

Смежные вопросы