回 帖 发 新 帖 刷新版面

主题:菜鸟请教:图片框和计时器做的简单动画

当图片移动到窗体的上边界时,向上按钮变为不可用的代码为:
Private Sub cmdup_Click()
    If Picture1.Top >= 0 Then
         Picture1.Top = Picture1.Top - 100
    Else
         cmdup.Enabled = False
    End If
End Sub
向左的按钮代码为:
Private Sub cmdleft_Click()
    If Picture1.Left >= 0 Then
        Picture1.Left = Picture1.Left - 100
    Else
        cmdleft.Enabled = False
    End If
End Sub
但是我不会写图片移动到窗体的下边界和右边界时的代码!请指点,谢谢![em8]

回复列表 (共7个回复)

沙发

右边界也好写(这里忽略窗体边框的宽度,因为一般设置都很小):
Private Sub cmdright_Click()
    If Picture1.Left+picture1.width < width Then
        Picture1.Left = Picture1.Left + 100
    Else
        cmdright.Enabled = False
    End If
End Sub

而下边界就有点麻烦了,因为窗体的标题栏的高度不可以忽略。
const 标题栏高度=700
Private Sub cmddown_Click()
    If Picture1.top+picture1.height+标题栏高度 < height Then
        Picture1.top = Picture1.top + 100
    Else
        cmddown.Enabled = False
    End If
End Sub


我这里使用了常数,当然要更精确(灵便),就要使用api读取系统设定的标题栏高度和边框宽度,来精确计算。

板凳

非常感谢老大陡伤悲~~~~[em32]
在你的基础上我又改动了一下,自我感觉还不错,请你看看:
Private Sub cmdright_Click()
    If Picture1.Left >= 0 Then cmdleft.Enabled = True
    If Picture1.Left + Picture1.Width < Form1.Width Then
        Picture1.Left = Picture1.Left + 100
    Else
        cmdright.Enabled = False
    End If
End Sub


Private Sub cmdleft_Click()
    If Picture1.Left + Picture1.Width > Form1.Width Then cmdright.Enabled = True
    If Picture1.Left >= 0 Then
        Picture1.Left = Picture1.Left - 100
    Else
        cmdleft.Enabled = False
    End If
End Sub

Private Sub cmdup_Click()
If Picture1.Top + Picture1.Height + m < Form1.Height Then cmddown.Enabled = True
    If Picture1.Top >= 0 Then
         Picture1.Top = Picture1.Top - 100
    Else
         cmdup.Enabled = False
       
    End If
End Sub



Private Sub cmddown_Click()
    Const m = 600     
    If Picture1.Top + Picture1.Height + m < Form1.Height Then
        Picture1.Top = Picture1.Top + 100
    Else
        cmddown.Enabled = False
     
    End If
    If Picture1.Top >= 0 Then cmdup.Enabled = True
End Sub

3 楼

左、右、上还有一点问题,没有把减少100的因素考虑进去,有可能图片框的顶部(或左、右部)会越过窗体边框。以左边界为例,应修改为:


If Picture1.Left > 100 Then
  Picture1.left = Picture1.left - 100
else
  Picture1.left = 0
  cmdright.Enabled = False
end if

If Picture1.Left >= 0 Then cmdleft.Enabled = True这句代码没有用处,属于画蛇添足,因为当Enabled = False后,按纽已经不能使用了,能使用的时候,没有这一句,它仍然是Enabled = True

4 楼

[quote]左、右、上还有一点问题,没有把减少100的因素考虑进去,有可能图片框的顶部(或左、右部)会越过窗体边框。以左边界为例,应修改为:


If Picture1.Left > 100 Then
  Picture1.left = Picture1.left - 100
else
  Picture1.left = 0
  cmdright.Enabled = False
end if

If Picture1.Left >= 0 Then cmdleft.Enabled = True这句代码没有用处,属于画蛇添足,因为当Enabled = False后,按纽已经不能使用了,能使用的时候,没有这一句,它仍然是Enabled = True[/quote]
哈哈哈~~~高手,你不对哦!第五行代码应该是cmdleft.Enabled=false而不是cmdright.Enabled=false哦!图片到了最左边时应该是不能再向左了,所以应该是“向左”按钮不可用。
[em12]

5 楼

呵呵,智者百虑必有一疏哦

6 楼

怎么没看到你的计时器呢??

7 楼

[quote]怎么没看到你的计时器呢??[/quote]
要命哦,计时器控件在运行时不是不可见的吗?那你怎么看得见呢?[em10]

我来回复

您尚未登录,请登录后再回复。点此登录或注册