|
看看這個(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; |
|
|