请教一个动态创建控件的问题(100分)

  • 主题发起人 主题发起人 wfeiyue
  • 开始时间 开始时间
W

wfeiyue

Unregistered / Unconfirmed
GUEST, unregistred user!
在窗口中动态创建panel控件,控件的多少由表中的记录数决定,通过循环ADOQUERY创建panel控件时感觉很慢,屏幕一闪一闪的,有什么办法让创建时速度快一点吗?
(adoquery没有afterscroll事件,且每创建一个panel控件时会在该控件上创建3个label控件)
 
试试将DoubleBuffered设置为TRUE
 
试了,还是一样的
 
LockWindowUpdate()
 
procedure TForm1.BitBtn1Click(Sender: TObject);
const
count: integer = 100;
var
i, x, y: integer;
panelList: array of TPanel;
Panel: TPanel;
rect: Trect;
edit: TEdit;
begin
LockWindowUpdate(Handle);
SetLength(panelList, count);
for i := 0 to count - 1do
begin
Panel := TPanel.Create(self);
x := i mod 10 * 40;
y := (i div 10) * 40;
rect := classes.Rect(x, y, x + 30, y + 30);
Panel.BoundsRect := rect;
Panel.Caption := IntToStr(i);
edit := TEdit.Create(self);
rect := classes.Rect(1, 1, 8, 22);
edit.BoundsRect := rect;
edit.Parent := Panel;
edit := TEdit.Create(self);
rect := classes.Rect(10, 1, 18, 22);
edit.BoundsRect := rect;
edit.Parent := Panel;
edit := TEdit.Create(self);
rect := classes.Rect(20, 1, 28, 22);
edit.BoundsRect := rect;
edit.Parent := Panel;
panelList := Panel;
end;

for i := 0 to high(panelList)do
begin
Panel := panelList;
Panel.Parent := self;
end;
LockWindowUpdate(0);
end;
 
我 试了 100 个 Panel
每个 Panel 上 3个 edit
我的 机器 也很差 都 不闪啊
 
创建时先把所有要创建的PANEL隐藏,之后再显示,弄个进度条显示进度能好点
 
呵呵,比以前效果好多了,谢谢各位!
 
多人接受答案了。
 
后退
顶部