加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi – 隐藏的MDI子表单创建

发布时间:2020-12-15 09:33:12 所属栏目:大数据 来源:网络整理
导读:我的应用程序有许多mdi表单,它们是在成功用户登录后创建的.我怎样才能最好地隐藏这个创作过程?它看起来很愚蠢,而且在创建新表单后绘制mdi表单需要更长的时间,等等. 到目前为止,我已经使用了LockWindowUpdate,它并没有隐藏所有内容,但我想使用启动画面来显示
我的应用程序有许多mdi表单,它们是在成功用户登录后创建的.我怎样才能最好地隐藏这个创作过程?它看起来很愚蠢,而且在创建新表单后绘制mdi表单需要更长的时间,等等.

到目前为止,我已经使用了LockWindowUpdate,它并没有隐藏所有内容,但我想使用启动画面来显示创建进度,但我不能使用LockWindowUpdate.

最好的祝福
??詹恩

解决方法

要创建不可见的MDI子窗体,请将其Visible属性设置为False,此外,您必须禁用强制显示它们的VCL行为.这发生在TCustomForm的FormStyle属性设置器中,它为MDI子窗体设置Visible为True.

如果在对象检查器中设置FormStyle,则在创建表单期间将调用属性设置器,并且表单不会立即显示,而是仅在构造完成后显示.这允许您通过重写AfterConstruction()方法来重置显示表单的请求,如下所示:

procedure TMDIChild.AfterConstruction;
begin
  Exclude(FFormState,fsVisible);
  inherited;
end;

这将创建一个不可见的MDI子表单.

要测试它,您可以在IDE中创建一个新的MDI应用程序,覆盖子表单类中的方法,如上所示,并模拟一个长的初始化:

procedure TMainForm.FileNew1Execute(Sender: TObject);
var
  i: integer;
begin
  for i := 1 to 10 do begin
    CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
    Update;
    Sleep(500);
  end;
  for i := 0 to MDIChildCount - 1 do
    MDIChildren[i].Visible := True;
end;

如果没有重写的AfterConstruction()方法,它将每半秒创建并显示一个MDI子节点.使用重写方法,它将在繁忙的5秒后显示所有内容,这将使您有机会显示启动画面.

重要:

使用LockWindowUpdate()减少闪烁或抑制任何屏幕输出是错误的,错误的,错误的. Don’t do it,阅读关于该主题的Raymond Chen articles系列,了解其原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读