打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何消除MDI主窗体在创建MDI子窗体时的闪烁
看看这个对你有没有用吧
作者: 轻舞肥羊
标题: 解决MDI子窗体建立时动画闪烁问题
关键字: MDI
分类: 开发经验
密级: 公开
(评分: , 回复: 0, 阅读: 262) »»
MDI子窗体如果在设计期最大化,那么在建立窗体的时候会有一个从普通状态到最大化的动画
过程,如果MDI子窗体上的控件太多则会发生比较强的闪烁现象,下面实现一个基类解决此问题,
机制是通过锁定MDI主窗口的更新来实现,缺点是要引用MDI主窗体或使用全局变量记录句柄.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2066407

type
  TFrmBaseMDIChild = class(TForm)
  public
    constructor Create(AOwner: TComponent);reintroduce;override;
  end;

constructor TFrmBaseMDIChild.Create(AOwner: TComponent);
begin
  //MDIMainForm为MDI主窗体,如果不想引用,可以用全局变量保存
  LockWindowUpdate(MDIMainForm.Handle);
  try
    inherited;
  finally
    LockWindowUpdate(0);
  end;
end;

另外一种解决方法(好象有问题,有待测试)
覆盖CreateNew方法来解决,缺点是设计期指定的FormState属性无效.
一定要在代码中指定.否则覆盖这个方法就失去了意义.
type
  TFrmBaseMDIChild = class(TFrmBase)
  public
    constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0);reintroduce;override;
  end;

constructor TFrmBaseMDIChild.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
  inherited;
  WindowState :=  wsMaximized; //这里指定状态为最大化,不会产生闪烁
end;
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Delphi:窗体自适应屏幕分辨率
Pagecontrol动态管理页面,包含关闭按钮
override overload reintroduce的区别(delphi)
在Delphi中动态创建ActiveX组件
进程之间管道通信
Delphi XE2 之 FireMonkey 入门(2)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服