分享

如何消除MDI主窗体在创建MDI子窗体时的闪烁

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多