Delphi中的关于TImage循环填充两种色块从而达到闪烁效果的问题!

hucice 2009-05-05 10:23:20
我想TImage组件循环进行两种色块填充达到要求的闪烁效果,我首先是在窗体创建事件中初始化了一个image数组,定义如下:
arrimg[1]:=img1;
arrimg[2]:=img2;
arrimg[3]:=img3;
arrimg[4]:=img4;
arrimg[5]:=img5;
arrimg[6]:=img6;
arrimg[7]:=img7;
arrimg[8]:=img8;
arrimg[9]:=img9;
arrimg[10]:=img10;
arrimg[11]:=img11;
arrimg[12]:=img12;
arrimg[13]:=img13;
arrimg[14]:=img14;
接下来我定义了一个过程如下:


procedure DrawDisplay(Num,Time:Integer;Sta:Boolean);
begin
while Time<>0 do
begin
if Sta then
begin
arrimg[Num].Canvas.Brush.Color:=clWhite;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Sleep(500);
arrimg[Num].Canvas.Brush.Color:=clYellow;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Sleep(500);
end
else
begin
arrimg[Num].Canvas.Brush.Color:=clYellow;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Sleep(500);
arrimg[Num].Canvas.Brush.Color:=clWhite;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Sleep(500);
end;
Time:=Time-1000;
end;
end;


然后调用这个过程DrawDisplay(3,3000,True);

还有这个过程我是在另外一个线程里面调用的.

但是在窗体上面的img3闪烁的很不正常,有时候可以显示出来,有时间简直就是不显示了.原理上我想上面的方法应该是可以实现我要的闪烁效果的,问题是为什么img3有时可以显示出效果,有时候又没有效果这么不稳定呢?会不会是我多线程的关系呢?但是我多线程访问img组件的时候我都是单对单的也就是说我一个线程同时访问的img组件都是独立的,不可以有两个线程同时操作同一个img组件.我就是一直想不通这个问题出在哪里?所以想请诸位大虾有力出力,没力出几口也没有关系!!
...全文
249 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
diannaoxiaotong 2011-07-22
  • 打赏
  • 举报
回复
我也在期待答案
hucice 2009-05-05
  • 打赏
  • 举报
回复
谢谢!!真的很有用!!!
bdmh 2009-05-05
  • 打赏
  • 举报
回复
Application.ProcessMessages;试试,给他一个展现给你的时间
JPEXE 2009-05-05
  • 打赏
  • 举报
回复
procedure DrawDisplay(Num,Time:Integer;Sta:Boolean);
begin
while Time<>0 do
begin
if Sta then
begin
arrimg[Num].Canvas.Brush.Color:=clWhite;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Application.ProcessMessages;
Sleep(500);
arrimg[Num].Canvas.Brush.Color:=clYellow;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Application.ProcessMessages;
Sleep(500);
end
else
begin
arrimg[Num].Canvas.Brush.Color:=clYellow;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Application.ProcessMessages;
Sleep(500);
arrimg[Num].Canvas.Brush.Color:=clWhite;
arrimg[Num].Canvas.Brush.Style:=bsSolid;
arrimg[Num].Canvas.Ellipse(arrimg[Num].ClientRect);
Application.ProcessMessages;
Sleep(500);
end;
Time:=Time-1000;
Application.ProcessMessages;
end;
end;
hongqi162 2009-05-05
  • 打赏
  • 举报
回复
更换完图片后加入
Application.ProcessMessages;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