关于VFP主程序.docx

上传人:b****6 文档编号:4947419 上传时间:2022-12-12 格式:DOCX 页数:20 大小:102.72KB
下载 相关 举报
关于VFP主程序.docx_第1页
第1页 / 共20页
关于VFP主程序.docx_第2页
第2页 / 共20页
关于VFP主程序.docx_第3页
第3页 / 共20页
关于VFP主程序.docx_第4页
第4页 / 共20页
关于VFP主程序.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

关于VFP主程序.docx

《关于VFP主程序.docx》由会员分享,可在线阅读,更多相关《关于VFP主程序.docx(20页珍藏版)》请在冰豆网上搜索。

关于VFP主程序.docx

关于VFP主程序

关于主程序和主窗口

1.VFP主程序的一般写法

*-------------------main.prg

settalkoff                            对于主程序设计具有一定的通用性,一是对系统

setescaoff                            环境的设置;二是对自定义菜单和工具栏的设计,

setexactoff                           以及启动画面或登录画面的设计。

在左边列出的

setexclOff*设定表为共享方式           这段程序是我编制的建设银行计算机台帐的主称

SETREPROCESSTOAUTOMATIC*设定数据加锁 序,希望能对您有所帮助。

sethelptocomp_help.chm *设定帮助文件

setconson      *激活从程序中向VisualFoxPro主窗口或活动的用户自定义窗口的输出。

setdateansi    *设置日期格式

setscoreoff    *设定NumLock、CapsLock和Insert键状态

setsafeoff     *关闭对话框

setstatbaron  *打开状态栏

setcenton      *设定日期格式年为4位数

setcolorto     *设定配色方案

setsysmenuoff  *关闭系统主菜单

clea             *刷新屏幕

clearall        *清理变量

ONERRORDOerr.PRG *设定出错处理程序

onshutdowndoqUIT1.prg*指定当试图退出FoxPro时,要执行的命令,否则提示不能退出FoxPro

with_screen     *设定FoxPro主窗口属性

.visible=.f.     *设定主窗口不可见

endwith

doformbegin    *执行启动画面(包括版权、版本、使用者等)

readevent       *占用进程,启动事件处理

doformlogin    *执行登录表单,对用户进行身份验证

readevent       *占用进程

with_screen     *对主窗口进行再次设定

.visible=.t.

.closable=.t.

.controlbox=.t.

.maxbutton=.t.

.minbutton=.t.

.movable=.t.

.top=0

.left=0

.windowstate=2   *将主窗口最大化

.caption='中国建设银行计算机台帐管理'

.icon='screen2.ico' *设定图标

endwith

软件使用期限

(1).超过规定时间不运行

ifdate()={^2009.01.01}

quit

endif

到2009.01.01该软件运行后就会退出!

(2).如要限定次数,可以做一个累加器,将结果存入一表的字段中来实现!

可以每次打开主程序时执行

lnCisu=lnCisu+1

iflnCisu>=50

   cleareven

   quit

endif

每次退出时保存lnCisu

每次开始时读取

主程序怎么建立的在哪建?

在项目里

方法:

1.建立项目

2.建立数据库

3.建立菜单,表单,报表....

4.建立.PRG(主程序)

5.连编

编程所设初始环境的设置,供参考.

cleaall

closeall

SETTALKOFF

sethoursto24

SETDATETOANSI

SETCENTURYON

SETESCAPEOFF

SETDELETEDON

setstatusoff

setsafeoff

setoptimizeon

setstatusbaroff

SETUNIQUEON

_SCREEN.CAPTION='学生收费管理系统'

_screen.fontname='楷体'

_SCREEN.AUTOCENTER=.T.

_SCREEN.CLOSABLE=.t.

_SCREEN.WINDOWSTATE=2

_SCREEN.SHOW

_SCREEN.ICON='note14.ico'

_SCREEN.picture='win.jpg'

如何让程序延时N秒后继续执行?

不是用waittimeout也不用时钟控件?

有什么办法吗?

不要太精确的话可用时间函数,选取当前分和秒值、到变量,然后取实时时间分、秒值,循环判断它是否大于设定的值即可!

YANSHI=datetime()&&将系统现在的时间赋给变量YANSHI

DoWhiledatetime()<=YANSHI+2

&&这里的2为两秒,两秒内执行dowhile....enddo的空循环,暂停往下执行程序

Enddo

为什么程序编译后一闪而过?

了解VFP表单窗口属性 

    笔者在两年多的新闻组生活中,曾数十次遇到过初学者对VFP的表单窗口属性所提出的问题,特别是“为何系统编译后运行时一闪而过”的问题,更是被频繁地提出。

