Microsoft Visual FoxPro 现在包含了一些新的编程功能,可以提高开发效率。这些功能包括 Access 和 Assign 方法程序,用于在查询属性值、或试图更改属性值时执行代码;软件现支持更多的图形文件格式、以及新的简化编程任务的语言。另外,还在 Visual FoxPro API 库文件 Foxtools.fll 中添加了很多文件名使用函数。
本章主要内容∶
Visual FoxPro 已得到改进,现支持 Access 和 Assign 方法程序。在查询属性值、或试图更改属性值时,可使用这些用户自定义的方法程序来执行代码。
在查询属性值时,将执行 Access 方法程序中的代码。通常可以通过在一个对象的引用中使用属性、将属性值保存到一个变量中或使用问号 (?) 显示属性的值。
在试图更改属性值时,将执行 Assign 方法程序中的代码。通常可以通过使用 STORE 或 = 命令为属性赋予一个新值。
只有在运行时刻查询或更改属性值,才执行 Access 和 Assign 方法程序。在设计时刻查询或更改属性值,不会执行 Access 和 Assign 方法程序。
注释 由于赋予的属性值将传递到 Assign 方法程序,因此在 Assign 方法程序中必须包含 PARAMETERS 或 LPARAMETERS 语句,以便接收该值。
可以分别创建 Access 和 Assign 方法程序 — 即可以创建一个 Access 方法程序,而不创建 Assign 方法程序;或者创建一个 Assign 方法程序,而不创建 Access 方法程序。
可为那些使用 DEFINE CLASS 语句所创建的属性来创建 Access 和 Assign 方法程序,或使用表单和类设计器交互地为表单或类创建 Access 和 Assign 方法程序。
注释 也可以为 Visual FoxPro 所有固有的属性创建 Access 和 Assign 方法程序。例如,可以为表单的 Left 属性创建 Access 方法程序,以便在查询表单的 Left 属性的时候执行代码;也可以为只读的 Visual FoxPro 固有属性(如,ParentClass 属性)创建 Assign 方法程序,但该方法程序永远也不会执行。
Access 和 Assign 方法程序提供下列优点∶
通过对 DEFINE CLASS 命令、表单和类设计器的改进,可以使用编程和交互方式来创建 Access 和 Assign 方法程序。
DEFINE CLASS 命令添加了两个后缀 _ACCESS 和 _ASSIGN,可用于创建 Access 和 Assign 方法程序。在函数或过程的名称后面添加这些后缀将为属性创建一个 Access 或 Assign 方法程序,且方法程序的名称与函数或过程相同。
例如,下列示例代码使用 DEFINE CLASS 创建了一个名为 MyClass 的自定义类,并为其创建了一个用户定义的属性 MyProperty,然后使用 PROCEDURE 语句为 MyProperty 创建了一个 Access 方法程序。
在查询属性值时,将执行过程中的代码 (WAIT WINDOW 'This is the Access method')。用 PROCEDURE 语句也可以为 MyProperty 创建了一个 Assign 方法程序。在更改属性值时,将执行过程中的代码 (WAIT WINDOW 'This is the Assign method')。
请注意,示例中使用了 LPARAMETERS 语句来接受传递到 Assign 方法程序的值,本示例还演示了如何创建只读属性。
DEFINE CLASS MyClass AS Custom
MyProperty = 100 && A user-defined Property
PROCEDURE MyProperty_ACCESS && Access method
WAIT WINDOW 'This is the Access method ';
+ ' ' + PROGRAM( )
RETURN THIS.MyProperty
ENDPROC
PROCEDURE MyProperty_ASSIGN && Assign method
LPARAMETERS tAssign && Required to accept value
WAIT WINDOW 'This is the Assign method ';
+ ' ' + PROGRAM( )
ENDPROC
ENDDEFINE
下面的示例演示了如何为固有的 Visual FoxPro 属性添加 Assign 方法程序,并对设置的属性进行简单的有效性确认。请注意,本示例只创建了一个 Assign 方法程序,而没有相应的 Access 方法程序。
本例使用 DEFINE CLASS 创建了一个名为 frmMyForm 的 Form 类,用 PROCEDURE 语句创建了一个名为 Left_ASSIGN 的 Assign 方法程序,在为表单的 Left 属性指定值时,将执行 Assign 方法程序中的代码。
如果试图将 Left 属性值改为负值,将显示一条警告信息,Left 属性值保持不变。如果将 Left 属性值改为非负值,Left 属性值将被设置成这个值。
DEFINE CLASS frmMyForm AS Form
PROCEDURE Left_ASSIGN && Assign method
LPARAMETERS tAssign && Required to accept value
DO CASE
CASE tAssign < 0 && Left value negative
WAIT WINDOW 'Value must be greater than 0'
OTHERWISE && Left value not negative
THIS.Left = tAssign
ENDCASE
ENDPROC
ENDDEFINE
有关创建 Access 和 Assign 方法程序的语法的详细内容,请参阅 DEFINE CLASS。
若要在“表单设计器”中创建 Access 或 Assign 方法程序
将显示“新建属性”对话框。
若要在“表单设计器”中为 Visual FoxPro 的原有属性创建 Access 或 Assign 方法程序
将显示“新建方法程序”对话框。
注释 在“表单设计器”中,只能为表单或表单集创建带有 Access 和 Assign 方法程序的属性。如果需要为控件或对象创建带有 Access 和 Assign 方法程序的属性,则可使用类设计器来创建该控件或对象的类。在“类设计器”中,将带有 Access 和 Assign 方法程序的属性添加到控件或对象中,然后在“表单设计器”中将控件或对象添加到表单中。
若要在“类设计器”中为类创建 Access 或 Assign 方法程序
将显示“新建属性”对话框。
有关创建 Access 或 Assign 方法程序的详细内容,请参阅“新建属性”对话框主题。
Visual FoxPro 6.0 中添加一个新的全局的类方法程序,即 THIS_ACCESS。在更改对象成员的值、或查询对象的成员时,将执行 THIS_ACCESS 方法程序中的代码。
THIS_ACCESS 方法程序可通过执行 DEFINE CLASS 命令创建、或通过 .vcx 可视类库的“新建方法程序”或“编辑属性”对话框创建。THIS_ACCESS 方法程序必须返回一个对象引用,否则将产生错误。通常情况下,该方法程序返回 THIS 对象引用。THIS_ACCESS 方法程序还必须包含一个参数,接收被更改或查询的成员的名称。
下列的示例演示了如何在 DEFINE CLASS 命令中创建一个 THIS_ACCESS 方法程序。当示例作为程序运行时,“Caption”将显示两次,第一次是在为 Caption 属性赋值时,第二次是在查询 Caption 属性的值。最后将显示 Caption 的属性的值 ('abc')。
CLEAR
oTempObj = CREATEOBJECT('MyForm') && Instantiate the Form
oTempObj.Caption = 'abc' && Assign a value, triggers THIS_ACCESS
? oTempObj.Caption && Query a value, triggers THIS_ACCESS
DEFINE CLASS MyForm AS Form
PROCEDURE THIS_ACCESS
LPARAMETER cMemberName && Object member name
IF cMemberName = 'caption'
? cMemberName && Display the Object member name
ENDIF
RETURN THIS
ENDPROC
ENDDEFINE
请注意,THIS_ACCESS 并不是要在全局范围内替换 Access 和 Assign 方法程序 - 而只是提供有关被访问或查询的对象成员的信息。与 Access 或 Assign 方法程序不同,THIS_ACCESS 不提供对返回值(返回给特定对象成员)的控制。
下文描述有关 Access 和 Assign 方法程序编程的信息。
默认时,Access 和 Assign 方法程序是被保护的 - 即在创建 Access 或 Assign 方法程序的类外,不能访问或更改 Access 或 Assign 方法程序。
如果在创建 Access 或 Assign 方法程序时包含 HIDDEN 关键字,可防止在类定义以外访问和更改属性。只有类定义中的方法程序才能访问隐藏的属性。虽然类定义的子类可以访问被保护的属性,但只能在类定义中访问隐藏的属性。
注释 如果不包含 HIDDEN 关键字,将创建 Access 和 Assign 方法程序的子类。
在“Visual Foxpro 调试器”窗口的“跟踪”窗口中,可以查看 Access 和 Assign 方法程序中的代码。但不能在“Visual Foxpro 调试器”窗口的“监视”和“局部”窗口中执行 Access 和 Assign 方法程序。
向 Access 和 Assign 方法程序传递数组的方式与标准的 Visual FoxPro 传递过程相同。
如果发出 SET UDFPARMS TO REFERENCE 命令、或在数组名称之前加 @ 前缀,则向 Access 和 Assign 方法程序传递整个数组。如果发出 SET UDFPARMS TO VALUE 命令、或用括号括上数组的名称,则向 Access 和 Assign 方法程序传递数组的第一个元素。有关传递值和数组的详细内容,请参阅 SET UDFPARMS。
ActiveX 控件的固有属性、事件或方法程序不支持 Access 和 Assign 方法程序。但对于包含 ActiveX 控件的 Visual FoxPro OLE 容器,其属性、事件和方法程序支持 Access 和 Assign 方法程序。
对 Access 或 Assign 方法程序执行 ResetToDefault 方法程序,将使 Access 或 Assign 方法程序中的代码成为默认的代码片段,造成继承的代码得不到执行。本技术可用来确保根据方法程序的类型来执行从父类继承的代码。
将下列代码放在一个 Access 方法程序的子类中,以执行父类中的代码∶
RETURN DODEFAULT( )
将下列代码放在一个 Assign 方法程序的子类中,以执行父类中的代码∶
LPARAMETERS vnewval
DODEFAULT(vnewval)
THIS.<property name> = vnewval
将下列代码放在一个 THIS_ACCESS 方法程序的子类中,以执行父类中的代码∶
LPARAMETERS cmember
RETURN DODEFAULT(cmember)
Visual FoxPro 已得到改进,能够支持 GIF (Graphics Interchange Format) 和 JPEG (Joint Photographic Electronic Group) 图形文件格式,这两种格式在 Internet 上应用广泛。
通常,在早期版本的 Visual FoxPro 中,任何支持 .bmp (bitmap) 格式的地方也支持下列图形文件格式。
图形格式 | 文件扩展名 |
Bitmap | .bmp |
Device Independent Bitmap | .dib |
Graphics Interchange Format | .gif |
Joint Photographic Electronic Group | .jpg |
Cursor | .cur |
Animated Cursor | .ani |
Icon | .ico |
注释 在 Visual FoxPro 中,光标、动画光标和图标文件也用作图形文件。例如,对于 Image 控件(图象控件),可以将 Picture 属性指定为一个动画光标文件(但是,图象控件只显示其静态图像)。
Visual FoxPro 中有三个领域支持图形∶语言、控件和对象,以及界面。
下列命令和函数已得到改进,现支持新的图形文件格式。
GETPICT( )
通过在“命令”窗口使用 GETPICT( ) 函数,可以显示“打开图片”对话框,该对话框已得到改进,可快速定位所有 Visual FoxPro 支持的图形文件。“文件类型”下拉式列表现包含下列项。
数据项 | 文件说明 |
所有文件 | *.* |
所有图形文件 | *.bmp, *.dib, *.jpg, *.gif, *.ani, *.cur, *.ico |
Bitmap | *.bmp, *.dib |
Cursor | *.cur |
Animated Cursor | *.ani |
Icon | *.ico |
JPEG | *.jpg |
GIF | *.gif |
选中“预览”复选框可显示当前选中的图形文件,而在早期版本的 Visual FoxPro 中,在选择新的图形文件时,需要选取“预览”按钮。此外,“图片”区的面积也增加了。
CLEAR RESOURCES
使用 Visual FoxPro 的 CLEAR RESOURCES 命令可清除所有缓存的图形文件,包括 .gif 和 .jpg 文件。
下表列出了可将其属性指定为图形文件 Visual FoxPro 的控件和对象。除早期 Visual FoxPro 版本所支持的 .bmp 和 .dib 图形文件外,还可指定 .gif、.jpg、光标、动画光标和图标等图形文件。
控件或对象 | 属性 |
CheckBox 控件(复选框控件) | DisabledPicture DownPicture Picture |
Command Button 容器 | DisabledPicture DownPicture Picture |
Container 对象 | Picture |
Control 对象 | Picture |
Custom 对象 | Picture |
Form 对象 | Picture |
Image 控件(图象控件) | Picture |
OptionButton 控件(选项按钮组控件) | DisabledPicture DownPicture Picture |
Page 对象 | Picture |
_Screen 对象 | Picture |
使用几种 Visual FoxPro 设计器的“打开”对话框可以指定图形文件。下列设计器的“打开”对话框得到改进,可包含新的图形文件格式。
在“属性”窗口中双击一个支持图形文件的属性、或选取属性的对话框按钮,可显示“打开”对话框。
在项目管理器的“全部”和“其他”选项卡中,可以向一个项目添加图形文件。选取“全部”、或“其他”选项卡后,选取“其他文件”项,然后选取“添加”,将显示“添加”对话框,在此可向项目中添加图形文件。
“报表控件”工具栏包含“图片/ActiveX 绑定控件”按钮。单击该按钮,并将鼠标光标拖到报表设计器的一个带区,将显示“报表图片”对话框。选取“文件”对话框按钮将显示“打开”对话框。
Visual FoxPro 中添加了许多新的和改进的语言元素。本节列出的新的语言元素有 Active Documents、项目管理器挂接、OLE 拖放、服务程序语言的改进 和什锦语言。
同时还列出了改进了的语言元素。
此外,Visual FoxPro API 库文件 Foxtools.fll 中有很多文件名使用函数,该库现已添加到 Visual FoxPro 中。因此,不必使用 SET LIBRARY TO FOXTOOLS.FLL 命令来调用 Foxtools 函数,可在 Visual FoxPro 程序中直接调用这些函数。
本节描述 Visual FoxPro 在性能、坚固性和实用性等方面的提高。
新的 Active Documents 语言 | 说明 |
ActiveDoc 对象 | 创建一个 Active Document,可以在诸如 Microsoft Internet Explorer 等 Active Document 容器中将其包容。 |
AlwaysOnBottom Property | 防止其他窗口被表单窗口覆盖。 |
CommandTargetExec 事件 | 在用户单击属于 Active Document 容器的菜单项或工具栏项时发生。 |
CommandTargetQuery 事件 | 在 Active Document 宿主程序需要得知 Active Document 是否支持各种宿主程序菜单项(和/或工具栏命令)时发生,然后宿主程序可以启用或关闭相应的菜单项(和/或工具栏命令)。 |
ContainerRelease 事件 | 在 Active Document 被其宿主程序释放时发生。 |
ContainerReleaseType 属性 | 在 Active Document 被其宿主程序释放时,指明是否在 Visual FoxPro 运行时刻中打开该 Active Document。 |
ContinuousScroll 属性 | 指定是在表单中继续滚动,还是在释放滚动框时滚动。 |
DEFINE PAD 命令 | 支持新的 NEGOTIATE 选项,以指定 Active Document 菜单的标题位置。 |
GETHOST( ) 函数 | 向 Active Document 的容器返回一个对象引用。 |
GoBack 方法程序 | 在 Active Document 宿主程序的历史记录中向后定位。 |
GoFoward 方法程序 | 在 Active Document 宿主程序的历史记录中向前定位。 |
HideDoc 事件 | 在离开 Active Document 时发生。 |
HScrollSmallChange 属性 | 指定单击水平的滚动箭头时,表单在水平方向上的滚动增量。 |
Hyperlink 对象 | 创建 Hyperlink 对象。 |
ISHOSTED( ) 函数 | 返回一个逻辑值,表明 Active Document 容器中是否包容了 Active Document。 |
NavigateTo 方法程序 | 在 Active Document 容器中定位到指定的位置。 |
Run 事件 | 在 Active Document 与其宿主程序和 COM 不再一致,并准备运行用户代码时发生。 |
_RUNACTIVEDOC 系统变量 | 指定一个启动 Active Document 的应用程序。 |
ScrollBars 属性 | 现在对表单可用。如果表单位于 Active Document 中,当 Active Document 容器小于表单时,将自动显示滚动栏。 |
Scrolled 事件 | 现在对表单可用,可用来确定水平或垂直滚动栏是否被单击、或滚动框被移动。 |
SetViewPort 方法程序 | 设置表单的 ViewPortLeft 和 ViewPortTop 属性值。 |
ShowDoc 事件 | 在定位到一个 Active Document 时发生。 |
SYS(4204) - Active Document 的调试 | 在 Visual FoxPro 的调试器中启用或关闭对 Active Documents 的调试支持。 |
ViewPortHeight 属性 | 表单的视口高度。 |
ViewPortLeft 属性 | 视口中可见表单的左坐标。 |
ViewPortTop 属性 | 视口中可见表单的上坐标。 |
ViewPortWidth 属性 | 表单的视口宽度。 |
VScrollSmallChange 属性 | 单击垂直的滚动箭头时,表单在垂直方向的滚动增量。 |
新的项目管理器挂接语言 | 说明 |
ActiveProject 属性 | 包含当前活动项目管理器窗口中的项目对象的一个对象引用。 |
Add 方法程序 | 向项目中添加文件。 |
AddToSCC 方法程序 | 在项目中向源代码管理器添加文件。 |
AfterBuild 事件 | 在项目重新连编、或从项目中创建应用程序文件 (.app)、动态链接库 (.dll) 或可执行文件 (.exe) 时发生。 |
AutoIncrement 属性 | 指定在连编可发布 .exe 或进程内 .dll 时,项目的连编版本是否自动增加。 |
BeforeBuild 事件 | 在项目重新连编、或从项目中创建应用程序文件 (.app)、动态链接库 (.dll) 或可执行文件 (.exe) 时发生。 |
Build 方法程序 | 重新连编项目、或从项目创建应用程序文件 (.app)、动态链接库 (.dll) 或可执行文件 (.exe)。 |
BuildDateTime 属性 | 项目最后连编的日期和时间。 |
CheckIn 方法程序 | 签入对源代码管理器的项目中文件的更改。 |
CheckOut 方法程序 | 签出对源代码管理器的项目中文件的更改,以便对该文件进行更改。 |
CleanUp 方法程序 | 通过删除那些作了删除标记的记录和压缩备注字段,来清理项目中的表。 |
Close 方法程序 | 关闭项目,并且释放该项目的 ProjectHook 和 Project 对象。 |
CLSID 属性 | 包含为项目的服务程序注册的 CLSID (Class Identifier)。 |
CodePage 属性 | 项目中文件的代码页。 |
Count 属性 | 项目、文件或服务程序集合中的项目、文件或服务程序对象的数目。 |
CREATE PROJECT 命令 | 在 Visual FoxPro 6.0 中得到改进。现支持两个新的选项:NOSHOW 和 NOPROJECTHOOK,用于新的项目管理器挂接。 |
Debug 属性 | 指定项目中已编译过的源代码中是否包含调试信息。 |
Description 属性 | 对于文件对象,是文件的说明。而对于服务程序对象,则是服务程序类的说明。 |
Encrypted 属性 | 指定项目中已经编译过的源代码是否加密。 |
Exclude 属性 | 指定从项目连编应用程序文件 (.app)、动态链接库 (.dll) 或可执行文件 (.exe) 时,是否排除某个文件。 |
FileClass 属性 | 表单类(项目中的表单基于该类)的名称。 |
FileClassLibrary 属性 | 类库的名称,表单基于的类包含在该类库中。 |
File 对象 | 提供项目中指定文件的引用。 |
Files Collection | 文件对象的集合。 |
GetLatestVersion 方法程序 | 获得文件的最新版本,该文件所在的项目位于源代码管理器中,并将一个只读版本复制到本地的驱动器上。 |
HomeDir 属性 | 指定项目的主目录。 |
Instancing 属性 | 指定如何对项目中的服务程序进行实例化。 |
Item 方法程序 | 在项目集合中,向指定数据项返回一个对象引用。 |
LastModified 属性 | 项目中文件最后修改的日期和时间。 |
MainClass 属性 | ActiveDoc 类的名称,该类为项目中的主程序。 |
MainFile 属性 | 文件的名称和路径,该文件为项目中的主程序。 |
Modify 方法程序 | 打开项目中的文件,以便在合适的设计器或编辑器中对其进行修改。 |
MODIFY PROJECT 命令 | 在 Visual FoxPro 6.0 中得到改进。现支持两个新的选项:NOSHOW 和 NOPROJECTHOOK,用于新的项目管理器挂接。 |
ProgID 属性 | 在项目中为服务程序的注册的 PROGID (Programmatic Identifier)。 |
Project 对象 | 创建或打开项目时对其进行实例化。 |
ProjectHook 对象 | 在打开项目时对其进行实例化,并对项目事件提供编程访问。 |
ProjectHook 属性 | (为项目)已经实例化的 ProjectHook 对象的对象引用。 |
ProjectHookClass 属性 | 项目默认的 ProjectHook 类。 |
ProjectHookLibrary 属性 | .vcx 可视类库,其中包含了项目默认的 ProjectHook 类。 |
Projects Collection | 项目对象的集合。 |
QueryAddFile 事件 | 在向项目中添加文件之前发生。 |
QueryModifyFile 事件 | 在项目中修改文件之前发生。 |
QueryRemoveFile 事件 | 在从项目中移去文件之前发生。 |
QueryRunFile 事件 | 在项目中运行文件之前发生,或者在项目中预览报表或标签之前发生。 |
Remove 方法程序 | 将文件从它的文件集合或项目中移去。 |
RemoveFromSCC 方法程序 | 将源代码管理器中的项目的文件移去。 |
Run 方法程序 | 运行或预览项目中的文件。 |
SCCProvider 属性 | 项目源代码管理器的名称。 |
SCCStatus 属性 | 包含一个数值,表明项目中文件的源代码控制的状态。 |
Server 对象 | 项目中服务程序的对象引用。 |
Servers Collection | 服务程序对象的集合。 |
ServerClass 属性 | 包含项目中服务程序类的名称。 |
ServerClassLibrary 属性 | 包含类库或程序的名称,类库或程序中包含一个服务程序类。 |
ServerHelpFile 属性 | 类型库的帮助文件,该类型库是为项目中的服务程序类创建的。 |
ServerProject 属性 | 包含服务程序类的项目的名称。 |
SetMain 方法程序 | 设置项目的主文件。 |
Type 属性 | 项目中文件的文件类型。 |
TypeLibCLSID 属性 | 类型库的 CLSID (Class Identifier) 注册,该类型库是为项目中的服务程序类创建的。 |
TypeLibDesc 属性 | 类型库的说明,该类型库是为项目中的服务程序类创建的。 |
TypeLibName 属性 | 类型库的名称,该类型库是为项目中的服务程序类创建的。 |
UndoCheckOut 方法程序 | 放弃对文件的任何更改,并将该文件签回源代码管理器。 |
VersionComments 属性 | 项目的注释。 |
VersionCompany 属性 | 项目的公司名信息。 |
VersionCopyright 属性 | 项目的版权信息。 |
VersionDescription 属性 | 项目的说明。 |
VersionLanguage 属性 | 项目的语言信息。 |
VersionNumber 属性 | 项目的连编编号。 |
VersionProduct 属性 | 项目的产品名信息。 |
VersionTrademarks 属性 | 项目的商标信息。 |
新的 OLE 拖放语言 | 说明 |
ClearData 方法程序 | 从 OLE 拖放的 DataObject 对象中清除所有的数据和数据格式。 |
DataObject 对象 | 数据容器,数据从 OLE 拖动源传输到 OLE 放落目标。 |
GetData 方法程序 | 从 OLE 拖放的 DataObject 对象中获取数据。 |
GetFormat 方法程序 | 确定 OLE 拖放的 DataObject 对象中指定格式的数据是否可用。 |
OLECompleteDrag 事件 | 在数据放落到目标上或取消 OLE 拖放操作时发生。 |
OLEDrag 方法程序 | 启动 OLE 拖放操作。 |
OLEDragDrop 事件 | 在数据放落到目标上、且放落目标的 OLEDropMode 属性设置为 1 - 启用 时发生。 |
OLEDragMode 属性 | 指定如何初始化拖动操作。 |
OLEDragOver 事件 | 在数据拖动过目标上、且放落目标的 OLEDropMode 属性设置为 1 - 启用 时发生。 |
OLEDragPicture 属性 | 在 OLE 拖放操作过程中,指定鼠标光标下显示的图片。可指定的文件类型有 .bmp、.dib、.jpg、.gif、.ani、.cur 和 .ico。 |
OLEDropEffects 属性 | 指定 OLE 放落目标所支持的放落操作类型。 |
OLEDropHasData 属性 | 指定如何管理放落操作。 |
OLEDropMode 属性 | 指定放落目标如何管理 OLE 放落操作。 |
OLEDropTextInsertion 属性 | 在控件的文本框部分,指定是否可以将文本放落在文本框中单词的中间。 |
OLEGiveFeedBack 事件 | 在 OLEDragOver 事件后发生。允许拖动源指定 OLE 拖放操作的类型和可视反馈。 |
OLESetData 事件 | 在放落目标调用 GetData 方法程序、而 OLE 拖放的 DataObject 对象中没有指定格式的数据时,在拖动源上发生。 |
OLEStartDrag 事件 | 在调用 OLEDrag 方法程序时发生。 |
SetData 方法程序 | 将数据放在 OLE 拖放的 DataObject 对象中。 |
SetFormat 方法程序 | 将数据格式放在 OLE 拖放的 DataObject 对象中。 |
新的服务程序语言的改进 | 说明 |
COMARRAY( ) 函数 | 指定向 COM 对象传递数组的方式。 |
COMCLASSINFO( ) 函数 | 返回 COM 对象(例如 Visual FoxPro 自动服务程序)的注册信息。 |
COMRETURNERROR( ) 函数 | 在 COM 异常进程结构中加入信息,COM 客户程序可以利用该信息来确定自动服务错误的来源。 |
CREATEOBJECTEX( ) 函数 | 在远程计算机上创建一个已注册的 COM 对象(如 Visual FoxPro 自动服务程序)的实例。 |
ServerName 属性 | 自动服务程序的完整路径和文件名。 |
StartMode 属性 | 表明如何启动 Visual FoxPro 的实例的数字。 |
SYS(2335) - 无人照管服务程序模式 | 启动或关闭可发布的 Visual FoxPro .exe 自动服务程序的模式状态。 |
SYS(2334) - 自动服务程序的启动 | 返回一个值,表明如何激活 Visual FoxPro 自动服务程序、或一个独立的可执行 (.exe) 应用程序是否在运行。 |
新的什锦语言 | 说明 |
AddProperty 方法程序 | 向对象中添加新属性。 |
AGETFILEVERSION( ) 函数 | 创建一个数组,其中包含文件(如 .exe、.dll 和 .fll 文件,或在 Visual FoxPro 中创建的自动服务程序)的 Microsoft Windows 版本资源信息。 和 Foxtools 中的 GetFileVersion( ) 函数对应。 |
AGETCLASS( ) 函数 | 在“打开”对话框中显示类库,并创建一个包含类库和选中类的名称的数组。 |
ALINES( ) 函数 | 将字符表达式或备注字段中的内容复制到数组中相应的行。 |
AMOUSEOBJ( ) 函数 | 将鼠标光标信息以及对象引用返回给鼠标光标所停放的对象和对象容器。 |
ANETRESOURCES( ) 函数 | 将网络共享或打印机的名称存放在一个数组中,然后返回资源的数量。 |
AVCXCLASSES( ) 函数 | 将类库中类的信息放在一个数组中。 |
DisplayCount 属性 | 指定在 ComboBox 控件(组合框)中的列表区域显示数据项的数目。 |
FILETOSTR( ) 函数 | 将文件中的内容作为字符串返回。 |
_GALLERY 系统变量 | 指定从“工具”菜单中选取“组件管理库”时执行的程序。 |
_GENHTML 系统变量 | 指定 HTML (Hypertext Markup Language) 生成程序,用来创建包含超文本标识语言版本的表单、菜单、报表或表的文本文件。 |
_GETEXPR 系统变量 | 指定在发出 GETEXPR 命令、或显示“表达式生成器”对话框时执行的程序。 |
GridHitTest 方法程序 | 作为输出参数,返回表格控件中与指定的水平 (X) 和垂直 (Y) 坐标相对应的组件。 |
_INCLUDE 系统变量 | 指定默认的头文件,其中包含用户定义的类、表单或表单集。 |
INDEXSEEK( ) 函数 | 在不移动记录光标的情况下,搜索索引表中第一次出现的索引关键字与指定的表达式相匹配的记录。 |
NEWObject( ) 函数 | 从 .vcx 可视类库或程序中直接创建新类或对象。 |
NewObject 方法程序 | 将新类或对象添加到对象中,该对象直接从 .vcx 可视类库或程序中创建。 |
_SAMPLES 系统变量 | Visual FoxPro 示例的安装目录的路径。 |
SET BROWSEIME 命令 | 指定在浏览窗口中定位到文本框时,是否打开“Input Method Editor”。 |
SET STRICTDATE 命令 | 指定不确定的 Date 和 DateTime 常数是否产生错误。 |
STRTOFILE( ) 函数 | 将字符串的内容写进文件。 |
SYS(3055) - FOR 和 WHERE 子句的复杂程度 | 在支持 FOR 和 WHERE 子句的命令和函数中,设置 FOR 和 WHERE 子句的复杂程度。 |
SYS(3056) - 读取注册设置 | 使 Visual FoxPro 重新读取其的注册设置,并使用当前的注册设置进行更新。 |
TitleBar 属性 | 指定在表单的顶部是否显示标题栏。 |
VARTYPE( ) 函数 | 返回表达式的数据类型。 |
改进了的语言元素 | 说明 |
= 操作符 | 在 Visual FoxPro 6.0 中用来确定两个对象引用是否为相同的对象。 |
ALTER TABLE - SQL 命令 | 对于 ADD PRIMARY KEY 和 ADD FOREIGN KEY 子句,支持新的 FOR 子句。使用 FOR 子句可以创建已过滤的主索引和外部索引。 |
APPEND FROM 命令 | 支持新的 XL8 选项,以便从 Microsoft Excel 97 工作表中导入数据;以及新的 CSV 选项,以便从值是用逗号分隔的文件中导入数据。 |
Century 属性 | 现在的默认值为 1 - 开。日期的世纪部分显示在文本框中,以提供对 2000 年的兼容。 |
CheckBox 控件(复选框控件) | 现支持 ReadOnly 属性。 |
Column 对象 | 现支持 Comment 和 Tag 属性和 SaveAsClass 方法程序。 |
COMPILE DATABASE 命令 | COMPILE DATABASE 现在可以压缩数据库的 .dct 备注文件中的备注字段,以从备注文件中删除那些没有使用的空间。 |
Container 对象 | 现支持 Tag 属性。 |
Control 对象 | 现支持 Tag 属性。 |
COPY TO 命令 | 支持新的 CSV 选项,可将数据导出为用逗号分隔的文件。 |
CREATE FORM 命令 | 支持新的 AS 子句,可以根据 .vcx 可视类库中的表单或表单集来创建新的表单或表单集。 |
Cursor 对象 | 现支持 Comment 和 Tag 属性、以及 ReadExpression、ReadMethod、SaveAsClass 和 WriteExpression 方法程序。 |
Custom 对象 | 现支持 Tag 属性。 |
DataEnvironment 对象 | 现支持 Comment 和 Tag 属性、以及 ReadExpression、ReadMethod、SaveAsClass 和 WriteExpression 方法程序。 |
DATE( ) 函数 | 现支持可选的数值参数,以创建与 2000 年相兼容的 Date 值。 |
DATETIME( ) 函数 | 现支持可选的数值参数,以创建与 2000 年相兼容的 DateTime 值。 |
DEFINE CLASS 命令 | 支持新的 Access 和 Assign 方法程序,可以在查询或更改属性值时执行代码。 |
FDATE( ) 函数 | 现支持可选的数值参数,用来确定文件的最后修改时间,而不必使用字符处理函数。 |
Form 对象 | 现支持 Scrollbars 属性和 Scrolled 事件。 |
FormSet 对象 | 现支持 Parent 和 Tag 属性。 |
GETDIR( ) 函数 | “选择目录”对话框已扩大,可显示更多的目录信息。 |
GETFILE( ) 函数 | 支持新的 cTitleBarCaption 选项,可在“打开”对话框中指定标题栏的标题。 |
GETFONT( ) 函数 | 指定在“字体”对话框显示时,默认的字体、字体大小和字型。 |
Header 对象 | 现支持 Comment 和 Tag 属性、以及 SaveAsClass 方法程序。 |
HOME( ) 函数 | 用来确定 Visual FoxPro 和 Visual Studio 示例、工具、图形和公共目录。 |
Image 控件(图象控件) | 现支持 ToolTipText 属性。 |
IMPORT 命令 | 支持新的 XL8 选项,以便从 Microsoft Excel 97 工作表中导入数据 |
Label 控件(标签控件) | 现支持 ToolTipText 属性。 |
MODIFY MEMO 命令 | 在已发布的运行时刻应用程序的备注字段编辑窗口中关闭语法着色。 |
OS( ) 函数 | 现支持一个选项,用来确定操作系统是否支持 DBCS(双字节字符集)。 |
Page 对象 | 现支持 Tag 属性和 SaveAsClass 方法程序。 |
PageFrame 控件(页框控件) | 现支持 Tag 属性。 |
PEMSTATUS( ) 函数 | 对于 nAttribute ,PEMSTATUS( ) 支持新的“6”选项,可确定属性、事件或方法程序是否继承对象或类。 |
PROGRAM( ) 函数 | 现支持 -1 作为参数,以确定当前的程序级别。 |
Refresh 方法程序 | 可刷新项目管理器的显示,并支持新的参数以更新项目中文件的源代码控制状态。 |
Relation 对象 | 现支持 Comment 和 Tag 属性、Destroy、Error 和 Init 事件、以及 ReadExpression、ReadMethod 和 WriteExpression 方法程序。 |
REPORT 命令 | 现支持 PREVIEW IN SCREEN 子句,可将预览窗口放在 Visual FoxPro 主窗口中。 |
Separator 对象 | 现支持 Comment 和 Tag 属性、以及 ReadExpression、ReadMethod、SaveAsClass 和 WriteExpression 方法程序。 |
SET BELL | 不再需要波形声音的持续时间。 |
SET('PRINTER') | 支持新的“3”选项,可确定 Visual FoxPro “打印”或“打印设置”对话框中,当前的 Visual FoxPro 默认打印机设置。 |
SET('BELL') | 现可用来确定响铃时播放的波形声音。 |
STRCONV( ) 函数 | 支持新的 nLocaleID 参数,可指定用于转换的 Locale ID。 |
SYS(2333) - ActiveX 双接口支持 | 可用来决定 ActiveX 双接口支持的当前设置。在 Visual FoxPro 5.0 中,ActiveX 双接口支持的默认设置为“Enabled”;而在 Visual FoxPro 6.0 中为“Disabled”。 |
TABLEUPDATE( ) 函数 | 在更新记录时,如果发生除简单的提交错误以外的错误,错误数组的第一个元素将为 -1,然后可用 AERROR( ) 函数确定为什么不能提交更改。 |
ToolBar 对象 | 现支持 Tag 属性和 Release 方法程序。 |
TRANSFORM( ) 函数 | cFormatCodes 格式代码为可选项。如何将其省略,则使用默认的转换。 |
VERSION( ) 函数 | 支持两个新的 nExpression 选项,“4”和“5”,可按易分析的格式返回 Visual FoxPro 的版本号。 |
Foxtools 函数 | 说明 |
下列函数已从 Foxtools 添加到 Visual FoxPro 6.0 中,现不必执行 SET LIBRARY TO FOXTOOLS 命令,即可使用这些函数。 | 请注意,如果在早期版本中创建的程序、类库、标签或报表中包含下列函数,请对其进行重新编译。 |
ADDBS( ) 函数 | 向路径表达式添加一个反斜杠(如果需要)。 |
AGETFILEVERSION( ) 函数 | 创建一个数组,其中包含文件(如 .exe、.dll 和 .fll 文件,或在 Visual FoxPro 中创建的自动服务程序)的 Microsoft Windows 版本资源信息。 与 Foxtools 中的 GetFileVersion( ) 函数相对应。 |
DEFAULTEXT( ) 函数 | 如果文件没有扩展名,则返回带有新扩展名的文件名。 |
DRIVETYPE( ) 函数 | 返回指定驱动器的类型。 |
FORCEEXT( ) 函数 | 返回一个字符串,旧的文件扩展名已由新的扩展名代替。 |
FORCEPATH( ) 函数 | 返回一个文件名,用新的路径名替换旧的路径名。 |
JUSTDRIVE( ) 函数 | 返回完整路径中的驱动器盘符。 |
JUSTEXT( ) 函数 | 返回完整路径中的(三字母)扩展名。 |
JUSTFNAME( ) 函数 | 返回完整路径和文件名中的文件名部分。 |
JUSTPATH( ) 函数 | 返回完整路径和文件名中的路径部分。 |
JUSTSTEM( ) 函数 | 返回完整路径和文件名中的主干名部分(扩展名前面的文件名)。 |
在 Visual FoxPro 6.0 中,字符连接的性能有了极大的提高。字符连接通常可用来创建 Web 页,如下列代码所示∶
cMyString = cMyString + <html tags>
cMyString = cMyString + <more html tags>
cMyString = cMyString + <even more html tags>
另外,对象创建和实例化性能也提高了许多,通常较早期版本提高了 10 倍或更多。
Visual FoxPro 6.0 可以截取表单上 ActiveX 控件的 General Protection Faults (GPFs) 或在 Visual FoxPro 中实例化的 COM 对象的 General Protection Faults (GPFs)。ActiveX 控件或 COM 对象的 GPF 现被认为是可捕捉的 Visual FoxPro 错误(错误 1440 - OLE 对象可能已被破坏)。
可以在 Windows 注册表中指定 Visual FoxPro 编辑器注释字符串。方法是:使用 Windows Registry Editor (RegEdit),打开 Visual FoxPro 6.0 的 Options 文件夹,在该文件夹上单击鼠标右键。选取“新建”,然后选取“串值”并键入“EditorCommandtring”作为新的字符串值;在该字符串值上单击鼠标右键,然后选取“修改”并键入编辑器注释字符串(如果注册表中没有该注册项时,*!* 为默认值)。
现在,即可在表单代码窗口中访问“表单”菜单。此外,即使在表单代码窗口中,也可以使用 CTRL+E 键盘快捷键运行表单。
Visual FoxPro 6.0 已得到改进,可提供对 2000 年日期的更好的支持。本节描述一些 Visual FoxPro 的改进,使用这些改进可以更容易地创建与 2000 年日期相兼容的应用程序。
Visual FoxPro 5.0 的文档声称,在不带附加参数的情况下发出 SET CENTURY TO 命令,则将世纪设置成当前世纪。这只在二十世纪是正确的,因为不管当前世纪是什么,世纪值都设置为 19。而在 Visual FoxPro 6.0 中,SET CENTURY TO 命令会将世纪值设置为当前世纪。此外,在新的数据工作期,SET CENTURY TO 的值将被初始化为当前世纪。
另外,在 Visual FoxPro 6.0 中,SET CENTURY 的 ROLLOVER 默认值已更改为当前年份的最后两个数字加 50 年。也就是说,如果当前是 1998 年,nYear 是 48,48 即 2048 (1998 + 50) 的最后两个数字。在 Visual FoxPro 5.0 中,这个默认值为 0。
详细内容,请参阅 SET CENTURY。
通常情况下,对 Date 和 DateTime 常数或表达式进行编译或估算时,是根据 SET DATE 和 SET CENTURY 的当前设置进行对其解释的。这意味着,由于日期常数编译时间的不同、以及在编译时起作用的日期设置的不同,日期常数可能被估算成不同的值,因此很多日期常数是不确定的。
例如,日期常数 {10/11/12} 是 1912 年 10 月 11 日、2012 年 10 月 11 日、1912 年 11 月 10 日、1910 年 11 月 12 日,还是 2010 年 11 月 12 日?
这完全取决于 SET DATE 和 SET CENTURY TO 的当前设置。在编译 Date 和 DateTime 常数或表达式、或在运行时刻估算其值(如在报表和对象的表达式中)时,都会将错误带入现有的 Visual FoxPro 代码。如果将 SET CENTURY 设置设定成 2000 年,而没有指定四位数字的年份时,将会给现有代码带来 2000 年不兼容的错误。
为了避免这种不兼容性,在 Visual FoxPro 6.0 (以及 Visual FoxPro 5.0)中使用了一种严格的日期格式。无论对于何种日期设置,这种严格的日期格式都能计算出相同的 Date 或 DateTime 值。该日期格式是∶
^yyyy-mm-dd[,][hh[:mm[:ss]][a|p]]
(^) 符号表明该格式是严格的日期格式,并按照 YMD 的格式解释 Dates 和 DateTimes。有效的 Date 和 DateTime 分隔符位连字符、正斜杠、句点和空格。
空 Dates 和 DateTimes 被认为是明确的、且总是有效的。有效的空 Date 和 DateTime 格式包括 {}、{--} 和 {--,:}。
有了严格的日期格式,就可以使用多种可用的 Date 和 DateTime 值。在 Visual FoxPro 5.0 中,最小的日期值是 {^0100/1/1},即公元 100 年 1 月 1 日,这是由于小于 100 的年份值都将根据 SET CENTURY 的设置被四舍五入为最近的世纪值。
在 Visual FoxPro 6.0 中,最小的日期值是 {^0001-01-01},即公元 1 年 1 月 1 日。在 Visual FoxPro 6.0 中,最大的日期值是 {^9999-12-31},即公元 9999 年 12 月 31 日。
严格格式的 Date 或 DateTime 总是符合 Western 日历的(注意,在 Visual FoxPro 5.0 中与此不同)。
在 Visual FoxPro 6.0 中,一个新命令,SET STRICTDATE 可用来增强日期常数和日期字符串的 2000 年兼容性。
SET STRICTDATE TO 0
将 STRICTDATE 设置为 0 意味着不进行严格日期格式的检查。这与 Visual FoxPro 5.0 兼容的。运行时刻 Visual FoxPro 和 ODBC 驱动程序的默认设置为 0。如果 STRICTDATE 设置为 0,无效的 Date 和 DateTimes 将作为空日期。
SET STRICTDATE TO 1
将 STRICTDATE 设置为 1,意味着要求所有 Date 和 DateTime 常数都符合严格的日期格式。不论是在编译、运行时刻或在一个交互的 Visual FoxPro 工作期,任何不符合严格格式的 Date 或 DateTime 常数(或被估算为无效值)都将生成一个错误。交互的 Visual FoxPro 工作期的默认设置为 1。
SET STRICTDATE TO 2
与将 STRICTDATE 设置为 1 相同,但如果 CTOD( ) 和 CTOT( ) 函数出现在代码中,将产生编译错误(错误 2033 -CTOD 和 CTOT 会产生不正确的结果)。
由于 CTOD( ) 和 CTOT( ) 的返回值需要使用 SET DATE 和 SET CENTURY 的设置来解释函数中所包含的日期字符串,因此易于出现与 2000 年不兼容的错误。请使用带有可选的数值参数的 DATE( ) 和 DATETIME( ) 创建 Date 和 DateTime 常数和表达式。
这个设置最适合在调试时使用,用来捕捉可能包含 2000 年兼容性错误的代码。
Visual FoxPro 6.0 中添加了下列新的错误,并当 SET STRICTDATE 设置为 1 或 2 时,发生这些错误。
当 Date 或 DateTime 不符合严格格式时,将发生该错误。下面的情况会产生这种错误:
这个错误发生的原因与错误 2032 相同,但是 CTOD( ) 和 CTOT( ) 也可能造成日期的不兼容或不明确。请使用 DATE( ) 或 DATETIME( ) 函数。
Date 或 DateTime 值不符合有效的 Date 或 DateTime 格式、或超出有效的 Date 或 DateTime 范围。
当 SET STRICTDATE 被设置为 0 时,无效的 Date 和 DateTime 常数将被估算为空的 Date 或 DateTime。而当 SET STRICTDATE 被设置为 1 或 2 时,无效的常数将产生这个错误,例如 {^2000-02-31}(2 月 31 日)或者 {^2000-01-01,25:00}(25 点)。
无效 Dates 和 DateTimes 的示例如下∶
Date 或 DateTime 常数包含 Date 和 DateTime 常数不支持的字符。
当 SET STRICTDATE 被设置为 0 时,包含非法字符的 Date 或 DateTime 常数将被估算为空的 Date 或 DateTime。而当 SET STRICTDATE 被设置为 1 或 2 时,包含非法字符的 Date 或 DateTime 常数将产生这个错误。
请注意,StrictDateEntry 属性不受 SET STRICTDATE 设置的影响。在 Visual FoxPro 6.0 中,StrictDateEntry 属性保持不变。
“选项”对话框的“常规”选项卡包含一个“2000 年兼容性”下拉列表,用于指定 SET STRICTDATE 的设置。与所有其他“选项”对话框的项目相同,这里设置的值是为当前 Visual FoxPro 工作期设置的,选取“设置为默认值”按钮,则将该设置保存在 Windows 注册表中,以后的 Visual FoxPro 工作期都可使用。
DATE( ) 和 DATETIME( ) 函数现支持可选的数值参数,可用来创建与 2000 年兼容的 Date 或 DateTime 值。对这些函数的加强,为创建 Date 和 DateTime 值提供了一种更优越的方法;因此不再需要使用字符进程函数来创建 Date 和 DateTime 值。
FDATE( ) 函数现支持可选的数值参数,可用来确定文件的最后修改日期,而无须使用字符进程函数。例如,在早期版本的 Visual FoxPro 中,需要编写如下代码,来确定 Visual FoxPro 源文件的最后修改日期∶
tLastModified = CTOT(DTOC(FDATE('Foxuser.dbf')) + ' ' ;
+ FTIME('Foxuser.dbf')
现在,这些代码现在可以替换为∶
tLastModified = FDATE('Foxuser.dbf', 1)
在 Visual FoxPro 6.0 中,Century 属性的默认设置为 1 - 开。日期的世纪部分显示在一个文本框中。在早期版本的 Visual FoxPro 中,其默认值是 2 - 设定世纪,该设置确定是否显示日期的世纪部分。