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

来源:百度文库 编辑:神马文学网 时间:2024/04/28 06:39:43
看看这个对你有没有用吧
作者: 轻舞肥羊
标题: 解决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;