主题:菜鸟请教:图片框和计时器做的简单动画
大懒猫
[专家分:220] 发布于 2008-11-10 10:39:00
当图片移动到窗体的上边界时,向上按钮变为不可用的代码为:
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]
最后更新于:2008-11-10 10:43:00
回复列表 (共7个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-11-10 11:08:00
右边界也好写(这里忽略窗体边框的宽度,因为一般设置都很小):
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读取系统设定的标题栏高度和边框宽度,来精确计算。
板凳
大懒猫 [专家分:220] 发布于 2008-11-10 11:40:00
非常感谢老大陡伤悲~~~~[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 楼
一江秋水 [专家分:9680] 发布于 2008-11-10 16:26:00
左、右、上还有一点问题,没有把减少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 楼
大懒猫 [专家分:220] 发布于 2008-11-12 12:50:00
[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 楼
一江秋水 [专家分:9680] 发布于 2008-11-13 08:00:00
呵呵,智者百虑必有一疏哦
6 楼
guoyong_cy [专家分:3050] 发布于 2008-11-13 12:13:00
怎么没看到你的计时器呢??
7 楼
大懒猫 [专家分:220] 发布于 2008-11-14 12:03:00
[quote]怎么没看到你的计时器呢??[/quote]
要命哦,计时器控件在运行时不是不可见的吗?那你怎么看得见呢?[em10]
我来回复