我想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组件.我就是一直想不通这个问题出在哪里?所以想请诸位大虾有力出力,没力出几口也没有关系!!
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组件.我就是一直想不通这个问题出在哪里?所以想请诸位大虾有力出力,没力出几口也没有关系!!
Application.ProcessMessages;
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;