图标闪烁 内存不断增加,如何解决??? ( 积分: 100 )

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

hitman007260

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个定时器里 对image取反 使之闪烁 程序内存不多增加
w:= image.Picture .Bitmap.Width ;
h:=image.Picture.Bitmap.Height ;
hdc2:=image.Canvas.Handle;
hdc1:=image.Canvas.Handle ;
bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy);
image.repaint;
如果去掉image.repaint;内存就不增加了 可惜图标也不闪了
如何解决????
 
在线等待
 
refresh行不行
 
refresh,Invalidate 都试过了
不行
 
释放 hdc2
 
w:= image.Picture .Bitmap.Width ;
h:=image.Picture.Bitmap.Height ;
hdc2:=image.Canvas.Handle;
hdc1:=image.Canvas.Handle ;
bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy);
ReleaseDC (0, hdc2);
image.repaint;
这样还是不行
 
創建次數太多,內存肯定會增加的
本人認為可以先把兩個Image(互為反的)存起來,然後再用Timer元件,每隔一定時間進行讀取,也就達到了閃爍目的了。何苦要在內存內重畫呢。
 
創建次數太多
什马创建次数太多??
就是想知道有没有在这种情况下的解决方法
 
我顶lngdtommy的做法
用两张IMAGE轮流显示就可以了
 
这种方法作动画都行我也知道
就是想知道这里哪里出问题以及如何解决
 
我剛才試了一下,沒有問題啊,內存也沒有增加。
procedure TForm1.Timer1Timer(Sender: TObject);
var
w,h: Integer;
hdc1,hdc2: HDC;
begin
w:= image.Picture .Bitmap.Width ;
h:=image.Picture.Bitmap.Height ;
hdc2:=image.Canvas.Handle;
hdc1:=image.Canvas.Handle ;
BitBlt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy);
image.repaint;
end;
Timer1.Interval := 500;
 
晕 我这里可是内存增加阿
 
for i:=0 to imagelist.Count-1 do
begin
image:=imagelist.items;
w:= image.Picture .Bitmap.Width ;
h:=image.Picture.Bitmap.Height ;
hdc2:=image.Canvas.Handle;
hdc1:=image.Canvas.Handle ;
bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy);
image.repaint();
end;
imgelist:tlist;
我的是从链表里弄出来的image 每repaint()估计就生成个新的image
我屏壁掉image.repaint() 内存就不写了 所以我以为是hdc2:=image.Canvas.Handle;
hdc1:=image.Canvas.Handle ;
bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy);
image.repaint();
有问题
还是不知道如何解决
但是给分八
 
给lngdtommy 分100
如果谁能解决就给他另外100分
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
919
DelphiTeacher的专栏
D
顶部