我想产生这样的效果,就是随着我鼠标的移动,有一个长方形跟着移动,可是像我下面这么写代码,屏幕会闪的很厉害,怎么解决呢?谢谢各位.Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Cls
DoEvents
Dim a As Double                    
For a = X To X + 1 Step 0.001' 这里不用0.001的话,出来的效果,就是一条一条的
                   '之所以用这个,不用line,,bf的办法,因为我有时候不是长方形
Picture1.Line (a, 0)-(a, 10)        '而是一个任意形状,但是这个形状和鼠标的坐标(X,Y)有关系的
Next a
End Sub

解决方案 »

  1.   

    从你的代码上看,在X和X+1之间画了1000条线,太多了,我想只是多了10倍,最好是把 PictureBox的坐标用象素点,这样即不会多画也不会少画。另外,我想你For循环的意识是用垂直扫描线来填充一个多边形区域,这样做自然比较慢,试试看用 API 画图来画你的多边形,程序简单,速度也快很多。
      

  2.   

    楼上的方法不行,Api好像很麻烦,关注。
      

  3.   

    refresh也会闪吧,还是改为象素单位好点
      

  4.   

    改像素大概可以的,但是我这里的是user,是我自定义的,这样我才可以画图,我再上面画自己的图像,所以不可以用其他的,
      

  5.   

    先给一段实现橡皮筋的代码:Option Explicit
    Dim mx As Single, my As Single, flag As Integer    'mx,my为线段的起点位置(x,y)
    Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
              mx = X
              my = Y
              flag = 1
              Picture1.MousePointer = 2
    End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        
            If flag = 1 Then
                Picture1.Cls            
                Picture1.Line (mx, my)-(X, Y), , B
            End If
    End SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
            flag = 0
            Picture1.MousePointer = 0
    End Sub我的建议就是避免循环,直接使用line函数,如果需要画其它的图案,可以定义一个模块级变量,在Picture1_MouseMove根据该变量的值画图类似这样
    dim p as integer
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        
            If flag = 1 Then
            Select Case p
            Case 0
                .....
            Case 1
                ....
            Case 2
                ....
            Case 3
                ....
            End Select
            End If
    End Sub
      

  6.   

    不咋地啊,rainstormmaster(rainstormmaster)的还是会闪的!我建议用设置一个PictureBox控件作为"缓存",先在上面画,然后用Bitblt贴图,保证不闪!!等我写代码先,好久不编了...
      

  7.   

    最简单是在mouse_up再重新画
      

  8.   

    楼主这种方法不好,建议用rainstormmaster(rainstormmaster),创建各个图形的类模块
    用循环即使借助hdc,虽说避免闪烁,但速度应该会慢
      

  9.   

    用API函数Rectangle就好多了。
      

  10.   

    如果你用PICTURE控件进行动画设计,无论怎么设计,都会闪。
    试试API函数
      

  11.   

    回复人: liyan010(我是大坏蛋) ( ) 信誉:100  2003-12-17 15:06:00  得分:0 
     
     
      不咋地啊,rainstormmaster(rainstormmaster)的还是会闪的!我建议用设置一个PictureBox控件作为"缓存",先在上面画,然后用Bitblt贴图,保证不闪!!等我写代码先,好久不编了...
      
     回复人: bcmhts(风) ( ) 信誉:100  2003-12-17 18:44:00  得分:0 
     
     
      如果你用PICTURE控件进行动画设计,无论怎么设计,都会闪。
    试试API函数
      
     ----------------
    可以不用APi,一样不
    liyan010方法很通用,不过在这里有点牛刀了
      

  12.   

    去掉 Picture.Cls 这句,用 refresh 也会闪,最好用API建立绘图场景、在绘图场景中,用API绘图,闪得强一点!
      

  13.   

    哪位给出稍微详细点的代码亚,我对api不大精通的