VFP循环结构 表单设计 图像运动

在表单上添加一个图像控件(图片文件自定),点击“开始”按钮,图象开始向左运动,当图像左边界到达表单左边界时,图像从表单底部进入向上运动,当图像上边界到达表单顶部时,图像从表单右边界开始向左运动,点击“停止”按钮,图像停止运动。

使用时钟控件,移动速度由时钟控件 Interval 属性控制
使用 image 控件的 Tag 属性记录当前移动方向
表单 Init
thisform.Image.Tag = "←" && 设置默认向左
开始按钮 Click:
thisform.Timer1.Enabled = .T. && 开启时钟
停止按钮 Click:
thisform.Timer1.Enabled = .F. && 停止时钟
thisform.Image.Tag = "←" && 恢复默认向左

时钟控件 Timer:
DO CASE
CASE thisform.Image1.Tag = "→"
IF thisform.Image1.Left <= 0
&& 到达表单左边界
thisform.Image1.Tag = "↑" && 转为向上运动
thisform.Image1.Top = thisform.Height - thisform.mage1.Height && 图像闪到左下角
ELSE
thisform.Image1.Left = thisform.Image1.Left - 1 && 左移
ENDIF
CASE thisform.Image1.Tag = "←"
&& ....【你先思考下】
CASE thisform.Image1.Tag = "↑"
&&.....【你先思考下】
ENDCASE追问

并没有用到循环结构呀,都是选择结构

追答

为什么非要 DO WHILE 才叫循环呢?时钟控件本身就是循环了嘛,每隔 s 时间做一堆东东,不算是循环?当然,用 DO WHILE 做也可......

表单 Init
thisform.Image.Tag = "←" && 设置默认向左
thisform.Tag = "Stop" && 设置当前循环状态

开始按钮 Click:
thisform.Tag = "Run" 设置运行标志
DO WHILE .T.
IF thisform.Tag = "Stop" && 如果出现停止标志,退出循环
EXIT
ENDIF
DO CASE
CASE thisform.Image1.Tag = "→"
IF thisform.Image1.Left <= 0
&& 到达表单左边界
thisform.Image1.Tag = "↑" && 转为向上运动
thisform.Image1.Top = thisform.Height - thisform.mage1.Height && 图像闪到左下角
ELSE
thisform.Image1.Left = thisform.Image1.Left - 1 && 左移
ENDIF
CASE thisform.Image1.Tag = "←"
&& ....【你先思考下】
CASE thisform.Image1.Tag = "↑"
&&.....【你先思考下】
ENDCASE
WAIT "" TIMEOUT 0.5 && 延时 0.5 秒
DODEFAULT() 让 WINDOWS 处理一下其他事情,不至于被 DO WHILE 锁住
ENDDO

停止按钮 Click:
thisform.Tag = "Stop" && 设置停止标志
thisform.Image.Tag = "←" && 恢复默认向左

&& 看看其中分别....

追问

我不太明白tag的用法
两个代码我验证了都不成功╮(╯▽╰)╭

追答

tag 是Fox 大部分控件共有的属性,存储任何你的程序需要的额外数据(字符型)。

* 以下是试验过的
1.建立表单,
2.添加 时钟控件(Name:Timer1; Interval:50; Enabled:.F.)
3.添加两个按钮
4. 表单 Init :
thisform.Image1.Tag = "←" && 设置默认向左
5. 运行按钮 Click:
thisform.Timer1.Enabled = .T. && 开启时钟
6. 停止按钮 Click:
thisform.Timer1.Enabled = .F. && 停止时钟
7. 时钟控件 Timer:
DO CASE
CASE thisform.Image1.Tag = "←"
IF thisform.Image1.Left <= 0
&& 到达表单左边界
thisform.Image1.Tag = "↑" && 转为向上运动
thisform.Image1.Top = thisform.Height - thisform.Image1.Height && 图像闪到左下角
ELSE
thisform.Image1.Left = thisform.Image1.Left - 10 && 左移
ENDIF

CASE thisform.Image1.Tag = "↑"
IF thisform.Image1.Top <= 0
&& 到达表单上边界
thisform.Image1.Tag = "←" && 转为向左运动
thisform.Image1.Left = thisform.Width - thisform.Image1.Width && 图像闪到右下角
thisform.Image1.Top = thisform.Height - thisform.Image1.Height
ELSE
thisform.Image1.Top = thisform.Image1.Top - 10 && 上移
ENDIF
ENDCASE

温馨提示:答案为网友推荐,仅供参考
相似回答