vfp连编中的一些问题

更新时间:2023-07-23 04:52:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

VFP程序连编中的常见问题及解决方案

一、【问】vfp主程序执行重新连编项目时没有错误,可是要联编成exe文件时,会提示连编程序名.app文件时出错,这是为什么?还有我做了一个主界面的表单,可是执行完以后却不能执行以后的程序了,是不是缺少什么命令了?

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

属性 意义 可选值(黑体为默认值) 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属性不管是有模

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

式还是无模式,都不会霸占焦点。

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虽然在显示方面与"顶层表单"具有相同的地位,但在对象层面却是高一级的家伙,所有表单,不管你是"顶层表单"还是"从属表单",都是它的子对象,这想起来就叫人糊涂,还是赶紧不想的好。

7."为什么我的程序编译后一闪而过?" 这个问题有两种可能性,第一种是程序执行完成并退出,第二种是程序正在执行,但界面被隐藏。对于第二种情况,可直接按"Ctrl-Alt-Del"键观察到。造成这两种情况的原因如下: 我们先看下面的一段示例程序,假如下面的示例程序是项目的主程序,并且应用项目以VFP主窗口做为自己的主窗口。

*环境设置

Do Form myScreen &&启动封面表单 _

Screen.Show &&显示VFP主窗口

Do myMenu.mpr &&安装菜单系统

RETURN

为达到在显示启动封面之前不显示VFP主窗口的目的,在Config.fpw中已写Screen=off,当程序执行到Do Form myScreen这一句时,如果表单myScreen的ShowWindows属性被设为"在屏幕中",则不管是在开发环境还是在编译环境下,程序都将停下来,表单被显示在_Screen中,而_Screen被隐藏了,因此表单跟着也被隐藏了,所以在屏幕上什么也看不见。这就是第二种情况的产生原因。为了避免这种错误的出现,必须将myScreen表单的ShowWindow的属性设为"做为顶层表单",这样就可使在_Screen被隐藏的情况下,myScreen仍然可以被显示出来。但请注意,在此情况下,Do Form myScreen这句话执行后,程序并不能停下来,而是顺序地执行下去,一直到执行到RETURN后程序退出,这也就是著名的"一闪而过"现象了。为此必须在程序中包含事件处理命令Read Events使程序停下来,如下: *环境设置

Do Form myScreen &&启动封面表单

Read Events &&开始事件处理:使启动封面停下来

_ Screen.Show &&显示VFP主窗口

Do myMenu.mpr &&安装菜单系统

Read Events &&开始事件处理

RETURN

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

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

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

二、【问】我用VFP做了一个exe程序,可是在别的没有VFP的电脑里能不能运行?有没有高手指点一个办法?如何把这个程序做成一个完整的exe程序?

【答】1、最简单的办法是将项目下的所有数据表文件、数据库文件、cdx文件、.exe文件以及VFP安装目录中的VFP6R.DLL,VFP6RCHS.DLL两个文件复制到一个文件夹里,这样已经完成了打包、并制作成了绿色版的软件,你再拿到没有安装VFP环境的电脑中运行.exe文件试试,发现可以脱离VFP环境运行了。(以上是VFP6.0制作的软件,如果是VFP7.0或8.0等,则将VFP6R.DLL,VFP6RCHS.DLL两个文件作相应替换)。

2、如果你不喜欢这种方式,可以打开VFP程序,在菜单中选择“工具→向导→安装”,接下来的对话框应该都看得懂的。这样制作的软件同样可脱离VFP环境运行。使用前需要在电脑中安装该制作好的软件,也就是在电脑注册表中添加一些信息。与上面的办法不同的是:前者不会在注册表中添加信息,不用了直接删除即可;后者需进入控制面板进行删除你的软件程序;另外后者的个头大,前者的个头小。

制作绿色版软件关于库文件的补充说明:

需要把VFP的运行库文件拷贝到EXE所在目录或系统目录下即可。

