电竞比分网-中国电竞赛事及体育赛事平台

分享

如何消除MDI主窗體在創(chuàng)建MDI子窗體時(shí)的閃爍

 kenwang 2007-05-17
看看這個(gè)對(duì)你有沒有用吧
作者: 輕舞肥羊
標(biāo)題: 解決MDI子窗體建立時(shí)動(dòng)畫閃爍問題
關(guān)鍵字: MDI
分類: 開發(fā)經(jīng)驗(yàn)
密級(jí): 公開
(評(píng)分: , 回復(fù): 0, 閱讀: 262) »»
MDI子窗體如果在設(shè)計(jì)期最大化,那么在建立窗體的時(shí)候會(huì)有一個(gè)從普通狀態(tài)到最大化的動(dòng)畫
過程,如果MDI子窗體上的控件太多則會(huì)發(fā)生比較強(qiáng)的閃爍現(xiàn)象,下面實(shí)現(xiàn)一個(gè)基類解決此問題,
機(jī)制是通過鎖定MDI主窗口的更新來實(shí)現(xiàn),缺點(diǎn)是要引用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;

另外一種解決方法(好象有問題,有待測(cè)試)
覆蓋CreateNew方法來解決,缺點(diǎn)是設(shè)計(jì)期指定的FormState屬性無效.
一定要在代碼中指定.否則覆蓋這個(gè)方法就失去了意義.
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; //這里指定狀態(tài)為最大化,不會(huì)產(chǎn)生閃爍
end;
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多