Delphi 在窗体界面显示之后执行事件 AfterShow

正常情况下,需要在启动之后直接执行某事件,一般会将函数放在Create或者OnShow里面。
但是,这种情况下,当事件耗时较久是,界面会迟迟不肯出现,只能等待Create喝OnShow执行完毕之后才会显示。
为了能够在界面能够先出现,然后运行需要的事件,可以使用消息的机制自定义添加一个AfterShow的函数。(Delphi中窗体没用相关函数,需要自定义)

原来的代码:

//示例代码
 TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
    procedure DoSomething();//做某些耗时的事情
  private
  public
  end;

//实现
procedure TForm1.FormShow(Sender: TObject);
begin
  //这里耗时,会卡住界面不显示,完成之后才会跳出
  DoSomething();
end;

添加AfterShow();:

const 
  WM_BEGIN = WM_USER + 1;
...
//示例代码
 TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
    procedure DoSomething();//做某些耗时的事情
    procedure AfterShow(var msg:TMessage);message WM_BEGIN;
  private
  public
  end;

...
//实现
procedure TForm1.FormShow(Sender: TObject);
begin
  PostMessage(Form1.handle,WM_BEGIN,0,0);
end;
procedure TForm1.AfterShow(var msg:TMessage);
begin
  DoSomething();
end;

参考源:https://jingyan.baidu.com/article/b0b63dbf21e63f4a4830701c.html

posted @ 2024-12-17 14:05  图图雷  阅读(142)  评论(0)    收藏  举报