VFP6 的运行库:vfp6r.dll、vfp6rchs.dll、 (vfp6run.exe、vfp6r.dll、vfp6renu.dll、 gdiplus.dll ) VFP7 的运行库:vfp7r.dll、vfp7rchs.dll、(gdiplus.dll、msvcr70.dll、vfp7renu.dll ) VFP8 的运行库:vfp8r.dll、vfp8rchs.dll、(gdiplus.dll、msvcr70.dll)

VFP9 的运行库:vfp9r.dll、vfp9rchs.dll、(gdiplus.dll、vfp9t.dll、msvcr71.dll)

在大多情况下VFP6R.DLL,VFP6RCHS.DLL就够了,

在c:\windows\system可以找到这些文件!

一般情况下不需要VEPRUN.EXE。只需 VFP6RCHS.DLL VFP6R.DLL 两个文件. 另外补充一下:

VFP6R.DLL是必选的运行时刻文件(注意与VFP的版本要一致),而VFP6RCHS.DLL是中文版语言支持库(对应英文版支持为VFP6RENU.DLL),而FOXRUN.exe只在个别时候才加上(如程序中需要运行DOS程序而不想让它出现DOS窗口等情形)

三、【问】

*

***

*****

***

*

这个图形怎么用FOR语句编出来哦?

【答】clear

FOR i=-7 TO 7

FOR j=1 TO ABS(i)

??" "

NEXT

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

FOR j=1 TO 15- 2* ABS(i)

??"*"

NEXT

?

NEXT

四、【问】vfp程序连编发布后如何去掉运行窗体后面的foxpro窗口?而且运行后foxpro窗口无法关闭,怎么解决?另外如何控制初始运行窗体的最大化最小化?

【答】1、在主程序加上 _screen.visible=.f. 这一句,就可以不让VFP的窗口显示。

2、运行后VFP的窗口无法关闭?你是指无法退出VFP吧?如果是,在主程里加上一句: on shutdown quit

3、表单有个 windowstar 属性,设置为2是打开时最大化。

五、【问】VFP连编的可执行程序为什么一运行就退出了?

【答】主程序设置错误,在进入主程序的后面加上

read event

e.g.

do main.prg

read event

在退出的程序中加入

clear event

e.g.

proc exit

clear event

六、【问】关于从vfp中“连编可执行文件”时,为什么连编的.exe程序在windows中运行不了呢?连编的.exe文件,点击一闪而过?请问是怎么回事?

【答】第一种情况说明正常,在windows下需要相关的运行库文件,根据不同版本文件数量不一样的,你可以找一下,放在运行目录下

VFP6 的支持库: vfp6r.dll vfp6rchs.dll gdiplus.dll

VFP7的支持库: msvcr70.dll vfp7r.dll vfp7rchs.dll vfp7renu.dll gdiplus.dll

VFP8 的支持库: msvcr70.dll vfp8r.dll vfp8renu.dll gdiplus.dll

EXE一闪而过有两种情况:

1.你的项目主表单若为顶层表单,而它的showwindow属性你却没有设置成2,同时在又写了代码_SCREEN.VISIBLE=.F.。这样的话,双击EXE后什么也看不见,而实际上它已经在运行了。

2.你在主程序或者程序第一次写DO FORM FORM1.SCX 或 DO MAINMENU.MPR后没有写上READ EVENTS这句。缺少了这句,EXE双击后一闪就没了。

【答】SET TALK OFF

SET DELETE ON

SET SAFE OFF

_VFP.VISIBLE=.F.

deactivate window "项目管理器" &&关闭项目管理器

