如何实现,点击一个按钮,然后按钮凹下去,手移开按钮再弹起来?(注:触摸屏只有Click事件,Mousedown,Mouseup都不能实现这个功能)

解决方案 »

  1.   


    为什么"Mousedown,Mouseup都不能实现这个功能"?只有Mousedown,Mouseup才能实现这个功能
      

  2.   

    那是要在触摸屏上实现,不是用鼠标来点击实现!事实是你点击触摸屏后,他只是把mouseup和mousedown当做click事件来处理,根本得不到预期的效果。目前,我只是用timer控件来实现凹凸的效果。
      

  3.   

    那是要在触摸屏上实现,不是用鼠标来点击实现!事实是你点击触摸屏后,他只是把mouseup和mousedown当做click事件来处理,根本得不到预期的效果。目前,我只是用timer控件来实现凹凸的效果。 
      

  4.   

    应该可以的呀,要不你新建一个工程,在窗口中粘贴以下代码,看看能不能看到三个信,如果能,表示这些事件已经触发,效果看不出来是你的程序效率或设计问题,代码如下:Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Line (0, 0)-(Me.Width, Me.FontSize * 15), &H8000000F, BF
        Me.CurrentX = 0
        Me.CurrentY = 0
        Print "MouseDown Button:" & Button & "  X:" & X & "  Y:" & Y
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Line (0, Me.FontSize * 15 + 15)-(Me.Width, (Me.FontSize * 15) * 2), &H8000000F, BF
        Me.CurrentX = 0
        Me.CurrentY = Me.FontSize * 15
        Print "MouseMove Button:" & Button & "  X:" & X & "  Y:" & Y
    End SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Line (0, (Me.FontSize * 15) * 2 + 15)-(Me.Width, (Me.FontSize * 15) * 3), &H8000000F, BF
        Me.CurrentX = 0
        Me.CurrentY = (Me.FontSize * 15) * 2
        Print "MouseUp Button:" & Button & "  X:" & X & "  Y:" & Y
    End Sub
    如果实在不行你可以尝试在 Click 事件里启动一个定时器模拟点击效果,如:Dim ButtDown As Picture
    Dim ButtUp As Picture
    Private Sub Form_Load()
        Timer1.Enabled = False
        Set ButtDown = LoadPicture("C:\but1.jpg")
        Set ButtUp = LoadPicture("C:\but2.jpg")
    End SubPrivate Sub Picture1_Click()
        Picture1.Picture = ButtDown
        Timer1.Interval = 500
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        Timer1.Enabled = False
        Picture1.Picture = ButtUp
    End Sub
      

  5.   

    你这个问题涉及到触摸屏的硬件,因为点击触摸屏相当于点击鼠标,但是从屏幕的一个点到另一个点用鼠标操作是移动的,鼠标有移动轨迹,而触摸屏是跳跃的,中间没有移动轨迹,因此也就没有MouseMove、Mousedown和Mouseup这几个功能。要实现你的这个功能估计需要电容屏和win8或安卓操作系统支持吧。
      

  6.   

    错,触摸屏并不是没有MouseMove这几个功能,也非跳跃式,而是MouseMove时button参数保持为1而已,而且还会根据驱动设置,当长按下一个位置不放超出设定的时间,还会触发MouseDown事件,这时候button参数为2,就是模拟鼠标右键的点击。
    就触摸屏硬件来说,主要分三类,
    一类为电阻式,无非就是用A/D转换方式采集纵横两条线路并运算成X,Y坐标功能,因为有能采集到和不能采集到数据的区分,所以可以有MouseDown和MouseUp的消息触发区分,如果在较短的时间内检测上一次记录的X、Y坐标发生变化,同时没有检测过空的情况(即MouseUp状态),就会触发MouseMove并将其button参数设置为1,表示鼠标按下时移动的。
    还有一类为电容式(人体静电感应)和光感式(红外传感器矩阵),虽然其数据采集特性不同,但他们能采集到x、y坐标的特性是一样的,如果说有特别的,那就是那种绘图板,拥有磁感应和细分压力的能力,可以根据画笔悬空状态的磁力采集到x、y的坐标,当画笔触碰到画板时,还可以完整的模拟鼠标的操作,甚至在驱动中还提供扩展数据“压力值”。
    如果说不能触发这种事件,应该是检测方法不对或因为效率太低导致消息丢失,再有可能就是驱动有问题,在我用过的多种触摸屏来说,没有这种现象发生。
      

  7.   

    不行的你点击触摸屏一次,他的mousedown和mouseup是一同触发的。
      

  8.   

    你这个代码只是定时而已,并不是移开后按钮自动弹起。
    用timer控件来实现这个功能,我早做好了,只是想问一下有没有其他的方法来实现这样的功能。
      

  9.   

    你先看看是不是你的触摸屏有问题,比如换一个屏看看效果,就用我说的方式处理,以最简单的方式测试,不要试图自己写复杂的效果先,这点很重要。因为图形程序的处理会根据程序的过程或硬件的配置以及系统资源占用的情况在时间上有着很大的变化。把这些不稳定因素排除后单纯测试触摸屏,看看是不是触摸屏的问题。如果在这种环境测试触摸屏还是这种情况,建议你换个驱动或设备,要不就只有用定时器了。如果不是你说的情况,那么你可以考虑更换配置高的PC来跑程序或注意图形处理上的一些技术使用。还有个建议,就是用 Flash 来做这种效果,如果你对 GDI/GDI+ 技术不是很了解的情况,用 Flash 来做图形处理可以提高很多效率上的问题,不过提一下,Flash 会有内存增长问题,注意使用。