现根据我的经验进行一下总结,以帮助初学者打掉这只拦路虎。

其实,这个问题之所以被频繁地提出,并非是由于初学者的理解能力有问题,而实在是VFP的设计混乱所致,以至于造成初学者理解上的混乱。

笔者曾在“济南万千”的“软件、编程、数据库”新闻组就此问题发过“窗口问题到此为止”的帖子,反响很大,现根据该帖进行整理,修正补足该帖中的一些不准确之处及遗漏。

本文所提“表单窗口属性”,是指那些不但影响表单本身的特征(例如长宽等),而且对表单之外、项目之中的其它“元件”有影响的表单属性,它们包括如下三个:

属性 意义 可选值(黑体为默认值) 

DeskTop 指定表单是否包含在VFP主窗口中 .F./.T. 

WindowType 指定表单对象运行时的动作 0-无模式/1-模式 

ShowWindow 指定在创建过程中表单窗口显示表单或工具栏 0-在屏幕中/1-在顶层表单中/3-做为顶层表单 

下面针对上述表单属性以及VFP中“桌面(DeskTop)、屏幕(Screen)、表单(Form)”等概念谈一谈我的理解。

正因为VFP在此方面的设计混乱,也就决定了我不能系统地、有条理地分析这些问题,我做的只能是阐述一些事实。

1.表单是一个对象,外观表现上是一个窗口。

VFP的主窗口也可以说是一个“表单”对象,它有一个固定的名字叫“_Screen”,“_Screen”是一个特殊的表单对象;

2.“ShowWindow”是规定表单在“显示方面的从属关系”的属性ShowWindow属性实际上仅有两种选择:

“作为顶层表单”与“在顶层表单中”。

为了表达方便,我们把具有前者属性值的表单称为“顶层表单”,后者称为“从属表单”。

二者在显示方面的不同地位是:

顶层表单在Windows任务栏上有一席之地,从属表单却没有这种待遇;顶层表单最小化时,从属表单随之被隐藏,当顶层表单关闭后,从属表单随之关闭。

ShowWindow的第三种选择“在屏幕中(默认)”仅是“在顶层表单中”的一个特例,即为“在_Screen这个特定的顶层表单中”之意,选择此种属性值时,它一定是个“从属表单”了。

_Screen具有“顶层表单”的一切显示特征。

从属表单不能独立地被显示,必须与他的“主表单”一起显示,这个“主表单”要么是一个顶层表单要么是VFP的窗口(_Screen)。

不需要为一个“从属表单”指定一个“主表单”,“从属表单”打开时,自动选择当前的活动顶层表单作为其“主表单”,当然,如果选择了“在屏幕中”,则这个从属表单自然就以_Screen为其主表单了。

3.“DeskTop”是规定表单在“显示方面的活动范围”的属性。

DeskTop仅对“从属表单”有意义,当从属表单的DeskTop=.f.时,它只能显示在它的“顶层表单”的尺寸之内,当这个顶层表单的尺寸比它的尺寸还小时,它将会被部分地遮住;当从属表单的DeskTop=.t.时,它的活动范围将不受它的顶层表单尺寸的限制,它可以显示在电脑屏幕的任何地方甚至之外。

但不管它的位置离其顶层表单多远,一旦顶层表单最小化了,它会立即顺从地从电脑屏幕上消失。

4.“ShowWindows”是规定表单被执行时的程序动作的属性

分两种情况:

(1)当表单的ShowWindow为“在屏幕中”和“在顶层表单中”时:

a.当WindowType="模式"时,执行表单(DO FORM)后使得表单取得焦点,并且一直到它被关闭,在此期间,它的父窗口对象(可能是_Screen或一个顶层表单)的菜单系统及其所属的子表单都不能用。

就是说,在表单存在期间,它将一直霸占着焦点.

b.当WindowType="无模式"时,表单存在期间不会霸占焦点。

有一个例外,当DeskTop=.t.时,执行它时会使系统菜单失效,而DeskTop=.f.时则不会。

(2)当表单的ShowWindow为“做为顶层表单”时:

表单的WindowType属性不管是有模式还是无模式,都不会霸占焦点。

5.一般情况,用户的应用系统需要一个主表单(主窗口),您可以将_Screen作为这个主窗口,也可以将项目中的某个“顶层表单”做为“主窗口”,很难说那种更好。

但在此笔者建议使用VFP主窗口做为用户系统的主窗口,这样可能会省去一些麻烦,因为VFP的很多工具条窗口被设计成只能开在_Screen中,例如在打印预览工具条等。

