سؤال

هذا هو الكود الخاص بي:

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؟

شكرا لكم مقدما!

هل كانت مفيدة؟

المحلول

هل تريد إضافة معالج "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] في محرر الممتلكات. هل هذا شيء يمكنك استخدامه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top