大侠:我。。我想问你一个简单的问题!(模拟管道流动的画面) (20分)

  • 主题发起人 主题发起人 xiuguo
  • 开始时间 开始时间
X

xiuguo

Unregistered / Unconfirmed
GUEST, unregistred user!
我想模拟管道流动的画面,我的思路是在一个image控件上以currentposx为基点,划出一个
矩形,然后从currentposx+一个小矩形的宽度 开始画第二个。在一次话完之后,下一次从
currentposx+一个小矩形的宽度 div 4开始画....
可是为什么老是在image上面出现白色的板呢!谢谢!

变量声明:
drawimg:Timage;
arrowwidth,currentposx,arrowheight,i,inumber:integer;



procedure TForm4.FormCreate(Sender: TObject);
begin
currentposx:=0;
drawimg:=Timage.create(form4);
drawimg.parent:=form4;
drawimg.setbounds(50,50,30,400);
drawimg.Canvas.Brush.color:=clblue;
drawimg.Transparent:=true;
arrowwidth:=drawimg.width;
arrowheight:=drawimg.width*3 div 2;
inumber:=drawimg.height div (drawimg.width * 3 div 2);
end;

procedure TForm4.Timer1Timer(Sender: TObject);
begin
i:=0;
drawimg.Picture:=nil;
drawimg.Canvas.Brush.color:=clblue;
drawimg.Transparent:=true;
While i<inumber do
Begin
drawimg.canvas.Rectangle(0,currentposx, arrowwidth, currentposx+arrowheight div 2);
currentposx:=(currentposx+arrowheight+ drawimg.height) mod drawimg.height;
i:=i+1;
End;
currentposx:=(currentposx + arrowheight div 4 + drawimg.height) mod drawimg.height; //这样就好了!
end;



 
帮你贴上

还是没贴上!
procedure TForm4.Timer1Timer(Sender: TObject);
begin
i:=0;
drawimg.Picture:=nil;
drawimg.Canvas.Brush.color:=clblue;
drawimg.Transparent:=true;
While i&amp;lt;inumber do
Begin
drawimg.canvas.Rectangle(0,currentposx, arrowwidth, currentposx+arrowheight div 2);
currentposx:=(currentposx+arrowheight+ drawimg.height) mod drawimg.height;
i:=i+1;
End;
currentposx:=(currentposx + arrowheight div 4 + drawimg.height) mod drawimg.height;
end;
 
谢谢!终于贴上了,大家块块发表意见呀!
 
  你在OnTimer事件中,只画了下一个位置的矩形,却没有把原来位置上的矩形清除掉,
自然满屏都是矩形了(但想不通为什么是白色的呢?应该是兰色的啊,难道你的Canvas.Pen
是白色的吗?)
 
老兄:
drawimg.Picture:=nil;就是清除掉原来画的矩形吗!
我用的while循环,移动画出inumber个矩形才退出,怎么会“只画了下一个位置的矩形”
的矩形呢?
你在你的机器上执行过没有,在执行过程中会发现“白板的”问题!
谢谢!
 
做工控界面?
这样做很费资源的!还不如用API实现吧?
 
黄豆:
能说的详细一点吗?谢谢!
 
xiuguo:请自己提前或结束帖子,谢谢合作!
 
多人接受答案了。
 
后退
顶部