请问如何解决动态创建窗体时的闪烁?(50分)

  • 主题发起人 主题发起人 340340
  • 开始时间 开始时间
3

340340

Unregistered / Unconfirmed
GUEST, unregistred user!
分不多了,还望大侠们海涵。
我采用动态创建其它窗体到主窗体某个Panel中的方法来做,结果最严重的现象就是程序刚运行时闪烁得相当厉害(因为是写在主窗体的OnCreate事件中的)。请问各位高手,对此有何好的方法解决?谢谢。
 
创建的时候不要先不要Show,等创建完毕后再Show,然后Update一下就可以了。
 
创建完成后Show?所有的动态创建代码都是写在主窗体的OnCreate里的,即使我把所有的动态创建窗体的.Show都去掉,一样是闪烁啊?还望继续解惑,谢谢你。
 
在Program单元中,在Application.Initialize;与Application.CreateForm(TForm,Form1);之间加入: Application.ShowMainForm := False;语句,如下:
Application.Initialize;
Application.ShowMainForm := False;
Application.CreateForm(TForm, Form1); //加入Form1为程序主窗体
Application.Run;
最后在最后的动态窗体也创建完毕后,再加入语句:Application.ShowMainForm := True;既可。这样就不会闪烁了。
 
把你主窗体的Panel.DoubleBuffered属性设为True.
 
to Johnny_du兄:
我是这样做的,先在Option中去掉所有非主窗体MainFrm的窗体,然后在MainForm的OnCreate事件中写
MyTestFrm1 := TMyTestFrm1.Create(Self);
MyTestFrm1.Parent := MainFrm.PanelMain;
MyTestFrm1.BorderStyle := bsNone;
MyTestFrm1.Align := alClient;
在主窗体MainFrm的implementation下加Uses语句加入对MyTest1的引用啊。这样的话,难道我必须得改成是直接在工程的单元里那么写?然后一开始就引用各MyTestFrm???再麻烦你,实在感谢。解决了一定给分,谢谢。
 
to nicai_wgl兄:
Panel是用的Delphi6自带的,我看了下,面板上似乎没有该属性?
 
Project —>View Source(在这里写!Delphi的IDE已经给你生成了框架代码,但是依照你的要求需要修改一下框架代码,就这么简单。)
 
to Johnny_du:
我知道是在那里写,但是我的疑问是,那个时候各窗体不加引用的话,肯定报错的啊。Application.CreateForm(TForm, Form1); //加入Form1为程序主窗体
这个难道不是新建工程的时候就自动有了的么。。。这样好象并非动态创建。
 
给我E-MAIL地址我给你写个例程!
 
面板上没有,但可以设置
MainForm.DoubleBuffered := True;
Panel.DoubleBuffered := True;
 
OK,这会要出去办事,我回来试了OK了就来结贴,谢谢两位!
 
主窗体的OnCreate里

DoubleBuffered := True;

显示你的窗体
 
对,其实用DoubleBuffered属性设置也可行,而且方便:)呵呵(说实话是比我的方法好!)
 
谢谢各位兄台了,呵呵
 
怎么我试了,还是会闪烁呢?没有区别啊。。。
 
后退
顶部