1. 程式人生 > 其它 >Delphi TFrame[3] 自定義顯示、銷燬、隱藏事件(onShow 、OnHide、OnDestroy)

Delphi TFrame[3] 自定義顯示、銷燬、隱藏事件(onShow 、OnHide、OnDestroy)

Delphi TFrame[3] 自定義顯示、銷燬、隱藏事件(onShow 、OnHide、OnDestroy)

Frames中本身不存在顯示onShow 、OnHide、OnDestroy事件

方法1:通過設定框架的屬性形式來模擬呼叫 frame的onshow過程

type
  TFrame2 = class(TFrame)
    Edit1: TEdit;
  private
    { Private declarations }
    fmOnShow : TNotifyEvent;
    fmOnHide : TNotifyEvent;
    
    procedure fmSetOnShow(ps: TNotifyEvent);
    procedure fmSetOnHide(ph: TNotifyEvent);
    
    procedure FrameOnShowHide(var M: TMessage); message CM_SHOWINGCHANGED;
  public
    { Public declarations }
    property OnShow : TNotifyEvent write fmSetOnShow;            //通過設定框架的屬性形式來模擬呼叫 frame的onshow過程
    property OnHide : TNotifyEvent write fmSetOnHide;
  end;

implementation

{$R *.dfm}

{ TFrame2 }

procedure TFrame2.fmSetOnHide(ph: TNotifyEvent);
begin
   fmOnHide := ph;
end;

procedure TFrame2.fmSetOnShow(ps: TNotifyEvent);
begin
  fmOnShow := ps;
end;

procedure TFrame2.FrameOnShowHide(var M: TMessage);
begin
  inherited;
  
  if Showing then
  if Assigned( fmOnShow ) then
      fmOnShow( Self )
  else
    if Assigned( fmOnHide ) then
      fmOnHide( Self );
end;

呼叫:

    procedure FrameShiJian(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FrameShiJian(Sender: TObject);
begin
  Frame2.Edit1.Text:='Hi,Delphi';
  ShowMessage('hi,滔Roy');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Frame2.OnShow:=FrameShiJian;  //放在onshow之前
end;

方法2:繼承 AfterConstruction 和BeforeDestruction,類似OnCreate 和OnDestroy

type
  TFrame3 = class(TFrame)
    Label1: TLabel;
    Image1: TImage;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AfterConstruction; override;    //類似OnCreate事件
    procedure BeforeDestruction; override;    //類似OnDestroy事件
  end;

implementation

{$R *.dfm}

{ TFrame3 }

procedure TFrame3.AfterConstruction;
begin
  inherited;
  label1.Caption:='Hi,滔Roy!';
end;

procedure TFrame3.BeforeDestruction;
begin
  inherited;

end;

  

建立時間:2021.12.16  更新時間:

部落格園 滔Roy https://www.cnblogs.com/guorongtao 希望內容對你所有幫助,謝謝!