vfp教学实例_vfp实例大全
vfp教学实例由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“vfp实例大全”。
第一课 编一个“心灵感应”小游戏
我们的课程从这个小游戏开始吧。一些名词在这里不做解释,广大网友漫漫理解,或者自己去查一些资料,下面我就来介绍如何用Visual Foxpro 6.0来编制这个游戏。
1、在硬盘上建一个文件夹,例如D:DEMO。
2、启动Visual Foxpro 6.0,选择:“文件”——“新建”,出现“新建对话框”(图示1-1),文件类型选“项目”,按“新建文件”按钮,选择项目文件名“demo”(自己随便起名),保存在D:DEMO下(图示1-2),按“保存”按钮后,出现项目管理器,这样一个项目就建成了,项目名就是“demo”以后的一切操作都在这个项目内。项目管理器由两个文件组成,扩展名分别是“PJX”和“PJT”。(图示1-3)在这个项目内可以建立数据库、表单、程序、菜单等。
3、选择“文档”——“表单”,按“新建”按钮。出现(图示1-4)
4、按“新建表单”按钮,出现(图示1-5)。表单就是将来运行后出现的窗口或对话框,上图就是一个表单。下面我们就在这个表单上创建心灵感应游戏。
5、在Form1的属性(表单的属性一般在创建一个新表单后自动出现,若没有可右击表单,选择“属性”即可)中选择属性Caption(标题)将默认值“Form1”改为“心灵感应”(图示1-6),表单的标题就改为“心灵感应”。但表单的名字应叫“Form1”,要想更改请改属性——Name。
6、在d:demo下新建一文件夹pic,存入一些需要的图标、图片等,在Form1的属性中选择属性Icon的值为d:demopicmsgbox02.ico(图示1-7)。双击“Icon”或点击夹,选择msgbox02.ico图标,按“确定”按钮。
按钮,打开d:demopic文件
7、关闭表单设计器,出现(图示1-8),按“是”,出现(图示1-9),取文件名为xlgy,建一文件夹d:demoform将文件xlgy.scx保存到该文件夹里。则在项目管理器的表单中出现一个xlgy表单(图示1-10)。(你也可以全部编完再保存)
8、选中xlgy表单,按“修改”键,又返回表单编辑状态。调整表单窗口大小(可用鼠标拖拉),在表单控件工具栏的“图象”图标上点击一下,在表单上拖出一个长方形,即图片显示区域,其picture属性为d:demopicpkbm1.jpg(图示1-11);
在表单控件工具栏选“标签”图标,在表单上的图象下面拖出一个长方形,其capion属性为“本程序可以感应你在想什么。”,字体大小fontsize为“16”,你也可以设定其他属性,如:字体(fontname)、字体颜色(fontcolor)等;再建两个按钮“command1和command2”,其属性caption分别为“开始”、“退出”。(图示1-12)
9、双击“退出按钮”,在click过程中输入thisform.release或release thisform,意思为:当鼠标单击“退出”按钮时释放表单。下面你可以按!图标运行此表单,点击“退出”按钮,即可退出此表单。
10、下面我们要在“开始”按钮的click过程中输入一些命令,完成我们要做的工作。我们先做几张图片pk1.jpg(图示1-13)、pk2.jpg(图示14)、pkbm2.jpg(图示15),在“开始”按钮的click过程中输入如下命令:
ThisForm.image1.picture='picpk1.jpg' &&将图片换成pk1.jpg this.caption='继续' &&将“开始”按钮名改为“继续”,因为在command1.click内,所以可用this代替thisform.command1 thisform.command2.enabled=.f.&&将“退出”按钮设为不可用
thisform.label1.caption='请在上面的扑克牌中选一张,记在心里。按继续键。' &&改变label1的内容
wait '' &&程序暂停,等你按任意键,“''”是两个单引号,不能缺少.ThisForm.image1.picture='picpkbm1.jpg' thisform.label1.caption='请你默念三遍。按继续键。' wait '' ThisForm.image1.picture='picpk2.jpg' thisform.label1.caption='我知道你记的是哪一张,我把它去掉了!' wait '' ThisForm.image1.picture='picpkbm2.jpg' thisform.label1.caption='' this.caption='再来一次' thisform.command2.enabled=.t.&&将“退出”按钮设为可用 retu &&重新运行
注: &&...为程序注释,它在程序运行时不执行。
11、到此为止,“心灵感应”就编完了,你可以运行此表单看看运行结果。
二:行程序或点击菜单、按钮等方法使它们运行。这一课,我将向大家介绍主菜单、快捷菜单和主程序。
一、主菜单的设计
1、在项目管理器中的“其它”中选中“菜单”,按“新建”按钮,出现新建菜单选择窗口(图2-1);
按“菜单”按钮,出现菜单编辑窗口,在“菜单名称”中分别输入“文件(
以上的六个菜单项中都有“
2、点击游戏菜单后的“创建”按钮,编辑“游戏”的下一级菜单(图2-3),在“心灵感应”中选择“命令”,在命令框中输入“do form xlgy”,作用是打开xlgy表单。在其后面还有一个选项,点击选项按钮出现选项对话框,使“键标签”的文本框获得焦点,按Ctrl+G(图2-4)建立一个快捷键。快捷键与热键不同,热键只在当前窗口起作用,快捷键无论当前是什么窗口都起作用。例如:在主窗口中按 Ctrl+G,可以直接运行“心灵感应”表单,相当于用鼠标选择菜单中的“游戏”,再选择“心灵感应”。
3、反回到“菜单栏”,在“退出”的命令框中输入clear event命令。
4、按“预览”按钮,可以预览一下设计的菜单。
5、选择“菜单”中的“生成”,(图2-41)
出现图2-42,按“是”按钮,出现图2-43,菜单名为:main,保存在d:demo下,出现图2-44
按“生成”按钮。菜单建好了,可以关闭菜单设计器了。
二、快捷菜单的设计
1、在项目管理器中的“其它”中选中“菜单”,按“新建”按钮,出现新建菜单选择窗口,按“快捷菜单”按钮,建立快捷菜单yji.mnx:(图2-5)
2、保存菜单yji.mnx,生成菜单程序文件yji.mpr,在以后的库房管理软件中会用到。
三、主程序设计
1、选择“代码”——“程序”,按“新建”按钮,输入如下程序: CLEAR SET EXCL ON SET TALK OFF SET MESSAGE ON SET CENT ON RELEASE WINDOW 常用 &&关闭常用窗口 PUBLIC MYPATH &&定义全局变量MYPATH MYPATH=LEFT(SYS(16),RAT(“”,SYS(16)))&&提取当前路径 SET DEFA TO(MYPATH)SET PATH TO data;form;pic &&指明路径
_SCREEN.backcolor=iif(mod(day(date()),2)=0,rgb(80,230,210),rgb(70,140,180))&&设置屏幕背景颜色,单、双号背景颜色不同
MODIFY WINDOW SCREEN TITLE “ xxx软件 Ver x.x 作者:王永成 ”+;“ 今天是:”+dtoc(date())+“ ”+cdow(date())&&设置主窗口标题 _SCREEN.ICON=“..picmsgbox02.ico” &&设置主窗口图标 ZOOM WINDOW SCREEN MAX &&主窗口最大化 deactivate window “项目管理器” &&关闭项目管理器 do main.mpr &&运行主菜单程序 read event2、保存主程序main.prg3、右击主程序,选择“设置主文件”。
4、运行主程序看一看结果。
三:“猜数游戏”。
1、新建一表单csyx(图3-1),表单的caption属性为“猜数游戏”,背景颜色(BackColor)及各表单控件的字体颜色等,各位朋友可按个人的爱好选择。
2、命令按钮command1~command13的caption属性分别为:“确定”,“退格”,“新一局”,“0”...“9”。
3、文本框Text1的FontSize为26;FontColor为250,250,0;BackColor为0,128,128;ContorlSource为ctet1(变量ctet1的值与text1的值相关联)。
4、文本框Text2的FontColor为250,250,0;ContorlSource为jlun;BackStyle为“0-透明”;BorderStyle为“0-无”。
5、文本框t1~t10,zq1~zq10,cw1~cw10(name=t1...,zq1...,cw1...cw10),(controlsource=t1...),FontColor为250,250,0;BackStyle为“0-透明”;BorderStyle为“0-无”。
6、标签Label1~Label3的caption属性分别为:“选择的数”,“位置正确”,“位置错误”。
7、标签Label4的caption属性为:=“说明:选择4个数按确定键,在右侧显示这4位数有几位数与你要猜的数位置相同,”+chr(13)+“ 有几位数包含在要猜的数中,但位置不同。根据以上提示猜出是哪4位数。”,其中chr(13)是一个回车换行命令,“=”和英文引号(单、双都行)不能少;BackStyle为“0-透明”。
8、标签L1~L10的caption属性分别为:“第一次”...“第十次”;BackStyle为“0-透明”。
9、表面工作做完了,下面我们来输入一些命令(程序),双击表单出现表单过程编辑框,在Init过程中输入如下命令:
public ctx1,ctx2,ctx3,ctx4,ctet1,ctet2,n,zq,cw,p &&设置全局变量 zq=0 &&设置初始值 cw=0 ctet1='' ctet2='' n=0 thisform.command3.click()&&执行命令按钮(command3)的click过程,相当于点击“新一局”按钮。
10、双击按钮“0”(command4),在其click过程中输入如下命令: ctet2='0' do panduan &&执行panduan.prg程序 thisform.refresh11、按钮“1”~“9”的click过程中的命令与按钮“0”的click过程中的命令的不同之处就是ctet2的值,即ctet2='1'...ctet2='9'。
12、因为在按钮“0”~“9”的click过程中都执行一些相同的命令,所以我们把这些命令提出来,作为一个程序来调用(也可以在表单中创建一个方法程序,请参见第九课),可以简化程序的设计。选择“代码”——“程序”按“新建”按钮,新建程序panduan.prg:
if len(allt(ctet1))4 &&判断text1的值的长度,如果不是4位,执行下面的命令.if!ctet2$ctet1 &&判断按下的按钮的数值是否已被选过,若所选的数不包涵在已选的数值内.ctet1=ctet1+ctet2 &&把选定的数加在后面.endif endif
13、双击按钮“确定”(command1),在其click过程中输入如下命令: zq=0 &&正确值zq=0 cw=0 &&错误值cw=0 if len(allt(ctet1))4 &&如果text1的值不是4 位
wait window at 16,25 “数据不够4 位” &&提示
return &&返回 endif p=p+1 if ctx1$ctet1 &&判断cte1值是否在所选定的4位数中.(ctet1及ctet2、ctet3、ctet4的值是在表单运行时或点击了“新一局”按钮时机器随机产生的4位数值。)
if ctx1=substr(ctet1,1,1)zq=zq+1 else cw=cw+1 endif endif if ctx2$ctet1 if ctx2=substr(ctet1,2,1)zq=zq+1 else cw=cw+1 endif endif if ctx3$ctet1 if ctx3=substr(ctet1,3,1)zq=zq+1 else cw=cw+1 endif endif if ctx4$ctet1 if ctx4=substr(ctet1,4,1)zq=zq+1 else cw=cw+1 endif endif do case case p=1 thisform.l1.visible=.t.thisform.t1.visible=.t.thisform.zq1.visible=.t.thisform.cw1.visible=.t.t1=ctet1 zq1=zq cw1=cw if zq=4 jlun=“你真能蒙!” endif case p=2 thisform.l2.visible=.t.thisform.t2.visible=.t.thisform.zq2.visible=.t.thisform.cw2.visible=.t.t2=ctet1 zq2=zq cw2=cw if zq=4 jlun=“太棒了,你真能蒙!” endif case p=3 thisform.l3.visible=.t.thisform.t3.visible=.t.thisform.zq3.visible=.t.thisform.cw3.visible=.t.t3=ctet1 zq3=zq cw3=cw if zq=4 jlun=“太棒了,蒙的吧?!” endif case p=4 thisform.l4.visible=.t.thisform.t4.visible=.t.thisform.zq4.visible=.t.thisform.cw4.visible=.t.t4=ctet1 zq4=zq cw4=cw if zq=4 jlun=“太棒了,您是教授吗?” endif case p=5 thisform.l5.visible=.t.thisform.t5.visible=.t.thisform.zq5.visible=.t.thisform.cw5.visible=.t.t5=ctet1 zq5=zq cw5=cw if zq=4 jlun=“大学生水平,很可以!” endif case p=6 thisform.l6.visible=.t.thisform.t6.visible=.t.thisform.zq6.visible=.t.thisform.cw6.visible=.t.t6=ctet1 zq6=zq cw6=cw if zq=4 jlun=“智商不低吗!” endif case p=7 thisform.l7.visible=.t.thisform.t7.visible=.t.thisform.zq7.visible=.t.thisform.cw7.visible=.t.t7=ctet1 zq7=zq cw7=cw if zq=4 jlun=“还算可以,要努力呀!” endif case p=8 thisform.l8.visible=.t.thisform.t8.visible=.t.thisform.zq8.visible=.t.thisform.cw8.visible=.t.t8=ctet1 zq8=zq cw8=cw if zq=4 jlun=“一般人到这儿都能找到!” endif case p=9 thisform.l9.visible=.t.thisform.t9.visible=.t.thisform.zq9.visible=.t.thisform.cw9.visible=.t.t9=ctet1 zq9=zq cw9=cw if zq=4 jlun=“太一般了!” endif case p=10 thisform.l10.visible=.t.thisform.t10.visible=.t.thisform.zq10.visible=.t.thisform.cw10.visible=.t.t10=ctet1 zq10=zq cw10=cw if zq=4 jlun=“到现在才早找出来?!智商有问题!” else jlun=“智商太低了,再来一次?” endif endcase ctet1=“” thisform.refresh14、双击按钮“新一局”(command3),在其click过程中输入如下命令: jlun=“” thisform.l1.visible=.f.thisform.t1.visible=.f.thisform.zq1.visible=.f.thisform.cw1.visible=.f.thisform.l10.visible=.f.thisform.t10.visible=.f.thisform.zq10.visible=.f.thisform.cw10.visible=.f.thisform.l2.visible=.f.thisform.t2.visible=.f.thisform.zq2.visible=.f.thisform.cw2.visible=.f.thisform.l3.visible=.f.thisform.t3.visible=.f.thisform.zq3.visible=.f.thisform.cw3.visible=.f.thisform.l4.visible=.f.thisform.t4.visible=.f.thisform.zq4.visible=.f.thisform.cw4.visible=.f.thisform.l5.visible=.f.thisform.t5.visible=.f.thisform.zq5.visible=.f.thisform.cw5.visible=.f.thisform.l6.visible=.f.thisform.t6.visible=.f.thisform.zq6.visible=.f.thisform.cw6.visible=.f.thisform.l7.visible=.f.thisform.t7.visible=.f.thisform.zq7.visible=.f.thisform.cw7.visible=.f.thisform.l8.visible=.f.thisform.t8.visible=.f.thisform.zq8.visible=.f.thisform.cw8.visible=.f.thisform.l9.visible=.f.thisform.t9.visible=.f.thisform.zq9.visible=.f.thisform.cw9.visible=.f.p=0 ctext='1234567890' for i=1 to 4 n=11-i cn1=rand()cn=int(cn1*n)+1 if cn=0 cn=1 endif txx='ctx'+allt(str(i))&txx=substr(ctext,cn,1)if cn=1 ctext1=right(ctext,(10-i))else if cn=11-i ctext1=left(ctext,(10-i))else ctext1=left(ctext,cn-1)+right(ctext,(11-i-cn))endif endif ctext=ctext1 endfor
thisform.text1.value=“” thisform.refresh15、双击按钮“退格”(command2),在其click过程中输入如下命令: if len(allt(ctet1))0 &&长度不为0 ctet1=left(ctet1,len(allt(ctet1))-1)&&删除后面的一为数 endif thisform.refresh16、修改主菜单,在“游戏”的猜数游戏后填加命令:do form csyx,别忘了生成程序文件。
17、因为表单和程序不在同一目录下,所以单独运行表单会出现找不到某程序的错误,我们需要运行主程序main.prg,来看看运行结果。