注册 登录
编程论坛 VFP论坛

如何实现 在vfp表单中用鼠标点击,移动图片到该位置

山狼LS 发布于 2015-09-20 12:32, 1070 次点击
点击鼠标去坐标值我会,怎么实现让表单中某控件慢慢移动到点击的位置?
11 回复
#2
吹水佬2015-09-20 14:22
在鼠标事件中算Left和top可以吗?
#3
外部三电铃2015-09-20 15:22
以下是引用吹水佬在2015-9-20 14:22:17的发言:

在鼠标事件中算Left和top可以吗?

虽然我只懂web开发,但我觉得这个思路是正确的
#4
aaaaaa2015-09-20 20:03
虽然我只是团小组长,但我觉得下面这个示例是正确的

oForm = Createobject("TestForm")
oForm.Show(1)
Return

Define Class TestForm As Form
    Height = 400
    Width = 400
    AutoCenter = .T.
    xOffSet = 0
    yOffSet = 0
    Caption = "拖拉图像移动到该位置"

    Add Object Image1 As Image With;
        Height = 200, Width = 200, Top = 20, Left = 20, Stretch = 1, ;
        Picture = Getpict("JPG|GIF", "图像文件", "确定")  && 选择一个图像文件

    Procedure Image1.MouseMove
        Lparameters nButton, nShift, nXCoord, nYCoord
        If nButton = 1
            Thisform.xOffSet = nXCoord - This.Left
            Thisform.yOffSet = nYCoord - This.Top
            This.Drag
        Endif
    Endproc

    Procedure Image1.DragDrop
        Lparameters oSource, nXCoord, nYCoordgDrop
        This.Parent.DragDrop(oSource, nXCoord, nYCoordgDrop)
    Endproc

    Procedure DragDrop
        Lparameters oSource, nXCoord, nYCoord
        oSource.Left = nXCoord - Thisform.xOffSet
        oSource.Top = nYCoord - Thisform.yOffSet
    Endproc
Enddefine
#5
山狼LS2015-09-20 21:13
回复 3楼 外部三电铃
谢谢,我开始也是这样想的,但是不可以运算的
#6
山狼LS2015-09-20 21:33
回复 4楼 aaaaaa
不知道这些代码怎么用?刚入门
#7
aaaaaa2015-09-20 21:55
Ctrl+A, Ctrl+C, Ctrl+V
另存为:Test.Prg 文件
然后:Do Test.Prg

好像应该可能猜想是这样子的。
#8
hepingfly2015-09-22 00:32
** 运行下面代码,是否符合要求
PUBLIC oform1,nx1,nx2,ny1,ny2,xh
xh="*"
oform1=NEWOBJECT("form1")
oform1.Show
RETURN

DEFINE CLASS form1 AS form
    Top = 59
    Left = 82
    Height = 454
    Width = 780
    DoCreate = .T.
    Caption = "Form1"
    Name = "Form1"

    ADD OBJECT image1 AS image WITH ;
        Picture = "apps.bmp", ;
        Stretch = 2, ;
        BackStyle = 0, ;
        Height = 21, ;
        Left = 552, ;
        Top = 48, ;
        Width = 18, ;
        Name = "Image1"

    PROCEDURE Init
         nx1=thisform.image1.Left
         ny1=thisform.image1.top
    ENDPROC

    PROCEDURE MouseMove
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
          nx2=nXCoord
          ny2=nYCoord
    ENDPROC

    PROCEDURE Click
         with thisform
             .currentX=nx2
             .currentY=ny2
             .Print(xh)
              ns=100000
              for n=1 to ns
                 .image1.Left=nx1+n*((nx2-nx1)/ns)
                 .image1.top=ny1+n*((ny2-ny1)/ns)
             endfor
          endwith
             nx1=nx2
             ny1=ny2
    ENDPROC
ENDDEFINE
#9
吹水佬2015-09-22 08:17
以下是引用山狼LS在2015-9-20 21:33:57的发言:

不知道这些代码怎么用?刚入门

能解剖示例一定会用。
#10
sywzs2015-10-02 14:45
移动控件
在表单Form1中添加一个图像控件IMAGE1。
Form1.Init 代码
  Public nXX,nYY

IMAGE1.MouseDOWN 代码
  LPARAMETERS nButton, nShift, nXCoord, nYCoord
  nXX=This.Left - nXCoord
  nYY=This.Top - nYCoord

IMAGE1.MouseMove
  LPARAMETERS nButton, nShift, nXCoord, nYCoord
  IF nButton = 1
    This.Left = nXCoord + nXX
    This.Top = nYCoord + nYY
  ENDIF
运行表但试试。
#11
hu9jj2015-10-03 10:41
动态改变控件的TOP、LEFT值应该可以实现吧。
#12
hsfisher7 天前 14:48
1