wjgl=left(sys(16),rat("\",sys(16))) &&;确定程序所在的位置

set defa to (wjgl) &&设置当前路径

set path to data &&指明路径

open database wjgl &&打开数据库

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

do form sqlvfp &&运行表单sqlvfp

READ EVENTS

clear events

RETURN

将表单设的showwindow设为“顶层表单”

【答】这个问题有两种可能性,第一种是程序执行完成并退出,第二种是程序正在执行,但界面被隐藏。对于第二种情况,可直接按“Ctrl-Alt-Del”键观察到。造成这两种情况的原因如下:

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

*环境设置

Do Form myScreen &&启动封面表单

_Screen.Show &&显示VFP主窗口

Do myMenu.mpr &&安装菜单系统

RETURN

为达到在显示启动封面之前不显示VFP主窗口的目的,在Config.fpw中已写Screen=off,当程序执行到Do Form myScreen这一句时,如果表单myScreen的ShowWindows属性被设为“在屏幕中”,则不管是在开发环境还是在编译环境下,程序都将停下来,表单被显示在_Screen中,而_Screen被隐藏了,因此表单跟着也被隐藏了,所以在屏幕上什么也看不见。这就是第二种情况的产生原因。为了避免这种错误的出现,必须将myScreen表单的ShowWindow的属性设为“做为顶层表单”,这样就可使在_Screen被隐藏的情况下,myScreen仍然可以被显示出来。但请注意,在此情况下,Do Form myScreen这句话执行后,程序并不能停下来,而是顺序地执行下去,一直到执行到RETURN后程序退出,这也就是著名的“一闪而过”现象了。为此必须在程序中包含事件处理命令Read Events使程序停下来,如下: *环境设置

Do Form myScreen &&启动封面表单

Read Events &&开始事件处理:使启动封面停下来

_Screen.Show &&显示VFP主窗口

Do myMenu.mpr &&安装菜单系统

Read Events &&开始事件处理

RETURN

程序执行Do Form myScreen后,将启动封面显示在屏幕上,然后向下执行到Read Events开始事件处理,此时启动封面表单必须由用户关闭或由表单事件关闭,否则程序将一直停在Read Events这一句上。不管myScreen表单由谁关闭,在关闭代码中必须包含一句Clear Events的停止事件处理命令,以便开始执行Read Events的下一句指令,顺序执行完成_Screen.Show及Do myMenu.mpr后,用户的主界面就建立完成,同理,此处还需要一个事件处理命令让程序再次停下来,开始菜单系统的命令处理,一般情况,菜单系统中将包含的“退出”项,其中有“Clear Events”清除事件处理代码,从而停止第二条“Read Events”事件处理命令,退出整个系统。

七、问:如何生成和发布应用程序?

答:1、设置主文件

当用户运行应用程序时,Visual FoxPro将启动主文件,然后主文件再依次调用所需要的应用程序其他组件。所以,最好的方法是为应用程序建立下列主程序。(注意,如果只是使用一

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

个表单作为主程序,虽然可以将主程序的功能和初始界面集成在一起,但是其连遍的应用程序不能脱离VFP而独立运行。因为其中没有read event命令)

例如,设置主文件为程序文件“主程序”,如图1所示。

操作方法:在“主程序”上单击鼠标右键,选中“设置主文件”菜单项,或先选中“主程序”,单击“项目”菜单,选中“设置主文件”菜单项。

例如,主文件(主程序.prg)代码编写如下:

clear all

set talk off

set default to c:\学生选课系统\ && 设置程序的默认路径

public xh,jsbh,kcbh && xh、jsbh、kcbh分别用于存储输入的学号、教师编号、课程编号

do form 封面 && 调用封面程序

modify window screen title "学生选课管理系统" && 设置主窗口的标题

do 主菜单.mpr && 调用出菜单

read event && 建立时间循环

quit && 退出VFP

2、生成应用程序

当项目各个模块建好后,在项目运行前还必须对它们“连编”。在项目管理器中选择连编按钮,在显示的连编选项对话框中选择连编可执行文件,选择“确定”按钮,弹出另存为对话框,如图2所示。

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

图2应用程序另存为对话框

选择应用程序保存的路径和文件名,选择保存按钮,即可生成应用程序。

3、应用程序的发布和安装

应用程序的发布主要是为了便于用户使用时将程序方便的安装到他的计算机上。

1.发布的准备

首先建立一个发布树(目录),用于存放用户运行该应用程序时所需的全部文件。最好是在VFP目录外建一个专用目录,例如在项目所在目录下创建一个Setup目录,再将需要的文件放进该目录。这些文件包括:

.exe文件

连编时未自动加入项目管理器的文件

设置为排除类型的文件,如数据库表等

运行支持库Vfp6r.dll、特定地区资源文件Vfp6rchs.dll(中文版)或Vfp6renu.dll(英文版)。这些文件都存放在Windows的SYSTEM目录中。

2.创建发布磁盘

VFP提供的“安装向导”可用来创建磁盘并预置磁盘的安装路径。安装向导要求用户指定发布树,指定在硬盘上建立磁盘映象的目录,以及指定应用程序安装时使用的默认目标目录。下面说明安装向导的使用步骤。

选择工具菜单的向导选项的安装命令,屏幕上将出现安装向导对话框(首次安装时),要求用户指定安装向导自用的目录。可以创建目录,也可以使用已有的目录,然后进入安装向导对话框,引导用户逐步操作。

步骤1-定位文件:选择发布树目录,例如c:\学生选课系统\setup。选择“下一步”按钮。 步骤2-指定组件:要求用户指定必须包含的系统文件。可选择“Visual FoxPro运行时刻组件”和“Microsoft Graph 8.0运行时刻”两个复选框,选择“下一步”按钮。

步骤3-磁盘映象:要求用户指定磁盘映象目录和安装磁盘类型。此时可选择磁盘映象目录C:\学生选课系统\setup,并保持“1.44MB 3.5英寸”复选框的选定状态,选择“下一步”按钮。 步骤4-安装选项:要求用户指定安装是所显示的对话框的标题,以及版权声明等内容。可在“安装对话框标题”文本框中输入“学生选课系统”,在“版权信息”文本框中输入“武汉大学计算中心”,选择“下一步”按钮。

步骤5-默认目标目录:要求用户指定默认的文件安装目录和开始菜单中程序管理器组名。此时可以保持系统默认设置。

步骤6-改变文件设置:该对话框中有一个表格,每行显示一个文件,用户可通过更改某列中的某项来改变文件的设置。

vfp 编程结尾的连编可执行文件时过程中很容易出问题。

“文件”列:指定文件名称

“目标目录”列:指定文件安装在计算机上的位置。AppDir表示应用系统所在的目录,WinDir表示Windows所在的目录,WinSysDir表示Windows的系统目录。

“程序管理项”列:选定后将显示“程序组菜单项”对话框,从中可以指定说明、命令行和图标三个属性。本例中可以在说明中输入“学生选课系统”,在命令行中输入“%s\学生选课系统.exe”,其中%s表示应用程序目录。

“ActiveX”列:用于在计算机上注册ActiveX控件。

选择“下一步”按钮。

步骤7-完成:直接选择“完成”按钮,安装向导将生成磁盘映象,然后显示“安装向导磁盘统计信息”窗口。

3.将磁盘映象复制到软盘

经上述操作后,在C:\学生选课系统\setup下产生了磁盘映象目录“DISK144”,其下还有DISK1~DISK6等6个子目录,供用户复制6张一套的发布软盘。

4.应用程序安装

发布软盘DISK1中含有应用程序的安装程序Setup.exe,只要在Windows中运行该程序就可以一步一步的进行应用程序的安装应用。应用程序安装好后,Windows的开始菜单中出现该应用程序的程序组及程序项,供启动应用程序。

八、初始程序在do form 你的主表单 之后要加

read events &&开始响应事务

退出时

clear events && 停止响应事务

本文来源:https://www.bwwdw.com/article/h40m.html

Top