程序编译成EXE后,前者启动时先显示VFP主窗口,后者直接显示程序员自己设计的顶层表单。

对于后者,为屏蔽VFP主窗口,一定要在Config.fpw写入Screen=off(Config.fpw应加入到项目中,这样连编后它将被包含进EXE中,这一来可减少提供安装文件的数量,二来也可避免被用户更改)。

另一方面,很多应用系统程序都喜欢有一个漂亮的或曰自以为漂亮的启动封面,然后再进入主控界面。

如果一方面不希望在显示自己的启动封面前有VFP主窗口抢镜头,另一方面又想让VFP主窗口做为程序的主控界面时,解决办法是:

设计一个“顶层表单”做为启动封面,config.fpw中仍须写Screen=off,然后在启动封面展示够了自己的魅力之后,用一句_Screen.Show将_Screen打回原形。

6.ShowWoindow与DeskTop属性仅规定了Form在显示方面的特征,而在“对象”这一更加高级的层面上,“顶层表单”与“从属表单”彼此是平级的,而_Screen虽然在显示方面与“顶层表单”具有相同的地位,但在对象层面却是高一级的家伙,所有表单,不管你是“顶层表单”还是“从属表单”,都是它的子对象,这想起来就叫人糊涂,还是赶紧不想的好。

"为什么我的程序编译后一闪而过?

"这个问题有两种可能性,第一种是程序执行完成并退出,第二种是程序正在执行,但界面被隐藏。

对于第二种情况,可直接按"Ctrl-Alt-Del"键观察到。

造成这两种情况的原因如下:

我们先看下面的一段示例程序,假如下面的示例程序是项目的主程序,并且应用项目以VFP主窗口做为自己的主窗口。

  *环境设置

  DoFormmyScreen&&启动封面表单_

  Screen.Show&&显示VFP主窗口

  DomyMenu.mpr&&安装菜单系统

  RETURN

  为达到在显示启动封面之前不显示VFP主窗口的目的,在Config.fpw中已写Screen=off,当程序执行到DoFormmyScreen这一句时,如果表单myScreen的ShowWindows属性被设为"在屏幕中",则不管是在开发环境还是在编译环境下,程序都将停下来,表单被显示在_Screen中,而_Screen被隐藏了,因此表单跟着也被隐藏了,所以在屏幕上什么也看不见。

这就是第二种情况的产生原因。

为了避免这种错误的出现,必须将myScreen表单的ShowWindow的属性设为"做为顶层表单",这样就可使在_Screen被隐藏的情况下,myScreen仍然可以被显示出来。

但请注意,在此情况下,DoFormmyScreen这句话执行后,程序并不能停下来,而是顺序地执行下去,一直到执行到RETURN后程序退出,这也就是著名的"一闪而过"现象了。

为此必须在程序中包含事件处理命令ReadEvents使程序停下来,如下:

  *环境设置

  DoFormmyScreen&&启动封面表单

  ReadEvents&&开始事件处理:

使启动封面停下来

  _Screen.Show&&显示VFP主窗口

  DomyMenu.mpr&&安装菜单系统

  ReadEvents&&开始事件处理

  RETURN

  程序执行DoFormmyScreen后,将启动封面显示在屏幕上,然后向下执行到ReadEvents开始事件处理,此时启动封面表单必须由用户关闭或由表单事件关闭,否则程序将一直停在ReadEvents这一句上。

不管myScreen表单由谁关闭,在关闭代码中必须包含一句ClearEvents的停止事件处理命令,以便开始执行ReadEvents的下一句指令,顺序执行完成_Screen.Show及DomyMenu.mpr后,用户的主界面就建立完成,同理,此处还需要一个事件处理命令让程序再次停下来,开始菜单系统的命令处理,一般情况,菜单系统中将包含的"退出"项,其中有"ClearEvents"清除事件处理代码,从而停止第二条"ReadEvents"事件处理命令,退出整个系统。

说实话,加了Readevents后能够避免一闪而过的问题其实很简单,主程序是个什么文件?

它就是一个PRG。

普通的PRG文件执行情况是怎么样的?

从头到尾,每一行代码执行下去,然后立即退出。

OK,现在,再想一想,我们想要做的,是怎么样一个程序?

是一个会出现菜单、主窗口,等待我们选择某个功能去执行的程序。

也就是说,程序应该打开菜单、主窗口以后就中途停下来,等待我们操作的程序。

