动态生成图慢的问题(高手请进) ( 积分: 100 )

  • 主题发起人 主题发起人 huangying100
  • 开始时间 开始时间
H

huangying100

Unregistered / Unconfirmed
GUEST, unregistred user!
思路:在数据库中存储了图片的路径和名称/以及事件名,在panel中动态创建图片(一般5-10),但图片一多就变得很慢.请高手看看怎么解决好?代码如下:
//hzf2005-6-15 以下动态生成按图片及其事件
//自定义快捷方式
procedure TfmMain.BindImage(flid:integer;
yhmc:string);
var
PAddr: pointer;
M: TMethod;
K,I:integer;
begin
I:=0;
for k:=0 to Panel1.ControlCount-1do
panel1.Controls[0].Free;
UserMenuInfo.Parameters[0].Value:=flid;
UserMenuInfo.Parameters[1].Value:='sa';
UserMenuInfo.Open;
while not UserMenuInfo.Eof do
begin
//资料设置
with TImage.Create(Panel1)do
begin
Parent := Panel1;
Left := 74+128*(I);
//以下事件绑定
PAddr := nil;
PAddr := TfmMain.MethodAddress(UserMenuInfo.FieldByName('tcm').AsString);
if PAddr <> nil then
begin
M.Code := PAddr;
M.Data := fmMain;
OnClick := TNotifyEvent(m);
end;
//以上事件绑定
Height := 64;
Width := 64;
Cursor:=crHandPoint;
transparent:=true;
Picture.LoadFromFile(gsProgramPath+UserMenuInfo.FieldByName('tpdz').AsString);
Top := 10;
// Name := Format('Image%d', [I + 1]);
// Caption := Format('Image%d', [I + 1]);
Show;
end;
I:=I+1;
UserMenuInfo.Next;
end;
UserMenuInfo.Close;
Panel1.Refresh
end;
 
思路:在数据库中存储了图片的路径和名称/以及事件名,在panel中动态创建图片(一般5-10),但图片一多就变得很慢.请高手看看怎么解决好?代码如下:
//hzf2005-6-15 以下动态生成按图片及其事件
//自定义快捷方式
procedure TfmMain.BindImage(flid:integer;
yhmc:string);
var
PAddr: pointer;
M: TMethod;
K,I:integer;
begin
I:=0;
for k:=0 to Panel1.ControlCount-1do
panel1.Controls[0].Free;
UserMenuInfo.Parameters[0].Value:=flid;
UserMenuInfo.Parameters[1].Value:='sa';
UserMenuInfo.Open;
while not UserMenuInfo.Eof do
begin
//资料设置
with TImage.Create(Panel1)do
begin
Parent := Panel1;
Left := 74+128*(I);
//以下事件绑定
PAddr := nil;
PAddr := TfmMain.MethodAddress(UserMenuInfo.FieldByName('tcm').AsString);
if PAddr <> nil then
begin
M.Code := PAddr;
M.Data := fmMain;
OnClick := TNotifyEvent(m);
end;
//以上事件绑定
Height := 64;
Width := 64;
Cursor:=crHandPoint;
transparent:=true;
Picture.LoadFromFile(gsProgramPath+UserMenuInfo.FieldByName('tpdz').AsString);
Top := 10;
// Name := Format('Image%d', [I + 1]);
// Caption := Format('Image%d', [I + 1]);
Show;
end;
I:=I+1;
UserMenuInfo.Next;
end;
UserMenuInfo.Close;
Panel1.Refresh
end;
 
放到线程里去做好了,慢也没事 。
 
怎么做呀
 
我是菜鸟
 
for k:=0 to Panel1.ControlCount-1do

是不是出在这个问题上啊??不应该这么慢啊
 
没东西时是自己跳过的,不执行的
 
多发表意见,多留言
 
暂时不需要显示的先隐藏掉
 
那不好控制呀
 
来了,大家看看
 
用线程做吧
 
用线程做会更快吗?怎么做呢?初学者
 
如果同时更新显示的图像数量很多,肯定会比较慢的
所以,建议用位图,保存在内存中
需要显示的再显示出来
 
to:lich 怎么做呀
 
如果5-10幅, 图片不大的话, 应当不会很慢, 如果图片太多, 几十幅或上百幅的话, 不能这么实现
 
你每次取出来的记录数应该等于Panel所能容下的
缩小查询范围会好一点
 
接受答案了.
 
后退
顶部