有一个过程MoveControl(objControl as Control,x as single,y as single),实现控件从当前位置逐渐的移动到x,y坐标处(像走过去一样).现在的问题是当调用多个MoveControl 过程的时候,控件的移动不是同时的,就是说第二个MoveControl执行之前要等第一个MoveControl过程执行结束.求同步移动方法与思路
注:把所有要移动的控件放在一个容器,然后移动容器这样的方法就不用说了.还有用多个时钟控件实现同时移动也不用说了(因为需要移动的控件数量是变化的,用时钟控件太麻烦)                                                                                           谢谢!.

解决方案 »

  1.   

    假如原先的 MoveControl() 走10步到 (x,y)。
    更改为:
    外循环10步,内循环所有的控件,每次每个控件只走1步。
      

  2.   

    这不是不让人说话嘛,用容器的办法最省事了,dim Item as Control
    for x=0 to 3000
        For Each Item In Controls
            MoveControl Item,x,y
        next
    next至于控件来源,移动过程这些内容LZ也没说清楚,我也只能给个大概的参考了
      

  3.   

    多谢回答,但不是我想要的结果,x,y坐标是不一样的.也就是说需要移动的控件不是移动到相同的位置,所以才声明了x,y两个参数.我想实现的效果类似于手机的按钮,大家都看过iphone 或三星的界面了吧.那些按钮就是同时移动的 .
      

  4.   

    移动步长一样的话这样就好了嘛dim Item as Control
    for x=0 to 3000
        For Each Item In Controls
            MoveControl Item,Item.Left+1,y
        next
    next然后容器用API应该是可以设置成透明的。
      

  5.   

    http://image.baidu.com/i?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=iphone4&ie=utf-8&in=23379&cl=2&lm=-1&st=&pn=140&rn=1&di=18883909450&ln=1998&fr=&&fmq=1379308880129_R&ic=&s=&se=&sme=0&tab=&width=&height=&face=&is=&istype=&ist=&jit=&objurl=http%3A%2F%2Fwenwen.soso.com%2Fp%2F20111102%2F20111102121539-1444780459.jpg#pn140&-1&di18883909450&objURLhttp%3A%2F%2Fwenwen.soso.com%2Fp%2F20111102%2F20111102121539-1444780459.jpg&fromURLippr_z2C%24qAzdH3FAzdH3Fojgojg_z%26e3Bf5f5_z%26e3Bv54AzdH3FzAzdH3Fqnnab98998_z%26e3Bip4&W500&H375&T7269&S42&TPjpg就像这个图片一样,当用户左右滑动的时候,按钮是同时而不是一个一个移动的.而背景不动.
      

  6.   

     MoveControl(btn1,10,10)
     MoveControl(btn2,30,10)
     MoveControl(btn3,60,30)
     MoveControl(btn4,90,30)
    要是这样能同时移,就灵活了.可惜不行.
      

  7.   

    这个网页里可以用图片数组,实际处理的时候可能比下边的代码要复杂,
    因为图片多的话图片框可以重用的,移出视线之外看不见的图片可以加载新图重用,
    一般最少图片控件的用量应该是总的可见图片数+1for i=0 to 3000 step 15'一次移过一屏,步长15缇
      for j=picture1.Lubound to picture1.Ubound
          if picturue1(j).left+picture1(j).width>0 then
              picture1(j).left=picturue1(j).left  - 15 '一次移动一个像素,反正像素和缇是1:15
          else
              picture1(j).left=5000'举个例子,不可见的图片框可以丢到最右边去准新一次的移动。
              picture1(j).picture=loadpicture(xxxxxxxx)
          end if
      next
      doevents'为了让移动的时候能显示出来
    next因为要实现一个动画效果,所以加个doevents在里边,这样的话图片移动的时候就能及时反映在窗口中
    加在第二个循环体上的原因是这样子看到的图片移动更有整体性一些.
    另外doevents可能会带来事件重入的问题,其实用时钟控件更好些,而且可以控制动画效果的快慢。实现的难度来说其实是差不多的,只不过控制上的感觉过程式的代码来得更直观些。
      

  8.   

    不就是我1楼的方案么,楼主给 MoveControl 的代码。
    既然移动距离是一样的,很容易改的。
      

  9.   

    移动的距离是不一样的,说不定什么时候移动,当前的位置也是不有规律的.移动的方向,和移动的量也是不一样的.这也就是为什么声明MoveControl(objControl as Control,x as single,y as single) 原因.
    只要能同步运行MoveControl过程,这样更灵活.
     MoveControl(btn1,10,10)
     MoveControl(btn2,30,10)
     MoveControl(btn3,60,30)
     MoveControl(btn4,90,30)
    现在这四个移动,只能一个一个移动.
    dim Item as Control
    for x=0 to 3000
        For Each Item In Controls
            MoveControl Item,Item.Left+1,y
        next
    next
    bakw 这个方法是可以实现移动,但不太好控制.不够灵活.
      

  10.   

    1)需求不明!!!
    图片看不到,但既然是一起滑动,移动距离是一样的吧!2)给出 MoveControl() 的代码!3)4个控件的当前位置在哪里?如何分别求得x和y?
    MoveControl(btn1,10,10)
     MoveControl(btn2,30,10)
     MoveControl(btn3,60,30)
     MoveControl(btn4,90,30)
      

  11.   

    谢谢Chen8013(舉杯邀明月),你的这个正是我要的效果,不过用的是时钟控件,不知道控件多了会不会有问题.
    给bakw10分,剩下40都给你Chen8013(舉杯邀明月).
      

  12.   

    回 Tiger_Zhao   ,移动的距离也是不一样的,就是初始化的时候安排各控件的目标坐标,简单的说就是各控件想移动到哪,就移动到哪,Chen8013(舉杯邀明月)的做法实现了,你再看看你有没有别的方法,集思广益.
      

  13.   

    晕,CSDN居然把我上传的这个代码删除了。
    现在点这个链接,变成别人的东西了。