关于delphi动态创建panel组件,提高创建效率问题
使用sqldataset循环读取数据库,根据数据库的记录,动态创建一批panel组件,执行时效率不高,屏幕一直闪烁,直到所有panel创建完成,怎么样才能提高这段代码的执...
使用sqldataset循环读取数据库,根据数据库的记录,动态创建一批panel组件,执行时效率不高,屏幕一直闪烁,直到所有panel创建完成,怎么样才能提高这段代码的执行效率,或者别闪烁也可以,都创建完了再一起显示出来。代码如下:
var
mypnls:array[0..50] of Tpanel;
i,j,k,n,xx,yy:integer;
produce ..........;//代码在另一台电脑上,不能复制粘贴,只写关键部分吧
begin
j:=0;
k:=0;
n:=0;
for i=0 to sqldataset1.recordcount-1 do
begin
xx:=160*j;
if xx>1440 then
begin
j:=0;
inc(k);
end;
xx:=160*j;
yy:=55*k;
inc(j);
mypnls[n]:=Tpanel.creat(nil);
mypnls[n].parent:=panel_main;
mypnls[n].Left:=xx;
mypnls[n].Top:=yy;
sqldataset1.next;
end;
end; 展开
var
mypnls:array[0..50] of Tpanel;
i,j,k,n,xx,yy:integer;
produce ..........;//代码在另一台电脑上,不能复制粘贴,只写关键部分吧
begin
j:=0;
k:=0;
n:=0;
for i=0 to sqldataset1.recordcount-1 do
begin
xx:=160*j;
if xx>1440 then
begin
j:=0;
inc(k);
end;
xx:=160*j;
yy:=55*k;
inc(j);
mypnls[n]:=Tpanel.creat(nil);
mypnls[n].parent:=panel_main;
mypnls[n].Left:=xx;
mypnls[n].Top:=yy;
sqldataset1.next;
end;
end; 展开
1个回答
展开全部
procedure TForm1.btn1Click(Sender: TObject);
var
i:integer;
begin
Self.AutoScroll:=True;
for i := 0 to 100 do
begin
with TPanel.create(self) do
begin
parent:=Self;
height:=30;
width:=200;
top:=(i+1)*30;
left:=28;
Caption:='第'+IntToStr(i+1)+'块Panel';
end;
end;
end;
写了一个简单的测试程序(XE2),没有发现楼主所说的闪烁问题。如果闪烁很厉害,我个人感觉跟创建组件与同时进行数据集操作有关系。考虑从两个方面进行测试优化:1.把数据集操作去掉,只用类似我上面这段代码进行创建,如果不闪烁,就把数据集操作提出来单独进行。2.如果仍然闪烁情况就比较复杂了,可以试试窗体的DoubleBuffer设置为true,逐步减小创建数量等方法进行优化。
var
i:integer;
begin
Self.AutoScroll:=True;
for i := 0 to 100 do
begin
with TPanel.create(self) do
begin
parent:=Self;
height:=30;
width:=200;
top:=(i+1)*30;
left:=28;
Caption:='第'+IntToStr(i+1)+'块Panel';
end;
end;
end;
写了一个简单的测试程序(XE2),没有发现楼主所说的闪烁问题。如果闪烁很厉害,我个人感觉跟创建组件与同时进行数据集操作有关系。考虑从两个方面进行测试优化:1.把数据集操作去掉,只用类似我上面这段代码进行创建,如果不闪烁,就把数据集操作提出来单独进行。2.如果仍然闪烁情况就比较复杂了,可以试试窗体的DoubleBuffer设置为true,逐步减小创建数量等方法进行优化。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询