好,现在再想一下,怎么在PRG中间的某个地方让程序停下来进入那么一种状态?

Waitwindow可以做到,不过一按鼠标马上就又继续执行了,要让程序一直等着,即使进行了几个操作也不会退出,就只有用Readevents了。

随便建一个PRG,不用把它设置成主程序,只要这个PRG中间有Readevents,那么程序就会停下来等着,MSDN里面的许多示例就是这么干的。

现在,一闪而过的问题应该清楚了吧?

你的菜单是打开了、主窗口是打开了,但是,因为没有进入这个等待状态,所以,程序马上继续执行到末尾然后退出,菜单、主窗口都马上又被关闭了。

这些,都是一瞬间就执行完的,结果,看起来就是一闪而过。

再看看Clearevents,它的意思,就是从这种等待状态中退出。

许多人把Clearevents误会成一个退出程序的命令。

不对,Clearevents只是退出这种等待状态而已,如果你在它的后面再加上一个Readevents,那么程序就又会进入一种等待状态而不会结束。

由于Clearevents并不是立即退出程序,因此,在Clearevents后面的代码还是会继续执行,比如我们用来关闭数据库、恢复系统环境设置等等的命令之类的,都可以放在Clearevents后面去执行。

发布应用程序

本章要点

应用项目综合实践

应用程序生成器

发布应用程序

13.1应用项目综合实践

学习VFP的最终目的是开发一个数据库应用系统.本章主要介绍开发数据库应用程序的方法和步骤,以及如果把设计好的数据库,表单,报表,菜单等分离的应用系统组件在项目管理器中连编成一个完整的应用程序.

借助VFP开发的系统一般都包括以下几个基本部分:

(1)一个或多个数据库.

(2)用户界面,诸如欢迎屏,输入表单,显示表单,工具栏和菜单等.

(3)事物处理:

如查询,统计和计算等.

(4)输出形式与界面.

(5)主程序:

设置应用程序系统环境和起始点.

13.1应用项目综合实践

一,系统开发基本步骤

1.建立应用程序目录结构

2.用项目管理器组织应用系统

(1)创建或打开已有的项目;

(2)将已经开发好的各个模块或部件通过项目管理器添加到项目中;

