Delphi TFrame[3] 自定义显示、销毁、隐藏事件(onShow 、OnHide、OnDestroy)

Delphi TFrame[3] 自定义显示、销毁、隐藏事件(onShow 、OnHide、OnDestroy)

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

方法1:通过设置框架的属性形式来模拟调用 frame的onshow过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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;

调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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  更新时间:

posted on   滔Roy  阅读(902)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2019-12-16 Delphi Treeview 用法(概念、属性、添加编辑插入节点、定位节点、拖拽等)

导航

点击右上角即可分享
微信分享提示