(3)在项目管理器中自下而上地调试各个模块.(所谓自下而上是指先高度可以独立运行的模块单元,如一输入表单,一个输出报表.然后再调试运行调用它们的模块单元,如主菜单.

3.加入项目信息

从"项目"菜单下选择"项目信息",或者在项目管理器上右击鼠标,在快捷菜单上选择"项目信息"项,打开"项目信息"对话框,通过"项目"和"文件"选项卡进行相关的设置,设置完成单击确定.

13.1应用项目综合实践

二,连编应用程序

1.设置文件的"排除"与"包含".

将一个项目编译成一个应用程序时,所有项目包含的文件组合为一个单一的应用程序文件.在项目连编之后,那些在项目中标记为"包含"的文件将变为只读文件.如果应用程序中包含需要用户修改的文件,必须将该文件标为"排除".排除文件仍然是应用程序的一部分,但是这些文件没有在应用程序的文件中编译,所以用户可以更新它们.

2.设置主程序

主程序是整个应用程序的入口点,主程序的傻是设置应用程序的起始点,初始化环境,显示初始的用户界面,控制事件循环,当退出应用程序时,恢复原始的开发环境.

项目管理器以黑体显示设置为主程序文件的名称.

13.1应用项目综合实践

方法一:

在项目管理器中选中要设置的主程序文件,从"项目"菜单或快捷菜单中选择"设置主文件"选项.项目管理器将应用程序的主文件自动设置为"包含",在编译完应用程序之后,该文件为只读文件.

方法二:

在"项目信息"的"文件"选项卡中选中要设置的主程序后右击鼠示,在快捷菜单中选择"设置主程序文件",这种情况下,只有把文件设置为"包含"之后才激活"设置主文件"选项.

标记为主文件的文件不能排除.

3.连编项目

连编项目时注意的问题:

(1)连编项目时,会自动把所有的隐式文件包含在项目中.下一次查看项目时,引用的文件会出现在"项目管理器"中.

(2)"项目管理器"解决不了对图文件的引用,需要将这些文件手工添加到项目中.

(3)连编项目也不能自动包含那些用"宏替换"进行引用的文件,也应手工添加并包含这些引用文件.

13.1应用项目综合实践

项目连编的步骤:

(1)选中设置为主程序的文件,单击"连编"按钮,弹出"连编选项"对话框;

(2)在"连编选项"对话框中,选择"重新连编项目";

(3)如果选择了"显示错误"复选框,可以查看错误文件(错误收集在当前目录的一个.err文件中).

(4)如果没有在"连编选项"对话框中选择"重新编译全部文件"复选框,只会重新编译上次连编后修改过的文件.

(5)选择了所需的选项后,单击"确定"按钮.

以上操作等价于命令:

BUILDPROJECT

13.1应用项目综合实践

4.连编应用程序

连编项目获得成功之后,在建立应用程序之前应该试着运行该项目.如果程序运算正确,就可以最终连编成一个应用程序文件了.应用程序文件包括项目中所有"包含"文件,应用程序连编结果有两种形式:

(1)应用程序文件(.app):

需要在VFP中运行.

(2)可执行文件(.exe):

可在Windows下运行.

(1)在"项目管理器"中选择"连编"按钮;

(2)如果在"连编选项"对话框中,选择"连编应用程序"复选框,则生成一个.app文件;若选择"连编可执行文件"复选框,则生成一个.exe文件.

(3)选择所需的其他选项并单击"确定"按钮.

等价命令为:

BUILDAPP……FROM……

BUILDEXE……FROM……

13.1应用项目综合实践

5.连编其他选项

(1)连编COMDLL:

使用项目文件中的类信息创建一个具有.dll文件扩展名的动态链接库.

(2)"版本"按钮:

当选择"连编可执行文件"或"连编COMMDLL"时,激活"版本"按钮,在"版本"对话框中允许指定版本号以及版本类型.

(3)重新生成组件ID:

安装并注册包含在项目中的自动服务程序.只能创建和注册"类"菜单"类信息"对话框中标识为"OLEPublic"的类.(只有当选定"连编可执行文件"或"连编COMDLL",并已经连编包含OLEPublic关键字的程序时该选项才可用.

6.运行应用程序

(1)运行.app应用程序:

在VFP中选择"程序"菜单中的"运行"选项,选择要执行的应用程序;或者在命令窗口输入DO.

(2)运行可执行.exe文件.

生成的.exe应用程序文件既可以在VFP中运行,也可以在Windows中双击该.exe文件的图标运行.

13.1应用项目综合实践

三,主程序设计

1.初始化环境

从当前环境截取环境设置命令的方法:

(1)从工具菜单中选择"选项",按下Shift键同时选择"确定",则可以在"命令"窗口中显示环境的SET命令.

(2)从"命令"窗口中,将命令复制和粘贴到程序中.除了环境以外,在应用程序中通常还需要编写程序代码执行初始化变量,建立默认的路径,打开需要的数据库,表及索引等功能.

2.显示初始的用户界面

3.控制事件循环

控制事件循环的方法是执行READEVENTS命令.在启动了事件循环之后,应用程序将处在所有最后显示的用户界面元素的控制之下,否则应用程序运行后可能显示片刻然后退出.

需要注意的是,在启动事件循环之前建立一个方法退出事件循环.

13.1应用项目综合实践

4.组织主程序文件

以下是一个简单的主程序:

SETDEFAULTTOD:

\学生

SETSAFEOFF

SETCENTURYON

CLEARWINDOWS

CLEARALL

OPENDATABASE学生档案EXCLUSIVE

USE学生

DOFORM启动画画.scx

READEVENTS

SETSYSMENUTODEFA

SETSAFEON

SETCENTURYOFF

CLOSEALL

CLEARALL

CLEARWINDOWS

13.2应用程序生成器

开发者利用应用程序向导能够生成一个项目和一个VFP应用程序框架,然后打开应用程序生成器可以添加已生成的数据库,表,表单和报表等组件.

一,使用应用程序向导

1.使用应用程序向导创建项目和应用程序框架

2.应用程序框架

3.应用程序生成器的功能

二,应用程序生成器

应用程序生成器包括"常规","信息","数据","表单","报表"和"高级"6个选项卡.

(注意每个选项卡下包括的信息,另外,注意不是用应用程序向导创建的项目,在应用程序生成器中只有哪些选项可用)

13.2应用程序生成器

三,使用应用程序生成器

1.应用程序生成器的启动

(1)在项目上右单击,选择快捷菜单上的"生成器"菜单项.

(2)从"工具"菜单中启动"应用程序生成器"

(3)按Alt+F2键.

如果项目不是用"应用程序向导"创建的,由于没有事先建立完整的应用程序框架,启动应用程序生成器只为应用程序创建元表,即只有"数据","表单"和"报表"三个选项卡可用.

2.使用应用程序向导创建项目

新建……项目……

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1