Visual FoxPro 帮助目录

	使用Visual FoxPro 关于程序设计和使用 Visual FoxPro 的提示和技术
	语言参考 命令、函数、操作符、对象、属性、事件和方法
	技术支持 错误信息、系统容量和升级、配置应用程序的信息
	界面参考 菜单、对话框、窗口、设计器、向导、生成器和工具栏
	专业级参考 开发和发布客户/服务器应用程序的专业工具


OLE 示例

请参阅

使用 Visual FoxPro 可以向应用程序中添加 OLE 对象。OLE 对象包括 OLE 控制（.OCX 文件）和其他应用程序（例如，Word and Excel）中的可插入的 OLE 对象。

OLE 控制示例

OLE 自动化示例


请参阅

OLE 控制示例

OLE 自动化示例

示例文件


实用程序

请参阅

Visual FoxPro 提供以下工具以提高应用程序的开发速度。

ADDLABEL.APP

BUILDAPP.PRG

CPZERO.PRG

GENDBC.PRG


请参阅

ADDLABEL.APP

BUILDAPP.PRG

CPZERO.PRG

GENDBC.PRG

示例文件


打印文档的更新

请参阅

在文档打印完成之后，又做了如下更改，并把更改添加在帮助文件中。要更新打印文档，可以转到下表给出的主题中进行打印，然后把它们加到相应的手册中。

要获得如下信息	请参阅对文档的更改
使用 Visual FoxPro	用户指南
在 Visual FoxPro 中进行程序设计	开发指南
安装和配置 Visual FoxPro	安装指南
开发和发布客户/服务器应用程序	专业级功能指南
打印语言的更改	语言参考


请参阅

开发指南中的更改

安装指南中的更改

语言参考中的更改

专业级功能指南中的更改

用户指南中的更改


向导（工具菜单）

请参阅

显示 Visual FoxPro 向导子菜单，列出的向导是一些交互程序，可以帮助快速完成通常的许多任务。

向导子菜单命令

表

打开表向导.

查询

打开向导选取对话框，从中选择并运行 Visual FoxPro 中的一个创建查询或视图的向导，包括：交叉表向导, 图形向导, 本地视图向导, 查询向导, 和远程视图向导.

表单

打开“向导选取”对话框，从中选择并运行 Visual FoxPro 中的一个表单向导，包括：表单向导和一对多表单向导.

报表

打开“向导选取”对话框，从中选择并运行 Visual FoxPro 中的一个报表向导，包括：分组/总计报表向导, 一对多报表向导, 和报表向导.

标签

打开标签向导.

邮件合并

打开邮件合并向导.

数据透视表

打开数据透视表向导.

导入

打开导入向导.

文档

打开文档向导.

安装

打开安装向导.

升迁

打开升迁向导.

全部

打开向导选取对话框, 从中选择并运行 Visual FoxPro 中的任一个向导。


请参阅

交叉表向导

文档向导

表单向导

图形向导

分组/总计报表向导

导入向导

标签向导

本地视图向导

邮件合并向导

一对多表单向导

一对多报表向导

数据透视表向导

查询向导

远程视图向导

报表向导

安装向导

表向导

升迁向导.

使用向导

向导选取对话框

向导选取


语言参考中的更改
对《语言参考》的更改

请参阅

这里的更新是对新增的语言项和其他语言主题的概述。所有这些更改将出现在“帮助”中，而不出现在打印出来的《语言参考》中。如果您想更新您的打印文档，您可以打印这个概述，或者找到每个主题并打印那些对您重要的内容。各项是按字母顺序排列的。

打印的《语言参考》的新主题

如果想打印这些新语言项，您可以找到每个主题，然后从“文件”菜单中选择“打印主题”命令。

�	DISPLAY DLLS 命令

�	FREE TABLE 命令

�	LIST DLLS 命令

�	Object 属性

�	OBJTOCLIENT( ) 函数

�	QueryUnload 事件

�	UIEnable 事件

�	ZOrder 方法

AlwaysOnTop 属性

58-59 页 在“说明”中，将“只读”改为“可读写”。

请参阅 AlwaysOnTop.

Click 事件

150 页 在“说明”中，将第一项改为：

�	用鼠标左键单击复选框、命令按钮、组合框、列表框或选项按钮控制时。

然后将下面的句子加在第一项后面：

�	单击失效的控制，这时发生表单的 Click 事件。

请参阅 Click 事件.

COPY STRUCTURE 命令

180-181 页 在 FileName 参数说明中，将第二段改为：

在 Visual FoxPro 中，新表的 null 值支持和代码页与当前选定表相同。

请参阅 COPY STRUCTURE.

Drag 方法

353-354 页 将“说明”中的第一段改为：

通常，控制 MouseDown 事件过程自动调用 Drag 方法来启动拖动操作。控制的 MouseUp 事件过程自动调用 Drag 方法来结束拖动操作。

请参阅 Drag.


请参阅

打印文档的更改

开发指南的更改

安装指南的更改

专业级功能指南的更改

用户指南的更改


专业级功能指南的更改
对《专业级功能指南》的更改

请参阅

在“文件”菜单中选择“打印标题”命令，您可以打印这个更改概述。这里的更改是按章节、页码和部分组织的。

第四章: 优化客户／服务器性能

74-75 页 在“延迟获取备注”部分后面添加下面部分。

优化数据获取性能

您可以采取下面的建议，设置连接和视图属性，以优化数据获取。连接的 PacketSize 属性对性能的影响最大。另外，您也可以用同步连接来优化获取性能。

对象	属性	设置	附注
Connection	PacketSize	4K 到 12K	为行设置一个较大的值，以便包含更多的数据。
Connection	Asynchronous	(.F.)	除非您想在服务器上执行 SQL 语句时能取消执行，您最好使用同步连接，这样可以提高性能 50%。
View	FetchSize	max	FetchSize 的效果主要取决于获取的结果集的记录大小。 在同步方式下，该参数对性能的影响不是很明显，因此对于 SQL 传递异步 如果减少 FetchSize，当正在获取一个视图时会大大提高响应性能，但会减慢获取速度；如果增加 FetchSize，可以提高视图获取性能。

实际的性能主要取决于您的系统配置和应用程序需要。

这些建议基于运行带有 ODBC 2.10 和 SQL Server Driver 2.05 的 Windows NT 3.5的服务器，以及运行带有 MS SQL Server 4.21、6.0的 Windows NT 3.5 的服务器。

第十一章: 创建库

188-189 页 在“编译和链接库”部分，在“要建立项目设置”过程中，将后面的三步改为：

5.	在“使用运行时刻库”下拉式列表框中，选择“Multithreaded Using DLL”。

6.	单击链接选项卡。

7.	在“对象/库模块”文本框中，添加下面的库：

winapims.lib

8.	选择 OK。

第十二章：将库集成到 Visual FoxPro

195 页 在“Value 结构的字段”部分，添加一行。如下图所示：

数据类型	ev_type	ev_object
字符型	'C'
数值型	'N'
整型	'I'
日期型	'D'
日期时间型	'T'
货币型	'Y'
逻辑型	'L'
备注型	'M'
通用型	'G'
Null	'0'
对象	'O'	对象标识符


请参阅

打印文档的更改

开发指南的更改

安装指南的更改

语言参考的更改

用户指南的更改


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语法约定

使用代码示例

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  Visual FoxPro 环境

  共享访问数据

  输入和输出

  程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  字符函数

  数据转换函数

  日期和时间函数

  数值函数

  数据库

  Visual FoxPro 环境

  共享访问数据

  输入和输出

  程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  处理数据库

  处理字段

  索引

  处理记录

  关系

  处理表

  Visual FoxPro 环境

  共享访问数据

  输入和输出

  程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  Visual FoxPro 环境

  环境

  文件管理

  共享访问数据

  输入和输出

  程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  Visual FoxPro 环境

  共享访问数据

  共享访问数据

  影响数据工作期的命令

  输入和输出

  程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  Visual FoxPro 环境

  共享访问数据

  输入和输出

  格式化数据

  键盘和鼠标输入

  菜单和菜单栏

  打印

  报表和标签

  窗口

  程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  Visual FoxPro 环境

  共享访问数据

  输入和输出

  程序设计

  处理数组

  调试和错误处理

  处理事件

  低级文件函数

  处理内存变量

  面向对象程序设计

  执行程序

  结构化程序设计

  新的、增强的和向后兼容的命令和函数


语言参考
命令、函数、操作符、对象、属性、事件和方法

简介

语言参考 A-Z

类和对象

属性

事件

方法

系统内存变量

命令和函数的分类

  数据类型

  数据库

  Visual FoxPro 环境

  共享访问数据

  输入和输出

  程序设计

  新的、增强的和向后兼容的命令和函数

  新的命令和函数

  增强的命令和函数

  向后兼容的命令和函数


语言参考命令、函数、操作符、对象、属性、事件和方法
语言参考 A-Z

#DEFINE ... #UNDEF 预处理器指令

#IF ... #ENDIF 预处理器指令

#IFDEF | #IFNDEF ... #ENDIF 预处理器指令

#INCLUDE 预处理器指令

:: 作用域操作符

! 命令

$ 操作符

% 操作符

& 命令

&& 命令

* 命令

= 命令

\ | \\ 命令

? | ?? 命令

??? 命令

@ ... BOX 命令

@ ... CLASS 命令

@ ... CLEAR 命令

@ ... EDIT - 编辑框命令

@ ... FILL 命令

@ ... GET - 复选框命令

@ ... GET - 组合框命令

@ ... GET - 命令按钮命令

@ ... GET - 列表框命令

@ ... GET - 选项按钮命令

@ ... GET - 微调命令

@ ... GET - 文本框命令

@ ... GET - 透明按钮命令

@ ... MENU 命令

@ ... PROMPT 命令

@ ... SAY 命令

@ ... SAY - 图片 & OLE 对象命令

@ ... SCROLL 命令

@ ... TO 命令

A

ABS( ) 函数

ACCEPT 命令

ACLASS( ) 函数

ACOPY( ) 函数

ACOS( ) 函数

Activate 事件

ACTIVATE MENU 命令

ACTIVATE POPUP 命令

ACTIVATE SCREEN 命令

ACTIVATE WINDOW 命令

ActivateCell 方法

ActiveColumn 属性

ActiveControl 属性

ActiveForm 属性

ActivePage 属性

ActiveRow 属性

ADATABASES( ) 函数

ADBOBJECTS( ) 函数

ADD CLASS 命令

ADD TABLE 命令

AddColumn 方法

AddItem 方法

AddListItem 方法

AddObject 方法

ADEL( ) 函数

ADIR( ) 函数

AELEMENT( ) 函数

AERROR( ) 函数

AFIELDS( ) 函数

AFONT( ) 函数

AfterCloseTables 事件

AfterDock 事件

AfterRowColChange 事件

AINS( ) 函数

AINSTANCE( ) 函数

ALEN( ) 函数

Alias 属性

ALIAS( ) 函数

Alignment 属性

_ALIGNMENT 系统内存变量

AllowTabs 属性

ALLTRIM( ) 函数

ALTER TABLE - SQL 命令

AlwaysOnTop 属性

AMEMBERS( ) 函数

ANSITOOEM( ) 函数

APPEND 命令

APPEND FROM 命令

APPEND FROM ARRAY 命令

APPEND GENERAL 命令

APPEND MEMO 命令

APPEND PROCEDURES 命令

APRINTERS( ) 函数

ASC( ) 函数

ASCAN( ) 函数

_ASCIICOLS 系统内存变量

_ASCIIROWS 系统内存变量

ASELOBJ( ) 函数

ASIN( ) 函数

ASORT( ) 函数

ASSIST 命令

_ASSIST 系统内存变量

ASUBSCRIPT( ) 函数

AT( ) 函数

ATAN( ) 函数

ATC( ) 函数

ATCLINE( ) 函数

ATLINE( ) 函数

ATN2( ) 函数

AUSED( ) 函数

AutoActivate 属性

AutoCenter 属性

AutoCloseTables 属性

AutoOpenTables 属性

AutoRelease 属性

AutoSize 属性

AVERAGE 命令

B

BackColor, ForeColor 属性

BackStyle 属性

BAR( ) 函数

BARCOUNT( ) 函数

BARPROMPT( ) 函数

BaseClass 属性

_BEAUTIFY 系统内存变量

BeforeDock 事件

BeforeOpenTables 事件

BeforeRowColChange 事件

BEGIN TRANSACTION 命令

BETWEEN( ) 函数

BITAND( ) 函数

BITCLEAR( ) 函数

BITLSHIFT( ) 函数

BITNOT( ) 函数

BITOR( ) 函数

BITRSHIFT( ) 函数

BITSET( ) 函数

BITTEST( ) 函数

BITXOR( ) 函数

BLANK 命令

BOF( ) 函数

BorderColor 属性

BorderStyle 属性

BorderWidth 属性

Bound 属性

BoundColumn 属性

Box 方法

_BOX 系统内存变量

BROWSE 命令

_BROWSER 系统内存变量

BufferMode 属性

BufferModeOverride 属性

BUILD APP 命令

BUILD EXE 命令

BUILD PROJECT 命令

_BUILDER 系统内存变量

ButtonCount 属性

Buttons 属性

C

_CALCMEM 系统内存变量

CALCULATE 命令

_CALCVALUE 系统内存变量

CALL 命令

CANCEL 命令

Cancel 属性

CANDIDATE( ) 函数

CAPSLOCK( ) 函数

Caption 属性

CD | CHDIR 命令

CDOW( ) 函数

CDX( ) 函数

CEILING( ) 函数

CHANGE 命令

复选框控制

ChildAlias 属性

ChildOrder 属性

CHR( ) 函数

CHRSAW( ) 函数

CHRTRAN( ) 函数

Circle 方法

Class 属性

ClassLibrary 属性

CLEAR 命令

CLEAR EVENTS 命令

Clear 方法

Click 事件

ClipControls 属性

_CLIPTEXT 系统内存变量

CloneObject 方法

Closable 属性

CLOSE 命令

CLOSE DATABASES 命令

CLOSE MEMO 命令

CLOSE TABLES 命令

CloseTables 方法

Cls 方法

CMONTH( ) 函数

CNTBAR( ) 函数

CNTPAD( ) 函数

COL( ) 函数

ColorScheme 属性

ColorSource 属性

列对象

ColumnCount 属性

ColumnLines 属性

ColumnOrder 属性

Columns 属性

ColumnWidths 属性

组合框控制

命令按钮控制

命令组控制

Comment 属性

COMPILE 命令

COMPILE DATABASE 命令

COMPILE FORM 命令

COMPOBJ( ) 函数

容器对象

CONTINUE 命令

控制对象

ControlBox 属性

ControlCount 属性

Controls 属性

ControlSource 属性

_CONVERTER 系统内存变量

COPY FILE 命令

COPY INDEXES 命令

COPY MEMO 命令

COPY PROCEDURES 命令

COPY STRUCTURE 命令

COPY STRUCTURE EXTENDED 命令

COPY TAG 命令

COPY TO 命令

COPY TO ARRAY 命令

COS( ) 函数

COUNT 命令

CPCONVERT( ) 函数

CPCURRENT( ) 函数

CPDBF( ) 函数

CREATE 命令

CREATE CLASS 命令

CREATE CLASSLIB 命令

CREATE COLOR SET 命令

CREATE CONNECTION 命令

CREATE CURSOR - SQL 命令

CREATE DATABASE 命令

CREATE FORM 命令

CREATE FROM 命令

CREATE LABEL 命令

CREATE MENU 命令

CREATE PROJECT 命令

CREATE QUERY 命令

CREATE REPORT 命令

CREATE REPORT - 快速报表命令

CREATE SCREEN 命令

CREATE SCREEN - 快速屏幕命令

CREATE SQL VIEW 命令

CREATE TABLE - SQL 命令

CREATE TRIGGER 命令

CREATE VIEW 命令

CREATEOBJECT( ) 函数

CTOD( ) 函数

CTOT( ) 函数

CURDIR( ) 函数

_CUROBJ 系统内存变量

CurrentControl 属性

CurrentX, Current Y 属性

临时表对象

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数

CursorSource 属性

CURVAL( ) 函数

Curvature 属性

自定义对象

D

Database 属性

数据环境对象

DataSession 属性

DataSessionID 属性

DATE( ) 函数

DATETIME( ) 函数

DAY( ) 函数

DBC( ) 函数

DBF( ) 函数

DBGETPROP( ) 函数

DblClick 事件

_DBLCLICK 系统内存变量

DBSETPROP( ) 函数

DBUSED( ) 函数

DDE 函数

DDEAbortTrans( ) 函数

DDEAdvise( ) 函数

DDEEnabled( ) 函数

DDEExecute( ) 函数

DDEInitiate( ) 函数

DDELastError( ) 函数

DDEPoke( ) 函数

DDERequest( ) 函数

DDESetOption( ) 函数

DDESetService( ) 函数

DDESetTopic( ) 函数

DDETerminate( ) 函数

Deactivate 事件

DEACTIVATE MENU 命令

DEACTIVATE POPUP 命令

DEACTIVATE WINDOW 命令

DECLARE 命令

DECLARE - DLL 命令

Default 属性

DEFINE BAR 命令

DEFINE BOX 命令

DEFINE CLASS 命令

DEFINE MENU 命令

DEFINE PAD 命令

DEFINE POPUP 命令

DEFINE WINDOW 命令

DELETE 命令

DELETE - SQL 命令

DELETE CONNECTION 命令

DELETE DATABASE 命令

DELETE FILE 命令

DELETE TAG 命令

DELETE TRIGGER 命令

DELETE VIEW 命令

DeleteColumn 方法

Deleted 事件

DELETED( ) 函数

DeleteMark 属性

DESCENDING( ) 函数

Desktop 属性

Destroy 事件

_DIARYDATE 系统内存变量

DIFFERENCE( ) 函数

DIMENSION 命令

DIR or DIRECTORY 命令

DisabledBackColor, DisabledForeColor 属性

DisabledItemBackColor, DisabledItemForeColor 属性

DisabledPicture 属性

DISKSPACE( ) 函数

DISPLAY 命令

DISPLAY CONNECTIONS 命令

DISPLAY DATABASE 命令

DISPLAY DLLS

DISPLAY FILES 命令

DISPLAY MEMORY 命令

DISPLAY OBJECTS 命令

DISPLAY PROCEDURES 命令

DISPLAY STATUS 命令

DISPLAY STRUCTURE 命令

DISPLAY TABLES 命令

DISPLAY VIEWS 命令

DisplayValue 属性

DMY( ) 函数

DO 命令

DO CASE ... ENDCASE 命令

DO FORM 命令

DO WHILE ... ENDDO 命令

Dock 方法

Docked 属性

DockPosition 属性

DocumentFile 属性

_DOS 系统内存变量

DoScroll 方法

DoVerb 方法

DOW( ) 函数

DownClick 事件

DownPicture 属性

Drag 方法

DragDrop 事件

DragIcon 属性

DragMode 属性

DragOver 事件

Draw 方法

DrawMode 属性

DrawStyle 属性

DrawWidth 属性

DropDown 事件

DTOC( ) 函数

DTOR( ) 函数

DTOS( ) 函数

DTOT( ) 函数

DynamicAlignment 属性

DynamicBackColor, DynamicForeColor 属性

DynamicCurrentControl 属性

DynamicFontBold, DynamicFontItalic, DynamicFontStrikethru, DynamicFontUnderline 属性

DynamicFontName 属性

DynamicFontOutline 属性

DynamicFontShadow 属性

DynamicFontSize 属性

E

EDIT 命令

编辑框控制

EJECT 命令

EJECT PAGE 命令

EMPTY( ) 函数

Enabled 属性

END TRANSACTION 命令

EOF( ) 函数

ERASE 命令

ERROR 命令

Error 事件

ERROR( ) 函数

ErrorMessage 事件

EVALUATE( ) 函数

Exclusive 属性

EXIT 命令

EXP( ) 函数

EXPORT 命令

EXTERNAL 命令

F

FCHSIZE( ) 函数

FCLOSE( ) 函数

FCOUNT( ) 函数

FCREATE( ) 函数

FDATE( ) 函数

FEOF( ) 函数

FERROR( ) 函数

FFLUSH( ) 函数

FGETS( ) 函数

FIELD( ) 函数

FILE( ) 函数

FILER 命令

FillColor 属性

FillStyle 属性

Filter 属性

FILTER( ) 函数

FIND 命令

FirstElement 属性

FKLABEL( ) 函数

FKMAX( ) 函数

FLDLIST( ) 函数

FLOCK( ) 函数

FLOOR( ) 函数

FLUSH 命令

FontBold, FontItalic, FontStrikethru, FontUnderline 属性

FONTMETRIC( ) 函数

FontName 属性

FontOutline 属性

FontShadow 属性

FontSize 属性

FOPEN( ) 函数

FOR ... ENDFOR 命令

FOR( ) 函数

表单对象

Format 属性

FormCount 属性

Forms 属性

表单集对象

FOUND( ) 函数

_FOXDOC 系统内存变量

_FOXGRAPH 系统内存变量

FPUTS( ) 函数

FREAD( ) 函数

FREE TABLE 命令

FSEEK( ) 函数

FSIZE( ) 函数

FTIME( ) 函数

FULLPATH( ) 函数

FUNCTION 命令

FV( ) 函数

FWRITE( ) 函数

G

GATHER 命令

_GENGRAPH 系统内存变量

_GENMENU 系统内存变量

_GENPD 系统内存变量

_GENSCRN 系统内存变量

_GENXTAB 系统内存变量

GETBAR( ) 函数

GETCOLOR( ) 函数

GETCP( ) 函数

GETDIR( ) 函数

GETENV( ) 函数

GETEXPR 命令

GETFILE( ) 函数

GETFLDSTATE( ) 函数

GETFONT( ) 函数

GETNEXTMODIFIED( ) 函数

GETOBJECT( ) 函数

GETPAD( ) 函数

GETPICT( ) 函数

GETPRINTER( ) 函数

GO | GOTO 命令

GOMONTH( ) 函数

GotFocus 事件

表格控制

GridLineColor 属性

GridLines 属性

GridLineWidth 属性

H

HalfHeightCaption 属性

标头对象

HEADER( ) 函数

HeaderHeight 属性

Height 属性

HELP 命令

HelpContextID 属性

HIDE MENU 命令

Hide 方法

HIDE POPUP 命令

HIDE WINDOW 命令

HideSelection 属性

Highlight 属性

HOME( ) 函数

HostName 属性

HOUR( ) 函数

I

Icon 属性

IDXCOLLATE( ) 函数

IF ... ENDIF 命令

IIF( ) 函数

图象控制

IMPORT 命令

Increment 属性

IncrementalSearch 属性

INDBC( ) 函数

_INDENT 系统内存变量

INDEX 命令

IndexToItemID 方法

Init 事件

InitialSelectedAlias 属性

INKEY( ) 函数

INLIST( ) 函数

INPUT 命令

InputMask 属性

INSERT 命令

INSERT - SQL 命令

INSMODE( ) 函数

INT( ) 函数

InteractiveChange 事件

Interval 属性

ISALPHA( ) 函数

ISBLANK( ) 函数

ISCOLOR( ) 函数

ISDIGIT( ) 函数

ISEXCLUSIVE( ) 函数

ISLOWER( ) 函数

ISMOUSE( ) 函数

ISNULL( ) 函数

ISREADONLY( ) 函数

ISUPPER( ) 函数

ItemBackColor, ItemForeColor 属性

ItemData 属性

ItemIDData 属性

ItemIDToIndex 方法

J

JOIN 命令

K

KEY( ) 函数

KEYBOARD 命令

KeyboardHighValue, KeyboardLowValue 属性

KEYMATCH( ) 函数

KeyPress 事件

KeyPreview 属性

L

LABEL 命令

标签控制

LASTKEY( ) 函数

Left 属性

LEFT( ) 函数

LeftColumn 属性

LEN( ) 函数

LIKE( ) 函数

线条控制

Line 方法

LINENO( ) 函数

LineSlant 属性

LinkMaster 属性

LIST 命令

LIST CONNECTIONS 命令

LIST DATABASE 命令

LIST DLLS

LIST OBJECTS 命令

LIST PROCEDURES

List 属性

LIST TABLES 命令

LIST VIEWS 命令

列表框控制

ListCount 属性

ListIndex 属性

ListItem 属性

ListItemID 属性

_LMARGIN 系统内存变量

LOAD 命令

Load 事件

LOCAL 命令

LOCATE 命令

LOCFILE( ) 函数

LOCK( ) 函数

LockScreen 属性

LOG( ) 函数

LOG10( ) 函数

LOOKUP( ) 函数

LostFocus 事件

LOWER( ) 函数

LPARAMETERS 命令

LTRIM( ) 函数

LUPDATE( ) 函数

M

_MAC 系统内存变量

Margin 属性

MAX( ) 函数

MaxButton 属性

MaxHeight 属性

MaxLeft 属性

MaxLength 属性

MaxTop 属性

MaxWidth 属性

MCOL( ) 函数

MD | MKDIR 命令

MDIForm 属性

MDOWN( ) 函数

MDX( ) 函数

MDY( ) 函数

MEMLINES( ) 函数

MEMORY( ) 函数

MemoWindow 属性

MENU 命令

MENU TO 命令

MENU( ) 函数

Message 事件

MESSAGE( ) 函数

MESSAGEBOX( ) 函数

MIN( ) 函数

MinButton 属性

MinHeight 属性

MINUTE( ) 函数

MinWidth 属性

MLINE( ) 函数

_MLINE 系统内存变量

MOD( ) 函数

MODIFY CLASS 命令

MODIFY COMMAND 命令

MODIFY CONNECTION 命令

MODIFY DATABASE 命令

MODIFY FILE 命令

MODIFY FORM 命令

MODIFY GENERAL 命令

MODIFY LABEL 命令

MODIFY MEMO 命令

MODIFY MENU 命令

MODIFY PROCEDURE 命令

MODIFY PROJECT 命令

MODIFY QUERY 命令

MODIFY REPORT 命令

MODIFY SCREEN 命令

MODIFY STRUCTURE 命令

MODIFY VIEW 命令

MODIFY WINDOW 命令

MONTH( ) 函数

MOUSE 命令

MouseDown 事件

MouseMove 事件

MousePointer 属性

MouseUp 事件

Movable 属性

Move 方法

MOVE POPUP 命令

MOVE WINDOW 命令

Moved 事件

MoverBars 属性

MRKBAR( ) 函数

MRKPAD( ) 函数

MROW( ) 函数

MTON( ) 函数

MultiSelect 属性

MWINDOW( ) 函数

N

Name 属性

NDX( ) 函数

NewIndex 属性

NewItemID 属性

NoDataOnLoad 属性

NORMALIZE( ) 函数

NOTE 命令

NTOM( ) 函数

NumberOfElements 属性

NUMLOCK( ) 函数

NVL( ) 函数

O

Object 属性

OBJNUM( ) 函数

OBJTOCLIENT( ) 函数

OBJVAR( ) 函数

OCCURS( ) 函数

OEMTOANSI( ) 函数

OLDVAL( ) 函数

OLE 绑定型控制

OLE 容器控制

OLEClass 属性

OLETypeAllowed 属性

ON APLABOUT 命令

ON BAR 命令

ON ERROR 命令

ON ESCAPE 命令

ON EXIT BAR 命令

ON EXIT MENU 命令

ON EXIT PAD 命令

ON EXIT POPUP 命令

ON KEY 命令

ON KEY = 命令

ON KEY LABEL 命令

ON MACHELP 命令

ON PAD 命令

ON PAGE 命令

ON READERROR 命令

ON SELECTION BAR 命令

ON SELECTION MENU 命令

ON SELECTION PAD 命令

ON SELECTION POPUP 命令

ON SHUTDOWN 命令

ON( ) 函数

OneToMany 属性

OPEN DATABASE 命令

OpenTables 方法

OpenWindow 属性

选项按钮控制

选项组控制

Order 属性

ORDER( ) 函数

OS( ) 函数

P

PACK 命令

PACK DATABASE 命令

PAD( ) 函数

PADL( ) | PADR( ) | PADC( ) 函数

_PADVANCE 系统内存变量

页面对象

PageCount 属性

页框控制

PageHeight 属性

_PAGENO 系统内存变量

PageOrder 属性

Pages 属性

PageWidth 属性

Paint 事件

Panel 属性

PanelLink 属性

PARAMETERS 命令

PARAMETERS( ) 函数

Parent 属性

ParentAlias 属性

ParentClass 属性

Partition 属性

PasswordChar 属性

PAYMENT( ) 函数

_PBPAGE 系统内存变量

PCOL( ) 函数

_PCOLNO 系统内存变量

_PCOPIES 系统内存变量

_PDRIVER 系统内存变量

_PDSETUP 系统内存变量

_PECODE 系统内存变量

_PEJECT 系统内存变量

_PEPAGE 系统内存变量

PI( ) 函数

Picture 属性

PLAY MACRO 命令

_PLENGTH 系统内存变量

_PLINENO 系统内存变量

_PLOFFSET 系统内存变量

Point 方法

POP KEY 命令

POP MENU 命令

POP POPUP 命令

POPUP( ) 函数

_PPITCH 系统内存变量

_PQUALITY 系统内存变量

_PRETEXT 系统内存变量

PRIMARY( ) 函数

Print 方法

PRINTJOB ... ENDPRINTJOB 命令

PRINTSTATUS( ) 函数

PRIVATE 命令

PRMBAR( ) 函数

PRMPAD( ) 函数

PROCEDURE 命令

PROGRAM( ) 函数

ProgrammaticChange 事件

PROMPT( ) 函数

PROPER( ) 函数

PROW( ) 函数

PRTINFO( ) 函数

_PSCODE 系统内存变量

PSet 方法

_PSPACING 系统内存变量

PUBLIC 命令

PUSH KEY 命令

PUSH MENU 命令

PUSH POPUP 命令

PUTFILE( ) 函数

PV( ) 函数

_PWAIT 系统内存变量

Q

QueryUnload 事件

QUIT 命令

R

RAND( ) 函数

RangeHigh 事件

RangeLow 事件

RAT( ) 函数

RATLINE( ) 函数

RD | RMDIR 命令

RDLEVEL( ) 函数

READ 命令

READ EVENTS 命令

READ MENU 命令

ReadActivate 事件

ReadBackColor 属性

ReadCycle 属性

ReadDeactivate 事件

ReadExpression 方法

ReadForeColor 属性

READKEY( ) 函数

ReadLock 属性

ReadMethod 方法

ReadMouse 属性

ReadObject 属性

ReadOnly 属性

ReadSave 属性

ReadShow 事件

ReadTimeout 属性

ReadValid 事件

ReadWhen 事件

RECALL 命令

RECCOUNT( ) 函数

RECNO( ) 函数

RecordMark 属性

RecordSource 属性

RecordSourceType 属性

RECSIZE( ) 函数

Refresh 方法

REFRESH( ) 函数

REGIONAL 命令

REINDEX 命令

RELATION( ) 函数

关系对象

RelationalExpr 属性

RelativeColumn 属性

RelativeRow 属性

RELEASE 命令

RELEASE BAR 命令

RELEASE CLASSLIB 命令

RELEASE LIBRARY 命令

RELEASE MENUS 命令

Release 方法

RELEASE MODULE 命令

RELEASE PAD 命令

RELEASE POPUPS 命令

RELEASE PROCEDURE 命令

RELEASE WINDOWS 命令

ReleaseType 属性

REMOVE CLASS 命令

REMOVE TABLE 命令

RemoveItem 方法

RemoveListItem 方法

RemoveObject 方法

RENAME 命令

RENAME CLASS 命令

RENAME CONNECTION 命令

RENAME TABLE 命令

RENAME VIEW 命令

REPLACE 命令

REPLACE FROM ARRAY 命令

REPLICATE( ) 函数

REPORT 命令

Requery 方法

REQUERY( ) 函数

Reset 方法

Resizable 属性

Resize 事件

RESTORE FROM 命令

RESTORE MACROS 命令

RESTORE SCREEN 命令

RESTORE WINDOW 命令

RESUME 命令

RETRY 命令

RETURN 命令

RGB( ) 函数

RGBSCHEME( ) 函数

RIGHT( ) 函数

RightClick 事件

RLOCK( ) 函数

_RMARGIN 系统内存变量

ROLLBACK 命令

ROUND( ) 函数

ROW( ) 函数

RowHeight 属性

RowSource 属性

RowSourceType 属性

RTOD( ) 函数

RTRIM( ) 函数

RUN 命令

RUNSCRIPT 命令

S

SAVE MACROS 命令

SAVE SCREEN 命令

SAVE TO 命令

SAVE WINDOWS 命令

SaveAs 方法

SaveAsClass 方法

ScaleMode 属性

SCAN ... ENDSCAN 命令

SCATTER 命令

SCHEME( ) 函数

SCOLS( ) 函数

_SCREEN 系统内存变量

SCROLL 命令

ScrollBars 属性

Scrolled 事件

SEC( ) 函数

SECONDS( ) 函数

SEEK 命令

SEEK( ) 函数

SELECT 命令

SELECT - SQL 命令

SELECT( ) 函数

Selected 属性

SelectedBackColor, SelectedForeColor 属性

SelectedID 属性

SelectedItemBackColor, SelectedItemForeColor 属性

SelectOnEntry 属性

SelLength 属性

SelStart 属性

SelText 属性

分隔符对象

SET 命令

SET ALTERNATE 命令

SET ANSI 命令

SET APLABOUT 命令

SET AUTOSAVE 命令

SET BELL 命令

SET BLINK 命令

SET BLOCKSIZE 命令

SET BORDER 命令

SET BRSTATUS 命令

SET CARRY 命令

SET CENTURY 命令

SET CLASSLIB 命令

SET CLEAR 命令

SET CLOCK 命令

SET COLLATE 命令

SET COLOR OF 命令

SET COLOR OF SCHEME 命令

SET COLOR SET 命令

SET COLOR TO 命令

SET COMPATIBLE 命令

SET CONFIRM 命令

SET CONSOLE 命令

SET CPCOMPILE 命令

SET CPDIALOG 命令

SET CURRENCY 命令

SET CURSOR 命令

SET DATABASE 命令

SET DATASESSION 命令

SET DATE 命令

SET DEBUG 命令

SET DECIMALS 命令

SET DEFAULT 命令

SET DELETED 命令

SET DELIMITERS 命令

SET DEVELOPMENT 命令

SET DEVICE 命令

SET DISPLAY 命令

SET DOHISTORY 命令

SET ECHO 命令

SET ESCAPE 命令

SET EXACT 命令

SET EXCLUSIVE 命令

SET FDOW 命令

SET FIELDS 命令

SET FILTER 命令

SET FIXED 命令

SET FORMAT 命令

SET FULLPATH 命令

SET FUNCTION 命令

SET FWEEK 命令

SET HEADINGS 命令

SET HELP 命令

SET HELPFILTER 命令

SET HOURS 命令

SET INDEX 命令

SET INTENSITY 命令

SET KEY 命令

SET KEYCOMP 命令

SET LIBRARY 命令

SET LOCK 命令

SET LOGERRORS 命令

SET MACDESKTOP 命令

SET MACHELP 命令

SET MACKEY 命令

SET MARGIN 命令

SET MARK OF 命令

SET MARK TO 命令

SET MEMOWIDTH 命令

SET MESSAGE 命令

SET MOUSE 命令

SET MULTILOCKS 命令

SET NEAR 命令

SET NOCPTRANS 命令

SET NOTIFY 命令

SET NULL 命令

SET ODOMETER 命令

SET OLEOBJECT

SET OPTIMIZE 命令

SET ORDER 命令

SET PALETTE 命令

SET PATH 命令

SET PDSETUP 命令

SET POINT 命令

SET PRINTER 命令

SET PROCEDURE 命令

SET READBORDER 命令

SET REFRESH 命令

SET RELATION 命令

SET RELATION OFF 命令

SET REPROCESS 命令

SET RESOURCE 命令

SET SAFETY 命令

SET SCOREBOARD 命令

SET SECONDS 命令

SET SEPARATOR 命令

SET SHADOWS 命令

SET SKIP 命令

SET SKIP OF 命令

SET SPACE 命令

SET STATUS 命令

SET STATUS BAR 命令

SET STEP 命令

SET STICKY 命令

SET SYSFORMATS 命令

SET SYSMENU 命令

SET TALK 命令

SET TEXTMERGE 命令

SET TEXTMERGE DELIMITERS 命令

SET TOPIC 命令

SET TOPIC ID 命令

SET TRBETWEEN 命令

SET TYPEAHEAD 命令

SET UDFPARMS 命令

SET UNIQUE 命令

SET VIEW 命令

SET VOLUME 命令

SET WINDOW OF MEMO 命令

SET XCMDFILE 命令

SET( ) 函数

SetAll 方法

SETFLDSTATE( ) 函数

SetFocus 方法

形状控制

_SHELL 系统内存变量

SHOW GET 命令

SHOW GETS 命令

SHOW MENU 命令

Show 方法

SHOW OBJECT 命令

SHOW POPUP 命令

SHOW WINDOW 命令

ShowTips 属性

SIGN( ) 函数

SIN( ) 函数

Sizable 属性

SIZE POPUP 命令

SIZE WINDOW 命令

SKIP 命令

SKPBAR( ) 函数

SKPPAD( ) 函数

SORT 命令

Sorted 属性

SOUNDEX( ) 函数

SPACE( ) 函数

Sparse 属性

SpecialEffect 属性

_SPELLCHK 系统内存变量

微调控制

SpinnerHighValue, SpinnerLowValue 属性

SQL 命令概述

SQLCANCEL( ) 函数

SQLCOLUMNS( ) 函数

SQLCOMMIT( ) 函数

SQLCONNECT( ) 函数

SQLDISCONNECT( ) 函数

SQLEXEC( ) 函数

SQLGETPROP( ) 函数

SQLMORERESULTS( ) 函数

SQLROLLBACK( ) 函数

SQLSETPROP( ) 函数

SQLSTRINGCONNECT( ) 函数

SQLTABLES( ) 函数

SQRT( ) 函数

SROWS( ) 函数

_STARTUP 系统内存变量

StatusBarText 属性

STORE 命令

STR( ) 函数

Stretch 属性

STRTRAN( ) 函数

STUFF( ) 函数

Style 属性

SUBSTR( ) 函数

SUM 命令

SUSPEND 命令

SYS( ) 函数概述

SYS(0) - 网络机器信息

SYS(1) - 儒略 (Julian) 系统日期

SYS(2) - 自午夜开始以秒计的时间

SYS(3) - 合法的文件名

SYS(5) - 默认驱动器

SYS(6) - 当前打印机设备

SYS(7) - 当前格式文件

SYS(9) - Visual FoxPro 系列号

SYS(10) - String from 儒略 (Julian) 日期

SYS(11) - 儒略 (Julian) 日期

SYS(12) - 可用内存的字节数

SYS(13) - 打印机状态

SYS(14) - 索引表达式

SYS(15) - 字符转换

SYS(16) - 执行程序文件名

SYS(17) - 正在使用的处理器

SYS(18) - 当前控制

SYS(20) - 转换德文文本

SYS(21) - 控制索引号

SYS(22) - 控制标识或索引名

SYS(23) - Visual FoxPro 的 EMS 内存用法

SYS(24) - EMS 内存限制

SYS(100) - 控制台设置

SYS(101) - 设备设置

SYS(102) - 打印机设置

SYS(103) - 对话设置

SYS(1001) - Visual FoxPro 内存

SYS(1016) - 用户对象内存使用

SYS(1023) - 启用诊断帮助模式

SYS(1024) - 终止诊断帮助模式

SYS(1037) - 页面设置对话框

SYS(2000) - 文件名通配符匹配

SYS(2001) - SET ... 命令状态

SYS(2002) - 打开或关闭插入点

SYS(2003) - 当前目录或文件夹

SYS(2004) - Visual FoxPro 启动目录或文件夹

SYS(2005) - 当前资源文件

SYS(2006) - 当前图形适配卡

SYS(2007) - 检查求和值

SYS(2008) - 插入点形状

SYS(2009) - 切换插入点形状

SYS(2010) - CONFIG.SYS 文件设置

SYS(2011) - 当前锁定状态

SYS(2012) - 备注字段块大小

SYS(2013) - 系统菜单名称字符串

SYS(2014) - 最小化路径

SYS(2015) - 唯一的过程名

SYS(2016) - SHOW GETS WINDOW 名称

SYS(2017) - 显示启动屏幕

SYS(2018) - 错误信息参数

SYS(2019) - 配置文件的名称和位置

SYS(2020) 函数 - 默认的磁盘空间

SYS(2021) - 筛选索引表达式

SYS(2022) - 磁盘簇（块）大小

SYS(2023) - 临时文件驱动器

SYS(2027) - 平台—特殊路径转换

SYS(2029) - 表类型

SYS(3004) - 返回环境 ID 值

SYS(3005) - 设置环境 ID 值

SYS(3006) - 设置语言和环境 ID 值

SYS(3050) - 设置缓冲内存大小

SYS(3051) - 设置锁定重试间隔

SYS(3052) - 忽略 SET REPROCESS 锁定

SYS(3053) - ODBC 环境句柄

SYSMETRIC( ) 函数

系统内存变量概述

系统菜单名称

T

TabIndex 属性

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数

Tabs 属性

_TABS 系统内存变量

TabStop 属性

TabStretch 属性

Tag 属性

TAG( ) 函数

TAGCOUNT( ) 函数

TAGNO( ) 函数

_TALLY 系统内存变量

TAN( ) 函数

TARGET( ) 函数

TerminateRead 属性

TEXT ... ENDTEXT 命令

_TEXT 系统内存变量

文本框控制

TextHeight 方法

TextWidth 方法

THIS 对象引用

THISFORM 对象引用

THISFORMSET 对象引用

_THROTTLE 系统内存变量

TIME( ) 函数

计时器控制

Timer 事件

工具栏对象

ToolTipText 属性

Top 属性

TopIndex 属性

TopItemID 属性

TOTAL 命令

TRANSFORM( ) 函数

_TRANSPORT 系统内存变量

_TRIGGERLEVEL 系统内存变量

TRIM( ) 函数

TTOC( ) 函数

TTOD( ) 函数

TXNLEVEL( ) 函数

TXTWIDTH( ) 函数

TYPE 命令

TYPE( ) 函数

U

UIEnable 事件

Undock 事件

UNIQUE( ) 函数

_UNIX 系统内存变量

Unload 事件

UNLOCK 命令

UpClick 事件

UPDATE - SQL 命令

UPDATE 命令

UPDATED( ) 函数

UPPER( ) 函数

USE 命令

USED( ) 函数

V

VAL( ) 函数

Valid 事件

VALIDATE DATABASE 命令

Value 属性

VARREAD( ) 函数

VERSION( ) 函数

View 属性

Visible 属性

W

WAIT 命令

WBORDER( ) 函数

WCHILD( ) 函数

WCOLS( ) 函数

WEEK( ) 函数

WEXIST( ) 函数

WFONT( ) 函数

When 事件

Width 属性

WindowList 属性

WindowState 属性

_WINDOWS 系统内存变量

WindowType 属性

WITH ... ENDWITH 命令

_WIZARD 系统内存变量

WLAST( ) 函数

WLCOL( ) 函数

WLROW( ) 函数

WMAXIMUM( ) 函数

WMINIMUM( ) 函数

WONTOP( ) 函数

WordWrap 属性

WOUTPUT( ) 函数

WPARENT( ) 函数

_WRAP 系统内存变量

WREAD( ) 函数

WriteExpression 方法

WriteMethod 方法

WROWS( ) 函数

WTITLE( ) 函数

WVISIBLE( ) 函数

X

Y

YEAR( ) 函数

Z

ZAP 命令

ZOOM WINDOW 命令

ZOrder 方法


语言参考命令、函数、操作符、对象、属性、事件和方法
类和对象

A

B

C

复选框控制

列对象

组合框控制

命令按钮控制

命令组控制

容器对象

控制对象

临时表对象

自定义对象

D

数据环境对象

E

编辑框控制

F

表单对象

表单集对象

G

表格控制

H

标头对象

I

图象控制

J

K

L

标签控制

线条控制

列表框控制

M

N

O

OLE 绑定型控制

OLE 容器控制

选项按钮控制

选项组控制

P

页面对象

页框控制

Q

R

关系对象

S

分隔符对象

形状控制

微调控制

T

文本框控制

THIS 对象引用

THISFORM 对象引用

THISFORMSET 对象引用

计时器控制

工具栏对象

U

V

W

X

Y

Z


语言参考命令、函数、操作符、对象、属性、事件和方法
属性

A

ActiveColumn 属性

ActiveControl 属性

ActiveForm 属性

ActivePage 属性

ActiveRow 属性

Alias 属性

Alignment 属性

AllowTabs 属性

AlwaysOnTop 属性

AutoActivate 属性

AutoCenter 属性

AutoCloseTables 属性

AutoOpenTables 属性

AutoRelease 属性

AutoSize 属性

B

BackColor, ForeColor 属性

BackStyle 属性

BaseClass 属性

BorderColor 属性

BorderStyle 属性

BorderWidth 属性

Bound 属性

BoundColumn 属性

BufferMode 属性

BufferModeOverride 属性

ButtonCount 属性

Buttons 属性

C

Cancel 属性

Caption 属性

ChildAlias 属性

ChildOrder 属性

Class 属性

ClassLibrary 属性

ClipControls 属性

Closable 属性

ColorScheme 属性

ColorSource 属性

ColumnCount 属性

ColumnLines 属性

ColumnOrder 属性

Columns 属性

ColumnWidths 属性

Comment 属性

ControlBox 属性

ControlCount 属性

Controls 属性

ControlSource 属性

CurrentControl 属性

CurrentX, Current Y 属性

CursorSource 属性

Curvature 属性

D

Database 属性

DataSession 属性

DataSessionID 属性

Default 属性

DeleteMark 属性

Desktop 属性

DisabledBackColor, DisabledForeColor 属性

DisabledItemBackColor, DisabledItemForeColor 属性

DisabledPicture 属性

DisplayValue 属性

Docked 属性

DockPosition 属性

DocumentFile 属性

DownPicture 属性

DragIcon 属性

DragMode 属性

DrawMode 属性

DrawStyle 属性

DrawWidth 属性

DynamicAlignment 属性

DynamicBackColor, DynamicForeColor 属性

DynamicCurrentControl 属性

DynamicFontBold, DynamicFontItalic, DynamicFontStrikethru, DynamicFontUnderline 属性

DynamicFontName 属性

DynamicFontOutline 属性

DynamicFontShadow 属性

DynamicFontSize 属性

E

Enabled 属性

Exclusive 属性

F

FillColor 属性

FillStyle 属性

Filter 属性

FirstElement 属性

FontBold, FontItalic, FontStrikethru, FontUnderline 属性

FontName 属性

FontOutline 属性

FontShadow 属性

FontSize 属性

Format 属性

FormCount 属性

Forms 属性

G

GridLineColor 属性

GridLines 属性

GridLineWidth 属性

H

HalfHeightCaption 属性

HeaderHeight 属性

Height 属性

HelpContextID 属性

HideSelection 属性

Highlight 属性

HostName 属性

I

Icon 属性

Increment 属性

IncrementalSearch 属性

InitialSelectedAlias 属性

InputMask 属性

Interval 属性

ItemBackColor, ItemForeColor 属性

ItemData 属性

ItemIDData 属性

J

K

KeyboardHighValue, KeyboardLowValue 属性

KeyPreview 属性

L

Left 属性

LeftColumn 属性

LineSlant 属性

LinkMaster 属性

List 属性

ListCount 属性

ListIndex 属性

ListItem 属性

ListItemID 属性

LockScreen 属性

M

Margin 属性

MaxButton 属性

MaxHeight 属性

MaxLeft 属性

MaxLength 属性

MaxTop 属性

MaxWidth 属性

MDIForm 属性

MemoWindow 属性

MinButton 属性

MinHeight 属性

MinWidth 属性

MousePointer 属性

Movable 属性

MoverBars 属性

MultiSelect 属性

N

Name 属性

NewIndex 属性

NewItemID 属性

NoDataOnLoad 属性

NumberOfElements 属性

O

Object 属性

OLEClass 属性

OLETypeAllowed 属性

OneToMany 属性

OpenWindow 属性

Order 属性

P

PageCount 属性

PageHeight 属性

PageOrder 属性

Pages 属性

PageWidth 属性

Panel 属性

PanelLink 属性

Parent 属性

ParentAlias 属性

ParentClass 属性

Partition 属性

PasswordChar 属性

Picture 属性

Q

R

ReadCycle 属性

ReadLock 属性

ReadMouse 属性

ReadObject 属性

ReadOnly 属性

ReadSave 属性

ReadTimeout 属性

RecordMark 属性

RecordSource 属性

RecordSourceType 属性

RelationalExpr 属性

RelativeColumn 属性

RelativeRow 属性

ReleaseType 属性

Resizable 属性

RowHeight 属性

RowSource 属性

RowSourceType 属性

S

ScaleMode 属性

ScrollBars 属性

Selected 属性

SelectedBackColor, SelectedForeColor 属性

SelectedID 属性

SelectedItemBackColor, SelectedItemForeColor 属性

SelectOnEntry 属性

SelLength 属性

SelStart 属性

SelText 属性

ShowTips 属性

Sizable 属性

Sorted 属性

Sparse 属性

SpecialEffect 属性

SpinnerHighValue, SpinnerLowValue 属性

StatusBarText 属性

Stretch 属性

Style 属性

T

TabIndex 属性

Tabs 属性

TabStop 属性

TabStretch 属性

Tag 属性

TerminateRead 属性

ToolTipText 属性

Top 属性

TopIndex 属性

TopItemID 属性

U

V

Value 属性

View 属性

Visible 属性

W

Width 属性

WindowList 属性

WindowState 属性

WindowType 属性

WordWrap 属性

X

Y

Z


语言参考命令、函数、操作符、对象、属性、事件和方法
事件

A

Activate 事件

AfterCloseTables 事件

AfterDock 事件

AfterRowColChange 事件

B

BeforeDock 事件

BeforeOpenTables 事件

BeforeRowColChange 事件

C

Click 事件

D

DblClick 事件

Deactivate 事件

Deleted 事件

Destroy 事件

DownClick 事件

DragDrop 事件

DragOver 事件

DropDown 事件

E

Error 事件

ErrorMessage 事件

F

G

GotFocus 事件

H

I

Init 事件

InteractiveChange 事件

J

K

KeyPress 事件

L

Load 事件

LostFocus 事件

M

Message 事件

MouseDown 事件

MouseMove 事件

MouseUp 事件

Moved 事件

N

O

P

Paint 事件

ProgrammaticChange 事件

Q

QueryUnload 事件

R

RangeHigh 事件

RangeLow 事件

ReadActivate 事件

ReadDeactivate 事件

ReadShow 事件

ReadValid 事件

ReadWhen 事件

Resize 事件

RightClick 事件

S

Scrolled 事件

T

Timer 事件

U

UIEnable 事件

Undock 事件

Unload 事件

UpClick 事件

V

Valid 事件

W

When 事件

X

Y

Z


语言参考命令、函数、操作符、对象、属性、事件和方法
方法

A

ActivateCell 方法

AddColumn 方法

AddItem 方法

AddListItem 方法

AddObject 方法

B

Box 方法

C

Circle 方法

Clear 方法

CloneObject 方法

CloseTables 方法

Cls 方法

D

DeleteColumn 方法

Dock 方法

DoScroll 方法

DoVerb 方法

Drag 方法

Draw 方法

E

F

G

H

Hide 方法

I

IndexToItemID 方法

ItemIDToIndex 方法

J

K

L

Line 方法

M

Move 方法

N

O

P

Point 方法

Print 方法

PSet 方法

Q

R

ReadExpression 方法

ReadMethod 方法

Refresh 方法

Release 方法

RemoveItem 方法

RemoveListItem 方法

RemoveObject 方法

Requery 方法

Reset 方法

S

SaveAs 方法

SaveAsClass 方法

SetAll 方法

SetFocus 方法

Show 方法

T

TextHeight 方法

TextWidth 方法

U

V

W

WriteExpression 方法

WriteMethod 方法

X

Y

Z

ZOrder 方法


语言参考命令、函数、操作符、对象、属性、事件和方法
系统内存变量

A

_ALIGNMENT

_ASCIICOLS

_ASCIIROWS

_ASSIST

B

_BEAUTIFY

_BOX

_BROWSER

_BUILDER

C

_CALCMEM

_CALCVALUE

_CLIPTEXT

_CONVERTER

_CUROBJ

D

_DBLCLICK

_DIARYDATE

_DOS

E

F

_FOXDOC

_FOXGRAPH

G

_GENGRAPH

_GENMENU

_GENPD

_GENSCRN

_GENXTAB

H

I

_INDENT

J

K

L

_LMARGIN

M

_MAC

_MLINE

N

O

P

_PADVANCE

_PAGENO

_PBPAGE

_PCOLNO

_PCOPIES

_PDRIVER

_PDSETUP

_PECODE

_PEJECT

_PEPAGE

_PLENGTH

_PLINENO

_PLOFFSET

_PPITCH

_PQUALITY

_PRETEXT

_PSCODE

_PSPACING

_PWAIT

Q

R

_RMARGIN

S

_SCREEN

_SHELL

_SPELLCHK

_STARTUP

T

_TABS

_TALLY

_TEXT

_THROTTLE

_TRANSPORT

_TRIGGERLEVEL

U

_UNIX

V

W

_WINDOWS

_WIZARD

_WRAP

X

Y

Z


语言参考命令、函数、操作符、对象、属性、事件和方法
字符函数

以下函数处理字符型数据

$ 操作符

ALLTRIM( ) 函数

ASC( ) 函数

AT( ) 函数

ATC( ) 函数

ATCLINE( ) 函数

ATLINE( ) 函数

BETWEEN( ) 函数

CHR( ) 函数

CHRTRAN( ) 函数

CPCONVERT( ) 函数

CTOD( ) 函数

DIFFERENCE( ) 函数

DTOC( ) 函数

EMPTY( ) 函数

EVALUATE( ) 函数

INLIST( ) 函数

ISALPHA( ) 函数

ISDIGIT( ) 函数

ISLOWER( ) 函数

ISUPPER( ) 函数

LEFT( ) 函数

LEN( ) 函数

LIKE( ) 函数

LOWER( ) 函数

LTRIM( ) 函数

MAX( ) 函数

MIN( ) 函数

NORMALIZE( ) 函数

OCCURS( ) 函数

PADC( ) 函数

PADL( ) 函数

PADR( ) 函数

PROPER( ) 函数

RAT( ) 函数

RATLINE( ) 函数

REPLICATE( ) 函数

RIGHT( ) 函数

RTRIM( ) 函数

SOUNDEX( ) 函数

SPACE( ) 函数

STR( ) 函数

STRTRAN( ) 函数

STUFF( ) 函数

SUBSTR( ) 函数

SYS(10) 函数 - 来自儒略 (Julian) 日期的字符串

SYS(15) 函数 - 字符转换

SYS(2007) 函数 - 检查求和值

TRANSFORM( ) 函数

TRIM( ) 函数

TXTWIDTH( ) 函数

TYPE( ) 函数

UPPER( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
数据转换函数

以下函数将数据从一种类型转换成另一种类型

CHR( ) 函数

CTOD( ) 函数

CURVAL( ) 函数

MTON( ) 函数

NTOM( ) 函数

NVL( ) 函数

SYS(10) 函数 - 来自儒略 (Julian) 日期的字符串

SYS(15) 函数 - 字符转换

TRANSFORM( ) 函数

TTOC( ) 函数

TTOD( ) 函数

VAL( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
日期和时间函数

以下函数产生和处理日期和时间型数据

BETWEEN( ) 函数

CDOW( ) 函数

CMONTH( ) 函数

CTOD( ) 函数

CTOT( ) 函数

DATE( ) 函数

DATETIME( ) 函数

DAY( ) 函数

DMY( ) 函数

DOW( ) 函数

DTOC( ) 函数

DTOS( ) 函数

DTOT( ) 函数

EMPTY( ) 函数

FDATE( ) 函数

FTIME( ) 函数

GOMONTH( ) 函数

HOUR( ) 函数

INLIST( ) 函数

MAX( ) 函数

MDY( ) 函数

MIN( ) 函数

MINUTE( ) 函数

MONTH( ) 函数

SEC( ) 函数

SECONDS( ) 函数

SET HOURS 命令

SET MARK TO 命令

SET SECONDS 命令l

SYS(1) 函数 - 儒略 (Julian) 系统日期

SYS(2) 函数 - 自午夜开始以秒计的时间

SYS(10) 函数 - 来自儒略 (Julian) 日期的字符串

SYS(11) 函数 - 儒略 (Julian) 日期

TIME( ) 函数

TTOC( ) 函数

TTOD( ) 函数

WEEK( ) 函数

YEAR( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
数值函数

以下函数处理和/或返回数值型数据

% 操作符

ABS( ) 函数

ACOS( ) 函数

ASIN( ) 函数

ATAN( ) 函数

ATN2( ) 函数

BETWEEN( ) 函数

BITAND( ) 函数

BITCLEAR( ) 函数

BITLSHIFT( ) 函数

BITNOT( ) 函数

BITOR( ) 函数

BITRSHIFT( ) 函数

BITSET( ) 函数

BITTEST( ) 函数

BITXOR( ) 函数

CALCULATE 命令

CEILING( ) 函数

COS( ) 函数

DTOR( ) 函数

EMPTY( ) 函数

EXP( ) 函数

FLOOR( ) 函数

FV( ) 函数

INT( ) 函数

LOG( ) 函数

LOG10( ) 函数

MAX( ) 函数

MIN( ) 函数

MOD( ) 函数

PAYMENT( ) 函数

PI( ) 函数

PV( ) 函数

RAND( ) 函数

ROUND( ) 函数

RTOD( ) 函数

SET DECIMALS 命令

SIGN( ) 函数

SIN( ) 函数

SQRT( ) 函数

TAN( ) 函数

VAL( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
处理数据库

以下命令和函数用于处理数据库

ADATABASES( ) 函数

ADD TABLE 命令

APPEND PROCEDURES 命令

AUSED( ) 函数

CLOSE TABLES 命令

COMPILE DATABASE 命令

COPY PROCEDURES 命令

CREATE CONNECTION 命令

CREATE DATABASE 命令

CREATE SQL VIEW 命令

CREATE TRIGGER 命令

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数

CURVAL( ) 函数

DATETIME( ) 函数

DBC( ) 函数

DBGETPROP( ) 函数

DBSETPROP( ) 函数

DBUSED( ) 函数

DELETE - SQL 命令

DELETE CONNECTION 命令

DELETE DATABASE 命令

DELETE TRIGGER 命令

DELETE VIEW 命令

DISPLAY CONNECTIONS 命令

DISPLAY DATABASE 命令

DISPLAY PROCEDURES 命令

DISPLAY TABLES 命令

DISPLAY VIEWS 命令

FREE TABLE 命令

GETFLDSTATE( ) 函数

GETNEXTMODIFIED( ) 函数

INDBC( ) 函数

ISEXCLUSIVE( ) 函数

LIST CONNECTIONS 命令

LIST DATABASE 命令

LIST PROCEDURES 命令

LIST TABLES 命令

LIST VIEWS 命令

MODIFY CONNECTION 命令

MODIFY DATABASE 命令

MODIFY PROCEDURE 命令

MODIFY VIEW 命令

OLDVAL( ) 函数

OPEN DATABASE 命令

PACK DATABASE 命令

REFRESH( ) 函数

REMOVE TABLE 命令

RENAME CONNECTION 命令

RENAME TABLE 命令

RENAME VIEW 命令

REQUERY( ) 函数

SET DATABASE 命令

SET DATASESSION 命令

SETFLDSTATE( ) 函数

SQLCANCEL( ) 函数

SQLCOLUMNS( ) 函数

SQLCOMMIT( ) 函数

SQLCONNECT( ) 函数

SQLDISCONNECT( ) 函数

SQLEXEC( ) 函数

SQLGETPROP( ) 函数

SQLMORERESULTS( ) 函数

SQLROLLBACK( ) 函数

SQLSETPROP( ) 函数

SQLSTRINGCONNECT( ) 函数

SQLTABLES( ) 函数

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数

_TRIGGERLEVEL 系统内存变量

VALIDATE DATABASE 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
处理字段

以下命令和函数用于处理表中的字段

AFIELDS( ) 函数

BLANK 命令

DELETED( ) 函数

FCOUNT( ) 函数

FIELD( ) 函数

FLDLIST( ) 函数

FSIZE( ) 函数

GATHER 命令

ISBLANK( ) 函数

LUPDATE( ) 函数

NDX( ) 函数

SCATTER 命令

SET BLOCKSIZE 命令

SET EXACT 命令

SET NOCPTRANS 命令

SET TEXTMERGE 命令

SET TEXTMERGE DELIMITERS 命令

SYS(14) 函数 - 索引表达式


语言参考命令、函数、操作符、对象、属性、事件和方法
索引

以下命令和函数完成对索引文件的操作并返回与索引文件有关的信息

CANDIDATE( ) 函数

CDX( ) 函数

CLOSE 命令

COPY INDEXES 命令

COPY TAG 命令

DESCENDING( ) 函数

DELETE TAG 命令

FOR( ) 函数

IDXCOLLATE( ) 函数

INDEX 命令

KEY( ) 函数

KEYMATCH( ) 函数

MDX( ) 函数

NDX( ) 函数

ORDER( ) 函数

PRIMARY( ) 函数

REINDEX 命令

SET COLLATE 命令

SET INDEX 命令

SET KEY 命令

SET ORDER 命令

SET UNIQUE 命令

SYS(14) 函数 - 索引表达式

SYS(21) 函数 - 控制索引号

SYS(2021) 函数 - 筛选索引表达式

TAG( ) 函数

TAGCOUNT( ) 函数

TAGNO( ) 函数

UNIQUE( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
处理记录

以下命令和函数选择表中的记录或将记录指针置位

APPEND FROM 命令

APPEND MEMO 命令

BLANK 命令

CONTINUE 命令

DELETE - SQL 命令

FILTER( ) 函数

GO/GOTO 命令

INSERT 命令

INSERT - SQL 命令

ISBLANK( ) 函数

KEYMATCH( ) 函数

LOCATE 命令

LOOKUP( ) 函数

REPLACE FROM ARRAY 命令

SEEK 命令

SEEK( ) 函数

SET COLLATE 命令

SET FILTER 命令

SET KEY 命令

SET NEAR 命令

SET RELATION 命令

SKIP 命令

UPDATE - SQL 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
关系

以下命令和函数建立或中断表文件之间的关系

RELATION( ) 函数

SELECT - SQL 命令

SET RELATION 命令

SET RELATION OFF 命令

SET SKIP 命令

TARGET( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
处理表

以下命令和函数创建、处理和监视表文件

ADD TABLE 命令

ALTER TABLE - SQL 命令

APPEND 命令

AUSED( ) 函数

AVERAGE 命令

BEGIN TRANSACTION 命令

BROWSE 命令

CHANGE 命令

CLOSE 命令

CLOSE TABLES 命令

COPY MEMO 命令

COPY STRUCTURE 命令

COPY STRUCTURE EXTENDED 命令

COPY TO 命令

COUNT 命令

CPCURRENT( ) 函数

CPDBF( ) 函数

CREATE 命令

CREATE FROM 命令

CREATE QUERY 命令

CREATE TABLE - SQL 命令

CURVAL( ) 函数

DELETE 命令

DELETE - SQL 命令

DELETED( ) 函数

DISPLAY STRUCTURE 命令

DISPLAY TABLES 命令

EDIT 命令

END TRANSACTION 命令

EXPORT 命令

FLUSH 命令

GETFLDSTATE( ) 函数

GETNEXTMODIFIED( ) 函数

IMPORT 命令

ISEXCLUSIVE( ) 函数

ISREADONLY( ) 函数

LIST TABLES 命令

MEMLINES( ) 函数

MLINE( ) 函数

MODIFY GENERAL 命令

MODIFY MEMO 命令

MODIFY QUERY 命令

MODIFY STRUCTURE 命令

OLDVAL( ) 函数

PACK 命令

RECALL 命令

REFRESH( ) 函数

REMOVE TABLE 命令

REPLACE 命令

REPLACE FROM ARRAY 命令

RENAME TABLE 命令

ROLLBACK 命令

SELECT 命令

SELECT - SQL 命令

SET ANSI 命令

SET AUTOSAVE 命令

SET DATASESSION 命令

SET DELETED 命令

SET FIELDS 命令

SET NULL 命令

SET OLEOBJECT

SET OPTIMIZE 命令

SORT 命令

SUM 命令

SYS(2029) - 表类型

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数

TOTAL 命令

TXNLEVEL( ) 函数

UPDATE 命令

UPDATE - SQL 命令

USE 命令

USED( ) 函数

ZAP 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
环境

以下命令和函数可以管理很大范围的 FoxPro 系统和环境参数

ADIR( ) 函数

ASSIST 命令

_BROWSER 系统内存变量

_BUILDER 系统内存变量

CAPSLOCK( ) 函数

COL( ) 函数

CREATE COLOR SET 命令

CREATE VIEW 命令

DECLARE − DLL 命令

DIR or DIRECTORY 命令

DISKSPACE( ) 函数

DISPLAY DLLS

DISPLAY STATUS 命令

FKLABEL( ) 函数

FKMAX( ) 函数

FONTMETRIC( ) 函数

GETCOLOR( ) 函数

GETCP( ) 函数

GETENV( ) 函数

GETFILE( ) 函数

GETFONT( ) 函数

HOME( ) 函数

HELP 命令

INKEY( ) 函数

INSMODE( ) 函数

ISCOLOR( ) 函数

ISMOUSE( ) 函数

LIST DLLS

LIST STATUS 命令

LOCFILE( ) 函数

MEMORY( ) 函数

MESSAGE( ) 函数

NUMLOCK( ) 函数

OS( ) 函数

PCOL( ) 函数

PROW( ) 函数

PUTFILE( ) 函数

QUIT 命令

READKEY( ) 函数

RGB( ) 函数

ROW( ) 函数

SCHEME( ) 函数

_SCREEN 系统内存变量

SET( ) 函数

SET 命令

SET ANSI 命令

SET BELL 命令

SET BLOCKSIZE 命令

SET CENTURY 命令

SET CLEAR 命令

SET CLOCK 命令

SET CPDIALOG 命令

SET COLOR OF 命令

SET COLOR OF SCHEME 命令

SET COLOR SET 命令

SET COMPATIBLE 命令

SET CURRENCY 命令

SET DATE 命令

SET DEBUG 命令

SET DEFAULT 命令

SET DISPLAY 命令

SET FDOW 命令

SET FIXED 命令

SET FUNCTION 命令

SET FWEEK 命令

SET HELP 命令

SET HELPFILTER 命令

SET INTENSITY 命令

SET KEYCOMP 命令

SET LIBRARY 命令

SET MACHELP

SET MARK TO 命令

SET MOUSE 命令

SET NOTIFY 命令

SET PATH 命令

SET POINT 命令

SET RESOURCE 命令

SET SCOREBOARD 命令

SET SEPARATOR 命令

SET STATUS BAR 命令

SET STICKY 命令

SET SYSFORMATS 命令

SET TALK 命令

SET TEXTMERGE 命令

SET TEXTMERGE DELIMITERS 命令

SET TOPIC 命令

SET TOPIC ID 命令

SET TYPEAHEAD 命令

SET VIEW 命令

SET XCMDFILE 命令

SYS(3) - 合法的文件名

SYS(5) 函数 - 默认驱动器

SYS(6) 函数 - 当前打印机设备

SYS(7) 函数 - 当前格式文件

SYS(9) 函数 - Visual FoxPro 系列号

SYS(12) 函数 - 可用内存的字节数

SYS(16) 函数 - 执行程序文件名

SYS(17) 函数 - 正在使用的处理器

SYS(18) 函数 - 当前控制

SYS(24) 函数 - EMS 内存限制

SYS(100) 函数 - 控制台设置

SYS(101) 函数 - 设备设置

SYS(102) 函数 - 打印机设置

SYS(103) 函数 - 对话设置

SYS(1001) 函数 - Visual FoxPro 内存

SYS(1016) 函数 - 用户对象内存使用

SYS(1023) - 启用诊断帮助模式

SYS(1024) - 终止诊断帮助模式

SYS(2001) 函数 - SET ... 命令状态

SYS(2003) 函数 - 当前目录或文件夹

SYS(2004) 函数 - Visaul FoxPro 启动目录

SYS(2005) 函数 - 当前资源文件

SYS(2006) 函数 - 当前图形适配卡

SYS(2008) 函数 - 插入点形状

SYS(2009) 函数 - 切换插入点形状

SYS(2010) 函数 - CONFIG.SYS 文件设置

SYS(2013) 函数 - 系统菜单名称字符串

SYS(2016) 函数 - SHOW GETS WINDOW 名称

SYS(2017) 函数 - 显示启动屏幕

SYS(2019) 函数 - 配置文件的名称和位置

SYS(2020) 函数 - 默认的磁盘空间

SYS(2022) - 磁盘簇（块）大小

SYS(2023) 函数 - 临时文件驱动器

SYS(2027) - 平台—特殊路径转换

SYS(3004) - 返回环境 ID 值

SYS(3005) - 设置环境 ID 值

SYS(3006) - 设置语言和环境 ID 值

SYS(3050) - 设置缓冲内存大小

SYS(3053) - ODBC 环境句柄

SYSMETRIC( ) 函数

TXTWIDTH( ) 函数

VERSION( ) 函数

WFONT( ) 函数

_WIZARD 系统内存变量


语言参考命令、函数、操作符、对象、属性、事件和方法
文件管理

以下命令和函数管理和处理磁盘文件

ADIR( ) 函数

ASSIST 命令

CD | CHDIR 命令

CLOSE ALL 命令

CLOSE ALTERNATE 命令

CLOSE DATABASES 命令

CLOSE FORMAT 命令

CLOSE INDEXES 命令

CLOSE PROCEDURE 命令

COPY FILE 命令

CREATE VIEW 命令

CURDIR( ) 函数

DELETE FILE 命令

DIR or DIRECTORY 命令

DISPLAY FILES 命令

DISKSPACE( ) 函数

ERASE 命令

FDATE( ) 函数

FTIME( ) 函数

FILE( ) 函数

FILER 命令

FLUSH 命令

FULLPATH( ) 函数

GETFILE( ) 函数

GETPICT( ) 函数

ISNULL( ) 函数

LIST FILES 命令

LOCFILE( ) 函数

MD | MKDIR 命令

MODIFY COMMAND 命令

MODIFY FILE 命令

NVL( ) 函数

OPEN DATABASE 命令

PUTFILE( ) 函数

RD | RMDIR 命令

RENAME 命令

SET ALTERNATE 命令

SET DEFAULT 命令

SET FULLPATH 命令

SET PATH 命令

SET SAFETY 命令

SET VIEW 命令

SET VOLUME 命令

SYS(3) - 合法的文件名

SYS(2000) 函数 - 文件名通配符匹配

SYS(2014) 函数 - 最小化路径

SYS(2027) - 平台—特殊路径转换

TYPE 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
共享访问数据

以下命令和函数允许多用户在网络中共享表中的数据

FLOCK( ) 函数

LOCK( ) 函数

RLOCK( ) 函数

SET EXCLUSIVE 命令

SET LOCK 命令

SET MULTILOCKS 命令

SET REFRESH 命令

SET REPROCESS 命令

SYS(3051) - 设置锁定重试间隔

SYS(3052) - 忽略 SET REPROCESS 锁定

UNLOCK 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
影响数据工作期的命令

以下命令和函数仅影响数据工作期

SET ANSI

SET AUTOSAVE

SET BLOCKSIZE

SET CARRY

SET CENTURY

SET COLLATE

SET CONFIRM

SET CURRENCY

SET DATABASE

SET DATE

SET DECIMALS

SET DELETED

SET DELIMITERS

SET EXACT

SET EXCLUSIVE

SET FIELDS

SET FIXED

SET LOCK

SET MARK TO

SET MEMOWIDTH

SET MULTILOCKS

SET NEAR

SET NULL

SET PATH

SET POINT

SET REFRESH

SET REPROCESS

SET SAFETY

SET SEPARATOR

SET TALK

SET UNIQUE


语言参考命令、函数、操作符、对象、属性、事件和方法
格式化数据

以下命令和函数可以格式化和显示记录、字段、内存变量或数组中的数据。也可以处理一般屏幕和窗口的显示特征。

\ | \\ 命令

? | ?? 命令

@ ... BOX 命令

@ ... CLEAR 命令

@ ... EDIT - 编辑框命令

@ ... FILL 命令

@ ... GET - 复选框命令

@ ... GET - 组合框命令

@ ... GET - 命令按钮命令

@ ... GET - 列表框命令

@ ... GET - 选项按钮命令

@ ... GET - 微调命令

@ ... GET - 文本框命令

@ ... GET - 透明按钮命令

@ ... SAY 命令

@ ... TO 命令

ACTIVATE SCREEN 命令

APPEND 命令

BROWSE 命令

CHANGE 命令

CLEAR 命令

CLEAR READ 命令

CLOSE FORMAT 命令

COL( ) 函数

COMPILE FORM 命令

CREATE FORM 命令

CREATE SCREEN 命令

DISPLAY 命令

EDIT 命令

FUNCTION 命令

INKEY( ) 函数

LIST 命令

MESSAGEBOX( ) 函数

MODIFY FORM 命令

MODIFY SCREEN 命令

OBJNUM( ) 函数

OBJTOCLIENT( ) 函数

OBJVAR( ) 函数

RDLEVEL( ) 函数

READ 命令

READKEY( ) 函数

RESTORE SCREEN 命令

ROW( ) 函数

SAVE SCREEN 命令

SCOLS( ) 函数

SCROLL 命令

SET BLINK 命令

SET CARRY 命令

SET CLEAR 命令

SET COLOR OF 命令

SET COLOR OF SCHEME 命令

SET COLOR SET 命令

SET COLOR TO 命令

SET CONFIRM 命令

SET CONSOLE 命令

SET CURSOR 命令

SET DECIMALS 命令

SET DEVICE 命令

SET FIXED 命令

SET FORMAT 命令

SET HEADINGS 命令

SET MARK TO 命令

SET MEMOWIDTH 命令

SET MESSAGE 命令

SET ODOMETER 命令

SET SPACE 命令

SET TEXTMERGE 命令

SET TEXTMERGE DELIMITERS 命令

SHOW GET 命令

SHOW GETS 命令

SHOW OBJECT 命令

SROWS( ) 函数

SYS(7) 函数 - 当前格式文件

SYS(100) 函数 - 控制台设置

SYS(101) 函数 - 设备设置

SYS(2002) 函数 - 打开或关闭插入点

TEXT ... ENDTEXT 命令

TRANSFORM( ) 函数

UPDATED( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
菜单和菜单栏

以下命令和函数可以开发、显示和激活用户自定义菜单和菜单栏

\ | \\ 命令

ACTIVATE POPUP 命令

BAR( ) 函数

BARPROMPT( ) 函数

CLEAR MENUS 命令

CLEAR POPUPS 命令

CNTBAR( ) 函数

CNTPAD( ) 函数

CREATE MENU 命令

DEACTIVATE MENU 命令

DEACTIVATE POPUP 命令

DEFINE BAR 命令

DEFINE MENU 命令

DEFINE PAD 命令

DEFINE POPUP 命令

GETBAR( ) 函数

GETPAD( ) 函数

HIDE MENU 命令

HIDE POPUP 命令

MODIFY MENU 命令

MOVE POPUP 命令

MRKBAR( ) 函数

MRKPAD( ) 函数

ON BAR 命令

ON EXIT BAR 命令

ON EXIT MENU 命令

ON EXIT PAD 命令

ON EXIT POPUP 命令

ON PAD 命令

ON SELECTION BAR 命令

ON SELECTION MENU 命令

ON SELECTION PAD 命令

ON SELECTION POPUP 命令

PAD( ) 函数

POP MENU 命令

POP POPUP 命令

POPUP( ) 函数

PRMBAR( ) 函数

PRMPAD( ) 函数

PROMPT( ) 函数

PUSH MENU 命令

PUSH POPUP 命令

RELEASE BAR 命令

RELEASE MENUS 命令

RELEASE PAD 命令

RELEASE POPUPS 命令

SET BORDER 命令

SET MARK OF 命令

SET SKIP OF 命令

SIZE POPUP 命令

SKPBAR( ) 函数

SKPPAD( ) 函数

SHOW MENU 命令

SHOW POPUP 命令

SYS(2013) 函数 - 系统菜单名称字符串


语言参考命令、函数、操作符、对象、属性、事件和方法
打印

以下命令和函数可以将记录或内存变量中的数据打印或显示在屏幕、打印机或输出文件中

_ASCIICOLS 系统内存变量

_ASCIIROWS 系统内存变量

\ | \\ 命令

? | ?? 命令

??? 命令

@ ... SAY 命令

APRINTERS( ) 函数

CLOSE ALTERNATE 命令

DEFINE BOX 命令

DISPLAY 命令

EJECT 命令

EJECT PAGE 命令

GETPRINTER( ) 函数

LIST 命令

ON PAGE 命令

PCOL( ) 函数

PRINTJOB ... ENDPRINTJOB 命令

PRINTSTATUS( ) 函数

PROW( ) 函数

PRTINFO( ) 函数

SET MARGIN 命令

SET PDSETUP 命令

SET PRINTER 命令

SYS(6) 函数 - 当前打印机设备

SYS(13) 函数 - 打印机状态

SYS(102) 函数 - 打印机设置

SYS(1037) - 页面设置对话框

TYPE 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
报表和标签

以下命令和函数可以控制输出和创建报表

_ASCIICOLS 系统内存变量

_ASCIIROWS 系统内存变量

\ | \\ 命令

CREATE LABEL 命令

CREATE REPORT 命令

LABEL 命令

MODIFY LABEL 命令

MODIFY REPORT 命令

REPORT 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
键盘和鼠标输入

以下命令和函数可以控制使用键盘和鼠标进行输入

CAPSLOCK( ) 函数

CHRSAW( ) 函数

CLEAR MACROS 命令

CLEAR TYPEAHEAD 命令

INSMODE( ) 函数

KEYBOARD 命令

LASTKEY( ) 函数

MCOL( ) 函数

MDOWN( ) 函数

MOUSE 命令

MROW( ) 函数

NUMLOCK( ) 函数

ON KEY 命令

ON KEY LABEL 命令

PLAY MACRO 命令

POP KEY 命令

PUSH KEY 命令

RESTORE MACROS 命令

SAVE MACROS 命令

SET FUNCTION 命令

SET KEYCOMP 命令

SET MACKEY 命令

SET TYPEAHEAD 命令

SYS(2008) 函数 - 插入点形状

SYS(2009) 函数 - 切换插入点形状


语言参考命令、函数、操作符、对象、属性、事件和方法
窗口

以下命令和函数可以创建、显示和激活用户自定义窗口

ACTIVATE WINDOW 命令

CLEAR WINDOWS 命令

CREATE SCREEN 命令

DEACTIVATE WINDOW 命令

DEFINE WINDOW 命令

HIDE WINDOW 命令

MODIFY SCREEN 命令

MODIFY WINDOW 命令

MOVE WINDOW 命令

RELEASE WINDOWS 命令

RESTORE WINDOW 命令

SAVE WINDOWS 命令

SET BORDER 命令

SET SHADOWS 命令

SET WINDOW OF MEMO 命令

SHOW WINDOW 命令

SIZE WINDOW 命令

SYS(2016) 函数 - SHOW GETS WINDOW 名称

WBORDER( ) 函数

WCHILD( ) 函数

WCOLS( ) 函数

WEXIST( ) 函数

WFONT( ) 函数

WLAST( ) 函数

WLCOL( ) 函数

WLROW( ) 函数

WMAXIMUM( ) 函数

WMINIMUM( ) 函数

WONTOP( ) 函数

WOUTPUT( ) 函数

WPARENT( ) 函数

WREAD( ) 函数

WROWS( ) 函数

WTITLE( ) 函数

WVISIBLE( ) 函数

ZOOM WINDOW 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
处理数组

以下命令和函数可以处理内存变量数组

ACOPY( ) 函数

ADEL( ) 函数

ADIR( ) 函数

AELEMENT( ) 函数

AFIELDS( ) 函数

AINS( ) 函数

ALEN( ) 函数

APPEND FROM ARRAY 命令

ASCAN( ) 函数

ASORT( ) 函数

ASUBSCRIPT( ) 函数

COPY TO ARRAY 命令

DECLARE 命令

DIMENSION 命令

GATHER 命令

SCATTER 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
调试和错误处理

以下命令和函数可以对 Visual FoxPro 程序完成各种调试操作

* 命令

&& 命令

AERROR( ) 函数

CLEAR EVENTS 命令

ERROR 命令

ERROR( ) 函数

EXTERNAL 命令

LINENO( ) 函数

MESSAGE( ) 函数

NOTE 命令

ON ERROR 命令

ON READERROR 命令

ON( ) 函数

PROGRAM( ) 函数

RETRY 命令

SET DEBUG 命令

SET DEVELOPMENT 命令

SET ECHO 命令

SET TALK 命令

SET TRBETWEEN 命令

SYS(16) 函数 - 执行程序文件名

SYS(18) 函数 - 当前控制

SYS(2018) 函数 - 错误信息参数

VARREAD( ) 函数

WAIT 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
处理事件

以下命令和函数可以指定当给定的事件发生时程序产生的动作

ON APLABOUT 命令

ON ERROR 命令

ON ESCAPE 命令

ON KEY 命令

ON KEY LABEL 命令

ON MACHELP 命令

ON PAD 命令

ON SELECTION PAD 命令

ON SELECTION POPUP 命令

ON( ) 函数

READ EVENTS 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
低级文件函数

以下命令和函数可以低级处理文件和通信端口。使用低级文件函数时要非常小心，尤其在处理表文件时更要谨慎。在将这些函数应用于包含重要数据的文件之前，应先将它们试用于示例文件。

FCHSIZE( ) 函数

FCLOSE( ) 函数

FCREATE( ) 函数

FEOF( ) 函数

FERROR( ) 函数

FFLUSH( ) 函数

FGETS( ) 函数

FOPEN( ) 函数

FPUTS( ) 函数

FREAD( ) 函数

FSEEK( ) 函数

FWRITE( ) 函数

HEADER( ) 函数


语言参考命令、函数、操作符、对象、属性、事件和方法
处理内存变量

以下命令和函数可以给内存变量赋值

& 命令

= 命令

ACOPY( ) 函数

ADEL( ) 函数

ADIR( ) 函数

AELEMENT( ) 函数

AFIELDS( ) 函数

AINS( ) 函数

LEN( ) 函数

ASCAN( ) 函数

ASORT( ) 函数

ASUBSCRIPT( ) 函数

AVERAGE 命令

CLEAR ALL 命令

CLEAR MEMORY 命令

COUNT 命令

DISPLAY MEMORY 命令

GETEXPR 命令

LIST MEMORY 命令

LOCAL 命令

PARAMETERS 命令

PRIVATE 命令

PUBLIC 命令

REGIONAL 命令

RELEASE 命令

RESTORE FROM 命令

SAVE TO 命令

STORE 命令

SUM 命令

WAIT 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
执行程序

以下命令和函数可以控制 FoxPro 程序的执行、挂起和终止

BUILD APP 命令

BUILD EXE 命令

BUILD PROJECT 命令

CALL 命令

CANCEL 命令

CLEAR PROGRAM 命令

CLOSE ALL 命令

CLOSE PROCEDURE 命令

COMPILE 命令

CREATE PROJECT 命令

#DEFINE ... #UNDEF 预处理器指令

DO 命令

DO FORM 命令

FUNCTION 命令

#IF ... #ENDIF 预处理器指令

#INCLUDE 预处理器指令

LOAD 命令

LPARAMETERS 命令

MESSAGEBOX( ) 函数

MODIFY PROJECT 命令

PARAMETERS 命令

PARAMETERS( ) 函数

PROCEDURE 命令

RELEASE MODULE 命令

RELEASE PROCEDURE 命令

RESUME 命令

RETURN 命令

RUN | ! 命令

SET ESCAPE 命令

SET LIBRARY 命令

SET LOGERRORS 命令

SET PROCEDURE 命令

SET SYSMENU 命令

SET UDFPARMS 命令

SET VOLUME 命令

SET XCMDFILE 命令

SUSPEND 命令

SYS(2015) 函数 - 唯一的过程名

WAIT 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
结构化程序设计

以下命令和函数可以控制程序的执行和 FoxPro 程序中的分支

DO CASE ... ENDCASE 命令

DO WHILE ... ENDDO 命令

EXIT 命令

FOR ... ENDFOR 命令

#IF ... #ENDIF 预处理器指令

#IFDEF | #IFNDEF ... #ENDIF 预处理器指令

IF ... ENDIF 命令

IIF( ) 函数

SCAN ... ENDSCAN 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
面向对象程序设计

以下命令和函数可以创建和处理类和对象

:: 作用域操作符

@ ... CLASS 命令

_WIZARD 系统内存变量

ACLASS( ) 函数

ADATABASES( ) 函数

ADBOBJECTS( ) 函数

ADD CLASS 命令

AINSTANCE( ) 函数

AMEMBERS( ) 函数

ASELOBJ( ) 函数

_BUILDER 系统内存变量

COMPOBJ( ) 函数

CREATE CLASS 命令

CREATE CLASSLIB 命令

CREATEOBJECT( ) 函数

DEFINE CLASS 命令

DISPLAY OBJECTS 命令

GETOBJECT( ) 函数

LIST OBJECTS 命令

MODIFY CLASS 命令

RELEASE CLASSLIB 命令

REMOVE CLASS 命令

RENAME CLASS 命令

_SCREEN 系统内存变量

SET CLASSLIB 命令

SET OLEOBJECT

WITH ... ENDWITH 命令


语言参考命令、函数、操作符、对象、属性、事件和方法
新的命令和函数

以下命令和函数是 Visual FoxPro 新增加的

#IFDEF | #IFNDEF ... #ENDIF 预处理器指令

#INCLUDE 预处理器指令

:: 作用域操作符

@ ... CLASS 命令

A

ACLASS( ) 函数

ADATABASES( ) 函数

ADBOBJECTS( ) 函数

ADD CLASS 命令

ADD TABLE 命令

AERROR( ) 函数

AINSTANCE( ) 函数

ALTER TABLE - SQL 命令

AMEMBERS( ) 函数

APPEND PROCEDURES 命令

APRINTERS( ) 函数

_ASCIICOLS 系统内存变量

_ASCIIROWS 系统内存变量

ASELOBJ( ) 函数

AUSED( ) 函数

B

BEGIN TRANSACTION 命令

BITAND( ) 函数

BITCLEAR( ) 函数

BITLSHIFT( ) 函数

BITNOT( ) 函数

BITOR( ) 函数

BITRSHIFT( ) 函数

BITSET( ) 函数

BITTEST( ) 函数

BITXOR( ) 函数

_BROWSER 系统内存变量

_BUILDER 系统内存变量

C

CANDIDATE( ) 函数

CD | CHDIR 命令

CLEAR CLASS 命令

CLEAR CLASSLIB 命令

CLEAR DLLS 命令

CLEAR EVENTS 命令

CLOSE DATABASES 命令

CLOSE TABLES 命令

COMPILE DATABASE 命令

COMPILE FORM 命令

COMPOBJ( ) 函数

_CONVERTER 系统内存变量

COPY PROCEDURES 命令

CREATE CLASS 命令

CREATE CLASSLIB 命令

CREATE CONNECTION 命令

CREATE DATABASE 命令

CREATE FORM 命令

CREATE SQL VIEW 命令

CREATE TRIGGER 命令

CREATEOBJECT( ) 函数

CTOT( ) 函数

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数

CURVAL( ) 函数

D

DATETIME( ) 函数

DBC( ) 函数

DBGETPROP( ) 函数

DBSETPROP( ) 函数

DBUSED( ) 函数

DECLARE - DLL 命令

DEFINE CLASS 命令

DELETE - SQL 命令

DELETE CONNECTION 命令

DELETE DATABASE 命令

DELETE TRIGGER 命令

DELETE VIEW 命令

DISPLAY CONNECTIONS 命令

DISPLAY DATABASE 命令

DISPLAY DLLS 命令

DISPLAY OBJECTS 命令

DISPLAY PROCEDURES 命令

DISPLAY TABLES 命令

DISPLAY VIEWS 命令

DO FORM 命令

DTOT( ) 函数

E

END TRANSACTION 命令

ERROR 命令

F

FDATE( ) 函数

FTIME( ) 函数

G

GETCOLOR( ) 函数

GETCP( ) 函数

GETFLDSTATE( ) 函数

GETNEXTMODIFIED( ) 函数

GETOBJECT( ) 函数

GETPICT( ) 函数

GETPRINTER( ) 函数

H

HOUR( ) 函数

I

INDBC( ) 函数

ISEXCLUSIVE( ) 函数

ISMOUSE( ) 函数

ISNULL( ) 函数

J

K

L

LIST CONNECTIONS 命令

LIST DATABASE 命令

LIST DLLS 命令

LIST OBJECTS 命令

LIST PROCEDURES 命令

LIST TABLES 命令

LIST VIEWS 命令

LOCAL 命令

LPARAMETERS 命令

M

MD | MKDIR 命令

MESSAGEBOX( ) 函数

MINUTE( ) 函数

MODIFY CLASS 命令

MODIFY CONNECTION 命令

MODIFY DATABASE 命令

MODIFY FORM 命令

MODIFY PROCEDURE 命令

MODIFY VIEW 命令

MOUSE 命令

MTON( ) 函数

N

NTOM( ) 函数

NVL( ) 函数

O

OLDVAL( ) 函数

OPEN DATABASE 命令

P

PACK DATABASE 命令

PRIMARY( ) 函数

Q

R

RD | RMDIR 命令

READ EVENTS 命令

REFRESH( ) 函数

RELEASE CLASSLIB 命令

RELEASE PROCEDURE 命令

REMOVE CLASS 命令

REMOVE TABLE 命令

RENAME CLASS 命令

RENAME CONNECTION 命令

RENAME TABLE 命令

RENAME VIEW 命令

REQUERY( ) 函数

RGB( ) 函数

ROLLBACK 命令

S

_SCREEN 系统内存变量

SEC( ) 函数

SET CLASSLIB 命令

SET CPCOMPILE 命令

SET CPDIALOG 命令

SET DATABASE 命令

SET DATASESSION 命令

SET FDOW 命令

SET FWEEK 命令

SET NULL 命令

SET OLEOBJECT

SET SECONDS 命令

SET SYSFORMATS

SET TOPIC ID 命令

SETFLDSTATE( ) 函数

SIZE WINDOW 命令

SQLCANCEL( ) 函数

SQLCOLUMNS( ) 函数

SQLCOMMIT( ) 函数

SQLCONNECT( ) 函数

SQLDISCONNECT( ) 函数

SQLEXEC( ) 函数

SQLGETPROP( ) 函数

SQLMORERESULTS( ) 函数

SQLROLLBACK( ) 函数

SQLSETPROP( ) 函数

SQLSTRINGCONNECT( ) 函数

SQLTABLES( ) 函数

SYS(1023) - 启动诊断帮助模式

SYS(1024) - 终止诊断帮助模式

SYS(2029) - 表类型

SYS(3004) - 返回环境 ID 值

SYS(3005) - 设置环境 ID 值

SYS(3006) - 设置语言和环境 ID 值

SYS(3050) - 设置缓冲内存大小

SYS(3051) - 设置锁定重试间隔

SYS(3052) - 忽略 SET REPROCESS 锁定

SYS(3053) - ODBC 环境句柄

T

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数

TTOC( ) 函数

TTOD( ) 函数

TXNLEVEL( ) 函数

U

UPDATE - SQL 命令

V

VALIDATE DATABASE 命令

W

WEEK( ) 函数

WITH ... ENDWITH 命令

_WIZARD 系统内存变量

X

Y

Z


语言参考命令、函数、操作符、对象、属性、事件和方法
增强的命令和函数

以下命令和函数在 FoxPro 的以前版本中已经存在。在 Visual FoxPro 中，它们包含了一些子句以增强功能。下表列出了所有的增强。

@ ... SAY - 图片 & OLE 对象命令

NOWAIT

AFIELDS( ) 函数

nWorkArea | cTableAlias

APPEND 命令

IN nWorkArea | cTableAlias

APPEND FROM 命令

XL5

AS nCodepage

APPEND GENERAL 命令

DATA cExpression

APPEND MEMO 命令

AS nCodepage

BROWSE 命令

NAME ObjectName

CDOW( ) 函数

tExpression

CHANGE 命令

NAME ObjectName

CLOSE 命令

ALL

CLOSE DATABASES 命令

ALL

CLOSE TABLES 命令

ALL

CMONTH( ) 函数

tExpression

COMPILE 命令

AS nCodepage

COPY MEMO 命令

AS nCodepage

COPY TO 命令

XL5

AS nCodepage

CPCURRENT( ) 函数

1 | 2

CREATE CURSOR - SQL 命令

NULL | NOT NULL

CHECK lExpression ERROR cMessageText

DEFAULT eExpression

UNIQUE

NOCPTRANS

CREATE TABLE - SQL 命令

NAME LongTableName

FREE

NULL | NOT NULL

CHECK lExpression1 ERROR cMessageText1

DEFAULT eExpression1

PRIMARY KEY | UNIQUE

REFERENCES TableName2 TAG TagName1

NOCPTRANS

PRIMARY KEY eExpression2 TAG TagName2

UNIQUE eExpression3 TAG TagName3

FOREIGN KEY eExpression4 TAG TagName4

REFERENCES TableName3 TAG TagName5

CHECK lExpression2 ERROR cMessageText2

DEFINE BAR 命令

FONT

STYLE

DEFINE MENU 命令

FONT

STYLE

DEFINE PAD 命令

NEGOTIATE LEFT | MIDDLE | RIGHT

FONT

STYLE

DEFINE POPUP 命令

FONT

STYLE

DEFINE WINDOW 命令

NAME ObjectName

DELETE 命令

IN nWorkArea | cTableAlias

DMY( ) 函数

tExpression

DOW( ) 函数

tExpression

nFirstDayOfWeek

DTOC( ) 函数

tExpression

DTOS( ) 函数

tExpression

EDIT 命令

NAME ObjectName

EXPORT 命令

XL5

AS nCodepage

EXTERNAL 命令

CLASS | FILE | FORM | QUERY | TABLE

FSIZE( ) 函数

cFileName

GATHER 命令

NAME ObjectName

GOMONTH( ) 函数

tExpression

HELP 命令

ID nContextID

IMPORT 命令

XL5 [SHEET cSheetName]

AS nCodepage

INDEX 命令

CANDIDATE

LABEL 命令

NAME ObjectName

MODIFY COMMAND 命令

AS nCodepage

MODIFY FILE 命令

AS nCodepage

MODIFY QUERY 命令

AS nCodepage

MONTH( ) 函数

tExpression

OS( ) 函数

1

POPUP( ) 函数

cMenuName

PRTINFO( ) 函数

Option 13

RELEASE ALL 命令

EXTENDED

REPORT 命令

NOWAIT

ASCII

NAME ObjectName

SCATTER 命令

NAME ObjectName

SEEK 命令

ORDER nIndexNumber | IDXIndexFileName

TAG TagName OF CDXFileName

ASCENDING | DESCENDING

IN nWorkArea | cTableAlias

SEEK( ) 函数

nIndexNumber | cIDXIndexFileName | cTagName

SELECT - SQL 命令

DatabaseName!

SELECT( ) 函数

cTableAlias

SET DOHISTORY 命令

TO FileName ADDITIVE

SET PRINTER 命令

FONT

DEFAULT | NAME WindowsPrinterName

SET PROCEDURE 命令

ADDITIVE

UNLOCK 命令

RECORD nRecordNumber

USE 命令

SQLViewName

NOREQUERY [nDataSessionNumber]

NODATA

VERSION( ) 函数

1, 2, 和 3 选项

WAIT 命令

AT nRow, nCol

NOCLEAR

ZAP 命令

IN nWorkArea | cTableAlias


语言参考命令、函数、操作符、对象、属性、事件和方法
向后兼容的命令和函数

保留以下命令和函数是为了提供与 FoxPro 以前版本的向后兼容性

@ ... BOX 命令

@ ... EDIT - 编辑框命令

@ ... GET - 命令按钮命令

@ ... GET - 复选框命令

@ ... GET - 组合框命令

@ ... GET - 列表框命令

@ ... GET - 选项按钮命令

@ ... GET - 微调命令

@ ... GET - 文本框命令

@ ... GET - 透明按钮命令

@ ... MENU 命令

@ ... PROMPT 命令

@ ... SAY 命令

@ ... SAY - 图片 & OLE 对象命令

@ ... TO 命令

_ALIGNMENT 系统内存变量

_ASSIST 系统内存变量

_BEAUTIFY 系统内存变量

_BOX 系统内存变量

_CUROBJ 系统内存变量

_FOXDOC 系统内存变量

_FOXGRAPH 系统内存变量

_GENGRAPH 系统内存变量

_GENPD 系统内存变量

_GENSCRN 系统内存变量

_GENXTAB 系统内存变量

_INDENT 系统内存变量

_LMARGIN 系统内存变量

_PADVANCE 系统内存变量

_PBPAGE 系统内存变量

_PCOLNO 系统内存变量

_PCOPIES 系统内存变量

_PDRIVER 系统内存变量

_PDSETUP 系统内存变量

_PECODE 系统内存变量

_PEJECT 系统内存变量

_PEPAGE 系统内存变量

_PLENGTH 系统内存变量

_PLINENO 系统内存变量

_PLOFFSET 系统内存变量

_PPITCH 系统内存变量

_PQUALITY 系统内存变量

_PSCODE 系统内存变量

_PSPACING 系统内存变量

_PWAIT 系统内存变量

_RMARGIN 系统内存变量

_STARTUP 系统内存变量

_TABS 系统内存变量

_TRANSPORT 系统内存变量

_WRAP 系统内存变量

ACCEPT 命令

ANSITOOEM( ) 函数

ASSIST 命令

CALL 命令

CLEAR READ 命令

CREATE SCREEN 命令

CREATE SCREEN - 快速屏幕命令

DEFINE BOX 命令

FIND 命令

INPUT 命令

INSERT 命令

JOIN 命令

LOAD 命令

MENU 命令

MENU TO 命令

MODIFY SCREEN 命令

OBJNUM( ) 函数

OBJVAR( ) 函数

OEMTOANSI( ) 函数

ON KEY 命令

ON READERROR 命令

RDLEVEL( ) 函数

READ 命令

READ MENU 命令

READKEY( ) 函数

SET BLINK 命令

SET BORDER 命令

SET BRSTATUS 命令

SET CLEAR 命令

SET COLOR OF 命令

SET COLOR TO 命令

SET DELIMITERS 命令

SET DOHISTORY 命令

SET FORMAT 命令

SET INTENSITY 命令

SET SCOREBOARD 命令

SET STATUS 命令

SET STATUS BAR 命令

SET WINDOW OF MEMO 命令

SHOW GET 命令

SHOW GETS 命令

SHOW OBJECT 命令

SYS(15) - 字符转换

SYS(18) - 当前控制

SYS(20) - 转换德文文本

SYS(2016) - SHOW GETS WINDOW 名称

SYS(2017) - 显示启动屏幕

UPDATE 命令

UPDATED( ) 函数

VARREAD( ) 函数

WREAD( ) 函数


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  错误信息 A-Z

  错误信息的编号

错误信息参数

  升级

  配置和优化

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

Visual FoxPro 功能概述

Visual FoxPro 专业版的功能

FoxPro 2.6 和 Visual FoxPro 之间的差别

转换 FoxPro 2.6

从 dBASE 升级

  配置和优化

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  配置 Visual FoxPro

  优化 Visual FoxPro

  优化应用程序

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  配置 Visual FoxPro

使用 Visual FoxPro 启动选项

显示设置

保存设置

回显设置

使用选项对话框设置环境

使用配置文件设置环境

定制工具栏和函数功能键

配置 Windows

  优化 Visual FoxPro

  优化应用程序

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  配置 Visual FoxPro

  优化 Visual FoxPro

对系统进行优化

优化关键的 SET 命令

在多用户环境中共享表

清理 Visual FoxPro 环境

  优化应用程序

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  配置 Visual FoxPro

  优化 Visual FoxPro

  优化应用程序

深入了解 Rushmore 技术

优化 Rushmore 表达式

优化 Visual FoxPro 性能

提高性能的一般技巧

  程序设计

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  程序设计

  语言概述

  命名约定

保留字

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  程序设计

  语言概述

Visual FoxPro 命名规则

数据类型和字段类型

数据容器的作用域

操作符

核心事件集

事件顺序

基类

最小事件集

最小属性集

容器类

Visual FoxPro 和其他程序设计语言

  命名约定

保留字

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  程序设计

  语言概述

  命名约定

变量

对象

表字段

常量

窗口

保留字

  系统信息


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  程序设计

  系统信息

  文件结构

Visual FoxPro 支持的代码页

文件扩展名和文件类型

键盘快捷键

Visual FoxPro 系统容量


`  技术支持错误信息、系统容量，以及配置和升级应用程序的信息
技术支持
错误信息、系统容量、以及配置和升级应用程序的信息

  错误信息

  升级

  配置和优化

  程序设计

  系统信息

  文件结构

表文件的结构 (.DBF, .VCX, .DBC, .SCX, .LBX, .MNX, .PJX, .FRX)

表文件的表结构

备注文件的结构 (.FPT)

索引文件的结构 (.IDX)

压缩索引文件的结构 (.IDX)

复合索引文件的结构 (.CDX)

宏文件的结构 (.FKY)

Visual FoxPro 支持的代码页

文件扩展名和文件类型

键盘快捷键

Visual FoxPro 系统容量


错误信息 A-Z


错误信息 A-Z

1815	必须使用 SELECT ... INTO TABLE 创建"<临时表>"
1832	"<字段> | <变量>"不唯一，必须有效。
1165	"<字段>"不与当前工作区相关。
1196	"<文件>"不是 Visual FoxPro .EXE 文件。
1309	"<文件>"不是对象文件。
1298	"<名称>"带宽太大，在页面上不合适。
1929	"<名称>"只能在方法中使用。
1932	"<名称>"当挂起时不能关闭。
1462	"<名称>"内部一致性错误。
1737	"<名称>"是一个方法、事件或对象。
1740	"<名称>"是只读属性。
226	"<名称>"不是文件变量。
225	"<名称>"不是内存变量。
232	"<名称>"不是数组。
1924	"<名称>"不是对象。
1983	"<名称>"对象不能返回值。
1429	"<名称>".
1130	'字段'片语未找到。
78	** 或 ^ 作用域错误。
***	*无效日期*
***	*中断*
1550	.DBC 内部一致性错误。
115	.DIF 文件头无效。
117	.DIF 类型指示符无效。
116	.DIF 向量无效 - .DBF 字段不匹配。
120	.SYLK 文件大小范围无效。
121	.SYLK 文件格式无效。
119	.SYLK 文件头无效。
A

1727	需要.DBF-格式的帮助文件。
1771	与此同名的成员对象已存在。
1538	正在执行一个存储过程。
1961	"<名称>" 子目录或文件已存在。
1889	在多关系中的表只能有一个子记录。
13	未找到别名。
24	别名已在使用。
103	超过了允许的DO 嵌套层次。
1870	ALTER TABLE 操作中断。
1781	对象的控制源不能设置给它的 Value 属性。
1098	调用了 API 函数_UserError( )。
1726	未找到 API 库。
1711	API 库修订不匹配。请重新生成库。
1178	应用程序 "<文件>" 未关闭。
1972	"<名称>" 正在被使用。
230	数组维数无效。
1764	数组不是父对象的成员。
1974	数组不能被指定给数组元素。
B

1542	基表的字段已被更改，并与视图字段不匹配。无法设置视图字段的属性。
1590	BEGIN TRANSACTION 命令失败。嵌套层次太多。
38	到了文件开始。
227	框的尺寸无效。
1164	浏览结构已更改。
1163	关闭浏览表。
C

1651	不允许 CANCEL 或 SUSPEND 命令。
62	无法访问超出字符串的字符。
1106	无法访问文件；事务正在进行。
1152	无法访问选定的表。
1421	无法激活 OLE 服务器。
1741	无法添加 "<名称>"。类定义循环。
1755	无法向这个类添加对象。
1769	无法向列添加这个对象。
1768	无法向表格添加这个对象。
***	无法分配屏幕映象。
1672	无法从有密码保护的文件中追加。
1795	无法整理不透明的表单。
1689	没有主程序无法生成 .APP 或 .EXE 文件。
1758	在SetAll 方法中无法更改 "<name>" 属性。
1770	无法清除正在使用的类。
176	无法清除正在使用的菜单。
177	不能清除正在使用的弹出式菜单。
1951	无法清除正在使用的对象。
1546	在执行与表相联系的表达式时不能关闭表。
1535	此数据库正由一个项目使用，不能关闭。
1971	在当前的 COMPILE 命令完成之后才能进行下一编译。
102	不能创建文件 "<文件>"。
1102	不能创建文件。
***	不能建立程序工作空间。
169	不能定义菜单项。
1307	不能被 0 除。
1871	不能去除所有列。
1754	在 DLL 中找不到入口点 "<名称>"。
1562	在数据库中找不到对象 "<名称>"。
***	找不到拼写检查程序。
1944	找不到生成器程序。
1798	找不到转换程序。
1693	找不到菜单生成程序。
1563	在当前数据库中找不到视图 "<名称>"。
1846	不能按合计字段分组。
1671	不能导入有口令保护的文件。
1547	不能从视图中插入一个空行到其基表。
1566	当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令。
1720	在 READ 命令对含格式文件进行操作时，不能发出 SET FORMAT 命令
1753	不能加载 32 位 DLL "<名称>"。
1527	找不到 ODBC 库 — ODBC32.DLL。
1412	找不到 COMSPEC 环境变量。
1731	不能修改基类。
1948	不能修改正在使用的类。
1777	不能修改视图临时表的结构。
1844	不能嵌套合计函数。
1926	不能嵌套类定义。
1254	不能嵌套键标记。
1337	不能嵌套 PRINTJOB 命令。
***	不能打开配置文件。
101	打不开文件。
1930	不能重定义 "<名称>"。
175	不能重定义正在使用的弹出式菜单。
174	不能重定义正在使用的菜单。
170	不能释放菜单项。
1253	不能重命名当前目录
1153	不能重命名文件到另一个设备。
1970	不能重新打开项目文件 "<名称>"。
1976	不能解决后链。
***	不能在 MS-DOS 3.0 以前版本运行。
1706	不能按降序对 .IDX 文件排序。
1157	不能更新文件。
292	不能使用 0 或负数作为 LOG10( ) 参数。
1979	不能以可视方式修改派生自非可视类的类。
1978	不能以可视方式修改此种类型的类
111	不能更新临时表。
1502	记录正在使用，不能写入。
1761	类 "<名称>" 已经存在。
1434	类 "<名称>" 未注册。
1776	类 "<名称>" 正在使用。
1576	在类库中找不到类 "<名称>"。
1762	找不到类 "<名称>"。
1313	取消创建类。
1733	找不到类定义 "<名称>"。
1950	类定义 "<名称>" 出现递归。
1747	类文件 "<名称>" 无效。
1746	"<名称>" 的类文件名无效。
1751	类文件版本高于当前版本
1752	MODIFY CLASS 正在使用类。
1993	找不到类库文件 "<名称>"。
1949	类名无效。
1914	代码页编号无效。
1915	找不到排序序列 "<名称>"。
1728	配色方案已保存。
1642	找不到颜色集资源。
223	列号必须在 0 到 255 之间
1657	列号必须在 0 到右页边距之间
1695	COLUMN | FORM | ALIAS | NOOVERWRITE | WIDTH 只允许与 FROM 子句联用。
1698	COLUMN | ROW | ALIAS | NOOVERWRITE | SIZE | SCREEN 只允许与 FROM 子句联用。
1579	对于临时表处于表缓冲方式下的表，不能发布此命令。
1593	在事务处理期间不能发布此命令。
1220	命令中包含无效字符。
36	命令中包含无法识别的片语或关键字。
1297	只有在相关模式下才允许使用该命令
1221	命令中缺少所需要的子句
1981	在"<名称>"文件中出现编译错误
1252	该行的编译代码太长
1541	连接 "<名称>" 忙。
1466	连接句柄无效。
1497	连接名称无效
1526	"<名称>"连接错误
1522	内部连接一致性错误。
1725	已经用 #DEFINE 建立了常数
1799	转换被取消
1509	转换被取消，请增加备注字段块的大小
1168	不能向执行文件中添加图标
1988	当前值超出范围。
1166	光标被毁坏或者格式错误
44	循环关联
D

1966	数据环境已经加载。
1967	数据环境已经卸载
1549	当事务打开时，不能释放#<号>数据段
1599	数据工作期 #<编号> 被强制回滚所有事务以避免死锁。
1732	此属性的数据类型无效
9	数据类型不匹配。
1534	"<别名>"数据库不能打开
1569	"<名称>"数据库: 文件访问失败
1561	数据库无效，请使之生效
1570	数据库只读
1773	数据库对象类型无效
1544	"<名称>"字段的 DataType 属性无效
1232	DIMENSION 包含没有下标参数的变量声明
1963	没有找到目录
216	不能使用显示模式
1907	驱动器符号非法
1156	字段名称重复
E

1211	缺少 IF | ELSE | ENDIF 语句声明
4	已到文件尾。
1591	当没有相应的BEGIN TRANSACTION命令时，不能执行END TRANSACTION命令
1214	ENDTEXT没有对应的TEXT声明
1473	环境级的属性设置无效
1957	打印机的假脱机访问发生错误
1779	向对象中添加"<名称>"时发生错误。成员/属性名称重复
1112	关闭文件时发生错误。
1424	在向剪贴板上复制 OLE 对象时发生错误。
1973	在建立"<名称>"的表时发生错误。
1423	在建立OLE 对象时发生错误。
1735	在类定义中发生错误。
1258	PICTURE 子句中发生错误。
1508	初始化 OLE 时发生错误。
1554	临时表实例化时发生错误。"<别名>"表不能打开。对象将被忽略。
1736	对象实例化时发生错误。
1958	载入打印机驱动程序时发生错误。
1995	在装载数据环境时发生错误。表正在使用
1881	在导入"<错误>"时发生错误。
1797	在转换中发生错误
1584	从数据库中读取属性时发生错误，该属性被忽略
1104	文件读取错误
1296	资源读取错误
1422	保存 OLE 对象时发生错误
1105	写文件发生错误
1977	更新文件时需要独占打开文件，请重新打开文件
1523	用户取消该操作
46	表达式操作的数值非法
67	表达式操作失败
1148	当条件执行时，表达式重新进入
1759	表达式非法，请对 "<名称>" 属性使用合法的表达式
1940	在WITH/ENDWITH范围之外，表达式无效
1947	表达式过于复杂
293	使用ACOS( )函数的表达式超出范围
291	使用ASIN( )函数的表达式超出范围
F

***	<expN>致命的错误，报告<expN>错误
1001	特性无效
1580	对于非.DBC的表特性不支持
1953	只有在设计时才能使用特性
1530	取操作被取消；远程表已经关闭
1581	"<名称>"字段不能为空
1582	"<名称>"字段的有效性规则被破坏
1647	字段表达式包含非法的数据类型
1913	字段必须为通用型字段
350	字段必须为备注型字段
1712	字段名称重复或者无效
1713	字段宽度或者小数位数非法
1529	"<名称>"文件已经作为数据库的一部分存在
1553	文件 <名称> 是一个数据库
1551	文件 <名称> 是一个无效的数据库
1552	文件 <名称> 不是一个数据库
1558	文件 <名称> 不是数据库的一部分
1565	文件 <名称> 是数据库的一部分
1933	文件 <名称> 没有关闭
1705	访问文件的操作无效
7	文件已经存在
1503	文件不能锁定
1	文件不存在
108	文件被其他用户使用
3	文件被使用
1113	文件没有打开
1708	文件在另外一个工作区被打开
1718	文件只读
1338	文件的版本错误
1637	文件必须独占方式打开来转换备注文件
110	文件必须独占方式打开
1918	文件名称过长
1750	Visual FoxPro 文件版本比当前版本新
91	文件没有使用LOAD命令放在内存中
1140	FILTER表达式超过了允许的大小
1749	表单 (.SCX) 文件至少包含一个表单
1991	表单 <名称> 文件为以前的FoxPro版本，在执行之前请进行转换
1686	表单文件 <名称> 无效
1294	FOXUSER.DBF 文件无效
11	函数的参数值，类型或者数目无效
1999	函数不能完成任务
1536	函数在本地表上不支持
1525	函数在远程表上不支持
1300	函数名称缺少 )
1304	函数名称缺少 (
1586	函数需要行缓冲方式或表缓冲方式
G - H

1986	GDI 内存太少，关闭一个或者多个窗口，重新进行操作
1489	不能在更新状态在WHERE 条件中使用通用字段。改变视图的WhereType 属性
I

1167	图标已毁坏或者格式错误
1587	OLDVAL( ) 或者 CURVAL( ) 非法嵌套
1910	非法的打印驱动程序循环
1887	在计算规则中非法循环
1960	对<名称>变量的非法重新定义
1594	在将前面的记录锁定之后，在事务中锁定文件将是非法的
1679	只能导入 Lotus 1-2-3 3.0版本文件的工作表
1241	在组表达式中数据类型不正确
1994	包含文件 <名称>没有找到
1471	不正确的列格式
1470	属性名称不正确
1886	索引不能接受 null 值
114	索引文件和表不匹配请删除索引文件，重新建立索引
23	索引表达式超过最大限制
19	索引文件和表不匹配
1683	索引标识没有找到
1684	必须指定索引选项卡或者文件名称
1002	输入/输出操作失败
1588	在行或表缓冲激活时，或者正在使用集成限制时，不能执行 INSERT 操作
1308	栈空间不足
1243	内部错误：报表中的字符太多
231	SET 函数中使用非法参数
1477	在执行 SQLCOLUMNS( ) 序列时，发生非法的调用
1474	在执行SQLEXEC( ) 序列时，发生非法的调用
1475	在执行SQLMORERESULTS( ) 序列时，发生非法的调用
1476	在执行SQLTABLES( ) 序列时，发生非法的调用
1783	对于 @...Class 命令指定的类无效
***	无效的压缩 EXE 文件，重建 EXE
1578	无效的数据库表名
1245	在标签定义文件中的无效表达式
1111	无效的文件说明
1510	无效的文件格式。如果是dBASE 文件,必须首先进行转换。要转换它，键入 MODIFY LABEL <标签文件名称>.
112	无效的关键字长度
1115	对临时表对象的无效操作
***	无效的或缺失的 EXE 文件
202	无效的路径或文件名
1103	无效的查询偏移
31	无效的下标引用
1479	无效的更新列名 <名称>
1652	Visual FoxPro 函数作为数组非法使用
1223	无效的变量引用
J - K

1124	关键字超过允许的范围
1117	关键字字段长度不匹配
1255	键标记 <标记名> 无效
1257	键字符串过长
356	键盘宏文件格式无效
L

54	标签文件无效
1653	标签嵌套错误
221	缩进的左边界必须小于右边界
21	内存变量字符串的长度超出
1908	长度或小数位数参数无效
1691	库文件 <名称> 无效
18	行过长
222	行号必须小于页长度范围
1194	链接命令失败
1911	环境需要本地化产品
58	LOG( ): 不能用 0 或者负数作为自然对数的参数
***	要求逻辑表达式
1662	Lotus 1-2-3 版本 1.0 的文件格式无效
297	Lotus 1-2-3 版本 2.0 的文件格式无效
1678	Lotus 1-2-3 版本 3.0 的文件格式无效
M

355	没有定义宏
1609	超过菜单项的最大限制
1607	超出包含在菜单中的菜单项最大数目
1608	超出菜单定义中的菜单最大号（25）
1431	OLE 指定的参数超过 Visual FoxPro 的限制
392	要导入的文件中包含超过长度的字段
1943	成员<名称>不能求值成对象
1760	成员<名称>是一个类成员
1975	成员对象<名称> 没有实例化
41	备注文件 <名称>缺少或者无效
55	内存变量文件无效
1687	菜单文件无效
178	菜单没有用 ACTIVATE MENU 激活
179	菜单没有用 ACTIVATE POPUP 命令激活
168	菜单没有用 DEFINE MENU 定义
165	菜单没有用 DEFINE POPUP 定义
167	菜单项位置必须是正值
1611	菜单项和标题必须是字符型
287	菜单尺寸太小
181	ACTIVATE MENU 命令中指定的菜单正在使用
182	ACTIVATE POPUP 命令中指定的菜单正在使用
164	未使用 DEFINE PAD 命令定义菜单标题
279	未点中菜单
1765	方法包含语法错误。未保存方法
1661	Microsoft Excel 文件格式非法
1723	不匹配的 #IF/#ELSIF/#ELSE/#ENDIF 语句
1256	键标记中大括号不匹配
1724	缺少 #ENDIF 语句
1193	缺少 .RTT 部分
1306	缺少逗号 (,)
152	缺少表达式
1231	缺少操作数
1670	Multiplan 4.0 版文件格式无效
1710	PROMPT 样式的菜单不支持 MULTISELECT 或 MOVER 子句
1145	必须是字符或数值类型的关键字段
1226	必须是一个文件变量
1225	必须是内存变量或数组变量
94	必须指定附加参数
N

96	嵌套错误
1520	没有数据库打开或设置为当前数据库
1878	DROP 没有默认值
47	在处理中没有找到字段
138	没有找到要复制的字段
1492	对<名称>更新的表没有指定关键列，使用临时表中的KeyFieldList 属性
1605	没有定义菜单
1604	没有定义菜单项
166	此菜单中没有定义菜单项
1621	此菜单中没有定义菜单标题
1964	在WindowType 属性设置为READ 或者READ MODAL的表单、表单集中，没找到页框或页面
1238	没有找到 PARAMETER 语句
1649	此命令之前没有 PRINTJOB 命令与之对应
1879	没有主关键字
1796	当前平台没有发现记录
1877	DROP 中无规则
1774	没有找到工作表
1612	没有定义这样的菜单或菜单项
52	没有表打开
1491	没有指定更新的表。使用临时表的Tables 属性
45	不是字符表达式
27	不是数值表达式
15	不是一个表
1682	不是用户自定义窗口
256	不是一个合法的Framework II 数据库/工作表
255	不是一个有效的RapidFile 数据库
56	没有足够的磁盘空间给<文件名称>
1149	没有足够的缓冲内存空间
1150	没有足够的内存空间给文件映象
1151	没有足够的内存空间保存文件名称
1600	没有足够的内存空间用 USE 命令 打开表
1696	FROM 语句中不允许 OWAIT/SAVE/NOENVIRONMENT/IN/WINDOW 子句
39	数值溢出。数据丢失
O

1766	对象<名称>没找到
1923	对象<名称>没找到
1985	对象已有数据环境，不能使用 SaveAs 方法使用另一个环境
1744	对象类对此容器非法
1195	对象文件 <文件>在以前的 FoxPro 版本中编译
1719	对象文件 <名称>正在使用，不能从内存中清除
1938	对象没有包含在<名称>中
1575	对象名称非法
1942	不能将对象指定给数组
1987	不能以编程方式向表单设计器中添加对象
1989	不能以编程方式删除表单设计器中的对象
1528	ODBC 入口点<名称>未找到
1426	OLE 错误代码 0x <名称>
1427	OLE 非正常的代码号<名称>
1428	OLE从<名称>返回非正常的代码号<名称>
1420	OLE 对象无效或毁坏
1965	表单或表单集的一个成员基于非可视类，不能写入 . VCX 文件
1968	表单或表单集的一个成员基于非可视类，不能写入 .SCX 文件
1436	通用字段中只允许有可插入的对象
1885	只有结构化标识可以定义为候选关键字
1912	对于通用字段操作非法
34	对备注、通用或图片型字段操作非法
107	操作符/操作数类型不匹配
P

1688	Paradox 文件格式无效
1767	父对象不允许<名称>的属性设置
1217	语句中发生 Picture 子句错误
1108	图形太大，毁坏或者格式错误
***	弹出式菜单太大，显示第一个<expN>入口
1722	预处理表达式非法
1681	不允许与 PREVIEW 子句一起使用 OFF/NOCONSOLE 或者 TO PRINT/FILE 语句
1883	已经存在主关键字
1956	不能访问打印机
1643	打印机驱动程序毁坏
1644	没有找到打印机驱动程序
125	打印机未准备就绪
124	打印机重定向无效
1162	过程 <名称>没有找到
1937	过程文件 <名称>没有找到
***	产品没有正确地安装
1202	程序太大
1946	项目文件版本错误
1685	项目文件非法
1169	项目文件只读
1763	属性<名称>已经存在
1738	属性 <名称>不是方法或者事件
1734	属性 <名称>没有找到
1757	属性 <名称>被保护
1743	属性 <名称>只读
1468	属性对于表的临时表无效
1467	对本地的临时表，属性非法
1559	没有找到属性
1739	在重新载入数据环境之后，属性设置才生效
1560	属性值无效
1469	属性值超出范围
Q

1716	队列没有找到
R

109	记录被其他用户使用
20	记录没有索引
130	记录没有锁定
5	记录超出范围
1126	记录过长
1583	破坏记录的有效性规则
1206	宏定义重复
1880	在当前数据库中找不到相关的表
1882	相关的标识没有找到，或者不存在主标识或候选标识
1645	报表嵌套中包含错误
50	报表文件无效
1592	没有相应的 BEGIN TRANSACTION 命令不能执行 ROLLBACK 命令
30	行或列位置超出屏幕的范围
1598	规则和触发器代码必须均衡使用事务
1405	RUN|! 命令运行失败
1411	RUN|! 命令的字符串太长
S

1490	不支持将可转换的表单作为对象保存
1507	屏幕代码对于可用的内存空间来说太大
1851	SELECTs 是 UNION 不可兼容的
1715	找不到指定的服务器
1540	工作期号码无效
***	没有找到源代码
***	源代码过期
1845	SQL 表达式过于复杂
1499	SQL 参数<名称> 无效
1493	缺少 SQL 参数
1465	内部 SQL 传递一致性错误
1498	SQL SELECT 语句非法
1811	SQL：在非数值表达式上进行合计 操作
1802	SQL：找不到表
1806	SQL：列<字段> | <变量 >没有发现
1819	SQL：DISTINCT 语句非法
1831	SQL：在建立临时索引时发生错误
1801	SQL：关联字段发生错误
1818	SQL：需要 FROM 语句
1807	SQL：GROUP BY 子句非法
1803	SQL：HAVING 子句非法
1828	SQL：在子查询中 GROUP BY 语句非法
1830	SQL：没有找到索引
1800	SQL：内部错误
1822	SQL：无效的合计字段
1865	SQL：UPDATE 中无效的 SET 表达式
1810	SQL：子查询使用无效
1839	SQL：操作被取消
1808	SQL：ORDER BY 子句无效
1809	SQL：内存溢出
1814	SQL：不支持此类型的查询
1820	SQL：SELECT 包含了无效的 *
1826	SQL：SELECT 语句无效
1804	SQL：语句无效
1812	SQL：语句过长
1825	SQL：子查询非法
1842	SQL：子查询嵌套过多
1841	SQL：引用的列过多
1864	SQL：UPDATE 中使用的字段过多
1805	SQL：子查询过多
1834	SQL：UNION 过多
1813	SQL：在子查询中非法使用 UNION
1833	SQL：WHERE 子句无效
61	SQRT 参数不能为负
95	不允许在对话模式下使用语句
1931	语句不在过程中
1927	类定义中的语句无效
1928	语句仅在类定义中有效
1934	语句仅在方法内有效
1903	字符串过长
1707	没有找到结构 .CDX 文件
1235	结构非法
1212	嵌套结构太深
1860	子查询返回不止一个记录
1234	下标超出定义范围
1236	在使用 RESUME 之前挂起程序
1673	Symphony 1.0 版本文件格式无效
1674	Symphony 1.1 版本文件格式无效
1242	字段表达式中出现语法错误
10	语法错误.
T

228	Tab 停止键必须按升序排列
1548	<别名>表包含一个或者多个打开的非结构化索引，请关闭它们并再使用 Begin Transaction
1564	数据库中表<名称>已经存在
1577	在关系中引用了表<名称>
1545	<名称>别名的表缓冲包含不能提交的更改
1596	没有启用表缓冲
26	表没有设置索引次序
17	表的编号无效
1690	在索引期间非法操作表
1589	表缓冲或行缓冲需要 SET MULTILOCKS 设置为 ON
1888	标识名称过长
1147	在关系中已经使用了目标表
1954	生成器程序已运行
1478	数据环境中关系对象的 ChildOrder 属性不再有效。此关系即将被取消
1969	剪贴板包含了一个或者多个对象，这些对象不能添加到容器中，它们不能粘贴
1935	当前对象没有从<名称>类中继承
1945	当前的对象已经释放
1742	对象的数据源必须是变量引用
1557	数据库必须以独占方式打开
1997	<名称>字段的默认值不能得到该字段的正确类型
1962	目录非空
1984	<名称>表的字段不与数据库入口匹配
1131	FROM 子句中指定的文件为空
1998	<名称> 的索引表达式中包含对备注字段、通用字段或者图片字段的非法引用
42	必须在 CONTINUE 命令之前执行 LOCATE 命令
1571	名称 <名称>已经被其他对象使用，请选择不同的名称命令
***	远程视图向导不能获得此远程表的列信息。可能是 ODBC 错误，也可能是因为当前用户不能使用该远程表
1524	选用的打印驱动程序不支持直接访问
1531	因为<名称>的索引或者条件表达式非法，不能执行更新表的操作
1659	在只读方式打开时，带有备注字段的表不能进行转换
1778	在添加记录之前必须转换表
1982	TO 子句只能对模式表单或表单集使用
1996	字段 <名称>合法性规则不能得出逻辑型或者 NULL 型
1213	在 FOR ... ENDFOR 或者 CASE ... ENDCASE 命令中缺少关键字
43	没有足够的内存完成该操作
1780	数组元素被定义为对象，不能在类定义中重新定义
1782	该 OLE 属性不能为一个表达式
1521	对类成员对象不支持此操作
1533	属性为只读
1916	为了使用该功能，在 CONFIG.FPW 文件中设置 CODEPAGE=AUTO 并重新起动 Visual FoxPro
1229	参数太少
1230	参数太多
1310	PICTURE 子句中使用的字符太多
1872	列太多
1694	指定的扩展名太多
6	打开的文件太多
22	内存变量太多
1201	使用的名称太多
1875	定义太多的更改关键字
1250	使用太多的 PROCEDURE 命令
1249	使用太多的 READ 命令
1161	演示版中包含太多要浏览或编辑的记录
1646	总计字段类型必须是日期或者数值型
1246	标签的全部宽度超过允许大小
1539	触发器失效
1532	不支持类型转换
1543	"<名称>"字段的 DataType 属性要求的类型转换非法
U

1410	不能建立临时工作文件
1717	不能生成一个打印驱动程序
***	不能找到需要的 Visual FoxPro 版本
***	不能处理错误
1884	索引<名称>唯一性被破坏
***	不能识别的错误代码
104	不能识别功能键
1925	<名称>成员不能识别
16	不能识别命令动词
1141	不能识别的索引文件版本，请重建索引
1692	不能解决的本地名称冲突
1595	发生更新冲突。在当前行缓冲中的一些改变被提交。请使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用手工事务回滚更新操作
1585	发生更新冲突。使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用 TABLEREVERT( ) 回滚更新操作
V

12	“变量”变量没有找到
1134	变量必须在选定的表中
1494	视图定义已经更改
1568	视图字段已经改变，更新和关键字段属性被重设置为默认值
127	视图文件非法
1597	视图中需要 DB_BUFOPTROW 或 DB_BUFOPTTABLE
1922	卷标不存在
W

1485	警告: 在<号>记录开始出现非法的数据转换
1486	警告:  Invalid memo 在<号>记录开始出现非法的备注字段转换
1496	警告: 在检查远程更新冲突时没有足够的信息
1483	警告: 不能设置连接包大小
1480	警告:  不能设置连接同步/异步方式
1481	警告:  不能设置连接超时
1487	警告:  不能设置连接事务模式
1495	警告: “别名”表 KeyField 属性定义的关键字不唯一
1484	警告: 下一个更改的字符串已经被远程修改
1482	警告: 不能设置查询超时
1955	WIN.INI 注册被破坏
214	没有用 DEFINE WINDOW 定义窗口
1632	窗口文件格式无效
215	窗口没有用 ACTIVATE WINDOW 激活
332	DEFINE WINDOW 中指定窗口的坐标非法
1939	WITH/ENDWITH 不匹配
1775	没有找到 <名称>的工作表
1680	Lotus 1-2-3的3.0 版本工作表被隐藏
X - Z

1127	FOR 或 WHILE 语句中必须使用逻辑表达式
37	在 FILTER 中必须使用逻辑表达式


错误信息的编号


错误信息的编号

***	*日期表达错误*
***	不能分配屏幕映象
***	不能建立程序工作空间
***	找不到拼写检查程序
***	不能打开配置文件
***	不能在 MS-DOS 3.0 以前版本运行
***	致命的错误，报告<expN>错误
***	*中断*
***	无效的压缩 EXE 文件，重建 EXE
***	无效的或缺失的 EXE 文件
***	要求逻辑表达式
***	弹出式菜单太大，显示第一个<expN>入口
***	产品没有正确地安装
***	没有找到源代码
***	源代码过期
***	远程视图向导不能获得此远程表的列信息。可能是 ODBC 错误，也可能是因为当前用户不能使用该远程表
***	不能找到需要的 Visual FoxPro 版本
***	不能处理错误
***	不能识别的错误代码
0001

1	文件不存在
3	文件被使用
4	已到文件尾
5	记录超出范围
6	打开的文件太多
7	文件已经存在
9	数据类型不匹配
10	语法错误.
11	函数的参数值，类型或者数目无效
12	“变量”变量没有找到
13	找不到别名
15	不是一个表
16	不能识别命令动词
17	表的编号无效
18	行过长
19	索引文件和表不匹配
20	记录没有索引
21	内存变量字符串的长度超出
22	内存变量太多
23	索引表达式超过最大限制
24	别名已被使用
26	表没有设置索引次序
27	不是数值表达式
30	行或列位置超出屏幕的范围
31	无效的下标引用
34	对备注、通用或图片型字段操作非法
36	命令中包含了不可识别的词/关键字
37	在 FILTER 中必须使用逻辑表达式
38	已到文件头
39	数值溢出。数据丢失
41	备注文件 <名称>缺少或者无效
42	必须在 CONTINUE 命令之前执行 LOCATE 命令
43	没有足够的内存完成该操作
44	循环关联
45	不是字符表达式
46	表达式的结果非法
47	在处理中没有找到字段
50	报表文件无效
52	没有表打开
54	标签文件无效
55	内存变量文件无效
56	没有足够的磁盘空间给<文件名称>
58	LOG( ): 不能用 0 或者负数作为自然对数的参数
61	SQRT 参数不能为负
62	对超出字符串的字符不能访问
67	表达式操作失败
78	** 或者 ^ 定义域错误
91	文件没有使用LOAD命令放在内存中
94	必须指定附加参数
95	不允许在对话模式下使用语句
96	嵌套错误
0100

101	打不开文件
102	不能创建文件 <文件>
103	超出允许的 DO 嵌套层次
104	不能识别功能键
107	操作符/操作数类型不匹配
108	文件被其他用户使用
109	记录被其他用户使用
110	文件必须独占方式打开
111	不能更新临时表
112	无效的关键字长度
114	索引文件和表不匹配请删除索引文件，重新建立索引
115	.DIF 文件头无效
116	.DIF 矢量无效 — .DBF 字段不匹配
117	.DIF 类型指示符无效
119	.SYLK 文件头无效
120	.SYLK 文件的大小边界无效
121	.SYLK 文件格式无效
124	打印机重定向无效
125	打印机未准备就绪
127	视图文件非法
130	记录没有锁定
138	没有找到要复制的字段
152	缺少表达式
164	未使用 DEFINE PAD 命令定义菜单标题
165	菜单没有用 DEFINE POPUP 定义
166	此菜单中没有定义菜单项
167	菜单项位置必须是正值
168	菜单没有用 DEFINE MENU 定义
169	不能定义菜单项
170	不能释放菜单项
174	不能重定义正在使用的菜单
175	不能重定义正在使用的弹出式菜单
176	不能清除正在使用的菜单
177	不能清除正在使用的弹出式菜单
178	菜单没有用 ACTIVATE MENU 激活
179	菜单没有用 ACTIVATE POPUP 命令激活
181	ACTIVATE MENU 命令中指定的菜单正在使用
182	ACTIVATE POPUP 命令中指定的菜单正在使用
0200

202	无效的路径或文件名
214	没有用 DEFINE WINDOW 定义窗口
215	窗口没有用 ACTIVATE WINDOW 激活
216	显示模式不可用
221	缩进的左边界必须小于右边界
222	行号必须小于页长度范围
223	列号必须在 0 到 255 之间
225	<名称> 不是一个内存变量
226	<名称> 不是一个文件变量
227	框大小定义无效
228	Tab 停止键必须按升序排列
230	数组维数无效
231	SET 函数中使用非法参数
232	<名称> 不是一个数组
255	不是一个有效的RapidFile 数据库
256	不是一个合法的Framework II 数据库/工作表
279	未点中菜单
287	菜单尺寸太小
291	使用ASIN( ) 函数的表达式超出范围
292	不能使用 0 或负数作为 LOG10( ) 参数
293	使用 ACOS( ) 函数的表达式超出范围
297	Lotus 1-2-3 版本 2.0 的文件格式无效
0300

332	DEFINE WINDOW 中指定窗口的坐标非法
350	字段必须为备注型
355	没有定义宏
356	键盘宏文件格式无效
392	要导入的文件中包含超过长度的字段
1000

1001	特性无效
1002	输入/输出操作失败
1098	API 函数 _UserError( ) 被调用
1100

1102	不能创建文件
1103	无效的查询偏移
1104	文件读取错误
1105	写文件发生错误
1106	不能存取文件；正在进行事务处理
1108	图形太大，毁坏或者格式错误
1111	无效的文件说明
1112	关闭文件时发生错误
1113	文件没有打开
1115	对临时表对象的无效操作
1117	关键字字段长度不匹配
1124	关键字超过允许的范围
1126	记录过长
1127	FOR 或 WHILE 语句中必须使用逻辑表达式
1130	字段 语句没找到
1131	FROM 子句中指定的文件为空
1134	变量必须在选定的表中
1140	FILTER表达式超过了允许的大小
1141	不能识别的索引文件版本，请重建索引
1145	必须是字符或数值类型的关键字段
1147	在关系中已经使用了目标表
1148	当条件执行时，表达式重新进入
1149	没有足够的缓冲内存空间
1150	没有足够的内存空间给文件映象
1151	没有足够的内存空间保存文件名称
1152	不能访问选定表
1153	不能重命名文件到另一个设备
1156	字段名称重复
1157	不能更新文件
1161	演示版中包含太多要浏览或编辑的记录
1162	过程 <名称>没有找到
1163	浏览表已关闭
1164	浏览结构已更改
1165	<field> 和当前工作区无关
1166	临时表被毁坏或者格式错误
1167	图标已毁坏或者格式错误
1168	临时表被毁坏或者格式错误
1169	项目文件只读
1178	应用程序文件 <文件> 没有关闭
1193	缺少 .RTT 部分
1194	链接命令失败
1195	对象文件 <文件>在以前的 FoxPro 版本中编译
1196	<文件> 不是 Visual FoxPro .EXE 文件
1200

1201	使用的名称太多
1202	程序太大
1206	宏定义重复
1211	缺少IF | ELSE | ENDIF语句声明
1212	嵌套结构太深
1213	在 FOR ... ENDFOR 或者 CASE ... ENDCASE 命令中缺少关键字
1214	ENDTEXT 没有对应的 TEXT 声明
1217	语句中发生 Picture 子句错误
1220	命令包含了无效字符
1221	命令中缺少所需要的子句
1223	无效的变量引用
1225	必须是内存变量或数组变量
1226	必须是一个文件变量
1229	参数太少
1230	参数太多
1231	缺少操作数
1232	DIMENSION 包含没有下标参数的变量声明
1234	下标超出定义范围
1235	结构非法
1236	在使用 RESUME 之前挂起程序
1238	没有找到 PARAMETER 语句
1241	在组表达式中数据类型不正确
1242	字段表达式中出现语法错误
1243	内部错误：报表中的字符太多
1245	在标签定义文件中的无效表达式
1246	标签的全部宽度超过允许大小
1249	使用太多的 READ 命令
1250	使用太多的 PROCEDURE 命令
1252	该行的编译代码太长
1253	不能重命名当前目录
1254	不能嵌套键标记
1255	键标记 <标记名> 无效
1256	键标记中大括号不匹配
1257	键字符串过长
1258	PICTURE 子句中发生错误
1294	FOXUSER.DBF 文件无效
1296	资源读取错误
1297	只有在相关模式下才允许使用该命令
1298	<名称> 带区相对于所在页太大
1300

1300	函数名称缺少 )
1304	函数名称缺少 (
1306	缺少逗号 (,)
1307	不能被 0 除
1308	栈空间不足
1309	<文件> 不是一个目标文件
1310	PICTURE 子句中使用的字符太多
1313	取消创建类
1337	不能嵌套 PRINTJOB 命令
1338	文件的版本错误
1400

1405	RUN|! 命令运行失败
1410	不能建立临时工作文件
1411	RUN|! 命令的字符串太长
1412	找不到 COMSPEC 环境变量
1420	OLE 对象无效或毁坏
1421	不能激活 OLE 服务器
1422	保存 OLE 对象时发生错误
1423	在建立OLE 对象时发生错误
1424	在向剪贴板上复制OLE 对象时发生错误
1426	OLE 错误代码 0x <名称>
1427	OLE 非正常的代码号<名称>
1428	OLE从<名称>返回非正常的代码号<名称>
1429	"<名称>".
1431	OLE 指定的参数超过 Visual FoxPro 的限制
1434	类 <名称> 未注册
1436	通用字段中只允许有可插入的对象
1462	<名称> 内部一致性错误
1465	内部 SQL 传递一致性错误
1466	连接句柄无效
1467	对本地的临时表，属性非法
1468	属性对于表的临时表无效
1469	属性值超出范围
1470	属性名称不正确
1471	不正确的列格式
1473	环境级的属性设置无效
1474	在执行SQLEXEC( ) 序列时，发生非法的调用
1475	在执行SQLMORERESULTS( ) 序列时，发生非法的调用
1476	在执行SQLTABLES( ) 序列时，发生非法的调用
1477	在执行 SQLCOLUMNS( ) 序列时，发生非法的调用
1478	数据环境中关系对象的 ChildOrder 属性不再有效。此关系即将被取消
1479	无效的更新列名 <名称>
1480	警告:  不能设置连接同步/异步方式
1481	警告:  不能设置连接超时
1482	警告: 不能设置查询超时
1483	警告: 不能设置连接包大小
1484	警告: 下一个更改的字符串已经被远程修改
1485	警告: 在<号>记录开始出现非法的数据转换
1486	警告:  Invalid memo 在<号>记录开始出现非法的备注字段转换
1487	警告:  不能设置连接事务模式
1489	不能在更新状态在WHERE 条件中使用通用字段。改变视图的WhereType 属性
1490	不支持将可转换的表单作为对象保存
1491	没有指定更新的表。使用临时表的Tables 属性
1492	对<名称>更新的表没有指定关键列，使用临时表中的KeyFieldList 属性
1493	缺少 SQL 参数
1494	视图定义已经更改
1495	警告: “别名”表 KeyField 属性定义的关键字不唯一
1496	警告: 在检查远程更新冲突时没有足够的信息
1497	连接名称无效
1498	SQL SELECT 语句非法
1499	SQL 参数<名称> 无效
1500

1502	记录正在使用，不能写入
1503	文件不能锁定
1507	屏幕代码对于可用的内存空间来说太大
1508	初始化 OLE 时发生错误
1509	转换被取消，请增加备注字段块的大小
1510	无效的文件格式。如果是dBASE 文件,必须首先进行转换。要转换它，键入 MODIFY LABEL <标签文件名称>.
1520	没有数据库打开或设置为当前数据库
1521	对类成员对象不支持此操作
1522	内部连接一致性错误
1523	用户取消该操作
1524	选用的打印驱动程序不支持直接访问
1525	函数在远程表上不支持
1526	<名称>连接错误
1527	找不到 ODBC 库 — ODBC32.DLL
1528	ODBC 入口点<名称>未找到
1529	<名称>文件已经作为数据库的一部分存在
1530	取操作被取消；远程表已经关闭
1531	因为<名称>的索引或者条件表达式非法，不能执行更新表的操作
1532	不支持类型转换
1533	属性为只读
1534	<别名>数据库不能打开
1535	此数据库正由一个项目使用，不能关闭
1536	函数在本地表上不支持
1538	存储过程正在执行
1539	触发器失效
1540	工作期号码无效
1541	连接 <名称> 忙
1542	基表字段已被更改，不再匹配视图字段，因此不能设置视图字段属性
1543	"<名称>"字段的 DataType 属性要求的类型转换非法
1544	"<名称>"字段的DataType 属性无效
1545	<名称>别名的表缓冲包含不能提交的更改
1546	在执行与表相联系的表达式时不能关闭表
1547	不能从视图中插入一个空行到其基表
1548	<别名>表包含一个或者多个打开的非结构化索引，请关闭它们并再使用 Begin Transaction
1549	当事务打开时，不能释放#<号>数据段
1550	.DBC 内部一致性错误
1551	文件 <名称> 是一个无效的数据库
1552	文件 <名称> 不是一个数据库
1553	文件 <名称> 是一个数据库
1554	临时表实例化时发生错误。<别名>表不能打开。对象将被忽略
1557	数据库必须以独占方式打开
1558	文件 <名称> 不是数据库的一部分
1559	没有找到属性
1560	属性值无效
1561	数据库无效，请使之生效
1562	在数据库中找不到对象 <名称>
1563	在当前数据库中找不到视图 <名称>
1564	数据库中表<名称>已经存在
1565	文件 <名称> 是数据库的一部分
1566	当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令
1568	视图字段已经改变，更新和关键字段属性被重设置为默认值
1569	<名称>数据库: 文件访问失败
1570	数据库只读
1571	名称 <名称>已经被其他对象使用，请选择不同的名称命令
1575	对象名称非法
1576	在类库中找不到类 <名称>
1577	在关系中引用了表<名称>
1578	无效的数据库表名
1579	对于临时表处于表缓冲方式下的表，不能发布此命令
1580	对于非.DBC 的表特性不支持
1581	<名称>字段不能为空
1582	<名称>字段的有效性规则被破坏
1583	破坏记录的有效性规则
1584	从数据库中读取属性时发生错误，该属性被忽略
1585	发生更新冲突。使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用 TABLEREVERT( ) 回滚更新操作
1586	函数需要行缓冲方式或表缓冲方式
1587	OLDVAL( ) 或者 CURVAL( ) 非法嵌套
1588	在行或表缓冲激活时，或者正在使用集成限制时，不能执行 INSERT 操作
1589	表缓冲或行缓冲需要 SET MULTILOCKS 设置为 ON
1590	BEGIN TRANSACTION 命令失败。嵌套层次太多
1591	当没有相应的BEGIN TRANSACTION命令时，不能执行END TRANSACTION命令
1592	没有相应的 BEGIN TRANSACTION 命令不能执行 ROLLBACK 命令
1593	在事务处理期间不能发布此命令
1594	在将前面的记录锁定之后，在事务中锁定文件将是非法的
1595	发生更新冲突。在当前行缓冲中的一些改变被提交。请使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用手工事务回滚更新操作
1596	没有启用表缓冲
1597	视图中需要 DB_BUFOPTROW 或 DB_BUFOPTTABLE
1598	规则和触发器代码必须均衡使用事务
1599	数据工作期 #<编号> 被强制回滚所有事务以避免死锁
1600

1600	没有足够的内存空间用 USE 命令 打开表
1604	No menu bar is defined.
1605	没有定义菜单
1607	超出包含在菜单中的菜单项最大数目
1608	超出菜单定义中的菜单最大号（25）
1609	超过菜单项的最大限制
1611	菜单项和标题必须是字符型
1612	没有定义这样的菜单或菜单项
1621	此菜单中没有定义菜单标题
1632	窗口文件格式无效
1637	文件必须独占方式打开来转换备注文件
1642	找不到颜色集资源
1643	打印机驱动程序毁坏
1644	没有找到打印机驱动程序
1645	报表嵌套中包含错误
1646	总计字段类型必须是日期或者数值型
1647	字段表达式包含非法的数据类型
1649	此命令之前没有 PRINTJOB 命令与之对应
1651	CANCEL or SUSPEND is not allowed.
1652	Visual FoxPro 函数作为数组非法使用
1653	标签嵌套错误
1657	列号必须在 0 到右页边距之间
1659	在只读方式打开时，带有备注字段的表不能进行转换
1661	Microsoft Excel 文件格式非法
1662	Lotus 1-2-3 版本 1.0 的文件格式无效
1670	Multiplan 4.0 版文件格式无效
1671	不能导入有口令保护的文件
1672	不能追加有口令保护的文件
1673	Symphony 1.0 版本文件格式无效
1674	Symphony 1.1 版本文件格式无效
1678	Lotus 1-2-3 版本 3.0 的文件格式无效
1679	只能导入 Lotus 1-2-3 3.0版本文件的工作表
1680	Lotus 1-2-3的3.0 版本工作表被隐藏
1681	不允许与 PREVIEW 子句一起使用 OFF/NOCONSOLE 或者 TO PRINT/FILE 语句
1682	不是用户自定义窗口
1683	索引标识没有找到
1684	必须指定索引选项卡或者文件名称
1685	项目文件非法
1686	表单文件 <名称> 无效
1687	菜单文件无效
1688	Paradox 文件格式无效
1689	没有主程序不能连编 .APP 或 .EXE 文件
1690	在索引期间非法操作表
1691	库文件 <名称> 无效
1692	不能解决的本地名称冲突
1693	找不到菜单生成程序
1694	指定的扩展名太多
1695	COLUMN | FORM | ALIAS | NOOVERWRITE | WIDTH 只允许与 FROM 子句联用
1696	FROM 语句中不允许OWAIT/SAVE/NOENVIRONMENT/IN/WINDOW 子句
1698	COLUMN | ROW | ALIAS | NOOVERWRITE | SIZE | SCREEN 只允许与 FROM 子句联用
1700

1705	访问文件的操作无效
1706	不能按降序对 .IDX 文件排序
1707	没有找到结构 .CDX 文件
1708	文件在另外一个工作区被打开
1710	PROMPT 样式的菜单不支持 MULTISELECT 或 MOVER 子句
1711	使用的 API 库版本和 Visual FoxPro 版本不匹配。重建库
1712	字段名称重复或者无效
1713	字段宽度或者小数位数非法
1715	找不到指定的服务器
1716	队列没有找到
1717	不能生成一个打印驱动程序
1718	文件只读
1719	对象文件 <名称>正在使用，不能从内存中清除
1720	在 READ 命令对含格式文件进行操作时，不能发出 SET FORMAT 命令
1722	预处理表达式非法
1723	不匹配的 #IF/#ELSIF/#ELSE/#ENDIF 语句
1724	缺少 #ENDIF 语句
1725	已经用 #DEFINE 建立了常数
1726	找不到 API 库
1727	需要 .DBF 样式的帮助文件
1728	配色方案已保存
1731	不能修改基类
1732	此属性的数据类型无效
1733	找不到类定义 <名称>
1734	属性 <名称>没有找到
1735	在类定义中发生错误
1736	对象实例化时发生错误
1737	<名称> 是一个方法，事件或者对象
1738	属性 <名称>不是方法或者事件
1739	在重新载入数据环境之后，属性设置才生效
1740	<名称>是一个只读属性
1741	不能添加 <名称>。类定义循环
1742	对象的数据源必须是变量引用
1743	属性 <名称>只读
1744	对象类对此容器非法
1746	<名称> 的类文件名无效
1747	类文件 <名称> 无效
1749	表单 (.SCX) 文件至少包含一个表单
1750	Visual FoxPro 文件版本比当前版本新
1751	类文件版本高于当前版本
1752	MODIFY CLASS 正在使用类
1753	不能加载 32 位 DLL <名称>
1754	在 DLL 中找不到入口点 <名称>
1755	不能在此类中添加对象
1757	属性 <名称>被保护
1758	不能在 SetAll 方法中更改 <名称> 属性
1759	表达式非法，请对<名称>属性使用合法的表达式
1760	成员<名称>是一个类成员
1761	类 <名称> 已经存在
1762	找不到类 <名称>
1763	属性<名称>已经存在
1764	数组不是父对象的成员
1765	方法包含语法错误。未保存方法
1766	对象<名称>没找到
1767	父对象不允许<名称>的属性设置
1768	不能在表格控制中添加此对象
1769	不能在列中添加此对象
1770	不能清除正在使用的类
1771	同名的成员对象已经存在
1773	数据库对象类型无效
1774	没有找到工作表
1775	没有找到 <名称>的工作表
1776	类 <名称> 正在使用
1777	不能修改视图临时表的结构
1778	在添加记录之前必须转换表
1779	向对象中添加<名称>时发生错误。成员/属性名称重复
1780	数组元素被定义为对象，不能在类定义中重新定义
1781	对象的控制源不能设置为它的 Value 属性
1782	该 OLE 属性不能为一个表达式
1783	对于 @...Class 命令指定的类无效
1795	不能安排未经输送的表单
1796	当前平台没有发现记录
1797	在转换中发生错误
1798	找不到转换程序
1799	转换被取消
1800

1800	SQL：内部错误
1801	SQL：关联字段发生错误
1802	SQL：找不到表
1803	SQL：HAVING 子句非法
1804	SQL：语句无效
1805	SQL：子查询过多
1806	SQL：列<字段> | <变量 >没有发现
1807	SQL：GROUP BY 子句非法
1808	SQL：ORDER BY 子句无效
1809	SQL：内存溢出
1810	SQL：子查询使用无效
1811	SQL：在非数值表达式上进行合计 操作
1812	SQL：语句过长
1813	SQL：在子查询中非法使用 UNION
1814	SQL：不支持此类型的查询
1815	<临时表>必须用 SELECT ... INTO TABLE 语句创建
1818	SQL：需要 FROM 语句
1819	SQL：DISTINCT 语句非法
1820	SQL：SELECT 包含了无效的 *
1822	SQL：无效的合计字段
1825	SQL：子查询非法
1826	SQL：SELECT 语句无效
1828	SQL：在子查询中 GROUP BY 语句非法
1830	SQL：没有找到索引
1831	SQL：在建立临时索引时发生错误
1832	在 SQL SELECT 命令中的 <字段> | <变量> 不唯一，必须保持一致
1833	SQL：WHERE 子句无效
1834	SQL：UNION 过多
1839	SQL：操作被取消
1841	SQL：引用的列过多
1842	SQL：子查询嵌套过多
1844	不能嵌套合计函数
1845	SQL 表达式过于复杂
1846	不能按合计字段分组
1851	SELECTs 是 UNION 不可兼容的
1860	子查询返回不止一个记录
1864	SQL：UPDATE 中使用的字段过多
1865	SQL：UPDATE 中无效的 SET 表达式
1870	ALTER TABLE 操作被中断
1871	不能 DROP 全部已有列
1872	列太多
1875	定义太多的更改关键字
1877	DROP 中无规则
1878	DROP 没有默认值
1879	没有主关键字
1880	在当前数据库中找不到相关的表
1881	在导入<错误>时发生错误
1882	相关的标识没有找到，或者不存在主标识或候选标识
1883	已经存在主关键字
1884	索引<名称>唯一性被破坏
1885	只有结构化标识可以定义为候选关键字
1886	索引不能接受 null 值
1887	在计算规则中非法循环
1888	标识名称过长
1889	在多个关系的表中只能有一个子排序
1900

1903	字符串过长
1907	驱动器符号非法
1908	长度或小数位数参数无效
1910	非法的打印驱动程序循环
1911	环境需要本地化产品
1912	对于通用字段操作非法
1913	字段必须为通用型
1914	代码页编号无效
1915	找不到排序序列 <名称>
1916	为了使用该功能，在 CONFIG.FPW 文件中设置 CODEPAGE=AUTO 并重新起动 Visual FoxPro
1918	文件名称过长
1922	卷标不存在
1923	对象<名称>没找到
1924	<名称> 不是一个对象
1925	<名称>成员不能识别
1926	不能嵌套类定义
1927	类定义中的语句无效
1928	语句仅在类定义中有效
1929	<名称>只能用在一个方法中
1930	不能重定义 <名称>
1931	语句不在过程中
1932	<名称> 在挂起时不能关闭
1933	文件 <名称> 没有关闭
1934	语句仅在方法内有效
1935	当前对象没有从<名称>类中继承
1937	过程文件 <名称>没有找到
1938	对象没有包含在<名称>中
1939	WITH/ENDWITH 不匹配
1940	在 WITH/ENDWITH 范围之外，表达式无效
1942	不能将对象指定给数组
1943	成员<名称>不能求值成对象
1944	找不到生成器程序
1945	当前的对象已经释放
1946	项目文件版本错误
1947	表达式过于复杂
1948	不能修改正在使用的类
1949	类名无效
1950	类定义 <名称> 出现递归
1951	不能清除正在使用的对象
1953	只有在设计时才能使用特性
1954	生成器程序已运行
1955	WIN.INI 注册被破坏
1956	不能访问打印机
1957	打印机的假脱机访问发生错误
1958	载入打印机驱动程序时发生错误
1960	对<名称>变量的非法重新定义
1961	子目录或文件<名称>已经存在
1962	目录非空
1963	没有找到目录
1964	在WindowType 属性设置为READ 或者READ MODAL的表单、表单集中，没找到页框或页面
1965	表单或表单集的一个成员基于非可视类，不能写入 . VCX 文件
1966	数据环境已经加载
1967	数据环境已经卸载
1968	表单或表单集的一个成员基于非可视类，不能写入 .SCX 文件
1969	剪贴板包含了一个或者多个对象，这些对象不能添加到容器中，它们不能粘贴
1970	不能重新打开项目文件 <名称>
1971	在当前的 COMPILE 命令完成之后才能进行下一编译
1972	数组 <名称> 正在使用
1973	在建立<名称>表时发生错误
1974	数组不能赋给数组元素
1975	成员对象<名称> 没有实例化
1976	不能解决后链
1977	更新文件时需要独占打开文件，请重新打开文件
1978	不能以可视方式修改此种类型的类
1979	不能以可视方式修改派生自非可视类的类
1981	在<名称>文件中出现编译错误
1982	TO 子句只能对模式表单或表单集使用
1983	<名称> 对象不能返回一个值
1984	"<名称>"表的字段不与数据库入口匹配
1985	对象已有数据环境，不能使用 SaveAs 方法使用另一个环境
1986	GDI 内存太少，关闭一个或者多个窗口，重新进行操作
1987	不能以编程方式向表单设计器中添加对象
1988	当前值超出范围
1989	不能以编程方式删除表单设计器中的对象
1991	表单 <名称> 文件为以前的FoxPro版本，在执行之前请进行转换
1993	找不到类库文件 <名称>
1994	包含文件 <名称>没有找到
1995	在装载数据环境时发生错误。表正在使用
1996	字段 <名称>合法性规则不能得出逻辑型或者 NULL 型
1997	<名称>字段的默认值不能得到该字段的正确类型
1998	<名称> 的索引表达式中包含对备注字段、通用字段或者图片字段的非法引用
1999	函数不能完成任务


错误信息参数

使用 SYS(2018) 函数，可以将文件、字段或变量名作为
下列错误信息的参数返回。带有错误信息参数的错误信息
并不总是通过 SYS(2018) 函数返回参数。

"<临时表>" 必须由 SELECT ... INTO TABLE 创建。  (1815)

"<字段> | <变量>" 不唯一，必须加以限定。  (1832)

"<字段>" 没有与当前工作区建立关系。  (1165)

"<文件>" 不是 Visual FoxPro 的 .EXE 文件。  (1196)

"<文件>" 不是一个目标文件。  (1309)

"<名称>" 带区太大不能放入页中。  (1298)

"<名称>" 只能在方法中使用。  (1929)

"<名称>" 在挂起时不能关闭。  (1932)

"<名称>" 内部一致性错误。  (1462)

"<名称>" 是一个方法、事件或对象。  (1737)

"<名称>" 是只读属性。  (1740)

"<名称>" 不是文件变量。 (226)

"<名称>" 不是内存变量。  (225)

"<名称>" 不是数组。 (232)

"<名称>" 不是一个对象。 (1924)

"<名称>" 对象不能返回值。  (1983)

"<名称>"。 (1429)

子目录或文件 "<名称>" 已经存在。 (1961)

应用程序文件 "<文件>" 没有关闭。 (1178)

数组 "<名称>" 正在使用。 (1972)

不能添加 "<名称>"。类定义循环。  (1741)

不能在 SetAll 方法中更改 "<名称>" 属性。  (1758)

不能创建文件 "<文件>"。  (102)

在 DLL 中找不到入口点 "<名称>"。  (1754)

在数据库中找不到对象 "<名称>"。  (1562)

在当前数据库中找不到视图 "<名称>"。  (1563)

不能加载 32 位 DLL "<名称>"。  (1753)

不能对重定义 "<名称>"。  (1930)

不能重新打开项目文件 "<名称>"。 (1970)

类 "<名称>" 已经存在。  (1761)

类 "<名称>" 未注册。  (1434)

类 "<名称>" 正在使用。  (1776)

在类库中找不到类 "<名称>"。  (1576)

找不到类 "<名称>"。  (1762)

找不到类定义 "<名称>"。 (1733)

类定义 "<名称>" 出现递归。  (1950)

类文件 "<名称>" 无效。  (1747)

"<名称>" 的类文件名无效。  (1746)

找不到类库文件 "<名称>"。  (1993)

找不到排序序列 "<名称>"。  (1915)

文件 "<名称>" 编译时出错。 (1981)

连接 "<名称>" 忙。  (1541)

连接错误： "<名称>"  (1526)

含有正打开着的事务，数据工作期 #<编号> 不能释放。  (1549)

数据工作期 #<编号> 被迫回滚全部事务以避免死锁。  (1599)

数据库 "<别名>" 没有打开。  (1534)

数据库 "<名称>" : 不能访问文件。  (1569)

字段 "<名称>" 的 DataType 属性无效。  (1544)

将 "<名称>" 添加到对象时发生错误。成员或属性重名。  (1779)

创建表 "<名称>" 时发生错误。  (1973)

实例化临时表时发生错误。表 "<别名>" 不能打开。对象将被忽略。  (1554)

加载错误: "<错误>"  (1881)

表达式无效。请使用有效的表达式设置 "<名称>" 属性。  (1759)

致命错误<expN>，报告<expN>错误

"<名称>"字段不能为 NULL 值  (1581)

"<名称>"字段的有效性规则被破坏  (1582)

"<名称>"文件已经作为数据库的一部分存在  (1529)

文件 "<名称>" 是一个数据库。  (1553)

文件 "<名称>" 是一个无效的数据库.  (1551)

文件 "<名称>" 不是一个数据库。 (1552)

文件 "<名称>" 没有关闭.  (1933)

文件 "<名称>" 不是数据库的一部分。  (1558)

文件 "<名称>" 是数据库的一部分.  (1565)

表单文件 "<名称>" 来自以前版本的 FoxPro，在执行前需转换为当前格式。 (1991)

表单文件 "<名称>" 无效。  (1686)

非法重定义变量 "<名称>"。  (1960)

找不到包含文件 "<名称>"。  (1994)

无效的文件格式。如果是 dBASE 文件,必须首先进行转换。要转换此文件，请键入 MODIFY LABEL <标签文件名>.  (1510)

无效的更新列名 "<名称>"。   (1479)

键标记 "<标记名>" 无效。  (1255)

库文件 "<名称>" 无效。   (1691)

成员 "<名称>" 不是一个对象。  (1943)

成员 "<名称>" 是一个类成员。   (1760)

成员对象 "<名称>" 没有实例化。 (1975)

备注文件 "<名称>" 缺少或无效。  (41)

没有为要更新的表 "<名称>" 指定关键列，请使用临时表的 KeyFieldList 属性。  (1492)

无足够磁盘空间用于 "<文件名>"。  (56)

找不到对象 "<名称>"。  (1766)

找不到对象 "<名称>"。  (1923)

对象文件 "<文件名>" 使用了以前版本的 FoxPro 进行编译。  (1195)

对象文件 "<名称>" 正在使用，不能从内存中清除。  (1719)

此对象没有包含在 "<名称>" 中。  (1938)

未找到 ODBC 入口点 "<名称>"。  (1528)

OLE 错误码 0x "<名称>"。  (1426)

OLE IDispatch 异常码 "<名称>"。  (1427)

OLE 从"<名称>"返回非正常的代码"<编号>":"<名称>"  (1428)

父对象不允许对 "<名称>" 进行此属性设置。  (1767)

弹出式菜单太大，只显示前 <expN> 项。

找不到过程 "<过程名>"。  (1162)

找不到过程文件 "<名称>"。  (1937)

项目文件 "<名称>" 版本不对。  (1946)

属性 "<名称>" 已经存在。  (1763)

属性 "<名称>" 不是方法或事件。  (1738)

找不到属性 "<名称>"。  (1734)

属性 "<名称>" 受保护。  (1757)

属性 "<名称>" 只读。  (1743)

找不到队列 "<队列名>" 。  (1716)

找不到服务器 "<服务器名>"。  (1715)

SQL 参数 "<名称>" 无效。  (1499)

SQL: 找不到列 "<字段> | <变量>"。  (1806)

表 "<别名>" 有一个或者多个非结构索引已打开，请关闭这些索引，然后重试 Begin Transaction。  (1548)

表 "<名称>" 在数据库中已存在。  (1564)

表 "<名称>" 在一个关系中被引用。  (1577)

别名 "<名称>" 的表缓冲区含有不能予以实现的修改。  (1545)

当前对象不是由类 "<名称>" 继承而来。  (1935)

字段 "<名称>" 的默认值的求值结果不符合该字段的应有类型。  (1997)

表 "<名称>" 中的字段与数据库中的项不匹配。  (1984)

索引 "<名称>" 的索引表达式中包含对备注字段、通用字段或图片字段的无效引用。  (1998)

已有对象使用了名称 "<名称>"。请使用其他名称。  (1571)

由于索引 <名称> 的索引表达式或者筛选表达式无效，因而不能执行对表的更改操作。  (1531)

字段 "<名称>" 的有效性规则的求值结果不是逻辑型或 NULL 型。  (1996)

字段 "<名称>" 的 DataType 属性所要求的类型转换无效。  (1543)

索引 "<名称>" 不唯一。  (1884)

不能识别的错误码 <expN>。

不能识别的成员 "<名称>"。  (1925)

找不到变量 "<变量>"。  (12)

警告: 在记录 "<编号>" 处有无效的数据转换。  (1485)

警告: 在记录 "<编号>" 处有无效的备注字段转换。  (1486)

警告: 表 “别名” 中 KeyField 属性定义的关键字不唯一。  (1495)

警告: 下一个更改的 "<字符串>"已经被远程修改   (1484)

找不到工作表 "<名称>"。  (1775)


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

启动 Visual FoxPro

转换 FoxPro 2.6

使用设计器

使用工具栏

使用向导

使用生成器

使用宏

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

  开发国际应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

使用项目管理器

定制项目管理器

  编译应用程序

  优化应用程序

  开发国际应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

构造应用程序框架

在项目中添加文件

引用可修改的文件

连编应用程序

运行应用程序

  优化应用程序

  开发国际应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

深入了解 Rushmore 技术

优化 Rushmore 表达式

优化 Visual FoxPro 性能

提高性能的一般技巧

  开发国际应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

  开发国际应用程序

  使用代码页

  处理国际数据

  使用排序次序

  界面的考虑

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

  开发国际应用程序

  使用代码页

深入了解代码页

检查代码页标记

添加代码页标记

移去代码页标记

更改代码页

指定文本文件的代码页

确定项目文件的代码页

  处理国际数据

  使用排序次序

  界面的考虑

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

  开发国际应用程序

  使用代码页

  处理国际数据

输入国际字符

禁止对字符型或备注型字段中的数据进行转换

  使用排序次序

  界面的考虑

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

  开发国际应用程序

  使用代码页

  处理国际数据

  使用排序次序

深入了解排序次序

排序次序准则

指定排序次序

  界面的考虑

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  管理文件和应用程序

  编译应用程序

  优化应用程序

  开发国际应用程序

  使用代码页

  处理国际数据

  使用排序次序

  界面的考虑

创建消息

使用图标和位图

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  存储和查看表中的信息

  定制浏览窗口

  修改表

  定制表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  存储和查看表中的信息

创建新表

使用表设计器

查看表的内容

在表中移动

在表中添加新记录

删除记录

  定制浏览窗口

  修改表

  定制表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  存储和查看表中的信息

  定制浏览窗口

重新安排浏览窗口中的列

改变浏览窗口中列的宽度

打开或关闭网格线

拆分浏览窗口

  修改表

  定制表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  存储和查看表中的信息

  定制浏览窗口

  修改表

使用表设计器修改表

在表中添加字段

  定制表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  存储和查看表中的信息

  定制浏览窗口

  修改表

  定制表

筛选表

限制对字段的访问

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

建立索引

用索引设置记录顺序

使用索引

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

使用数据库

创建新数据库

在数据库中加入表

在表之间建立关系

在数据库中设置字段属性

在数据库中设置表属性

使用参照完整性

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

导入数据

追加数据

导出数据

  使用数据库

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

创建数据库

管理数据库

引用多个数据库

查看和修改数据库结构

使用数据字典功能

  设计表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

  使用触发器

  修改字段和结构

  处理记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

创建和编辑表的命令

创建数据库表

创建自由表

命名表

重命名表

复制表

删除数据库表

删除自由表

  创建字段

  实施商业规则

  使用触发器

  修改字段和结构

  处理记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

命名字段

给字段添加注释

创建字段的标题

选择数据类型

使用 Null 值

创建字段的默认值

  实施商业规则

  使用触发器

  修改字段和结构

  处理记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

在实施约束时

字段值的限制

在检查字段级规则时

检查记录级规则

  使用触发器

  修改字段和结构

  处理记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

  使用触发器

创建触发器

修改触发器

移去或删除触发器

  修改字段和结构

  处理记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

  使用触发器

  修改字段和结构

修改表结构

复制和编辑表结构

添加字段

删除字段

重新命名字段

设置或更改字段级规则或表规则

设置或更改默认值

  处理记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

  使用触发器

  修改字段和结构

  处理记录

添加记录

从其他表中获取要追加的记录

在表中编辑记录

在字段中输入 Null 值

对记录作删除标记

撤消记录的删除标记

删除带有删除标记的记录

  排序记录

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

  使用触发器

  修改字段和结构

  处理记录

  排序记录

创建索引关键字

添加索引关键字

设置主索引或候选索引

设置普通索引

使用其他索引类型

在表单中交互设置记录顺序

按降序访问记录

筛选数据

重建活动索引文件

  使用多个表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  创建表

  创建字段

  实施商业规则

  使用触发器

  修改字段和结构

  处理记录

  排序记录

  使用多个表

查看工作区

在工作区中打开表

在工作区中关闭表

创建用户自定义别名

临时相关表

  共享访问程序设计

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  创建表

  使用索引排序数据

  将表加入数据库

  导入和导出数据

  使用数据库

  设计表

  共享访问程序设计

在文件中访问数据

限制对数据的访问

使用数据工作期

缓冲访问数据

检测并解决冲突

使用事务处理

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

创建查询

选定要查询的字段

选定所需的记录

排序查询结果

分组查询结果

定向输出查询结果

运行查询

  使用视图更新数据

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  创建视图

  设置更新条件

  定制视图

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  创建视图

使用向导创建视图

创建本地表视图

创建新远程视图

  设置更新条件

  定制视图

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  创建视图

  设置更新条件

使表可更新

设置关键字段

使表中的指定字段可更新

使所有字段可更新

控制如何检查更新冲突

  定制视图

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  创建视图

  设置更新条件

  定制视图

在远程视图中添加表达式

创建提示值视图

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

将视图和表添加到查询中

设置和更改联接条件

在视图中使用多个表

在视图中使用多个远程表

  创建多表视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

  创建多表视图

  创建视图

  使用多表视图

  优化视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

  创建多表视图

  创建视图

创建本地视图

创建多表视图

定义连接

设置 ODBC 数据源

创建远程视图

创建参数化视图

重新命名视图

删除视图

  使用多表视图

  优化视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

  创建多表视图

  创建视图

  使用多表视图

使用视图

打开视图的多个实例

显示视图结构

在视图中更新数据

在视图中更新多个表

在视图中集成本地数据和远程数据

控制连接和视图对象

  优化视图

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

  创建多表视图

  创建视图

  使用多表视图

  优化视图

设置最大下载记录数

共享连接

为视图字段创建默认值

在视图的字段和数据行上创建规则

  向应用程序中添加查询

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  查询数据

  使用视图更新数据

  查询和更新多表

  创建多表视图

  向应用程序中添加查询

以编程方式添加查询

将结果存储到表、数组或临时表中

在窗口中显示结果

创建交叉表查询

创建图形

集成查询和报表

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

创建表单

修改表单

定制表单

保存表单

运行表单

  设计表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  创建数据环境

  向表单中添加对象

  处理对象

  使用表单集

  管理表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  创建数据环境

设置数据环境

向数据环境中添加表或视图

从数据环境设计器中拖动字段和表

从数据环境中移去表

在数据环境中设置关系

在数据环境中编辑关系

运行时在本地和远程数据之间切换

  向表单中添加对象

  处理对象

  使用表单集

  管理表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  创建数据环境

  向表单中添加对象

深入了解容器和控制对象

Collection 和 Count 属性

向表单中添加 Visual FoxPro 控制

在表单中添加表字段

在表单中添加用户自定义对象

从类库中添加对象到表单

在表单或表单集合中包含预定义常量

给表单指定图标

  处理对象

  使用表单集

  管理表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  创建数据环境

  向表单中添加对象

  处理对象

确定表单中的控制数目

命名表单对象

将表单链接到表单对象变量

添加属性和方法

创建数组属性

创建新方法

在设计时设置属性

编辑事件代码和方法代码

在运行时设置属性

在运行时调用方法

  使用表单集

  管理表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  创建数据环境

  向表单中添加对象

  处理对象

  使用表单集

创建新的表单集

在表单集合中添加和移去表单

  管理表单

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  创建数据环境

  向表单中添加对象

  处理对象

  使用表单集

  管理表单

关闭活动的表单

隐藏表单

释放表单

将参数传递到表单

从表单返回值

管理表单的多个实例

为表单或表单集设置设计区

使用表单模板和表单集模板

指定默认的表单模板

  设计类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  创建类

  修改类

  在应用程序中使用类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  创建类

创建类库

创建新类

将表单和控制保存为类

复制类库中的类

删除类库中的类

  修改类

  在应用程序中使用类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  创建类

  修改类

将属性和方法添加到类

为类指定设计时的外观

修改类定义

  在应用程序中使用类

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  创建类

  修改类

  在应用程序中使用类

将类添加到表单、表单集和工具栏中

创建类定义的子类

以编程方式从类中创建对象

  使用控制

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  文本框

  列表框

  表格

  选项按钮组

  其他控制

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  文本框

检验文本框中的数据是否有效

当文本框得到焦点后选择文本

在文本框中接收用户口令

  列表框

  表格

  选项按钮组

  其他控制

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  文本框

  列表框

创建具有多列的列表框

允许用户选择列表框中的多项

允许用户在列表框中添加项

允许用户在列表中选择一个值来转到某个记录

根据列表值刷新一对多显示

在列表中显示子记录

将图片添加到列表项中

  表格

  选项按钮组

  其他控制

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  文本框

  列表框

  表格

将表格添加到表单

设置表格列数

在设计时人工调整表格的显示

设置表格中显示的数据源

使用表格控制创建一对多表单

在表格列中显示控制

在表格中进行有条件格式编排

  选项按钮组

  其他控制

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  文本框

  列表框

  表格

  选项按钮组

设置选项按钮组中的选项按钮数目

设置选项按钮的属性

判断当前选定的按钮

使用选项按钮将用户的选择存储到表中

  其他控制

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  文本框

  列表框

  表格

  选项按钮组

  其他控制

使用复选框

在编辑框中对选定文本进行处理

在微调控制中设置用户输入值的范围

通过组来管理命令按钮的选择

计时器控制的初始化

在控制中使用图片掩码

  使控制更容易使用

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  使控制更容易使用

设置访问键

设置工具提示文本

启用和废止组中的按钮

  允许拖放操作

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  使控制更容易使用

  允许拖放操作

在用户释放对象时的响应

指示释放的有效区

控制拖动的开始和停止时间

引起控制移动

  添加页框

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  在表单中显示数据

  设计表单

  设计类

  使用控制

  选择控制

  使控制更容易使用

  允许拖放操作

  添加页框

将页框添加到表单中

创建选项卡式对话框

将控制添加到页面上

管理选项卡的长标题

在程序中换页面

  报表和标签

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  设计报表和标签

  向应用程序中添加报表

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  设计报表和标签

设计报表

创建报表布局

创建邮件标签布局

修改布局

定制布局

在布局上分组数据

控制报表控制的打印

预览结果

打印报表

  向应用程序中添加报表

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  设计报表和标签

  向应用程序中添加报表

控制报表的数据源

创建一对多报表

定义报表变量

使用报表带区事件

控制报表和标签的输出

暂时更改报表的打印机设置

集成查询和报表

  菜单和工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  设计菜单

  创建自定义工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  设计菜单

创建菜单系统

定制菜单系统

  创建自定义工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  设计菜单

  创建自定义工具栏

定制 Visual FoxPro 工具栏

定义工具栏类

在表单集中添加自定义工具栏

协调菜单和用户自定义工具栏

  数据共享

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  与其他应用程序共享数据

  向应用程序中添加 OLE

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  与其他应用程序共享数据

复制和粘贴数据

创建邮件合并

在 Visual FoxPro 中发送邮件

链接或嵌入数据

  向应用程序中添加 OLE

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  与其他应用程序共享数据

  向应用程序中添加 OLE

在表中添加 OLE 对象

在表单中添加 OLE 对象

使用 OLE 对象的属性

使用 OLE 对象的方法

访问成组的 OLE 对象

使用 OLE 对象的数组

  程序设计


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

创建程序

控制程序流程

使用过程和用户自定义函数

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

处理用户自定义函数

处理字段和记录

处理数组

处理类和对象

处理 Null 值

  面向对象程序设计

  设计类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  使用属性、事件和方法

  使用类和对象

  设计类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  使用属性、事件和方法

设置属性

调用方法

响应事件

指派方法代码和事件代码

  使用类和对象

  设计类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  使用属性、事件和方法

  使用类和对象

保护类成员

在容器类中添加对象

检查对象是否存在

创建成员数组

创建对象数组

集成对象和数据

  设计类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  创建类

  修改类

  在应用程序中使用类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  创建类

创建类库

创建新类

复制类库中的类

删除类库中的类

  修改类

  在应用程序中使用类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  创建类

  修改类

将属性和方法添加到类中

为类指定设计时的外观

修改类定义

  在应用程序中使用类

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  创建类

  修改类

  在应用程序中使用类

将类添加到表单、表单集和工具栏中

创建类定义的子类

以编程方式从类中创建对象

  编译应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  编译应用程序

构造应用程序框架

在项目中添加文件

引用可修改的文件

连编应用程序

运行应用程序

  测试和调试


使用 Visual FoxPro
与程序设计和使用 Visual FoxPro 有关的提示和技术

打印文档的更新

  入门指南

  项目和应用程序

  数据库和表

  查询和视图

  表单

  报表和标签

  菜单和工具栏

  数据共享

  程序设计

  简要介绍

  在 Visual FoxPro 中工作

  面向对象程序设计

  设计类

  编译应用程序

  测试和调试

分别测试各个组件

使用调试工具

添加测试代码

解决问题

错误处理


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

窗口

向导

生成器

工具栏

菜单命令

对话框


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

类设计器

连接设计器

数据库设计器

数据环境设计器

表单设计器

标签设计器

菜单设计器

查询和视图设计器

报表设计器

表设计器

窗口

向导

生成器

工具栏

菜单命令

对话框


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

窗口

浏览窗口

代码窗口

命令窗口

调试窗口

编辑窗口

通用字段窗口

项目管理器窗口

属性窗口

跟踪窗口

查看窗口

向导

生成器

工具栏

菜单命令

对话框


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

窗口

向导

交叉表向导

表单向导

图形向导

分组/总计报表向导

导入向导

标签向导

本地视图向导

邮件合并向导

一对多表单向导

一对多报表向导

数据透视表向导

查询向导

远程视图向导

报表向导

表向导

生成器

工具栏

菜单命令

对话框


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

窗口

向导

生成器

自动格式生成器

组合框生成器

命令组生成器

编辑框生成器

表达式生成器

表单生成器

表格生成器

列表框生成器

选项组生成器

参照完整性生成器

文本框生成器

工具栏

菜单命令

对话框


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

窗口

向导

生成器

工具栏

调色板工具栏

数据库设计器工具栏

表单控制工具栏

表单设计器工具栏

布局工具栏

打印预览工具栏

查询设计器工具栏

报表控制工具栏

报表设计器工具栏

常用工具栏

表单设计器工具栏

菜单命令

对话框


界面参考
菜单、对话框、窗口、设计器、向导、生成器和工具栏

设计器

窗口

向导

生成器

工具栏

菜单命令

类菜单

控制菜单

数据库菜单

数据环境菜单

编辑菜单

文件菜单

表单菜单

格式菜单

帮助菜单

菜单菜单

程序菜单

项目菜单

查询菜单

报表菜单

表菜单

工具菜单

查看菜单

窗口菜单

对话框


界面参考菜单、对话框、窗口、设计器、向导、生成器和工具栏
对话框

A

关于 Microsoft Visual FoxPro 对话框

添加表或视图对话框

高级选项对话框

追加来源对话框

追加来源选项对话框

B

浏览窗口

连编对话框

C

更改图标对话框

更改源对话框

选择字段/变量对话框

类信息对话框

代码页对话框

代码窗口

列注脚对话框

列标头对话框

命令窗口

编译对话框

转换选项对话框

创建对话框

定制工具栏对话框

D

数据分组对话框

调试窗口

删除（记录）对话框

说明对话框

细节对话框

执行对话框

E

编辑关系对话框

编辑属性/方法对话框

编辑选项卡，选项对话框

编辑窗口

导出对话框

导出选项对话框

表达式生成器

表达式生成器选项对话框

F

字段选择器对话框

文件管理器对话框

查找对话框

字体对话框（格式菜单）

字体对话框（表菜单）

表单模板对话框

格式（字段）对话框

表单集模板对话框

G

通用字段窗口

通用选项对话框

生成菜单对话框

转到行对话框

转到记录对话框

网格属性对话框

组注脚对话框

组标头对话框

H

条件对话框

I

导入对话框

包含文件对话框

插入对象对话框

J

联接条件对话框

K

键定义对话框

L

链接对话框

定位记录对话框

M

宏编辑对话框

宏键定义对话框

宏对话框

菜单选项对话框

Microsoft 系统信息对话框

其他窗口对话框

N

菜单位置对话框

新对话框

新类对话框

新<文件> 对话框

新标签对话框

新本地视图对话框

新方法对话框

新属性对话框

新远程视图对话框

新表对话框

O

对象排序对话框

一对多对话框

打开对话框

打开（表）对话框

选项对话框

改写宏对话框

P

主菜单名对话框

页注脚对话框

页标头对话框

页面设置对话框

选择性粘贴对话框

打印对话框

打印文件对话框

打印选项对话框

打印设置对话框

打印条件对话框

项目信息对话框

项目管理器窗口

提示选项对话框

属性窗口

Q

查询去向对话框

快速报表对话框

R

恢复记录对话框

矩形/线条对话框

重命名文件对话框

替换对话框

替换记录对话框

报表表达式对话框

报表图片对话框

报表变量对话框

还原宏对话框

圆角矩形对话框

标尺/网格对话框

运行应用程序对话框

S

另存为对话框

另存为类对话框

保存宏对话框

范围对话框

选择连接或数据源对话框

选择目录对话框

设置索引顺序对话框

拼写检查对话框

拼写检查选项对话框

停止记录宏对话框

分类汇总或计算字段对话框

总结对话框

T

表属性对话框

标题对话框

标题/总结对话框

工具栏对话框

跟踪窗口

U

V

视图参数对话框

查看窗口

W

向导选择对话框

工作区属性对话框

X

Y

Z


启动 Visual FoxPro

请参阅

安装结束后，便可以启动 Visual FoxPro。

� 启动 Visual FoxPro

 •	   双击 Visual FoxPro 图标。

第一次启动 Visual FoxPro 时，项目管理器将创建一个新的空项目。您可以在该项目中添加已有的项，或者在其中创建新项。

从“文件”菜单中选择“新建”命令，可以随时创建新项目。

� 若要创建新项目

1.	从“文件”菜单中选择“新建”。

2.	选择“项目”，然后选择“新文件”。

3.	在“创建”对话框中，输入新项目的名称。

4.	选择“创建”。


请参阅

创建对话框

新建（文件菜单）

项目管理器


使用项目管理器

请参阅

在建立表、数据库、查询、表单、报表或创建应用程序时，项目管理器可用来组织和管理文件。若要处理项目中某一种特定类型的文件，可单击相应的选项卡。

利用项目管理器，可以在项目中添加或移去文件、创建新文件或修改已有文件、查看表的内容以及把文件与其他项目关联起来。

若要	请参阅
在项目中添加或移去文件	添加或移去文件
在项目中创建新文件或修改已有的文件	创建和修改文件
查看项目中的表	查看表
将文件与其他项目关联	将一个项目中的文件添加到另一个项目中


请参阅

添加或移去文件

将一个项目中的文件添加到另一个项目中

创建和修改文件

项目管理器

查看表


添加或移去文件

请参阅

要想使用项目管理器，必须在其中添加已有的文件或者用它来创建新的文件。

� 若要在项目中加入文件

1.	选择要添加项的类型。

2.	选择“添加”。

3.	在“打开”对话框中，选择要添加的文件名，然后选择“确定”。

� 若要从项目中移去文件

1.	选定要移去的内容。

2.	选择“移去”。

3.	在提示框中选择“移去”。

如果要从计算机中删除文件，请选择“删除”。


请参阅

打开文件（项目菜单）

项目管理器

项目菜单


创建和修改文件

请参阅

项目管理器简化了创建和修改文件的过程。只需选定要创建或修改的文件类型，然后选择“新建”或“修改”按钮，Visual FoxPro 将显示与所选文件类型相应的设计工具。

� 若要创建添加到项目管理器中的文件

1.	选定要创建的内容。

2.	选择“新建”。

对于某些项，您可以利用向导来创建文件。

� 若要修改文件

1.	选定一个已有的文件。

2.	选择“修改”。


请参阅

项目管理器

项目菜单


查看表

请参阅

从项目管理器中可以浏览项目中表的内容。

� 若要浏览表

1.	选择“数据”选项卡。

2.	选定一个表并选择“浏览”。


请参阅

浏览文件（项目菜单）

浏览窗口

项目管理器


将一个项目中的文件添加到另一个项目中

请参阅

您可以同时打开多个项目，并可以把文件从一个项目拖动到另一个项目中。由于项目只保存了对文件的引用，所以文件并没有被真正复制。文件可以同时和多个不同的项目关联。

� 若要从一个项目向另一个项目中添加文件。

1.	在项目管理器中选定文件。

2.	把文件拖到另一个项目中。


请参阅

添加文件（项目菜单）

项目管理器


定制项目管理器

请参阅

项目管理器显示为一个独立的窗口。您可以移动它的位置、改变它尺寸或者将它折叠起来只显示选项卡。

� 若要移动项目管理器

 •	   将鼠标指针指向标题栏，然后将“项目管理器”拖到屏幕上的其他位置。

� 要改变项目管理器窗口的大小

 •	   将鼠标指针指向“项目管理器”窗口的顶端、底端、两边或角上，拖动鼠标即可扩大或缩小它的尺寸。

� 若要折叠项目管理器

 •	   单击右上角的上箭头。

您可以很容易地将项目管理器还原为通常大小。

� 若要还原项目管理器

 •	   单击右上角的下箭头。

折叠项目管理器后，您可以拖开选项卡，并根据需要重新安排它们的位置。拖下某一选项卡后，它可以在 Visual FoxPro 的主窗口中独立移动。

� 若要拖开某一选项卡

1.	折叠项目管理器。

2.	选定一个选项卡，将它拖离项目管理器。

当选项卡处于浮动状态时，通过在选项卡中单击鼠标右键可以访问“项目”菜单中的选项。

如果您希望选项卡始终显示在屏幕的最表层，可以单击选项卡上的图钉图标，这样，该选项卡就会一直保留在其他 Visual FoxPro 窗口的上面。您可以使多个选项卡都处于“顶层显示”的状态。再次单击图钉图标可以取消选项卡的“顶层显示”设置。

� 若要还原选项卡

 •	   单击选项卡上的 X 按钮。

 — 或者 —

 •	   将选项卡拖回到项目管理器。

您还可以“停放”项目管理器，使它象工具栏一样显示在 Visual FoxPro 主窗口的顶部。

� 若要停放项目管理器

 •	   将项目管理器拖到 Visual FoxPro 主窗口的顶部。


请参阅

项目管理器


使用设计器

请参阅

利用项目管理器，您可以快速访问 Visual FoxPro 的各种设计器。这些工具使得创建表、表单、数据库、查询和报表以管理数据变得轻而易举。

若要	请使用此设计器
创建表和设置表中的索引	表设计器
在本地表中运行查询	查询设计器
在远程数据源上运行查询；创建可更新的查询	视图设计器
创建表单以便在表中查看和编辑数据	表单设计器
建立用于显示和打印数据的报表	报表设计器
建立数据库；在不同的表之间查看并创建联系	数据库设计器
为远程视图创建连接	连接设计器
� 若要用设计器创建新文件

 •	   在项目管理器中选择待创建文件的类型，选择“新建”。


请参阅

连接设计器

数据库设计器

表单设计器

项目管理器

查询设计器

报表设计器

表设计器

视图设计器


使用工具栏

请参阅

每种设计器都有一个或多个工具栏，您可以很方便地使用大多数常用的工具功能。

� 若要显示工具栏

1.	从“查看”菜单中选择“工具栏”。

2.	在“工具栏”对话框中，选择要使用的工具栏。

3.	选择“确定”。

提示

将鼠标指针放在任何按钮上，“工具提示”中就会显示它的名称，状态栏上将显示有关它的说明。

� 若要停放工具栏

 •	   将工具栏拖到屏幕的顶部、底部或两边。

� 若要浮动工具栏

1.	将光标指向工具栏的灰色区域（不是按钮上）。

2.	拖开工具栏。

 —或者—

双击灰色区域。

若要使用	请使用此工具栏
任何设计器	常用工具栏
类设计器或表单设计器	表单设计器工具栏 表单控制工具栏 布局工具栏 调色板工具栏
数据库设计器	数据库设计器工具栏
标签设计器或报表设计器	报表设计器工具栏 报表控制工具栏 打印预览工具栏 布局工具栏 调色板工具栏
查询设计器	查询设计器工具栏
视图设计器	视图设计器工具栏


请参阅

类设计器

调色板工具栏

定制Visual FoxPro工具栏

数据库设计器

数据库设计器工具栏

表单控制工具栏

表单设计器工具栏

表单设计器

标签设计器

布局工具栏

打印预览工具栏

查询设计器工具栏

查询设计器

报表控制工具栏

报表设计器工具栏

报表设计器

常用工具栏

工具栏

视图设计器工具栏

视图设计器


使用向导

请参阅

向导是交互式的程序，能帮助您快速完成一般性的任务，例如，创建表单、设置报表格式和建立查询。

通过在向导的一系列屏幕显示中回答问题或选择选项，可以让向导建立一个文件，或者根据您的响应完成一项任务。

� 若要启动向导

1.	在项目管理器中选定要创建文件的类型，然后选择“新建”。

您也可以从“文件”菜单中选择“新建”，然后选择待创建文件的类型。

2.	选择“向导”。

利用“工具”菜单中的“向导”，您可以直接访问大多数向导。有关使用向导的详细内容，请参阅定位向导屏幕。

若要	请使用此向导
创建交叉表查询	交叉表向导
创建表单	表单向导
创建图形	图形向导
利用分组和总计 创建报表	分组/总计报表向导
导入或追加数据	导入向导
创建邮件标签	标签向导
创建邮件合并文件	邮件合并向导
创建一对多表单	一对多表单向导
创建一对多报表	一对多报表向导
创建数据透视表	数据透视表向导
创建查询	查询向导
创建报表	报表向导
创建远程视图	远程视图向导
创建表	表向导
创建视图	本地视图向导


请参阅

交叉表向导

表单向导

图形向导

分组/总计报表向导

导入向导

标签向导

本地视图向导

邮件合并向导

定位向导屏幕

一对多表单向导

一对多报表向导

数据透视表向导

项目管理器

查询向导

远程视图向导

报表向导

表向导

向导（工具菜单）


定位向导屏幕

请参阅

启动向导后，要依次回答每一屏幕所提出的问题。在准备好进行下一个屏幕的操作时，可选择“下一步”按钮。

如果操作中出现错误，或者原来的想法发生了变化，可选择“上一步”按钮来查看前一屏幕的内容，以便进行修改。选择“取消”将退出向导而不会产生任何结果。如果在使用过程中遇到困难，请按 F1 键取得帮助。

到达最后一屏后，如果您准备退出向导，请选择“完成”按钮。

如果您很忙，可以选择“完成”按钮直接走到向导的最后一步，跳过中间所要输入的选项信息，而使用向导提供的默认值。

保存向导结果

根据所用向导的类型，每个向导的最后一屏会要求您提供一个标题，并给出保存、浏览、修改或打印结果的选项。

使用“预览”选项，可以在结束向导中的操作前查看向导的结果。如果需要做出不同的选择来改变结果，您可以返回到前边重新进行选择。对向导的结果满意后，请选择“完成”按钮。


请参阅

使用向导


使用生成器

请参阅

生成器是选项卡式的对话框，它可以简化创建和修改表单及复杂控制的工作。每个生成器显示一系列选项卡，从中可以设置选定对象的属性。有某些控制的生成器，表单生成器，格式控制生成器，和在数据库表之间创建参照完整性的生成器。

� 若要生成一个控制

 •	   从表单控制工具栏中，选择“生成器”锁定按钮。每当将一个新的控制添加到表单中时，Visual FoxPro 显示适当的生成器。

 — 或者 —

 •	   选择表单上的一个控制，在属性窗口.中选择“生成器”按钮。

� 若要使用表单生成器

 •	   从“表单”菜单中，选择“快速表单”。

表单上有了几个控制后，可以用“自动格式生成器”同时对它们进行格式编排。

� 若要对几个控制进行格式编排

1.	在表单设计器中，选择控制。

2.	从表单设计器工具栏中，选择“自动格式”按钮。

当显示生成器时，选择每一个选项卡上的选项，然后选择“确定”按钮来对所作的更改进行注册。

若要	请参阅
生成组合框	组合框生成器
生成命令组	命令组生成器
生成编辑框	编辑框生成器
生成表单	表单生成器
生成表格	表格生成器
生成列表框	列表框生成器
生成选项组	选项组生成器
生成文本框	文本框生成器
对一组控制进行格式编排	自动格式生成器
在数据库表之间创建参照完整性	参照完整性生成器


请参阅

自动格式生成器

组合框生成器

命令组生成器

编辑框生成器

表单生成器

表单控制工具栏

表单设计器工具栏

表单设计器

表格生成器

列表框生成器

选项组生成器

属性窗口

参照完整性生成器

文本框生成器

使用参照完整性

使用工具栏

使用向导


构造应用程序框架

请参阅

一个经过良好组织的 Visual FoxPro 应用程序一般需要为用户提供菜单；提供一个或多个表单，供数据输入并显示。此外，还需要提供查询和报表，允许用户从数据库中选取信息。创建一个 Visual FoxPro 应用程序除了要创建应用程序的功能组件外，还需要进行下列工作：

 •	   设置主程序

 •	   控制应用程序环境

 •	   控制事件循环

 •	   连编应用程序


请参阅

连编应用程序

控制应用程序环境

控制事件循环

表单设计器

菜单设计器

查询设计器

项目管理器

报表设计器

设置起始点


设置起始点

请参阅

主文件是应用程序的起始执行点，它可以是项目中的任意一个程序、表单或查询。

� 若要设置应用程序的起始点

1.	在项目管理器中，选择要设置为主文件的文件。

2.	从“项目”菜单中选择“设置主文件”命令。

若要	请参阅
创建一个主程序	构造主程序
创建一个主表单	构造主表单


请参阅

项目管理器

构造主表单

构造主程序


构造主程序

请参阅

您可以建立一个主程序，调用应用程序框架中的各功能组件。然后由这些组件调用应用程序的其余部件。

� 若要建立一个简单的主程序

1.	先设置应用程序环境。

2.	确定初始用户界面。

3.	建立事件循环。

4.	应用程序退出时，恢复环境。

例如，您的主程序可以是这样的：

DO setup.prg

DO mainmenu.mpr

READ EVENTS

DO cleanup.prg


请参阅

创建程序

DO 命令

控制事件循环

READ 命令

设置应用程序环境


构造主表单

请参阅

通常，最好的办法是在应用程序中包括主程序，由它发出 READ EVENTS 命令。不过，您也可以将一个表单或表单集作为主程序，把主程序功能和初始用户界面结合起来。

� 若要建立一个主表单

1.	首先，在与表单或表单集 Load 事件相关的方法中添加代码，保存初始环境。

2.	建立表单或表单集的数据环境。

3.	在与表单或表单集 Unload 事件相关的方法中恢复初始环境。


请参阅

表单设计器

构造主程序

Load 事件

READ EVENTS 命令

Unload 事件


设置应用程序环境

请参阅

一种比较好的设计方法是在初始化代码中保存原来的环境设置并为应用程序设置其本身所需的环境。此外，可能还需要在其中包含进行如下工作的代码：

 •	   初始化变量。

 •	   建立默认路径。

 •	   用 SET LIBRARY 命令引用外部库文件和过程文件。

例如，如果您想知道 SET TALK 命令的默认值，并需要保存该值，然后再将应用程序的 TALK 设置为 OFF，那么您可以将下列代码放到初始化过程中：

IF SET('TALK') = "ON"

SET TALK OFF

cTalkVal = "ON"

ELSE

cTalkVal = "OFF"

ENDIF


请参阅

SET LIBRARY 命令

SET TALK 命令

构造主程序


控制事件循环

请参阅

在设置环境并且显示初始用户界面之后，您就可以着手建立事件循环，以等待用户操作并进行响应。

� 若要控制事件循环

1.	使用 READ EVENTS 命令。

此命令发出后，Visual FoxPro 就开始处理事件。

2.	使用 CLEAR EVENTS 命令停止处理事件。

注意

在启动事件循环之前需要建立一种退出事件循环的方法，而且必须确保界面有这种发出 CLEAR EVENTS 命令的机制（例如“退出”按钮或菜单命令）。如果没有这样做，那么您可能会发现自己陷于死循环中，这时就需要按 ESC 键或者重新启动计算机。


请参阅

CLEAR EVENTS 命令

READ EVENTS 命令

设置应用程序环境

构造主表单

构造主程序


将文件加入到项目中

请参阅

在建好应用程序框架之后，就可以开始将其他文件加入项目中，并将其功能并入应用程序中。将文件添加到某一项目中的最有效方法是连编此项目。

� 若要添加文件到某一项目中

 •	   在项目管理器中，选择“添加”按钮。

— 或者 —

 •	   在属于该项目的一个文件中加入对新文件的引用并连编该项目。

例如，若要添加一个调用 Orders 的新表单，可以在一个菜单项中添加下面的命令：

DO FORM ORDERS.SCX


请参阅

连编应用程序

连编项目并显示错误

DO FORM 命令

项目管理器


连编项目并显示错误

请参阅

若要确保引用的完整，并加入自上次连编之后更新了的一些组件，可对项目进行连编。

� 若要连编一个项目

1.	在项目管理器中，选择“连编”按钮。

2.	在“连编选项”对话框中，选择“重新连编项目”选项。

3.	选择所需的其他选项并选择“确定”按钮。

 — 或者 —

 •	   使用 BUILD PROJECT 命令。

例如，若要连编项目 MYPROJ.PJX，可键入：

BUILD PROJECT myproj


请参阅

连编 （项目菜单）

BUILD PROJECT 命令

EXTERNAL 命令

项目管理器

使用调试工具


连编应用程序

请参阅

如果连编项目之后没有产生错误信息，就可以开始连编应用程序。

� 若要连编一个应用程序

1.	在“项目管理器”中，选择“连编”按钮。

2.	在“连编选项”对话框中，选择“连编应用程序”。

3.	选择所需的其他选项并选择“确定”按钮。

 — 或者 —

 •	   使用 BUILD APP 命令。

例如，若要根据项目 MYPROJ.PJX 连编得到一个应用程序 MYAPP.APP，可键入：

BUILD APP myapp FROM myproj


请参阅

连编 （项目菜单）

BUILD APP 命令

连编项目并显示错误

项目管理器


引用可修改的文件

请参阅

包含在应用程序中的表是只读的。如果项目中含有可供用户修改的表或其他文件，则编译时这些文件必须被排除在外。

� 若要排除可修改文件

1.	在项目管理器.中，选择可修改文件。

2.	从“项目”菜单中，选择“排除”命令。

如果该文件已经被排除，则只有“包含”菜单项可见。

排除的文件在其文件名左边有排除符号。

提示

若要一次性查看所有项目文件，可从“项目”菜单中选择“项目信息”，然后选择“文件”选项卡。


请参阅

连编应用程序

项目管理器


运行应用程序

请参阅

在项目连编过程中如果没有报告编译错误，您就可以开始运行应用程序了。

� 若要运行应用程序

 •	   从“程序”菜单中选择“执行”命令，然后选择要执行的应用程序。

 — 或者 —

 •	   在命令窗口中，键入 DO 和应用程序文件名。

例如，要运行应用程序 MYAPP，可键入：

DO myapp


请参阅

命令窗口

DO 命令

连编应用程序

使用调试工具


掌握 Rushmore 技术
深入了解 Rushmore 技术

请参阅

Rushmore 技术是一种快速高效访问记录集合的数据访问技术。Rushmore 技术最大限度地利用了压缩索引的优点，而又不受限于只使用这种索引。

在最简单的形式下，Rushmore 根据已有索引使用 FOR 子句 指定某一范围的记录来加速单表命令的执行。Rushmore 也可以加速其他一些命令的操作，如 LOCATE 和 INDEX.。

若要	请参阅
将 Rushmore 应用于表	在表中使用 Rushmore
以命令方式使用 Rushmore	带有 FOR 子句的潜在可优化命令
优化 Rushmore 表达式	优化 Rushmore 表达式
不使用 Rushmore	关闭 Rushmore
了解不使用 Rushmore 的情况	无 Rushmore 的操作


请参阅

组合基本可优化表达式

创建基本可优化表达式

关闭 Rushmore

FOR 子句

INDEX 命令

LOCATE 命令

无 Rushmore 的操作

优化 Rushmore 表达式

带有 FOR 子句的潜在可优化命令

在表中使用 Rushmore


在表中使用 Rushmore

请参阅

您可以根据所涉及表的数目，使用 Rushmore 技术优化对数据的访问。

� 若要使用 Rushmore

请选择下列选项：

 •	   若要访问单表数据，请使用 FOR 子句。

— 或者 —

 •	   若要访问多个表的数据，请使用 SELECT - SQL 命令。

访问单表时，可以在任何 FOR 子句出现的地方使用 Rushmore。访问多表时，SELECT-SQL 查询将取代所有的 Rushmore。SQL 确定如何优化查询并自动执行此项工作。您不需要打开表或索引，如果 SQL 决定需要索引，它会创建临时索引供自己使用。


请参阅

FOR 子句

SELECT - SQL 命令


带有 FOR 子句的潜在可优化命令

请参阅

AVERAGE	BLANK
BROWSE	CALCULATE
CHANGE	COPY TO
COPY TO ARRAY	COUNT
DELETE	DISPLAY
EDIT	EXPORT TO
INDEX	JOIN WITH
LABEL	LIST
LOCATE	RECALL
REPLACE	REPLACE FROM ARRAY
REPORT	SCAN
SORT TO	SUM
TOTAL TO


请参阅

Rushmore 技术


无 Rushmore 的操作

请参阅

在下列几种情况下数据检索操作不使用 Rushmore 优化技术：

 •	   当 Rushmore 不能优化潜在可优化命令中的 FOR 子句时。有关创建一个可优化 FOR 表达式的详细内容，请参阅创建基本可优化表达式

 •	   当可从 Rushmore 中受益的命令包含 WHILE 子句 时。

 •	   当内存较少时。这时，数据检索将继续进行，但不被优化。


请参阅

组合基本可优化表达式

创建基本可优化表达式

FOR 子句

WHILE 子句


关闭 Rushmore

请参阅

尽管要关闭 Rushmore 的情况很少，但有时确实需要关闭。当您发出一个使用 Rushmore 的命令时，Visual FoxPro 立即决定哪些记录符合 FOR 子句表达式的要求，然后再由此命令操作这些匹配记录。

� 若要对单条命令关闭 Rushmore

 •	   使用 NOOPTIMIZE 子句。

例如，下面的 LOCATE 命令就没有被优化：

LOCATE FOR DueDate < {01/01/95} NOOPTIMIZE

使用 SET OPTIMIZE 命令，可以在全局范围内关闭或启用所有能受益于 Rushmore 的命令的 Rushmore 功能。


请参阅

SET OPTIMIZE 命令


优化 Rushmore 表达式

请参阅

Rushmore 技术取决于 FOR 子句中是否出现基本可优化表达式 。一个基本可优化表达式可以是整个表达式，也可以是表达式的一部分。您也可以对基本表达式进行各种组合构成复杂的可优化表达式。

若要	请参阅
创建可优化表达式	创建基本可优化表达式
优化表达式的一部分	组合基本可优化表达式
组合表达式	组合复杂表达式


请参阅

组合基本可优化表达式

组合复杂表达式

创建基本可优化表达式


创建基本可优化表达式

请参阅	示例

基本可优化表达式一般是下面两种形式：

eIndex relOp  eExpr

eExpr relOp  eIndex

基本可优化表达式具有以下特点：

 •	   eIndex 必须精确地匹配用以构造索引的表达式，且不包含别名。

 •	   eExpr 是任意表达式，可以包含变量和其他不相关表中的字段。

 •	   relOp 是下列关系操作符之一：<、>、=、<=、>=、<>、#、== 或 !=。您也可以使用 ISNULL( )、BETWEEN( ) 或 INLIST( ) 函数。

� 若要在可优化表达式中使用 BETWEEN 或 INLIST

选择下列格式：

 •	   BETWEEN(eIndex, eExpr, eExpr)

 — 或者 —

 •	   INLIST (eIndex, eExpr [,...])

� 若要在可优化 SQL 表达式中使用 BETWEEN 或 IN

选择下列格式：

 •	   eIndex BETWEEN eExpr AND eExpr

 — 或者 —

 •	   eIndex IN (eExpr [,...])

可以组合可优化表达式，并且可以对生成的复杂可优化表达式再次组合。


*如果 firstname，custno，UPPER(lastname) 和 hiredate 是索引，则下列表达式
*都是可优化的。

firstname = 'Fred'

custno >= 1000

UPPER(lastname) = 'SMITH'

hiredate < {12/30/90}

*如果 addr 是一个索引，并且 cVar 包

*含字符串，那么下列表达式是可优化的。

ADDR = cVar

ADDR = SUBSTR(cVar,8,3)


请参阅

BETWEEN( ) 函数

组合基本可优化表达式

组合复杂表达式

INLIST( ) 函数

ISNULL( ) 函数

关系操作符


组合基本可优化表达式

请参阅	示例

如果 FOR 表达式具有基本可优化表达式的各种特征，那么可以在 FOR 子句 基础上组合简单或复杂表达式以提高数据检索速度。

基本表达式可能是可优化的，您可以使用 AND、OR 或 NOT 逻辑操作符组合这些基本表达式，以构成可优化的复杂 FOR 子句表达式。

基本表达式	操作符	基本表达式	查询结果
可优化	AND	可优化	全部可优化
可优化	OR	可优化	全部可优化
可优化	AND	不可优化	部分可优化
可优化	OR	不可优化	不可优化
不可优化	AND	不可优化	不可优化
不可优化	OR	不可优化	不可优化
	NOT	可优化	全部可优化
	NOT	不可优化	不可优化


FIRSTNAME = 'FRED' AND HIREDATE < {12/30/89}	&& 全部可优化

FIRSTNAME = 'FRED' OR 'S' $ LASTNAME	&& 不可优化

NOT FIRSTNAME = 'FRED'	&& 全部可优化


请参阅

FOR 子句

逻辑操作符


组合复杂表达式

请参阅	示例

您可以组合复杂表达式，以创建全部可优化、部分可优化或不可优化的更加复杂的表达式。然后再组合这些更复杂的表达式以创建全部或部分可优化的，或者根本不可优化的表达式。下表说明了组合这些复杂表达式的结果。这些规则也适用于用圆括号分组的表达式。

表达式	操作符	表达式	结果
全部可优化	AND	全部可优化	全部可优化
全部可优化	OR	全部可优化	全部可优化
全部可优化	AND	部分可优化	部分可优化
全部可优化	OR	部分可优化	部分可优化
全部可优化	AND	不可优化	部分可优化
全部可优化	OR	不可优化	不可优化
	NOT	全部可优化	全部可优化
部分可优化	AND	部分可优化	部分可优化
部分可优化	OR	部分可优化	部分可优化
部分可优化	AND	不可优化	部分可优化
部分可优化	OR	不可优化	不可优化
	NOT	部分可优化	不可优化
不可优化	AND	不可优化	不可优化
不可优化	OR	不可优化	不可优化
	NOT	不可优化	不可优化


（FIRSTNAME = 'FRED' AND HIREDATE < {12/30/89}) ;	&& 全部
OR (LASTNAME = '' AND HIREDATE > {12/30/88})	&& 可优化

(FIRSTNAME = 'FRED' AND HIREDATE < {12/30/89}) ;	&&部分
AND 'S' $ LASTNAME	&&可优化

(FIRSTNAME = 'FRED' AND 'S' $ LASTNAME) ;	&& 部分
OR (FIRSTNAME = 'DAVE' AND 'T' $ LASTNAME)	&& 可优化

('FRED' $ FIRSTNAME OR 'S' $ LASTNAME) ;	&& 不可
OR ('MAIN' $ STREET OR 'AVE' $ STREET)	&& 优化


请参阅

创建基本可优化表达式

逻辑操作符


优化 Visual FoxPro 性能

请参阅

您可以用几种方法优化 Visual FoxPro 的性能：添加更多的内存用于动态内存分配；对文件的打开和关闭进行管理；设置环境变量以及编写性能更好的代码等。

尤其可以通过以下这些方面的改进来增强性能：

 •	   使用内存

 •	   打开和关闭文件

 •	   废止状态显示

 •	   使用名称表达式代替宏替换

 •	   管理对象属性

 •	   管理 SQL 命令的性能


请参阅

废止状态显示

管理对象属性

管理 SQL 命令的性能

打开和关闭文件

使用内存

使用名称表达式代替宏替换


使用内存

请参阅

创建窗口、菜单、屏幕、内存变量和其他对象时，需要占用内存。要想尽可能地提高系统性能，那么应只在必要时创建对象，并且在完成对象操作后清除它们，以释放内存供 Visual FoxPro 使用。SYS(1016) 可以返回窗口、菜单、屏幕、内存变量、打开的表等控制对象所占用的内存数量。


请参阅

废止状态显示

管理对象属性

管理 SQL 命令的性能

打开和关闭文件

SYS(1016) - 用户对象内存使用

使用内存

使用名称表达式代替宏替换


打开和关闭文件

请参阅

在应用程序中，频繁地打开和关闭文件将使执行速度变得缓慢。Visual FoxPro 提供 32767 个工作区，因此可以在应用程序中让频繁使用的表一直打开。


请参阅

废止状态显示

管理对象属性

管理 SQL 命令的性能

使用内存

使用名称表达式代替宏替换


废止状态显示

请参阅

当使 SET TALK 命令为 ON 时，Visual FoxPro 可能达不到它的最快操作速度。

� 若要关闭输出命令结果的功能

 •	   请使用下面的代码：

SET TALK OFF

SET DOHISTORY 命令只适用于临时调试，因为它会导致程序执行速度降低。

� 若要关闭 DOHISTORY 功能

 •	   使用以下代码：

SET DOHISTORY OFF


请参阅

SET DOHISTORY 命令

SET TALK 命令


使用名称表达式代替宏替换

请参阅

如果用名称表达式取代宏替换，将极大地增强程序性能。例如，给 cFile 变量指定一个值，则用 cFile 创建的名称表达式比宏替换更快。

cFile = "CUST"

USE &cFile 	&&宏替换：慢
USE (cFile) 	&&名称表达式：较快，建议使用


请参阅

创建名称表达式


管理对象属性

请参阅

如果在程序循环外使用对象属性，Visual FoxPro 将更加有效地运行。例如，下面的代码示例显示了两种不同的方法，创建几个具有相同宽度的按钮。

代码
FOR i = 2 TO THISFORM.optGrp.ButtonCount ; THISFORM.optGrp.Buttons(i).Width = ; THISFORM.optGrp.Buttons(1).Width ENDFOR
nWidth = THISFORM.optGrp.Buttons(1).Width FOR i = 2 TO THISFORM.optGrp.ButtonCount THISFORM.optGrp.Buttons(i).Width = nWidth ENDFOR


请参阅

FOR ... ENDFOR 命令

FOR 循环


管理 SQL 命令的性能

请参阅	示例

在 SELECT - SQL 查询中，以下情况会导致性能降低并产生意外的结果：

 •	   没有指定一个完整的联接条件，而将两个表包含到一个查询中。

 •	   联接含有空字段的表。


*可能产生非常大的结果集合的联接。

SELECT * FROM Invoice, Customer WHERE Invoice.Zip = Customer.Zip

*使用 EMPTY( ) 和 ISNULL( ) 等函数避免上述情况。

SELECT * FROM Invoice, Customer WHERE Invoice.Zip = Customer.Zip ;

AND !EMPTY(Invoice.Zip) AND !EMPTY(Customer.Zip)


请参阅

SELECT - SQL 命令


提高性能的一般技巧

请参阅

下面的几条经验可能会对您的编程工作有所帮助：

 •	   将输出发送到任何非最顶层窗口都比输出到顶层窗口输出慢。使输出在窗口后面滚动可以说是最糟糕的工作方式。

 •	   FOR � ENDFOR 循环比 DO WHILE � ENDDO 循环快。

 •	   INSERT  SQL 比 APPEND BLANK 再加上 REPLACE 要快得多，尤其是对于多用户环境下建立了索引的表来说更是如此。

 •	   从多个字段复制数据时，SCATTER TO ARRAY 要比 SCATTER MEMVAR 快。

 •	   如果要将很多记录追加到已有索引的表中，先移去索引再追加记录，然后重建索引或许会更快些。

 •	   如果经常使用某一索引排序，则定期地按此排序方式对表排序可以提高性能。

 •	   .CDX 文件可以提高多用户性能，因为更新一个 .CDX 文件比更新多个 .IDX 文件速度快。

 •	   当一个表打开时相关的 .CDX 索引也打开，而且当关键字值更改时它也随之更新。如果您使用了很多索引标识，这将显著地降低添加记录的速度。


请参阅

APPEND 命令

创建索引文件

DO WHILE � ENDDO 命令

FOR � ENDFOR 命令

INSERT  SQL 命令

 REPLACE 命令

SCATTER 命令


在 .DBF 文件中查找代码页标记

请参阅

在打开文件后，可以使用 CPDBF( ) 函数来确定 .DBF 文件是否具有代码页标记，或在文件打开时由 Visual FoxPro 自动检测。

� 若要自动检测代码页标记

1.	在“工具”菜单中选择“选项”命令。

2.	选择“数据”选项卡。

3.	选定“提示代码页”复选框。

要在以后的 Visual FoxPro 工作期中使用此设置，可选择“设置为默认值”。

提示

如果不选择“提示代码页”复选框，可使用 SET CPDIALOG 命令检测代码页标记。


请参阅

添加代码页标记

更换 .DBF 文件的代码页

代码页对话框

Visual FoxPro 支持的代码页

CPDBF( ) 函数

确定项目文件的代码页

移去代码页标记

SET CPDIALOG

指定文本文件的代码页


添加代码页标记

请参阅

如果使用的是以前版本的 FoxPro 的 .DBF 文件，则其中可能没有代码页标记。没有此标记，文件可能会显示不正确。如果选择了自动代码页检查，那么在打开文件时就可知道它是否有代码页标记。如果没有，可以添加一个。

� 若要给 .DBF 文件添加代码页标记

1.	确认自动检查代码页 有效。

2.	打开文件。

如果文件没有代码页标记，代码页对话框出现。

3.	选择合适的代码页标记。

4.	查看文件，判断所指定的代码页是否正确。

如果有部分数据不能看到或不能识别，说明代码页不正确。

5.	如果代码页不正确，使用 Visual FoxPro TOOLS\CPZERO 目录中的CPZERO 程序移去代码页标记。

6.	重复上述过程直到代码页正确。


请参阅

更换 .DBF 文件的代码页

在 .DBF 文件中查找代码页标记

代码页对话框

Visual FoxPro 支持的代码页

CPZERO.PRG

确定项目文件的代码页

移去代码页标记

指定文本文件的代码页


移去代码页标记

请参阅

如果一个 .DBF 文件显示不正确，那么它的代码页标记可能是错误的，可使用 Visual FoxPro TOOLS\CPZERO 目录中的 CPZERO 程序移去代码页标记。运行 CPZERO，代码页设置为 0，意味没有代码页。

� 若移去代码页标记

 •	   用下述语法运行 CPZERO：

DO CPZERO [WITH "filename"[, codepage_number]]

附注

当移去一个 .DBF 文件的代码页标记时，文件中的数据并没有改变。要更换某数据的代码页，需要使用合适的代码页标记文件。


请参阅

添加代码页标记

更换 .DBF 文件的代码页

在 .DBF 文件中查找代码页标记

代码页对话框

Visual FoxPro 支持的代码页

CPZERO.PRG

确定项目文件的代码页

指定文本文件的代码页


更换 .DBF 文件的代码页

请参阅

删除代码页标记，然后添加一个新的，或把文件复制到另一个文件，这样可以改变一个 .DBF 文件的代码页标记。

� 若要通过复制文件来更换一个 .DBF 文件的代码页

 •	   请使用 COPY TO 命令。

例如，要把 TEST.DBF 复制为 TEST866.DBF，同时将代码页改为 866，请使用如下命令：

USE TEST.DBF

COPY TO TEST866.DBF AS 866

当 COPY TO 命令完成时，目标文件中的数据将具有新的代码页。

提示

不带 AS 子句使用 COPY TO 命令时，生成的新文件将具有当前代码页。


请参阅

添加代码页标记

在 .DBF 文件中查找代码页标记

代码页对话框

Visual FoxPro 支持的代码页

COPY TO 命令

确定项目文件的代码页

移去代码页标记

指定文本文件的代码页


输入国际化字符

请参阅

如果键盘上没有用于国际字符的键，使用 Windows 提供的字符映射表，或在按下 ALT 键的同时使用数字键盘输入内码，可以输入这些字符。

� 若要输入国际化字符

 •	   从字符映射表上复制字符，然后将它粘贴到您的文档中。

 — 或者 —

 •	   在按下 ALT 键的同时，使用数字键盘输入由零开始的四位数 ASCII 码。

提示

字符映射表上的状态栏显示每个选定字符的组合键。


请参阅

添加代码页标记

更换 .DBF 文件的代码页

Visual FoxPro 支持的代码页

理解代码页


禁止对字符型或备注型字段中的数据进行转换

请参阅

在某些情况下不需要自动转换代码页。例如，对于一个包含加密口令的字符型字段，就不希望 Visual FoxPro 自动转换口令，因为一旦转换，它就改变了。

� 若要禁止某一字符型或备注型字段中的数据被转换

1.	打开包含此表的项目。

2.	选择此表。

3.	选择“修改”按钮。

表设计器出现。

4.	选择要保护的字段。

5.	从“类型”列表中，对字符型字段选择“字符（二进制）”，对备注型字段选择“备注（二进制）”。

6.	选择“确定”，然后选择“是”使此修改结果成为永久性结果。

7.	使用 DISPLAY STRUCTURE 命令显示表的结构来验证所作的修改。


请参阅

DISPLAY STRUCTURE 命令

MODIFY STRUCTURE 命令


深入了解排序次序

请参阅

排序次序包容了不同地区的排序规则，允许某种语言的数据准确地排序。在 Visual FoxPro 中，当前的排序次序决定了字符表达式比较的结果和在索引或排序表中记录的位置。

因为不同的排序次序会产生不同的排序结果，因此应按下表选择合适的排序次序。

Unsorted	Machine	General	Spanish
!@#$	space	space	space
1234	!@#$	!@#$	!@#$
space	1234	1234	1234
Caesar	Caesar	�a	�a
c�sar	Car	ab	ab
Strasse	Char	�b	�b
stra�e	Czech	Caesar	Caesar
Car	Strasse	c�sar	c�sar
Char	ab	Car	Car
Czech	c�sar	�ar	�ar
ab	stra�e	Char	Czech
�ar	�ar	Czech	Char
�a	�a	Strasse	Strasse
�b	�b	stra�e	stra�e


请参阅

SET COLLATE 命令

排序次序准则

指定排序次序


排序次序准则

请参阅

在选择排序次序时要考虑如下问题：

 •	   如果希望对国际化字符进行正确排序，应避免使用 Machine 排序序列。因为 Machine 排序序列按国际化字符的 ASCII 码顺序排序。例如，注意 �ar 是排在 stra�e 之后。

 •	   有区分标记的字符与没有区分标记的字符排序不同。例如， 在“General”和“Spanish”排序序列中，注意 [image] a 排在 ab 之前，而 ab 排在 [image] b 之前。

 •	   连字如 [image] ，按等价的分解字符来排序。例如，stra�e 与 Strasse 排序结果相同，而 c�sar 与 Caesar 排序结果相同。

 •	   在某些语言中，两个字符看做一个字符排序。例如，在西班牙语中，Char 中的 Ch 作为 C 和 D 之间的一个字母排序。


请参阅

SET COLLATE 命令

指定排序次序

深入了解排序次序


指定排序次序

请参阅

可以在如下的索引和排序操作中给字符型字段指定排序序列。

� 若要指定排序序列

1.	在“工具”菜单中选择“选项”。

2.	选择“数据”选项卡。

3.	在“排序序列”框中，选择适当的排序序列。

要将此设置用于以后的 Visual FoxPro 操作，选择“设置为默认值”。

提示

也可以使用 SET COLLATE TO 命令或在 CONFIG.FPW 文件中的 COLLATE 语句里指定排序序列。


请参阅

SET COLLATE 命令

排序次序准则

深入了解排序次序


创建消息

请参阅

当在应用程序中创建消息时，英语的文本字符串通常比相应其他语言的文本字符串短。下表显示出了字符串长度的平均增加值。

英语长度（字符数）	本地化字符串的增长量
1 到 4	100%
5 到 10	80%
11 到 20	60%
21 到 30	40%
31 到 50	20%
大于 50	10%


请参阅

使用图标和位图


使用图标和位图

请参阅

如果使用适当，图标和位图会成为用户界面的重要组成部分。然而，图标和位图的含义会比单词的含义更模糊，因此在使用图标和位图时应考虑如下规则：

 •	   使用被普遍认识的图形。例如，使用信封而不是邮箱来代表邮件，因为邮箱不是普遍使用的标志。

 •	   避免使用文化敏感性的图形。例如，要避免使用宗教标志或动物图形。

 •	   避免在位图中使用文字，因为文字变长会和界面中一样会带来问题。

 •	   避免使用专业用语、俚语、幽默或夸张用语，以及有种族背景的用语。

 •	   当描述男性和女性时，要确保男女地位为所在地区的文化所接受，人体图像及姿势符合当地文化习惯。

 •	   适当使用颜色。例如，避免使用与国旗和政治运动有关的颜色组合。

如果对所使用的图标和位图是否合适没有把握，可与当地的人员进行讨论。


请参阅

创建消息


指定文本文件的代码页

请参阅

如果忘记了一个不在项目中的文本文件的代码页，就不能确定其代码页，因为文本文件没有象 .DBF 文件所具有的代码页标记。要记录文本文件代码页的最好办法是将其加到项目中。

� 若要为文本文件指定代码页

1.	打开项目管理器。

2.	选定想要指定代码页的文本文件。

3.	从“项目”菜单中选择“项目信息”。

4.	在“项目”窗口中单击“文件”选项卡。

5.	使用鼠标右键，单击选定的文件。

6.	从子菜单中选择“代码页”。

Visual FoxPro 将显示代码页对话框。

7.	选择合适的代码页。

如果知道一个文本文件的代码页，可以使用适当的 Visual FoxPro 命令的 AS 子句来指定它。对于要导入或追加的文件，在 IMPORT 或 APPEND 命令中指定代码页。对于查询、源程序和其他已在计算机中的文本文件，使用 MODIFY QUERY、MODIFY COMMAND 和 MODIFY FILE 命令来改变代码页。


请参阅

添加代码页标记

APPEND 命令

更换 .DBF 文件的代码页

在 .DBF 文件中查找代码页标记

代码页对话框

Visual FoxPro 支持的代码页

确定项目文件的代码页

IMPORT 命令

MODIFY COMMAND 命令

MODIFY FILE 命令

MODIFY QUERY 命令

移去代码页标记


确定项目文件的代码页

请参阅

在将一个文件加到项目中后，可以通过显示与此文件有关的项目信息来确定其代码页。

� 若要确定项目文件的代码页

1.	打开项目管理器。

2.	选定想知道其代码页的文件。

3.	从“项目”菜单中选择“项目信息”。

当从一个项目中编译应用程序时，不论这些文件有多少种代码页，项目管理器都会自动地将它集成。编译所得的应用程序将拥有当前的代码页。

附注

当把一个 .DBF 文件加到项目中时，不需指定此文件的代码页，因为 Visual FoxPro 会自动从文件的代码页标记中得到它的代码页。然而，当把一个文本文件加入项目时，必须指定此文件的代码页，因为 Visual FoxPro 不能自动确定其代码页。


请参阅

添加代码页标记

更换 .DBF 文件的代码页

在 .DBF 文件中查找代码页标记

代码页对话框

Visual FoxPro 支持的代码页

移去代码页标记

指定文本文件的代码页


理解代码页
深入了解代码页

请参阅

当您用表文件结构创建一个文件时，Visual FoxPro 自动赋予它一个代码页标记，表明这个文件使用哪个代码页。代码页是一个含有字符及其相应编码的表，放于内存中，供 Visual FoxPro 查找以正确显示数据。例如，如果您在一个 .DBF 文件中输入字母 C，则该字母在您的硬盘上保存为编码 67。当您打开这个文件时，Visual FoxPro 确定它的代码页，并在代码页中找到与 67 相应的字符，然后在您的显示器上显示该字符 (C)。

如果您使用的是 FoxPro 早期版本的文件，文件可能会没有代码页标记。当您打开这个文件时，如果没有代码页标记，Visual FoxPro 会提示您输入一个代码页，然后使用它标记您的文件。但是，如果代码页不正确，文件中的某些字符可能会不正确地显示。对于这种情况，删除代码页标记，然后添加适当的标记。

Visual FoxPro 支持很多代码页，并且每个代码页包含的字符与一定的环境一一对应。如果您想为某个特殊地区创建一个应用程序，在创建应用程序的各组件时，必须使用为那个地区和环境设计的代码页。例如，若要创建在俄罗斯使用的应用程序，对 Windows，MSDOS 或 Macintosh 的用户应该分别使用代码页 1251，866 和 10007。

提示

若要用同一个代码页连续创建多个文件，可首先设置 CONFIG.FPW 文件中的 CODEPAGE 参数，指定代码页。然后在创建文件前重新启动 Visual FoxPro。

如果需要输入无法用键盘表示的字符，必须使用 ALT 和数字键盘上的键输入字符。但是，请记住相同的键组合在不同的环境下会显示不同的结果。例如，如果在 Visual FoxPro 中输入 Alt+0182，它的代码页是 1252，您会看到一个段落符号。相比之下，如果在 FoxPro for MSDOS 输入 Alt+0182，它的代码页是 437，您会看到两条垂线和一条水平线相交的图形字符。

虽然 Visual FoxPro 支持很多代码页，但只有其中一部分是经常使用的。例如，对于 Visual FoxPro，使用英语的用户通常使用代码页 1252。但是，对于 FoxPro for MSDOS，使用英语的用户通常使用代码页 437。


请参阅

添加代码页标记

更换 .DBF 文件的代码页

在 .DBF 文件中查找代码页标记

代码页对话框

Visual FoxPro 支持的代码页

确定项目文件的代码页

输入国际化字符

移去代码页标记

指定文本文件的代码页

表文件结构


Visual FoxPro 事件顺序

请参阅

下表显示了 Visual FoxPro 事件的引发顺序。假定数据环境的 AutoOpenTables 属性设置为“真” (.T.)。其他事件的发生是基于用户的交互行为和系统响应。若要详细了解 Visual FoxPro 事件的顺序，请运行 Visual FoxPro 中 SAMPLES\CONTROLS 子目录下的 CONTROLS.APP。在“示例”列表中选择“了解事件引发顺序”，然后选择“运行示例”按钮。

对象	事件
数据环境	BeforeOpenTables
表单集	Load
表单	Load
数据环境临时表	Init
数据环境	Init
对象1	Init
表单集	Activate
表单	Activate
对象1 2	When
表单	GotFocus
对象1	GotFocus
对象1	Message
对象1	Valid 3
对象1	LostFocus
对象2 4	When
对象2	GotFocus
对象2	Message
对象2	Valid 3
对象2	LostFocus
表单	QueryUnload
对象 5	Destroy
表单	Unload
表单集	Unload
数据环境	AfterCloseTables
数据环境	Destroy
数据环境临时表	Destroy
1 对于每个对象，从最内层的对象到最外层的容器 2 Tab 键次序中的第一个对象 3 当对象失去焦点时发生 4 下一个获得焦点的对象 5 对于每个对象，从最外层的容器到最内层的对象


请参阅

Activate 事件

AfterCloseTables 事件

AutoOpenTables 属性

BeforeOpenTables 事件

Destroy 事件

GotFocus 事件

Init 事件

Load 事件

LostFocus 事件

Message 事件

QueryUnload 事件

Unload 事件

Valid 事件

When 事件


查看表的内容

请参阅

查看表内容的最快方法是使用浏览窗口。

� 若要浏览一个表

1.	从“文件”菜单中选择“打开”，选定想要查看的表名。

2.	从“查看”菜单中选择“浏览”。

您也可以从项目管理器中选择表的名称，然后选择“浏览”按钮。


请参阅

浏览文件（项目菜单)

浏览窗口


在表中移动

请参阅

使用滚动条可以来回移动表，显示表中不同的字段和记录。您也可以用箭头键和 TAB 键进行移动。如果需要查找指定的记录，可选择“表”菜单中的“定位记录”。

� 若要查看不同的记录

1.	从“表”菜单中选择“定位记录”。

2.	在子菜单中选择“第一个记录”、“最后一个记录”、“下一个”、“前一个”或“记录号”。

3.	如果选择了“记录号”，请在“转到记录”对话框中输入待查看记录的编号，然后选择“确定”。


请参阅

浏览窗口

定位记录（表菜单）


在表中添加新记录

请参阅

若想在表中快速加入新记录，可以将浏览和编辑窗口设置为“追加”方式。在“追加”方式中，文件底部显示了一组空字段，您可以在其中填入来建立新记录。

� 若要添加一条新的空记录

 •	   从“查看”菜单中选择“追加方式”。

在新记录中填充字段，用 TAB 键可以在字段间进行切换。每完成一条记录，在文件的底端就会又出现一条新记录。


请参阅

追加方式（查看菜单）


删除记录并压缩表

请参阅

在 Visual FoxPro 中，删除表中的记录共有两个步骤。首先是单击每个要删除记录左边的小方框，标记要删除的记录。

标记记录并不等于删除记录。要想真正地删除记录，应从“表”菜单中选择“彻底删除”。这个过程将删除所有标记过的记录，并重新构造表中余下的记录。压缩表时会将表关闭掉，因此若要继续工作，必须重新打开该表。

� 若要从表中删除记录

1.	单击记录左边的小方框，标记待删除的记录。

2.	从“表”菜单中选择“彻底删除”。

3.	当出现提示，问您是否想移去表时，选择“是”。


请参阅

DELETE 命令

PACK 命令


重新安排浏览窗口中的列

请参阅

您可以重新安排浏览窗口中的列，使它们按照需要的顺序进行排列，但这并不影响表的实际结构。

� 若要在浏览窗口中重新安排列

 •	   将列标头拖到新的位置。

  或者

 •	   从“表”菜单中选择“移动字段”，然后用上下箭头键移动列，最后按 enter 键。


请参阅

浏览窗口

移动字段 (表菜单)


改变浏览窗口中列的宽度

请参阅

您可以在浏览窗口中改变列的宽度。这种尺寸调整不会影响到字段的长度或表的结构。

如果您想改变字段的实际长度，应使用表设计器修改表的结构.

� 若要改变列宽

 •	   在列标头中，将鼠标指针指向两个字段之间的结合点，拖动鼠标调整列的宽度。

  或者

 •	   先选定一个字段，然后从“表”菜单中选择“调整字段大小”，并用左、右箭头键来调整列宽，最后按 enter 键。


请参阅

浏览窗口

调整字段大小 (表菜单)

表设计器


打开或关闭网格线

请参阅

您可以隐藏浏览窗口中的网格线。

� 若要显示或隐藏网格线

 •	   从“查看”菜单中选择“网格线”。


请参阅

浏览窗口

表格线（查看菜单）


拆分浏览窗口

请参阅

通过拆分浏览窗口，您可以很方便地查看同一表中的两个不同区域，或者同时在浏览和编辑方式下查看同一记录。

� 若要拆分浏览窗口

1.	将鼠标指针指向窗口左下角的拆分条。

2.	向右方拖动拆分条，将浏览窗口分成两个窗格。

  或者

1.	从“表”菜单中选择“调整分区大小”。

2.	用左右光标键移动拆分条。

3.	按 ENTER 键。

� 若要调整拆分窗格的大小

1.	将指针指向拆分条。

2.	向左或向右拖动拆分条，改变窗格的相对大小。

  或者

1.	从“表”菜单中选择“调整分区大小”。

2.	按左箭头或右箭头键移动拆分条。

3.	按 ENTER 键。

默认情况下，浏览窗口的两个窗格是相互链接的；即在一个窗格中选择了不同的记录，这种选择会反映到另一个窗格中。取消“表”菜单中“链接分区”的选中状态，可以中断两个窗格之间的联系，使它们的功能相对独立。这时，滚动某一个窗格时，不会影响到另一个窗格中的显示内容。


请参阅

浏览窗口

调整分区大小（表菜单）


使用表设计器修改表的结构
使用表设计器修改表

请参阅

利用表设计器，您可以改变已有表的结构，如增加或删除字段、设置字段的数据类型及宽度、查看表的内容以及设置索引来排序表的内容。

� 若要修改表

 •	   在项目管理器中选定表名，然后选择“修改”。

表的结构将显示在表设计器中。


请参阅

ALTER TABLE - SQL 命令

MODIFY STRUCTURE 命令

项目管理器

表设计器

表设计器（查看菜单）


在表中添加字段

请参阅

创建表之后，可以用表设计器增加或删除表中的字段。

� 若要在表中增加字段

1.	在表设计器中选择“插入”。

2.	在“字段名”列中，键入新的字段名。

3.	在“类型”列中，选择字段的数据类型。

4.	在“宽度”列中，设置或输入字段宽度。

5.	如果使用的数据类型为数值型或浮点型，还需要设置“小数位”列的小数位数。

6.	如果想让表接受 null 值，请选中“NULL”列。

7.	选择“确定”。

8.	选择“是”，改变表的结构。

� 若要删除表中的字段

 •	   选定该字段，并选择“删除”。


请参阅

移动字段（表菜单）

调整分区大小（表菜单）

表设计器


创建新表

请参阅

利用“表向导”，您可以随时创建新表。向导会提出一系列的问题，并根据您的回答建立一个表。

� 若要用向导创建表

1.	在项目管理器中选择“数据”选项卡，然后选择“自由表”。

2.	选择“新建”。

3.	选择“表向导”按钮。

4.	按照向导屏幕的指示进行操作。


请参阅

新建（文件菜单）

项目管理器

表向导


使用表设计器

请参阅

如果不想用表向导来创建表，您可以使用表设计器。方法是：在项目管理器的“数据”选项卡中选择“自由表”，然后选择“新表”；或者，从“文件”菜单中选择“新建”，选择“表”，然后选择“新文件”。

如果想将新建的表添加到数据库中，可以在建表之前先将数据库打开。这样，新表会自动成为数据库的一部分。

� 若要创建新表

1.	在项目管理器中，选择“数据库”下的“表”，或者选择“自由表”。

2.	选择“新建”，然后选择“新表”。

3.	在“创建”对话框中，输入表的名称并选择“创建”。

4.	在表设计器的“字段名”区域键入第一个字段的名称。

5.	在“类型”字段中，选择列表中的某一字段类型。

6.	在“宽度”列中，设置以字符为单位的列宽。

7.	如果字段类型是数值型或浮点型，设置“小数位”框中的小数点位数。

8.	如果想让字段能接受 null 值，选中“NULL”。

9.	根据需要继续添加新字段。

10.	完成所有设置后，选择“确定”。

此时，您可以选择是立即开始输入记录，还是在以后准备好所有记录后再打开表进行输入。

� 若要在表中添加记录

1.	在项目管理器中选择表的名称。

2.	选择“浏览”。

3.	从“查看”菜单中选择“追加方式”。

4.	在浏览窗口中输入新的记录。

如果愿意的话，您可以从“查看”菜单中选择“编辑”来切换到编辑方式。


请参阅

追加方式 (查看菜单)

浏览窗口

新建 (文件菜单)

项目管理器

表设计器


筛选表

请参阅

如果您只想查看某一类型的记录，可以通过设置筛选器对浏览窗口中显示的记录进行限制。在某些情况下，例如只想查看销售额高于某一数值的商品，或者在某段时间内雇用的职员，筛选就显得非常有用。

� 若要在表中建立筛选器

1.	从“表”菜单中选择“属性”。

2.	在工作区属性对话框中，直接在“数据筛选”框内输入筛选表达式。

  或者

选择“数据筛选”框后面的“…”按钮，在表达式生成器中创建一个表达式来选择要查看的记录，然后选择“确定”。

3.	选择“确定”。

现在浏览表时，则只显示经筛选表达式筛选过的记录。


请参阅

表达式生成器

属性 (表菜单)

SET FILTER 命令


限制对字段的访问

请参阅

在表单中浏览或使用表时，若想只显示某些字段，可以设置字段筛选来限制对某些字段的访问。选出要显示的字段后，剩下的字段就不可访问了。

� 若要建立字段筛选

1.	从“表”菜单中选择“属性”。

2.	在工作区属性对话框的“允许访问”框内，选中“由‘字段筛选’指定的字段”，然后选择“字段筛选”。

3.	在“字段选择器”对话框中，将所需字段移入“选定字段”栏，然后选择“确定”。

4.	选择“确定”。

浏览表时，只有在“字段筛选”中选定的字段被显示出来。


请参阅

字段选择器对话框

属性 (表菜单)


建立索引

请参阅

建好表后，您就可以建立索引。

� 若要建立索引

1.	在项目管理器中选择待建索引的表，然后选择“修改”。

2.	在表设计器中，选择“索引”选项卡。

3.	在“索引名”框中，键入索引名。

4.	从“类型”列表中，选定索引类型。

5.	在“表达式”框中，键入作为记录排序依据的字段名。

  或者

通过选择表达式框后面的按钮，显示表达式生成器来建立表达式。

您可以用“表达式”框按多字段索引

6.	若想有选择地输出记录，可在“筛选”框中输入筛选表达式，或者选择该框后面的按钮来建立表达式。

7.	选择“确定”。


请参阅

添加索引关键字

选择索引类型

创建索引文件

创建索引关键字

表达式生成器

筛选数据

筛选记录

INDEX 命令

使用多个字段进行排序

对记录进行排序

为表建立关系

项目管理器

重建活动索引文件

SET ORDER 命令

表设计器

使用索引


用索引设置记录顺序�
用索引设置记录顺序

请参阅

建好表的索引后，便可以用它来为记录排序。

� 若要用索引对记录排序

1.	在项目管理器中选择已建好索引的表。

2.	选择“浏览”。

3.	从“表”菜单中选择属性.。

4.	在“索引排序”对话框中，选择要用的索引。

5.	选择“确定”。

显示在浏览窗口中的表将按照索引指定的顺序排列记录。选定索引后，通过运行查询或报表，还可对它们的输出结果进行排序。


请参阅

浏览窗口

项目管理器

属性 (表菜单)

SET ORDER 命令


选择索引类型

请参阅

您可以选择四种索引类型之一：

 •	   主索引

 •	   候选索引

 •	   普通索引

 •	   唯一索引

主索引可确保字段中输入值的唯一性并决定了处理记录的顺序。您可以为数据库中的每一个表建立一个主索引。如果某个表已经有了一个主索引，可以继续添加候选索引。有关详细内容，请参阅设置主索引或候选索引.

候选索引象主索引一样要求字段值的唯一性并决定了处理记录的顺序。在数据库表和自由表中均可为每个表建立多个候选索引。有关详细内容，请参阅设置主索引或候选索引.

普通索引也可以决定记录的处理顺序，但是允许字段中出现重复值。在一个表中可以加入多个普通索引。有关详细内容，请参阅设置普通索引. 。

为了保持同早期版本的兼容性，还可以建立一个唯一索引，以指定字段的首次出现值为基础，选定一组记录，并对记录进行排序。如果想用这种方法选定字段，也许建立一个查询或视图会更好些。


请参阅

创建查询

使用向导创建视图

设置主索引或候选索引

设置普通索引


使用多个字段进行排序
用多个字段进行排序

请参阅

您可以在索引表达式中指定多个字段，并按照多个字段对记录排序。

� 若要用多个字段对记录排序

1.	在项目管理器中选定待添加索引的表，然后选择“修改”。

2.	在表设计器中选择“索引”选项卡，输入索引名和索引类型。

3.	在“表达式”框中输入表达式，其中列出要作为排序依据的字段。

4.	选择“确定”。


请参阅

项目管理器

表设计器


筛选记录

请参阅

通过添加筛选表达式，您可以控制哪些记录可包含在索引中。

� 若要筛选记录

1.	在项目管理器中选定待添加索引的表，然后选择“修改”。

2.	在表设计器索引选项卡中，创建或选择一个索引。

3.	在“筛选”框中，输入一个筛选表达式。

例如，可以建立一个对加拿大客户记录的筛选表达式：

customer.country = "Canada"

4.	选择“确定”。


请参阅

筛选数据

项目管理器

表设计器


使用索引

请参阅

根据所建索引类型的不同，可以完成不同的任务：

若要	请
排序记录，以便显示、查询或打印	使用普通索引、候选索引或主索引
在字段中控制重复值的输入并对记录排序	对数据库表使用主索引或候选索引，对自由表使用候选索引
准备设置表关系	依据表在关系中所起的作用，使用普通索引、主索引或候选索引


请参阅

控制字段中重复值的输入

对记录进行排序

为表建立关系


对记录进行排序

请参阅

您可以用字段名或其他索引表达式对记录排序。

� 若要建立一个索引来对记录排序

1.	在项目管理器中选定待添加索引的表，然后选择“修改”。

2.	在表设计器索引选项卡中，输入索引名和索引类型。

3.	在“表达式”一栏中，键入作为排序依据的字段名。

  或者

键入一个作为排序依据的表达式，或通过选择该方框后面的按钮，用表达式生成器建立一个表达式。

4.	若要以降序显示记录，可选择索引名左侧的箭头按钮。

按钮上的箭头方向向上时按升序排序，向下时则按降序排序。

5.	选择“确定”。


请参阅

表达式生成器对话框

项目管理器

表设计器


控制字段中重复值的输入

请参阅

您也许想控制字段重复值的输入。

� 若要创建在字段中强制输入唯一值的索引

1.	在项目管理器中选择待加入索引的表，然后选择“修改”。

2.	在表设计器索引选项卡中建立一个索引。

3.	在“类型”一栏，选择“主索引”或“候选索引”。

4.	选择“确定”。


请参阅

项目管理器

表设计器


为表建立关系

请参阅

您可能需要在一个数据库的两个表之间建立关系，这时则要在这两个表上建立索引。

为了创建关系，可以在两个表中寻找一个公共字段并且加上索引。例如，由于一个客户可以拥有许多订单，因此 Customer 表和 Orders 表都包含有“Cust_ID”字段。为了在它们之间建立一个一对多关系，Customer 表需要在 Cust_ID 字段上建立一个主索引，Orders 表则要在“Cust_ID”字段上建立一个普通索引。


请参阅

建立索引

在表之间建立关系


使用数据库

请参阅

数据库提供了如下的工作环境：存储一系列的表，在表间建立关系，设置属性和数据有效性规则使相关联的表协同工作。数据库文件保存为带 .DBC 扩展名的文件。

数据库可以单独使用，也可以将它们合并成一个项目，用项目管理器进行管理。数据库必须在打开后才能访问它内部的表。

� 若要打开一个数据库

1.	在项目管理器中选择要使用的数据库名。

2.	选择“修改”。

您也可以从“文件”菜单中选择“打开”，然后选择数据库名。


请参阅

数据库设计器

项目管理器


创建新数据库

请参阅

要想把数据并入数据库中，必须先建立一个新的数据库，然后加入需要处理的表，并定义它们之间的关系；

� 若要创建新的数据库

1.	在项目管理器中选择“数据库”。

2.	选择“新建”。

在创建新数据库时，会显示一个空的数据库设计器窗口，与此同时，数据库设计器工具栏将变为有效。


请参阅

数据库设计器工具栏

数据库设计器

新建 (文件菜单)

项目管理器


在数据库中加入表

请参阅

建立数据库的第一步是向数据库中添加表，您可以选定目前不属于任何数据库的表。

� 若要向数据库中添加表

1.	从“数据库”菜单中选择“添加表”。

2.	在“打开”对话框中选定一个表，然后选择“确定”。

当数据库不再需要某个表或其他数据库需要使用此表时，可以从该数据库中移去此表。

� 若要从数据库中移去表。

1.	选定表。

2.	从“数据库”菜单中选择“移去”。

3.	在对话框中选择“移去”。


请参阅

添加表命令 (数据库菜单)

移去命令 (数据库菜单)


在表之间建立关系

请参阅

因为这种在数据库中建立的关系被作为数据库的一部分而保存起来，所以称为永久关系。每当您在查询设计器或视图设计器中使用表，或者在创建表单时所用的数据环境设计器中使用表时，这些永久关系将作为表间的默认链接。

如果表还没有建立索引，则需要用表设计器将其打开，并创建索引。

� 若要在表间建立关系

 •	   将一个表的索引拖到另一个表的相匹配的索引上。

附注

您所拖动的父表索引必须是一个主索引或候选索引。

建立好关系后，这种关系在数据库设计器中会显示为一条连接两个表的直线。


请参阅

选择索引类型

建立索引

创建永久关系

数据库设计器

表设计器


在数据库中设置字段属性

请参阅

将表添加入数据库后，便可以立即获得许多在自由表中得不到的属性。这些属性被作为数据库的一部分保存起来，并且一直为表所拥有，直到表从这个数据库中移去为止。

通过设置数据库表的字段属性，您可以：

 •	   为字段设置标题

 •	   为字段输入注释

 •	   为字段设置默认值

 •	   设置有效性规则对输入字段的数据加以限制


请参阅

设置字段标题

为字段输入注释

设置默认字段值

设置有效性规则和有效性说明

在数据库中设置表的属性


设置字段标题

请参阅

通过在表中给字段建立标题，您可以定制表单和浏览的显示效果。

� 若要给字段指定一个标题

1.	在数据库设计器中选定表，然后选择“修改”。

2.	选定需要指定标题的字段。

3.	在“标题”框中，键入为字段选定的标题。

4.	选择“确定”。

例如，某字段名为“Cust_ID”，当使用“Customer Number”作为标题显示该字段时，浏览窗口中原来的“Cust_ID”字段名被替换为“Customer Number”。由于您可以用自己命名的标题来取代原来的字段名，这为显示表单中的表提供了很大的灵活性，。


请参阅

数据库设计器

表选项卡，表设计器


为字段输入注释

请参阅

在建立好表的结构后，您可能还想输入一些注释，来提醒自己或其他人表中的字段代表什么意思。在表设计器中的“字段注释”框内输入信息，即可对每一个字段进行注释。

� 若要为一个字段作注释

1.	选定表设计器中的字段。

2.	在“字段注释”框中键入注释内容。

3.	选择“确定”。


请参阅

表设计器


设置默认字段值

请参阅

要想在创建新记录时自动输入字段值，您可以在表设计器中用字段属性为字段设置默认值。

� 若要设置字段的默认值

1.	在数据库设计器中选定表。

2.	从“数据库”菜单中选择“修改”。

3.	在表设计器中选定要赋予默认值的字段。

4.	在“默认值”框中键入要显示在所有新记录中的字段值（字符型字段应用引号括起来）。

5.	选择“确定”。

例如，您可以使 Products 表中的所有新记录都有一个默认值为“15”的 reorder at 字段。


请参阅

数据库设计器

表设计器

表选项卡，表设计器


设置有效性规则和有效性说明

请参阅

如果在定义表的结构时输入字段的有效性规则，可以控制输入该字段的数据类型。例如，您可以限制某字段可接受的输入项：某些州、购货定单的数量、合法的 ID 号等等。

� 若要为字段设置有效性规则和有效性说明

1.	在表设计器中打开表。

2.	在表设计器中选定要建立规则的字段名。

3.	在“有效性规则”方框旁边选择“…”按钮。

4.	在表达式生成器中设置有效性表达式，并选择“确定”。

5.	在“有效性说明”框中，键入用引号括起的错误信息。

6.	选择“确定”。


请参阅

表达式生成器

表设计器

表选项卡，表设计器


在数据库中设置表的属性
在数据库中设置表属性

请参阅

您不但可以给表中的字段赋与数据库的属性，而且可以为整个表或表中的记录赋与属性。

利用数据库表的属性，您可以：

 •	   给表设置长名 。

 •	   设置有效性规则和错误信息提示。

 •	   设置有关表的一些注释。


请参阅

为表指定名称

设置表的有效性规则

表属性对话框


为表指定名称

请参阅

您可以为数据库表分配一个任选的名称，名称不受 MS-DOS 中 8 字符文件名长度的限制。在数据库中使用表时，该名称会出现在相应的位置，如数据库设计器或数据环境设计器中。

� 若要为表指定一个名称

 •	   在表设计器中的“表名”框中，输入为表指定的名称。


请参阅

数据库设计器

数据环境设计器

表设计器

表属性对话框


设置表的有效性规则

请参阅

在向表中输入记录时，要想比较两个以上的字段，看记录是否满足一定的条件，可以为表设置有效性规则。

� 若要设置有效性规则

1.	选定表，然后选择“修改”。

2.	在表设计器中选择“表属性”。

3.	在“有效性规则”框中，输入一个有效的 Visual FoxPro 表达式定义规则。选择“…”按钮使用“表达式生成器”。

4.	在“有效性说明”框中输入提示信息。当有效性规则未被满足时，将会显示该信息。

5.	选择“确定”。

6.	在表设计器中选择“确定”。


请参阅

表设计器

表属性对话框


使用参照完整性

请参阅

Visual FoxPro 提供了参照完整性生成器，用来建立一些规则，以便控制相关表中记录的插入、更新或删除。

� 若要使用参照完整性生成器

1.	在数据库设计器中建立两表之间的关系，或者双击关系线来编辑关系。

2.	在编辑关系对话框中选择“参照完整性”按钮。

3.	在参照完整性生成器中选择更新、删除或插入记录时所遵循的若干规则。

4.	选择“确定”，然后选择“是”保存所做的修改，生成参照完整性代码，并退出参照完整性生成器。


请参阅

建立索引

数据库设计器

编辑关系

参照完整性生成器


导入数据

请参阅

如果要从源文件中导入数据，可以让 Visual FoxPro 定义新表的结构，或者使用导入向导来指定它的结构。Visual FoxPro 用源文件中的字段顺序来定义目标表的结构。如果您希望自己能定义结构，可以在源应用程序中修改文件或者使用“导入向导”。

如果您已经不再访问支持源文件的应用程序，但希望更改字段的顺序或数据类型，可以导入源文件，然后创建一个查询，用这个查询将字段按您希望的顺序输出到另外一个新表中。有关详细内容，请参阅创建查询。

导入文件时，必须选择文件类型并且指定源文件和目标表的名称。


请参阅

追加数据

选择导入文件类型

创建查询

导出数据

使用导入向导导入数据

将数据导入新表


选择导入文件类型

请参阅

Visual FoxPro 支持很多导入文件类型。如果您的文件类型没有出现在下面的列表中，请参阅 IMPORT 以获得 Visual FoxPro 所支持文件类型的更详细内容。

文件类型	文件扩展名	说明
Microsoft Excel	XLS	Microsoft Excel（2.0、3.0、4.0 和 5.0 版本）电子表格格式。列单元转变为字段，行转变为记录。
Lotus 1-2-3	WKS WK1 WK3	1-A、2.x 和 3.x 版本的 Lotus 1-2-3 电子表格格式。列单元转变为字段，行转变为记录。
Borland Paradox	DB	3.5 和 4.0 版本 Paradox 表
您也可以使用 Microsoft Access 文件和文本文件。有关详细内容，请参阅在 Visual FoxPro 中使用 Access 数据或导入、追加或导出文本文件。


请参阅

追加数据

导出数据

IMPORT 命令

导入、追加或导出文本文件

将数据导入新表

使用导入向导导入数据

从 Lotus 1-2-3 导入

从 Microsoft Excel 中导入

在 Visual FoxPro 中使用 Access 数据


使用导入向导导入数据

请参阅

导入向导可以帮助您利用源文件创建一个新表。向导提出一系列问题，并根据您的回答导入文件，而且允许您控制新表的结构。

� 若要使用导入向导导入文件

1.	从“文件”菜单中选择“导入”命令。

2.	从“导入”对话框中选择“导入向导”。

3.	按照向导屏幕上的提示进行操作。


请参阅

将数据导入新表

导入向导


将数据导入新表

请参阅

您可以从表或电子表格中导入数据，并用源文件的结构定义新表。

� 若要向新表中导入数据

1.	从“文件”菜单中选择“导入”命令。

2.	在“类型”框中，输入要导入文件的格式。

3.	在“来源”框内，输入源文件名。

4.	如果在“类型”框内选定了一个电子表格，在新显示的“工作表”框内输入工作表号。

5.	选择“确定”。

Visual FoxPro 使用源文件创建一个新表。


请参阅

追加数据

选择导入文件类型

导出数据

导入 (文件菜单)

使用导入向导导入数据

表设计器


追加数据

请参阅

您可以把文本、电子表格或者表中的数据添加到一个已有的 Visual FoxPro 表中。默认情况下，Visual FoxPro 使用该文件类型将源字段映象到目标表中。您也可以选定要追加的字段和记录。如果希望控制字段的映象，可以使用导入向导，但字段选择和逻辑表达式选项不可用。

若要	请参阅
使用“导入向导”追加数据	使用导入向导追加数据
直接将数据导入到一个表	把数据追加到已有表
指定追加字段	选择追加字段
指定追加特定记录	选择追加记录


请参阅

把数据追加到已有表

使用导入向导追加数据

导出数据

导入数据

选择追加字段

选择追加记录


选择追加文件类型

请参阅

Visual FoxPro 支持很多种追加文件类型。如果您的文件类型未出现于下面的列表中，请参阅 APPEND FROM 以获得 Visual FoxPro 所支持文件类型的详细信息。

文件类型	文件扩展名	说明
表	DBF	来源于当前数据库以外的 FoxPro 数据库表或者一个 dBASE 文件。
制表符分隔	TXT	用制表符分隔每个字段的一种文本文件。
逗号分隔	TXT	用逗号分隔每个字段的一种文本文件。
空格分隔	TXT	用空格分隔每个字段的一种文本文件。
System Data Format	SDF	具有定长记录且记录以回车和换行符结尾的文本文件。
Microsoft Excel	XLS	Microsoft Excel（2.0、3.0、4.0 和 5.0 版本）电子表格格式。列单元转变为字段，行单元转变为记录。
Lotus 1-2-3	WKS WK1 WK3	1-A、2.x 和 3.x 版本的 Lotus 电子表格。列单元转变为字段，行转变为记录。
Borland Paradox	DB	3.5 和 4.0 版本的 Paradox 表。


请参阅

APPEND FROM 命令

导出数据

导入、追加或导出文本文件

导入数据

在 Visual FoxPro 中使用 Access 数据


使用导入向导追加数据

请参阅

导入向导提出一系列问题，并且根据您的回答从源文件导入数据。使用向导，可以通过更改列数来选择将源字段映象到目标字段。

� 若要使用导入向导从文件追加数据

1.	从“文件”菜单中选择“导入”。

2.	从“导入”对话框中选择“导入向导”。

3.	按照向导屏幕上的提示进行操作。


请参阅

导出数据

导入 (文件菜单)

导入向导

导入数据


把数据追加到已有表

请参阅

您可以从其他文件向活动表中添加记录。默认情况下，Visual FoxPro 将所有记录和字段添加到表中。使用“追加来源”选项，可以选定字段或者选定记录.。

� 若要追加数据

1.	“浏览”目标表。

2.	从“表”菜单中选择“追加记录”。

3.	在“类型”框内输入源文件的格式。

4.	在“来源”框中输入源文件名。

5.	在“到”框中，确保表名的正确性。

附注

如果表名不正确，应选择“取消”，然后打开正确的目标表。当您选定“追加来源”命令时，“到”框中显示的表是活动的。

6.	如果想指定追加字段或有选择地追加记录，选择“选项”按钮并在“选项”对话框中填入适当的内容。

7.	选择“确定”。

Visual FoxPro 将记录添加到表中。


请参阅

追加来源选项对话框

追加记录 (表菜单)

追加数据

选择追加文件类型

导出数据

选择追加字段

选择追加记录


选择追加字段

请参阅

若希望仅从源文件中追加某些字段，可以选择这些字段，使它们包含于“追加来源”过程中。

� 若要选择追加字段

1.	从“表”菜单中选择“追加记录”。

2.	在“追加来源”对话框中，输入源文件类型和文件名，然后选择“选项”。

3.	在“追加来源选项”对话框中，选择“字段”。“字段选择器”对话框显示了目标表中的字段。

4.	选择希望从源文件中追加的字段，并选择“移入”，然后选择“确定”。

所选的字段出现在“选定字段”框中。

5.	选择“确定”。


请参阅

追加来源 (表菜单)

选择追加记录


选择追加记录

请参阅

如果希望仅追加某些记录，可以使用“FOR”表达式。

� 若要选择追加记录

1.	“浏览”目标表，然后从“表”菜单中选择“追加记录”。

2.	输入源文件类型和名称，然后选择“选项”。

3.	在“For”框内输入一个表达式。

  或者

选择“For”，在“表达式生成器”对话框中构造一个表达式。

附注

不必输入“FOR”命令，因为它是隐含的。例如，键入 customer.country = "Canada"，仅追加有关加拿大的信息。

4.	选择“确定”。


请参阅

表达式生成器对话框

选择追加字段


导出数据

请参阅

您可以把数据从 Visual FoxPro 表导出到文本文件、电子表格或者其他应用程序使用的表中。导出过程需要一个源表以及目标文件的类型和名称。如有必要，还可以对导出哪些字段和记录进行选择。您可以在任何支持所选文件类型的应用程序中使用生成的文件。

若要	请参阅
导出 Visual FoxPro 数据	向新文件中导出数据
导出到某一文件类型	选择导出的文件类型
仅导出某些字段	选择导出字段
仅导出某些记录	选定要导出的记录


请参阅

追加数据

选择导出的文件类型

向新文件中导出数据

导入数据

选择导出字段

选定要导出的记录


选择导出的文件类型

请参阅

您可以导出各种类型的文件。如果您的文件类型未出现在下面的列表中，请参阅 COPY TO 以获得 Visual FoxPro 所支持文件类型的详细信息。

文件类型	文件扩展名	说明
制表符分隔	TXT	用制表符分隔每个字段的文本文件。
逗号分隔	TXT	用逗号分隔每个字段的文本文件。
空格分隔	TXT	用空格分隔每个字段的文本文件。
System Data Format	SDF	具有定长记录且记录以回车和换行符结尾的文本文件。
Table	DBF	Visual FoxPro、FoxPro、FoxBASE+���dBASE 或 Paradox 3.5 或 4.0 表。
Microsoft Excel	XLS	Microsoft Excel（2.0、3.0、4.0 和 5.0版本）电子表格格式。列单元转变为字段，行转变为记录。
Lotus 1-2-3	WKS WK1	1-A、2.X 和 3.X 版本 Lotus1-2-3 电子表格。列单元转变为字段，行转变为记录。


请参阅

追加数据

COPY TO 命令

向新文件中导出数据

导出数据

导入、追加或导出文本文件

导入数据

在 Visual FoxPro 中使用 Access 数据


向新文件中导出数据

请参阅

您可以把所有字段和记录从 Visual FoxPro 表复制到一个新文件中，也可以仅复制选定的字段和记录。

� 若要导出数据

1.	从“文件”菜单中选择“导出”。

2.	在“类型”框中输入目标文件类型.。

3.	在“到”框中，输入目标文件名。

4.	在“来源”框中，输入源文件名。

5.	如果想挑选导出的字段或记录，应选择“选项”并在“导出选项”对话框填入相应的内容。

6.	选择“确定”。


请参阅

追加数据

选择导出的文件类型

导入数据

选择导出字段

选定要导出的记录


选择导出字段

请参阅

默认情况下，Visual FoxPro 将源表中所有字段导出到目标文件中。使用“导出选项”对话框，可以选择要导出哪些字段。

� 若要选择导出字段

1.	从“文件”菜单中选择“导出”。

2.	在“导出”对话框中，输入目标文件的类型和名称。

3.	在“来源”框中，输入源文件名。

4.	选择“选项”。

5.	在“字段”框中输入想导出的字段

  或者

选择“字段”并从“字段选择器”对话框中选择字段。

6.	选择“确定”。


请参阅

导出 (文件菜单)

导出选项对话框

选定要导出的记录


选择导出记录

请参阅

在导出数据时，可能需要通过提供选择条件来限制复制到新文件中的记录数目。您可以：

 •	   通过指定数量或范围来选择一定范围内的记录。

 •	   构造一个 FOR 表达式来选择符合条件的记录。

 •	   构造一个 WHILE 表达式来选择记录，直到发现一条不符合条件的记录为止。

您可以使用上述选项的任意组合。WHILE 表达式将忽略其他条件。


请参阅

控制导出记录的选择

选择一定数量或范围的导出记录

选择导出字段

选择符合某一条件的记录


选择一定数量或范围的导出记录

请参阅

限制记录数目的方法之一是指定一定数量或范围的记录。使用“范围”选项，可以选择一条记录或者在文件中连续放置的一组记录。

附注

活动索引和当前记录指针会影响范围选项中“后续”和“其余”的结果。例如，按“姓”索引的表的下一条记录可能不同于按“州”索引的表的下一条记录，但不影响“记录”选项，因为表被索引时记录的序号并不改变。

� 若要选择有限数目的记录

1.	从“文件”菜单中选择“导出”。

2.	输入源表和目标文件信息。

3.	选择“选项”。

4.	选择“范围”。

5.	在“范围”对话框中选择适当的范围选项。

若要导出	请选择
源文件中的每一条记录	全部
从当前记录开始的一系列记录	后续
某一特定记录	记录
当前记录直到文件尾的记录	其余
6.	选择“确定”。

Visual FoxPro 将导出所选范围内的记录。


请参阅

控制导出记录的选择

范围对话框

选择符合某一条件的记录


选择符合某一条件的记录

请参阅

如果您希望所选记录在表内不是连续的，可以构造一个逻辑表达式来指定导出记录必须满足的条件。例如，可以选择导出某一字段具有特定值的所有记录。

� 若要输入选择记录的条件

1.	从“文件”菜单中选择“导出”。

2.	输入源表和目标文件信息。

3.	选择“选项”。

4.	在“For”框内输入“FOR”表达式。

  或者

选择“For”，在“表达式生成器”对话框中构造表达式。

附注

不需要在表达式中加入“FOR”命令。例如，键入 customer.country = "Canada"，仅导出有关加拿大的数据。

5.	选择“确定”。

Visual FoxPro 将评估所有的记录，并选择那些匹配表达式中条件的记录。


请参阅

控制导出记录的选择

表达式生成器对话框

选择一定数量或范围的导出记录

选择导出字段


控制导出记录的选择

请参阅

在导出时，可以指定一个必须得到满足才继续评估和选择记录的条件，用“WHILE”表达式可以输入这个条件。

提示

如果您在一个未索引过的文件中使用 WHILE 表达式，选择过程有可能在评估所有合适的记录之前结束。在实施导出过程之前，确保源表对您想使用的 WHILE 表达式有适当的活动索引。有关详细内容，请参阅使用 WHILE 表达式。

� 若要输入结束记录选择的条件

1.	从“文件”菜单中选择“导出”。

2.	输入源表和目标文件信息。

3.	在 While 框中输入一个 WHILE 表达式。

  或者

选择 While，使用“表达式生成器”对话框。

附注

不需要在语句中加入 WHILE 命令。例如，键入 sales > 1000 将只查看销售额高于 1,000 美元的记录。

4.	选择“确定”。

当表达式为真时，Visual FoxPro 将导出相应的记录。


请参阅

表达式生成器对话框

选择一定数量或范围的导出记录

选择导出字段

选择符合某一条件的记录

使用 WHILE 表达式


在 Visual FoxPro 中使用 Access 数据

请参阅

如果想在 Visual FoxPro 中读写 Access 数据，可以通过 ODBC 驱动程序使用远程视图来连接数据。

� 若要读写 Access 数据

1.	定义连接.

2.	创建远程视图.

3.	使用视图.


请参阅

创建远程视图

定义连接

使用视图

视图设计器


导入、追加或导出文本文件

请参阅

如果不想使用导入向导从文本文件中导入新表，那么必须先创建一个字段顺序、数据类型和宽度都与文本文件中字段相匹配的新表，然后将文本追加到新表中。

如果从文本文件追加记录或将记录导出到文本文件中，Visual FoxPro 将假定字段是用逗号隔开的并且每一字符字段都用引号括起来。如果已经把小数点字符设置为逗号，则数值和货币数据可能被当作独立的字段来处理。有关详细内容，请参阅追加或导出数值或货币文本。

要从文本文件追加记录或将记录导出到文本文件中，可以使用带有下表所示的 DELIMITED 子句的 APPEND FROM 或 COPY TO 命令。

对于这些分隔符	使用此 DELIMITED 子句
字段之间用逗号，字符字段用引号括起	DELIMITED
字符字段用除引号之外的字符括起	DELIMITED WITH delimiter
字段之间用制表符分隔	DELIMITED WITH TAB
字段之间用空格分隔	DELIMITED WITH BLANK1
1 日期和时间用空格隔开会当作两个字段来处理.


请参阅

APPEND FROM 命令

把数据追加到已有表

追加或导出数值或货币文本

COPY TO 命令

向新文件中导出数据

SET POINT 命令


追加或导出数值或货币文本

请参阅

如果把 Visual FoxPro 小数点字符更改为逗号，那么在追加或导出数据时，数值数据和货币数据将被分作不同的字段来对待。例如，Visual FoxPro 可能把数值 100,00 当作两个字段来处理。因为它以逗号隔开的方式出现。要确保正确地处理逗号请选择下面两种方法中的一种：

 •	   用制表符分隔文本文件中的字段

 •	   把小数点字符再改为原来的句点符

如果要从文本文件追加记录，先把字段分隔符改变为制表符，然后使用带关键字 DELIMITED WITH TAB 的 APPEND FROM 命令。如果需要导出文本，可以使用带关键字 DELIMITED WITH TAB 的COPY TO 命令。

如果想在追加记录或导出文本文件之前，把小数点字符改变为句点符，可以在追加记录或导出文本文件后将小数点字符改回逗号。

� 若要改变小数点字符

1.	在命令窗口中，键入如下命令。

SET POINT TO

2.	使用 DELIMITED 关键字导入或导出文件。

3.	在命令窗口中，键入如下命令重置小数点字符为逗号。

SET POINT TO ','


请参阅

APPEND FROM 命令

把数据追加到已有表

COPY TO 命令

向新文件中导出数据

导入、追加或导出文本文件

SET POINT 命令


从 Microsoft Excel 中导入�
从 Microsoft Excel 中导入

请参阅

当导入 Microsoft Excel 电子表格数据时，Visual FoxPro 使用 Microsoft Excel 电子表格第一行来确定新表中字段的数据类型。如果第一行的每一列都有文本标题时，表中所有字段都将是字符型，即使其他行包含数值型数据时也是如此。

� 若要确保字段具有适当的数据类型

 •	   在 Microsoft Excel 中修改电子表格，使第一行包含表中第一个记录的数据。

注意

如果 Excel 电子表格中的某一字段长度为 255，那么当其导入到 Visual FoxPro 表中时，这个字段将被截短为 254。


请参阅

APPEND FROM 命令

选择导入文件类型

数据类型和字段类型

IMPORT 命令


从 Lotus 1-2-3 导入

请参阅

当导入 Lotus 1-2-3 电子表格数据时，Visual FoxPro 使用 Lotus 1-2-3 电子表格的第一行确定新表字段的数据类型。如果第一行的每一列都有文本标题时，表中所有字段都将是字符型，即使其他行包含数值型数据时也是如此。

� 若要确保字段具有适当的数据类型

 •	   在 Lotus 1-2-3 中修改电子表格，使第一行包含表中第一个记录的数据。

注意

如果工作表的版本是 2.x 或 3.x（文件扩展名为 .WK1 或 .WK3），并且工作表有多于八或九个字符的列，那么 Visual FoxPro 将字符字段截短：2.x 版电子表格为九个字符，3.x 版为八个字符。要防止截短表中的字段，可以使用导入向导或创建一个 Visual FoxPro 表，然后从电子表格追加记录。

Lotus 把日期当作自 1900 年 1 月 1 日开始的非负天数来保存。如果新表中没有正确的数据类型，可以在 Visual FoxPro 中转换 Lotus 日期字段。


请参阅

APPEND FROM 命令

把数据追加到已有表

将数据导入新表

IMPORT 命令

转换 Lotus 日期字段


转化 Lotus 日期字段

请参阅

如果日期字段错误地导入，可以把 1900 年 1 月 1 日的儒略历日期（数值 2415019）加上字段中的日期值来转化。

� 若要转化 Lotus 日期字段

1.	把电子表格导入到 Visual FoxPro 表中。

2.	用表设计器修改表并在表中添加一个新日期字段。

3.	如果日期以数值形式导入，使用 REPLACE 命令和 CTOD( ) 函数将日期复制到新字段中：

REPLACE ALL NewDateField ;

WITH CTOD(SYS(10,OldDateField+2415019))

— 或者 —

如果日期以字符形式导入，使用下面命令将日期复制到新字段中：

REPLACE ALL NewField ;

WITH CTOD(SYS(10,VAL(OldField)+2415019))

4.	从表中删除原来的、不正确的日期字段。


请参阅

CTOD( ) 函数

IMPORT 命令

将数据导入到新表中

导入数据

从 Lotus 1-2-3 导入

 REPLACE 命令

表设计器


使用 WHILE 表达式

请参阅

如果使用 WHILE 表达式来选择记录，请考虑下列建议以确保所有可能与条件相匹配的记录都被处理：

 •	   设置索引可以顺序排列文件中的记录。如果记录没有排序，可能在表达式计算值为假 (.F.) 时结束选择过程，而此时尚未选择所有适当的记录。

 •	   使用 SEEK 和 SET NEAR 命令，可以将记录指针定位在第一个匹配的记录上。如果记录指针不在第一个匹配记录上，那么选择过程可能因匹配条件很快就计算为假值(.F.)而过早结束，或者错过位于记录指针之前的匹配记录。


请参阅

控制记录的选择

表达式生成器

SEEK 命令

选定要导出的记录

SET NEAR 命令

用索引设置记录顺序

WHILE 子句


创建数据库

请参阅

设计完数据库之后，就可以进行创建数据库的实际工作。

� 若要创建一个新数据库

 •	   在项目管理器中，选择“数据”选项卡，然后选择“数据库”，最后选择“新建”按钮。

— 或者 —

 •	   使用 CREATE DATABASE 命令。

例如，下面的代码创建并以独占方式打开了一个叫做 Sample 的新数据库。

CREATE DATABASE sample

创建一个数据库后，就可应用命令和函数对它进行操作。有关详细内容，请参阅处理数据库及其对象。


请参阅

CREATE DATABASE 命令

数据库设计器

处理数据库及其对象.

项目管理器


处理数据库及其对象

请参阅

您可以用下面的命令和函数以编程方式对数据库及其对象进行操作。

操作数据库及数据库对象的命令和函数

ADATABASES ( )	CREATE VIEW	MODIFY CONNECTION
ADBOBJECTS( )	DBC( )	MODIFY DATABASE
ADD TABLE	DBGETPROP( )	MODIFY PROCEDURE
ALTER TABLE	DBSETPROP( )	MODIFY STRUCTURE
APPEND PROCEDURES	DELETE CONNECTION	MODIFY VIEW
CLOSE DATABASE	DELETE DATABASE	OPEN DATABASE
COPY PROCEDURES	DELETE VIEW	PACK DATABASE
CREATE CONNECTION	DISPLAY DATABASE	REMOVE TABLE
CREATE DATABASE	INDBC( )	SET DATABASE
CREATE SQL VIEW	LIST DATABASE	VALIDATE DATABASE
CREATE TABLE


请参阅

ADATABASES( ) 函数

ADBOBJECTS( ) 函数

ADD TABLE 命令

ALTER TABLE - SQL 命令

APPEND PROCEDURES 命令

CLOSE 命令

COPY PROCEDURES 命令

CREATE CONNECTION 命令

CREATE DATABASE 命令

CREATE SQL VIEW 命令

CREATE TABLE - SQL 命令

CREATE VIEW 命令

DBC( ) 函数

DBGETPROP( ) 函数

DBSETPROP( ) 函数

DELETE CONNECTION 命令

DELETE DATABASE 命令

DELETE VIEW 命令

DISPLAY DATABASE 命令

INDBC( ) 函数

LIST DATABASE 命令

MODIFY CONNECTION 命令

MODIFY DATABASE 命令

MODIFY PROCEDURE 命令

MODIFY STRUCTURE 命令

MODIFY VIEW 命令

OPEN DATABASE 命令

PACK DATABASE 命令

REMOVE TABLE 命令

SET DATABASE 命令

VALIDATE DATABASE 命令


 管理数据库

请参阅

您可把表和其他对象添加到数据库中，也能够在数据库之外使用表。可以从数据库中移去表，或者删除数据库本身。

若要	请参阅
添加表或其他文件	在数据库中添加自由表
在数据库之外使用表	使用未添加到数据库中的表
从数据库中移去表	从数据库中移去表
在项目中添加数据库	在项目中添加数据库
从项目中移去数据库	从项目中移去数据库
删除数据库	删除数据库


请参阅

在项目中添加数据库

在数据库中添加自由表

数据库设计器

删除数据库

从项目中移去数据库

从数据库中移去表

使用未添加到数据库中的表


在数据库中添加自由表
在数据库中添加表

请参阅

您可在一个打开的数据库中创建表，或向数据库中添加已有的表，把表和数据库联系起来。

� 若要在数据库中添加一个自由表

 •	   在“全部”选项卡或“数据”选项卡中选择“表”，然后选择“添加”按钮。

— 或者 —

 •	   使用 ADD TABLE 命令。

例如，下面的代码打开 testdata 数据库，并向其中添加 orditems 表：

OPEN DATABASE testdata

ADD TABLE orditems


请参阅

ADD TABLE 命令

数据库设计器

项目管理器


使用未添加到数据库中的表

请参阅

您可以把一个已有的表和一个数据库关联起来。但是，如果不把一个已有表加到数据库中，您仍可以使用该 .DBF 文件的数据。

� 若要访问其他数据库中的表

 •	   在引用该表的数据库中创建视图。

— 或者 —

 •	   使用 USE 命令和“!”符号访问该表。

使用“!”符号可以引用一个不在当前数据库中的表。例如，如果想浏览 testdata 数据库中的 orditem 表，可键入：

USE testdata!orditems

BROWSE


请参阅

创建本地视图

创建远程视图

创建多表视图

USE


从数据库中移去表

请参阅

从数据库移去表时，还可以选择是否从磁盘上永久删除该表文件。

� 若要从数据库中移去表

 •	   在项目管理器中选定表名，然后选择“移去”按钮。

— 或者 —

 •	   从数据库设计器中选定表，并从“数据库”菜单中选择“移去”按钮。

— 或者 —

 •	   使用 REMOVE TABLE 命令。

例如，下面的代码打开了 testdata 数据库并移去 orditems 表：

OPEN DATABASE testdata

REMOVE TABLE orditems


请参阅

数据库设计器

项目管理器

重建表与数据库的链接

REMOVE TABLE 命令


在项目中添加数据库

请参阅

可以把数据库添加到一个项目中，这样能通过界面更方便地组织、查看和操作数据库对象，同时还能简化连编应用程序的过程。要把数据库添加到项目中，只能通过项目管理器来实现。

� 若要把数据库添加到项目中

 •	   在项目管理器中，选择“数据库”，然后选择“添加”按钮。


请参阅

项目管理器


从项目中移去数据库

请参阅

要从项目中移去数据库，也只能通过项目管理器来实现。

� 若要从项目中移去数据库

 •	   在项目管理器中，选定要移去的数据库并选择“移去”按钮，然后再次选择“移去”按钮。


请参阅

项目管理器


删除数据库

请参阅

可使用项目管理器或 DELETE DATABASE 命令从磁盘上删除数据库。

� 若要删除数据库

 •	   在项目管理器中，选定要删除的数据库并选择“移去”按钮，然后再选择“删除”按钮。

— 或者 —

 •	   使用 DELETE DATABASE 命令。

例如，下面的代码删除了 sample 数据库：

DELETE DATABASE sample

附注

DELETE DATABASE 命令并没有从磁盘上删除和数据库有关联的表，而只是把和数据库有关的表变成自由表。如果想从磁盘上删除数据库及所有关联的表，请使用 DELETE DATABASE 命令的 DELETE TABLES 子句。


请参阅

DELETE DATABASE 命令

项目管理器


引用多个数据库

请参阅

在您的系统中，可以有许多 Visual FoxPro 数据库。有两种同时使用多个数据库的方式：一种是同时打开多个数据库，另一种是不打开数据库而引用其中的表。如果打开了多个数据库，可以设置一个当前数据库，并在其中选择表。

若要	请参阅
打开多个数据库	打开多个数据库
关闭数据库	关闭数据库
设置当前数据库	设置当前数据库
使用当前数据库中的表	选择当前数据库中的表


请参阅

关闭数据库

打开多个数据库

选择当前数据库中的表

设置当前数据库


打开多个数据库

请参阅

您可以同时打开多个数据库。

� 若要打开多个数据库

 •	   在项目管理器中，选定一个数据库，然后选择“修改”按钮或“打开”按钮。

— 或者 —

 •	   使用 OPEN DATABASE 命令。


请参阅

OPEN DATABASE 命令

打开文件 (项目菜单)

项目管理器


设置当前数据库

请参阅

可通过交互方式或使用 SET DATABASE 命令选择另外一个数据库作为当前数据库。

� 若要设置当前数据库

 •	   在常用工具栏中，从“数据库”框中选择一个数据库。

— 或者 —

 •	   使用 SET DATABASE 命令。


请参阅

SET DATABASE 命令

常用工具栏


选择当前数据库中的表

请参阅

可以使用 USE 命令，在当前数据库的一系列表中选择要用到的表。

� 若要从当前数据库选择表

 •	   请使用带“?”字符的 USE 命令。

显示“使用”对话框后，选定并打开一个表。

例如，下面的代码打开了 sales 数据库，并提示您在数据库的一系列表中选定一个表：

OPEN DATABASE SALES

USE ?


请参阅

USE 命令


关闭数据库

请参阅

可以使用项目管理器或 CLOSE DATABASE 命令关闭一个已打开的数据库。

若要关闭数据库

 •	   从项目管理器中，选定要关闭的数据库并选择“关闭”按钮。

— 或者 —

 •	   使用 CLOSE DATABASE 命令。

例如，下面的代码关闭了 testdata 数据库：

SET DATABASE TO testdata

CLOSE DATABASE


请参阅

CLOSE 命令

关闭文件 (项目菜单)

项目管理器


查看和修改数据库结构

请参阅

要了解数据库的组织结构，您可以浏览数据库文件，查看分层结构，检查数据库有效性，甚至可以扩展 .DBC 数据库文件。

若要	请参阅
查看数据库分层结构	查看数据库分层结构
检查数据库	检查数据库
检查从表到数据库的链接	重建表与数据库的链接
编辑 .DBC 文件	扩展数据库文件


请参阅

扩展数据库文件

重建表与数据库的链接

检查数据库

查看数据库分层结构


查看数据库分层结构

请参阅

数据库设计器窗口可显示已打开数据库的分层结构。

� 若要显示数据库分层结构

 •	   使用 MODIFY DATABASE 命令。

例如，下面的代码打开 testdata 数据库，并在数据库设计器中显示其分层结构：

MODIFY DATABASE testdata


请参阅

数据库设计器

MODIFY DATABASE 命令

使用数据库


扩展数据库文件

请参阅

为适应开发者的需要，也可以扩展 .DBC 文件，添加字段。要修改 .DBC 文件的结构，必须独占地访问它。

� 若要在 .DBC 文件中添加一个字段

1.	用 USE 命令以独占方式打开 .DBC 文件。

2.	使用 MODIFY STRUCTURE 命令。

例如，下面的代码打开表设计器，然后在 TESTDATA.DBC 结构中添加字段：

USE TESTDATA.DBC EXCLUSIVE

MODIFY STRUCTURE

注意

不要更改 .DBC 文件中任何已存在的 Visual FoxPro 定义字段，对.DBC 文件所做的任何改动都可能影响到数据库的完整性。


请参阅

MODIFY STRUCTURE 命令

表文件的结构

表文件的表结构

USE 命令


检查数据库

请参阅

您可以用 VALIDATE DATABASE 命令检查当前数据库的完整性。

� 若要检查数据库

 •	   使用 VALIDATE DATABASE 命令。

例如，下面的代码打开并检查 testdata 数据库的 .DBC 文件：

OPEN DATABASE testdata EXCLUSIVE

VALIDATE DATABASE


请参阅

FREE TABLE 命令

重建表与数据库的链接

VALIDATE DATABASE 命令


使用数据词典功能
 使用数据字典功能

请参阅

Visual FoxPro 数据字典使您可以创建：

 •	   长表名。

 •	   对每个字段、表和数据库的注释。

 •	   长字段名。

 •	   在浏览窗口中显示的字段和表格列标头的标题。

 •	   字段的默认值。

 •	   主关键字和候选索引关键字。

 •	   字段级规则和记录级规则。

 •	   触发器。

 •	   数据库表间的永久关系。

 •	   存储过程。

 •	   到远程数据源的连接。

 •	   本地和远程视图。

若要	请参阅
创建长表名	命名表
创建数据库的注释	创建数据库的注释
创建数据库表的备注	表属性对话框
创建字段的注释	给字段添加注释
创建长字段名	命名字段
创建字段的标题	创建字段的标题
创建字段的默认值	设置或更改默认值
创建字段级规则	字段值的限制
创建记录级规则	检查记录级规则
创建触发器	创建触发器
创建数据库间的永久关系	创建永久关系
创建存储过程	创建存储过程
创建一个到远程数据源的连接	定义连接
创建本地数据视图	创建本地视图
创建远程数据视图	创建新远程视图


请参阅

给字段添加注释

创建数据库的注释

创建本地视图

创建新远程视图

创建字段的标题

创建永久关系

创建存储过程

创建触发器

定义连接

字段值的限制

命名表

命名字段

设置或更改默认值

表属性对话框

检查记录级规则


创建存储过程

请参阅

您可以为数据库中的表创建存储过程。

� 若要创建、修改或移去存储过程

 •	   在项目管理器中，选择并展开一个数据库，选定“存储过程”，然后选择“新建”、“修改”或“移去”按钮。

— 或者 —

 •	   在数据库设计器中，从“数据库”菜单中选择“编辑存储过程”按钮。

— 或者 —

 •	   在命令窗口中，使用 MODIFY PROCEDURE 命令。

这几种方法都将打开 Visual FoxPro 文本编辑器，帮助您创建或修改当前数据库的存储过程。


请参阅

数据库设计器

MODIFY PROCEDURE 命令

项目管理器


创建永久关系

请参阅

可在数据库中创建表间的永久关系。

� 若要创建表间的永久关系

 •	   在数据库设计器中，选择想要关联的索引名，然后把它拖到相关表的索引名上。

— 或者 —

 •	   和 CREATE TABLE 或 ALTER TABLE 命令一起使用 FOREIGN KEY 子句。

� 若要删除表间的永久关系

1.	在数据库设计器中，单击两表间的关系线。

关系线变粗，表明已选择了该关系。

2.	按下 delete 键。

— 或者 —

 •	   在 ALTER TABLE 命令中，使用 DROP FOREIGN KEY 子句。


请参阅

ALTER TABLE - SQL 命令

CREATE TABLE - SQL 命令

数据库设计器

临时相关表


创建数据库的注释

请参阅

您可以使用 DBSETPROP( ) 函数为数据库设置注释属性。

� 若要设置当前数据库的注释属性

 •	   使用 DBSETPROP( ) 函数的 comment 选项。

例如，下面的代码为 testdata 数据库更改注释：

? DBSETPROP('testdata', 'database', 'comment', ;

    'TestData is a small sample database included with Visual FoxPro')


请参阅

DBSETPROP( ) 函数


创建和编辑表的命令

请参阅

在编程时，您可以用以下命令创建并编辑表：

ALTER TABLE	CREATE TABLE	REMOVE TABLE
CLOSE TABLES	DELETE FILE


请参阅

ALTER TABLE - SQL 命令

CLOSE 命令

CREATE TABLE - SQL 命令

创建数据库表

创建自由表

DELETE FILE 命令

REMOVE TABLE 命令

表设计器


创建数据库表

请参阅

通过菜单系统、项目管理器或者使用语言，可以在数据库中创建新表。

� 若要创建新的数据库表

 •	   在项目管理器中选定“数据库”，然后选定“表”，再单击“新建”按钮打开表设计器。

 — 或者 —

 •	   在打开数据库后，使用 CREATE TABLE 命令。

例如，以下代码可以创建一个名为 smalltbl 的表，该表只有一个名为 name 的字段：

OPEN DATABASE ?

CREATE TABLE smalltbl (name c(50))

新表将自动与创建该表时所打开的数据库相关联。


请参阅

CREATE TABLE - SQL 命令

创建数据库

创建自由表

项目管理器

表设计器


创建自由表

请参阅

自由表就是与数据库不关联的表。例如，要想保存多个数据库所共享的查找信息，就可以创建一个自由表。

� 若要创建新的自由表

 •	   在项目管理器中选定“自由表”，然后单击“新建”按钮打开表设计器。

 — 或者 —

 •	   在不打开数据库的情况下，使用 CREATE TABLE 命令。

例如，以下代码可以创建一个名为 smalltbl 的自由表，该表只有一个名为 name 的字段：

CLOSE DATABASES

CREATE TABLE smalltbl (name c(50))

由于在创建该表时没有打开任何数据库，所以这个新表是一个自由表。


请参阅

CREATE TABLE - SQL 命令

创建数据库表

项目管理器

表设计器


命名表

请参阅

表名可以由字母、数字或下划线组成，但表名的第一个字符必须是字母或下划线。

如果是数据库表，则可以指定一个长表名。长表名最多可包含 128 个字符，并且可以用来代替短表名以标识数据库表。

� 若要给出数据库表的长表名

 •	   在表设计器的“表名”文本框中输入长表名。

 — 或者 —

 •	   使用 CREATE TABLE 命令的 NAME 子句。

例如，以下代码可以创建一个名为 vendintl 的表，并给表命名一个更容易理解的长表名 vendors_international：

CREATE TABLE vendintl NAME vendors_international (company C(40))


请参阅

CREATE TABLE - SQL 命令

表设计器

Visual FoxPro 命名规则


删除数据库表

请参阅

如果表与数据库相关联，当从数据库中移去表时，可以选择是否进行删除。

� 若要从磁盘中删除数据库表

 •	   在项目管理器中选定表，选择“移去”按钮，然后选择“删除”按钮。

 — 或者 —

 •	   在数据库设计器中选定表，在“数据库”菜单中选择“移去”，然后选择“删除”。

 — 或者 —

 •	   使用 REMOVE TABLE 命令的 DELETE 子句。

例如，以下代码可以打开名为 testdata 的数据库，并删除 orditems 表：

OPEN DATABASE testdata

REMOVE TABLE orditems DELETE

在使用 REMOVE TABLE 命令的 DELETE 子句删除表时，同时也移去了与表相关联的 .FPT 备注文件和 .CDX 结构索引文件。


请参阅

数据库设计器

删除自由表

项目管理器

REMOVE TABLE 命令

从数据库中移去表


删除自由表

请参阅

如果表与数据库不关联，可以通过项目管理器或使用 DELETE FILE 命令删除表文件。

� 若要删除自由表

 •	   在项目管理器中选定要删除的自由表，选择“移去”按钮，然后选择“删除”按钮。

 — 或者 —

 •	   使用 DELETE FILE 命令。

例如，如果 sample 是当前表，以下代码可以关闭该表，并在磁盘上删除该文件：

USE

DELETE FILE sample.dbf


请参阅

DELETE FILE 命令

删除数据库表

项目管理器

从数据库中移去表


命名字段

请参阅

请在创建新表时指定字段名。自由表的字段名最多可包含 10 个字符，数据库表的字段名最多可包含 128 个字符。如果从数据库中移去一个表，那么此表的长字段名将被截短成 10 个字符。

� 若要给表字段命名

 •	   在表设计器的“字段名”文本框中输入字段名。

 — 或者 —

 •	   使用 CREATE TABLE 命令。

例如，用以下命令可以创建并打开名为 customer 的表，该表有三个字段：cust_id 、company 和 customer：

CREATE TABLE customer (cust_id C(6), company C(40), contact C(30))


请参阅

CREATE TABLE - SQL 命令

在数据库中设置字段属性

表设计器

Visual FoxPro 命名规则


给字段添加注释

请参阅

在数据库中创建了表之后，可以添加每个表字段的说明，使表更容易被理解和更新。

� 若要在数据库表中添加字段的注释

 •	   在表设计器的“字段注释”编辑区域中输入注释文本。

 — 或者 —

 •	   使用 DBSETPROP( ) 函数。

例如，可以输入“当前零售单价”作为字段的注释文本，来说明 orditems 表中的 unit_price 字段所存储的内容：

?DBSETPROP('orditems.price', 'field', 'comment', ;

 '当前零售单价)


请参阅

DBSETPROP( ) 函数

在数据库中设置字段属性

表设计器


创建字段的标题

请参阅

您可以为数据库表中的每个字段创建一个标题。

� 若要给数据库表的字段添加标题

 •	   在表设计器“字段属性”区域的“标题”框中输入标题文本。

 — 或者 —

 •	   使用 DBSETPROP( ) 函数。

例如，可以输入“Supplier_Fax”作为 supplier 表的 fax 字段的标题。

?DBSETPROP('supplier.fax', 'field', 'caption', 'Supplier_Fax)


请参阅

浏览窗口

DBSETPROP( ) 函数

在数据库中设置字段属性

表设计器


选择数据类型

请参阅

在创建每个表字段的同时，还要为字段所存储的数据选择数据类型。

� 若要选择字段的数据类型

 •	   在表设计器的“类型”列表中选择数据类型。

 — 或者 —

 •	   使用 CREATE TABLE 命令。

例如，以下命令可以创建并打开 products 表，该表有三个字段：prod_id ，prod_name 和 unit_price ：

CREATE TABLE products (prod_id C(6), prod_name C(40), unit_price Y)


请参阅

CREATE TABLE - SQL 命令

数据类型和字段类型

表设计器


使用 Null 值

请参阅

在建立新表时，可以指定表字段是否接受 null 值。

� 若要逐个字段地控制 null 值的输入

 •	   在表设计器中，选定或清除字段的 Null 列。当 Null 列被选定时，可以向该字段中输入 null 值。

 — 或者 —

 •	   使用 CREATE TABLE 命令的 NULL 和 NOT NULL 子句。

例如，以下命令可以创建并打开 customer 表，其中的 cust_id 和 company 字段不允许为 null 值，而 contact 字段则允许为 null 值：

CREATE TABLE customer (cust_id C(6) NOT NULL, ;

 company C(40) NOT NULL, contact C(30) NULL)

� 若要允许所有表字段都可以为 null 值

 •	   在表设计器中选定所有表字段的 Null 列。

 — 或者 —

 •	   先使用 SET NULL ON 命令，然后再使用 CREATE TABLE 命令。


请参阅

CREATE TABLE - SQL 命令

在字段中输入 null 值

处理 Null 值

SET NULL 命令

表设计器


创建字段的默认值

请参阅

无论是通过表设计器还是使用程序语言，都可以创建默认值。默认值可以是除了通用型之外的任何数据类型。

� 若要给数据库表字段指定默认值

 •	   在表设计器的“字段属性”区域内有一个“默认值”文本框，您可以在其中输入默认值。

 — 或者 —

 •	   使用 CREATE TABLE 命令的 DEFAULT 子句。

您也可以用 ALTER TABLE 命令的 SET DEFAULT 子句创建字段的默认值。


请参阅

ALTER TABLE - SQL 命令

CREATE TABLE - SQL 命令

在数据库中设置字段属性

表设计器


在实施约束时

请参阅

下表列出了数据有效性约束，它们按照 Visual FoxPro 引擎实施的顺序、应用级别以及引擎何时激活有效性的顺序进行排列：

实施机制	级	激活时机
NULL 有效性	字段/列	当从浏览中离开字段/列，或在执行 INSERT 或 REPLACE 更改字段值时。
字段级规则	字段/列	当从浏览中离开字段/列，或在执行 INSERT 或 REPLACE 更改字段值时。
记录级规则	记录	发生记录更新时。
候选/主索引	记录	发生记录更新时。
VALID 子句	表单	移出记录时。
触发器	表	在 INSERT，UPDATE 或 DELETE 事件中，表中值改变时。
约束按它们在表中出现的顺序激活，任何未通过的有效性测试都会中止命令的执行。


请参阅

创建触发器

字段值的限制

处理 Null 值

设置主索引或候选索引

检查记录级规则

Valid 事件

在检查字段级规则时


字段值的限制

请参阅

可以使用字段级有效性规则，来控制用户输入到字段中的信息类型，或检查一个独立于此记录其他字段值的字段数据。

� 若要创建字段级规则

 •	   在表设计器中的“字段属性”区域的“有效性规则”文本框中输入规则表达式。

 — 或者 —

 •	   使用 CREATE TABLE 命令的 CHECK 子句。

 — 或者 —

 •	   使用 ALTER TABLE 命令的 SET CHECK 子句。

可以通过给字段添加有效性文本，来定制当违反规则时要显示的提示信息。

� 若要在字段级规则中添加自定义错误信息

 •	   在表设计器中的“字段属性”区的“有效性说明”文本框里，输入想要定义的错误信息。

 — 或者 —

 •	   和 CREATE TABLE或 ALTER TABLE命令的 CHECK 子句一起使用可选的 ERROR 子句。


请参阅

ALTER TABLE - SQL 命令

CREATE TABLE - SQL 命令

表设计器

检查记录级规则

在检查字段级规则时


在检查字段级规则时

请参阅

字段级规则在字段值改变时发生作用。和触发器不同，即使数据在缓冲区中，字段级规则也可被激活。

数据输入方法	窗口或命令	检查字段级规则
用户界面	浏览窗口  表单 其他用户界面 窗口	在从字段上移开时，如果字段值已经改变，则检查字段级规则（如果字段值不改变，则不检查规则。)。
不指定字段的命令	APPEND APPEND GENERAL APPEND MEMO BROWSE CHANGE DELETE EDIT GATHER	在字段值改变时，检查字段级规则，按字段定义的顺序进行检查。
	APPEND BLANK INSERT INSERT  SQL	在追加或插入记录时，检查字段级规则。
指定字段的命令	UPDATE UPDATE  SQL REPLACE	根据命令中指定字段的顺序，检查字段级规则。


请参阅

APPEND 命令

APPEND GENERAL 命令

APPEND MEMO 命令

BROWSE 命令

浏览窗口

CHANGE 命令

DELETE 命令

EDIT 命令

GATHER 命令

INSERT 命令

INSERT  SQL 命令

REPLACE 命令

UPDATE 命令

UPDATE  SQL 命令


检查记录级规则

请参阅

使用记录级有效性规则，可以控制用户输入到记录中的信息类型。

� 若要创建记录级有效性规则和自定义错误信息

 •	   在表设计器中的“表属性”对话框的“有效性规则”和“有效性说明”中，输入想要定义的规则及错误信息。

 — 或者 —

 •	   使用 CREATE TABLE 或 ALTER TABLE 命令的 CHECK 子句。

也可以使用 ALTER TABLE 命令的 SET CHECK 子句，来创建记录级有效性规则。


请参阅

ALTER TABLE - SQL 命令

CREATE TABLE - SQL 命令

表设计器

在实施约束时


创建触发器

请参阅

对于每个表，可为下面三个事件各创建一个触发器：INSERT，UPDATE 及 DELETE。在任何情况下，一个表最多只能有三个触发器。触发器必须返回“真”(.T.) 或“假”(.F.)。

� 若要创建触发器

 •	   在表设计器中的“表属性”对话框里，在 INSERT、UPDATE 或 DELETE 触发器框中，输入触发器表达式或包含触发器表达式的存储过程名。

 — 或者 —

 •	   使用 CREATE TRIGGER 命令。


请参阅

CREATE TRIGGER 命令

移去或删除触发器

表设计器

在实施约束时


移去或删除触发器

请参阅

可以在界面中或使用 DELETE TRIGGER 命令从数据库表中删除触发器。

� 若要删除触发器

 •	   在表设计器的“表属性”对话框中，从 INSERT、UPDATE 或 DELETE 触发器框里选定触发器表达式，并删除它。

 — 或者 —

 •	   使用 DELETE TRIGGER 命令。

下面的示例从 customer 表中删除“更新”触发器：

DELETE TRIGGER ON customer FOR UPDATE


请参阅

创建触发器

DELETE TRIGGER 命令

表设计器


修改触发器

请参阅

可通过表设计器或者使用语言修改触发器。

� 若要修改触发器

 •	   在表设计器的“表属性”对话框中，在 INSERT、 UPDATE 或 DELETE 触发器框中输入新的触发器表达式。

 — 或者 —

 •	   使用 SET SAFETY OFF 命令，然后再使用 CREATE TRIGGER 命令。


请参阅

CREATE TRIGGER 命令

创建触发器

移去或删除触发器

SET SAFETY OFF 命令

表设计器


修改表结构

请参阅

可以打开表设计器修改表的结构，也可以使用 ALTER TABLE 命令以编程方式来更改表的结构。

� 若要使用表设计器修改表的结构

 •	   在项目管理器中选定要修改的表名，然后单击“修改”按钮。

 — 或者 —

 •	   在数据库设计器中选择要修改的表，然后在“数据库”菜单中选择“修改...”。

 — 或者 —

 •	   使用 MODIFY STRUCTURE 命令。

例如，可以使用以下命令修改数据库中的 employee 表的结构：

OPEN DATABASE testdata

USE employee EXCLUSIVE

MODIFY STRUCTURE

� 若要以编程方式修改表的结构

 •	   使用 ALTER TABLE 命令。


请参阅

ALTER TABLE - SQL 命令

数据库设计器

MODIFY STRUCTURE 命令

项目管理器


添加字段

请参阅

可以通过表设计器或使用语言给表添加新的字段。

� 若要给表添加字段

 •	   在表设计器中选择“插入”。

 — 或者 —

 •	   使用 ALTER TABLE 命令的 ADD [COLUMN] 子句。

例如，可以使用以下命令把字段 fax 添加到 customer 表中，并允许该字段有 null 值：

ALTER TABLE customer ADD COLUMN fax c(20) NULL


请参阅

ALTER TABLE - SQL 命令

删除字段

命名字段

表设计器


删除字段

请参阅

可以通过表设计器或使用语言从表中删除已有的字段。

� 若要从表中删除字段

 •	   在表设计器中选择要删除的字段，然后选择“删除”。

 — 或者 —

 •	   使用 ALTER TABLE命令的 DROP [COLUMN] 子句 。

例如，可以使用以下命令从 customer 表中删掉 fax 字段：

ALTER TABLE customer DROP COLUMN fax


请参阅

添加字段

ALTER TABLE - SQL 命令

重命名字段

表设计器


 重新命名字段

请参阅

可以用两种方法重新命名已有的表字段。

� 若要重新命名表字段

 •	   在表设计器中的“字段名”文本框中，为已有的字段键入新的字段名。

 — 或者 —

 •	   使用 ALTER TABLE命令的 RENAME COLUMN 子句。

例如，可以使用以下命令对 customer 表的 company 字段重新命名：

ALTER TABLE customer RENAME COLUMN company TO company_long_new_name


请参阅

ALTER TABLE - SQL 命令

表设计器


设置或更改字段级规则或表规则

请参阅

可以为字段级规则或表规则设置新的表达式和规则说明，也可以更改由 CREATE TABLE 或 ALTER TABLE 命令建立的规则和说明。

� 若要改变已有的规则

 •	   在表设计器中，在“表”选项卡或“表属性”对话框的“有效性规则”和“有效性说明”框中，输入新的规则表达式或规则说明。

 — 或者 —

 •	   使用 ALTER TABLE 命令。

可以用 DBGETPROP( ) 函数来显示当前规则表达式或规则说明，这些值对表来说是只读的，并且只能使用 ALTER TABLE 命令更改。


请参阅

ALTER TABLE - SQL 命令

DBGETPROP( ) 函数

表设计器


设置或更改默认值

请参阅

建立表之后，可以设置或更改表字段的默认值。

� 若要改变已有的默认值

 •	   在表设计器中，在“表”选项卡的“默认值”框中输入新值。

 — 或者 —

 •	   使用 ALTER TABLE 命令。

可以使用 DBGETPROP( ) 函数来显示字段的当前默认值，对表来说这些值是只读的，并且只能用 ALTER TABLE 命令来更改。


请参阅

ALTER TABLE - SQL 命令

DBGETPROP( ) 函数

表设计器


添加记录

请参阅

给新表添加记录的第一步是添加存储新数据的行。

� 若要在表中添加记录

 •	   使用 INSERT - SQL 命令。

例如，可以使用以下命令在 TasTrade 数据库的 customer 表中插入新记录：

INSERT INTO customer (cust_id, company, contact) ;

VALUES (SMI007, “Smiths Delicatessen”, Sarah Smith)

也可以使用后面带 REPLACE 命令的 APPEND BLANK 命令给表添加空记录，然后在字段中存储数据。

可以使用 UPDATE - SQL 命令代替 REPLACE 命令，来更新表中的记录。


请参阅

向表中添加新记录

APPEND 命令

INSERT - SQL 命令

记录

REPLACE 命令

UPDATE - SQL 命令


从其他表中获取要追加的记录

请参阅

另一种在记录中存储数据的方法是复制在其他表或文件中的数据。

� 若要从另一个文件里获取要追加的记录

 •	   使用 APPEND FROM 命令。

 — 或者 —

 •	   使用 IMPORT 命令。


请参阅

APPEND FROM 命令

追加数据

IMPORT 命令

导入向导

将数据导入新表


在表中编辑记录

请参阅

可通过界面或以编程方式显示和编辑表中已有的记录。

� 若要以可编辑方式显示记录

 •	   使用 EDIT 命令。

 —或—

 •	   使用 CHANGE 命令。

例如，可以使用以下代码在浏览窗口中以编辑方式显示 customer 表：

USE customer

EDIT


请参阅

浏览窗口

EDIT 命令

CHANGE 命令


在字段中输入 Null 值

请参阅

如果字段接受 null 值，则可以使用语言、通过 .NULL. 标记或在界面使用组合键向字段中输入 null 值。

� 若要在字段中存储 null 值

 •	   在浏览窗口或表单控制中，按组合键 CTRL+0。

 — 或者 —

 •	   使用 .NULL. 标记。

例如，可以使用以下代码将 automobile 字段中已有的值替换成 null 值。

REPLACE automobile WITH .NULL.


请参阅

浏览窗口

处理 Null 值


对记录作删除标记

请参阅

可在界面中或使用 DELETE - SQL 命令对记录作删除标记。

� 若要对记录作删除标记

 •	   在浏览窗口中单击删除标记。

 — 或者 —

 •	   从“表”菜单中选择“删除记录”。

 — 或者 —

 •	   使用 DELETE - SQL 命令。


请参阅

浏览窗口

DELETE - SQL 命令

删除记录并压缩表

撤消记录的删除标记


撤消记录的删除标记

请参阅

可以使用 RECALL 命令撤消记录的删除标记。RECALL 命令只能在还没有发出 PACK 或 ZAP 命令之前恢复记录，PACK 和 ZAP 命令是在物理上把记录从表中删除。

� 若要撤消记录的删除标记

 •	   在浏览窗口中单击删除标记来撤消它。

 — 或者 —

 •	   从“表”菜单中选择“恢复记录”。

 — 或者 —

 •	   使用 RECALL 命令。


请参阅

浏览窗口

删除记录并压缩表

对记录作删除标记

RECALL 命令


删除带有删除标记的记录

请参阅

对记录作了删除标记之后，可以通过界面或使用语言把它们从磁盘上永久地删除。

� 若要从磁盘上删除带有删除标记的记录

 •	   在浏览窗口中，从“表”菜单中选择“彻底删除”。

 — 或者 —

 •	   使用 PACK 命令。


请参阅

浏览窗口

删除记录并压缩表

PACK 命令


创建索引关键字

请参阅

若要控制记录显示和访问的顺序，可以创建表的索引文件。然后可以根据表的新索引关键字设置表的顺序，并按新的顺序访问表的记录。

� 若要创建表的索引关键字

 •	   在表设计器中选择“索引”选项卡并输入索引关键字信息。选择“普通索引”作为索引类型。

 — 或者 —

 •	   使用 INDEX 命令。

例如，可以使用以下代码，打开 customer 表并根据 city 字段创建索引关键字。关键字 TAG 和后面的词“city”为 city 字段的新索引关键字指定了一个名称，或者称一个标识。

USE customer

INDEX ON city TAG city


请参阅

选择索引类型

INDEX 命令

排序记录

表设计器

使用索引


创建索引文件

请参阅

索引关键字存储在带扩展名 .CDX 的文件中。.CDX 索引文件，称作结构复合压缩索引，是在 Visual FoxPro 中创建的、最普通也最重要的索引文件类型。.CDX 结构的文件：

 •	   在创建索引标识时自动创建。

 •	   在打开表时自动打开。

 •	   在同一索引文件中能包含多个排序方案，或索引关键字。

 •	   在添加、更改或删除记录时自动维护。


请参阅

选择索引类型

从结构化 .CDX 文件中删除标识

排序记录

使用索引


设置主索引或候选索引

请参阅

可以使用 CREATE TABLE 或 ALTER TABLE 命令创建主索引或候选索引。

� 若要创建主索引或候选索引

 •	   在表设计器中，选择“索引”选项卡创建一个索引，选择“主索引”或“候选索引”作为索引类型。

 — 或者 —

 •	   使用 ALTER TABLE 命令。

例如，使用以下两个命令中的任何一个都能将 cust_id 字段做为 customer 表的主关键字：

ALTER TABLE customer ADD PRIMARY KEY cust_id TAG cust_id

ALTER TABLE customer ALTER COLUMN cust_id c(5) PRIMARY KEY


请参阅

ALTER TABLE - SQL 命令

选择索引类型

表设计器

使用索引

在实施约束时


设置普通索引

请参阅

可以使用普通索引排序和查找记录，在这些记录中并不要求数据的唯一性。

� 若要创建普通索引

 •	   在表设计器中选择“索引”选项卡创建索引，选择“普通索引”作为索引类型。

 — 或者 —

 •	   使用 INDEX 命令。

例如，可以使用以下命令为 customer 表创建 city 普通关键字：

USE customer

INDEX ON city TAG city


请参阅

选择索引类型

INDEX 命令

用索引设置记录顺序

表设计器

使用索引

使用其他索引类型


添加索引关键字

请参阅

通过在同一表中创建多个索引关键字，可以创建和存储表的许多不同排序方案。

� 若要创建表的附加索引关键字

 •	   在表设计器中，选择“索引”选项卡并输入附加索引关键字信息。

 — 或者 —

 •	   使用 INDEX 命令。

例如，可以使用以下代码创建 employee 表的两个新的索引关键字，一个根据 last_name 字段，另一个根据 country 字段：

USE employee

INDEX ON last_name TAG last_name

INDEX ON country TAG country


请参阅

选择索引类型

INDEX 命令

交互设置记录顺序

用索引设置记录顺序

表设计器

使用其他索引类型


在表单中交互设置记录顺序

请参阅

在运行时，可以使用 SET ORDER 改变表单中记录的顺序。例如，

� 若要在表格中按列对记录进行排序

1.	使用表格控制创建表单。

2.	把表格的 ColumnCount 属性设置成想要在表格中显示的字段数。

3.	在表格每个列标头的 Click 事件中插入以下代码：

 •	   将记录顺序设置成基于该列的索引关键字。

 •	   刷新表单。


请参阅

Click 事件

表格控制

SET ORDER 命令

用索引设置记录顺序

使用索引


使用其他索引类型

请参阅

除了最普通的索引（.CDX 压缩复合结构索引），Visual FoxPro 还支持其他两种索引文件：非结构的 .CDX 索引和独立的 .IDX 索引。

索引类型	描述	关键字数目	限制
结构 .CDX	使用和表文件名相同的基本名，随表的打开自动打开。	多关键字表达式，称为标识。	有效表达式限制在 240 个字符之内。
非结构 .CDX	必须明确地打开，使用和表名不同的基本名。	多关键字表达式，称为标识。	有效表达式限制在 240 个字符之内。
独立 .IDX	必须明确地打开，.IDX 文件的基本名由用户定义	单关键字表达式。	有效表达式限制在 100 个字符之内。


请参阅

创建索引文件

用索引设置记录顺序

使用索引

使用非结构化 .CDX 索引

使用独立索引


使用非结构化 .CDX 索引
使用非结构 .CDX 索引

请参阅

由于特殊的目的，有时想创建多个索引标识，但又不想在运行过程中维护这些索引，因为这样会增加应用程序的负担。此时，非结构 .CDX 索引很有用。

� 若要创建非结构 .CDX 索引标识

 •	   使用 INDEX 命令的 TAG 和 OF 子句。


请参阅

从非结构化 .CDX 文件中删除标识

INDEX 命令

使用其他索引类型


使用独立索引

请参阅

独立索引文件基于单关键字表达式，并保存在 .IDX 文件中。.CDX 文件可以存储多关键字表达式，与 .CDX 文件相反，.IDX 索引只存储单关键字表达式。

� 若要创建独立 .IDX 索引

 •	   使用 INDEX 命令的 COMPACT 子句。

 — 或者 —

 •	   使用 COPY TAG 命令。


请参阅

COPY TAG 命令

删除独立 .IDX 索引文件

INDEX 命令

使用其他索引类型


从结构化 .CDX 文件中删除标识
从结构 .CDX 文件中删除标识

请参阅

可以通过表设计器或使用语言从 .CDX 结构文件中删除标识。

� 若要删除在结构 .CDX 文件中的索引标识

 •	   在表设计器中使用“索引”选项卡选择并删除索引。

 — 或者 —

 •	   使用 DELETE TAG 命令。

 — 或者 —

 •	   使用 ALTER TABLE 命令的 DROP PRIMARY KEY 或 DROP UNIQUE TAG 子句。


请参阅

ALTER TABLE - SQL 命令

创建索引关键字

DELETE TAG 命令

表设计器


从非结构化 .CDX 文件中删除标识
从非结构 .CDX 文件中删除标识

请参阅

只能使用语言从非结构 .CDX 文件中删除标识。

� 若要删除非结构 .CDX 文件中的索引

 •	   使用 DELETE TAG 命令的 OF 子句。


请参阅

DELETE TAG 命令

使用非结构化 .CDX 索引


删除独立 .IDX 索引文件

请参阅

由于独立索引文件只包含单索引关键字表达式，所以可通过从磁盘上删除 .IDX 文件来删除表达式。

� 若要删除独立 .IDX 文件

 •	   使用 DELETE FILE 命令。

例如，可以使用以下代码删除独立 .IDX 索引文件 ORDDATE.IDX：

DELETE FILE orddate.idx


请参阅

DELETE FILE 命令

使用独立索引


按降序访问记录

请参阅

可通过创建降序索引或按降序读取已有的索引，以降序查看记录。

� 若要创建降序索引

 •	   在表设计器的“索引”选项卡中选择“字段名”框左边的箭头按钮，使箭头向下。

 — 或者 —

 •	   使用 INDEX ON 命令的 DESCENDING 子句，创建降序索引。

� 若要按降序读已有的索引

 •	   使用 SET ORDER 命令的 DESCENDING 子句，按降序读取已有的索引。


请参阅

INDEX 命令

SET ORDER 命令

用索引设置记录顺序

使用索引


筛选数据

请参阅

可以使用筛选索引把所访问的记录限制在指定的数据上。

� 若要使用筛选索引筛选数据

 •	   在表设计器中，选择“索引”选项卡并在对应索引的“筛选”文本框中输入预定的筛选表达式。

 — 或者 —

 •	   使用 INDEX 命令的 FOR 可选子句。


请参阅

筛选记录

INDEX 命令

SET FILTER 命令

表设计器


重建活动索引文件

请参阅

如果索引文件过时，可以使用 REINDEX 命令重建索引，更新它们。

� 若要重建活动索引文件

 •	   从“表”菜单中选择“重建索引”。

 — 或者 —

 •	   使用 REINDEX 命令。

例如，可以使用以下命令更新 customer 表的索引文件：

USE customer

REINDEX


请参阅

REINDEX 命令


查看工作区

请参阅

打开“查看”窗口，可查看在一个 Visual FoxPro 工作期中打开的表的列表。

� 若要打开“查看”窗口

 •	   从“窗口”菜单选择“查看窗口”。

 — 或者 —

 •	   使用 SET 命令。

当在命令窗口中键入 SET 时，Visual FoxPro 打开“查看”窗口，并显示在当前数据工作期中打开表的工作区别名。


请参阅

命令窗口

在工作区中打开表

SET 命令

查看窗口


在工作区中打开表

请参阅

可以使用“查看”窗口或使用 USE 命令在工作区中打开表。

� 若要在工作区中打开表

 •	   在“查看”窗口中，选择“打开”。

 — 或者 —

 •	   在命令窗口中，键入 USE 命令。

如果要在最低可用工作区中打开表，可以在 USE 命令 IN 子句后面加工作区 0。例如，如果工作区 1 到 10 中都有打开的表，可以使用以下命令，在工作区 11 中 打开 customer 表：

USE customer IN 0

在“文件”菜单中选择“打开”，也可以在工作区中打开表。


请参阅

在工作区中关闭表

命令窗口

创建用户自定义别名

临时相关表

USE 命令

查看窗口


在工作区中关闭表

请参阅

可通过“查看”窗口或使用语言关闭工作区中的表。

� 若要在工作区中关闭表

 •	   在“查看”窗口中选定要关闭的表别名，然后选择“关闭”。

 — 或者 —

 •	   键入不带表名的 USE；

 — 或者 —

 •	   使用 USE 命令的 IN 子句，指出想要关闭的表所在的工作区。


请参阅

在工作区中打开表

USE 命令


创建用户自定义别名

请参阅

在打开表时，可以为它指定用户自定义的表别名。

� 若要以用户自定义的别名打开表

 •	   键入带表别名的 USE 命令。

例如，可以使用以下命令，在 0 号工作区中打开文件 CUSTOMER.DBF，并为它指定一个别名 people：

SELECT 0

USE customer ALIAS people

然后必须使用别名 people 引用打开的表。别名最多可以包括 254 个字母、数字或下划线，但首字符必须是字母或下划线。


请参阅

在工作区中打开表

USE 命令

查看窗口

查看工作区

Visual FoxPro 命名规则


临时相关表

请参阅

可以通过“查看”窗口或使用语言来创建表间的临时关系。

� 若要临时关联表

 •	   在“查看”窗口中选定要关联的表，然后使用“关系”按钮创建关系。

 — 或者 —

 •	   使用 SET RELATION 命令。


请参阅

创建永久关系

在表之间建立关系

SET RELATION 命令

查看窗口


重命名表

请参阅

重命名表的方式有两种：一种是通过界面以交互方式重命名表；另一种是以编程方式重命名表。这取决于表是否在数据库中。

� 若要重命名数据库中的表

1.	在数据库设计器中选择要重命名的表。

2.	从“数据库”菜单中选择“修改”。

3.	在表设计器的“表名”框中键入新表名。

� 若要重命名自由表

 •	   使用 RENAME 命令。

注意

如果用 RENAME 命令重命名与数据库相关的表，由于它不会修改后链，因此可能会引起表的访问错误。


请参阅

数据库设计器

复制表

RENAME 命令

表设计器


复制表

请参阅

使用 FoxPro 语言可以制作表、表的存储过程、触发器表达式，默认字段值以及表内容的备份。没有菜单选项能够完成相同的功能。

� 若要复制一个表

1.	打开原始表。

2.	使用 COPY STRUCTURE 命令制作原始表的备份。

3.	打开用 COPY STRUCTURE 命令创建的空表。

4.	使用 APPEND FROM 命令复制原始表的数据。


请参阅

APPEND FROM 命令

COPY STRUCTURE 命令

重命名表


复制和编辑表结构

请参阅

除了使用表设计器或 ALTER TABLE 命令外，还可以复制或编辑表结构。

� 若要复制和编辑表结构

1.	打开原始表。

2.	使用 COPY STRUCTURE EXTENDED 命令产生一个含有旧表结构信息的新表。

3.	编辑包含结构信息的新表以更改任何根据此结构信息创建的新表的结构。

4.	使用 CREATE FROM 命令创建一个新表。

新表是空的。

5.	如果必要的话使用 APPEND FROM 或一个数据复制命令填充新表。


请参阅

APPEND FROM 命令

COPY STRUCTURE EXTENDED 命令

CREATE FROM 命令

复制表

表设计器

ALTER TABLE


重建表与数据库的链接

请参阅

如果您移动了数据库文件的位置（.DBC, .DCT 和 .DCX），或当把表添加到数据库中后，移动了与数据库相联的表， Visual FoxPro 可能会找不到它们。

移动文件会破坏 Visual FoxPro 中表与数据库之间的链接：

 •	   后链将表反向链接到拥有表的数据库。它包括与表相链接的 .DBC 文件的相对路径和文件名，并保存在 Visual FoxPro 表文件(.DBF) 的头部。

 •	   “前链”告知数据库哪些表属于它。前链存储在数据库文件 (.DBC) 中，并包含每个相关表的路径和文件名。

当移动了文件之后，链接的相对路径信息变成了错误的、断的链接。这时，可以重建表与数据库的链接，更新相对路径信息从而反映新的文件位置。

� 若要在移动表或数据库后，重建表与数据库的链接，

 •	   使用 VALIDATE DATABASE 命令的 RECOVER 子句。

例如，如下代码打开 testdata 数据库，并显示对话框，可以为不在数据库指定位置上的表指定位置：

OPEN DATABASE testdata

VALIDATE DATABASE RECOVER

提示

如果您在使用表时不想花时间去重建数据库中所有表的链接，可以用 USE 命令打开表。 Visual FoxPro 显示打开对话框，从中可以指定表所属的数据库或删除链接。

有关表所属数据库被偶然从磁盘上删除时，如何从表中移去后链的详细信息，请参阅 FREE TABLE。


请参阅

FREE TABLE 命令

打开 (表) 对话框

USE 命令

VALIDATE DATABASE 命令


在文件中访问数据

请参阅

在共享环境中，可以用两种方式访问数据：从独占文件中访问或者从共享文件中访问。若打开一个共享访问的表，其他用户也能对该文件进行访问；若打开一个独占访问的表，那么其他用户就不能对该文件进行读写。独占访问不具备在网络环境中共享数据的许多优点，因而应该避免使用。

准备	请参阅
共享一个表	以共享访问的方式使用表
锁定一个表	以独占访问的方式使用表


请参阅

缓冲访问数据

限制对数据的访问

解锁数据

以独占访问的方式使用表

以共享访问的方式使用表


以独占访问的方式使用表

请参阅

打开一个文件最严格的限制方式就是独占方式。通过界面打开一个表时，默认情况下是独占使用的。也可以利用 Visual FoxPro 命令明确地以独占方式打开一个表。

� 若要打开一个独占使用的表

 •	   在命令窗口中键入下列命令：

SET EXCLUSIVE ON

USE cMyFile

 — 或者 —

 •	   在命令窗口中键入下列命令：

USE cMyTable EXCLUSIVE


请参阅

SET EXCLUSIVE 命令

以共享访问的方式使用表

USE 命令


以共享访问的方式使用表

请参阅

以共享方式打开一个表时，多个工作站可同时访问该表。通过界面打开表时，将忽略默认的 EXCLUSIVE ON 设置。可以明确地用 Visual FoxPro 命令打开一个表供共享使用。

� 若要打开一个共享使用的表

 •	   在命令窗口中键入下列命令：

SET EXCLUSIVE OFF

USE cMyFile


请参阅

SET EXCLUSIVE 命令

USE 命令

以独占访问的方式使用表


限制对数据的访问

请参阅

如果要共享访问文件，必须通过锁定表和记录来对这种访问进行管理。锁定不同于访问允许权限，它既可以对数据进行长期控制，也可以短期控制。Visual FoxPro 提供自动和人工两种锁定方式。

准备	请参阅
自动锁定记录和表	自动锁定记录和表的命令
人工锁定记录和表	人工锁定


请参阅

自动锁定记录和表的命令

人工锁定

SET EXCLUSIVE 命令

USE 命令


自动锁定记录和表的命令

请参阅

在使用下列命令时，Visual FoxPro 将自动尝试记录锁定、标头锁定或表锁定。

命令	锁定范围
ALTER TABLE	整个表
APPEND	整个表
APPEND BLANK	表头
APPEND FROM	整个表
APPEND FROM ARRAY	表头
APPEND MEMO	当前记录
BLANK	当前记录
BROWSE, CHANGE 和 EDIT	一旦开始编辑字段，锁定对象为当前记录和相关表中别名字段的所有记录
CURSORSETPROP( )	取决于参数
DELETE	当前记录
DELETE NEXT 1	当前记录
DELETE RECORD n	记录 n
DELETE 删除多个记录	整个表
DELETE - SQL	当前记录
GATHER	当前记录
INSERT	整个表
INSERT -  SQL	表头
MODIFY MEMO	编辑开始时，锁定当前记录
READ	当前记录和别名字段的所有记录
RECALL	当前记录
RECALL NEXT 1	当前记录
RECALL RECORD n	记录 n
RECALL 恢复多个记录	整个表
REPLACE	当前记录和别名字段的所有记录
REPLACE NEXT 1	当前记录和别名字段的所有记录
REPLACE RECORD  n	记录 n 和别名字段的所有记录
REPLACE 替换多个记录	整个表和别名字段的所有记录
SHOW GETS	当前记录和别名字段引用的所有记录
TABLEUPDATE( )	取决于缓冲
UPDATE	整个表
UPDATE - SQL	整个表


请参阅

ALTER TABLE  SQL 命令

APPEND 命令

BLANK 命令

BROWSE 命令

CHANGE 命令

EDIT 命令

CURSORSETPROP( ) 函数

DELETE 命令

GATHER 命令

表头和表的锁定特点

INSERT 命令

人工锁定

MODIFY MEMO 命令

READ 命令

RECALL 命令

记录锁定的特点

 REPLACE 命令

SHOW GETS 命令

TABLEUPDATE( ) 函数

UPDATE 命令

UPDATE - SQL 命令


记录锁定的特点

请参阅

锁定记录的命令比锁定表的命令破坏性小。锁定一个记录时，其他用户仍然可以添加或删除其他记录。如果记录或表已经被其他用户锁定，或者表已经被其他用户用独占方式打开，则锁定记录或表的操作失败。如果不能锁定记录，则尝试锁定当前记录的命令将返回出错信息：“其他用户正在使用记录”。

BROWSE、CHANGE、EDIT 和 MODIFY MEMO 命令只有在编辑记录时才锁定记录。如果您正在编辑来自相关表记录中的字段，那么该相关记录可能会被锁定。如果当前记录或相关记录已被其他用户锁定，则锁定失败。如果锁定成功，则可以编辑该记录；在移到另一个记录或激活其他窗口时，记录解锁。


请参阅

BROWSE 命令

CHANGE 命令

自动锁定记录和表的命令

EDIT 命令

人工锁定

MODIFY MEMO 命令


表头和表的锁定特点
表头和表锁定的特点

请参阅

一些 Visual FoxPro 命令锁定整个表，而有些命令则只锁定表头。表锁定命令比表头锁定命令更严厉。锁定表头时，其他用户不能添加或删除记录，但可以修改字段内的数据。

当发出 APPEND BLANK 命令时，用户可以共享表而不发生冲突，但是当其他用户也向该表追加一个空白记录时，就会出错。您得到这样一个错误信息：“其他用户正在使用文件”。这个信息表明有两个或多个用户在同时执行 APPEND BLANK 命令。如果无法锁定一个表，则锁定整个表的命令将返回错误信息：“其他用户正在使用文件”。要取消正在进行的锁定操作，可按 ESC 键。


请参阅

APPEND BLANK 命令

自动锁定记录和表的命令


人工锁定

请参阅

您可以用锁定函数人工锁定一个记录或一个表。

� 若要人工锁定一个记录或一个表

 •	   请使用下列命令：

RLOCK( )
LOCK( )
FLOCK( )

如果锁定一个记录或一个表，那么一定要尽快解锁，以方便其他用户访问。


请参阅

自动锁定记录和表的命令

FLOCK( ) 函数

LOCK( ) 函数

RLOCK( ) 函数


解锁数据

请参阅

有几种解锁的办法。在有些情况下，只需简单地移动到下一个记录就能解锁，其他情况则需要明确的命令。

下表说明了对人工和自动的记录锁定和表锁定进行解锁的各命令：

命令	效果
UNLOCK	解锁当前工作区内的记录和文件。
UNLOCK ALL	对所有工作区解锁。
SET MULTILOCKS OFF	建立新锁定的同时自动解锁当前锁定。
FLOCK( )	在锁定文件之前解锁文件中的所有记录。
CLOSE, CLOSE ALL, USE, QUIT	对所有记录和文件解锁。
END TRANSACTION	对所有的自动锁定项解锁。
TABLEUPDATE( )	在更新表之前解锁所有锁定项


请参阅

CLOSE 命令

END TRANSACTION 命令

FLOCK( ) 函数

限制对数据的访问

QUIT 命令

SET MULTILOCKS 命令

TABLEUPDATE( ) 函数

UNLOCK 命令

USE 命令


使用数据工作期

请参阅

DataSession 属性确定是否能够在分离的数据工作期中打开一个表单的多个实例。

� 若要启用多个数据工作期

请选择下列操作：

 •	   在表单设计器中，将 DataSession 属性设置为 2。

— 或者 —

 •	   在命令窗口中，设置 DataSession 属性为 2。例如，键入：

frmFormName.DataSession = 2

附注

只能在设计时设置 DataSession 属性。

DataSessionID 数字本身是一个运行时刻属性，称为 DataSessionID。

要避免更改表单的 DataSessionID 属性，因为更改时与数据相联系的控制会丢失其数据源。


请参阅

DataSessionID 属性

SET DATASESSION 命令


使自动数据工作期的设置无效

请参阅

� 若要使自动数据工作期的设置无效

 •	   请使用下列某一命令：

SET DATASESSION TO 1

 — 或者 —

SET DATASESSION TO

这两个命令都将启用命令窗口以及项目管理器所控制的默认数据工作期。


请参阅

DataSessionID 属性

SET DATASESSION 命令

使用数据工作期


缓冲访问数据

请参阅

在多用户环境下，Visual FoxPro 的记录缓冲和表缓冲技术可以保护对单个记录或多个记录所做的数据更新以及数据维护操作。缓冲区可以自动测试、锁定以及解锁记录或表。

一旦启用缓冲，则在它被废止或关闭表之前一直保持有效。

•	   若一次只对一个记录进行访问、修改或写操作，那么请选择记录缓冲。

 •	   若要对多个记录的更新使用缓冲，请选择表缓冲。

Visual FoxPro 以两种锁定方式提供缓冲：保守式和开放式。这两种方式决定了一个或多个记录何时被锁定，又是何时、怎样被解锁的。


请参阅

在表缓冲区中追加和删除记录

CURSORSETPROP( ) 函数

启用记录缓冲

启用表缓冲

RECNO( ) 函数

SET MULTILOCKS 命令

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数


Valid Buffering Property Values for CURSORSETPROP( )
 CURSORSETPROP( ) 的有效 Buffering 属性值

请参阅

若要启用	请使用此缓冲值
无缓冲。默认值。	1
保守式记录锁定。它锁定当前记录，在记录指针移动或发出 TABLEUPDATE( ) 命令后更新。	2
开放式记录锁定。它一直等到记录指针移动，然后锁定并更新。	3
保守式表锁定。它锁定当前记录，在发出TABLEUPDATE( ) 命令之后更新。	4
开放式表锁定。它一直等到发布 TABLEUPDATE( ) 命令，然后锁定并更新已编辑的记录。	5
对于表，Buffering 的默认值为 1；对视图，默认值为 5。如果您使用缓冲访问远程数据，则 Buffering 属性可以是3（开放式行缓冲）或 5（开放式表缓冲）。

对所有除 1 以外的缓冲方式，设置 MULTILOCKS 为 ON。


请参阅

缓冲访问数据

SET MULTILOCKS 命令

TABLEUPDATE( ) 函数


启用记录缓冲

请参阅

可用 CURSORSETPROP( ) 函数启用记录缓冲。

� 若要启用保守式记录锁定

 •	   请使用如下函数和数值：

=CURSORSETPROP("Buffering", 2)

� 若要启用开放式记录锁定

 •	   请使用如下函数和数值：

=CURSORSETPROP("Buffering", 3)


请参阅

缓冲访问数据

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数

启用表缓冲


启用表缓冲

请参阅

可用 CURSORSETPROP( ) 函数启用表缓冲。

� 若要对多个记录启用保守式锁定

 •	   请使用如下函数和数值：

=CURSORSETPROP("Buffering", 4)

� 若要对多个记录启用开放式锁定

 •	   请使用如下函数和数值：

=CURSORSETPROP("Buffering", 5)


请参阅

缓冲访问数据

CURSORSETPROP( ) 函数

DELETE 命令

启用记录缓冲

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数


表缓冲的特点

请参阅

在发出 TABLEUPDATE( ) 命令之前，Visual FoxPro 把记录写入缓冲区并允许编辑，然后 Visual FoxPro 对缓冲区内的每一记录执行下列操作：

 •	   对每一个已编辑记录锁定。

 •	   一旦锁定成功，即对磁盘上的每一记录的当前值与原来的缓冲区值进行比较。

 •	   如果两值相同，将编辑结果写入原来的表。

 •	   如果两值不同，给出错误信息。

在启用表缓冲之后，Visual FoxPro 只在 TABLEUPDATE( ) 命令之后更新。


请参阅

启用表缓冲

TABLEUPDATE( ) 函数


在表缓冲区中追加和删除记录

请参阅

可以在启用表缓冲之后追加和删除记录。追加的记录将添加到缓冲区末尾。

表缓冲对追加记录执行下列操作：

 •	   RECNO( ) 值为系列递增的负值。

 •	   带有删除标记记录的 RECNO( ) 值在系列中仍然保留，但无效。

 •	   要从缓冲区中移去记录，必须在给记录加删除标记后执行 TABLEREVERT( ) 命令。

 •	   TABLEUPDATE( ) 命令不对带有删除标记的追加记录进行 TABLEREVERT( ) 操作，而把删除记录追加到磁盘上的表中。


请参阅

追加记录到表缓冲区

缓冲访问数据

RECNO( ) 函数

从表缓冲区中移去已追加的记录

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数


追加记录到表缓冲区

请参阅

� 若要追加记录到表缓冲区

 •	   在启用表缓冲之后使用 APPEND 或 APPEND BLANK 命令。

追加的记录具有序列递增的负 RECNO( ) 值。


请参阅

APPEND 命令

缓冲访问数据

RECNO( ) 函数

从表缓冲区中移去已追加的记录


从表缓冲区中移去已追加的记录

请参阅

� 若要从表缓冲区中移去追加的记录

1.	使用带负值的 GO 命令将记录指针定位到要删除的记录。

2.	使用 DELETE 命令将该记录加上删除标记。

3.	使用 TABLEREVERT( ) 命令将该记录从缓冲区中移去。

� 若要从表缓冲区中移去所有追加的记录

 •	   使用带 (.T.) 值的 TABLEREVERT 命令。

TABLEREVERT( ) 把追加的记录从表缓冲区中移去，而不将这些记录写入表。TABLEUPDATE( ) 命令将所有当前的记录写入一个表，包括已打上删除标记的记录。


请参阅

追加记录到表缓冲区

缓冲访问数据

DELETE 命令

GOTO 命令

TABLEREVERT( ) 函数

TABLEUPDATE( ) 函数


检测并解决冲突

请参阅

Visual FoxPro 提供了检测冲突的函数，该函数同时显示相关值。

 •	   GETFLDSTATE( )

 •	   GETNEXTMODIFIED( )

 •	   OLDVAL( )

 •	   CURVAL( )

借助这些命令，可以进行下列工作：

 •	   检测已更改的字段

 •	   检测已更改的记录

 •	   确定原有字段值

 •	   确定当前字段值


请参阅

CURVAL( ) 函数

检测已更改的字段

检测已更改的记录

确定原有字段值

确定当前字段值

GETFLDSTATE( ) 函数

GETNEXTMODIFIED( ) 函数

OLDVAL( ) 函数


检测已更改的字段

请参阅

� 若要检测字段中所做的更改

 •	   在更新操作之后，使用 GETFLDSTATE( ) 函数。


请参阅

缓冲访问数据

GETFLDSTATE( ) 函数


检测已更改的记录

请参阅

� 若要检测并定位缓冲数据中已更改的记录

 •	   请使用 GETNEXTMODIFIED( ) 函数。


请参阅

缓冲访问数据

GETNEXTMODIFIED( ) 函数


确定原有字段值

请参阅

� 若要确定缓冲字段的原有值

 •	   请使用 OLDVAL( ) 函数。


请参阅

缓冲访问数据

OLDVAL( ) 函数


确定当前字段值

请参阅

� 若要确定磁盘上一个缓冲字段的当前值

 •	   请使用 CURVAL( ) 函数。


请参阅

缓冲访问数据

CURVAL( ) 函数


控制事务处理的命令

请参阅	示例

Visual FoxPro 提供了三个控制事务处理的命令：

若要	请使用此命令
初始化一个事务	BEGIN TRANSACTION
取消最近一条 BEGIN TRANSACTION 语句以来所做的全部修改。	ROLLBACK
锁定记录，将最近一条 BEGIN TRANSACTION 语句以来对数据库中表所做的全部修改写入磁盘，然后解锁记录。	END TRANSACTION
远程表不受事务处理命令的影响。要对远程表启用人工事务，请使用 SQLSETPROP( )，然后用 SQLCOMMIT( ) 和 SQLROLLBACK( ) 控制事务处理。


请参阅

END TRANSACTION 命令

SQLCOMMIT( ) 函数

SQLROLLBACK( ) 函数

SQLSETPROP( ) 函数


* 请使用下列事务处理代码模板：

BEGIN TRANSACTION

* 更新记录

IF lSuccess = .F.	&& 出错

ROLLBACK

ELSE 	&& 执行修改

* 确认数据

IF 	&& 出错

ROLLBACK

ELSE

END TRANSACTION

ENDIF

ENDIF


使用事务处理

请参阅

下列规则适用于事务：

 •	   一个事务起始于 BEGIN TRANSACTION 命令，以 END TRANSACTION 命令终止。只有 END TRANSACTION 的语句，而没有 BEGIN TRANSACTION 与之相匹配将会出错。

 •	   ROLLBACK 语句前没有 BEGIN TRANSACTION 将出错。

 •	   除非应用程序中止（这将导致回滚操作），事务一旦开始，到遇到相应的 END TRANSACTION 语句（或回滚语句）这一期间，将保持有效，在跨程序、跨函数的情况下也是如此。

 •	   对于涉及事务数据的查询，Visual FoxPro 在使用磁盘数据前先使用在事务缓冲区内的缓冲数据，确保使用最近的数据。

 •	   如果在事务处理过程中应用程序中止，则所有操作回滚。

 •	   事务处理只在数据库容器中进行。

 •	   如果 INDEX 命令改写了一个已有的索引文件，或者任一索引文件已打开，则不能使用 INDEX 命令。


请参阅

BEGIN TRANSACTION 命令

END TRANSACTION 命令

INDEX 命令

嵌套事务处理

ROLLBACK 命令

事务处理的特点


事务处理的特点

请参阅

事务处理完成了下列锁定动作：

 •	   当一个命令直接或间接调用事务时，Visual FoxPro 将强制锁定。任何系统或用户的直接或间接命令将被缓冲，直至 ROLLBACK 或 END TRANSACTION 命令结束事务操作。

 •	   如果在事务处理中使用了锁定命令，如 FLOCK( ) 或 RLOCK( )，则 END TRANSACTION 语句将不会解锁。因此您必须明确地解除任何在事务处理中进行的明确锁定。


请参阅

END TRANSACTION 命令

FLOCK( ) 函数

嵌套事务处理

RLOCK( ) 函数

ROLLBACK 命令

使用事务处理


嵌套事务处理

请参阅

对于分隔在不同并发进程中的表，嵌套事务可以为表的更新操作提供逻辑组。事务处理命令 BEGIN TRANSACTION ... END TRANSACTION 不需要在同一函数或过程中。下列规则适用于嵌套事务处理：

 •	   可以嵌套五层 BEGIN TRANSACTION...END TRANSACTION 。

 •	   直到最外层的 END TRANSACTION 被调用时，才执行嵌套事务中的更新。

 •	   在嵌套事务中，一个 END TRANSACTION 只对最近的 BEGIN TRANSACTION 所引起的事务进行操作。

 •	   在嵌套事务中，ROLLBACK 语句只对最近 BEGIN TRANSACTION 所引起的事务进行操作。

 •	   在嵌套事务中对同一数据的更新操作，最内层的更新优先于嵌套事务处理块中的其他更新。


请参阅

BEGIN TRANSACTION 命令

END TRANSACTION 命令

ROLLBACK 命令

事务处理的特点

使用事务处理


创建查询
建立查询

请参阅

在很多情况下都需要建立查询，例如为报表组织信息、即时回答问题或者查看数据中的相关子集。无论目的是什么，建立查询的基本过程是相同的。

当确定了要查找的信息，以及这些信息存贮在哪些表和视图中后，可以通过以下几个步骤来建立查询：

1. 使用查询向导或查询设计器开始建立查询。

2. 选择出现在查询结果中的字段。

3. 设置选择条件来查找可给出所需结果的记录。

4. 设置排序或分组选项来组织查询结果。

5. 选择查询结果的输入类型：表、报表、浏览等等。

6. 运行查询。


请参阅

使用向导创建查询

定向输出查询结果

分组查询结果

排序查询结果

查询设计器

查询向导

运行查询

选定要查询的字段

选定所需的记录

启动查询设计器


使用向导建立查询
用向导建立查询

请参阅

要想能快速创建查询，可以利用某个 Visual FoxPro 查询向导。查询向导将询问您从哪些表或视图中搜索信息，并根据您对一系列提问的回答来建立查询。

� 若要用向导建立查询

1.	在项目管理器中选择“数据”选项卡，然后选择“查询”。

2.	选择“新建”。

3.	选择“查询向导”按钮。

4.	选择所建查询的类型。

5.	按照向导屏幕上的指令进行操作。

您也可以从“工具”菜单中选择“向导”命令来启动向导。


请参阅

交叉表查询向导

项目管理器

查询向导

启动查询设计器


启动查询设计器

请参阅

如果不想使用查询向导，可以用查询设计器来建立查询。从项目管理器或“文件”菜单中，都可以启动查询设计器。

� 若要启动查询设计器

1.	在项目管理器中选择“数据”选项卡。

2.	选择“查询”。

3.	选择“新查询”。

您也可以从“文件”菜单中选择“新建”来启动查询设计器，选择“查询”选项，然后选择“新文件”。

在创建新查询时，系统会提示您从当前数据库或自由表中选择表或视图。

� 若要使用不同的表或视图

1.	选定表，然后选择“移去表”来删除此表。

2.	在工具栏上选择“添加”按钮，加入其他的表或视图。


请参阅

使用向导建立查询

项目管理器

查询设计器


选定要查询的字段

请参阅

在运行查询之前，必须选择表或视图，并选择要包括在查询结果中的字段。在某些情况下，您可能会使用表或视图中的所有字段。但在另一些情况下，您也许只想使查询与部分选定的字段相关，比如要加到报表中的字段。

如果想用某些字段给查询结果排序或分组，一定要确保在查询输出中包含这些字段。选定这些字段后，可以在输出中为它们设置顺序。

使用查询设计器底部窗格中的“字段”选项卡来选定需要包含在查询结果中的字段。

� 若要在查询输出中添加字段

 •	   选定字段名，然后选择“添加”。

 — 或者 —

 •	   将字段名拖到“选定输出”框中。

� 若要在查询中一次添加所有可用的字段

 •	   选择“全部添加”。

 — 或者 —

 •	   将表顶部的 * 号拖到“选定输出”框中。


请参阅

查询设计器

设置输出字段的次序


设置输出字段的次序

请参阅

在“选定输出”框中，字段的顺序决定了查询输出中信息列的顺序。

� 若要改变查询输出的列顺序

 •	   上、下拖动位于字段名左侧的移动框。


请参阅

查询设计器


选定所需的记录

请参阅

选定想要查找的记录是决定查询结果的关键。用查询设计器中的“选定条件”选项卡，可以构造一个选择语句，用来通知 Visual FoxPro 想要搜索并检索的记录。

� 若要指定选择条件

1.	从“字段名”列表中选定用于选择记录的字段。

附注

不能使用“通用”或“备注”字段作为选定条件。

2.	从“条件”列表中选择比较的类型。

3.	在“实例”文本框中，输入比较条件。

 •	   除非字符串同查询中表的字段名相同，否则不要把字符串用引号括起来。

 •	   日期也不必用花括号括起来。

 •	   逻辑位的前后必须使用句点号，如（.T.）。

 •	   如果输入查询中表的字段名，Visual FoxPro 就将它识别为一个字段。

4.	在搜索字符型数据时，如果想忽略大小写匹配，请选择“大小写”下面的按钮。

若想对逻辑操作符的含义取反，请选择“否”下面的按钮。例如，您想查找除了华盛顿地区以外所有地区的顾客，可使用下面示例中的选择表达式：

Customer.region Not Like WA

您也可以添加多个条件以进一步精确搜索。


请参阅

精确搜索

查询设计器

选定条件选项卡, 查询和视图设计器


精确搜索

请参阅

在 Visual FoxPro 中，如果在“选定条件”选项卡中连续输入选择条件表达式，那么这些表达式自动以逻辑“与”（.AND.）的方式组合起来，如果您想使待查找的记录满足二个以上条件中的任意一个时，您可以使用“添加‘或’”按钮在这些表达式中间插入逻辑“或”（.Or.）操作符。

设置“与”（AND）条件

如果想使查询检索同时满足一个以上条件的记录，只需在“选定条件”选项卡中的不同行上列出这些条件，这一系列条件自动以“与”（AND）的方式组合起来，因此只有满足所有这些条件的记录才会被检索到。

� 若要设置“与”（AND）条件

 •	   在“选定条件”选项卡上的相邻行内输入选择语句。

设置“或”（OR）条件

若要使查询检索到的记录满足一系列选定条件中的任意一个时，可以在这些选择条件中间插入“或”（OR）操作符将这些条件组合起来。

� 若要设置“或”（OR）条件

 •	   用“添加‘或’”按钮在相邻的选择语句之间插入“或”（OR）操作符。

您可以把“与”（AND）和“或”（OR）条件组合起来以选择特定的记录集。


请参阅

组合复杂表达式

选择条件选项卡，查询和视图设计器


排序查询结果

请参阅

排序决定了查询输出结果中记录或行的先后顺序。例如，您能够以州名在前城市名在后，或以升序方式根据未付款额的大小对记录排序。

利用“排序依据”选项卡设置查询的排序次序，排序次序决定了查询输出中记录或行的排列顺序。

首先，从“选定输出”框中选定要使用的字段，并把它们移到“排序条件”框中，然后根据查询结果中所需的顺序排列这些字段。

附注

对于每个字段，均可利用“排序选项”设置按升序或降序返回结果。

� 若要设置排序条件

1.	在“选定输出”框中选定字段名。

2.	选择“添加”。

� 若要移去排序条件

1.	选定一个或多个想要移去的字段。

2.	选择“移去”。


请参阅

排序条件选项卡，查询和视图设计器


分组查询结果

请参阅

所谓分组就是将一组类似的记录压缩成一个结果记录，这样就可以完成基于一组记录的计算。例如，若想找到某一特定地区所有订货的总和，不用单独查看所有的记录，可以把来自相同地区的所有记录合成一个记录，并获得来自该地区的所有订货的总和。若要控制记录的分组，可使用查询设计器中的“分组依据”选项卡。

分组在与某些累计功能联合使用时效果最好，诸如 SUM、COUNT、AVG 等等。

� 若要设置分组选项

1.	在“字段”选项卡中，选取“函数/表达式”列表。

2.	选定一个累计函数和一个字段名。

3.	选择“添加”按钮将表达式加到“选定输出”列表中。

4.	在“分组依据”选项卡中，加入用来分组结果的字段。

也可以在已分组的结果上设置选定条件。


请参阅

分组条件选项卡，查询和视图设计器

查询设计器

在分组的基础上设置选定条件


在分组的基础上设置选定条件

请参阅

若要对已进行过分组或压缩的记录而不是对单个记录设置选定条件，可在“分组依据”选项卡中选定“满足条件”按钮。

� 若要在一个分组上设置“满足条件”选项

1.	在“分组依据”选项卡上，选择“满足条件”按钮。

2.	在“满足条件”对话框中，选定一个函数，并在“字段名”字段中选定字段名。

3.	选择“确定”按钮。


请参阅

条件对话框


定向输出查询结果

请参阅

您可以把查询结果输出到不同的目的地。如果没有选定输出目的地，查询结果将显示在浏览窗口中。

� 若要选择查询结果的去向

1.	从“查询设计器”工具栏中选择“查询去向”。

2.	在“查询去向”对话框中选择输出去向，并填写所需的其他字段。

使用下表选择查询输出的去向。

若要	选择此输出选项
在“浏览”窗口中显示查询结果	浏览
将查询结果存贮在一个命名的临时只读表中	临时表
使查询结果保存为一个命名的表	表
使查询结果可用于 Microsoft Graph（Graph 是包含在 Visual FoxPro 中的一个独立的应用程序）	图形
在 Visual FoxPro 主窗口或当前活动输出窗口中显示查询结果	屏幕
将输出送到一个报表文件（.FRX）	报表
将输出送到一个标签文件（.LBX）	标签


请参阅

浏览窗口

查询去向 (查询菜单)


运行查询

请参阅

在完成了查询设计并指定了输出目的地后，可以用“运行”按钮启动该查询。Visual FoxPro 执行用查询设计器产生的 SQL Select 语句，并把输出结果送到指定的目的地。若尚未选定输出目的地，结果将显示在浏览窗口中。

� 若要运行查询

 •	   在项目管理器中选定查询的名称，然后选择“运行”。

提示

若要查看 SQL 语句，请参阅查看查询的 SQL 语句。有关 SQL 的详细内容，请参阅 SELECT - SQL。


请参阅

在查询中添加注释

项目管理器

SELECT - SQL 命令

查看查询的 SQL 语句


查看查询的 SQL 语句

请参阅

在建立查询时，从“查询”菜单中选择“查看 SQL”，或从工具栏上选择 SQL 按钮，可以查看查询生成的 SQL 语句。

� 若要查看查询的 SQL 语句

 •	   在查询设计器工具栏上选择 SQL 按钮。


请参阅

查询设计器工具栏

SELECT - SQL 命令


在查询中添加注释

请参阅

如果想以某种方式标识查询，或对它作一些注释说明，可以在查询中添加备注，这对以后确认查询及其目的很有帮助。

� 若要在查询中添加注释

1.	从“查询”菜单中选择“注释”。

2.	在“注释”框中，键入任何与查询有关的附注。

3.	选择“确定”。


请参阅

注释 (查询菜单)


使用向导创建视图

请参阅

可以使用本地视图向导创建本地视图。若要在 ODBC 数据源的表上建立可更新的视图，请使用远程视图向导。

� 若要使用向导创建视图

1.	在项目管理器中，选定一个数据库。

2.	选定“本地视图”或“远程视图”，选择“新建”按钮。

3.	选择“视图向导”按钮。

4.	按照向导屏幕上的指令操作。


请参阅

本地视图向导

新建（文件菜单）

项目管理器

远程视图向导

向导（工具菜单）


创建本地表的视图

请参阅

若要创建本地表的视图，请使用视图设计器。本地表包括本地 Virual FoxPro 表、任何使用 .DBF 格式的表和存储在本地服务器上的表。

� 若要创建本地视图

1.	从项目管理器中选定一个数据库。

2.	单击“数据库”符号旁的加号 +。

3.	在“数据库”下，选定“本地视图”并选择“新建”按钮。

4.	选择“新视图”按钮。

5.	在“添加表或视图”对话框中，选定想使用的表或视图。

6.	选择“确定”按钮。

此时将显示视图设计器，同时显示出选定的表或视图。

您也可以在“文件”菜单中，选择“新建”命令并选择“视图”来创建视图。


请参阅

添加表或视图对话框

新建 （文件菜单）

项目管理器

使用视图

视图设计器


创建新的远程视图

请参阅

创建新的远程视图的第一步是建立同数据源的连接。

� 若要创建新的远程视图

1.	在项目管理器中，选定“远程视图”并选择“新建”。

2.	选择“新视图”。

3.	在“选择连接或数据源”对话框中，选择“可用数据源”选项。

 — 或者 —

如果有一个已定义并保存的连接，则选定“连接”选项。

4.	选定一个数据源或连接并选择“确定”。

5.	在 Microsoft SQL Server 或其他注册对话框中，如果需要请输入注册 ID 和口令。

您也可以从“文件”菜单中选择“新建”命令并选择“远程视图”选项。

一旦建立了连接，“打开”对话框就会显示出来， 从中可以选择远程服务器上的表。

当选择表后，视图设计器将打开。


请参阅

连接设计器

项目管理器

远程视图向导

选定连接或数据源

视图设计器


使表可更新

请参阅

如果想使在表的本地版本上的修改能回送到源表中，就需要设置“发送 SQL Update”选项，必须至少设置一个关键字段来使用这个选项。

� 若要允许源表的更新

 •	   在“更新条件”选项卡中，设置“发送 SQL Update”选项。


请参阅

设置关键字段

视图设计器工具栏


设置关键字段

请参阅

当在视图设计器中首次打开一个表时，“更新条件”选项卡会显示表中哪些字段被定义为关键字段。

� 若要设置关键字段

 •	   在“更新条件”选项卡中，单击字段名旁边的“关键”列。

如果已经改变了关键字段，而又想把它们恢复到源表中的初始设置，请选择“重置关键字”。


请参阅

查询和视图设计器


使表中的指定字段可更新

请参阅

可以指定任一给定表中仅有某些字段允许更新。若使表中的任何字段是可更新的，在表中必须有已定义的关键字段。如果字段未标注为可更新的，用户可以在表单中或浏览窗口中修改这些字段，但修改的值不会送到远程表中。

� 若要使字段为可更新的

 •	   在“更新条件”选项卡中，单击字段名旁边的可更新列（笔形）。


请参阅

设置关键字段

视图设计器工具栏


使所有字段可更新

请参阅

如果想使表中的所有字段可更新，可以将表中的所有字段设置成可更新的，若要使用“全部更新”按钮，在表中必须有已定义的关键字段。

� 若要使所有字段可更新

 •	   在“更新条件”选项卡中，选择“全部更新”按钮。

附注

“全部更新”按钮不影响关键字段。


请参阅

设置关键字段

视图设计器工具栏


控制如何检查更新冲突

请参阅

如果在一个多用户环境中工作，服务器上的数据也可以被别的用户访问，也许别的用户也在试图更新远程服务器上的记录，为了让 Visual FoxPro 检查用视图操作的数据在更新之前是否被别的用户修改过，可使用“更新条件”选项卡上的选项。

若要	选择此 SQL WHERE 选项
当源表中的关键字段被改变时，使更新失败	关键字段
当远程表中任何标记为可更新的字段被改变时，使更新失败。	关键字和可更新字段
当在本地改变的任一字段在源表中已被改变时，使更新失败。	关键字和已修改字段
当远程表上记录的时间戳在首次检索之后被改变时，使更新失败（仅当远程表有时间戳列时有效）	关键字和时间戳


请参阅

创建多表视图

SQL 命令概述

视图设计器工具栏


在远程视图中添加表达式

请参阅

与查询一样，可以在视图中加入函数和表达式作为选择条件。

� 若要在视图中添加表达式

 •	   在“选定条件”选项卡中，从“字段名”框中选择“表达式”。


请参阅

表达式生成器对话框

选择条件选项卡，查询和视图设计器

查询和视图设计器


创建提示输入值的视图

请参阅

可以创建提示输入值以完成查询的视图，为此设置视图的选定条件时应使用参数，参数指的是在“选定条件”选项卡的“示例”列中问号后面输入的值。

� 若要为视图设置参数

1.	从“查询”菜单中，选择“视图参数”命令。

2.	在视图参数对话框中，输入参数名及其数据类型。

3.	选择“确定”按钮。

� 若要在视图中输入参数

1.	在视图设计器中，选定“选定条件”选项卡。

2.	选择选定条件，然后在“示例”框中的问号后面输入参数名。

参数名可以是字母字符、数字和单引号的任意组合。


请参阅

创建参数化视图

查询和视图设计器

视图参数 (查询菜单)


将视图和表添加到查询中

请参阅

当向查询中添加表或视图时，Visual FoxPro 根据匹配的字段建议一个可能的表或视图之间的联接。

建议表之间的联接

如果使用的数据库中，表或视图间具有永久关系，Visual FoxPro 就利用这些已有的关系作为默认的联接。

� 若要在查询中添加表或视图

1.	在查询设计器工具栏中，选择“添加表”按钮。

2.	在“添加表或视图”对话框中，选定想要用的数据库，选择“表”或“视图”选项，选择想添加的表或视图，然后选择“确定”按钮。

 — 或者 —

若想添加的表不在数据库中，选择“其他”按钮，在“打开”对话框中选定想加入的表，选择“确定”按钮。

3.	在“联接条件”对话框中，检查建议的联接。

若 Visual FoxPro 找不到这样的匹配字段，则应该由您自己在“联接条件”对话框中选择匹配的字段。

4.	选择“确定”按钮。


请参阅

添加表或视图对话框

创建永久关系

联接条件对话框

查询设计器工具栏


设置和更改联接条件

请参阅

若想更改表或视图间建议的联接或想采用一个不同的联接，则可以选择此联接并进行编辑，或创建一个新的联接。

联接不必基于字段的精确匹配，您可以设置不同的联接关系，如：Equal, Exactly Like, Morethan, 或 Less than 等等。

� 若要在表间创建联接

1.	在查询中添加两个或多个表或者视图。

2.	在查询设计器工具栏中，选择“添加联接”按钮。

3.	在“联接条件”对话框中，选择表之间的相关字段名。

4.	设置联接条件。

5.	选择“确定”按钮。

也可以删除或修改已有的联接。

� 若要删除联接

 •	   在查询设计器中，选定联接线并在“查询”菜单中，选择“移去联接条件”。

� 若要修改联接

1.	双击表之间的联接线。

2.	在联接条件对话框中，根据需要更改联接条件。

3.	选择“确定”按钮。


请参阅

联接条件对话框

查询设计器

查询设计器工具栏


在视图中使用多个表

请参阅

可以在本地视图中合并两个或多个本地表。

� 若要在视图中联接表

1.	在视图设计器中，添加一个表。

2.	选择“添加表”按钮，根据需要更改联接条件，然后选择“确定”按钮。

� 若要使源表可更新

1.	在“视图设计器”中，选定“更新条件”选项卡。

2.	选择“发送 SQL Update”选项。

附注

若要在“更新条件”选项卡中激活“发送 SQL UPDATE”选项，首先必须在表中设置关键字段。


请参阅

使用视图更新数据

视图设计器


在视图中使用多个远程表

请参阅

与远程数据源建立联接时，这个数据源可能包含许多相关表。您可以从中选取您所需要的表。需要的话还可以调整这些选取表之间的关系，最后获得所需的信息。

� 创建多表远程视图

1.	从“文件”菜单中，选择“新建”命令，再选定“远程视图”，然后选择“新文件”按钮。

2.	在“选择连接或数据源”对话框中，选择一个预定义的联接或可用的数据源。

3.	根据要求登录到服务器上。

4.	在“打开”对话框中，选定您要用的第一个表。

5.	选择“添加表”按钮以选定附加的表。

6.	在“联接条件”对话框中，接受默认联接，或根据需要设置联接。

与本地视图一样，可以利用视图设计器中的“更新条件”选项卡中的选项控制源表更新的方式。


请参阅

连接设计器

选定连接或数据源对话框


创建本地视图

请参阅

可以使用视图设计器或 CREATE SQL VIEW 命令创建本地视图。

� 若要创建本地视图

 •	   在项目管理器中选择一个数据库，选择“本地视图”，然后选择“新建”按钮，打开视图设计器。

 — 或者 —

 •	   在数据库已打开时，使用 CREATE SQL VIEW 命令显示视图设计器。

 — 或者 —

 •	   使用带有 AS 子句的 CREATE SQL VIEW 命令。

例如，可以使用以下代码创建包含 products 表中所有字段的视图：

CREATE SQL VIEW product_view AS SELECT * FROM testdata!products


请参阅

CREATE SQL VIEW 命令

创建远程视图

新本地视图命令 (数据库菜单)

项目管理器

视图设计器


创建多表视图

请参阅

通过修改已有的视图或创建新视图，可以创建多表视图。

� 若要修改视图

 •	   在项目管理器中选择视图名，再选择“修改”按钮，打开视图设计器。

— 或者 —

 •	   先打开数据库，再使用带视图名的 MODIFY VIEW 命令。

在视图设计器中，使用“查询”菜单或视图设计器工具栏将新表添加到视图中。下面的代码在视图设计器中显示 product_view 视图。

OPEN DATABASE testdata

MODIFY VIEW product_view

� 若要用 Visual FoxPro 语言创建多表视图

 •	   使用 CREATE SQL VIEW 命令和带多个表名的 FROM 子句。

例如，您可能会希望从 Tasmanian Traders 订单中查找一些信息，其中包括接收订单的雇员信息和发出订单的客户信息等。这时，可以创建一个视图，使用 Customer、Orders 和 Employee 三个表。下面的代码创建这样一个视图，其中 WHERE 子句指明了视图的连接条件：

OPEN DATABASE testdata

CREATE SQL VIEW cust_orders_emp_view AS ;

SELECT * ;
FROM testdata!customer, testdata!orders, testdata!employee ;

WHERE customer.cust_id = orders.cust_id ;

AND employee.emp_id = orders.emp_id

� 若要使用视图中的 SQL 代码修改或创建视图

1.	显示视图的 SQL SELECT 语句：

 •	   在“查询”菜单中选择“查看 SQL”。

 — 或者 —

 •	   使用 DBGETPROP( ) 函数的 SQL 属性。

2.	向程序或命令窗口中复制并粘贴视图的 SQL 语句，然后根据需要编辑 SQL 语句。

3.	使用 CREATE SQL VIEW 命令及刚才编辑过的 SQL 代码，创建或修改视图。

如果以编程方式修改视图的 SQL 字符串，则必须创建一个新视图，然后才可以保存新的视图定义并改写已有的视图名。

提示

当以编程方式创建新视图时，利用已有视图的只读 SQL 语句是一条捷径。


请参阅

命令窗口

CREATE SQL VIEW 命令

DBGETPROP( ) 函数

MODIFY VIEW 命令

项目管理器

视图设计器

查看 SQL (查询菜单)


定义连接

请参阅

在 Visual FoxPro 中，您可以在数据库中创建并保存一个命名连接的定义，以便在创建远程视图时按其名称进行引用，而且还可以通过设置命名连接的属性来优化 Visual FoxPro 与远程数据源的通讯。当您激活远程视图时，视图连接将成为通向远程数据源的管道。

� 若要创建命名连接

 •	   在项目管理器中，从“数据库”列表选择“连接”，然后选择“新建”按钮，打开连接设计器.。

— 或者 —

 •	   先打开数据库，再使用 CREATE CONNECTION 命令打开连接设计器。

— 或者 —

 •	   使用带有连接名称的 CREATE CONNECTION 命令。

例如，为了从 ODBC 数据源 sqlremote 获取所需的有关信息，可以用以下代码在 testdata 数据库中创建连接：

OPEN DATABASE testdata

CREATE CONNECTION remote_01 DATASOURCE sqlremote

这时，项目管理器的“连接”中将出现 remote_01。


请参阅

连接设计器

CREATE CONNECTION 命令

创建远程视图

项目管理器

设置 ODBC 数据源


创建远程视图

请参阅

在建立了有效的数据源或命名连接之后，就可以使用项目管理器或以编程方式来创建远程视图。远程视图与本地视图类似，只是在定义它时需要加入连接名称或数据源名称。远程视图的 SQL 语句使用相应服务器上的语法。

� 若要创建远程视图

 •	   在项目管理器中选择一个数据库，选择“远程视图”，然后选择“新建”按钮，打开视图设计器.。

— 或者 —

 •	   使用带有 REMOTE 和（或） CONNECTION 子句的 CREATE SQL VIEW 命令。

如果使用了带有 CONNECTION 子句的 CREATE SQL VIEW 命令，就可以不加入 REMOTE 关键字。Visual FoxPro 根据 CONNECTION 关键字是否存在来判断视图是否为远程。例如，如果将 Testdata 数据库中的 products 表放到远程服务器上，则可用下面的代码创建此表的远程视图：

OPEN DATABASE testdata

CREATE SQL VIEW product_remote_view CONNECTION remote_01 ;

AS SELECT * FROM products

在数据库设计器中，视图的显示方式与表的显示方式相同，所不同的只是视图名代替了表名。


请参阅

CREATE SQL VIEW 命令

数据库设计器

新远程视图命令 (数据库菜单)

项目管理器

设置 ODBC 数据源

视图设计器


创建参数化视图

请参阅

参数化视图在视图的 SQL SELECT 语句中加一条 WHERE 子句，从而仅下载那些符合 WHERE 子句条件的记录，其中的子句是根据所提供的参数值建立的，参数值可以在运行时传递，也可以编程方式传递。

� 若要创建参数化视图

 •	   首先打开视图设计器，然后从“查询”菜单中选择“视图参数”命令。

 — 或者 —

 •	   使用 CREATE SQL VIEW 命令并带上“?”符号和一个参数。

这个参数可以是一个 Visual FoxPro 表达式，计算出来的值将作为视图 SQL 语句的组成部分。若计算无效，Visual FoxPro 将提示输入该参数值。例如，如果将 Testdata 数据库中的 customer 表放在远程服务器上，则可用下面的代码创建一个远程参数化视图。这个视图将对客户记录进行筛选，如果客户的国家与提供给 ?cCountry 的参数值相匹配，则该客户记录在视图中出现；否则不出现。

OPEN DATABASE testdata

CREATE SQL VIEW customer_remote_view CONNECTION remote_01 ;

AS SELECT * FROM customer WHERE customer.country = ?cCountry


请参阅

CREATE SQL VIEW 命令

创建提示输入值的视图

视图设计器


重新命名视图

请参阅

可以使用项目管理器或 RENAME VIEW 命令重新命名视图。

� 若要更改视图的名称

 •	   在项目管理器中先选择一个数据库，再选择要重命名的视图，然后从“项目”菜单中选择“重命名文件”。

 — 或者 —

 •	   使用 RENAME VIEW 命令。

例如，下面代码将视图 product_view 重命名为 products_all_view：

RENAME VIEW product_view TO products_all_view


请参阅

创建本地视图

项目管理器

RENAME VIEW 命令


删除视图

请参阅

可以使用项目管理器或 DELETE VIEW 命令从数据库中删除视图。

� 若要删除视图

 •	   在项目管理器中先选择一个数据库，再选择要删除的视图，然后选择“移去”。

 — 或者 —

 •	   使用 DELETE VIEW 命令。

例如，下面的代码从数据库中删除 product_view 视图：

DELETE VIEW product_view


请参阅

创建本地视图

DELETE VIEW 命令

项目管理器


使用视图

请参阅

视图建立之后，您不但可以用它来显示和更新数据，而且还可以通过调整它的属性来提高性能。处理视图类似于处理表，您可以：

 •	   使用 USE 命令并指定视图名来打开一个视图。

 •	   使用 USE 命令关闭视图。

 •	   在浏览窗口中，显示视图记录。

 •	   在查看窗口中，显示已打开视图的别名。

 •	   将视图作为数据源，供表单或 Grid（表格）控制使用。

既可以通过项目管理器，也可以借助 Visual FoxPro 语言来使用视图。

� 若要使用一个视图

 •	   在项目管理器中先选择一个数据库，再选择视图名，然后选择“浏览”按钮，在浏览窗口中显示视图。

 — 或者 —

 •	   使用 USE 命令以编程方式访问视图。

下面的代码在浏览窗口中显示 product_view：

OPEN DATABASE testdata

USE product_view

BROWSE


请参阅

浏览窗口

Grid 控制

项目管理器

USE 命令

查看窗口


打开视图的多个实例

请参阅

与可在多个工作区中打开同一个表一样，可以在不同的工作区中打开一个视图的多个实例。与表不同的是：在默认情况下，每次使用视图时，都要去取一个新的数据集合。

� 若要在多个工作区中打开一个视图

 •	   在项目管理器中先选择视图名，然后在浏览窗口中显示该视图，重复这一过程，在其他工作区中打开此视图。

 — 或者 —

 •	   在查看窗口中，选择“打开”，然后选择视图名。重复这一过程，在其他工作区中打开此视图。

 — 或者 —

 •	   使用 USE 命令以编程方式访问视图。


请参阅

浏览窗口

项目管理器

USE 命令

查看窗口


显示视图结构

请参阅

可以使用带 NODATA 子句的 USE 命令，仅打开视图并显示视图结构。当想要看到远程视图的结构而又不想等待下载数据时，此命令非常有用。

� 若要打开一个不带数据的视图

 •	   请使用 USE 命令，并加上 NODATA 子句以编程方式访问视图。

下面的代码在浏览窗口中显示不带数据的 customer_remote_view 视图：

OPEN DATABASE testdata

USE customer_remote_view NODATA in 0

BROWSE


请参阅

创建远程视图

USE 命令


在视图中更新数据

请参阅

在视图中更新数据与在表中更新数据类似。不过，使用视图还可以对其基表进行更新。

在多数情况下，属性的默认设置将自动使视图可更新，但只有将 SendUpdates 属性设置为 On 来通知 Visual FoxPro 进行更新时，更新信息才被发送到数据源。

视图使用五个属性控制更新。这些属性及其默认设置在下表列出：

视图属性	默认设置
Tables	具有可更新字段和至少一个主关键字段的全部表。
KeyField	数据库关键字段和表的远程主关键字。
UpdateName	所有字段，形式为 Table_name.column_name 。
Updatable	除主关键字段的所有字段。
SendUpdates	默认设置只在工作期内有效，初始值为“假”(.F.)，若将其改为“真”(.T.)，则成为在工作期内所创建的全部视图的默认值。
在更新数据时，虽然以上五个属性都需要，但 SendUpdates 属性是其中的“主开关”，它控制了是否发送更新信息。

� 若要在视图设计器中使视图可更新

 •	   在视图设计器中，选择“更新条件”选项卡并检查默认设置。

通过视图设计器创建的视图，默认设置通常允许视图被更新，您所需要做的只是选中“发送 SQL Update”复选框来打开更新开关。如果愿意，您还可以修改表、字段、SQL WHERE 子句和更新选项。

� 若要通过设置视图更新属性使视图可更新

可以使用 DISPLAY DATABASE 命令检查当前默认设置，然后使用 DBSETPROP( ) 函数，根据需要修改视图的属性。尽管默认的设置能够提供更新视图所需的全部信息，但您最好还是了解一下在下面列出的、以编程方式指定五个视图更新属性的步骤：

1.	对 Tables 属性至少设置一个表名。

? DBSETPROP('cust_view', 'View', 'Tables', 'customer')

2.	用一个或多个本地 Visual FoxPro 字段名来设置 KeyField 属性，这些字段名的组合可作为这个可更新表的唯一关键字。

对于上例，可以用以下代码使 cust_id 成为关键字段：

?DBSETPROP('view_name.field_name', 'Field', 'KeyField', 'cust_id')

3.	利用 UpdateName 属性，在视图字段与基表字段之间建立映射关系。

?DBSETPROP('cust_view.cust_id', 'Field', 'UpdateName', ;

'customer.cust_id')

4.	指定要用 UpdateField 属性进行更新的字段范围。只能指定已包含在 UpdateName 属性中的字段。

?DBSETPROP('view_name.field_name', 'Field', 'UpdateField', ;
'cust_id ')

5.	设置 SendUpdates 属性为“真”(.T.)。这是一个主开关，它允许 Visual FoxPro 将创建的更新信息发送到可更新表和可更新字段中。

?DBSETPROP('cust_view', 'View', 'SendUpdates', .T.)


请参阅

控制如何检查更新冲突

DBSETPROP( ) 函数

DISPLAY DATABASE 命令

使表可更新

使所有字段可更新

使表中的指定字段可更新

设置关键字段

视图设计器


在视图中更新多个表

请参阅

可以在一个视图中更新多个表。若视图组合了两个或多个表，那么可以设置相应属性，使得只有视图查询中一对多关系的“多”方可被更新。

视图的更新是对表进行的。对于视图访问的每一个表，其关键字段集合无论对视图结果集合还是基表都是唯一关键字。

� 若要使一个多表视图可更新

 •	   在视图设计器中，选择“更新条件”选项卡，再选择需要更新的表和字段名。

 — 或者 —

 •	   使用 DBSETPROP( ) 函数。


请参阅

在视图中集成本地数据和远程数据

DBSETPROP( ) 函数

视图设计器


在视图中集成本地数据和远程数据

请参阅

通过创建基于本地视图和远程视图的新本地视图，可以在一个视图中集成本地数据与远程数据。

� 若要创建集成本地数据与远程数据的视图

 •	   在项目管理器中先选择一个数据库，再选择“本地视图”，然后选择“新建”按钮，打开视图设计器。在视图中加入表、本地视图或远程视图。

 — 或者 —

 •	   使用 CREATE SQL VIEW 命令。

例如，可以使用如下代码创建一个集成了本地 Employee 表与远程 Orders 表中信息的本地视图：

OPEN DATABASE testdata

CREATE SQL VIEW remote_orders_view CONNECTION remote_01 ;

AS SELECT * FROM orders

CREATE SQL VIEW local_employee_remote_orders_view ;

AS SELECT * FROM testdata!local_employee_view, ;

testdata!remote_orders_view ;

WHERE local_employee_view.emp_id = remote_orders_view.emp_id

在多级视图中更新数据时，更新将向下延续一层视图。如果要更新多级视图的基表，则必须为多级结构中的每一个视图都发送一条 TABLEUPDATE 命令。

提示

在关闭视图时，因为 Visual FoxPro 将自动发出 TABLEUPDATE 命令，因此通过先关闭顶层视图，可以迫使更新逐层下降。当关闭了最底层视图时，所有这些视图的基表也随之完成更新工作。


请参阅

CREATE SQL VIEW 命令

项目管理器

TABLEUPDATE( ) 函数

视图设计器


设置最大下载记录数

请参阅

可以通过设置属性来控制打开视图时下载的数据量。当向 Visual FoxPro 数据源发送一条 SQL 语句来创建视图时，数据源将建立并保存一个结果集合，MaxRecords 属性将指定从远程结果集合取入视图的最大行数。默认的设置为  1，即下载结果集合的全部数据行。

� 若要控制下载至视图的数据行数

 •	   在项目管理器中，从“工具”菜单选择“选项”命令，然后选择“远程数据”选项卡。在“远程视图默认值”区域内，“要取记录的最大数目”框旁边，清除“全部”，在文本框中键入一个值，然后选择“确定”按钮。

 — 或者 —

 •	   使用 DBSETPROP( ) 或 CURSORSETPROP( ) 函数，设置 MaxRecords 属性。

例如，下面的代码将修改视图定义，限制下载至视图的数据行数目最多为 50，而不考虑远程数据源上得到的结果集合大小：

OPEN DATABASE testdata

USE VIEW remote_customer_view

?DBSETPROP ('Remote_customer_view', 'View','MaxRecords', 50)


请参阅

CURSORSETPROP( ) 函数

DBSETPROP( ) 函数

项目管理器


共享连接

请参阅

通过共享连接，可以使一个活动连接成为多个远程视图的信息通道。通过共享活动连接，您可以：

 •	   减少加载于系统上的资源。

 •	   减少在远程服务器上的连接数。

 •	   对于根据连接的数目进行收费的服务器系统，可以降低费用。

� 若要共享一个连接

 •	   在项目管理器中，从“工具”菜单选择“选项”命令，再选择“远程数据”选项卡，然后在选项卡的“远程视图默认值”区域中选择“共享连接”复选框，最后选择“确定”按钮。

 — 或者 —

 •	   使用视图设计器。

 — 或者 —

 •	   使用带 SHARE 子句的 CREATE SQL VIEW 命令。

下面的代码创建一个视图，在使用 USE 命令激活此视图时，共享一个连接：

CREATE SQL VIEW product_view_remote CONNECTION remote_01 SHARE AS

SELECT * FROM products

USE product_view_remote


请参阅

CREATE SQL VIEW 命令

项目管理器

视图设计器


为视图字段创建默认值

请参阅

与表的字段默认值相类似。视图的字段默认值存于数据库中，并且在每次使用视图时都可用。

� 若要给视图字段指定默认值

 •	   使用 DBSETPROP( ) 函数的 DefaultValue 属性。


请参阅

DBSETPROP( ) 函数


在视图的字段和数据行上创建规则

请参阅

对远程数据源规则创建相应的本地版本，可以带来以下好处：

 •	   减少响应时间。

 •	   减轻网络资源的压力。

 •	   在向远程数据源发送数据前，先进行测试。

 •	   避免向远程数据源发送错误数据。

Visual FoxPro并不将本地创建的规则与远程规则进行比较。您必须保证创建的规则可被数据源接受。如果远程规则有所更改，本地规则也必须随之更改。

� 若要在视图字段或记录上创建规则

 •	   使用 DBSETPROP( ) 函数的 RuleExpression 和 RuleText 属性。

例如，下面的代码对 orditems_view 视图创建了字段级规则，防止输入的数量小于 1：

OPEN DATABASE testdata

USE VIEW orditems_view

?DBSETPROP ('Orditems_view.quantity', 'Field', ;

'RuleExpression', 'quantity >= 1')

?DBSETPROP ('Orditems_view.quantity', 'Field', ;

'RuleText', 'Quantities must be greater than or equal to 1')


请参阅

DBSETPROP( ) 函数


设置 ODBC 数据源

请参阅

在创建远程视图或使用 SQL 传递功能之前，必须安装 ODBC 驱动程序并且设置 ODBC 数据源。

选择 ODBC 驱动程序

随同 Visual FoxPro 提供的 ODBC 驱动程序允许您使用下列类型的数据：

 •	   FoxPro 2.x 版数据库文件

 •	   Microsoft Access 数据库文件

 •	   Paradox 3.x 版和 4.x 版表文件

 •	   dBASE III 和 dBASE IV 文件

 •	   Btrieve 表

 •	   SQL Server 数据库文件

 •	   Microsoft Excel 电子表格

 •	   固定宽度的以及符号分隔的文本文件

 •	   Oracle7 数据库文件

若要为这些类型的数据安装 ODBC 驱动程序，可使用 Visual FoxPro 安装程序。如果选择“完全”安装选项，将安装所有驱动程序。若只安装选定的驱动程序，请选择“定制”安装选项并从“选项”列表中选定“ODBC 支持”选项。

安装驱动程序后，就可以添加 ODBC 数据源了。

� 若要添加 ODBC 数据源

1.	从 Windows 的“控制面板”或 Visual FoxPro 程序组中选择 ODBC 图标。如果在安装 Visual FoxPro 时选择了“完全”安装选项，则该图标可用。

2.	在“数据源”对话框中选择“添加”。

显示“添加数据源”对话框。

3.	从“已安装的 ODBC 驱动程序”列表中选择所需的驱动程序，然后选择“确定”。

显示“ ODBC 设置”对话框。

4.	在“ODBC 设置”对话框中，设置必要的选项再选择“确定”。

有关为特定驱动程序设置数据源的详细内容，请选择“ODBC 设置”对话框中的“帮助”按钮。


请参阅

定义连接


控制连接和视图对象

请参阅

通过设置连接或视图对象的属性，您可以控制连接和视图。控制数据库、表、表字段、视图定义、视图字段、命名连接、活动连接或活动视图临时表的属性称为“引擎属性”。您可以用下列 Visual FoxPro 函数显示或设置引擎属性。

若要显示引擎属性，请使用	若要设置引擎属性，请使用
CURSORGETPROP( )	CURSORSETPROP( )
DBGETPROP( )	DBSETPROP( )
SQLGETPROP( )	SQLSETPROP( )
使用哪个函数取决于您对什么对象设置引擎属性：对象 0（连接 0 和临时表 0），数据库中的对象定义（命名连接或视图定义），或者活动对象（活动连接和活动视图临时表）。下表列出了对象和为每个对象设置属性时需要用到的函数：

若要为下列对象设置属性	连接	视图
对象0	SQLSETPROP( )	CURSORSETPROP( )
数据库中的对象定义	DBSETPROP( )	DBSETPROP( )
活动对象	SQLSETPROP( )	CURSORSETPROP( )
引擎属性

下表按字母顺序列出了引擎属性，以及使用每个属性的对象。有关属性的详细内容，包括属性类型、说明和只读或读写状态，请参阅相关的函数主题。

引擎属性	应用于
Asynchronous	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
Batchmode	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
BatchUpdateCount1	视图定义：请参阅DBSETPROP( ). 活动视图：请参阅CURSORSETPROP( ).
Buffering	活动视图临时表：请参阅CURSORSETPROP( ).
Caption	表中字段，视图定义中字段：请参阅DBSETPROP( ).
Comment	数据库，表，表中字段，视图定义，视图定义中字段，连接定义：请参阅DBSETPROP( ).
ConnectBusy	活动连接：请参阅SQLGETPROP( ).
ConnectHandle	活动视图临时表：请参阅CURSORGETPROP( ).
ConnectName1	视图定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLGETPROP( ). 活动视图临时表：请参阅CURSORGETPROP( ).
ConnectString	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLGETPROP( ).
ConnectTimeout	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
Database	活动视图临时表：请参阅CURSORGETPROP( ).
DataSource	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLGETPROP( ).
DataType	视图定义中字段：请参阅DBSETPROP( ).
DefaultValue	表中字段，视图定义中字段：请参阅DBSETPROP( ).
DeleteTrigger	表：请参阅DBGETPROP( ).
DispLogin	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
DispWarnings	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
FetchMemo1	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORGETPROP( ).
FetchSize1	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
IdleTimeout	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
InsertTrigger	表：请参阅DBGETPROP( ).
KeyField	视图定义中字段：请参阅DBSETPROP( ).
KeyFieldList2	活动视图临时表：请参阅CURSORSETPROP( ).
MaxRecords1	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
ODBCHdbc	活动连接：请参阅SQLGETPROP( ).
ODBCHstmt	活动连接：请参阅SQLGETPROP( ).
PacketSize	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
ParameterList	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
Password	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLGETPROP( ).
Path	表：请参阅 DBGETPROP( ).
PrimaryKey	表：请参阅 DBGETPROP( ).
QueryTimeOut	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
RuleExpression	表，表中的字段，视图定义，视图定义中的字段：请参阅DBSETPROP( ).
RuleText	表，表中的字段，视图定义，视图定义中的字段：请参阅DBSETPROP( ).
SendUpdates2	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
ShareConnection	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORGETPROP( ).
SourceName	活动视图临时表：请参阅CURSORGETPROP( ).
SourceType	视图定义：请参阅DBGETPROP( ). 活动视图临时表：请参阅CURSORGETPROP( ).
SQL	视图定义：请参阅DBGETPROP( ). 活动视图临时表：请参阅CURSORGETPROP( ).
Tables2	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
Transactions	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
Updatable	视图定义中的字段：请参阅DBSETPROP( ).
UpdatableFieldList2	活动视图临时表：请参阅CURSORSETPROP( ).
UpdateName	视图定义中的字段：请参阅DBSETPROP( ).
UpdateNameList2	活动视图临时表：请参阅CURSORSETPROP( ).
UpdateTrigger	表：请参阅DBGETPROP( ).
UpdateType	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
UseMemoSize1	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORGETPROP( ).
UserID	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLGETPROP( ).
Version	数据库：请参阅DBGETPROP( ).
WaitTime	连接定义：请参阅DBSETPROP( ). 活动连接：请参阅SQLSETPROP( ).
WhereType	视图定义：请参阅DBSETPROP( ). 活动视图临时表：请参阅CURSORSETPROP( ).
1 属性主要用于远程视图；属性的设置不影响本地视图的性能。如果想在本地视图上预设置引擎属性，然后更新它从而创建一个远程视图，可以在本地视图上设置该属性。 2 若要将更新值传送给远程数据源，必须设置该属性。


请参阅

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数

DBGETPROP( ) 函数

DBSETPROP( ) 函数

SQLGETPROP( ) 函数

SQLSETPROP( ) 函数


创建交叉表查询

请参阅

如果想在交叉表中显示查询结果，可以使用交叉表向导、查询设计器或 SELECT - SQL 命令创建一个可供交叉表使用的临时表。若要使用“查询设计器”或 SELECT - SQL 命令，可参照下面的步骤。您还可以使用临时表中的内容填充表单上的网格控制或报表中的字段控制。

� 若要创建交叉表查询

1.	打开适当的数据库或自由表。

2.	使用“查询设计器”，创建一个查询，使其在结果集中包含三个字段，三个字段的顺序是：

 •	   填充交叉表左侧行标题的字段。

 •	   填充交叉表顶端列标题的字段。

 •	   填充交叉表主体中行列交叉单元的字段。

3.	如果需要输入选择条件，使用“选定条件”选项卡。

4.	在“字段”选项卡中选择“交叉数据表”。

附注

如果选择“交叉数据表”后需要改变字段或加入选择条件，应该在清除“交叉数据表”复选框后再做修改。

Visual FoxPro 自动选择“分组依据”和“排序依据”字段。

5.	从“查询”菜单中选择“运行查询”。

“浏览”窗口以表的格式打开并显示查询数据。查询中的第一个字段成为临时表中的第一个字段并且相应的值也填充到其中。第二个字段中的每一个值则成为新表中的一个字段。第三个字段的值填充到由第二个字段中的值所创建的新字段中。

可以保存此查询并将查询所得的临时表作为数据源，用来创建报表或在表单中放置表格，供表格使用。

也可以使用 SELECT - SQL 命令来创建交叉表查询。

� 若要创建交叉表 SELECT - SQL 命令

1.	在命令窗口或在程序中，输入 SELECT - SQL 命令。

例如，可用下面的查询创建一个表，用此表说明每个城市每年的订单总数。

SELECT Orders.to_city, YEAR[orders.order_date] ;

SUM(Orders.order_amt) ;

FROM TestData!Orders ;

GROUP BY Orders.to_city, 2 ;

ORDER BY Orders.to_city, 2 ;

INTO CURSOR MyCursor

DO (_GENXTAB) WITH MyCursor

BROWSE NOMODIFY

2.	使用临时表的内容来填充报表或表单中的表格。


请参阅

添加查询

浏览窗口

创建查询

创建报表布局

定向输出查询结果

使用表单控制

查询设计器

Select - SQL 命令

启动查询设计器


创建图形

请参阅

如果想在图形中显示查询结果，可以使用“图形向导”、“查询设计器”或 SELECT - SQL 命令。若要使用“查询设计器”或 SELECT - SQL 命令，可参照下面的步骤。要创建一个图形，查询结果集中应至少包括一个数值字段。查询结束后，可以选择六类图形中的一种，每种需二个变量。

� 若要创建图形

1.	打开适当的数据库或自由表。

2.	在查询设计器中，创建至少包含一个数值字段的查询。

3.	从“查询”菜单中选择“查询去向”，然后再选择“图形”。

4.	从“查询”菜单中，选择“运行查询”。

5.	在图形向导中，按照窗口中的提示创建图形。

向导将创建一个表，此表只有一个通用字段，该字段中包含图形。所创建的图形将在“MS Graph”中显示出来。

� 若要用 SELECT - SQL 命令创建图形

1.	创建 SELECT - SQL 命令并指定表或临时表作为输出目标。

命令中的 SELECT - SQL 子句至少包含一个数值字段，然后象下面示例一样执行 _GENGRAPH。

SELECT Customer.country, COUNT(DISTINCT Customer.company) ;

FROM TestData!Customer ;

GROUP BY Customer.country ;

ORDER BY 2, Customer,country ;

INTO CURSOR MyCursor

DO (_GENGRAPH) WITH MyCursor

2.	按照“图形向导”中的提示创建含有图形数据的表。

� 若要修改图形

1.	浏览包含图形的表。

2.	双击通用字段显示图形。

3.	双击图形打开 MS Graph ，显示“MS Graph”工具栏。

4.	在“MS Graph”中修改图形。


请参阅

_GENGRAPH 系统内存变量

添加查询

创建查询

定向输出查询结果

查询设计器

Select - SQL 命令

启动查询设计器


创建表单

请参阅

表单显示了表和视图中的字段和记录，而且通常包含有定位控制，以帮助您从一个记录移到另一个记录。

在 Visual Foxpro 中，可以用以下任意一种方法生成表单：

 •	   使用表单向导创建即用表单。

 •	   在“表单”菜单中选择快速表单，创建一个通过添加您自己的控制来定制的简单表单。

 •	   使用表单设计器修改已有的表单或创建您自己的表单。


请参阅

使用快速表单添加字段

使用表单向导创建表单

使用表单设计器创建表单

使用快速表单添加字段


使用表单向导创建表单
用表单向导创建表单

请参阅

每当您要创建一个新的表单，都可以用表单向导来开始工作。向导会根据您对一系列问题的回答来生成一个表单。您可以在几种不同的类型选项中进行选择，并在创建之前预览表单。

� 要利用向导创建表单

1.	在项目管理器中选择“文档”选项卡，然后选择“表单”。

2.	选择“新建”。

3.	选择“表单向导”按钮。

4.	选择要创建的表单类型。

5.	按照向导屏幕上的指导进行操作。

用表单向导创建的表单含有一组标准的定位按钮，用以在表单中显示不同的记录、编辑记录及搜索记录等。


请参阅

使用表单设计器创建表单

表单向导

项目管理器


使用表单设计器创建表单
用表单设计器创建表单

请参阅

如果不想用向导创建表单，您还可以使用表单设计器。借助表单设计器，可以把字段和控制添加到表单中，并且通过调整和对齐这些控制来定制表单。

提供“快速表单”命令是为了使创建表单的工作变得更简单。此命令可以启动表单生成器，用它可以把表或视图中选定的字段添加到表单中。

� 若要创建一个新的表单

1.	在项目管理器中选择“文档”选项卡。

2.	选择“表单”图标。

3.	选择“新建”。

4.	选择“新表单”。


请参阅

使用快速表单添加字段

使用表单向导创建表单

表单设计器


使用快速表单添加字段
用快速表单命令添加字段

请参阅

若想把表或视图中的字段迅速放到表单中，可以在“表单”菜单中选择“快速表单”。“快速表单”将启动表单生成器，它用您选择的字段样式把表或视图中选定的字段添加到表单中。

� 若要应用表单生成器把字段添加到表单中

1.	在表单设计器中，从“表单”菜单中选择“快速表单”。

2.	在表单生成器中选择字段和样式，然后选择“确定”来生成表单。


请参阅

使用表单向导创建表单

使用表单设计器创建表单

表单生成器

表单设计器

快速表单（表单菜单）


修改表单

请参阅

如果用向导或生成器创建的表单不完全符合您的要求，还可以用表单设计器进行修改。利用表单设计器，可以很容易地移动和调整控制的大小、复制或删除控制、对齐控制以及修改 Tab 键次序。

� 要修改一个已生成的表单

1.	在项目管理器中，选择“文档”选项卡。

2.	选择“表单”图标和表单的名称。

3.	选择“修改”。

要	请参阅
移动和缩放控制	选择、移动和缩放控制
复制或删除控制	复制和删除表单控制
对齐控制	布局工具栏
修改 Tab 键次序	设置控制的 Tab 键次序


请参阅

复制和删除表单控制

表单设计器

布局工具栏

选择、移动和缩放控制

设置控制的 TAB 键次序


选择、移动和缩放控制

请参阅

创建一个表单之后，可能需要调整表单上控制的位置和大小。例如，要移动一个备注字段，或让一个文本框更长一些。

� 若要选择一个控制

 •	   将指针指向控制上的任意位置并单击。

� 若要选择相邻的控制。

1.	在表单控制工具栏.中选择“选定对象”按钮。

2.	拖动指针，在想选定的控制周围画一个框。

� 若要移动控制

1.	单击选定的控制。

2.	在表单窗口中将该控制拖动到新的位置。

  或者

 •	   选定控制然后用箭头键重新定位。

� 若要调整控制的大小

1.	选定控制。

2.	拖动一个尺寸柄，来增加该控制的长度、宽度或整体尺寸。


请参阅

表单控制工具栏

表单设计器工具栏


复制和删除表单控制

请参阅

当设计或修改一个表单时，可能需要复制一个已在表单上的控制。您可以复制一个已有的控制并把它粘贴到您的表单上。

� 若要复制控制

1.	用指针选取一个控制。

2.	从“编辑”菜单中选择“复制”。

3.	从“编辑”菜单中选择“粘贴”。

4.	使用指针把该控制重定位到所需的位置上。

如果创建了一个控制，后来又不需要它了，或不想使用某个用向导创建的控制，您可以删除这个控制。

� 若要删除控制

 •	   选定控制，并从“编辑”菜单上选择“剪切”。


请参阅

编辑菜单

表单设计器


设置控制的 Tab 键次序

请参阅

当用户按下 Tab 键在表单上移动时，表单的 Tab 键次序决定了选定控制的顺序。

您可以用二种不同方法设置 Tab 键次序：交互地按照使用表单时需要的选定控制的顺序单击控制；或在一个对话框中重排列表。

� 若要选择设置 Tab 键次序的方法

1.	从“工具”菜单中选择“选项”。

2.	在“选项”对话框中选择“表单”选项卡。

3.	在“Tab 键次序”选项下，选择“交互”或“按列表”。


请参阅

表单选项卡 (选项对话框)

用列表设置 Tab 键次序

交互地设置 Tab 键次序


交互地设置 Tab 键次序
以交互方式设置 Tab 键次序

请参阅

在交互方式中，您可以通过用指针单击控制来设置 Tab 键次序，单击的顺序是在表单中选定控制的顺序。

� 若要交互地改变 Tab 键次序

1.	从“查看”菜单中选择“Tab 键次序”，切换到“Tab 键次序”方式。

2.	若想使某个控制成为 Tab 键次序中的第一个，单击该控制旁的 Tab键次序框。

3.	在单击每一个其它控制的 Tab 键次序框的同时，按住 SHIFT 键。

4.	在“重新排序/取消”窗口中，选择“重新排序”。

若想重置 Tab 键次序，释放 SHIFT 键并重复上述2，3步。


请参阅

表单选项卡 (选项对话框)

用列表设置 Tab 键次序


用列表设置 Tab 键次序

请参阅

在列表方式中，可以通过在“Tab 键次序”对话框中重新排列控制的名字来设置 Tab 键次序。可以按行（在表单中由上向下）或按列（在表单中由左向右）设置 Tab 键次序。

� 若要用列表设置 Tab 键次序

1.	在“查看”菜单中选择“Tab 键次序”。

2.	选择“按行”或“按列”按钮。

3.	在“Tab 键次序”对话框中，用指针重新排列表。

4.	选择“确定”。


请参阅

表单选项卡 (选项对话框)

交互地设置 Tab 键次序

Tab 键次序 (查看菜单)


向表单中添加控制

请参阅

您可以通过在表单控制工具栏上选择控制来添加新的控制，并把它们放在“表单设计器”窗口中。例如，您可能想在表单上为字段添加新的标签，以及添加诸如按钮、编辑框、列表框等新控制，或者添加图片、线条和形状来改善表单的外观。

� 若要向表单中添加控制

1.	在“表单控制”工具栏上单击一个控制。

2.	在表单设计器中，在要放置控制的地方拖动鼠标指针创建一个矩形框。

新的控制就出现在您设定的位置上，其后您可以在表单中把它移动到最终位置上，也可以根据需要调整它的大小。

如果在添加控制时需要帮助，可以使用生成器添加控制并使它们与表单协同工作，也可以用表单控制工具栏和属性窗口来添加控制。


请参阅

用生成器向表单中添加控制

表单生成器

表单控制工具栏

表单设计器

属性窗口


用生成器向表单中添加控制

请参阅

正象向导可以用来快速构造表单一样，生成器可以用来把控制添加到表单上。对于要添加到表单上的控制，生成器会询问一系列问题，并设置合适的属性，以使这些控制象所希望的那样工作。

例如，如果您想在表单上添加一个新的文本框，生成器会询问您喜欢哪种样式的文本框以及它显示哪个表的字段。

您可以用两种方法访问生成器：在“属性”窗口中按下“生成器”按钮，或者当您在向表单中添加控制时，激活“表单控制”工具栏上的“生成器锁定”按钮。

� 若要用生成器添加控制

1.	在表单控制工具栏上选择“生成器锁定”按钮。

2.	从“表单控制”工具栏上选择所需的控制，并把它放在表单上。

3.	在生成器内的选项卡中填上有关信息。


请参阅

表单生成器

表单控制工具栏


向一个用向导生成的表单中添加控制

请参阅

如果您用表单向导创建了一个表单，然后又想向表单中添加控制，可以使用向导控制库—WIZSTYLE.VCX 中的控制来匹配已有控制的样式。

打开向导控制库后，即可使用“表单控制”工具栏中的向导型控制（例如凿型字段，凸出备注等）。要找出想要使用的控制，可选择一个已存在的控制并指明它的类和类库。例如，一个标准的向导字段可以在 WIZSTYLE.VCX 的 Standardfield 类中找到。

1.	在表单设计器中打开表单。

2.	从表单控制工具栏中选择“查看类”按钮，然后选择“添加”。

3.	在“打开”对话框中，在 WIZARDS 子目录中选中 WIZSTYLE.VCX 并选择“打开”。

4.	在“表单控制”工具栏中，选择对应于表单中已有控制的控制，并把它拖到表单中。

附注

如果把一个表单移到一个新的目录或另一个系统中，应该把与表单相关的控制库同表单一起移走。


请参阅

将类添加到表单、表单集和工具栏中

表单控制工具栏

表单设计器


定制表单

请参阅

使用“表单设计器”，您可以这样定制表单：

 •	   改变文本的字体和大小

 •	   向表单中添加形状和线条

 •	   向表单中添加图形

 •	   设置一个表单的前景和背景颜色


请参阅

向表单中添加图形

向表单中添加形状和线条

改变文本的字体和大小

设置一个表单的前景和背景颜色


改变文本的字体和大小

请参阅

使用“属性”窗口中的字体属性，可以更改在表单中所加控制上出现的文字的样式和大小。您可以从系统所支持的可用字体样式和大小中进行选择。若要改变表单中的文本，可改变字体属性，例如 FontName、FontSize 和 FontBold，这些属性均列在“属性”窗口中。

� 若要改变表单中的文本

1.	在表单设计器中选择要更改的控制。

2.	在属性窗口中，拉下“对象”列表，选择想更改的对象。

3.	找到要更改的字体属性，并设定它的值。


请参阅

向表单中添加图形

向表单中添加形状和线条

FontBold 属性

FontName 属性

FontSize 属性

表单设计器

属性窗口

设置一个表单的前景和背景颜色


向表单中添加形状和线条

请参阅

可以向表单中添加形状和线条来定制表单。例如，把几组控制用分隔线分离开，或为隔离它们而把框中的一组相关控制包围起来。

� 若要向表单中添加线条

1.	在表单控制工具栏中选择“线条”按钮。

2.	在表单中拖动鼠标生成线条。

您可以象处理其它控制一样移动线条或调整它的大小，或者用属性窗口中的 LineSlant 属性改变线条的倾斜度。

� 若要向表单中添加形状

1.	在“表单控制”工具栏中选择“形状”按钮。

2.	在表单中拖动鼠标生成形状。

您可以改变用“属性”窗口中的 Curvature 属性所画形状的类型。


请参阅

向表单中添加图形

改变文本的字体和大小

Curvature 属性

表单控制工具栏

LineSlant 属性

属性窗口

设置一个表单的前景和背景颜色


向表单中添加图形

请参阅

您可以把图形添加到表单的背景中，或把图片添加到表单内的方框中。

� 若要向表单中添加图形

1.	选择下列某一操作：

 •	   要改变表单的背景，选定该表单。

  或者

 •	   要向表单中添加图片，从表单控制工具栏中选择图象控制并把它放在表单上。

2.	在属性窗口选择 Picture 属性。

3.	单击三点按钮显示“打开”对话框。

4.	找到所需的位图文件或其它文件。

5.	选择“确定”。


请参阅

向表单中添加形状和线条

改变文本的字体和大小

表单控制工具栏

图象控制

Picture 属性

属性窗口

设置一个表单的前景和背景颜色


设置一个表单的前景和背景颜色
设置表单的前景和背景颜色

请参阅

使用调色板工具栏改变表单及其中控制的前景和背景颜色。

� 若要设置表单或控制的前景或背景颜色

1.	从“查看”菜单中，选择“工具栏”并选择“调色板”。

2.	选择“前景颜色”按钮或“背景颜色”按钮。

3.	选定想改变的控制或表单。

4.	在调色板工具栏中选择想使用的颜色。

5.	如果希望有更多的颜色可供选择，可选择“其它颜色”按钮。

� 若要创建自定义颜色

1.	选择“其它颜色”。

2.	在“颜色”对话框中，选择“定义自选色”，显示自选颜色选择器。

3.	选择一个“自选颜色”框，然后在自选颜色选择器中单击，选择所需的自定义颜色。

4.	选择“新增自选色”，把新颜色添加到调色板中。

5.	选择“确定”。


请参阅

向表单中添加图形

向表单中添加形状和线条

改变文本的字体和大小

调色板工具栏


保存表单

请参阅

完成表单的设计工作后，可以将其保存起来供以后使用。

� 若要保存表单

 •	   在表单设计器中，从“文件”菜单内选择“保存”。

表单保存为具有 .SCX 扩展名的文件。


请参阅

表单设计器

将表单和控制保存为类


创建新的表单集

请参阅

表单集是一个或多个表单的父容器。在表单设计器中，可以创建表单集。

� 若要创建一个表单集，

 •	   请从“表单”菜单中选择“创建表单集”。

如果您不想将多个表单作为一组使用，就不必创建表单集。如果创建了表单集，就可以向里面添加表单。


请参阅

在表单集中添加和移去表单

使用表单设计器创建表单

表单集对象


在表单集中添加和移去表单
在表单集合中添加和移去表单

请参阅

创建表单集之后，就可以向其中添加或移去表单。

� 若要在表单集中添加表单

 •	   请从“表单”菜单中选择“添加新表单”。

� 若要从表单集中移去表单

1.	在表单设计器底部的“表单”框中选择要移去的表单。

2.	从“表单”菜单中选择“移去表单”。

如果表单集只有一个表单，可以将表单集移去，得到一个独立的表单。

� 若要删除表单集

 •	   从“表单”菜单中选择“移去表单集”。


请参阅

创建新的表单集


设置数据环境

请参阅

表单或表单集的数据环境包括了与表单交互作用的表和视图，以及表单要求的表之间的关系。您可以在数据环境设计器中可视地设置数据环境，并将它和表单或表单集一起保存。

有多种方法打开数据环境设计器。

� 若要打开数据环境设计器

 •	   从“查看”菜单中选择“数据环境”。

也可以从表单或表单集的快捷菜单中选择“数据环境”按钮。


请参阅

向数据环境中添加表或视图

使用表单设计器创建表单

数据环境设计器

从数据环境中拖动字段和表

在数据环境中编辑关系

从数据环境中移去表

在数据环境中设置关系


向数据环境中添加表或视图

请参阅

向数据环境设计器中添加表或视图时，可以看到属于表或视图的字段和索引。

� 若要向数据环境中添加表或视图

1.	在数据环境设计器中，从“数据环境”菜单中选择“添加”。

2.	在“添加表或视图”对话框中，从列表中选择一个表或视图。

 — 或者 —

如果没有打开的数据库或项目，请选择“其他”来选择表。

也可以将表或视图从打开的项目拖放到数据环境设计器中，或从快捷菜单中选择“添加”。

向数据环境中添加一个表或视图时，同时也创建了一个临时表对象。打开数据环境设计器后，可在属性窗口中设置临时表对象的属性。例如，通过设置临时表对象的 Exclusive 属性，可以决定是以独占方式还是共享方式打开一个表。

附注

视图总是以独占方式打开。


请参阅

数据环境设计器

从数据环境中移去表

设置数据环境


从数据环境中拖动字段和表
从数据环境设计器中拖动字段和表

请参阅

可以将字段、表或视图从数据环境设计器中拖动到表单或报表。从数据环境将字段和表拖动到表单时会创建相应的控制，下面的表列出了这些控制。

若要创建一个	将下面的项拖动到表单
表格	表
复选框	逻辑型字段
编辑框	备注型字段
OLE 绑定型控制	通用型字段
文本框	其他类型的字段
下表列出了从数据环境将字段和表拖动到报表时创建的相应控制。

若要创建	将下面的项拖动到报表
一个字段控制	字段
多个字段控制	表


请参阅

复选框控制

数据环境设计器

编辑框控制

表格控制

OLE 绑定型控制

报表控制工具栏

设置数据环境

文本框控制


从数据环境中移去表

请参阅

当您将表从数据环境中移去时，与这个表有关的所有关系也随之移去。

� 若要将表或视图从数据环境设计器中移去

1.	在数据环境设计器中选择要移去的表或视图。

2.	从“数据环境”菜单中选择“移去”命令。


请参阅

向数据环境中添加表或视图


在数据环境中设置关系

请参阅

如果添加进数据环境设计器的表具有在数据库中设置的永久关系，这些关系将自动地加到数据环境中。如果表中没有永久的关系，您可以在数据环境设计器中设置这些关系。

� 若要在数据环境设计器中设置关系

 •	   将字段从主表拖动到相关表中的相匹配的索引标识上。

您也可以将字段从主表拖动到相关表中的字段上。如果和主表中的字段对应的相关表中没有索引标识，系统将提示您是否创建索引标识。

附注

在数据环境中，一个表可以包含在多个关系中，但只能有一个 ChildOrder 设置。


请参阅

向数据环境中添加表或视图

数据环境设计器

在数据环境中编辑关系


在数据环境中编辑关系

请参阅

在数据环境设计器中设置了一个关系后，在表之间将有一条连线指出这个关系。

� 若要编辑关系的属性

 •	   在属性窗口中，从“对象”框选择要编辑的关系。

关系的属性对应于 SET RELATION 和 SET SKIP 命令中的子句和关键字。

RelationalExpr 属性的默认设置为主表中主关键字段的名称。如果相关表是以表达式作为索引的，就必须将 RelationalExpr 属性设置为这个表达式。

如果关系不是一对多关系，必须将 OneToMany 属性设置为“假”(.F.)。这对应于使用 SET RELATION 命令时不发出 SET SKIP 命令。

将关系的 OneToMany 属性设置为“真”(.T.)，相当于发出 SET SKIP 命令。当您浏览父表时，在记录指针浏览完子表中所有的相关记录之前，记录指针一直停留在同一父记录上。


请参阅

在数据环境中设置关系


在表单或表单集中包含预定义常量
在表单或表单集合中包含预定义常量

请参阅

要使用预定义常量，可将头文件包含到表单或表单集中。一个头文件通常包含用 #DEFINE 预处理器命令定义的编译时间常量。。

� 若要在表单或表单集中包含文件

1.	从“表单”菜单中选择“包含文件”命令。

2.	在“包含文件”对话框的“包含文件”文本框中，指定要包含的文件。

 — 或者 —

选择“…”按钮打开“包含”对话框，选择要包含的文件。

3.	选择“确定”按钮。


请参阅

#DEFINE ... #UNDEF 预处理器命令

包含文件 （表单菜单和类菜单）


深入了解容器和控制对象

请参阅

Visual FoxPro 中的对象根据它们所基于的类的性质可分为两类：

 •	   容器可以作为其他对象的父对象。例如，一个表单作为一个容器，是放在它上面的复选框的父对象。

 •	   控制可以包含在容器中，但不能作为其他对象的父对象。例如复选框就不能包含任何其他的对象。

在表单设计器中既可以设计容器，也可以设计控制。

容器	可以包含
列	标头，除了表单、表单集、工具栏、计时器和其他列控制之外的任何控制
命令按钮组	命令按钮
表单集	表单、工具栏
表单	页框、表格、任何控制
表格	列
选项按钮组	选项按钮
页框	页面
页面	表格、任何控制


请参阅

Collection 和 Count 属性

列对象

命令组控制

容器对象

表单对象

表单集对象

表格控制

选项组控制

Page 事件

页框控制

SetAll 方法


向表单中添加 Visual FoxPro 控制

请参阅

控制工具栏能使您很方便地在表单中添加任何一种标准的 Visual FoxPro 控制。

标准 Visual FoxPro 控制
复选框	图象	OLE 绑定型控制	文本框
组合框	标签	OLE 容器控制	计时器
命令按钮	线条	形状
编辑框	列表框	微调
� 若要在表单中添加控制

 •	   在控制工具栏中选择所需的控制按钮，在表单中单击或拖动按钮，把它调整到想要的大小。


请参阅

从类库中添加对象到表单

在表单中添加表字段

在表单中添加用户自定义对象


在表单中添加表字段

请参阅

在表单中添加表字段的一种方法是先添加一个文本框，再将文本框的 ControlSource 属性设置为表字段。除此之外，还有其他添加表字段的方法：

 •	   在项目管理器或数据环境设计器中将一个字段拖动到表单或页面上，这样，控制将与字段相联系。

 •	   在项目管理器或数据环境设计器中将一个表拖动到表单或页面上，这样，表格将与表相联系。


请参阅

从类库中添加对象到表单

在表单中添加用户自定义对象

向表单中添加 Visual FoxPro 控制

数据环境设计器

项目管理器


在表单中添加用户自定义对象

请参阅

Visual FoxPro 最强大的功能之一就是能创建在应用程序不同部分都可以使用和重复使用的类。如果创建了类，您就能将它们添加到表单或表单集中。

� 若要从项目的类库添加基于自定义类的对象

 •	   在项目管理器中，将类拖动到表单或页面上。

当您注册类时，可直接从“控制”工具栏添加类。


请参阅

在控制工具栏上添加类库

项目管理器


在控制工具栏上添加类库

请参阅

类库必须在注册后才能在“控制”工具栏中显示出来。

� 若要注册类库

1.	从“工具”菜单中选择“选项”。

2.	在“选项”对话框中选择“控制”选项卡。

3.	选择“添加”按钮。

4.	在“打开”对话框中，选择一个卷加到“选定”列表中的类库，并选择“打开”按钮。

5.	重复步骤 3 和 4。

也可以在表单设计器中直接注册类库。

� 若要在表单设计器中注册一个类库

1.	在控制工具栏中选择“查看类”按钮。

2.	从子菜单中选择“添加”。

3.	在“打开”对话框中选择要添加到“控制”工具栏上的类库，然后选择“打开”按钮。


请参阅

控制选项卡 （选项对话框）

表单控制工具栏


从类库中添加对象到表单

请参阅

如果您从“选项”对话框的“类”选项卡或从“查看类”子菜单添加类库，您就能在表单设计器中访问它们。

� 若要从“控制”工具栏添加自定义对象

1.	在控制工具栏中，选择“查看类”按钮。

2.	从已注册类库的列表中选择一个类库，它包含了要加到表单中的控制。

工具栏与选定库中的控制放在一起。

3.	单击所需要的控制，并在表单中拖动到合适大小。

附注

如果想从“查看类”工具栏中移去一个可视类库，可以在“选项”对话框的“控制”选项卡中，选择“选定”列表中列出的一个可视的类库，然后选择“移去”按钮。


请参阅

在控制工具栏上添加类库

在表单中添加用户自定义对象

表单控制工具栏

表单设计器


确定表单中的控制数目

请参阅

使用 ControlCount 属性可以确定表单中究竞有多少个控制，而 Controls[n] 属性允许引用表单上的任何一个控制。下面的程序用于打印出当前活动表单上所有控制的 Name 属性：

ACTIVATE SCREEN  && 将输出打印到 Visual FoxPro 主窗口

FOR nCnt = 1 TO _SCREEN.ActiveForm.ControlCount

? _SCREEN.ActiveForm.Controls[nCnt].Name

ENDFOR


请参阅

Collection 和 Count 属性

ControlCount 属性

Controls 属性

Name 属性


添加属性和方法

请参阅

可以向表单中添加任意多个新的属性和方法。新建的属性和方法属于表单，您可以象引用其他属性或方法那样引用它们。

如果已有一个表单集，那么在表单设计器中加入的属性和方法就属于表单集。如果没有建立表单集，则属性和方法属于表单。

� 若要在表单或表单集中添加新属性

1.	从“表单”菜单中选择“新属性”命令。

2.	在“新属性”对话框中，键入属性的名称。还可以加入关于这个属性的说明，它可以显示在属性窗口的底部。


请参阅

创建数组属性

创建新方法

表单设计器

新属性 （表单菜单和类菜单）

属性窗口


创建数组属性

请参阅

数组属性和其他属性一样都属于表单或表单集，不同的是可用 Visual FoxPro 的数组命令和函数处理它。

� 若要创建一个数组属性

1.	在表单中添加新属性。

2.	在“新属性”对话框的“名称”框中键入数组属性的名称，包括数组的大小和维数。

例如，要创建一个 10 行的二维数组，应在“新属性”对话框的“名称”框中键入 arrayprop[10,2]。在表单中添加完数组属性后，属性在属性窗口中以只读方式显示。

您可以在运行时管理数组，重新设置数组的维数，也可对数组属性的元素赋值。


请参阅

向表单或表单集中添加属性或方法

新属性 （表单菜单和类菜单）


创建新方法

请参阅

您可在表单中添加方法，并且可以用调用表单类方法的方式调用它。

� 若要在表单或表单集中创建一个新方法

1.	从“表单”菜单中选择“新方法”。

2.	在“新方法”对话框中，键入方法的名称。还可以包含有关这个方法的说明，这是可选的。

调用用户自定义方法和调用基类方法一样，都使用下面的语法：

ObjectName.MethodName

您建立的方法同样可以接受参数并返回值，这种情况下，您可以使用赋值语句来调用方法：

cVariable = ObjectName.MethodName(cParameter, nParameter)


请参阅

向表单或表单集中添加属性或方法

在运行时调用方法

新方法对话框


在设计时设置属性

请参阅

打开属性窗口会显示选定对象的属性或事件。要编辑另一个对象的属性或事件，可在“对象”框中选择这个对象，或者直接从表单中选择这个控制。

� 若要设置属性

1.	在属性窗口中，从“属性”和“事件”列表中选择一个属性。

2.	在“属性设置”框中，为选中的属性键入或选择需要的设置。

附注

那些在设计时为只读的属性，例如对象的 Class 属性，在属性窗口的“属性”和“事件”列表框中以斜体显示。

如果属性要求输入字符值，不必用引号将这个值括起来。例如，要将一个表单的标题设为 CUSTOMER，只需在“属性设置”框中键入 CUSTOMER；若想让表单的标题是“CUSTOMER”，即想让引号也出现在窗口的标题上，在“属性设置”框中键入“CUSTOMER”。


请参阅

Class 属性

属性窗口

在运行时设置属性

使用表达式设置属性


使用表达式设置属性

请参阅

通过属性窗口，您可以将属性设置为表达式或函数的结果。

� 若要用表达式设置属性

 •	   在属性窗口中，选择“函数”按钮来打开表达式生成器。

 — 或者 —

 •	   在“属性设置”框中键入“=”号，并在后面键入表达式。

例如，如果您想设置表单的 Caption 属性，使它在运行表单时能够指示当前的活动表，可在“属性设置”框中键入 =ALIAS( )。

在属性窗口中设置一个属性表达式，以及在运行或设计时初始化对象时，才对这个属性表达式进行求值。如果建立了对象，除非您或用户明确地改变它，属性设置都不会改变。


请参阅

Caption 属性

属性窗口

在设计时设置属性

在运行时设置属性


定义表单行为

请参阅

当您在表单设计器中设计表单时，表单是“活”的：您对表单的外观和行为的修改将立刻在表单上反映出来。如果将 WindowState 属性设置为 1 —最小化或 2 —最大化，表单设计器中的表单会立即体现这一设置。如果将 Movable 属性设置为“假”(.F.)，那么不但用户在运行时不能移动表单，即使在设计时也不能移动它。因此您应该在设置那些决定表单行为的属性之前，先完成表单的功能设计，并添加所有需要的控制。

下表列出了在设计时常用的表单属性，它们定义了表单的外观和行为：

属性	说明	默认值
AlwaysOnTop	控制表单是否总是处在其他打开窗口之上。	“假”(.F.)
AutoCenter	控制表单初始化时是否让表单自动地在 Visual FoxPro 主窗口中居中。	“假”(.F.)
BackColor	决定表单窗口的颜色。	255,255,255
BorderStyle	决定表单是没有边框，还是具有单线边框、双线边框或系统边框。如果 BorderStyle 为 3 — 系统，用户就能重新改变表单大小。	3
Caption	决定表单标题栏显示的文本。	Form1
Closable	控制用户是否能通过双击“关闭”框来关闭表单。	“真”(.T.)
DataSession	控制表单或表单集里的表是在全局都能访问的工作区中打开还是对表单或表单集私有。	1
MaxButton	控制表单是否具有最大化按钮。	“真”(.T.)
MinButton	控制表单是否具有最小化按钮。	“真”(.T.)
Movable	控制表单是否能移动到屏幕的新位置。	“真”(.T.)
ScaleMode	控制对象的尺寸和位置属性的度量单位是 foxels 还是象素。由“选项”对话框中的设置决定。	由“选项”对话框中的设置决定。
WindowState	控制表单是最小化、最大化还是正常状态。	0  正常
WindowType	控制表单是非模式表单（默认）还是模式表单。如果表单是模式表单，用户在访问应用程序用户界面中任何其他单元前必须关闭这个表单。	0  非模式
您可以使用 LockScreen 属性，使控制布局属性在运行时的调整看起来更清晰。


请参阅

在设计时设置属性

使用表单模板和表单集模板


编辑事件代码和方法代码

请参阅

事件是用户的行为，如单击鼠标或鼠标的移动，也可以是系统行为，如系统时钟的进程。方法是和对象相联系的过程，只能通过程序以特定的方式激活。当触发事件或激活方法时，您可以指定要执行的代码。

� 若要编辑事件或方法代码

1.	从“查看”菜单中选择“代码”命令。

2.	在“过程”框中选择事件或方法。

3.	在编辑窗口中键入代码，在触发事件或激活方法时将执行这些代码。

例如，如果在表单上已有一个标题为“退出”的命令按钮，在这个按钮的 Click 事件中可包括这样一行代码：

RELEASE THISFORM


请参阅

创建新方法

编辑窗口

RELEASE 命令

响应事件


将表单和控制保存为类

请参阅

您也可以将表单或表单上的控制子集保存为类定义。如果您打算创建基于表单的子类，或在其他表单中重新使用这些控制，可将表单作为类定义来保存。

� 若要将表单或选定的控制保存为类定义

1.	从“文件”菜单中选择“另存为类”。

2.	在“另存为类”对话框中，选择“当前表单”或“选定控制”。

3.	在“类名”框中输入类的名称。

4.	在“文件”框中输入保存类的文件名。

5.	选择“确定”按钮。

如果您没有给出文件扩展名，保存文件时会加上默认的 .VCX 扩展名，如果将表单保存为类定义，您就可以用 MODIFY CLASS 命令对它进行修改。


请参阅

创建新类

MODIFY CLASS 命令

修改类定义

另存为类 （文件菜单）


运行表单

请参阅

有几种方法运行设计好的表单，最容易的方法是单击表单设计器工具栏上的运行按钮。

� 若要运行表单

 •	   在项目管理器中，选择要运行的表单，再选择“运行”按钮。

 — 或者 —

 •	   使用 DO FORM 命令运行表单。

您也可以从“程序”菜单中选择“运行”来运行菜单，在“文件类型”框中选择“表单”，选定一个表单再选定“运行”按钮。


请参阅

DO FORM 命令

表单设计器工具栏

项目管理器

命名表单对象


命名表单对象

请参阅

默认情况下，当使用 DO FORM 命令时，表单对象的名称与 .SCX 文件名称一样。

� 若要命名表单对象

 •	   请使用 DO FORM 命令的 NAME 子句。

例如，下面的命令运行一个表单，同时创建两个表单对象变量名：

DO FORM Customer NAME frmCust1

DO FORM Customer NAME frmCust2


请参阅

DO FORM 命令

运行表单


将表单链接到表单对象变量

请参阅

DO FORM 命令中的 LINKED 关键字允许将表单和表单对象变量链接起来。如果包含了 LINKED 关键字，当与表单对象相关联的变量超出范围时，表单将被释放。

� 若要将表单链接到对象变量

 •	   请使用 DO FORM 命令中的 LINKED 子句。

例如，下面命令创建一个链接到对象变量 frmCust2 的表单，当释放 frmCust2 时，表单也关闭：

DO FORM Customer NAME frmCust2 LINKED


请参阅

DO FORM 命令

命名表单对象


关闭活动表单
关闭活动的表单

请参阅

若想允许用户通过双击控制框，或选择表单“控制”菜单中的“关闭”命令来关闭活动的表单，需要设置表单的 Closable 属性。

� 若要允许用户关闭活动表单

 •	   在属性窗口中，将 Closable 属性设置为“真”(.T.)。

 — 或者 —

 •	   使用 RELEASE 命令。

例如，您可以通过在命令窗口或程序中发出下面的命令来关闭和释放表单 frmCustomer：

RELEASE frmCustomer

也可以在一个控制，比如标题为“退出”的命令按钮的 Click 事件代码中包含下面的命令，它允许用户关闭和释放表单：

RELEASE THISFORM


请参阅

Click 事件

Closable 属性

隐藏表单

属性窗口

RELEASE 命令

释放表单


在运行时设置属性

请参阅

您可以在对象层次上引用对象，使用表达式设置属性，还可以一次设置多个属性。

若要	设置
引用对象	在对象层次上引用对象
使用表达式	在运行时使用表达式设置属性
设置多个属性	设置多个属性


请参阅

在运行时调用方法

设置多个属性

在设计时设置属性

在运行时使用表达式设置属性


在对象层次上引用对象

请参阅

若想操作一个对象，需要确定它和容器层次的关系。在容器层次的最高级（表单集或表单）需要引用对象变量。默认情况下，对象变量和 .SCX 文件有相同的名称。

通过引用由点号 (.) 分隔的对象变量、控制和属性可以处理属性：

objectvariable.[form.]control.property = Setting

下表列出的属性或关键字使在对象层次上引用对象变得更容易：

属性或关键字	引用
ActiveControl	当前活动表单中具有焦点的控制
ActiveForm	当前活动表单
ActivePage	当前活动表单中的活动页
Parent	对象的直接容器
THIS	对象或对象的过程或事件
THISFORM	包含对象的表单
THISFORMSET	包含对象的表单集


请参阅

ActiveControl 属性

ActivePage 属性

Parent 属性

THIS 对象引用

THISFORM 对象引用

THISFORMSET 对象引用


在运行时使用表达式设置属性

请参阅

在运行时也可以使用表达式或函数来设置属性。

� 若要在运行时将属性设置为表达式

 •	   为属性指定一个表达式。

 — 或者 —

 •	   为属性指定一个用户自定义函数的结果。

例如，根据一个变量的不同值，可以将一个按钮的标题设置为“Edit”或“Save”。首先在表单的调用程序中声明这个变量：

PUBLIC glEditing

glEditing = .F.

然后在 Caption 设置中使用一个 IIF 表达式：

frsSet1.frmForm1.cmdButton1.Caption = ;
IIF(glEditing = .F., "Edit", "Save")

可以决定按钮的大小，使用带有表的字段的表达式设置标题：

* 将按钮宽度设置为 'Call '的宽度 + 姓名的宽度

frmForm1.cmdButton1.Width = 5 + LEN(ALLTRIM(employee.first_name ;

+ " " + employee.last_name))

* 将按钮标题设置为 'Call ' + 姓名

frmForm1.cmdButton1.Caption = "Call " ;

+ ALLTRIM(employee.first_name + " " + employee.last_name)

还可以用一个用户自定义函数设置标题：

frsSet1.frmForm1.cmdButton1.Caption = setcaption()


请参阅

IIF( ) 函数

设置多个属性


设置多个属性

请参阅

可以同时设置多个属性。

� 若要设置多个属性

 •	   使用 WITH ... ENDWITH 结构。

例如，要设置表单中表格的列的多个属性，可在表单中任何事件或方法代码中包含下面的语句：

WITH THISFORM.grdGrid1.grcColumn1

.Width = 5

.Resizable = .F.

.ForeColor = RGB(0,0,0)

.BackColor = RGB(255,255,255)

.SelectOnEntry = .T.

ENDWITH


请参阅

在运行时使用表达式设置属性

WITH ... ENDWITH 命令


在运行时调用方法

请参阅

调用对象的方法的语法是：

Parent.Object.Method

如果创建了对象，您就可以在应用程序的任何地方调用这个对象的方法。下面的命令调用方法来显示表单并将焦点设置到一个命令按钮：

myf_set.frmForm1.Show	&& 保存在 MYF_SET.SCX 中的表单集

myf_set.frmForm1.cmdButton1.SetFocus

若要隐藏表单，使用这个命令：

myf_set.frmForm1.Hide


请参阅

在运行时设置属性


隐藏表单

请参阅

您可以隐藏一个表单，使它不可见。在隐藏表单后，用户不能访问表单上的控制，但您仍可以用程序完全控制它们。

� 若要隐藏表单

 •	   请使用 Hide 方法。

例如，在与命令按钮的 Click 事件相关的代码中，您可以包含下面一行代码：

THISFORM.Hide

当用户单击命令按钮时，表单仍在内存中，但不可见。


请参阅

Click 事件

Hide 方法

释放表单


释放表单

请参阅

当用户完成对表单的操作后，您可以让用户释放表单。在释放表单后，您就不能再访问表单的属性和方法了。

� 若要释放表单

 •	   请使用 RELEASE 命令。

例如，在与命令按钮的 Click 事件相关的代码中，您可以包含下面一行代码：

RELEASE THISFORM

当用户单击命令按钮时，表单被关闭。


请参阅

Click 事件

隐藏表单

RELEASE 命令


将参数传递到表单

请参阅

在运行表单时，为设置属性值或者指定操作的默认值，有时需要将参数传递到表单。

� 若要将参数传递到在表单设计器中创建的表单

1.	创建容纳参数的表单属性，如 ItemName 和 ItemQuantity。

2.	在表单的 Init 事件代码中，包含 PARAMETERS 语句：

PARAMETERS cString, nNumber

3.	在表单的 Init 事件代码中，将参数分配给属性：

THIS.ItemName = cString

THIS.ItemQuantity = nNumber

4.	当运行表单时，在 DO FORM 命令中包括一个 WITH 子句：

DO FORM myform WITH "Bagel", 24

� 若要将参数传递到用程序创建的表单中

1.	在表单的 Init 方法中包含一个 PARAMETERS 语句，如：

PROCEDURE Init

PARAMETERS cString, nNumber

ENDPROC

2.	在 CREATEOBJECT( ) 函数中包含参数：

frmTest = CREATEOBJECT("myform","mystring", 7)


请参阅

CREATEOBJECT( ) 函数

DO FORM 命令

Init 事件

PARAMETERS 命令

从表单返回值


从表单返回值

请参阅

在整个应用程序中您都可以使用表单，让用户指定值。

� 若要从表单返回值

1.	将表单的 WindowType 属性设置为 1，使表单成为模式表单。

2.	在与表单的 UnLoad 事件相关的代码中，包含一个带返回值的 RETURN 命令。

3.	在运行表单的程序或方法中，在 DO FORM 命令中包含 TO 关键字。

例如，如果 FindCust ID 是一个返回字符值的模式表单，下面的一行代码将返回值返回到一个名为 cCustID 的变量中。

DO FORM FindCustID TO cCustID

疑难解答

如果出现错误，请确保将 WindowType 设置为 1（模式）。


请参阅

DO FORM 命令

将参数传递到表单

RETURN 命令

UnLoad 事件

WindowType 属性


管理表单的多个实例

请参阅

当您管理一个表单的多个实例时，必须记住以下要点：

 •	   在启动表单中创建数组属性，可以容纳与多实例表单的每个实例相关联的对象变量。在您事先不知道有多少个实例时，跟踪实例变量的最简便的方法就是使用数组。

 •	   对于拥有多个实例的表单，将其 DataSession 属性设置为 2 — 私有数据工作期。


请参阅

创建数组属性

DataSession 属性


为表单或表单集设置设计区

请参阅

在“选项”对话框中可以设置表单设计器的最大设计区。

� 若要设置表单的最大设计区

1.	从“工具”菜单中选择“选项”。

2.	在“选项”对话框中选择“表单”选项卡。

3.	在“最大设计区”框中，选择最大设计区的象素坐标。

当您设置最大设计区时，表单设计器的背景在设计区范围为白色，超出最大设计区的部分为灰色。

在设计区中，必须考虑标准的窗口属性，如工具栏。

Visual FoxPro 主窗口属性	要求的象素
标题和菜单	38
状态栏	23
停放的工具栏	29


请参阅

表单设计器

表单选项卡 （选项对话框）


指定默认的表单模板

请参阅

您可以为表单模板从注册的类库中指定一个表单类。

� 若要指定默认的表单模板

1.	从“工具”菜单选择“选项”命令。

2.	在“选项”对话框中，选择“表单”选项卡。

3.	在“模板类”区，选择“表单”复选框。

如果没有选定表单模板，会打开“打开”对话框，这样您可以选择一个表单类。如果已选定表单模板，可以选择“…”按钮来选择其他的类。

4.	如果想在以后的 Visual FoxPro 工作期中使用这个模板，选择“设置为默认值”按钮。

5.	选择“确定”按钮。


请参阅

表单选项卡 （选项对话框）

使用表单模板和表单集模板


使用表单模板和表单集模板

请参阅

您可以用与设置表单模板.一样的方法指定表单集模板。下面是可能的情况：

 •	   表单集模板和表单模板都被指定：

选择“创建”对话框中的“表单”（或所有其他创建新表单的方法），将自动创建一个基于模板表单集类的表单集。当在表单设计器中选择“表单”菜单的“添加新表单”命令时，一个基于表单模板的表单将添加到表单集中。

 •	   只有表单集模板被指定。

选择“新建”对话框中的“表单”（或所有其他创建新表单的方法），将自动创建一个基于模板表单集类的表单集。当在表单设计器中选择“表单”菜单的“添加新表单”命令时，一个基于 Visual FoxPro 表单基类的表单被添加到表单集中。

 •	   只有表单模板被指定。

选择“新建”对话框中的“表单”（或所有其他创建新表单的方法），将自动创建一个基于模板表单类的表单。

 •	   没有模板被指定

选择“新建”对话框中的“表单”（或所有其他创建新表单的方法），将自动创建一个基于 Visual FoxPro 表单基类的表单。


请参阅

指定默认的表单模板


Collection 和 Count 属性

请参阅

Visual FoxPro 的所有容器对象都具有与之相关的计数属性和集合属性。集合属性是一个数组，用以引用每个包含在其中的对象。计数属性是一个数值属性，它表明了所包含对象的数目。

每个容器的集合和计数属性是按照容器所包含对象的类型来命名的。下表列出了容器及其相应的集合和计数属性：

容器	集合属性	计数属性
_SCREEN	Forms	FormCount
表单集	Forms	FormCount
表单	Controls	ControlCount
页框	Pages	PageCount
页面	Controls	ControlCount
表格	Columns	ColumnCount
命令组	Buttons	ButtonCount
选项组	Buttons	ButtonCount
列	Controls	ControlCount
工具栏	Controls	ControlCount
容器	Controls	ControlCount
控制	Controls	ControlCount
这些属性允许使用循环，通过编程方式操作所有被包含的对象或某一特定的对象。例如，下面的几行代码设置了表格列的 BackColor 属性，使背景颜色红绿相间。

FOR i = 1 to frm1.grd1.ColumnCount

IF i % 2 = 0 &&  偶数列

frm1.grd1.Columns(i).BackColor = RGB(0,255,0) &&绿色

ELSE

frm1.grd1.Columns(i).BackColor = RGB(255,0,0) &&红色

ENDIF

ENDFOR


请参阅

确定表单中的控制数目


运行时在本地和远程数据之间切换

请参阅

可以创建一个表单，它既可用来编辑本地数据又可用来编辑服务器上的远程数据。甚至可以设计运行时指定数据源的表单。

� 若要设计可操作本地或远程数据的表单

1.	在数据库中创建相同结构的本地视图和远程视图。

2.	创建表单.

3.	创建新的表单属性来指示使用本地数据还是远程数据。

4.	把本地视图添加到表单的数据环境中。

5.	设置这些对象的下列属性。

对象	属性	设置
数据环境	AutoOpenTables	.F.
临时表	Alias	将表单控制与远程或本地临时表相绑定的一个通用名称
表单控制	ControlSource	新临时表别名中的字段
表单表格	RecordSource	新临时表别名
6.	在表单的 Load 事件代码中，设置用户自定义属性来指定是本地数据还是远程数据。

例如，如果表单属性命名为 UseRemote，那么下面的表单 Load 事件中的一行代码可指定使用远程数据。

THISFORM.UseRemote = .T.

可以通过检查应用程序变量或使用 MESSAGEBOX( ) 函数来确定运行时指定的是本地数据还是远程数据。

7.	在数据环境的 Init 事件代码中，调用数据环境的 OpenTables 方法：

THIS.OpenTables

8.	在临时表的 Init 事件代码中，根据用户自定义的表单属性设置值，设置视图的 CursorSource 属性。

例如，下面的代码检查表单的属性并根据不同情况将 CursorSource 属性分别设置为远程视图或本地视图。

IF THISFORM.UseRemote = .T.

THIS.CursorSource = RemoteView

ELSE

THIS.CursorSource = LocalView

ENDIF

运行表单时，无论是本地还是远程数据都可以显示和编辑。


请参阅

向数据环境中添加表或视图

向表单或表单集添加属性和方法

创建本地视图

创建远程视图


创建类库

请参阅

可以用三种方法创建类库。

� 若要创建一个类库

 •	   在创建类时，请在新类对话框的“存储于”框中指定一个新的类库文件。

 — 或者 —

 •	   使用 CREATE CLASS 命令，同时指定新建类库的名称。

例如，下面的语句创建了一个名为 myclass 的新类和一个名为 new_lib 的新类库：

CREATE CLASS myclass OF new_lib AS CUSTOM

 — 或者 —

 •	   使用 CREATE CLASSLIB 命令。

例如，在命令窗口键入下面的命令，可以创建一个名为 new_lib 的类：

CREATE CLASSLIB new_lib


请参阅

复制类库中的类

CREATE CLASS 命令

CREATE CLASSLIB 命令

创建新类

新建类对话框

删除类库中的类


复制类库中的类

请参阅

把类库添入项目后，您可以很容易地将类从一个类库复制到另一个类库。

� 若要将类从一个类库复制到另一个类库

1.	确保两个类库都在项目中（不一定是同一个项目）。

2.	在项目管理器中，选择“类”选项卡。

3.	单击包含类的类库左边的加号。

4.	将类从旧库中拖到新库中。

可以将类和基于这个类的所有子类都包含在一个类库中。如果一个类包含多个不同类库中的元件，那么在运行或设计时，最初加载这个类时将花费较长的时间，因为包含类元件的类库必须全部打开。


请参阅

创建类库

项目管理器

删除类库中的类


删除类库中的类

请参阅

从类库中删除类也很方便。

� 若要从库中删除一个类

 •	   请在项目管理器中选择这个类并选择“移去”。

 — 或者 —

 •	   使用 REMOVE CLASS命令。


请参阅

复制类库中的类

创建新类

项目管理器

REMOVE CLASS 命令


创建新类

请参阅

在类设计器中可以创建新类，并且在设计时就能看到每个对象的最终外观。

� 若要创建一个新类

 •	   在项目管理器中，选择“类”选项卡并选择“新建”。

 — 或者 —

 •	   从“文件”菜单中选择“新建”命令，再选择“类”，再选择“新文件”按钮。

 — 或者 —

 •	   使用 CREATE CLASS 命令。

在“新类”对话框中，可以指定新类的名称、新类基于的类以及保存新类的类库。


请参阅

CREATE CLASS 命令

新建类对话框

项目管理器

删除类库中的类


将属性和方法添加到类中
将属性和方法添加到类

请参阅

可以向新类中添加任意多的新属性和新方法。属性保存一个值，而方法则保存调用时可以运行的过程代码。

� 若要将新属性添加到类

1.	从“类”菜单选择“新属性”。

2.	在“新属性”对话框中键入属性的名称。

3.	指定它是否受保护。

您还可以加入有关属性的说明。当把控制添加到表单或表单集时，这个说明在属性窗口和类设计器中的表单设计器下端显示出来。

� 若要在类中添加新方法

1.	从“类”菜单中选择“新方法”。

2.	在“新方法”对话框中，键入方法的名称。

3.	指定它是否受保护。

也可以加入有关方法的说明。


请参阅

类设计器

表单设计器

管理表单的多个实例

新方法

新属性

属性窗口

保护类成员


为类指定设计时的外观

请参阅

可以在“类信息”对话框中，为类指定工具栏图标和容器图标。

� 若要为类设置一个工具栏图标

1.	请在类设计器中，从“类”菜单中选择“类信息”。

2.	在“类信息”对话框中，在“工具栏图标”框中键入 .BMP 文件的名称和路径。

附注

工具栏图标的 .BMP 文件必须是 15 乘 16 象素点大小。如果图片过大或过小，它将被调整到 15 乘 16 象素点，图形可能变形。

把类和工具栏一起放入类库后，工具栏图标将显示在表单设计器和类设计器中的控制工具栏.

� 若要为类设置一个容器图标

1.	请打开类设计器，然后从“类”菜单选择“类信息”。

2.	在“容器图标”框中，键入将在表单设计器中的“控制”工具栏按钮上显示的 .BMP 文件名称和路径。

只有在 Visual FoxPro 专业版中可以在类浏览器中显示容器图标。


请参阅

类设计器

类信息 (类菜单)

控制工具栏

表单设计器

项目管理器


将类添加到表单、表单集和工具栏中

请参阅

您可以将类从项目管理器拖动到表单设计器或类设计器中，也可以将类注册，这样便可以在表单设计器或类设计器的控制工具栏上直接显示它们，还能用和添加标准控制同样的方法将它们添加到容器中。

� 若要注册一个类库

1.	请从“工具”菜单中选择“选项”。

2.	在“选项”对话框中，选择“控制”选项卡。

3.	选择“可视类库”并选择“添加”按钮。

4.	在“打开”对话框中，选择要注册的类库并选择“打开”。

5.	如果想在以后的 Visual FoxPro 工作期中让类库出现在“控制”工具栏上，则选择“设置为默认值”。

6.	选择“确定”按钮。

也可以使用“查看类”按钮，选择子菜单中的“添加”，将自定义类库添加到“控制”工具栏。为使这些类在以后的 Visual FoxPro 工作期中仍然在“控制”工具栏中有效，需要在“选项”对话框中设置默认值。

调用父类方法代码

一个基于其他类的对象或类自动继承所基于类的功能。尽管这样，仍然可以很容易的忽略所继承的方法代码。例如，在定义子类或向容器中添加对象后，可以为 Click 事件添加新的代码。在这种情况下，运行时执行新的代码，而不执行原始代码。

最常见的是，在保持原始类的功能情况下，为类或对象添加新的功能。实际上，在面向对象程序中，主要需把握的一点是在类、子类和对象上应包含什么功能。通过使用作用域操作符 (::) 在类或容器层次上添加代码，您可以优化类的设计。

给子类增加功能

使用作用域操作符 (::) 可以在子类上调用父类的代码，引用父类的方法。调用父类方法的语法是：

ParentClass::Method( )

例如，cmdOK 是在 SAMPLES\CONTROLS\BUTTONS.VCX 下的 Visual FoxPro 类库中存储的命令按钮类，和 cmdOK 的 Click 事件相关的代码用来释放按钮所在的表单，cmdCancel 是同一个类库中 cmdOk 的子库。为了向 cmdCancel 中添加放弃修改的功能，需要在 Click 事件中添加下列代码：

IF USED( ) AND CURSORGETPROP("Buffering") != 1

=TABLEREVERT(.T.)

ENDIF

cmdOk::Click( )

当表关闭时，由于默认情况下将更改写入缓冲表中，所以无需向 cmdOk 中添加 TABLEUPDATE( ) 代码。在调用 cmdOk 中的代码释放表单之前，cmdCancel 中的附加代码回滚对表的改变。

向容器中的对象添加功能

使用下述语法引用类方法，可以调用一个被添加到容器中的控制的原始类代码：

Class::Method( )

例如，当向表单中添加一个基于 cmdCancel 类的新对象时，可以在表单设计器中添加控制的 Click 事件的附加代码。下述代码显示一个信息对话框，向用户询问是否关闭表单。如果用户选择“Yes”，就执行 cmdCancel 控制的 Click 事件的附加代码，回滚表，接着调用 cmdOk 控制的 Click 事件代码释放表单。

nChoice = MESSAGEBOX("Do you want to exit without saving?", ;

32+0+4,"Verify Cancel")

IF nChoice = 6 && 如果用户选择“Yes”，作为返回值

cmdCancel::Click()

ENDIF

在嵌套容器中向对象添加功能

当向表单或者其他容器中添加容器类时，可以向容器包含的控制的方法中写入附加代码。要调用原始代码，用下述语法引用容器类和所包含的控制对象：

ContainerClass.ControlName::Method( )

例如，可以建立一个表单，并且基于本章前面叙述的 VCR 容器类添加对象。在 cmdTop 的 Click 事件相关的代码中加入下述语句，可以执行相应的父类代码，同时在状态栏显示信息：

VCR.cmdTop::Click()

SET MESSAGE TO 'Top of the table.'

调用通用的类代码

当然也可以使用父类的通用代码，从而使代码得以重用。用合适的数值建立字符表达式，并且使用 EVAL( ) 函数进行计算。

调用 Click 事件通用代码

类代码	和 Click 事件相关的代码
在子类中	=EVAL(THIS.ParentClass + "::Click()")
在容器中的控制里	=EVAL(THIS.Class + "::Click()")
在嵌套容器的控制中	=EVAl(THIS.Parent.Class + "." + ;   THIS.Name + "::Click()")
如果要调用的代码不属于 Click 事件，则只需用相应的事件或者方法名称进行替换即可。


请参阅

类设计器

控制工具栏

控制选项卡 (选项对话框)

表单设计器

项目管理器


修改类定义

请参阅

在创建类之后，还可以修改它，对类的修改将影响所有的子类和基于这个类的所有对象。也可以增加类的功能或修改类的错误，所有子类和基于这个类的所有对象都将继承修改。

� 若要选择您想修改的类

1.	请在项目管理器中选择所要修改的类。

2.	选择“修改”。

类设计器将打开。

— 或者 —

使用 MODIFY CLASS 命令。


请参阅

类设计器

MODIFY CLASS 命令

项目管理器


创建类定义的子类

请参阅

可以用两种方法创建用户自定义类的子类。

� 若要创建用户自定义类的子类

1.	请在“新类”对话框中，单击“派生于”框右边的“…”按钮。

2.	在“打开”对话框中，选择派生新类的类。

 — 或者 —

 •	   使用 CREATE CLASS 命令。

例如，要让一个新类 x 基于 MYLIBRARY.VCX 中的 parentclass 类，可用下面的代码：

CREATE CLASS x OF y.vcx AS parentclass FROM mylibrary.vcx


请参阅

CREATE CLASS 命令

新建类对话框


以编程方式从类中创建对象

请参阅

在保存了一个可视类后，可以用 CREATEOBJECT( ) 函数创建基于这个类的对象。下面的示例演示了如何运行作为类定义保存在类库文件 FORMS.VCX 中的表单：

SET CLASSLIB TO Forms ADDITIVE

frmTest = CREATEOBJECT('TestForm')

frmTest.Show


请参阅

CREATEOBJECT( ) 函数

SET CLASSLIB 命令


设置选项按钮组中选项按钮的数目
设置选项按钮组中的选项按钮数目

请参阅

在表单中创建一个选项按钮组时，它默认地包含两个选项按钮，改变 ButtonCount 属性可以设置选项按钮组中的选项按钮数目。

� 若要设置选项按钮组中的选项按钮数目

 •	   设置 ButtonCount 属性。

例如，要想使一个选项按钮组包含六个选项按钮，可将这个选项按钮组的 ButtonCount 属性设置为 6。

选项按钮组的 Value 属性表明用户选定了哪一个按钮。例如，选项按钮组有六个选项按钮，如果用户选择了第四个选项，选项按钮组的 Value 属性就是 4。


请参阅

ButtonCount 属性

判断当前选定的按钮

OptionButton 控制

OptionGroup 控制

设置选项按钮属性

使用选项按钮将用户的选择存储到表中

Value 属性


设置选项按钮属性
设置选项按钮的属性

请参阅

要想在表单设计器中人工调整选项按钮组或命令按钮组的单个组件，可从这个组的快捷菜单中选择“编辑”命令。

可以在属性窗口中设置单个按钮的属性。也可以在运行时，通过指定选项按钮的名称和属性值来设置这些属性。例如，下面一行代码设置了 opgChoices 选项按钮组中 optCust 按钮的标题：

frmMyForm.opgChoices.optCust.Caption = "Sort by Customer"

还可以在运行时使用 Buttons 属性，并指定选项按钮在组中的索引号来设置这些属性。例如，如果 optCust 是组中的第三个按钮，下面一行代码同样完成对 optCust 标题的设置：

frmMyForm.opgChoices.Buttons(3).Caption = "Sort by Customer"

� 若要设置组中所有按钮的属性

 •	   使用组的 SetAll 方法。

例如，下面一行代码将 frmMyForm 表单中 opgMyGroup 选项按钮组的所有按钮设置为无效：

frmMyForm.opgMyGroup.SetAll("Enabled",.F.，"OptionButton")


请参阅

Buttons 属性

判断当前选定的按钮

表单设计器

OptionButton 控制

OptionGroup 控制

属性窗口

SetAll 方法

设置选项按钮组中选项按钮的数目

使用选项按钮将用户的选择存储到表中


判断当前选定的按钮

请参阅

根据选项按钮组的 Value 属性可以判断用户选定了哪个按钮。如果组有五个按钮，并且选定了第三个按钮，则选项按钮组的 Value 属性值为 3。如果没有选定选项按钮，选项按钮组的 Value 属性为 0。

使用组的 Value 和 Buttons 属性，也可以确定选定选项按钮的标题。例如，下面一行代码将选定选项的 Caption 属性保存到名为 cSelected 的变量中：

cSelected = Form1.opg1.Buttons(Form1.opg1.Value).Caption


请参阅

Buttons 属性

OptionButton 控制

OptionGroup 控制

设置选项按钮属性

设置选项按钮组中选项按钮的数目

使用选项按钮将用户的选择存储到表中

Value 属性


使用选项按钮将用户的选择存储到表中

请参阅

可以通过选项按钮获得用户信息，并通过保存 Caption 属性将这些信息保存在表中。例如，在一个标准化考试的应用程序中，可以使用选项按钮，使用户在多项选择 A、B、C、D 中进行选择。还可以用选项按钮在雇员表中指明性别。

� 若要将一个选项按钮的 Caption 属性保存到表中

1.	将选项按钮组的 Value 属性设置为空字符串。

2.	将按钮组的 ControlSource 属性设置为表中的一个字符型字段。

例如，组中选项按钮的标题分别为“A”、“B”、“C”和“D”，并且选项按钮组的 ControlSource 属性设置为一个字符型字段，那么当用户选择标题为“B”的按钮时，“B”将被保存在字段中。


请参阅

Caption 属性

ControlSource 属性

判断当前选定的按钮

OptionButton 控制

OptionGroup 控制

设置选项按钮属性

设置选项按钮组中选项按钮的数目

Value 属性


创建多列列表框
创建具有多列的列表框

请参阅

虽然列表框默认为一列，但 Visual FoxPro 中的列表框可以包含任意列。

� 若要在列表框中显示多列

1.	将 ColumnCount 属性设置为所需的列数。

2.	设置 ColumnWidths 属性。例如，如果列表框中有三列，下面的命令将各列宽度分别设置为 10、15 和 30。

form.listbox.ColumnWidths = "10, 15, 30"

3.	将 RowSourceType 属性设置为 6 — 字段。

4.	将 RowSource 属性设置成列中显示的字段。例如，下面的命令将三列列表框的三个列数据源设置为 Customer 表中的 contact、city 和 country 字段：

form.listbox.RowSource = "contact,city,country"

附注

要想使列排列整齐，需要设置 ColumnWidths 属性或将 FontName 属性修改为等宽字体。


请参阅

将图片添加到列表项中

允许用户在列表框中添加项

允许用户在列表中选择一个值来转到某个记录

允许用户选择列表框中的多项

ColumnCount 属性

ColumnWidths 属性

在列表中显示子记录

ListBox 控制

根据列表值进行一对多显示的刷新

RowSource 属性

RowSourceType 属性


允许用户选择列表框中的多项

请参阅

默认情况下，一次只能选定一个列表项，但您也可以允许用户选择列表中的多个列表项。

� 若要选择列表中的多项

 •	   将列表的 MultiSelect 属性设置为“真”(.T.)。

为了处理选定的项，例如把它们复制到一个数组或在应用程序的其他地方使用它们，可以循环遍历各列表项，处理 Selected 属性为“真”(.T.) 的项。下面的代码包含在列表框的 InteractiveChange 事件中，在 comboSelected 组合框中显示这个列表框中的选定项，并且在 txtNoSelected 文本框中显示选定项的数目：

iNumberSelected = 0    && 跟踪选定项数目的变量

THISFORM.cboSelected.Clear   && 清除组合框

FOR iCnt = 1 TO THIS.ListCount

IF THIS.Selected(iCnt)

iNumberSelected = iNumberSelected + 1

THISFORM.cboSelected.Additem (THIS.List(iCnt))

ENDIF

ENDFOR

THISFORM.txtNoSelected.Value = iNumberSelected


请参阅

将图片添加到列表项中

允许用户在列表框中添加项

允许用户在列表中选择一个值来转到某个记录

创建多列列表框

在列表中显示子记录

ListBox 控制

MultiSelect 属性

根据列表值进行一对多显示的刷新

Selected 属性


允许用户在列表框中添加项

请参阅

除了让用户从列表框中选择项外，还允许用户交互地向列表中添加项。

� 若要以交互方式向列表添加项

 •	   请使用 AddItem 方法。

在下面示例中，文本框的 KeyPress 事件中的代码将文本框中的文本添加到一个列表框中，并且当用户按 ENTER 键时清除文本框中的文本。

LPARAMETERS nKeyCode, nShiftAltCtrl

IF nKeyCode = 13     && Enter 键

THISFORM.lstAdd.AddItem(This.Value)

THIS.Value = ""

ENDIF


请参阅

将图片添加到列表项中

AddItem 方法

允许用户在列表中选择一个值来转到某个记录

允许用户选择列表框中的多项

创建多列列表框

在列表中显示子记录

KeyPress 事件

列表框控制

根据列表值进行一对多显示的刷新


允许用户在列表中选择一个值来转到某个记录

请参阅

有时您也许想让用户自己选择所要查看或编辑的记录。可以有很多方法做到这一点，采用何种方法取决于表单中的数据源。

RowSourceType	选择相应记录
2  表 6  字段	当用户在列表中选择一个值时，记录指针将自动设置为想要的记录。在列表的 InteractiveChange 事件代码中使用 THISFORM.Refresh 方法，可让表单中的其他控制显示新值。
0  无 1  值 3  SQL 语句 4  QPR 5  数组	在 InteractiveChange 事件代码中，选择包含所需记录的表，然后搜索想要的值。例如，如果 RowSource 中拥有顾客表中的顾客标识号，可使用下面的代码： SELECT customer SEEK THIS.Value THISFORM.Refresh


请参阅

将图片添加到列表项中

允许用户在列表框中添加项

允许用户选择列表框中的多项

创建多列列表框

在列表中显示子记录

InteractiveChange 事件

列表框控制

Refresh 方法

根据列表值进行一对多显示的刷新

RowSource 属性

RowSourceType 属性


根据列表值进行一对多显示的刷新
根据列表值刷新一对多显示

请参阅

当用户通过选择列表中的一个值来转到某个记录时，您可能需要一个一对多关系反映父表中记录指针的变化。利用本地表和视图都可以实现这一功能。

本地表

列表的 RowSourceType 属性如果为 2 — 表或 6 — 字段，并且 RowSource 属性是本地表，该本地表在表单的数据环境中具有关系设置，则当用户选择新值时，可使用 THISFORM.Refresh 方法。一对多关系中的“多”方只自动显示与关系中父表的表达式相匹配的记录。

视图

在视图设计器中创建视图时，将 SELECT 语句中的参数设置为列表的 Value 属性，如下面语句所示：

SELECT * FROM orders WHERE order.cust_id = ?THISFORM.lstCustID.Value

� 若要按本地视图或远程视图设计一个一对多列表

1.	向数据环境添加视图。

2.	将表单的 AutoOpenTables 属性设置为“假”(.F.)。因为视图是参数化的，所以视图要求一个值，该值在加载表单时不可用。

3.	确保属性窗口中除该列表框外，其他控制的 ControlSource 属性均为空。在控制的 Init 事件发生时，视图字段不可用。

4.	将列表的 RowSource 属性设置为主表中主关键字值，可以用一个单独的 SQL 语句或其他方法做到这一点。

5.	在列表的 InteractiveChange事件代码中，用子视图别名来调用 REQUERY 函数。例如：

= REQUERY("orders")

6.	在表单的 Init 事件代码中加载数据环境，然后设置表单控制的 ControlSource、RowSource 或 RecordSource属性。例如，下面的代码行加载表单的数据环境，并且设置文本框和表格的属性：

THIS.DataEnvironment.OpenTables

THIS.txtCompany.ControlSource = "company"

THIS.grdOrders.RecordSourceType = 1 && 别名

THIS.grdOrders.RecordSource = "orders"


请参阅

将图片添加到列表项中

允许用户在列表框中添加项

允许用户在列表中选择一个值来转到某个记录

允许用户选择列表框中的多项

AutoOpenTables 属性

ControlSource 属性

创建多列列表框

在列表中显示子记录

Init 事件

InteractiveChange 事件

列表框控制

属性窗口

RecordSource 属性

REQUERY( ) 函数

RowSource 属性

RowSourceType 属性

SELECT - SQL 命令


 在列表中显示子记录

请参阅

在列表中可以显示一对多关系记录，即记录指针在父表中移动时，显示关系中相应的子记录。

� 若要在列表中显示子记录

1.	向表单中添加列表。

2.	将列表的 ColumnCount 属性设置为要显示的栏数。

例如，如果想在列表中显示 Order_id、Order_net 和 Shipped_on 三个字段，应将 ColumnCount 属性设置为 3。

3.	根据要显示的字段，将 ColumnWidths 属性设置为合适宽度。

4.	将列表的 RowSourceType 属性设置为 3 — SQL 语句。

5.	将 RowSource 属性设置为 SELECT 语句。例如，下面的语句根据顾客表中的当前记录从订购表中选择三个字段：

SELECT order_id, order_net, shipped_on from orders ;

WHERE order.cust_id = customer.cust_id ;

INTO CURSOR temp

6.	在表单的 Init 事件以及表中移动记录指针的代码中，重新查询列表：

THISFORM.lstChild.Requery


请参阅

将图片添加到列表项中

允许用户在列表框中添加项

允许用户在列表中选择一个值来转到某个记录

允许用户选择列表框中的多项

ColumnCount 属性

ColumnWidths 属性

创建多列列表框

Init 事件

列表框控制

根据列表值进行一对多显示的刷新

RowSource 属性

RowSourceType 属性

SELECT - SQL 命令


将图片添加到列表项中

请参阅

可以将列表的 Picture 属性设置为 .BMP 文件，该图形文件可以在列表项的前面显示。

下面是与列表框 Click 事件相关的代码：

FOR iItem = 5 TO THIS.ListCount	&&文件从第五项开始

cExtension = UPPER(RIGHT(THIS.List(iItem),3))

DO CASE

CASE cExtension = "DBF"

THIS.Picture(iItem) = "tables.bmp"

CASE cExtension = "BMP"

THIS.Picture(iItem) = "other.bmp"

CASE cExtension = "PRG"

THIS.Picture(iItem) = "programs.bmp"

CASE cExtension = "SCX"

THIS.Picture(iItem) = "form.bmp"

OTHERWISE

THIS.Picture(iItem) = IIF("]" $ cExtension, ;

"", "textfile.bmp")

ENDCASE

ENDFOR


请参阅

允许用户在列表框中添加项

允许用户在列表中选择一个值来转到某个记录

允许用户选择列表框中的多项

Click 事件

创建多列列表框

在列表中显示子记录

列表框控制

Picture 属性

根据列表值进行一对多显示的刷新


使用复选框

请参阅

可以使用复选框让用户指定一个布尔状态：“真”、“假”；“开”、“关”；“是”、“否”。然而有时不能将问题准确地归为“真”或“假”。由 Value 属性决定复选框有三种可能状态。

显示	Value 属性
	0 或 .F.
	1 或 .T.
	2 或 .NULL.
也可以将复选框的 Value 属性设置为“真”(.T.) 或“假”(.F.)。Value 属性反映最近一次指定的数据类型。如果该属性设置为“真”(.T.) 或“假”(.F.)，类型为逻辑型，直到属性重新设置为数值型值。

保存或显示逻辑字段

如果复选框的 ControlSource 属性设置为表中的一个逻辑字段，那么当前的记录值为“真”(.T.) 时，复选框显示为选中；如果当前记录值为“假”(.F.)，复选框显示为未选中；如果当前记录为 null 值 (.NULL.)，复选框则变为灰色。


请参阅

复选框控制

ControlSource 属性

Value 属性


使用文本框

请参阅

文本框是一类基本控制，它允许用户添加或编辑保存在表中非备注字段中的数据。

� 若要在程序中操作文本框中显示的文本

 •	   请设置或引用 Value 属性。

如果设置了文本框的 ControlSource属性，则显示在文本框中的值将保存在文本框的 Value 属性中，同时保存在 ControlSource 属性指定的表或临时表字段中。


请参阅

在文本框中接收用户口令

ControlSource 属性

Value 属性

当文本框得到焦点后选择文本

文本框控制

检验文本框中的数据


检验文本框中的数据
检验文本框中的数据是否有效

请参阅

若要检验文本框中的值，可在与 Valid 事件相关的方法中写进相应代码。如果值无效，则返回“假”(.F.)。

例如，有一个让用户键入约会日期的文本框，通过在文本框的 Valid 事件代码中包含下面代码，可以检查输入值，确保输入的日期还没有到。

IF CTOD(THIS.Value) < DATE( )

= MESSAGEBOX("You need to enter a future date",1)

RETURN .F.

ENDIF


请参阅

在文本框中接收用户口令

当文本框得到焦点后选择文本

文本框控制

使用文本框

Valid 事件


当文本框得到焦点后选择文本

请参阅

若想在用户将焦点放在文本框上时选中其中的所有文本，可在文本框的 GotFocus中包含下面几行代码：

NODEFAULT

TextBox::GotFocus

THIS.SelStart = 0

THIS.SelLength = LEN(ALLTRIM(THIS.Value))


请参阅

在文本框中接收用户口令

ALLTRIM( ) 函数

GotFocus 事件

LEN( ) 函数

SelLength 属性

SelStart 属性

文本框控制

使用文本框

检验文本框中的数据


在文本框中接收用户口令

请参阅

在应用程序中，经常需要获得某些安全信息，如口令。这时可以用文本框来接收这一信息，而在屏幕上并不显示。

� 接收用户输入同时不显示实际输入值

 •	   将文本框的 PasswordChar 属性设置为 * 或其他的一般字符。

如果属性设置为除空字符串的任何字符，文本框的 Value 属性将保存用户的实际输入，而对用户所按的每一个键都用设定的一般字符来显示。


请参阅

PasswordChar 属性

当文本框得到焦点后选择文本

文本框控制

使用文本框

检验文本框中的数据


在编辑框中对选定文本进行处理

请参阅

编辑框和文本框有三个属性可以用于对选定文件进行操作：SelLength、SelStart 和 SelText。

利用 SelStart 和 SelLength 属性可以从程序中选定文件。例如，下面的代码可在编辑框中选择第一个单词：

Form1.edtText.SelStart = 0

Form1.edtText.SelLength = 	AT(" ", Form1.edtText.Value) - 1

利用 SelText 属性可以访问编辑框或文本框中选定文本。例如，下面一行代码可将选定文本全部变为大写：

Form1.edtText.SelText = UPPER(Form1.edtText.SelText)


请参阅

编辑框控制

SelLength 属性

SelStart 属性

SelText 属性


在微调控制中设置用户可选值的范围
在微调控制中设置用户输入值的范围

请参阅

将 KeyboardHighValue 和 SpinnerHighValue属性设置为用户可在微调控制中输入的最大值。

将 KeyboardLowValue 和 SpinnerLowValue  属性设置为用户在微调控制中输入的最小值。


请参阅

KeyboardHighValue 和 KeyboardLowValue 属性

SpinnerHighValue, SpinnerLowValue 属性

微调控制


组管理命令按钮的选择
通过组来管理命令按钮的选择

请参阅

要让组中所有命令按钮的 Click 事件代码都用同一个方法过程，可将代码加入命令按钮组的 Click 事件代码中。命令按钮组的 Value属性指明单击了哪个按钮。如下面的示例代码所示：

DO CASE

CASE THIS.Value = 1

WAIT WINDOW "You clicked " + THIS.cmdCommand1.Caption NOWAIT

* 执行某些动作

CASE THIS.Value = 2

WAIT WINDOW "You clicked " + THIS.cmdCommand2.Caption NOWAIT

* 执行其他动作

CASE THIS.Value = 3

WAIT WINDOW "You clicked " + THIS.cmdCommand3.Caption NOWAIT

* 执行第三种动作

ENDCASE

附注

如果只单击命令按钮组，而没有单击某一个按钮，Value 属性的值仍为上一次选定的命令按钮。

如果为组中某个按钮的 Click 事件编写了代码，当选择这个按钮时，将执行编写的代码而不是组的 Click 事件代码。


请参阅

Click 事件

命令按钮控制

命令组控制

Value 属性


计时器控制初始化
计时器控制的初始化

请参阅

计时器控制有两个主要属性：

属性	设置
Enabled	若想让计时器在表单加载时就开始工作，应将这个属性设置为“真”(.T.)，否则将这个属性设置为“假”(.F.)。也可以选择一个外部事件（如命令按钮的单击事件）启动计时器操作。
Interval	计时器事件之间的毫秒数。
对计时器控制来说，将 Enabled 属性设置为“假”(.F.)，会挂起计时器的运行。

必须记住 Timer事件是周期性的。Interval 属性不能决定事件发生多长时间，而是决定事件发生的频率。间隔的长短要根据需要达到的精度来确定。由于存在一些潜在的内部误差，请将间隔设置为所需精度的一半。

附注

计时器事件越频繁，处理器就用越多的时间对计时器事件进行反应，这样会降低整个程序的性能。除非必要，请尽量不要设置小的时间间隔。


请参阅

Enabled 属性

Interval 属性

计时器控制

Timer 事件


在控制中使用图片掩码

请参阅

若要保留 .BMP 图片中的白色区域，可为 .BMP 图片创建一个掩码。

� 若要为 .BMP 图片创建掩码

1.	请在 Paintbrush 或其他的位图应用程序中打开 .BMP 文件。

2.	将所有想在 .BMP 中显示的区域涂黑，而让想透明显示的区域仍保留白色。

3.	在同样的目录下保存这个文件，文件名与 .BMP 文件相同，但扩展名改为 .MSK。

当 Visual FoxPro 加载一个由命令按钮、选项按钮或复选框的 Picture 属性指定的 .BMP 文件时，它在相同的目录下寻找相匹配的 .MSK 文件。如果这个目录中存在与这个 .BMP 文件同名的 .MSK 文件，Visual FoxPro 把它作为这个 .BMP 文件的掩码，.MSK 图片中所有白色区域在 .BMP 图片中都为透明，而 .MSK 图片中的黑色区域则按 .BMP 图片中的内容显示。

附注

.BMP 图片和 .MSK 图片必须具有相同尺寸，以便掩码能表示 .BMP 图片的区域。


请参阅

复选框控制

命令按钮控制

图象控制

选项按钮控制

Picture 属性


将表格添加到表单中
将表格添加到表单

请参阅

表格是一个容器对象，和表单集包含表单一样，表格也能包含列。这些列除了包含标头和控制外，每一个列还拥有自己的一组属性、事件和方法，从而提供了对表格单元的大量控制。

容器	可以包含
表格	列
列	标头，控制
� 若要将表格控制添加到表单

 •	   请在控制工具栏中选择“表格”按钮，并在“表单”窗口中拖成所期望的大小。

如果没有指定表格的 RecordSource 属性，同时在当前工作区中有一个打开的表，那么表格将显示这个表的所有字段。


请参阅

列对象

在表格列中显示控制

表单控制工具栏

表格控制

在设计时，人工调整表格显示

RecordSource 属性

设置表格列数

设置表格中显示的数据源

使用表格控制设置一对多表单

在表单中使用条件格式


设置表格列数

请参阅

首先需要设置的表格控制属性是列数。

� 若要设置表格中的列数

1.	在属性窗口中选择 ColumnCount 属性。

2.	在“属性”框中，键入需要的列数。

如果 ColumnCount 属性设置为 -1（默认值），在运行时，表格将包含与其链接的表中字段同样数量的列。


请参阅

将表格添加到表单中

ColumnCount 属性

在表格列中显示控制

表格控制

在设计时，人工调整表格显示

设置表格中显示的数据源

使用表格控制设置一对多表单

在表单中使用条件格式


在设计时，人工调整表格显示
在设计时人工调整表格的显示

请参阅

在表格中加入列后将改变列的宽度和行的高度。可以在属性窗口中人工设置列和行对象的高度和宽度属性，也可以在设计表格时可视地设置这些属性。

� 若要切换到表格设计方式

 •	   从表格的快捷菜单中选择“编辑”命令。

— 或者 —

 •	   在属性窗口的“对象”框中，选择表格的一列。

在表格设计方式下，表格周围将显示一个粗框。要切换出表格设计方式，只需选择表单或其他控制。

� 若要调整表格中列的宽度

1.	在表格设计方式下，将鼠标指针置于表格列的标头之间，这时指针变为带有向左和向右箭头的条。

2.	将列拖动到需要的宽度。

� 若要调整表格中行的高度

1.	在表格设计方式下，将鼠标指针置于表格控制左侧的第一个按钮和第二个按钮之间，这时指针将变成带有向上和向下箭头的条。

2.	将行拖动到需要的宽度。


请参阅

将表格添加到表单中

在表格列中显示控制

表格控制

属性窗口

设置表格列数

设置表格中显示的数据源

使用表格控制设置一对多表单

在表单中使用条件格式


设置表格中显示的数据源

请参阅

可以为整个表格设置数据源，也可以为每个列单独设置数据源。

� 若要为整个表格设置数据源

1.	请选择表格，然后单击属性窗口的 RecordSourceType 属性。

2.	如果让 Visual FoxPro 打开表，请将 RecordSourceType 属性设置为 0 — 表；如果在表格中放入打开表的字段，则将 RecordSourceType 属性设置为 1 — 别名。

3.	单击属性窗口中的 RecordSource 属性。

4.	键入作为表格数据源的别名或表名。

想在特定的列中显示一个特定字段，也可以为列设置数据源。

� 若要设置列的数据源

1.	选择列，然后单击属性窗口的 ControlSource 属性。

2.	键入作为列的数据源的别名、表名或字段名。例如，可以键入：

Orders.order_id


请参阅

将表格添加到表单中

在表格列中显示控制

表格控制

在设计时，人工调整表格显示

ControlSource 属性

RecordSource 属性

RecordSourceType 属性

设置表格列数

使用表格控制设置一对多表单

在表单中使用条件格式


使用表格控制设置一对多表单
使用表格控制创建一对多表单

请参阅

表格最常见的用途之一是，当文本框显示父记录数据时，表格显示表的子记录；当用户在父表中浏览记录时，表格记录显示相应变化。

如果表单的数据环境包含两表之间的一对多关系，那么要在表单中显示这个一对多关系非常容易。

� 若要设置具有数据环境的一对多表单

1.	将需要的字段从数据环境设计器中的父表拖动到表单中。

2.	从数据环境设计器中将相关的表拖动到表单中。


请参阅

将表格添加到表单中

数据环境设计器

在表格列中显示控制

表格控制

在设计时，人工调整表格显示

设置表格列数

设置表格中显示的数据源

在表单中使用条件格式


在表格列中显示控制

请参阅

除了在表格中显示字段数据，还可以在表格的列中嵌入控制，这样就为用户提供嵌入的文本框、复选框、下拉列表、微调按钮和其他控制。

可以在表单设计器中交互地向表格列中添加控制，也可以通过编写代码在运行时添加控制。

� 若要交互地在表格列中添加控制

1.	在表单中添加一个表格。

2.	在属性窗口中，将表格的 ColumnCount 属性设置为需要列数。

例如，如需要一个两列的表格则键入 2。

3.	在属性窗口的“对象”框中为控制选择父列。

例如，要选择 Column1 来添加控制，当选择这一列时，表格的边框发生变化，表明正在编辑一个包含的对象。

4.	在工具栏中选择所要的控制，然后单击父列。

在表单设计器中，新控制不在表格列中显示，但在运行时会显示出来。

5.	在属性窗口中，要确保该控制缩进，并显示在“对象”框中父列下面。

如果新加入的控制是一个复选框，应将复选框的 Caption 属性设置为“ ”，并将列的 Sparse 属性设置为“假”(.F.)。

6.	将父列的 ControlSource 属性设置为需要的表字段。

例如，下面的演示中，列的 ControlSource 属性是文件 TESTDATA.DBC 的 products.discontinu，这个文件保存在 Visual FoxPro 的 SAMPLES\DATA 目录下。

7.	将父列的 CurrentControl 属性设置为新加入的控制。

� 若要在表单设计器中移去表格列中的控制

1.	在属性窗口的“对象”框中选择要移去的控制。

2.	激活表单设计器。

如果属性窗口可见，控制的名称将显示在“对象”框中。

3.	按 DELETE 键。

也可以在代码中使用 AddObject 方法将控制添加到表格列中。


请参阅

将表格添加到表单中

AddObject 方法

ColumnCount 属性

表单设计器

表格控制

在设计时，人工调整表格显示

属性窗口

设置表格列数

设置表格中显示的数据源

使用表格控制设置一对多表单

在表单中使用条件格式


在表单中使用条件格式
在表格中进行有条件格式编排

请参阅

表格中的特定格式能让用户更容易浏览表格记录，并找出想要的信息。如果想进行有条件格式编排，可使用列的动态字体和颜色属性。

例如，可以将表格添加到表单中，并将 ColumnCount 属性设置为 2。将第一列的 ControlSource 属性设置为 orders.to_name，第二列的 ControlSource 属性设置为 orders.order_net。如果想用黑色的前景色显示少于 500.00 的订货总计，用红色的前景色显示大于或等于 500.00 的订货总计，可在表格的 Init 事件代码中包含下面代码：

THIS.Column2.DynamicForeColor = ;

"IIF(orders.order_net >= 500, RGB(255,0,0), RGB(0,0,0))"


请参阅

将表格添加到表单中

ColumnCount 属性

ControlSource 属性

在表格列中显示控制

DynamicBackColor, DynamicForeColor 属性

DynamicFontBold, DynamicFontItalic, DynamicFontStrikethru, DynamicFontUnderline 属性

表格控制

在设计时，人工调整表格显示

设置表格列数

设置表格中显示的数据源

使用表格控制设置一对多表单


设置访问键

请参阅

访问键能在表单中的任何地方通过按 ALT 和访问键来选择一个控制。

� 若要为控制指定访问键

 •	   请在控制的 Caption 属性中，在想作为访问键的字母前键入一个反斜杠和一个小于符号 (\<)。

例如，下面是对命令按钮的 Caption 属性的设置，将 O 作为它的访问键。

\<Open

用户能在表单中任何地方按 ALT+O 选择这个命令按钮。

� 若要为文本框指定访问键

1.	创建一个标签，其标题与这个文本框相关。

2.	在标签的 Caption 属性中，在作为访问键的字母前键入一个反斜杠和一个小于符号 (\<)。

3.	在 tab 键次序中，确保文本框在标签之后。


请参阅

Caption 属性

设置控制的 Tab 键次序


设置工具提示文本

请参阅

每个控制都有一个 ToolTipText 属性，当用户的鼠标指针在控制上停留时，将显示这个属性指定的文本。提示对于带有图标而没有文本的按钮特别有用。

� 若要指定工具提示文本

 •	   在属性窗口中选择 ToolTipText 属性，并键入需要的文本。

表单的 ShowTips 属性决定是否显示工具提示文本。


请参阅

ShowTips 属性

ToolTipText 属性


启用和废止组内的按钮
启用和废止组中的按钮

请参阅

将每个按钮的 Enabled 属性设置为“真”(.T.) 或“假”(.F.)，可以启用或废止组中单个选项按钮或命令按钮。也可通过设置组的 Enabled 属性来启用或废止组中全部按钮。如下面一行代码所示：

frmForm1.cmgCommandGroup1.Enabled = .T.

在选项按钮组或命令按钮组的 Enabled 属性设置为“假”(.F.) 时，组中所有按钮都废止，但不会显示出废止的前景色和背景色。设置组的 Enabled 属性不会影响组中单个按钮的 Enabled 属性，这就允许废止有按钮失效的组。当重新启用该组时，原来失效的按钮仍然失效。

如果让组中的所有按钮废止，显示出废止的外观，并且不保留组中按钮哪些有效、哪些失效的信息，可使用组的 SetAll 方法，如下所示：

frmForm1.opgOptionGroup1.SetAll("Enabled", .F.)


请参阅

CommandGroup 控制

判断当前选定的按钮

Enabled 属性

OptionGroup 控制

SetAll 方法

设置选项按钮属性

设置选项按钮组中选项按钮的数目

使用选项按钮将用户的选择存储到表中


允许用户拖放

请参阅

使用下面的拖放属性、事件和方法，可以指定拖动操作的含义，也可以指定控制拖动的方式。

若要	使用下列特性
指定是自动还是人工拖动控制。	DragMode 属性
指定控制在拖动时显示的图标。	DragIcon 属性
识别何时控制放到对象上。	DragDrop 事件
识别何时控制拖过对象。	DragOver 事件
启动和停止人工拖动。	Drag 方法
所有可视的控制在运行时都可以拖动，并且所有控制都拥有上表中列出的属性。表单能识别 DragDrop 和 DragOver 事件，但不具备 DragMode 和 DragIcon 属性。


请参阅

使控制移动

控制拖动的开始和停止时间

Drag 方法

DragDrop 事件

DragIcon 属性

DragMode 属性

DragOver 事件

指示释放的有效区

在用户释放对象时的响应


在用户释放对象时的响应

请参阅

拖动控制之后释放鼠标按钮时，Visual FoxPro 产生一个 DragDrop 事件，对这一事件有多种响应方法。可将控制重新定位在新的位置（由灰色外框的最后位置来指明）。记住，控制不会自动移到新的位置。

在讨论拖放操作时，有两个术语很重要 “源”和“目标”。

术语	意义
源	被拖动的控制。
目标	用户将控制拖到其上的对象。这个对象可以是一个能识别 DragDrop 事件的表单或控制。
当释放鼠标时，如果鼠标指针处于一个控制边框内，这个控制就成了目标。如果指针处在表单的空白部分，表单将成为目标。

DragDrop 事件接受三个参数：oSource、nXCoord 和 nYCoord。oSource 参数是对拖放到目标上控制的引用，nXCoord 和 nYCoord 参数分别包含了鼠标指针在目标中的水平和垂直坐标。


请参阅

允许用户拖放

使控制移动

控制拖动的开始和停止时间

DragDrop 事件

指示释放的有效区


指示释放的有效区

请参阅

当启用拖放功能时，可以提示用户哪些地方可以释放控制，哪些地方不能释放控制。完成这个功能最好的方法是在 DragOver 事件的相关代码中改变数据源的 DragIcon 属性。

在下列代码中，一个控制的 DragOver 事件向用户指示这个控制不是一个有效的释放目标。这个例子中的 cOldIcon 是用户自定义的表单属性。

LPARAMETERS oSource, nXCoord, nYCoord, nState

DO CASE

CASE nState = 0 && 进入

THISFORM.cOldIcon = oSource.DragIcon

oSource.DragIcon = "NODROP01.CUR"

CASE nState = 1 && 离开

oSource.DragIcon = THISFORM.cOldIcon

ENDCASE


请参阅

允许用户拖放

使控制移动

控制拖动的开始和停止时间

DragIcon 属性

DragOver 事件

在用户释放对象时的响应


控制拖动的开始和停止时间

请参阅

Visual FoxPro 对 DragMode 属性还有一个“人工”设置，它具有比“自动”设置更多的控制。“人工”设置允许指定什么时候能拖动控制，什么时候不能拖动（当 DragMode 设置为“自动”时，只要设置没有改变，总能拖动控制）。

例如，可以在对 MouseDown 和 MouseUp 事件的响应中启用拖动，也可以在对键盘或菜单命令的响应中启动。“人工”设置还允许在拖动开始前识别一个 MouseDown 事件，这样就能记录鼠标位置。

要从代码中启用拖动，应将 DragMode 设置为默认设置（0  人工），然后在开始或停止拖动对象时使用 Drag 方法。

container.control.Drag(nAction)

如果 nAction 为 1，Drag 方法初始化控制的拖动操作；如果 nAction 为 2，释放控制，并产生一个 DragDrop 事件；nAction 为 0 时，取消拖动，其效果除不能产生 DragDrop 事件外与 nAction 值为 2 时类似。

附注

要从列表框中启用拖放操作，调用 Drag 方法最好的地方是在源列表框 MouseMove 事件的相关代码中（必须在确定鼠标按钮被按下之后）。有关示例请参阅 Visual FoxPro 的 \SAMPLES\CONTROLS\LISTS 目录下的 LMOVER.SCX。


请参阅

允许用户拖放

使控制移动

Drag 方法

DragDrop 事件

DragMode 属性

指示释放的有效区

MouseDown 事件

MouseUp 事件

在用户释放对象时的响应


使控制移动
引起控制移动

请参阅

有时用户在释放鼠标按钮后，需要改变源控制的位置。要让控制移动到新的鼠标位置，可使用 Move 方法。例如，下面列出的表单的 DragDrop 事件代码就将被拖动的控制移动到释放位置。

LPARAMETERS oSource, nXCoord, nYCoord

oSource.Move(nXCoord, nYCoord)

因为是控制的左上角置于鼠标的位置上，这些代码也许不能达到想要的精确效果。下面的代码将控制中心置于鼠标的位置上。

LPARAMETERS oSource, nXCoord, nYCoord

oSource.Move ((nXCoord  oSource.Width / 2), ;

(nYCoord  oSource.Height / 2))

只有将 DragIcon 属性设置为非默认值（灰色矩形框）时，上述代码才能获得最好的效果。如果使用的是灰色矩形框，用户通常根据灰色矩形框的最后位置来精确确定控制的位置。要做到这点，应记录下鼠标在源控制中的最初位置，然后用这个位置作为控制移动的偏移量。

� 若要记录最初的鼠标位置

1.	指定控制为人工拖动方式。

2.	声明两个表单级的变量，nDragX 和 nDragY。

3.	当 MouseDown 事件发生时启用拖动，同时在这个事件中将 nXCoord 和 nYCoord 值保存在表单级变量中。

4.	当 MouseUp 事件发生时废止拖动。


请参阅

允许用户拖放

控制拖动的开始和停止时间

DragIcon 属性

指示释放的有效区

MouseDown 事件

MouseUp 事件

Move 方法

在用户释放对象时的响应


将页框添加到表单中

请参阅

表单中可以包含一个或多个页框。

� 若要将页框添加到表单

1.	在“控制”工具栏中，选择“页框”按钮并在“表单”窗口拖动到想要的尺寸。

2.	设置 PageCount 属性，指定页框中包含的页面数。

3.	从页框的快捷菜单中选择“编辑”命令，将页框激活为容器。页框的边框变宽，表示它处于活动状态。

4.	用表单中添加控制相同的方法，向页框中添加控制。

� 若要在页框中选择一个不同的页面

 •	   将页框作为容器激活，并选择要使用的页面选项卡。

— 或者 —

 •	   在属性窗口的“对象”框中选择这一页面。

— 或者 —

 •	   在表单设计器底部的“页”框中选择这一页面。


请参阅

将控制添加到页面上

在程序中换页

表单控制工具栏

管理选项卡的长标题

Page 事件

PageCount 属性

页框控制


将控制添加到页面上

请参阅

如果将控制添加到页面上，它们只有在页面活动时才可见和活动。

� 若要将控制添加到页面上

1.	在属性窗口的“对象”框中选择页面，页框的周围出现边框，表明可以操作其中包含的对象。

2.	在控制工具栏中，选择想要的控制按钮并在页面中调整到想要的大小。


请参阅

将页框添加到表单中

在程序中换页

表单控制工具栏

管理选项卡的长标题

Page 事件

页框控制

属性窗口


管理选项卡的长标题

请参阅

如果选项卡上的标题太长，不能在给定页框宽度和页面数的选项卡上显示出来，可以有下面两种选择：

 •	   将 TabStretch 属性设置为 1 — 剪裁，这样只显示能放入选项卡中的标题字符，“剪裁”是默认设置。

 •	   将 TabStretch 属性设置为 0 — 堆积，这样选项卡将层叠起来，以便所有选项卡中的整个标题都能显示出来。


请参阅

将控制添加到页面上

将页框添加到表单中

在程序中换页

Page 事件

页框控制

TabStretch 属性


在程序中换页
在程序中换页面

请参阅

不管页框是否具有选项卡，都可以从程序中使用 ActivePage 属性来激活一个页面。例如，下面列出表单中一个命令按钮的 Click 事件过程代码，它将表单中页框的活动页面改为第三页面。

THISFORM.pgfOptions.ActivePage = 3


请参阅

ActivePage 属性

将控制添加到页面上

将页框添加到表单中

管理选项卡的长标题

Page 事件

页框控制


给表单指定图标

请参阅

如果希望当表单最小化时显示为一个图标，可把一个 .ICO 文件添加到表单 Icon 属性中。

� 若要给表单指定图标，

1.	打开表单。

2.	打开属性窗口。

3.	将 Icon 属性设置为要显示的 .ICO 文件。


请参阅

表单设计器

Icon 属性

属性窗口


创建选项卡式对话框

请参阅

Visual FoxPro 包括很多选项卡式对话框，比如生成器和“选项”对话框。在这些对话框中，通过简单地选择适当的选项卡就能非常容易并迅速地访问信息。通过向表单中添加页框，可以在应用程序中创建选项卡式对话框。

� 若要创建选项卡式对话框

1.	打开适当的表单。

2.	在表单控制工具栏中，选择页框按钮并在表单中把它拖到一定大小。

Visual FoxPro 创建具有两个页的页框，每页上有一个选项卡。

3.	如果想使选项卡多于两页，可以使用属性窗口将页框的 PageCount 属性设置为适当的数目。

4.	如果要为每一页加上标题，可以设置对应的 Caption 属性。

5.	保存表单。

提示

要更容易地区分不同页，可以通过设置每一页的 BackColor 属性来为每一页指定不同的颜色。


请参阅

将页框添加到表单中

Caption 属性

表单控制工具栏

PageCount 属性

PageFrame 控制

属性窗口


设计报表

请参阅

可以通过设计报表，用各种方式在打印页面上显示数据。使用“报表设计器”可以设计复杂的列表、总结摘要或数据的特定子集，比如发票。设计报表有四个主要步骤：

1.	决定要创建的报表类型。

2.	创建报表布局文件。

3.	修改和定制布局文件。

4.	预览和打印报表。


请参阅

创建报表布局

定制布局

决定报表的常规布局

修改布局

预览结果

打印报表

报表设计器


决定报表的常规布局

请参阅

为帮助选择布局，这里给出常规布局的一些说明，它们的一般用途及示例。

布局类型	说明	示例
列	每行一条记录，每条记录的字段在页面上按水平方向放置。	分组/总计报表1 财政报表 存货清单 销售总结
行	一列的记录，每条记录的字段在一侧竖直放置	列表
一对多1	一条记录或一对多关系	发票 会计报表
多列	多列的记录，每条记录的字段沿左边缘竖直放置	电话号码薄 名片
标签	多列记录，每条记录的字段沿左边缘竖直放置，打印在特殊纸上	邮件标签1 名签
1 与报表向导相关的布局


请参阅

创建邮件标签布局

创建一对多报表

创建报表布局

用报表向导创建报表

在页面上定义多列

分组/总计报表向导

标签向导

一对多报表向导

使用向导


创建报表布局

请参阅

Visual FoxPro 提供了三种途径来创建报表的布局：

 •	   用报表向导创建简单的单表或多表报表。

 •	   用快速报表从单表中创建一个简单报表。

 •	   用报表设计器修改 已有的报表或创建自己的报表。

以上每种方法创建的报表布局文件都可以用“报表设计器”进行修改。


请参阅

创建邮件标签布局

创建一对多报表

创建快速报表

创建报表布局

用报表向导创建报表

使用新建报表创建报表

定制布局

修改布局

使用向导


用报表向导创建报表

请参阅

Visual FoxPro 提供了下列报表和标签向导：

 •	   报表

 •	   分组/总计

 •	   一对多

 •	   标签

应根据常规布局和报表的复杂程度选择向导。

� 若要使用报表向导

1.	在项目管理器中，选定“报表”。

2.	选择“新建”。

3.	选择“报表向导”。

4.	选定想创建的报表类型。

5.	按照向导屏幕上的指令操作。


请参阅

创建快速报表

使用新建报表创建报表

定制布局

决定报表的常规布局

分组/总计报表向导

标签向导

修改布局

一对多报表向导

预览结果

打印报表

项目管理器

报表向导


创建快速报表

请参阅

“快速报表”是一项省时的功能，它自动创建简单报表布局。

提示

如果已有的报表中“细节”带区是空的，就可以在其中使用“快速报表”。如果“页标头”带区已包含控制，“快速报表”将保留它们。

� 若要创建一个“快速报表”

1.	在项目管理器中，选定“报表”，然后选择“新建”按钮。

2.	选择“新报表”按钮。

3.	在“报表”菜单中，选择“快速报表”。

4.	选定要使用的表，然后选定“确定”按钮。

5.	选择想要的字段布局、标题和别名选项。

6.	若要为报表选择字段，选择“字段”，然后完成“字段选择器”对话框。

7.	选择“确定”按钮。


请参阅

使用新建报表创建报表

用报表向导创建报表

定制布局

字段选择器对话框

修改布局

预览结果

打印报表

项目管理器

快速报表 (报表菜单)


使用新建报表创建报表
用新建报表创建报表

请参阅

如果您不想使用“报表向导”或“快速报表”，则也可以从空白报表布局开始，然后自己添加控制。

� 若要创建空白报表

1.	在项目管理器中，选择“报表”。

2.	选择“新建”。

3.	选择“新报表”。

此时显示报表设计器。


请参阅

CREATE REPORT 命令

创建快速报表

用报表向导创建报表

定制布局

修改布局

预览结果

打印报表

项目管理器

快速报表 (报表菜单)


创建邮件标签布局

请参阅

标签是多列报表布局，它具有为匹配特定标签纸而对列的特殊设置。在 Visual FoxPro 里，可以使用标签向导或标签设计器迅速创建标签。

若要	请参阅
快速创建标签	使用标签向导创建邮件标签
控制标签的创建	使用标签设计器创建标签


请参阅

添加标签大小

CREATE LABEL 命令

使用标签设计器创建标签

使用标签向导创建邮件标签

标签设计器

标签向导

恢复标签大小

使用向导


使用标签向导创建邮件标签

请参阅

若要创建标签，标签向导是快速、简便的方法。可以使用“报表设计器”来定制已经用向导创建的标签文件。

� 若要使用“标签向导”创建标签

1.	在项目管理器中，选定“标签”。

2.	选择“新建”。

3.	选择“标签向导”。

4.	按照向导屏幕上的指令完成后面的操作。

可以原样使用标签布局，也可以按定制报表的方法定制标签布局。


请参阅

添加标签大小

使用标签设计器创建标签

定制布局

标签向导

修改布局

预览结果

打印报表

项目管理器

恢复标签大小

选择要打印的记录

使用向导


使用标签设计器创建标签

请参阅

标签设计器是报表设计器的一部分，它们使用相同的菜单和工具栏。

� 若要使用标签设计器创建标签

1.	在项目管理器中，选定“标签”。

2.	选择“新建”。

3.	选择“新标签”。

4.	从新标签对话框中，选择标签布局，然后选定“确定”按钮。

“标签设计器”将出现您选择的标签布局所定义的页面。

也可以将标签尺寸添加到标签列表上。有关详细内容， 请参阅添加标签大小。


请参阅

添加标签大小

CREATE LABEL 命令

使用标签向导创建邮件标签

定制布局

在页面上定义多列

标签设计器

标签向导

修改布局

新标签对话框

预览结果

打印报表

项目管理器

选择要打印的记录

使用向导


修改布局

请参阅

如果已有一个空白报表或标签，或者已由向导或快速报表生成了一个报表，但它不十分适合要求，则可以在报表设计器中修改它。

� 若要修改已生成的报表或标签

1.	在项目管理器中，选择报表或标签。

2.	选择“修改”。

使用报表带区可以决定报表的每页、分组及开始与结尾的样式。可以调整报表带区的大小。在报表带区内，添加报表控制，然后移动、复制、调整大小、对齐以及调整它们，从而安排报表中的文本和字段。

若要	请参阅
设计报表带区内容	规划数据的位置
更改报表带区	修改报表带区
处理报表控制	选择和移动报表控制 复制和删除报表控制 调整控制的大小 对齐报表控制 调整控制的放置


请参阅

调整控制的放置

对齐报表控制

复制和删除报表控制

定制布局

插入报表控制

MODIFY LABEL 命令

MODIFY REPORT 命令

修改报表带区

规划数据的位置

项目管理器

调整控制的大小

选择和移动报表控制


规划数据的位置

请参阅

如果有报表布局，则可以修改数据在报表页面上的位置。使用“报表设计器”内的带区，可以控制数据在页面上的打印位置。报表布局可以有几个带区。

若要打印	使用此带区	使用此命令
每报表一次	标题	从“报表”菜单中选择“标题/总结”带区
每页面一次	页面标头	默认可用。
每列一次	列标头	从“文件”菜单中选择“页面设置”设置“列数” > 1。
每组一次	组标头	从“报表”菜单中选择“数据分组”。
每记录一次	细节带区	默认可用。
每组一次	组注脚	从“报表”菜单中选择“数据分组”。
每列一次	列注脚	从“文件”菜单中选择“页面设置”设置“列数” > 1
每页面一次	页面注脚	默认可用。
每报表一次	总结	从“报表”菜单中选择“标题/总结”带区
可以在任何带区中设置任何“报表”控制。也可以添加运行报表时执行的用户自定义函数。


请参阅

添加标题和总结带区

调整控制的放置

对齐报表控制

复制和删除报表控制

在页面上定义多列

决定报表的常规布局

在布局上分组数据

修改报表带区

修改布局

调整控制的大小

选择和移动报表控制

使用报表带区事件


修改报表带区

请参阅

在“报表设计器”中， 可以修改每个带区的尺寸和特征。

� 若要调整带区大小

 •	   将带区栏拖动到适当高度。

使用左侧标尺作为指导。标尺量度仅指带区高度，不包含页边距。

提示

不能使带区高度小于布局中控制的高度。可以把控制移进带区内，然后减少其高度．


请参阅

添加标题和总结带区

列注脚对话框

列标头对话框

在页面上定义多列

细节对话框

修改布局

页注脚对话框

页标头对话框

规划数据的位置

设置报表带区高度

设置页边距

设置纸张大小和方向

标题/总结对话框 (报表菜单)

使用报表带区事件


选择和移动报表控制

请参阅

可以一次选择、移动及修改多个控制。

� 若要移动一个控制

 •	   选择控制并把它拖动到“报表”窗口中新的位置上。

控制在布局内移动位置的增量并不是连续的。增量取决于网格的设置。若要忽略网格的作用，拖动控制时应按住 CTRL 键。布局可能显示或不显示表格线，也可能不显示。

� 若要选择多个控制

 •	   在控制周围通过拖动画出选择框。

选择句柄将出现在每个控制周围。当它们被选择后，可以作为一组移动、复制或删除。

通过将控制标识在一个组中，可以为多个任务将一组控制关联在一起。

� 若要将控制分组在一起

1.	选择想作为一组处理的控制。

2.	从“格式”菜单中，选择“分组”。

选择句柄将移到整个组之外。可以把该组控制作为一个单元处理。

� 若要对一组控制取消组定义

1.	选择该组控制。

2.	从“格式”菜单中，选择“取消组”。

选定的句柄将出现在组内每一控制周围．


请参阅

调整控制的放置

对齐报表控制

复制和删除报表控制

定制布局

分组 (格式菜单)

插入报表控制

修改布局

调整控制的大小

撤消分组 (格式菜单)


复制和删除报表控制

请参阅

可以单独或作为一组复制或删除布局上任意控制。

� 若要复制控制

1.	选择要复制的控制．

2.	从“编辑”菜单中，选择“复制”。然后，选择“粘贴”。

控制的副本将出现在原始控制下面

3.	将副本拖动到布局上的正确位置。

� 若要删除控制

1.	选择要删除的控制。

2.	从“编辑”菜单中，选择“剪切”。


请参阅

调整控制的放置

对齐报表控制

复制命令 (编辑菜单)

定制布局

剪切命令 (编辑菜单)

插入报表控制

修改布局

粘贴命令 (编辑菜单)

调整控制的大小

选择和移动报表控制


调整控制的大小

请参阅

如果在布局上已有控制，则可以单独地更改它的尺寸，或者调整一组控制的大小使它们彼此相匹配。可以调整除标签之外任何报表控制的大小。标签的大小由文本、字体及磅值决定。

� 若要调整控制的大小

 •	   选择要调整的控制，然后将选定的句柄拖动到所想要的大小。

� 若要匹配多个控制的大小

1.	选择想使其具有同样大小的一些控制。

2.	从“格式”菜单中，选择大小。

3.	选择适当选项来匹配宽度、高度或大小。

控制将按照需要进行调整。


请参阅

调整控制的放置

对齐报表控制

复制和删除报表控制

定制布局

插入报表控制

修改布局

选择和移动报表控制

大小 (格式菜单)


对齐报表控制

请参阅

可以根据彼此间关系对齐控制，或者根据“报表设计器”提供的网格放置它们。可以沿某一侧或居中对齐控制。

� 若要对齐控制

1.	选择想对齐的控制

2.	从“格式”菜单中，选择“对齐”。

3.	从子菜单中，选择适当对齐选项。Visual FoxPro 使用距离所选对齐方向最近的控制作为固定参照控制。

也可以使用布局工具栏。使用工具栏，可以同距离所选一侧最远的控制对齐，只要在单击对齐按钮时按下 CTRL 键。

� 若要居中对齐带区内的控制

1.	选择想对齐的控制。

2.	从“格式”菜单中，选择“对齐方式”。

3.	从子菜单中，选择“垂直居中对齐”或“水平居中对齐”。

控制将移动到各自带区的垂直或水平中心。


请参阅

调整控制的放置

对齐方式 (格式菜单)

复制和删除报表控制

定制布局

插入报表控制

布局工具栏

修改布局

调整控制的大小

选择和移动报表控制


调整控制的放置
调整控制的位置

请参阅

使用状态条或格线，可以将控制放置在报表页面上特定位置。

� 若要将控制放置在特定的位置

1.	从“查看”菜单中，选择“显示位置”。

2.	选择一个控制，然后使用状态栏上的位置信息将该控制移动到特定位置。

� 若要人工对齐控制

 •	   从“格式”菜单中，清除“对齐格线”。

� 若要显示网格线。

 •	   从“查看”菜单中，选择“网格线”。

网格将出现于报表带区。

� 若要更改网格的度量单位。

1.	从“格式”菜单中，选择“设置网格刻度”。

2.	在“网格”框内，输入网格每一方块水平宽度和垂直高度的象素数目。


请参阅

对齐报表控制

复制和删除报表控制

定制布局

调整报表字段控制中的文本

表格线 (查看菜单)

插入报表控制

修改布局

规划数据的位置

调整控制的大小

选择和移动报表控制

设置网格刻度 (格式菜单)

显示位置 (查看菜单)

对齐格线 (格式菜单)


定制布局

请参阅

可以更改数据环境、页面设置或报表控制。数据环境定义了报表中将包含的数据源，而页面设置定义了报表页面和报表带区的总体形状，报表控制定义了出现于页面上的数据项。

若要	请参阅
更改数据环境	设置报表数据源
更改页面设置	定义报表的页面
更改报表控制	插入报表控制


请参阅

定义报表的页面

插入报表控制

修改布局

设置报表数据源


设置报表数据源

请参阅

可以在数据环境中简单地定义报表的数据源，用它们来填充报表中的控制。可以添加表或视图并使用一个表的索引排序数据。

� 若要向数据环境中添加表或视图

1.	从“查看”菜单中，选择“数据环境”。

数据环境设计器出现。

2.	从“数据环境”菜单中，选择“添加”。

3.	在“添加表或视图”对话框中，从“数据库”框中选择一数据库

4.	在“选择”区域选定“表”或“视图”。选择决定了出现在“数据库中的表”框中的内容。

5.	在“数据库中的表”框中，选定一个表或视图。

6.	选择“确定”按钮。

� 若要为数据环境设置索引

1.	从“查看”菜单中，选择“数据环境”。

2.	从快捷键菜单中，选择“属性”。

3.	在属性窗口中，选择“对象”框中的“临时表1”。

4.	选择“数据”选项卡，然后，选定Order属性。

5.	输入索引名。

 —或者—

从可用索引列表中选定一个索引。


请参阅

添加表或视图对话框

向数据环境中添加表或视图

控制报表的数据源

数据环境设计器

从数据环境中拖动字段和表

在数据环境中编辑关系

Order 属性

属性窗口

从数据环境中移去表

在数据环境中设置关系


定义报表的页面

请参阅

通过设置页边距，定义列和设置页面大小及方向，可以定义报表页面的外貌。也可以设置报表带区高度，添加标题和总结带区以及进行数据分组。

若要	请参阅
设置报表页边距	设置页边距
创建列	在页面上定义多列
设置纸张选项	设置纸张大小和方向
更改带区大小	设置报表带区高度
添加标题或总结	添加标题和总结带区
添加数据组	在布局上分组数据


请参阅

添加标题和总结带区

在页面上定义多列

在布局上分组数据

插入页码

插入当前日期

重复组标头

设置报表带区高度

设置页边距

设置纸张大小和方向

不输出空白行

不输出重复值


设置页边距

请参阅

可以设置报表的左边距.

� 若要设置左边距

1.	从“文件”菜单中，选择“页面设置”激活“页面设置”对话框。

2.	在“左页边距”框中输入一个边距数值。

页面布局将按新的页边距显示。

3.	选择“确定”按钮。


请参阅

定义报表的页面

页面设置 (文件菜单)

设置纸张大小和方向


在页面上定义多列

请参阅

若要创建电话号码目录、邮件标签或其它类型的列表，可以在每个页面上定义多列。

� 若要定义多列报表

1.	从“文件”菜单中，选择“页面设置”。

2.	在“列”区域输入页面中列的数目。它等同于页面横向上想打印的记录的数目。

3.	在“宽度”框中输入列的宽度。

4.	在“间隔”框中，输入每列间的间隔量。

5.	选择“确定”按钮。

“报表设计器”将反映这些更改。


请参阅

定制布局

定义报表的页面

修改布局

页面设置 (文件菜单)

规划数据的位置

不输出重复值


设置纸张大小和方向

请参阅

可以更改纸张大小和方向设置。确保方向对所选纸张大小的正确匹配。例如，如果选择信封，方向应被设置成横向。

� 若要选择纸张大小

1.	从“文件”菜单中，选择“页面设置”。

2.	在“页面设置”对话框中，选择“打印设置”来显示“打印设置”对话框。

3.	在打印设置对话框内，从“大小”列表中选定纸张大小。

4.	选择“确定”按钮。

5.	在“页面设置”对话框内选择“确定”按钮。

� 若要选择纸张方向

1.	从“文件”菜单中，选择“页面设置”。

2.	选择“打印设置”。

3.	在“打印方向”区域选择方向。

4.	选择“确定”按钮。

5.	在“页面设置”对话框中，选择“确定”按钮。


请参阅

定义报表的页面

页面设置 (文件菜单)

打印设置对话框


设置报表带区高度

请参阅

在“报表设计器”内， 报表带区的高度决定了每个报表带区在页面边距以内的区域中使用空间的量。下述信息可应用于所有报表带区。可以为“组标头”和“组注脚”带区设置附加参数。

� 若要设置精确带区高度

1.	双击适当的带区栏。

出现一个带区对话框。

2.	在“高度”框中，输入高度值。

3.	选择“确定”按钮。


请参阅

列注脚对话框

列标头对话框

细节对话框

组注脚对话框

组标头对话框

修改报表带区

页注脚对话框

页标头对话框

规划数据的位置

标题/总结对话框 (报表菜单)

使用报表带区事件


添加标题和总结带区

请参阅

“标题”带区包含有在报表开始打印一次的信息，“总结”带区包含有报表结束打印一次的信息。标题和总结可能在它们自己的页面上。带有总计表达式的字段，放置在总结带区内后便变成了总计数。

� 若要添加标题或总结带区

1.	从“报表”菜单中，选择“标题/总结”。

2.	选择想要的带区。

3.	如果希望这样的带区单独作为一页，请选定“换页”。

4.	选择“确定”按钮。

报表设计器将显示一个新带区。


请参阅

控制报表控制的打印

修改报表带区

规划数据的位置

标题/总结对话框 (报表菜单)

使用报表带区事件


插入报表控制

请参阅

可以在报表和标签布局中插入以下类型报表控制。

若要显示	请选用下列控制
表的字段、变量和其它表达式	字段
原义文本	标签
直线	线条
框和边界	矩形
圆、椭圆、圆角矩形和边界	圆整矩形
位图或通用字段	图片/OLE 绑定型
设置控制后，可以修改它们。可以格式化控制，更改控制颜色或给任何控制添加注释。

若要	请参阅
格式化控制	报表控制的格式选项
更改颜色	更改报表控制颜色
添加控制注释	向报表控制添加注释
控制“控制”的打印	控制报表控制的打印


请参阅

向报表控制添加注释

向报表中添加图片

添加字段控制

添加标签控制

添加线条、矩形和圆形

更改报表控制颜色

控制报表控制的打印

报表控制的格式选项


添加字段控制

请参阅

报表或标签可以包含字段控制，它们表示表的字段、变量和计算结果。

� 若要从数据环境中添加表字段

1.	打开报表的数据环境。

2.	选择表或视图。

3.	拖放字段到布局上。

� 若要从工具栏添加表字段

1.	从报表控制工具栏中，插入一个“字段”控制。

2.	在“报表表达式”对话框中，选择“表达式”框后的三点按钮。

3.	在“字段”框，双击想要的字段名。

表名和字段名将出现在“报表字段的表达式”内。

附注

如果“字段”框为空，则应该向数据环境添加表或视图。

不必保持表达式中表的别名。可以删除它或者清除表达式生成器选项。

4.	如果想检查表达式，选择“检验”。

5.	选择“确定”按钮。

6.	在“报表表达式”对话框中，选择“确定”按钮。

如果添加字段控制，可以连接，裁剪，格式化和调整它们以及设置字体和模板。也可以添加日期字段和页码。

若要	请参阅
连接控制	插入连接的字段控制
裁剪控制长度	裁剪和连接字符表达式
格式化控制	定义字段控制格式
调整控制	调整报表字段控制中的文本
设置控制字体	更改报表中的字体
设置控制模板	定义字段格式模板
添加日期	插入当前日期
添加页码	插入页码


请参阅

更改报表中的字体

控制报表控制的打印

定义字段控制格式

定义字段格式模板

表达式生成器对话框

报表控制的格式选项

插入页码

插入连接的字段控制

插入报表控制

插入当前日期

调整报表字段控制中的文本

报表表达式对话框

设置报表数据源

不输出重复值

裁剪和连接字符表达式


插入连接的字段控制

请参阅

可以把表字段裁剪或连接成一个字段表达式。这个控制中每个值所需的间隔将是可变的。可以设置该控制从而调整每个值。

� 若要把几个表字段结合成一个表达式

1.	从“报表控制”工具栏中，插入一个“字段”控制。

提示

设置字段大小，使表达式所需的空间最小。如果还需要空间，可以设置该控制使之伸展到更大的值。但是当需要较少空间时却不能把它设置成收缩。

2.	在“报表表达式”对话框中，选择“表达式”框后的三点按钮。

3.	在表达式生成器中，从“字符串”框中选择 ALLTRIM(expC)。

该字符串函数，连同所选“expC”，出现在“报表字段的表达式”框中。

4.	双击希望出现在控制中的第一个字段名。

该字段名将取代“expC”。

5.	在字段名后面键入加号或者从“数学”框中选定“+”。

6.	键入或从“字符串”框中选定“文本”，然后输入逗号。

7.	对其他的字段重复 3、4 步完成表达式，然后选择“确定”按钮。

8.	在“报表表达式”对话框中，选择“溢出时伸展”。

当控制拥挤时，分配给控制的空间将向下调整以适应表达式的值。有关“溢出时伸展”详细内容，请参阅 打印具有可变长度值的控制。


请参阅

添加字段控制

ALLTRIM( ) 函数

表达式生成器对话框

报表控制的格式选项

打印具有可变长度值的控制

报表表达式对话框

裁剪和连接字符表达式


裁剪和连接字符表达式

请参阅

若要在表达式生成器中迅速地裁剪和连接字符表达式，可以在字符表达式之间设置逗号，逗号前面表达式的值被裁剪掉。若被裁剪值的长度大于零，也可以使用分号将表达式放置在新一行上。下面的这个例子可以作为一个表示邮件地址的字符表达式：

contact_name; address; city, region, postal_code

附注

当不希望在值中包含标点号时，使用这些功能。

如果使用这些方法，请确保把字段设置成“溢出时伸展”。


请参阅

ALLTRIM( ) 函数

表达式生成器对话框

报表控制的格式选项

插入连接的字段控制

打印具有可变长度值的控制

报表表达式对话框


插入当前日期

请参阅

可以插入一个字段控制打印当前日期。

� 若要插入当前日期

1.	从报表控制工具栏中，插入一个“字段”控制。

2.	在“报表表达式”对话框中，选择“表达式”框后的三点按钮。

3.	在表达式生成器中，从“日期”框中选定 DATE( )。

4.	选择“确定”按钮。

5.	在“报表表达式”对话框中，选择“确定”按钮。


请参阅

添加字段控制

表达式生成器对话框

报表控制的格式选项

插入报表控制

报表控制工具栏

报表表达式对话框


插入页码

请参阅

“页标头”或“页注脚”带区中通常包含了页码。如果使用向导或快速报表，页码将插入到“页注脚”带区。

� 若要插入页码

1.	从报表控制工具栏中，插入“字段”控制。

2.	在“报表表达式”对话框中，选择“表达式”框后面的三点按钮。

3.	在表达式生成器中，从“变量”列表中选择_PAGENO。

4.	选择“确定”按钮。

5.	在“报表表达式”对话框中，选择“确定”按钮。

提示

可以用这个过程向报表中插入“变量”列表中的系统内存变量。


请参阅

_PAGENO 系统内存变量

表达式生成器对话框

报表控制的格式选项

报表控制工具栏

报表表达式对话框


定义字段控制格式

请参阅

可以为每一数据类型设置各种格式选项。

� 若要格式化字段控制

1.	双击“字段”控制。

2.	在“报表表达式”对话框中，选择“格式”框后面的三点按钮。

3.	在“格式”对话框中，选择字段的数据类型：字符型，数值型或日期型。

“编辑选项”区域将显示相应数据类型可用的格式选项。

附注

这些数据类型仅适用于报表控制。它反映了表达式的数据类型，但并不更改表中字段的数据类型。

4.	选定想要的调整和格式选项。

“格式”对话框根据所选数据类型显示不同的选项。也可以创建一个格式模板，只要在“格式”框中输入字符就可以了。有关详细内容，请参阅定义字段格式模板。


请参阅

更改报表中的字体

定义字段格式模板

格式 (字段) 对话框

报表控制的格式选项

调整报表字段控制中的文本

报表表达式对话框

报表字段控制的模板代码


调整报表字段控制中的文本

请参阅

可以通过两种途径调整控制内的字段内容。这种设置不更改控制在报表上的位置，只修改这个控制所在位置的内容。

� 若要调整字段控制内的文本

1.	选定想更改的控制。

2.	从“格式”菜单中，选择“对齐”。

3.	从子菜单中，选择适当命令。

� 若要调整字段中的文本

1.	双击“字段”控制。

2.	在“报表表达式”对话框中，选择“格式”框后面的三点按钮。

3.	在“格式”对话框中，选择该字段的数据类型：字符型、数值型或日期型。

4.	选择想要的调整和格式选项。


请参阅

调整控制的放置

对齐报表控制

更改报表中的字体

定义字段控制格式

定义字段格式模板

格式 (字段) 对话框

报表控制的格式选项

报表表达式对话框

报表字段的模板代码


定义字段格式模板

请参阅

格式模板允许定制字段的格式。在“报表表达式”或“格式”对话框中的“格式”框中输入一串字符和代码的组合，便可以创建各种打印格式。输入的字符将同字段值一起，以原义字符串的形式出现。输入的代码决定了字段输出的外观。例如，如果对十位数值型字段使用如下格式模板，字符(括号，空格和虚线)同数值型数据一起打印出来。

格式模板	打印输出
(999) 999-9999	(123) 456-7890
有关代码的详细内容，请参阅报表字段控制的模板代码。


请参阅

更改报表中的字体

定义字段控制格式

格式 (字段) 对话框

报表控制的格式选项

调整报表字段控制中的文本

报表表达式对话框

报表字段控制的模板代码


更改报表中的字体

请参阅

可以更改每个字段或标签控制中文本的字体和大小。也可以更改报表的默认字体。

� 若要更改报表中的字体和大小

1.	选定要更改的控制。

2.	从“格式”菜单中，选定“字体”。

此时显示“字体”对话框。

3.	选定适当的字体和磅值，然后选择“确定”按钮。

� 若要更改默认字体

1.	从“报表”菜单中，选择“默认字体”。

2.	在“字体”对话框内，选择想要的适当字体和磅值作为默认值，然后选择“确定”按钮。

插入的控制将反映新的字体设置。


请参阅

定义字段控制格式

字体 (格式菜单)

格式 (字段) 对话框

报表控制的格式选项

调整报表字段控制中的文本

报表表达式对话框

报表字段控制的模板代码


向报表中添加标签控制

请参阅

标签控制是希望出现在报表中的原义文本字符。例如“总计数”标签指明了某一字段控制中的内容包含有总计表达式。

� 要添加一标签控制

1.	从报表控制工具栏中，选择“标签”按钮。

2.	在报表设计器中单击，可将一个标签控制放置在报表报表设计器中。

3.	键入该标签的字符。

可以在文本编辑器内随意编辑：使用 Enter 键添加线条或使用“编辑”菜单剪切、复制和粘贴文本。

� 若要编辑标签控制

1.	在报表设计器中，选择“标签”按钮，然后单击想编辑的标签。

2.	键入修改内容。


请参阅

向报表控制添加注释

调整控制的放置

对齐报表控制

更改报表控制颜色

控制报表控制的打印

复制和删除报表控制

创建邮件标签布局

报表控制的格式选项

插入报表控制

报表控制工具栏

报表设计器

选择和移动报表控制


添加线条、矩形和圆形

请参阅

添加线条、矩形和圆形可以为报表布局增添了视觉效果。

� 若要绘制线条

1.	从报表控制工具栏中，选择“线条”按钮。

2.	在报表设计器中，拖动调整线条。

� 若要绘制矩形

1.	从报表控制工具栏中，选择“矩形”按钮。

2.	在报表设计器中，拖动以调整矩形的大小。

� 若要绘制矩形或圆形

1.	从报表控制工具栏中，选择“圆角矩形”按钮。

2.	在报表设计器中，拖动调整该控制。

3.	双击该控制。

4.	在“样式”区域，选择想要的圆角样式。

5.	如果需要，设置位置选项。

6.	选择“确定”按钮。

可以更改垂直、水平线条、矩形和圆角矩形所使用的线的粗细，从细线到六磅粗的线，也可以更改线条的样式，从点线到点线和虚线的组合。

� 若要更改线条的大小或样式

1.	选定希望更改的直线，矩形或圆角矩形。

2.	从“格式”菜单中，选择“绘图笔”。

3.	从子菜单中选择适当的大小或样式。


请参阅

向报表控制添加注释

调整控制的放置

对齐报表控制

更改报表控制颜色

控制报表控制的打印

复制和删除报表控制

报表控制的格式选项

插入报表控制

绘图笔 (格式菜单)

打印具有可变长度值的控制

报表控制工具栏

报表设计器

选择和移动报表控制


向报表中添加图片

请参阅

可以插入图片作为报表的一部分。一个文件内的图片是静态的：它们不随每条记录或每组记录的变化而更改。如果您想根据记录更改显示，则应插入通用字段

� 若要添加图片

1.	从报表控制工具栏中，选择“图片/OLE 绑定型”按钮。

2.	在报表设计器中，拖动调整图片。

3.	在“图片来源”区域，选择“文件”。

4.	在“文件”框中，键入文件位置。

 —或者—

选择三点按钮来选定 .BMP 或 .ICO 类型的文件。

5.	如果需要，设置大小、位置或打印选项。

6.	选择“确定”按钮。

如果添加了图片，可以修剪到适当大小。


请参阅

向报表控制添加注释

向报表中添加通用字段

调整控制的放置

对齐报表控制

居中对齐 OLE 对象

控制报表控制的打印

报表控制工具栏

复制和删除报表控制

修剪报表图片或 OLE 对象

报表控制的格式选项

插入报表控制

报表设计器

选择和移动报表控制


修剪报表图片或 OLE 对象

请参阅

插入的图片或 OLE 对象放在创建控制时所绘制的图文框可能并不合适。默认情况下，图片或对象保持其原始大小。但也可以通过剪裁或比例缩放使之适合框架图文框。

� 若要使图片适合于图文框

1.	在报表设计器中，双击“图片/OLE 绑定型”控制。

2.	在“报表图片”对话框中，选定“缩放图片—保持形状”。

3.	选择“确定”按钮。

整个图片显示，会尽量填充图文框并保持相对比例。这将保证图片不会在水平或垂直方向产生变形。

� 若要用图片填充图文框

1.	在报表设计器中，双击“图片/OLE 绑定型”控制。

2.	在“报表图片”对话框中，选定“缩放图片—填充图文框”。

3.	选择“确定”按钮。

整个图片将更改从而按设置的大小填充图文框。如果必要，图片将垂直或水平伸展来适合图文框。


请参阅

向报表中添加通用字段

向报表中添加图片

居中对齐 OLE 对象

控制报表控制的打印

报表控制工具栏

报表控制的格式选项

插入报表控制

报表设计器

选择和移动报表控制


向报表中添加通用字段

请参阅

可以在报表中插入包含 OLE 对象的通用型字段。

� 若要插入通用型字段

1.	在报表设计器中，添加“图片/OLE 绑定型”控制。

2.	在“图片来源”区域，选择“字段”。

3.	在“字段”框中，键入字段名。

 —或者—

选择三点按钮来选定字段或变量。

4.	选择“确定”按钮。

通用字段的占位符将出现在定义的图文框内。可以居中对齐 报表中的 OLE 对象。


请参阅

向报表中添加图片

在表中添加字段

在表中添加 OLE 对象

居中对齐 OLE 对象

控制报表控制的打印

报表控制工具栏

修剪报表图片或 OLE 对象

报表控制的格式选项

插入报表控制

报表设计器

选择和移动报表控制


居中对齐 OLE 对象

请参阅

包含在通用型字段内的 OLE 对象可以改变形状和大小。如果通用型字段中的对象小于图文框，它将出现在图文框的左上角。可以居中对齐它，确保报表或标签中所有比图文框小的对象在图文框中居中对齐。

� 若要居中对齐通用型字段 OLE 对象

1.	在报表设计器中，双击“图片/OLE 绑定型”控制。

2.	在“报表图片”对话框中，选定“居中对齐图片”。

3.	选择“确定”按钮。

当预览或打印报表时，被打印的 OLE 对象将在其区域内居中对齐。


请参阅

向报表中添加通用字段

向报表中添加图片

控制报表控制的打印

修剪报表图片或 OLE 对象

报表控制的格式选项

插入报表控制

报表控制工具栏

报表设计器

选择和移动报表控制


更改报表控制颜色

请参阅

可以更改字段、标签、线条或矩形的颜色。

� 若要更改颜色

1.	选择要更改的控制。

2.	在调色板工具栏中，选择“前景色”或“背景色”。

3.	选定希望的颜色。


请参阅

调色板工具栏

控制报表控制的打印

格式菜单

报表控制的格式选项

插入报表控制


向报表控制添加注释

请参阅

当创建或更改控制时，可能希望包含描述。对话框为每个控制提供了注释框。这些注释保存在布局文件中，但不出现在打印的报表或标签中。

� 若要向控制添加注释

1.	双击该控制。

2.	在该控制的对话框中的“注释”框内键入注释。

3.	选择“确定”按钮。


请参阅

插入报表控制


控制报表控制的打印

请参阅

通过允许控制伸展和浮动、不输出重复线条和空记录、生成打印表达式，可以控制打印报表的外观。

若要	请参阅
伸展或浮动控制	打印具有可变长度值的控制
不输出重复线条	不输出重复值
不输出空记录	不输出空白行
创建打印表达式	生成打印表达式


请参阅

生成打印表达式

LABEL 命令

规划数据的位置

打印条件对话框

打印具有可变长度值的控制

打印报表

REPORT 命令

选择要打印的记录

报表控制伸展和浮动选项

不输出空白行

不输出重复值


打印具有可变长度值的控制

请参阅

如果希望控制仅使用它的值所需要的空间，可以把它设置成可伸展的。

伸展选项可用于字段，垂直线，矩形和圆角矩形。有关这些选项的总结，请参阅报表控制伸展和浮动选项. 。

� 若要将字段设置为按值伸展

1.	双击该字段控制，显示其对话框。

2.	选定“溢出时伸展”。

3.	选择“确定”按钮。

相对于伸展控制放置的控制必须设置成浮动，否则它们将被改写。

� 若要把控制设置为浮动的

1.	双击该控制，显示其对话框。

2.	在该控制的对话框内，选定“浮动”。

3.	选择“确定”按钮。

也可以设置线条、矩形和圆角矩形为伸展的。它们能相对于带区伸展。或者如果是一组控制的一部分，它们可以相对于组中最大的控制伸展。

� 若要将线条或矩形设置为伸展的

1.	双击控制，显示其对话框。

2.	在“向下伸展”区域，选择一个选项。

3.	选择“确定”按钮。

� 若要打印上下二个可伸展的控制

1.	在布局中上下插入两个控制。

2.	双击上面的控制显示控制的对话框。

3.	在“对象位置”区域，选定“相对于带区顶端固定”，然后选择“确定”按钮。

4.	双击下面的控制显示控制的对话框。

5.	在“对象位置”区域，选定“浮动”然后选择“确定”按钮。

两个记录值将分别打印不会彼此改写。


请参阅

添加字段控制

控制报表控制的打印

修剪报表图片或 OLE 对象

规划数据的位置

打印条件对话框

打印具有可变长度值的控制

打印报表

选择要打印的记录

报表控制伸展和浮动选项


不输出重复值

请参阅

对字段控制，可以不输出连续记录的重复值。因此该值只对第一条记录打印一次而不出现在随后记录中，直到值更改。例如，如果正在打印的发票中，有一个字段包含事务处理日期，那么，对发生在同一日期的处理事件，该日期只能打印一次。

� 若要不输出重复值

1.	双击该控制，显示控制的对话框。

2.	选择“打印条件”来显示“打印条件”对话框。

3.	在“打印重复值”区域选定“否”，然后选择“确定”按钮。

� 若要仅在新页面或新列重复

1.	双击该控制。

2.	选择“打印条件”。

3.	在“打印重复值”区域选定“否”。

4.	在“有条件打印”区域，选定“在新页或新列的第一个完整信息带内打印”，然后选择“确定”按钮。

� 若要当细节带区数据溢出到一新页或列时重复

1.	双击要重复打印的控制。

2.	选择“打印条件”。

3.	在“打印条件”区域，选定“当细节区数据溢出到新页或新列时打印”，然后选择“确定”按钮。


请参阅

定义报表页面

在页面上定义多列

在布局上分组数据

规划数据的位置

打印条件对话框

重复组标头


生成打印表达式

请参阅

可以向控制添加表达式：它们在打印字段之前被求值。如果表达式求值得出“假”(.F.)，该字段将不打印。

� 若要添加打印表达式

1.	双击该控制。

2.	选择“打印条件”。

3.	在“仅当下列表达式为真时打印”框中，输入表达式。

 —或者—

单击三点按钮用表达式生成器创建表达式。

4.	选择“确定”按钮。


请参阅

控制报表控制的打印

表达式生成器对话框

打印条件对话框

不输出重复值

不输出空白行


不输出空白行

请参阅

可以移去空白区来创建信息的更满意、更连续的显示。

� 若要不输出空白行

1.	双击报表中可能导致空白行的控制。

2.	选择“打印条件”。

3.	选定“若是空白行则删除”。

4.	选择“确定”按钮。


请参阅

控制报表控制的打印

定义报表页面


在布局上分组数据

请参阅

设计基本布局后，若要根据给定字段或其它条件对记录分组，会使报表更易于阅读。可以添加一个或多个组，更改组的顺序，重复组标头或者更改或删除组带区。

若要	请参阅
添加一个组	添加单个组
添加多个组	添加多个数据组
更改组顺序	更改分组次序
重复标头	重复组标头
修改组带区	更改组带区 删除组带区


请参阅

添加单个组

添加多个数据组

更改组带区

更改分组次序

数据分组 (报表菜单)

删除组带区

分组条件选项卡，查询和视图设计器

规划数据的位置

防止分离的组标头

当组更改时打印不输出值

重复组标头


添加单个组

请参阅

一个单组报表具有基于输入表达式的一级数据分组。例如，可以把组建在“国家”字段上来打印所有记录，同一国家的记录在一起，一起打印同一国家的所有记录。数据源必须按那个字段排序。

� 若要添加组

1.	从“报表”菜单中，选择“数据分组”。

2.	在第一个“分组表达式”框内键入分组表达式。

 —或者—

选择三点按钮，在表达式生成器中创建表达式。

3.	在“组属性”区域，选定想要的属性。

4.	选择“确定”按钮。


请参阅

添加多个数据组

更改组带区

更改分组次序

数据分组 (报表菜单)

删除组带区

分组条件选项卡，查询和视图设计器

在布局上分组数据

规划数据的位置

防止分离的组标头

当组更改时打印不输出值

重复组标头


添加多个数据组
添加多个数据分组

请参阅

可以在报表内最多定义 20 级的数据分组。嵌套分组有助于组织不同层次的数据和总计表达式。

� 若要添加多个组

1.	从“报表”菜单中，选择“数据分组”。

2.	在第一个“分组表达式”框内键入分组表达式。

 —或者—

选择三点按钮，在表达式生成器.中创建表达式。

3.	在“组属性”区域，选择您想要的属性。

4.	选择“插入”并且对每个分组表达式重复 2、3 步。

5.	选择“确定”按钮。

如果已有多个组，当组更改时可能希望防止分离的标头，或者打印隐藏值。


请参阅

添加单个组

更改组带区

更改分组次序

数据分组 (报表菜单)

删除组带区

表达式生成器对话框

分组条件选项卡，查询和视图设计器

在布局上分组数据

规划数据的位置

防止分离的组标头

当组更改时打印不输出值

重复组标头


防止分离的组标头

请参阅

有时一个组可能部分打印在一页面上，然后在下一页面上结束。为防止组标头打印在一页面下端而大部分记录打印在下一页面上，可以设置打印组标头时离页面下端的最小矩离。

� 若要防止分离的组标头

1.	从“报表”菜单中，选择“数据分组”。

2.	在“数据分组对话框内，在“小于右值时组从新的一页上开始”框中选择或输入值。

提示

要为防止页末出现孤立的组标头，可将些值设置为组标头带区高度加上一到三倍的细节带区高度。


请参阅

数据分组 (报表菜单)

在布局上分组数据

规划数据的位置

重复组标头


当组更改时打印不输出值

请参阅

如果重复值不输出，当特定组更改时可能希望打印它们。

� 若要当组更改时打印重复值

1.	双击该控制显示控制的对话框。

2.	选择“打印条件”按钮来显示“打印条件”对话框。

3.	选定“当此组改变时打印”。

报表中定义的组出现在框中。

4.	从框中选定一组然后选择“确定”按钮。


请参阅

打印条件对话框


重复组标头

请参阅

当一个组延续到下一页面时，可能希望在该组延续信息的上部重复组标头。如果报表有多个数据分组，后继页上的标头将来自组列表中最后一组。因此，应把希望打印的组标头中的所有控制放置在列表最后一组的标头带区内。

� 若要在下一页面重复组标头

 •	   在“数据分组”对话框中，选定希望重复的组，然后选择“在每页面重打印组标头”。

如果不希望重复组标头，请清除这个复选框。


请参阅

数据分组 (报表菜单)


更改组带区

请参阅

可以更改分组的表达式和组打印选项。

� 若要修改组带区。

1.	从“报表”菜单中，选择“数据分组”。

2.	在“数据分组”对话框中，选定要更改的分组表达式。

3.	输入新的表达式。

 —或者—

选择三点按钮，在表达式生成器.中更改该表达式。

4.	必要时更改分组选项。

5.	选择“确定”按钮。

6.	在“数据分组”对话框中，选择“确定”按钮。


请参阅

添加单个组

更改分组次序

数据分组 (报表菜单)

删除组带区

表达式生成器对话框

在布局上分组数据

修改报表带区

防止分离的组标头

当组更改时打印不输出值

重复组标头

设置报表带区高度


删除组带区

请参阅

如果不再需要报表布局上某个特定的分组，则可以删除它。

� 若要删除组带区

1.	从“报表”菜单中，选择“数据分组”。

2.	选定希望删除的组。

3.	选择“删除”按钮。

该组带区将从布局中删除。如果该组带区中包含有控制，将提示同时删去控制。


请参阅

更改组带区

更改分组次序

数据分组 (报表菜单)

表达式生成器对话框

在布局上分组数据

修改报表带区


更改分组次序

请参阅

在报表中的组定义之后，可以更改它们的次序。当组重新排序时，在组带区中定义的所有控制都将移动到新的位置。重新排序组并不更改以前定义的控制。如果框或线条以前是相对于组带区的上部或底部定位的，那么它们仍将固定在组带区的原位置。

� 若要更改组的次序

1.	在“报表”菜单中，选择“数据分组”。

2.	选中想移动的组左侧的移动按钮，并把它拖到新位置。


请参阅

添加多个数据组

数据分组 (报表菜单)

删除组带区

在布局上分组数据

修改报表带区

设置报表带区高度


预览结果

请参阅

通过预览报表，不用打印就能看到它的页面外观。

注意

如果得到如下提示“要将所做更改保存到文件？”那么，您在选定关闭“预览”窗口时一定还选定了关闭布局文件。此时可以选定“取消”按钮回到“预览”，或者选定“保存”按钮保存所做更改并关闭文件。如果选定了“否”，将不保存对布局所做的任何更改。

� 若要预览布局

1.	从“查看”菜单中，选择“预览”。

2.	在预览工具栏中，选择“上一页”或“下一页”来切换页面。

3.	若要更改报表图象的大小，选择“缩放”。

4.	若想要返回到设计状态，选择“关闭预览”。


请参阅

LABEL 命令

打印预览工具栏

预览 (查看菜单)

打印报表

预览报表和标签

REPORT 命令


打印报表

请参阅

使用“报表设计器”创建的报表或标签布局文件只是一个外壳，它把要打印的数据组织成令人满意的格式。在打印一个报表文件之前，应该检验数据源能否正确地对数据进行排序。

� 若要打印报表

1.	从“文件”菜单中，选择“打印”。

2.	在“类型”框中，选定“报表”。

3.	在“文件”框中，输入报表名。

 —或者—

选择三点按钮并选定一报表。

4.	在“打印选项”区域，选定适当选项。

5.	选择“确定”按钮。

附注

如果未设置数据环境，则显示“打开”对话框，并在其中列出一些表，从中可以选定要进行操作的一个表。

Visual FoxPro 把报表发送到打印机上。

如果进行了选择，就可以限制记录


请参阅

LABEL 命令

预览结果

打印报表和标签

REPORT 命令

选择要打印的记录


选择要打印的记录

请参阅

打印报表时，通过提供选择条件可以限制出现在报表中的记录数目。可以：

 •	   通过指定一个数量或范围为记录选择范围。

 •	   生成 FOR 表达式来选定与条件相匹配的记录。

 •	   生成 WHILE 表达式来选定记录直到发现与条件不匹配的记录为止。

可以使用这些选项任意组合。WHILE 表达式忽略其它条件。


请参阅

控制打印记录的选定

LABEL 命令

打印一定数量或范围的记录

打印匹配某一条件的记录

REPORT 命令

使用 WHILE 表达式


打印一定数量或范围的记录

请参阅

使用“范围”选项，可以选定一条记录或文件中连续放置的一组记录。

附注

活动索引和当前记录指针影响范围选项中的“下一个”和“其余”选项结果。例如，按姓索引的表中的下一条记录可能不同于按州索引的表中的下一条。这不影响“记录”选项，因为当表被索引时不更改记录的序号。

� 若要选定有限数目的记录

1.	从“文件”菜单中，选择“打印”。

2.	输入报表类型和文件名。

3.	选择“选项”。

4.	选择“范围”。

5.	选定适当的范围选项。

若要打印	选择此范围选项
源文件中每条记录	全部
从当前记录起一系列记录	后续
由序号指定的记录	记录
当前记录加上其后直至文件尾所有记录	其余
6.	选择“确定”按钮。

Visual FoxPro 使用所选范围内记录的数据打印报表。


请参阅

控制打印记录的选定

LABEL 命令

打印选项对话框

打印匹配某一条件的记录

REPORT 命令

Scope 对话框

选择要打印的记录


打印匹配某一条件的记录

请参阅

如果想选择的记录在表内不是连续的，可以建立一个逻辑表达式来指定要打印记录必须满足的选择条件。例如，可以打印所有某一字段具有一特定值的记录。

� 若要输入选择记录的条件

1.	从“文件”菜单中，选择“打印”。

2.	输入报表信息。

3.	选择“选项”按钮。

4.	在“For”框中，输入一个FOR 表达式。

 —或者—

选择“For”按钮来使用表达式生成器。

附注

不必在表达式中包含“FOR”命令。例如，键入：国家=“加拿大”，可以只看加拿大的数据。

5.	选择“确定”按钮。

Visual FoxPro 求值所有记录，并且使用那些匹配表达式中条件的记录打印报表。


请参阅

控制打印记录的选定

表达式生成器对话框

FOR 子句

LABEL 命令

打印选项对话框

打印一定数量或范围的记录

REPORT 命令

Scope 对话框

选择要打印的记录


控制打印记录的选定

请参阅

打印时，可以指定要继续计算和选定记录所必须满足的条件。输入这个条件作为“WHILE”表达式。只有“WHILE”表达式保持为“真”，Visual FoxPro 才处理数据源。

� 若要输入结束记录选定的条件

1.	从“文件”菜单中，选择“打印”。

2.	输入报表信息。

3.	在“WHILE”框内，输入“WHILE”表达式。

 —或者—

选择“WHILE”按钮来使用表达式生成器。

附注

不必在语句中包含“WHILE”命令。例如，键入：销售额 > 1000，可以只检查高于 1000 美元的销售额。

4.	选择“确定”按钮。

Visual FoxPro 使用计算 WHILE 表达式为真的记录打印报表。

有关“WHILE”子句的详细内容，请参阅使用 WHILE 表达式. 。


请参阅

LABEL 命令

打印选项对话框

打印匹配某一条件的记录

REPORT 命令

Scope 对话框

选择要打印的记录

表达式生成器对话框

使用 WHILE 表达式


添加查询

请参阅

添加到应用程序中的查询，可以对数据源进行各种组合，并有效地筛选记录、管理数据并对结果排序。所有这些工作都可用 SELECT-SQL 语句完成。

� 若要创建一个 SELECT-SQL 语句

 •	   使用查询设计器或视图设计器构造此语句，然后将 SQL 窗口中的内容复制到代码窗口中。

— 或者 —

 •	   在代码窗口中，键入 SELECT  - SQL 语句。

使用 SELECT-SQL 语句的各个子句，可以指定多种不同的输出目标来保存查询结果。

若要将查询结果输出到	使用此子句
独立的表	INTO TABLE mytable
数组	INTO ARRAY aMyArray
临时表	INTO CURSOR mycursor
活动窗口	TO SCREEN
浏览窗口	如果没有指定其他目标，则用它作默认值。


请参阅

创建图形

创建查询

创建新的远程视图

创建交叉表查询

创建本地表的视图

在窗口中显示结果

集成查询和报表

查询设计器

运行查询

SELECT  - SQL 命令

启动查询设计器

将结果存储到表、数组或临时表中

使用视图

视图设计器


将结果存储到表、数组或临时表中

请参阅

查询结果可以存储到表、数组或临时表中，以备它用，例如处理表单以及打印报表和标签。

� 若要指定一个表作为输出目标

 •	   请使用 SELECT-SQL 语句的 INTO 子句指定一个目标。

下面的示例演示了如何用一个 INTO 子句指定一个表。

SELECT * ;

FROM tastrade!customer ;

WHERE customer.country = "Canada" ;

INTO TABLE mytable

� 若要指定一个数组作为目标

 •	   请使用 SELECT-SQL 语句的 INTO 子句指定一个目标。

下面的示例演示了如何用 INTO 子句指定一个数组。

SELECT * ;

FROM tastrade!customer ;

WHERE customer.country = "Canada" ;

INTO ARRAY aMyArray

� 若要指定一个临时表作为目标

 •	   请使用 SELECT-SQL 语句的 INTO 子句指定一个目标。

以下示例演示了如何用 INTO 子句指定一个临时表。

SELECT * ;

FROM tastrade!customer ;

WHERE customer.country = "Canada" ;

INTO CURSOR mycursor


请参阅

定向输出查询结果

使用表单控制

在报表或标签中打印结果

SELECT  - SQL 命令


使用表单控制

请参阅

若要在表单中显示查询结果，可以用表、数组或临时表的内容填充表格、列表框或组合框。

� 若要用一个表或临时表的内容填充表单控制

1.	在表单设计器中，修改表单，让此表单中包含您要填充的控制。

2.	在控制的 Init 事件中，添加一个用 INTO TABLE 或 INTO CURSOR 子句指定目标的 SELECT - SQL 语句。

3.	将 RowSource 或 RecordSource 属性设置为 SELECT-SQL 语句中指定的临时表或表。

4.	如果是表格控制，可以在 Init 事件中将 RecordSource 属性设置为 SELECT - SQL 语句中指定的表或者临时表。例如，如果临时表的名字为 MyCursor，请键入：

THIS.RecordSource = MyCursor


请参阅

定向输出查询结果

表单设计器

Init 事件

打印报表和标签

RecordSource 属性

RowSource 属性

SELECT - SQL 命令


在报表或标签中打印结果

请参阅

如果您的报表或标签包含了许多组数据，或者需要对其中的数据进行排序，那么可以使用 SELECT-SQL 语句的各种子句得到所需要的结果。

� 若要将结果发送到已有的报表或标签中

 •	   请结合 REPORT 或 LABEL 命令使用 SELECT - SQL 语句。

以下示例使用了 GROUP BY 和 ORDER BY 子句以及 REPORT FORM 命令：

SELECT * ;

FROM tastrade!customer ;

WHERE customer.country = "Canada" ;

GROUP BY customer.region ;

ORDER BY customer.postal_code，customer.company_name ;

INTO CURSOR MyCursor

REPORT FORM MYREPORT.FRX


请参阅

控制报表的数据源

创建查询

创建图形

定向输出查询结果

集成查询和报表

LABEL 命令

REPORT 命令

SELECT - SQL 命令


在窗口中显示结果

请参阅

如果想要显示 SELECT-SQL 语句的结果，您可以将它们发送到窗口中。浏览窗口是查询结果默认的输出窗口，这样您就可以不包含目标子句。当然也可以把结果发送到 Visual FoxPro 主窗口或者其他活动窗口。

� 若要在一个窗口中显示查询结果

 •	   使用 SELECT - SQL 语句的 TO SCREEN 子句。


请参阅

浏览窗口

定向输出查询结果

SELECT - SQL 命令


控制报表的数据源

请参阅

若要控制报表的数据源，您可以定义一个与报表一起存储的数据环境，或者每次运行报表时在代码中激活指定的数据源。

若要	请
总是使用同一数据源	将表或视图添加到报表的数据环境中。
	将 DO query 命令或 SELECT - SQL 命令添加到报表数据环境的 Init 事件代码中。
使用不同的数据源集合	将 USE table，USE view，DO query 命令或者 SELECT-SQL 语句添加到 Click 事件代码或其他位于 REPORT 或 LABEL 命令前的代码中。
为报表设置私有数据工作期

若要防止其他设计器中对全局数据工作期的更改影响您的报表数据工作期，可以把数据工作期设置为私有的。

� 若要设置私有数据工作期

 •	   请从“报表”菜单中，选择“私有数据工作期”命令。


请参阅

Click 事件

DO 命令

Init 事件

LABEL 命令

REPORT 命令

SELECT - SQL 命令

设置报表数据源

设置数据环境

USE 命令


定义报表变量

请参阅

若要在报表中操作数据或显示计算结果，您可以使用报表变量。使用报表变量，可以计算各种值，并且可以用这些值来计算其他相关值。

� 若要定义报表变量

1.	请打开或创建一个报表。

2.	从“报表”菜单中选择“变量”命令。

3.	在报表变量对话框中，选择“变量”框并键入一个变量名。

4.	在“要存储的值”框中，键入一个字段名或其他表达式。

5.	如果需要，选择一个计算选项。

6.	如果需要，在“初始值”框中键入一个设置初始值的表达式。

7.	选择“确定”按钮。

在此之后，您便可以在报表的任何表达式中使用此变量。

若要统计 Company 表中所有的 Canadian 项，可以使用以下表达式并选择 Count 作为计算选项。

IIF(country="Canada",1,0)

您也可以重新设置各变量的顺序并设置其初始值。

若要	请参阅
重新设置各变量的顺序	重新排序报表变量
设置初始值	设置变量的初始值


请参阅

重新排序报表变量

设置变量的初始值

使用报表带区事件

变量 （报表菜单）


重新排序报表变量

请参阅

报表变量是根据它们出现的先后顺序来计算，并且影响引用了这些报表变量的表达式的值。

� 若要更改报表变量的顺序

1.	请从“报表”菜单中，选择“变量”。

2.	在“变量”框中，拖动变量左边的按钮，重新调整顺序。

3.	选择“确定”按钮。


请参阅

定义报表变量

设置变量的初始值

变量 （报表菜单）


设置变量的初始值

请参阅

如果您在计算中使用了一个变量，一定要用非零值初始化变量，以防出现除数为零的错误。如果您不指定一个值，则由 Visual FoxPro 指定默认值。

� 若要设置变量的初始值

1.	请从“报表”菜单中，选择“变量”。

2.	在“变量”框中，选择要设置的变量。

3.	在“初始值”框中，输入值。

4.	选择“确定”按钮。

当您重新设置了报表中分组的优先顺序时，系统不会根据正确的字段重置报表变量。例如，如果您的报表中有两个组，第一次分组依据国家分组，而第二次分组依据日期分组，当您交换了分组顺序时，变量却仍然根据原来的分组顺序重置。

通过指定重置变量的时间可以更改计算的结果。默认情况下，Visual FoxPro 在报表尾重置报表变量。

� 若要在报表尾、页尾或列尾重置变量

1.	请从“报表”菜单中，选择“变量”。

2.	在“重置”框中，选择某一选项。

3.	选择“确定”按钮。

� 若要在带区的入口或出口处重置变量

1.	在报表设计器中，打开报表。

2.	双击报表带区栏。

3.	在“带区”对话框的“运行表达式”中，选择“入口处”或“出口处”框后的三点按钮。

4.	输入表达式以便每次进入或退出该带区时重置变量。


请参阅

定义报表变量

报表设计器

使用报表带区事件

变量 （报表菜单）


控制报表和标签的输出

请参阅

使用 REPORT 或 LABEL 命令的下列某一关键字，可以控制报表和标签输出到什么地方：

 •	   PRINT

 •	   PREVIEW

 •	   FILE

如果您不使用任何关键字，报表将输出到屏幕或活动窗口。有关详细内容，请参阅打印报表和标签、预览报表和标签或将报表打印到文件中。


请参阅

暂时更改报表的打印机设置

LABEL 命令

预览报表和标签

打印报表和标签

将报表打印到文件中

REPORT 命令

选择要打印的记录


打印报表和标签

请参阅

若要把报表送到打印机，您可以将它直接输出到打印机，也可以显示打印设置对话框。

� 若要将报表送到打印机

 •	   使用 REPORT 或 LABEL 命令的 TO PRINTER 关键字。

例如，以下代码把报表 MyReport 发送到默认打印机，而不在屏幕上输出：

REPORT FORM MYREPORT.FRX TO PRINTER NOCONSOLE

� 若要在将报表发送到打印机之前显示“打印设置”对话框

 •	   使用 REPORT 或 LABEL 命令的 TO PRINTER PROMPT 关键字。

例如，以下代码显示“打印设置”对话框，然后发送报表 MyReport 到默认打印机，而不在活动窗口中显示：

REPORT FORM MYREPORT.FRX TO PRINTER PROMPT NOCONSOLE


请参阅

暂时更改报表的打印机设置

LABEL 命令

预览报表和标签

将报表打印到文件中

REPORT 命令

报表设计器

选择要打印的记录


预览报表和标签

请参阅

如果要预览报表，您可以将它发送到报表设计器中的“预览”窗口。

� 若要预览报表

 •	   使用 REPORT 命令的 PREVIEW 关键字。

例如，下面的代码可以将报表在一个模式窗口中显示出来：

REPORT FORM MYREPORT.FRX PREVIEW

默认情况下，“预览”窗口是模式窗口，但允许访问“预览”工具栏。若要将预览窗口设置成为无模式窗口，您可以在 REPORT 命令中添加关键字 NOWAIT。

例如，下面的代码可以在一个无模式窗口中显示报表：

REPORT FORM MYREPORT.FRX PREVIEW NOWAIT


请参阅

预览结果

打印报表

REPORT 命令

报表设计器


将报表打印到文件中

请参阅

若要创建报表的电子版本，您可以将它发送到一个打印机格式文件中，或者发送到一个 ASCII 文件中。把报表发送到文件中，可以方便您以后用打印机成批打印。

� 若要将报表打印到 ASCII 文件

 •	   使用 REPORT 命令的 FILE 和 ASCII 关键字。


请参阅

LABEL 命令

预览报表和标签

打印报表

打印报表和标签

REPORT 命令


集成查询和报表

请参阅

您可以将执行查询或报表的代码添加到应用程序的下列对象中：

 •	   表单按钮。

 •	   菜单项。

 •	   工具栏按钮。

� 若要添加查询、视图或程序

 •	   将 DO 或 USE 命令添加到表单命令按钮、工具栏按钮或菜单项的相关代码中。

例如，可以添加与下列代码类似的代码：

DO MYQUERY.QPR

DO MYPROGRAM.PRG

USE myview

� 若要运行报表和标签

 •	   请使用 REPORT 或 LABEL 命令。

例如，您可以使用如下类似代码：

REPORT FORM MYREPORT.FRX

LABEL FORM MYLABEL.LBX

� 若要修改报表和标签

 •	   使用 MODIFY REPORT 或 MODIFY LABEL 命令。

例如，可以添加如下类似代码：

MODIFY REPORT MYREPORT.FRX

MODIFY LABEL MYLABEL.LBX

� 若要创建报表和标签

 •	   使用 CREATE REPORT 或 CREATE LABEL 命令。

例如，您可以使用如下类似代码：

CREATE REPORT MYREPORT.FRX

CREATE LABEL MYLABEL.LBX


请参阅

向表单中添加控制

在自定义工具栏类中添加对象

为菜单或菜单项指定任务

CREATE LABEL 命令

CREATE REPORT 命令

DO 命令

LABEL 命令

MODIFY LABEL 命令

MODIFY REPORT 命令

REPORT 命令

USE 命令


创建一对多报表

请参阅

如果想创建一对多报表，可以使用报表设计器或一对多报表向导将相关的多个表中的记录打印在一个报表中。要使用报表设计器，可以按照如下步骤：

� 若要创建一对多报表

1.	确定要在一对多报表中显示的信息包含在哪些表中，打开相关表所在的数据库。

2.	打开“报表设计器”。

3.	从“查看”菜单中选择“数据环境”并添加二个表，这两个表应是相关联的。

4.	从快捷菜单中选择“属性”，为临时表之间的关系、父临时表与子临时表，以及数据环境分别设置属性。

5.	在属性窗口的“对象”框中选择 Relation1，并在“数据”选项卡中设置 OneToMany 属性为“真”。设置此属性与使用 SET SKIP TO 命令效果相同。

6.	在“对象”框中选择 Cursor1。在“数据”选项卡中选择 Order 属性并从下拉列表框中选择一个索引以设置父表的排序索引。使用同样的步骤设置子表 Cursor2 的索引。两个临时表应使用同样的索引进行排序。

7.	在“对象”框中，选择“数据环境”，选定 InitialSelectedAlias 属性，然后在下拉式列表中选择父表。

8.	在“报表设计器”中，根据关系中父表方的数据向报表中添加数据组。

9.	将字段添加到报表中。

例如，可以将父表字段添加到“组标头”带区，而将子表字段添加到“细节”带区。可以将字段直接从表中拖放到“数据环境”中。


请参阅

添加单个组

向数据环境中添加表或视图

使用新建报表创建报表

数据环境设计器

一对多报表向导

属性窗口

报表设计器

设置报表数据源


使用报表带区事件

请参阅

可以借助表达式（让 Visual FoxPro 在打印一个报表带区之前或之后计算该表达式）对报表的处理进行控制。例如，可以使用表达式来重置和递增变量值。

� 若要在报表带区中加入事件

1.	在报表设计器中打开报表。

2.	双击要设置的报表带区栏。

3.	在带区对话框的“运行表达式”区域中，选择“入口处”或“出口处”框末端的三点按钮。

4.	在表达式生成器对话框中，输入每次进入和退出带区时要计算的表达式。


请参阅

表达式生成器对话框

规划数据的位置

报表设计器


报表字段控制的模板代码

请参阅

如果想为报表中的字段控制创建模板，可以在“报表表达式”对话框的“格式”框中使用如下代码：

代码	功能
A	只显示字母字符。
L	只显示逻辑数据。
N	只显示字母和数字。
X	显示任意字符。
9	对字符数据只显示数字；对数值数据显示数字和符号。
#	显示数字、空格和符号。
$	在数值前显示一个固定的美元符。
$$	在数值前显示浮动的美元符。
*	在数值前显示星号。可与 $ 组合使用对货币值进行保护。
.	指定小数点位置。
,	隔开小数点左边的数字。
例如，可以使用下列模板代码显示电话号码。

格式模板	打印输出
(999) 999-9999	(123) 456-7890


请参阅

添加字段控制

定义字段控制格式

定义字段格式模板

裁剪和连接字符表达式


报表控制的格式选项

请参阅

使用“格式”菜单中的格式命令可以对报表控制中的显示内容进行格式编排。下表总结了报表控制中可以使用的格式选项。要了解改变字体或文本对齐方式的步骤，请选择以下各列中的“是”。要了解填充、绘图笔或模式等命令的详细内容，请选择以下各列中的“是”。

可以改变...	字体?	文本对齐方式?	填充?	绘图笔?	模式?
标签	是	是	N/A	N/A	是
字段1	是	是	N/A	N/A	是
线条	N/A	N/A	N/A	是	N/A
矩形	N/A	N/A	是	是	是
圆角矩形	N/A	N/A	是	是	是
图片／OLE 绑定型控制	N/A	是, 居中	N/A	N/A	是
1 可把模板加到字段控制中。


请参阅

向报表中添加标签控制

添加线条、矩形和圆形

对齐报表控制

居中对齐 OLE 对象

更改报表中的字体

更改报表控制颜色

定义字段格式模板

填充 (格式菜单)

插入报表控制

调整报表字段控制中的文本

模式 (格式菜单)

文本对齐 (格式菜单)


报表控制伸展和浮动选项
报表控制的伸展和浮动选项

请参阅

如果想打印的报表包含长度可变的控制，可以设置报表控制的伸展和浮动选项。

报表控制	可以伸展吗?	可以浮动吗?
标签	否	是
字段	是	是
线条1	是	是
矩形	是	是
圆角矩形	是	是
图片／OLE 绑定型控制2	否	是
1 只对于垂直线条。 2 可以充满图形框的图片


请参阅

控制报表控制的打印

修剪报表图片或 OLE 对象

打印长度可变的控制


添加标签大小
添加新的标签规格

请参阅

如果在标签设计器中没有所需的标签规格，可以在新标签对话框中加入新的标签规格，标签的新尺寸将保存相应的资源文件中。而资源文件框的名称则存放在配置文件中。默认情况下，配置文件是 CONFIG.FPW。

� 若要添加新的标签规格

1.	从“程序”菜单中选择“执行”。

2.	从 Visual FoxPro 目录中选择 ADDLABEL.APP。

3.	在框中输入资源文件的路径及名称。

附注

如果不知道资源文件的名称和位置，可在命令窗口中键入 ? SYS(2019) ，文件的名称和路径就在 Visual FoxPro 主窗口中显示出来。

4.	在“添加标签”对话框中选择“创建新的标签布局”。

5.	在“创建新的标签布局”对话框中输入标签的有关信息。

6.	选择“添加此布局”。

Visual FoxPro 把新标签添加到资源文件和表 LABELS.DBF 中。

7.	如果需要继续添加另外一种规格的标签，可再选择“创建新的标签布局”。

— 或者 —

如果想停止添加标签，可选择“取消”。


请参阅

ADDLABEL.APP

命令窗口

创建邮件标签布局

使用标签设计器创建标签

文件位置选项卡 (选项对话框)

标签设计器

新标签对话框

恢复标签规格

SYS(2019) - 配置文件的名称和位置


恢复标签大小
恢复标签规格

请参阅

如果创建标签时资源文件不可用，可以对标签列表进行恢复。

� 若要恢复标签列表

1.	从“程序”菜单中选择执行。

2.	从 Visual FoxPro 目录中选择 ADDLABEL.APP。

3.	在“添加标签”对话框中选择“添加标签到资源文件”。

Visual FoxPro 把所有标签从 LABELS.DBF 文件复制到资源文件中。资源文件框的名称保存在配置文件中。默认情况下，配置文件 是 CONFIG.FPW。


请参阅

添加新的标签规格

新标签对话框


暂时更改报表的打印机设置

请参阅

可以根据当前打印需要改变报表打印机设置而不把这些设置保存到报表文件中。

� 若要暂时更改打印机设置

1.	从“文件”菜单中选择“打印”。

2.	从打印对话框“类型”列表中选择“报表”。

3.	在“文件”框中键入报表名称。

4.	选择“打印设置”。

5.	在打印设置对话框中，更改打印机设置，然后选择“确定”。

向打印机发送报表。


请参阅

控制报表和标签的输出

打印 (文件菜单)

打印设置对话框

打印报表

打印报表和标签

选择要打印的记录


创建菜单系统

请参阅

创建一个完整的菜单系统包括若干步骤：设计菜单系统；创建菜单及子菜单；为系统指定任务，以便实现某一具体功能；生成菜单程序以及运行菜单程序，对菜单系统进行测试。

� 若要创建一个菜单系统

1.	规划系统。

确定需要哪些菜单、出现在界面的何处以及哪几个菜单要有子菜单等等。

2.	创建菜单 和子菜单。

3.	为菜单系统指定任务。

指定菜单所要执行的任务，例如显示表单或对话框等。另外，如果需要，还可以包含初始化代码和清理代码。

4.	选择“预览”按钮预览整个菜单系统。

5.	从“菜单”菜单上选择“生成”命令， 生成菜单程序。

6.	运行生成的程序，测试菜单系统。

从“程序”菜单中，选择“执行”命令，然后指定已经生成的 .MPR 程序。


请参阅

向菜单系统添加清理代码

向菜单系统添加初始化代码

为菜单或菜单项指定任务

创建菜单

创建子菜单

规划菜单系统


规划菜单系统

请参阅

应用程序的实用性一定程度上取决于菜单系统的质量。花费一定时间规划菜单，有助于用户接受这些菜单，同时也有助于用户对这些菜单的学习。

在设计菜单系统时，请考虑下列准则：

 •	   按照用户所要执行的任务组织系统，而不要按应用程序的层次组织系统。

只要查看菜单和菜单项，用户就应该可以对应用程序的组织方法有一个感性认识。因此，要设计好这些菜单和菜单项，您必须清楚用户思考问题的方法和完成任务的方法。

 •	   给每个菜单一个有意义的菜单标题。

 •	   按照估计的菜单项使用频率、逻辑顺序或字母顺序组织菜单项。

如果不能预计频率，也无法确定逻辑顺序，则可以按字母顺序组织菜单项。当菜单中包含有八个以上的菜单项时，按字母顺序特别有效。太多的菜单项需要用户花费一定的时间才能浏览一遍，而按字母顺序则便于查看菜单项。

 •	   在菜单项的逻辑组之间放置分隔线。

 •	   将菜单上菜单项的数目限制在一个屏幕之内。

如果菜单项的数目超过了一屏，则应为其中的一些菜单项创建子菜单。

 •	   为菜单和菜单项设置访问键或键盘快捷键。

例如，ALT+F 可以作为“文件”菜单的访问键。

 •	   使用能够准确描述菜单项的文字。

描述菜单项时，请使用日常用语而不要使用计算机术语。同时，说明选择一个菜单项产生的效果时，应使用简单、生动的动词，而不要将名词当作动词使用。另外，请用相似语句结构说明菜单项。例如，如果对所有的菜单项的描述都使用了同一个词，则这些描述应使用相同的语言结构。

 •	   在菜单项中混合使用大小写字母。

只有强调时才全部使用大写字母。


请参阅

创建菜单系统


创建菜单

请参阅

要创建新菜单，可以定制已有的 Visual FoxPro 菜单系统，也可以开发您自己的菜单系统。若要从已有的 Visual FoxPro 菜单系统开始创建菜单，则可以使用“快速菜单”功能。

� 若要用“快速菜单”创建菜单系统

1.	请从项目管理器中选择“其他”选项卡，再选择“菜单”，然后单击“新建”。

2.	从“菜单”菜单中，选择“快速菜单”命令。

3.	通过添加或更改菜单项定制菜单系统。


请参阅

创建菜单项

创建子菜单

菜单设计器


创建菜单项

请参阅

菜单创建好后，可以在菜单上设置菜单项。每个菜单项都表示了一个您希望用户执行的 Visual FoxPro 命令或过程，菜单项也可以包含子菜单，用以提供其他菜单项。

� 若要向菜单中添加菜单项

1.	请在“提示”栏中，单击要添加菜单项的菜单标题。

2.	在“结果”框中，选定“子菜单”命令。

3.	单击“创建”按钮。

4.	在“提示”栏中，键入新建的各菜单项的名称。


请参阅

创建菜单

创建子菜单

菜单设计器


创建子菜单

请参阅

对于每个菜单项，都可以创建包含其他菜单项的子菜单。

� 若要创建子菜单

1.	请在“提示”栏中，单击要添加子菜单的菜单项。

2.	在“结果”框中，选择“子菜单”。

3.	单击“创建”按钮或“编辑”按钮。

4.	在“提示”栏中，键入新建的各菜单项的名称。


请参阅

创建菜单项

创建菜单

菜单设计器


菜单项分组

请参阅

为增强可读性，可使用分隔线将内容相关的菜单项分隔成组。

� 若要对菜单项分组

1.	在“提示”栏中，键入“\-”，便可以创建一条分隔线。

2.	拖动“\-”提示符左侧的按钮，将分隔线移动到正确的位置。


请参阅

创建菜单项

菜单设计器


指定访问键

请参阅

设计良好的菜单都具有访问键，从而通过键盘可以快速地访问菜单的功能。在菜单标题或菜单项中，访问键用带有下划线的字母表示。

如果没有为某个菜单标题或菜单项指定访问键，Visual FoxPro 将自动指定第一个字母作为访问键。

� 若要为菜单或菜单项指定访问键

 •	   请在您希望成为访问键的字母左侧键入“\<”。

附注

    如果菜单系统的某个访问键不起作用，则可查看是否有重复的访问键。


请参阅

指定键盘快捷键

菜单设计器


指定键盘快捷键

请参阅

除了指定访问键以外，还可以为菜单或菜单项指定键盘快捷键。

Visual FoxPro 菜单项的快捷键一般用 CTRL 键与另一个键相组合。

� 若要为菜单或菜单项指定快捷键

1.	请在“提示”栏中，单击相应的菜单标题或菜单项。

2.	选择“选项”栏中的按钮，显示“提示选项”对话框。

3.	单击“快捷键”复选框，显示“键定义”对话框。

4.	在“键标记”框中，按下一组合键，可创建快捷键。

如果一个菜单项没有快捷键，Visual FoxPro 将在“键标记”框中显示“按下要定义的键”。

5.	在“键说明”框中，添加您希望在菜单项的旁边出现的文本。

附注

    CTRL+J 是无效的快捷键。


请参阅

指定访问键


启用和废止菜单项

请参阅

可以根据逻辑条件启用或废止菜单及菜单项。

� 若要启用或废止菜单及菜单项

1.	在“提示”栏中，单击相应的菜单标题或菜单项。

2.	选择“选项”栏中的按钮，显示“提示选项”对话框。

3.	选择“跳过”复选框。

4.	在“跳过”框中，键入表达式，此表达式将用于确定是启用菜单或菜单项，还是废止菜单或菜单项。

如果此表达式取值为“假”（.F.），则启用菜单或菜单项。如果此表达式取值为“真”（.T.），则废止菜单或菜单项。

附注

显示菜单系统后，可以使用 SET SKIP OF 命令启用或废止菜单及菜单项。


请参阅

创建菜单项

菜单设计器

SKPBAR( ) 函数


为菜单或菜单项指定任务

请参阅

选择一个菜单或菜单项，将执行相应的任务，如显示表单、工具栏或另一个菜单系统等等。要执行任务，菜单或菜单项就必须执行一个 Visual FoxPro 命令。此命令可以是一条语句，也可以是一个过程调用。

若要	请参阅
通过执行命令而执行任务	使用命令完成任务
通过调用过程而执行任务	使用过程完成任务


请参阅

创建菜单项

创建菜单

使用命令完成任务

使用过程完成任务


使用命令完成任务

请参阅

要执行任务，可以为菜单或菜单项指定一个命令。此命令可以是任何有效的 Visual FoxPro 命令，包括对程序和过程的调用，其中的程序要在指定的路径上，过程则应该在“常规选项”对话框的“清理”选项中定义。

� 若要为菜单或菜单项指定命令

1.	在“提示”栏中单击相应的菜单标题或菜单项。

2.	在“结果”框中，选择“命令”。

3.	在“结果”框右侧的框中，键入正确的命令。

如果该命令调用了菜单的清理代码中的一个过程，请使用以下语法：

DO procname IN menuname

在上面的语法中，menuname 指定过程的位置，代表菜单文件名，并有 .MPR 的扩展名。如果 menuname 没有指定菜单的位置，而在该菜单的清理代码中有该过程的定义，则必须使用 SET PROCEDURE TO menuname.MPR 命令指定此过程的位置。


请参阅

菜单设计器

使用过程完成任务


使用过程完成任务

请参阅

可以为菜单或菜单项指定一个过程。指定过程的方式取决于菜单或菜单项是否有子菜单。

� 若要为不含有子菜单的菜单或菜单项指定过程

1.	请在“提示”栏中，单击相应的菜单标题或菜单项。

2.	在“结果”框中，选择“过程”。

3.	单击“创建”按钮或“编辑”按钮。

4.	在窗口中键入正确的代码。

� 若要为含有子菜单的菜单或菜单项指定过程

1.	请在“菜单级”框中，选择包含相应菜单或菜单项的菜单级。

2.	从“查看”菜单中，选择“菜单选项”菜单项。

3.	可以用下列方法之一指定一个过程：

 •	   在“过程”框中编写或调用过程。

— 或者 —

 •	   单击“编辑”按钮，然后再单击“确定”按钮，打开独立的编辑窗口并编写或调用过程。


请参阅

菜单设计器

使用命令完成任务


向菜单系统添加初始化代码

请参阅

向菜单系统添加初始化代码可以定制菜单系统。初始化代码可以包含创建环境的代码、定义内存变量的代码、打开所需文件的代码、以及使用 PUSH MENU 和 POP MENU 保存或恢复菜单系统的代码。

� 若要向菜单系统中添加初始化代码

1.	从“查看”菜单中选择“常规选项”。

Visual FoxPro 显示“常规选项”对话框。

2.	在“常规选项”对话框的“菜单代码”区域，选择“初始化”复选框。

3.	在初始化代码窗口中，键入适当的初始化代码。


请参阅

向菜单系统添加清理代码


向菜单系统添加清理代码

请参阅

向菜单系统添加清理代码可以减小菜单系统的大小。清理代码常包含一些代码，在初始时启用或废止菜单系统中的菜单或菜单项。

� 若要向菜单系统添加清理代码

1.	从“查看”菜单中，选择“常规选项”。

2.	在“常规选项”对话框的“菜单代码”区域，选择“清理”复选框。

3.	在清理代码窗口中，键入正确的清理代码。

提示

如果您设计的菜单是应用程序的主菜单，则应该在清理代码中包含 READ EVENTS 命令，并为退出菜单系统的菜单命令指定一个 CLEAR EVENTS 命令。


请参阅

向菜单系统添加初始化代码


测试与调试菜单系统

请参阅

在设计菜单系统时，可以预览整个菜单系统，而在生成菜单程序后则可以对系统进行测试和调试。

� 若要在设计菜单系统时预览整个系统

 •	   单击菜单设计器中的“预览”按钮。

� 若要测试菜单系统

1.	从“菜单”中，选择“生成”。

2.	在“生成菜单”对话框的“输出文件”框中键入生成的菜单程序的名称，或选择三点按钮。

3.	选择“生成”按钮，就会生成扩展名为 .MPR 的菜单程序文件。

4.	从“程序”菜单中，选择“执行”命令，运行此程序。


请参阅

分别测试各个组件

使用调试工具


定制菜单系统

请参阅

创建一个基本的菜单系统后，可以对它进行定制。例如，可以创建状态栏信息，定义菜单的位置，或定义默认过程

若要	请参阅
创建状态栏信息	显示状态栏信息
定位菜单标题	定义菜单标题的位置
定义默认过程	为菜单系统创建默认过程


请参阅

为菜单系统创建默认过程

显示状态栏信息


显示状态栏信息

请参阅

在选到一个菜单或菜单项时，可以在状态栏显示一些说明该菜单或菜单项的信息。这种信息可以帮助用户了解所选菜单的有关情况。

� 若要选择菜单或菜单项时显示信息

1.	请在“提示”栏中单击相应的菜单标题或菜单项。

2.	选择“选项”栏中的按钮，显示“提示选项”对话框。

3.	单击“信息”复选框。

4.	在“信息”框中，键入适当的信息。

提示

请用引号将字符串括起来。


请参阅

表达式生成器

菜单设计器

Message 事件


定义菜单标题的位置

请参阅

在应用程序中可以预先设置用户自定义菜单标题的位置。

� 若要为用户自定义的菜单标题指定相对位置

1.	从“查看”菜单中，选择常规选项。

2.	选择适当的“位置”选项：“替换”、“追加”、“在...之前”“在...之后”。

此时，Visual FoxPro 会重新排列所有菜单标题的位置。如果只想设置其中的几个，而并想全部重新设置，请在菜单设计器中将想要移动的菜单标题旁边的移动钮拖到正确的位置。

� 若要在对 OLE 进行可视编辑期间控制菜单标题位置

1.	在“提示”栏中，单击相应的菜单标题。

2.	选择“选项”栏中的按钮显示“提示选项”对话框。

3.	设置“菜单位置”复选框。

4.	选择下列某一选项按钮：

 •	   “无”，不把菜单标题放置在菜单栏上。选择“无”选项与不选择任何选项的效果相同。

 •	   “左”，把菜单标题放置在菜单栏上菜单标题组的左边。

 •	   “中”，把菜单标题放置在菜单栏上菜单标题组的中间。

 •	   “右”，把菜单标题放置在菜单栏上菜单标题组的右边。

如果选择了“无”选项，则当用户编辑 OLE 对象时，此菜单标题并不出现在菜单栏上。


请参阅

常规选项对话框

提示选项对话框


为菜单系统创建默认过程

请参阅

可以创建一个全局过程，应用于整个菜单系统。以后，如果选定一个没有指定过程的菜单，就运行此过程。

� 若要创建默认过程

1.	请打开正在设计的菜单系统。

2.	从“查看”菜单中，选择“常规选项”命令。

3.	选择下列操作，指定过程：

 •	   在“过程”框中编写或调用过程。

— 或者 —

 •	   单击“编辑”按钮，再单击“确定”按钮，打开独立的编辑窗口，编写或调用过程。


请参阅

常规选项对话框

使用过程完成任务


定义工具栏类

请参阅

要创建自定义工具栏，必须首先为它定义一个类。Visual FoxPro 提供了一个工具栏基类，在此基础上，您可以创建所需的类。

� 若要定义一个自定义工具栏的类

1.	从项目管理器中，选定“类”，然后选择“新建”按钮。

2.	在“类名”框中，键入新类的名称。

3.	从“派生于”框中，选择“工具栏”，以使用工具栏基类。

— 或者 —

单击三点按钮，选择其他工具栏类。

4.	在“存储于”框中，键入类库名，保存创建的新类。

— 或者 —

单击三点按钮选择一个已有的类库。

5.	在新建的工具栏类中添加对象。

可用下列操作定义工具栏类：

 •	   从“文件”菜单中选择“新建”命令，然后选择“类”。

 •	   使用 CREATE CLASS 或 MODIFY CLASS 命令。

 •	   用 DEFINE CLASS 命令以编程方式定义类。

提示

因为添加或移去控制时，工具栏的大小会做动态调整，所以如果在工具栏的 Destroy 方法中添加以下代码，可以更快地关闭工具栏：

THIS.Visible = .F.


请参阅

在表单集中添加自定义工具栏

在自定义工具栏类中添加对象

类设计器

定制 Visual FoxPro 工具栏

定义工具栏的操作

设置自定义工具栏的属性


在自定义工具栏类中添加对象

请参阅

创建好了一个自定义工具栏类后，便可以在其中添加对象，只要是 Visual FoxPro 支持的对象就可以。例如，可以从控制工具栏添加对象。

� 若要将控制工具栏上的对象添加到自定义工具栏类中

1.	请打开一个类库，其中应该包含了要添加对象的自定义工具栏类，打开这个类。

2.	从“控制”工具栏上，选择所要添加的对象。

3.	单击自定义工具栏，将对象放置在自定义工具栏上。

4.	重复执行步骤 2 和 3，直至完成自定义工具栏。

5.	如果需要的话，可以重新调整自定义工具栏上的对象。

6.	设置工具栏的属性。

7.	保存自定义工具栏类。

提示

设置工具栏按钮的 Picture 属性 可以给按钮添加位图或图标。

工具栏类设计完成后，只要将类设计器中的工具栏拖动到表单上，便可以在表单上创建一个工具栏。


请参阅

在表单集中添加自定义工具栏

定制 Visual FoxPro 工具栏

定义工具栏类

Picture 属性

设置自定义工具栏的属性


在表单集中添加自定义工具栏

请参阅

在定义一个工具栏类之后，便可以用这个类创建一个工具栏。可以用表单设计器或者用编写代码的方法将工具栏与表单对应起来。

若要	请参阅
定义一个工具栏类	定义工具栏类
协调工具栏和表单	在表单设计器中协调工具栏和表单
以编程方式协调工具栏	使用代码协调工具栏和菜单


请参阅

在自定义工具栏类中添加对象

在表单设计器中协调工具栏和表单

使用代码协调工具栏和菜单

定制Visual FoxPro工具栏

定义工具栏类

设置自定义工具栏的属性


在表单设计器中协调工具栏和表单

请参阅

可以在表单集中添加工具栏，让工具栏与表单集中的各个表单一起打开。但不能直接在某个表单中添加工具栏。

� 若要使用表单设计器在表单集中添加工具栏

1.	请先注册并选定包含工具栏类的类库。.

2.	打开要使用上述工具栏类的表单集，再从“控制”工具栏选择“查看类”，然后从显示的列表中选择该工具栏类。

3.	从“控制”工具栏中选择工具栏类。

4.	在表单设计器中单击，添加此工具栏，然后将工具栏拖动到适当的位置。

Visual FoxPro 将在表单集上添加工具栏，如果表单集尚未打开，Visual FoxPro 将提示您打开一个。

5.	为工具栏及其按钮定义操作。

提示

要确定某个对象的所属类，可以查看它的工具提示信息。


请参阅

将类添加到表单、表单集和工具栏中

在自定义工具栏类中添加对象

使用代码协调工具栏和菜单

定制 Visual FoxPro 工具栏

定义工具栏类

定义工具栏的操作

设置自定义工具栏的属性


使用代码协调工具栏和菜单
使用代码协调工具栏和表单

请参阅

除了使用表单设计器外，还可以使用代码在表单集中添加工具栏。

� 若要使用代码在表单集中添加工具栏

 •	   请在表单集的 Init 事件中，使用 SET PROCEDURE TO 命令，指定包含工具栏类的类库，然后在表单集中由此类创建工具栏。

例如，要添加并显示基于 inventory 类库中 printing 类的工具栏 tbrPrint，可以在表单集的 Init 事件中添加下列代码：

SET PROCEDURE TO inventory

THIS.AddObject("tbrPrint","printing")

tbrPrint.Show

附注

如果工具栏类没有定义工具栏及其按钮要执行的操作，那么您必须在与工具栏及其按钮相关的事件过程中定义操作。


请参阅

在自定义工具栏类中添加对象

在表单设计器中协调工具栏和表单

定制 Visual FoxPro 工具栏

定义工具栏类

定义工具栏的操作

设置自定义工具栏的属性


设置自定义工具栏的属性

请参阅

在设计自定义工具栏的同时，可以设置其属性，例如，可以设置 Movable 属性，以便允许用户移动工具栏。

此外，还可以使用方法和事件控制自定义工具栏。例如，可以使用 Dock 方法停放或移出工具栏，也可以使用 BeforeDock 事件和 AfterDock 事件控制工具栏停放前后所发生的活动。


请参阅

在表单集中添加自定义工具栏

在自定义工具栏类中添加对象

AfterDock 事件

BeforeDock 事件

定制 Visual FoxPro 工具栏

定义工具栏类

Dock 方法

Docked 属性

Movable 属性


定义工具栏的操作

请参阅

创建工具栏后，必须定义与工具栏及其对象相关的操作。例如，必须定义用户单击工具栏或其中某个按钮时所发生的活动。

� 若要定义工具栏的操作

1.	选定要定义操作的对象：工具栏或其中某个按钮。

2.	在属性窗口中，单击“方法”选项卡。

3.	编辑相应的事件。

4.	添加代码，指定操作。


请参阅

在表单集中添加自定义工具栏

在自定义工具栏类中添加对象

定制 Visual FoxPro 工具栏

定义工具栏类

设置自定义工具栏的属性


协调菜单和用户定义工具栏
协调菜单和用户自定义工具栏

请参阅

在创建包含菜单和工具栏的应用程序时，某些工具栏按钮与菜单项可能功能相同。工具栏使用户快速的实现某功能，常常靠图标来描述。菜单则可以提供键盘快捷键，易读的文字标题，且对习惯使用菜单的用户提供一种熟悉的访问方式。

在设计应用程序时应做到：

 •	   不论用户使用工具栏按钮，还是使用与按钮相关联的菜单项，都执行同样的操作。

 •	   相关的工具栏按钮与菜单项具有相同的可用或不可用属性。

当协调菜单和工具栏按钮时，请遵循如下步骤：

1.	创建工具栏，添加命令按钮，并将要执行的代码包括在对应于此命令按钮的 Click 事件的方法中。

2.	创建与之协调的菜单。

3.	添加协调的工具栏和菜单到一个表单集中。


请参阅

将相关的工具栏和菜单添加到表单集中

创建协调的菜单

定义工具栏类


创建协调的菜单

请参阅

如果将菜单与工具栏相协调，则菜单项执行与对应工具栏相同的任务，并在对应的工具栏按钮废止时，菜单项也自动地废止。

� 若要创建与工具栏相协调的菜单

1.	在菜单设计器中，根据工具栏上的每个按钮对应地创建子菜单。

2.	在每个子菜单项的“结果”栏，选择“命令”。

3.	对每个子菜单项，调用相关工具栏按钮的 Click 事件对应的代码。

例如，如果工具栏按钮的名字为 cmdA ，可以在子菜单项命令编辑框中添加如下代码:

Formset.toolbar.cmdA.Click

4.	在“选项”栏选择此按钮，打开提示选项对话框，选择“跳过”。

5.	在表达式生成器中输入表达式，指出当工具栏命令按钮失效时，菜单功能应该“跳过”。

例如，如果工具栏按钮的名称为 cmdA，可以输入如下表达式:

NOT formset.toolbar.cmdA.Enabled

6.	生成菜单。

7.	把菜单添加到拥有此工具栏的表单集中，并运行表单集。

当用户打开菜单时，Visual FoxPro 估算“跳过”条件的值，如果相关的工具栏命令不可用，则菜单也不可用。当用户选择菜单项时，则执行相关工具栏命令的 Click 事件代码。


请参阅

将相关的工具栏和菜单添加到表单集中

协调菜单和用户自定义工具栏

Click 事件

创建子菜单

表达式生成器

菜单设计器

提示选项对话框


将相关的工具栏和菜单添加到表单集中

请参阅

创建了协调工作的工具栏类和菜单之后，在表单集中协调它们就变得非常容易。

� 若要在表单集中加入协调的工具栏和菜单

1.	请用下列三种方法中的一种将工具栏添加到表单集中：

 •	   将工具栏类从项目管理器中拖入表单设计器.中。

 •	   注册工具栏类库并从“控制”工具栏中将工具栏添加到表单集中。

 •	   在表单集的 Init 事件中，包含 AddObject 方法代码，添加此工具栏。

2.	在表单集中的 Load 事件中，保存已有菜单，运行菜单程序。

例如，如果菜单名为 mymenu，可包含使用 PUSH MENU 和 DO 命令的如下代码：

PUSH MENU _MSYSMENU

DO mymenu.mpr

3.	在表单集中的 Unload 事件中，使用 POP MENU 命令恢复原有菜单：

POP MENU _MSYSMENU


请参阅

在控制工具栏上添加类库

AddObject 方法

协调菜单和用户自定义工具栏

创建协调的菜单

DO 命令

表单设计器

Init 事件

Load 事件

项目管理器

POP MENU 命令

PUSH MENU 命令

Unload 事件


复制和粘贴数据

请参阅

如果希望快速、简便地共享少量数据，而不希望共享整个文件，可以人工选择数据，将其剪切或复制下来，然后粘贴到任何地方。

提示

要共享全部文件，可链接或嵌入它们。

� 若要将其他应用程序的数据粘贴到通用字段中

1.	将数据复制到“剪贴板”中。

2.	打开并且浏览要向其通用字段粘贴数据的表。

3.	双击该通用字段。

4.	从“编辑”菜单中选择“粘贴”或“选择性粘贴”来嵌入数据。

  或者

先从“编辑”菜单中选择“选择性粘贴”，然后在“选择性粘贴”对话框中选择“粘贴链接”。

提示

当链接或嵌入时选择“以图标显示”复选框，可以节省磁盘空间。选中该复选框时，Visual FoxPro 将显示图标而不是数据。


请参阅

通用字段窗口

链接或嵌入数据

粘贴命令 (编辑菜单)

选择性粘贴命令 (编辑菜单)


创建邮件合并

请参阅

一种普通的共享数据方法是邮寄由存储在 Visual FoxPro 中的地址和存储在 Word 中的模板共同创建的信件。利用 Visual FoxPro，通过使用邮件合并向导，可以创建一个包含 Visual FoxPro 表数据的 Word 文档。

� 若要使用“邮件合并”向导

1.	从“工具”菜单中选择“向导”。

2.	从子菜单中选择“邮件合并”。

3.	按照向导中的提示进行操作。


请参阅

邮件合并向导


链接或嵌入数据

请参阅

在 Visual FoxPro 中，通过将数据链接或嵌入到应用程序中，您可以加入其他应用程序的数据，同时仍让那些应用程序维护这些数据。例如，您可以把一个 Word 文档链接或嵌入到一个通用字段，或者把一个 Excel 电子表格链接或嵌入到一个表单上。

链接和嵌入之间的区别在于数据的存放地点：

 •	   链接的数据存放在它的源文件，而不是 Visual FoxPro 表或表单中。表或表单仅存储源的位置，显示链接数据。在更改源文件时，链接的数据将被更新。链接的数据保持着与源文件之间的联系，除非人为断开这种联系。.

 •	   嵌入的数据仅存储在表或表单中。这些数据不与其源文件保持联系。如果源文件做了更改，它们不会反映在 Visual FoxPro 应用程序中。

提示

在以下情况下创建链接：数据或图形可能被更改，应用程序必须包含最新版本内容，源文件可以在计算机上或通过网络进行更新，或者源文件必须与其他应用程序共享。

在以下情况下嵌入数据或图形：应用程序不需要具有最新版本的内容，嵌入的数据不需要用于多个应用程序，或者源文件被链接后不能被更新。

请使用下面的规则来决定使用链接还是嵌入。

若要	请使用此方法	细节
创建的应用程序能在其他计算机上使用或者即使源文件不在时也能编辑。	嵌入数据	要编辑该数据，其源应用程序必须装入到计算机上。
包含不是永远可用的数据，比如存储在服务器上的数据。	嵌入数据	所有必要信息都包含在嵌入的数据中。
包含一个很大的文件，比如录像或声音片断。	创建与源文件的链接。	您的应用程序仅存储该链接，保持应用程序大小在可管理范围之内。
包含存在于源应用程序中的数据。	创建与源应用程序的链接。	您的应用程序反映对源应用程序所做的任何更改。
若要	请参阅
向表添加数据	向表中链接或嵌入数据
向表单添加数据	向表单链接或嵌入数据
修改与数据的链接	更改或断开与表中数据的链接 更改或断开与表单数据的链接
编辑链接的数据	编辑链接或嵌入的数据


请参阅

更改或断开与表中数据的链接

更改或断开与表单数据的链接

复制和粘贴数据

向表中链接或嵌入数据

向表单链接或嵌入数据

粘贴命令 (编辑菜单)

选择性粘贴命令 (编辑菜单)


向表中链接或嵌入数据

请参阅

通过将数据插入到通用字段中，可以把其他 Windows 应用程序中的数据加入 Visual FoxPro 表中。

� 若要将数据插入通用字段

1.	打开并浏览相应的表。

2.	双击要插入数据的通用字段。

3.	从“编辑”菜单中选择“插入对象”。

此时显示“插入对象”对话框，列出了可以插入的数据类型。

4.	要创建您自己的数据，应选择“创建新对象”，然后选择适当类型的数据。

 - 或者 -

要使用已有数据，选择“从文件中创建”选项按钮，然后键入包含数据的文件名，或者选择“浏览”并且选择适当文件。如果希望与文件链接，可选中“链接”复选框。


请参阅

复制和粘贴数据

插入对象 (编辑菜单)

向表单链接或嵌入数据


向表单链接或嵌入数据

请参阅

通过链接或嵌入 Word 文档或 Excel 电子表格，可以更好地设计表单。类似地，通过显示链接或嵌入的数据（来源于通用字段），也可以更好地设计报表。

� 若要向表单链接或嵌入数据

1.	创建或打开一个表单。

2.	在表单控制工具栏上选择“OLE 容器控制”按钮，并且在表单上拖动到一定大小。

此时显示“插入对象”对话框出现，列出可以链接或嵌入的文件类型。

3.	选择“创建新对象”来创建一个新文件。

  或者

选择“从文件中创建”来使用一个已有文件。键入包含所需数据的文件名或者选择“浏览”来选择适当的文件。另外，如果希望与该文件链接，可选中“链接”复选框。


请参阅

复制和粘贴数据

插入对象 (编辑菜单)

向表中链接或嵌入数据


更改或拆除与表中数据的链接
更改或断开与表中数据的链接

请参阅

使用“编辑”菜单上的“编辑链接”命令，可以更改或断开一个与通用字段中数据的链接。

� 若要更改与通用字段中数据的链接

1.	打开并浏览相应表。

2.	双击要更改其链接的通用字段。

3.	从“编辑”菜单中，选择“链接”命令。

此时显示“链接”对话框。

4.	在“链接”对话框中选择“更改源”。

“更改源”对话框出现。

5.	指定新数据源并且选择“确定”。

6.	在“链接”对话框中选择“关闭”，结束更改。

另外，如果希望嵌入而不是链接，必须断开与数据的链接。

� 若要断开与通用字段中数据的链接

1.	打开并浏览相应表。

2.	双击要断开其链接的通用字段。

3.	从“编辑”菜单中，选择“链接”命令。

4.	在“链接”对话框中选择“断开链接”。

5.	选择“关闭”。

当链接被断开后，数据转变成嵌入的。


请参阅

更改或断开与表单数据的链接


更改或拆除与表单数据的链接
更改或断开与表单数据的链接

请参阅

使用“编辑”菜单上的“链接”命令，可以更改或断开一个与表单数据的链接。

� 若要更改与表单数据的链接

1.	打开相应表单。

2.	选择要更改其链接的对象。

3.	从“编辑”菜单中选择“链接”。

4.	在“链接”对话框中选择“更改源”。

5.	在“更改源”对话框中指定新数据源并且选择“确定”。

6.	在“链接”对话框中选择“关闭”来结束更改。

� 若要断开与表单数据的链接

1.	打开相应表单。

2.	选择要断开其链接的对象。

3.	从“编辑”菜单中，选择“链接”命令。

4.	在“链接”对话框中选择“断开链接”。

5.	选择“关闭”。

断开链接后，链接的数据将变变嵌入的数据。


请参阅

更改或断开与表中数据的链接


显示表中链接或嵌入的数据

请参阅

在表单或报表上，可以显示一个表中通用字段内链接或嵌入的数据。例如，假设您有一个产品表，其中每条记录的通用字段中都含有一个有关产品信息的小册子（一种 Word 文档）。您可以在一个表单上显示记录中的选定信息，包括描述产品的小册子。

� 若要在表单上显示通用字段中的数据

1.	在表单设计器中，向表单添加一个 OLE 绑定型控制。

在表单上，Visual FoxPro 创建了一个对象，在运行时可以通过它查看数据。

2.	通过设置该对象的 ControlSource 属性指定包含数据的通用字段。

例如，如果表名是 Inventory 且通用字段名是 Current，那么把 ControlSource 属性设置为 Inventory.Current。

3.	在表单上，添加用于浏览通用字段的按钮或菜单命令。

� 若要在报表上显示通用字段中的数据

 •	   在该报表上添加通用字段。


请参阅

向报表中添加通用字段

ControlSource 属性

链接或嵌入数据


编辑链接或嵌入的数据

请参阅

在设计表或表单时，可以编辑表或表单内链接或嵌入的数据。不仅如此，还可以在运行表单时编辑表单内的数据。下面的过程描述了编辑数据的方法。

� 若要编辑一个表中的通用数据

1.	打开并浏览相应的表。

2.	转到包含该通用字段的记录。

3.	双击该通用字段来显示编辑窗口。

4.	在编辑窗口中双击，编辑数据。

� 若要在设计表单时编辑表单上的通用数据

1.	选择表示该数据的对象。

2.	用鼠标键指定该对象，单击鼠标右键。

3.	从快捷菜单中选择“编辑”。

� 若要在运行表单时编辑表单上的通用数据

1.	从“编辑”菜单中选择该对象。

例如，如果对象是一个 Excel 电子表格，从“编辑”菜单中选择“Spreadsheet 对象”。

2.	若要以可视方式编辑该对象，从子菜单中选择“编辑”。

  或者

若要在一个单独的窗口中编辑该对象，从子菜单中选择“打开”。

注意

如果您在运行表单时更改了某一对象内的数据，则仅当该数据是链接的或与一个 OLE 绑定型控制相关联时，Visual FoxPro 才保存所做的更改。与一个 OLE 容器控制相关联的更改不被保存。

如果您在 Visual FoxPro 窗口中进行编辑，所用应用程序的菜单将代替 Visual FoxPro 菜单或与其合并。例如，如果您正在使用 Excel，Excel 的“编辑”菜单将代替 Visual FoxPro 的“编辑”菜单。但是 Visual FoxPro 的“文件”、“程序”和“窗口”菜单不会被代替。


请参阅

链接或嵌入数据


用静态数据代替链接或嵌入的数据

请参阅

通过使用创建数据的应用程序，可以用独立的位图来代替链接或嵌入的数据。

� 若要用位图代替链接或嵌入的数据

1.	选择包含数据的对象，启动创建该数据的应用程序。

2.	在应用程序中，把对象复制到“剪贴板”上，然后退出该应用程序。

例如，如果应用程序有一个“复制图片”命令，可用它来复制对象。

3.	从 Visual FoxPro 的“编辑”菜单中选择“选择性粘贴”。

4.	在“选择性粘贴”对话框中，选择“粘贴选项”按钮。

5.	选择“图片”（元文件）选项。


请参阅

链接或嵌入数据


在 Visual FoxPro 中发送邮件

请参阅

如果是在 Windows NT 中安装 Visual FoxPro，那么可以从 Visual FoxPro 中发送邮件。

� 若要发送邮件

 •	   从“文件”菜单中选择“发送”。

这时电子邮件程序显示一个对话框，可以在其中书写并发送邮件。

附注

在 Windows 或 Windows for Workgroups 中“发送”命令不可用。

如果您拥有 Visual FoxPro 专业版，通过使用“MAPI 工作期控制”和“ MAPI 消息控制”可以从应用程序中发送邮件。


请参阅

复制和粘贴数据

创建邮件合并

链接或嵌入数据


在表中添加 OLE 对象

请参阅

当您为应用程序设计表时，应考虑表中是否需要 OLE 对象。假设您有一个雇员表，想要包含一些 Word 文档，其中含有对雇员的评估信息，这时就需要在表中定义一个通用型字段。然后，通过将文档链接或嵌入到通用型字段而将它们添加到表中。

� 若要在表中添加 OLE 对象

 •	   使用表设计器添加一个通用型字段，然后将 OLE 对象添加到每个记录中。

 — 或者 —

 •	   使用 APPEND GENERAL 命令。


请参阅

向报表中添加通用字段

在表单中添加 OLE 对象

通用字段类型

向表中链接或嵌入数据

OLE 绑定型控制


在表单中添加 OLE 对象

请参阅

使用表单设计器，可以向表单中添加可插入 OLE 对象和 OLE 控制。另外，可以使用 OLE 绑定型控制，显示通用型字段中的 OLE 对象。

� 若要在表单中添加可插入 OLE 对象

 •	   请使用表单设计器。

� 若要在表单中添加 OLE 控制

1.	在表单设计器中，向表单中添加一个 OLE 容器控制。

2.	在“插入对象”对话框中，选择“插入控制”选项。

3.	从显示的列表中选择适当的 OLE 控制。

如果所要的控制没有出现在列表中，可选择“添加控制”按钮将其添加到列表中。

也可以通过将 OLE 控制添加到“表单控制”工具栏中而将其添加到表单中。在选项对话框中选择控制之后，单击表单控制工具栏上的“查看类”按钮，从子菜单中选择“OLE 控制”，单击 OLE 控制按钮，然后拖动控制，在表单上设置其大小。

� 若要显示通用型字段中的 OLE 对象

1.	在表单设计器中，将一个 OLE 绑定型控制添加到表单中。

2.	通过设置对象的 ControlSource 属性指定包含数据的通用字段。

如果表名为 Inventory，通用型字段名为 Current，那么将 ControlSource 属性设置成 Inventory.Current。

3.	在表单上添加按钮或菜单命令，用以浏览 ControlSource 属性指定的通用型字段。

例如，将 Visual FoxPro SAMPLE\CONTROLS 目录下的可视类 BUTTONS.VCX 添加到表单中，然后保存该表单。当运行该表单时，按下按钮以查看通用型字段中的内容。


请参阅

在表中添加 OLE 对象

ControlSource 属性

向表单链接或嵌入数据

OLE 绑定型控制

OLE 容器控制


使用 OLE 对象的属性

请参阅

可以在代码中使用对象属性来操作对象。引用属性的方法取决于该对象是独立的还是容器，如 OLE 容器控制或 OLE 绑定型控制的一部分。

要确保引用的是对象属性而不是容器属性，就需要将容器的 Object 属性加到对象名当中。例如，下列代码引用对象的 Visible 属性。

frm1.olecontrol1.Object.Visible	 = .T.

如果省略 Object 属性，引用的就会是容器的 Visible 属性。

frm1.olecontrol1.Visible = .T.

除了使用容器控制的 Object 属性外，还可以使用控制的其他属性。例如，可以使用 OLEClass 属性来标识容器中的对象类型；使用 HelpContextID 属性 来引用“帮助”主题以说明对象；使用 Sizable 属性 来防止用户更改对象的大小，等等。


请参阅

HelpContextID 属性

OLEClass 属性

Sizable 属性

使用 OLE 对象的方法


使用 OLE 对象的方法

请参阅

除了设置和读取对象的属性外，还可以使用对象的方法来操作对象。例如，可以使用 Excel 对象的 Add 方法来创建一个 Excel 工作簿。

下面有关 OLE 自动化技术的示例使用了 Add 方法，来创建 Excel 工作簿，然后使用 Save 方法保存该工作簿，并使用 Quit 方法结束 Excel 的本次运行：

oleApp = CREATEOBJECT("Excel.Application")

oleApp.Visible=.T.

oleApp.Workbooks.Add

oleApp.Cells(1,1).Value=7

oleApp.ActiveWorkbook.SaveAs("C:\TEMP.XLS")

oleApp.Quit

与使用属性一样，如果用容器控制创建对象，应确保将“Object”加到引用对象方法的控制名称当中。

附注

对于某一应用程序所支持的方法的种类和数目，请参阅该程序的文档。一些方法可能会返回一个值，而另一些则不会。如果某一方法不返回值，而您将这样的方法赋给一个变量，那么这个变量会有一个“真”(.T.)值。

在调用一个对象的方法时不能使用命名参数。因为命名参数不固定，它们可以以任意顺序出现，并允许省略前面的可选参数。


请参阅

使用 OLE 对象的属性


访问成组的 OLE 对象

请参阅

一个对象类型可以代表单个对象或若干相关对象的集合。

在代码中，集合是一个未经排序的链表结构，每当有对象被添加到集合中或从集合中移去时，其余对象的位置都可能改变。使用集合的 Count 属性对集合遍历，可以访问集合中的对象。Count 属性用来返回集合中项的数目。另外，可以使用 Item 方法返回集合中的某一项。

例如，要显示 Excel 工作簿中的工作表名称，可使用下列代码：

oleApp = CREATEOBJECT("Excel.Application")

oleApp.Workbooks.Add

FOR nIndex = 1 to oleApp.Workbooks.Item(1).Sheets.Count

? oleApp.Workbooks.Item(1).Sheets.Item(nIndex).Name

ENDFOR

您也可以访问集合内的集合。例如，使用下列代码可以在一个单元格区域内访问某一单元格集合：

oleApp = CREATEOBJECT("Excel.sheet")

oleApp.Range(oleApp.Cells(1,1),oleApp.Cells(10,10)).Value=100


请参阅

Collection 和 Count 属性

使用 OLE 对象的数组


使用 OLE 对象的数组

请参阅

利用 OLE 技术，您不但可以将数组传递给方法，而且可以接收数组。但是，传递数组的方式必须是按引用传递，即必须在数组名前加 一 @ 符号。

例如，要发送一个 Visual FoxPro 数组到 Excel 中，可以使用以下代码。它先在 Visual FoxPro 中创建一个数组，给数组赋一些值，然后启动 Excel，创建一个工作簿，并给工作表的第一个单元格设置一个值，再将此值复制到数组中的其他工作表中：

DIMENSION aV(3)

aV(1) = "Sheet1"

aV(2) = "Sheet2"

aV(3) = "Sheet3"

oleApp=CREATEOBJECT("Excel.Application")

oleApp.Workbooks.Add

oleI=oleApp.Workbooks.Item(1)

oleI.Sheets.Item(1).Cells(1,1).Value = 83

oleI.Sheets(@aV).FillAcrossSheets(oleI.Worksheets("Sheet1").Cells(1,1))

oleApp.Visible = .T.

相应地，下列代码将一个数组返回到 Visual FoxPro，并显示数组的内容：

oleApp = CREATEOBJECT("Excel.Application")

aOleArray = oleApp.GetCustomListContents(3)

FOR nIndex = 1 to ALEN(aOleArray)

? aOleArray(nIndex)

ENDFOR

附注

用 Visual FoxPro 不能将二维以上的数组传递到 OLE 对象中。


请参阅

访问成组的 OLE 对象


创建程序

请参阅

Visual FoxPro 程序是包含一系列命令的文本文件。在 Visual FoxPro 中，可以通过以下途径创建程序：

� 若要创建程序

1.	在“文件”菜单中选择“新建”命令。

2.	在“新建”对话框中选择“程序”。

3.	选择“新文件”按钮。

 — 或者 —

 •	   在命令窗口中，键入：

MODIFY COMMAND。

Visual FoxPro 打开了一个称为“程序1”的新窗口，这时就可以键入应用程序了。


请参阅

命令窗口

MODIFY COMMAND

修改程序

新建 (文件菜单)

运行程序

保存程序


保存程序

请参阅

创建程序后，请注意保存。

� 若要保存程序

 •	   从“文件”菜单中选择“保存”命令。

若用户要关闭一个没有保存的程序，则会弹出相应对话框，提示用户是保存还是放弃已做出的修改。

若用户保存一个尚未命名的程序，则会打开“另存为...”对话框，提示用户为程序指定程序名。程序保存后，用户可运行或修改它。


请参阅

创建程序

修改程序

运行程序

保存 (文件菜单)


修改程序

请参阅

程序保存后可以修改。首先，按以下方式打开想要修改的程序：

� 若要打开程序

 •	   在“文件”菜单中选择“打开”命令，这时弹出一个包含文件列表的对话框。在“文件类型”列表框中选择“程序”，然后在“文件名称”列表中选定要修改的程序，按下“确定”按钮。

 — 或者 —

 •	   在命令窗口中按如下方式键入要修改的程序名。

MODIFY COMMAND myprogrm

 — 或者 —

 •	   在命令窗口中，键入：

MODIFY COMMAND ?

然后在文件列表中选择要修改的程序，单击“打开”按钮。

打开文件之后便可进行修改，修改完毕后请注意保存。


请参阅

创建程序

命令窗口

MODIFY COMMAND

运行程序

保存程序


运行程序

请参阅

程序创建之后便可运行。

� 若要运行程序

 •	   在“程序”菜单中选择“执行”菜单项。在程序列表中，选择想要运行的程序，单击“执行”按钮。

 — 或者 —

 •	   在命令窗口中，按如下方式键入要运行的程序名：

DO myprogrm


请参阅

命令窗口

创建程序

DO 命令

修改程序

保存程序


程序流的控制

请参阅

Visual FoxPro 中有一类特殊的命令，它们可以反复执行其他命令或函数，并决定这些命令和函数何时执行以及执行次数。这类特殊命令在程序设计过程中作用很大，可用来实现两种主要的程序结构：条件分支和循环。

若要	请参阅
选择两个命令序列其中的一个	条件分支
连续执行一个命令序列	循环


请参阅

条件分支

循环


条件分支

请参阅

条件分支根据条件的测试结果执行不同的操作。Visual FoxPro 中有两条命令实现条件分支：

 •	   IF ... ELSE ... ENDIF

 •	   DO CASE ... ENDCASE

若要判断多种可能的情况，DO CASE ... ENDCASE 结构将比用多个 IF 语句更有效，并且易于跟踪调试。


请参阅

程序流的控制

循环


循环

请参阅

循环结构可以按照需要任意次地重复执行一行或多行代码。在 Visual FoxPro 中有三种循环语句：

 •	   SCAN ... ENDSCAN

 •	   FOR ... ENDFOR

 •	   DO WHILE ... ENDDO

若对表中全部记录执行某一操作，可以使用 SCAN。随着记录指针的移动，SCAN 循环允许对每条记录执行相同的代码块。

若事先知道循环次数，则可以使用 FOR 循环。例如，已知表中的字段数（字段数可以用函数 FCOUNT( ) 得到），那么就可以用一个 FOR 循环打印表中的全部字段名。

FOR nCnt = 1 TO FCOUNT( )

? FIELD(nCnt)

ENDFOR

想要在某一条件满足时结束循环，可以使用 DO WHILE 语句。使用 DO WHILE 结构可以事先并不清楚循环的次数，但应知道什么时候结束循环的执行。


请参阅

条件分支

程序流的控制


使用过程和用户自定义函数

请参阅

过程和函数可以将常用代码集中在一起，供应用程序在需要时调用。这样做提高了程序代码的可读性和可维护性，使您可以不必对程序进行多次修改，只变动一个地方就足够了。

Visual FoxPro 的过程如下所示：

PROCEDURE myproc

* 本行为注释，但也可为可执行代码

ENDPROC

习惯上，过程是为完成某个操作而编写的代码，函数用来计算并返回一个值。在 Visual FoxPro 中，这二者区别不大。

FUNCTION myfunc

* 本行为注释，但也可为可执行代码

ENDFUNC

可以将过程和函数保存在单独的程序文件中，也可放在一般程序的底部，不能把可执行的主程序代码放在过程或函数之后。

若将过程或函数放在单独的程序文件中，可以在应用程序中使用 SET PROCEDURE TO 命令访问它们。例如，保存过程或函数的文件名为 FUNPROC.PRG，可在命令窗口中使用下面的命令调用它们：

SET PROCEDURE TO funproc.prg


请参阅

调用过程或函数

FUNCTION 命令

PROCEDURE 命令

接收函数的返回值

向过程或函数发送值

在过程或函数中校验参数


调用过程或函数

请参阅

在程序中有两种调用过程或函数的方式：

 •	   使用 DO 命令，例如：

DO myproc

 — 或者 —

 •	   在函数名前使用等号（=），并且在函数名后加上一对小括号，例如：

=myfunc( )

如果向过程或函数发送值或接收它们的返回值，则两种方式都可以加以扩展。


请参阅

= 命令

DO 命令

接收函数的返回值

向过程或函数发送值

在过程或函数中校验参数


向过程或函数发送值

请参阅

若要向过程或函数传递值，可以使用参数。例如，下面的过程接收一个参数：

PROCEDURE myproc( cString )

= MESSAGEBOX ("myproc" + cString)	&& 显示一个信息

ENDPROC

注释

在过程或函数定义行的括号中包含参数，表明该参数的作用域仅为该过程或函数，例如 PROCEDURE myproc (cString)。也可以使用 LPARAMETERS，让函数或过程来接收局部作用域的参数。

在函数中，参数以同样方式工作。要向函数或过程传递参数值，可以使用字符串或包含字符串的变量，如下表所示。

被传递的参数

代码	注释
DO myproc WITH cTestString DO myproc WITH "test string"	调用过程，并传递原义字符串或字符变量。
= myfunc("test string") = myfunc( cTestString )	调用函数，并传递原义字符串或字符变量的副本。
附注

在使用“=”调用过程或函数时，UDFPARMS 设置控制如何传递参数。在默认条件下，UDFPARMS 设置为 VALUE，即传递参数的副本。在使用 DO 命令调用过程或函数时，实际的参数被传递（以引用方式传递参数）。这时，在过程或函数运行过程中，参数值的任何变化都将反映到原始数据中，而与 UDFPARMS 状态无关。

可以向过程或函数传递多个参数，参数之间用逗号分开。例如，下面的过程有三个参数：日期、字符串和数字。

PROCEDURE myproc( dDate, cString, nTimesToPrint )

FOR nCnt = 1 to nTimesToPrint

? DTOC(dDate) + " " + cString + " " + STR(nCnt)

ENDFOR

ENDPROC

下面的代码将调用这个过程：

DO myproc WITH DATE(), "Hello World", 10


请参阅

调用过程或函数

接收函数的返回值

SET UDFPARMS

在过程或函数中校验参数


接收函数的返回值

请参阅

函数默认的返回值是“真”(.T.)，但可以使用 RETURN 命令返回任意值。例如，下面的函数返回比参数值晚两周的日期。

FUNCTION plus2weeks

PARAMETER dDate

RETURN dDate + 14

ENDFUNC

下面的代码将此函数的返回值保存在一个变量中：

dDeadLine = plus2weeks(DATE())

要保存和显示函数的返回值，如下表所示：

代码	注释
var = myfunc( )	将函数的返回值保存于变量中。
? myfunc( )	在活动输出窗口中打印函数的返回值。


请参阅

调用过程或函数

向过程或函数发送值

在过程或函数中校验参数


在过程或函数中校验参数
在过程或函数中检验参数

请参阅

检验发送的参数是否为过程或函数所要接收的数据是一种良好的设计习惯，TYPE( ) 和 PARAMETERS( ) 可以用来检验参数的类型和个数。

例如，上面提到的函数需要接收一个日期型参数，可以用 TYPE( ) 函数检验所接收的参数类型是否正确。

FUNCTION plus2weeks( dDate )

IF TYPE("dDate") = "D"

RETURN dDate + 14

ELSE

= MESSAGEBOX( "plus2weeks requires a date parameter" )

RETURN {}	&& 返回空日期

ENDIF

ENDFUNC

当过程所接收的参数多于所需要的个数时，Visual FoxPro 将产生一个错误信息。例如，如果您只列出了两个参数，却使用三个参数调用它，这时将会出错。但如果过程接收的参数个数小于所要求的数目，则 Visual FoxPro 仅将余下的参数赋初值为“假”(.F.)，而不产生出错信息，因为无法得知最后的参数是被置为“假”值，还是被忽略。下面的过程确认参数个数是否正确。

PROCEDURE SaveValue( cStoreTo, cNewVal, lIsInTable )

IF PARAMETERS( ) < 3

= MESSAGEBOX( "Insufficient Number of Parameters Passed" )

RETURN .F.

ENDIF

IF lIsInTable

REPLACE (cStoreTo) WITH (cNewVal)

ELSE

&cStoreTo = cNewVal

ENDIF

RETURN .T.

ENDPROC


请参阅

调用过程或函数

接收函数的返回值

向过程或函数发送值


数据类型和字段类型

请参阅

所有 Visual FoxPro 数据都有其所属的类型。类型就是对数据的允许取值以及这个值的范围进行的说明,如果用户明确指出正在使用的数据类型,Visual FoxPro 便能够高效地存储和处理这些数据。

变量和数组所允许的数据类型是全部 Visual FoxPro 数据类型的一个子集,其他数据类型只能用在表字段中。若要通过编程添加指定类型的字段,可用缩写字母指定数据类型。有关的详细内容,请参阅 CREATE TABLE  SQL 中 FieldType 的描述。

Visual FoxPro 数据类型

数据类型	说明	大小	范围
字符型	任意文本	每个字符指用一个字节,最多可有 254 个字符	任意字符
货币型	货币量	8 个字节	从  922337203685477.5808 到 922337203685477.5807
日期型	包含有年、月和日的数据	8 个字节	01/01/100 to 12/31/9999
日期时间型	包含有年、月、日和时间的数据	8 个字节	从 01/01/100 到 12/31/9999,加上从 00:00:00 a.m. 到 11:59:59 p.m.
逻辑型	“真”或“假”的布尔值	1 个字节	“真”(.T.) 或“假”(.F.)
数值型	整数或分数	在内存中占 8 个字节； 在表中占 1 至 20 个字节	从  .9999999999E+19 到 .9999999999E+20
Visual FoxPro 字段类型

字段类型	说明	大小	范围
双精度型	双精度浮点数	8 个字节	从 +/4.94065645841247E-324 到 +/1.79769313486232E308
浮点型	与数值型一样	在内存中占 8 个字节； 在表中占 1 至 20 个字节	从  .9999999999E+19 到 .9999999999E+20
通用型	OLE 对象引用	在表中占 4 个字节	只受可用内存空间限制
整型	整型值	4 个字节	从 2147483647 到 2147483646
备注型	数据块引用	在表中占 4 个字节	只受可用内存空间限制
字符型（二进制）	任意不经过代码页修改而维护的字符数据	每个字符用一个字节,最多可有 254 个字符	任意字符
备注（二进制）	任意不经过代码页修改而维护的备注字段数据	在表中占 4 个字节	只受可用内存空间限制


请参阅

ALTER TABLE - SQL 命令

字符数据类型

CREATE TABLE  SQL 命令

货币数据类型

日期数据类型

日期时间数据类型

双精度字段类型

浮点字段类型

通用字段类型

逻辑数据类型

备注字段类型

数值数据类型


字符数据类型

请参阅

当需要使用字母、数字、空格、符号以及标点时,请使用字符型数据。字符型字段或变量可以保存诸如姓名、地址和无需计算的数字等此类文本信息。有关此数据类型说明的详细内容,请参阅数据类型和字段类型表。

例如,象电话号码或邮政编码这类数据,虽然大部分为数字,但作为字符值保存会更有利于处理。


请参阅

字符操作符

CREATE TABLE  SQL 命令

创建字符表达式

数据类型和字段类型


货币数据类型

请参阅

在保存货币值时,请使用货币数据类型而不是数值类型。在货币表达式中如果小数位数超过四位,则 Visual FoxPro 将在处理表达式之前把它四舍五入至四位。有关此数据类型说明的详细内容,请参阅数据类型和字段类型表。

若要使用货币数据类型,请使用美元符：

money = $50.33

moremoney = $675.43886

在上例中,moremoney 变量将在内部四舍五入成 675.4389。


请参阅

CREATE TABLE  SQL 命令

数据类型和字段类型


日期数据类型

请参阅

可使用日期数据类型保存不带时间的日期值。日期型变量以“yyyymmdd”字符格式进行保存。有关此数据类型的详细内容,请参阅数据类型和字段类型表。

若要赋日期值,应将日期值放在花括号中：

dLastAppointment = {10/14/94}

若要指定空日期值,请使用一对花括号或在花括号中加一个空格或正斜杠。如下例所示：

STORE {} to dBlankdate0

STORE { } to dBlankdate1

STORE {/} to dBlankdate2

下列规则适用于日期型或日期时间型数据：

 •	{00:00:00AM} 等价于午夜 {12:00:00AM}。

 •	{00:00:00PM} 等价于中午 {12:00:00PM}。

 •	{00:00:00} 至 {11:59:59} 等价于 {12:00:00AM} 至 {11:59:59AM}。

 •	{12:00:00} 至 {23:59:59} 等价于 {12:00:00PM} 至 {11:59:59PM}。


请参阅

CREATE TABLE  SQL 命令

创建日期表达式

数据类型和字段类型

日期和日期时间操作符


日期时间数据类型

请参阅

在保存日期、时间或二者兼有时,请使用日期时间数据类型。日期时间值存储在含有两个四字节整数的 8 个字节中,第一个四字节整数保存日期,剩下的四字节整数保存时间。该时间从午夜起计算,以百分之一秒为最小计时单位,日期时间值可以包含完整的日期和时间,也可以只包含二者之一。若用户没有指明日期值,则 Visual FoxPro 用系统默认值 1899 年 12 月 30 日填入；若用户没有指明时间值,则 Visual FoxPro 用默认的午夜时间填入。有关此数据类型说明的详细内容,请参阅数据类型和字段类型表。

下列规则适用于日期型或日期时间型数据：

 •	   {00:00:00AM} 等价于午夜 {12:00:00AM}。

 •	   {00:00:00PM} 等价于中午 {12:00:00PM}。

 •	   {00:00:00} 至 {11:59:59} 等价于 {12:00:00AM} 至 {11:59:59AM}。

 •	   {12:00:00} 至 {23:59:59} 等价于 {12:00:00PM} 至 {11:59:59PM}。


请参阅

CREATE TABLE  SQL 命令

创建日期表达式

数据类型和字段类型

日期和日期时间操作符


双精度字段类型

请参阅

当表中需要存储精度较高、位数固定的数值,或者存储真正的浮点数值时,请使用双精度型数据代替数值型数据。有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

创建数值表达式

数值操作符


浮点字段类型

请参阅

包含此类型是为了提供兼容性,浮点数据类型在功能上等价于数值型。有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

CREATE TABLE  SQL 命令

创建数值表达式

数据类型和字段类型

数值操作符


通用字段类型

请参阅

可使用通用字段来保存 OLE 对象。通用字段包含一个 10 字节的引用,它指向该字段真正的内容：电子表格、字处理文档或用另一个应用程序创建的图片等。而通用字段的真正类型和数据大小取决于创建这些对象的 OLE 服务器,以及这些 OLE 对象是以链接方式还是以嵌入方式与该应用程序相联系。若链接 OLE 对象,则表中只含有对数据以及创建这些数据的应用程序的引用；若嵌入 OLE 对象,表中将含有相关数据的副本以及对创建这些数据的应用程序的引用。通用字段的大小仅受可用磁盘空间的限制。 有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

APPEND GENERAL 命令

CREATE TABLE  SQL 命令

数据类型和字段类型

通用字段窗口


整数字段类型

请参阅

如果对性能和表的存储空间要求严格,可使用整数字段类型保存整数信息。

因为整数字段类型在表中以二进制存储,且只占用 4 个字节的空间,所以,整数字段类型比其他任意类型所需的内存都少,而且二进制值不需要作 ASCII 转换。有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

CREATE TABLE  SQL 命令

创建数值表达式

数据类型和字段类型

数值操作符


逻辑数据类型

请参阅

在数据只包含两个值时,一种有效的存储方式便是使用逻辑数据类型。逻辑型数据只含有两个值：“真”(.T.) 或“假”(.F.)。有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

CREATE TABLE  SQL 命令

数据类型和字段类型

逻辑操作符


备注字段类型

请参阅

请使用备注字段类型存储数据块。备注字段含有一个 10 字节的引用,它指向真正的备注内容。备注型数据的真正大小取决于用户实际输入的数据量。表中记录的备注型字段数据保存在单独文件中,文件名与表名相同并且扩展名为 .DBT。备注字段仅受可用磁盘空间大小的限制。有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

CREATE TABLE  SQL 命令

数据类型和字段类型

MODIFY MEMO 命令


数值数据类型

请参阅

数值型数据用来表示数量。它包含数字 0—9,也可加上一个正负号或小数点。有关此数据类型的详细内容,请参阅数据类型和字段类型表。


请参阅

CREATE TABLE  SQL 命令

创建数值表达式

数据类型和字段类型

数值操作符


数据容器的作用域

请参阅

下表总结了不同数据容器作用域的差异：

容器	作用域	示例
常量	私有	#DEFINE ERRSTR Error!
变量	公共、私有或局部	Var = 7
数组	公共、私有或本地	ArrayName[1,1] = 'John Brown'
字段	永久存储,当保存此记录的表被打开时方可访问	REPLACE name WITH 'John Brown'
对象属性	通过对象和对象容器层次被引用	txtCustomer.Value = 'John Brown'


请参阅

数组

常量

字段

LOCAL 命令

对象

PRIVATE 命令

PUBLIC 命令

变量


常量

请参阅

常量是一个命名项,该项的值在整个操作过程中保持不变。例如： 值或 3.1415926535 是数值型常量,字母 A 是字符型常量。

� 若要给常量赋值

 •	   请使用 #DEFINE 预处理器命令。

#DEFINE TABLERR1 "此表不可用,请以后再用。"

� 若要释放已定义常量

 •	   请使用 #UNDEFINE 预处理器命令。

#UNDEF TABLERR1


请参阅

#DEFINE ... #UNDEF 预处理器命令


变量

请参阅	示例

变量是内存中的一个位置,它的值在程序操作过程中可变。变量可以是任意数据类型,并且您能在任何时候改变这些值。

若要创建变量,可以使用 STORE 命令或 =（等号）操作符给一个 Visual FoxPro 命名元素赋值。

只有在应用程序运行的时候或创建变量的 Visual FoxPro 工作期中,变量才存在。若要指明变量的作用域,请使用 LOCAL、PRIVATE 和 PUBLIC 关键字。


STORE 7 TO nVar

nVar = 7

FOR nInc = 1 TO 10

? nInc

ENDFOR

USE Customer

STORE Customer.Firstname TO cName


请参阅

= 命令

FOR ... ENDFOR 命令

LOCAL 命令

PRIVATE 命令

PUBLIC 命令

STORE 命令


数组

请参阅

数组由一系列被称为元素的有序数据值构成,可以用序号引用这些元素。因为数组存在于内存中,所以能够快速访问和方便处理。用户可以很容易地指定、定位或处理数组中的元素。

使用 DIMENSION 或 DECLARE 命令创建数组,并通过数组名和元素位置为数组元素赋值。

也可以使用 SCATTER、GATHER、COPY TO ARRAY 和 APPEND FROM ARRAY 命令在数组元素与字段之间移动值。


请参阅

APPEND FROM ARRAY 命令

COPY TO ARRAY 命令

DECLARE 命令

DIMENSION 命令

GATHER 命令

SCATTER 命令


字段

请参阅

字段是记录中拥有特定数据类型的命名位置。字段可以是 Visual FoxPro 允许的任意数据类型或字段类型。

命名字段在设计阶段由表设计器设置其数据类型,或者在运行时由 CREATE TABLE 命令来确定。


请参阅

CREATE TABLE  SQL 命令

记录


记录

请参阅

记录是表中的字段集合,记录最多可有 255 个字段,表中所有记录拥有相同的字段,并且同名字段在每个记录中的数据类型都相同。尽管记录之间字段的内容并不相同,但表中记录相应字段的大小都是一样的。

� 若要创建记录

 •	   请使用 INSERT - SQL 或 APPEND 命令。


请参阅

APPEND 命令

字段

INSERT - SQL


对象

请参阅

对象是类的实例,类是对于拥有数据和一定行为特性的对象集合的描述。Visual FoxPro 对象可以是表单、表单集或控制,可以利用对象来完成应用程序中需要一致性和依赖性的行为,减少代码量并提高代码可重用性。

� 若要创建对象

 •	   请使用表单设计器。

 — 或者 —

 •	   使用 CREATEOBJECT( ) 函数。


请参阅

CREATEOBJECT( ) 函数


操作符

请参阅

操作符用来处理同种类型的数据。Visual FoxPro 操作符按以下数据类型和函数进行分组。

 •	   字符操作符

 •	   日期和日期时间操作符

 •	   逻辑操作符

 •	   关系操作符

 •	   数值操作符


请参阅

字符操作符

日期和日期时间操作符

逻辑操作符

数值操作符

关系操作符


字符操作符

请参阅

可以使用 +、- 和 $ 字符操作符联接或比较字符型数据。下表按优先权列出了字符表达式操作符。

操作符	动作	代码
+	联接。将两个字符串,一个字符串和一个字段或一个字符串和一个内存变量联接起来。	? 'Good ' + 'morning'
-	联接。删除字段的尾部空格并将两个元素联接起来。	? customer.first - customer.last
$	比较。在一个字符表达式中寻找另一个字符表达式。	? 'father' $ 'grandfather' ? 'Main' $ customer.address


请参阅

$ 操作符

字符数据类型


日期和时间操作符

请参阅

下列操作符作用于日期和时间。

操作符	动作	代码
+	相加	tNewTime = tTime1 + nSeconds dNewDate = dDate1 + nDays
-	相减	nSeconds = tTime1 - tTime2 tNewTime = tTime1 - nSeconds dNewDate = dDate1 - nDays


请参阅

日期数据类型

日期时间数据类型


逻辑操作符

请参阅

下表按优先权列出逻辑操作符。

操作符	动作	代码
( )	分组子表达式	cVar AND (cVar2 AND cVAR3)
NOT, !	逻辑“非”	IF NOT cVarA = cVarB IF ! nVar1 = nVar2
AND	逻辑“与”	lVar0 AND lVar9
OR	逻辑“或”	lVarX OR lVarY


请参阅

BITAND( ) 函数

BITNOT( ) 函数

BITOR( ) 函数

BITXOR( ) 函数

关系操作符


关系操作符

请参阅

下表列出关系操作符。

操作符	动作	代码
<	小于	? 23 < 54
>	大于	? 1 > 2
=	等于	? cVar1 = cVar
<>, #, !=	不等于	? .T. <> .F.
<=	小于或等于	? {01/01/92} <= {01/01/92}
>=	大于或等于	? 32 >= nHisAge
==	字符串比较	? status == Open


请参阅

逻辑操作符


数值操作符

请参阅

下表按优先权列出了数值操作符。

操作符	动作	代码
( )	分组子表达式	(4-3) * (12/nVar2)
**, ^	乘幂	? 3 ** 2 ? 3 ^ 2
*, /	乘,除	? 2 * 7 ? 14 / 7
%	模运算（取余）	? 15 % 4
+, -	加,减	? 4 + 15


请参阅

% 操作符

货币数据类型

双精度字段类型

浮点字段类型

数值数据类型


Visual FoxPro 命名规则

请参阅

数据容器和一些命令与函数的参数需要名称。在 Visual FoxPro 中创建名称时,请注意下列规则：

 •	   只能使用字母、下划线和数字。

 •	   使用字母或下划线作为名称的开头。

 •	   名称可以是 1 至 254 个字符,但自由表的字段名和索引标识最多只能有 10 个字符。

 •	   避免使用 Visual FoxPro 的保留字。

文件的命名遵循操作系统的约定。


请参阅

创建名称表达式


创建字符表达式

请参阅

字符表达式由字符操作符和下列 Visual FoxPro 元素共同构成：

 •	   字符型字段。

 •	   返回字符值的函数。

 •	   含有字符数据的变量或数组元素。

 •	   称为原义字符串的字符常量。

您可以在字符串中嵌入引号,只需将字符串用另一种引号括起来。


请参阅

字符操作符


创建日期表达式

请参阅

日期表达式由日期操作符和下列 Visual FoxPro 元素共同构成：

 •	   日期或日期时间型字段。

 •	   返回日期或日期和时间的函数。

 •	   含有日期或时间的变量或数组元素。

 •	   日期或日期时间常量。

Visual FoxPro 将无效日期处理为空日期。


请参阅

日期操作符


创建数值表达式

请参阅

数值表达式由数值操作符与下列 Visual FoxPro 元素共同构成：

 •	   数值型字段。

 •	   返回数值型数据的函数。

 •	   含有数值型数据的内存变量或数组元素。

 •	   数值常量。


请参阅

数值操作符


创建逻辑表达式

请参阅

逻辑表达式由逻辑操作符和下列 Visual FoxPro 元素共同构成：

 •	   逻辑型字段。

 •	   返回逻辑值的函数。

 •	   含有逻辑值的变量或数组元素。

 •	   求值结果为逻辑值的表达式。

Visual FoxPro 按需要从左至右计算逻辑表达式。


请参阅

逻辑操作符


创建名称表达式

请参阅

许多 Visual FoxPro 命令和函数要求提供名称,尽管名称并非内存变量或数组元素,您也可以创建名称表达式,用这个名称表达式来替换字符型变量或数组元素的值。

将名称保存到变量或数组元素中时，可以用小括号括起该内存变量,将名称替换成命令或函数。若要使用名称列表,请用逗号将各个名称分隔开,名称并不是表达式、变量、数组元素或字段。名称不应以引号括起，否则，名称遵从 Visual FoxPro 命名规则

例如：REPLACE 命令需要一个字段名。可以将字段名保存于某变量中,并在 REPLACE 命令中凡是使用该字段名的地方均可使用名称表达式：

STORE 'city' TO cVarCity

REPLACE (cVarCity) WITH 'Paris'


请参阅

宏替换

Visual FoxPro 命名规则


宏替换

请参阅

可使用宏替换用内存变量替换名称。在使用宏替换时,将连字符 (&) 放在变量前,告诉 Visual FoxPro 将此变量值当作名称使用,并使用一个句号 (.) 来结束这个宏替换表达式。

例如,下面的语句打印“FoxPro”：

x = "Fox"

? "&x.Pro"


请参阅

创建名称表达式

使用命名表达式代替宏替换


处理用户自定义函数

请参阅

创建函数或过程时,请使用 FUNCTION 或 PROCEDURE 为它命名。在函数或过程头之下可以跟任意行语句,在带有参数的独立的 UDF 中使用 PARAMETERS 语句作为其第一行可执行代码来接收参数。在 UDF 的结尾以 RETURN 语句向调用程序返回值。可以将 UDFs 当作过程或函数来调用,并且最多可向 UDF 传递 24 个参数。


请参阅

调用函数

调用过程

FUNCTION 命令

PARAMETERS 命令

以值方式或引用方式传递参数

PROCEDURE 命令

RETURN 命令


调用过程

请参阅

� 若要调用过程

 •	   请使用 DO 命令,后面接过程名。

DO cMyUDF


请参阅

DO 命令

处理用户自定义函数


调用函数

请参阅

� 若要调用函数

 •	   使用 =（等于）操作符,后面跟函数名和包含在括号中传递给该函数的参数。

=cMyUDF()

=cMyUDF(p1,p2)

若在 UDF 中省略 RETURN 语句,默认返回值为“真”(.T.)。


请参阅

= 命令

RETURN 命令

处理用户自定义函数


以值方式或引用方式传递参数

请参阅

可以以引用方式或以值方式将变量或数组元素作为参数进行传递。若要修改传递给 UDF 的参数,并且返回这个改变过的值,则使用引用传递。若想让传递给 UDF 的参数的初始值保持不变,甚至 UDF 改变被传递参数值之后其初始值也不受影响,请使用值传递。

默认情况下,Visual FoxPro 以值传递方式向 UDFs 传递参数。对象总是按引用方式传递。


请参阅

以引用方式传递参数

以值方式传递参数

处理用户自定义函数


以引用方式传递参数

请参阅

可以使用 SET 命令将参数传递的方式设为引用。

� 若要按引用方式传递参数

 •	   在调用 UDF 之前,请键入下面的命令：

SET UDFPARMS TO REFERENCE

 — 或者 —

可使用 @ 符号以引用传递变量或数组,如下例所示：

? "UDF value: " + STR(plusone(@nX))


请参阅

以值方式传递参数

SET UDFPARMS 命令

处理用户自定义函数


以值方式
以值方式传递参数

请参阅

可以使用 SET 命令设置值传递方式。

� 若要按值方式传递参数

 •	   在调用 UDF 之前,请键入下面的命令：

SET UDFPARMS TO VALUE

 — 或者 —

 •	   可使用小括号以值方式传递变量或数组,如下例所示：

? 'UDF value: ' + STR(plusone((nX)))


请参阅

以引用方式传递参数

SET UDFPARMS 命令

处理用户自定义函数


处理字段和记录

请参阅

用户通过指明一个或多个含有目标数据的记录来访问字段数据,可以使用 GOTO 命令移动记录指针,使它指向指定的记录,也可以在命令中使用 Scope、FOR 或 WHILE 子句来一次访问若干记录的字段。

若要	请参阅
指定记录范围	Scope 子句
查找匹配逻辑条件的记录	FOR 子句
当逻辑条件为真时在记录上进行操作	WHILE 子句


请参阅

字段

FOR 子句

GOTO 命令

记录

Scope 子句

WHILE 子句


Scope 子句
Scope（作用域）子句

请参阅

若在 Visual FoxPro 命令中含有 Scope 子句,用户可以通过替换 Scope 为下表中的某个子句来指出这条命令的作用范围。

Scope 子句	影响
ALL	该命令将影响表中全部记录。
NEXT nExpr	该命令作用于从当前记录开始的连续若干个指定数目的记录。 下面的示例作用于当前记录以及之后的两个记录：
	REPLACE status WITH "open" NEXT 3
RECORD nNumber	该命令只影响指定记录号的记录。 下面的例子作用于第 5 号记录：
	REPLACE status WITH "open" RECORD 5
REST	该命令作用于从当前记录开始的表中全部剩余记录。 下面的例子将 null 值存储于表中剩余记录中。
	REPLACE status WITH .NULL. REST


请参阅

FOR 子句

REPLACE 命令

WHILE 子句


FOR 子句

请参阅

FOR 子句使命令作用于符合逻辑条件的每个记录上。FOR 子句有如下语法格式：

FOR cExpr

在下面的示例中,对于表中 total 字段小于 500 的全部记录,在 alert 字段中填入“low balance”。

REPLACE alert WITH "low balance" FOR total < 500

下表列出了可以使用 FOR 子句命令：

能使用 FOR 子句的命令
APPEND FROM ARRAY	COUNT	LIST
APPEND FROM	DEFINE PAD	LOCATE
AVERAGE	DELETE	RECALL
BLANK	DISPLAY	REPLACE FROM ARRAY
BROWSE	EXPORT	REPLACE
CALCULATE	FOR( )	REPORT
CHANGE	INDEX	SCAN...ENDSCAN
COPY TO ARRAY	JOIN	SORT
COPY TO	LABEL	SUM


请参阅

REPLACE 命令

Scope 子句

WHILE 子句


WHILE 子句

请参阅

WHILE 子句使命令作用于逻辑条件为“真”(.T.)的所有记录。一旦逻辑表达式为“假”(.F.),命令将立即停止运行而不考虑剩下的记录。它通常用在已对 WHILE 表达式中所包含的字段进行过排序或索引的表中。例如,在下面的示例中,对于一个已索引的表,先定位于第一个符合条件的记录,然后,REPLACE 命令作用在符合 WHILE 条件的那些记录上：

USE Mytable INDEX street

LOCATE FOR UPPER(street) = "MAIN"

REPLACE street WITH "Maine" WHILE UPPER(street) = "MAIN"

下表列出了可以使用 WHILE 子句的命令。

可使用 WHILE 子句的命令
AVERAGE	COUNT	RECALL
BLANK	DELETE	REPLACE
BROWSE	DISPLAY	REPLACE FROM ARRAY
CALCULATE	EXPORT	REPORT
CHANGE	LABEL	SCAN ... ENDSCAN
COPY TO ARRAY	LIST	SORT
COPY TO	LOCATE	SUM


请参阅

LOCATE 命令

REPLACE 命令


处理数组

请参阅

数组提供了一种快速排序信息的方法。如果信息保存在数组中,便可以很方便地对其进行检索、排序或进行其他的数据操作。若要存入或取出保存在数组中的信息,请将数据传送至表或从表中传出数据。

Visual FoxPro 对数组的大小和数据类型不作任何限制,对数组大小的唯一限制条件就是可用内存空间的大小,与表不同,当应用程序结束时数组将不复存在。


请参阅

将数据从表传送至数组

将数据从数组传送至表


将数据从表传送至数组

请参阅

下面的 Visual FoxPro 命令将数据从表传送至数组：

 •	   SCATTER 将一个表记录数据传送至数组。

 •	   COPY TO ARRAY 将一系列记录中的数据传送至数组。

 •	   SELECT - SQL 可以传输查询结果 到数组中。


请参阅

COPY TO ARRAY 命令

SCATTER 命令

SELECT - SQL 命令

将数据从数组传送至表


将数据从数组传送至表

请参阅

下列 Visual FoxPro 命令将数据从数组传送至表：

 •	   GATHER 将数组中的数据传送至表中的一个记录。

 •	   APPEND FROM ARRAY 在表中添加新记录,并用数组中的数据填充这些新增的记录。

 •	   INSERT - SQL 向表中增添一条新记录,并以数组中的数据填充这条记录。


请参阅

APPEND FROM ARRAY 命令

GATHER 命令

INSERT - SQL 命令

将数据从表传送至数组


数组和 SELECT - SQL

请参阅	示例

若要将 SELECT - SQL 的查询结果发送给数组,请指定 INTO ARRAY 子句和数组名。若数组不存在,则自动创建一个数组。若数组已经存在,则自动改变维数以容纳查询结果。


SELECT DISTINCT a.cust_id, a.company, b.amount ;

FROM customer a, payments b ;

WHERE a.cust_id = b.cust_id INTO ARRAY results

DISPLAY MEMORY LIKE results


请参阅

SELECT - SQL 命令


处理类和对象

请参阅

Visual FoxPro 为使用对象进行程序设计提供了两种特殊的操作符：点操作符 (.) 和作用域操作符 (::)。同时 Visual FoxPro 也补充了一些命令,您可以用这些命令定义类,并在类中创建或增添对象。

操作符,命令,函数	说明
.  (点操作符)	确定对象与类的关系,以及属性、事件和方法与其对象的从属关系。
:: （作用域操作符）	在子类中调用父类的方法。
CREATEOBJECT( )	从类或子类或 OLE 对象中创建对象。
DEFINE CLASS ADD OBJECT	创建类定义。 在设计阶段添加一个基于已存在的类或其子类的对象。
GETOBJECT( )	返回 OLE 对象。


请参阅

:: 作用域操作符

CREATEOBJECT( ) 函数

DEFINE CLASS 命令

GETOBJECT( ) 函数


处理 Null 值

请参阅

Visual FoxPro 支持 null 值。

Null 值具有以下特点：

 •	   等价于没有任何值。

 •	   与 0、空字符串(“”)或空格不同。

 •	   排序优先于其他数据。

 •	   在计算过程中或大多数函数中都可以用到 null 值。

Null 值会影响命令、函数、逻辑表达式和参数的行为。

若要在下列情况中使用 null 值	请参阅
命令和函数	在命令和函数中 Null 值的行为
表达式	在逻辑表达式中 Null 值的行为
参数	使用 NULL 作为参数


请参阅

在逻辑表达式中 Null 值的行为

在命令和函数中 Null 值的行为

EMPTY( ) 函数

ISBLANK( ) 函数

ISNULL( ) 函数

使用 NULL 作为参数


在命令和中 null 值的行为
在命令和函数中 null 值的行为

请参阅

下表说明了命令和函数对 null 值的解释。

数据类型	行为
逻辑型	大多数产生 .NULL. 结果的逻辑表达式返回 .NULL.,或产生一个错误信息。EMPTY( ),ISBLANK( ) 和 ISNULL( ) 除外。
数值型	产生 .NULL. 结果的数值表达式将返回 .NULL. ，参数中含有 Null 值的数值型函数结果将为 .NULL. 。
日期型	含有 Null 值的日期表达式将返回 .NULL. 。


请参阅

日期数据类型

EMPTY( ) 函数

ISBLANK( ) 函数

ISNULL( ) 函数

逻辑数据类型

处理 Null 值

数值数据类型


在逻辑表达式中 null 值的行为

请参阅

大多数情况下,在表达式中 null 值不变。下表说明了在逻辑表达式中 null 值的行为。

逻辑表达式	x=TRUE 时的结果	x=FALSE 时的结果	x=.NULL. 时的结果
x AND .NULL.	.NULL.	假	.NULL.
x OR .NULL.	真	.NULL.	.NULL.
NOT x	假	真	.NULL.
在条件表达式中若遇到 null 值,该条件表达式为“假”,因为 .NULL. 非“真”(.T.)。例如,结果为 .NULL. 的 FOR 子句 被当作“假”(.F.)值看待。请注意在整个表达式计算过程中 null 值被看作 .NULL. 。


请参阅

FOR 子句

处理 Null 值


使用 NULL 作为参数

请参阅

下面的通用规则适用于传递给命令和函数的 null 值：

 •	   给命令传递 null 值将产生错误。

 •	   接受 .NULL. 为有效参数的函数其结果亦为 .NULL. 。

 •	   若向本应接收数值型参数的函数传递 .NULL. 值参数,将产生错误。

 •	   当传递 null 值时,ISBLANK( )、ISDIGIT( )、ISLOWER( )、ISUPPER( )、ISALPHA( ) 和 EMPTY 返回“假”(.F.),而 ISNULL( ) 返回“真”(.T.)。

 •	   INSERT  SQL 和 SELECT  SQL 命令通过 IS NULL 和 IS NOT NULL 子句处理 null 值。在这种情况下,INSERT、UPDATE 和 REPLACE 将 null 值放入记录中。

 •	   SQL 合计函数将忽略 null 值。

 •	   若所有值皆为 null，则 Visual FoxPro 合计函数产生 .NULL. ,否则任何 null 值将被忽略。


请参阅

EMPTY( ) 函数

INSERT  SQL 命令

ISALPHA( ) 函数

ISBLANK( ) 函数

ISDIGIT( ) 函数

ISLOWER( ) 函数

ISNULL( ) 函数

ISUPPER( ) 函数

REPLACE 命令

SELECT  SQL 命令

SQL 命令概述

UPDATE 命令


使用宏

请参阅

如果重复某些键击，或者想为用户自动完成某些击键任务，可以使用宏对话框将这些键击记录并保存在宏中。

附注

要使用宏，使用的键盘必须有功能键 F1 到 F9，以及 CTRL 键或 ALT 键。

� 要访问宏对话框

 •	   从“工具”菜单中选择“宏”。

在宏对话框中可以：

 •	   录制宏

 •	   编辑宏

 •	   清除宏定义

 •	   创建、保存和恢复宏集

 •	   设置默认宏集


请参阅

CLEAR 命令

清除宏定义

创建、保存和恢复宏集

编辑宏

宏 (工具菜单)

ON KEY LABEL 命令

PLAY MACRO 命令

录制宏

RESTORE MACROS 命令

SAVE MACROS 命令

SET FUNCTION 命令

设置默认宏集


录制宏

请参阅

可以通过宏对话框录制 Visual FoxPro 的键击宏。

� 要录制宏

1.	在“宏”对话框中选择“录制”。

2.	按要定义的键或键入键组合。

3.	输入宏名或接受默认宏名，然后选择“确定”。

Visual FoxPro 开始记录每一键击。

附注

宏名不能包含空格。

� 要停止录制宏

1.	按 SHIFT+F10 键。

2.	在停止录制宏对话框中，选择下列某一操作：

 •	   要保存录制的宏，选择“确定”。

 •	   要继续录制，选择“继续”。

 •	   要放弃宏，选择“放弃”。

 •	   要插入原义键击（键的原义而不是任何当前指定给它的意义），选择“插入原义”。

 •	   要插入暂停，先选择“暂停秒数”，输入时间值后再选择“插入暂停”。


请参阅

宏 (工具菜单)

ON KEY LABEL 命令

SET FUNCTION 命令

停止记录宏对话框


清除宏定义

请参阅

可以通过宏对话框清除键的宏定义。

� 要清除宏定义

 •	   在“宏”对话框中，从“宏”列表中选择宏然后选择“清除”。

附注

如果清除了默认的宏定义，恢复它的唯一方法是重新定义每一个默认的宏。

功能键的默认定义

键	函数
F2	SET
F3	LIST
F4	DIR
F5	DISPLAY STRUCTURE
F6	DISPLAY STATUS
F7	DISPLAY MEMORY
F8	DISPLAY
F9	APPEND


请参阅

APPEND 命令

CLEAR 命令

DIR 命令

DISPLAY 命令

DISPLAY MEMORY 命令

DISPLAY STATUS 命令

DISPLAY STRUCTURE 命令

宏 (工具菜单)

LIST 命令

SET 命令


编辑宏

请参阅

可以通过宏对话框编辑已有的宏。

� 要编辑宏

1.	从宏对话框的“宏”列表中选择宏，然后选择“编辑”。

2.	修改宏内容。

3.	选择“确定”。


请参阅

CLEAR 命令

宏 (工具菜单)

SET FUNCTION 命令


创建、保存和恢复宏集
创建、保存和还原宏集

请参阅

宏集保存一系列键定义和它们的相关宏，保存在扩展名为 .FKY 的文件中。可以通过宏对话框来创建宏集。

� 要创建宏集

1.	从“宏”对话框中创建单个键宏。

2.	选择“保存”。

3.	在“保存宏”框中，输入宏集名然后选择“保存”。

� 要还原宏集

1.	从“宏”对话框中选择“还原”。

2.	选择宏集文件名后选择“确定”。


请参阅

CLEAR 命令

宏 (工具菜单)

RESTORE MACROS 命令

SAVE MACROS 命令


设置默认宏集

请参阅

启动 Visual FoxPro 时，默认的宏集即存在。通过“宏”对话框可以创建并设置自已的默认宏集。

� 要设置默认宏集

1.	在宏对话框中，创建或恢复宏集。

2.	选择“设置为默认”。


请参阅

创建、保存和恢复宏集

宏 (工具菜单)

RESTORE MACROS 命令


变量命名约定

请参阅

根据该建议格式命名变量。

语法

[Scope]TypeName

参数

Scope

可选，指定变量的引用范围。例如，局部变量只能在定义它的过程中引用，公共变量可以在应用程序的任何地方访问，Scope 的选项有：

范围	说明	示例
l	局部	lnCounter
p	私有（默认值）	pnStatus
g	公有（全局）	gnOldRecno
t	参数	tnRecNo
Type

指定变量的数据类型。Type 的选择有：

类型	说明	事例
a	数组	aMonths
c	字符	cLastName
y	贷币	yCurrentValue
d	日期	dBirthDay
t	日期时间	tLastModified
b	双精度型	bValue
f	浮点型	fInterest
l	逻辑型	lFlag
n	数值型	nCounter
o	对象	oEmployee
u	未知	uReturnValue
说明

建议使用范围前辍，但这不是必需的。在有些情形中，明显的范围并不起作用。例如，在独立应用程序的主程序中，被定为 PUBLIC 或 PRIVATE 的变量没有明显的区别。类型前辍总是实用的，并且在示例程序中是必需的。


请参阅

常量命名约定

对象命名约定

表字段命名约定

Visual FoxPro 命名规则

窗口命名约定


对象命名约定

请参阅

根据该建议格式命名对象。

语法

PrefixName

Prefix 的选择有：

前辍	对象	事例
chk	复选框	chkReadOnly
cbo	组合框	cboEnglish
cmd	命令按钮	cmdCancel
cmg	命令组	cmgChoices
cnt	容器	cntMoverList
ctl	控制	ctlFileList
<user-defined>	定制	user-defined
edt	编辑框	edtTextArea
frm	表单	frmFileOpen
frs	表单集	frsDataEntry
grd	表格	grdPrices
grc	列	grcCurrentPrice
grh	标头	grhTotalInventory
img	图像	imgIcon
lbl	标签	lblHelpMessage
lin	行	linVertical
lst	列表框	lstPolicyCodes
olb	OLE 绑定型控制	olbObject1
ole	OLE	oleObject1
opt	选项按钮	optFrench
opg	选项组	opgType
pag	页	pagDataUpdate
pgf	页框	pgfLeft
sep	分隔符	sepToolSection1
shp	形状	shpCircle
spn	微调	spnValues
txt	文本框	txtGetText
tmr	计时器	tmrAlarm
tbr	工具栏	tbrEditReport


请参阅

常量命名约定

表字段命名约定

变量命名约定

Visual FoxPro 命名规则

窗口命名约定


表字段命名约定

请参阅

根据该建议格式命名表中字段。建议使用这些约定，但不是必须的。

语法

Alias.TypeName

参数

Type

指定表中字段的数据类型，Type 的选择有：

类型	说明	事例
c	字符	Customer.cLastName
d	日期	Customer.dBirthDay
t	日期时间	Customer.tLastMod
b	双精度型	Customer.bRate
f	浮点型	Customer.fValue
g	通用型	Customer.gPicture
l	逻辑型	Customer.lSellMail
m	备注	Customer.mComments
y	贷币	Customer.yYearTDate
n	数值型	Customer.nItems
i	整型	Customer.iCustID


请参阅

常量命名约定

对象命名约定

变量命名约定

Visual FoxPro 命名规则

窗口命名约定


常量命名约定

请参阅	示例

根据该建议的格式命名常量。

语法

NAME

说明

常量要大写。


#DEFINE MAX_VALUE 10


请参阅

对象命名约定

表字段命名约定

变量命名约定

Visual FoxPro 命名规则

窗口命名约定


窗口命名约定

请参阅	示例

根据该建议的格式命名窗口。

语法

wName

说明

在类定义上不要使用前辍；仅对类的示例对象才能使用前辍。


DEFINE WINDOW wCustomerInvoices ;

FROM nFirstRow, nFirstColumn TO nLastRow, nLastColumn


请参阅

常量命名约定

对象命名约定

表字段命名约定

变量命名约定

Visual FoxPro 命名规则


Visual FoxPro 和其它编程语言

请参阅

大多数编程语言具有相似的基本特征。如果熟悉一种编程语言就可以很容易地将这种编程语言的知识应用到其它编程语言中。选择下面各项可以看到 Visual FoxPro 同 BASIC、C/C++、和 Pascal 等的比较。

要比较	请参阅
编程语言是否区分大小写	区分大小写
如何声明变量	变量说明
如果在程序中插入注释	注释
如何把值保存到变量中去	赋值语句
IF 语句的结构	IF 语句
CASE 语句的结构	CASE 语句
FOR 循环的结构	FOR 循环
WHILE 循环的结构	WHILE 循环
如何以传值方式传递参数	以值的形式传递参数
如何以引用方式传递参数	以引用的方式传递参数


请参阅

赋值语句

区分大小写

CASE 语句

注释

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


区分大小写

请参阅

Visual FoxPro 和 BASIC 都是不区分大小写的编程语言。

Visual FoxPro	BASIC
不区分大小写	不区分大小写
Pascal	C/C++
区分大小写	区分大小写


请参阅

赋值语句

CASE 语句

注释

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


变量说明

请参阅

当把值保存到变量而该变量不存在时，Visual FoxPro 隐含地声明它。这种情况对于需要明确声明变量的编程语言来说会产生错误。

Visual FoxPro	BASIC
隐含声明变量	可以隐含声明声量
Pascal	C/C++
必须明确声明变量	必须明确声明变量


请参阅

赋值语句

区分大小写

CASE 语句

注释

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

WHILE 循环


注释

请参阅

每种编程语言都有它自已的在程序中添加注释的格式。Visual FoxPro 对整行注释和行中部分注释有不同的格式。

Visual FoxPro	BASIC
* 整行注释 使用 && 结束行	' 注释
Pascal	C/C++
{ 注释 }	// 注释


请参阅

赋值语句

区分大小写

CASE 语句

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


赋值语句

请参阅

Pascal 需要在赋值语句中加冒号。

Visual FoxPro	BASIC
nVal = 7	nVal = 7
Pascal	C/C++
nVal := 7	nVal = 7
附注

在 Visual FoxPro 中，也可以使用 REPLACE 命令给表中的字段赋值。


请参阅

区分大小写

CASE 语句

注释

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


IF 语句

请参阅

各种编程语言都提供相等的 IF 功能。

Visual FoxPro	BASIC
IF nCnt < nMax  nTot = nTot * nCnt  nCnt = nCnt + 1 ENDIF	If nCnt < nMax Then  nTot = nTot * nCnt  nCnt = nCnt + 1 End If
Pascal	C/C++
if nCnt < nMax then  begin   nTot:=nTot * nCnt;   nCnt:=nCnt + 1;  end	if(nCnt < nMax) {  nTot *= nCnt;  nCnt++;  }


请参阅

赋值语句

区分大小写

CASE 语句

注释

FOR 循环

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


CASE 语句

请参阅

只有 Pascal 语言在 CASE 语句中不提供默认语句。

Visual FoxPro	BASIC
DO CASE  CASE n = 0   ? 'Zero'  CASE n > 0   ? 'Pos'  OTHERWISE   ? 'Neg' ENDCASE	Select Case n  Case 0   Print 'Zero'  Case Is > 0   Print 'Pos'  Case Else   Print 'Neg' End Select
Pascal	C/C++
case n of  0: writeln("Zero");  1: writeln("One"); end	switch(n) {  case 0:   printf("Zero\n");   break;  case 1:   printf("One\n");   break;  default:   printf("?\n");}


请参阅

赋值语句

区分大小写

注释

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


FOR 循环

请参阅

每种编程语言都提供 FOR 语句; C/C++ 具有最灵活的 for 表达式。

Visual FoxPro	BASIC
FOR n = 1 TO 10  ? n ENDFOR	For n = 1 to 10  Print n Next n
Pascal	C/C++
for n := 1 to 10 do   writeln(n);	for(n=1; n<11; n++)  printf("%d\n",n);


请参阅

赋值语句

区分大小写

CASE 语句

注释

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明

WHILE 循环


WHILE 循环

请参阅

每种编程语言都提供相等的 WHILE 循环功能。

Visual FoxPro	BASIC
DO WHILE n < 100  n = n + n ENDDO	While n < 100  n = n + n Wend
Pascal	C/C++
while n < 100 do  n := n + n;	while(n < 100)  n += n;


请参阅

赋值语句

区分大小写

CASE 语句

注释

FOR 循环

IF 语句

以引用的方式传递参数

以值的形式传递参数

变量说明


以值的形式传递参数
以值传递方式传递参数

请参阅

每种编程语言都允许以传值的方式传递参数。

Visual FoxPro	BASIC
=ABC(X)	ABC ByVal X
Pascal	C/C++
procedure ABC (x:integer);	ABC(X);


请参阅

赋值语句

区分大小写

CASE 语句

注释

FOR 循环

IF 语句

以引用的方式传递参数

变量说明

WHILE 循环


以引用的方式传递参数
以引用传递方式传递参数

请参阅

在 Visual FoxPro 中可以用两种方法以引用传递方式传递参数。

Visual FoxPro	BASIC
=ABC(@X) DO ABC WITH X	ABC X
Pascal	C/C++
procedure ABC  var x:integer);	ABC(&VAR);


请参阅

赋值语句

区分大小写

CASE 语句

注释

FOR 循环

IF 语句

以值的形式传递参数

变量说明

WHILE 循环


Visual FoxPro 基类

请参阅

从下述 Visual FoxPro 基类中，可以派生子类或创建对象。

Visual FoxPro 基类
复选框	编辑框	列表框	形状
列1	表单	OLE 绑定型控制	微调
命令按钮	表单集	OLE 容器控制	文本框
命令组	表格	选项按钮1	计时器
组合框	标头1	选项组	工具栏
容器	图象	页面1
控制	标签	页框
自定义	线条	分隔符1
1 这些类是父容器的集成部分，在类设计器中不能子类化。


请参阅

基类最小事件集合

基类最小属性集合

复选框控制

列对象

命令按钮控制

命令组控制

组合框控制

容器对象

容器类

控制对象

自定义对象

编辑框控制

表单对象

表单集对象

表格控制

标头对象

图象控制

标签控制

线条控制

列表框控制

OLE 绑定型控制

OLE 容器控制

选项按钮控制

选项组控制

页面对象

页框控制

分隔符对象

形状控制

微调控制

文本框控制

计时器控制

工具栏对象


基类事件的最小集合

请参阅

所有 Visual FoxPro 基类有如下的最小事件集。

事件	说明
Init	当对象创建时激活。
Destroy	当对象从内存中释放时激活。
Error	当类中的事件或方法过程中发生错误时激活。


请参阅

基类最小属性集合

Destroy 事件

Error 事件

Init 事件

核心事件

Visual FoxPro 基类


基类属性的最小集合

请参阅

所有Visual FoxPro 基类有如下的最小属性集。

属性	说明
Class	该类属于何种类型。
BaseClass	该类由何种基类派生而来，例如 Form、Commandbutton 或 Custom 等
ClassLibrary	该类从属于哪种类库。
ParentClass	对象所基于的类。若该类直接由 Visual FoxPro 基类派生而来，则 ParentClass 属性值与 BaseClass 属性值相同。


请参阅

BaseClass 属性

基类最小事件集合

Class 属性

ClassLibrary 属性

ParentClass 属性

核心事件

Visual FoxPro 基类


容器类

请参阅

容器类可以包含其他对象，并且允许访问这些对象。

下表列出了每种容器类所能包含的对象。

容器	能包含的对象
命令按钮组	命令按钮
容器	任意控制
控制	任意控制
表单集	表单、工具栏
表单	页框、任意控制、容器或自定义对象
表格列	标头对象以及除表单、表单集、工具栏、计时器和其他列对象以外的任意对象
表格	表格列
选项按钮组	选项按钮
页框	页面
页面	任意控制、容器和自定义对象
工具栏	任意控制、页框和容器


请参阅

Collection 和 Count 属性

Visual FoxPro 基类

命令组控制

容器对象

控制对象

表单集对象

表单对象

表格控制

选项组控制

页框控制

页面对象

工具栏对象


设置属性

请参阅

既可以在运行时、也可以在设计时进行属性设置。

� 若要设置属性

 •	   请使用以下语法：

Parent.Object.Property = Value

例如，下列语句设置 frmPhoneLog 表单中 txtDate 文本框的各种属性：

frmPhoneLog.txtDate.Value = DATE( )

frmPhoneLog.txtDate.Enabled = .T.

frmPhoneLog.txtDate.ForeColor = RGB(0,0,0)

frmPhoneLog.txtDate.BackColor = RGB(192,192,192)

在上例的属性设置中，frmPhoneLog 是最高层的容器对象。如果 frmPhoneLog 包含在一个表单集中，则需要在父路径上包含这个表单集：

frsContacts.frmPhoneLog.txtDate.Value = DATE( )


请参阅

调用方法

DATE( ) 函数

RGB( ) 函数

WITH ... ENDWITH 命令


调用方法

请参阅

如果对象已创建，便可以在应用程序的任何一个地方调用这个对象的方法。

� 若要调用方法

 •	   请使用以下语法：

Parent.Object.Method

下列语句调用方法来显示表单，并将焦点设置在命令按钮上：

frsFormSet.frmForm1.Show

frsFormSet.frmForm1.cmdButton1.SetFocus

在表达式中，有返回值的方法必须以圆括号结尾。例如，下列语句将用户自定义的 GetNewCaption 方法的返回值设置成表单的标题：

Form1.Caption = Form1.GetNewCaption( )

附注

传递给方法的参数必须放在方法名后面的圆括号中。例如，Form1.Init(cMyValue). 将 cMyValue 传递给 Form1 的 Init 事件代码。


请参阅

设置属性


响应事件

请参阅

当事件发生时，该事件的过程代码将被执行。例如，当用户单击命令按钮时，命令按钮的 Click 事件过程代码将被执行。

用编程方式，可以使用 MOUSE 命令产生 Click、DoubleClick、MouseMove 和 DragDrop 事件，或者使用 ERROR 命令产生 Error 事件，或者使用 KEYBOARD 命令产生 KeyPress 事件。除此以外，用户不能用其他的程序设计方法产生其他事件，但可以调用与这些事件相关的过程。例如，下面的语句使得 frmPhoneLog 的 Activate 事件代码被执行，但并不激活这个表单：

frmPhoneLog.Activate

若要激活表单，请使用表单的 Show 方法。调用 Show 方法将显示并激活表单，同时 Activate 事件代码也将被执行：

frmPhoneLog.Show


请参阅

基类最小事件集合

调用方法

Click 事件

DoubleClick 事件

DragDrop 事件

ERROR 命令

Error 事件

KEYBOARD 命令

KeyPress 事件

MOUSE 命令

MouseMove 事件

Show 方法

核心事件


保护类成员

请参阅

可以使用 DEFINE CLASS 命令的 PROTECTED 关键字保护属性、方法和对象，它们只能被类定义中的其他方法访问。例如，创建一个类来保存雇员信息，又不希望雇员自己变动聘用日期，便可以将 HireDate 属性保护起来。若用户需要知道一个雇员何时开始被聘，可以使用一个方法来返回 HireDate。

DEFINE CLASS employee AS CUSTOM

PROTECTED HireDate

    First_Name = ""

    Last_Name = ""

    Address = ""

    HireDate = {//}

PROCEDURE GetHireDate

    RETURN This.HireDate

ENDPROC

ENDDEFINE


请参阅

向容器类中添加对象

DEFINE CLASS 命令


在容器类中添加对象

请参阅

可以使用 DEFINE CLASS 命令中的 ADD OBJECT 子句或 AddObject 方法向容器中添加对象。

例如，下面的类定义基于表单，ADD OBJECT 命令向表单中加入两个命令按钮：

DEFINE CLASS myform AS FORM

    ADD OBJECT cmdOK AS COMMANDBUTTON

    ADD OBJECT PROTECTED cmdCancel AS COMMANDBUTTON

ENDDEFINE

当创建了容器对象之后，则需要使用 AddObject 方法向容器中加入对象。例如，下面代码创建了一个表单对象，然后向其加入两个命令按钮：

frmMessage = CREATEOBJECT("FORM")

frmMessage.AddObject("cmdOK", "COMMANDBUTTON")

frmMessage.AddObject("cmdCancel", "COMMANDBUTTON")

在类的方法代码中，也可使用 AddObject 方法。例如，下面的类定义在与 Init 事件相关联的代码中使用 AddObject 方法向表格列中加入控制。

DEFINE CLASS mygrid AS GRID

ColumnCount = 3

PROCEDURE Init

    THIS.Column2.AddObject("cboClient", "COMBOBOX)

    THIS.Column2.CurrentControl = "cboClient"

ENDPROC

向容器中加入对象之后，便可以编写代码来调整其外观和动作。


请参阅

AddObject 方法

DEFINE CLASS 命令

保护类成员


指派方法代码和事件代码

请参阅

除了为对象的方法和事件编写代码，还可以在 Visual FoxPro 基类的子类中扩展方法集。下面是编写事件代码和方法代码的规则：

 •	   Visual FoxPro 基类的事件集合是固定的，不能进行扩充。

 •	   每个类都可识别固定的默认事件集合，它的最小事件集包括 Init、Destroy 和 Error 事件。

 •	   若类中创建的方法与某个类所能识别的事件重名，则当该事件发生时，同名方法被执行。

 •	   可在类定义中通过创建过程或函数向类中添加方法。


请参阅

基类最小事件集合

调用方法

Destroy 事件

Error 事件

Init 事件

核心事件

Visual FoxPro 基类


检查对象是否存在

请参阅

可以使用 TYPE( ) 和 ISNULL( ) 函数检查对象是否存在。例如，下行代码检查名为 oConnection 的对象是否存在：

IF TYPE("oConnection") = "O" AND NOT ISNULL(oConnection)

* 对象存在

ELSE

* 对象不存在

ENDIF

附注

因为当关闭表单后，.NULL. 被存入这个表单的对象变量中，所以必须使用 ISNULL( )，但这个变量的类型仍为 O。


请参阅

调用方法

创建新类

ISNULL( ) 函数

设置属性

TYPE( ) 函数


创建成员数组

请参阅

可以把类成员定义成数组。在下面的示例中，Choices 是关于一组控制的数组。

DEFINE CLASS MoverListBox AS CONTAINER

DIMENSION choices[3]

ADD OBJECT lstFromListBox AS LISTBOX

ADD OBJECT lstToListBox AS LISTBOX

ADD OBJECT choices[1] AS COMMANDBUTTON

ADD OBJECT choices[2] AS COMMANDBUTTON

ADD OBJECT choices[3] AS CHECKBOX

PROCEDURE choices.CLICK

PARAMETER nIndex

DO CASE

CASE nIndex = 1

* code

CASE nIndex = 2

* code

CASE nIndex = 3

* code

ENDCASE

ENDPROC

ENDDEFINE

当用户单击控制数组中的一个控制时，Visual FoxPro 将该控制的索引序号传递给 Click 事件过程。在过程中可以使用 CASE 语句，根据不同的选定按钮执行不同的代码。


请参阅

Click 事件

创建对象数组

DEFINE CLASS 命令

DIMENSION 命令

DO CASE ... ENDCASE 命令


创建对象数组

请参阅

也可以创建对象数组。例如，MyArray 保存五个命令按钮：

DEFINE CLASS frmTest AS FORM

Height = 200

DIMENSION MyArray[5]

PROCEDURE Init

FOR i = 1 to 5

THIS.AddObject('THIS.MyArray[i]', 'COMMANDBUTTON')

THIS.MyArray[i].Top = i * 30

THIS.MyArray[i].Visible = .T.

ENDFOR

ENDPROC

ENDDEFINE

在使用对象数组时，请注意以下问题：

 •	   不能仅用一条命令将对象一次赋给整个数组，需要将对象单独地赋给数组的每个成员。

 •	   不能一次将值赋给整个数组的属性，下面的命令将发生错误：

MyArray.Enabled = .F.

 •	   当重定维数的对象数组比初始数组大时，与 Visual FoxPro 的所有数组一样，新数组的新增元素，将被初始化为“假” (.F.)；当重定维数的对象数组比初始数组小时，原数组中，下标数大于新下标中最大值的那些对象将被释放。


请参阅

创建成员数组

DIMENSION 命令


集成对象和数据

请参阅

在多数程序中，都可以通过对象和数据的集成来充分发挥 Visual FoxPro 的强大功能。大多数 Visual FoxPro 类都有属性和方法，使您可以将关系数据库管理系统和面向对象系统合在一起使用。

类	数据属性
表格	RecordSource, ChildOrder, LinkMaster
所有其他控制	ControlSource
列表框和组合框	ControlSource, RowSource
表单和表单集	DataSession
因为这些数据属性能够在设计或运行时更改，所以您可以创建一些通用控制，这些控制具有处理不同数据的封装功能。


请参阅

ChildOrder 属性

ControlSource 属性

DataSession 属性

LinkMaster 属性

RecordSource 属性

RowSource 属性

设置属性


核心事件

请参阅

下面是 Visual FoxPro 核心事件集的列表，这些事件适用于大多数的控制。

核心事件集

事件	事件被激发后的动作
Load	表单或表单集被加载到内存中。
Unload	从内存中释放表单或表单集。
Init	创建对象。
Destroy	从内存中释放对象。
Click	用户使用主鼠标按钮单击对象。
DblClick	用户使用主鼠标按钮双击对象。
RightClick	用户使用辅鼠标按钮单击对象。
GotFocus	对象接收焦点，由用户动作引起，如按 Tab 键或单击，或者在代码中使用 SetFocus 方法。
LostFocus	对象失去焦点，由用户动作引起，如按 Tab 键或单击，或者在代码中使用 SetFocus 方法。
KeyPress	用户按下或释放键。
MouseDown	当鼠标指针停在一个对象上时，用户按下鼠标按钮。
MouseMove	用户在对象上移动鼠标。
MouseUp	当鼠标指针停在一个对象上时，用户释放鼠标按钮。
InteractiveChange	以交互方式改变对象值。
ProgrammaticChange	以编程方式改变对象值。


请参阅

Click 事件

DblClick 事件

Destroy 事件

GotFocus 事件

Init 事件

InteractiveChange 事件

KeyPress 事件

Load 事件

LostFocus 事件

MouseDown 事件

MouseMove 事件

MouseUp 事件

ProgrammaticChange 事件

RightClick 事件

Unload 事件

Visual FoxPro 事件顺序


分别测试各个组件

请参阅

测试组件一般包括两个方面：确定独立的应用程序组件本身能够正确地执行；确定它们在应用程序中能够正确执行。

� 若要对应用程序框架中的组件进行测试

1.	在项目中，添加调用组件。

2.	连编应用程序以解决引用并添加新组件。

3.	运行应用程序以测试新组件。

4.	必要时重复步骤 1 到 3，以便加入和测试项目中的所有组件。


请参阅

调用组件


调用组件

请参阅

您可以逐个调用组件，然后对它们进行测试。

若要调用下面的组件	请使用命令
程序	DO FileName.PRG
查询	DO FileName.QPR
菜单	DO FileName.MPR
表单	DO FORM FileName
报表	REPORT FORM FileName TO OutputOption
标签	LABEL FORM FileName TO OutputOption


请参阅

DO 命令

DO FORM 命令

LABEL 命令

REPORT 命令


使用调试工具

请参阅

如果您发现应用程序组件有错误，可以利用 Visual FoxPro 调试工具来隔离错误并加以改正。

调试工具提供以下交互式工作方式：

 •	   直接输入命令

 •	   动态显示值

 •	   查看函数值和 SET 命令值

 •	   设置执行断点

 •	   跟踪程序和表单

某些调试工具的可用性取决于 Visual FoxPro 的当前操作环境：

 •	   开发环境是 Visual FoxPro 以交互方式建立应用程序的环境。

 •	   运行时刻环境是 READ EVENTS 命令处于活动状态时的应用程序环境。

调试窗口和跟踪窗口在以上两个环境中都可用。命令窗口只在开发环境中可用。


请参阅

命令窗口 （窗口菜单）

调试窗口

动态显示值

直接输入命令

READ 命令

设置执行断点

跟踪窗口

跟踪程序和表单

查看函数值和 SET 命令值


直接输入命令

请参阅

命令窗口允许您在 Visual FoxPro 开发环境中对单独的代码行进行测试。

� 若要直接执行命令

1.	在命令窗口中，键入命令。

2.	在活动输出窗口中，查看可视结果。


请参阅

命令窗口 （窗口菜单）


动态显示值

请参阅

如果要在开发环境或运行时刻环境中查看动态值，可使用调试窗口。

� 若要执行和查看变量赋值结果

1.	从“工具”菜单中选择“调试窗口”命令。

2.	在调试窗口的左窗格中，键入变量名。

3.	在命令窗口中，键入给变量赋值的命令。

所赋的值在调试窗口的右窗格中显示。


请参阅

命令窗口

调试窗口


查看函数值和 SET 命令值

请参阅

除了查看变量，您也可以使用调试窗口显示函数值和 SET 命令值。

� 若要查看函数值

 •	   在调试窗口的左窗格中，键入函数名和圆括号。

例如，若要查看一个已打开表的当前记录号，可在调试窗口的左窗格中键入下面的命令：

RECNO( )

这时，当前记录号在调试窗口的右窗格中显示出来。如果没有打开的表，RECNO( ) 的值就是 0。

疑难解答

如果您听到系统嘟嘟响，则表明函数需要至少一个参数。

� 若要查看单个 SET 命令值

 •	   在调试窗口的左窗格中，使用以下格式的 SET( ) 函数：

SET('cCOMMAND')

其中的命令 cCOMMAND 要求用引号括起来，单引号或双引号都可以。

例如，若要显示 SET TALK 命令的当前值，可键入：

SET('TALK')


请参阅

调试窗口

RECNO( ) 函数

SET 命令

SET( ) 函数

SET TALK 命令


设置执行断点

请参阅

通过设置断点，您可以使一个程序在运行时挂起。要在调试窗口中设置断点，可指定一个表达式，并给它加上断点标记。

� 若要在表达式的值为“真”(.T.) 时中断执行

1.	在调试窗口的左窗格中输入一个逻辑表达式。

2.	在调试窗口的中间一栏，表达式的旁边单击鼠标，设置断点。

3.	创建并运行程序。

当表达式值为“真”(.T.) 时，程序被挂起。

您也可以在变量值更改时挂起程序。

� 若要在变量值更改时中断执行

1.	在调试窗口左窗格中输入该变量。

2.	在调试窗口的中间一栏，变量的旁边单击鼠标，设置断点。

当程序中的变量被赋新值时，程序被挂起。


请参阅

在某一代码行中断

在事件代码处中断

调试窗口


跟踪程序和表单

请参阅

若要以某一可控的速度监视程序执行，并检验代码是否准确，可使用跟踪窗口.。通过在跟踪窗口中设置执行速度，一行一行地单步执行命令，跳过已检验的代码并设置断点，您可以控制用户自定义代码的执行速度。当然，也可以跟踪表单，设置事件代码断点。

若要	请参阅
控制执行速度	设置执行速度
单步调试代码	单步调试代码
跟踪表单代码	跟踪表单
在代码中设置断点	在某一代码行中断
在事件代码中设置断点	在事件代码处中断


请参阅

在某一代码行中断

在事件代码处中断

设置执行速度

单步调试代码

跟踪窗口

跟踪表单


设置执行速度

请参阅

您可以在跟踪窗口中设置代码执行速度。

� 若要设置代码执行速度

1.	打开跟踪窗口。

2.	从跟踪窗口的“程序”菜单中选择“打开”选项。

3.	在“打开”对话框中，选择打开某一程序。

4.	从跟踪窗口的“程序”菜单中选择“调速”选项。

5.	设置延迟秒数。

6.	从跟踪窗口菜单中选择“执行”。

程序按照您在调试窗口中设置的延迟时间间隔一行一行地执行。


请参阅

单步调试代码

跟踪窗口


单步调试代码

请参阅

您可以在调试窗口中单步调试代码。

� 若要单步跳入或跳过程序代码

1.	打开跟踪窗口。

2.	从跟踪窗口的“程序”菜单中选择“打开”选项。

3.	在“打开”对话框中，选择并打开某一程序。

4.	从跟踪窗口菜单中选择“单步调试”或“跳过”选项。

单步调试允许您在程序中一行一行移动。跳过则不调试被调用过程中的代码。

5.	对每行代码重复执行“单步调试”或“跳过”命令。

程序一直执行到一个断点或一个要求用户输入数据的命令时停止。在最后一行代码成功地执行之后，跟踪窗口中的程序就被清除。


请参阅

在某一代码行中断

在事件代码处中断

设置执行断点

跟踪窗口

跟踪表单


在某一代码行中断

请参阅

借助跟踪窗口，您可以在某一代码行中断程序执行。

� 若要在某一特定代码行中断执行

1.	在跟踪窗口中打开一个程序。

2.	单击要设置断点的代码行。

3.	从跟踪窗口菜单中，选择“跳过”或“执行”。

程序执行到断点或要求用户输入数据的命令处停止。


请参阅

在事件代码处中断

设置执行断点

跟踪窗口


跟踪表单

请参阅

通过挂起程序并对某一对象的方法或事件代码进行调试，跟踪窗口可以帮助您调试表单。

� 若要跟踪一个表单

1.	在跟踪窗口中打开一个表单。

2.	从跟踪窗口菜单中选择“执行”选项。

3.	在“执行”对话框中，从“文件类型”框中选择“表单”。

4.	选择您要跟踪的表单并选择“执行”选项。


请参阅

在事件代码处中断

跟踪窗口


在事件代码处中断

请参阅

借助跟踪窗口，您还可以在某一事件被触发时中断执行。

� 若要在事件代码处中断

1.	使用跟踪窗口的“对象”框和“过程”框显示您要测试的表单事件名。

2.	在调试窗口中，对类似下面的表达式设置断点：

PROGRAM( )="cEventName"

cEventName 必须大写。

3.	在跟踪窗口中运行表单。

4.	利用跟踪窗口在挂起的事件代码中移动。

例如，若要挂起并跟踪表单的 Activate 事件，可在调试窗口中键入以下表达式，并将它设置为断点：

PROGRAM()="FORM1.ACTIVATE"


请参阅

在某一代码行中断

调试窗口

设置断点

设置执行断点

跟踪窗口


添加测试代码

请参阅

一种有效的测试代码的方法是在程序执行过程中显示阶段性结果。

� 若要添加测试代码行

1.	打开要测试的程序。

2.	添加一个打印测试信息的命令。

3.	编译并保存该程序。

4.	运行程序。

例如，若想知道当前工作区中打开的表，您可以使用下面的语句：

=MESSAGEBOX("当前表是："+DBF())

程序将显示一个含有当前表名的 MESSAGEBOX( ) 对话框。您在知道表名之后，可以选择“确定”按钮继续程序执行。


请参阅

MESSAGEBOX( ) 函数

WAIT WINDOW 命令


解决问题

请参阅

一种解决问题的办法是把应用程序削减得尽可能简单，然后重新连编应用程序。这种方法可以消除隐含的组件兼容性问题，排除环境影响因素，并帮助您确定问题的发生位置。如果应用程序能够正常工作，则加回其他模块，一次添加一部分并加以测试。

� 如何解决问题

1.	备份您的原始文件。

定期备份所有重要的文件。不管您开发什么类型的应用程序，频繁的系统中断都会产生文件碎片。

2.	检查介质完整性

在不运行应用程序的情况下查看 .TMP 文件。如果 .TMP 文件存在，意味着一些应用程序非正常终止。如果您发现有 .TMP 文件，删除它们并使用磁盘修复工具检查丢失的簇、交叉链接的文件或文件碎片。

注意

在删除任何 .TMP 文件之前先退出 Windows。

3.	隔离测试环境。

移去任何非关键的驱动程序。对于网络应用程序，尽可能把文件移至本地。如果有奇怪的问题存在，则从 CMOS 中移去内部高速缓存、影象 ROM （Shadow ROM）或影象 RAM（Shadow RAM）。如果不知道该怎样做，请与您的制造商或零售商联系，寻求帮助。

4.	将应用程序分割成能单独工作的模块。

5.	每添加一个新模块都重新连编应用程序，并进行测试。

如果您使用各种方法还不能解决问题，可以找 Microsoft 寻求产品支持服务。您应该在干净的测试环境中准备一个可重现的实例，而且，当您给产品支持服务部打电话时，最好能记下详细的调试步骤或者准备好一简短的代码块，以便与支持工程师讨论。


请参阅

技术支持 （帮助菜单）


错误处理

请参阅

要返回调试信息或避免在运行时程序崩溃，您可以编写一个错误处理程序。错误处理程序可以代替内部错误处理过程，接管错误处理。例如，程序在运行中出错退出时，只提供给用户一些含义模糊、系统级的信息。您可能会更愿意用您自己定义的信息来取代系统错误信息。

有两类错误可以控制：

 •	   运行时刻错误

 •	   引擎错误


请参阅

引擎错误

运行时刻错误

使用调试工具


运行时刻错误

请参阅

运行时刻错误在应用程序开始运行之后发生。运行时刻错误的例子包括试图进行非法操作，如对一个并不存在的文件进行写操作，或除零等。对方法中的运行时刻错误，请使用 Error 事件。要返回用于创建当前对象的变量名、数组元素或字段名，请使用 ControlSource 或 Name 属性。

可以使用以下命令和函数识别错误并执行各种调试操作。

若要	请使用
返回错误号	ERROR( )
解决未定义的引用	EXTERNAL
返回正在执行的程序行号	LINENO( )
返回一个错误信息字符串	MESSAGE( )
在程序文件中插入注释	NOTE | * | &&
当错误出现时执行一条命令	ON ERROR
返回指定给错误处理命令的命令	ON( )
返回当前正在执行的程序名	PROGRAM( ) | SYS(16)
再一次执行前一条命令	RETRY
比较源程序和目标程序的时间戳	SET DEVELOPMENT
打开跟踪窗口	SET ECHO
显示命令结果	SET TALK
容许或不容许在各个断点之间跟踪错误	SET TRBETWEEN
返回任何当前错误信息参数	SYS(2018)
显示一条信息	MESSAGEBOX( )


请参阅

* 命令

&& 命令

ERROR( ) 函数

EXTERNAL 命令

LINENO( ) 函数

MESSAGE( ) 函数

MESSAGEBOX( ) 函数

NOTE 命令

ON ERROR 命令

ON( ) 函数

PROGRAM( ) 函数

RETRY 命令

SYS(16) - 执行程序文件名

SYS(2018) - 错误信息参数

SET DEVELOPMENT 命令

SET ECHO 命令

SET TALK 命令

SET TRBETWEEN 命令

使用调试工具


引擎错误

请参阅	示例

运行时刻错误发生在记录级事件代码时，引擎错误出现。如触发器就是一个记录级事件。触发器没有显示用户自定义错误信息的内在能力。

� 若要为触发器建立用户自定义错误信息

1.	请在用户自定义函数或存储过程中，写入您自己的信息文本。

2.	使用 CURSORSETPROP( ) 函数启用缓冲，显示信息文本。

如果关闭缓冲，用户将同时看到您的自定义信息文本和引擎错误信息。


* 下列示例演示了如何为触发器显示用户自定义信息文本，
* 代码存储在一个过程中，并使用 CURSORSETPROP( ) 函数
* 启用缓冲方式。

CREATE TRIGGER ON customer FOR DELETE AS delTrigger()

SET MULTILOCKS ON

?CURSORSETPROP("buffering",5)

LOCATE FOR customer.cust_id = "ANTON"

DELETE

?TABLEUPDATE(.T.)

?TABLEREVERT()

PROCEDURE delTrigger

IF customer.title = "Owner"

  =MESSAGEBOX("Company belongs to customer, cannot be deleted!")

  RETURN .F.

ENDIF


请参阅

运行时刻错误

使用调试工具


类设计器

请参阅

使用“类设计器”能够可视化地创建并修改类。当“类设计器”窗口是当前窗口时，Visual FoxPro 显示类菜单。用查看窗口可以打开用于设计类的全部工具，比如“属性”窗口和表单控制工具栏以及布局工具栏。

类存储在类库 (.VCX) 文件中。若要修改多个类，可以同时打开多个“类设计器”。

有关设计类的详细内容，请参阅下列帮助主题：

 •	   创建类库

 •	   创建新类

 •	   修改类定义

 •	   将表单和控制保存为类

 •	   Visual FoxPro 基类

 •	   处理类和对象

“类设计器”窗口包含：

类窗口

显示单个类。该“类”窗口固定于“类设计器”的左上角，且不可移动，除非该窗口为工具栏类型的窗口。

表单

在“表单集”中指定活动表单。仅当修改的是“表单集”类时“表单”框可用。

页面

在页框中指定活动页面。“页面”框仅在修改“页框”类时可用。


请参阅

类菜单

创建类库

创建新类

表单控制工具栏

表单设计器

布局工具栏

修改类定义

页框控制

将表单和控制保存为类

Visual FoxPro 基类

查看窗口

处理类和对象


连接设计器

请参阅

使用“连接设计器”能够创建并修改命名连接。仅在有打开的数据库时才能使用“连接设计器”。

有关创建和处理连接的详细内容，请参阅下列帮助主题：

 •	   定义连接

 •	   SQLGETPROP( ) 和 SQLSETPROP( ) 属性

“连接设计器”窗口包含：

指定数据源

数据源、用户标识、口令

指定 Visual FoxPro 显示以下三个框：

数据源

允许从已安装的 ODBC 数据源列表中选择一个数据源。

用户标识

进入选定数据源的用户标识。

口令

用户标识的进入口令。

连接串

指定 Visual FoxPro 显示“连接串”框，可在其中键入连接串。

显示 ODBC 注册提示

当注册信息未指定时

如果在命名连接定义中未存储用户标识和口令，则 Visual FoxPro 用“ODBC 数据源注册”对话框提示用户。

总是提示

指定 Viual FoxPro 总是使用“ODBC 数据源注册”对话框提示用户，该框允许用户使用与存储在命名连接中不同的注册 ID 和口令。

从不提示

指定 Visual FoxPro 从不提示用户。此选项确保更高的安全性。

数据处理

此选项与用户用 DBSETPROP( ) 函数设置的连接属性相对应。有关这些属性的详细内容，请参阅 DBGETPROP( ) 函数中的“连接属性”。

异步执行

指定异步连接。此选项与异步连接属性相对应。

显示警告

指定显示不可捕获警告。此选项与 DispWarning 连接属性相对应。

批处理

指定以批处理方式进行连接操作。此选项与 BatchMode 连接属性相对应。

自动事务处理

指定自动执行事务处理。此选项与 Transactions 连接属性相对应。

超时间隔

这些选项设置连接属性的值，也可用 DBSETPROP( ) 函数设置。有关这些属性的详细内容，请参阅 DBGETPROP( ) 函数的“连接属性”。

连接 (秒)

以秒为单位指定连接超时时间间隔。此选项与 ConnectTimeout 连接属性相对应。

查询 (秒)

以秒为单位指定查询超时时间间隔。此选项与 QueryTimeout 连接属性相对应。

空闲 (分钟)

以分钟为单位指定空闲超时时间间隔。在指定的时间间隔后，活动连接变为不活动。此选项与 IdleTimeout 连接属性相对应。

等待时间 (毫秒)

以毫秒为单位指定在 Visual FoxPro 确定 SQL 语句是否执行完毕之前经过的时间。此选项与 WaitTime 连接属性相对应。


请参阅

DBGETPROP( ) 函数

DBSETPROP( ) 函数

定义连接

SQLGETPROP( ) 函数

SQLSETPROP( ) 函数


数据库设计器

请参阅

“数据库设计器”显示数据库中包含的全部表、视图和关系。在“数据库设计器”窗口活动时，Visual FoxPro 显示数据库菜单和数据库设计器工具栏。

每个表用一个可调整大小的窗口代表，窗口中列出表的字段和索引 (如果存在)。“数据库设计器”用表之间连接索引的线段显示永久关系。

有关表关系的详细内容，请参阅以下帮助主题：

 •	   创建永久关系

 •	   在表之间建立关系

 •	   为表建立关系


请参阅

CREATE DATABASE 命令

创建永久关系

在表之间建立关系

数据库设计器工具栏

数据库菜单

为表建立关系

表设计器

表向导


数据环境设计器

请参阅

使用“数据环境设计器”能够可视化地创建和修改表单、表单集和报表的数据环境。在“数据环境设计器”窗口活动时，Visual FoxPro 显示用以处理数据环境对象的数据环境菜单、属性窗口和代码窗口。

一个数据环境定义了表单或报表使用的数据源，它包括了表、视图和关系。数据环境与表单或报表一起保存，并可使用“报表设计器”或“表单设计器”修改。

定义表单或报表的数据环境之后，当打开或运行该文件时，Visual FoxPro 自动打开表或视图。并在关闭或释放该文件时关闭表或视图。

 •	   对于表单来说，Visual FoxPro 把“数据环境”中的全部字段列在“属性”窗口中构成ControlSource 属性列表。

 •	   对于报表来说，Visual FoxPro 基于相关的表和视图构成用户报表所需的数据集。

有关使用表单“数据环境设计器”的详细内容，请参阅以下帮助主题：

 •	   向数据环境中添加表或视图

 •	   从数据环境中拖动字段和表

 •	   从数据环境中移去表

 •	   在数据环境中设置关系

 •	   在数据环境中编辑关系

 •	   运行时在本地和远程数据之间切换

 •	   设置数据环境


请参阅

向数据环境中添加表或视图

代码窗口

控制报表的数据源

ControlSource 属性

创建一对多报表

创建表单

数据环境菜单

从数据环境中拖动字段和表

在数据环境中编辑关系

表单设计器

属性窗口

从数据环境中移去表

报表设计器

在数据环境中设置关系

设置报表数据源

设置数据环境

运行时在本地和远程数据之间切换


表单设计器

请参阅

使用“表单设计器”能够可视化地创建并修改表单和表单集。一个表单集由一个或多个可作为一个整体处理的表单构成。表单和表单集是有自己属性、事件和方法的对象。

在“表单设计器”窗口活动时，Visual FoxPro 显示表单菜单、表单控制工具栏、表单设计器工具栏和属性窗口。

有关编辑事件代码和方法代码的详细内容，请参阅创建表单。

有关向表单添加控制的详细内容，请参阅以下帮助主题：

 •	   向表单中添加控制

 •	   用生成器向表单中添加控制

“表单设计器”窗口包含：

表单窗口

包含单个表单，可在其上添加和修改控制。在修改包含多个表单的表单集时，“表单设计器”中显示多个窗口。“表单”窗口可在“表单设计器”内移动。

表单

在表单集内指定活动表单。“表单”下拉列表仅在“表单设计器”包含一个表单集时可用。

页面

在页框内指定活动页面。“页面”框仅在被修改的控制类型是一个页框时可用。


请参阅

用生成器向表单中添加控制

向表单中添加控制

类设计器

创建表单

表单控制工具栏

表单设计器工具栏

表单菜单

表单向导

表单选项卡 (选项对话框)

页框控制

属性窗口


标签设计器

请参阅

使用“标签设计器”创建并修改标签。在“标签设计器”窗口活动时，Visual FoxPro 显示报表菜单和报表控制工具栏。

“标签设计器”和“报表设计器”一样，使用相同的菜单和工具栏。主要的不同是“标签设计器”基于所选标签的大小自动定义页面和列。

若要快速创建一个简单的标签布局，只要在报表菜单中选择快速报表命令。快速报表提示输入创建标签所需的字段和布局。

有关使用“标签设计器”的详细内容，请参阅以下帮助主题：

 •	   使用标签设计器创建标签

 •	   添加标签控制

 •	   添加标签大小

 •	   控制报表和标签的输出

 •	   创建邮件标签布局

 •	   使用标签向导创建邮件标签

“标签设计器”包含：

带区

默认情况下，“标签设计器”显示五个带区：页标头、列标头、细节、列脚和页脚。

可在标签上添加以下带区：

带区	打印	典型内容
组标头	每个报表一次	后续数据之前的说明
组注脚	每个报表一次	计算分组数据的值
标题	每个报表一次	标题 日期或页码 公司微标 标题周围的框
总结	每个报表一次	求和 文本，比如“求和”
规则

“标签设计器”在带区中设有标尺，可以更精确地定位对象的水平和垂直位置。使用标尺，以及“查看”菜单的显示位置命令可以帮助定位对象。

� 若要更改标尺刻度

标尺刻度的系统默认值是英寸，使用如下方法可以把英寸更改成象素：

1.	从格式菜单中选择设置网格刻度

显示标尺/网格对话框。

2.	在“标尺/网格”对话框中选择象素。

3.	选择“确定”按钮

标尺刻度设置为象素，状态栏中指示的位置也以象素为单位（如果在“查看”菜单中选定了 Show Position）。


请参阅

添加标签控制

添加标签大小

控制报表和标签的输出

创建邮件标签布局

使用标签设计器创建标签

使用标签向导创建邮件标签

定制布局

标签向导

修改布局

快速报表 (报表菜单)

报表控制工具栏

报表菜单

标尺/网格 (格式菜单)

设置网格刻度 (格式菜单)

显示位置 (查看菜单)

裁剪和连接字符表达式


菜单设计器

请参阅

使用“菜单设计器”创建菜单、菜单项、菜单项的子菜单和分隔相关菜单组的线条，等等。使用“菜单设计器”可以定制 visual FoxPro 的备份菜单或设计要发布的应用程序菜单。

“菜单设计器”包含：

提示

允许在菜单系统中指定菜单标题和菜单项。

移动控制

“提示”列左边的双向箭头按钮。在设计时允许可视化地调整菜单项。

结果

可以指定在选择菜单标题或菜单项时发生的动作。例如，可执行一个命令，打开一个子菜单或运行一个过程。

创建

允许指定菜单标题或菜单项的子菜单或过程。

编辑

允许更改与菜单标题或菜单项相关的子菜单或过程。

选项

显示提式选项对话框，可在其中定义键盘快捷键和其它菜单选择。

菜单级

允许用户选择要处理的菜单或子菜单。

预览

显示正在创建的菜单。

项

插入

在“菜单设计器”窗口中插入新的一行。

删除

从“菜单设计器”中删除当前行。


请参阅

创建菜单系统

定制菜单系统

通用选项 (查看菜单)

菜单选项 (查看菜单)

提式选项


查询和视图设计器

请参阅

使用查询和视图设计器创建和修改查询和视图。在查询或视图设计器活动时，Visual FoxPro 显示查询菜单和查询工具栏或视图设计器工具栏。

设计器的顶部窗格显示查询或视图中的表。每一个表用列有表字段和索引的可调整大小的窗口代表。设计器用连接表之间字段的线条表示联接条件。可在表间拖动已索引的字段来创建联接条件。双击一个线条显示编辑条件的“联接条件”对话框。

查询和视图设计器选项卡

选定条件

指定选择记录的条件，比如在字段内指定值或在表之间定义临时关系的连接条件。

字段

指定字段，SUM 或COUNT之类的合计函数，或其它表达式。

排序依据

指定字段，SUM 或COUNT之类的合计函数，或设置查询中记录检索顺序的其它表达式。

分组依据

指定字段，SUM 或COUNT之类的合计函数，或用于把有相同字段值的记录合并为一组的其它表达式。

更新条件

指定更新视图的条件（仅适用于视图设计器）。


请参阅

COUNT 命令

字段选项卡 (查询和视图设计器)

分组依据选项卡 (查询和视图设计器)

排序依据选项卡 (查询和视图设计器)

查询菜单

查询工具栏

查询向导

选定条件选项卡 (查询和视图设计器)

SUBSTRC ( ) 函数

更新条件选项卡 (视图设计器)

视图设计器工具栏


选择条件选项卡,查询和视图设计器
选定条件选项卡，查询和视图设计器

请参阅

指定选择记录的条件，比如在字段内指定值或在表之间定义临时关系的连接条件。此选项卡决定了列在 SQL 窗口中 SELECT - SQL 命令的 WHERE 子句中的条件。这个选择依据选项卡出现在查询和视图设计器中。

选项卡选项

移动框

拖动移动框，可以在网格内上下移动选定的项。

条件按钮

单击双向水平箭头在联接条件对话框中编辑所选条件或查询条件，这些条件在另一列中更新输入项。

字段名

指定连接条件的第一个字段，在创建一个新的连接条件时，单击下拉可用字段列表的字段。

否

反转条件，排除与该条件相匹配的记录。

条件

指定比较类型，比较类型为：

Equal

指定字段值相等。

Like

指定字段与实例文本相匹配。(“Customer, state like O”与来自 Ohio、Oklahoma 和 Oregon 的记录相匹配)

Exactly Like

指定字段与实例文本必须逐字符完全匹配。

More Than

指定字段大于实例文本的值。

Less Than

指定字段小于实例文本的值。

Is NULL

指定字段包含null 值。

Between

指定字段大于等于示例文本中的低值并小于等于示例文本中的高值。实例文本中的这两个值用逗号隔开 (“Invoias.idata Between 05/10/92，05/12/92”与日期为 1992  年5 月的第 10、11、12 日的记录相匹配)。

In

指定字段必须与实例文本中逗号分隔的几个样本中的一个相匹配。

实例

指定比较条件。

大小写

指定在条件中是否与实例的大小写（大写或小写）相匹配。

插入

在所选定条件之上插入一个空联接条件。

移去

从查询中删除选定的条件。

添加“或”

向条件列表添加一个 OR 条件。除非已选定 Add Or，否则默认添加逻辑 AND。

选定输出

在选定输出中列出字段，用户可以从顶部窗格的表中拖动字段或使用字段选项卡来向该列表添加字段。


请参阅

字段选项卡 (查询和视图设计器)

分组条件选项卡 (查询和视图设计器)

联接条件对话框

排序条件选项卡 (查询和视图设计器)

查询和视图设计器

SELECT - SQL 命令

更新条件选项卡 (视图设计器)


字段选项卡,查询和视图设计器
字段选项卡，查询和视图设计器

请参阅

指定查询或视图输出的字段，合计函数和其它表达式，该选项卡显示于查询设计器和视图设计器

选项卡选项

可用字段

在查询表或视图表中列出所有可用的字段。

函数/表达式

指定一个函数或表达式。用户既可从列表中选定一个函数又可直接在框中键入一个表达式，单击“添加”按钮把它添加到“选定输出”框中。

选定输出

列出出现在查询或视图结果中的字段、合计函数和其它表达式，可以拖动字段左边的垂直双箭头来重新调整输出顺序。

无重复记录

从查询或视图结果中清除重复记录。重复记录是指每一字段都相同的记录。

交叉表

以交叉表格式把查询或视图结果发送到 Microsoft Graph、报表或一个表中。

交叉数据表选项仅在“选定输出”正好包含三个项时可用，这三个菜单项为图表的 X 轴、Y 轴和图形的单元格值。

附注

此选项自动选定查询的“分组”和“排序”字段。一旦选定，将不能再修改查询，除非清除此选项。

例如，可生成一个报表，该报表按月显示顾客的欠帐量。可创建一个图形，该图形在页面左侧从上往下显示顾客，12 个月横向列于该页面顶部，并显示每一顾客每一月份的欠帐量。

添加

从“可用字段”框或“函数/表达式”框中把选定项添加到“选定输出”框中。

全部添加

将“可用字段”框中的所有字段添加到“选定输出”框中。

移去

从“选定输出”框中移去所选项。

全部移去

从“选定输出”框中移去所有选项


请参阅

创建图形

创建交叉表查询

分组条件选项卡 (查询和视图设计器)

排序条件选项卡 (查询和视图设计器)

查询设计器

选定条件选项卡 (查询和视图设计器)

更新条件选项卡 (视图设计器)

视图设计器


分组条件选项卡,查询和视图设计器
分组依据选项卡，查询和视图设计器

请参阅

对查询或视图结果的行进行分组，此选项卡显示在查询和视图设计器中。有关详细内容，请参阅SELECT - SQL命令的 Group By 子句。

可用字段

列出查询表或视图表中的全部可用字段和其它表达式。

用于分组的字段

列出确定查询结果分组的字段、合计函数和其它表达式。字段按照它们在列表中显示的顺序分组。可以拖动字段左边的垂直双箭头，更改字段顺序和分组层次。

添加

向“用于分组的字段”框中添加“可用字段”框中的选定项。

移去

从“用于分组的字段”框中移去所选的项。

满足条件

显示 Having 对话框 ，从而可以为记录组而不是单个记录设置选择条件。


请参阅

字段选项卡 (查询和视图设计器)

条件对话框

排序条件选项卡

查询和视图设计器

SELECT - SQL 命令

选定条件选项卡 (查询和视图设计器)

更新条件选项卡 (视图设计器)


排序条件选项卡,查询和视图设计器
排序依据选项卡，查询和视图设计器

请参阅

指定字段、合计函数 SUM 或 COUNT 或其它表达式，它们设置查询中检索到的记录的顺序。

如果在字段选项卡中已选定“交叉表”选项，则自动创建排序字段的列表，

有关的详细内容，请参阅SELECT - SQL命令中的 Order By 子句。

选项卡选项

选定输出

列出将出现在查询结果中的所选定字段和表达式，

排序条件

指定用于排序查询的字段和表达式，显示于每一字段左侧的箭头指定递增（向上）或递减（向下）排序。箭头左侧显示的移动框可以更改字段的顺序。

排序选项

升序

指定以升序排序“排序条件”中的选定项。

降序

指定以降序排序“排序条件”中的选定项。

添加

将“选定输出”框中的选定项添加到“排序条件”框中。

移去

从“排序条件”框中移去选定项。


请参阅

COUNT 命令

字段选项卡 (查询和视图设计器)

分组条件选项卡

SELECT - SQL 命令

选定条件选项卡 (查询和视图设计器)

SUBSTRC ( ) 函数

更新条件选项卡 (视图设计器)


更新条件选项卡,视图设计器
更新条件选项卡，视图设计器

请参阅

指定更新视图的条件。该选项卡仅显示于视图设计器中。

选项卡选项

表

指定“更新条件”选项卡上的设置所影响的表。该列表包括所有选定条件选项卡列表中字段所在的表。

重置关键字

重置“关键字段”列的设置值（以“字段名”窗格中的钥匙符号作标记），以确保仅有主关键字段被选中。

全部更新

设置“可更新的”列的设置（以“字段名”窗格中的笔符号作标记），以确保除关键字段外的其它所有字段都被选中。

发送 SQL 更新

指定数据是否实际在磁盘上更新，有关详细内容，请参阅在视图中集成本地数据和远程数据。

字段名窗格

列出己指定的输出字段。

关键字段（使用钥匙符号作标记）

指定该字段是否为关键字段。

可更新字段（使用笔符号作标记）

指定该字段是否为可更新字段。

字段名

显示字段名。

SQL WHERE 子句包括

指定如何构造 WHERE 子句。

关键字段

指定用于更新远程表的 WHERE 子句中，只包括“字段名”列表中的关键字段。

关键字段和可更新字段

指定用于更新远程表的 WHERE 子句中，包括“字段名”列表中的关键字段和所有可更新字段。

关键字段和已修改字段

指定用于更新远程表的 WHERE 子句中，包括“字段名”列表中的关键字段和所有已修改字段。

关键字段和时间戳

指定用于更新远程表的 WHERE 子句中，包括“字段名”列表中的关键字段和时间戳的比较值。

后台更新

指定字段如何在后台更新。

SQL DELETE 然后 INSERT

指定删除原始表记录并添加一个新的记录。

SQL UPDATE

指定修改新的表记录。


请参阅

在视图中集成本地数据和远程数据

创建多表视图

字段选项卡 (查询和视图设计器)

分组条件选项卡 (查询和视图设计器)

排序条件选项卡 (查询和视图设计器)

选定条件选项卡 (查询和视图设计器)

视图设计器


报表设计器

请参阅

使用“报表设计器”可以创建和修改报表，在“报表设计器”窗口活动时，Visual FoxPro 显示“报表”菜单和报表控制工具栏。

若要快速创建简单的报表布局，可以选择“报表”菜单中的快速报表命令，该命令提示输入报表所需的字段和布局。

有关使用“报表设计器”的详细内容，请参阅下列帮助主题：

 •	   使用新建报表创建报表

 •	   用报表向导创建报表

 •	   控制报表和标签的输出

 •	   定义报表的页面

 •	   设计报表

 •	   报表控制的格式选项

 •	   插入报表控制

“报表设计器”中包括：

带区

默认情况下，“报表设计器”显示三个带区：页标头、细节 和页注脚。一个分隔符栏位于每一带区的底部。带区名称显示于靠近蓝箭头的灰栏，蓝箭头指示该带区位于灰栏之上，而不是之下。

也可给报表添加以下带区：

带区	打印	典型内容
列标头	每列一次	列标题
列脚	每列一次	总结，总计
组标头	每组一次	数据前面的文本
组脚	每组一次	组数据的计算结果值
标题	每个报表一次	标题 日期或页码 公司标微 标题周围的框
总结		总结 “Grand Totals”等文本
标尺

“报表设计器”中设有标尺，可以在带区中精确地定位对象的垂直和水平位置。把标尺和“查看”菜单的显示位置命令一起使用可以帮助定位对象。

� 若要更改标尺刻度

标尺刻度的系统默认值是英寸，可用如下方法将英寸改为象素：

1.	从“格式”菜单中选择设置网格刻度。

显示标尺/网格对话框。

2.	在“标尺/网格”对话框中选定“象素”。

3.	选择“确定”。

标尺的刻度设置为象素，并且状态栏中的位置指示器（如果在“查看”菜单上选中了“显示位置”）也以象素为单位显示。


请参阅

控制报表和标签的输出

用报表向导创建报表

使用新建报表创建报表

定义报表的页面

设计报表

决定常规布局

报表控制的格式选项

插入报表控制

规划数据的位置

快速报表 (报表菜单)

报表控制工具栏

报表向导

标尺/网格 (格式菜单)

设置网格刻度 (格式菜单)

显示位置 (查看菜单)


表设计器

请参阅

使用“表设计器”可以创建并修改数据库表、自由表、字段和索引。“表设计器”可以实现诸如有效性规则和默认值等高级功能。

如果在有打开的数据库时打开表设计器，则下列三个选项显示在表设计器顶部。

表名

指定要创建或修改的表名。

对于数据库表，表名显示在“项目管理器”中，它不是文件名。支持最多可有 128 个字符的长名。

数据库

如果不是自由表，则显示此表所属的数据库名，此框为只读。

表属性按钮

显示表属性对话框，从中可以设置行级规则和有效性错误文本、触发器以及注释。

表设计器选项卡

表

在可滚动表格中显示表字段。

索引

包含用于定义索引的可滚动表格。


请参阅

数据库设计器

表达式生成器.

索引选项卡 (表设计器)

表属性对话框

表选项卡 (表设计器)

表向导


表选项卡,表设计器
表选项卡，表设计器

请参阅

根据“表设计器”打开时，是否有打开的数据库，选项卡显示的信息稍有不同。如果有打开的数据库，此选项卡包括设置有效性规则的选项。如果没有数据库打开，此选项卡仅包括基本的字段名、类型和格式选项。

选项卡在可滚动表格内显示表字段，每一行包括字段名，数据类型、字符宽度、小数位数、并支持 null 值。单击表格内的单元格可以修改字段。

选项卡选项

名称

指定字段名。不接受空格，对于数据库表，字段名长度可达128个字符。有关详细内容，请参阅创建 Visual FoxPro 名称。

类型

指定字段的数据类型，单击下拉箭头并从中选择一个数据类型。

宽度

指定字段的字符宽度。

小数位数

指定小数点右边的数字位数。“小数位数”列适用于数值型和双精度型数据。

NULL

选定此项时，指定该字段可接受 NULL 值。

插入按钮

在已选定字段上插入一个新字段。

删除按钮

从表中删除选定字段。

字段属性

如果正在修改一个数据库表，“字段属性”选项组出现在可滚动表格的下面。

该区域指定所选定段的属性，选择属性设置右边的三点按钮来显示表达式生成器或者直接键入表达式。对这些属性不需要输入值。

有效性规则

指定实施数据字段级有效性检查的规则。

有效性说明

指定当输入不符合字段级有效性规则的值时，显示的错误信息。

默认值

指定字段的默认值。

标题

指定字段描述性的名称，在用户浏览表时，标题作为列标头出现，该标题最多可以有 128 个字符。

字段注释

保存字段的说明注释。在选定该字段时，用户在此键入的任何内容均在项目管理器底部作为说明出现。


请参阅

创建 Visual FoxPro 名称

表达式生成器

索引选项卡，表设计器

表向导


索引选项卡,表设计器
索引选项卡，表设计器

请参阅

“索引”选项卡出现在表设计器，它包含定义索引的可滚动表格。此表格有四列。

选项卡选项

名称

指定索引的索引标识名、索引名左侧的箭头按钮指定以升序或降序排序。选定该索引，单击该箭头按钮可以更改排序顺序。

移动按钮

这是位于该行最左侧的双向箭头按钮，用户输入两或三行后，使用此移动钮可以在列表内上下移动某一行。

类型

指定索引的类型：主索引 （仅适用于数据库表）、候选索引、唯一索引或普通索引 （默认值）。用户单击该列中的一个单元时，出现一个可从中选择类型的列表，该字段不要求有输入。

在“类型”列中只能把表中的一个索引设置为主索引。

表达式

指定索引表达式，如一个字段名。单击此按钮可以在表达式生成器中创建或编辑一个表达式，一个表达式最多可有 240 字符。

筛选

指定筛选表达式。单击此按钮可以在“表达式生成器”对话框内创建或编辑一个表达式。

插入按钮

在表格中选定索引之上插入一个新的索引。

删除按钮

从表格中删除选定索引。


请参阅

确定筛选表达式

确定索引表达式

表达式生成器

FOR( ) 函数

INDEX 命令

表设计器

表选项卡，表设计器

表向导


浏览窗口

请参阅

“浏览”窗口显示活动表中的记录。

当您在“浏览”窗口中浏览一个表时，您可以用两种方式查看记录：浏览和编辑。您可以从“查看”菜单中选择“浏览”或“编辑”命令切换查看方式。

附注

当使用“文件”菜单的“打开”命令打开一个表之后，必须使用“查看”菜单的“浏览<表>”来查看该表。

要选择字段，单击一个单元格，或按 TAB，ENTER，或方向键。要把一个列移动到新位置，可单击字段名，把列拖动到希望的位置，然后放开鼠标键。

要在可接受 null 值的字段中输入 null 值，按 CONTROL+0。当激活包含 null 值的字段时，不显示任何值。当激活其他字段时，包含 null 值的字段显示.NULL.。

附注

在某些情况下，如果您浏览使用交叉表查询创建的表或临时表，字段名以一个字母和一个减号开始，表示字段的数据类型。例如，数值字段以 N- 开始。


请参阅

BROWSE 命令

浏览 <表>（查看菜单）

改变浏览窗口中列的宽度

创建字段的标题

编辑 <表>（查看菜单）

在表中移动

重新安排浏览窗口中的列

SET BRSTATUS 命令

SET REFRESH 命令

拆分浏览窗口

打开或关闭网格线

查看表的内容


代码窗口

请参阅

可使用代码窗口书写、显示和编辑表单、事件和方法的代码。您可以打开任意多个代码窗口，从而方便地查看、复制和粘贴来自不同表单的代码。

当在表单设计器中双击一个表单或表单控制，或在属性窗口中双击一个事件或方法时，显示代码窗口。上述操作与从“查看”菜单中选择代码命令的效果相同。

代码窗口包括：

对象

列出当前的表单、表单集、数据环境、工具栏对象和当前表单上的所有控制。要编辑控制的属性，可从此列表框中选择控制。

过程

列出 Visual FoxPro 的表单、表单集、数据环境或“对象”框中显示的控制所能识别的全部事件。当您从“过程”框中选择一个事件时，将在代码窗口的编辑区中显示传递给事件的参数（如果存在的话）。突出显示的事件名包含该代码。

提示

在代码窗口工作时，如果需要有关函数、语句、属性、事件或方法的语法信息，可输入关键字或属性、事件、方法的名称，然后选定，再按 F1 键即可得到联机帮助。也可在“过程”框中选择一个事件，然后按 F1 键得到有关该事件的帮助信息。按 PAGE DOWN 键可切换到含有代码的下一个代码窗口。


请参阅

代码（查看菜单）

表单设计器

属性窗口


命令窗口

请参阅

“命令”窗口是 Visual FoxPro 的一种系统窗口。当选择菜单命令时，相应的 Visual FoxPro 语句自动反映在“命令”窗口中。

也可以直接在“命令”窗口中输入 Visual FoxPro 命令。在“命令”窗口中您可以：

 •	   要在按 ENTER 键之前删除文本，可按 ESC。

 •	   将光标移到以前命令行的任意位置按 ENTER 键重新执行此命令。

 •	   若要分割很长的命令，可以在所需位置的空格后接分号，然后按 ENTER 键。

 •	   可在命令窗口内或向其他编辑窗口中移动文本，选择需要的文本并将其拖动到需要的位置。

 •	   可在命令窗口内或向其他编辑窗口中复制文本。选择需要的文本，按住 CTRL 键，将其拖动到需要的位置。

从格式菜单选择合适的命令，可改变字体、行间距和缩进方式。


请参阅

命令窗口（窗口菜单）

格式菜单

使用调试工具


调试窗口

请参阅

使用“调试”窗口可以测试函数，查看变量，查看属性或者通过每执行条命令都查看相应的数据来检查表达式。当在“工具”菜单中选择调试窗口命令时，“调试”窗口出现。它允许在开发环境或实时情况下动态地查看变量或函数的返回值。

“调试”窗口包括两个窗格。左窗格是编辑区，可以输入变量或表达式的名称。右窗格用于显示变量的值。当变量得到新值时，Visual FoxPro 更新右窗格的显示。要清除“调试”窗口中的内容，选定“调试”窗口后，从 Visual FoxPro “窗口”菜单选择清除。

您可以在变量的旁边两窗格之间的分隔条上双击鼠标，从而在“调试”窗口中设置逻辑断点。断点设定后，Visual FoxPro 显示一个符号 [image] 一个小圆按钮状的符号。再次单击此符号可清除它。在跟踪窗口中运行一个程序或表单时，当程序执行到“调试”窗口中设置的断点时，Visual FoxPro 将会暂停程序的执行。

“调试”窗口在程序执行时也可使用；在 READ 事件过程中，它在开发环境中可用。要逐行查看代码的执行，可使用“跟踪”窗口。

可以通过拖动底部的黑条来移动左右窗格之间的分隔条。

附注

如果右窗格中没有显示值，则应查看右窗格下部的滚动条是否滚动到了窗格的最左端或者表达式是否有效。


请参阅

_THROTTLE 命令

清除（窗口菜单）

调试窗口（工具菜单）

SET DEBUG 命令

SET ECHO 命令

SET STEP 命令

SET TRBETWEEN 命令

SUSPEND 命令

跟踪窗口

使用调试工具


编辑窗口

请参阅

提供编辑文本和程序文件的手段。如果在“选项”对话框中的项目选项卡中选择了“修改选定文件”，那么当您在“项目管理器”中双击一个文本或程序文件时，将打开“编辑”窗口。

在“编辑”窗口中，您可以：

 •	   在“编辑”窗口内部或向其他编辑窗口中移动文本。选择需要的文本将其拖动到需要的位置。有关编辑参数的设置，请参阅“选项”对话框的编辑选项卡。

 •	   可在“编辑”窗口内部或其他编辑窗口中复制文本。选择需要的文本，按住 CTRL 键，将其拖动到需要的位置。

从格式菜单选择合适的命令，可改变字体、行间距和缩进方式。


请参阅

编辑选项卡（选项对话框）

格式菜单

项目选项卡（选项对话框）

设置常规编辑选项


通用字段窗口

请参阅

在浏览表中双击通用字段的类型指示标志时，显示此窗口。也可利用键盘，按 CTRL + PAGE UP 或 CTRL + PAGE DOWN 打开通用字段窗口。

当此窗口显示时，您可使用“编辑”菜单中的插入对象命令创建或插入 OLE 对象。


请参阅

插入对象（编辑菜单）

表设计器

通用字段类型


项目管理器窗口

请参阅

可使用“项目管理器”组织和管理项目中的文件。项目是文件、数据、文档以及 Visual FoxPro 对象的集合，项目文件以 .PJX 扩展名保存。当激活“项目管理器”窗口时，Visual FoxPro 在菜单栏中显示“项目”菜单。

在“项目管理器”中，以类似于大纲的形式组织各项，可以展开或折叠它们。在项目中，如果某类型数据项有一个或多个，则在其标志前有一个加号。单击标志前的加号可查看此项的列表，单击减号可折叠展开的列表。

与工具栏类似，您可以将“项目管理器”拖动到屏幕顶部或双击标题栏，从而停放“项目管理器”。“项目管理器”停放后，被自动折叠，只显示选项卡。

“项目管理器”包括：

选项卡

分类显示各数据项。当“项目管理器”折叠时，您可以从“项目管理器”中拖下选项卡。要重新放置一个选项卡，只需将其拖回原来的位置或单击“关闭”框。

可单击图钉按钮使选项卡保持在屏幕上。

展开/折叠按钮

展开和折叠项目管理器。当项目管理器折叠时，把鼠标指针放到选项卡上并将其从项目管理器拖走，可以拖下选项卡。

项列表

以大纲方式列出包含在项目中的项。项左边的图标用来区分项的类型。

符号 [image] 项旁带斜线的圆圈指明此项已从项目中排除。

当文件包含在项目中时，编译后将形成单个 .APP 文件。所有的包含文件在运行时都是只读的，在程序、表单、查询或菜单组中，主程序文件旁有一个符号 [image] 实心黑点。

有关详细内容，请参阅引用可修改的文件。

项目管理器按钮

新文件

创建一个新文件或对象。此按钮与项目菜单的新文件命令作用相同。新文件或对象的类型与当前选定项的类型相同。

附注

从“文件”菜单中创建的文件不会自动包含在项目中。由“项目”菜单的“新文件”命令或项目管理器上的“新文件”按钮创建的文件自动包含在项目中。

添加

把已有的文件添加到项目中。此按钮与“项目”菜单的添加文件命令作用相同。

修改

在合适的设计器中打开选定项。此按钮与“项目”菜单的修改文件命令作用相同。

浏览

在浏览窗口中打开一个表。此按钮与“项目”菜单的浏览文件命令作用相同，且仅当选定一个表时可用。

关闭

关闭一个打开的数据库。此按钮与“项目”菜单的关闭文件命令作用相同，且仅当选定一个表时可用。如果选定的数据库已关闭，此按钮变为“打开”。

打开

打开一个数据库。此按钮与“项目”菜单的打开文件命令作用相同，且仅当选定一个表时可用。如果选定的数据库已打开，此按钮变为“关闭”。

移去

从项目中移去选定文件或对象。Visual FoxPro 会询问您是仅从项目中移去此文件还是同时将其从磁盘中删除。此按钮与“项目”菜单的移去文件命令作用相同。

连编

连编一个项目或应用程序，在专业版中，还可以连编一个可执行文件。此按钮与“项目”菜单的连编命令作用相同。

预览

在打印预览方式下显示选定的报表或标签。当选定“项目管理器”中的一个报表或标签时可用。此按钮与“项目”菜单的预览文件命令作用相同。

运行

执行选定的查询、表单或程序。当选定项目管理器中的一个查询、表单或程序时可用。此按钮与项目菜单的运行文件命令作用相同。


请参阅

添加文件（项目菜单）

浏览文件（项目菜单）

浏览窗口

连编（项目菜单）

关闭文件（项目菜单）

排除（项目菜单）

包含（项目菜单）

修改文件（项目菜单）

新文件（项目菜单）

打开文件（项目菜单）

预览文件（项目菜单）

打印预览（文件菜单）

引用可修改的文件

移去文件（项目菜单）

运行文件（项目菜单）

设置主程序（项目菜单）

使用项目管理器


属性窗口

请参阅

“属性”窗口包含选定的表单，数据环境或控制的属性、事件和方法列表。可在设计或编程时对这些属性值进行设置或更改。

当打开表单设计器时，“属性”窗口自动显示。也可以从“查看”菜单中选择“属性”窗口，或在表单设计器或数据环境设计器中单击右键，从快捷菜单中选择“属性”。

“属性”窗口包括：

对象

标识当前选定的对象。单击右端的向下箭头，可看到包括当前表单、表单集和全部控制的列表。如果打开数据环境设计器，可以看到对象中还包括数据环境和数据环境的全部临时表和关系。可以从列表中选择要更改其属性的表单或控制。

图钉按钮

控制“属性”窗口的状态。按下此按钮时，即使其他窗口处于激活状态，“属性”窗口也保持在最前面。如果不按下此按钮，窗口不保持在最前面。

生成器按钮

运行与选定控制对应的生成器。生成器有助于快速地设置属性值。有关 Visual FoxPro 生成器的详细内容，请参阅使用生成器。

选项卡

按分类显示属性、事件和方法。

全部

显示全部属性、事件和方法。

数据

显示有关对象如何显示或怎样操纵数据的属性。

方法

显示方法和事件。

布局

显示所有的布局属性。

其他

显示其它和用户自定义的属性。

属性设置框

可以更改属性列表中选定的属性值。如果选定的属性需要预定义的设置值，则在右边出现一个向下箭头。如果属性设置需要指定一个文件名或一种颜色，则在右边出现三点按钮。有关设定属性值的详细内容，请参阅设置属性。

单击“接受”按钮（对号标记）来确认对此属性的更改。单击“取消”按钮（叉号）取消更改，恢复以前的值。

有些属性（如：背景色）显示一个三点按钮，允许从一个对话框中设置属性。

单击“函数”按钮，可打开表达式生成器。属性可以设置为原义值或由函数或表达式返回的值。

属性列表

这个包含两列的列表显示所有可在设计时更改的属性和它们的当前值。对于具有预定值的属性，在“属性”列表中双击属性名可以遍历所有可选项。对于具有两个预定值的属性，在“属性”列表中双击属性名可在两者间切换。选择任何属性并按 F1 可得到此属性的帮助信息。

对于以表达式作为设置的属性，它的前面具有等号 (=)。只读的属性、事件和方法以斜体显示。

有关“属性”窗口的详细内容，请参阅定制表单和控制。


请参阅

控制报表数据源

创建一对多报表

定制表单和控制

表达式生成器

属性命令（查看菜单）

设置属性

设置报表数据源

使用生成器


跟踪窗口

请参阅

“跟踪”窗口允许跟踪程序和表单的执行过程。当从“工具”菜单中选择跟踪窗口时，显示“跟踪”窗口。它可用来显示指定代码区域的执行情况或逐行执行代码。有关详细内容，请参阅跟踪程序和跟踪表单。

提示

当在“跟踪”窗口中跟踪代码时，可用调试窗口动态显示变量和函数的值。

“跟踪”窗口包含如下菜单：

 •	   程序

 •	   执行

 •	   跳出!

 •	   跳过!

 •	   单步调试!

 •	   文本

要得到任何“跟踪”窗口菜单的帮助信息，按 SHIFT+F1 然后单击一个菜单命令。


请参阅

在某一代码行中断

在事件代码处中断

调试窗口

执行

跳出!

跳过!

程序

SET ECHO 命令

SET TRBETWEEN 命令

设置执行速度

单步调试!

单步调试代码

文本

跟踪窗口（工具菜单）

跟踪表单

跟踪程序


程序菜单,跟踪窗口
程序菜单，跟踪窗口

请参阅

打开一个程序或选择跟踪选项。

程序菜单命令

打开

显示打开对话框，从中可以选择一个 .PRG，.FXP，或 .MPR 文件在“跟踪”窗口中打开。

取消

取消一个已挂起程序的执行。在使用“执行”命令后可用。

行号

显示程序中的行号。

清除断点

清除“跟踪”窗口中所有的程序断点。在设置了一个或多个断点时此命令可用。

在两个断点之间跟踪

当选定时（默认），突出显示执行的每一行。单击可打开和关闭此命令。不选定时，废止两个断点之间的跟踪。

调速

显示执行调整执行速度对话框，从中可以指定“跟踪窗口”中程序的执行速度。可使用微调钮或直接输入每行的延迟秒数。选择“清除”可把延迟设置为零。


请参阅

调试窗口（工具菜单）

调试窗口

打开（文件菜单）

设置执行断点

调整执行速度对话框

跟踪窗口（工具菜单）

跟踪表单

跟踪程序

使用调试工具


运行!命令,跟踪窗口
运行! 命令，跟踪窗口

请参阅

打开“运行”对话框，从而可以在“跟踪”窗口中开始程序的执行。要执行一个表单，必须明确地在“类型”框中选择“表单”。


请参阅

调试窗口

调试窗口命令（工具菜单）

跟踪窗口命令（工具菜单）


跳出! 命令,跟踪窗口
跳出! 命令，跟踪窗口

请参阅

跳出当前的执行程序，并在调用此程序的命令之后的第一行语句处挂起。在使用“运行”命令后，此命令可用。


请参阅

调试窗口

调试窗口命令（工具菜单）

跟踪窗口命令（工具菜单）


跳过! 命令,跟踪窗口
跳过! 命令，跟踪窗口

请参阅

跳过一个不想在“跟踪”窗口中显示的被调用程序。在使用“运行”命令后，此命令可用。


请参阅

调试窗口

跟踪窗口

调试窗口命令（工具菜单）

跟踪窗口命令（工具菜单）


单步调试! 命令,跟踪窗口
单步调试! 命令，跟踪窗口

请参阅

每次执行一行程序。在使用了 DO 命令或 SET STEP 命令后可用。


请参阅

调试窗口（工具菜单）

调试窗口

DO 命令

SET STEP 命令

跟踪窗口（工具菜单）

跟踪窗口


继续! 命令,跟踪窗口
继续! 命令，跟踪窗口

请参阅

从程序被挂起处继续执行程序。在发出“挂起”命令或触发一个断点后可用。


请参阅

调试窗口

跟踪窗口

调试窗口命令（工具菜单）

跟踪窗口命令（工具菜单）


文本菜单,跟踪窗口
文本菜单，跟踪窗口

请参阅

控制“跟踪”窗口中的文本显示

文本菜单命令

字体

允许更改“跟踪”窗口中字体、字形或字的大小。

放大字体

增大“跟踪”窗口中的当前字体。

缩小字体

减小“跟踪”窗口中的当前字体。


请参阅

调试窗口（工具菜单）

调试窗口

跟踪窗口（工具菜单）

跟踪窗口


查看窗口

请参阅

使用“查看”窗口可以打开和显示表或视图，建立临时关系，并设置工作区属性。

“查看”窗口包括：

当前工作期

显示当前表单的工作期名称。

别名

显示不带扩展名的视图名或表名。

关系

指明“别名”框中的表或视图之间的临时关系。

属性

显示工作区属性对话框，可以用此对话框改变表的结构，选择索引文件和字段，定义数据筛选条件。

浏览

在浏览窗口中显示“别名”框中选定的表或视图，可以在此窗口中检查、编辑或追加数据。

打开

显示打开对话框，可用此对话框选择要打开的表或视图。

关闭

从“别名”框中删除选定的表或视图和任何相关文件。

关系

使用表达式生成器定义表和视图之间的关系。

一对多

显示一对多对话框，从而可以在子表和父表之间建立一对多的临时关系。


请参阅

一对多

浏览窗口

在工作区中关闭表

在表之间建立关系

表达式生成器

打开（文件菜单）

在工作区中打开表

临时相关表

查看工作区

工作区属性


交叉表向导

请参阅

交叉表向导创建一个交叉表查询，它可以显示电子表格格式的查询的结果。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定交叉表查询中使用的数据库、表和字段。

要想运行交叉表向导，在“工具”菜单中选择“向导”子菜单，再选择“查询”命令，然后在“向导选择”对话框中选择“交叉表向导”。

步骤 1 - 字段选取

只能在单独的表或视图中选取字段。

步骤 2 - 布局

对于拖动到数据字段中的字段，它的每个单独的值，交叉表查询结果都将显示为一列。可以双击数据字段并从列出的合计选项中选择合计方式 —求和，计数，平均，最大和最小。

步骤 3 - 总和

总和将出现在交叉表查询结果中的最右列内。

步骤 4 - 完成

保存完交叉表查询后，可以象其它查询一样，在查询设计器中打开并修改它。

如果您选择了“保存并运行交叉表查询”单选钮，则向导会在“浏览”窗口中显示结果。


请参阅

使用向导

创建交叉表查询

本地视图向导

图形向导

查询向导

远程视图向导


表单向导

请参阅

“表单向导”为单个表创建操作数据的表单。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定用于创建控制的表和字段，这些控制将出现在表单上。通过在“选项”对话框的表单选项卡中设置最大设计区，可以确定表单的大小。

要想运行“表单向导”，在“工具”菜单中选择“向导”子菜单，再选择“表单”，然后在“向导选择”对话框中选择“表单向导”。

步骤 1 - 字段选取

只能在单独的表或视图中选取字段。

步骤 2 - 样式

当您单击“样式”框中的任何样式时，向导在放大镜中显示一个图片，作为这种样式的例子。

按钮类型用于表单的定位按钮。向导在表单上创建的定位按钮有：

第一个	将记录指针移动到第一个记录。
前一个	将记录指针移动到上一个记录。
下一个	将记录指针移动到下一个记录。
最后一个	将记录指针移动到最后一个记录。
查找	显示“搜索”对话框。
打印	打印报表。
添加	在表末尾添加一个新记录。
编辑	允许用户更改当前记录的值。
删除	删除当前记录。
退出	关闭表单。
附注

向导保存表单之后，可以与从“表单”菜单中选择“快速表单”命令相同的方式向表单中添加字段。

由“表单向导”和“表单生成器”创建的控制都保存在 WIZARDS\WIZSTYLE.VCX 中。如果您想改变样式，可修改这个文件中的类。

步骤 3 - 排序次序

按照记录的排序顺序选择字段。

步骤 4 - 完成

保存表单之后，可以象其它表单一样，在表单设计器中打开并修改它。


请参阅

使用向导


图形向导

请参阅

“图形向导”使用 Microsoft Graph 根据 Visaul FoxPro 表创建一个图形。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定图形所使用的表和字段。

表越大，向导处理图形的时间越长。在运行“图形向导”之前，您需要考虑创建一个视图，以限制记录的范围。

要运行“图形向导”，在“工具”菜单中选择“向导”子菜单，再选择“查询”命令，然后在“向导选择”对话框中选择“图形向导”。

步骤 1 - 字段选取

只能从单独的表或视图中选取字段。源表必须包含至少一个数值字段。

步骤 2 - 布局

在“坐标轴”区域中的字段数据会以图例的方式显示出来。

步骤 3 - 图形样式

每种图形样式按不同的方式绘制数据。请查看按钮上的图并从中选择您需要的样式。

步骤 4 - 完成

如果您选择把图形保存为表，向导将创建只有一个记录的表，记录中的通用字段保存图形的 OLE 对象。向导完成之后，会保持打开新建的表。要查看图形，浏览新表并双击这个 OLE 图形字段。

如果选择创建一个查询，向导会保存该查询，此查询把它的结果传送给一个图形。向导保存查询之后，您可以象其它查询一样，在查询设计器中打开并修改它。

如果在步骤 2 和 3 预览您的图形，可以看见由它创建的标识坐标系数据的图例。要保留这个图例，选择“在图形中添加图例”选项。


请参阅

使用向导

交叉表向导

本地视图向导

查询向导

远程视图向导

运行查询


分组/总计报表向导

请参阅

“分组/总计报表向导”创建一个总计报表。向导提问一些简单问题，并创建分组数据的表达式。

要运行“分组/总计报表向导”，在“工具”菜单中选择“向导”子菜单，再选择“报表”命令，然后在“向导选择”对话框中选择“分组/总计向导”。

步骤 1 - 字段选取

只能从单独的表或视图中选取字段。

步骤 2 - 分组

可以使用数据分组将记录分类和排序，这样可以很容易地读取它们。当在“分组依据”框选择一个字段时，还可以选择三点按钮，进一步修改分组。有关分组数据的详细内容，请参阅在布局中分组数据。

步骤 3 - 排序次序

请按照每组中记录的排序次序选择字段。步骤 2 中选择的用来分组的字段在这一步不可用。

有关详细内容，请参阅《用户指南》第四章“用索引对数据排序”。

步骤 4 - 样式

当单击任何一种样式时，向导都更新放大镜中显示的样式示例。

Step 5 - 完成

如果选择的字段数与报表的一行的宽度不一致，这些字段会放在下一行。如果不想自动换行，清除“对不能容纳的字段进行折行处理”选项的选定。

向导保存报表之后，可以象其它报表一样，在报表设计器中打开并修改它。


请参阅

使用向导

在布局中分组数据

一对多报表向导

报表向导


导入向导

请参阅

“导入”向导从其它格式的文件中将数据导入 Visual FoxPro 表。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定源文件以及是否创建一个新文件或者向一个已存在的文件中追加数据。

步骤 1 - 源文件和目标文件

选择三点按钮，指定源文件和目标文件。

步骤 1a - 选项

当看到数据表格时，切记它还没有被导入；向导只是在为便于解释而显示数据。

若要改变数据表格的列宽度，将光标放在两列之间的标头上。光标会变成为双箭头。请记住，改变列的宽度不影响实际的表结构。

选择“选项”按钮，显示“导入向导选项”对话框。只有导入的文件类型能够使用的选项可用。如果不知道如何设置选项，可以在对话框中做选择，从而查看示例数据的外观。

“导入向导选项”对话框

所有字段的长度都固定

这个选项适用于文本文件。它按照固定的字符数把文本中的每一行分成字段。

字段分隔符

该选项适用于文本文件。它按照逗号、制表符或分号的位置分割文本的每一行。当文本文件的行宽度不是一个固定值时，可以选择这个选项。

将连续分隔符作为单个符号处理

当选择“字段分隔符”选项时该选项可用。

文字识别符号

对于某些数据，单或双引号用来表明它们包围的字符应该全部当成文本处理，即使那些被当成分割符的字符。

导入起始行

指定在源文件中开始导入记录的行号。如果源文件的第一行包含您不想导入的标头，可以从第 2 行开始导入。

在这个选项中指定的数会在示例表格中反应出来。没有导入的记录号将显示为灰色（不可用）。

扫描所有记录

当向导分析数据以便将它们分割成为字段时，选择这个选项可以扫描所有记录。当选择“所有字段的长度都固定”选项时，最好也选择这个选项，这样向导会调整列宽以容纳最长的字段。根据源文件中的记录数，扫描所有记录会花费较长时间。默认情况下，向导只分析源文件的前 50 个记录。

代码页

指定源文件的代码页。

小数分隔符

指定源文件使用的小数分隔符。

千位分隔符

指定源文件使用的千位分隔符。

时间格式

指定源文件使用的时间格式。

货币符号

指定源文件使用的货币符号。

附注

小数分隔符、千位分隔符、时间格式和货币符号用于将数据导入到数值型、货币型、日期型、日期时间型和整型数据中。数据类型在步骤 2 中指定。如果导入的数据不是按照本国设置保存的，应指定合适的选项。

步骤 1a -列

当导入一个固定宽度的文本文件时，向导显示这一步。当看到数据表格时，切记它还没有被导入；向导只是为了便于解释而显示数据。

若要添加列分隔符，在想放置的地方单击表格。拖动分隔符可移动一列。若要移去列分隔符，将它从表格上拖动到标尺上。

步骤 2 - 字段设置

当创建一个新表时向导显示这一步。

如果您不想导入某一列，单击这一列，然后在“名称”框中删除所有的文本。

步骤 2 - 字段映象

当向一个已存在的表中追加数据时向导显示这一步。

默认情况下，向导按照已存在字段顺序把源文件中的字段映射到目标表中。表格按照映射的已存在字段的样式显示导入数据。

若要更改源文件的字段映射方式，目标表中的字段不能已经指定给源文件的另一个字段。对于这种情况，必须解除源文件中对字段的指定。

� 若要解除对字段的指定

1.	.单击一列。

2.	在“名称”框中选择“未指定字段”。

目标表中的字段就可以用源表中的任何字段来映射了。

� 若要将源文件中的字段映射到目标表的不同字段

1.	在源文件中单击包含字段的列。

2.	在“名称”框中，选择任何一个目标表中可用的字段名。

附注

如果使列保持未指定状态，字段的数据就不能导入到目标表中。这样，如果不想导入某列，只要单击该列，然后在“名称”框中选择“未指定字段”。

当选择一列时，向导在“类型”、“宽度”和“小数”框中显示字段的设置值。查看这些字段的设置值，以确认选择了正确的目标字段。

如果映射字段的数据类型不匹配，则追加记录内不匹配的字段中包含 0 或“假”(.F.)。

步骤 3 - 完成

若要在导入数据之后查看表，打开该表并浏览它。


请参阅

使用向导

深入了解代码页


标签向导

请参阅

“标签向导”从一个表创建标签。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定用于在报表上创建控制的表和字段。

步骤 1 - 表选取

选取一个表或视图。

步骤 2 - 标签类型

向导列出 Visual FoxPro 安装的标准标签类型。有关其它标签类型，请参阅 ADDLABEL.APP。

步骤 3 - 布局

按照在标签中出现的顺序添加字段。请选定字段名，并选择 > 按钮。若要在同一行上放置多个字段，添加第一个字段，然后选择空格按钮，或者标点符号按钮，然后添加下一个字段。若要在一行上添加文本，在文本框中输入文本，并选择 > 按钮。要开始新行，选择空格按钮下的新行按钮。

当向标签中添加各项时，向导窗口中的图片会更新来近似地显示标签的外观。查看这个图片，看选择的字段在您的标签上是否合适。如果文本行过多，则文本行会超出标签的底边。

步骤 4 - 排序次序

按照排序记录的顺序选择字段。有关详细内容，请参阅《用户指南》第四章“用索引对数据排序”。

步骤 5 - 完成

向导保存标签之后，可以象其它标签一样，在标签设计器中打开并修改它。


请参阅

使用向导

使用索引设置记录顺序

设置报表数据源


本地视图向导

请参阅

“本地视图向导”用本地数据创建视图。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定在视图中使用的数据库、表和字段。必须有一个已存在的数据库，以保存您的视图。

要运行“本地视图向导”，在“工具”菜单中选择“向导”子菜单，再选择“查询”命令，然后在“向导选择”对话框中选择“本地视图向导”。

步骤 1 - 字段选取

可以从几个表或视图中选取字段。首先从一个表或视图中选取字段，并将它们移动到“选定字段”框中，然后从另一个表或视图中选取字段，并移动它们。

步骤 2 - 关系

从两个下拉式列表中选择字段，然后选择“添加”。如果在视图中使用多个表，必须通过指明每个表中哪个字段包含匹配数据来联系这些表，

有关关系的详细内容，请参阅准备表关系。

步骤 3 - 排序次序

按照视图结果排序的顺序选择字段。

步骤 4 -筛选

有关详细内容，请参阅选择想要的记录。

步骤 5 - 完成

向导保存视图之后，可以象其它视图一样，在视图设计器中打开并修改它。


请参阅

使用向导

创建表关系

选择想要的记录

交叉表向导

图形向导

查询向导

远程视图向导


邮件合并向导

请参阅

“邮件合并向导”创建 Microsoft Word 合并文档的数据源，或者任何字处理器中都可以使用的文本文件。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定要使用的表和字段。

若要创建 Microsoft Word 合并文档，您的计算机上必须安装 Microsoft Word 6.0 和 ODBC。Visaul FoxPro 安装程序能安装 ODBC。

有关合并文档的详细内容，请参阅 Microsoft Word 的“帮助”。

步骤 1 - 字段选取

只能从单个的表或视图中选取字段。

步骤 2 - 字处理器

如果选择 Microsoft Word 6.0 选项，您的计算机上必须安装 Microsoft Word 6.0。如果选择“逗号分隔的文本文件”选项，向导会跳过步骤 3 和步骤 4 ，直接显示“完成”屏幕。

步骤 3 - 文档类型

创建新文档或向以存在的文档中添加数据。

步骤 4 - 文档样式

选择一种 Microsoft Word 合并文档类型。

步骤 5 - 完成

如果选择创建 Microsoft Word 文档，向导会在 Microsoft Word 中打开该文档。

如果选择创建文本文件，向导会提示保存文件，以后可以在其它字处理器中打开该文件。


请参阅

使用向导

导出数据

导入和导出数据


一对多表单向导

请参阅

“一对多表单向导”创建一个表单，该表单用于操作两个相关表中的数据。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定表和字段，用这些表和字段创建表单上的控制。通过在“选项”对话框的表单选项卡中设置最大设计区，可以确定表单的大小。

要运行“一对多表单向导”，在“工具”菜单中选择“向导”子菜单，再选择“表单”命令，然后在“向导选择”对话框中选择“一对多表单向导”。

步骤 1 - 从父表中选定字段

只能从单个的表或视图中选取字段。

步骤 2 - 从子表中选定字段

只能从单个的表或视图中选取字段。

步骤 3 - 关系

有关关系的详细内容，请参阅准备表关系。

步骤 4 - 样式

可在“样式”框中单击任何样式，向导会在放大镜中显示该样式的示例。

按钮类型用于表单的定位按钮。向导在表单上创建的定位按钮有：

第一个	将记录指针移动到第一个记录。
前一个	将记录指针移动到上一个记录。
下一个	将记录指针移动到下一个记录。
最后一个	将记录指针移动到最后一个记录。
查找	显示“搜索”对话框。
打印	打印报表。
添加	在表的末尾添加一个新记录。
编辑	允许用户更改当前记录的值。
删除	删除当前记录。
退出	关闭表单。
附注

向导保存表单之后，可以用与从“表单”菜单中选择“快速表单”命令相同的方式向表单中添加字段。

由“表单向导”和“表单生成器”创建的控制都保存在 WIZARDS\WIZSTYLE.VCX 中。如果想改变样式，应修改这个文件中的类。

步骤 5 - 排序次序

按照记录的排序顺序选择字段。

步骤 6 - 完成

保存表单之后，可以象其它表单一样，在表单设计器中打开并修改它。


请参阅

使用向导

表单设计器


一对多报表向导

请参阅

“一对多报表向导”创建一个报表，它将父表和子表的记录分组。在一系列简捷的步骤中，向导提示您回答一些简单的问题，从中可以指定表和字段，用这些表和字段创建报表上的控制。

要运行“一对多报表向导”，在“工具”菜单中选择“向导”子菜单，再选择“报表”命令，然后在“向导选择”对话框中选择“一对多报表向导”。

步骤 1 - 从父表选择字段

只能从单个的表或视图中选取字段。

步骤 2 - 从子表选择字段

只能从单个的表或视图中选取字段。

步骤 3 - 关系

有关关系的详细内容，请参阅准备表关系。

步骤 4 - 排序次序

按照将视图结果排序的顺序选择字段。有关详细内容，请参阅《用户指南》第四章“用索引对数据排序”。

步骤 5 - 样式

当单击任何一种样式时，向导都在放大镜中更新该样式的示例图片。

步骤 6 - 完成

如果选择的字段数与报表的一行的宽度不一致，这些字段会放在下一行。如果不想自动换行，清除“对不能容纳的字段进行折行处理”选项。

向导保存报表之后，可以象其它报表一样，在报表设计器中打开并修改它。


请参阅

使用向导

分组/总计报表向导

报表向导

创建一对多报表

使用索引设置记录顺序

设置报表数据源


数据透视表向导

请参阅

数据透视表向导创建透视表。透视表是一个交互的工作表，它允许总结和分析现有表中的数据。可以选择将透视表直接保存在 Microsoft Excel 中或者作为嵌入的对象添加到表单上。

要创建透视表，计数机上必须装有带 Microsoft Query 的 Microsoft Excel。有关透视表的详细信息，请参阅 Microsoft Excel 帮助。

步骤 1 - 字段选取

只能从单个表或视图中选择字段。

步骤 2 - 布局

对应于拖到“列”框中字段的每一个唯一值，透视表将包含一个列；对应于拖到“行”框中字段的每一个唯一值，透视表将包含一个行。如果把字段拖到“页”框中，透视表将包含一个下拉列表，从中可以选择不同的页。对应于拖到“页”框中字段的每一个唯一值，透视表将包含一个页。

步骤 3 - 完成

如果选择“创建 Excel 数据透视表”选项，向导将在 Microsoft Excel 中显示完成的数据透视表。

如果选择“创建嵌入数据透视表的新表单”选项，向导将创建一个包含嵌入透视表的新表单，并在表单设计器中打开。双击嵌入的透视表可以修改它。


请参阅

使用向导


查询向导

请参阅

查询向导创建查询。当经过一系列简洁的步骤时，向导提示您回答简单的问题。从中可以指定查询中使用的数据库、表和字段。

若要运行查询向导，从“工具”菜单内“向导”子菜单中选择“查询”，然后在“向导选择”对话框中选定“查询向导”。

步骤1 - 字段选取

可以从几个表和视图中选择字段。首先，从一个表或视图内选择字段并且移到“选定字段”框中，然后从另外表或视图中选择并移动字段。

步骤2 - 关系

有关关系的详细信息，请参阅准备表关系。

步骤 3 - 排序次序

按查询结果排序的顺序选择字段。

步骤 4 -筛选

有关相关信息，请参阅选择想要的记录。

步骤 5 - 完成

保存查询后，可以象其它查询一样在查询设计器中打开或修改它。


请参阅

使用向导

创建表关系

选择想要的记录

交叉表向导

本地视图向导

图形向导

远程视图向导


远程视图向导

请参阅

远程视图向导创建使用远程数据的视图。当经过一系列简洁的步骤时，向导提示您回答简单的问题。从中指定视图中使用的数据库、表和字段。必须存在一个数据库来保存视图，同时还需要存在数据源或连接。

在运行远程视图向导之前，可以在“选项”对话框的远程数据选项卡上设置远程视图和连接的默认选项。

若要运行远程视图向导，从“工具”菜单内“向导”子菜单中选择“查询”，然后在“向导选择”对话框中选定“远程视图向导”。

步骤 1 - 数据源选取

向导列出计算机上可用的数据源 和已有的连接 。必须在运行向导之前定义它们。如果远程数据源需要口令，在单击“下一步”之前会提示您输入口令。

步骤 2 - 字段选取

可以从几个表和视图中选择字段。首先，从一个表或视图内选择字段并且移到“选定字段”框中，然后从另外表或视图中选择并移动字段。

步骤 3 -关系

从两个下拉列表中选择所需字段，然后选择“添加”。有关关系的详细信息，请参阅准备表关系。

如果需要外部连接到远程视图之中，选择“外部连接”选项。

步骤 4 - 排序次序

按照视图查询结果排序的顺序选择字段。

步骤 5 - 筛选

有关相关信息，请参阅选择想要的记录。

步骤 6 - 完成

保存远程视图后，可以象其它视图一样在视图设计器中打开或修改它。


请参阅

使用向导

选择想要的记录

交叉表向导

本地视图向导

图形向导

查询向导


报表向导

请参阅

报表向导创建使用单个表的报表。当经过一系列简洁的步骤时，向导提示您回答简单的问题。从中可以指定用以创建报表中控制的表和字段。

若要运行报表向导，从“工具”菜单内“向导”子菜单中选择“查询”，然后在“向导选择”对话框中选定“报表向导”。

步骤 1 -字段选取

只能从单个表或视图中选择字段。

步骤 2 -样式

当单击任何一种样式时，向导都在放大镜中更新成该样式的示例图片。

步骤 3 -布局

指定列数或布局时，向导即在放大镜中更新成选定布局的实例图形。

步骤 3 - 排序次序

按照视图查询结果排序的顺序选择字段。有关详细信息，请参阅《用户指南》第三章，“使用索引排序数据”。

步骤 4 - 完成

如果选定数目的字段不能放置在报表中单行指定宽度之内，字段将换到下一行上。如果不希望字段换行，清除“对不能容纳的字段进行折行处理”选项。

保存报表后，可以象其它报表一样在报表设计器中打开或修改它。


请参阅

使用向导

分组/总计报表向导

一对多报表向导

创建一对多报表

使用索引设置记录顺序

设置报表数据源


表向导

请参阅

表向导基于典型的表结构创建表。向导允许从样表中选择满足需要的表。在一步步经过向导的过程中，可以定制表的结构和字段。也可以在向导保存表之后修改表。

如果有一个或多个数据库打开，表向导自动将新建表添加到当前数据库中。如果没有数据库打开，表向导将创建一个自由表.

步骤 1 -字段选取

单击样表中的一个表，看它包含的字段。在中间列表中选择想要添加到表中的字段。可以从多个表中选择字断。

步骤 2 - 字段设置

如果创建一个自由表，不能更改字段标题。

步骤 3 - 索引

有关索引的信息，请参阅使用索引。

步骤 4 - 完成

保存表后，以后可以象其它表一样在表设计器中打开或修改它。

选择“保存并浏览表”选项，可以在新建表中输入数据。单击“完成”，新建表将显示在浏览窗口中。然后从“表”菜单中选择“追加新记录”来向表中添加记录。


请参阅

使用向导

使用索引


自动格式生成器

请参阅

“自动格式生成器”将一组样式，用于所选定的同一类型的控制。可以指定是否将样式用于所有控制的边框、颜色、字体、布局或三维效果，或者用于其中的一部分。

当选择“确定”时，生成器关闭，所选定的样式开始生效。

快捷键

   （“表单设计器”工具栏）

生成器选项

样式

指定“浮雕式”、“标准式”或“专业式”样式。当单击样式时，左边的显示将更新，可以看到样式的外观。

应用样式于

边框

将所选定的样式用于控制的边框，该选项对应于 BorderStyle 属性。

颜色

将所选定的样式作用于控制的颜色，该选项对应于 BackColor 和 ForeColor 属性，BackStyle 属性 BackColor 和 ForeColor 属性，BackStyle 属性，请参阅设置一个表单的前景和背景颜色。

字体

将所选定的样式作用于控制的字体，请参阅改变文本的字体和大小。

布局

将所选定的样式用于控制的对齐方式。

三维效果

将所选定的样式用于控制的三维效果。

现在应用

在不离开“自动格式生成器”的情况下，将样式用于所选定的控制。


请参阅

BackColor 和 ForeColor 属性

BackStyle 属性

BorderColor 属性

BorderStyle 属性

改变文本的字体和大小

设置一个表单的前景和背景颜色

使用生成器


组合框生成器

请参阅

“组合框生成器”使得为组合框控制设置属性十分方便，可以在熟悉的对话框中选择选项来设置属性。

组合框控制类似于列表框加上文本框。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始应作用于控制。

生成器选项卡

列表项

从表、数组或手选选择中指定项，以便在组合框中显示。

样式

指定外观或特定的效果、下拉组合或列表，以及递增搜索。

布局

控制列宽和显示。

值

指定返回值的列表和存贮这些值的位置。


请参阅

组合框控制

布局选项卡，组合框生成器

列表项选项卡，组合框生成器

样式选项卡，组合框生成器

值选项卡，组合框生成器


列表项选项卡,组合框生成器
列表项选项卡，组合框生成器

请参阅

组合框生成器中的“列表项”选项卡指定要加入组合框中的项，其它的“组合框生成器”选项卡为：布局、样式和值。

当选择“确定”时，生成器关闭，并且各个选项卡中的属性设置开始作用于控制。

选项卡选项

用此填充列表

指定用来填充组合框列表的数据类型，这里所做的选择决定了在这个选项卡中出现的选项。选项为：表和视图中的字段、手工输入的数据以及数组中的值。每部分选项的说明如下：

表和视图中的字段

数据库/表

列出可用的数据库，给出选项来选择“自由表”。为了查找某个数据库或表，可单击三点按钮，这时会显示打开对话框。

表列表

显示所选定的数据库或自由表中的表与视图。

可用字段

显示所选定的表或视图中所有的字段。选择在组合框中需要的数据的字段。

箭头按钮

向选定字段框中添加字段或从中删除字段。

也可以双击某个项，使其在列表之间移动。

选定字段

显示用来填充组合框列表的字段，所选定的字段的顺序对应于组合框中列的顺序。

手工输入的数据

列

指定组合框列表的列数。

列表格

显示要输入数据的列，在列单元中键入数据。用鼠标拖动列之间的线，可以调整列的大小。

数组中的值

数组名

指定一个数组名。

整个数组

用整个数组填充组合框列表。

某一范围的数组

根据列和行的设置，用部分数组填充组合框列表。

列和行区域

指定起始列、行与结尾列、行作为数组范围的界限，这些选项只在选择“某一范围的数组”时可用。


请参阅

组合框生成器

ControlSource 属性

创建数组属性

布局选项卡，组合框生成器

打开（文件菜单）

RowSource 属性

RowSourceType 属性

样式选项卡，组合框生成器

使用生成器

值选项卡，组合框生成器


样式选项卡,组合框生成器
样式选项卡，组合框生成器

请参阅

组合框生成器中的样式选项卡为组合框指定特定的效果，下拉组合或列表，以及递增搜索。其它的“组合框生成器”选项卡为：列表项选项卡、布局选项卡和值选项卡。

当选择“确定”时，生成器关闭，各个选项中的属性设置开始作用于控制。

选项卡选项

三维

指定组合框外观为三维形式。

平面

指定组合框外观为平面形式。

下拉组合框

指定组合框为下拉组合框，在框中用户可以单击下拉箭头来查看选项列表，或者可以直接在文本框中输入新的项，该选项对应于将 Style 属性设置为 0。

下拉列表

指定组合框为下拉列表，在框中用户只能从列表中选择，该选项对应于将 Style 属性设置为 2。

是，允许递增搜索

指定在用户键入每个字母时，控制是否匹配列表中的项，该选项对应于 IncrementalSearch 属性。

否，不允许递增搜索

使递增搜索无效。


请参阅

组合框生成器

IncrementalSearch 属性

列表项选项卡，组合框生成器

布局选项卡，组合框生成器

Style 属性

使用生成器

值选项卡，组合框生成器


布局选项卡,组合框生成器
布局选项卡，组合框生成器

请参阅

组合框生成器中的“布局”选项卡控制列宽和显示，“组合框生成器”中其它的选项卡为，列表项选项卡、样式选项卡和值.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始作用于控制。

选项卡选项

调整组合框的宽度来显示所有列

指定显示所有的列，并且按需要自动调整组合框的大小。

列表格

显示在“列表项”选项卡中定义的列，可以用鼠标拖动列标头的右边，来调整列宽。双击列标头可以隐藏列。

如果实际数据可用，则表格显示这些数据；如果没有可用数据，则对此结果显示一条信息。

若更改列顺序，返回到“列表项”选项卡中，删除字段，然后按需要的顺序添回字段。


请参阅

组合框生成器

列表项选项卡，组合框生成器

样式选项卡，组合框生成器

使用生成器

值选项卡，组合框生成器


值选项卡,组合框生成器
值选项卡，组合框生成器

请参阅

组合框生成器中的“值”选项卡指定在何处得到返回值，和存贮这些值。组合框生成器的其它选项卡为：列表项选项卡、样式选项卡和布局选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始作用于控制。

选项卡选项

从此处返回值

在用户选择组合框中的项时，指定把值存贮于表字段中的列。该选项对应于 BoundColumn 属性。

字段名

指定一个表或视图字段，将在“从此处返回值”框中指定的值存贮在该字段中。在默认情况下，列表包括数据环境下表里的字段。选择三点按钮，则显示打开对话框，从而可以选择另一个表。该选项对应于 ControlSource 属性。

例如，如果用 50 个州的列表填充组合框，则当用户选择某一个州时，可以将这个州写入地址表的 STATE 字段。


请参阅

BoundColumn 属性

组合框生成器

ControlSource 属性

布局选项卡，组合框生成器

列表项选项卡，组合框生成器

打开（文件菜单）

样式选项卡，组合框生成器

使用生成器


命令组生成器

请参阅

“命令组生成器”使得为“命令组”控制设置属性十分方便，可以在熟悉的对话框中选择选项来设置属性。

单击“命令”按钮，会执行一条命令。命令组是一组类似的命令按钮的容器。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

生成器选项卡

按钮

指定按钮数及其标题和图形。

布局

指定按钮布局（竖直或水平）、间距和边框样式。


请参阅

生成器命令

按钮选项卡，命令组生成器

命令按钮控制

命令组控制

布局选项卡，命令组生成器

属性窗口

使用生成器


按钮选项卡,命令组生成器
按钮选项卡，命令组生成器

请参阅

命令组生成器中的“按钮”选项卡指定按钮的数目及其标题与图形，该生成器还有布局选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

按钮的数目

指定命令组中的按钮数，该选项对应于 ButtonCount 属性，数目范围为 1 到 100 之间。

标题列

指定与按钮相应的标题，在表格单元中键入标题。该选项对应于 Caption 属性。

图形列

指定位图的路径和文件名，以显示在按钮上。可在框中键入路径和文件名，或者单击三点按钮显示打开对话框来选择文件。不论按钮处于何种状态，此图片总是显示在命令按钮上。该选项对应于 Picture 属性。

按钮可以自动调整大小，以容纳新的标题和图片。组容器也可以自动调整大小，而且如果有必要保存必要的间距，则对相邻的按钮再定位。

附注：

命令按钮有标题、图形或二者兼有。可以指定当按钮无效或按下按钮时显示的图形，但是必须在程序中或者在属性窗口中这么做。有关详细内容，请参阅 DisabledPicture 和 DownPicture 属性。


请参阅

ButtonCount 属性

Caption 属性

命令组生成器

DisabledPicture

DownPicture 属性

布局选项卡，命令组生成器

打开（文件菜单）

Picture 属性

属性窗口

使用生成器


布局选项卡,命令组生成器
布局选项卡，命令组生成器

请参阅

命令组生成器中的“布局”选项卡指定按钮布局（竖直或水平）、间距和边框样式。该生成器还有按钮选项卡。

当选择“确定”时，生成器关闭，各选项卡中的属性设置开始生效。

选项卡选项

按钮布局

指定命令组按钮在竖直方向或水平方向的布局。

如果已经定制了按钮布局，则不需要选择竖直方向或水平方向；如果选择了竖直方向或者水平方向，则按钮立刻进行对齐，但会失去自定义的布局。按“取消”项可以恢复自定义布局。

按钮间隔

指定按钮之间的间隔。

如果已经定制了按钮间隔，可以废止此选项。如果按钮按水平方向或竖直方向对齐，则该选项是激活的。

边框式样

指定命令组四周为单线边框或无边框。


请参阅

按钮选项卡，命令组生成器

命令组生成器

使用生成器


编辑框生成器

请参阅

“编辑框生成器”使得为“编辑框”控制设置属性十分方便，可以在选择熟悉的对话框中选择选项来设置属性。

编辑框一般用来显示长的字符型字段或者备注型字段，并且允许用户编辑文本。也可以显示文本文件中的文本或者没有存贮的文本。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

生成器选项卡

格式

为编辑框指定多种的格式选项。

样式

指定编辑框的外观形式、边框和对齐方式。

值

指定存贮编辑框的值的字段。


请参阅

编辑框控制

格式选项卡，编辑框生成器

在编辑框中对选定文本进行处理

属性窗口

样式选项卡，编辑框生成器

使用生成器

值选项卡，编辑框生成器


格式选项卡,编辑框生成器
格式选项卡，编辑框生成器

请参阅

编辑框生成器 中的“格式”选项卡指定编辑框的多种格式选项，例如添加竖直滚动条和使框为只读。该生成器还有样式选项卡和值选项卡.。

当选择“确定”时，生成器关闭，各选项卡中的属性设置开始生效。

选项卡选项

允许用户输入制表符

允许用户在编辑框中插入制表符。这会防止按下 TAB 键时，焦点移动到下一个控制中，但按 CTRL+TAB 复合键可以将焦点移动到下一个控制中。该选项对应于 AllowTabs 属性。

添加垂直滚动条

给编辑框添加竖直滚动条，该选项对应于 ScrollBars 属性。

进入时选定

指定当编辑框有焦点时，选择编辑框中的文本。该选项为 Format 属性添加设置“K”。

使用当前的 SET DATE

给 Format 属性添加设置“E”。

隐藏选定内容

指定当编辑框没有焦点时，是否保持编辑框中选定的文本可见。该选项对应于 HideSelection 属性。

在运行时启用

指定当运行表单时，是否启用编辑框。该选项对应于 Enabled 属性。

使其只读

不允许用户更改编辑框中的文本。该选项对应于 ReadOnly 属性。

不列颠日期

给 Format 属性添加设置“E”。


请参阅

AllowTabs 属性

编辑框生成器

Enabled 属性

Format 属性

HideSelection 属性

ReadOnly属性

ScrollBars 属性

样式选项卡，编辑框生成器

使用生成器

值选项卡，编辑框生成器


样式选项卡,编辑框生成器
样式选项卡，编辑框生成器

请参阅

编辑框生成器 中的“样式”选项卡指定编辑框的外观效果、边框和对齐方式。该生成器还有格式选项卡和值选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

特殊效果

三维

指定编辑框外观为三维形式。该选项对应于 SpecialEffect 属性。

平面

指定编辑框为二维形式。该选项对应于 SpecialEffect 属性。

边框

单线

指定编辑框为单线边框。该选项对应于 BorderStyle 属性。

无

指定编辑框四周没有边线。该选项对应于 BorderStyle 属性。

字符对齐方式

左对齐

指定编辑框中的文本左对齐。该选项对应于 Alignment 属性。

右对齐

指定编辑框中的文本右对齐。该选项对应于 Alignment 属性。

居中对齐

指定编辑框中的文本居中对齐，该选项对应于 Alignment 属性。


请参阅

Alignment 属性

BorderStyle 属性

编辑框生成器

格式选项卡，编辑框生成器

SpecialEffect 属性

使用生成器

值选项卡，编辑框生成器


值选项卡,编辑框生成器
值选项卡，编辑框生成器

请参阅

编辑框生成器中的“值”选项卡指定贮存编辑框的值的字段，该生成器还有格式选项卡和样式选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

字段名

指定一个表或视图字段来存贮编辑框的值。可以键入字段名或单击三点按钮显示打开对话框，在其中选择另一个表或视图。在“编辑框生成器”中，单击“字段名”框旁的下拉箭头，可以选择字段。

该选项卡的默认内容为数据环境下的所有字段。此选项对应于 ControlSource 属性。


请参阅

ControlSource 属性

编辑框生成器

格式选项卡，编辑框生成器

打开（文件菜单）

样式选项卡，编辑框生成器

使用生成器


表单生成器

请参阅

“表单生成器”使得向表单中添加字段十分方便，这里的字段用作新的控制。可以在熟悉的对话框格式中选择选项，来添加控制和指定样式。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

生成器选项卡

字段选取选项卡

指定作为格式控制添加的字段。

样式选项卡

为控制提供几种样式选项，如果必要，还提供放大表单的选项。表单大小只放大到适合“最大设计区域”的大小，就象在“选项”对话框的表单选项卡中设置的一样。

这里的样式对应于“表单向导”提供的样式。如果用向导创建表单，然后希望添加同一样式的新的控制，那么请使用“表单生成器”。也可以用不同的样式添加新的控制。在“表单生成器”中选择的样式并不影响表单中已存在的控制。为了对其格式化，可使用自动格式生成器。


请参阅

使用快速表单添加字段

自动格式生成器

字段选择选项卡，表单生成器

表单选项卡（选项对话框）

样式选项卡，表单生成器

使用生成器


字段选择选项卡,表单生成器
字段选择选项卡，表单生成器

请参阅

表单生成器中的“字段选择”选项卡指定要作为表单控制添加的字段，该生成器还有样式选项卡.。

当选择“确定”时，生成器关闭，各个选项卡的属性设置开始生效。

选项卡选项

数据库/表

列出可用的数据库，并给出选择“自由表”的选项。若查找一个数据库或表，可单击三点按钮，显示打开对话框。

表的列表

显示选定数据库或自由表中的表和视图。

可用字段

显示选定的表或视图中所有的字段，并选择包含有表单所需要数据的字段。

箭头按钮

向“选定字段”框中添加和删除字段。

选定字段

显示在表单中作为控制出现的字段。


请参阅

表单生成器

打开（文件菜单）

样式选项卡，表单生成器

使用生成器


样式选项卡,表单生成器
样式选项卡，表单生成器

请参阅

表单生成器中的“样式”选项卡为控制提供几种样式选项，并提供选项放大表单以容纳数据，表单大小仅放大到适合“最大设计区域”的大小，就象在“选项”对话框的表单选项卡中设置的一样。

该生成器还有字段选取选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

样式

指定表单控制的样式。

根据需要放大表单

指定生成器放大表单来容纳选定字段。


请参阅

使用生成器

字段选择选项卡，表单生成器

表单生成器

表单选项卡（选项对话框）


表格生成器

请参阅

“表格生成器”使得为表格控制设置属性十分方便，可以在熟悉的对话框格式中选择选项来设置属性。

表格控制允许在表单或页面中显示和操作数据的行与列。

附注：

在运行表单前，确保已经调整了表格控制的大小，以完整显示数据。

当选择“确定”时，生成器关闭，各个选项卡的属性设置开始生效。

生成器选项卡

表格项

指定要在表格中显示的字段。

样式

指定表格显示的样式。

布局

指定列标题和控制类型。

关系

指定表格字段与表字段之间的关系。


请参阅

表格控制

表格项选项卡，表格生成器

布局选项卡，表格生成器

RecordSource 属性

RecordSourceType 属性

关系选项卡，表格生成器

样式选项卡，表格生成器

使用生成器


表格项选项卡,表格生成器
表格项选项卡，表格生成器

请参阅

表格生成器中的“表格项”选项卡指定要在表格中显示的字段。该生成器还有样式选项卡、布局选项卡和关系选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

附注：

只可以从单个表中选择字段。

选项卡选项

数据库/表

列出可用的数据库，并给出选择“自由表”的选项。若查找一个数据库或表，单击三点按钮，则显示打开对话框。

表的列表

显示选定数据库或自由表中的表和视图，。

可用字段

显示选定的表中所有字段，只可以从一个表中选择字段。

箭头按钮

向“选定字段”列表中添加或从中删除字段。

选定字段

显示要在表格中出现的字段，每个字段在表格中为一列。


请参阅

表格生成器

布局选项卡，表格生成器

打开（文件菜单）

关系选项卡，表格生成器

样式选项卡，表格生成器

使用生成器


样式选项卡,表格生成器
样式选项卡，表格生成器

请参阅

表格生成器中的“样式”选项卡指定表格显示的样式，该生成器还有表格项选项卡、布局选项卡和关系选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

样式

指定表格显示的样式为“专业式”、“标准式”、“浮雕式”或“帐务式”。或者可以选择保留当前样式。


请参阅

表格生成器

表格项选项卡，表格生成器

布局选项卡，表格生成器

关系选项卡，表格生成器

使用生成器


布局选项卡,表格生成器
布局选项卡，表格生成器

请参阅

表格生成器中的“布局”选项卡指定列标题和控制类型。该生成器还有表格项选项卡、样式选项卡和关系选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

附注

在更改列标头之前，必须先选择该列。

选项卡选项

标题

为选定列指定标题，可以在框中键入标题。如果不指定标题，字段名即为列标头。

控制类型

指定选定列的控制类型。文本或编辑框为字符类型，文本或复选框为逻辑类型，而文本框或微调为数值类型。

表格显示

显示当前指定的表格列，且显示内容按照“标题和控制类型”的选择自动更新，可以拖动标头的右边，设置列为所要的宽度。


请参阅

表格生成器

表格项选项卡，表格生成器

样式选项卡，表格生成器

关系选项卡，表格生成器

使用生成器


关系选项卡,表格生成器
关系选项卡，表格生成器

请参阅

表格生成器中的“关系”选项卡指定表格字段和表字段之间的关系。该生成器还有表格项选项卡、样式选项卡和布局选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

父表中的关键字段

指定父表中的主关键字，而表格关键字字段和该关键字相关。此选项对应于 LinkMaster 属性。

子表中的相关索引

指定“表格”控制中记录源的索引标识名。该选项对应于 ChildOrder 属性。


请参阅

ChildOrder 属性

表格生成器

表格项选项卡，表格生成器

样式选项卡，表格生成器

布局选项卡，表格生成器

LinkMaster 属性

使用生成器


列表框生成器

请参阅

“列表框生成器”使得为“列表框”控制设置属性十分方便，可以在熟悉的对话框格式中选择选项来设置属性。

列表框给用户提供一个可滚动的列表，该列表包含一些信息或选项。在列表框中，总是可以看到多个项。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

生成器选项卡

列表项

指定填充列表框的项及其数据源。

样式

指定样式（三维或者二维）、行数和递增搜索。

布局

控制列宽和显示。

值

指定从哪一列得到返回值及存贮返回值的字段。


请参阅

生成器（快捷菜单）

布局选项卡，列表框生成器

列表框控制

列表项选项卡，列表框生成器

属性窗口

样式选项卡，列表框生成器

使用生成器

值选项卡，列表框生成器


列表项选项卡,列表框生成器
列表项选项卡，列表框生成器

请参阅

列表框生成器中的“列表项”选项卡指定要填充列表框的项，“列表框生成器”的其它选项卡为布局选项卡、样式选项卡和值选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

用此填充列表

指定填充列表的数据类型，此选择决定在这个选项卡中出现的选项。这里的选项包括表或视图中的字段、手工输入的数据和数组的值等等，每个选项设置的说明如下。

表或视图中的字段

数据库或表

列出可用的数据库和用来选择“自由表”的选项，若查找一个数据库或表，单击三点按钮，显示出打开对话框。

表的列表

显示所选定数据库或自由表中的表和视图。

可用字段

显示所选定的表或视图中所有的字段，选择包含有列表框所需要数据的字段。

箭头按钮

向“选定字段”列表中添加或从中删除字段。

选定字段

显示用来填充列表的字段。该选项对应于 RowSource 属性。

手工输入的数据

列

指定列表中的列数。该选项对应于 ColumnCount 属性。

列表格

显示输入数据的列，可在表格单元中键入数据。用鼠标拖动列之间的线可以调整列的大小。可以使用箭头键在列间移动。该选项对应于 RowSource 属性。

数组中的值

数组名

指定数组的名称。该选项对应于 RowSource 属性。

整个数组

指定用整个数组填充列表。

某一范围的数组

指定用数组的一部分填充列表。

列和行区域

指定起始列、行和结尾列、行作为数组范围的界限，这些选项在选择 Range of the Array 时可用。该选项对应于 FirstElement 属性、NumberOfElements 属性和ColumnCount 属性。


请参阅

创建数组属性

布局选项卡，列表框生成器

列表框生成器

打开（文件菜单）

RowSource 属性

RowSourceType 属性

样式选项卡，列表框生成器

使用生成器

值选项卡，列表框生成器


样式选项卡,列表框生成器
样式选项卡，列表框生成器

请参阅

列表框生成器 中的“样式”选项卡指定样式，所显示的行数和递增搜索。“列表框生成器”的其它选项卡为列表项选项卡、布局选项卡和值选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

三维

指定列表框外观为三维形式。该选项对应于 SpecialEffect 属性。

平面

指定列表框外观为二维形式。该选项对应于 SpecialEffect 属性。

要显示的行数

设置列表框的 Height 属性，框中每次只显示指定的行数。

是，允许递增搜索

指定在用户键入每个字母时，控制是否匹配列表中的项。该选项相当于将 IncrementalSearch 属性 设置为“真” (.T.)。

否，不允许递增搜索

废止递增搜索。


请参阅

Height 属性

IncrementalSearch 属性

布局选项卡，列表框生成器

列表框生成器

列表项选项卡，列表框生成器

SpecialEffect 属性

使用生成器

值选项卡，列表框生成器


布局选项卡,列表框生成器
布局选项卡，列表框生成器

请参阅

列表框生成器中的“布局”选项卡控制列宽和显示。“列表框生成器”的其它的选项卡为列表项选项卡、样式选项卡和值选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

调整列表框的宽度来显示所有列

指定显示所有的列，且按需要自动调整列表框的大小。该选项对应于 Width 属性。

列表格

显示在“列表项”选项卡中定义的列。可用鼠标拖动列标头的右边来调整列宽。双击列标头可隐藏列。该选项对应于 ColumnWidths 属性。


请参阅

ColumnWidths 属性

列表框生成器

列表项选项卡，列表框生成器

样式选项卡，列表框生成器

使用生成器

值选项卡，列表框生成器.

Width 属性


值选项卡,列表框生成器
值选项卡，列表框生成器

请参阅

列表框生成器中的“值”选项卡指定得到和贮存返回值的地方。“列表框生成器”的其它选项卡为列表项选项卡、样式选项卡和布局选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

从此处返回值

指定在用户选择列表框的项时，从哪一列或字段得到值。该选项对应于 BoundColumn 属性。

字段名

指定用来存贮值的表或视图的字段，值是在“从此处返回值”框中指定的。在默认情况下，列表包括“列表项”选项卡中选定的表或视图的字段。选择三点按钮时，出现打开对话框，可从中选择另一个文件。该选项对应于 ControlSource 属性。


请参阅

BoundColumn 属性

ControlSource 属性

布局选项卡，列表框生成器

列表框生成器

列表项选项卡，列表框生成器

打开（文件菜单）

样式选项卡，列表框生成器

使用生成器


选项组生成器

请参阅

“选项组生成器”使得为“选项组”控制设置属性十分方便，可以在熟悉的对话框格式中选择选项来设置属性。

选项按钮允许用户在彼此之间独立的几个选项中选择一个。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

生成器选项卡

按钮

指定按钮数目、标题和图形。

布局

指定选项按钮布局（竖直或水平），间距和边框样式。

值

指定用来存贮选项组的值的表或视图的字段。


请参阅

按钮选项卡、选项组生成器

布局选项卡，选项组生成器

选项组控制

使用生成器

值选项卡, 选项组生成器


按钮选项卡、选项组生成器

请参阅

选项组生成器中的“按钮”选项卡指定按钮数目，标题和图形，该生成器还有布局选项卡和值选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

按钮数目

指定选项组中的按钮数目。该选项对应于 ButtonCount。

标准

指定标准的选项按钮。在选择此项时，“图形方式”列不激活。

图形方式

指定三维形式的选项按钮。选择此项时，既可以指定列中的标题，也可以指定列中的图形。

标题列

指定显示在按钮旁的标题，可在框中键入标题，或者如果不想要标题，就留为空白。该项对应于“选项”按钮中的标题。

图形列

指定在按钮旁显示的位图的路径与文件名。在框中可键入路径与文件名，或单击三点按钮，出现对话框，可在其中选择文件。该选项对应于“选项”按钮中的 Picture 属性。

附注

选项按钮可能既有标题又有图形。可以指定当按钮无效或按下此按钮时显示的图形，但是必须在程序中或属性窗口中这样做。有关详细内容，请参阅 DisabledPicture 和 DownPicture 属性。


请参阅

ButtonCount

Caption 属性

DisabledPicture

DownPicture

布局选项卡，选项组生成器

打开（文件菜单）

选项组生成器

Picture 属性

属性窗口

使用生成器

值选项卡, 选项组生成器


布局选项卡,选项组生成器
布局选项卡，选项组生成器

请参阅

选项组生成器中的“布局”选项卡指定按钮布局（竖直或水平）、间距和边框样式。该生成器还有按钮选项卡和值选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

按钮布局

指定选项组按钮的竖直或水平方向的布局。

按钮间隔

指定按钮之间的间隔。

边框式样

指定选项组四周为单线边框或者无边框。该选项对应于 BorderStyle 属性.。


请参阅

BorderStyle 属性

按钮选项卡、选项组生成器

选项组生成器

使用生成器

值选项卡, 选项组生成器


值选项卡,选项组生成器
值选项卡，选项组生成器

请参阅

选项组生成器中的“值”选项卡指定表或视图的字段，这里的字段用来存贮选项组的值。该生成器还有按钮选项卡和布局选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

字段名

指定一个表或视图的字段来存贮选项组的值。在默认情况下，列表包括表中的字段。选择三点按钮会出现打开对话框，可在其中选择另一个文件。该选项对应于 ControlSource 属性。


请参阅

按钮选项卡、选项组生成器

ControlSource 属性

布局选项卡，选项组生成器

打开（文件菜单）

选项组生成器

使用生成器


参照完整性生成器

请参阅

参照完整性(RI) 生成器帮助设置触发器，用来控制如何在相关表中插入，更新或者删除记录。

“RI生成器”在以下情况下显示：

 •	   在数据库设计器中双击两个表之间的关系线，并在编辑关系对话框中选择“参照完整性”按钮。

 •	   从“数据库设计器”的快捷菜单中选择“参照完整性”选项。

 •	   选择数据库菜单的“参照完整性”选项。

“RI 生成器”窗口的上部为七个表格列，从左到右依次为：

 •	   父表表格列显示数据库关系中的父表名，该数据库关系包含主索引或候选索引。

 •	   子表表格列显示数据库关系中的子表名。

 •	   “更新”表格列显示为关系更新参照完整性的类型。可能的取值为“级联”、“限制”或“忽略”。通过选择能显示其它选项的下拉列表的字段，可以更改此设置。设置能反映在下面的表单页面中，反之亦然。

 •	   “删除”表格列显示为关系删除参照完整性的类型，可能值为“级联”“限制”或“忽略”。通过选择能显示其它选项的下拉列表的字段，可以更改此设置。设置能反映在下面的表单页面中，反之亦然。

 •	   “插入”表格列显示为关系插入参照完整性的类型，可能的值为“限制”或“忽略”。通过选择能显示其它选项的下拉列表的字段，可以更改设置。设置能反映在下面的表单页面中，反之亦然。

 •	   父标记表格列显示“父”表的主索引标识名或其待选名。

 •	   子标记表格列显示子表的索引标识名。

“RI 生成器”窗口的下部包含可以选择的规则，这些规则是有关更新、删除和插入操作的。

生成器选项卡

更新规则

指定修改父表中关键字 (key)值时所用的规则。

删除规则

指定删除父表中的记录时所用的规则。

插入规则

指定在子表中插入新的记录或更新已存在的记录时所用的规则。


请参阅

数据库设计器

编辑关系命令（数据库菜单）

删除规则选项卡

插入规则选项卡

更新规则选项卡

使用参照完整性


更新规则选项卡,RI生成器
更新规则选项卡，RI 生成器

请参阅

参照完整性生成器 中的“更新规则”选项卡指定修改父表中的关键字 (key) 值时所用的规则。该生成器还有删除规则选项卡和插入规则选项卡。

选项卡选项

级联

使 Microsoft Visual FoxPro 将父表中的“主”或“候选”关键字的字段级联到相关的子表。如果选择了该选项，不论何时更改父表中的某个字段，Microsoft Visual FoxPro 自动更改所有相关子表记录中的对应值。

限制

使 Microsoft Visual FoxPro 禁止更改父表中的“主”或“候选”关键字的字段值，这样便造成子表中有孤立的记录。

忽略

允许更改父表中的“主”或“候选”关键字的字段，实际上废止了在此关系之上的更新参照完整性。


请参阅

参照完整性生成器

删除规则选项卡

插入规则选项卡


删除规则选项卡,RI生成器
删除规则选项卡，RI 生成器

请参阅

参照完整性生成器中的“删除规则”选项卡指定在删除父表中的记录时所用的规则。该生成器还有更新规则选项卡 和插入规则选项卡。

选项卡选项

级联

使 Microsoft Visual FoxPro 将父表中的删除级联到相关的子表。如果已为关系选择了“级联删除”选项，不论何时删除父表中的记录，Microsoft Visual FoxPro 自动删除相关子表中的相关记录。

限制

使 Microsoft Visual FoxPro 禁止删除父表中某些记录，这些记录在子表中有相关的记录。如果已为关系选择了“限制删除”，不论何时删除父表中的记录，如果子表中有该记录的相关记录，Microsoft Visual FoxPro 会出现错误。

忽略

允许删除父表中的记录，即使子表中有其相关的记录。


请参阅

参照完整性生成器

插入规则选项卡

更新规则选项卡


插入规则选项卡,RI生成器
插入规则选项卡，RI生成器

请参阅

参照完整性生成器的“插入规则”选项卡指定在插入新的记录，或者在子表中更新已存在的记录时所用的规则。该生成器还有更新规则选项卡和删除规则选项卡。

选项卡选项

限制

如果这些记录在父表中没有匹配的记录，使 Microsoft Visual FoxPro 禁止向子表中添加某些记录。如果已经为关系选择了“限制插入”，不论何时向子表中添加没有匹配的父表记录的记录，Microsoft Visual FoxPro 会出现错误。

忽略

允许向子表中插入记录，而不管父表中是否有匹配的记录。


请参阅

创建表关系

创建触发器

参照完整性生成器

插入规则选项卡

更新规则选项卡

存储过程


文本框生成器

请参阅

“文本框生成器”使得为“文本框”控制设置属性十分方便，可以在熟悉的对话框格式中选择选项来设置属性。

文本框是一个基本的控制，允许用户添加或编辑数据，这些数据存贮在表中“字符型”、“数值型”或“日期”型的字段里。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

生成器选项卡

格式

指定文本框的各种格式选项，以及输入掩码的类型。

样式

指定文本框的外观、边框和字符对齐方式。

值

指定存贮文本框的值的字段。


请参阅

格式选项卡，文本框生成器

样式选项卡，文本框生成器

文本框控制

使用生成器

值选项卡，文本框生成器


格式选项卡,文本框生成器
格式选项卡，文本框生成器

请参阅

文本框生成器的“格式”选项卡指定文本框的各种格式选项和输入掩码的类型。生成器还有值选项卡和样式选项卡。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

数据类型

指定文本框的数据类型为“字符型”、“日期型”或“数值型”。如果选择了值选项卡中的值，必须确保其数据类型和这里指定的值的数据类型相同。

在运行时启用

指定运行表单时启用文本框，该选项对所有数据类型都可用，且作为默认选定。该选项对应于 Enabled 属性.。

仅字母表中的字符

指定在文本框中只允许字母表中的字符（而不允许数字或符号字符）。该选项只对“字符型”数据可用。该选项对应于 Format 属性 的“A”设置。

使其只读

使用户可以更改文本框中的文本。该选项对应于 ReadOnly 属性，且对所有数据类型可用。

进入时选定

指定在文本框获得焦点时，选择文本框中的文本。该选项只对“字符”型数据可用，对应于 Format 属性 的“K”设置。

隐藏选定内容

指定在文本框失去焦点时，文本框中所选定的文本保持选定且可见。该选项对应于 HideSelection 属性 且对所有数据类型可用。

显示前导零

指定显示小数点左边的零。该选项只对“数值型”数据可用。该选项对应于 Format 属性 的“L”设置。

使用当前 SET DATE

向 Format 属性 添加“D”设置。

不列颠日期

向 Format 属性 添加“E”设置。

输入掩码

限制或提出“数值型”、“字符型”和“逻辑型”字段的用户输入格式。下拉列表中有若干个选项可用，而且列表右边显示出所选定的输入掩码的示例。“数值型”输入掩码的一个例子是限制输入为“北美”电话号码格式，例如 (###) ###-####。


请参阅

Enabled 属性

Format 属性

HideSelection 属性

Input Mask 属性

ReadOnly 属性

样式选项卡，文本框生成器

文本框生成器

使用生成器

值选项卡，文本框生成器


样式选项卡,文本框生成器
样式选项卡，文本框生成器

请参阅

文本框生成器中的“样式”选项卡指定文本框的外观、边框和字符对齐方式。该生成器还有值选项卡和格式选项卡.。

当选择“确定”时，生成器关闭，各个选项卡中的属性设置开始生效。

选项卡选项

特殊效果

三维

指定文本框外观为三维形式。该选项对应于 SpecialEffect 属性。

平面

指定文本框外观为平面的二维形式。该选项对应于 SpecialEffect 属性。

边框

单线边框

指定文本框四周为单线边框。该选项对应于 BorderStyle 属性。

无边框

指定文本框四周没有边框。该选项对应于 BorderStyle 属性.。

字符对齐方式

左对齐

指定文本框中的文本向左对齐。

右对齐

指定文本框中的文本向右对齐。

居中对齐

指定文本框中的文本居中对齐。

自动

指定文本框中的文本自动对齐。

调整文本框尺寸以恰好容纳

自动调整文本框大小使其恰好容纳指定的输入掩码或ControlSource字段的长度。

如果在“文本框生成器”的格式选项卡中指定输入掩码，文本框将放大到恰好容纳输入掩码的长度。如果不指定输入掩码，文本框则放大到恰好容纳字段长度。


请参阅

BorderStyle 属性

ControlSource 属性

格式选项卡，文本框生成器

SpecialEffect 属性

文本框生成器

使用生成器

值选项卡，文本框生成器


值选项卡,文本框生成器
值选项卡，文本框生成器

请参阅

文本框生成器中的“值”选项卡指定用来存贮文本框的值的字段。该生成器还有格式选项卡和样式选项卡.。

当选择确定时，生成器关闭，同时各个选项卡中的属性设置开始生效。

选项卡选项

字段名

指定表或视图的字段，该字段用来存贮文本框的值。选择三点按钮，显示打开对话框，可在其中选择文件。该选项对应于 ControlSource 属性。


请参阅

ControlSource 属性

格式选项卡，文本框生成器

打开（文件菜单）

样式选项卡，文本框生成器

文本框生成器

使用生成器


调色板工具栏

请参阅

可使用“调色板”工具栏设定表单或报表上各控制的颜色。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	前景颜色	设置控制的默认前景色
	背景颜色	设置控制的默认背景色
	其他颜色	显示“颜色”对话框，可定制用户自己的颜色


请参阅

背景颜色属性

更改控制颜色

调色板工具栏命令（查看菜单）

前景颜色属性

其他颜色

设置一个表单的前景和背景颜色

使用工具栏


数据库设计器工具栏

请参阅

数据库设计器工具栏在“数据库设计器”激活时显示。有关显示和操作控制工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	新表	使用向导或设计器创建新表。
	添加表	把已有的表添加到数据库中。
	移去表	把选定的表从数据库移走或从磁盘删除。
	新远程视图	使用向导或设计器创建远程视图。
	新本地视图	使用向导或设计器创建本地视图。
	修改表	在表设计器中打开选定的表。
	浏览表	在浏览窗口中显示选定的表并进行编辑。
	编辑存储过程	在编辑窗口中显示一个 Visual FoxPro 存储过程。


请参阅

ADD TABLE 命令

浏览窗口

BROWSE 命令

CREATE SQL VIEW 命令

CREATE TABLE 命令

创建新数据库

在表之间建立关系

数据库设计器

编辑窗口

MODIFY COMMAND 命令

MODIFY STRUCTURE 命令

REMOVE TABLE 命令

表设计器

使用设计器

使用工具栏

使用向导


表单控制工具栏

请参阅

使用表单控制工具栏可以在表单上创建控制。单击需要的控制按钮，将鼠标指针移动到表单上，然后单击表单放置控制或把控制拖至所需的大小。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

当打开表单设计器时，此工具栏会自动显示。此外，任何时候都可以从工具栏对话框中选择来显示它。但是，除非您在表单上工作，否则工具栏上的按钮不可用。

此工具栏包括如下按钮：

按钮		说明
	选定对象	移动和改变控制的大小。在创建了一个控制之后，“选择对象”按钮被自动选定，除非按下了“按钮锁定”按钮。
	查看类	使您可以选择显示一个已注册的类库。在您选择一个类后，工具栏只显示选定类库中类的按钮
	标签	创建一个标签控制，用于保存不希望用户改动的文本，如复选框上面或图形下面的标题。
	文本框	创建一个文本框控制，用于保存单行文本，用户可以在其中输入或更改文本。
	编辑框	创建一个编辑框控制，用于保存多行文本，用户可以在其中输入或更改文本。
	命令按钮	创建一个命令按钮控制，用于执行命令。
	命令组	创建一个命令组控制，用于把相关的命令编成组。
	选项组	创建一个选项组控制，用于显示多个选项，用户只能从中选择一项。
	复选框	创建一个复选框控制，允许用户选择开关状态，或显示多个选项，用户可从中选择多于一项。
	组合框	创建一个组合框控制，用于创建一个下拉式组合框或下拉式列表框，用户可以从列表项中选择一项或人工输入一个值。
	列表框	创建一个列表框控制，用于显示供用户选择的列表项。当列表项很多，不能同时显示时，列表可以滚动。
	微调	创建一个微调控制，用于接受给定范围之内的数值输入。
	表格	创建一个表格控制，用于在电子表格样式的表格中显示数据。
	图象	在表单上显示图象。
	计时器	以设定的间隔捕捉计时器事件。此控制在运行时不可见。
	页框	显示多个页面。
	OLE 容器控制	向应用程序中添加OLE 对象。
	OLE 绑定型控制	与 OLE 容器控制一样，可用于向应用程序中添加 OLE 对象。与 OLE 容器控制不同的是，   OLE 绑定型控制绑定在一个通用字段上。
	线条	设计时用于在表单上画各种类型的线条。
	形状	设计时用于在表单上画各种类型的形状。可以画矩形、圆角矩形、正方形、圆角正方形，椭圆或圆。
	分隔符	在工具栏的控制间加上空格。
	生成器锁定	为任何添加到表单上的控制打开一个生成器。
	按钮锁定	使您可以添加同种类型的多个控制，而不需多次按此控制的按钮。


请参阅

将表格添加到表单中

在控制工具栏上添加类库

用生成器向表单中添加控制

添加标签控制

添加线条、矩形和圆形

在表单中添加 OLE 对象

将页框添加到表单中

计时器控制初始化

选择、移动和缩放控制

使用生成器

使用复选框

使用选项按钮将用户的选择存储在表中

使用文本框


表单设计器工具栏

请参阅

当显示表单设计器时，自动显示表单设计器工具栏。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	设计方式	在设置 TAB 键次序方式和设计方式之间切换。
	设置 Tab 键次序	使表单进入设置 tab 次序 方式。当表单含有一个或多个对象时可用。
	数据环境	显示数据环境设计器。
	属性窗口	显示一个反映当前对象设置值的窗口。
	代码窗口	显示当前对象的代码窗口，以便查看和编辑代码。
	表单控制工具栏	显示或隐藏表单控制工具栏。
	调色板工具栏	显示或隐藏调色板工具栏。
	布局工具栏	显示或隐藏布局工具栏。
	表单生成器	运行表单生成器，它为您提供一种简单、交互的方法把字段作为控制添加到表单上，并可以定义表单的样式和布局。
	自动格式	对表单上的控制使用某种样式。要使此按钮可用应先选定一个或多个控制。


请参阅

用生成器向表单中添加控制

向表单中添加控制

自动格式生成器

代码窗口

调色板工具栏（查看菜单）

数据环境设计器

设计方式（查看菜单）

表单生成器

表单控制工具栏（查看菜单）

表单设计器

布局工具栏（查看菜单）

属性窗口

Tab 键次序（查看菜单）

使用工具栏


布局工具栏

请参阅

使用布局工具栏可以在报表或表单上对齐和调整控制的位置。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	左边对齐	按最左边界对齐选定控制。当选定多个控制时可用。
	右边对齐	按最右边界对齐选定控制。当选定多个控制时可用。
	顶边对齐	按最上边界对齐选定控制。当选定多个控制时可用。
	底边对齐	按最下边界对齐选定控制。当选定多个控制时可用。
	垂直居中对齐	按照一垂直轴线对齐选定控制的中心。当选定多个控制时可用。
	水平居中对齐	按照一水平轴线对齐选定控制的中心。当您选定多个控制时可用。
	相同宽度	把选定控制的宽度调整到与最宽控制的宽度相同。
	相同高度	把选定控制的高度调整到与最高控制的高度相同。
	相同大小	把选定控制的尺寸调整到最大控制的尺寸。
	水平居中	按照通过表单中心的垂直轴线对齐选定控制的中心。
	垂直居中	按照通过表单中心的水平轴线对齐选定控制的中心。
	置前	把选定控制放置到所有其他控制的前面。
	置后	把选定控制放置到所有其他控制的后面。


请参阅

对齐方式 (格式菜单)

对齐控制

置前 (格式菜单)

布局工具栏命令（查看菜单）

大小 (格式菜单)

置后 (格式菜单)

使用工具栏


打印预览工具栏

请参阅

更改预览的页面并放大或缩小。

有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	第一页	显示要打印报表的第一页。
	前一页	显示要打印报表的前一页。
	转到页	显示“转到页”对话框。
	下一页	显示要打印报表的后一页。
	最后一页	显示要打印报表的最后一页。
	缩放	在预览窗口中缩放文本。
	关闭	关闭“打印预览”窗口。


请参阅

预览结果

打印预览命令（文件菜单）

使用工具栏


查询设计器工具栏

请参阅

当使用查询设计器时，自动显示查询设计器工具栏。

有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	添加表	显示“添加表或视图”对话框，从而能够向设计器窗口中添加一个表或视图。
	移去表	从设计器窗口的上窗格中移去选定的表。
	添加联接	在查询中的两个表之间创建联接条件。
	查看 SQL	显示建立当前查询的 SQL 语句。
	最大化/最小化顶部窗格	放大或缩小查询设计器的上窗格。
	查询去向	显示“查询去向”对话框，允许您把查询结果发送到八个不同的输出地点。


请参阅

添加联接

添加表（查询菜单）

创建查询

最大化/最小化顶部窗格（查看菜单）

查询和视图设计器

查询去向（查询菜单）

移去表（查询菜单）

使用工具栏

查看 SQL（查询菜单）


报表控制工具栏

请参阅

可以使用报表控制工具栏在报表或标签上创建控制。单击您需要的控制按钮，把鼠标指针移到报表上，然后单击报表来放置控制或把控制拖动到适当大小。

可以双击报表上任何控制，显示一个对话框，设置其选项。

当打开报表设计器时，自动显示此工具栏。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	选定对象	移动或更改控制的大小。在创建了一个控制后，会自动选定“选定对象”按钮，除非按下了“按钮锁定”按钮。
	标签	创建一个标签控制，用于保存不希望用户改动的文本，如复选框上面或图形下面的标题。
	字段	创建一个字段控制，用于显示表字段、内存变量或其他表达式的内容。
	线条	设计时用于在表单上画各种线条样式。
	矩形	用于在表单上画矩形。
	圆角矩形	用于在表单上画椭圆和圆角矩形。
	图片/OLE 绑定型控制	用于在表单上显示图片或通用数据字段的内容。
	按钮锁定	允许添加多个同种类型的控制，而不需多次按此控制的按钮。


请参阅

报表设计器

创建报表布局

插入页码

插入连接的字段控制

插入报表控制

插入当前日期


报表设计器工具栏

请参阅

当报表设计器打开时，显示报表设计器工具栏。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	数据分组	显示“数据分组”对话框，从中可以创建数据组并指定其属性。
	报表控制工具栏	显示或隐藏报表控制工具栏。
	调色板工具栏	显示或隐藏调色板工具栏。
	布局工具栏	显示或隐藏布局工具栏。


请参阅

对齐控制

更改控制颜色

调色板工具栏（查看菜单）

创建报表布局

数据分组（报表菜单）

报表控制的格式选项

在布局上分组数据

插入报表控制

布局工具栏（查看菜单）

报表控制工具栏（查看菜单）

报表设计器

使用工具栏


常用工具栏

请参阅

常用工具栏包含 Visual FoxPro 中执行常规操作的按钮。默认情况下，此工具栏是显示的。有关显示和操作工具栏的详细内容，请参阅使用工具栏 。

此工具栏包括如下按钮：

按钮		说明
	新建	使用设计器或向导创建新文件。
	打开	打开一个已有的文件或创建一个新文件。
	保存	保存对活动文件所做的修改。
	打印	打印文本文件、报表、标签，以及命令窗口或剪贴板中的内容。
	打印预览	显示工作的结果但不打印。
	拼写检查	进行拼写检查。编辑文本或备注字段时可用。
	剪切	把选定的文本、控制或任何其他可选定的对象移动到剪贴板。
	复制	复制选定的文本、控制或任何其他可选的对象。
	粘贴	把剪切或复制的文本、控制或任何其他可选定的对象放置在插入点位置。
	撤消	撤消上一个操作。
	重复	重作上一个撤消的操作。
	运行	在完成一个查询、表单或报表的设计并予以保存后，执行它。
	数据库	指定当前的数据库。
	命令窗口	显示执行的命令，并提供输入命令的空间。
	查看窗口	可简化以下操作：打开表、建立关系以及设置工作区属性等。
	表单向导	运行 Visual FoxPro 表单向导。其中包括“表单向导”和一对多表单向导。
	报表向导	运行 Visual FoxPro 报表向导。其中包括报表向导、分组/总计报表向导和一对多报表向导。
	自动表单向导	不使用向导创建一个表单。
	自动报表向导	不使用向导创建一个报表。
	帮助	显示联机帮助。


请参阅

命令窗口

复制命令（编辑菜单）

定制工具栏对话框

剪切命令（编辑菜单）

表单向导

目录（帮助菜单）

新建（文件菜单）

打开（文件菜单）

粘贴命令（编辑菜单）

打印预览（文件菜单）

打印（文件菜单）

重作命令（编辑菜单）

报表向导

保存（文件菜单）

拼写检查（工具菜单）

撤消命令（编辑菜单）

使用工具栏

查看窗口


视图设计器工具栏

请参阅

当视图设计器打开时，显示视图设计器工具栏。有关显示和操作工具栏的详细内容，请参阅使用工具栏。

此工具栏包括如下按钮：

按钮		说明
	添加表	显示“添加表或视图”对话框，从而可以向设计器窗口添加一个表或视图。
	移去表	从设计器窗口的上窗格中移去选定的表。
	添加联接	在视图中的两个表之间创建联接条件。
	查看 SQL	显示建立当前视图的 SQL 语句。.
	最大化/最小化顶部窗格	放大或缩小视图设计器的上窗格。


请参阅

添加联接

添加表（查询菜单）

ADD TABLE 命令

创建新的远程视图

创建本地表的视图

最大化/最小化顶部窗格（查看菜单）

移去表（查询菜单）

REMOVE TABLE 命令

使用工具栏

视图设计器

查看 SQL（查询菜单）


类菜单

“类”菜单包含了一些命令，这些命令允许创建和编辑属性和方法，指定包括文件，以及控制一般类属性。

类菜单命令

新属性

创建新属性。

新方法

创建新方法。

编辑属性/方法

编辑已有的属性和方法。在添加新的属性或方法时启用。

包含文件

指定能提供编译器指令的文件。

类信息

显示类成员的所有属性、方法和在设计时的外观以及是否受保护。


类信息（类菜单）

请参阅

显示“类信息”对话框，该框中显示类成员的各种属性，和在设计时的外观，以及是否受保护。

类信息对话框的选项卡

选项按下列选项卡分组。

选项卡	说明
类选项卡	有关类和与其相关的图标的一般信息。
成员选项卡	有关单个类成员的信息。


请参阅

类信息对话框的类选项卡

类信息对话框的成员选项卡


类信息对话框的类选项卡

请参阅

给出有关类以及与其相关图标的一般信息。

“类”选项卡和成员选项卡出现在“类信息”对话框中，当从类菜单中选择了类信息命令时，出现该对话框。

选项卡中的选项

工具栏图标

显示类工具栏图标的名称，选择三点按钮可以选定类图标。

当在类库中的类里使用表单控制工具栏时，表单设计器中的表单控制工具栏和类设计器中会显示类工具栏图标。

容器图标

显示类容器工具栏图标的名字。选择三点按钮可以选定类容器图标。

容器图标只在“类浏览”窗口中显示。

度量单位

指定象素或 foxels 作为度量单位。

说明

显示有关选定类的注释，可以在该框中键入新的描述，或者在其中编辑原有的说明。

类名

显示“类设计器”中选定的类名。

父类

显示父类名。

类库

显示类库的路径和文件名。


请参阅

类设计器

类信息命令 (类菜单)

类菜单

表单控制工具栏

表单设计器

类信息对话框的成员选项卡


类信息对话框的成员选项卡

请参阅

显示有关单个类成员的信息。在“类”菜单中选择了“类信息”命令时，包含此选项卡的对话框则显示出来。

选项卡中的选项

“成员”选项卡由有下列列的列表框组成：

类

显示类名。

成员名称

显示类成员名。

保护

指定类成员是否受保护。如果选择了复选框，则不允许在类或子类的定义以外对类属性进行更改或访问。

不初始化

指定在添加对象时，是否执行 Init 方法。当选定复选框时，不执行 Init 方法。


请参阅

类信息 (类菜单)

类信息对话框的类选项卡


控制菜单

“控制”菜单包含操作窗口或切换到另一个应用程序的命令。当单击 Visual FoxPro 主窗口中标题栏左边的控制菜单框时，或者在 Visual FoxPro 中单击一个活动窗口或对话框左上角的控制菜单框时，会出现此菜单。使用键盘，按 ALT+SPACEBAR 组合键，也可以打开此菜单。

在对话框中，对这个菜单进行了修改，其中只包含以下的几个命令。

控制菜单命令

还原

使应用程序窗口或活动窗口恢复到最大化或最小化之前的大小与位置。

移动

将插入点变为四头箭头，使用这个箭头键可以移动应用程序窗口、活动窗口或对话框，当移动到位时按 ENTER 键即可。如果窗口已被最大化，则不能使用此命令。

大小

将插入点变为四头箭头，使用箭头键可以调整应用程序窗口、活动窗口或对话框的大小，当调整适当时按 ENTER 键即可。

最小化

将应用程序窗口、活动窗口或对话框缩为一个图标。要恢复最小化的窗口，可选择控制菜单中的“还原”命令。

最大化

将活动窗口放大到最大。最大化的窗口将窗口放到最大，且没有边界。要将最大化窗口恢复到原来的大小，选择控制菜单中的“还原”命令即可。

关闭

关闭应用程序窗口或活动窗口，“关闭”命令和“文件”菜单中的“退出”命令作用相同。

要关闭所有的项目窗口，请使用“文件”菜单中的“关闭”命令。要关闭所有打开的窗口，按下 SHIFT 键，并选择“文件”菜单中的“全部关闭”命令。

切换到

显示 Windows 程序管理器中的“任务列表”对话框，可用来切换到一个应用程序或关闭一个应用程序。


数据库菜单

“数据库”菜单包含在数据库中创建和编辑表的命令。

数据库菜单命令

新表

用向导或设计器创建一个新表。

添加表

向数据库添加一个已有的表。

新远程视图

用向导或设计器创建一个新的远程视图。

新本地视图

用向导或设计器创建一个新的本地视图。

移去

从数据库中移去或删除选定的表。

修改

在“表设计器”中打开选定的表。

浏览

在“浏览”窗口中显示选定的表进行编辑。

重建表索引

产生关键字，并为选定的表重建索引。

彻底删除记录

永久性删除活动表中已作删除标记的所有记录。

编辑关系

改变表之间的关系。

参照完整性

显示“参照完整性生成器”，从中可以设置规则来控制在相关表中记录的插入、更新和删除。

编辑存储过程

在编辑窗口中显示一个 Visual FoxPro 过程。

清理数据库

运行 PACK 命令删除带有删除标记的行，以减小数据库的大小。


新表命令（数据库菜单）

请参阅

显示“新表”对话框，可以使用表设计器在数据库中创建一个新表。

如果选定了选项对话框中项目选项卡的“向导提示”框，则可以选择表向导按钮创建新表。

新表对话框选项

表向导

打开“表向导”，它可以创建一个表。这个向导提供一些示例字段，用这些字段创建表结构十分方便。但只有复选了选项 对话框中项目选项卡的“向导提示”复选框时，此选项才可用。

新表

打开“表设计器”，从而可以在数据库中创建一个表。


请参阅

ADD TABLE 命令

在数据库中加入表

数据库设计器

选项 (工具菜单)

项目选项卡 (选项对话框)

表设计器

表向导


添加表命令（数据库菜单）

请参阅

显示打开对话框，以便向数据库添加一个已存在的表。这个表可以是当前任何不属于其他数据库的表。

附注：

因为同一时刻表只能属于一个数据库，所以需要在新的数据库中使用某个表之前，应先从原数据库中移去表。


请参阅

ADD TABLE 命令

在数据库中加入表

数据库设计器

移去命令（数据库菜单）

打开 (文件菜单)


新远程视图命令（数据库菜单）

请参阅

显示“新远程视图”对话框，从而可以使用视图设计器创建远程视图。如果所需信息在远程数据源中，则可以从这个数据源创建一个远程视图，并将这个视图合并到数据库中去。

如果选定了选项对话框中项目选项卡的“向导提示”复选框，则可以选择远程视图向导按钮来创建一个新表。

附注：

在创建新的远程视图之前，必须建立连接或开放式数据库连接 (ODBC) data source 。要建立一个连接，应使用连接设计器。

新远程视图对话框选项

视图向导

打开“远程视图向导”，用它可以创建一个远程视图。此选项只当选定了“选项”对话框中“项目”选项卡的“向导提示”复选框时才能使用。

新视图

打开选定连接或数据源对话框以便能选择远程数据源在远程视图中使用。


请参阅

连接设计器

创建远程视图

数据库设计器

定义连接

选项 (工具菜单)

项目选项卡 (选项对话框)

远程视图向导

选择连接或数据源对话框

视图设计器


新本地视图命令（数据库菜单）

请参阅

显示“新本地视图”对话框，从中可以选择本地视图向导或视图设计器在数据库中创建本地表的视图或其它视图。本地视图可以包括本地 Visual FoxPro 的 .DBF 格式表、已存在的本地或远程视图、.DBF 格式中的任何表、以及存贮在本地服务器中的表。

如果选定了选项对话框中项目选项卡的“向导提示”复选框，则可以选择本地视图向导按钮创建新表。

新本地视图对话框选项

视图向导

打开“本地视图向导”，用它可以创建本地视图。但只有在复选了选项对话框中项目选项卡的“向导提示”复选框时，它才可以用。

新视图

打开“视图设计器”创建一个新的本地视图。


请参阅

在视图中集成本地数据和远程数据

创建本地视图

数据库设计器

本地视图向导

选项 (工具菜单)

项目选项卡 (选项对话框)

视图设计器


修改命令（数据库菜单）

请参阅

在表设计器中打开选定的表，或在视图设计器中打开选定的视图。使用“表设计计器”可以创建或修改表、字段和索引。

选择“数据库设计器”中的表时可以启用该命令。


请参阅

数据库设计器

表设计器

视图设计器


浏览命令（数据库菜单）

请参阅

在浏览窗口中显示选定的要查看或编辑的表

选择了数据库设计器中的表或视图后，可以启用该命令。


请参阅

浏览窗口

数据库设计器


移去命令（数据库菜单）

请参阅

提示从数据库中移去一个表，或者从磁盘上删除一个表。此命令同时从数据库中删除对该表的引用。如果不再需要一个表时，或需要在另一个数据库中使用这个表时，都要从原数据库移去这个表。

选择了“数据库设计器”的表后，可以启用该命令。


请参阅

添加表命令（数据库菜单）

数据库设计器

从数据库中移去表


 重建表索引命令（数据库菜单）

请参阅

生成关键字，并为选定的表重建索引，索引的记录数目将显示在状态栏上。


请参阅

数据库设计器


彻底删除记录命令（数据库菜单）

请参阅

显示提示，询问是否要彻底删除活动表中所有已作删除标记的记录。


请参阅

浏览窗口

数据库设计器

PACK 命令

从表中移去记录


编辑关系命令（数据库菜单）

请参阅

在创建了表之间的永久关系 之后，使用该命令可以改变这个永久关系。

选择了数据库设计器中的关系之后，可以启用这个命令。

编辑关系对话框选项

表

显示当前父表名称，并允许选用一个不同的索引标识。

相关表

显示当前子表名称，并允许选用一个不同的索引标识。

参照完整性

显示参照完整性生成器，可以设置规则控制相关表中记录的插入、更新和删除。

附注：

如果表没有创建索引，则在使用“参照完整性生成器”之前，需要在表设计器中打开这个表，并创建索引。


请参阅

建立索引

创建永久关系

创建表关系

数据库设计器

为表建立关系

参照完整性生成器

表设计器


参照完整性命令（数据库菜单）

请参阅

显示参照完整性生成器，用它可以设置规则控制相关表中记录的插入、更新和删除。只有数据库中存在表之间的关系时，才可使用这个命令。


请参阅

数据库设计器

编辑关系命令（数据库菜单）

参照完整性生成器


编辑存储过程命令（数据库菜单）

请参阅

在编辑窗口中显示当前数据库的所有 Visual FoxPro 存储过程。


请参阅

APPEND PROCEDURES 命令

创建存储过程

DISPLAY PROCEDURES 命令

LIST PROCEDURES 命令

MODIFY PROCEDURE 命令


清理数据库命令（数据库菜单）

请参阅

运行 PACK 命令，彻底删除带有删除标记的行，从而减少数据库的大小。


请参阅

删除记录并压缩表

PACK DATABASE 命令


数据环境菜单

请参阅

包含查看和修改数据环境的命令。当打开或创建表单、报表或标签时，并从“查看”菜单中选择了“数据环境”命令后，出现此菜单，同时也显示数据环境设计器窗口。

数据环境菜单命令

添加

显示“添加表或视图”对话框，用它可以将表或视图添加到“数据环境设计器”窗口中。

移去

从“数据环境设计器”窗口中移去一个表或视图。

浏览

在“浏览”窗口中显示选定的表或视图。


请参阅

控制报表的数据源

数据环境设计器

设置报表数据源


添加命令（数据环境菜单）

请参阅

显示添加表或视图对话框，可以用它向“数据环境设计器”窗口中添加一个表或视图。


请参阅

添加表或视图

控制报表的数据源

数据环境设计器

设置报表数据源


移去命令（数据环境菜单）

请参阅

从数据环境设计器窗口中移去一个表或视图。


请参阅

控制报表的数据源

数据环境设计器

设置报表数据源


浏览命令（数据环境菜单）

请参阅

在浏览窗口中显示数据环境设计器中当前选定的表或视图。在“浏览”方式下，可以检查或编辑表及视图的内容。


请参阅

浏览窗口

控制报表的数据源

数据环境设计器

设置报表数据源


编辑菜单

请参阅

“编辑”菜单中包含了编辑、查找和操作文本与控制的命令。

编辑菜单中的命令

撤消

撤消最后一次编辑命令所做修改。

重复

重做最后一次“撤消”的命令。

剪切

移去选定的文本、控制或其它任何可选的内容，并将它放到剪贴板上。

复制

读取选定的文本、控制或其它任何可选的内容，并将它放到剪贴板上。

粘贴

将剪贴板上剪切或复制到的文本、控制及其它任何可选的内容放在插入点处。

选择性粘贴

链接或嵌入剪贴板上的 OLE 对象对象。

清除

删除 Visual FoxPro 主窗口或活动的用户自定义窗口，并且不在剪贴板上放入任何内容。

全部选定

选择活动窗口中所有的对象或文本，或者浏览窗口中的一个字段。

查找

显示“查找”对话框，从中可以搜索文本。

替换

搜索并替换当前文件中指定的文本。选择文本后启用这个命令。

转到行

将插入点移到文本、程序文件或命令窗口中的指定行。

插入对象

向 Visual FoxPro 表的通用字段中，链接或嵌入一个 OLE 对象 ，这个对象可以是新创建对象，也可以是已经存在的 OLE 对象。

对象

在创建 OLE 对象 的应用程序中打开这个对象。

链接

显示“编辑链接”对话框，从中可以修改或断开一个对象链接。


请参阅

复制和删除报表控制

格式菜单

报表控制的格式选项

选择和移动报表控制


撤消命令（编辑菜单）

请参阅

撤消最后一个编辑命令所做的修改。刚保存完文件后，不能马上使用“撤消”命令，而要等到对文件作了某些修改后才可以使用。

“撤消”命令可以撤消以下操作：

 •	   击键

 •	   剪切、粘贴或清除

 •	   文本移动

 •	   缩进或凸出

 •	   替换

快捷键

    Ctrl + Z


请参阅

重作命令（编辑菜单）


重作命令（编辑菜单）
重复命令（编辑菜单）

请参阅

撤消最后一次撤消命令（编辑菜单）。保存文件之后不能马上使用该命令，直到键入新文本并使用撤消命令后才可使用这条命令。

“重作”命令可以撤消以下“撤消”命令操作，

 •	   击键

 •	   剪切、粘贴或清除

 •	   文本移动

 •	   缩进或凸出

 •	   替换

快捷键

    Ctrl + R


请参阅

撤消命令（编辑菜单）


剪切命令（编辑菜单）

请参阅

移去选定的文本、对象或任何其它可选的内容，并将这些内容放到剪贴板上。如果剪切（或复制）一些内容，则可以将这些内容粘贴到其它应用程序中的任何地方。

快捷键

    Ctrl + X


请参阅

复制命令（编辑菜单）

复制和删除报表控制

粘贴命令（编辑菜单）

选择性粘贴命令（编辑菜单）


复制命令（编辑菜单）

请参阅

读取选定的文本、对象或任何其它可选的内容，并将其放入剪贴板中。如果向剪贴板复制（或剪切）了一些内容，则可以将这些内容粘贴到其它应用程序中的任何位置。

快捷键

    Ctrl + C


请参阅

剪切命令（编辑菜单）

复制和删除报表控制

粘贴命令（编辑菜单）

选择性粘贴命令（编辑菜单）


粘贴命令（编辑菜单）

请参阅

将所剪切或复制到的文本、对象或其它任何可选的内容粘贴到插入点处。但这个命令不能粘贴表单。可以粘贴先前剪切或复制到剪贴板上的数据项。

有关使用“粘贴”命令嵌入 OLE 对象的信息，请参阅链接或嵌入数据。

快捷键

    Ctrl + V


请参阅

复制命令（编辑菜单）

复制和删除报表控制

复制和粘贴数据

剪切命令（编辑菜单）

链接或嵌入数据

选择性粘贴命令（编辑菜单）


选择性粘贴命令（编辑菜单）

请参阅

链接或嵌入剪贴板上的一个 OLE 对象。因为 Visual FoxPro 要将对象放在当前通用字段 中，所以必须先打开通用字段窗口，才能粘贴数据。

要使用“选择性粘贴”命令，必须首先将要粘贴对象复制到剪贴板上，这时才能使用这个命令。有关详细的指导，请参阅复制和粘贴数据。“选择性粘贴”命令打开“选择性粘贴”对话框。

选择性粘贴对话框选项

源

显示要粘贴内容的生成应用程序、所在目录及文件。

作为

显示要粘贴的对象的可用格式。选择对象格式时，主要根据您想怎样使用存储在 Visual FoxPro 中的对象。“对象”格式允许从字段中打开原来创建对象的应用程序，并用这个应用程序编辑这个对象（例如，Microsoft Excel 工作表对象）。若对象按“图片”或“位图”格式保存，则不能直接在表的字段中编辑这个对象。“图片”或“位图”格式在文件中显示这个对象并占据最少的空间。如果打算更改对象大小，应选择“图片”格式。

粘贴

将剪贴板中的对象嵌入到当前通用型字段中。

粘贴链接

将对象链接到 Visual FoxPro，这样就可以从 Visual FoxPro 中修改这个对象。“粘贴链接”选项只有在复制已保存的对象时才可以使用。

附注：

在 Microsoft Word 的文档中，“粘贴”和“粘贴链接”两项都可以使用。

以图标显示

显示应用程序图标，而不显示数据。这在链接或嵌入对象时可以节省磁盘空间。


请参阅

复制命令（编辑菜单）

复制和粘贴数据

通用字段窗口

通用字段类型

向表中链接或嵌入数据

向表单链接或嵌入数据

粘贴命令（编辑菜单）


清除命令（编辑菜单）

请参阅

删除选定的文本、对象或其它任何可选的内容，但不将这些内容放到剪贴板中。


请参阅

剪切命令（编辑菜单）

CLEAR 命令


全部选定命令（编辑菜单）

请参阅

选择活动窗口中所有的控制和文本，或者浏览窗口中的一个字段，或者报表中所有的控制。

快捷键

Ctrl + A


请参阅

复制命令（编辑菜单）

剪切命令（编辑菜单）

粘贴命令（编辑菜单）

选择和移动报表控制


查找命令（编辑菜单）

请参阅

显示“查找”对话框，从中可以搜索文本。

快捷键

Ctrl + F

查找对话框选项

寻找

指定要搜索的文本字符串。

在搜索特殊字符时，应当用 C 语言表示方法在“查找”对话框中的文本框里键入下列字符：

要搜索的字符	键入
回车	\r
Tab 键	\t
反斜杠	\\
新的一行（换行符）	\n
选项

这些选项定义了搜索的限制和方向。如果指定了要搜索的文本，但得不到正确的结果，则应查看选择的选项是否正确。

匹分大小写

只搜索与“寻找”框中所键入的字母（大小写组合在一起）完全匹配的文本，并将光标定位在找到的文本处。

回绕

搜索当前文件时，先从插入点开始，到文件结尾处结束，然后再从文件开始处到插入点处进行搜索。

全字匹配

只搜索文件中与“查找”对话框中的字符相匹配的字，而不在字中搜索“查找”对话框中的字符。

向后搜索

从当前插入点位置向文件开始处进行搜索。

范围

定义搜索范围，在代码窗口中编辑过程时可以使用这个选项。

当前过程

只搜索“代码”窗口中显示的当前过程。

当前对象

搜索当前（选定的）对象中所有的过程。

所有对象

搜索当前表单中所有对象的全部过程。

查找下一个

搜索在“寻找”框中键入的字符串下一次出现的位置。

替换

扩大“寻找”对话框，在其中添加一个“全部替换”按钮和一个“替换为”输入框。选择文本后启用这个命令。


请参阅

替换命令（编辑菜单）


替换命令（编辑菜单）

请参阅

搜索并替换当前文件中指定的文本。在选择文本后启用该命令。

要替换表中的内容，可以使用“表”菜单中的替换字段 命令。

快捷键

Ctrl + L

替换对话框选项

查找

指定要搜索的文本字符串。

替换为

指定替换文本。

选项

定义搜索和替换的限制和方向。如果指定了要搜索的文本，但没有得到正确的搜索结果，则应检查选定的选项是否正确。

区分大小写

替换与在“寻找”框中键入的字母（大小写组合）完全匹配的文本。

回绕

搜索当前文件，先从插入点处到文件结尾，然后从文件开头到最初的插入点处。

全字匹配

替换匹配的单词，而不替换embedded在单词中的子串。

向后搜索

从当前插入点处到文件开始方向搜索。

范围

定义搜索范围。

当前过程

只搜索当前（选定的）过程。

当前对象

只搜索当前（选定的）对象。

全部对象

搜索全部对象。

查找下一个

搜索在“查找”框中键入的字符串的下一次出现位置。该按钮只有在“查找”框中键入了文本后才能使用。

替换

将所选定的文本更改为“替换为”框中的文本。如果不想更改选定的文本，而要搜索其下一个出现位置，则请选择“查找下一个”按钮。

全部替换

搜索并用“替换为”框中的内容替换“查找内容”框中的文本的每一次出现。这种替换不能由撤消命令撤消


请参阅

查找命令（编辑菜单）

替换字段（表菜单）

撤消命令（编辑菜单）


Go To Line (Edit Menu)
转到行（编辑菜单）

请参阅

在文本或程序文件或命令窗口中将插入点移到指定的行上。如果在选项对话框的编辑选项卡中选定了“字回绕”，则不能启用此命令。

转到行对话框选项

行号

指定插入点出现的行号。


请参阅

命令窗口

编辑选项卡 (选项对话框)

查找命令（编辑菜单）

选项对话框


插入对象（编辑菜单）

请参阅

列出 OLE 对象 ，可以将它们链接或嵌入到应用程序的表单中或 Visual FoxPro 表的通用字段中。

在浏览窗口中双击“通用”字段，可以打开编辑窗口并使“插入对象”命令可用。有关详细内容，请参阅向表中链接或嵌入数据.

当表单运行时，选定一个 OLE 绑定型控制。这时可以显示“插入对象”对话框并且新对象存储在与控制绑定在一起的字段中。有关详细内容，请参阅向表单链接或嵌入数据.

插入对象对话框选项

创建新对象

显示“对象类型”框以选择 OLE 应用程序从中创建新对象。

对象类型

当选择“创建新对象”命令时出现此对话框，并显示安装在计算机中的 OLE 应用程序。选定一个应用程序从中创建新对象。

从文件中创建对象

显示“文件”框，从中指定一个已存在的对象。

文件

当选择“从文件中创建对象”命令时出现此对话框，键入对象的路径和文件名，或选择“浏览”以选定适当的文件。

浏览

打开打开 (表) 对话框以选定表或视图。

链接

链接对象。若不选此项，则对象将被嵌入。

显示成图标

将插入的对象显示成图标。图标来自于创建对象的应用程序中。

更改图标

当选定“显示成图标”时出现“更改图标”对话框。

插入控制（仅用于表单中非绑定的 OLE 容器控制）

显示“控制类型”框，以便插入 OLE 控制。

控制类型（仅用于表单）

当选定“插入控制”时出现“控制类型”对话框，列出可以插入的 OLE 控制。

添加控制（仅用于表单）

当选定“插入控制”时出现“添加控制”对话框，并打开打开 (表) 对话框以便找到并选定没有列在“控制类型”中的 OLE 控制。

提示

也可以使用添加按钮和选项对话框的控制选项卡中的“OLE 控制”选项添加控制。


请参阅

在表单中添加 OLE 对象

在表中添加 OLE 对象

控制选项卡 (选项对话框)

表单控制工具栏

通用字段窗口

通用字段类型

向表中链接或嵌入数据

向表单链接或嵌入数据

打开 (表)对话框

选项 (工具菜单)

属性窗口


更改图标对话框

请参阅

指定表单或 Visual FoxPro 表的通用字段中的链接或嵌入对象所使用的图标。当在“插入对象”对话框中选定“显示成图标”并选择了“更改图标”时，出现此对话框。

对话框选项

图标

当前的

指定当前使用的图标。

默认的

指定使用的默认图标。

从文件中获取

指定从中得到新图标的文件。在框中键入路径和文件名并选择“确定”按钮显示所有可用图标。滚动图标从中选择要使用的图标，并选择“确定”按钮。

标签

指定显示在图标旁边的标签。可以在框中键入所希望的标签。

浏览

显示打开 (表)对话框以便选择包含图标的文件。


请参阅

插入对象

打开 (表)对话框


对象（编辑菜单）

请参阅

显示当前对象支持的动作列表。

当在运行的表单中选定 OLE 绑定型控制并且通用字段窗口活动时，此选项可用。它的名称根据字段中选定 OLE 对象的类型而改变。例如，如果从 Microsoft Paintbrush 中选定链接或嵌入的图片，菜单选项将更改成“编辑 Paintbrush 图片对象”。


请参阅

通用字段窗口

插入对象（编辑菜单）


链接（编辑菜单）

请参阅

显示“编辑链接”对话框，从中更改或断开对象链接。

编辑链接对话框选项

链接组

指定显示在“链接”框中的 OLE 链接或 DDE 链接。

链接

显示已链接的文件名和项信息，例如位图的坐标、对象应用程序或应用程序类型、为链接选定的更新类型。

源

在“链接”框中显示选定对象文件完整的路径及名称。

类型

显示对象应用程序或应用程序的类型，它们将与在“链接”框中选定的文件相链接。

更新

指定您希望如何更新信息。

选定“自动”使得只要新信息可用， Visual FoxPro 就更新信息。

仅当选定链接并选择“现在更新”按钮时，可以选择人工更新信息。

现在更新

在“链接”框更新选定的链接。如果在对象文档中的信息已更改，新信息将显示在表单或报表中。

打开源

从正在编辑的对象应用程序中打开选定文件。

更改源

显示更改源对话框，可以为选定的链接和更改的项信息指定不同的对象。

断开链接

在“链接”框中断开选定的链接。将对象更改成图片，此图片将不能再由创建它的 OLE 应用程序编辑。

更新

自动

指定当源文件改变时，对象也将改变。

人工l

指定对象必须由人工更改，改变源文件不影响对象。


请参阅

更改源对话框

链接或嵌入数据

向表中链接或嵌入数据

向表单链接或嵌入数据


更改源对话框

请参阅

列出对象，可以选择它们链接到另一个 OLE 对象。当在编辑链接对话框中选择“更改源”时出现此对话框。

对话框选项

源名称

指定要与之链接的 OLE 对象。键入或从列表中选择对象的文件名。

文件类型

仅显示所有文件。

驱动器

指定要链接的文件所在的驱动器。

目录

指定要链接的文件所在的目录。


请参阅

链接（编辑菜单）


文件菜单

文件菜单包括允许用户创建、打开、保存或其他对文件进行操作的命令。在这个菜单中也可以设置打印机信息、打印文件或退出 Viual FoxPro 。

文件菜单命令

新建

使用设计器和向导创建新文件。创建的新程序或文件文件可以在编辑窗口中直接键入。

打开

打开一个已有的文件或创建一个新文件。

关闭

关闭活动窗口。

保存

把修改保存到活动文件中。

另存为

保存一个新建文件，或用一个不同的文件名保存已有文件或对象。

另存为类

将一个表单或在表单上选择到的控制作为一个类定义保存。这个命令在运行“表单设计器”时可以使用。

另存为视图

把一个查询保存到一个数据库 (.DBC) 文件中。这个命令在运行“查询设计器”时可以使用。

放弃

放弃自上一次保存以来对文件所做的所有修改。

导入

将其它类型的文件导入到 Visual FoxPro 表中。

导出

将 Visual FoxPro 表中的数据导出到其它类型的文件中。

页面设置

调整报表或标签的列宽度和页面布局。

打印预览

预览打印效果，但不真正打印。

打印

打印一个文本文件、报表、标签、命令窗口的内容或剪贴板的内容。

发送

发送电子邮件。

1, 2, 3, 4

列出最近打开的项目。

退出

退出 Visual FoxPro 工作期。


新建（文件菜单）

请参阅

打开“新建”对话框。

Visual FoxPro 提供了一系列设计器，帮助创建类、连接、数据库、表单、标签、菜单、查询、本地和远程视图、报表和表。您也可使用 Visual FoxPro 向导来创建许多这样的文件，如：报表，表单和查询。创建新程序或文本文件时简单地在编辑窗口键入即可。下表列出了可以创建的文件类型及创建方法。

快捷键

    Ctrl + N

“新建”对话框选项

文件类型

下表列出了可以创建的文件类型以及创建这些文件时可以使用的工具，这些工具的选用主要是根据您单击“新文件”还是“向导”来决定。

文件类型	创建工具
项目	项目管理器
数据库	数据库设计器
表	表设计器, 表向导
查询	查询设计器, 交叉表向导, 查询向导, 本地视图向导, 远程视图向导, 数据透视表向导
*连接	连接设计器
*视图	视图设计器, 本地视图向导
*远程视图	远程视图向导
表单	表单设计器, 表单向导, 一对多表单向导
报表	报表设计器, 报表向导, 一对多报表向导, 分组/总计报表向导
标签	标签设计器, 标签向导
程序	编辑窗口
类	类设计器
文本文件	编辑窗口
菜单	菜单设计器
*使用这些选项时必须先打开一个数据库。

新文件

显示一个对话框、设计器或编辑窗口，从中可以创建选定类型的文件。

向导

打开创建选定文件类型的向导。如果有多个向导可供选择，则 Visual FoxPro 将提示您选择要使用的向导。


请参阅

类设计器

连接设计器

数据库设计器

编辑窗口

表单设计器

标签设计器

菜单设计器

项目管理器

查询设计器

报表设计器

表设计器

使用设计器

使用向导

视图设计器


创建对话框

请参阅

当选择了“新建”对话框中的“项目”、“数据库”或“表”，并选择“新文件”后，显示这个对话框。

对话框选项

文件名

指定新文件名称。可以键入一个新文件名，也可以使用默认文件名，或在文件名列表中选择一个文件名改写默认文件名。若要创建这个文件，可选择“创建”按钮或双击文件列表中的一个文件名。

文件列表中显示的文件是当前目录中所有“文件类型”框中指定类型的文件。

文件类型

列出可用文件类型。若要改写默认文件类型，则需要选择“所有文件”。

目录

列出当前可以使用的所有目录名。若要用一个新文件名改写一个活动文件，或将其保存到另一个目录下，则需选择该文件所在的目录。

驱动器

列出当前可以使用的所有驱动器。若要用一个新文件名改写一个活动文件，或在另一个驱动器上创建这个文件，则需选要选择这个文件所在的驱动器。

创建

创建新项目、数据库或表，并打开相应的设计器。

代码页

显示代码页对话框，从中可以正确选择查看文件所需的代码页。该命令只应用于文本文件，比如程序 (.PRG)、查询 (.QPR) 和文本 (.TXT) 文件。

网络

与网络驱动器连接，连接实现后便可以在网络驱动器上创建新文件，而不一定要在本地驱动器上创建新文件。


请参阅

代码页对话框

使用设计器

使用向导


添加表或视图对话框

请参阅

当用户在“新建”对话框中选择“查询”或“本地视图”，并选择了“新文件”之后，显示该对话框。从中可以选择一个或多个已有的表或视图，新的查询和本地视图将建立在这些表或视图上。

对话框选项

数据库

默认时显示活动数据库，可以选择其它打开的数据库。

数据库中的表/视图

显示活动数据库中的表或视图，究竟是显示表还是显示视图，主要取决于对“表”和“视图”选项的选择。

表

在“数据库中的表”对话框中列出活动数据库中的所有表。

视图

在“数据库中的视图”对话框中列出活动数据库中的所有视图。

其它

显示“打开”对话框，从中可以选择自由表添加到查询或视图中。选择“视图”选项时不能使用这个按钮，因为视图仅 在打开的数据库中才可用。


请参阅

ADD TABLE 命令

创建本地表视图

创建提示值视图

新建（文件菜单）


选择连接或数据源对话框

请参阅

选择一个数据源或者与一个数据源已有的连接，以便创建一个新远程视图。也可用连接设计器创建一个新远程视图。

在“新建”对话框中选定“远程视图”，然后选择“新文件”时，显示这个对话框。

对话框选项

数据库中的连接/可用数据源

根据“选择”选项组中的选定项，分别列出可用的 ODBC 数据源或已有连接。选定所需数据源或连接，然后选择“确定”。

选择

连接

显示活动数据库中可供选择的已有连接。

可用数据源

显示可以用来创建远程视图的 ODBC 数据源。

新建

显示“连接设计器”，从中可以创建并保存与一个数据源的连接。


请参阅

连接设计器

CREATE CONNECTION 命令


新标签对话框

请参阅

显示预定义标签类型，选择一个类型作为您在标签设计器中创建新标签的基础。“列数”表示该标签类型在一张 8 1/2×11 的页面上占多少列。

可以使用 AddLabel 应用程序向列表中添加新的标签尺寸。

当从“新建”对话框（“文件”菜单中的“新建”命令）选择“标签”，并选择“新文件”按钮时，显示这个对话框。


请参阅

添加标签尺寸

AddLabel

CREATE LABEL 命令

标签设计器


新建类对话框

请参阅

指定一个新类的信息，这些信息可供类设计器使用。

当您在“新建”对话框中（“文件”菜单中的“新建”命令）选择“类”，并选择“新文件”后，将显示这个对话框。

“新建类”对话框选项

类名

指定要创建的类定义名。

派生于

指定派生新类定义的类名。

来源于

指定一个 .VCX 可视类库名，这个类库中包含“派生于”框中指定的类。该列表默认时包括所有 Visual FoxPro 类。选择三点按钮可以指定一个可视类库，从这个可视类库中能够选择一个基类 。

存储于

指定保存新类的可视类库名称。


请参阅

类设计器

Class 属性

ClassLibrary 属性

CREATE CLASS 命令

创建类库


打开（文件菜单）

请参阅

打开一个已有文件或创建一个新文件。先前打开的项目显示在“文件”菜单的底部。对应于 GETFILE( ) 函数。

附注

用“打开”命令创建的文件并不添加到项目中。

快捷键

    Ctrl + O

“打开”对话框选项

文件名

指定要打开的文件。若要打开一个文件，可以从列表框中选择一个文件名然后单击“确定”，或双击这个文件名。

所显示的文件都是当前目录下与“文件类型”框中所指定的类型相匹配的文件。

文件类型

列出了所有可用的文件类型。选择一个文件类型可以使列表中只显示该类型的所有文件。

目录

列出所有目录。如果要打开的文件不在当前目录中，则可以用这个框选择文件所在的目录。

驱动器

列出所有驱动器。如果要打开的文件不在当前驱动器中，则可用这个框指定文件所有的驱动器。

代码页

显示代码页对话框，从中可以指定要正确查看文件所需的代码页。该命令仅用于文本文件，比如程序 (.PRG)，查询 (.QPR) 和文本 (.TXT) 文件。

网络

联接一个网络驱动器，您可以打开这个网络驱动器上的文件，而不一定要打开本地驱动器上的文件。

环境

保存文件的环境，并在打开这个文件时打开与之相关的环境。当您在“文件类型”列表中选择了“表单”、“标签”或“报表”，可以使用这个选项。并且，默认情况下选定这个复选框。若要在打开表单、标签或报表时不打开与其相关的环境，只要清除这个复选框就可以了。

独占

指定是否以独占方式使用表 (.DBF) 和数据库 (.DBC) ，这样其他用户便不能打开该文件。该选项仅在打开表时可以使用，对应于 USE EXCLUSIVE 命令。

以只读方式打开

指定打开的文件只能查阅，不能修改。

类名称

显示“类库名”框中指定类库中的类，仅当用户打开类库时该列表出现。


请参阅

1, 2, 3, 4（文件菜单）

代码页对话框

GETFILE( ) 函数

USE EXCLUSIVE 命令


代码页对话框

请参阅

为没有代码页的 .DBF 文件指定一个代码页。

.DBF 文件只有在具有正确的代码页时才能正确地显示。Visual FoxPro 创建 .DBF 文件时，自动为它指定代码页。然而，用 FoxPro 早期版本或其它产品创建的 .DBF 文件有可能没有代码页。

如果选定了“选项”对话框中数据选项卡 的“提示代码页”复选框（“工具”菜单），则 FoxPro 在打开没有指定代码页的表时，自动提示您指定一个代码页。用户也可以用 GETCP( ) 函数 函数显示“代码页”对话框。

对话框选项

操作平台

指定正在使用的操作系统类型。这里的选择决定了“代码页”对话框中显示的内容。

全部

显示所有操作平台的代码页。

Windows

仅显示 Windows 代码页。

MS-DOS

仅显示 MS-DOS 代码页。

Macintosh

仅显示 Macintosh 代码页。

代码页

显示选定操作平台的所有代码页。

选定

将当前选定的代码页作为默认代码页。


请参阅

添加代码页标记

更改 .DBF 文件的代码页

检查 .DBF 文件的代码页标记

Visual FoxPro 支持的代码页

数据选项卡 (选项对话框)

De决定项目文件的代码页

打开或关闭代码页提示

GETCP( ) 函数

打开（文件菜单）

删除代码页标记

另存为（文件菜单）

指定文本文件的代码页


关闭（文件菜单）

请参阅

关闭活动窗口。

按下 SHIFT 的同时选择“文件”菜单，则“关闭”命令变为“全部关闭”命令。“全部关闭”命令关闭所有打开的窗口。


请参阅

CLOSE 命令


保存（文件菜单）

请参阅

将所作修改保存到活动文件中。除了连接和视图外，对其他文件类型都显示“另存为”对话框。有关对话框选项的说明，请参阅另存为。

保存连接和视图时，只显示一个用来键入文件名的文本框。若文件名已存在，则 Visual FoxPro 在改写文件名之前给以提示。

快捷键

    CTRL + S


请参阅

另存为（文件菜单）


另存为（文件菜单）

请参阅

保存新文件或用一个不同的文件名保存已有文件。这个命令对应于 PUTFILE( ) 函数

这个命令可以保存以下文件类型的文件：

 •	   项目

 •	   查询

 •	   连接（请参阅下面的附注）

 •	   视图（请参阅下面的附注）

 •	   表单

 •	   报表

 •	   标签

 •	   程序

 •	   文本文件

 •	   菜单

附注

当您选择“保存”或“另存为”保存连接或视图时，都显示“保存”对话框。有关该对话框的说明，请参阅保存命令。

“另存为”对话框选项

保存文档

指定新文件名。可以键入一个新文件名，也可以从文件列表中选择一个文件名。若要保存一个文件，则可以单击“保存”或双击所选文件名。框的标题根据要保存文件类型的不同而自动改变。

文件列表中显示的文件是当前目录下与“文件类型”框中指定的类型相匹配的文件。

文件类型

列出所有有效的文件类型。这个框中指定的文件类型决定了“另存为”框中显示的文件类型。

目录

列出可以保存新文件的目录。

驱动器

列出可以保存新文件的驱动器。

代码页

显示代码页对话框，从中可以为文件指定正确的代码页。如果文本文件使用了扩展字符集，应选择代码页并作其它适当的选择。

网络

与网络驱动器连接，从而可以将文件保存到网络驱动器上，而不一定要保存在本地驱动器上。

保存

在指定位置，以指定文件名保存文件。


请参阅

代码页对话框

PUTFILE( ) 函数

保存（文件菜单）


另存为视图（文件菜单）

按活动的查询创建一个新视图。保存了活动的查询并打开了一个数据库时，这个命令可以使用。


另存为类（文件菜单）

请参阅

把一个表单或表单上的选定控制作为一个类保存。如果要使用表单创建一个子类，或者想在其他的表单中重用这些控制，则可以使用该命令。

“另存为类”命令只能对表单使用。

“另存为类”对话框选项

保存

指定表单中作为类定义保存的部分。

选定控制

仅将选定的控制作为类定义保存。

当前表单

将活动表单作为类定义保存。

整个表单集

将一组相关的表单作为类定义保存。从“表单”菜单上选用了创建表单集命令之后，可以使用这个命令。

保存到类

指定保存控制、整个表单或表单集的类定义。

类名

指定类名。

文件

指定保存类定义的 .VCX 文件名。

说明

为类指定一个说明，这一项是可选的。


请参阅

创建表单集（表单菜单）

将表单和控制保存为类


还原（文件菜单）

请参阅

放弃自最后一次保存以来对项目、查询、表单、报表、标签、程序、文本文件、菜单、视图或备注字段所做的所有修改。


请参阅

重复 (编辑菜单)

撤消 (编辑菜单)


导入（文件菜单）

请参阅

从电子表格或其他格式的表中将数据导入到一个 Visual FoxPro 表中。也可使用导入向导来导入文件。

附注：

不能用这个菜单命令来导入文本文件。要导入文本文件，需使用导入向导或创建表命令，然后将文本文件追加到该新表中。

导入对话框选项

类型

指定要导入的文件类型，可以从列表中选择一种文件类型。

来源

指定源文件的路径和文件名。可以键入一个文件路径和文件名，也可以单击三点按钮查找源文件。

工作表

指定要导入的 Microsoft Excel 工作表。该框仅在“类型”框中选定 Microsoft Excel 5.0 (XLS) 时才出现。

到

显示如“选项”对话框中“文件位置”选项卡中定义的路径及导入文件的文件名。该文件名是源文件的文件名，但以 .DBF 作为扩展名。

导入向导

启动“导入向导”，使用导入向导时，通过一个简明的步骤，简单地回答几个问题，便可以正确实现导入。导入文本必须使用导入向导或先创建表，然后将文本文件追加到新表中。

下表列出了可用该命令导入的文件类型，以及用命令实现这一个任务时需要在命令窗口键入的等效语句。

文件类型	等价命令
Microsoft Excel 5.0 (XLS)	IMPORT FROM FileName TYPE XL5
Microsoft Excel 2.0, 3.0, and 4.0 (XLS)	IMPORT FROM FileName TYPE XLS
Lotus 1-2-3 3.x (WK3)	IMPORT FROM FileName TYPE WK3
Lotus 1-2-3 2.x (WK1)	IMPORT FROM FileName TYPE WK1
Lotus 1-2-3 1-A (WKS)	IMPORT FROM FileName TYPE WKS
Paradox 3.5, 4.0, 4.5 (DB)	IMPORT FROM FileName TYPE PDOX
Symphony 1.10 (WR1)	IMPORT FROM FileName TYPE WR1
Symphony 1.01 (WRK)	IMPORT FROM FileName TYPE WRK
FrameWork II (FW2)	IMPORT FROM FileName TYPE FW2
MultiPlan 4.01 (MOD)	IMPORT FROM FileName TYPE MOD
RapidFile (RPD)	IMPORT FROM FileName TYPE RPD


请参阅

追加来源对话框

向已有表中追加数据

选择要导入的文件类型

命令窗口

创建新表

导出（文件菜单）

导入对话框

导入向导

将数据导入到新表

导入数据

从文本文件导入或追加

IMPORT 命令


对话框选择

选择下列一个主题可以获取对这个对话框的帮助信息。

导入对话框

导出对话框

追加记录对话框


导出（文件菜单）

请参阅

将 Visual ForPro 表的数据导出到一个文本文件、电子表格或公用表格式。

导出对话框选项

类型

指定要导出到的文件类型。可以从列表中选择文件类型。

到

指定目标文件的路径和文件名。可以键入路径和文件名，也可以单击三点按钮查找目标文件。

从

指定源文件的路径和文件名。可以键入路径和文件名，也可以单击三点按钮查找源文件。

选项

显示导出选项对话框，从中可以指定要导出的记录和字段。

下表列出了可以使用该命令导出的文件类型，以及在命令窗口窗口中用命令实现相同功能时需要使用的等效命令。

文件类型	等价命令
Visual FoxPro 3.0 (DBF)	COPY TO FileName
FoxPro for Windows 2.x (DBF)	COPY TO FileName FOX2X
FoxBASE+ (DBF)	COPY TO FileName FOXPLUS
dBASE IV (DBF)	COPY TO FileName FOX2X
Delimited Text	COPY TO FileName TYPE DELIMITED
Microsoft Excel 5.0 (XLS)	COPY TO FileName TYPE XL5
Microsoft Excel 2.0, 3.0, and 4.0 (XLS)	COPY TO FileName TYPE XLS
Lotus 1-2-3 2.x (WK1)	COPY TO FileName TYPE WK1
Lotus 1-2-3 1-A (WKS)	COPY TO FileName TYPE WKS
Symphony 1.10 (WR1)	COPY TO FileName TYPE WR1
Symphony 1.01 (WRK)	COPY TO FileName TYPE WRK
MultiPlan 4.01 (MOD)	COPY TO FileName TYPE MOD
Data Interchange Format (DIF)	COPY TO FileName TYPE DIF
System Data Format (SDF)	COPY TO FileName TYPE SDF
Symbolic Link Format	COPY TO FileName TYPE SYLK


请参阅

命令窗口

COPY TO 命令

导出选项

将数据导出到新文件

EXPORT 命令

导入（文件菜单）


导出选项对话框

请参阅

指定要导出的记录和字段。在导出对话框中选择“选项”后，显示该对话框。

对话框选项

条件

这些选项控制导出哪些记录和字段，以及导出的条件。

范围

显示 Scope 对话框,，从中可以指定要导出的记录数量。

For...

显示表达式生成器，从中可以创建一个逻辑表达式，每一个要导出的记录必须满足这个条件。

While

显示表达式生成器，从中可以创建一个逻辑 WHILE 表达式，只要这个表达式一直为“真”，就继续导出记录。

字段

显示字段拾取器对话框，从中可以选定要导出的字段。

有关导出记录和字段的详细内容，请参阅以下帮助主题：

 •	   选择要导出的记录

 •	   选定一定数量或范围的记录

 •	   选定与条件相匹配的记录

 •	   控制记录选择的过程

 •	   导出：使用 WHILE 表达式

 •	   将数据导出到新文件

 •	   选定要导出的字段


请参阅

控制记录选择的过程

导出对话框

将数据导出到新文件

导出：使用 WHILE 表达式

EXPORT 命令

表达式生成器

字段拾取器对话框

Scope 对话框,

选定一定数量或范围的记录

选定要导出的字段

选定与条件相匹配的记录

选择要导出的记录


页面设置（文件菜单）

请参阅

显示“页面设置”对话框，从中可以调整报表或标签的列宽和页面布局。在该对话框中可调整的设置取决于安装的打印机，并与报表和标签一起保存。

在打开了一个报表或标签时，“页面设置”命令可用。

页面设置对话框选项

页面布局

提供页面的一种图形表示，反映报表或标签设计器中的布局，以及在“页面设置”对话框中选择或键入的设置值

列

列数

指定页面上要打印的列数。

宽度

指定一列的宽度，以英寸或厘米为单位。

间隔

指定列之间的空间，以英寸或厘米为单位。

尺寸单位

指定计算列宽和间隔的单位（英寸或厘米）。

英寸

以英寸为单位指定列的宽度和间隔。

厘米

以厘米为单位指定列的宽度和间隔。

打印区域

可打印页

指定由当前选用的打印机驱动程序确定最小页边距。

整页

指定由打印纸尺寸确定最小页边距。

打印顺序

在用户有多列时，指定记录如何换行。

左边距

指定左边距宽度，以英寸和厘米为单位。

打印设置

显示打印设置对话框，从中可以选择打印机、打印机路径和纸张设置。


请参阅

添加标题和总结带区

在一页中定义多列

定义报表页面

规划数据位置

打印（文件菜单）

打印设置对话框

设置带区高度

设置边距

设置页面的大小和方向


打印预览（文件菜单）

请参阅

预览打印结果，但不在打印机上真正打印。

在打开了一个报表或标签后，“打印预览”命令可用。

在“查看”菜单上选择“设计”命令可以将预览方式转换为设计方式。

快捷键

选择“打印预览”命令后后，同时也显示打印预览工具栏，使用工具栏的选项可以更改预览。也可单击预览页的图象将其放大，再单击一次可将其缩小或返回到设计方式。


请参阅

预览报表和标签

预览结果

打印（文件菜单）

打印预览工具栏


打印（文件菜单）

请参阅

打印一个文本文件、报表、标签及“命令”窗口或剪贴板中的内容。

快捷键

    CTRL + P

打印对话框选项

打印内容

类型

指定要打印的文件类型。可选择“报表”、“标签”、“命令”（命令窗口中的内容）、文件、ASCII 文件或其他打开的文本文件（.QPR，.PRG，或 .TXT）。

附注：

ASCII 文件选项不经过打印机驱动程序直接把选定文件的内容传送到打印机。但应确保该文件中包含的内容是有效的打印机命令。如果其中包含了无效的打印机命令，则可能导致打印失败，并需要重置。

文件

指定要打印文件路径和文件名。可以键入路径和文件名，也可以单击三点按钮显示打印文件对话框，从中可以指定目录并选择要打印的文件。

打印选项

行号

在左边空白处打印行号。打印命令窗口或剪贴板中的内容时可以使用这个选项。

打印前走纸

在打印文件之前打印头移到下一页的顶部。

打印后走纸

在打印文件后将打印头前移到下一页的顶部。该选项在打印报表和标签时不能使用。

还原环境

要运行 ForPro 2.x 版本的报表时，确保使用先前保存在报表中的数据环境设置运行报表。该选项不适用于 Visual FoxPro 报表，因为它们使用自己的数据环境。

打印设置

显示 Windows 打印设置对话框，从中可以指定一台本地或网络打印机、页面方向、纸张大小和其他打印选项。

选项

显示打印选项对话框，从中可以使用表达式生成器来创建表达式筛选要打印的记录。


请参阅

控制报表和标签输出

表达式生成器

打印文件对话框

打印选项对话框

打印预览（文件菜单）

打印设置对话框

打印报表和标签

将报表打印到文件中

打印报表

选择要打印的记录


打印设置对话框

请参阅

选定打印机、打印机路径和纸张设置。可以在对话框中进行的调整取决于安装的打印机，并且和报表或标签一起保存。也可以在其中更改对当前打印任务的设置，但这些设置不保存在报表文件中。

对话框选项：

打印机

指定要使用的打印机，仅显示已安装的打印机。指定的打印机将确定对话框中哪些选项可以使用。若要安装打印机和配置端口，需要使用 Windows 的控制面板。

默认打印机

显示在 Windows 控制面板中定义的打印机和路径，并把它作为默认设置值。当选定该选项按钮时，Visual FoxPro 对所有打印任务都使用默认打印机完成。

专用打印机

列出 Windows 控制面板中定义的所有打印机，可以从中任选一个。选定该选项时，Visual FoxPro 将用选定的打印机完成所有打印任务，而不用默认打印机完成。

方向

纵向

指定按纵向方向打印。

横向

指定按横向方向打印。

纸张

大小

指定使用的纸张大小。既可以打印纸张也可打印信封。

来源

指定打印机的纸张来源(例如，上层纸盒)。

选项

显示 Windows “打印选项”对话框，从中可以指定仅适用于您的打印机的各种功能。

网络

显示 Windows “联接网络打印机”对话框，从中可以联接远程打印机。


请参阅

临时更改报表打印机设置

打印（文件菜单）

打印文件对话框

打印选项对话框

打印预览（文件菜单）

设置页面的大小和方向


打印选项对话框

请参阅

单击打印对话框的“选项”时将显示该对话框。

对话框选项

条件

这些选项控制打印哪些记录及打印的条件。

范围

显示 Scope 对话框，从中可以指定打印数量。

For

显示表达式生成器，从中可以创建一个逻辑表达式，指明每一个记录必须满足的条件。

While

显示表达式生成器，从中可以创建一个逻辑表达式，只要这个表达式一直为“真”时，就继续打印记录。


请参阅

控制要打印记录的选定

表达式生成器

打印（文件菜单）

打印一定数量或范围的记录

打印与条件相匹配的记录

Scope 对话框


打印文件对话框

请参阅

您可以在这个对话框中指定要打印的文件所在的驱动器或目录。在单击打印对话框中“文件”框右侧的三点按钮时，这个对话框会显示出来。

对话框选项：

文件名

指定要打印的文件。该框的名称随“打印”对话框中选定文件类型的不同而改变。可以从列表中选择一个文件，然后选择“确定”，也可以双击这个文件名。

所显示文件是当前目录下与“文件类型”框中指定类型相匹配的所有文件。

文件类型

列出所有文件类型。选择“全部文件”可以列出给定目录下的每一个文件。

目录

列出所有目录。当文件不在当前目录下时，用这个框可以选择文件所在的正确目录。

驱动器

列出所有驱动器。当文件不在当前驱动器中时，用这个框可以选择文件所在的正确驱动器。

页代码

显示代码页对话框，从中可以指定正确的代码页。如果要打印的文件中有扩展字符，则应单击“代码页”，并在其中选择一个正确的代码页。

网络

连接一个网络驱动器，从中可打印一个网络驱动器的文件，而不一定要打印本地驱动器上的文件。


请参阅

打印（文件菜单）


发送（文件菜单）

发送电子邮件。

该命令仅在运行 Windows NT 或 Windows 95 并已安装 Microsoft Mail 时可以使用。


1, 2, 3, 4（文件菜单）

请参阅

列出最近打开的四个项目。可以从中选择一个要打开的文件。


请参阅

打开（文件菜单）


退出（文件菜单）

请参阅

退出 Visual FoxPro 工作期并将控制返回到操作系统。与在命令窗口或一个程序中执行 QUIT 命令效果相同。

快捷键

ALT + F4


请参阅

命令窗口

EXIT 命令

QUIT 命令


表单菜单

“表单”菜单包含创建和修改表单及表单集的命令。

表单菜单命令

新属性

创建一个新属性。

新方法

创建一个新方法。

编辑属性/方法

编辑已有的属性或方法。该属性或方法可用于独立的表单或表单集。对于类来说，当用户添加一个新属性或方法时该命令可用。

包含文件

指定一个包含用户自定义类、表单或表单集的预定义编译期间常量的头文件。

快速表单

显示“表单生成器”，帮助用户创建一个简单的表单，用户可以通过添加控制来定制该表单。

创建表单集

创建一个新表单集，该表单集为一个或多个表单的父容器。

删除表单集

删除一个已有的表单集，此命令仅在用户已创建一个表单集时可用。

添加新表单

如果用户已创建了表单集，就可以向其中添加新表单。此命令仅在用户处理表单集而不是处理表单时可用。

删除表单

如果用户已创建一个表单集就删除一个表单，该命令仅在用户处理表单集而不是处理表单时可用。

运行表单

在用户设计并保存表单之后，运行该表单。


新属性（表单菜单和类菜单）

请参阅

创建一个新属性。

新属性对话框选项

属性名

指定新属性名。

说明

包含显示在类设计器中属性窗口底部的属性说明。若该属性不受保护，则显示于表单设计器中。

保护（仅用于类）

指定类属性是否受保护，在对象从层中受保护的属性不可见。用户仅可保护类的属性，表单属性不受保护。


请参阅

类设计器

编辑属性/编辑方法（表单菜单和类菜单）

表单设计器

新建类对话框

新方法（表单菜单和类菜单）

属性窗口


新方法（表单菜单和类菜单）

请参阅

创建一个新方法。

新方法对话框选项

方法名

指定新方法名。

说明

包含显示在类设计器中属性窗口底部的方法说明，若该属性不受保护，则显示于表单设计器中。

保护(仅用于类)

指定类属性是否受保护。在对象层上受保护的属性不可见。用户只能保护类的方法，不能保护表单方法。


请参阅

类设计器

编辑属性/编辑方法（表单菜单和类菜单）

表单设计器

新属性（表单菜单和类菜单）

属性窗口

保护类成员


编辑属性/编辑方法（表单菜单和类菜单）

请参阅

编辑已有的属性或方法。该属性或方法可用于独立的表单或表单集。对于类，在添加新属性或新方法时此命令可用。

编辑属性/编辑方法对话框选项

属性/方法

指定属性名。

说明

包含显示在类设计器中属性窗口底部的属性说明或方法说明，若该属性不受保护，则显示于表单设计器中。

保护

指定该类是否受保护。

移去

删除所选定的属性/方法。

关闭

关闭对话框。


请参阅

类设计器

表单设计器

新属性（表单菜单和类菜单）

属性窗口

保护类成员


包含文件（表单菜单和类菜单）

请参阅

打开“包含文件”对话框，从中可以指定包含文件。

包含文件对话框选项

包含文件

指定包含用户自定义类、表单或表单集编辑期间预定义的常量的头文件。在框中键入包含文件名，或使用三点按钮来选定已有的包含文件。


请参阅

#DEFINE


快速表单（表单菜单）

请参阅

显示表单生成器，帮助用户创建一个简单的表单，可通过添加控制来定制该表单。


请参阅

CREATE_SCREEN - 快速屏幕

表单生成器

新建 (文件菜单)

使用向导


创建表单集（表单菜单）

请参阅

创建一个新表单集。


请参阅

移去表单集（表单菜单）


移去表单集（表单菜单）

请参阅

移去已有的表单集。如果表单集中仅有一个表单并且用户只想处理该表单，则用户可以移去该表单集。

该命令仅在用户已创建一个表单集并且该表单集中只有一个表单时可用。


请参阅

创建表单集（表单菜单）


添加新表单（表单菜单）

请参阅

如果已创建了表单集，就可以使用该命令添加新表单。该命令仅在用户处理一个表单集时可用。


请参阅

移去表单（表单菜单）


移去表单（表单菜单）

请参阅

如果已创建了表单集，就可以使用该命令移去选定的表单。该命令仅在表单集中有多个表单时可用。


请参阅

添加新表单（表单菜单）


运行表单（表单菜单）

请参阅

如果已设计了表单，就可以使用该命令来运行该表单。Visual FoxPro 提示用户在运行该表单前先将其保存。

快捷楗


请参阅

运行文件 (项目菜单)


格式菜单

请参阅

菜单包括字体、间距、对齐方式和对象位置等选项。

格式菜单命令

文本对齐方式

在字段或标签控制内调整文本的对齐方式和间隔。此命令在处理报表和标签时可用。

填充

使用样本填充选定的控制。此命令在处理报表或标签时可用。

绘图笔

设置标签或报表上矩形和圆角矩形的轮廓线和线条的磅值及设计样本。此命令在处理报表或标签时可用。

方式

确定所选控制是不透明还是透明的，此命令在处理报表或标签时可用。

字体

控制字体的类型、字形和大小。此命令在处理文本文件或报表、标签中的字段控制、标签控制或“命令”窗口时可用。

放大字体

把字体大小增大到更大的可用尺寸。此命令在处理文本或程序文件或“命令窗口”时可用。

缩小字体

把字体大小减小到更小的可用尺寸。此命令在处理文本或程序文件时可用。

一倍行距

显示文本时文本行间无空白行。此命令在处理文本或程序文件时可用。

1.5 倍行距

以 1.5 倍行间距显示文本。此命令在处理文本或程序文件时可用。

二倍行距

以 2 倍行间距显示文本。此命令在处理文本或程序文件时可用。

缩进

将选定的行缩进一个 Tab 键宽度。此命令在处理文本或程序文件时可用。

删除缩进

一次删除一个先前插入的缩进。此命令在处理文本或程序文件时可用。

对齐

对齐表单、报表、标签或类上的控制。此命令在处理报表、标签、表单或类时可用。

大小

更改控制的大小。此命令在处理报表、标签、表单或类时，及创建和选择一个控制时可用。

水平间距

设置选定对象间的水平间隔，此命令在处理报表、标签、表单或类时可用。

垂直间距

设置选定对象间的垂直间隔，此命令在处理报表、标签、表单或类时可用。

置前

将选定的控制置于前面，使其显示在重叠控制的前面。此命令在处理报表、标签、表单或类，添加对象和选择一个或多个对象时可用。

置后

将选定的控制置于后面，使其隐藏于重叠控制的后面。此命令在处理报表、标签、表单或类，添加对象和选择一个或多个对象时可用。

分组

联接选定的控制，使它们作为单个控制被处理。它与拖动鼠标将全部控制一次选定等效。此命令在处理报表、标签和选择多个控制时可用。

取消组

分隔以前在一个组内的控制，使它们可以分别处理，此命令在处理报表或标签并对控制分组时可用。

对齐格线

当用户选定并拖动控制时，以网格为增量移动控制。此命令在处理报表、标签、表单或类，添加对象和选择一个或多个对象时可用。

设置网格刻度

指定网格水平和垂直增量的象素数目，（对于报表和标签）指定标尺是否显示英寸或象素。此命令在处理报表、标签、表单或类时可用。


请参阅

报表控制的格式选项


字体（格式表单）
字体（格式菜单）

请参阅

控制字体的类型、字形和大小。

此命令在处理报表、标签、文本或程序等文件时可用。若要使报表和标签的“字体”命令可用，必须创建标签控制或字段控制并选定它。

字体对话框选项

字体

显示可用的字体。

字形

显示可用于字体或选定文本的字形（常规、斜体或粗斜体）。

大小

显示字体磅值的列表。

效果

删除线

使用水平线给文本加删除线。此选项仅在处理报表或标签时出现。

下划线

给选定的文本加下划线，此选项仅在处理报表或标签时出现。

颜色

指定选定的颜色。此选项仅在处理报表或标签时出现。


请参阅

添加字段控制

添加标签控制

更改字体

放大字体（格式菜单）

缩小字体（格式菜单）


文本对齐（格式菜单）

请参阅

在报表或标签的字段控制或标签控制内，调整文本的对齐方式和间距。

此命令在处理报表或标签时可用。若要使此命令可用，必须选定一个字段控制或标签控制。

文本对齐子菜单命令

左对齐

使所选控制中的文本左对齐。

居中对齐

使所选控制中的文本居中对齐。

右对齐

使所选控制中的文本右对齐。

单倍行距

在标签控制、文本或程序文件或“命令”窗口中，不带行间距显示文本。

1.5 倍行距

在标签控制、文本或程序文件或“命令”窗口中，以 1.5 倍行距显示文本。

2 倍行距

在标签控制、文本或程序文件或“命令”窗口中，以 2 倍行距显示文本。


请参阅

字体（格式菜单）


填充（格式菜单）

请参阅

使用样本填充选定的控制。

此命令在处理报表或标签时可用。若要使此命令可用，必须在报表或标签中创建矩形或圆角矩形控制，并选定该控制。

“填充”命令提供 8 个填充样本选项。


请参阅

添加线条、矩形和圆形

调色板工具栏

FillStyle 属性

绘图笔（格式菜单）

报表控制工具栏


绘图笔（格式菜单）

请参阅

在用户的标签或报表上设置矩形或圆角矩形的线条和轮廓线的磅值和设计样本。

此命令在处理报表或标签时可用。若要使此命令可用，必须创建线条控制，选定此线条控制，并选择“绘图笔”命令。

绘图笔子菜单命令

最细线

创建宽度为一个象素的轮廓线。

1 磅

创建宽度为 1 磅的轮廓线。

附注

根据用户监视器的图形分辨率，一磅可以是一个或几个象素宽。

2 磅

创建宽度为 2 磅的轮廓线。

4 磅

创建宽度为 4 磅的轮廓线。

6 磅

创建宽度为 6 磅的轮廓线。

无轮廓线

不创建轮廓线。

点线

创建的轮廓线为点线。

虚线

创建的轮廓线为虚线。

点划线

创建的轮廓线为点划线。

双点划线

创建的轮廓线为双点划线。


请参阅

添加线条、矩形和圆形

调色板工具栏

填充（格式菜单）

报表控制工具栏


模式（格式菜单）

请参阅

确定所选控制是不透明的还是透明的。

此命令在处理报表或标签时可用。若要使此命令可用，需在报表或标签中创建一个标签控制、字段控制 矩形控制，并选定此控制，然后选定“模式”命令。

模式子菜单命令

不透明

使选定的控制隐藏它后面的控制。

透明

使选定控制后面的控制可见。


请参阅

添加字段控制

添加标签控制

添加线条、矩形和圆形

调色板工具栏

填充（格式菜单）

报表控制工具栏


放大字体（格式菜单）

请参阅

把字体大小增大到更大的可用尺寸。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

缩小字体（格式菜单）


 缩小字体（格式菜单）

请参阅

把字体大小减小到更小的可用尺寸。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

放大字体（格式菜单）


单倍行距（格式菜单）

请参阅

显示文本时文本行间无空白行。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

1.5 倍行距（格式菜单）

2 倍行距（格式菜单）


1.5 倍行距（格式菜单）

请参阅

将行间距设置为 1.5 倍行距。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

2 倍行距（格式菜单）

单倍行距（格式菜单）


2 倍行距（格式菜单）

请参阅

将行间距设置为 2 倍行距。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

1.5 倍行距（格式菜单）

单倍行距（格式菜单）


缩进（格式菜单）

请参阅

将选定的行缩进一个 Tab 键的宽度，可以在“选项”对话框的编辑选项卡中指定 Tab 键的宽度。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

编辑选项卡 （选项对话框）

删除缩进（格式菜单）


删除缩进（格式菜单）
移去缩进（格式菜单）

请参阅

一次删除一个先前插入的缩进。

此命令在处理文本文件、程序文件或“命令”窗口时可用。


请参阅

缩进（格式菜单）


对齐方式（格式菜单）

请参阅

对齐表单上或报表、标签或类中的控制。可以依据相互间的关系或报表设计器、表单设计器、标签设计器或类设计器中的网格来对齐控制。也可以沿某一边或居中对齐控制。

若要在表单、报表、类或标签上，水平或垂直居中对齐不只一个控制时，需选定多个控制。

处理报表、标签、表单或类时此命令可用。在用户创建控制并选定此控制时，启用此命令。

对齐子菜单命令

对齐命令的按钮位于布局工具栏。

默认情况下，Visual FoxPro 把选定方向上边界最为接近的控制作为对齐的定位点。

使用“布局”工具栏，按下 CTRL 键并单击正确的对齐按钮时，可以使用距离指定边最远的一边来对齐控制。

左边对齐

对齐选定对象的左边。

右边对齐

对齐选定对象的右边。

顶边对齐

对齐选定对象的顶边。

底边对齐

对齐选定对象的底边。

垂直居中对齐

放置选定的对象使其中心线垂直居中对齐。

水平居中对齐

放置选定的对象使其中心线水平居中对齐。

垂直居中

在带区内控制垂直居中。

水平居中

控制水平居中。

提示

选择对齐方式命令，此命令按照一边对齐打开并相互分离的全部选定对象。同一水平行中的控制，在选定以其右边、左边或垂直居中对齐时将重叠。同样，在同一垂直列中的控制，当选定以其顶边、底边或水平居中时将重叠。


请参阅

向表单中添加控制

对齐控制

类设计器

表单设计器

标签设计器

布局工具栏

报表设计器

显示位置 （查看菜单）

对齐格线（格式菜单）


大小（格式菜单）

请参阅

更改控制的大小。用户可独立更改控制大小或调整控制组的大小使其互相匹配。用户可调整除标签外的所有报表控制的大小。

此命令在处理报表、标签、表单或类，以及创建并选定控制时可用。

大小子菜单命令

“大小”命令的按钮位于布局工具栏上。

To Fit

调整对象大小使其与之包含的内容相相配。

To Grid

如果选中了对齐格线命令，则在用户拖动对象时，以网格为增量调整对象的大小。

To Tallest

把全部选定对象的大小调整到最高选定对象的高度。

To Shortest    CTRL+

把全部选定对象的大小调整到最低选定对象的高度。

To Widest

把全部选定对象的大小调整到最宽选定对象的宽度。

To Narrowest    CTRL+

把全部选定对象的大小调整到最窄选定对象的宽度。


请参阅

布局工具栏

调整控制的大小

设置网格刻度（格式菜单）

对齐格线（格式菜单）


水平间距（格式菜单）

请参阅

设置选定对象间的水平间距。

此命令在处理报表、标签、表单或类时可用。

水平间距子菜单命令

相等

在带区内使选定控制的水平间距相等。

递增

递增选定控制间的水平间距。

递减

递减选定控制间的水平间距。


请参阅

垂直间距（格式菜单）


垂直间距（格式菜单）

请参阅

设置选定控制间的垂直间距。

此命令在处理报表、标签、表单或类时可用。

垂直间距子菜单命令

相等

在带区内使选定控制的垂直间距相等。

递增

递增选定控制间的垂直间距。

递减

递减选定控制间的垂直间距。


请参阅

水平间距（格式菜单）


置前（格式菜单）

请参阅

将选定的控制置于前面，使其显示在其它控制的前面。

此命令在处理报表、标签、表单或类，添加对象及选择一个或多个对象时可用。

快捷楗

   Ctrl + G


请参阅

置后（格式菜单）


置后（格式菜单）

请参阅

将选定的控制置于后面，使其隐藏于其它控制的后面。

此命令在处理报表、标签、表单或类，添加对象和选择一个或多个对象时可用。

快捷楗

   Ctrl + J


请参阅

置前（格式菜单）


对齐格线（格式菜单）

请参阅

在选定并拖动控制时，以网格为增量移动控制。

此命令在处理报表、标签、表单或类，添加对象及选择一个或多个对象时可用。

可在选项对话框的表单选项卡中设置表单设计器的默认值。


请参阅

调整控制的放置

表单设计器

表单选项卡（选项对话框）

选项对话框（工具菜单）

设置网格刻度（格式菜单）


设置网格刻度（格式菜单）

请参阅

以象素为单位定义网格的水平和垂直增量（对于报表和标签）指定标尺是否显示英寸或象素。

此命令在处理报表、标签、表单或类时可用。

可在选项对话框的表单选项卡中设置表单设计器的默认值。

网格属性和标尺/网格对话框选项

网格(以象素为单位)

水平

指定水平方向每英寸的象素数，范围从 1 到 48 象素。使用微调控制或在编辑框中键入象素的数目。

垂直

指定垂直方向每英寸的象素数，范围从 1 到 48 象素。使用微调控制或在编辑框中键入象素的数目。

标尺刻度

系统默认值

指定英寸作为标尺的度量单位。此选项仅用于报表或标签。

象素

指定象素作为标尺的度量单位。此选项仅用于报表或标签。


请参阅

调整控制的放置

表单设计器

表单选项卡 （选项对话框）

选项 （工具菜单）

对齐格线（格式菜单）


分组（格式菜单）

请参阅

联接选定的控制，可以把它们作为单个对象处理。此命令与拖动鼠标一次选定全部控制等效。

此命令在处理报表或标签，或创建多个对象时可用。


请参阅

撤消分组（格式菜单）


 撤消分组（格式菜单）

请参阅

分隔先前创建的成组控制，从而可以分别处理它们。

此命令在处理报表或标签并有已成组的控制时可用。


请参阅

分组（格式菜单）


帮助菜单

“帮助”菜单包含如下选项：打开 Visual FoxPro 联机帮助，引导您进入技术支持，显示有关用户计算机配置的信息。

帮助菜单命令

目录

显示联机帮助的目录表。

搜索帮助主题

允许使用关键字搜索帮助主题。

技术支持

显示与 Microsoft 产品支持服务有关的信息和 Visual FoxPro 的一般问题。

Office 兼容的帮助

显示 Visual FoxPro 和 Microsoft Office 的兼容性信息。

关于 Microsoft Visual FoxPro

显示 Visual FoxPro 和用户系统的信息。


目录（帮助菜单）

显示 Visual FoxPro 帮助目录表，该表列出联机帮助的主要分类和其中的主题。


搜索有关…的帮助（帮助菜单）

显示“搜索”对话框，从中可以使用关键字搜索联机帮助主题。


技术支持（帮助菜单）

显示一系列主题，用户可从中获得一般问题的解答以及从何处获得技术支持的说明。

当遇到问题时

一般问题的回答

Microsoft 知识库

在美国和加拿大的产品支持

世界范围的技术支持


Office 兼容性（帮助菜单）

Visual FoxPro for Windows 是 Microsoft Office 的兼容产品，也就是说，它的工具栏、菜单和加速键与 Microsoft Office 所用的相似。如果用户已在使用 Microsoft Office，包括 Microsoft Excel、Word、Microsoft Access 和 PowerPoint，那么用户已学会的可在 Office 中完成的许多工作，也可在 Visual FoxPro 中通过相似的方式完成。

在购买软件时，请注意查找 Microsoft Office Compatible 徽标。有关 Microsoft Office Compatible 程序和 Microsoft Office Compatible 产品的完整列表的详细内容，在美国请打 Microsoft Customer Service 的电话：1-800-426-9400。美国本土之外的用户请与当地的 Microsoft 办公室联系。


关于 Microsoft Visual FoxPro（帮助菜单）

请参阅

显示 Visual FoxPro 版权，授权和版本信息，以及产品标识编号。

关于 Microsoft Visual FoxPro 对话框选项

系统信息

显示Microsoft 系统信息对话框，从中可以显示、保存和打印用户的计算机配置，并运行其它 Windows 应用程序。


请参阅

Microsoft 系统信息对话框


Microsoft 系统信息对话框

请参阅

显示用户机器每一方面的信息。在此对话框中，可以打印或保存有关信息。也可以运行其它 Windows 应用程序。

当用户在关于 Microsoft Visual FoxPro 对话框中选择“系统信息”项时，显示该对话框。

对话框选项

选择一个分类

指定显示于窗口中的信息种类。该选择包括 System.Printing，system DLL'S，Fonts，Proofing，Graphic Filters，Text Converters，Display，Applications Rconning 和 OLE Registration。

运行

显示运行应用程序对话框，以便运行 Windows 应用程序。

打印

打开“记事本”，然后创建并打印 MSINFO.TXT 文件，此文件包含计算机配置的信息。而后把 MSINFO.TXT 文件保存于用户的 Windows 目录下。

保存

将用户计算机的当前配置保存于用户 Windows 目录下的 MSINFO.TXT 文件中。

关于

显示包含附加版权信息的“关于 Microsoft 系统信息”对话框。


请参阅

关于 Microsoft Visual FoxPro 对话框

运行应用程序对话框


运行应用程序对话框

请参阅

显示一列 Windows 应用程序，以便运行这些程序，当用户选择Microsoft 系统信息对话框中的“运行”选项时，显示此对话框。

对话框选项

其它

显示另一个“运行应用程序”对话框，从中可以键入想要运行的应用程序的路径和文件名。若要运行该应用程序，则需在框中键入路径和文件名并选择“确定”按钮。

附注

如果应用程序的文件位置在用户 AUTOEXEC.BAT 文件的 PATH 语句中，则不需在此指定路径。


请参阅

Microsoft 系统信息对话框


“菜单”菜单

“菜单”菜单包含用于创建和修改菜单系统的命令。

“菜单”菜单命令

快速菜单

把 Visual FoxPro 的主菜单系统加载到“菜单设计器”，将其作为创建菜单系统的基础。

插入菜单项

在“菜单设计器”窗口中插入新的一行。

删除菜单项

从“菜单设计器”窗口中删除选定行。

生成

显示“生成菜单”对话框，从中指定生成的菜单程序名称，而后生成该程序。

预览

当用户在没有编译菜单程序代码情况下设计菜单系统时，显示该菜单系统。


快速菜单（“菜单”菜单）

请参阅

把 Visual FoxPro 的主菜单系统加载到菜单设计器中，把它作为创建菜单系统的基础。


请参阅

插入菜单项 (菜单菜单)

菜单设计器

删除菜单项 (菜单菜单)


插入菜单项（“菜单”菜单）

请参阅

在菜单设计器窗口中插入新的一行。

快捷楗

CTRL + I


请参阅

菜单设计器

删除菜单项 (菜单菜单)


删除菜单项（“菜单”菜单）

请参阅

从菜单设计器窗口中删除选定的行。

快捷楗

CTRL + E


请参阅

菜单设计器

插入菜单项 (菜单菜单)


生成…（“菜单”菜单）

请参阅

显示“生成菜单”对话框，从中可以指定生成的菜单程序名称，而后生成该程序。

生成菜单对话框选项

输出文件

指定生成的菜单程序的路径，选择三点按钮来选定一个目录和文件名，或键入一文件名代替选定的文件名。

生成

产生一个扩展名为 .MPR 的菜单程序文件。


请参阅

执行 (程序菜单)

菜单设计器


预览（“菜单”菜单）

请参阅

当用户在没有编译菜单程序代码的情况下设计菜单系统时，显示该菜单系统。


请参阅

生成… (菜单菜单)


程序菜单

请参阅

“程序”菜单上的选项用于运行和测试 Visual FoxPro 源代码。

程序菜单命令

执行

指定要执行的程序文件。

执行 <程序>

运行显示于“编辑”窗口的程序，仅当户打开一个程序文件时出现。

取消

终止一个挂起 Visual FoxPro 程序文件的执行，此命令在程序被挂起时可用。

继续执行

在程序被挂起时的程序行重新执行该程序。当用户终止程序运行时此命令可用。

挂起

终止程序的运行，但继续使该程序保持打开状态，从而可以继续程序的执行。在用户运行程序时此命令可用。

编译

编译程序、菜单或查询文件。


请参阅

COMPILE 命令

运行程序

设置程序开发选项

跟踪程序


执行（程序菜单）

请参阅

打开“执行”对话框，从中可以指定等待运行的程序或表单文件。

快捷楗

CTRL + D

执行对话框选项

执行程序文件

指定待运行的程序或表单文件。若要运行程序或表单，则需从列表中选定文件名并选择“执行”，或双击该文件名。

所显示的程序文件是当前目录下与“文件类型”框中指定的类型相匹配的文件。

目录

列出可用的目录，如果程序文件不在当前目录中，则选择它所在的目录。

驱动器

列出可用的驱动器，如果程序文件不在当前驱动器中，则选择它所在的驱动器。

文件类型

列出可用的文件类型（程序、表单或所有文件）。

运行

运行选定的程序或表单文件。


请参阅

DO 命令


运行<程序>（程序菜单）

请参阅

运行显示于“编辑”窗口中的程序。仅当用户打开程序文件时该命令出现在“程序”菜单上，程序名同时出现在菜单命令中。

快捷楗

CTRL + E


请参阅

DO 命令


取消（程序菜单）

请参阅

终止一个挂起的 Visual FoxPro 程序文件的运行。

在程序被挂起时该命令可用。如果用户取消一个程序，不释放内存中该程序的变量。


请参阅

CANCEL命令

挂起（程序菜单）


继续执行（程序菜单）

请参阅

在程序被挂起的那一行重新启动该程序。

在程序被挂起时该命令可用。

快捷楗

CTRL + M


请参阅

RESUME 命令

挂起（程序菜单）


挂起（程序菜单）

请参阅

挂起程序的执行。该程序文件保持打开状态，用户可通过选择“继续执行”命令继续该程序的运行。

程序运行时该命令可用。用户也可以在程序代码中包括 SUSPEND 命令，从而在一特定点挂起程序的执行。


请参阅

RESUME 命令

继续执行（程序菜单）

SUSPEND 命令


编译（程序菜单）

请参阅

打开“编译”对话框，从中可以编译程序、菜单或查询文件。

编译对话框选项

文件名

指定待编译的文件。若要进行编译，则需从列表中选定文件名并选择“编译”，或双击文件名。

所显示文件是当前目录下与“文件类型”框中所指定文件类型相匹配的那些文件。

目录

列出可用的目录，如果文件不在当前目录下，则选择文件所在的目录。

驱动器

列出可用的驱动器。如果文件不在当前驱动器上，则选择该文件所在的驱动器。

文件类型

列出可用的文件类型。默认值为程序(.RPG)，如果已经为程序、表单、菜单或查询指定了不同于 Visual FoxPro 默认值的扩展名，则可通过选择“所有文件”来查阅这些文件。

编译

编译选定的文件。

全部选定

选择“文件名”框中的所有文件名进行编译。

不选定

取消“文件名”框中的所有选定的文件名。

其它

扩展“编译”对话框，从而可以指定其它选项。

选项

加密编译过的文件

给所编译文件加密以确保其安全性。

包含调试信息

指定编译文件是否包含调试信息。如果未选定该选项，则用户不能在跟踪窗口中显示程序的执行。此选项与 COMPILE 命令 中的 NODEBUG 参数相关。

只编译更新过的文件

对于所选定的文件，只编译那些新文件或从最后一次被编译后已被更新的文件。

出错定位

.ERR 文件

在与所选文件同名的独立文件中存储错误信息。.ERR 文件和源文件存储于同一目录下。如果未选定该复选框，则全部所选文件的错误信息被存储于用户在“文件”框中指定的一个日志文件中。

追加

将每一个所选文件的错误信息添加到已有的日志文件中。如果用户未选中“ .ERR 文件复选框” ，则此复选框可用。

文件

在一个日志文件中存储全部选定文件的错误信息。在该框中键入日志文件名，或选择三点按钮来查找和指定一个已有的日志文件。如果用户未选中“ .ERR 文件”复选框，则此文本框可用。

编译过的文件位置

目录

指定已编译的输出文件的存储路径。在该框中键入路径，或选择三点按钮来查找和指定一个目录及文件名。


请参阅

COMPILE 命令

跟踪窗口


项目菜单

请参阅

“项目”菜单包含创建和修改项目的菜单项。

项目菜单命令

新文件

创建新文件，文件的类型取决于“项目管理器”中选择的文件类型。当在“项目管理器”中选择一个文件时此命令可用。

添加文件

向项目中添加已有的文件，要启用“添加文件”命令，必须在“项目管理器”中选择要添加的文件类型。

移去文件

从项目中移去所选定的文件或者移去并从硬盘上删除该文件。

修改文件

打开设计器或编辑窗口，从而修改文件。

打开文件

打开一个数据库。

关闭文件

关闭一个数据库。

浏览文件

在浏览窗口中显示所选定的表，查看和编辑其内容。

预览文件

用打印预览方式显示所选定的报表或标签．在“项目管理器”中选定报表或标签时此命令可用。

运行文件

运行选定的查询、表单或程序，在“项目管理器”中选定查询、表单或程序时此命令可用。

重命名文件

重命名所选定的文件，在“项目管理器”中选定一个文件时此命令可用。

包含

在一个项目中包含以前排除在外的文件。

排除

在一个项目中排除以前包含在内的文件。

设置主程序

把所选定的程序或表单指定为系统主程序，该程序在编译后的应用程序中执行．必须在“项目管理器”中选择一个程序、表单或菜单，此命令才可用。

编辑说明

显示“说明”对话框．可在框中修改文本，该文本作为文件说明出现在“项目管理器”窗口的底部。

项目信息

显示“项目信息”对话框，从中可以查看和编辑有关项目及其文件的信息。

错误

在编辑窗口中显示选定应用程序的错误日志。

连编

显示“连编选项”对话框，从而可以创建自定义应用程序并更新已有的项目。

清理项目

通过运行 PACK 命令删除带有删除标记的文件来减小项目(.PJX)文件的大小。


请参阅

浏览窗口

打印预览（文件菜单）


新文件（项目菜单）

请参阅

根据“项目管理器”中当前所选定的文件类型，创建新的表单、报表、标签或查询。

如果在选项对话框的项目选项卡中选定“向导提示”，则在选定文件类型有相关向导的情况下，Visual FoxPro 提供运行向导的选项。

附注

在连编项目时，排除文件名前含有带斜杠圆圈标记的文件；如果文件名旁没有带斜杠的圆圈标记，则在连编时包含该文件。主程序文件名前带有实心黑点标记。

要使“新文件”命令可用，必须在“项目管理器”中选择一种文件类型．“新文件”命令和“项目管理器”中的“新建”按钮作用相同。

新<文件>对话框

〈文件类型〉向导

可以打开向导，创建选定文件类型的文件．如果有一组向导来可供选择，Visual FoxPro 将提示您选择所要的向导。只有选定选项对话框中项目选项卡的“向导提示”选项时，才显示向导。

新〈文件类型〉

显示对话框、设计器或编辑窗口，创建选定文件类型的文件。


请参阅

排除（项目菜单）

包含（项目菜单）

新建（文件菜单）

选项（工具菜单）

项目管理器

项目选项卡 (项目信息对话框)

设置主程序（项目菜单）

使用向导


添加文件（项目菜单）

请参阅

显示打开对话框，从中可以向项目中添加已有的文件，该命令和项目管理器中“添加”按钮作用相同。

要使“添加文件”命令可用，必须选择要添加到“项目管理器”中的文件类型，“打开”对话框中所显示的文件扩展名和各文件反映了您所做的选择。例如，如果选择“项目管理器”中的“自由表”或某个特定的自由表，“打开”对话框显示“表/DBF”文件类型，同时在“文件名”框中显示 *.DBF，并列出当前目录下所有扩展名为 .DBF 的文件。

“添加文件”命令和“项目管理器”中的“添加”按钮作用相同。

附注

在连编项目时，文件名前有带斜杠圆圈标记的文件被排除在外，如果文件前面没有带斜杠的圆圈标记，则连编中包括此文件。主程序文件名前带有实心黑点标记。


请参阅

打开（文件菜单）

项目管理器


修改文件（项目菜单）

请参阅

打开设计器或编辑窗口，从而修改文件。

在“项目管理器”中选定一个数据库、自由表、查询、表单、报表、标签、类库、程序、菜单或文本文件时，此命令可用。“修改文件”命令和“项目管理器”中的“修改”按钮作用相同。


请参阅

项目管理器


打开文件（项目菜单）

请参阅

打开数据库，当打开项目管理器并选择了一个数据库时，此命令出现。打开数据库之后，此命令改为关闭文件。


请参阅

关闭文件（项目菜单）

项目管理器


关闭文件（项目菜单）

请参阅

关闭数据库，当打开项目管理器并选择了当前已经打开的数据库时，出现此命令。如果已经关闭了数据库，此命令改为打开文件。


请参阅

打开文件（项目菜单）

项目管理器


浏览文件（项目菜单）

请参阅

在浏览窗口中显示所选定的表，查看和编辑其内容。


请参阅

浏览窗口


预览文件（项目菜单）

请参阅

在打印预览中显示所选定的报表，当您在“项目管理器”中选定一个报表时此命令可用。


请参阅

打印预览（文件菜单）

打印预览工具栏


移去文件（项目菜单）

请参阅

从项目中移去所选定的文件，或把该文件从项目中移去并从硬盘上删除。

在“项目管理器”中选择了一个文件时此命令可用。当选择了“移去文件”命令时，Visual FoxPro 提示是移去还是删除所选定的文件。“移去”指的是从项目中而不是从硬盘上删除所选定的文件，“删除”既从项目中又从硬盘上删除所选定的文件。

“移去文件”命令和“项目管理器”中的“移去”按钮作用相同。


请参阅

添加文件（项目菜单）

项目管理器


运行文件（项目菜单）

请参阅

运行所选定的查询、表单、菜单或程序。

在“项目管理器”中选定一个查询、表单、菜单或程序时此命令可用，其作用和“项目管理器”中的“运行”按钮相同。


请参阅

项目管理器


重命名文件（项目菜单）

请参阅

重命名所选定的文件。

在“项目管理器”中选定一个文件时此命令可用。

重命名文件对话框选项

若要

显示所选定文件的当前文件名，在框中键入新的名称可以更改此文件名。

重命名

用新的文件名重命名文件。


请参阅

项目管理器


包含（项目菜单）

请参阅

在一个项目中包含以前排除在外的文件。只有在选择了已排除的文件时此命令才可用。

所有编译进 .APP 文件中的文件将变成只读文件，若要在运行时写一个文件，应给该文件加上排除标记。


请参阅

排除（项目菜单）

项目管理器


排除（项目菜单）

请参阅

在项目中排除以前包含在内的文件。在“项目管理器”中选择了一个已经包含在内的文件时，此命令可用。

已排除文件出现在“项目管理器”中时，其文件名前有带斜杠的圆圈标记。索引、报表和标签等不可执行文件以只读形式自动包含在项目中。如果使用户能够修改这些文件，必须从项目中排除这些文件。

附注

已排除的文件在“项目管理器”窗口中列出，以供参考．如果应用程序需要这些文件，必须人工加入发布的程序中。


请参阅

包含（项目菜单）

项目管理器


设置主程序（项目菜单）

请参阅

把选定的程序、菜单、查询或表单指定为系统主程序，该主程序在已编译的应用程序中作为主执行程序执行。只有在“项目管理器”中选择一个程序、表单或菜单时，此命令才可用。

主程序在“项目管理器”中出现时，其文件名前带有实心黑点。


请参阅

项目管理器


编辑说明（项目菜单）

请参阅

显示说明对话框，在此框中输入的文本将作为文件说明显现在“项目管理器”窗口下部。


请参阅

说明对话框

项目管理器


说明对话框

提供可以键入程序文件简短说明的文本框，当选择“项目管理器”中的程序文件时，或选择“项目”菜单中“编辑说明”命令时，显示此对话框。


项目信息（项目菜单）

请参阅

显示“项目信息”对话框，在框中可以查看和编辑有关项目及其文件的信息。有关此对话框的详细内容，请参阅文件选项卡和项目选项卡。

快捷楗

CTRL + J

项目信息对话框

各选项分别放在以下选项卡中：

选项卡	说明
项目选项卡	显示有关项目的状态信息。
文件选项卡	显示所有项目文件以及文件的类型，包含或排除的状态，最近修改的日期与时间和代码页信息。


请参阅

文件选项卡 (项目信息对话框)

项目管理器

项目选项卡 (项目信息对话框)


项目选项卡,项目信息对话框
项目选项卡，项目信息对话框

请参阅

显示有关项目的状态信息。

选项卡选项

作者

显示作者姓名．可以在框中键入姓名，进行更改。

单位

显示单位名称．可以在框中键入单位名称，进行更改。

地址、城市、省份、国家/地区、邮政编码

显示单位地址信息，可以在框中键入有关信息，进行更改。

所在目录

显示项目文件所在的目录．要更改此目录，可在框中键入另一个目录名，或者单击三点按钮，显示选择目录对话框。

最近连编时间

显示项目最近连编的日期和时间（不可编辑）。

文件数目

显示项目包含的文件数目（不可编辑）。

调试信息

指定已编译文件是否包含调试信息。如果没有选定此选项，则不能在跟踪窗口中查看程序执行的情况，此选项对应于COMPILE 命令中的 NODEBUG 参数。

加密

指定是否为了安全性对已编译的文件加密．

.EXE 文件中附加图标

指定在运行应用程序时是否显示所选定的图标。

图标

显示打开对话框，从中可以选择图标。该按钮仅在选定“.EXE 文件中附加图标”选项时才启用。


请参阅

COMPILE 命令

文件选项卡 (项目信息对话框)

打开（文件菜单）

项目管理器

选择目录对话框

跟踪窗口


选择目录对话框

请参阅

帮助您设置项目所在的目录。当您在项目信息对话框的项目选项卡中选择“所在目录”选项旁边的三点按钮时，此对话框出现。

对话框选项

目录

显示目录树，可以单击要设置为项目所在目录的目录。

驱动器

供您选择驱动器，以在其中选取目录。

选定

使所选定的驱动器/目录结合为项目所在目录，然后该目录显示在“项目信息”对话框“项目”选项卡中的“所在目录”框内。


请参阅

项目信息对话框

项目管理器

项目选项卡，项目信息对话框


文件选项卡,项目信息对话框
文件选项卡，项目信息对话框

请参阅

按字母顺序排列，显示所有项目文件的列表，以及文件类型，包含/排除的状态，最近修改的日期和时间，还有代码页信息等等。

选项卡选项

类型

显示代表文件类型的图标。

文件名

显示文件名。

最近一次修改

显示最近一次的文件修改日期和时间。

包含

如果选择该框，则包含文件；如果清除该框，则排除文件。有关在项目中包含和排除文件的详细内容，请参阅排除命令（项目菜单）和包含命令（项目菜单）。

代码页

显示代码页编号，有关代码页的详细内容，请参阅确定项目文件的代码页。


请参阅

确定项目文件的代码页

排除（项目菜单）

包含（项目菜单）

项目管理器

项目选项卡 (项目信息对话框)


错误（项目菜单）

请参阅

在一个编辑窗口中显示选定应用程序的错误日志。


请参阅

常规选项卡，选项（工具菜单）

项目管理器


连编（项目菜单）

请参阅

显示“连编选项”对话框，从而可以创建自定义应用程序或者更新已有的项目。

连编对话框选项

选项

重新连编项目

创建和连编项目文件，该选项对应于 BUILD PROJECT 命令。

连编应用程序

连编项目，编译过时的文件，并创建单个 .APP 文件。该选项对应于 BUILD APP 命令。

连编可执行程序

由一个项目创建可执行文件，该选项对应于 BUILD EXE 命令，且只能在 Visual FoxPro 专业版中可用。

重新编译所有文件

重新编译项目中的所有文件，并对每个源文件创建其对象文件。

显示错误信息

连编完成后，在一个编辑窗口中显示编译时的错误。


请参阅

BUILD APP 命令

BUILD EXE 命令

BUILD PROJECT 命令

编辑窗口

项目管理器


清理项目（项目菜单）

请参阅

运行 PACK 命令，永久性删除带有删除标记的文件，从而减少项目(.PJX)文件的大小。

提示

当使用“移去文件”命令从项目中移去一个文件时，相关记录仍保留在项目的 .PJX 文件中，但已做了删除标记。如果已移去了几个文件，选择“清理项目”命令，可以移去带有删除标记的记录。


请参阅

PACK 命令

项目管理器

移去文件（项目菜单）


查询菜单

查询菜单包含创建、修改和运行查询的命令。

查询菜单命令

添加表

显示“添加表或视图”的对话框，从而可以向设计器窗口中添加表或视图。

移去表

从设计器窗口的上窗格中移去所选定的表。

删除联接条件

删除所选定的表之间的联接线。

选定条件

使“选定条件”选项卡位于查询设计器或视图设计器窗口的最上面。

输出字段

使“字段”选项卡位于查询设计器或视图设计器窗口的最上面。

排序条件

使“排序依据”选项卡位于查询设计器或视图设计器窗口的最上面。

分组条件

使“分组依据”选项卡位于查询设计器或视图设计器窗口的最上面。

更新条件

使“更新条件”选项卡位于查询设计器或视图设计器窗口的最上面。

查询去向

显示“查询去向”对话框，该对话框允许把查询结果发送到八个不同的输出目的地。

查看 SQL

显示建立当前查询的 SQL 语句。

高级选项

显示“高级选项”对话框，从中可以仔细调节如何检索记录到一个视图中以及如何更新服务器或源表。

视图参数

建立参数化视图，使用时提示用户输入参数值完成查询。

注释

显示附注或注释。附注或注释可用来区分查询或视图并说明它们的用途。

运行查询

执行所建立的 SQL select 语句，并向所选定的输出目的地发送结果。


添加表（查询菜单）

请参阅

显示添加表或视图对话框，从而可以向设计器窗口添加表或视图。

添加表或视图对话框选项

数据库

默认情况下，显示当前数据库，但允许选择其他数据库。

数据库中的表/视图

根据选择“表”还是“视图”选项，显示当前数据库中的表或视图。

表

在“数据库中的表”框中显示当前数据库中的表。

视图

在“数据库中的视图”框中显示当前数据库中的视图。

其他

显示“打开”对话框，从中可以选择自由表，并添加到查询中。


请参阅

添加表或视图对话框

联接条件对话框

移去表（查询菜单）


联接条件对话框

请参阅

指定表之间的联接条件．在向查询或视图中添加多个表时此对话框出现。

对话框选项

列表框

显示表中的字段。可从列表框中选择用来联接表的字段。

条件

非

对所选定的比较类型取反。

比较类型

Equal（相等）

指定字段与示例匹配，有关在指定“Equal”选项时如何执行比较的详细内容，请参阅 SET ANSI 。

Like（类似）

指定字段与能够包含通配符的类型匹配。

Exactly Like（准确匹配）

指定字段必须逐个字符都匹配。

More Than（大于）

确定一个字段值是否大于另一个字段值。

Less Than（小于）

确定一个字段值是否小于另一个字段值。

忽略大/小写

指定忽略字段数据的大小写。


请参阅

添加表（查询菜单）

移去联接条件（查询菜单）

SELECT - SQL 命令

SET ANSI 命令


移去表（查询菜单）

请参阅

从设计器窗口的上窗格中移去所选定的表，在查询和视图设计器中有多个表时，此命令可用。


请参阅

添加表（查询菜单）

查询设计器


移去联接条件（查询菜单）

请参阅

移去选定的表之间的联接线．在选择了表之间的联接线时此命令可用。


请参阅

添加表（查询菜单）

联接条件对话框


选定条件（查询菜单）

请参阅

使“选定条件”选项卡位于查询设计器或视图设计器窗口的最上面，用于指定要显示在查询结果中的记录。

有关“选定条件”选项卡中各选项的说明，请参阅查询和视图设计器主题。


请参阅

查询和视图设计器


输出字段（查询菜单）

请参阅

使“字段”选项卡位于查询设计器或视图设计器窗口的最上面，用于指定显示在查询结果中的字段。

有关“字段”选项卡各选项的说明，请参阅查询和视图设计器主题。


请参阅

查询和视图设计器


排序依据（查询菜单）

请参阅

使“排序依据”选项卡位于查询设计器或视图设计器窗口的最上面，用于指定查询中对记录进行排序所用的字段。


请参阅

查询和视图设计器


分组依据（查询菜单）

请参阅

使“分组依据”选项卡位于查询设计器或视图设计器窗口的最上面，用于指定对查询结果中的记录进行分组的条件。

有关“分组依据”选项卡中各选项的说明，请参阅查询和视图设计器主题。


请参阅

查询和视图设计器


更新条件（查询菜单）

请参阅

使“更新条件”选项卡位于视图设计器窗口的最上面。此命令仅用于视图。

有关“更新条件”选项卡中各选项的说明，请参阅查询和视图设计器主题。


请参阅

视图设计器


查询去向（查询菜单）

请参阅

显示“查询去向”对话框，此对话框允许向不同输出地点发送查询结果，此命令只用于视图。

查询去向对话框选项

下表列出并说明了输出类型：

查询去向选项	说明
浏览	在“浏览”窗口中显示查询结果。
临时表	将查询结果保存于临时表中。
表	将查询结果作为表文件保存起来。
图形	使查询结果可用于 Microsoft Graph ，图形 是包含在 Visual FoxPro for Windows 中的一个独立的 OLE 应用程序。
屏幕	在活动输出窗口中显示查询结果。
报表	向报表文件发送查询结果。
标签	向标签文件发送查询结果。


请参阅

添加查询

浏览（查询去向对话框）

临时表（查询去向对话框）

在窗口中显示结果

图形（查询去向对话框）

图形向导

标签（查询去向对话框）

使用表单控制

查询和视图设计器

报表（查询去向对话框）

屏幕（查询去向对话框）

表（查询去向对话框）


浏览按钮,查询去向对话框
浏览按钮，查询去向对话框

请参阅

在浏览窗口中显示查询结果，以进行检查和编辑


请参阅

浏览窗口


临时表按钮,查询去向对话框
临时表按钮，查询去向对话框

以指定的名称把查询结果存贮于临时表中。此临时表只读，并在“查看”窗口中出现。临时表可用于浏览，生成报表或其他目的。此命令仅用于查询。

按钮选项

临时表名

指定临时表的名称。


表按钮,查询去向对话框
表按钮，查询去向对话框

把查询结果以指定名称的表(.DBF) 文件形式保存起来。此命令仅用于查询。

表按钮选项

表名

指定表名，可在文本框中直接键入表名，也可用三点按钮选择一个现有的文件，并将其改写。


图形按钮,查询去向对话框
图形按钮，查询去向对话框

请参阅

使查询结果可用于 Microsoft Graph。此命令仅用于查询，且在设置_GENGRAPH 源之后才可用。

单击“图形”按钮，并选择“确定”使图形向导启动。


请参阅

_GENGRAPH 系统内存变量

创建图形

图形向导


屏幕按钮,查询去向对话框
屏幕按钮，查询去向对话框

在活动输出窗口中显示查询结果。此命令仅用于查询。

按钮选项

二级输出

无

指定不向打印机发送输出或把输出作为文本文件保存。

到打印机

将查询结果发送到打印机及屏幕上。

到文本文件

将查询结果作为文本文件保存起来。单击此按钮，选择一个已有的文件，对其改写，或者在文本框中键入一个新的文件名称。

选项

不输出列标头

使标头不出现在查询结果的上面。

屏幕之间暂停

在每个屏幕结束时暂停，并显示继续下一个屏幕的提示，可以在提示中按 ESCAPE 来取消查询。


报表按钮,查询去向对话框
报表按钮，查询去向对话框

请参阅

按某一报表布局显示查询结果。使用此选项必须先设置报表文件 (.FRX) 来容纳查询中的输出字段。此命令仅用于查询。

按钮选项

打开报表

显示“打开”对话框，以选择报表文件供查询输出使用，可以单击此按钮或在文本框中直接键入文件名。

向导图标

显示向导选择对话框，从中可以选择要运行的报表向导。

页面预览

在“页面预览”窗口中显示输出结果。

活动控制台

在活动输出窗口中显示输出结果。

打印报表前先输出一空白页

在报表开始之前打印一空白页，以在打印机上隔开文档。

二级输出

无

指定不向打印机发送输出或把输出作为文本文件保存。

到打印机

将查询结果发送到打印机。

到文本文件

将查询结果作为文本文件保存。单击此按钮，选择一个已有的文件，对其改写，或者在文本框中键入新文件的名称。

选项

不输出列标头

使列标头不在输出结果的上面出现。

仅输出总结信息

不打印细节信息。所生成的报表包括标头、注脚、总计信息等等，但不包括细节信息。

报表标头

在输出结果中添加标头，可以单击此按钮，显示表达式生成器对话框，创建一个表达式，或者直接在文本框中键入表达式。

“报表标头”选项允许在运行时定制输出结果，但不更改报表文件。


请参阅

表达式生成器

预览结果

将报表打印到文件中

REPORT 命令

向导选择对话框


标签按钮,查询去向对话框
标签按钮，查询去向对话框

请参阅

在已有的标签文件中显示查询结果，使用此选项必须先设置标签文件 (.LBX) 来容纳查询中的输出字段。此命令仅用于查询。

按钮选项

打开标签

显示“打开”对话框，以选择标签文件供查询输出使用。可以单击此按钮或在文本框中直接键入文件名。

页面预览

在“页面预览”窗口中显示输出结果。

活动控制台

在活动输出窗口中显示输出结果。

二级输出

无

指定不向打印机发送输出或者把输出作为文本文件保存。

到打印机

把查询结果发送到打印机。

到文本文件

把查询结果作为文本文本保存起来。单击此按钮，选择一个已有的文件，并将其改写，或者在文本框中直接键入新文件的名称。


请参阅

预览结果

将报表打印到文件中


查看 SQL（查询菜单）

请参阅

显示建立当前查询或视图的 SQL 语句。


请参阅

查询和视图设计器


高级选项（查询菜单）

请参阅

显示“高级选项”对话框，从中可以精细地调节如何将记录检索到视图中，或如何更新服务器与源表。此命令仅用于视图。

高级选项对话框

共享连接

指定 Visual FoxPro 对所创建的新视图使用原有的连接。此选项只适用于远程 (ODBC) 数据。如果当前已经有连接，则可以设置此选项，使新视图“使用当前连接”。

取数据

每次取的记录数

控制从 ODBC 服务器或远程数据源一次返回的记录数。例如，如果运行返回 1000 个记录的查询而此选项设置为 100，则在运行视图时，只有前面的 100 个记录显示出来。需要继续浏览查询结果时，按每 100 个记录一个数据块分块取入其他记录。

要取的最大记录数

限定从视图中总共返回的记录个数。

长度 >= 右值时使用备注字段

确定在视图输出中何时将长的字符字段转换为备注字段。

成批更新的记录数

指定单条命令所更新的记录数，有关详细内容，请参阅 REPLACE 命令和 Scope 子句。

取备注字段

仅当备注字段在视图的输出中被激活时，才从数据源中取备注字段。


请参阅

查询和视图设计器

REPLACE 命令

作用域子句


视图参数（查询菜单）

请参阅

建立参数化视图，这种视图在使用时提示用户输入参数值以完成视图的建立工作。在有数据库打开的情况下建立视图时此命令可用，且仅用于视图。

视图参数对话框选项

参数名

指定参数名。

类型

指定参数的数据类型。

插入

插入一空行。

删除

删除所选定的行。


请参阅

查询和视图设计器


注释（查询菜单）

请参阅

显示附注或注释，附注或注释可用来区分查询或视图并说明它们的用途。


请参阅

查询和视图设计器


运行查询（查询菜单）

请参阅

执行已建立的 SQL select 语句，并向指定的输出去向发送结果。

快捷楗

Ctrl + Q


请参阅

查询和视图设计器

查询去向对话框


报表菜单

请参阅

报表菜单包含用于创建和修改报表的命令。

报表菜单命令

标题/总结

显示“标题/总结”对话框，从中可以指定是否将标题和（或）总结带区包括在报表中。

数据分组

显示“数据分组”对话框，从中可以创建数据组并指定其属性。

变量

在报表中创建内存变量。

默认字体

指定报表、标签和字段控制的默认字体、字形及字体大小。

私有数据工作期

为报表设置一个数据工作期，如果在其他设计器中打开并使用表，该工作期不会更改。

快速报表

自动将选定字段放入一个空的报表设计器窗口中。

运行报表

显示“打印”对话框，以便把报表发送到打印机。


请参阅

创建报表布局

用报表向导创建报表

使用新建报表创建报表

报表设计器


标题/总结对话框（报表菜单）

请参阅

显示“标题/总结”对话框，从中可以指定是否将标题和（或）总结带区包括在报表中。

标题/总结对话框选项

报表标题

标题带区

标题带区包含位于报表开头且只打印一次的信息。

换页

打印完标题带区后走一页纸。只有在选择“标题带区”后才能选择此项。

报表总结

总结带区

总结带区包含位于报表末尾且只打印一次的信息。

换页

打印总结带区之前走一页纸。只有在选择“总结带区”后才能选择此项。


请参阅

添加标题和总结带区

修改带区

规划数据的位置

报表设计器


数据分组（报表菜单）

请参阅

显示“数据分组”对话框，从中可以对记录分组，可视化地创建组带区，并可显示每组的介绍性数据和总结数据。这里的属性设置包括打印标头和注脚文本来区别各组，在新的一页上打印每一组，当某组在一新页上开始打印时，重置页号。

数据分组对话框选项

分组表达式

显示当前报表的分组表达式，如字段名，并允许输入新的字段名。如果想创建一个新的表达式，可选择三点按钮，显示表达式生成器对话框。

组属性

此属性用以指定如何分页。

每组从新的一列上开始

当组改变时，从新的一列上开始。

每组从新的一页上开始

当组改变时，从新的一页上开始。

每组的页号重新从 1 开始

当组改变时，组在一新页上开始打印，并重置页号。

每页都打印组标头

当组分布在多页上时，指定在所有页的页标头之后打印组标头。

小于右值时组从新的一页上开始

设置要打印组标头时，组标头距页底的最小距离。

插入

在“分组表达式”框中插入一个空文本框，以便定义新的分组表达式。

删除

从“分组表达式”框中删除选定的分组表达式。


请参阅

添加单个组

添加多个数据组

更改组带区

更改分组次序

删除组带区

表达式生成器

在布局上分组数据

修改带区

规划数据的位置

防止分离的组标头

当组更改时打印不输出值

重复组标头

变量（报表菜单）


变量（报表菜单）

请参阅

显示“报表变量”对话框，从中可以创建报表中的内存变量。Visual FoxPro 使用内存变量来保存打印报表时所做计算的结果。使用此命令可以添加新的变量，改变或删除已有变量，或者更改变量的计算顺序。

报表变量对话框选项

变量

显示当前报表中的变量，并为新变量提供输入位置。

要存入的值

显示存储在当前变量中的表达式，也可以在文本框中输入表达式。要创建一个存入变量的表达式，可选择三点按钮，显示表达式生成器。

初始值

在进行任何计算之前，显示选定变量的值以及此变量的重置值。您可以直接在文本框中输入一个值，或者选择三点按钮，显示表达式生成器对话框，为初始值创建表达式。

报表输出后释放

在报表打印后从内存中释放变量。如果未选定此选项，那么除非退出Visual FoxPro 或使用 CLEAR ALL 或 CLEAR MEMORY 命令来释放变量，否则此变量一直保留在内存中。

重置

指定变量重置为初始值的位置。报表尾是其默认值，也可选择页尾或列尾。如果使用数据分组命令在报表中创建组，“重置”框将为报表中的每一组显示一个重置项。

插入

在“变量”框中插入一个空文本框，以便定义新的变量。

删除

在“变量”框中删除选定的变量。

计算

此功能容许您指定变量执行的计算操作。变量使用其初始值开始计算。计算持续间进行，直到变量被再次重置为初始值为止。

不计算

指定不计算此变量。

计数

计算每组、每页、每列或每个报表（取决于您在“重置”框中的选择）中打印变量的次数。此计算操作基于变量出现的次数，而不是变量的值。

求和

计算变量值的总和。求和操作在运行时对每组、每页、每列或每个报表（取决于您在“重置”框中的选择）进行变量值的求和计算。

平均值

在组、页、列或报表（取决于您在“重置”框中的选择）中计算变量的算术平均值。

最小值

在组、页、列或报表（取决于您在“重置”框中的选择）中显示变量的最小值。将组中第一个记录的值放入变量，当更小的值出现时，此变量的值随之改变。

最大值

在组、页、列或报表（取决于您在“重置”框中的选择）中显示变量的最大值。将组中第一个记录的值放入变量，当更大的值出现时，此变量的值随之改变。

标准偏差

返回组、页、列或报表（取决于您在“重置”框中的选择）中变量方差的平方根。

方差

衡量组、页、列或报表（取决于您在“重置”框中的选择）中各个字段值与平均值的偏离程度。


请参阅

CLEAR 命令

数据分组（报表菜单）

表达式生成器


默认字体（报表菜单）

请参阅

显示“字体”对话框，从中可以指定报表和标签文件中字段控制和标签的默认字体、字形、字体大小。此设置与报表一同保存，当修改报表时，默认值并不更改。

您的选择将在此报表中一直使用，除非使用此对话框改变设置值。


请参阅

更改字体

报表设计器


私有数据工作期（报表菜单）

请参阅

为报表设置一个数据工作期，当在其他设计器中打开并使用表时，不会对其产生影响。单击鼠标可打开或关闭此命令。


请参阅

控制报表的数据源

DataSession 属性


快速报表（报表菜单）

请参阅

自动将选定字段放入一个空的报表设计器窗口中。此命令会提示您选择一个表，然后显示“快速报表”对话框，供您选择字段和字段布局。

也可使用 Visual FoxPro 向导来创建一个报表。这些向导包括分组/总计报表向导，一对多报表向导，和报表向导。

快速报表对话框选项

字段布局

在左侧显示列布局，在右侧显示行布局。选择列布局可使字段在页面上从左到右排列。选择行布局可使字段在页面上从上到下排列。

标题

确定是否将字段名作为标签控制的标题置于相应字段的上面或旁面。

添加别名

自动在“报表设计器”窗口中为所有字段添加别名。

将表添加到数据环境中

自动将表添加到数据环境中。

字段

显示字段选择器对话框，可在此对话框中选择要在报表中显示的字段。


请参阅

创建快速报表

字段选择器

分组/总计报表向导

一对多报表向导

报表设计器

报表向导


运行报表（报表菜单）

请参阅

显示打印对话框来运行报表。运行报表不会改变表、索引或备注文件的内容。

快捷方式


请参阅

打印 (文件菜单)

控制报表和标签的输出

控制打印记录的选定

打印一定数量或范围的记录

打印匹配某一条件的记录

打印报表

选择要打印的记录


报表表达式对话框

请参阅

定义报表中字段控制的内容。当把一个字段控制置于报表或标签上时，此对话框出现。

对话框选项

表达式

显示当前选定的表达式（例如一个表字段或内存变量），或者输入一个新字段或变量。如果想要创建一个表达式，或在继续下一步之前对表达式加以确认，可选择三点按钮来显示表达式生成器对话框。

格式

在“表达式”框中显示了一个有效的表达式之后，可在此文本框中指定格式。如果想要对报表中的字段指定格式，可选择三点按钮，显示格式 (字段)对话框。

计算

显示分类汇总或计算字段 对话框，以便选择一个表达式来创建一个计算字段。

打印条件

显示打印条件对话框以便精确设置何时在报表或标签中打印文本。

对象位置

浮动

指定选定字段相对于周围字段的大小移动。

相对于带区顶端固定

使字段在报表或标签设计器中保持您指定的位置，并维持其相对于带区顶端的位置。

相对于带区底端固定

使字段在报表或标签设计器中保持您指定的位置，并维持其相对于带区底端的位置。

溢出时伸展

使字段向下扩展以便显示全部数据。

注释

向 .FRX 或 .LBX 文件中添加注释。注释仅用于参考，并不出现在打印的报表或标签中。


请参阅

添加字段控制

定义字段控制格式

定义字段格式模板

表达式生成器

格式 (字段)对话框

插入页码

插入连接的字段控制

插入当前日期

打印条件对话框

报表设计器

分类汇总或计算字段对话框

裁剪和连接字符表达式


格式 (字段)对话框
格式（字段）对话框

请参阅

在一个字段控制中指定表达式的值。当报表表达式对话框中的表达式框中包含有效的表达式时，选择三点按钮，此对话框出现。

对话框选项

格式

使您能输入格式表达式或输入格式模板而不对下面的选项进行设置。

字符型

指定字符数据类型，并显示相应的“编辑选项”。

数值型

指定数值数据类型，并显示相应的“编辑选项”。

日期型

指定日期数据类型，并显示相应的“编辑选项”。

编辑选项

此选项组随数据类型（字符、数值、日期）的改变而改变。通过选择这些选项可将格式代码置于格式框中。

全部大写（字符型）

将所有字符转化为大写。

忽略输入掩码

显示但不存储不符合格式的字符。

左对齐（数值型）

从选定字段位置的最左端开始显示数值。

右对齐（字符型）

从选定字段位置的最右端开始显示数据。

居中对齐（字符型）

将数据放在字段中央。

如果为零保持为空（数值型）

如果字段输出为零，则不打印。

负数加括号（数值型）

将负数放入括号中。

使用 SET DATE 日期格式（所有类型）

使用 SET DATE 当前格式显示日期数据。

英国日期格式（所有类型）

使用欧洲（英国）日期格式显示数据。

如果为正，加 CR（数值型）

在正数后显示 CR（贷方）。

如果为负，加 DB（数值型）

在负数后显示 DB（借方）。

前导零（数值型）

打印全部的前导零。

货币格式（数值型）

按照国际选项卡，选项命令（工具菜单）中指定的格式显示货币数据。

科学计数法（数值型）

以科学计数法显示数据（当数值很大或很小时使用）。


请参阅

定义字段控制格式

定义字段格式模板

国际选项卡，选项命令（工具菜单）

报表表达式对话框

报表设计器


分类汇总或计算字段对话框

请参阅

允许选择一种数学运算来创建一个计算结果字段。当在报表表达式对话框中选择“计算”时，显示此对话框。

对话框选项

重置

允许指定把表达式重置为初始值的位置。默认值是报表尾，也可选择页尾或列尾。如果使用数据分组命令在报表中创建组，“重置”框为报表中的每一组显示一个重置项。

分类汇总或计算字段

不计算

指定不计算此表达式。

计数

计算每组、每页、每列或每个报表（取决于您在“重置”框中的选择）中打印变量的次数。此计算操作基于变量出现的次数，而不是变量的值。

求和

计算变量值的总和。求和操作在运行时对每组、每页、每列或每个报表（取决于您在“重置”框中的选择）进行变量值的求和计算。

平均值

在组、页、列或报表（取决于您在“重置”框中的选择）中计算变量的算术平均值。

最小值

在组、页、列或报表（取决于您在“重置”框中的选择）中显示变量的最小值。将组中第一个记录的值放入变量，当更小的值出现时，此变量的值随之更改。

最大值

在组、页、列或报表（取决于您在“重置”框中的选择）中显示变量的最大值。将组中第一个记录的值放入变量，当更大的值出现时，此变量的值随之更改。

标准偏差

返回组、页、列或报表（取决于您在“重置”框中的选择）中变量的方差的平方根。

方差

衡量组、页、列或报表（取决于您在“重置”框中的选择）中各个字段值与平均值的偏离程度。


请参阅

数据分组（报表菜单）

报表设计器

报表表达式对话框


报表设计器带区对话框

请参阅

选择下列主题，了解关于此对话框的帮助信息。

列注脚对话框

列标头对话框

细节对话框

组注脚对话框

组标头对话框

页注脚对话框

页标头对话框

总结对话框

标题对话框


请参阅

列注脚对话框

列标头对话框

细节对话框

组注脚对话框

组标头对话框

页注脚对话框

页标头对话框

总结对话框

标题对话框


列注脚对话框

请参阅

在一个标签或多列报表中设置“列注脚”带区的高度和其他选项。当在报表设计器中双击“列注脚”带区分隔条时，显示此对话框。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定打印列注脚的内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定打印完列注脚的内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


列标头对话框

请参阅

在一个标签或多列报表中设置“列标头”带区的高度和其他选项。当您在报表设计器中双击“列标头”带区分隔条时，显示此对话框。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印列标头的内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印列标头的内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


细节对话框

请参阅

在一个标签或多列报表中设置“细节”带区的高度和其他选项。当您在报表设计器中双击“细节”带区分隔条时，此对话框显示。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印细节的内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印细节的内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


组注脚对话框

请参阅

在一个标签或多列报表中设置“组注脚”带区的高度和其他选项。当您在报表设计器中双击“组注脚”带区分隔条时，显示此对话框。要创建“组注脚”带区，从“报表”菜单中选择数据分组，然后创建一个分组表达式，并选择“确定”。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印组注脚内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印组注脚内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

数据分组（报表菜单）

在页面上定义多列

表达式生成器

组标头对话框

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


组标头对话框

请参阅

在一个标签或多列报表中设置“组标头”带区的高度和其他选项。当您在报表设计器中双击“组标头”带区分隔条时，显示此对话框。要创建“组标头”带区，从“报表”菜单中选择数据分组，然后创建一个分组表达式，并选择“确定”。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印组标头内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印组标头内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

数据分组（报表菜单）

在页面上定义多列

表达式生成器

组注脚对话框

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


页注脚对话框

请参阅

在一个标签或多列报表中设置“页注脚”带区的高度和其他选项。当您在报表设计器中双击“页注脚”带区分隔条时，显示此对话框。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印页注脚内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印页注脚内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


页标头对话框

请参阅

在一个标签或多列报表中设置“页标头”带区的高度和其他选项。当您在报表设计器中双击“页标头”带区分隔条时，显示此对话框。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在页标头内容打印之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在页标头内容打印之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

使用报表带区事件


总结对话框

请参阅

在一个标签或多列报表中设置“总结”带区的高度和其他选项。当您在报表设计器中双击“总结”带区分隔条时，显示此对话框。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印总结内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印总结内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

标题/总结对话框

使用报表带区事件


标题对话框

请参阅

在一个标签或多列报表中设置“标题”带区的高度和其他选项。当您在报表设计器中双击“标题”带区分隔条时，显示此对话框。

对话框选项

高度

指定带区高度。可在框中输入一个值，单击上箭头或下箭头，以 0.05 为步长改变显示值。也可用鼠标直接拖动分隔条改变高度。

带区高度保持不变

设置此选项后可防止报表带区因为容纳过长的数据或从其中移去数据而移动。

运行表达式

入口处

指定在打印标题内容之前要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。

出口处

指定在打印标题内容之后要计算的表达式。可在框中直接输入表达式，或按三点按钮显示表达式生成器。


请参阅

添加标题和总结带区

在页面上定义多列

表达式生成器

在布局上分组数据

标签设计器

修改带区

规划数据的位置

报表设计器

设置带区高度

标题/总结对话框

使用报表带区事件


打印条件对话框

请参阅

可利用此对话框设置表达式，根据表达式的值对一个对象进行条件打印，以及控制如何打印各信息带中的对象。

对于字段对象，此对话框控制各个信息带中的重复值是否打印。对于非字段对象，此对话框控制其在各连续信息带中的打印方式。

在标签或报表中放置控制，并在此控制的相应对话框中选择“打印条件”，显示此对话框。

当您在标签或报表中画一个矩形或线条并双击鼠标，然后从矩形/线条对话框中选择“打印条件”时，所得到的“打印条件”对话框与字段对象的“打印条件”对话框稍有不同。

对话框选项

每个信息带打印一次

此选项仅用于非字段对象（如OLE 对象、标签、线条、矩形和圆角矩形等控制）。

是

开始打印包含此对象的信息带时，打印此对象。

否

除非选择了“在新页或新列的第一个完整信息带内打印”和“当细节区数据溢出到新页或新列时打印”两选项中的一项，或者两项都选，否则不打印对象。

打印全部重复值

此选项仅用于字段对象。

是

显示重复值。

否

忽略重复值。

有条件打印

在新页或新列的第一个完整信息带内打印

在新页或新列的第一个完整信息带内而不是在前一页或前一列溢出的信息带内打印此字段。如果“打印全部重复值”项选择“是”，则此项被自动选定；如果“打印全部重复值”项选择“否”，则此项为可选项。

当此组改变时打印

当选定的组改变时，打印此字段。只有当数据组存在，并且从列表框中选定了一个数据组时，此选项可用。

当细节区数据溢出到新页或新列时打印

当细节带区中的某一信息带溢出到新页或新列时，打印此字段。

若是空白行则删除

如果没有对象在打印，同时又没有其他对象位于同一水平位置上，就删除对象所在行。

仅当下列表达式为真时打印

可用来输入表达式，或显示表达式生成器对话框，从而定义在字段打印之前要求值的表达式。如果您使用了一个表达式，则此对话框中除“若是空白行则删除”选项外的所有其他选项都不可用。


请参阅

控制打印

生成打印表达式

表达式生成器

插入报表控制

矩形/线条对话框

报表设计器

报表表达式对话框

不输出空白行

不输出重复值


矩形/线条对话框

请参阅

为矩形和线条控制指定位置和打印选项。当您在画了一个矩形或线条并双击所画的对象时，此对话框出现。

对话框选项

打印条件

显示打印条件对话框，从而可以对报表或标签中线条或矩形的打印进行精确控制。

对象位置

浮动

指定所选择的线条或矩形控制相对于周围字段的大小而移动。

相对于带区顶端固定

使线条或矩形保持在报表或标签设计器中指定的位置，并保持其相对于带区顶端的位置。

相对于带区底端固定

使线条或矩形保持在报表或标签设计器中指定的位置，并保持其相对于带区底端的位置。

向下伸展

不伸展

指定当带区伸展来显示数据时，矩形不伸展。

相对于组中最高的对象伸展

指定矩形伸展到组中最高对象的高度。

相对带区高度伸展

指定矩形伸展到带区的大小。

注释

允许向 .FRX 或 .LBX 文件中添加注释。注释仅用于参考，并不出现在打印的报表或标签中。


请参阅

打印条件对话框

使用可变长度值打印控制

报表控制工具栏


圆角矩形对话框

请参阅

为圆角矩形控制指定准确的形状、位置和打印选项。当您画了一个圆角矩形并双击该对象时，此对话框出现。

对话框选项

样式

指定圆角矩形的样式。

对象位置

浮动

指定所选择的圆角矩形控制相对于周围字段的大小而移动。

相对于带区顶端固定

使圆角矩形保持在报表或标签设计器中指定的位置，并保持其相对于带区顶端的位置。

相对于带区底端固定

使圆角矩形保持在报表或标签设计器中指定的位置，并保持其相对于带区底端的位置。

向下伸展

不伸展

指定当带区伸展以显示数据时，圆角矩形不伸展。

相对于组中最高对象伸展

指定圆角矩形伸展到组中最高对象的高度。

相对带区高度伸展

指定矩形伸展到带区的大小。

打印条件

显示打印条件对话框，从而可以对报表或注释中圆角矩形的打印进行精确控制。

注释

允许向 .FRX 或 .LBX 文件中添加注释。注释仅用于参考，并不出现在打印的报表或标签中。


请参阅

打印条件对话框

使用可变长度值打印控制

报表控制工具栏


报表图片对话框

请参阅

允许把来自通用表字段中的位图、图标或其他信息添加到报表或标签中。当在报表控制工具栏中选择“图片/OLE 绑定型控制”按钮，并将此控制放入到报表或标签中时，此对话框出现。

对话框选项

图片来源

文件

指定位图或图标的文件名。可在框中输入路径和文件名，或选择三点按钮，使用“打开”对话框选择位图或图标文件。

字段

指定要包含在报表或标签中的通用字段。选择三点按钮，打开选择字段/变量对话框 ，选择所要的字段，或在文本框中直接键入字段名称。

如果表中的通用字段包含一个不是图片或图表的对象（例如，一个 Microsoft Excel 工作表或 Microsoft Word 文档），则代表此对象的图标将打印在报表或标签中。

如果图片和图文框的大小不同

剪裁图片

如果图片的尺寸大于报表或标签设计器中定义的图文框尺寸，图片将保持原有大小，显示出来的将只是图片在图文框中的部分。图片将以图文框的左上角为基准点，超出图文框的右下部分不可见。

缩放图片 — 保持形状

显示整个图片，在保持图片的相对比例的条件下尽量填满图文框。这可以防止图片的纵向或横向变形。

缩放图片 — 填充图文框

显示整个图片，完全填满图文框。图片通过纵向或横向变形来填满图文框。

对象位置

浮动

指定所选择的图片相对于周围字段的大小移动。

相对于带区顶端固定

使图片保持在报表或标签设计器中指定的位置，并保持其相对于带区顶端的位置。

相对于带区底端固定

使图片保持在报表或标签设计器中指定的位置，并保持其相对于带区底端的位置。

图片居中

确保比图文框小的通用字段图片放在报表或标签框的中央。通用字段中的图片可以有不同的形状和大小。如果未选“图片居中”，则当图片尺寸比图文框尺寸小时，图片将显示在框的左上角。

注释

如果您的报表或标签中包括一个位图或图标，“图片居中”对单个图片将没有影响。因为单个图片有已知参数，图片永远不会比图文框小。

打印条件

显示打印条件对话框，从而可以对报表或标签中图片的打印进行精确控制。

注释

允许添加注释。注释仅用于参考，并不出现在打印的报表或标签中。


请参阅

选择字段/变量对话框

通用字段类型

Picture 属性

打印条件对话框


选择字段/变量对话框

请参阅

指定一个表字段或变量。

对话框选项

选择字段或变量

输入字段或内存变量。

字段

显示报表图片对话框.中“字段”框内指定的表中各字段。双击需要的字段，将其移入“选择字段或变量”框中。

变量

显示可用的内存变量。双击需要的变量，将其移入“选择字段或变量”框中。

注释

允许添加注释。注释仅用于参考，并不出现在打印的报表或标签中。


请参阅

报表图片对话框


表菜单

表菜单包含检查和编辑活动（选定）表的命令。

表菜单命令

属性

显示“工作区属性”对话框，可以在其中修改表的结构，选择索引文件和字段以及定义数据筛选条件。

字体

显示“字体”对话框，它控制“浏览”或“编辑”窗口内表或视图中的字体、字形和字体大小。

转到记录

将记录指针定位在指定的记录上。

追加新记录

将一新记录添加在当前表的末尾。

切换删除标记

在选定记录的开始位置放置或移去删除标记，以说明其删除或未删除的状态。

追加记录

显示“追加来源”对话框，可以用此对话框将其他表中的记录添加到当前表中。

删除记录

显示“删除”对话框，可在其中标记删除记录。

恢复记录

显示“恢复”对话框，可在其中给已做删除标记的记录解除标记。

彻底删除

提示您永久地删除已做删除标记的记录。

替换字段

更改单条或多条记录中的信息。

调整字段大小

使用键盘更改选定字段的宽度。

移动字段

使用键盘移动选定字段。

调整分区大小

激活窗口拆分条，从而能够用键盘给窗口分区或更改现有分区的大小。

链接分区

当启用了此命令并且“浏览”窗口已拆分时，您将能够同时在两个分区中滚动。废止此命令时，在一个分区中进行滚动不影响另一分区，即另一分区不滚动。

切换分区

使已拆分“浏览”窗口的非活动分区变为活动的，活动的分区变为非活动的。

重建索引

重建与活动表相关的任何已打开索引，以使其准确反映表的当前状态。


属性（表菜单）

请参阅

显示“工作区属性”对话框，在其中您能够修改表结构，选择索引文件和字段以及定义数据筛选器。

工作区属性对话框选项

数据缓冲选项

允许数据缓冲

缓冲设置为打开。

在编辑时锁定记录

当您编辑记录时防止其他用户访问。这也称为保守式缓冲。

在写入时锁定记录

允许其他用户访问，直到记录更新为止。这也称为开放式缓冲。

缓冲当前记录

仅缓冲当前记录。这也称为记录缓冲。

缓冲所有编辑过的记录

缓冲所有编辑过的记录。这也称为表缓冲。

附注

当您选择“缓冲当前记录”时，Multilocks 自动设置为“打开”（如果它们当前是关闭着的话）。但是当您清除“缓冲当前记录”选项或选择“缓冲所有编辑过的记录”时，并不把它设置为“关闭”。可在“选项”对话框中的数据选项卡内为新表设置默认值。

数据筛选

提供键入数据筛选表达式的文本框。另外，也可以用三点按钮显示表达式生成器对话框，从中可以指定活动表中哪些记录可被处理。对应于 SET FILTER 命令。

索引排序

指定表如何进行索引排序。在数据库设计器内，索引列表中表的主索引旁边显示一个钥匙符号。对应于 SET ORDER 命令

允许访问

工作区中的所有字段

指定用户能够访问工作区中的全部字段。对应于 SET FIELDS 命令。

由“字段筛选”指定的字段

指定只有匹配字段选择器对话框中选定字段的记录才被显示或能够编辑。

字段筛选

显示“字段选择器”对话框，可在其中控制活动字段的数目。

修改

显示表设计器，可在其中修改数据库、自由表、字段和索引。


请参阅

建立索引

数据选项卡（选项对话框）

数据库设计器

表达式生成器

字段选择器

SET MULTILOCKS 命令

SET FIELDS 命令

SET FILTER 命令

SET ORDER 命令

用索引设置记录顺序

表设计器

使用索引


字段选择器对话框

请参阅

限制一个表中活动字段的数目，从而定制哪些显示，哪些不显示。不能访问、检查或修改不活动的字段。表中的数据本身不受影响。除非您在Work Area 属性对话框中选择了“由‘字段筛选’指定的字段”，否则忽略此对话框中所做的选择。

当您选择“工作区属性”对话框中的“字段筛选”，或者快速报表对话框中“字段”，追加来源选项对话框或导出选项对话框时，此对话框出现。

对话框选项

所有字段

显示当前表中的全部字段。

选定字段

显示您在“所有字段”框中选定并且用“移入”按钮移入的字段名。

来源于表

指定哪一个表中的字段在“所有字段”框中显示。

移入

将“所有字段”框中的选定字段复制到“选定字段”框中。

全部移入

将“所有字段”框中的字段全部复制到“选定字段”框中。

移去

从“选定字段”框中移去选定字段。

全部移去

从“选定字段”框中移去全部字段。


请参阅

追加来源选项

导出选项

属性（表菜单）

快速报表（报表菜单）

Work Area 属性（表菜单）


 字体（表菜单）

请参阅

显示“字体”对话框，用以控制浏览窗口或编辑窗口内表或视图中的字体、字形和字体大小。

字体对话框选项

字体

显示可用字体列表。

字形

显示用于字体或选定文本的一系列样式（正常、粗体、斜体或粗斜体）。

大小

显示字体大小。


请参阅

浏览窗口

编辑窗口


转到记录（表菜单）

请参阅

把记录指针定位到指定记录。

转到记录子菜单命令

第一个

把指针放置在表或视图的第一个记录上。

最后一个

把指针放置在表或视图的最后一个记录上。

下一个

把指针放置在紧跟当前记录之后的记录上。

上一个

把指针放置在当前记录的上一个记录上。

记录号

显示转到记录对话框，从中可以指定一个记录号。

定位

显示定位记录对话框，从中可以查找表或视图中的索引字段或未索引字段，或者查找多个记录。


请参阅

转到记录

定位记录


转到记录对话框

请参阅

指定记录指针放在哪条记录上。在“记录号”框中键入记录编号，或者视情况使用向上或向下箭头直到要求的编号出现在“记录号”框中。选择“确定”回到“浏览”窗口，这时，记录指针就放到了指定记录上。

当从“转到记录”子菜单中选择“记录号”命令时，此对话框出现。


请参阅

浏览窗口


定位记录对话框

请参阅

在活动表或视图中查找匹配指定条件的记录。当您想要在一索引字段或未索引字段上逐条记录地搜索一个表或视图，或者想要在一个表中搜索多条记录时，使用这个命令。

当您从转到记录子菜单中选择“定位”命令时，此对话框出现。

对话框选项

条件

范围

显示范围对话框，用于指定 Visual FoxPro 将处理的记录。

For

显示表达式生成器对话框，可在其中创建一个逻辑表达式，每条被命令影响的记录必须满足该表达式。Visual FoxPro 使用该 For 表达式测试表或视图中的每一条记录。

While

显示表达式生成器对话框。While 表达式指定仅当该逻辑表达式为“真”时，操作影响记录。一旦表达式取值为“假”，操作即停止而不考虑其余记录。

定位

使用“范围”、“For”和“While”值执行命令


请参阅

浏览窗口

CONTINUE 命令

表达式生成器

转到记录

LOCATE 命令

范围对话框


范围对话框

请参阅

指定 Visual FoxPro 对当前表或视图中的哪些记录起作用。当您从定位记录对话框中选择“范围”，选择打印选项对话框或选择导出选项对话框时此对话框出现。

对话框选项

全部

对表或视图中的全部记录起作用。

后续

对某一范围的记录起作用，作用范围从当前记录开始，持续指定数目的记录。键入 1 将只对当前记录起作用。

记录

对指定记录号的记录起作用。

其余

对某一范围的记录起作用，作用范围从当前记录开始，到表或视图的最后一条记录为止。


请参阅

浏览窗口

导出选项对话框

定位记录对话框

打印（文件菜单）

打印选项对话框

打印一定数量或范围的记录

选择一定数量或范围的导出记录


追加新记录（表菜单）

请参阅

将一新记录添加到当前表或视图的末尾。

快捷楗

Ctrl + Y


请参阅

追加记录（表菜单）

从另一个表中追加

追加数据

把数据追加到已有表

导入、追加或导出文本文件

浏览窗口


追加记录（表菜单）

请参阅

显示“追加来源”对话框，可用此对话框从其他表、电子表格或文本文件向当前表或视图中添加记录。

追加来源对话框选项

类型

指定从中追加记录的文件类型。

来源

可在其中键入要追加记录的源文件名。如果您不知道文件名，可选择三点按钮，显示“打开”对话框，选择所需的文件。

到

显示记录要追加到的表或视图的路径和文件名。

选项

显示追加来源选项对话框，可在其中指定要追加的字段，并指定一个待追加记录必须满足的表达式。


请参阅

追加来源选项

APPEND FROM 命令

把数据追加到已有表

追加数据

从另一个表中追加

浏览窗口

导入、追加或导出文本文件

打开（文件菜单）


追加来源选项对话框

请参阅

指定要追加的字段并且允许指定一个待追加记录必须满足的表达式。当在追加来源对话框中选择“选项”时，此对话框出现。

对话框选项

条件

字段

显示字段选择器对话框，可从中选择要追加的字段。

For

显示表达式生成器对话框，可在其中创建一个 For 表达式，只追加满足此表达式的记录。


请参阅

追加来源（表菜单）

表达式生成器

字段选择器


切换删除标记（表菜单）

请参阅

在选定记录的开始位置放置或移去删除标记，说明记录的删除状态。

快捷楗

Ctrl + T


请参阅

浏览窗口

删除记录（表菜单）

彻底删除（表菜单）


删除记录（表菜单）

请参阅

显示“删除”对话框，从中可以给记录做删除标记。对应于 DELETE 命令。

此命令并不物理地删除记录，只是打上标记为将来的删除做准备。要永久地从硬盘中删除记录，可使用彻底删除。

删除（记录）对话框选项

条件

范围

显示范围对话框，从中可以指定 Visual FoxPro 起作用的记录。

For

显示表达式生成器对话框，可在其中创建一个逻辑表达式，每条被命令影响的记录必须满足该表达式。Visual FoxPro 使用该 For 表达式测试表或视图中的每一条记录。

While

显示表达式生成器对话框。While 表达式指定仅当该逻辑表达式为“真”时，操作影响记录。一旦表达式取值为“假”，操作即停止而不考虑其余记录。

删除

使用“范围”、“For”和“While”值删除记录。


请参阅

DELETE 命令

删除记录并压缩表

表达式生成器

恢复记录（表菜单）

彻底删除记录命令 (数据库菜单)

范围对话框


恢复记录（表菜单）

请参阅

显示“恢复”对话框，可在其中取消记录的删除标记。对应于 RECALL 命令。

恢复记录对话框选项

条件

范围

显示范围对话框，可用此对话框指定 Visual FoxPro 将起作用的记录。

For

显示表达式生成器对话框，可在其中创建一个逻辑表达式，每条被命令影响的记录必须满足该表达式。Visual FoxPro 使用该 For 表达式测试表或视图中的每一条记录。

While

显示表达式生成器对话框。While 表达式指定仅当该逻辑表达式为“真”时，操作影响记录。一旦表达式取值为“假”，操作即停止而不考虑其余记录。

恢复

使用“范围”、“For”和“While”值恢复记录。


请参阅

删除记录（表菜单）

表达式生成器

RECALL 命令

范围对话框


彻底删除（表菜单）

请参阅

提示您永久地删除已做删除标记的记录。


请参阅

删除记录（表菜单）

删除带有删除标记的记录


替换字段（表菜单）

请参阅

更改一条或多条记录中的字段信息。

替换字段选项

字段

显示当前表中的字段，包括其类型和大小。

替换为

指定一个替换表达式。键入该表达式或者选择三点按钮显示表达式生成器对话框并且创建一个替换表达式。

范围

显示范围对话框，可用此对话框指定 Visual FoxPro 将起作用的记录。

For

显示表达式生成器对话框，可在其中创建一个逻辑表达式，每条被命令影响的记录必须满足该表达式。Visual FoxPro 使用该 For 表达式测试表或视图中的每一条记录。

While

显示表达式生成器对话框。While 表达式指定仅当该逻辑表达式为“真”时，操作影响记录。一旦表达式取值为“假”，操作即停止而不考虑其余记录。

替换

使用“范围”，“For”，和“While”值替换记录。仅当您在“字段”和“替换为”文本框中都有一个字段名或表达式时，此命令才可用。


请参阅

表达式生成器

 REPLACE 命令

范围对话框


调整字段大小（表菜单）

请参阅

使用键盘更改选定字段的宽度。使用左或右箭头键缩小或加宽该字段。当字段达到所需大小时按“确定”。


请参阅

浏览窗口

移动字段（表菜单）


移动字段（表菜单）

请参阅

使用键盘移动选定字段。使用左和右箭头键重新放置该字段。字段放置好时按“确定”。

附注

当您在拆分窗口的一个分区中移动某一字段时，另一分区内的相同字段也将移到对应位置。


请参阅

浏览窗口

 连接分区（表菜单）

调整分区大小（表菜单）

调整字段大小（表菜单）


调整分区大小（表菜单）

请参阅

激活窗口拆分条，从而可以使用键盘对窗口进行分区或更改已有分区的大小。使用左和右箭头键调整分区大小，然后按“确定”。


请参阅

浏览窗口

 连接分区（表菜单）

拆分浏览窗口


连接分区（表菜单）
 链接分区（表菜单）

请参阅

当“浏览”窗口已拆分并启用此命令时，将允许您同时对两个分区进行滚动；不用此命令时，允许您只滚动一个分区而不能影响另一分区。


请参阅

浏览窗口

切换分区（表菜单）

调整分区大小（表菜单）

拆分浏览窗口


切换分区（表菜单）

请参阅

使已拆分“浏览”窗口的不活动分区成为活动分区，活动分区变为不活动分区。


请参阅

浏览窗口

 连接分区（表菜单）

调整分区大小（表菜单）

拆分浏览窗口


重建索引（表菜单）

请参阅

重建与活动表相关的任何已打开索引文件，使其能够准确反映表的当前状态。


请参阅

重建活动索引文件

REINDEX 命令


工具菜单

“工具”菜单包含了一些命令，用这些命令可以设置系统选项、运行向导、创建宏以及跟踪和调试源代码。

工具菜单命令

向导

显示 Visual FoxPro 的一个子菜单，其中包含了所有的向导。

拼写检查

运行拼写检查器。

宏

定义可以执行一组命令的组合键。

跟踪窗口

打开“跟踪”窗口，从中能够察看程序执行情况。

调试窗口

打开“调试”窗口，从中可以监控程序中的值。

选项

设置多个系列的系统选项。


向导选择对话框
向导选取对话框

请参阅

显示一个可以从中选择向导的列表。当您从“工具”菜单中选择“向导”后，显示这个对话框。从这个对话框（子菜单）中可以选择“查寻”、“表单”、“报表”或者“全部”。

对话框选项

向导列表

显示所有 Visual FoxPro 向导。

说明

给出当前选定向导的一个简单说明。


请参阅

使用向导


拼写检查（工具菜单）

请参阅

检查文本或备注字段中的拼写是否正确。

拼写对话框选项

不在字典中

显示活动字典中没有的字。如果您的文本有列间隔或缩进，则此框变为“间隔”。

附注

如果您不希望 Visual FoxPro 考虑附加间隔，可以在拼写检查选项对话框中更改设置。

更改为/建议

键入或选择一个单词替换字典中没有的单词。如果要删除文档中“不在字典中”框内的字，可以将“更改为”框中的文本删除成空白，然后选择“全部更改”按钮。

忽略

不作更改并进行下一个拼写检查。

全部忽略

整个文档中都不更改指定的字，并进行下一个拼写检查。

更改

把指定字更改为“更改为”框中的字。

全部更改

把整个文档中指定字更改为“更改为”框中的字。

添加

将指定字添加到字典中。

撤消前次操作

撤销文档中最近一次替换。最多可以撤消前五个替换。

建议

在“更改为”框中键入一个单词后，显示一些可以用来替换的单词。

选项

显示“拼写检查选项”对话框，从中可以控制 Visual FoxPro 用以检查拼写的规则。


请参阅

_SPELLCHK 系统内存变量

拼写检查选项对话框


拼写检查选项对话框

请参阅

控制 Visual FoxPro 用以检查拼写的规则。在拼写检查对话框中选择“选项”后这个对话框出现。

对话框选项

总是建议

在检查拼写时为每一找不到的单词显示一些可以用来更正的单词。

忽略大写词

跳过每个字符都是大写字母的单词。

忽略附加间隔

跳过单词间的附加间隔。

字典

语言

指定活动字典的语言。

类型

指定常规、简明、完全、医学或法律字典。


请参阅

拼写检查（工具菜单）


宏（工具菜单）

请参阅

定义使用 CTRL 键、ALT 键或功能键的组合键，用这种定义好的组合键可以代替执行一组键击。还可以把宏组合成集合，并把它们保存到文件中。

“宏”对话框选项

单个宏

显示可使用的宏。第一次安装 Visual FoxPro 时，同时安装了下列宏：

键	功能
F2	SET
F3	LIST
F4	DIR
F5	DISPLAY STRUCTURE
F6	DISPLAY STATUS
F7	DISPLAY MEMORY
F8	DISPLAY
F9	APPEND
附注

当您按下 SHIFT 键的同时再按数字键盘上的任何一个方向键时，SHIFT_1 到 SHIFT_9 依次突出显示文本。如果您使用数字键盘输入数字，您可能希望清除这些宏。

录制

显示宏键定义对话框，从中可以创建一个宏。按下 SHIFT + F10 键可以直接打开“宏键定义”对话框，而不一定要从“宏”对话框中选择“录制”按钮。

新建

显示宏编辑对话框，从中可以手工创建一个宏。

编辑

显示宏编辑对话框，从中可以编辑选定的宏。

清除

提示您清除或保留选定的宏。

宏集合

保存

显示保存宏对话框，从中可以保存单个宏或宏集合。

还原

显示还原宏对话框，从中可以把一已保存的宏集添加到当前宏（那些在“宏”对话框中“宏”框内的宏）中。

设置为默认值

提示您用一个新建宏集合改写默认宏集合。

全部清除

提示您清除“宏”列表中的所有宏


请参阅

APPEND 命令

DIR 命令

DISPLAY MEMORY 命令

DISPLAY STATUS 命令

DISPLAY STRUCTURE 命令

DISPLAY 命令

LIST 命令

宏编辑对话框

宏文件的格式 (.FKY)

宏键定义对话框

宏替换

PLAY MACRO 命令

还原宏对话框

保存宏对话框

SET 命令


保存宏对话框

请参阅

在文本框中，可以在文本框中为宏或宏集合键入一个新文件名，也可以从一个文件目录选择一个已存在的文件，并用当前宏或宏集合改写这个文件。

对话框选项

保存当前宏

指定保存宏的文件名。

存为类型

它包含“宏文件”和“所有文件”。

目录

列出所有可用目录。如果文件不在当前目录中，则可在此框中选择正确的目录。

驱动器

列出所有可用的驱动器。如果文件不在当前驱动器上，则可以在此框中选择正确的驱动器。

保存

把宏保存到“保存当前宏”框中指定的文件名中。

网络

连接一个网络驱动器，从而可以打开一外网络驱动器上的文件，而不打开本地驱动器上的文件。


请参阅

宏（工具菜单）

SAVE MACROS 命令


还原宏对话框

请参阅

把一个已保存的宏集合添加到当前宏中。

对话框选项

从下面文件

指定还原宏所在的文件名。

文件类型

它包括“宏文件”和“所有文件”。

目录

列出所有可用目录。如果文件不在当前目录中，则可以在此框中选择正确的目录。

驱动器

列出可用驱动器列表。如果文件不在当前驱动器上，则可以在此框中选择正确的驱动器。

确定

从“从下面文件”框内所指定的文件名中还原宏。

网络

连接一个网络驱动器，从而可以打开一个网络驱动器的文件，而不一定打开本地驱动器上的文件。


请参阅

宏（工具菜单）

RESTORE MACROS 命令


宏键定义对话框

请参阅

用录制键击的方法自动创建一个宏。

在宏对话框中选择“录制”后，显示这个对话框。

快捷楗

SHIFT + F10

“宏键定义”对话框选项

键定义

显示您按下键组合，这个组合键将用来运行这个宏。

宏名

显示基于键定义的默认宏名。例如，如果键定义是 CTRL+D，该宏名将是 CTRL_D。如果要更改宏名，应在框中键入新名（最多 20 个字符）。录制过程在按“确定”按钮后开始，此时插入点将放在您录制宏的命令窗口中。


请参阅

宏（工具菜单）

SET FUNCTION 命令

停止记录宏对话框


停止记录宏对话框

请参阅

中断录制宏的过程。在这个对话框中，可以选择“确定”，从而可以停止录制，也可以使用其它一些选项。

在录制一个宏的过程中，如果按 SHIFT + F10，则出现这个对话框。

对话框选项

插入原义键

录制下一个键击的原义，而不是宏指定给该键的当前意义。当循环定义两个键时可以使用它。

插入暂停

在宏中录制一个暂停。在选择“插入暂停”之前，应先选择“按键继续”或“暂停秒数”来定义怎样继续宏的执行过程。

按键继续

提示需按一个键才能继续执行一个暂停的宏。

暂停秒数

指定宏在暂停指定秒数后自动恢复执行。应在微调控制中键入或选择一个数。

继续

回到“停止录制宏”对话框出现之前状态，继续录制宏。

放弃

删除正在录制的宏，并且将插入点放置在最后进入的文本框中。

确定

确认宏已完成并且可供使用。


请参阅

宏键定义对话框

宏（工具菜单）


改写宏对话框

请参阅

用新建宏替换已存在的宏。当在宏键定义对话框中定义一个已存在的键组合并选择“确定”时，该对话框出现。

对话框选项

改写

用新宏定义替换已存在的定义。

追加键击

把键击追加到已存在宏的末尾。插入点被放置在最后进入的文本框中，您可以键入要追加的键击。


请参阅

宏键定义对话框


宏编辑对话框

请参阅

人工创建一个宏，而不用录制键击的方法创建宏。

对话框选项

键定义

显示要按下的组合键，这个组合键将用来启动这个宏。

宏名

显示基于键定义的默认宏名。例如，如果定义键是 CTRL+D，宏名将是 CTRL_D。如果要给宏重命名，应在框中键入新名（最多 20 个字符）。

宏内容

提供一个文本框，可以在其中键入宏要执行的键击。可以使用 ON KEY LABEL 主题中列出的键标签指定值，并把它们括在大括号中代表所需键击。键组合（比如 CTRL+F2）也需要放在大括号中。

附注

Visual FoxPro 不支持 SHIFT + CTRL + \，CTRL + -，CTRL + ^ 以及 SHIFT + CTRL + ENTER 这些组合键。


请参阅

ON KEY LABEL 命令


跟踪窗口（工具菜单）

请参阅

打开跟踪窗口，在其中能够观察程序的执行，控制执行速度，并检验代码是否在正确执行。


请参阅

调试窗口

调试窗口（工具菜单）

跟踪窗口


调试窗口（工具菜单）

请参阅

打开调试窗口，从中可以监控程序中的值。


请参阅

调试窗口

跟踪窗口


选项（工具菜单）

请参阅

打开选项对话框，从中可以设置不同种类的选项。

当您选择出现在对话框每个选项卡上的“设置为默认值”按钮时，Visual FoxPro 保存所有选项卡上的所有选项。

选项对话框中的选项卡

选项按以下选项卡分组：

选项卡	说明
显示	包含显示选项
常规	包含声音、程序设计、数据输入以及其它选项
编辑	包含文本操作和文件保存选项
数据	包含控制表中数据的选项
远程数据	包含对远程 (ODBC) 视图和连接的默认值选项
文件位置	包含 Visual FoxPro 所使用的文件目录位置和名称
表单	包含有关表单设计器的选项
项目	包含有关项目管理器的选项
控制	包含有关可视类库和 OLE的选项
国际	包含有关日期、时间和数字格式的选项


请参阅

控制选项卡（选项对话框）

数据选项卡（选项对话框）

编辑选项卡（选项对话框）

文件位置选项卡（选项对话框）

表单选项卡（选项对话框）

常规选项卡（选项对话框）

国际选项卡（选项对话框）

修改界面选项

项目选项卡（选项对话框）

远程数据（选项对话框）

显示选项卡（选项对话框）


显示选项卡（选项对话框）

请参阅

包含控制 Visual FoxPro 显示界面的选项。

当选择对话框中选项卡上的“设置为默认值”按钮时，Visual FoxPro 保存所有选项卡上的所有选项。每一个选项卡上都有“设置为默认值”按钮。

选项卡选项

显示

状态条

指定 Visual FoxPro 是否显示状态栏。对应于 SET STATUS BAR 命令。

时钟

指定 Visual FoxPro 是否显示系统时钟，并指定其位置。对应于 SET CLOCK 命令。

命令结果

指定 Visual FoxPro 主窗口、系统信息窗口、图形状态栏或一个用户定义窗口中，是否显示命令结果，对应于 SET TALK 命令。

系统信息

可以指定在 Visual FoxPro 主窗口底端的状态栏内显示系统信息。该选项对应于 SET NOTIFY 命令。

最近用过的项目列表

打开 1, 2, 3, 4 命令，出现于“文件”菜单中。

起动时打开最近用过的项目

指定起动时 Visual FoxPro 打开上一次打开的项目。


请参阅

1, 2, 3, 4 (文件菜单)

修改界面选项

选项（工具菜单）

SET CLOCK 命令

SET NOTIFY 命令

SET STATUS BAR 命令

SET TALK 命令


常规选项卡（选项对话框）

请参阅

包含了有关 Visual FoxPro 中声音、程序设计、数据输入的选项以及其它选项。

当选择对话框中选项卡上的“设置为默认值”按钮时，Visual FoxPro 保存所有选项卡上的所有选项。每一个选项卡上都有“设置为默认值”按钮。

选项卡选项

警告声音

关闭

关闭报告错误的声音，对应于 SET BELL 命令。

默认值

把报告错误的声音设置为系统的默认值。

播放

把报告错误的声音设置为一个 .WAV 文件。可以在框中键入文件名，也可以单击框右边的按钮选择一个已存在的 .WAV 文件。

程序设计

按 ESC 键取消程序执行

允许通过按 ESC 键取消一个正在运行的程序。对应于 SET ESCAPE 命令。

显示跟踪窗口

启用跟踪窗口。Visual FoxPro 执行一个程序时，它可以显示程序代码，并突出显示正在执行的一行。对应于 SET ECHO 命令。

记录编译错误

指定把编译错误记录为日志。也就是说，在编译文件时， Visual FoxPro 将跟踪任何语法错误，并且把它们保存在一个与项目文件同名的 .ERR 文件中。对应于 SET LOGERRORS 命令。

SET DEVELOPMENT

在程序运行时比较该程序和它的编译目标文件的创建日期和时间。对应于 SET DEVELOPMENT 命令。

与 dBASE 兼容

指定与 FoxBASE+，dBASE 以及其它 Xbase 语言的兼容性。对应于 SET COMPATIBLE 命令。

使用 Visual FoxPro 调色板

指定使用默认的 Visual FoxPro 调色板。对应于 SET PALETTE 命令。

文件替换时加以确认

指定用新文件改写已存在文件时，Visual FoxPro 要求确认。对应于 SET SAFETY 命令。

数据输入

定位键

指定移动表、表单和其它文件中的插入点时，使用 Windows 或 MS_DOS 兼容的定位键。对应于 SET KEYCOMP 命令。

用当前值填充新记录

允许自动将当前记录的值填入新记录。对应于 SET CARRY 命令。

使用回车或 TAB键退出字段

指定可以按 ENTER 或 TAB 键来退出字段。对应于 SET CONFIRM 命令。


请参阅

修改数据输入和程序设计选项

选项（工具菜单）

SET BELL 命令

SET CARRY 命令

SET COMPATIBLE 命令

SET CONFIRM 命令

SET DEVELOPMENT 命令

SET ECHO 命令

SET ESCAPE 命令

SET KEYCOMP 命令

SET LOGERRORS 命令

SET PALETTE 命令

SET SAFETY 命令

设置警告声音

跟踪窗口


编辑选项卡（选项对话框）

请参阅

包含有关文本操作和文件保存的选项。在代码窗口或编辑窗口中编辑文本时，这些设置有效。

选择出现在对话框选项卡上的“设置为默认值”按钮时，Visual FoxPro 将所有选项卡的所有选项设置保存到资源文件中。但是，这仅发生在已经为 SET RESOURCE 命令指定了 ON 参数或已经在文件位置选项卡中选定了“资源文件”复选框时。

选项卡选项

命令窗口的编辑选项

拖放编辑

在使用鼠标操纵文本时允许拖放文本编辑。

自动换行

在窗口中自动换行。

自动缩进

根据第一行的缩进自动缩进文本。这不影响文本的保存。

对齐方式

指定文本左、居中或右对齐。

制表符宽度（字符数）

指定一个制表符占多少字符宽。范围是从 1 到 50 。

显示行/列位置

允许在状态条栏中显示行号和列号。

制作备份

指定每次保存一个文件时，Visual FoxPro 创建一个备份。

保存前先编译

指定保存文件时，Visual FoxPro 自动编译该文件并检查语法错误。这个选项仅用于编辑程序文件时。

保存文件尾标记

保存文件时在文件尾放置一个 CTRL + Z 。这个与文件一起保存的附加字符可以帮助解决常规编辑活动和 MODIFY MEMO 活动之间的区别。

保存换行符

保存输入到文件中的换行符。如果未选定该框，保存文件时将移去换行符。

保存选择的参数

仅保存编辑当前文件时本组的参数选择。

设置为默认值

把当前设置指定为创建该类型新文件时的默认值。


请参阅

代码窗口

编辑窗口

文件位置选项卡（选项对话框）

MODIFY MEMO 命令

修改文本编辑器选项

选项（工具菜单）

SET RESOURCE 命令


数据选项卡（选项对话框）

请参阅

包含控制表和数据的选项。

当选择对话框中选项卡上的“设置为默认值”按钮时，Visual FoxPro 保存所有选项卡上的所有选项设置。每个选项卡上都有“设置为默认值”按钮。

选项卡选项

数据

以独占方式打开

以独占方式打开表和数据库，这样可以保证您工作在这些表或数据库上时，其它人不能修改它们。该选项对应于 SET EXCLUSIVE 命令 命令。

自动保存

指定在退出 READ 或返回到命令窗口时是否自动将数据缓冲区中的内容保存到磁盘上。该选项对应于 SET AUTOSAVE 命令 命令。

显示字段名

在 AVERAGE，CALCULATE，DISPLAY，LIST 和 SUM 命令的输出中，在每个字段的开始位置放一个字段名作为列标头。该选项对应于 SET HEADINGS 命令。

提示代码页

打开没有指定代码页的表时，提示您指定一个代码页。该选项对应于 SET CPDIALOG 命令。

忽略已删除记录

如果选定了这个复选框，则指定某些 Visual FoxPro 命令忽略带有删除标记的记录；如果清除了这个框，则指定其他一些命令将使用这些带有删除标记的记录。这个选项对应于 SET DELETED 命令。

Rushmore 优化

启用 Rushmore 优化。该选项对应于 SET OPTIMIZE 命令。

在索引中不出现重复记录

指定具有相同索引关键字值的记录不包含在索引文件中。该选项对应于 SET UNIQUE 命令。

排序序列

指定字符字段在索引和排序操作中的排序序列。该选项对应于 SET COLLATE 命令。

记录计数器间隔

指定报表间隔的记录数目。范围从 1 到 32,767 条记录。该选项对应于 SET ODOMETER 命令。

备注块大小（字节）

指定给备注字段分配的磁盘空间大小。该选项对应于 SET BLOCKSIZE 命令。

浏览窗口刷新时间间隔（秒）

用秒数指定多长时间刷新一次活动浏览窗口的显示。该选项对应于 SET REFRESH 命令。

表刷新时间间隔（秒）

用秒数指定多长时间刷新一次活动表的显示。当在网络上共享文件时它很有用。该选项对应于 SET REFRESH 命令。

字符串比较

SET NEAR

指定如果记录匹配失败，则 Visual FoxPro 将记录指针定位在匹配程度最大的记录上。该选项对应于 SET NEAR命令。

SET EXACT

指定比较两个不等长字符串时，表达式必须逐字符相等才算匹配。比较时忽略后续空格。该选项对应于 SET EXACT命令。

SET ANSI

在 Visual FoxPro SQL 命令中，影响用“=”操作符所做的在不等长字符串之间所做的比较。当选定该选项时，用空字符将短字符串填充到长字符串的长度后才开始匹配。当清除该选项时，不填充短字符串即开始比较。该选项对应于 SET ANSI命令。

锁定和缓冲

文件自动锁定

对某些命令启用文件自动锁定。该选项对应于SET LOCK命令。

多个记录锁定

指定是否能够锁定多条记录。该选项对应于 SET MULTILOCKS命令。

缓冲

指定在多用户环境中，数据更新和维护是否受到保护。选项有“关闭”，表或记录保守式缓冲以及表或记录开放式缓冲。只有选择“多个记录锁定”时，才可以使用这个选项。它对应于 CURSORSETPROP( ) 函数。

重新处理

指定一次锁定尝试失败后，对文件或记录再进行多少次或多长时间锁定尝试。该选项对应于 SET REPROCESS命令。


请参阅

AVERAGE 命令

CALCULATE 命令

DISPLAY 命令

LIST 命令

修改表选项

允许或禁止 Rushmore 优化

SET ANSI 命令

SET BLOCKSIZE 命令

SET COLLATE 命令

SET CPDIALOG 命令

SET DELETED 命令

SET EXACT 命令

SET HEADINGS 命令

SET NEAR 命令

SET ODOMETER 命令

SET OPTIMIZE 命令

SET REFRESH 命令

SET REPROCESS 命令

SET UNIQUE 命令

SUBSTRC ( ) 函数


远程数据选项卡（选项对话框）

请参阅

包含了有关远程 (ODBC) 视图和连接默认值的选项。

当选择对话框中一个选项卡上的“设置为默认值”按钮时，Visual FoxPro 将保存所有选项卡上的所有选项。每一个选项卡上都有一个“设置为默认值”按钮

选项卡选项

远程视图默认值

共享连接

指定在新建视图上使用当前共享的连接。

取备注字段

指定只有在视图输出中激活一个备注字段后才从数据源取备注字段。

SQL Updates：条件

建立当您试图更新数据前，远程服务器检查的字段。如果选择条件所指定远程字段中的数据已经更改，则更新失败。

SQL Updates：方法

控制如何更新远程服务器上的信息。这些选项确定了送到远程服务器的更新语句中使用哪些 SQL 命令，并确定了更新记录时使用的源表。

每次取的记录数

指定从远程数据源中一次返回多少条记录。

要取的最大记录数

限制一个视图返回的记录总数。

长度 >= 右值时使用备注

指定在您视图输出中，何时将长字符字段转换成备注字段。

成批更新的记录数

指定使用单个命令更新的记录数目。有关详细内容，请参阅 REPLACE 命令以及作用域子句。

连接默认值

异步执行

允许异步处理。有关详细内容，请参阅 SQLGETPROP( ) 以及 SQLSETPROP( ) 函数。

显示警告信息

允许显示警告信息。

批处理

允许批处理。如果选定该选项，则只有在获得所有单个结果集合后，Visual FoxPro 才从 SQLEXEC( ) 调用返回结果。这个选项对应于在 SQLSETPROP( ) 函数中设置“批处理方式”。

自动事务处理

决定连接如何处理远程表上的事务处理。选定时，对应于把 SQLSETPROP( ) 函数的 Transactions 属性设置为 1。如果不选定，则对应于把 SQLSETPROP( ) 函数的 Transactions 属性设置为 2。

显示注册信息

仅当未在连接或视图定义中指定注册信息时才显示注册提示。

连接超时设定（秒）

指定与远程服务器建立一个连接所需等待的秒数。如果在指定时间内不能建立这个连接，则 Visual FoxPro 显示错误。

空闲超时设定（分钟）

指定终止连接前允许空闲时间的分钟数。

如果在指定时间内没有请求使用服务器，则 Visual FoxPro 终止该连接。但是，连接超时后如果对服务器又有请求，则 Visual FoxPro 将试图自动恢复这个连接。

查询超时设定（秒）

指定等待服务器响应一个请求的秒数。如果服务器在指定秒数的时间内还不处理查询，则 Visual FoxPro 显示错误。

等待时间（毫秒）

指定对请求结束的检查之间的毫秒数。


请参阅

控制如何检测更新冲突

备注字段类型

修改远程数据访问选项

REPLACE 命令

作用域子句

共享连接

SQLEXEC( ) 函数

SQLGETPROP( ) 函数

SQLSETPROP( ) 函数


文件位置选项卡（选项对话框）

请参阅

包含了 Visual FoxPro 使用文件的目录位置和名字。可以直接在每个框中键入路径和文件名，也可以单击三点按钮激活对话框设置相应的选项。

当选择每个选项卡上都有的“设置为默认值”按钮时，Visual FoxPro 把选项设置保存在注册（系统窗口注册数据库）中。

选项卡选项

默认目录

指定默认的 Visual FoxPro 目录。如果选定该框并且选择“设置为默认值”按钮，则显示的目录将注册为当前和所有将来工作期的默认目录；如果未选定该框并且选择“设置为默认值”，则将从注册中删除显示的目录；如果选定该框并且选择“确定”，则只更改本工作期的默认目录。最后，如果清除选定该框，则不能够更改当前工作期的默认目录。该选项对应于 SET DEFAULT 命令。

搜索路径

指定一些目录，当 Visual FoxPro 在默认目录中找不到文件时，便在这个框中指定的目录中继续搜索文件。框中的目录之间必须用逗号或分号隔开。如果使用三点按钮指定多个目录，则自动在目录之间插入分号。该选项对应于 SET PATH 命令。

临时文件

指定 Visual FoxPro 保存临时文件的目录。

帮助文件

指定 Visual FoxPro 使用哪个文件作为帮助内容。复选框的设置对应帮助的打开和关闭。如果文件名的扩展名是 .HLP，使用图形帮助。如果文件名扩展名是 .DBF，那么将使用 DBF 样式的帮助。如果未指定扩展名，则默认为图形帮助。该选项对应于 SET HELP 命令。

资源文件

指定 Visual FoxPro 用以保存资源设置的文件。复选框的设置对应于资源的打开和关闭。如果未选定这个框，则“选项”对话框中的一些选项将不能使用。有关详细内容，请参阅指定资源文件。

该选项对应于 SET RESOURCE 命令。

转换器

指定转换器应用程序的文件名。该选项对应于 _CONVERTER 系统内存变量。

菜单生成器

指定菜单生成程序的文件名。该选项对应于 _GENMENU 系统内存变量。

拼写检查器

指定拼写检查器的文件名。该选项对应于 _SPELLCHK 系统内存变量。

生存器

指定生成器应用程序的文件名。该选项对应于 _BUILDER 内存变量。

向导

指定向导应用程序的文件名。该选项对应于 _WIZARD 系统内存变量。


请参阅

_BUILDER 系统内存变量

_CONVERTER 系统内存变量

_GENMENU 系统内存变量

_SPELLCHK 系统内存变量

_WIZARD 系统内存变量

添加新标签大小

创建图形

修改目录路径和文件位置选项

选项（工具菜单）

SET DEFAULT 命令

SET HELP 命令

SET PATH 命令

SET RESOURCE 命令

指定资源文件


表单选项卡（选项对话框）

请参阅

包含表单设计器的选项。

当选择一个每个选项卡上都有的“设置为默认值”按钮时，Visual FoxPro 把选项设置保存在注册（系统窗口注册数据库）中。

选项卡选项

网格

网格线

在表单设计器中显示网格线。

对齐格线

使对象按网格线自动对齐。

水平间距（象素）

指定水平网格线之间的间隔宽度。该宽度基于选项卡上的“度量单位”选项。

垂直间距（象素）

指定垂直网格线之间的间隔高度。该高度基于选项卡上的“度量单位”选项。

显示位置

指定是否在状态栏上显示对象的位置和尺寸。

Tab 键次序

指定设置表单中 Tab 键次序时，是使用 SHIFT+CLICK（交互）鼠标方式还是使用对象排序对话框（按列表）。

度量单位

为表单和类设计器设置默认度量单位。可指定为“象素”或者foxels。

最大设计区

指定设计时表单的最大尺寸。Visual FoxPro 不允许把表单调整到大于指定的尺寸。指定用户可能希望的最小尺寸很有好处，可以让所有用户都能看到它。

模板类

可以指定一个类库和类，新建表单和表单集可以把它们作为模板。如果没有选定类，Visual FoxPro 使用基类。指定类可以很方便地使所有表单有一个一致的外观和感觉。

表单集

显示“表单集模板”对话框，从中可以选择一个表单集模板。

表单

显示“表单模板”对话框，从中可以选择一个表单模板。

生成器锁定

允许锁定生成器，这可以自动显示生成器。


请参阅

表单设计器

表格线（查看菜单）

修改表单设计器选项

对象排序对话框

选项（工具菜单）

对齐格线（格式菜单）


表单集模板对话框

请参阅

指定表单集使用的一个表单集模板 。

对话框选项

类库名

指定表单集模板的文件名。

文件类型

只有两个选项“全部文件”或者“可视类库”。

目录

列出所有目录。如果选用的文件不在当前目录中，则可从这些列出的目录中选取正确的目录。

驱动器

列出所有驱动器。如果选用的文件不在当前驱动器上，则可从这些驱动器中选取正确的驱动器。

类名

列出当前选定类库中的所有类。

网络

连接一个网络驱动器，这样可以使用网络驱动器上的文件，而不一定是本地驱动器上的文件。


请参阅

表单选项卡（选项对话框）


表单模板对话框

请参阅

指定表单使用的一个表单模板 。

对话框选项

类库名

指定表单模板的文件名。

文件类型

只有两个选项“全部文件”或“可视类库”。

目录

列出所有目录。如果选用的文件不在当前目录中，则可在此框中选择正确的目录

驱动器

列出所有驱动器。如果文件不在当前驱动器上，则可以在此框中选择正确的驱动器。

类名

列出当前选定类库中的所有类。

网络

连接一个网络驱动器，这样可以使用网络驱动器上的文件，而不一定是本地驱动器上的文件。


请参阅

表单选项卡（选项对话框）


项目选项卡（选项对话框）

请参阅

包含了有关“项目管理器”的选项。

如果选择每个选项卡上都有的“设置为默认值”按钮，则 Visual FoxPro 把选项设置保存在注册（系统窗口注册数据库）中。

选项卡选项

项目双击操作

指定在“项目管理器”中双击一个文件时，Visual FoxPro 是否运行或修改该文件。

运行选定文件

用鼠标双击一个文件时运行该文件。

修改选定文件

用鼠标双击一个文件时打开该文件进行编辑。

向导提示

指定 Visual FoxPro 自动提示您使用一个向导。当从“项目”菜单选择新文件或在项目管理器中选择“新建”按钮时，出现这些提示。


请参阅

空间选项卡, 选项（工具菜单）

修改项目管理器选项

新文件（文件菜单）

选项（工具菜单）

项目管理器


控制选项卡（选项对话框）

请参阅

包含了为指定“选项”对话框中表单选项卡上的模板类而登记可视类库的选项。这些选项也指定表单控制工具栏上“查看类”按钮中可以选择的内容，这可以简化向表单中添加用户自定义控制的工作。

当选择每个选项卡上都有的“设置为默认值”按钮时，Visual FoxPro 把选项设置保存在注册（系统窗口注册数据库）中。

选项卡选项

可视类库

在“选定”框中显示类库。

OLE 控制

在“选定”框中显示 OLE 控制。

选定

当选定“可视类库”选项时，指定在单击“表单控制”工具栏上的“查看类”按钮时，哪些库出现在快捷菜单上。“查看类”按钮简化了访问不同库的工作。

当选定“OLE 控制”选项时，指定在单击“表单控制”工具栏上的“查看类”按钮时，哪些 OLE 控制出现在快捷菜单上。“查看类”按钮简化了访问不同 OLE 控制的工作。

标签

当选定“可视类库”选项时，显示标签名。

库

当选定“可视类库”选项时显示可视类库的路径。

添加

当选定“可视类库”时，该按钮显示打开对话框，从而可以向“选定”列表中添加库。

当选定“OLE 控制”时，该按钮激活一个对话框，从中可以选择 OLE 控制添加到“选定列表”中。选择一个控制的同时对它进行注册，注册后便可以在插入对象对话框中的控制列表和其它应用程序中使用这个控制。

移去

当选定“可视类库”选项时，从“选定”框中移去选定的库。

显示

可插入对象

当选定“OLE 控制”选项时，在“选定”框中显示可插入对象的注册的 OLE 应用程序。

控制

当选定“OLE 控制”选项时，显示注册的 OLE 控制。

当您单击“表单控制”工具栏上的“查看类”按钮时，您将在快捷菜单中看到选定的库名。


请参阅

表单控制工具栏

表单选项卡（选项对话框）

插入对象（编辑菜单）

打开（文件菜单）

使用控制选项卡


国际选项卡（选项对话框）

请参阅

包含了有关日期、时间和数字格式的选项。通过这些选项可以临时或永久地改写 Visual FoxPro 的系统设置。在这个选项卡上的选项设置将反映在时间、日期和货币输出中。

选择每一个选项卡上都有的“设置为默认值”按钮时，Visual FoxPro 将把选项设置保存在注册（系统窗口注册数据库）中。

选项卡选项

使用系统设置

选定该选项时，本选项卡上全部选项均从系统读取。显示设置则是“控制面板”中的设置。在这种方式下，绝大部分选项是只读的。

如果不选定该选项，则可以指定选项设置，Visual FoxPro 使用这些设置，而不使用系统设置。

日期和时间

下面的选项设置将立即反映在该选项组右上方的方框中。例如，如果更改了“秒”选项的设置，则可以看到它正上方的框中显示时间立即改为设置的显示方式。

日期格式

指定一个日期格式，对应于 SET DATE 命令。

日期分隔符

指定一个不同的日期分隔符，比如一个虚线，将它键入到框中。这个选项对应于 SET MARK TO 命令。

世纪

选定时，指定用 4 位显示年份（例如，1995）。未选定时，指定用 2 位显示年份（例如，95）。这个选项对应于 SET CENTURY 命令。

12 小时

把时间设置为显示“AM”或“PM”的 12 小时格式。

24 小时

把时间设置为 24 小时显示格式。

秒

显示秒。

货币和数字

下列选项设置将直接反映在该选项组的右上方框中。例如，如果更改了“小数分隔符”选项的设置，则可以立即在正上方的框中看到更改效果。

货币格式

指定货币符号是出现在数字串之前还是出现在数字串之后。对应于 SET CURRENCY 命令。

货币符号

指定货币符号类型。对应于 SET CURRENCY 命令。

千位分隔符

指定小数点左方每三位插入的一个字符。对应于 SET SEPARATOR 命令。

小数分隔符

指定一个用以指示小数点位置的字符。对应于 SET POINT 命令。

小数位数

指定小数分隔符后的小数位数。对应于 SET DECIMALS 命令。

星期开始于

指定哪一天一个星期的开始。对应于 SET FDOW 命令。

年第一周

指定哪一个星期是一个年日历的开始。对应于 SET FWEEK 命令。


请参阅

修改日期、时间和数值型格式选项

选项（工具菜单）

SET DATE 命令

SET MARK TO 命令

SET CENTURY 命令

SET CURRENCY 命令

SET SEPARATOR 命令

SET POINT 命令

SET DECIMALS 命令

SET FDOW 命令

SET FWEEK 命令


查看菜单

请参阅

“查看”菜单显示报表、标签和表单等设计器及工具栏。允许您定制在表中的工作方式。

查看菜单命令

工具栏

创建、编辑、隐藏以及定制工具栏。

属性

显示“属性”窗口，从中可以设置或更改表单属性和控制属性。此命令在打开“表单设计器”或“类设计器”时可用。

浏览 <表>

在一个浏览窗口中水平显示当前表的内容。此命令在使用一个表时可用。

编辑

垂直显示选定表的内容。此命令在使用一个表时可用。

追加方式

自动将记录追加到当前表的尾部。此命令在使用一个表时可用。

数据库设计器

显示数据库设计器。此命令在使用数据库表时可用。

表设计器

显示表设计器来修改表的结构。此命令在浏览一个表时可用。

表格线

在多个窗口中移去或添加表格线。此命令在使用一个表或打开“标签设计器”、“报表设计器”、“表单设计器”或“类设计器”时可用。

设计

将新建的或已有的标签、报表或表单设置为设计方式。此命令在打开“标签设计器”、“报表设计器”、“表单设计器”或“类设计器”时可用。

Tab 键次序

为表单上的对象设置 Tab 键次序。此命令在运行“表单设计器”或“类设计器”时可用。

代码

显示代码窗口，从中可以书写、显示和编辑事件代码。此命令在打开“表单设计器”或“类设计器”时可用。

表单控制工具栏

显示表单控制工具栏，可以使用它在表单上创建控制。此命令在打开“表单设计器”或“类设计器”时可用。

布局工具栏

显示布局工具栏，可以使用它对齐、放置控制以及调整控制大小。此命令在打开“标签设计器”、“报表设计器”、“表单设计器”或“类设计器”时可用。

调色板工具栏

显示调色板工具栏，可以使用它指定一个控制的前景色和背景色。此命令在打开“标签设计器”、“报表设计器”、“表单设计器”或“类设计器”时可用。

显示位置

在状态栏中显示表单、报表或标签中选定对象的位置、高度和宽度。此命令在打开“标签设计器”、“报表设计器”、“表单设计器”或“类设计器”时可用。

预览

在打印预览中显示报表或标签。此命令在打开“标签设计器”或“报表设计器”时可用。

报表控制工具栏

显示报表控制工具栏，可以使用它在报表上创建控制。此命令在打开“标签设计器”或“报表设计器”时可用。

常规选项

允许为整个菜单系统指定代码。此命令在打开“菜单设计器”时可用。

菜单选项

允许为特定的菜单指定代码。此命令在打开“菜单设计器”时可用。

最大化顶部窗格

放大“查询设计器”和“视图设计器”的上窗格。此命令在打开“查询设计器”或“视图设计器”时可用。

最小化顶部窗格

缩小“查询设计器”和“视图设计器”的上窗格。此命令在打开“查询设计器”或“视图设计器”时可用。

数据环境

显示“数据环境设计器”。此命令在打开“表单设计器”、“报表设计器”或“标签设计器”时可用。


请参阅

调整控制的放置

对齐控制

追加方式

浏览窗口

更改控制颜色

调色板工具栏

数据库设计器

布局工具栏

预览结果

属性

报表控制工具栏

设置报表数据源

表设计器


工具栏（查看菜单）

请参阅

允许创建、编辑、隐藏和定制工具栏。

工具栏对话框选项

工具栏

列出紧跟着自定义工具栏的内置工具栏。选定的工具栏显示在菜单栏下面或活动输出窗口中。

新建

显示“新建工具栏”对话框，在其中为新建的工具栏输入名称。

重置

将选定工具栏返回到它的内置状态。如果选定了自定义工具栏，这个按钮将变成“删除”。不能重置自定义工具栏。

删除

删除选定的自定义工具栏。如果选定了内置工具栏，这个按钮将变成“重置”。不能删除内置工具栏。

定制

显示定制工具栏对话框，从中可以添加或删除工具栏按钮。

彩色按钮

在内置工具栏和自定义工具栏中显示彩色按钮。如果使用的是黑白监视器，应清除此复选框。

大按钮

显示比标准尺寸大的工具栏按钮。如果监视器具有高分辨率，您可能希望显示大按钮。

显示工具提示

当鼠标指针在工具栏任何一个按钮上方时，此命令显示该按钮的名称。


请参阅

定制工具栏对话框


定制工具栏对话框

请参阅

允许添加和删除工具栏按钮。可以使用的按钮被分类显示。单击一个按钮可以查看它的说明。

当在工具栏对话框中选择“定制”命令时，此对话框出现。

对话框选项

分类项

列出按钮的分类。

按钮

显示您在“分类”框中选定的分类所包含的按钮。要添加按钮，把它拖动到所需工具栏中或者把它拖放到 Visual FoxPro 桌面上来创建一个新工具栏。

说明

说明选定的按钮。


请参阅

自定义工具栏

工具栏（查看菜单）


属性（查看菜单）

请参阅

显示属性窗口。使用“属性”窗口设置或更改表单属性和控制属性。此命令在打开表单设计器和类设计器时可用。


请参阅

将属性和方法添加到类中

允许用户拖放

类设计器

创建数组属性

定义表单行为

表单设计器

属性窗口

设置属性


浏览 <表>（查看菜单）

请参阅

在浏览窗口中显示当前表或视图的内容，允许您检查和更改表或视图中的数据。

在“浏览”、“编辑”或“追加”方式的视图中打开一个表或视图时，此命令可用。


请参阅

追加方式（查看菜单）

BROWSE 命令

浏览窗口

编辑（查看菜单）

EDIT 命令


编辑 <表>（查看菜单）

请参阅

显示选定表或视图的内容，每条记录的字段上下列出。允许您检查和更改表或视图中的数据。

在“浏览”、“编辑”或“追加”方式的视图中打开一个表时，此命令可用。


请参阅

追加方式（查看菜单）

BROWSE 命令

浏览（查看菜单）

EDIT 命令


追加方式（查看菜单）

请参阅

当在最后一条记录后输入时，自动将新记录添加到当前表或视图末尾。您能够在表或视图的编辑视图或浏览视图中追加记录。

在“浏览”、“编辑”或“追加”方式的视图中打开一个表或视图时，此命令可用。


请参阅

APPEND 命令

BROWSE 命令

浏览（查看菜单）

编辑（查看菜单）

EDIT 命令


数据库设计器（查看菜单）

请参阅

显示数据库设计器，可以在其中查看或修改当前数据库中包含的全部表、视图和关系。

在“浏览”、“编辑”或“追加”方式的视图中打开一个数据库表时，此命令可用。


请参阅

数据库设计器


表设计器（查看菜单）

请参阅

显示表设计器，在其中可以创建和修改数据库表、自由表、表字段和索引的结构。

当在“浏览”、“编辑”或者“添加”方式的视图中打开表时，此命令可用。


请参阅

表设计器


设计（查看菜单）

请参阅

将新建的或已有的标签、报表、表单或类设置为设计方式。此命令在创建新的或者打开一个已有的标签、报表或表单时可用并被选定。

要关闭此命令，选择预览命令（标签和报表）或者Tab 键次序命令（表单）。


请参阅

表单设计器

标签设计器

预览（查看菜单）

报表设计器

Tab 键次序（查看菜单）


Tab 键次序（查看菜单）

请参阅

为表单上的对象设置 Tab 键次序。

如果您在表单选项卡（选项对话框） 中为“Tab 键次序”选择了“交互式”选项，一定数目的框出现在表单上。按住 SHIFT 键并且按您希望的顺序单击各框，即可更改 Tab 键次序。使用这个方法可简单地创建自定义 Tab 键次序，Tab 键次序有别于行顺序或列顺序。

如果您在表单选项卡（选项对话框） 中为“Tab 键次序”选择了“按照列表”选项，“对象顺序”对话框出现。使用这个方法可简单地按行或按列调整Tab 键次序。


请参阅

设置控制的 Tab 键次序

表单选项卡（选项对话框）

TabIndex 属性


对象排序对话框
对象顺序对话框

请参阅

“对象顺序”对话框调整使用键盘时表单上对象的访问顺序。如果您在表单选项卡（选项对话框） 上为“Tab 键次序”选择了“按照列表”选项，将显示该对话框。

对话框选项

对象列表

列出表单中除图形和文本对象外的全部对象。对象按照它们当前的键盘访问顺序列出。要更改该顺序，单击对象图片左侧的按钮并且将其拖动到列表中某一位置，该位置对应于它在所需访问顺序中的位置。

按行顺序

调整对象顺序，并从上面开始按照从左到右横过表单的顺序访问对象。

按列顺序

调整对象顺序，并从左侧开始按照从上到下穿过表单的顺序访问对象。


请参阅

表单选项卡（选项对话框）

设置控制的 Tab 键次序

TabIndex 属性


预览（查看菜单）

请参阅

在打印预览中显示一个报表或标签。要关闭打印预览，您可以单击打印预览工具栏上的“关闭预览”按钮或者在“查看”菜单上选择设计命令。

当在报表设计器或标签设计器中工作时，此命令可用。


请参阅

设计（查看菜单）

标签设计器

预览结果

打印预览工具栏

报表设计器


代码（查看菜单）

请参阅

显示代码窗口，从中可以书写、显示和编辑代码。

此命令在打开表单设计器时可用。


请参阅

代码窗口

表单设计器


表单控制工具栏（查看菜单）

请参阅

显示“表单控制”工具栏，可以使用它在表单上创建控制。该命令旁边的选定标记指示正在显示该工具栏。

此命令在打开表单设计器或类设计器时可用。


请参阅

类设计器

表单控制工具栏

表单设计器


布局工具栏（查看菜单）

请参阅

显示布局工具栏，可以使用它对齐、放置控制以及调整控制大小。该命令旁边的选定标记指示当前正在显示该工具栏。

此命令在打开表单设计器、类设计器、报表设计器或标签设计器时可用。


请参阅

对齐报表控制

类设计器

表单设计器

标签设计器

布局工具栏

报表设计器

调整控制的大小


调色板工具栏（查看菜单）

请参阅

显示调色板工具栏，可以用它指定一个控制的颜色。该命令旁边的选定标记指示当前正在显式该工具栏。

此命令在打开表单设计器、报表设计器或标签设计器时可用。


请参阅

调色板工具栏

表单设计器

报表设计器

标签设计器


表格线（查看菜单）
网格线（查看菜单）

请参阅

移去或添加直线以帮助读取数据或放置对象。如果显示网格线，一个选定的标记将出现在该命令左侧。选择该命令在“打开”和“关闭”之间切换。

如果正在以“浏览”或“追加”方式查看表，“网格线”命令在记录和字段之间添加水平和垂直直线。在一个“编辑”视图中，在记录之间添加水平直线。

如果正在设计一个表单、报表或标签，“网格线”命令在设计区放置一个网格。


请参阅

调整控制的放置

浏览（查看菜单）

编辑（查看菜单）


显示位置（查看菜单）

请参阅

在状态栏中显示表单、报表或标签中选定对象的位置、高度和宽度。如果选定多个对象，“显示位置”显示最近选定对象的位置。

对报表或标签中的选定对象，它的位置和大小显示在状态栏的左半部。使用当前标尺的度量单位，显示对象上、左、下和右边界的位置，紧接着是它的高度和宽度，如果未选定对象，将显示鼠标指针的位置。

对表单中的选定对象，它的位置和大小显示在状态栏的右半部。前两个数字显示了对象左上角的水平和垂直位置。第二组两个数字显示了对象的宽度和高度。位置和大小是从设计器窗口左上角开始从左到右以象素计算出的。

当在表单设计器，报表设计器或标签设计器中工作时，此命令可用。


请参阅

调整控制的放置

表单设计器

标签设计器

报表设计器


报表控制工具栏（查看菜单）

请参阅

显示报表控制工具栏，可以使用它创建报表上的控制。该命令旁边的选定标记指示当前正在显示该工具栏。

当在报表设计器中工作时，此命令可用。


请参阅

报表控制工具栏

报表设计器


通用选项（查看菜单）
常规选项（查看菜单）

请参阅

允许为整个菜单系统指定代码。此命令在打开菜单设计器时可用。

通用选项对话框

过程

创建菜单过程代码。如果代码超出显示的编辑区，激活滚动条。

编辑

打开一个编辑窗口，从而可以代替“通用选项”对话框在其中创建代码。要激活编辑窗口，在“通用选项”对话框中选择“确定”。

位置

替换

使用新的菜单系统替换已有的菜单系统。

追加

将新菜单系统添加在活动菜单系统的右侧。

在...之前

将新菜单插入指定菜单的前面。这个选项显示一个包含活动菜单系统名称的下拉列表。要插入新菜单，选择您希望新菜单在其前面的菜单名。

在...之后

将新菜单插入指定菜单的后面。这个选项显示一个包含活动菜单系统名称的下拉列表。要插入新菜单，选择您希望新菜单紧跟其后的菜单名。

菜单代码

初始化

打开一个编辑窗口，从中可以向菜单系统添加初始化代码。要激活编辑窗口，在“通用选项”对话框中选择“确定”。

清理

选项对话框打开一个编辑窗口，从中可以向菜单系统添加清理代码。要激活编辑窗口，在“通用选项”对话框中选择“确定”。


请参阅

创建菜单系统

菜单设计器

菜单选项（查看菜单）


菜单选项（查看菜单）

请参阅

允许为特定的菜单指定代码。此命令在打开菜单设计器时可用。

菜单选项

名称

包含菜单名。默认情况下，这与“菜单设计器”的“提示”列中的文本相同。可在“提示”列中键入一个新名称来更改它。

过程

提供创建菜单过程代码或显示已存在代码的空间。如果代码超出显示的编辑区，将激活滚动条。

编辑

打开一个编辑窗口，从而能够代替“菜单选项”对话框在其中创建代码。要激活编辑窗口，在“菜单选项”对话框中选择“确定”。


请参阅

创建菜单系统

通用选项（查看菜单）

菜单设计器


数据环境（查看菜单）

请参阅

显示数据环境设计器，可以使用它为表单、表单集以及报表创建和修改数据环境。

此命令在打开表单设计器、报表设计器或标签设计器时可用。


请参阅

控制报表的数据源

创建一对多报表

数据环境设计器

在数据环境设计器中编辑关系

表单设计器

标签设计器

报表设计器

设置报表数据源

设置数据环境


 最大化顶部窗格（查看菜单）

请参阅

放大查询和视图设计器的顶部窗格，因此您能够看到查询或视图中全部的表。

此命令在打开“查询设计器”或“视图设计器”时可用。


请参阅

最小化顶部窗格（查看菜单）

查询和视图设计器


最小化顶部窗格（查看菜单）

请参阅

减小查询和视图设计器的顶部窗格，因此您能够看到窗口下半部分中的选项卡。

此命令在打开“查询设计器”或“视图设计器”时可用。


请参阅

查询和视图设计器

最大化顶部窗格（查看菜单）


窗口菜单

重排、显示和隐藏窗口。

窗口菜单命令

全部重排

显示全部打开的窗口使其不重叠。

隐藏

从视野中移去活动窗口，但不将其关闭。

全部隐藏

从用户显示中移去全部窗口，但仍保持其打开状态。在按下 SHIFT 键的同时选择“窗口”菜单时，此命令可用。

全部显示

显示所有打开的窗口，在按下 SHIFT 键的同时选择“窗口”菜单时，此命令可用。

清除

从 Visual FoxPro 主窗口中清除所有的文本。

循环

把打开的活动窗口依次置前。

命令窗口

显示可键入 Visual FoxPro 命令的命令窗口。

查看窗口

显示查看窗口，在其中可以简单地打开表、建立关系和设置工作区属性。

1,2,3,...9

显示所有打开窗口的名称并允许从中选择。

其他窗口

显示“其他窗口”对话框，用户可以从中选择一个待激活的窗口。当用户有多于九个的打开窗口时，此命令显示于“窗口”菜单。


全部重排（窗口菜单）

请参阅

不重叠地显示所有打开的窗口、设计器和窗口中的文件。即使时使用隐藏命令 隐藏的窗口也将显示。


请参阅

隐藏命令（窗口菜单）


隐藏（窗口菜单）

请参阅

从屏幕中移去活动窗口，隐藏窗口保持打开状态，但不可见。所有打开窗口名列于窗口菜单的底部。


请参阅

1, 2, 3...9 命令（窗口菜单）


全部隐藏（窗口菜单）

请参阅

从屏幕中移去所有窗口，但仍保持其打开，以使其名称显示于“窗口”菜单的底部。

在按下 shift 键的同时选择“窗口”菜单时，此命令可用。“窗口”菜单中隐藏命令替换为“全部隐藏”命令和全部显示命令。

提示

通过按下 SHIFT + CTRL 和按下 ALT 键，可以暂时隐藏活动输出窗口前的所有窗口。释放 ALT 键将显示窗口。


请参阅

全部显示（窗口菜单）

隐藏（窗口菜单）


全部显示（窗口菜单）

请参阅

显示所有的打开窗口。打开窗口的名称显示于“窗口”菜单的底部。

在选择“窗口”菜单按下 SHIFT 键时，此命令可用。“窗口”菜单中隐藏命令替换为“全部隐藏”命令和全部显示命令。


请参阅

全部隐藏（窗口菜单）


清除（窗口菜单）

从 Visual FoxPro 主窗口中清除所有文本。


循环（窗口菜单）

将活动的打开窗口依次置前。

快捷键

CTRL + F1


命令窗口（窗口菜单）

请参阅

显示并激活命令窗口，用户可在其中直接键入 Visual FoxPro 命令并在工作时查看生成的命令。

快捷键

CTRL + F2


请参阅

命令窗口


查看窗口（窗口菜单）

请参阅

显示查看窗口，在其中可轻易地打开表、建立关系和设置工作区属性。


请参阅

查看窗口

浏览（查看菜单）

属性（表菜单）


1,2,3,...9（窗口菜单）

请参阅

显示所有打开窗口的名称。此列表出现在“窗口”菜单的底部。可以选择从 1 到 9 的窗口名或快捷键激活窗口。如果打开的窗口多于九个，则可以选择其他窗口命令（窗口菜单）。


请参阅

其他窗口（窗口菜单）


其他窗口（窗口菜单）

请参阅

显示“其他窗口”对话框，在其中可以选择一个要激活的窗口。

当打开的窗口多于九个时，此命令出现在“窗口”菜单中。“窗口”菜单中的固有项列在九个窗口之上。


请参阅

1,2,3,...9（窗口菜单）


生成器（快捷菜单）

请参阅

打开一个生成器。利用生成器可以很方便地创建表单和控制。当您在表单设计器.中单击右键时此命令出现。如果尚未选定对象，则此命令启动表单生成器，如果选定的对象有多个，则显示自动格式生成器。它与表单控制工具栏上的“生成器锁定”按钮相对应。


请参阅

自动格式生成器

表单生成器

表单控制工具栏

表单设计器

使用生成器


代码页（快捷菜单）

请参阅

显示用于跨平台数据共享的代码页对话框。当您在项目管理器中的任意位置单击右键时此命令出现。当您在项目管理器中选定了文本文件、查询、图标或位图文件名并单击右键时，此命令可用。


请参阅

检查代码页标记

代码页对话框

确定项目文件的代码页

项目管理器

理解代码页


折叠（快捷菜单）

请参阅

折叠选定表，仅显示其标题。在数据库设计器中的一个表上单击右键时，此命令出现。


请参阅

在数据库中加入表

数据库设计器

展开（快捷菜单）


全部折叠（快捷菜单）

请参阅

折叠所有的表，仅显示其标题。当您在数据库设计器中的某处而不是表中单击右键时，此命令出现。


请参阅

数据库设计器

全部展开


定制（快捷菜单）

请参阅

显示定制工具栏对话框。当您在任意工具栏或工具栏控制上单击右键时，显示此命令。


请参阅

定制工具栏对话框

工具栏（查看菜单）


数据库设计器工具栏（快捷菜单）

请参阅

显示数据库设计器工具栏。当您在任意工具栏或工具栏控制上单击右键时显示。


请参阅

数据库设计器工具栏

数据库设计器


删除（快捷菜单）

请参阅

从“数据库设计器”窗口中删除一个表。当您在数据库设计器中的一个表上单击右键时，显示此命令。


请参阅

数据库设计器

移去表 (数据库菜单)


展开（快捷菜单）

请参阅

展开一个折叠的表，显示其字段名。当您在数据库设计器中的一个已折叠表上单击右键时，显示此命令。


请参阅

折叠（快捷菜单）

数据库设计器

全部展开（快捷菜单）


全部展开（快捷菜单）

请参阅

展开选项卡中的全部折叠项。当您在数据库设计器中单击右键时，此命令显示。

在项目管理器中，可以展开全部的折叠组，以便看到组中所包含的所有文件。当您选定一个折叠的组并单击右键时，此命令出现。


请参阅

全部折叠（快捷菜单）

数据库设计器

展开（快捷菜单）

项目管理器


表单设计器（快捷菜单）

请参阅

显示表单设计器工具栏。当您在任何工具栏或工具栏控制上单击右键时，此命令出现。


请参阅

表单设计器工具栏

表单设计器


帮助（快捷菜单）

请参阅

显示选定项的帮助信息。


请参阅

目录 (帮助菜单)


打印预览工具栏（快捷菜单）

请参阅

显示打印预览工具栏。当您在任何工具栏或工具栏控制上单击右键时，此命令出现。


请参阅

打印预览工具栏


查询设计器工具栏（快捷菜单）

请参阅

显示查询设计器工具栏。当您在任何工具栏或工具栏控制上单击右键时，此命令出现。


请参阅

查询设计器工具栏


移去关系（快捷菜单）

请参阅

移去选定表的关系。当您在数据库设计器中两表间的关系线上单击右键时，此命令出现。


请参阅

数据库设计器

编辑关系命令 (数据库菜单)


报表设计器工具栏（快捷菜单）

请参阅

显示报表设计器工具栏。当您在任何工具栏或工具栏控制上单击右键时，此命令出现。


请参阅

报表设计器工具栏

报表设计器


重置为默认值（快捷菜单）

请参阅

把选定属性重置为默认值。当您在属性窗口中的一个设置为非默认值的属性上单击右键时，此命令出现。这些用户自定义的属性以黑体显示。


请参阅

属性（查看菜单）


常用工具栏（快捷菜单）

请参阅

在 Visual FoxPro 屏幕的顶部显示常用工具栏。当您在任何工具栏或工具栏控制上单击右键时，此命令出现。


请参阅

常用工具栏

工具栏（查看菜单）


视图设计器（快捷菜单）

请参阅

显示视图设计器工具栏。当您在任何工具栏或工具栏控制上单击右键时，此命令出现。


请参阅

视图设计器工具栏

工具栏（查看菜单）


提示选项对话框

请参阅

允许在定制的菜单系统中指定提示的选项。使用此对话框可以定义键盘快捷键，确定废止菜单或菜单项的时间。当选定菜单或菜单项时，在状态栏中包含相应信息，指定菜单标题的名称以及在 OLE 可视编辑期间控制菜单标题位置。

当在菜单设计器中选择“选项”按钮时此对话框出现。

对话框选择项

注释

提供输入个人使用的注释的空间。在任何情况下注释都不影响所生成的代码，运行菜单程序时 Visual FoxPro 将忽略注释。

快捷键

显示键定义对话框，可在其中定义快捷键。

跳过

显示表达式生成器。在“表达式生成器”的 Skip For 框中，键入表达式来确定菜单或菜单项是否可用。

菜单位置

显示菜单位置对话框，可在其中指定当用户在应用程序中编辑一个 OLE 对象时，菜单标题的位置。

信息

显示“表达式生成器”。在“表达式生成器”的“信息”框中，可以键入用于说明菜单选择的信息，说明信息将出现在 Visual FoxPro 状态栏中。

主菜单名

显示主菜单名对话框，可在其中指定可选的菜单标题。

附注

此选项仅在“菜单设计器”窗口的“结果”区域显示“命令”、“子菜单”或“过程”时可用。


请参阅

表达式生成器

键定义对话框

菜单设计器

菜单位置对话框

主菜单名对话框

PROMPT( ) 函数


键定义对话框

请参阅

指定菜单或菜单项的可选快捷键。Visual FoxPro 菜单项的键盘快捷键是 ctrl 键和其它键的组合。

当在提示选项对话框中选择快捷键时，出现此对话框。

对话框选择项

键标记

显示键组合。如果菜单项没有键盘快捷键，则 Visual FoxPro 在“键标签”框中显示“(按下要定义的键)”。在其中键入组成快捷键的键组合。

键说明

显示需要出现在菜单项旁边的文本。除非将其更改，否则该框重复“键标记”框的键盘快捷键。但是用户可将更改它。例如，如果“键标记”和“键文本”都是 CTRL + R，则用户可将“键文本”改为 ^R。

附注

不能将 CTRL + J 指定为菜单项的键盘快捷键。


请参阅

菜单设计器

提示选项对话框


菜单位置对话框

请参阅

指定当用户在应用程序中编辑一个 OLE 对象时，菜单标题的位置。

当在提示选项对话框中选定“菜单位置”时，出现此对话框。

对话框选择项

无

指定菜单标题不设置在菜单栏上。这等同于不选择任何选项。

左

指定将菜单标题设置在菜单栏中左边的菜单标题组中。

中

指定将菜单标题设置在菜单栏中中间的菜单标题组中。

右

指定将菜单标题设置在菜单栏中右边的菜单标题组中。


请参阅

菜单设计器

提示选项对话框


主菜单名对话狂
主菜单名对话框

请参阅

指定菜单标题。当在提示选项对话框中选择“主菜单名”选项时，出现此对话框。

附注

仅当“菜单设计器”窗口中的“结果”区域显示“命令”、“子菜单”或“过程”（而不是主菜单名）时，“提示选项”对话框中的“主菜单名”选项才可用。

生成的菜单程序中的名称或编号是可选的，如果未指定它们， Visual FoxPro 自动提供。使用该名称或编号，可以在运行时引用菜单或菜单项。

对话框选择项

主菜单名

指定一个菜单名，在文本框中键入菜单名。


请参阅

菜单设计器

提示选项对话框


条件对话框
满足条件对话框

请参阅

指定条件，该条件决定在查询输出中包含哪一组记录。当在查询设计器的分组依据标签选项卡选择“满足条件”时，该对话框出现。

对话框选择项

字段名

指定一个函数、字段名或其它表达式。单击“字段名”框尾部的按钮，可以从函数列表、每个表的字段名列表中选择，或使用表达式命令来显示“表达式生成器”对话框。若用户选择一个函数，则在子菜单中显示该函数可使用的字段名列表。

否

对比较条件取反。

比较条件

指定比较条件。选项有 Equal、Like、Exactly Like、More Than、Less Than、Is NULL、Between 和 In。

实例

指定要与字段进行比较的值。

大小写

指定在条件中是否与实例的大小写（大写或小写）相匹配。

插入

在所选定条件上之上插入一空白行。

移去

从“字段名”列表中移去所选行。

或

在条件列表的两行之间选择一个逻辑“或”(OR) 条件。


请参阅

分组条件

查询设计器

SELECT - SQL 命令


表属性对话框

请参阅

设置行级规则、有效性错误文本和表的注释，当在表设计器中选择“表属性”时，此对话框出现。

附注

必须打开一个数据库，以使“表属性”按钮出现于“表设计器”中，自由表不能有相关的规则、触发器或注释。

每个设置右侧的按钮可以显示表达式生成器。

对话框选择项

有效性规则

指定实施数据行级有效性检查的规则。

有效性说明

指定当输入不符合行级有效性规则时应显示的错误信息。

INSERT 触发器

指定一个规则，每次向表中插入或追加记录时触发该规则。

UPDATE 触发器

指定一个规则，每次更新表中记录时触发该规则。

DELETE 触发器

指定一个规则，每次从表中删除记录时触发该规则。

注释

提供键入表注释的空间。在“项目管理器”中选定一个表时，将在“项目管理器”的底部把键入的文本作为该表的注释显示。


请参阅

表达式生成器

表设计器


打开 (表)对话框
打开（表）对话框

请参阅

打开一个数据库并显示它的表或视图，以便将表或视图添加到“查看”窗口的“别名”列表中。

当在查看窗口中选择“打开”时，此对话框出现。

当在命令窗口中发出 BROWSE 命令时，也出现此对话框。

对话框选择项

数据库

默认显示当前数据库。用户可从下拉列表框中选择其它打开的数据库。

数据库中的表/视图

根据选择了“表”还是“视图”选项，显示当前数据库中的表或视图。双击一个表或视图，可以将其添加到“查看”对话框中的“别名”列表中。

其他

显示打开对话框，可以在其中打开一个另外的表。因为用户不能使用存储于不用数据库中的视图，所以在用户选定“视图”选项时该按钮无效。

选择

表

在“数据库表”框中显示当前数据库中的表。

视图

在“数据库视图”框中显示当前数据库中的视图。

独占

指定表是以独占方式打开（仅当前用户可访问）还是在网络上共享使用。


请参阅

BROWSE 命令

命令窗口

打开 (文件菜单)

查看窗口


设置索引顺序对话框

请参阅

设置子表的索引顺序。当在查看窗口中设置一个关系的父表，然后在“查看”窗口的“别名”列表中单击一个子表时（如果该子表还未设置索引顺序），此对话框出现。


请参阅

SET INDEX 命令

查看窗口 (窗口菜单)


一对多对话框

请参阅

建立一对多关系。与父表中的一条记录相对应，子表可包含多个记录。对应于 SET SKIP 命令。

当在查看窗口中选择“一对多”按钮时，此对话框出现。

至少存在一条包含所选表的关系时，“一对多”按钮才可用。

对话框选择项

子别名

列出父别名的子别名，其名称在对话框的顶部给出。

选定别名

列出当前与父表有一对多关系的所有表的别名。

移动

将“子别名”框中选定的子别名复制到“选定别名”框中。若要使此按钮可用，必须在“子别名”框中选定一个别名。

全部

将“子别名”框中的所有子别名复制到“选定别名”框中。

删除

从“选定别名”框中删除选定的别名，若要使此按钮可用，必须在“选定别名”框中选定一个别名。

全部删除

从“选定别名”框中删除全部别名。


请参阅

在表之间建立关系

一对多表单向导

SET RELATION 命令

SET SKIP 命令

查看窗口


表达式生成器

请参阅

允许创建并编辑表达式。一个表达式可以简单得象一个字段名，也可以象一个包括 IF 函数，级连和数据类型转换的计算一样复杂。“表达式生成器”的主要目标是通过提供方法中每一步骤的合适选项的列表使创建表达式更容易。该对话框可从设计器、窗口、生成器和向导中访问。

若要创建表达式，可直接在表达式框中键入，或者从对话框中的函数下拉列表中选取，并将其粘贴到表达式框中。

在表达式中处理字符串时，以下函数非常有用：

若要	使用以下函数
c
从字符表达式中删除前导空格和后继空格	ALLTRIM( )
删除前导空格	LTRIM( )
删除后继空格	RTRIM( )
在字符串的左侧、右侧或两侧添加指定字符	PADL( ), PADR( ), PADC( )
在比较中只处理部分字符串	SUBSTR( )
使用从字符串的左侧开始指定数目的字符	LEFT( )
使用从字符串的右侧开始指定数目的字符	RIGHT( )
切换大小写字母	UPPER( ), LOWER( )
将字符串转换成大写	PROPER( )
将一个数值型字段转换成一个字符串	STR( )
对话框选择项

函数

包含四种函数类型的列表框。当从四种类型的某一种中选择一个函数时，Visual FoxPro 自动将其粘贴至表达式框内。在建立远程视图的表达式时，Visual FoxPro 仅列出特定于目标后台数据的函数。

字符串

列出可用的字符串函数。

逻辑

列出可用的逻辑函数。

数学

列出可用的数学函数。

日期

列出可用的日期和时间函数。

表达式

显示正在创建或编辑的表达式。

字段

列出当前表或视图中的字段。

若要将字段粘贴入表达式框，既可双击该字段也可选定该字段并按 ENTER 键。

若要显示不同表中的字段，应在“来源于表”框中选定另外的表。

来源于表

列出打开的表和视图。可以选择表或视图来更新“字段”框。

变量

列出系统内存变量、数组和已创建的内存变量。

若要将一个变量粘贴入表达式框，既可双击该变量也可选定该变量并按 ENTER 键。

检查

检查表达式框中表达式的语法。如果表达式是有效的，“表达式有效”显示于状态栏中。如果表达式是无效的，Visual FoxPro 显示一条错误信息。该选项不可用于远程视图。

附注

如果用户在表达式中包括一个用户自定义的函数调用，则“检查”将指示一条错误，但在运行中表达式求值时不必指示错误。

选项

显示“表达式生成器选项”对话框，可在其中设置“表达式生成器”的参数。


请参阅

ALLTRIM( ) 函数

生成打印表达式

表达式生成器选项对话框

IIF( ) 函数

LEFT( ) 函数

LOWER( ) 函数

LTRIM( ) 函数

PADC( ) 函数

PADL( ) 函数

PADR( ) 函数

PROPER( ) 函数

RIGHT( ) 函数

RTRIM( ) 函数

SET ANSI 命令

SET EXACT 命令

STR( ) 函数

SUBSTR( ) 函数

UPPER( ) 函数


表达式生成器选项对话框

请参阅

设置显示于表达式生成器中各项的参数。在表达式生成器中选择“选项”时，此对话框出现。

对话框选择项

函数

使用这些选项可以更改显示在“表达式生成器”中的字符串函数、数学函数、逻辑函数和日期函数的内容。用户可选择把所有这些内容都显示在“表达式生成器”的“字符串”框中，或仅选择所需要的内容。若要选定或移去多个项，在作选择时按下 CTRL 键。

字符串

显示框中的所有字符串函数。所有选定的字符串函数都显示于“表达式生成器”中。

数学

显示框中的所有数学函数。所有选定的数学函数都显示于“表达式生成器”中。

逻辑

显示框中的所有逻辑函数。所有选定的逻辑函数都显示于“表达式生成器”中。

日期

显示框中的所有日期函数。所有选定的日期函数都显示于“表达式生成器”中。

附注

通过按 CTRL + 鼠标左键来选择单独的项。用主鼠标按钮单击第一项然后对最后一项按 SHIFT + 鼠标左键可以选择连续的项组。

全部

选定框中的所有函数，使其作为选项出现于“表达式生成器”中。

清除

解除框中所有函数的选定，使其不出现在“表达式生成器”中。

字段别名

这些选项指定了表别名或视图别名是否出现以及如何出现在表达式中。

总是添加别名

指定表达式中使用的字段总是带有表名或视图名。

仅添加未选定的别名

指定有多个表或视图打开的情况下，仅当表达式中使用的字段所在的表或视图没有出现在查看窗口的别名列表中时，该字段才带有表名或视图名。“别名”列表中选定的表名或视图名不添加在表达式使用的字段中。

从不添加别名

指定在创建表达式时，字段名不包含它们所在表或视图的名称。

显示系统内存变量

指定系统内存变量是否显示于“表达式生成器”中。如果仅需参阅已定义的系统内存变量，应关闭该选项。


请参阅

表达式生成器

查看窗口


转换选项对话框

请参阅

将 FoxPro 2.6 的.PJX、.FPC、.SCX、.FRX 或 .LBX 文件转换为 Visual FoxPro 文件。当从“文件”菜单中选择“打开”并选定 FoxPro 2.6 文件时，或在“命令”窗口内键入 MODIFY PROJECT、MODIFY FORM、MODIFY REPORT 或者 MODIFY LABEL 并从“打开”对话框中选择 FoxPro 2.6 文件时，此对话框出现。

对话框选择项

功能性转换

创建表单和控制图象，并将代码定位在对象属性，事件和方法中的位置上。功能性转换提供直接的 FoxPro 2.6 READ 兼容性，以便在不进行额外的人工更改的情况下在 Visual FoxPro 中使用表单。若要获得完整的事件模型功能，必须清除页面和页框，更改表单集的 WindowType 属性，并且在方法和事件中人工重新定位代码。有关详细内容，请参阅检查转换的 FoxPro 2.6 屏幕。

可视性转换

创建表单及所有控制的图象，但将所有代码从原始 FoxPro 2.6 项目或屏幕中复制为不可编译 .PRG 文件。如果想在不清除页面和页面框的情况下迁移到 Visual FoxPro 全面的功能，应选择“可视性转换”。更改表单集的 WindowType 属性并逐个对象人工进行代码的重新定位工作。有关详细内容，请参阅检查转换的 FoxPro 2.6 屏幕。


请参阅

检查转换的 FoxPro 2.6 屏幕

命令窗口

转换 FoxPro 2.6 文件

转换 FoxPro 2.6 标签文件

转换 FoxPro 2.6 项目

转换 FoxPro 2.6 报表

转换 FoxPro 2.6 屏幕

MODIFY FORM 命令

MODIFY LABEL 命令

MODIFY PROJECT 命令

MODIFY REPORT 命令

WindowType 属性


文件管理器对话框

请参阅

执行一系列操作，比如文件查找、排序、移动、重命名、复制和删除等。当用户在命令窗口中键入 FILER 时显示“文件管理器”对话框。

对话框选择项

文件名

默认情况下，提供目录和文件名，和以字节为单位的大小，最后修改文件或目录的日期和时间，以及文件的属性。

驱动器

指定当前驱动器。

目录

指定当前目录或子目录，已选定文件保持选定而且即使用户更改目录也依然如此。

显示下列文件

指定欲显示的文件。指定文件名及扩展名或包含通配字符的文件名和扩展名的任何部分。包含几种规格时应使用分号把规格说明隔开。例如，若要显示所有的 .DBF 和 .APP 文件，则需输入：*.PBF;*.APP。

全部选定

选定可滚动列表内的所有文件。

不选定

在所有目录或子目录下，解除对所有选定文件的选定。

切换选定

在当前目录或子目录下，解除对所有选定文件的选定并选定所有未选定文件。

查找

显示“查找文件”对话框，以确定查找文件的条件。

编辑

对所有选定的文件打开编辑窗口。

复制

显示“复制文件”对话框，以便复制文件。

属性

显示“属性”对话框，其中显示已选定文件的属性。

移动

显示“移动文件”对话框，以便用户将文件移至其它目录或子目录。

重命名

显示“重命名文件”对话框，以便重新命名已选定文件。

删除

显示“删除文件”对话框，以便删除已选定文件。

大小

显示“大小”对话框，以字节为单位显示文件的大小。

排序

显示“排序”对话框，以便设置文件的显示顺序。

目录树

显示目录树，说明当前驱动器上的目录或子目录的文件结构。

在目录树显示时，可用下列选项：

重命名

显示“重命名目录”对话框，以便重新命名目录或子目录。

复制

显示“复制目录”对话框，以便复制目录或子目录。

更改当前目录

更改工作目录或子目录。

移动

显示“移动目录”对话框，以便移动一个或多个目录或子目录。

创建目录

显示“创建目录”对话框，以便创建新的目录或子目录。

删除

显示“删除目录”对话框，以便删除一个或多个目录或子目录。

大小

显示“大小”对话框，它显示有关选定目录或子目录大小的信息。

文件

显示文件管理器。


请参阅

命令窗口

FILER 命令


1815
“<临时表>”必须由 SELECT ... INTO TABLE 创建。  (1815)

在连续查询中不能使用某些临时表。您试图在另一条 SELECT 语句中使用一个重包装(re-packaged)的临时表作为源。建议用 INTO TABLE 语句。


1832
“<字段> | <变量>”不唯一，必须加以限定。  (1832)

对字段或变量进行了多重引用。例如，当使用 TESTDATA 数据库并执行下述命令时，由于在 CUSTOMER 表和 ORDERS 表中同时存在 cust_id 字段，就会发生此类错误。

SELECT cust_id FROM customer,orders

为了防止字段名不唯一而发生错误，可执行如下命令:

SELECT DISTINCT customer.cust_id FROM customer,orders


1165
“<字段>”没有与当前工作区建立关系。  (1165)

执行了一个需要建立关系的命令。例如，如果在关系建立之前执行了 SET SKIP TO 命令，就会发生此类错误。应当在执行这个命令之前先执行 SET RELATION 命令。


1196
“<文件>”不是 Visual FoxPro 的 .EXE 文件。  (1196)

执行的 .EXE 文件不是用 Visual FoxPro 建立的，请用 RUN | ! 来运行外部执行文件。


1309
“<文件>”不是一个目标文件。  (1309)

试图加载一个文件头不正确的已编译的 Visual FoxPro 程序，请检查用 DO 命令运行的文件是否正确。


1298
“<名称>”带区太大不能放入页中。  (1298)

试图使用的报表带区相对于所在页太大，请重新设计报表，再试一次。


1929
“<名称>”只能在方法中使用。  (1929)

在方法之外使用了 THIS | THISFORM | THISFORMSET 这些语句。所执行的语句可能是在一个过程内，而按要求只能在一个方法中使用。


1932
“<名称>”在挂起时不能关闭。  (1932)

在重新执行此操作时，请先对存储过程发出 RESUME 或者 CANCEL 命令。


1462
“<名称>”内部一致性错误。  (1462)

Visual FoxPro 将关闭所有已打开文件，同时退出系统。请先参阅《开发指南》的最后一部分，第十六章“测试和调试应用程序”中的“解决问题”一节，然后再找 Microsoft 寻求产品支持服务。


1737
“<名称>”是一个方法、事件或对象。  (1737)

只能给一个属性赋值。


1740
“<名称>”是只读属性。  (1740)

不能给只读属性赋值。


226
“<名称>”不是文件变量。  (226)

在需要文件变量的地方使用了内存变量或数组变量。


225
“<名称>”不是内存变量。  (225)

在需要内存变量或数组变量的地方使用了文件变量。


232
“<名称>”不是数组。  (232)

在需要内存变量或文件变量的地方使用了数组变量。


1924
“<名称>”不是一个对象。  (1924)

在前面的定义中没有定义为对象。


1983
“<名称>”对象不能返回值。  (1983)

某些表单类型不能返回一个值。DO FORM 命令可包含一个 TO 子句来保存在 .SCX 文件中根对象的卸载事件的返回值。此命令只支持表单或者表单集对象。


1429
“<名称>”。  (1429)

OLE 错误。Visual FoxPro 仅仅是传递 OLE 服务器产生的原始错误信息时对解决这种错误非常有用。可在 OLE 服务器中参考合适的 OLE 文档。


1130
找不到 'field' 表达式  (1130)

没有找到在 PROMPT <field> 中指定的字段。


78
** 或 ^ 定义域错误。  (78)

对负数只能取整数次幂。请采用整数幂计算。


*错误日期*
*错误日期*。

日期表达式无效。


*中断*

用 ESC 键中断了程序的执行。请从相应的错误对话框中选择“取消”、“挂起”或“忽略”。


1550
.DBC 内部一致性错误。  (1550)

发生了一个内部数据库错误，可用 VALIDATE DATABASE 命令来诊断并修复此错误。此类错误可能是由于数据库容器索引 (.DCX) 已被破坏或者与数据库容器文件 (.DBC) 不匹配时引起，一般是由于不正常退出系统而引起的。要重新建立索引，请先关闭数据库，删除索引文件 dbf_name.DCX，再打开数据库。如果这还不能解决问题，请先参阅《开发指南》的最后一部分，第十六章“测试和调试应用程序”中的“解决问题”，然后再向 Microsoft 寻求产品支持服务。


115
.DIF 文件头无效。  (115)

试图导入的 .DIF 文件头不正确。


117
.DIF 类型指示符无效。  (117)

试图导入的 .DIF 文件包含无效的数据类型指示符。


116
.DIF 矢量无效 — .DBF 字段不匹配。  (116)

试图导入的 .DIF 文件内部的文件头与其数据有矛盾。


120
.SYLK 文件维数边界无效。  (120)

对试图导入的 .SYLK 文件所给的行数和列数不正确。


121
.SYLK 文件格式无效。  (121)

试图导入的文件不具备有效的 SYLK 文件格式。


119
.SYLK 文件头无效。  (119)

试图导入的文件包含不正确的 SYLK 文件头。


1727
需要 .DBF 类型的帮助文件。  (1727)

SET HELPFILTER 命令只针对 .DBF 类型的帮助文件。


1771
同名的成员对象已经存在。  (1771)

要加入一个容器的成员对象与该容器中已有的成员同名，而在一个给定的容器中成员对象名称必须唯一。


1538
存储过程正在执行  (1538)

在执行一个存储过程当中，试图再编译或者卸出一个存储过程（例如，用 MODIFY PROCEDURE 或者 CLOSE DATABASES 命令）。这是一个非法操作。


1961
子目录或文件“<名称>”已经存在。  (1961)

您选择了一个已经存在的子目录或者文件名。


1889
在多个关系的表中只能有一个子排序 (1889)

在多个关系的表中定义了多于一个的子排序，这种操作是不允许的。


13
找不到别名。  (13)

试图使用一个没有定义的别名。当前所使用的别名中没有这样的名称。


24
别名已被使用。  (24)

对某一表使用了一个别名，此别名已经被其他表使用。


103
超出允许的 DO 嵌套层次  (103)

DO 命令允许 128 层嵌套循环，您已经超出此限制条件。


1870
ALTER TABLE 操作被中断。  (1870)

在向一个新的记录格式中复制记录时中断了 ALTER TABLE 命令，可能一些记录没有被复制，请检查一下数据。


1781
对象的控制源不能设置为它的 Value 属性。  (1781)

试图设置一个对象的控制资源为其自身。请采用其他有效的数据资源。


1098
API 函数 _UserError( ) 被调用。  (1098)

用用户提供的字符串显示错误信息。换句话说，ERROR "Hello,World"（或者 API 的等价形式 _UserError("Hello,World")）将使用此错误函数。“API 函数 _UserError( ) 被调用”的文本将被用户指定的字符串代替，这使得用户实际上不可能看到这个文本。


1726
找不到 API 库。  (1726)

执行 SET LIBRARY TO 或者 RELEASE LIBRARY 时, 指定的库没找到。


1711
使用的 API 库版本和 Visual FoxPro 版本不匹配。重建库。  (1711)

使用的 API 库版本和 Visual FoxPro 版本不匹配。


1178
应用程序文件“<文件>”没有关闭。  (1178)

当某一文件正在打开时，Visual FoxPro 试图连编包含此文件的应用程序。请关闭文件再重新连编这个应用程序。


1972
数组“<名称>”正在使用。  (1972)

一个对象试图对包含它的数组重新定义大小。


230
数组维数无效。  (230)

在数组声明时使用了非法数值（如 0），或者数组元素数超过最大值 65,000。


1764
数组不是父对象的成员。  (1764)

检查数组的引用。


1974
数组不能赋给数组元素。  (1974)

检查赋值操作。


1542
基表字段已被更改，不再匹配视图字段，因此不能设置视图字段属性。  (1542)

在某一视图定义中的基表名或基视图名已经发生变化，或者其中的字段数已经发生变化，不再匹配视图，因而视图属性不能被加载到视图临时表中。请重建或修改视图，以反映基表或基视图中的结构变化情况。


1590
BEGIN TRANSACTION 命令失败。嵌套层次太多。  (1590)

事务的嵌套层次最多 5 层，在其他事务开始之前，必须通过调用 END TRANSACTION 或 ROLLBACK 结束此事务。


38
已到文件头。  (38)

试图将记录指针定位在文件的第一个记录之前。


227
框大小定义无效。  (227)

在使用 @ ... BOX 命令时，第二行、第二列一定要大于第一行、一列。


1164
浏览结构已更改。  (1164)

“浏览”窗口的结构已由一个“浏览”有效性例程更改。


1163
浏览表已关闭。  (1163)

“浏览”窗口已由一个“浏览”有效性例程关闭。


1651
不允许 CANCEL 或 SUSPEND。  (1651)

您正在运行的 dBASE IV 报表或者标签文件调用一条 SUSPEND 命令，这在 Visual FoxPro 中属于非法操作。


62
不能访问字符串以外的字符。  (62)

试图访问那些超出字符串内存变量或者表字段最后字节之外的字符。


1106
不能存取文件；正在进行事务处理。  (1106)

由于其他用户还没有完成事务处理，因此不能访问表、索引或者备注文件。FLOCK( ) 和 RLOCK( ) 函数通常不能防止其他用户对锁定的信息进行读取。此信息从左向右滚动，表明 Visual FoxPro 仍然处于活动状态。增加此提示是为了对 Novell 事务跟踪系统（TTS）提供兼容性。


1152
不能访问选定表。  (1152)

试图在 32K 工作区范围之外选定一个表，或者引用未打开表中的文件变量。


1421
不能激活 OLE 服务器。  (1421)

不能访问准备修改的 OLE 对象的 OLE 服务器应用程序。可能该 OLE 服务器应用程序没有被安装，或者没在 MS-DOS 的路径下，也可能没有足够的 Windows 内存来运行。


1741
不能添加“<名称>”。类定义循环。  (1741)

试图在 ADD OBJECT 语句中指定一个类，该类定义与已有类重复。


1755
不能在此类中添加对象。  (1755)

如果某个类是基于控制基类，那么只有它的父类是 CONTROLS 类时，才能向该类中加入一个对象


1769
不能在列中添加此对象。  (1769)

您试图执行 Grid.Column.AddObject 方法来向表格列中加入一个不为该列相容的对象。例如，表单、表单集、工具栏和列就不能加入表格列中。

只能对在列中有恰当表示的对象使用 Column.AddObject 方法。如果希望在列中出现表单，应把表单内容保存在一个容器类中，然后将其添加到列里。


1768
不能在表格控制中添加此对象。  (1768)

试图使用 Grid.AddObject 方法来向表格中加入除列以外的对象。最常见的情况是，试图向一个列中加入对象，同时忘记用 Grid.Column 语法。


不能分配屏幕映象
不能分配屏幕映象。

没有足够的内存运行 Visual FoxPro。


1672
不能追加有口令保护的文件。  (1672)

要追加的文件已被加密。


1795
不能安排未经输送的表单。  (1795)

要在不同 FoxPro 2.x 平台上使用屏幕时，在使用屏幕之前必须用输送器 (TRANSPRT.PRG) 输送屏幕。


1952
不能对视图自身建立视图。  (1952)

您进行了如下操作，试图在“视图设计器”中修改视图：选择“添加”按钮，再从对话框中选择正在修改的视图作为基视图。这是非法操作。


1689
没有主程序不能连编 .APP 或 .EXE 文件。  (1689)

在指定的项目文件中没有找到主程序。有关详细内容，请参阅“设置主程序”。


1758
不能在 SetAll 方法中更改“<名称>”属性。  (1758)

Name 和 TabIndex 属性的值必须唯一，并且不能用 SetAll( ) 方法设置。


1770
不能清除正在使用的类。  (1770)

在类定义正在使用时，试图用 REMOVE CLASS, ADD CLASS OVERWRITE, 或者 RENAME CLASS 从 .VCX 库文件中删除这个类。请使用 CLEAR ALL 来清除所有对类的引用，然后重新执行此操作。


176
不能清除正在使用的菜单 (176)

试图用 CLEAR MENU 或者 RELEASE MENU 命令清除一个活动的菜单。在清除或者释放菜单之前，必须用 DEACTIVATE MENU 命令使菜单不活动。


177
不能清除正在使用的弹出式菜单.  (177)

试图用 CLEAR POPUP 或者 RELEASE POPUP 命令清除一个活动的菜单。在清除或者释放菜单之前，必须用 DEACTIVATE POPUP 命令使菜单不活动。


1951
不能清除正在使用的对象  (1951)

正在执行与类实例相关的方法或者事件代码时，发出了 CLEAR ALL 命令，将内存中的类定义清除。


1546
在执行与表相联系的表达式时不能关闭表。  (1546)

在这个操作执行期间，不能关闭表。


1535
此数据库正由一个项目使用，不能关闭。  (1535)

试图关闭一个数据库容器，此容器正被一个项目用来显示数据。


1971
在当前的 COMPILE 命令完成之后才能进行下一编译。  (1971)

在一个编译过程正在进行时，试图编译其他代码。编译器一次只能对一个目标进行操作。


102
不能创建文件“<文件>”。  (102)

操作系统向 Visual FoxPro 返回一个错误信息，指出不能创建一个新文件。原因要么是磁盘或目录已满，对目标目录不能进行访问；要么是指定了无效的文件名。


1102
不能创建文件。  (1102)

操作系统向 Visual FoxPro 返回一个错误信息，指出不能创建一个新文件。原因要么是磁盘或目录已满，对目标目录不能进行访问；要么是指定了无效的文件名。


不能定义菜单项
不能建立程序工作空间.

Visual FoxPro 在启动时不能创建足够的工作空间，原因可能是磁盘空间不足或者目录权限不够。


169
不能定义菜单项。  (169)

试图向文件或者结构定义的菜单项中加入菜单栏。


1307
不能被 0 除。  (1307)

不能在 MOD 函数中把 0 作为第二个参数。


1871
不能 DROP 全部已有列。  (1871)

一个表必须至少包含一列。


1754
在 DLL 中找不到入口点“<名称>”。  (1754)

声明的动态连接库（DLL）的入口点无效。请检查 DLL 的名称和入口点的名称。


1562
在数据库中找不到对象“<名称>”。  (1562)

引用的数据库对象在数据库中找不到。请用 DISPLAY DATABASE 或者 LIST DATABASE 命令确认对象名称的正确性。


找不到生成器程序。
找不到拼写检查程序。

_SPELLCHK 中指定的拼写检查程序没找到。


1944
找不到生成器程序。  (1944)

没找到 _BUILDER 指定的生成器应用程序。默认的生成器应用程序是 BUILDER.APP，放在 Visual FoxPro 的主目录下。


1798
找不到转换程序。  (1798)

没找到 _CONVERTER 系统变量指定的转换器应用程序。默认的转换器应用程序是 CONVERT.APP，放在 Visual FoxPro 的主目录下。


1693
找不到菜单生成程序。 (1693)

找不到建立菜单和屏幕的程序（分别为 GENMENU 和 GENSCRN）。


1563
在当前数据库中找不到视图“<名称>”。  (1563)

指定的视图不是当前数据库中的视图。检查键入的视图名是否正确，以及当前数据库是否为所需要的数据库。可用 DISPLAY VIEWS 或 LIST VIEWS 查看当前数据库的视图名。

如果该视图名在列表中，那么可能 .DBC 索引已破坏。

� 若要重建索引

1.	关闭数据库。

2.	删除索引文件(database_name.DCX)。

3.	重新打开数据库。

4.	重建索引。


1846
不能按合计字段分组。  (1846)

试图用某个合计函数作为分组的依据，如： MIN( ), MAX( ), SUM( ), AVG( ), COUNT( ), NPV( ), STD( ) 或者 VAR( )，这是非法操作。


1671
不能导入有口令保护的文件。  (1671)

要导入的文件是加密的。


1547
不能从视图中插入一个空行到其基表。  (1547)

当视图更新时，一个新的空记录（不含已修改的字段）被插入到视图的基表当中。请确保在视图更新前，从视图插入到基表的记录中至少包含一个已修改的字段。


1566
当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令。  (1566)

在执行 PACK 命令之前，请关闭所有的数据库表。


1720
在 READ 命令对含格式文件进行操作时，不能发出 SET FORMAT 命令(1720)

指定的格式文件调用了当前正在使用的格式文件。


1753
不能加载 32 位 DLL“<名称>”。  (1753)

动态连接库文件(DLL)无效或者不存在。


1527
找不到 ODBC 库 — ODBC32.DLL。  (1527)

找不到 ODBC32.DLL 文件。要使用“连接”功能，此文件必须在当前路径中。如果系统中没有这个文件，请重新安装 Visual FoxPro 的 ODBC 组件；如果文件存在，把文件复制到默认的系统目录下。


1412
找不到 COMSPEC 环境变量。  (1412)

Visual FoxPro 找不到所需要的环境变量。在其他程序中运行 Visual FoxPro 时，如果 MS-DOS 环境变量设置不正确，经常会发生这个错误。


1731
不能修改基类。  (1731)

试图对一个 Visual FoxPro 基类进行修改。要进行修改，必须首先在 Visual FoxPro 基类的基础上定义一个子类。


1948
不能修改正在使用的类。  (1948)

试图修改一个正在使用的类。请用 CLEAR CLASS 命令将类定义从内存中释放，再进行操作。


1777
不能修改视图临时表的结构。  (1777)

当前临时表是视图定义的一个实例，不能用“表设计器”对视图临时表结构进行修改。可以用“视图设计器”对视图定义产生的临时表结构进行永久性修改。


1844
不能嵌套合计函数。  (1844)

象 MIN( )，MAX( ) 这样的合计函数，以及 CALCULATE 命令子函数如 AVG( ), CNT( ), MAX( ), MIN( ), NPV( ), STD( ), SUM( ), 或者 VAR( ) 的嵌套使用是不允许的。


1926
不能嵌套类定义。  (1926)

一个类定义不能包含另一个类定义。


1254
不能嵌套键标记。  (1254)

对键标记不能嵌套使用。


1337
不能嵌套 PRINTJOB 命令。  (1337)

在 PRINTJOB 命令和 ENDPRINTJOB 命令之间插入了另一个 PRINTJOB 命令。


不能打开配置文件

Visual FoxPro 找到了配置文件，但没有合适的权限打开它。


101
打不开文件。  (101)

Visual FoxPro 不能打开所需要的文件，可能是被网络上其他用户锁住了。


1930
不能对重定义“<名称>”。(1930)

试图为 THIS, THISFORM, THISFORMSET 或者一个保留的系统内存变量赋值。


175
不能重定义正在使用的弹出式菜单。  (175)

当菜单在内存中仍处于活动状态时，试图执行 DEFINE POPUP 命令。必须首先执行 DEACTIVATE POPUP 命令。


174
不能重定义正在使用的菜单。  (174)

当菜单在内存中仍处于活动状态时，试图执行 DEFINE POPUP 命令。必须首先执行 DEACTIVATE POPUP 命令。


170
不能释放菜单项。  (170)

试图释放一个用文件或者结构定义的菜单项。


1253
不能重命名当前目录 (1253)

文件管理器中标记的目录不能重新命名。


1153
不能重命名文件到另一个设备。  (1153)

要将文件移动到其他驱动器上，请使用 COPY 命令。


1970
不能重新打开项目文件“<名称>”。  (1970)

如果在上次关闭 Visual FoxPro 时没有关闭某项目文件，在下一次启动 Visual FoxPro 时，将重新打开这个项目文件。如果项目文件存在但不能重新打开，说明文件可能已经破坏。您可以尽管放心地忽略这个信息，继续使用 Visual FoxPro，前面使用过的项目文件不会再打开。


1976
不能解决后链。  (1976)

Visual FoxPro 不能成功地将一个表和数据库匹配起来，请使用 VALIDATE DATABASE 检查数据库的链接情况。


不能在 MS-DOS 3.0 以前版本中运行。

加载器和压缩 .EXE 文件不能在 MS-DOS 3.0 以前的版本下运行。


1706
不能按降序对 .IDX 文件排序。(1706)

.IDX 索引文件不支持 DESCENDING 子句。


111
不能更新临时表。  (111)

试图向一个只读文件写入。


1157
不能更新文件。  (1157)

当向一个磁盘中写入时，只有发生象磁盘空间不足或读/写失败这样严重的问题时，此错误才出现。


292
不能使用 0 或负数作为 LOG10( ) 参数。  (292)

不能把 0 或者负数作为以 10 为底的对数的参数。


1979
不能以可视方式修改派生自非可视类的类。  (1979)

试图对在程序中定义的类进行修改。只能用类设计器来修改基类或者 .VCX 文件中所定义类的派生类。


1978
不能以可视方式修改此种类型的类  (1978)

试图创建基于 Cursor（临时表），DataEnvironment（数据环境），Page（页面），Column（列），Header（标头）或 Relation（关系）等基类的类。不能可视地修改这些类。


1502
记录正在使用，不能写入。  (1502)

由于记录正在使用，Visual FoxPro 不能对所选记录进行写操作


1761
类“<名称>”已经存在。  (1761)

ADD CLASS 或 RENAME CLASS 命令中所带的类名已经在类库中存在。


1434
类“<名称>”未注册。  (1434)

试图使用一个包含 OLE 对象的表单，而该 OLE 对象的服务器在当前机器上还没有安装。


1776
类“<名称>”正在使用。  (1776)

用 SaveAsClass 方法指定的类已经存在并正在使用，可以执行 CLEAR ALL 命令来释放该类并使其可被覆盖。


1576
在类库中找不到类“<名称>”。  (1576)

找不到指定的类。请确保类名使用正确。


1762
找不到类“<名称>”。  (1762)

REMOVE CLASS 命令指定了一个在类库中不存在的类名。


1313
取消创建类。  (1313)

在试图创建一个基于 OLE 控制的类时，您退出了 OLE 控制对话框。


1733
找不到类定义“<名称>”。  (1733)

在 CREATEOBJECT 命令中指定的类定义没有找到。


1950
类定义“<名称>”出现递归。  (1950)

试图创建一个类的实例，该类依赖于另一个类。而另一个类又依赖于该类。


1747
类文件“<名称>”无效。  (1747)

可视类库文件 (.VCX) 已经毁坏，必须用备份盘恢复。


1746
“<名称>”的类文件名无效。  (1746)

存储在可视类库文件 (.VCX) 中的某个类，基于另外一个也存储在可视类库文件 (.VCX)中的某个类的基础上，其文件名超出允许的最大长度。


1751
类文件版本高于当前版本 (1751)

您试图使用的可视类库文件 (.VCX) 是由比当前正在使用的 Visual FoxPro 版本更高的版本所创建的。


1752
MODIFY CLASS 正在使用类。  (1752)

试图使用的类当前正在“类设计器”中被编辑。


1993
找不到类库文件“<名称>”。  (1993)

RELEASE CLASSLIB 或者 CLEAR CLASSLIB 命令中指定的可视类库文件 (.VCX) 不在 SET CLASSLIB 列表中。


1949
类名无效。  (1949)

指定的类名无效或者不存在。


1914
代码页编号无效。  (1914)

对当前的 Visual FoxPro 版本，指定的代码页编号无效（与使用的国家和语言相关）。请检查代码页编号是否正确。本地化版本可以在可选的 .INT 文件中提供附加的代码页编号。


1915
找不到排序序列“<名称>”。  (1915)

用 SET COLLATE 指定的排序序列无效。


1728
配色方案已保存。  (1728)

提供配色方案是为了保证向后兼容性。配色方案 13 到 16 是保留的，用户自定义的配色方案为 17 到 24。


1642
找不到颜色集资源。  (1642)

用 SET COLOR SET TO 所指定的颜色集在当前资源文件中没有找到，请用 SYS(2005) 函数检查当前资源文件。


223
列号必须在 0 到 255 之间 (223)

指定的打印机列号超出可用范围。


1657
列号必须在 0 到右页边距之间  (1657)

所设置的 _PCOLNO 无效。包含此系统变量是为了提供向后兼容性。在当前版本中要想获得更好的效果，可使用“报表设计器”。


1695
COLUMN | FORM | ALIAS | NOOVERWRITE | WIDTH 只允许与 FROM 子句联用。  (1695)

只有在用 FROM 子句创建一个快速报表时，这些选项才可用。


1698
COLUMN | ROW | ALIAS | NOOVERWRITE | SIZE | SCREEN 只允许与 FROM 子句联用。  (1698)

只有在用 FROM 子句创建一个快速屏幕时，这些选项才可用。


1579
对于临时表处于表缓冲方式下的表，不能发布此命令。  (1579)

在执行此命令之前，将缓冲方式改为非表缓冲方式。


1593
在事务处理期间不能发布此命令。  (1593)

在执行此命令之前，必须使用 END TRANSACTION 或者 ROLLBACK 结束所有的已执行事务。Visual FoxPro 不允许将任何对数据库 (.DBC) 的修改操作作为事务的一部分。在一个事务中以下命令是非法的：

 •	   CLEAR ALL

 •	   CLOSE ALL

 •	   CLOSE DATABASE

 •	   CLOSE TABLES

 •	   COPY INDEXES

 •	   CREATE / DELETE / MODIFY DATABASE

 •	   CREATE / DELETE / MODIFY VIEW

 •	   CREATE / DELETE TRIGGER

 •	   CREATE / DELETE / MODIFY CONNECTION

 •	   APPEND / MODIFY / COPY PROCEDURES

对参与事务的表执行以下命令被视为非法：

 •	   ALTER TABLE

 •	   CREATE TABLE （表在数据库容器中）

 •	   DELETE TAG

 •	   INDEX ON

 •	   INSERT （非 SQL）

 •	   MODIFY STRUCTURE

 •	   PACK

 •	   TABLEREVERT( )

 •	   关闭表缓冲（也就是说使用 CURSORSETPROP('Buffering',...)1，2 或 4，而原来为 3 或 5。）

 •	   关闭一个表（也就是说，在参与事务的表的工作区中执行 USE 命令）。

 •	   ZAP


1220
命令中包含无效字符。  (1220)

源程序行包含无效字符，这可能是因为在一个外部编辑器中编辑源文件时，嵌入了控制字符。


36
命令中含有不能识别的短语或关键字。  (36)

在命令行中使用了非法关键字。


1297
 此命令只允许在交互方式下使用。  (1297)

在程序中，对 VALIDATE DATABASE 命令使用了 RECOVER 选项，此命令只能在“命令”窗口中执行。


1221
命令中缺少必需的子句。  (1221)

执行的命令缺少 Visual FoxPro 语法所要求的子句。


1981
文件“<名称>”编译时出错。  (1981)

试图用 APPEND PROCEDURES FROM 命令从一个文件向数据库中添加存储过程，但此文件不能被成功编译。请检查文件中代码的有效性。


1252
此命令行编译后所产生的代码太长。  (1252)

由此语句产生的目标代码超过 Visual FoxPro 内部代码缓冲区的大小。原因是包含了太多的长表达式，应将其分解为多条语句。


1541
连接“<名称>”忙。  (1541)

远程连接正被其他执行语句使用。在重新进行此操作之前，请等待该执行语句的结束或者直接取消该执行语句。


1466
连接句柄无效。  (1466)

提供的连接句柄无效，请使用 SQLCONNECT( ) 或者 SQLSTRINGCONNECT( ) 得到一个有效的连接句柄。


1497
连接名无效。  (1497)

指定的名称不是当前数据库中某一视图的名称，请检查键入的名称是否正确，以及当前的数据库是否为所需要的数据库。


1526
连接错误：“<名称>” (1526)

发生了一个 ODBC 错误。Visual FoxPro 以此信息作为实际 ODBC 错误的通用提示信息。ODBC 错误可由 ODBC 驱动程序管理器、ODBC 驱动程序或者后台数据服务器产生，由 AERROR( ) 函数返回。当一个 ODBC 错误 1526 发生时，AERROR( ) 函数所返回的数组元素的内容在下表中列出：

元素号	说明
1	数值型，保存错误号 1526。
2	字符型，错误信息的文本
3	字符型，ODBC 错误信息的文本
4	字符型，ODBC SQL 当前状态
5	数值型，从 ODBC 数据源得到的错误号
6	数值型，ODBC 连接句柄
7	null 值
ODBC 错误信息（元素号 3）将错误源放在列表中的实际错误文本之前。

ODBC 状态码（元素号 4）可用来在相关 ODBC 书（程序员参考手册）中了解错误信息。

如果是服务器错误，将设置数据源错误（元素号 5），可用此代码在服务器文档中查询错误。


1522
连接的内部一致性错误。  (1522)

连接的内部错误。如果发生这种错误，请先参阅《开发指南》最后一部分，第十六章“测试和调试应用程序”中的“解决问题”，然后再寻求 Microsoft 的产品支持服务。


1725
常量已经用 #DEFINE 定义。  (1725)

已经用 #DEFINE 定义了此常量，请在重新定义之前使用 #UNDEF 释放它。


1799
取消转换。  (1799)

转换被取消，所操作的文件不能进行转换。


1509
转换已取消，请调整备注块大小。  (1509)

试图转换一个备注块大小少于 512K 的 dBASE 表。要想成功的转换 Visual FoxPro 文件，请回到 dBASE 环境，增加备注块大小，使其大于或等于 512 K。


1168
不能将图标添加到执行文件。  (1168)

仅用于专业版。在建立可发布执行文件时，指定了一个无效的图标文件(.ICO)。


1988
货币值超出范围。  (1988)

数值字段或者浮点字段的位数最大值为 20 位。


1166
光标文件损坏或者格式错误。  (1166)

试图将 DragIcon 属性设置为一个无效的 .CUR 文件。有效的 .CUR 文件必须包含一个未毁坏的黑白光标。


44
循环关系。  (44)

在定义一系列关系时，最终指回已关联的表，造成循环关系。


1966
数据环境已经加载。  (1966)

触发了数据环境的 Load 事件，而该数据环境已经载入。


1967
数据环境已经卸载。  (1967)

触发了数据环境的 Unload 事件，而该数据环境已经卸载。


1599
数据工作期 #<编号> 被迫回滚全部事务以避免死锁。  (1599)

在另外一个数据工作期试图锁定数据工作期 #<编号> 的一个索引或者备注文件时，发生死锁。一个回滚操作被强制执行，致使数据工作期 #<编号> 处于错误状态。请执行合适数量的 ROLLBACK 命令来解除此错误状态。可对索引或者备注文件使用 SYS(3052)，以避免发生此错误。


1549
含有正打开着的事务，数据工作期 #<编号> 不能释放。  (1549)

当有事务打开时，关闭了一个基于数据段工作期的对象。该数据工作期将保持活动状态，但可以通过 SET DATASESSION TO <编号> 命令，并后跟合适数目的 END TRANSACTION 或 ROLLBACK 命令将其关闭。


1732
此属性的数据类型无效。  (1732)

数据类型不匹配。为此属性所指定的值的数据类型不正确。


9
数据类型不匹配。  (9)

由于表达式中带有不允许放在一起求值的数据类型，因此该表达式无效。错误的原因可能是指定了一个不合适的数据类型，或者是由于为某一两表操作（如 UPDATE, REPLACE, SET RELATION）所指定的两个字段数据类型不同。


1534
数据库“<别名>”没有打开。  (1534)

用 SET DATABASE TO 命令操作的数据库没有打开，请首先使用 OPEN DATABASE 命令。


1569
数据库“<名称>”: 不能访问文件。  (1569)

对数据库容器 (.DBC) 文件进行写操作，而该文件已被 MS-DOS ATTRIB 命令加上写保护。


1561
数据库无效，请进行检查。  (1561)

Visual FoxPro 检查出数据库结构发生问题，可运行 VALIDATE DATABASE 来诊断和修复。


1570
数据库只读。  (1570)

象 VALIDATE DATABASE RECOVER 这样的命令以及建立和更改数据库对象的命令，需要对数据库进行写操作。请先关闭此数据库，然后以可写方式重新打开。


1773
数据库对象类型无效。  (1773)

有效的类型为： CONNECTION, VIEW, TABLE, RELATION, FIELD, INDEX。有一些命令只适用于其中的某些类型。


1544
字段“<名称>”的 DataType 属性无效。  (1544)

视图字段的 DataType 属性值不是一个有效的 Visual FoxPro 数据类型。请更改视图字段的 DataType 属性，使之有效。


1232
DIMENSION 包含变量声明但缺少必需的下标参数。  (1232)

DIMENSION 语句中的变量声明未给出下标参数。


1963
找不到目录。  (1963)

指定的目录没有找到。


216
显示方式不可用。  (216)

选择的显示方式不可用。


1907
驱动器名无效。  (1907)

在 DIR 命令中指定的驱动器名无效。


1156
字段名重名。  (1156)

在 SORT 或者 COPY 的FIELDS 子句中指定了重复的字段名，请纠正此错误，重新执行。


1211
缺少 IF | ELSE | ENDIF 语句。  (1211)

要获得有关条件执行命令的详细信息，请参阅 IF ... ENDIF 主题。


4
已到文件尾。  (4)

记录指针被定位在文件最后的记录之后。


1591
END TRANSACTION 命令必须与 BEGIN TRANSACTION 命令配对使用。  (1591)

正确的事务处理结构是把代码包含在 BEGIN TRANSACTION 和 END TRANSACTION 之间。


1214
ENDTEXT 没有对应的 TEXT 语句。  (1214)

ENDTEXT 语句没有对应的 TEXT 语句。


1473
环境级属性无效。  (1473)

指定的属性不能在新临时表继承的环境中使用，必须首先将临时表实例化，然后使用 CURSORSETPROP( ) 函数。


1957
 访问假脱机打印机发生错误  (1957)

在内部调用 Win32 的 GetPrinter( ) 函数时失败。Visual FoxPro 可通过 PRTINFO( ) 或者 SET PRINT TO 来调用此函数。


1779
将“<名称>”添加到对象时发生错误。成员或属性重名。  (1779)

要向对象添加的成员或者属性已经存在。


1112
关闭文件时发生错误。  (1112)

在 Visual FoxPro 关闭文件时，操作系统返回了一条错误信息。


1424
将 OLE 对象复制到剪贴板时发生错误。(1424)

原因可能是没有足够的 Windows 可用内存。


1973
创建表“<名称>”时发生错误。 (1973)

用 CREATE TABLE FROM 命令定义的表包含无效的字段定义。


1423
创建 OLE 对象时出现错误。  (1423)

此错误是因为 Windows 的可用内存空间不够，或者 Visual FoxPro 找不到服务器应用程序引起的。


1735
类定义中发生错误。  (1735)

可能是进行了一个或多个如下非法操作：

 •	   在类定义中使用了 CREATEOBJECT( ) 函数。

 •	   通过在父类中设置 ColumnCount 属性为某值，然后在子类中将该属性设置的比父类值要小，从而在类定义中删除表格列。

 •	   通过在父类中设置 PageCount 属性为某值，然后在子类中将该属性设置的比父类值要小，从而在类定义中删除页框类型的页。

 •	   使用了 ADD OBJECT <a[1]> 命令且 <a> 不是一个数组。


1258
PICTURE 子句出现错误。 (1258)

在编译器编译 PICTURE 子句时，出现错误。图片必须为一个有效的位图文件 (.BMP) 或者图标文件 (.ICO)。


1508
初始化 OLE 时发生错误。  (1508)

内存空间不足或者没有正确安装。请关闭其他正在运行的应用程序，再进行此操作。


1554
 实例化临时表时发生错误。表“<别名>”不能打开。对象将被忽略。  (1554)

试图在设计方式下加载数据环境时，出现错误。“对象将被忽略”意思是对象没有建立，如果保存表单，将不含有此对象。


1736
实例化对象时发生错误。  (1736)

与对象相关的服务器没有正确注册。


1958
加载打印驱动程序时发生错误。 (1958)

在内部调用Win32 LoadLibrary( ) 函数时失败。Visual FoxPro 通过 PRTINFO( ) 或者 SET PRINT TO 函数调用此函数。


1995
加载数据环境时发生错误。表正在使用。  (1995)

检查该表是否已在其他数据工作期中以独占方式打开。


1881
 加载错误:“<错误>”(1881)

您遇到了如下某一情况：

 •	   作为数据环境的一部分的临时表，找不到作为数据库 (.DBC) 一部分的表。

 •	   以编程方式设置了一个非法属性值。

 •	   在读取一个表单 (.SCX) 文件时出现错误。

 •	   实际的错误文本将提示更多具体信息。


1797
转换时发生错误。  (1797)

转换器已经运行，并返回非错误状态，但是得到的报表文件 (.FRX) 不是 Visual FoxPro 格式。如果改变了 _CONVERTER 的值，使用的转换器将不能产生正确的 Visual FoxPro .FRX 文件。


1584
从数据库读取属性时发生错误。该属性将被忽略 (1584)

在从数据库容器加载规则或者触发器代码时，发生错误。此规则或者触发器将被忽略。在重新打开该表之前，可尝试使用 VALIDATE DATABASE 命令。


1104
读文件发生错误。  (1104)

在 Visual FoxPro 读取文件时，操作系统返回了一条错误信息。


1296
读取资源时发生错误。  (1296)

发生了内部错误。请先参阅《开发指南》第十六章“测试和调试应用程序”中“解决问题”，然后再寻求 Microsoft 的产品支持服务。


1422
保存 OLE 对象时出现错误。  (1422)

没有足够的硬盘空间或 Windows 可用内存来保存此对象。


1105
写文件发生错误。  (1105)

在 Visual FoxPro 写文件时，操作系统返回了一条错误信息。造成此错误的原因经常是由于磁盘被写保护。


1977
要更新此文件需以独占方式打开。请重新打开此文件。  (1977)

没有用独占方式打开此文件，可用 USE 命令并带 EXCLUSIVE 子句来重新打开此文件。


1523
用户取消执行。  (1523)

通过按下 ESC 键取消了一条远程命令。


46
表达式计算结果为一非法值。  (46)

由 SET MEMOWIDTH, BROWSE 或者 @ ... TO 命令所指定的表达式求值结果为一非法值。


67
表达式计算失败。  (67)

在 Visual FoxPro 表达式计算过程中内部一致性检查失败，这可能是因为 Visual FoxPro 的目标代码文件毁坏而引起的。请重新编译引起此错误的程序。


1148
在执行筛选时重新输入了表达式。  (1148)

当执行筛选时，对 SET FILTER TO 命令设置了原有的表达式。这可能是因为对 SET RELATION 或者 SET FILTER 命令进行复杂设置而引起的，也可能是因为使用了象 LOOKUP( ) 或者 SEEK( ) 这样的对其他工作区进行引用的 Visual FoxPro 函数或用户自定义函数。


1759
表达式无效。请使用有效的表达式设置“<名称>”属性。  (1759)

为表格的某一属性设置了一个无效的表达式。此时这个无效表达式已从该属性设置中清除。但是，如果是在表格的 AfterRowColChange 事件中设置的表达式，就可能会导致一个循环，不断地刷新，显示错误；再刷新，再显示错误，等等。这是因为在显示错误窗口时，会触发 AfterRowColChange 事件。错误信息在一个带有“取消”和“确定”按钮的对话框中显示。如果选择“确定”按钮，错误信息将继续显示；如果选择“取消”按钮，无效表达式将完全废止，根本无法设置或改变这个表达式。

应确保表达式是有效的，同时没有语法错误。如果确信该表达式是有效的，就应该检查该表达式所使用的各变量的作用范围是否为全局范围或表单范围。当使用的变量只在建立该表达式的函数范围内有效时，那么当函数返回时，变量将失去作用。这样，在绘制表格时，由于还要对该表达式求值，因而导致错误。


1940
在 WITH/ENDWITH 之外此表达式无效。  (1940)

只能在 WITH ... ENDWITH 结构中使用 .property=some_value 的表单表达式。如果将 .NULL. 作为表达式使用，也会发生此错误。请在 .NULL. 周围加上引号，使之不被当作属性对待。


1947
表达式太复杂。  (1947)

索引表达式过长。.IDX 索引关键字的最大允许长度为 100 个字符，.CDX 索引关键字的最大允许长度为 240 个字符。


293
ACOS( ) 中的表达式超出范围。  (293)

使用反余弦函数的表达式超出  1.0 到 +1.0 的范围。


291
ASIN( ) 中的表达式超出范围。  (291)

使用反正弦函数的表达式超出  1.0 到 +1.0 的范围。


 致命错误<expN>，报告<expN>错误

未返回错误号。Visual FoxPro 关闭所有打开的文件同时退出。如果发生这种错误，请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”，然后再寻求 Microsoft 的产品支持服务。


1001
此功能不可用。  (1001)

试图使用的 Visual FoxPro 功能在当前的 Visual FoxPro 版本中不支持。


1580
此功能对非数据库表不可用。  (1580)

试图在自由表上使用数据库表的专有特性，如 null 字段、主关键字、永久关系、默认值、有效性规则或者触发器等。可使用 ADD TABLE 命令将自由表加入一个数据库。


1953
在对象处于设计方式时此功能可用。  (1953)

执行的操作只有在设计时才能使用。


1530
取消取数据操作；远程表已经关闭 (1530)

通过使用 ESC 键，取消了对远程数据进行取操作的本地函数的执行。


1581
“<名称>”字段不能为 NULL 值(1581)

试图将 null 值存入不支持 null 值的字段。可在“表设计器”中选定 NULL 复选框来改变字段的设置，或者在字段定义中指定 NULL 关键字。


1582
“<名称>”字段的有效性规则被破坏 (1582)

请修改此字段值或者恢复此记录。


1647
字段表达式包含非法的数据类型 (1647)

在需要字段表达式的 REPORT 中遇到一个图形数据类型。


1913
字段必须为通用型字段. (1913)

在 APPEND GENERAL 或者 MODIFY GENERAL命令中使用了一个非通用字段。

－ 或者 －

在“报表图片”对话框中键入了一个非通用字段名。


350
字段必须为备注型字段.  (350)

在使用 APPEND 或者 COPY MEMO 命令时，输入的字段名不是备注字段类型。


1712
字段名称重复或者无效 (1712)

要建立的字段在表中已经存在，或者在字段中使用了 ., ", /, \, [, ], :, |, <, >, +, =, ;, *,  ?，或空格。


1713
字段宽度或者小数位数非法 (1713)

指定的字段宽度或者小数位数无效。有关这方面的内容，请参阅系统容量主题。


1529
“<名称>”文件已经作为数据库的一部分存在 (1529)

要改写的文件是某数据库的一部分，为了避免数据库毁坏，应首先用 REMOVE TABLE 命令从数据库中移走该表。


1553
文件“<名称>”是一个数据库。  (1553)

执行的操作不支持数据库文件，请选取正确的文件类型进行操作。


1551
文件“<名称>”是一个无效的数据库.  (1551)

使用所给的数据库时发现错误。请试着打开它，并运行 VALIDATE DATABASE 命令进行诊断并修复。


1552
文件“<名称>”不是一个数据库。  (1552)

由于此数据库不是一个有效的数据库，因此对数据库所进行的操作失败。请采用正确的文件类型进行操作。


1558
文件“<名称>”不是数据库的一部分。  (1558)

所进行的操作不支持自由表，请采用正确的文件类型进行操作。


1565
文件“<名称>”是数据库的一部分.  (1565)

所进行的操作只支持自由表，请采用正确的文件类型进行操作。


1933
文件“<名称>”没有关闭.  (1933)

内部一致性错误。表单 (.SCX) 或者可视类库文件 (.VCX) 已经关闭，但存储在其中的方法或者事件代码仍在使用。


1705
访问文件的操作无效。  (1705)

试图向一个已经用 MS-DOS ATTRIB 命令加上写保护的文件进行写操作。


7
文件已经存在。  (7)

重新命名的文件已经存在。此错误一般是使用 RENAME 命令而产生的。


1503
文件不能锁定。  (1503)

Visual FoxPro 不能锁定所需要的文件。一般是因为网络上其他用户已经锁定该文件而发生此错误。


1
文件不存在。  (1)

指定的文件不存在。


108
其他用户正在使用文件。  (108)

试图使用 USE，DELETE 或者 RENAME 命令操作文件，而此文件已经为网络上的其他用户所使用。


3
文件正在使用。  (3)

试图使用 USE，DELETE 或者 RENAME 命令操作文件，而此文件已经打开。


1113
文件没有打开。  (1113)

试图对没有打开的文件进行读写操作。


1708
文件已在另一个工作区打开 (1708)

需要以独占方式使用表的命令（如 PACK，MODIFY STRUCTURE，ZAP 等）不能对用 USE AGAIN 在多个工作区中打开的表进行操作。


1718
文件只读。  (1718)

试图对一个只读文件进行写操作。


1338
文件版本错误。  (1338)

试图打开一个非 Visual FoxPro 文件格式的屏幕或者报表文件。


1637
文件必须以独占方式打开以转换备注文件。  (1637)

使用的表文件必须以独占方式打开以转换备注文件。


110
文件必须以独占方式打开。  (110)

所进行的操作需要用以独占方式使用表。


1918
文件名太长。  (1918)

文件名超出系统限制。


1750
此文件是由比当前版本更高的 Visual FoxPro 版本建立。  (1750)

在比较表单文件 (.SCX) 或者数据库文件 (.DBC) 内的版本号与存储在这些文件的产品内的版本号时，出现不一致。


91
文件没有使用 LOAD 命令装入内存。  (91)

使用 CALL 或者 RELEASE 命令调用未加载的模块时，发生此错误。


1140
FILTER 表达式超出允许大小。  (1140)

SET FILTER TO 命令中的表达式超过了允许的 160 个字符的限制。


1749
表单文件(.SCX)必须包含至少一个表单。  (1749)

若要向 .SCX 文件中添加一个表单，请使用“表单设计器”。


1991
表单文件“<名称>”来自以前版本的 FoxPro，在执行前需转换为当前格式。  (1991)

试图编译一个由以前的 FoxPro 版本创建的表单文件。应先转换到当前版本，再重新编译。


1686
表单文件“<名称>”无效。  (1686)

指定的屏幕文件已经破坏。


1294
FOXUSER.DBF 文件无效。  (1294)

FOXUSER.DBF 或者 FOXUSER.FPT 文件已被破坏，请从备份盘上重新安装 FOXUSER 文件，或者退出 Visual FoxPro 环境，删除该文件，重新启动 Visual FoxPro。


11
函数参数的值、类型或数目无效。  (11)

传递给函数的参数数值类型非法或者参数值超出函数的允许范围，也可能是由于传递给函数的参数过多的缘故。


1999
此函数功能尚未实现。  (1999)

调用的函数在当前的 Visual FoxPro 版本上不被支持。


1536
在本地表上不支持此函数。  (1536)

某些命令或函数，如 REQUERY( )，在本地 Visual FoxPro 表上的操作不被支持。


1525
在远程表上不支持此函数。  (1525)

某些命令或函数，如 PACK 或者 ALTER TABLE，不可用于远程表。


1300
函数名缺少 )。  (1300)

函数名中缺少右圆括号。错误原因可能是由于当前行只有左括号，或者函数包含的参数太多，无法检查到右括号的位置。


1304
函数名缺少 (。  (1304)

函数名中称缺少左圆括号。


1586
函数要求使用行缓冲方式或表缓冲方式。  (1586)

要调用的函数只对行缓冲或表缓冲方式下的临时表发生作用，请使用 CURSORSETPROP("Buffering",...) 2,3,4, 或 5 来对临时表启用行缓冲或表缓冲方式。


1986
GDI 内存不足，请关闭一个或者多个窗口，再试一次。  (1986)

关闭所有的应用程序，重新启动 Windows 。


1489
通用字段不能用在更新语句的 WHERE 条件中。请更改视图的 WhereType 属性。  (1489)

在 SQL update 语句的 WHERE 子句中，强制使用开放式锁定的表达式不能包含通用字段，请使用 WhereType 视图属性从更新的 WHERE 子句中去掉通用字段（可以将默认的 KeyAndModified 属性改为 Key 属性）。


1167
图标损坏或格式错误。  (1167)

在连编 EXE 文件期间，遇到无效的图标文件。


1587
非法嵌套 OLDVAL( ) 或 CURVAL( )。  (1587)

传递给 OLDVAL( ) 或者 CURVAL( ) 的表达式又对它们进行了引用，这属于非法操作。


1910
非法递归调用打印驱动程序。  (1910)

一个打印驱动程序调用了另一个打印驱动程序。


1887
在规则计算中出现非法递归。  (1887)

规则或者触发器代码引起原始的临时表（也就是触发规则或者触发器的临时表）递归触发另一条规则或触发器。造成这种情况的原因很可能是试图移动记录指针或者修改原始临时表中的值。请检查规则或者触发器代码。


1960
非法重定义变量“<名称>”。  (1960)

当用 PUBLIC 或者 LOCAL 命令改变已有变量的状态时，出现此错误。换句话说，如果变量 x 是非公共的，那么执行 PUBLIC x 语句，将会出现此错误。当在“命令”窗口中建立变量时，该变量定义为公共的。建立非公共变量的操作，需要在一个程序 (.PRG) 中进行。


1594
非法操作。在一个事务中已有记录锁定的情况下，试图对文件锁定从而导致非法。  (1594)

试图明确地（通过 FLOCK( )）或者隐含地（象 REPLACE ALL）在一个事务中锁定文件。如果在此事务级上或其他更低的事务级上已有记录被明确地或隐含地锁定，此操作非法。即使事务内锁定的记录已被释放，此操作仍然非法。在锁定此文件之前必须回滚所有对此文件的锁定记录操作。


1679
只导入 Lotus 1-2-3 3.0 版文件的 Worksheet A。   (1679)

因为表是二维的，所以 Visual FoxPro 不能导入 Lotus 1-2-3 3.0 文件中的 Worksheet B 和 C。


1241
在分组表达式中使用了不正确的数据类型。  (1241)

报表的组表达式遇到图片数据。


1994
找不到包含文件“<名称>”。  (1994)

在表单中指定的文件不存在，或者 #INCLUDE 包含的引用无效。


1471
列格式不正确。  (1471)

传递给 SQLCOLUMNS( ) 函数的列类型描述符不正确。


1470
属性名不正确。  (1470)

使用了一个不能识别的属性名。


1886
索引不接受 NULL。  (1886)

主关键字索引或候选关键字索引表达式求值结果为 NULL，对此类型的索引这种情况是非法的。请更改记录值使之为非 NULL 值。


114
索引与表不匹配。请删除该索引文件然后重建索引。  (114)

索引文件的结构已破坏，建议删除该索引文件(.CDX 或者 .IDX)，重建索引。


23
索引表达式超出最大长度。  (23)

索引表达式超出最大限制长度 220 字节。


19
索引文件与表不匹配。  (19)

当前索引的索引表达式使用的变量未包含在当前的表中。


1683
找不到索引标识。  (1683)

在当前索引中没有找到指定的索引标识。请检查命令中的TAG 子句。


1684
必须指定索引标识或文件名。  (1684)

试图在没有指定索引标识之前退出“索引”对话框。


1002
输入／输出操作失败。  (1002)

MS-DOS 不能进行正常的文件或者硬件操作。


1588
在启用行缓冲或表缓冲，或者使用完整性约束时，不能执行 INSERT 操作。 (1588)

用 CURSORSETPROP('Buffering',1...) 将行缓冲或表缓冲关闭，或者使用 APPEND 代替 INSERT。


1308
堆栈空间不足。  (1308)

由下述某一原因造成：

 •	   程序出现过多的递归。

 •	   程序太复杂，嵌套太多。

 •	   Visual FoxPro 发生错误


1243
内部错误：报表中字符太多。  (1243)

CREATE REPORT 或者 MODIFY REPORT 定义的报表表头和表达式总大小超出限制，以致在标准的报表中不能容纳。


231
SET 函数中使用了无效参数。  (231)

SET 函数中使用了无效的参数。


1477
执行 SQLCOLUMNS( ) 序列时进行了无效的调用。  (1477)

在需要 SQLCOLUMNS( ) 继续进行 SQL 传递 (SPT) 函数调用序列时，出现非法的 SQL 传递函数调用。可使用 SQLCANCEL( ) 取消 SPT 调用或使用有效的 SPT 调用序列。


1474
执行 SQLEXEC( ) 序列时进行了无效的调用。  (1474)

在需要 SQLEXEC( ) 继续进行 SQL 传递 (SPT) 函数调用序列时，出现非法的 SQL 传递函数调用。可使用 SQLCANCEL( ) 取消 SPT 调用或使用有效的 SPT 调用序列。


1475
执行 SQLMORERESULTS( ) 序列时进行了无效的调用。  (1475)

在需要 SQLMORERESULTS( ) 继续进行 SQL 传递 (SPT) 函数调用序列时，出现非法的 SQL 传递函数调用。可使用 SQLCANCEL( ) 取消 SPT 调用或使用有效的 SPT 调用序列。


1476
执行 SQLTABLES( ) 序列时进行了无效的调用。  (1476)

在需要 SQLTABLES( ) 继续进行 SQL 传递 (SPT) 函数调用序列时，出现非法的 SQL 传递函数调用。可使用 SQLCANCEL( ) 取消 SPT 调用或使用有效的 SPT 调用序列。


1783
@...Class 命令中指定的类无效。  (1783)

不能对 @ ... Class 命令指定一个表单、表单集或者工具栏类。有关详细内容，请参阅 @ ... Class 主题。


无效的压缩 EXE 文件。

压缩的可执行文件 (.EXE) 已经破坏，请重新连编。


1578
无效的数据库表名。  (1578)

有效的数据库表名只能包含字母、数字和/或空格，且不能以数字开头，长度不能超过 128 个字符。


1245
标签定义文件中使用了无效的表达式。  (1245)

在标签文件 (.LBX) 中出现无效表达式。


1111
无效的文件描述符。  (1111)

Visual FoxPro 不能打开一个文件。如果发生这种错误，请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”，然后再寻求 Microsoft 产品支持服务。


1510
无效的文件格式。如果是 dBASE 文件,必须首先进行转换。要转换此文件，请键入 MODIFY LABEL <标签文件名>. (1510)

转换 dBASE 文件再重新进行操作。


112
无效的关键字长度。  (112)

指定的索引关键字长度无效。.IDX 索引关键字的长度应该在 1 到 100 个字符之间，.CDX 索引关键字的长度必须在 1 到 254 个字符之间。


1115
 无效的临时表操作。  (1115)

不能用 PACK 命令对临时表进行操作。


 EXE 文件无效或者没找到

指定的 .EXE 文件已损坏或者没有找到。


202
无效的路径或文件名。  (202)

执行的 Visual FoxPro 命令中包含无效的路径或者文件名。


1103
无效的寻找偏移量。  (1103)

请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”，然后再寻求 Microsoft 的产品支持服务。


31
无效的下标引用。  (31)

下标使用范围超出了 DIMENSION 语句中数组定义的有效范围，在一维数组中使用两个下标也会造成此错误。


1479
无效的更新列名“<名称>”。  (1479)

在视图的列清单中没有找到指定的列名，请修改该列名。


1652
无效。不能将一个 Visual FoxPro 函数用作数组。  (1652)

Visual FoxPro 在需要数组时遇到了函数。可用有效的数组名代替以纠正此错误。


1223
无效的变量引用。  (1223)

在需要内存变量的地方使用了函数，造成此错误的原因经常是由于使用了有效的函数名或者缩写作为数组名。


1124
关键字超出允许大小。  (1124)

索引表达式编译后超过 150 个字节。


1117
关键字字段长度不匹配。  (1117)

在两个文件之间使用 UPDATE 或者 SET RELATION TO 命令进行操作时关键字字段长度不匹配。


1255
键标记“<标记名>”无效。  (1255)

所使用的键标记不被支持，参阅 ON KEY LABEL 查看所支持的键标记。


1257
键字符串太长。  (1257)

KEYBOARD 中包括的字符表达式过长，请减小长度。


356
键盘宏文件格式无效。  (356)

使用了无效的键盘宏文件。


54
标签文件无效。  (54)

试图对一个不是用 CREATE LABEL 或者 MODIFY LABEL 命令建立的标签文件进行修改或打印操作。


1653
标签嵌套错误。  (1653)

在一个标签中的用户自定义函数调用了 LABEL FORM。


221
左页边距包括缩进值必须小于右页边距。  (221)

右页边距位置必须大于左页边距位置。调整页边距设置，再进行操作。


21
内存变量字符串长度超出内存限制。  (21)

所有内存变量字符串的长度总和超出内存的限制。


1908
参数的长度或小数点位置无效。  (1908)

在 STR( ) 函数中参数的长度或小数位数无效。

指定的左页边距和段落缩进之和超过右页边距。


1691
库文件“<名称>”无效。  (1691)

Visual FoxPro 不能使用指定的库，请重新建库。


18
行太长。  (18)

超出了命令行的最大长度限制 (2048 个字节)。宏替换可造成此错误。


222
行号必须小于页长。  (222)

所用的行号超过用内存变量所指定的页长度。


1194
链接命令失败。  (1194)

发生了编译错误，在磁盘上不能建立 .EXE 文件。


1911
此环境要求使用本地化产品。  (1911)

在非美国版的系统上使用了美国版本的 Visual FoxPro。


58
LOG( ): 不能使用 0 或负数作为参数。  (58)

不能用 0 或者负数作为自然对数的参数。


要求逻辑表达式。

在此处由“表达式生成器”提供的表达式必须为逻辑型表达式。


1662
Lotus 1-2-3 1.0 版文件格式无效。  (1662)

试图导入的 Lotus 1-2-3 文件不是 1.0 版本的文件或者已经毁坏。


297
Lotus 1-2-3 2.0 版文件格式无效。  (297)

试图导入的 Lotus 1-2-3 文件不是 2.0 版本的文件。在导入之前请使用 Lotus 转换器工具把文件转换为 2.0 版本。


1678
Lotus 1-2-3 3.0 版文件格式无效。  (1678)

试图导入的 Lotus 1-2-3 文件不是 3.0 版本或者已经毁坏。


355
此宏未定义。  (355)

试图使用一个不存在的宏。


1609
超出了允许的菜单项最大长度(50)。  (1609)

减少菜单项数目。


1607
超出了允许的菜单项数目 (128)。  (1607)

超出了菜单中可包含菜单项的最大数目（128）。


1608
超出了允许的菜单数目 (25)。  (1608)

超出了可定义菜单的最大数目（25）。


1431
超出了允许的 OLE 参数数目。  (1431)

对 OLE 自动化方法指定的参数超过了 Visual FoxPro 的限制。调用方法时，必须少于 64 个参数。


392
导入文件的记录长度超出允许的最大长度。 (392)

要导入的文件中包含超过 4,001 字节长度的字段。


1943
成员“<名称>”不是一个对象。  (1943)

无效的语法结构。语句需要计算的下一个元素应该为一个对象，但却不满足此条件。例如，如果一个 myform 表单包含 text1 文本框，执行 myform.txt.value = help 命令时会出现这个错误，正确的命令是 myform.text1.value = help。


1760
成员“<名称>”是一个类成员。  (1760)

试图从对象中移去一个成员，由于成员是对象基类的成员，因此不能移去。要去掉此成员，必须修改类。


1975
成员对象“<名称>”没有实例化。  (1975)

在对象实例化之前，在 Init 事件中引用了该成员对象。


41
备注文件“<名称>”缺少或无效。  (41)

试图使用一个表文件，与该表文件相关的备注文件（.DBT 或者 .FPT）被删除、移去或没找到。


55
内存变量文件无效。  (55)

在无效的备注文件 (.MEM) 上使用 RESTORE FROM 语句。


1687
菜单文件无效。  (1687)

指定的菜单文件已损坏。


178
菜单没有用 ACTIVATE MENU 激活。  (178)

试图在菜单激活之前，从中进行选择。


179
菜单没有用 ACTIVATE POPUP 命令激活。  (179)

试图在菜单激活之前，从中选择菜单标题。


168
菜单没有用 DEFINE MENU 定义。  (168)

试图激活一个还未定义的菜单。


165
菜单没有用 DEFINE POPUP 定义。  (165)

试图激活一个还未定义的菜单。


167
菜单项位置必须为正数。  (167)

试图用负数给菜单或者菜单标题指定位置。


1611
菜单项或标题必须是字符型  (1611)

试图使用字符型以外的数据类型定义一个菜单项或者菜单标题。


287
菜单尺寸太小。  (287)

菜单太小以致不能显示菜单项。加大菜单尺寸。


181
ACTIVATE MENU 指定的菜单正在使用。  (181)

试图激活一个已经激活的菜单。


182
ACTIVATE POPUP 指定的菜单正在使用。  (182)

试图激活一个已经激活的菜单。


164
此菜单标题尚未用 DEFINE PAD 定义。  (164)

引用了一个不存在的菜单。


279
菜单没有入栈。  (279)

试图使未入栈的菜单或菜单项出栈。


1765
方法中含有语法错误，未保存。  (1765)

在方法代码中包含了多个过程或者一个类定义。请修改代码，再试一次。


1661
Microsoft Excel 文件格式无效。  (1661)

要导入的 Microsoft Excel 文件可能不是 2.0 版本或者已损坏。


1723
不匹配的 #IF/#ELSIF/#ELSE/#ENDIF 语句。  (1723)

包含了不完整或不正确的 #IF 预处理命令。


1256
键标记中大括号不匹配。  (1256)

在键标记中缺少左大括号或右大括号。


1724
缺少 #ENDIF。  (1724)

执行的 #IF 命令没有匹配的 #ENDIF。


1193
缺少 .RTT 节。  (1193)

Microsoft Visual FoxPro 发布组件没有正确安装。


1306
缺少逗号 (,)。  (1306)

没有找到所需要的逗号。可能未在函数中包含正确数目的参数。


152
缺少表达式。  (152)

没有找到所需要的合法表达式。


1231
缺少操作数。  (1231)

要求两个操作数的操作符缺少第二个操作数，如 ? (13+4)/。


1670
Multiplan 4.0 版文件格式无效。  (1670)

要导入的 Multiplan 文件可能不是 4.0 版的文件或者已损坏。


1710
MULTISELECT 或 MOVER 子句不支持 PROMPT 样式的菜单。  (1710)

带有 PROMPT FILE 或 PROMPT STRUCTURE 子句的命令不允许使用 MULTISELECT 或者 MOVER 子句 。


1145
必须是一个字符或数值型的关键字段。  (1145)

UPDATE ON 中的关键字段必须是字符型、日期型或数值型。


1226
必须是文件变量。  (1226)

在需要一个文件变量字段时，使用了内存变量或者数组变量。


1225
必须是内存变量或数组变量  (1225)

当需要一个内存变量或者数组变量时，使用了文件变量字段。


94
必须指定额外参数。  (94)

DO ... WITH 语句中指定的参数个数大于被调用程序的 PARAMETER 语句中的参数个数。


96
嵌套错误。  (96)

遇到下列情况之一：

 •	   DO 语句没有匹配的 ENDDO 语句，反之亦然。

 •	   SCAN 语句没有匹配的 ENDSCAN 语句，反之亦然。

 •	   FOR 语句没有匹配的ENDFOR 语句，反之亦然。

 •	   LOOP或者EXIT语句在 DO WHILE ... ENDDO， FOR ... ENDFOR 或者 SCAN ... ENDSCAN 之外使用。


1520
没有打开数据库或没有数据库设置为当前数据库。  (1520)

试图执行需要打开数据库或设置当前数据库的操作。使用 OPEN DATABASE 或 SET DATABASE TO 命令，或者在“常用工具栏”的“数据库”下拉列表中选择一个数据库。


1878
没有可 DROP 的默认值。  (1878)

试图用 ALTER TABLE ... DROP DEFAULT 命令对没有默认值的列进行操作，这是非法的。


47
找不到要处理的字段。  (47)

不能找到字段，通常是由于 SET FIELDS TO 正在使用。


138
未发现要复制的字段。  (138)

试图用 COPY 命令将字段复制到一个文件时，不能找到该字段。


1492
没有为要更新的表“<名称>”指定关键列，请使用临时表的 KeyFieldList 属性。  (1492)

没有在 KeyFieldList 属性中指定更新基表的关键列。修改 KeyFieldList 属性使之包含每一更新表的关键列。对大多数视图，可以使用视图设计器设置视图的更新属性，然后将视图保存回数据库中。


1605
没有定义菜单。  (1605)

试图激活还未定义的菜单。


1604
没有定义菜单项。  (1604)

试图对还未定义的菜单项进行 READ 操作。


166
此菜单没有定义菜单项。  (166)

必须为每个菜单定义菜单项。


1621
此菜单没有定义菜单标题。  (1621)

试图激活没有定义菜单标题的菜单。


1964
在 WindowType 属性设置为 READ 或者 READ MODAL 的表单集或表单中找不到页框和页面对象。  (1964)

试图人工建立一个 READ 或者 READ MODAL 类型的表单集，却没有正确的页框和页面组合。此操作只能通过转换器来执行。


1238
找不到 PARAMETER 语句。  (1238)

当调用程序带有参数时，被调用程序必须以 PARAMETER 语句开始。


1649
没有 PRINTJOB 命令与此命令对应。  (1649)

遇到 ENDPRINTJOB 语句而没有与之对应的 PRINTJOB 命令。


1879
无主关键字。  (1879)

试图对不包含主关键字的表使用 ALTER TABLE .. DROP PRIMARY KEY. 命令。这是非法操作。


1796
在当前平台中没有找到记录。  (1796)

试图修改的文件在当前平台上没有记录。使用 TRANSPRT.PRG 传输程序转换此文件。


1877
没有可 DROP 的规则。 (1877)

试图对不包含规则的列使用 ALTER TABLE ... DROP CHECK 命令。这是非法操作。


1774
找不到工作表。  (1774)

当引用的 .XLS 文件中不包含记录，或者当该文件中只有图表或者宏时报告此错误。


1612
没有定义此类菜单或菜单项  (1612)

传递给 READ MENU TO 或 READ MENU BAR TO 的值没有对应的菜单或菜单项。


52
没有打开表。  (52)

Visual FoxPro 试图执行一条表命令时，没有使用任何表。


1491
未指定要更新的表。请使用临时表的 Tables 属性 (1491)

未在视图的 Tables 属性中指定基表。设置该属性以指定可从视图中更新的基表。对多数视图，可以使用视图生成器来设置视图更新属性，然后将该视图保存回数据库中。


45
非字符表达式。  (45)

使用 CALL 调用的模块所带的表达式值不是字符型。


27
非数值表达式。  (27)

使用 SUM 函数操作的字段不是数值型字段。


15
不是一个表。  (15)

Visual FoxPro 试图作为表使用的文件中包含非常规的文件头。


1682
非用户自定义窗口。  (1682)

试图对非用户自定义窗口（如“命令”窗口）使用带有 WINDOW 子句的命令。


256
不是一个有效的 Framework II 数据库或电子表格。  (256)

要导入的文件不是一个有效的 Framework II 格式文件。


255
不是一个有效的 RapidFile 数据库。 (255)

要导入的文件不是一个有效的 RapidFile 格式文件。


56
无足够磁盘空间用于“<文件名>”。  (56)

操作系统将此信息返回给 Visual FoxPro，表明磁盘空间已满，不能包含最后一次写操作的数据。当试图扩展一个没有拥有者的文件时，该错误也可可能由特定版本的 Novell 返回。


1149
无足够内存用于缓冲区。  (1149)

没有足够的内存空间供 Visual FoxPro 分配给缓冲区。这种情况不常发生，仅在可用内存极其有限时才发生。应该考虑增加内存，或者移去一些内存驻留程序使 Visual FoxPro 有更多的内存使用。


1150
无足够内存用于文件映象。  (1150)

没有足够的内存空间供 Visual FoxPro 分配给内部资源。这种情况不常发生，仅在可用内存极其有限时才发生。应该考虑增加内存，或者移去一些内存驻留程序使 Visual FoxPro 有更多的内存使用。


1151
无足够内存用于文件名。  (1151)

没有足够的内存空间供 Visual FoxPro 分配给内部资源。这种情况不常发生，仅在可用内存极其有限时才发生。应该考虑增加内存，或者移去一些内存驻留程序使 Visual FoxPro 有更多的内存使用。


1600
USE 命令没有足够的内存打开一个表。  (1600)

没有足够的内存空间打开另外的表。


1696
NOWAIT/SAVE/NOENVIRONMENT/IN/WINDOW 子句不允许与 FROM 子句联用。 (1696)

在使用 FROM 子句建立快速报表时不能包含这些子句。


39
数值上溢。数据已丢失。  (39)

数学运算的结果太大，以至不能保存在存放它的字段或者变量中。


1766
找不到对象“<名称>”。  (1766)

指定的对象是受保护对象，不能找到。


1923
找不到对象“<名称>”。  (1923)

指定的对象不能找到。


1985
对象已有一个数据环境，不能在 SaveAs 方法中使用另一个。  (1985)

不能使用 SaveAs 方法指定另一个数据环境。


1744
对于此容器，对象库无效。  (1744)

试图通过 AddObject 方法向父类对象中添加一个成员对象。由于成员对象的类不能是父类对象类中的成员，所以不能添加。例如，不能向页面对象中添加表格对象。


1195
对象文件“<文件名>”使用了以前版本的 FoxPro 进行编译。  (1195)

试图运行的程序是在以前版本的 FoxPro 中编译的，请在当前版本中重新编译源代码。


1719
对象文件“<名称>”正在使用，不能从内存中清除。  (1719)

在项目中指定的程序已被挂起。请取消该程序的执行，这样就可以成功地连编项目。


1938
此对象没有包含在“<名称>”中。  (1938)

当指定的父类没有在当前 (THIS) 对象的继承层次之中时，此信息由作用域操作符产生。例如，如果把 FORMSET::CLICK 放入表单的 click 事件中，而该表单又不包含在表单集中时，就会产生此错误信息。


1575
对象名无效。  (1575)

在 AddObject 方法中为成员对象所指定的名称无效。检查该对象名并重试。


1942
不能将对象赋给数组。  (1942)

数组元素只能包含值。


1987
不能以编程方式将对象添加到表单设计器的表单集中。 (1987)

试图以编程方式向表单工具的表单集中添加表单。不能这样做。


1989
不能以编程方式从表单设计器中删除对象。  (1989)

试图以编程方式从表单工具的表单集中删除表单。不能这样做。


1528
未找到 ODBC 入口点“<名称>”。  (1528)

没有在 ODBC32 动态连接库中找到指定函数的入口点。ODBC32.DLL 文件非法。请重新安装 Visual FoxPro ODBC 组件。


1426
 OLE 错误码（十六进制）“<名称>”。  (1426)

得到的是 OLE 对象返回的错误码（16 进制）和有关此错误的简要描述。所应采取的改正措施取决于 OLE 返回的错误类型。


1427
OLE IDispatch 异常码“<名称>”。  (1427)

得到的是 OLE 自动化对象返回的错误码。此错误码与具体的 OLE 对象有关，必须参考该对象的文档以获取更多的信息。该对象没有返回有关此错误的其他任何信息。


1428
 OLE 从“<名称>”返回非正常的代码“<编号>”:“<名称>”(1428)

得到的是 OLE 自动对象返回的错误码。此错误码与具体的 OLE 对象有关，必须参考该对象的文档以获取更多的信息。在这种情况下，对象返回有关此错误的文本描述和错误源（通常是 OLE 对象名）。


1420
OLE 对象无效或损坏。  (1420)

存储在通用字段中的 OLE 对象数据无效。


1965
此类中的某一成员派生自非可视类，因此不能写入 .VCX 文件。  (1965)

在类定义中包含了非可视类，移去它然后重试。


1968
此表单或表单集中的一个成员基于非可视类。不能写入 .SCX 文件  (1968)

在表单集中包含了非可视类。移走它并重试。


1436
只有可插入对象允许在通用字段中出现。 (1436)

可插入对象指的是如 Microsoft Excel 工作表或者 Microsoft Word 文档一类的对象，这些对象允许在通用字段中出现。而非插入对象是指 OLE 控制这样的对象，这种对象不允许在通用字段中出现。


1885
只有结构索引标识才能定义为候选关键字。  (1885)

为候选关键字（用 INDEX ON ... CANDIDATE 创建）指定了一个 IDX 文件，或者所指定的索引标识不包含在给定的 CDX 文件中。请在结构 CDX 文件中创建候选索引。


1912
对于通用字段此操作非法。  (1912)

试图对通用字段执行非法操作，如计算或者索引。


34
对备注字段、通用字段或图片字段此操作无效。  (34)

INDEX 命令不能指定一个备注字段作为关键字表达式。

没有足够的内存供 Visual FoxPro 完成此操作。


107
操作符/操作数类型不匹配。  (107)

一个算术操作符、字符串操作符或逻辑操作符或相应的函数使用了非法的数据类型。例如，对两个逻辑值相加，就会产生此错误。


1688
Paradox 文件格式无效。  (1688)

要导入的 Paradox 文件不是 3.5 版文件格式或者已损坏。


1767
父对象不允许对“<名称>”进行此属性设置。  (1767)

试图为某对象设置的属性值由该对象的父对象控制。例如，为一个包含于表格列中的控制（如 TEXT1）设置 ControlSource 属性，并且该表格列的 Bound 属性设置为“真”(.T.) 时，会发生此错误。这是因为该控制 (TEXT1) 的 ControlSource 属性继承了表格列的 ControlSource 属性。


1217
GET 语句中的 Picture 子句发生错误。  (1217)

@ ... SAY 或 @ ... GET 语句中的 PICTURE 子句不能对要进行格式编排的值进行格式设置。这是由于格式模板损坏或者要进行格式编排的值与格式模板不匹配。


1108
图形太大、损坏或格式错误。  (1108)

试图使用无效的图形文件。


弹出式菜单太大，只显示前 <expN> 项。

在菜单中指定了太多要显示的菜单项。


1722
预处理表达式无效。  (1722)

预处理命令（#IF 等）中只允许简单的表达式（求值、连接和数学表达式）。


1681
PREVIEW 子句不能与 OFF/NOCONSOLE 或 TO PRINT/FILE 联用。  (1681)

在控制台不活动，或者向打印机以及文件输出时，不允许页面预览。


1883
主关键字已经存在。  (1883)

试图对已经有主关键字的表使用 ALTER TABLE ... ADD PRIMARY KEY 命令。应首先移去已有的主关键字。


1956
不能访问打印机。  (1956)

内部调用 Win32 OpenPrinter( ) 函数失败。Visual FoxPro 通过 PRTINFO( ) 或者 SET PRINT TO 调用这个函数。


1643
打印机驱动程序损坏。 (1643)

试图加载已损坏的打印机驱动程序。


1644
找不到打印机驱动程序。  (1644)

不能找到指定的打印机驱动程序。


125
打印机未准备好。  (125)

当前不能访问指定的打印机设备，或者打印机已经超时。可能需要增大 Visual FoxPro 配置文件中 TIME 的参数值。


124
打印机重定向无效。  (124)

打印机路径没有建立，或者打印设备不能共享。


1162
找不到过程“<过程名>”。  (1162)

不能找到 DO 命令中 IN 子句指定的过程名。


1937
找不到过程文件“<名称>”。  (1937)

RELEASE PROCEDURE <名称>命令中指定的过程名不在 SET PROCEDURE 过程名列表中。


产品没有正确安装。

请重新安装 Visual FoxPro 。


1202
程序太大。  (1202)

Visual FoxPro 不能将要加载的程序装入内存。Visual FoxPro 可以加载的程序或单独的过程最大为 65000 字节。


1946
项目文件“<名称>”版本不对。  (1946)

指定的项目文件与 Visual FoxPro 版本不匹配。


1685
项目文件无效。  (1685)

指定的项目文件已经损坏。


1169
项目文件是只读的。  (1169)

Visual FoxPro 不允许打开只读的项目文件。在 DOS 提示符下，可使用带 +R 开关的 ATTRIB 命令为项目文件 (.PJX) 设置读权限，然后再打开该项目文件。


1763
属性“<名称>”已经存在。  (1763)

对象已经含有与此同名的属性，请给新属性另起一个名称。


1738
属性“<名称>”不是方法或事件。  (1738)

使用的名称不是方法或者事件。


1734
找不到属性“<名称>”。  (1734)

没有找到指定的属性名。请检查该属性名是否正确，然后重试。


1757
属性“<名称>”受保护。  (1757)

不能修改被保护属性的值。


1743
属性“<名称>”只读。  (1743)

不能改变只读属性的值。


1468
此属性对基于表的临时表无效。  (1468)

对基于表的临时表，不支持此属性，而只对基于视图的临时表有效。请只对基于视图的临时表使用此属性。


1467
此属性对本地临时表无效。  (1467)

对基于本地表和本地视图的临时表不支持该属性，而只对基于远程视图的临时表有效。请只对基于远程视图的临时表使用该属性。


1559
找不到属性。  (1559)

指定的属性名没有找到，或者对指定的对象无效。请检查属性名是否正确，然后重试。确认对象和属性是相容的。


1739
属性设置要到数据环境重新加载时才生效。  (1739)

试图在加载数据环境时，对一个数据环境对象（如关系、临时表）设置属性。该属性值将与对象同时保存，但只有卸载数据环境，再重新载入数据环境时，该属性设置才生效。

� 若要卸载数据环境

 •	   在表单中执行下面命令：

[Formset.]Form.DataEnvironment.CloseTables

� 若要重新加载数据环境

 •	   在表单中执行下面命令：

[Formset.]Form.DataEnvironment.OpenTables


1560
属性值无效。  (1560)

为一个临时表或者数据库对象设置的属性值不在有效的范围之内，或者属性的类型不满足要求。请检查该值是否合法。


1469
属性值超出范围  (1469)

属性值超出允许的范围，请修改该值使之有效。


1716
找不到队列“<队列名>”。  (1716)

没有找到 SET PRINTER TO 命令中指定的队列。


109
其他用户正在使用记录。  (109)

试图对其他用户锁定的记录进行写操作。


20
记录不在索引中。  (20)

在没有激活索引的情况下，修改了使用中的表的关键字段。若要纠正此错误，使用 REINDEX 命令对表文件重建索引。


130
记录没有锁定。  (130)

在没有锁定的记录上使用 BROWSE, CHANGE, EDIT, DELETE, GATHER, MODIFY MEMO, READ, RECALL, 或者 REPLACE 命令。


5
记录超出范围。  (5)

要访问的记录号超过了当前表中实际的记录数。可能是由于当前的索引与表不匹配，请执行 REINDEX 命令重建索引，改正此错误。


1126
记录太长。  (1126)

在建立表文件时，记录的数据部分超出了最大长度限制（65000 字节）。一个记录的数据部分的长度等于各个字段的长度之和。


1583
违反了记录有效性规则。  (1583)

执行的操作违反了记录的有效性规则。请修改该记录值或恢复记录。


1206
递归宏定义。  (1206)

在当前行中执行的宏替换操作超过了最大限制数目（在任何语句中都是 256）。错误原因可能是因为一个宏引用了其自身。


1880
在当前数据库中找不到相关表。  (1880)

一个数据库关系对象被建立或引用（用 CREATE 或 ALTER TABLE 并带子句 REFERENCES <table>），而在当前数据库中找不到相关的表。关系中涉及的两个表必须都在数据库中。


1882
相关标识找不到，或者相关标识不是主索引或候选索引。  (1882)

创建或引用数据库关系对象时（用 CREATE 或 ALTER TABLE 并带有子句 REFERENCES <table> TAG <tag>）找不到相关的信息，或者索引标识不是主索引或候选索引，或者索引标识无效。关系中涉及的表和标识必须都在数据库中。


1645
报表中包含嵌套错误。  (1645)

在报表表单中的用户自定义函数调用了 REPORT FORM 命令。


50
报表文件无效。  (50)

报表说明中含有错误。


1592
ROLLBACK 必须与 BEGIN TRANSACTION 命令配合使用。 (1592)

必须有事务正在进行时，才能使用 ROLLBACK 命令。


30
行或列位置超出屏幕。  (30)

在 @ 命令中指定的行值或列值超出了屏幕、窗口或者打印机允许的行或列数。


1598
规则和触发器代码必须平衡事务的使用。  (1598)

规则和触发器表达式，或由规则和触发器表达式激活的代码，要么开始事务处理，要么终止事务处理，不能兼而有之。触发规则或触发器代码的写操作被放弃。


1405
RUN|! 命令失败。  (1405)

操作系统向 Visual FoxPro 返回错误信息，指出不能建立一个进程来执行 RUN 命令。通常的原因是由于找不到要执行的外壳程序 (shell program)，或者没有足够的内存空间来加载外壳程序。请确认可以通过 MS-DOS 环境的 COMSPEC 变量来访问 COMMAND.COM。


1411
RUN|! 命令字符串太长。  (1411)

包含在 RUN 命令中的字符串太长，允许的最大长度为 240 个字符。


1490
不能将一个已转换表单保存为一个类。  (1490)

试图通过 SaveAsClass 方法保存由 FoxPro 2.x 格式转换而来的屏幕，这是非法操作。


1507
屏幕代码太大，无足够内存。  (1507)

要复制的屏幕对象含有超过 64K 的代码片断。


1851
SELECT 与 UNION 不兼容。  (1851)

被投影的字段数据类型或大小在每条 SELECT 语句中不一致。


1715
找不到服务器“<服务器名>”。  (1715)

找不到 SET PRINTER TO 命令中指定的服务器。


1540
工作期编号无效。  (1540)

进行 SET DATASESSION TO <n> 操作时，<n> 是无效的工作期编号。


没有找到源代码
没有找到源代码。

在指定目录中找不到指定的文件。


源代码已过期。

指定的日期源代码与已编译文件 (.FXP) 不匹配。


1845
SQL 表达式太复杂。  (1845)

Visual FoxPro 在展开 SELECT 语句以进行分析时，内存溢出。


1499
SQL 参数“<名称>”无效。  (1499)

在 SQLEXEC( ) 调用或一个视图定义中的 SQL 参数定义含有语法错误。很可能是缺少字符常量的部分字符或者缺少右括号。检查 SQL 字符串中 ? 操作符后的参数定义，改正语法错误。


1493
缺少 SQL 参数。  (1493)

在 SQLEXEC( ) 或者视图定义中，SQL 语句的参数标识（?）后没有跟随参数表达式，请在参数标识后面添加参数表达式。


1465
SQL 传递内部一致性错误  (1465)

内部 SQL 传递错误，请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”一节，然后再寻求 Microsoft 产品支持服务。


1498
SQL SELECT 语句无效。  (1498)

定义视图的 SQL 语句缺少 SELECT 或者 FROM 子句，请纠正该 SQL 语法错误。


1811
SQL: 对非数值表达式进行合计操作。  (1811)

试图在非数值字段上进行求平均值、求和及求标准偏差等操作。


1802
SQL: 找不到表。  (1802)

未能找到指定的表。


1806
SQL: 找不到列“<字段> | <变量>”。  (1806)

指定的字段或者变量没有找到。


1819
SQL: DISTINCT 无效。  (1819)

在每一级中只能使用一条 DISTINCT 子句。


1831
SQL: 建立临时索引时发生错误。  (1831)

不能建立临时索引，可能由于磁盘空间不足。


1801
SQL: 关联字段时出错。  (1801)

外部引用只能在类似下面的语法中使用：

X = Y

象 X = Y + 1 或者 X = 5 这样的语法会产生此类错误。


1818
SQL: 需要 FROM 子句。  (1818)

SELECT 命令中必须包含 FROM 子句。


1807
SQL: GROUP BY 子句无效。  (1807)

GROUP BY 子句中出现错误。


1803
SQL: HAVING 子句无效。  (1803)

HAVING 子句中出现错误。例如子句中没有包含一个逻辑表达式。


1828
SQL: 子查询中出现非法的 GROUP BY 子句。  (1828)

在使用 +, -, *, /, < 与 >这六个操作符时，只能有一行输出。


1830
SQL: 找不到索引。  (1830)

Visual FoxPro 不能找到已有索引。


1800
SQL: 内部错误。  (1800)

发生了内部错误。请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”一节，然后再寻求 Microsoft 产品支持服务。


1822
SQL: 无效的合计字段。  (1822)

试图在备注字段上进行合计操作。


1865
SQL: UPDATE 中无效的 SET 表达式 (1865)

在执行 UPDATE <table> SET <field> = <expr> 语句时，<expr> 表达式无效。


1810
SQL: 不能使用子查询。  (1810)

子查询不能在此处使用。


1839
SQL: 操作已经取消。  (1839)

在 SAFETY 开关设置为 ON 且用户选择不改写表时，试图对表运行 SELECT 语句。


1808
SQL: ORDER BY 子句无效。  (1808)

ORDER BY 子句所使用的字段不在 SELECT 列表中。只有象下面例子一样使用数值指示字段，并且所使用的数值超过选取字段总数时，此错误发生。

SELECT a,b,c FROM table ORDER BY 4


1809
SQL: 内存不足。  (1809)

在运行 SELECT 命令时，Visual FoxPro 发生内存不足。


1814
SQL: 不支持此类查询。  (1814)

从 FoxPro 2.5 版到现有版本都不支持所运行的查询。


1820
SQL: SELECT 包含无效的 *。  (1820)

试图在合计函数，如 MAX( )，MIN( )，AVG( ) 或者 SUM( ) 中，使用 * 符号。


1826
SQL: SELECT 无效。  (1826)

试图在子查询中选择多个字段。


1804
SQL: 语句无效。  (1804)

投影列表中出现错误。


1812
SQL: 语句太长。  (1812)

目标代码太长，不能进行编译。


1825
SQL: 子查询无效。  (1825)

子查询中出现错误。


1842
SQL: 子查询嵌套太深。  (1842)

Visual FoxPro 不支持子查询嵌套。


1841
SQL: 引用的列太多。  (1841)

在 SELECT 命令中最多能引用 256 个列。


1864
SQL: UPDATE 中字段太多。  (1864)

试图执行更新字段数超过 128 个字段的 SQL-UPDATE 命令。


1805
SQL: 子查询太多。  (1805)

Visual FoxPro 中每条 SELECT 语句允许使用两个子查询。


1834
SQL: UNION 太多。  (1834)

超过了 UNION 数目的最大限制（10个）。


1813
SQL: 在子查询中使用 UNION 无效。  (1813)

Visual FoxPro 不支持在子查询中使用 UNION。


1833
SQL: WHERE 子句无效。  (1833)

WHERE 子句发生错误。


61
SQRT( ) 参数不能为负数。  (61)

SQRT( ) 函数参数不能为负数。


95
在交互方式下不能使用此语句。  (95)

不能在交互方式下使用 IF, ELSE, ENDIF, TEXT, ENDTEXT, EXIT, RETRY, RETURN, SUSPEND, DO WHILE, ENDDO, DO CASE, ENDCASE, SCAN, ENDSCAN, FOR 和 ENDFOR 等命令。


1931
语句不在过程中。  (1931)

语句不允许在 ENDPROC 语句之后。


1927
在类定义中此语句无效。  (1927)

在 DEFINE CLASS 类型的类定义中使用了无效的命令，有效的命令有：ADD OBJECT, ADD PROTECTED OBJECT, DIMENSION, FUNCTION, PROCEDURE 和 PROTECTED。


1928
此语句只在类定义中有效 (1928)

PROTECTED, ADD OBJECT 和 ADD PROTECTED OBJECT 命令只有在类定义中才有效。


1934
此语句只在方法中有效。  (1934)

在方法之外使用了作用域操作符。由于作用域操作符由 THIS 对象引用使用，所以只能在方法中使用。


1903
字符串太长，不能容纳。  (1903)

字符串长度超过限制。


1707
找不到结构 .CDX 文件。  (1707)

没有找到与表文件相关的结构 .CDX 文件。


1235
结构无效。  (1235)

在 CREATE FROM 命令中指定的表结构与 STRUCTURE EXTENDED 格式不匹配。


1212
结构嵌套太深。  (1212)

嵌套的结构化程序命令超过 64 层的限制。


1860
子查询返回了多条记录。  (1860)

由六个一般操作符（ <>, =, <=, >=, < 或 >）链接并排除了 ALL 或 ANY 的子查询只能产生一行结果。


1234
下标超界。  (1234)

试图引用一个数组元素，该元素下标超出 DIMENSION 语句定义的范围。


1236
使用 RESUME 之前须挂起程序。  (1236)

只有当程序挂起时，才能使用 RESUME。


1673
Symphony 1.0 版文件格式无效。  (1673)

要导入的 Symphony 文件可能不是 1.0 版，或者已损坏。


1674
Symphony 1.1 版文件格式无效。  (1674)

要导入的 Symphony 文件可能不是 1.1 版，或者已损坏。


1242
字段表达式中有语法错误。  (1242)

使用了包含一个字段的非法表达式。


10
语法错误。  (10)

执行的命令出现语法错误。可能是命令或变量名拼写错误，或使用的子句在当前环境中无效。


228
制表位必须按递增顺序。  (228)

在 _TAB 系统内存变量定义的制表位必须按升序排列。


1548
表“<别名>”有一个或者多个非结构索引已打开，请关闭这些索引，然后重试 Begin Transaction。  (1548)

关闭所有非结构索引（非.CDX文件）并重新进行操作。如果文件还有其他索引已打开，它们将直接写入磁盘，并且不反映在表的修改当中，除非执行到 END TRANSACTION 命令。这样造成的结果是，如果执行 ROLLBACK 命令，非结构索引将发生错误。


1564
表“<名称>”在数据库中已存在。  (1564)

试图向数据库中添加已经存在于数据库中的表。


1577
表“<名称>”在一个关系中被引用。  (1577)

如果表包含在某一关系中，则不能从数据库中移走这个表，而必须首先删除该关系。


1545
别名“<名称>”的表缓冲区含有不能予以实现的修改。  (1545)

命名临时表含有一个已做了某些修改的表缓冲区，在关闭临时表或者改变缓冲方式之前，必须明确地用 TABLEUPDATE( ) 进行更新或者用 TABLEREVERT( ) 放弃。


1596
没有启用表缓冲。  (1596)

使用 GETNEXTMODIFIED( ) 函数时需要启用表缓冲。


26
表没有设置排序索引。  (26)

此错误可能是由于以下原因造成：

 •	   当遇到带有 RANDOM 选项的 UPDATE 命令时，没有选择表文件的一个索引。

 •	   对未索引的表或 SET ORDER TO 0 语句生效时使用了 FIND 或 SEEK 命令。

 •	   试图在 SET RELATION 命令中对未索引的表或在 SET ORDER TO 0 语句生效时，使用非数值型关系表达式。


17
表编号无效。  (17)

选定的表编号没有在 0 到 225 之间。


1690
在索引过程中表操作无效。  (1690)

在索引表达式所引用的一个用户自定义函数中，试图执行表操作。


1589
表缓冲及行缓冲要求 SET MULTILOCKS 设置为 ON。 (1589)

除了 DB_BUFOFF 之外的所有缓冲方式都需要启用 MULTILOCKS。


1888
标识名太长。  (1888)

标识名不能超过 10 个字符。


1147
目标表已经建立关系。  (1147)

当前选定表文件和它的一个目标之间存在多于一个关系。


1954
生成器程序已经运行。  (1954)

试图在生成器程序运行时再次调用此程序，这是非法操作。


1478
数据环境中关系对象的 ChildOrder 属性不再有效。该关系将被取消。  (1478)

由于数据环境改变，ChildOrder 属性的关系已被取消。


1969
剪贴板中含有一个或多个不能添加入容器内的对象，这些对象将不粘贴。  (1969)

试图将非法的东西，例如工具栏的分隔符，粘贴到表单或控制上。


1935
当前对象不是由类“<名称>”继承而来。  (1935)

指定的类不在当前对象的继承层次之中。


1945
当前对象已经释放。  (1945)

已经在当前对象的 destroy 事件中使用了 RELEASE THIS 命令。


1742
此对象的数据源必须是一个变量引用。  (1742)

为对象指定了非法的数据源或控制源。DataSource 或者 ControlSource 属性必须包含一个变量，您可能指定了一个表达式。


1557
数据库必须以独占方式打开。  (1557)

象 VALIDATE DATABASE RECOVER, PACK DATABASE 这样的命令以及那些建立或修改数据库对象的命令需要以独占方式使用数据库。请关闭此数据库，并用 OPEN DATABASE filename EXCLUSIVE 重新打开。


1997
字段“<名称>”的默认值的求值结果不符合该字段的应有类型。  (1997)

默认表达式的求值结果必须符合字段的数据类型。请更改表达式以使其计算结果符合正确的数据类型。


1962
目录非空。  (1962)

不能删除包含有文件或子目录的目录。


1984
表“<名称>”中的字段与数据库中的项不匹配。  (1984)

在打开数据库表时，Visual FoxPro 要确认表中的每一字段在数据库中是否有一个匹配的字段对象。如果数据库项不匹配，说明数据库或者表已损坏，或者打开的表不是需要的表。可使用 VALIDATE DATABASE 检查错误原因。先把表从数据库中移去，然后再添加进来，可以解决此问题。


1131
FROM 子句中指定的文件是空文件。  (1131)

在此文件中没有记录。


1998
索引“<名称>”的索引表达式中包含对备注字段、通用字段或图片字段的无效引用。  (1998)

不能对备注字段、通用字段或者图片字段进行索引。


42
LOCATE 命令必须在 CONTINUE 命令之前发布。 (42)

在执行 CONTINUE 命令时，没有先执行 LOCATE 命令。


1571
已有对象使用了名称“<名称>”。请使用其他名称。  (1571)

在数据库中，不允许两个顶层对象具有相同的数据库名，使用 DISPLAY DATABASE 命令可以显示数据库中所有的对象。


远程视图向导不能获得此远程表列的信息。
远程视图向导不能获得此远程表列的信息。可能是 ODBC 错误，也可能是因为当前用户不能使用此远程表。

如果使用的查询未包含指定表的所有者名称，那么将不能获得远程表的信息。若要改正此错误，请使用视图设计器在 SQL 字符串中将当前用户名作为表的所有者。

如果仍有错误，则必须在 ODBC 中改正此错误。


1524
选定打印机驱动程序不支持直接访问。  (1524)

在操作系统中选用的打印机驱动程序不支持直接访问。可以在 Windows 中试用 Generic/Text Only 驱动程序或与此等价的驱动程序。请记住 Visual FoxPro 中的“ASCII 文件”选项将使打印的内容不通过打印驱动程序而直接输出到打印机。您应该确保任何以这种方式传送的文件中包含合法的打印命令，并选择了正确的驱动程序。


1531
由于索引 <名称> 的索引表达式或者筛选表达式无效，因而不能执行对表的更改操作。  (1531)

试图使用 ALTER TABLE 命令，其结果可能导致现有的索引或条件表达式非法，尽管 ALTER TABLE 命令没有显式的修改它们。


1659
表含有备注型字段，该字段在以只读方式打开时不能转换。  (1659)

试图在 dBASE IV 格式的备注上进行只读操作。Visual FoxPro 不能在只读操作下转换备注。


1778
此表在追加前必须进行转换。  (1778)

试图对一个非 Visual FoxPro 建立的表使用 APPEND FROM 命令。先备份原始文件，然后转换该文件的副本以供 Visual FoxPro 使用。


1982
TO 子句只能用于模式表单或表单集。 (1982)

试图进行如下操作：DO FORM x TO variable，在非模式表单或表单集中此操作非法。


1996
字段“<名称>”的有效性规则的求值结果不是逻辑型或 NULL 型。  (1996)

字段有效性规则的结果必须为逻辑型或者 NULL 型。


1213
FOR ... ENDFOR 或 DO CASE ... ENDCASE 命令中缺少关键字。  (1213)

有关详细内容，请参阅 FOR ... ENDFOR 和 DO CASE ... ENDCASE 主题。.


43
无足够内存完成此操作。  (43)

释放当前使用的部分内存，重新进行此操作。


1780
此数组元素已经定义为一个对象，不能在类定义中重新定义。  (1780)

一旦将一个数组元素定义为类定义中的对象成员，那么它就不能被重新定义。例如，下面例子就会产生此错误：

DEFINE CLASS test AS form
DIME a[1]
ADD OBJECT a[1] AS commandbutton
a[1] = 10
ENDDEFINE


1782
此 OLE 属性不能是表达式。  (1782)

试图将属性表中的 OLE 属性设置为一个表达式，这是非法操作。


1521
此操作不支持类成员对象。  (1521)

试图关闭或复制类的成员对象。


1533
此属性只读。  (1533)

不能更改只读属性值。


1916
要使用此功能，请在 CONFIG.FPW 文件中设置 CODEPAGE=AUTO 然后重新启动 Visual FoxPro。 (1916)

此错误是由于在 SET COLLATE 命令中使用了无效设置。


1229
缺少参数。  (1229)

调用函数时缺少必要数目的参数。


1230
参数太多。  (1230)

调用函数时参数的数目超过允许值。。


1310
PICTURE 子句中指定字符太多。  (1310)

PICTURE 子句中允许使用的字符数受机器的内存限制。


1872
列太多。  (1872)

每个记录最多包含 255 个字段。


1694
指定的扩展名太多。  (1694)

GETFILE( )， LOCFILE ( ) 或者 PUTFILE ( ) 函数中包含太多的扩展名。可包含的最大数目是 30 个。


6
打开的文件太多。  (6)

Visual FoxPro 打开的文件数超出其内部限制，这是可能是由于 CONFIG.SYS 文件中设置的允许值太小。


22
内存变量太多。  (22)

超出了允许创建的内存变量的最大数目。


1201
使用名称太多。  (1201)

在加载程序或者打开表时，Visual FoxPro 名称表溢出。要改正此错误，可将程序分成几个较小的模块。


1875
更改的关键字太多。  (1875)

在使用 CREATE TABLE 或者 ALTER TABLE 时，添加或取消的关键字不能多于 16 个。


1250
使用了太多的 PROCEDURE 命令。  (1250)

允许使用的过程数目受机器内存的限制。


1249
使用了太多的 READ 命令 (1249)

超出了 READ 语句可嵌套的最大层数（5 层）。


1161
在演示版中不能浏览或编辑太多记录。  (1161)

在 Visual FoxPro 演示版中，可浏览或编辑的最大记录数目为 120 个。


1646
总计字段类型必须是日期型或者数值型。  (1646)

包含总计操作的报表表达式不是数值型。


1246
 总标签宽度超出允许大小。  (1246)

LABEL 命令检查出各个标签宽度的总和加上相互之间的间隔超出允许的最大宽度。


1539
触发器失败。  (1539)

修改记录值使触发器有效，或者恢复该记录。


1532
不支持类型转换。  (1532)

SQL 参数转换错误。属于内部连接错误。请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”一节，然后再寻求 Microsoft 产品支持服务。


1543
字段“<名称>”的 DataType 属性所要求的类型转换无效。  (1543)

活动视图字段的 DataType 属性所指定的远程数据类型和 Visual FoxPro 数据类型之间的转换不被支持。请将该视图字段的 DataType 属性改为有效类型。


1410
不能创建临时工作文件。  (1410)

操作系统不允许建立 SORT 或 INDEX 命令中所需要的临时工作文件。可能是目录空间已满或者对临时工作文件目录的访问权限有问题。


1717
不能生成打印机驱动程序。  (1717)

不能生成或加载与报表或标签相关的选定打印机驱动程序。


不能找到所需的 Visual FoxPro 版本。

需要的 Visual FoxPro 版本不在指定的目录下。


不能处理错误。

如果发生此错误，请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”一节，然后在寻求 Microsoft 产品支持服务。在这种情况下，不返回任何错误码。Visual FoxPro 将关闭所有已打开文件并退出。


1884
索引“<名称>”不唯一。  (1884)

主关键字或者候选关键字的唯一性被破坏。请修改记录值或者恢复记录。


不能识别的错误码 <expN>。

如果发生此错误，请先参阅《开发指南》第十六章“测试和调试应用程序”中的“解决问题”一节，然后再寻求 Microsoft 产品支持服务。在这种情况下，不返回任何错误码。Visual FoxPro 将关闭所有已打开文件并退出。


104
不能识别的功能键。  (104)

试图用 SET FUNCTION 命令指定一个与现有功能键名称或编号不匹配的功能键。


1925
不能识别的成员“<名称>”。  (1925)

系统试图计算 OBJVAR.MEMBEROBJ.PROPERTY 结构，而名为 MEMBEROBJ 的成员不存在。


16
不能识别的命令谓词。  (16)

在命令行中使用了无效的 Visual FoxPro 命令。


1141
不能识别索引文件所做的改动，请重建索引。  (1141)

索引的文件格式与此 Visual FoxPro 版本不兼容。请重建该索引。


1692
无法解决的 REGIONAL 名称冲突。  (1692)

Visual FoxPro 试图建立一个已经存在的 REGIONAL 型变量。


1595
发生更新冲突。在当前行批处理中的一些修改已经执行。请使用带 lForce 参数的 TABLEUPDATE( ) 函数进行更新，或进行人工事务处理，回滚更新。  (1595)

多表更新没有包含在远程事务处理之中，更新操作失败。更新中涉及的一些表可能已经提交给远程基表。强制更新当前行或当前行批处理，或者使用人工事务回滚当前连接上的更新操作。


1585
发生更新冲突。请使用带 lForce 参数的 TABLEUPDATE( ) 函数来实现更新操作或使用 TABLEREVERT( ) 来回滚更新操作 (1585)

更新视图时发现了开放式锁定冲突。如果想向基表提交所做的更改，请调用 TABLEUPDATE( ) 函数并带上 lForce 参数。这将改写最后一次取视图时对基表所做的更改。调用 TABLEREVERT( ) 命令可以放弃对视图所做的修改。


12
找不到变量“<变量>”。  (12)

没有找到指定的变量。


1134
变量必须在选定表中。  (1134)

在快速屏幕中，只能使用当前选定表中的字段。


1494
视图定义已经更改。  (1494)

数据库中的视图定义已经更改，不能再次对该视图进行查询。关闭并重新打开这个视图。要确保视图不被更改，请以独占方式打开数据库。


1568
视图字段已经更改。更新和关键字字段属性重新设置为默认值。  (1568)

试图修改一个基表结构已经改变的视图。单击“确认”时，视图设计器显示视图先前状态，但“更新条件”选项卡被重置为默认状态。视图不进行更新。


127
视图文件无效。  (127)

试图打开的视图文件包含无效数据。


1597
视图要求使用 DB_BUFOPTROW 或 DB_BUFOPTTABLE。  (1597)

只有在开放式缓冲方式下，基于本地或者远程视图的临时表才能更新。


1922
卷不存在。  (1922)

SET VOLUME TO 命令中含有无效的 TO 参数。


1485
警告: 在记录“<编号>”处有无效的数据转换。  (1485)

从远程结果集记录<编号>中取数据时发生数据转换错误。ODBC 驱动程序不能将一些远程数据转换为本地视图数据类型。在取数据之前，在远程 SQL 语句调用中使用转换函数把数据转换为另一类型；或者使用视图字段的 DataType 属性改变本地视图数据类型。


1486
警告: 在记录“<编号>”处有无效的备注字段转换。  (1486)

在远程结果集记录<编号>中取大量数据时发生备注字段转换错误。ODBC 驱动程序不能将一些远程的大量数据转换为本地视图数据类型。在取数据之前，在远程 SQL 语句调用中使用转换函数把数据转换为另一类型；或者使用视图字段的 DataType 属性改变本地视图数据类型。用与具体服务器相关的设置值限制大数据值的数据传送数量。


1496
警告: 没有可用于检查远程更新冲突的信息。  (1496)

ODBC 驱动程序没有报告 UPDATE、DELETE 或 INSERT 语句影响的记录数。使用此连接的远程视图的开放式锁定冲突将不能报告。应确保您的更新代码能处理此后台限制。


1483
警告: 不能设置连接包大小。  (1483)

ODBC 驱动程序不能设置连接包大小。连接将使用默认驱动程序定义的连接包大小，这样做可能会影响该连接的操作。查找驱动程序和网络的文档，寻找可替代的方法，再设置网络包大小。


1480
警告: 不能设置连接的同步/异步方式。  (1480)

ODBC 驱动程序不能设置连接的同步/异步方式。连接将使用默认驱动程序定义的同步/异步方式。当 ODBC 调用正在进行时，不允许 SQL 传递函数返回控制。


1481
警告: 不能设置连接超时  (1481)

ODBC 驱动程序不能设置连接超时。当 ODBC 调用正在进行时，不允许 SQL 传递函数返回控制。


1487
警告: 不能设置连接事务方式。  (1487)

ODBC 驱动程序不能设置连接事务方式。连接将使用默认驱动程序定义的事务方式。


1495
警告: 表 “别名” 中 KeyField 属性定义的关键字不唯一。  (1495)

在更新远程视图操作的基表中，为该表指定的关键字不唯一，使用 KeyField 视图属性重新定义。


1484
警告: 下一个更改的“<字符串>”已经被远程修改 (1484)

在远程基表中批处理成功完成之后，如果还要在视图临时表中对远程视图中这批记录进行修改时，此错误发生。需要关闭 SendUpdates 视图属性，再使用 TABLEUPDATE( ) 提交这些记录。


1482
警告: 不能设置查询超时。  (1482)

ODBC 驱动程序不能设置连接查询超时。连接将使用默认驱动程序定义的查询超时设置。


1955
WIN.INI 或注册表损坏。  (1955)

试图使用 PRTINFO( ) 或 SET PRINT TO 命令从操作系统中获得打印信息，但没有选定默认的打印机。使用“控制面板”中的“打印机”选定默认的打印机。


214
窗口没有用 DEFINE WINDOW 定义。 (214)

试图激活还未定义的窗口。使用 ACTIVATE WINDOW 命令之前应用 DEFINE WINDOW 定义窗口。


1632
窗口文件格式无效。  (1632)

要还原的窗口定义文件(.WIN)中包含无效的数据。


215
窗口没有用 ACTIVATE WINDOW 激活 (215)

试图使用未激活的窗口。


332
DEFINE WINDOW 中指定的窗口使用了无效的坐标。  (332)

试图在允许范围之外定义窗口的坐标。


1939
WITH/ENDWITH 不匹配(1939)

每个 WITH 语句必须有相应的 ENDWITH 语句与之匹配。


1775
找不到工作表“<名称>”。  (1775)

指定的工作表名不匹配指定的 .XLS 文件中的名称。检查此名称是否正确，然后重试。


1680
Lotus 1-2-3 3.0 版文件的 Worksheet A 被隐藏。  (1680)

不能导入隐藏的工作表。


1127
FOR 或 WHILE 子句中必须使用逻辑表达式。  (1127)

命令中的 FOR 或 WHILE 子句没有包含逻辑表达式。


37
FILTER 子句中必须使用逻辑表达式 (37)

在 SET FILTER TO 命令中使用的表达式不是逻辑表达式。


表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)

请参阅

Visual FoxPro 使用表存储数据，并根据存储数据的不同定义了不同的文件类型，作为表文件保存的文件类型有：

 •	   表 (.DBF)

 •	   数据库 (.DBC)

 •	   表单 (.SCX)

 •	   标签 (.LBX)

 •	   菜单 (.MNX)

 •	   项目 (.PJX)

 •	   报表 (.FRX)

 •	   可视类库 (.VCX)

由于上述文件实际上就是表，因此能够以浏览 .DBF 文件的方式使用和浏览这些文件。

表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后（连续的字节），包含字段中实际的文本。

有关各种文件类型的表结构的详细内容，请参阅表文件的表结构。

记录的长度（以字节为单位）等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。

表头记录的结构

字节偏移	说明
0	文件类型 0x02 FoxBASE 0x03 FoxBASE+/dBASE III PLUS，无备注 0x30 Visual FoxPro 0x43 dBASE IV SQL 表文件，无备注 0x63 dBASE IV SQL 系统文件，无备注 0x83 FoxBASE+/dBASE III PLUS, 有备注 0x8B dBASE IV，有备注 0xCB dBASE IV SQL 表文件，有备注 0xF5 FoxPro 2.x （或早期版本），有备注 0xFB FoxBASE
1 - 3	最近一次更新的时间 (YYMMDD)
4 - 7	文件中的记录数目
8 - 9	第一个数据记录的位置
10 - 11	每个数据记录的长度（包括删除标记）
12 - 27	保留
28	表的标记 0x01 带有 .MDX 的文件 0x02 文件包含备注 0x04 文件是数据库 (.DBC)
29	代码页标记
30 - 31	保留，包含 0x00
32 - n	字段子记录 字段的数目决定了字段子记录的数目。表中每个字段都对应一个字段子记录。
n+1	头记录终止符 (0x0D)
n+2 - n+264	此范围内的 263 个字节包含后链信息（相关数据库 (.DBC) 的相对路径）。如果第一个字节为 0x00，则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。
1 头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。数据记录从删除标记字节开始。如果此字节为 ASCII 空格 (0x20)，该记录没有删除标记，如果第一字节为星号 (0x2A),该记录有删除标记。在标记之后是字段字记录中所命名各字段中的数据。

字段子记录结构

字节偏移	说明
0 - 10	字段名（最多 10 个字符 若少于 10 则用空字符 (0x00) 填充）
11	字段类型 C 字符型 Y 货币型 N 数值型 F 浮点型 D 日期型 T 日期时间型 B 双精度型 I 整型 L 逻辑型 M 备注型 G 通用型 C 字符型（二进制） M 备注型（二进制） P 图片型
12 - 15	记录中该字段的偏移量
16	字段长度（以字节为单位）
17	小数位数
18	字段标记 0x01 系统列（用户不可见） 0x02 可存储 null 值的列 0x04 二进制列（只适于字符型和备注型）
19 to 32	保留
有关对每个记录中字符的限制以及字段数目的最大值等详细内容，请参阅 Visual FoxPro 系统容量。

说明

除非在文件中添加下列功能，否则 Visual FoxPro 3.0 将不修改按 FoxPro 2.x 文件格式保存的文件标头：

 •	   支持 null 值

 •	   日期时间型、货币型及双精度型数据

 •	   字符字段和备注字段标记为二进制

 •	   在数据库 (.DBC) 文件中添加表

提示

可以使用下面的公式求出表文件中字段的数目：

(x  296/32)

其中：
x =第一个记录的位置（表头记录的第 8 到第 9 个字节）。
296 = 263（后链信息）+ 1（头记录终止符）+ 32（第一个字段子记录）
32 =字段子记录的长度


请参阅

Visual FoxPro 支持的代码页

表文件 (.DBC，.FRX，.LBX，.MNX，.PJX，.SCX，.VCX) 的表结构

数据类型和字段类型


表文件 (.DBC,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX) 的表结构
表文件 (.DBC，.FRX，.LBX，.MNX，.PJX，.SCX，.VCX) 的表结构

请参阅

关于表结构的说明存储在 FILESPEC 目录下的文件中。FILESPEC 目录包含两个项目：30SPEC.PJX 和 26SPEC.PJX。30SPEC.PJX 包含说明 Visual FoxPro 3.0 版表文件的表和报表。而 26SPEC.PJX 包含说明 FoxPro 2.6 版表文件的表和报表。

要查看关于某种表结构的说明，请打印相应的报表。下表列出了文件类型及其相关报表。有的文件类型由于列太多而无法放在同一页上，因而需要多个报表。

附注

所有报表均设置为横向打印格式。

Visual FoxPro 3.0 版

要查看下列表结构	打印此报表	使用
数据库1	30DBC.FRX	30DBC.DBF
表单和 可视类库	30SCX1.FRX 30SCX2.FRX 30SCX3.FRX	30SCX.DBF
菜单	30MNX.FRX	30MNX.DBF
项目	30PJX1.FRX 30PJX2.FRX	30PJX.DBF
报表和 标签	30FRX1.FRX 30FRX2.FRX	30FRX.DBF
1 可以在 30DBCPRO.FRX 中打印数据库的属性。
FoxPro 2.6 版

要查看下列表结构	打印此报表	使用
屏幕	26SCX1.FRX 26SCX2.FRX	26SCX.DBF
菜单	26MNX.FRX	26MNX.DBF
项目	26PJX1.FRX 26PJX2.FRX	26PJX.DBF
报表和 标签	26FRX1.FRX 26FRX2.FRX	26FRX.DBF


请参阅

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)


备注文件的结构 (.FPT)

请参阅

备注文件包含一个头记录以及任意数目的块结构。头记录中包含指向下一个自由块的指针以及以字节为单位表示的块大小。块的大小是在创建文件时由 SET BLOCKSIZE 命令确定的。头记录从文件位置 0 开始并占用 512 个字节。命令 SET BLOCKSJZE TO 0 设置块大小为 1。

头记录之后是包含块标头与备注文本的各个块。表文件包含有用于引用备注块的块编号。备注文件中某个块的位置可由该块的编号与块大小（在备注文件的头记录中建立）相乘得到。所有的备注块均由偶数的块边界地址开始。每一备注块可以占用一个以上的连续块。

备注头记录

字节偏移	说明
00-03	下一个自由块的位置1
04-05	未使用
06-07	块大小（每个块的字节数）1
08-511	未使用
1 存储整数时，高位字节在前。
备注块标头与备注文本

字节偏移	说明
00-03	块签名 1 （指示块中数据的类型） a. 0  图片（图片字段类型） b. 1  文本（备注字段类型）
04-07	备注长度 1 （以字节为单位）
08-n	备注文本（n = 长度）
1 存储整数时，高位字节在前。


请参阅

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)


索引文件的结构 (.IDX)

请参阅

索引文件包含一个头记录以及一个或多个结点记录。头记录包含根结点、当前的文件大小、关键字长度、索引选项与签名以及用可打印的 ASCII 表示的关键字值和 FOR 表达式。头记录从文件位置 0 开始。

其余的结点记录包含属性值，现有的关键字数目以及指向当前结点的左结点和右结点（在同一层次上）的指针。另外还包含有一组字符，其中包括关键字值和指向某个低级结点或实际的表记录编号的指针。输出到文件中的每个记录的大小为 512 字节。

索引头记录

字节偏移	说明
00-03	指向根结点的指针
04-07	指向自由结点列表的指针（如果不存在则为 -1）
08-11	指向文件尾的指针（文件大小）
12-13	关键字长度
14	索引选项（下列某一数值或它们的和）： a. 1  唯一索引 b. 8  索引包含 FOR 子句
15	索引签名（供将来使用）
16-235	关键字表达式（未编译；最多 220 个字符） 1,3
236-455	FOR 表达式（未编译；以 null 值字节结束，最多220 个字符）
456-511	未使用
索引结点记录

字节偏移	说明
00-01	结点属性（下列某一数值或它们的和）： a. 0  索引结点 b. 1  根结点 c. 2  叶结点
02-03	现有关键字的数目（0，1 或更多）
04-07	指向当前结点左结点的指针（在同一层次上；如果不存在，则为 -1）
08-11	指向当前结点右结点的指针（在同一层次上；如果不存在，则为 -1）
12-511	最多有 500 个字符，其中包括关键字长度的值，以及一个四字节的十六进制数表示（按照一般的自左而右的格式存储）： 如果结点为叶结点（属性=02 或03），这四个字节包含以十六进制格式表示的实际表记录编号；否则，这四个字节包含内联-索引指针.2。 字节 02-03，指定在这组字符中关键字/四字节十六进制数组合出现的次数。
附注

1 关键字类型并不存储在索引中。必须由关键字表达式确定。

2 除了字符串、关键字值和叶结点中四字节数以外的所有数值均以反码 (Intel 8086 格式) 表示。

3 使用数字作为关键字时要经过特殊处理。将使用下列算法转换数，使得它们可以按照与字符相同的 ASCII 的排序序列进行排序。

a. 	将数转换为 IEEE 浮点数格式。

b. 	交换字节的顺序，从 Intel 8086 顺序转换为自左而右的顺序。

c. 	如果是负数，则对该数逻辑求反（交换全部的 64 位，1 变成 0，0 变成 1）；否则，只对最左边的位求反。

排序树结构示例

在下面结构中查找关键字时，需要在根结点和叶结点之间的某个路径上搜索。在最低层上的结点是叶结点。因为关键字已进行了排序，因而子树中的所有关键字均小于或等于父结点的关键字。

上图中，使用字母作为关键字值。另外，每个关键字之后还有一个四字节的十六进制数。与叶结点中关键字相关联的数是实际的表编号—其他结点中的关键字都有与之关联的内联索引指针。

索引结点记录的 12—511 字节可分解如下：

在 12—511 字节中，关键字值/十六进制数组合共出现 n 次， n 为现有关键字的数目。


请参阅

压缩索引文件的结构 (.IDX)

复合索引文件的结构 (.CDX)

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)


压缩索引文件的结构 (.IDX)

请参阅

压缩索引头记录

字节偏移	说明
00-03	指向根结点的指针
04-07	指向自由结点列表的指针（如果不存在，则为  1 ）
08-11	保留供内部使用
12-13	关键字长度
14	索引选项（下列某一数值或它们的和） a. 1 唯一索引 b. 8 索引包含 FOR 子句 c. 32   压缩索引格式 d. 64   复合索引标头
15	索引签名
16-19	保留供内部使用
20-23	保留供内部使用
24-27	保留供内部使用
28-31	保留供内部使用
32-35	保留供内部使用
36-501	保留供内部使用
502-503	升序或降序 a. 0  = 升序 b. 1  =降序
504-505	保留供内部使用
506-507	FOR 表达式池长度1
508-509	保留供内部使用
510-511	关键字表达式池长度1
512-1023	关键字表达式池（未编译）
1 该信息追踪关键字表达式池中使用的空间。
压缩索引内部结点记录

字节偏移	说明
00-01	结点属性（下列某一数值或它们的和）： a. 0  索引结点 b. 1  根结点 c. 2  叶结点
02-03	现有关键字的数目（0，1 或更多）
04-07	当前结点的左结点指针（在同一层次上；如果不存在，则为-1）
08-11	当前结点的右结点指针（在同一层次上；如果不存在，则为-1）
12-511	最多有 500 个字符，其中包括关键字长度的值，用四字节的十六进制数表示（按照一般的自左而右的格式存储）： 此结点总是包含索引关键字、记录编号及内联-索引指针2。 字节02-03 指定的数决定键值/四字节十六进制数组合出现的次数。
压缩索引外部结点记录

字节偏移	说明
00-01	结点属性（下列某一数值或它们的和）： a. 0 索引结点 b. 1 根结点 c. 2 叶结点
02-03	现有关键字的数目（0，1或更多）
04-07	当前结点的左结点指针（在同一层次上；如果不存在，则为 -1）
08-11	当前结点的右结点指针（在同一层次上；如果不存在，则为 -1）
12-13	结点上可用的自由空间
14-17	记录号掩码
18	重复字节计数掩码
19	后缀字节计数掩码
20	用作记录号的比特位数
21	用作重复计数的比特位数
22	用作后缀计数的比特位数
23	包含记录号、重复计数及后缀计数的字节数
24-511	索引关键字的信息2
2 每项均由记录号、重复字节计数及后缀字节计数组成，并且都为压缩形式。关键字文本放置在结点的逻辑末尾，向后起作用，适用于当前的各个关键字项。


请参阅

索引文件的结构 (.IDX)

复合索引文件的结构 (.CDX)

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)


复合索引文件的结构 (.CDX)

请参阅

所有复合索引均为压缩索引。

存在一种追踪 .CDX 文件中所有标识的文件结构。该结构与压缩索引文件的结构只有一点不同：该结构中最低层的叶结点指向复合索引中的标识。

索引中所有标识均有各自的完整结构，并与 .IDX 文件的压缩索引结构等价。


请参阅

索引文件的结构 (.IDX)

压缩索引文件的结构 (.IDX)

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)


宏文件的格式 (.FKY)

请参阅

文件头

字节偏移	说明
01-03	签名，十六进制 79FF
04-15	忽略
16-17	宏的数目（二进制）
18-end	宏
单独宏

字节偏移	说明
00-19	宏名
20-21	宏长度（以键击数表示，二进制）
22-23	键击（两字节，二进制）
24-end	宏键击


请参阅

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)


Visual FoxPro 支持的代码页

请参阅

代码页是与特定的语言或硬件平台相对应的字符集。在不同的平台和代码页上，重音字符用不同的值表示。另外，在某个代码页上可用的一些字符可能在另一个代码页上不可用。

代码页	平台	代码页标识符
437	美国 MS-DOS	x01
620 1	波兰 MS-DOS	x69
737 1	希腊 MS-DOS(437G)	x6A
850	国际 MS-DOS	x02
852	东欧 MS-DOS	x64
861	冰岛 MS-DOS	x67
865	北欧 MS-DOS	x66
866	俄国 MS-DOS	x65
895 1	捷克 MS-DOS	x68
857	土尔其 MS-DOS	x6B
1250	东欧 Windows	xC8
1251	俄国 Windows	xC9
1252	Windows ANSI	x03
1253	希腊 Windows	xCB
1254	土尔其 Windows	xCA
10000	标准 Macintosh	x04
10006	希腊 Macintosh	x98
10007 1	希腊 Macintosh	x96
10029	Macintosh EE	x97
1 在配置文件中包括 CODEPAGE=AUTO 语句时不能发现。
有关代码页的详细内容，请参阅深入了解代码页。


请参阅

深入了解代码页

在 .DBF 文件中查找代码页标记

添加代码页标记

移去代码页标记

更换 .DBF 文件的代码页

指定文本文件的代码页

确定项目文件的代码页


文件扩展名与文件类型

请参阅

本表列出了 Visual FoxPro 使用的文件扩展名及其关联的文件类型。

扩展名	文件类型
.ACT	向导操作图的文档
.APP	生成的应用程序
.CDX	复合索引
.DBC	数据库
.DBF	表
.DCT	数据库备注
.DCX	数据库索引
.DLL	Windows 动态链接库
.ERR	编译错误
.EXE	可执行程序
.FKY	宏
.FLL	FoxPro 动态链接库
.FMT	格式文件
.FPT	表备注
.FRT	报表备注
.FRX	报表
.FXP	编译后的程序
.HLP	图形方式帮助
.IDX	索引，压缩索引
.LBT	标签备注
.LBX	标签
.LST	向导列表的文档
.MEM	内存变量保存
.MNT	菜单备注
.MNX	菜单
.MPR	生成的菜单程序
.MPX	编译后的菜单程序
.OCX	OLE 控制
.PJT	项目备注
.PJX	项目
.PRG	程序
.QPR	生成的查询程序
.QPX	编译后的查询程序
.SCT	表单备注
.SCX	表单
.SPR	生成的屏幕程序（只适用于 FoxPro 以前的版本）
.SPX	编译后的屏幕程序（只适用于 FoxPro 以前的版本）
.TBK	备注备份
.TXT	文本
.VCT	可视类库备注
.VCX	可视类库
.VUE	FoxPro 2.x 视图
.WIN	窗口文件


请参阅

表文件的结构 (.DBC,.DBF,.FRX,.LBX,.MNX,.PJX,.SCX,.VCX)

表文件 (.DBC，.FRX，.LBX，.MNX，.PJX，.SCX，.VCX) 的表结构

备注文件的结构 (.FPT)

索引文件的结构 (.IDX)

压缩索引文件的结构 (.IDX)

复合索引文件的结构 (.CDX)


键盘快捷键

请参阅

本主题下的各个表分别显示运行菜单命令、处理窗口、访问“帮助”及使用默认宏定义时的 Visual FoxPro 快捷键。

菜单命令

快捷键	命令	用途
CTRL+A	全部选定命令 (编辑菜单)	编辑文本
CTRL+C	复制命令 (编辑菜单)
CTRL+D	执行 (程序菜单)
CTRL+E	删除菜单项 (菜单菜单)	设计菜单
CTRL+E	执行 <程序> (程序菜单)	程序
CTRL+F	查找命令 (编辑菜单)
CTRL+H	切换分区 (表菜单)	浏览窗口
CTRL+I	插入菜单项 (菜单菜单)	设计菜单
CTRL+J	项目信息 (项目菜单)	项目
CTRL+L	替换命令 (编辑菜单)
CTRL+M	继续执行 (程序菜单)	程序
CTRL+N	新建 (文件菜单)
CTRL+O	打开 (文件菜单)
CTRL+P	打印 (文件菜单)
CTRL+Q	运行查询 (查询菜单)	查询 当“查询设计器”不活动时， CTRL+Q 将关闭活动窗口或对话框
CTRL+R	重作命令 (编辑菜单)
CTRL+S	保存 (文件菜单)
CTRL+T	切换删除标记 (表菜单)	浏览窗口
CTRL+V	粘贴命令 (编辑菜单)
CTRL+W	关闭当前文本窗口或对话框并保存更改
CTRL+X	剪切命令 (编辑菜单)
CTRL+Y	追加新记录 (表菜单)	浏览窗口
CTRL+Z	撤消命令 (编辑菜单)
窗口操作

CTRL+F1	遍历窗口
CTRL+F2	显示命令窗口
CTRL+F4	关闭活动窗口
CTRL+F5	还原最大化的窗口
CTRL+F6	遍历窗口
CTRL+F7	移动活动窗口
CTRL+F8	调整活动窗口的大小
CTRL+F9	最小化活动窗口
CTRL+F10	最大化活动窗口
CTRL+ALT+SHIFT	键按下时，隐藏所有的子窗口。隐藏窗口后可以很容易地查看主应用程序窗口中显示的输出。
帮助

F1	显示关于活动顶（例如，命令窗口中突出显示的关键字或“属性”窗口中的当前属性）的帮助内容或上下文相关帮助。
SHIFT+F1	启动提示用户的上下文相关帮助。插入点变为向导，使您可以单击某一项（例如，菜单命令或工具栏）以显示上下文相关帮助。
属性窗口

CTRL+SHIFT+alpha	选择在属性列表中下一个以字符 alpha 开始的属性。例如，按 CONTROL+SHIFT+B 将选择下一个以“B”开始的属性。
默认的宏定义

F2	SET
F3	LIST
F4	DIRECTORY
F5	DISPLAY STRUCTURE
F6	DISPLAY STATUS
F7	DISPLAY MEMORY
F8	DISPLAY
F9	APPEND
附注

宏定义应用于命令窗口。可以用“工具”菜单上的宏命令更改宏定义。


请参阅

宏 (工具菜单)


Visual FoxPro 系统容量

请参阅

有些容量可能受可用内存的限制。

分类	功能	数目

表文件及索引文件

	每个表文件中记录的最大数目	10 亿
	表文件大小的最大值	2G 字节
	每个记录中字符的最大数目	65,500
	每个记录中字段的最大数目	255
	一次同时打开的表的最大数目	255 1
	每个表字段中字符数的最大值	254
	非压缩索引中每个索引关键字的最大字节数2	100
	压缩索引中每个关键字的最大字节数2	240
	每个表打开的索引文件数	没有限制1
	所有工作区中可以打开的索引文件数的最大值	没有限制1
	关系数的最大值	没有限制
	关系表达式的最大长度	没有限制
字段的特征

	字符字段大小的最大值	254
	数值型（以及浮点型）字段大小的最大值	20
	自由表中各字段名的字符数的最大值	10
	数据库包含的表中各字段名的字符数最大值	128
	整数的最小值	-2,147,483,647
	整数的最大值	2,147,483,647
	数值计算中精确值的位数	16
内存变量与数组

	默认的内存变量数目	1,024
	内存变量的最大数目	65,000
	数组的最大数目	65,000
	每个数组中元素的最大数目	65,000
程序和过程文件

	源程序文件中行的最大数目	没有限制
	编译后的程序模块大小的最大值 3	64K
	每个文件中过程的最大数目	没有限制
	嵌套的 DO 调用的最大数目	128
	嵌套的 READ 层次的最大数目	5
	嵌套的结构化程序设计命令的最大数目	384
	传递参数的最大数目	27
	事务处理的最大数目	5
“报表设计器”的容量

	报表定义中对象数的最大值	没有限制1
	报表定义的最大长度	20 英寸
	分组的最大层次数	128
其他的容量

	打开的窗口（各种类型）的最大数目	没有限制1
	打开的浏览窗口的最大数目	255
	每个字符串中字符数的最大值	2 G 字节
	每个命令行中字符数的最大值	8,192
	报表的每个标签控制中字符数的最大值	252
	每个宏替换行中字符数的最大值	8,192
	打开文件的最大数目	OS 限制
	键盘宏中键击数的最大值	1,024
	SQL SELECT 语句可以选择的字段数的最大值	255
1 受内存及可用的文件句柄的限制。.CDX 文件只使用一个文件句柄。 2 如果设置排序序列为 MACHINE ，则每个字符占用一个字节。如果排序序列设置不是 MACHINE ，则每个字符占用两个字节。如果索引字段支持 null 值，索引关键字将多使用一个字节。要注意的是非 MACHINE 索引肯定是压缩的。 3 一个程序模块就是一个过程。程序或应用程序中可以包含无限多个程序模块。


请参阅

使用工具栏


对有生理缺陷的人的使用性能

Microsoft 保证她的产品和服务对每个人都更易于使用。本帮助文件提供有关以下产品和服务的信息，它们使 Microsoft Windows 和 Microsoft Visual FoxPro 对有生理缺陷的人来说更易使用。

Microsoft 为失聪或有听力障碍者提供的服务

Access Pack for Microsoft Windows，一个使有精神或听力障碍者易于使用 Microsoft Windows 的软件工具

独臂用户使用的键盘布局

在录音磁带或软盘上的 Microsoft 软件文档

供失明或视弱者使用的产品

定制 Microsoft Windows

有关供有生理缺陷的人使用的产品的详细信息

附注 这部分信息仅用于在美国使用 Windows 的用户。如果您在美国之外使用 Windows ，您的 Windows 软件包中包含一张有关 Microsoft 支持服务电话号码和地址列表的卡片。您可以与相应子公司联系，以确定本文件所列类型的产品和服务在您所在地区是否可用。


Microsoft 为失聪或有听力障碍者提供的服务

通过一种文本电话 (TT/TDD) 服务，Microsoft 向失聪或有听力障碍的人提供了完备的服务，使他们能使用 Microsoft 全部的产品并享受用户支持服务。

在太平洋时间 6:30 a.m. 和 5:30 p.m.之间拨号码 (800) 892-5234 ，就可以通过文本电话与 Microsoft 销售及服务取得联系。要想得到技术支持，您可以在太平洋时间 6:00 A.M. 和  6:00 P.M. 之间拨文本电话号码 (206) 635-4948 与 Microsoft 产品支持服务联系。


Access Pack for Microsoft Windows

Microsoft 发布了Access Pack for Microsoft Windows，它使有精神或听力障碍的人更易于使用运行 Microsoft Windows 的计算机。Access Pack for Microsoft Windows 包含的特性有：

�	允许单指键入 SHIFT、 CTRL和 ALT 的键组合。

�	忽略意外的键击。

�	调整按下某键时该字符重复的频率，或者完全关掉字符重复的功能。

�	防止无意间多次按下某一键时出现多余的字符。

�	允许使用键盘控制鼠标。

�	允许使用替代输入设备代替计算机键盘或鼠标。

�	当计算机发出声音时，提供可视化的信号。Access Pack for Microsoft Windows 包含在 Microsoft Windows 驱动程序库中的 ACCESS.EXE 文件中。如果有一个调制解调器，您可以通过网络服务下载 Microsoft Windows 驱动程序库，同时也包括下列文件：

�	CompuServe�

�	GEnie(TM)

�	Microsoft OnLine

�	Microsoft Download Service (MSDL)，除太平洋时间 1:00 A.M. 到 2:30 A.M. 之外的时间，只要拨 (206) 936-MSDL (936-6735) 就可以得到。使用下列联系设置值：

对这个设置	指定
波特率	1200, 2400, or 9600
奇偶校验	无
数据位	8
停止位	1
�	多种用户组公告牌（例如 PC 用户联系网络上的公告牌服务）。

美国之内没有调制解调器的用户可以拨通 Microsoft 产品支持服务号码 (206) 637-7098 或 (206) 635-4948（文本电话）来订购 Access Pack for Microsoft Windows。


独臂用户使用的键盘布局

Microsoft 发布了Dvorak 键盘布局，该布局把使用频率最大的键放在一个键盘上。对使用标准"QWERTY" 布局键盘有困难的人来说，Dvorak 更易于使用。Dvorak 键盘有三种布局：一种适用于有两只手的用户，一种适用于仅用左手敲击的人，另一种适用于仅用右手敲击的人。左手或右手键盘也适用于用单个手指或手杖击键的人。使用这些特性不需要购买其他设备。

Microsoft Windows 已经支持双手的 Dvorak 布局，这种布局可能有助于处理或避免重复键击造成的伤害。要得到这种布局，在 Windows 控制面板中选择“区域设置”。适用于单手击键的两种布局作为 Microsoft Application Note GA0650 而发布。它也包含在大多数网络服务上的 GA0650.ZIP 或 Microsoft Download Service 上的 GA0650.EXE 中。有关得到该应用程序附注的指导，请参阅 Access Pack for Microsoft Windows. 。


在录音磁带或软盘上的Microsoft 软件文档

难于阅读或处理打印的文档的人可以从 Recording for the Blind, Inc 得到大部分的 Microsoft 出版物。Recording for the Blind 或用录音带或用软磁盘向发布服务的注册成员发布这些文档。Recording for the Blind 系列包含多于 80,000 的标题，包括 Microsoft 产品文档和 Microsoft 出版社的书籍。您可以按下列地址或电话号码与 Recording for the Blind 联系：

Recording for the Blind, Inc.
20 Roszel Road
Princeton, NJ 08540

Phone: (800) 221-4792
Phone outside the U.S.: (609) 452-0606
Fax: (609) 987-8116


供失明或视弱者使用的产品

有多种产品可供失明或视力低下的人使用 Microsoft Windows，对视弱者提供屏幕增强工具。对不能使用可视信息的人提供了用以替代输出的合成声音或可更新的布莱叶显示。另外，视若者能够定制屏幕以满足他们的要求。

有关可使用的多种产品的详细信息，请参阅有关供有生理缺陷的人使用的产品的详细信息，有关为视弱者定制 Microsoft Windows 的详细信息，请参阅定制 Windows，


定制 Microsoft Windows

有多种途径可以调整 Microsoft Windows 的外观和行为，从而在不需要额外软硬件的情况下适应您不同的眼光和机动技能。这些途径包括调整鼠标和键盘的外观及行为。至于可用的具体的方法则依赖于您使用的操作系统。应用程序附注可以说明每种操作系统中可用的方法。

有关为有生理缺陷的人定制 Windows 3.0 的详细信息，请参阅应用乘虚附注 WW0786；对 Windows 3.1，请参阅应用乘虚附注 WW0787；对 Windows for Workgroups NT 3.1，请参阅应用乘虚附注 WG0788；对 Windows NT 3.1，请参阅应用乘虚附注 WN0789。有关如何获得应用乘虚附注的详细信息，请参阅 Access Pack for Microsoft Windows。


有关供有生理缺陷的人使用的产品的详细信息

有关供有生理缺陷的人使用的 Microsoft 产品的详细信息，请拨通 Microsoft 销售及服务电话(800) 426-9400（声音）或 (800) 892-5234（文本电话）。

Wisconsin-Madison 大学的 Trace R&D 中心出了一本书以及一张压缩磁盘，描述帮助有生理缺陷的人使用计算机的产品。这本书，名为Trace ResourceBook，提供了大约 2,000 个产品的说明及照片。这张磁盘，名为 Co-Net CD，提供了包含 17,000 多个产品的数据库及其它有关有生理缺陷的人的信息。两年发布一次。

您可以按下列地址或电话号码与 Trace R&D 中心取得联系：

Trace R&D Center
S-151 Waisman Center
1500 Highland Avenue
Madison, WI 537052280

Voice telephone: (608) 2632309
Text telephone: (608) 2635408
Fax: (608) 262-8848

有关计算机如何帮助特定人的常规信息和建议动作，您应该找经过训练的决策者咨询，以得到最适合需要的可用方案。您所在区域的助理技术程序可能提供有关您能使用的程序和服务的信息。要得到距您最近的助理技术程序，可以联系：

National Information System
Center for Developmental Disabilities
Benson Building
University of South Carolina
Columbia, SC 29208

Voice/text telephone outside South Carolina: (800) 922-9234, ext. 301
Voice/text telephone in South Carolina: (800) 922-1107
Voice/text telephone outside the U.S.: (803) 777-6222
Fax:	(803) 777-6058


保留字

Visual FoxPro 中的保留字包括函数、系统内存变量、属性、事件、方法、命令和子句。在编程时，要避免使用保留字作为名称（例如，窗口、表和字段名）。如果您把一个保留字作为名称使用，将会产生语法错误。

下面是 Visual FoxPro 的全部保留字。

#DEFINE

#ENDIF

#IF

#IFDEF

#IFNDEF

#INCLUDE

#ITSEXPRESSION

#READCLAUSES

#REGION

#SECTION

#UNDEF

#WNAME

.AND.

.F.

.NOT.

.OR.

.T.

@PROCEDURE

A

A

ABS

ACCEPT

ACLASS

ACOPY

ACOS

ACTIVATE

ActivateCell

ActiveColumn

ActiveControl

ActiveForm

ActivePage

ActiveRow

ADATABASES

ADBOBJECTS

ADD

AddColumn

AddItem

ADDITIVE

AddListItem

AddObject

ADEL

ADIR

AELEMENT

AERROR

AFIELDS

AFONT

AFTER

AfterCloseTables

AfterDock

AfterRowColChange

AGAIN

AINDENT

AINSTANCE

ALEN

ALIAS

Alignment

_ALIGNMENT

ALL

AllowTabs

ALLTRIM

ALT

ALTER

ALTERNATE

AlwaysOnTop

AMEMBERS

AND

ANSI

ANSITOOEM

ANY

APLABOUT

APP

APPEND

APRINTERS

ARRAY

AS

ASC

ASCAN

ASCENDING

ASCII

_ASCIICOLS

_ASCIIROWS

ASELOBJ

ASIN

ASORT

ASSIST

_ASSIST

ASUBSCRIPT

AT

ATAN

ATC

ATCLINE

ATLINE

ATN2

ATTRIBUTES

AUSED

AutoActivate

AutoCenter

AutoCloseTables

AUTOMATIC

AutoOpenTables

AUTOSAVE

AutoSize

AVERAGE

AVG

B

B

BackColor

BackStyle

BAR

BARCOUNT

BARPROMPT

BaseClass

_BEAUTIFY

BEFORE

BeforeDock

BeforeOpenTables

BeforeRowColChange

BEGIN

BELL

BETWEEN

BITAND

BITCLEAR

BITLSHIFT

BITMAP

BITNOT

BITOR

BITRSHIFT

BITSET

BITXOR

BLANK

BLINK

BLOCKSIZE

BOF

BORDER

BorderColor

BorderStyle

BorderWidth

BOTTOM

Bound

BoundColumn

BOX

_BOX

BROWSE

_BROWSER

BRSTATUS

BUCKET

BufferMode

BufferModeOverride

BUFFERS

BUILD

_BUILDER

ButtonCount

Buttons

BY

C

C

_CALCMEM

CALCULATE

_CALCVALUE

CALL

CANCEL

CANDIDATE

CAPSLOCK

Caption

CARRY

CASCADE

CASE

CATALOG

CD

CDOW

CDX

CEILING

CENTER

CENTURY

CGA

CHANGE

CHARACTER

CHDIR

CHECK

CheckBox

ChildAlias

ChildOrder

CHR

CHRSAW

CHRTRAN

Circle

CLASS

CLASSLIB

ClassLibrary

CLEAR

CLICK

ClipControls

_CLIPTEXT

CLOCK

CloneObject

ClosableProperty

CLOSE

CloseTables

Cls

CMONTH

CNT

CNTBAR

CNTPAD

CODEPAGE

COL

COLLATE

COLOR

ColorScheme

ColorSource

COLUMN

ColumnCount

ColumnLines

ColumnOrder

Columns

ColumnWidths

COM1

COM2

ComboBox

COMMAND

CommandButton

CommandGroup

Comment

COMPACT

COMPATIBLE

COMPILE

COMPOBJ

COMPRESS

CONFIRM

CONNECTION

CONNECTIONS

CONNSTRING

CONSOLE

CONTAINER

CONTINUE

CONTROL

ControlBox

ControlCount

Controls

ControlSource

_CONVERTER

COPIES

COPY

COS

COUNT

CPCOMPILE

CPCONVERT

CPCURRENT

CPDBF

CPDIALOG

CREATE

CREATEOBJECT

CTOD

CTOT

CURDIR

_CUROBJ

CURRENCY

CurrentControl

CurrentX

CurrentY

CURSOR

CURSORGETPROP

CURSORSETPROP

CursorSource

CURVAL

Curvature

Custom

CYCLE

D

D

DATABASE

DATABASES

DataEnvironment

DATASESSION

DataSessionID

DATASOURCE

DATE

DATETIME

DAY

DB4

DBC

DBF

DBGETPROP

DBLCLICK

_DBLCLICK

DBMEMO3

DBSETPROP

DBTRAP

DBUSED

DDE

DDEAbortTrans

DDEAdvise

DDEEnabled

DDEExecute

DDEInitiate

DDELastError

DDEPoke

DDERequest

DDESetOption

DDESetService

DDESetTopic

DDETerminate

DEACTIVATE

DEBUG

DECIMALS

DECLARE

DEFAULT

DEFAULTSOURCE

DEFINE

DELETE

DeleteColumn

DELETED

DeleteMark

DELETETABLES

DELIMITED

DELIMITERS

DESCENDING

DESIGN

Desktop

Destroy

DEVELOPMENT

DEVICE

_DIARYDATE

DIF

DIFFERENCE

DIMENSION

DIR

DIRECTORY

DISABLED

DisabledBackColor

DisabledForeColor

DisabledPicture

DISKSPACE

DISPLAY

DisplayValue

DISTINCT

DLL

DLLS

DMY

DO

Dock

Docked

DockPosition

DocumentFile

DOHISTORY

DOS

_DOS

DoScroll

DOSMEM

DOUBLE

DoVerb

DOW

DOWN

DownClick

DownPicture

DRAG

DragDrop

DragIcon

DragMode

DragOver

DRAW

DrawMode

DrawStyle

DrawWidth

DRIVER

DropDown

DTOC

DTOR

DTOS

DTOT

DUPLEX

DynamicAlignment

DynamicBackColor

DynamicCurrentControl

DynamicFontBold

DynamicFontItalic

DynamicFontName

DynamicFontSize

DynamicFontStrikethru

DynamicFontUnderline

DynamicForeColor

E

E

ECHO

EDIT

EditBox

EDITWORK

EGA25

EGA43

EJECT

EMPTY

EMS

EMS64

ENABLED

ENCRYPT

ENCRYPTION

END

ENDCASE

ENDDO

ENDFOR

ENDIF

ENDPRINTJOB

ENDSCAN

ENDTEXT

ENDWITH

ENVIRONMENT

EOF

ERASE

ERROR

ErrorMessage

ESCAPE

EVALUATE

EVENTS

EXACT

EXCEPT

EXCLUSIVE

EXE

EXISTS

EXIT

EXP

EXPORT

EXPRESSION

EXTENDED

EXTERNAL

F

F

F11F12

FCHSIZE

FCLOSE

FCOUNT

FCREATE

FDATE

FDOW

FEOF

FERROR

FETCH

FFLUSH

FGETS

FIELD

FIELDS

FILE

FILER

FILES

FILL

FillColor

FillStyle

FILTER

FIND

FirstElement

FIXED

FKLABEL

FKMAX

FLDLIST

FLOAT

FLOCK

FLOOR

FLUSH

FOLDCONST

FONT

FontBold

FontItalic

FONTMETRIC

FontName

FontOutline

FontShadow

FontSize

FontStrikethru

FontUnderline

FOOTER

FOPEN

FOR

FORCE

ForeColor

FOREIGN

FORM

FORMAT

FormCount

Forms

FORMSET

FOUND

FOX2X

_FOXDOC

_FOXGRAPH

FOXPLUS

FPUTS

FREAD

FREE

FREEZE

FROM

FSEEK

FSIZE

FTIME

FULLPATH

FUNCTION

@FUNCTION

FV

FW2

FWEEK

FWRITE

G

G

GATHER

GENERAL

_GENGRAPH

_GENMENU

_GENPD

_GENSCRN

_GENXTAB

GET

GETBAR

GETCOLOR

GETCP

GETDIR

GETENV

GETEXPR

GETFILE

GETFLDSTATE

GETFONT

GETNEXTMODIFIED

GETOBJECT

GETPAD

GETPICT

GETPRINTER

GETS

GLOBAL

GO

GOMONTH

GotFocus

GOTO

Grid

GridLineColor

GridLines

GridLineWidth

GROUP

GROW

H

H

HALFHEIGHT

HalfHeightCaption

HAVING

HEADER

HeaderHeight

HEADING

HEADINGS

HEIGHT

HELP

HelpContextID

HELPFILTER

HIDE

HideSelection

HIGHLIGHT

HISTORY

HMEMORY

HOME

HOUR

HOURS

hWnd

I

I

IBLOCK

ICON

ID

IDXCOLLATE

IF

IIF

Image

IMPORT

IN

Increment

IncrementalSearch

INDBC

_INDENT

INDEX

INDEXES

IndexToItemID

INFORMATION

Init

InitialSelectedAlias

INKEY

INLIST

INPUT

InputMask

INSERT

INSMODE

INSTRUCT

INT

INTEGER

INTENSITY

InteractiveChange

INTERSECT

Interval

INTO

IS

ISALPHA

ISBLANK

ISCOLOR

ISDIGIT

ISEXCLUSIVE

ISLOWER

ISMOUSE

ISNULL

ISOMETRIC

ISREADONLY

ISUPPER

ItemBackColor

ItemData

ItemForeColor

ItemIDData

ItemIDToIndex

J

J

JOIN

K

KEY

KEYBOARD

KeyboardHighValue

KeyboardLowValue

KEYCOLUMNS

KEYCOMP

KEYMATCH

KeyPress

KeyPreview

KEYSET

L

LABEL

LAST

LASTKEY

LDCHECK

LEDIT

LEFT

LeftColumn

LEN

LEVEL

LIBRARY

LIKE

LINE

LINENO

LineSlant

LINKED

LinkMaster

LIST

ListBox

ListCount

ListIndex

ListItem

ListItemID

_LMARGIN

LOAD

LOCAL

LOCATE

LOCFILE

LOCK

LockScreen

LOG

LOG10

LOGERRORS

LONG

LOOKUP

LostFocus

LOWER

LPARAMETERS

LPARTITION

LTRIM

LUPDATE

M

MAC

_MAC

MACDESKTOP

MACHELP

MACKEY

MACRO

MACROS

MARGIN

MARK

MASTER

MAX

MaxButton

MaxHeight

MaxLeft

MaxLength

MAXMEM

MaxTop

MaxWidth

MBLOCK

MCOL

MD

MDI

MDIForm

MDOWN

MDX

MDY

MEMLIMIT

MEMLINES

MEMO

MEMORY

MEMOS

MEMOWIDTH

MemoWindow

MEMVAR

MENU

MENUS

MESSAGE

MESSAGEBOX

MESSAGES

MIDDLE

MIN

MinButton

MinHeight

MINIMIZE

MINUS

MINUTE

MinWidth

MKDIR

MLINE

_MLINE

MOD

MODAL

MODIFY

MODULE

MONO

MONO43

MONTH

MOUSE

MouseDown

MouseMove

MousePointer

MouseUp

Movable

MOVE

Moved

MoverBars

MOVERS

MRKBAR

MRKPAD

MROW

MTON

MULTILOCKS

MULTISELECT

MVARSIZ

MVCOUNT

MWINDOW

N

NAME

NDX

NEAR

NEGOTIATE

NewIndex

NewItemID

NEXT

NOALIAS

NOAPPEND

NOCLEAR

NOCLOSE

NOCONSOLE

NOCPTRANS

NODATA

NoDataOnLoad

NODEBUG

NODELETE

NODUP

NOEDIT

NOEJECT

NOENVIRONMENT

NOFLOAT

NOFOLLOW

NOGROW

NOINIT

NOLGRID

NOLINK

NOLOCK

NOLOG

NOMARGIN

NOMDI

NOMENU

NOMINIMIZE

NOMODIFY

NOMOUSE

NONE

NOOPTIMIZE

NOORGANIZE

NOOVERWRITE

NOPROMPT

NOREAD

NOREFRESH

NOREQUERY

NORGRID

NORMAL

NORMALIZE

NOSAVE

NOSHADOW

NOSHOW

NOSPACE

NOT

NOTE

NOTIFY

NOUPDATE

NOVALIDATE

NOVERIFY

NOWAIT

NOWINDOW

NOWRAP

NOZOOM

NPV

NTOM

NULL

NUMBER

NumberOfElements

NUMLOCK

NVL

O

OBJECTS

OBJNUM

OBJTOCLIENT

OBJVAR

OCCURS

ODOMETER

OEMTOANSI

OF

OFF

OLDVAL

OLE

OLEClass

OLEOBJECT

OLEOBJECTS

OLETypeAllowed

ON

OneToMany

ONLY

OPEN

OpenTables

OpenWindow

OPTIMIZE

OptionButton

OptionGroup

OR

ORDER

ORIENTATION

OS

OUTPUT

OUTSHOW

OVERLAY

OVERWRITE

P

PACK

PAD

PADL

PADRPADC

_PADVANCE

PAGE

PageCount

PageFrame

PageHeight

_PAGENO

PageOrder

Pages

PageWidth

Paint

PALETTE

PANEL

PanelLink

PAPERLENGTH

PAPERSIZE

PAPERWIDTH

PARAMETERS

Parent

ParentAlias

ParentClass

PARTITION

PASSWORD

PasswordChar

PATH

PATTERN

PAUSE

PAYMENT

_PBPAGE

PCOL

_PCOLNO

_PCOPIES

PDOX

_PDRIVER

PDSETUP

_PDSETUP

_PECODE

_PEJECT

PEN

_PEPAGE

PFS

PI

PICTURE

PIXELS

PLAIN

PLAY

_PLENGTH

_PLINENO

_PLOFFSET

POINT

POP

POPUP

POPUPS

_PPITCH

_PQUALITY

PRECISION

PREFERENCE

_PRETEXT

PREVIEW

PRIMARY

Print

PRINTER

PRINTJOB

PRINTQUALITY

PRINTSTATUS

PRIVATE

PRMBAR

PRMPAD

PROCEDURE

@PROCEDURE

PROCEDURES

PRODUCTION

PROGRAM

ProgrammaticChange

PROGWORK

PROJECT

PROMPT

PROPER

PROW

PRTINFO

_PSCODE

PSet

_PSPACING

PUBLIC

PUSH

PUTFILE

PV

_PWAIT

Q

QUERY

QUIT

R

RAND

RANDOM

RANGE

RangeHigh

RangeLow

RAT

RATLINE

RD

RDLEVEL

READ

ReadActivate

READBORDER

ReadCycle

ReadDeactivate

READERROR

ReadExpression

READKEY

ReadLock

ReadMethod

ReadMouse

ReadObject

ReadOnly

ReadSave

ReadShow

ReadTimeout

ReadValid

ReadWhen

RECALL

RECCOUNT

RECNO

RECORD

RecordMark

RecordSource

RecordSourceType

RECOVER

RECSIZE

REDIT

REFERENCE

REFERENCES

REFRESH

REGIONAL

REINDEX

RELATION

RelationalExpr

RELATIVE

RelativeColumn

RelativeRow

RELEASE

ReleaseType

REMOTE

REMOVE

RemoveItem

RemoveListItem

RemoveObject

RENAME

REPLACE

REPLICATE

REPORT

REPROCESS

REQUERY

REQUIRED

Reset

Resizable

Resize

RESOURCE

REST

RESTORE

RESTRICT

RESUME

RETRY

RETURN

RGB

RIGHT

RightClick

RLOCK

_RMARGIN

RMDIR

ROLLBACK

ROUND

ROW

RowHeight

ROWSET

RowSource

RowSourceType

RPD

RTOD

RTRIM

RUN

RUNSCRIPT

RUNTIME

S

SAFETY

SAME

SAMPLE

SAVE

SaveAs

SaveAsClass

SAY

SCALE

ScaleMode

SCAN

SCATTER

SCHEME

SCOLS

SCOREBOARD

SCREEN

_SCREEN

SCREENS

SCROLL

ScrollBars

Scrolled

SDF

SEC

SECONDS

SEEK

SELECT

Selected

SelectedBackColor

SelectedForeColor

SelectedID

SelectedItemBackColor

SelectedItemForeColor

SELECTION

SelectOnEntry

SelLength

SelStart

SelText

SEPARATOR

SET

SetAll

SETFLDSTATE

SetFocus

SHADOWS

Shape

SHARED

SHEET

SHELL

_SHELL

SHIFT

SHOW

ShowTips

SHUTDOWN

SIGN

SIN

SINGLE

Sizable

SIZE

SKIP

SKPBAR

SKPPAD

SOME

SORT

Sorted

SORTWORK

SOUNDEX

SPACE

Sparse

SpecialEffect

_SPELLCHK

SPINNER

SpinnerHighValue

SpinnerLowValue

SQL

SQLCANCEL

SQLCOLUMNS

SQLCOMMIT

SQLCONNECT

SQLDISCONNECT

SQLEXEC

SQLGETPROP

SQLMORERESULTS

SQLROLLBACK

SQLSETPROP

SQLSTRINGCONNECT

SQLTABLES

SQRT

SROWS

STANDALONE

_STARTUP

STATUS

StatusBarText

STD

STEP

STICKY

STORE

STR

STRETCH

STRING

STRTRAN

STRUCTURE

STUFF

STYLE

SUBCLASS

SUBSTR

SUM

SUMMARY

SUSPEND

SYLK

SYS

SYSFORMATS

SYSMENU

SYSMENUS

SYSMETRIC

SYSTEM

T

TAB

TabIndex

TABLE

TABLEREVERT

TABLES

TABLEUPDATE

TABS

_TABS

TabStop

TabStretch

TAG

TAGCOUNT

TAGNO

TALK

_TALLY

TAN

TARGET

TEDIT

TerminateRead

TEXT

_TEXT

TextBox

TextHeight

TEXTMERGE

TextWidth

THIS

THISFORM

THISFORMSET

_THROTTLE

TIME

TIMEOUT

Timer

TITLES

TMPFILES

TO

ToolBar

ToolTipText

TOP

TOPIC

TopIndex

TopItemID

TOTAL

TRANSACTION

TRANSFORM

_TRANSPORT

TRAP

TRBETWEEN

TRIGGER

_TRIGGERLEVEL

TRIM

TTOC

TTOD

TTOPTION

TXNLEVEL

TXTWIDTH

TYPE

TYPEAHEAD

U

UDFPARMS

Undock

UNION

UNIQUE

_UNIX

Unload

UNLOCK

UP

UpClick

UPDATE

UPDATED

UPPER

USE

USED

USERID

USERS

V

VAL

Valid

VALIDATE

Value

VALUES

VAR

VARREAD

VERB

VERSION

VGA25

VGA50

VIEW

VIEWS

Visible

VOLUME

W

WAIT

WBORDER

WCHILD

WCOLS

WEEK

WEXIST

WFONT

WHEN

WHERE

WHILE

WIDTH

WINDOW

WindowList

WINDOWS

_WINDOWS

WindowState

WindowType

WITH

_WIZARD

WK1

WK3

WKS

WLAST

WLCOL

WLROW

WMAXIMUM

WMINIMUM

WONTOP

WordWrap

WORKAREA

WOUTPUT

WP

WPARENT

WR1

WRAP

_WRAP

WREAD

WriteExpression

WriteMethod

WRK

WROWS

WTITLE

WVISIBLE

X

XCMDFILE

XL5

XLS

Y

YEAR

YRESOLUTION

Z

ZAP

ZOOM

ZOrder


词汇表

A

抽象

重音字符

访问键

合计函数

别名

替补索引

ANSI

API

追加

应用程序

参数 (argument)

算术操作符

数组

ASCII

B

后端数据

后链

带区

基类

基表

基本可优化表达式

二进制文件

位运算

文件头

绑定型控制

断点

浏览

浏览系列

缓冲区

缓冲更新

   生成器锁定

生成器

C

计算结果字段

候选索引

标题

.CDX 文件

字符表达式

   复选框

子表

类

类库

子句

清理代码

客户/服务器

剪贴板

代码页

组合框

命令

命令按钮

命令按钮组

压缩单项索引

编译命令

复合索引文件

条件分支

配置

配置文件

冲突

连接

常量

约束

容器类

上下文字符串

控制

控制数组

控制中断

控制字符

控制类

条件

交叉表查询

交叉表报表

临时表

自定义控制

D

数据定义语言

数据字典

数据环境

数据分组

数据工作期

数据源

数据类型

数据库

数据库表

DDL

死锁

调试

默认

默认值

分隔符

依附对象

设计时

细节带区

开发环境

发音符号

维数

DLL

停放

动态链接库

拖放

E

编辑框

元素

嵌入

封装

EOF

换码序列

事件

事件代码

事件驱动程序设计

事件循环

可执行程序

表达式

F

字段

字段级规则

文件梗概

筛选

标志

FLL

浮动

外部关键字

表单

表单集

foxel

FoxPro 链接库

自由表

函数

G

生成的代码

生成的名称

表格

组带区

组注脚

组标头

分组记录

H

句柄

热点

超图形

I

.IDX 文件

图象

独立 .IDX

索引

索引文件

继承性

输入掩码

可插入 OLE 对象

实例

国际字符

J

联接

跳转

纽带表

K

关键字 (key)

关键字 (keyword)

L

   标签

生存期

连字

   线条

链接

列表框

本地别名

本地数据

本地变量

地区

锁定

逻辑操作符

长名称

循环

M

宏

宏替换

Visual FoxPro 主窗口

主程序

主报表

多对多关系

标记字符

内存变量

菜单

菜单栏

菜单项

菜单标题

菜单系统

图元文件

方法

模式

无模式

多个实例

多级视图

N

命名连接

名称表达式

主数据

非压缩单项索引

非滚动区域

规范化

null 值

O

对象

面向对象程序设计

对象链接与嵌入 (OLE)

ODBC

OLE

OLE 自动化

OLE 对象

OLE 控制

一对多关系

一对一关系

OOP

开放式数据库连接 (ODBC)

开放式缓冲

选项按钮组

P

页面

页注脚

页标头

参数 (parameter)

父表

部分搜索

引用传递

按值传递

永久

永久关系

保守式缓冲

象素

多态性

磅

优先级

主索引

主关键字

主表

私有变量

过程

项目

投影列表

属性

公共变量

Q

限定

查询

R

记录

记录级规则

参照完整性

普通索引

相关表

关系

关系数据库

关系操作符

远程数据

报表带区

报表细节带区

报表注脚带区

报表标头带区

解决引用

规则

运行时

Rushmore 技术

S

规划

作用域

二级窗口

选定条件

服务器

工作期

设置

初始化代码

形状控制

skeleton

排序次序

微调控制

SQL

SQL 传递

SQL Server

堆栈

单独 .IDX

独立的 OLE 对象

存储过程

字符原义

结构复合索引

结构化查询语言 (SQL)

占位程序

子类

下标

总结带区

语法

系统内存变量

系统对象

T

选项卡

tab 键次序

表

标识

模板

临时关系

文本框

文本文件

计时器

标题带区

工具锁定

工具栏

事务

触发器

缇

U

UDC

UDF

一元操作符

唯一索引

用户自定义类

用户自定义函数

V

有效性检查

变量

视图

视图定义

可视编辑

W

通配符

向导

工作区

X, Y, Z

Xbase

零长度字符串

缩放

z-order


抽象

提取一个类或对象与众不同的特征，而不对该类或对象的所有信息进行处理。当您创建一个类时，例如，一系列表的定位按钮，您可以将它作为整体，而不必关心其中的单个组件以及它们相互之间是如何作用的。请参阅封装。


重音字符

一些包含发音符号的字符，如 [image] 和 [image] 。请参阅发音符号，国际字符.


访问键

键盘上的字符，这些字符在菜单上或对话框中加有下划线或突出显示。同时按下 ALT 键和访问键可以激活菜单或对话框。有时候用来指代热键。


合计函数

预先编好的执行某种数值运算的程序。在 Visual FoxPro SQL 中，这些函数包括： SUM( ), AVG( ), MIN( ), MAX( ), COUNT( ), STD( ), 和 VAR( )。


别名

赋给一个表的名称。可通过一个表的别名和所在的工作区引用该表。


替补索引

一个未选作主关键字的候选索引。请参阅候选索引，主关键字。


ANSI

美国国家标准委员会( American National Standards Institute) 的缩写，它负责制定各种编程语言和系统的标准。


API

应用程序编程接口( Application Program Interface )的缩写，这是一组供应用程序使用的命令，用以向计算机的操作系统请求或执行更低级的设备访问操作。Visual FoxPro API 包含各种命令，允许 C 或汇编语言例程与 Visual FoxPro 互操作。


追加

在一个表的末尾添加新记录。


应用程序

一组 Visual FoxPro 程序、表单、菜单和其他文件经编译后形成的单个程序。应用程序由项目管理器连编得到，具有 .APP 扩展名。


参数(argument)

供函数或过程操作的一个值。例如，在 Visual FoxPro 语句 SPACE(10) 中，数值 10 就是参数。


算术操作符

进行数值计算的操作符。在 Visual FoxPro 中，算术操作符包括：+（加），（减），*（乘），/（除），^（幂）和 %（取余）。请参阅 逻辑操作符，关系操作符。


数组

存储在一个变量中由单个变量名引用的有序数据集合。数组中的每一个元素都可以通过一个数值下标被引用。在 Visual FoxPro 中，一个数组中的数据不必是同一种数据类型。请参阅数据类型。


ASCII

美国标准信息交换码 ( American Standard Code for Information Interchange ) 的缩写。码值从 0 到255，代表了字母、数字、标点符号和其他字符。ASCII 码是一种标准化的编码，用以在计算机之间或计算件与外围设备之间交换信息。


后端数据

请参阅远程数据.


后链

用于数据库中的表。存放在一个表的表头记录中的路径和文件名，用以将该表与拥有该表的数据库相链接。


带区

请参阅报表带区.


基类

Visual FoxPro 内部定义的类，可用作其他用户自定义类的基础。例如，Visual FoxPro 表单和所有控制就是基类，您可以在此基础上创建新类，增添自己需要的功能。请参阅子类。


基表

在建立一个视图时，由包含在 CREATE SQL VIEW 命令中的 SELECT - SQL 语句所访问的表。


基本可优化表达式

可利用 Rushmore 技术缩短执行时间的表达式。一个基本可优化表达式可构成整个表达式也可以构成一个表达式的一部分。


二进制文件

含有编码信息的文件，编码信息需由创建此文件的应用程序解释。二进制文件只能由创建它的应用程序编辑。请比较文本文件.


位运算

对一个值的各位而不是对该值整体进行的运算。在 Visual FoxPro 中，位运算函数包括：BITAND( ), BITCLEAR( ), BITNOT( ), BITOR( ), BITRSHIFT( ), BITSET( ), BITTEST( ), 和 BITXOR( ).


文件头

文件的开始位置。


绑定型控制

表单或报表上的一种控制，它的内容与后端的表或查询中的某一字段相关联。例如，一个显示雇员姓名的文本框可能与 Employees（雇员）表中的 Name（姓名）字段相捆绑。


断点

在程序中设置的，使程序执行暂停并将控制权移交给您的一个位置。在 Visual FoxPro 中，可以在调试窗口中设置断点。


浏览

用于查看一个表及其内容。Visual FoxPro 在“浏览”窗口中以表格形式显示表的信息。


浏览系列

在图形方式帮助文件中的一系列帮助主题。可以用“向前浏览”和“向后浏览”按钮访问。浏览系列对于想要按照预先定义好的顺序阅读相关主题帮助的用户非常有用。


缓冲区

在内存中供信息临时存储的一片区域。Visual FoxPro 以两种锁定方式提供缓冲：保守式缓冲和开放式缓冲。锁定方式决定了何时锁定一个或多个记录，这些记录如何以及何时被释放。


缓冲更新

在多用户环境中用于保护数据。Visual FoxPro 有两种类型的缓冲：记录缓冲和表缓冲。若要一次访问、修改或写一个记录，请使用记录缓冲。若要对多个记录缓冲更新，请使用表缓冲。请参阅缓冲区.


{bmc b021.mrb}   生成器锁定
   生成器锁定

控制栏上的一个按钮。当您按下此按钮，然后按下工具栏上的其他按钮创建一个控制时，调用与该控制相对应的生成器。


生成器

一种 Visual FoxPro 工具，如列表框生成器，用以帮助用户对特定的控制设置属性，或者组合子句创建特定的表达式。生成器由一个或多个提供一系列简单选项的对话框组成。请参阅 [image]   生成器锁定，向导。


计算结果字段

在查询中定义的字段，用来显示一个表达式的计算结果而不是其中存储的数据。


候选索引

可用作主关键字的索引，因为它不包含 Null 值或重复值。请参阅替补索引，主索引。


标题

在对话框或表单上显示在一个控制旁边或控制之上的文本。例如，要使一个命令按钮有“确定”标题，您可以将这个按钮的 Caption 属性设置为“确定”。


.CDX 文件

请参阅复合索引文件.


字符表达式

求值结果为字符串的表达式。


{bmc b009.mrb}   复选框
   复选框

指明一个选项是选定还是不选定的控制。选定时在框中出现 X 。


子表

在一对一或一对多表关系中的相关表或受控表。请参阅父表，主表，相关表。


类

定义了对象特征以及对象外观和行为的模板。可以使用 CREATE CLASS 命令或类设计器创建一个新类。请参阅对象，子类，用户自定义类。


类库

每一个以可视方式设计的类都存储在一个类库中。类库具有 .VCX 文件扩展名。


子句

附加在一条命令后的附加语句，用以给出执行该命令的进一步指示。


清理代码

在 .MPR 文件中菜单定义代码之后执行的代码。清理代码可以包含用户自定义函数和过程。


客户/服务器

一种应用程序的名称，它具有本地（客户）用户界面，但访问的是远程服务器上的数据。此应用程序根据前端和后端产品的能力将工作分布到本地机和服务器上。


剪贴板

计算机内存中的一片区域，存放最近从一个文件剪切或复制的内容。包含在剪贴板上的信息可以被插入（粘贴）到其他文档或应用程序中。


代码页

供计算机正确解释并显示数据的字符集。通常，不同的代码页对应不同的平台或语言，常用于国际应用程序中。请参阅地区.


   组合框

一种控制，类似列表框和文本框的组合。可以在其中输入值或从列表中选择条目。


命令

由用户发出的，指示 Visual FoxPro 执行某种操作的指令。命令可由键盘键入，也可以从菜单上选择或者嵌入到程序代码中。请参阅函数。


 命令按钮

与一条命令相关的控制。在运行时单击该按钮，则与此按钮相关的命令将被执行。


   命令按钮组

可以作为一个独立单位的控制数组，它包含一组命令按钮。


压缩单项索引

一种具有 .IDX 文件扩展名，只有单个索引项的索引文件。此索引文件需要明确地加以打开，而且在更新表时必须处于活动状态。


编译命令

一种在程序中用来控制编译器行为的命令。也称为预处理命令。Visual FoxPro 编译命令包括 #DEFINE 和 #IF。


复合索引文件

包含多个索引项（称为标识）的索引文件，具有 .CDX 文件扩展名。此索引文件在使用时需明确指定打开，而且在更新表时必须处于活动状态。请参阅结构复合索引。


条件分支

允许用户根据测试条件的结果执行不同的操作。请参阅 IF ... ENDIF，DO CASE ... ENDCASE。


配置

用以定制应用程序的软件设置。对于 Visual FoxPro，配置信息存储在配置文件 (CONFIG.FPW)中。


配置文件

配置文件（CONFIG.FPW）包含有 Visual FoxPro 的配制信息，以及用“选项”对话框设置的系统注册信息。


冲突

在多用户环境中，当一个用户试图锁定一个已被其他用户锁定的记录或表时发生冲突。两个用户不能同时锁定同一记录或表。请参阅死锁。


常量

一个不变的数值或字段串。常量表达式中包括常量和操作符，但不包含变量，而且计算结果总是常值。


约束

与一个字段或记录相关的表达式，通过对用户输入的值加以限制，提供数据完整性检查。对一个字段的约束称之为字段级规则，在移向另一个字段时被检查。对一个记录的约束称之为记录级规则，在移向另一个记录时被检查。


容器类

包容其他相似类的 Visual FoxPro 基类。例如，一个表单类中可以包含一组控制类，将这些类作为一个整体进行操作。请参阅基类，表单，表单集。


上下文字符串

在图形方式帮助系统中，用以标识一个主题的字符串。上下文字符串中附有脚注字符 #。每一个上下文字符串都必须是唯一的，帮助文件中的每一个主题只能有一个上下文字符串。


控制

放在一个表单上用以显示数据、执行操作或使表单更易阅读的一种图形对象，如文本框、矩形或命令按钮等。Visual FoxPro 控制包括复选框、编辑框、标签、线条、图象、形状等等。可以使用表单设计器的控制工具栏在表单上绘制控制。


控制数组

具有相同名称、类型以及事件过程的一组控制。每一个控制具有一个唯一的索引。当数组中的一个控制识别某一事件时，它将调用此控制组的相应事件过程，并把相应索引作为参数传递，允许您用代码决定是哪一个控制识别此事件。


control break
控制分组

定义报表中组内容的一个表达式。


控制字符

一种非打印符号，用以控制或调整信息的打印或显示方式。控制字符具有 0 到 31 的 ASCII 值。一般来讲，控制字符可通过在键盘上按住 CTRL 键然后再按另一键来获得。


控制类

可以包含在容器类中并由用户派生的 Visual FoxPro 基类。命令按钮和文本框就属于控制类。控制工具栏上给出了可用的控制类。


条件

一组限制条件，用于查询或筛选满足限制条件的记录。例如，表达式 Salary > 30000，用于 Employees 表中，可以限制查询范围为年薪超过 $ 30,000 的雇员。


交叉表查询

以电子表格形式显示数据的查询。例如，一个“销售”表的交叉表查询可以在行方向上显示“省份”数据，而在列方向上显示“销售员”数据。查询结果字段中包含每一位销售员的销售总额 SUM(Sales)。


交叉表报表

提交交叉表查询结果的报表。


临时表

一个带有名称的，临时的只读表，用以保存查询的结果。临时表可用于浏览、生成报表或用于其他目的，直到将其关闭。


自定义控制

基于一个或多个 Visual FoxPro 基类，由用户创建的控制。您可以对一个现有的 Visual FoxPro 控制或任何自定义控制添加功能。请参阅基类，子类。


数据定义语言 (DDL)

用于向数据库管理系统声明数据库结构的语言。


数据字典

包含数据库中所有表信息的一个表。存储在数据字典中的信息称之为元数据，换言之，关于数据的数据，比如长表名或字段名，有效性规则和触发器，以及有关数据库对象的定义如视图和命名连接等。


数据环境

在打开或修改一个表单或报表时需要打开的全部表、视图和关系。随表单或报表一起保存的数据环境可以用数据环境设计器进行修改。


数据分组

在报表中按照指定顺序对成组的信息进行分类。也可以为组定义标头和注脚，每当数据组改变时打印相应信息。


数据工作期

表单、表单集或报表所使用的当前动态工作环境的一种表示。每一个数据工作期包含有自己的一组工作区。这些工作区含有打开的表，表索引和关系。请参阅工作区.


数据源

ODBC 术语，指代数据库和访问该数据库所需的信息。例如，一个　SQL Server 数据源由 SQL Server 数据库、数据库所在的服务器以及用以访问服务器的网络组成。


数据类型

决定变量或字段存储何种类型数据的属性。Visual FoxPro 包含下列数据类型：Character（字符型），Currency（货币型），Date（日期型），DateTime（日期时间型），Double（双精度型），Float（浮点型），Logical（逻辑型），Numeric（数值型），Integer（整型）General（通用型），和 Memo（备注型）。


数据库

数据库文件具有 .DBC 扩展名，可以包含一个或多个表、视图、到远程数据源的连接和存储过程。


数据库表

包含一个数据库中的表。请比较自由表。


死锁

在多用户环境中，一位用户已经锁定了一个记录或一个表，然后试图锁定另一个被其他用户锁定的记录，而其他用户又试图锁定这位用户锁定的记录，这时就会发生死锁。尽管这种情况很少发生，但是记录或表的锁定时间越长，这种可能性越大。请参阅冲突.


调试

查找并确定计算机程序中发生错误或问题的原因。


默认

属性或参数的一项预定义的设置值。如果不提供另外的值，Visual FoxPro 将使用默认值。


默认值

当一个新记录添加到数据库表中时，为某一字段的内容所指定的一个数值或字符串。除非您键入新值，否则默认值一直保留在该字段中。


分隔符

用以指明一串字符的开始或终止的字符，它本身并不属于该串字符的一部分。例如，双引号 (") 是用于字符串常量的分隔符；"DOG" 由三个字符 D, O, 和 G 组成，它不包括引号。


依附对象

在应用程序的分层结构中被更高一级对象引用的对象。


设计时

创建应用程序时的操作方式。您可以在设计时建立应用程序的组件并设置它们的属性。请比较运行时。


细节带区

报表中的一块区域，一般包含来自表中的一行或多行记录。


开发环境

Visual FoxPro 用于创建应用程序的交互式界面。


发音符号

重音或其他符号，放置于字母的上方、下方或中间，以示发音与原字符不同。请参阅重音字符，国际字符。


维数

数组的大小或数组中元素的数目。请参阅 ALEN( ).


停放

将工具栏固定在 Visual FoxPro 窗口的上部、下部或边缘。项目管理器可以停放在 Visual FoxPro 窗口的上部。


动态链接库(DLL)

Windows 术语，表示可被过程调用，在运行时被加载并链接进应用程序的一组例程。DLL 可以包括实用程序或非 Microsoft Windows 内部所有的特定函数。请参阅 FoxPro 链接库.


拖放

允许将一个对象拖到另一个对象上执行某种操作的功能。要拖动一个对象，可单击该对象，按住鼠标键，然后移到新位置。选好新位置后，释放鼠标放下对象。


    编辑框

在表单上用于接收输入文本或查看文本的控制。编辑框可以包含多行文本。请参阅文本框。


元素

在 Visual FoxPro 中，构成数组的各个成员。


嵌入

OLE 术语，用于将一个对象的副本从一个应用程序插入另一个应用程序。对象副本嵌入后，不再与原来的对象有任何关联。如果原来的对象有所改变，嵌入的对象不受影响。请参阅 OLE 对象。比较 链接。


封装

面向对象程序设计术语，用于说明包含和隐藏对象信息，如内部数据结构和代码的能力。封装将操作对象的内部复杂性与应用程序的其他部分隔离开来。例如，当您对一个命令按钮设置 Caption 属性时，不必了解标题字符串是如何存储的。请参阅抽象。


EOF

文件尾。


换码序列

以 ESC 字符开头的一系列键击或输出字符。换码序列一般用于定位光标和控制屏幕上字符的显示，或者作为控制打印机的代码。


事件

由对象识别的一个动作。您可以编写相应的代码对此动作进行响应。事件可以由一个用户动作产生，如单击鼠标或按下一个键；也可以由程序代码或系统产生，如时钟。


事件代码

事件发生时执行的代码。此代码也可在程序中被调用。请参阅事件。


事件驱动程序设计

一种强调事件代码的程序设计模型，与过程化程序设计的系列代码不同。请参阅事件，事件代码。


事件循环

由 READ EVENTS 命令建立 CLEAR EVENTS 命令终止的，交互式的，运行时刻环境。请参阅事件。


可执行程序

可执行程序由 Visual FoxPro 专业版的项目管理器生成，具有 .EXE 文件扩展名。


表达式

变量、操作符、常量、函数、字段名、控制以及属性的组合，求值结果为单个值。可以使用表达式对属性进行设置，为查询设置条件或定义计算结果字段。


字段

包含在记录中的数据项。一个或多个字段组成表中的一个记录，一个或多个记录构成一个表。


字段级规则

一种与字段相关的有效性规则，在插入或修改字段值时被激活，多用于数据输入正确性的检验。字段级规则在记录级规则和触发器之前被激活，在缓冲更新时工作。请比较触发器。


文件梗概

由一系列通配符，如 ? 和 *，组成的文件名，用以指明特定的文件供搜索时使用。


筛选

应用于记录的一组条件，用来显示所有记录的一个子集或对记录排序。


标志

取值“真”(.T.)或“假”(.F.)的一个变量，用以指明某些条件是否具备或某一事件是否发生等等。前面设置的标志可供后面使用，控制程序的动作。


浮动

窗口可自由移动的能力。例如，Visual FoxPro 工具栏、项目管理器及其选项卡都可以浮动。


外部关键字

一列或多列的组合，列中的值需要与另一个表中的主关键字相匹配。用于联接相关表。


表单

一种容器类。是一个或多个页面的集合，类似标准窗口或对话框。表单可以包含用以显示并编辑数据的控制。表单可以包含在一个表单集中。请参阅容器类，页面。


表单集

一种容器类。是一个或多个相关表单的集合。可使用表单设计器在表单集中布置表单。请参阅容器类。


Foxel

等于表单中当前字体字符的平均高度和宽度。Foxel 在开发既用于字符平台又用于图形平台的跨平台应用程序时非常有用。


FoxPro 链接库(FLL)

用 C 语言创建的与 Visual FoxPro 兼容的 DLL；用以扩展 Visual FoxPro 的功能。


自由表

不包含在数据库中的表。在添加到一个数据库之前，所有由 FoxPro 早期版本创建的表都是自由表。请比较数据库表。


函数

一个预先编制好的计算模块，可供 Visual FoxPro 程序在任何地方调用。由于一个函数接收一个或多个参数而返回单个值，因此可嵌入到一个表达式中。函数包含一对圆括号以与命令相区别。例如，ROW( ) 就是一个函数。函数可由 Visual FoxPro 提供，也可由用户定义。请参阅参数 (argument)，表达式，用户自定义函数。


生成的代码

由 Visual FoxPro 菜单生成器 GENMENU 创建的代码。生成的菜单代码具有 .MPR 扩展名。


生成的名称

由 SYS(2015) 生成的唯一的名称。这些名称与对应的子句和代码一起被插入到生成的程序当中。


   表格

将数据以表格形式表示出来的一种控制。表格控制包含列标头、列和列控制。


组带区

报表中的一片区域，用以放置成组的字段，这些字段可通过使用“报表”菜单的“数据分组”命令，然后指定条件得到。


组注脚

报表上的一个带区，可在其上定义对象，每当分组表达式值改变时，打印此对象。组注脚通常包含组数据的计算结果值。


组标头

报表上的一个带区，可在其上定义对象，每当分组表达式值改变时，打印此对象。组标头通常包含一些说明后续数据的信息。


分组记录

请参阅数据分组。


句柄

一个赋给窗口的数值，供操作系统跟踪窗口属性或在 C 或 C++ 库中的指向指针的指针。由 Visual FoxPro 专业版的库构造组件构造的库例程需要使用句柄。


热点

在帮助系统中，位图上的某一区域是“热”的，意思是当您将鼠标指针移动到该区域上时，它能够予以响应。这时，鼠标指针改为手形符号，当您单击鼠标按钮时，在热点编辑器中定义的主题将出现。在联机帮助中，热点通常绿色的按钮和单词。请参阅超图形。


超图形

在帮助系统中出现的带有嵌入热点的图形


   图象

允许您在表单上加入图片的控制。


独立 .IDX

包含单个索引项的索引文件。一个独立索引文件不能具有与相关表相同的名称，而且也不会随着表的打开而自动打开。请参阅复合索引文件。


索引

根据关键字的值进行逻辑排序的一组指针。索引提供对数据的快速访问，可以对表的各行强制实现唯一性。Visual FoxPro 中的索引保存在索引文件中。请参阅候选索引，主关键字。


索引文件

一种文件，文件中的各项用以标识表中数据的位置。请参阅独立 .IDX，复合索引文件。


继承性

面向对象程序设计术语，用以说明子类延用父类特征的能力。如果父类特征发生改变，则子类将继承这些新特征。例如，如果您为一个编辑控制添加了一个新属性，IsBold，那么以此控制为基础派生的子类也将拥有 IsBold 属性。


输入掩码

字段或控制的一种属性，用以限制或控制用户输入的格式。例如，掩码 (###) ###-#### 可用来限制只能输入北美电话号码的格式。


可插入 OLE 对象

可以利用对象链接或嵌入功能插入到 Visual FoxPro 表或表单中的 OLE 对象，如 Excel 电子表格或 Word 文档。一个可插入 OLE 对象没有事件。请参阅事件，对象链接与嵌入 (OLE)， OLE 对象。


实例

面向对象程序设计术语。根据类定义创建的一个对象。与一个类不同，类仅仅是一种定义，而一个实例则是可以用来执行某种任务的对象。例如，在一个运行表单上的文本框就是 TextBox 类的一个实例。


国际字符

含有发音符号的字符，如 �。Visual FoxPro 接受此类字符，因而可对非英语语种的数据进行操作。请参阅重音字符，发音符号。


联接

一种数据库操作，通过比较指定字段的值将两个或多个表的记录相链接。


跳转

在帮助系统中对相关主题的交叉引用。在图形方式帮助系统中，跳转以绿色、带下划线的字符出现。请参阅热点。


纽带表

用来将两个表之间的多对多关系分解成两个一对多关系的表。纽带表包含这两个表中的主关键字以及多对多关系。


关键字(key)

用来标识一个记录的字段或表达式，常用作一个表的索引字段。请参阅主关键字。


关键字(keyword)

由 Visual FoxPro 保留，供系统自己使用的单词或短语。也称作保留字。在语法上，Visual FoxPro 关键字全部以大写字母出现。例如，EXCLUSIVE 就是 USE 命令的一个关键字。


{bmc b003.mrb}   标签
   标签

一种存放文本的控制，用来对表单上的区域或其他控制加以说明。有时也称作提示。请参阅标题。


生存期

用来说明一个变量在函数调用结束或程序结束时是否仍然有效的术语。公共变量仍然有效，局部变量则不然。请参阅作用域。


ligature连字
连字

几个字母连在一起构成的单个字母，如 �。


{bmc b018.mrb}   线条
   线条

在表单上画线的控制。


链接

OLE 术语，表示在源文档与目标文档之间的一种连接。链接对象保存了来自源文档的信息，并对两文档之间的连接进行维护。当源文档中的信息发生变化时，这种变化将在目标文档中体现出来。请比较嵌入。


   列表框

提供一系列可供选择条目的控制。


本地别名

在 SELECT - SQL 命令的 FROM 子句中为一个表指定的临时名称。


本地数据

不存在于远程服务器上的数据。请参阅主数据，远程数据。


本地变量

只能在一个函数或过程中访问的变量。其他过程或函数不能访问此变量的数据。可使用全局变量在多个过程或函数之间共享数据，或使用私有变量在被调用的函数中共享数据。请参阅生存期，公共变量，作用域。


地区

与给定语言及国家相对应的有关信息。地区信息涉及到小数位分隔符、日期和时间格式以及字符排序等设置。


锁定

记录或表的一种状态，这种状态使得除当前正在向该记录或表中输入数据的用户之外，其余用户对该记录或表的访问都是只读的。


逻辑操作符

用以产生逻辑结果（“真”或“假”）的操作符，有时也称作布尔操作符。Visual FoxPro 中的逻辑操作符包括：( ) （表达式分组），NOT 或 ! （非），AND 或 OR（或）。请参阅算术操作符，关系操作符。


长名称

软件超出底层系统限制而接受长名称的能力。Visual FoxPro 允许长字段名和长表名。使用长名称对于跨平台的操作可能遇到难以预料的结果。


循环

允许用户根据需要多次执行一行或多行代码。请参阅 SCAN ... ENDSCAN，FOR ... ENDFOR，DO WHILE ... ENDDO。


宏

在 Visual FoxPro 中，代表一系列动作和键击操作的一个键。


宏替换

用内存变量替换名称的操作。在 Visual FoxPro 中，可以在变量名前加连字符 (&)，包含名称表达式的命令或函数比包含宏替换的命令或函数执行速度快。应尽可能用名称表达式代替宏替换。请参阅名称表达式。


Visual FoxPro 主窗口

在 Visual FoxPro 中，位于其他系统窗口或用户自定义窗口之下的窗口。


主程序

一个已编译应用程序中的执行程序。一般来讲，主程序设置应用程序的操作环境，运行菜单或表单，显示界面，并用 READ EVENTS 命令建立事件循环。


主报表

在一个 Visual FoxPro 报表中，紧跟标题的内容。包括页标头、报表正文和页注脚。


多对多关系

表之间的一种关系。在这种关系中，一个表中的多个记录在相关表中同样有多个记录与其匹配。在数据库设计时，这种关系需要加以修改。请参阅纽带表。


标记字符

出现在菜单项左边一种符号，用以说明该菜单项已选定。在 Visual FoxPro for Windows 中，默认的标记字符是对勾号。


菜单

由一系列项，包括命令或文件名等，组成。当您从菜单栏上选择菜单标题时，菜单将从菜单栏上拉下，供您选择。


菜单栏

位于屏幕上部，包含各菜单名的一块水平条形区域。


菜单项

列于菜单上的菜单命令或文件名。可以使用菜单设计器为应用程序创建或定义菜单项。


菜单标题

位于菜单栏上用以表示菜单的一个单词、短语或图标。选择菜单标题可拉下菜单。也常称作菜单名。


菜单系统

菜单栏、菜单标题、菜单以及菜单项的组合。


图元文件

一种 Windows 文件，以图形对象方式而不是象素方式存储图象。在调整大小时，图元文件比位图文件效果要好。


方法

对象能够执行的一个操作。例如，列表框有这样一些方法维护它的列表内容：AddItem，RemoveItem 和 Clear。请参阅对象。


模式

一个窗口或表单在被明确关闭以前一直拥有焦点，那么这个窗口或表单就是模式窗口或模式表单。对话框和信息提示框一般是有模式的。例如，可设计一个模式对话框，在按下“确定”按钮以前，您不能访问其他窗口。


无模式

一个窗口或表单在您切换到另一个表单或窗口以前，不要求您关闭它，那么此窗口或表单就是无模式的。例如，“命令”窗口和工具栏就是无模式的。


多个实例

由同一个类创建的若干对象。每一个对象都有其自己的数据和属性，但共享代码。


多级视图

基于其他视图的视图，或者基于本地表、本地视图或远程视图的组合的视图。


命名连接

存储在一个数据库中的连接的定义，可供创建远程视图时按其名称引用。可以对命名连接的属性进行设置以优化 Visual FoxPro 和远程数据源的交流。当您激活一个远程视图时，此视图的连接成为通向远程数据源的管道。


名称表达式

由圆括号括起来的一个变量或数组，可以用来替换命令或表达式中的名称。名称表达式为 Visual FoxPro 的命令和函数提供了灵活性。


主数据

存储在 Visual FoxPro 表（.DBF 文件）中的数据。请参阅数据库，本地数据，远程数据。


非压缩单项索引

未经优化以节省磁盘空间的单项索引文件。非压缩单项索引文件应只用于以下场合：保持与 FoxPro 2.0 以前版的兼容性，或与 FoxBASE+ 共享数据。


非滚动区域

在图形方式帮助系统中滚动浏览一个主题时，位于主题上部保持不动的区域，而主题的其他部分滚动。非滚动区域可以包含文本、热点和图形。


规范化

在关系数据库中通过有效地设计表以最大程度地减少重复信息。


NULL 值

无明确的值。NULL 值不等同于零或空格。一个 NULL 值不能认为比某个值（包括另一个 NULL 值）大或小，相等或不同。


对象

类的一个实例，包括了数据和过程。例如，在一个运行表单上的控制就是一个对象。


面向对象程序设计(OOP)

一种系统化的程序设计方法，允许抽象化、模块化的分层结构，具有多态性、继承性和封装。


对象链接与嵌入(OLE)

一种协议，根据该协议，一个 OLE 对象，如 Excel 电子表格或 Word 文档可以链接或嵌入到一个 Visual FoxPro 表或表单中。请参阅嵌入，链接，OLE 对象。


OLE 自动化

以编程方式控制另一个应用程序的 OLE 对象的能力。


OLE 对象

可供链接或嵌入的对象。OLE 对象包括 OLE 控制和可插入 OLE 对象，如 Excel 电子表格和 Word 文档。请参阅嵌入，可插入 OLE 对象，链接，OLE 控制。


OLE 控制

一种由 Microsoft 或其他独立软件开发商提供的经过预包装的对象。与其他 OLE 对象不同，OLE 控制拥有事件，可以派生得到其他控制。OLE 控制的文件扩展名为 .OCX ，可用随 Microsoft Visual C++ 2.0 提供的 Microsoft OLE 自定义控制开发工具开发。请参阅事件，OLE 对象，子类。


一对多关系

表之间的一种关系，在这种关系中，主表中的每一个记录与相关表中的多个记录相关联（每一个主关键字值在相关表中可出现多次。）。


一对一关系

表之间的一种关系，在这种关系中，主表中的每一个记录只与相关表中的一个记录相关联。


开发式数据库连接 (ODBC)
开放式数据库连接 (ODBC)

用于数据库服务器的一种标准协议。可以安装多种数据库的 ODBC 驱动程序，从而使 Visual FoxPro 能够与该数据库相连，访问库中的数据。


开放式缓冲

一种高效的更新记录的方式。在这种方式下，记录只在被写入时加锁，这样在多用户环境下，就减少了单个用户独占系统的时间。当对远程表使用记录或表缓冲时，Visual FoxPro 强制执行开放式锁定。请比较保守式缓冲。


   选项按钮组

包含选项按钮的控制数组。选项按钮有时也称作单选钮。


页面

一种用于创建选项卡式对话框的容器类，可以是包含一组控制的一幅屏幕或一个表单中的一部分。在一个表单中每次只能有一个活动页面。


页注脚

位于每一页报表底部的一块打印区域。


页标头

位于每一页报表顶部的一块打印区域。


参数(parameter)

传递给函数或过程的一个值。要给一个函数或过程传递参数，必须包含 PARAMETERS 或 LPARAMETERS 命令。请参阅参数 (argument)。


父表

在一对一或一对多关系中的主表或主控表。请参阅子表，主表，相关表。


部分搜索

当表达式的长度小于关键字的长度时使用部分搜索。Visual FoxPro 执行部分搜索时忽略发音符号。如果发音符号很重要，可考虑使用 SCAN FOR...ENDSCAN 或 LOCATE FOR...CONTINUE 而不使用 SEEK。


引用传递

传递变量给函数的一种方法。调用例程将变量的地址传给被调用例程，被调用例程使用这个地址检索或修改变量。当被调用例程改变了变量的值时，调用例程中的变量的初始值也将随之改变。请参阅参数 (argument)，按值传递。


按值传递

传递变量给函数的一种方法。调用例程创建变量值的一个副本并将其传给被调用例程。当使用这种传递方法时，被调用例程可以修改该变量的副本，但不影响调用例程中该变量的值。请参阅参数 (argument)，引用传递。


永久关系

表之间的一种关系，这种关系不仅在运行时存在，而且一直保留。拥有永久关系的表必须在数据库中。


保守式缓冲

在多用户环境中防止一个用户访问另一个用户正在修改的记录或表。为修改记录提供了最安全的环境，但会减慢使用者的操作。请比较开放式缓冲。


象素

可在屏幕或打印机上显示的最小元素。象素是与屏幕无关。请比较缇。


多态性

面向对象程序设计术语。主要是指一些关联的类包含同名的方法，但方法的内容可以不同。具体调用哪种方法在运行时根据对象的类确定。例如，相关联的几个对象可以同时包含 Draw 方法，当某个过程将其中一个对象作为参数传递时，它不必知道该参数是何种类型的对象，只需调用 Draw 方法即可。


磅

是一个测量单位。12 磅等于1 匹克，6 匹克等于 1 英寸，因此 1 磅近似等于 1/72 英寸。请参阅缇。


优先级

在计算算术表达式时应用操作符的优先级别。在 Visual FoxPro 中，操作符的优先级是：( )（用于括起子表达式），^ 或 **（幂），* 和 /（乘和除），%（取余），+ 和 （加和减）。


主索引

在指定字段或表达式中不允许出现重复值的索引。主索引主要用于主表或“被引用”表，用来在一个永久关系建立参照完整性。一个表只能创建一个主索引。如果在任何已含有重复数据的字段中指定主索引，Visual FoxPro 将产生错误信息。请比较候选索引，普通索引，唯一索引，主关键字。


主关键字

表中的一列或多列，其中的值唯一地标识了表中的一行。


主表

一个表，其中的各列在一对一或一对多关系中被其他表所引用。


私有变量

一种变量，当定义此变量的例程结束时，此变量也被相应释放。私有变量在 Visual FoxPro 中是默认的，不需要特殊的关键字定义。但是，如果在更高一级例程中已经有同名变量，可以用 PRIVATE 关键字予以声明，以限定其范围。请比较本地变量，公共变量。


过程

作为一个相对独立的单位而工作的一组指令，或子程序。请参阅函数。


项目

一种文件，用于跟踪创建应用程序所需要的所有程序、表单、菜单、库、报表、标签、查询和一些其他类型的文件。项目用项目管理器进行维护，具有 .PJX 扩展名。


投影列表

在 SELECT - SQL 命令中，投影列表列出在查询输出中的字段、常数和表达式。


属性

控制、字段或数据库对象的特性。可以对其进行设置，定义对象的特征或某一方面的行为。例如，Visible 属性影响一个控制在运行时是否可见。可以用“属性”窗口修改一个对象的属性。


公共变量

用 PUBLIC 关键字定义的变量，可用于所有过程和函数，而不限于定义该变量的过程和函数。请比较本地变量，私有变量。


限定

在表名前出现的表所在数据库名和 ! 符号。如果在创建视图时，限定了表名，Visual FoxPro 将在所有已打开数据库中，包括当前和任何非当前数据库，以及默认搜索路径中搜索该表。


查询

向一个数据库发出的检索信息的请求，它使用一些条件提取特定的记录。查询可用查询设计器创建。


记录

表中的一个存储单位。一个表可以包含大量的记录，一个记录由多个字段组成。


记录级规则

一种与记录相关的有效性规则，当插入或修改记录时激活，常用来检验数据输入和正确性。记录被删除时不使用有效性规则。记录级规则在字段级规则之后和触发器之前激活，在缓冲更新时工作。请参阅字段级规则。请比较触发器。


参照完整性(RI)

控制数据一致性，尤其是不同表的主关键字和外部关键字之间关系的规则。Visual FoxPro 使用用户自定义的字段级和记录级规则完成参照完成性规则。参照完整性生成器可以帮助您建立规则，控制记录如何在相关表中被插入、更新或删除。


普通索引

除唯一索引，主索引，或候补索引之外的索引。普通索引可用来对记录排序和搜索记录，它不强迫记录中的数据具有唯一性。此外，普通索引还可作为一对多永久关系中的“多方”。


相关表

引用其他表中字段的表。请参阅子表，父表，主表。


关系

表之间的一种链接，它允许您不仅仅从当前选定表中访问数据，而且可以访问其他表中的数据。这种链接指的是联接条件。


关系数据库

根据表、记录和字段之间的关系进行组织和访问的一种数据库。


关系操作符

对数值或其他值进行操作并得到逻辑结果的一种操作符。在 Visual FoxPro 中，关系操作符有 <, >,= =, <=, >=, 和 <>。请参阅算术操作符，逻辑操作符。


远程数据

任何在 Visual FoxPro 以外的，位于 ODBC 支持的源中的数据，Paradox 或 SQL 数据库。请参阅数据源，主数据。比较本地数据。


报表带区

报表中的一块区域，可以包含文本、来自表字段中的数据、用户自定义函数以及图片、线条和框等。报表上可以有各种不同类型的带区。请参阅细节带区，组带区，报表注脚带区，报表标头带区，标题带区，总结带区。


报表细节带区

在页标头和页注脚之间的区域，包含来自选定表中的多行记录信息。


报表注脚带区

在“报表设计”窗口中的一个带区，包含出现在页面底部的一些信息（如页码、节等等）。


报表标头带区

在“报表设计”窗口中的一个带区，所包含的信息在每份报表中只出现一次。一般来讲，出现在报表标头中的项包括报表标题、栏标题和当前日期。


解决引用

当您在一个项目中增加对某一组件的引用并重新连编该项目时，Visual FoxPro 自动定位该组件并将其加入项目。任何包含在新组件中的额外组件也同时被解决，并加入到项目中。通过自动添加必要的文件到项目中并检查已修改组件的编译错误，您可以很容易区分组件之间的环境和逻辑连接错误。


规则

请参阅约束，字段级规则，记录级规则。请比较触发器。


运行时

应用程序的运行期间。在应用程序运行时，可以与其交互。请比较设计时。


Rushmore 技术

一种数据访问技术，可以高效地访问系列数据。


规划

整个数据库布局的一个定义，包括表之间和索引之间的完整性检查以及永久关系等。


作用域

对一个对象或变量，或位于视图或表之中的一组记录的有效引用区域。例如，本地变量只能在定义该变量的过程中被引用。公共变量可在应用程序的任何位置引用。例如，如果对象，如当前数据库，在已定义的搜索路径内，则位于作用域内。可在很多命令中使用 Scope 子句指定记录范围。请参阅生存期。


二级窗口

在图形方式帮助系统中用热点打开的窗口，含有标题栏和滚动条，但不包含菜单栏。


服务器

网络上的一台计算机，用来控制对资源，如文件、打印机、远程数据和调制解调器等的访问。请参阅客户/服务器。


工作期

启动 Visual FoxPro 时所创建的一个 Visual FoxPro 实例。当退出 Visual FoxPro 时工作期结束。请参阅数据工作期，工作区。


设置

属性的值，可用来确定一个对象或控制的外观或行为。例如，如果您对一个编辑区域设置 SpecialEffect 属性为“三维”，则编辑框看上去就具有三维效果。


初始化代码

在 .MPR 文件中菜单定义代码之前执行的程序部分。初始化代码可以用来打开文件，声明内存变量或者将前一个菜单系统压入堆栈供以后使用。请参阅清理代码。


   形状控制

用来创建各种形状图形，如各种矩形或圆的控制。


排序次序

记录显示的顺序，可以是升序 (0-100) 也可以是降序 (100-0) 。字母排序次序取决于地区。


   微调控制

允许您通过键入或单击上、下箭头按钮增加或减少数值的控制。


SQL 传递

客户／服务器术语，创建 SQL 命令并将其传递给 SQL 数据库。


SQL Server

Microsoft SQL Server for Windows NT 是一个功能强大，高性能的关系数据库管理系统，满足客户／服务器计算要求。SQL Server 提供一整套数据管理体系结构，功能强大可靠，并对多种应用程序和数据源开放。


堆栈

保留内存中的一块区域，程序可在需要时把操作信息压入或推出该区域。Visual FoxPro 管理 Visual FoxPro 应用程序中的堆栈。如果您使用 Visual FoxPro 专业版的库构造组件创建库，那么这些库可在 Visual FoxPro 堆栈中分配空间。


独立的 OLE 对象

由于不是每一个记录都需要因而不属于一个表的对象。例如，假定您想将公司徽标添加到一个订单表单上，表单上包括订货品种、订货数量和单价等信息。这时，公司徽标就属于独立对象，因为它不与订货信息相关。请参阅OLE 对象。


存储过程

在 Visual FoxPro 中，是指存储在数据库中的过程。过程可以包含任何允许在用户自定义函数中出现的命令和函数。在远程数据源上，是指在任何 SQL 数据库中具有名称的一组 SQL 语句的集合。


字符原义

括在单引号或双引号中的字符串。可用于字符表达式。例如，"any characters" 和 'any characters' 就是字符原义。


结构复合索引

每次表打开时自动打开，而且在表修改时自动更新的索引文件。一个结构复合索引文件通常与表具有同样的文件名，但扩展名为 .CDX。


结构化查询语言(SQL)

一种数据查询和编程语言。


占位程序

在程序开发的早期或原型化阶段建立的一个空过程或函数，用于完成某一任务，其功能待以后实现。


子类

以其他类定义为起点，对某一对象所建立的新类。新类将继承任何对父类所做的修改。


下标

用以标识数组中特定元素的索引编号。


总结带区

报表中的一块区域，一般在报表的最后出现一次。


语法

命令的表达方式，用以指明命令可采取的各种可能形式。


系统内存变量

Visual FoxPro 自动创建和命名的变量，以下划线作为开始字符。例如，_PAGENO 就是一个系统内存变量。请比较变量。


系统对象

属于操作系统而不是 Visual FoxPro 的对象。这类对象包括 Screen（屏幕），Desktop（桌面），和 Clipboard（剪贴板）对象。


选项卡

外观类似文件夹顶端的一种用户界面元素。单击选项卡可以选择文件夹。要在 Visual FoxPro 中创建选项卡，可以使用表单设计器中的页面控制。请参阅页面。


Tab 键次序

按 Tab 键时，焦点从一个字段或对象移向另一个字段或对象的次序。


表

关系数据库管理系统的基本结构。在 Visual FoxPro 中，一个表以记录（行）和字段（列）的形式存储数据。数据常常是关于某一类事物的信息，如客户、客户订单、雇员、存货信息等等。一个 Visual FoxPro 表可以以 .DBF 扩展名存于自己的文件中，也可以包含在一个数据库中。


标识

包含在一个复合索引文件中的任何单个索引项。


模板

一个预定义的类或表单，可用于其他新类或表单，以使其具有类似风格。


临时关系

使用 SET RELATION 命令创建的表之间的关系。临时关系在退出 Visual FoxPro 时解除。请比较永久关系。


   文本框

允许您在表单上键入或查看文本的一种控制。一般来讲，文本框中含有一行文本。请参阅编辑框。


文本文件

一种文件格式，其中包含以文本形式表达的信息，其内容可由 ASCII 码解释。可以使用各种应用程序查看和编辑。请比较二进制文件。


   计时器

在应用程序中用来处理复发事件的控制。在运行时不可见。


标题带区

报表中的标题区域，一般在报表开头打印一次。


   工具锁定

控制工具栏上的一个按钮。按下此按钮时，其他控制按钮将保持活动，而不是返回“选择”按钮。


工具栏

单击后可以执行常用任务的一组按钮。工具栏可以浮动在窗口中，也可以停放在 Visual FoxPro 主窗口的上部、下部或两边。您可以定制 Visual FoxPro 提供的工具栏，也可以用 Visual FoxPro 提供的工具栏基类创建自己的工具栏。请参阅类，基类。


事务

导致特定功能或动作被完成的一系列处理步骤，确保把一组动作当作一个整体来处理。


触发器

在一个插入、更新或删除操作之后运行的记录级事件代码。不同的事件可以对应不同的动作。触发器在规则之后运行，并且在缓冲更新时不运行，除非发布 TABLEUPDATE( ) 命令。它们常用于交叉表的完整性。


缇

一种度量单位，是一磅的 1/20 ，或者是一英寸的 1/1440。一厘米等于 567 缇。缇是与屏幕无关的度量单位。请参阅磅。请比较象素。


一元操作符

作用于单个操作数的操作符。在 Visual FoxPro 中，负号和 NOT 操作符都是一元的，其他操作符都是二元操作符，它们对两个操作数进行操作。


唯一索引

一种索引，它不允许两个记录具有相同的索引值。这种要求与主关键字相同。请参阅主索引，候选索引。


用户自定义类(UDC)

与 Visual FoxPro 基类相似，但由用户定义，并且可用来派生子类。这种类没有可视表示形式。


用户自定义函数(UDF)

由用户创建的，可返回一个值的代码。用户自定义函数包括以 .PRG 扩展名保存的独立的程序，以及程序中的过程和函数。请参阅函数，参数 (parameter)。


有效性检查

检查输入数据是否满足某些条件或限制的过程。请参阅字段级规则，记录级规则。


变量

指代计算机内存中的某一位置，其中可存放数据。您可以改变一个变量的内容，但其名称和存储区域可以一直使用，直到结束 Visual FoxPro 工作期或释放该变量。变量及其中的值在您退出 Visual FoxPro 时丢失，除非在退出前将其保存在磁盘上。请参阅常量，系统内存变量。


视图

一个定制的虚拟表定义，可以是本地的、远程的或带参数的。视图可引用一个或多个表，或者引用其他视图。视图是可更新的，它可引用远程表。


视图定义

关于视图的 SQL 语句的定义。视图定义保存在当前数据库中，包括在 SQL 语句中使用的表名、字段名和表的属性设置。


可视编辑

OLE 术语。在 Visual FoxPro 中双击一个 OLE 对象时，如果创建该对象的应用程序支持可视编辑，则应用程序的菜单将与 Visual FoxPro 菜单合并，允许您在 Visual FoxPro 主窗口中编辑该对象，而不在属于该应用程序的窗口中编辑。也可以在应用程序中控制可视编辑。请参阅OLE 对象。


通配符

在路径名中用来代表其他字符的字符。问号 (?) 可代表单个字符。星号 (*) 可代表一串字符。例如，如果您在某一应用程序中使用 *.TXT 进行文件列表，那么您将得到所有具有 TXT 扩展名的文件。请参阅文件梗概。


向导

由一系列对话框组成，在每一对话框中提出特定问题，问您想要干什么，在回答完问题后，向导将根据您的回答完成相应的任务。


工作区

用以标识一个表的编号的区域。通过在“查看”窗口中选择工作区，您可以打开相关表。


Xbase

一种标准化的数据库编程语言，为 Visual FoxPro，Clipper 和 dBASE 所共用。


零长度字符串

空字符串。可通过引号中不加任何字符 ("") 创建空字符串。


缩放

在“页面预览”窗口中放大一个窗口或一个页面。当对一个已放大的对象进行缩放操作时，Visual FoxPro 将其还原到原来的尺寸。


Z-order

在表单上沿表单 z 轴方向（深度方向）的层铺控制。z-order 确定哪一个控制在其他控制的前面。


示例文件

请参阅

Visual FoxPro 不但提供了各种各样的示例应用程序、数据库和相应文件，以演示新增功能和编程技术，而且还提供了用以完成日常编程任务的实用程序。

下面的示例可供研究参考。选择下面某一项能看到有关此示例的简要说明和相关的特殊功能。

Tasmanian Traders

此应用程序是一个覆盖面广泛、用来展示 Visual FoxPro 各种功能和开发技术的示例程序。

控制示例

此应用程序演示并说明了如何在 Visual FoxPro 中使用控制。

客户/服务器示例

此应用程序演示了用 Visual FoxPro 开发客户/服务器应用程序的一些技术。

OLE 示例

此应用程序及其示例文件演示了如何用对象链接与嵌入(OLE)技术来扩展 Visual FoxPro 应用程序功能。

实用程序

这些程序是一些随 Visual FoxPro 提供的实用工具，可用以提高应用程序的开发过程。


请参阅

幕后内容

客户/服务器示例

控制示例

OLE 示例

Tasmanian Traders

实用程序


Tasmanian Traders

请参阅

位于 Visual FoxPro SAMPLES\MAINSAMP 目录下。此示例是一个根据实际商业情况而设计的集成化商业应用程序。它说明了用 Visual FoxPro 开发应用程序时所能利用的许多新功能，这些功能包括：

 •	   面向对象技术

 •	   可重用类库

 •	   数据缓冲

 •	   商业规则

 •	   参数化视图

 •	   登录检查

 •	   多实例表单

 •	   菜单、表单和工具栏的协调

若要学习具体某一特殊功能是如何实现的，可在任何时侯从“管理”菜单中选择幕后内容命令。“幕后内容”不但对如何以及为什么用编码实现某一功能提供说明，而且能够查阅代码，并在“情况分析”中详尽说明了此示例程序从设计到实现的整个过程。

� 若要运行 Tasmanian Traders

1.	将默认目录设置为 Visual FoxPro 的 SAMPLES\MAINSAMP 目录。

2.	在“命令”窗口中键入 DO TASTRADE.APP。

3.	在“介绍表单”中选择“继续”。

4.	在“登录”表单中输入“提示”框中显示的口令，然后选择“确定”。

Tasmanian Traders 示例程序包括对“客户”、“雇员”、“运输商”和“产品”等表进行维护的表单。若要显示这些表单，可从“管理”菜单选择相应的命令。要显示“输入订单”或“订货情况”表单，可选择“订货”菜单上的命令。程序中还包括几个报表和标签样例。若要运行报表，可从“文件”菜单中选择“打印报表”。


请参阅

幕后内容

示例文件


幕后内容

请参阅

开发 Tasmanian Traders 示例程序时所涉及的一些对象和概念的详细信息在此表单中提供。要运行此表单，可从“管理”菜单中选择“幕后内容”命令。“幕后内容”表单中有下列选项可供使用：

分类

显示 Tasmanian Traders 应用程序中使用到的表单和类库。在这一列表中选择选项，可在“功能”列表框中显示对应的选项。选择下拉式列表的“All”选项将显示应用程序的所有可用主题。

功能

显示与“分类”下拉列表中的某一选项相对应的功能。

说明

对“功能”列表框中某一具体功能的详细说明。

代码按钮

如果所选择的功能含有对应的代码，则“代码”按钮可用。按下此按钮可显示如何实现此功能的代码。

情况分析按钮

显示有关如何创建 Tasmanian Traders 示例应用程序的说明性文本，包括程序概述、所用类库的说明以及 TASTRADE.APP 初始化代码的执行情况。

关闭按钮

关闭“幕后内容”表单。


请参阅

示例文件

Tasmanian Traders


控制示例

请参阅

位于 Visual FoxPro 的 SAMPLES\CONTROLS 目录下。此示例可显示一个表单，说明如何在应用程序中使用 Visual FoxPro 控制。

主表单中含有一个列表框，其中包括所有的控制示例。可用选项按钮筛选要查看的示例。当从列表框中选择某一示例时，编辑框将显示有关该示例的说明及其所实现的功能。可通过双击鼠标放大编辑框，以便于阅读。

� 若要在“表单设计器”中显示示例

1.	在列表框中选择某一控制示例。

2.	选择“参阅示例”按钮。

3.	选择对象并查看与对象相关的属性和代码。

� 若要了解示例的运行情况

1.	选择列表框中的某一控制示例。

2.	选择“运行示例”。

也可以双击列表框中的示例来运行示例。


请参阅

示例文件


客户/服务器示例

请参阅

此示例应用程序位于 Visual FoxPro 的 SAMPLES\CSAPP 目录下。为了更好地理解此程序，可选择其中的对象，然后查看与之相关的属性和代码。

 •	   由于支持私有数据工作期，因而允许运行表单的多个实例，而不再需要复杂的代码来解决别名冲突问题。要研究这一功能，可以从“Publications”菜单中选择任一表单。每一表单都在其私有数据工作期中打开。

 •	   参数化视图驱动“Search/Checkout”表单。更改“Author”组合框中的作者，然后选择 GO!，就会使 Visual FoxPro 重新查询服务器并检索与指定作者相关的出版物。

 •	   “Search/Checkout”表单使用了表缓冲技术，作用是保存对表格的“Checkout”列所做的修改（直至选择保存或放弃它们）。

� 若要运行客户/服务器示例应用程序

1.	确认使用的计算机上具有已安装的 ODBC。如果采用完全安装方式安装了 Visual FoxPro，则 ODBC 管理器安装在 Visual FoxPro 程序组中，ODBC 选项安装在 Windows 的“控制面板”中。

重要内容

此应用程序同 Microsoft SQL Server，或其他任何包含与 PUBS 数据库一样数据的 ODBC 数据源一起工作。

2.	将默认目录设置为 Visual FoxPro 的 SAMPLES\CSAPP 目录。

3.	打开 LIBRARY 项目（位于 Visual FoxPro 的 SAMPLES\CSAPP 目录下）。

4.	在项目管理器中选择 MAIN.PRG，然后再选择“运行”。第一次运行这个示例时，会显示一个表单提示您输入有关创建连接的信息。

5.	在“ODBC 设置”对话框中输入“数据源名称”，同时输入有效的用户标识号和口令。第一次运行这个示例时，必须为服务器上的表和存储过程建立访问权限。

6.	选择“确定”，这时菜单会有所变化，选择“Publications”菜单上的命令可以显示任何表单。


请参阅

CREATE CONNECTION 命令

示例文件

设置 ODBC 数据源


OLE 自动化示例

请参阅

位于 Visual FoxPro 的 SAMPLES\OLE 目录下。此示例使用 Excel、Chart 和 Word 说明如何从 Visual FoxPro 数据库中选择数据，如何把数据加入到 Excel 电子表格中，如何使用 Chart 绘图以及如何在 Word 中显示图形。

要运行此示例，必须在机器上安装有 Excel 5.0c、Word 6.0a 或它们的更高版本。除此之外，还需要 CUSTOMER.DBF，它放在 Visual FoxPro 的 SAMPLES\DATA 目录下。

� 若要运行 OLE 自动化示例

1.	把默认目录设置为 Visual FoxPro 中的 SAMPLES\OLE 目录。

2.	在“命令”窗口中，键入 DO FORM OLEAUT1 命令。

3.	选择“Click Me”按钮。

� 若要查看与 OLE 自动化示例相关的代码

1.	打开 OLEAUT1.SCX 表单。

2.	双击“Click Me”按钮，显示它的 Click 过程代码。


请参阅

OLE 自动化

示例文件


ADDLABEL.APP

请参阅

位于 Visual FoxPro 目录下。ADDLABEL.APP 可把新规格的标签添加到“标签设计器”的“新标签”对话框中，标签的新尺寸将存入与对话框相对应的资源文件中。对话框使用的资源文件名保存在配置文件 CONFIG.FPW 中。

语法

DO ADDLABEL.APP


请参阅

添加标签大小

文件位置选项卡选项 (工具菜单)

新标签对话框

示例文件


CPZERO.PRG

请参阅	示例

位于 Visual FoxPro 的 TOOLS\CPZERO 目录下。CPZERO.PRG 可从任何具有表文件结构的文件中删除代码页标记，然后再使用其他指定标记。

CPZERO 一般用于来自其他平台或 FoxPro 早期版本的文件。如果这些文件打开时没有代码页标记，Visual FoxPro 会提示您给出代码页。但是如果指定的代码页有误，文件中的数据就不能正常显示。要改换代码页，可使用 CPZERO。

语法

DO CPZERO [WITH "filename"[, codepage_number]]

参数

filename

指定文件名。文件名必须用单引号或双引号括起来。如果没有指定 filename，则显示“定位文件”对话框。

codepage_number

指定代码页编号。如果没有指定代码页，则显示“代码页”对话框。

附注

对某一表运行 CPZERO 之前，应先关闭它。


* 从 MYFILE.DBF 中去除代码页并

* 指定 437 为新的代码页。

*

DO CPZERO WITH "MYFILE.DBF",437


请参阅

添加代码页标记

更换 .DBF 文件的代码页

在 .DBF 文件中查找代码页标记

Visual FoxPro 支持的代码页

CPCONVERT( ) 函数

CPCURRENT( ) 函数

CPDBF( ) 函数

GETCP( ) 函数

移去代码页标记

示例文件

SET CPDIALOG 命令

SET NOCPTRANS 命令

深入了解代码页


GENDBC.PRG

请参阅	示例

位于 Visual FoxPro 的 TOOLS\GENDBC 目录下。这个工具生成一个可重建数据库的程序，使用这个程序做可以：

 •	   生成可供分析的代码，从而了解如何通过程序代码来创建数据库。

 •	   生成可加入到程序代码中的代码，可以在发布应用程序时不带数据库。

 •	   生成可加入到程序代码中的代码，可以在用户数据遭破坏时重建数据库。

语法

DO GENDBC WITH filename

参数

filename

指定输出文件名的字符串。filename 可包括路径信息和扩展名。如果没有提供文件扩展名，则使用默认的扩展名 .PRG。

附注

本程序只在当前活动的数据库上工作。


*

* 创建包含重建数据库

* 代码的 MYDATA.PRG。

*

OPEN DATABASE MyDatabase

DO gendbc WITH "MyData.PRG"

*

*

* 在 C:\VFP 目录中创建包含重建数据库 Main

* 代码的 程序 MAIN.PRG。

*

SET DATABASE TO Main

DO gendbc WITH "c:\vfp\main"

*


请参阅

示例文件


Visual FoxPro 功能概述

请参阅

Visual FoxPro 提供的功能 — 速度、能力和灵活性，是您在普通数据库管理系统中所看不到的。它带领您进入一个 Xbase 的新时代，全新的对象和事件模型使得创建和修改应用程序比以往任何时候都要快速便捷。

Visual FoxPro 具有下列优点和功能：

快速开发应用程序	更强大的开发能力
向导和生成器	面向对象程序设计
可视的设计器	事件
快速应用程序界面	Rushmore 技术
与其他应用程序相互作用	客户/服务器解决方案
工具栏	数据字典
数据共享	远程视图和另类视图
OLE 自动化	事务处理
数据导入和导出	客户/服务器支持
另外，您可以很容易地升级以前的版本。


请参阅

客户/服务器解决方案

数据字典

导入和导出数据

数据共享

事件

面向对象程序设计

OLE 自动化

快速应用程序界面

远程视图和另类视图

Rushmore 技术

工具栏

事务处理

可视的设计器

向导和生成器


向导和生成器

请参阅

如果您想快速获得结果，向导可以满足您的要求。它们提供了按部就班的指令，引导您在 Visual FoxPro 中完成一般性任务。例如，表向导在创建表的过程中给您提供指导，表单向导告诉您如何创建表单，查询向导告诉您如何创建标准的查询。

生成器是可视的工具，它可以按照您指定的方式设计控制。例如，列表框生成器是一个选项卡式的对话框，它帮助您设计表单上的列表框。在生成器中可以设置列表框的一般属性。


请参阅

表单向导

列表框生成器

查询向导

报表向导

表向导

使用生成器

使用向导


 工具栏

请参阅

象其他 Microsoft 应用程序一样，Visual FoxPro 提供了工具栏。工具栏包含了用以完成一般任务的按钮，或是需要经常使用的对象。要完成特定的任务或使用特殊的对象，您应选择适当的按钮。

您可以对 Visual FoxPro 系统本身定制工具栏，也可以为自己编写的应用程序创建自定义工具栏。


请参阅

定制 Visual FoxPro 工具栏

定义工具栏类

使用工具栏


 可视的设计器

请参阅

如果您想设计更多的控制，可以不使用向导和生成器，而使用 Visual FoxPro 设计器。设计器提供了图形界面，可以通过它创建应用程序的组件。例如，您可以用表单设计器定义表单或用表设计器设计表。


请参阅

表单设计器

查询设计器

报表设计器

表设计器

使用设计器

视图设计器


 快速应用程序界面

请参阅

Visual FoxPro 提供的表单设计器使您可以添加功能强大的控制，只用少量代码或根本不用代码就得到优美的界面。表格控制可以直接与一个表相关联，使您很容易开发一对多表单，只要将一个表拖动到表单中就可创建表格控制。为了与其他应用程序保持一致，您也可以用页框控制创建选项卡式的对话框或您自己的生成器界面。


请参阅

表单设计器

表格控制

页框控制

使用表格控制设置一对多表单


面向对象程序设计

请参阅

Visual FoxPro 仍然支持标准 Xbase 的面向过程的程序设计方式，但更重要的是它现在提供真正的面向对象程序设计的能力。借助 Visual FoxPro 的对象模型，您可以充分使用面向对象程序设计的所有功能，包括继承性、封装性、多态性和子类。这些功能是对传统 Xbase 语言的扩展。

可以使用类快速开发应用程序。例如，使用 Visual FoxPro 提供的表单基类、工具栏基类或页框基类，您可以创建基本的表单、工具栏或页框。

通过对现有的类派生子类，您可以重用代码和表单。例如，您可以派生表单基类来创建一个自定义类，使应用程序中的所有表单具有风格相近的外观。

Visual FoxPro 类模型赋予您进一步控制应用程序中对象的能力。不但可以在设计时通过表单设计器控制表单中对象的行为和外观，而且在运行时也具有同样的能力。

在 Visual FoxPro 中，您可以用类设计器可视地创建类或用 DEFINE CLASS 命令以编程方式创建类。


请参阅

类设计器

DEFINE CLASS 命令

表单设计器


 事件

请参阅

在 Visual FoxPro 中，您可以创建真正的事件驱动应用程序而无需 READ 语句和事件处理代码，也不用受浏览窗口的约束。在应用程序中，您不必使用基本的 READ 语句或编写您自己的事件处理程序，因为 Visual FoxPro 已经为您提供了自动处理事件的事件模型。

借助 Visual FoxPro 的事件模型，您可以访问所有标准的 Windows 事件，例如，允许拖放对象的鼠标移动事件。您可以通过属性窗口可视地控制事件，也可以用 Visual FoxPro 语言以编程方式来控制事件。


请参阅

属性窗口

READ 命令

Core 事件


 Rushmore 技术

请参阅

使用 Rushmore 技术您可以显著地提高查询的速度。Rushmore 是一种从表中快速地选取记录集的技术，它可将查询响应时间从数小时或数分钟降低到数秒。

当访问单表时，您可以在任何出现 FOR 子句 的地方应用 Rushmore 技术。


请参阅

FOR 子句

优化 Rushmore 表达式

深入了解 Rushmore 技术


 客户/服务器支持

请参阅

您可以将 Visual FoxPro 作为前端开发健壮的客户／服务器应用程序。Visual FoxPro 不但提供可更新服务器数据的远程视图，而且支持 SQL 传递技术，直接使用服务器的当地语法，可靠安全地提供灵活的客户／服务器解决方案。可给予您一个可靠的基础，在其上生成通用的客户机/服务器解决方案。数据字典、本地视图和远程视图、null 支持、事务处理以及可对任何 ODBC 数据源进行访问等等这些功能都为您开发客户／服务器解决方案带来了方便。


请参阅

设置 ODBC 数据源

SQLEXEC( ) 函数


 数据字典

请参阅

Visual FoxPro 数据库（.DBC 文件）提供了一个数据字典，允许您添加规则、视图、触发器、永久性关系以及与数据源的连接。

在数据库中，您可以定义：

 •	   Visual FoxPro 对应用程序中的任何表都要实施的字段级或记录级规则。

 •	   主索引关键字和候选索引关键字。

 •	   本地视图和远程视图。

 •	   触发器。

 •	   数据库表之间的永久性关系。

 •	   与远程数据源的连接。

 •	   存储过程。

 •	   字段的默认值。

 •	   长表名和长字段名。

另外，通过使用参照完整性生成器定义插入、更新和删除规则来进行每个永久性关系的参照完整性检查。

Visual FoxPro 还支持表中出现 null 值，这极大地提高了兼容性以及与其他数据源的连接能力，例如 Microsoft Access，Visual Basic，和基于 SQL 的数据库服务器。


请参阅

处理 Null 值

参照完整性生成器

使用数据字典功能


 远程和另类视图

请参阅

您可以从远程、本地或多表另类视图中得到数据，而在本地计算机上开发并测试一个客户／服务器应用程序。本地视图使用本地计算机上的表而不是远程服务器上的表，多表视图使用多个表中的相关数据。当从服务器中下载数据时，您可以创建参数化视图减少数据的传输量，然后在 Visual FoxPro 应用程序中更新远程数据。


请参阅

在视图中集成本地数据和远程数据

创建多表视图

创建远程视图


 事务处理

请参阅

您可以设计对数据提供共享访问机制的应用程序。共享访问程序设计涉及到如何在用户之间共享数据和设置访问权限等技术。事务和缓冲机制 — 保守式缓冲或开放式缓冲、记录缓冲或表缓冲 — 意味着程序设计工作量的减少。内置的批处理过程以及为处理更新冲突而提供的精确控制简化了在多用户环境中的数据更新。


请参阅

使用数据工作期

使用事务处理


与其他应用程序共享数据

请参阅

在 Visual FoxPro 中，与其他应用程序共享数据非常容易。例如，通过使用数据透视表向导您可以与 Microsoft Excel 共享 Visual FoxPro 数据，通过使用邮件合并向导您可以与 Word 共享数据。

通过链接和嵌入，您可以将其他应用程序中的对象加入到表或表单中。然后直接编辑它们，而不必离开 Visual FoxPro。


请参阅

创建邮件合并

链接或嵌入数据

邮件合并向导

数据透视表向导


 导入和导出数据

请参阅

您可以使用各种文件格式：文本、工作表和表，在 Visual FoxPro 和许多其他应用程序之间导入和导出数据，因此，向现有表中追加数据变得非常容易。导入向导可以帮助您决定输入到 Visual FoxPro 中的数据的结构。


请参阅

追加数据

导出数据

导入向导

导入数据


 OLE 自动化

请参阅

借助 OLE 自动化，可以通过编程方式控制其他应用程序，从而扩展应用程序的功能。例如，您可以指示 Excel 完成一些统计运算，指示 MS − Graph 画出统计结果的图表，然后，将图表存储到 Visual FoxPro 表的通用字段中，而所有这些工作都可用 Visual FoxPro 代码来实现。


请参阅

访问成组的 OLE 对象

使用 OLE 对象的属性

使用 OLE 对象的方法


 升级早期版本

请参阅

Visual FoxPro 可以保护您使用 FoxPro 的早期版本开发应用程序的投资。在 Visual FoxPro 中，以前的 FoxPro 应用程序不用修改就能运行。您也可以使用 Visual FoxPro 的语言来修改应用程序，但不会涉及到向后兼容性的问题。此外，您还可以将 FoxPro 屏幕、项目和报表转换成 Visual FoxPro 的格式。

如果选择了将 FoxPro 文件转换成新的 Visual FoxPro 格式，您就可以利用 Visual FoxPro 的特有功能。


请参阅

从 FoxPro 2.6 转换文件


Visual FoxPro 专业版中的特征
Visual FoxPro 专业版的功能

Visual FoxPro 专业版除包括标准版 的全部功能外，还包括一些供专业开发人员使用的附加功能。

发布应用程序的功能

发布应用程序变得前所未有的简单。专业版中的工具使您能够：

 •	   可随您的程序一起免费分发一些可执行文件。

 •	   加密敏感数据从而使应用程序更安全。

 •	   使用“安装向导”能简便、快速地创建可发布应用程序的磁盘组。

 •	   使用“文档向导”对代码进行格式编排从而提高可读性和可维护性。

客户/服务器功能

专业版中附加的客户/服务器功能使您能够：

 •	   使用升迁向导快速调整本地 Visual FoxPro 数据以便能在 SQL Server 后端数据库管理系统中运行。

 •	   利用手册和联机文档简单快捷地找到解决方案。

帮助功能

可以通过建立帮助系统来提高应用程序的可用性。Visual FoxPro 专业版提供了创建图形样式和 .DBF 样式帮助的工具。

 •	   使用“帮助编译器”，可以创建图形样式的帮助系统，随应用程序一起发布。

 •	   使用 SHED，热点编辑器，可为图形样式的帮助系统创建超图形。

Visual FoxPro 专业版不但提供了创建和发布 .DBF 样式帮助的有关信息，而且还提供了 .DBF 样式的帮助文件 FOXHELP.DBF。

附加的工具和示例

专业版中的这些工具和示例能够帮助您加快应用程序的开发过程。

 •	   类浏览器可以直观地查看类库或表单中类和对象的层次关系。

 •	   图象编辑器可以为应用程序定制图标。

 •	   可以派生为开发人员提供的 OLE 控制创建其他控制。专业版中的 OLE 控制包括 MSCOMM32.OCX，MSMAPI32.OCX，MSOUTL32.OCX 以及 PICCLP32.OCX。

 •	   可以 C 或 C++ 编写 API 库扩展应用程序的功能。

 •	   能够用位图、图标和光标来提高应用程序的可用性。

 •	   提供的示例和实用程序文件能自动完成日常编程工作。

《专业级功能指南》和“帮助”中的“专业级参考”部分对专业版的功能有详尽说明。


FoxPro 2.6 和 Visual FoxPro 之间的差别

请参阅

Visual FoxPro 与 FoxPro 2.6 的区别在于术语、语言、数据库和界面特性。若要在 VisualVoxPro 中寻找 FoxPro 2.6 的特征，则应检查下列位置。

若要	请参阅
查看术语中的区别	术语差别
查看语言中的区别	语言差别
查看表和数据库的区别	表和数据库的差别
查看接口的区别	界面差别
查看功能的区别	功能差别
有关新特性的详细内容，请参阅 Visual FoxPro 功能概述。


请参阅

功能差别

界面差别

语言差别

Visual FoxPro 功能概述

表和数据库的差别

术语差别


术语差别

请参阅

Visual FoxPro 重新定义了某些 FoxPro 2.6 术语，有关新术语方面的详细内容，请参阅词汇表。

FoxPro 2.6 术语	Visual FoxPro 术语
@ ... GET 字段	文本框控制
空格、空字段，或变量	Null 值
浏览	表格控制
缓冲区	记录和表缓冲以及事务。请参阅缓冲访问数据和使用事务处理。
代码片段	属性、方法和事件代码。请参阅在设计时设置属性和指派方法代码和事件代码。
控制	控制
数据库	数据库
编辑区	编辑框控制
长名	长名。请参阅 Visual FoxPro 命名规则。
对象	对象
弹出	组合框控制
强大工具	可视设计器和工具栏，请参阅使用设计器和使用工具栏。
按钮	命令按钮控制
单选钮	选项按钮控制
屏幕	表单
屏幕图像	图象控制
屏幕集	表单集
表	表
文本	标签控制


请参阅

指派方法代码和事件代码

缓冲访问数据

组合框控制

命令按钮控制

编辑框控制

表单对象

表格控制

处理 null 值

图象控制

标签控制

选项按钮控制

在设计时设置属性

文本框控制

使用设计器

使用工具栏

使用事务处理

Visual FoxPro 命名规则


语言差别

请参阅

尽管 Visual FoxPro 包括了新的命令和 FoxPro 2.6 的向后兼容性命令，但是 FoxPro 2.6 的命令和函数已经在 Visual FoxPro 中得到增强的或更改过的功能。

Visual FoxPro 允许把长名用于窗口、对象、表和变量。除自由表和索引标识中的字段名外，可以使用长达 254 个字符的长名，有关这方面的详细内容，请参阅 Visual FoxPro 命名规则。

FoxPro 2.6 子句、命令、函数或特性	Visual FoxPro 命令、函数、属性事件或方法
@ ... GET DEFAULT	Default 属性
@ ... GET MESSAGE cMessageText	StatusBarText 属性
@ ... SAY FUNCTION, any @ ... GET FUNCTION	Format 属性
@ ... SAY	Left 属性, Top 属性
@ ... SAY PICTURE	图象 控制 和 OLE 绑定型 控制
AFIELDS( )	AFIELDS( ) 提供 11 列的信息
颜色	ColorSource 属性， BackColor and ForeColor 属性
配色方案	ForeColor 属性, BackColor 属性, 和 ColorScheme 属性
时间数据类型	日期 数据类型 和  日期时间 数据类型
DBCONNECT	SQLCONNECT( ) 函数
DBEXEC	SQLEXEC( ) 函数
DEACTIVATE MENU  DEACTIVATE POPUP DEACTIVATE WINDOW	Deactivate 事件
DEFINE WINDOW CLOSE	Closable 属性
DEFINE WINDOW FLOAT	Movable 属性
DEFINE WINDOW HALFHEIGHT	HalfHeightCaption 属性
DEFINE WINDOW ICON FILE	Icon 属性
EMPTY( )。BLANK( ) 来检查不存在的数据	ISNULL( ) 函数检查代表未知或不存在数据的 null 值
激活，废止	Enabled 属性
字体（文本菜单）	FontName 属性
字体大小（字体对话框）	FontSize 属性
字体类型粗体（字体对话框）	FontBold 属性
字体类型斜体（字体对话框）	FontItalic 属性
高度	Height 属性
水平位置（屏幕布局对话框）	Left 属性
MODIFY SCREEN	MODIFY FORM 命令
MODIFY STRUCTURE	表 设计器
MOVE WINDOW CENTER	AutoCenter 属性
数值数据类型	数值 数据类型, 浮点 字段类型, 整数 字段类型, 双精度 字段类型, 和货币 数据类型
图片	InputMask 属性
READ ACTIVATE	ReadActivate 事件
READ CYCLE	ReadCycle 属性
READ DEACTIVATE	ReadDeactivate 事件
READ LOCK	ReadLock 属性
READ NOMOUSE	ReadMouse 属性
READ SAVE	ReadSave 属性
READ SHOW	ReadShow 事件
READ TIMEOUT	ReadTimeout 属性
READ VALID	ReadValid 事件
READ WHEN	ReadWhen 事件
屏幕名称	Name 属性
SET BORDER	BorderStyle 属性
SET NOCPTRANS	请参阅禁止对字符型或备注型字段中的数据进行转换。
SHOW GET, SHOW GETS	Refresh 方法
大小（屏幕布局对话框）	Height, 和 Width 属性
字体样式（字体对话框）	FontBold, FontItalic, FontUnderline 属性。 FontShadow 属性, FontOutline 属性, FontStrikeThru 属性
终止选择（屏幕生成器）	TerminateRead 属性
标题（屏幕生成器）	Caption 属性
Valid （屏幕生成器）	Click 事件, DblClick 事件, LostFocus 事件, Valid 事件
Valid 错误	ErrorMessage 事件
垂直位置（屏幕布局对话框）	Top 属性
时间（屏幕生成器）	GotFocus 事件, When 事件
宽度（屏幕生成器）	Width 属性


请参阅

向后兼容的命令和函数

Visual FoxPro 命名规则

货币数据类型

日期数据类型

日期时间数据类型

双精度字段类型

增强的命令和函数

浮点字段类型

图象控制

新的命令和函数

数值数据类型

OLE 绑定型控制

禁止对字符型或备注型字段中的数据进行转换

READ 命令

表设计器


表和数据库的差别

请参阅

Visual FoxPro 可对表和数据库进行区分。尽管 FoxPro 2.6 的表在 Visual FoxPro 中保留全部功能，但是如果修改 FoxPro 表的表结构，则会当作 Visual FoxPro 表来保存。

FoxPro 2.6 特性功能	Visual FoxPro 特性功能
带有 NOCPTRANS 特征的字符字段	字符 (BINARY) 字段类型. 请参阅数据类型和字段类型。
通用字段大小	4 字节。请参阅 通用字段类型。
备注字段大小	4 字节。请参阅 备注字段类型。
带有 NOCPTRANS 特征的备注字段	备注 (BINARY) 字段类型。请参阅数据类型和字段类型。
数值字段	货币 数据类型,  双精度 字段类型, 浮点 字段类型, 整数 字段类型, 数值 数据类型
通用字段中的 OLE 数据	OLE 绑定型 控制
Visual FoxPro 表可以接受 NULL 值。为了防止因向 FoxPro 2.6 变量中或 Visual FoxPro 控制中存储“空”值而生成错误，必须对变量或数组进行初始化。为了防止用户试图向表中存储“空”值，可以使用下列语句来废止输入 NULL 值的键组合：

ON KEY LABEL CTRL+0 *

Visual FoxPro 屏幕 (.SCX) 、报表 (.FRX) 和标签 (.LBX) 文件的结构是与 FoxPro 2.6 文件的结构不同的。有关在表单、报表和标签设计器中创建的 Visual FoxPro 表文件结构的详细内容，请参阅表文件的表结构。有关对转换和存储的记录文件所做更改的详细内容，请参阅检查转换的 FoxPro 2.6 报表和标签。


请参阅

检查转换的 FoxPro 2.6 报表和标签

货币数据类型

数据类型和字段类型

双精度字段类型

在字段中输入 Null 值

浮点字段类型

表单设计器

通用字段类型

标签设计器

备注字段类型

数值数据类型

OLE 绑定型控制

OLE 容器控制

报表设计器

表文件的表结构


界面差别

请参阅

除了在 Visual FoxPro 界面方面，如键击、菜单和工具的差别外，您也许还想知道对自己的应用程序所需界面，如屏幕、报表和标签所做的更改。

键击差别

Visual FoxPro 对某些 FoxPro 2.6 键组合进行了重定义。

FoxPro 2.6 键组合	Visual FoxPro 键组合	定义或差别
	Ctrl + N	创建一个新文件
Ctrl +N	Ctrl + Y	向浏览窗口中添加一个新记录
Ctrl + O	Ctrl + E	在编辑窗口中执行程序
可以使用 CTRL+O 把 NULL 值 插入到可接受 NULL 值的字段中。如果不想让用户向变量中存储 NULL 值，则可使用下列命令来废止本键组合。

ON KEY LABEL Ctrl+0 *

在 Visual FoxPro 中，使用 TAB 键在控制之间移动焦点，因此不能用它在列表框中的选项之间移动，可用箭头键代替。

菜单差别

Visual FoxPro 只显示具有活动选项的菜单。有些菜单项已移至 Visual FoxPro 中的不同位置。有关 Visual FoxPro 菜单的详细内容，请参阅系统菜单名称。

FoxPro 2.6 菜单命令	Visual FoxPro 菜单命令
1.5 倍行距（文本菜单）	1.5 倍行距 (格式菜单)
追加（记录菜单）	追加记录 (表菜单)
追加来源（数据库菜单）	导入 (文件菜单)
修饰（程序菜单） FoxDoc（程序菜单）	文档向导(工具菜单)  仅用于专业版
浏览（记录菜单）	浏览 (查看菜单)
更改链接（编辑菜单）	链接 (编辑菜单)
复制到（数据库菜单）	导出 (文件菜单)
调试（程序菜单）	调试窗口 (工具菜单)
删除（记录菜单）	删除记录 (表菜单)
两倍行距（文本菜单）	二倍行距 (格式菜单)
放大（文本菜单）	放大字体 (格式菜单)
再次查找（编辑菜单） 替换并再次查找（编辑菜单） 全部替换（编辑菜单）	查找命令 (编辑菜单) 替换命令 (编辑菜单)
字体（文本菜单）	字体 (格式表单)
生成（程序菜单）	Visual FoxPro 只能生成菜单。
转到（记录菜单）	转到记录 (表菜单)
缩进（文本菜单）	缩进 (格式菜单)
定位（记录菜单）	转到记录 (表菜单)
宏（程序菜单）	宏 (工具菜单)
永久性删除（数据库菜单）	彻底删除记录命令 (数据库菜单)
打印机设置（文件菜单）	页面设置 (文件菜单)
恢复（记录菜单）	恢复记录 (表菜单)
缩小（文本菜单）	缩小字体 (格式菜单)
重索引（数据库菜单）	重建索引 (表菜单) 重建索引 (数据库菜单)
替换（记录菜单）	替换字段 (表菜单)
报表（数据库菜单） 标签（数据库菜单）	打印 (文件菜单)
一倍行距（文本菜单）	单倍行距 (格式菜单)
拼写检查（文本菜单）	拼写检查 (工具菜单)
跟踪（程序菜单）	跟踪窗口 (工具菜单)
移去缩进（文本菜单）	删除缩进 (格式菜单)
工具差别

有些 FoxPro 2.6 工具在 Visual FoxPro 中具有了新的名称和功能。有关 Visual FoxPro 设计器的详细内容，请参阅使用设计器。

FoxPro 2.6 工具	Visual FoxPro 工具
目录管理器	项目管理器
项目管理器	项目管理器
屏幕生成器	表单设计器
对齐(对象菜单)	布局工具栏
屏幕生成器工具框	表单控制工具栏
控制对话框和屏幕布局对话框	属性窗口
菜单生成器	菜单设计器
RQBE	查询设计器
报表书写器	报表设计器
标签设计器	标签设计器
查看窗口选项	工具菜单 项
传输器	约定选项对话框
浏览窗口	表格控制
屏幕差别

在 Visual FoxPro 中可运行未经转换的 FoxPro 2.6 屏幕 (.SPR) 文件。Visual FoxPro 表单使用事件、方法中的代码以及设置属性值来取代代码片段。

FoxPro 2.6 屏幕特性	Visual FoxPro 属性、方法或事件
#DEFINE, #INSERT 预处理器语句	新的 .SPR 文件调用的全局包含文件，请参阅检查 .SPR 文件。
#Section 1 启动代码	表单集 Load 事件
#Section 2 启动代码	表单 Load 事件
除过程以外的清理代码	Unload 事件
代码片段	方法代码和事件代码和属性
常量	仅在方法和事件代码中处理，请参阅检查 .SPR 文件.
在 .PRG 文件中层叠 ＠ ... GET控制	ZOrder 方法, 和 ActiveForm 以及 ActiveControl 属性
宏替换	在属性中不做处理，可用变量代替。请参阅检查转换的 FoxPro 2.6 屏幕。
READ	WindowType 属性
有关表单中屏幕代码更改的详细内容，请参阅语言差别或检查转换后的代码.。

报表和标签差别

可以在 Visual FoxPro 中使用未经转换的 FoxPro 2.6 报表和标签，但是允许为 Visual FoxPro 报表和标签设置并控制数据环境，并且通过报表变量来控制报表内容。

FoxPro 2.6 报表或标签特性	Visual FoxPro 报表或标签特性
备注字段大小	4字节，请参阅备注字段类型。
REPORT TO FILE	REPORT TO FILE ASCII 创建简单的文本文件
REPORT ENVIRONMENT LABEL ENVIRONMENT	数据环境 (查看菜单)  请参阅 设置报表数据源和控制报表的数据源。
有关 Visual FoxPro 报表和标签的详细内容，请参阅报表设计器。


请参阅

1.5 倍行距 (格式菜单)

ActiveControl 属性

ActiveForm 属性

追加记录 (表菜单)

指派方法代码和事件代码

浏览 (查看菜单)

控制报表的数据源

数据环境 (查看菜单)

调试窗口 (工具菜单)

删除记录 (表菜单)

两倍行距 (格式菜单)

放大字体 (格式菜单)

查找命令 (编辑菜单)

字体 (格式表单)

表单控制工具栏

表单设计器

转到记录对话框

表格控制

缩进 (格式菜单)

标签设计器

布局工具栏

Load 事件

宏 (工具菜单)

备注字段类型

菜单设计器

MOUSE 命令

页面设置 (文件菜单)

项目管理器

属性窗口

查询设计器

恢复记录 (表菜单)

缩小字体 (格式菜单)

删除缩进 (格式菜单)

替换记录 (表菜单)

替换命令 (编辑菜单)

报表设计器

REPORT 命令

报表向导

在设计时设置属性

设置报表数据源

单倍行距 (格式菜单)

拼写检查 (工具菜单)

跟踪窗口 (工具菜单)

Unload 事件

使用生成器

使用设计器

使用报表带区事件

使用向导

查看菜单

ZOrder 方法


功能差别

请参阅

有些 FoxPro 2.6 的功能与 Visual FoxPro 不同。

特性	FoxPro 2.6 行为	Visual FoxPro 行为
CLEAR ALL	释放除除系统内存变量以外的任何东西。	释放除当前正使用的对象和系统内存变量外的任何东西。
创建层叠控制的连续＠ ... GET命令	从上（第一个定义的）到下（最后一个定义的）地层叠控制。	从下到上地层叠控制，要更改，请参阅检查转换后的代码。
@ ... GET 控制	只能接收相关字段大小的数据。	接受控制掩码大小的数据。可使用输入掩码把输入限制到该字段大小。


请参阅

检查转换后的代码

CLEAR 命令

界面差别

语言差别

Visual FoxPro 功能概述

表和数据库的差别

术语差别


从 FoxPro 2.6 转换文件

请参阅

如果想在 Visual FoxPro 中使用 FoxPro 2.6 的项目或文件，您可以有多种选择。可以在 Visual FoxPro 中直接运行 FoxPro 以前版本的很多文件，或者必要时把您的文件转换成新的格式。或者，重新检查您的文件和应用程序，并在其中使用 Visual FoxPro 面向对象的程序设计技术。

若要	请参阅
直接运行 FoxPro 以前版本的文件	运行 FoxPro 2.6 文件
将 FoxPro 2.6 文件转换为 Visual FoxPro 文件	转换 FoxPro 2.6 文件
重新设计为 Visual FoxPro 的文件	重新设计转换后的 FoxPro 2.6 文件


请参阅

转换选项对话框

转换 FoxPro 2.6 文件

重新设计转换后的 FoxPro 2.6 文件

运行 FoxPro 2.6 文件


运行 FoxPro 2.6 文件

请参阅

您可以运行已生成的 FoxPro 2.6 的文件，并且在 Visual FoxPro 中直接使用报表、查询和表，而不需要转换它们。

� 若要在 Visual FoxPro 中运行已生成的 FoxPro 2.6 文件

 •	   对于 FoxPro 2.6 的任何 .SPR，.QPR 或 .MPR 文件使用 DO 命令。

也可以在 Visual FoxPro 中打开某些 FoxPro 2.6 文件，而不需要转换它们：

 •	   在查询设计器中打开 FoxPro 2.6 查询 (.QPR 文件)，不需要转换。

 •	   在菜单设计器中打开 FoxPro 2.6 菜单 (.MNX 文件)，不需要转换。

 •	   在表设计器中打开 FoxPro 2.6 表 (.DBF 文件)，不需要转换。

只有当您添加新的数据类型，在某字段中允许使用 NULL 值，或向数据库中添加表时，Visual FoxPro 才转换表。有关详细内容，请参阅检查转换的FoxPro 2.6 表。


请参阅

检查转换的 FoxPro 2.6 表

转换 FoxPro 2.6 文件

DO 命令

菜单设计器

查询设计器

表设计器


转换 FoxPro 2.6 文件

请参阅

您可以将 FoxPro 2.6 文件转换为 Visual FoxPro 格式。转换可以使用可视的设计器，并获得 Visual FoxPro 事件模式的新功能。如果您决定将 FoxPro 2.6 文件转换为 Visual FoxPro 格式，只需在 Visual FoxPro 中打开它们。

� 若要转换 FoxPro 2.6 文件

 •	   在“文件”菜单中，选择“打开”命令，选定 FoxPro 2.6 文件，然后选择“确定”按钮。

 — 或 者 —

 •	   使用 MODIFY 命令，比如 MODIFY SCREEN 或 MODIFY FORM。

显示转换选项对话框。

您可以转换项目、屏幕、报表和标签；您也可以将基本的 READ 语句转换为 Visual FoxPro 事件模式。如果在屏幕集中有 FoxPro 2.6 屏幕，请转换项目，而不要转换单个的屏幕，这样可以保留正确的 READ 兼容模式。

若要	请参阅
转换项目	转换 FoxPro 2.6 项目
转换屏幕	转换 FoxPro 2.6 屏幕
转换报表	转换 FoxPro 2.6 报表
转换标签	转换 FoxPro 2.6 标签
将基础 READ 语句转移到 Visual FoxPro	将基础 READ 语句转移到 Visual FoxPro


请参阅

检查转换的 FoxPro 2.6 屏幕

转换选项对话框

转换 FoxPro 2.6 标签

转换 FoxPro 2.6 项目

转换 FoxPro 2.6 报表

转换 FoxPro 2.6 屏幕

MODIFY FORM 命令

MODIFY SCREEN 命令

将基础 READ 语句转移到 Visual FoxPro

打开 (文件菜单)

Visual FoxPro 功能概述

重新设计转换后的 FoxPro 2.6 文件


转换 FoxPro 2.6 项目

请参阅

若要使用 FoxPro 2.6 项目（.PJX 文件）和 FoxPro 目录（.FPC 文件），您必须将它们转换成 Visual FoxPro 项目。转换之后，您就可以在“项目管理器”和可视设计器中访问它们，并且添加 Visual FoxPro 事件模型功能。

� 若要转换 FoxPro 2.6 项目或目录

 •	   在“文件”菜单中，选择“打开”命令，选定您想转换的项目，然后选择“确定”按钮。

  或者

 •	   使用 MODIFY PROJECT 命令。

显示转换选项对话框。

如果您选择功能转换，转换将进行如下处理：

 •	   将原 .PJX 目录下的原项目文件复制到新的名为 OLDx 的子目录中，当转换更多项目时自动增加 x。

 •	   将项目和所有相关的屏幕、报表和标签转换为 Visual FoxPro 格式。

 •	   将代码片段移入合适的事件和方法代码中。

 •	   设置表单和控制属性。

 •	   为每个转换的屏幕创建一个扩展名为 .SPR 的文件。这个文件与 FoxPro 2.6 的 .SPR 文件不同。有关详细内容，请参阅检查 .SPR 文件.。

 •	   在下列位置放置文件：

FoxPro 2.6 文件	项目管理器选项卡
.PRG 和 .SPR 文件	“代码”选项卡
.SCX 和 .SCT 文件	“文档”选项卡
.FRX 和 .LBX 文件	“文档”选项卡
转换项目之后，Visual FoxPro 自动打开项目管理器，供您访问所有的项目文件。若想确认项目已正确转换，请参阅检查转换的 FoxPro 2.6 项目。


请参阅

检查转换的 FoxPro 2.6 项目

检查 .SPR 文件

转换选项对话框

MODIFY PROJECT 命令

项目管理器


转换 FoxPro 2.6 屏幕

请参阅

您可以将 FoxPro 2.6 屏幕（.SCX 文件）转换成 Visual FoxPro 表单，这样可以使文件在表单设计器中可用，并且添加 Visual FoxPro 事件模型功能。转换后的屏幕初始模式是与 READ 相兼容的；有关详细内容请参阅 READ 兼容性结构概述。

� 若要转换 FoxPro 2.6 屏幕(.SCX) 文件

 •	   在“文件”菜单中选择“打开”命令，选择“表单”，选定到想要转换的屏幕。

 — 或 者 —

 •	   使用 MODIFY FORM 命令。

显示转换选项对话框。

如果您选择功能转换，则转换过程为：

 •	   将屏幕 (.SCX 和 .SCT 文件)转换为 Visual FoxPro 表单。原屏幕文件被赋予 .S2X 和 .S2T 扩展名。屏幕集转换为表单集；转换后的表单置于表单集中。

 •	   将表单集的 WindowType 属性设置为 2（读）或 3（读模式），以保持向后兼容性。如果选择“可视转换”，表单集的 WindowType 属性设置为 0（无模式）或 1（模式），这是 Visual FoxPro 设置，为了与屏幕的模式设置相匹配。

 •	   将代码片段放入合适的事件和方法代码中。有关 FoxPro 2.6 屏幕属性与 Visual FoxPro 属性、事件和方法映射的详细内容，请参阅 FoxPro 2.6 和 Visual FoxPro 之间的差别。

 •	   创建一个新的 .SPR 文件，以及一个可选的包含文件。虽然 Visual FoxPro 的 .SCX 文件可以直接运行，.SPR 文件仍然为需要它的应用程序组件提供向后兼容性，它包含：

    •	   原屏幕清除代码片段中的任何参数语句，支持函数和过程。如果存在，任何支持函数都可用于表单集和表单中所有的事件和方法。

    •	   为表单指定全局包含文件的可选语句。有关全局包含文件的详细内容，请参阅检查 .SPR 文件。

    •	   一个 DO FORM 命令，它启动 .SCX 文件。

然后就可以使用表单设计器，查看转换后的屏幕，输入新的属性、方法和事件值，或者从 .PRG 文件中复制代码。若想确认转换正确，请参阅检查转换的 FoxPro 2.6 屏幕。


请参阅

检查 .SPR 文件

检查转换的 FoxPro 2.6 屏幕

转换选项对话框

FoxPro 2.6 和 Visual FoxPro 之间的差别

DO FORM 命令

表单设计器

MODIFY FORM 命令

READ 兼容性结构概述

WindowType 属性


转换 FoxPro 2.6 报表

请参阅

若想在“报表设计器”中访问报表文件，并且添加 Visual FoxPro 功能，必须将 FoxPro 2.6 报表（.FRX 文件）转换成 Visual FoxPro 报表。

� 若要转换 FoxPro 2.6 报表

 •	   在“文件”菜单中选择“打开”命令，选择“报表”，并选定想要转换的报表文件。

 — 或者 —

 •	   使用 MODIFY REPORT 命令。

显示转换选项对话框。

转换过程如下：

 •	   向 .FRX 文件中添加一个用户字段。

 •	   把任何 10 字节备注字段变成 4 字节。

 •	   添加支持报表数据环境的记录。FoxPro 2.6 环境记录转换为数据环境记录。

 •	   设置 AutoOpenTables 和 AutoCloseTables 属性，设置新报表的数据环境 Destroy 事件，这是为了提供与 FoxPro 2.6 REPORT 命令 ENVIRONMENT 子句的向后兼容性。

如果创建 FoxPro 2.6 报表时没有使用 ENVIRONMENT 子句，则转换后报表的 AutoOpenTables 和 AutoCloseTables 属性设置为“假” (.F.)。

如果创建 FoxPro 2.6 报表时使用 ENVIRONMENT 子句，则转换后报表的 AutoOpenTables 和 AutoCloseTables 属性设置为“真” (.T.)。转换后报表 Destroy 事件中包含如下代码：

This.OpenTables	&&  打开所有的表
This.Init	&& 运行转换后的报表数据环境
&& 的 Init 代码

转换之后，Visual FoxPro 打开报表设计器，供您向转换后的报表中添加 Visual FoxPro 功能。要确保转换正确，请参阅检查转换的 FoxPro 2.6 报表和标签。


请参阅

AutoCloseTables 属性

AutoOpenTables 属性

检查转换的 FoxPro 2.6 报表和标签

转换选项对话框

备注字段类型

MODIFY REPORT 命令

报表设计器

REPORT 命令


转换 FoxPro 2.6 标签

请参阅

若想在“报表设计器”中使用标签文件，并且添加 Visual FoxPro 功能，必须将 FoxPro 2.6 标签（.LBX 文件）转换成 Visual FoxPro 格式。

� 若要转换 FoxPro 2.6 标签

 •	   在“文件”菜单中选择“打开”命令，选择“标签”，并选定想要转换的标签文件。

 — 或 者 —

 •	   使用 MODIFY LABEL 命令。

显示转换选项对话框。

转换过程如下：

 •	   向 .LBX 文件中添加用户字段。

 •	   将任何 10 字节备注字段转变成 4 字节。

 •	   添加支持标签数据环境的记录。FoxPro 2.6 环境记录转换为数据环境记录。

 •	   设置 AutoOpenTables 和 AutoCloseTables 属性，设置新标签的数据环境 Destroy 事件，这是为了提供与 FoxPro 2.6 LABEL 命令 ENVIRONMENT 子句的向后兼容性。

如果创建 FoxPro 2.6 标签时没有使用 ENVIRONMENT 子句，则转换后标签的 AutoOpenTables 和 AutoCloseTables 属性设置为“假” (.F.)。

如果创建 FoxPro 2.6 标签时使用 ENVIRONMENT 子句，则转换后标签的 AutoOpenTables 和 AutoCloseTables 属性设置为“真” (.T.)。转换后标签 Destroy 事件中包含如下代码：

This.OpenTables	&& 打开所有的表
This.Init	&& 运行转换后的报表数据环境
&&的 Init 代码

转换标签之后，Visual FoxPro 打开标签设计器，供您向转换的标签中添加 Visual FoxPro 功能。若想确保转换正确，请参阅检查转换的 FoxPro 2.6 报表和标签。


请参阅

AutoCloseTables 属性

AutoOpenTables 属性

检查转换的 FoxPro 2.6 报表和标签

转换选项对话框

标签设计器

备注字段类型


将基础 READ 语句转移到 Visual FoxPro

请参阅

在 FoxPro 2.6 中，基础 READ 可不使用事件循环而模仿事件驱动程序。在 Visual FoxPro 中，通过转换基础 READ 语句可以利用本地事件循环。

� 若要将基础 READ 语句移到 Visual FoxPro

1.	用 READ EVENTS 命令替换主程序中任何基础 READ。例如，在运行您主表单或表单集的程序中包含 READ EVENTS 命令。

2.	在结束程序的表单、菜单或程序事件中放置一个 CLEAR EVENTS 命令。例如，给“退出”菜单项指定 CLEAR EVENTS 命令。

另外，检查转换后屏幕表单集 WindowType 属性的设置。在 FoxPro 2.6 中，可以用 READ 和 READ MODAL 语句调整屏幕。当转换文件时，这些语句转换为 WindowType 属性。为提供向后兼容性，这个属性根据原屏幕的 READ 模式，自动设置为 2 或 3。若要在转换基础 READ 语句之后，立即启用完全地事件模型功能，需要改变屏幕的 READ 兼容模式，移去多余的页和页框，并更改表单方法。有关详细内容，请参阅 READ 兼容性结构概述和检查转换的 FoxPro 2.6 屏幕。


请参阅

检查转换的 FoxPro 2.6 屏幕

CLEAR 命令

FoxPro 2.6 和 Visual FoxPro 之间的差别

READ 兼容性结构概述

READ 命令

WindowType 属性


重新设计转换后的 FoxPro 2.6 文件

请参阅

若想充分利用 Visual FoxPro 特性，您可以进一步修改转换后的文件。若想重新设计您的应用程序，重新考虑下列特性：

 •	   新命令和函数、基类、属性、事件和方法。

 •	   增强的多用户支持。

 •	   更好的连接。

当您知道想要改变哪些特性时，请参阅 FoxPro 2.6 和 Visual FoxPro 之间的差别，以了解 FoxPro 2.6 特性是如何与 Visual FoxPro 特性映射的。


请参阅

检查转换的 FoxPro 2.6 项目

创建数据库

创建触发器

FoxPro 2.6 和 Visual FoxPro 之间的差别

增强的命令和函数

新的命令和函数

使用数据字典功能

使用数据工作期

使用 Null 值

使用事务处理


检查转换的 FoxPro 2.6 项目

请参阅

在 FoxPro 项目转换成 Visual FoxPro 项目之后，必须检查项目文件以便能提高其性能，从项目管理器中，可以检查下列各项：

 •	   检查转换的屏幕文件.

 •	   检查转换的报表和标签文件.

 •	   检查转换的表.

 •	   检查转换文件后的代码.


请参阅

检查转换后的代码

检查转换的 FoxPro 2.6 报表和标签

检查转换的 FoxPro 2.6 屏幕

检查转换的 FoxPro 2.6 表


检查转换的 FoxPro 2.6 屏幕

请参阅

在转换了 FoxPro 2.6 屏幕 (.SCX) 文件之后，应该检查下列条件：

 •	   具有 MODAL 和 DEACTIVATE 子句的 READ 语句。Visual FoxPro 可以处理这两个子句。

 •	   冲突的控制、对象、表单和变量名。

 •	   超过 10 个常用字符的长变量名。

有关详细内容，请参阅 Visual FoxPro 命名规则或保留字。

 •	   形状下面的控制。在 FoxPro 2.6 中，形状的位置对其它控制无效。在转换后的 FoxPro 2.6 屏幕中，形状位于全部控制之后，而不可见按钮总是在全部控制的上方。

 •	   UDF 和可能由新的 Visual FoxPro 命令或功能代替的其它代码。有关详细内容，请参阅检查转换后的代码.。

 •	   宏替代，替换属性窗口中带有变量分配符 (&) 的宏。例如，在包含有  &lcprompt 的 FoxPro2.6 屏幕生成器中的按钮提示要转换成 ="&1cprompt"，且必须改变成 =1cprompt。

Visual FoxPro 根据转换期间创建的 .SPR 文件来运行转换的屏幕。检查这个 .SPR 文件以及任何程序中的代码，或者检查可能调用转换屏幕的其它屏幕，以决定是否能删除新的 .SPR 文件并从 .SCX 文件直接运行。有关详细内容，请参阅检查 .SPR 文件和将转换后的屏幕更改成 Visual FoxPro 表单。要理解 Visual FoxPro 是怎样支持 READ 兼容方式下的转换屏幕，请参阅 READ 兼容性结构概述。


请参阅

将转换后的屏幕更改成 Visual FoxPro 表单

检查 .SPR 文件

FoxPro 2.6 和 Visual FoxPro 之间的差别

READ 兼容性结构概述

属性窗口

保留字

Visual FoxPro 命名规则


将转换屏幕更改为 Visual FoxPro 表单

请参阅

转换后的 FoxPro 2.6 屏幕在由 WindowType 属性提供的兼容方式中运行。要理解在 READ 兼容方式下 Visual FoxPro 体系结构是怎样支持屏幕的，请参阅 READ 兼容性结构概述。

下表讲述了映象在转换屏幕中的基本特征。

FoxPro 2.6 屏幕特征	Visual FoxPro 特征
屏幕集	表单集
屏幕	包含在表单集中的表单
READ	包含在页框中的页面
READ 屏幕方式	WindowType 属性 = 2
READ MODAL 屏幕方式	WindowType  属性= 3
可以更改转换的屏幕以便能够从 .SCX 文件中直接运行。为了取消对转换期间创建的SPR文件的需要，必须更改调用转换屏幕的任何文件，也必须将代码从 .SPR 文件移至转换屏幕 (.SCX 文件) 中。

可以把转换的 FoxPro 2.6 屏幕更改成 Visual FoxPro 事件方式。

� 若要把转换屏幕更改成 Visual FoxPro 表单

1.	把 WindowType 属性从 2（读取）更改为 0（非方式），或从 3（读取模式）更改成 1（模式）。

附注

当进行此更改后，将不能再利用 READ 兼容性属性和事件，且不能改回 WindowType 属性的设置。

2.	如果有一个表单，则可把表单集事件代码移到匹配或适当的表单事件中，并删除表单集。

3.	可以把代码从 READ 兼容性事件移到现在可利用的表单事件和方法中，并考虑事件触发顺序。有关事件事件触发顺序的详细内容，请参阅 Visual FoxPro 事件顺序。

读取兼容性事件	表单事件和方法
ReadActivate 事件 ReadDeactivate 事件 ReadShow 事件 ReadValid 事件 ReadWhen 事件	Activate 事件 Load 事件 Show 方法 Deactivate 事件
4.	删除页面和页框控制，它们是外来的。

5.	处理表单的 Init 事件中的参数，而不是屏幕的 Load 事件中的参数。

6.	用计算值替换映象为属性设置值的预处理器常数。

在 Visual FoxPro 中，属性设置值不能预处理。它们必须包含实际的值或能在运行期间进行计算的表达式。方法和事件代码可以有预处理，且其中定义的常数能够正确计算。

7.	通过使用 PUBLIC，PRIVATE或 LOCAL 命令或通过向表单中添加属性，调整事件或方法中的变量的作用范围，默认为私有。

有关范围的详细内容，请参阅数据容器的作用域。

8.	要直接运行表单，可把代码从生成的 .SPR 文件中移至表单中。


请参阅

表单对象

表单集对象

READ 兼容性结构概述

Page 事件

页框控制

READ 命令

READ 兼容性属性和事件

删除页面和页框

Visual FoxPro 事件顺序

WindowType 属性


READ 兼容性属性与事件

请参阅

表或表单集的 READ 兼容性由它的 WindowType 属性控制。一个表单集的 WindowType 属性覆盖了其中所有表单的 WindowType 设置值。初始时，转换的屏幕的 WindowType 属性值为 2（读取）或 3（读取模式），同时还具有相应的 Read 属性和事件，如下表所列。

转换的表单的 WindowType 属性值为 2（读取）或 3（读取模式）的情况下，为了提供向后兼容性，表单提供下列属性和事件。

FoxPro 2.6 特征	Visual FoxPro 属性或事件
#SECTION 1 Setup Code	表单集 Load 事件
#SECTION 2 Setup Code	表单 Load 事件
READ ACTIVATE	表单集的 ReadActivate 事件
READ CYCLE	表单集的 ReadCycle 属性
READ DEACTIVATE	表单集的 ReadDeactivate 事件
READ LOCK	表单集的 ReadLock 属性
READ NOMOUSE	表单集的 ReadMouse 属性
READ SAVE	表单集的 ReadSave 属性
READ SHOW	表单集的 ReadShow 事件
READ TIMEOUT	表单集的 ReadTimeout 属性
READ VALID	表单集的 ReadValid 事件
READ WHEN	表单集的 ReadWhen 事件


请参阅

表单对象

表单集对象

Load 事件

LOCAL 命令

PRIVATE 命令

PUBLIC 命令

READ 命令

ReadActivate事件

ReadDeactivate事件

ReadShow 事件

ReadValid　事件

ReadWhen 事件

删除页面和页框

WindowType 属性


删除页和页框

请参阅

转换的表单集和表单对应每一个原始屏幕的读取层，总有至少包含一个页面的页框。除非它提供特定的功能，否则可以从表单集中每个表单中删除页和页框。

� 若要从表单集中删除一页。

1.	从属性窗口中，选择要删除的页。

2.	选择该页上的全部控制，并从“编辑”菜单中选择“剪切”。

3.	对当前的页框，按下 DELETE 以删除页框。

4.	对当前页，按下 DELETE 以删除页。

5.	对当前表单，从“编辑”菜单中选择“粘贴”来恢复控制。

6.	在保存更改的表单之前，把 WindowType 属性更改为 0 或 1。

当删除最后一页时，该页框也被删除。

附注

当删除页和页框时，必须把WindowType属性更改为 0 或 1。


请参阅

将转换后的屏幕更改成 Visual FoxPro 表单

FoxPro 2.6 和 Visual FoxPro 之间的差别

Page 事件

PageFrame 控制

属性窗口

ReadActivate事件

ReadDeactivate事件

ReadShow 事件

ReadValid　事件

ReadWhen 事件

WindowType 属性


检查 .SPR 文件

请参阅

FoxPro 2.6 屏幕 (.SCX) 文件的转换过程将创建一个新 (.SPR) 文件。如果原 .SCX 包含有预处理命令，那么会同时创建一个全局的包含文件。如果其它应用程序组件需要一个 .SPR 文件，新文件使 Visual FoxPro 能够处理 FoxPro 2.6 预处理命令，并运行转换的屏幕。

如果原 .SCX 包含有预处理的命令，则转换将处理：

 •	   创建一个全局包含文件，它包含在屏幕上发现的全部 #DEFINE 语句。

 •	   在新的 .SPR 文件中放入一个语句来引用包含文件。

 •	   把代表 FoxPro 2.6 的 #INSERT 预处理命令的代码直接放到表单中。

有关特定代码段位置的详细内容，请参阅 FoxPro 2.6 和 Visual FoxPro 之间的差别。


请参阅

#DEFINE ... #UNDEF 预处理器命令

FoxPro 2.6 和 Visual FoxPro 之间的差别

EXTERNAL 命令

FormSet 对象


READ 兼容性体系结构概述

请参阅

Visual FoxPro 事件模式的一些特征可用来提供与转换的 FoxPro 2.6 屏幕中READ 语句的向后兼容性，要了解 Visual FoxPro 特征是怎样提供 READ 兼容性的，请参阅以下标题。

 •	   WindowType 属性

 •	   TerminateRead 属性

 •	   Internal 属性

 •	   表单集及其属性和事件

 •	   页框和页面

 •	   事件活动顺序

 •	   Load 事件中的变量作用域

 •	   表单集接收的参数


请参阅

检查转换的 FoxPro 2.6 屏幕

转换 FoxPro 2.6 文件


WindowType 属性

请参阅

表单集的 WindowType 属性确定了转换表单的 READ 兼容性方式。如果表单处于 READ 兼容性方式下，WindowType 属性是 2（读取）或 3（读取模型）。


请参阅

将转换后的屏幕更改成 Visual FoxPro 表单

READ 命令

WindowType 属性


终止读取属性

请参阅

TerminateRead 属性支持 FoxPro 2.6 控制的“选择终止 READ”选项。


请参阅

TerminateRead 属性


内部属性

在 Visual FoxPro 的 .SCX 文件的属性字段中，Release Erase，ReleaseWindows 和 ErasePage 属性以下列方式支持 FoxPro 2.6 READ 兼容性。

属性	支持 READ 兼容性
ReleaseErase	决定 READ 终止以后，控制是否仍在表单上。
ReleaseWindows	指定在 FoxPro2.6 生成或项目管理器对话框中是否激活 Releasse Windows。
ErasePage	当设置为“假”(.F.)时，从其它活动的 READ 层次上指定对象仍然可见。


表单集及其属性和事件

请参阅

Visual FoxPro 屏幕转换总可创建一个表单来包含转换的 FoxPro 2.6 屏幕集或屏幕。

FoxPro 2.6 READ 兼容性方式包括支持对 FoxPro 2.6 行为的向后兼容的属性和事件。下表指出了对应于 FoxPro 2.6 的 Visual FoxPro 的属性和事件。除了不受 WindowType 属性设置影响的表单集 Load 、 Unload 事件和表单 load 事件外，这些属性和事件只有在 WindowType属性设定为 2 或 3 时才有效。

Visual FoxPro 表单集属性	FoxPro 2.6 对应
ReadCycle	READ CYCLE
ReadLock	READ LOCK
ReadMouse	READ NOMOUSE
ReadSave	READ SAVE
ReadTimeout	READ TIMEOUT
Visual FoxPro 表单集事件	FoxPro 2.6 对应
Load	#SECTION 1 Setup Code
ReadActivate	READ ACTIVATE
ReadDeactivate	READ DEACTIVATE
ReadShow	READ SHOW
ReadValid	READ VALID
ReadWhen	READ WHEN
Unload	Cleanup Code
Visual FoxPro 表单事件	FoxPro 2.6 对应
Load	#SECTION 2 Setup Code


请参阅

将转换后的屏幕更改成 Visual FoxPro 表单

Load 事件

READ 兼容性属性和事件

ReadActivate事件

ReadCycle属性

ReadDeactivate事件

ReadLock属性

ReadMouse属性

ReadSave属性

ReadShow 事件

ReadTimeout 属性

ReadValid 事件

ReadWhen 事件

Unload 事件


页框和页面

请参阅

在 FoxPro2.6 READ 兼容性方式中，对原屏幕的每一 READ 层来说，每个表单集至少包括一个页框，其中的每一页面的对应一个 READ 层。每一页面都包含加入到该 READ 层中的全部控制。一旦 READ 终止，Visual FoxPro 将消除所有加入的控制和页。

如果不存在一个页框，则 Visual FoxPro 创建一个页框和页，以便能够处理 FoxPro 2.6 程序中任何 @ ... GET 命令中的 READ 层。


请参阅

Page（页面）对象

页框控制

删除页面和页框


事件触发顺序

请参阅

下表列出了当表单处于 READ 兼容性方式下，且表单集的 WindowType 属性设置为 2（读取）或 3（读取模式）时， Visual FoxPro 的事件触发顺序。数据环境的 AutoOpenTables 属性假定为“假”(.F.)。有关事件正常顺序的详细内容，请参阅 Visual FoxPro 事件顺序。

对象	事件
表单集	Load
数据环境	BeforeOpenTables
表单	Load
数据环境临时表	Init
数据环境	Init
对象1	Init
表单集	ReadWhen
表单集	ReadActivate
表单集	ReadShow
表单集	Show
表单	Show
表单集	Activate
表单	Activate
对象 2	When
表单	GotFocus
对象3	GotFocus
对象4	Valid
1 对每个对象，从最里面的对象到最外面的容器。 2 Tab 键次序中的第一对象 3 如果 When 事件返回为“真”(.T.) 4 当对象失去焦点时
当关闭表单时，READ 兼容性事件的顺序是：

对象	事件
表单	QueryUnload
表单集	ReadValid
对象1	Destroy
表单	Unload
表单集	Unload
数据环境	AfterCloseTables
数据环境	Destroy
数据环境临时表	Destroy
1 对每个对象，从最外面的容器到最里面的对象。


请参阅

Activate 事件

AfterCloseTables 事件

AutoOpenTables 属性

BeforeOpenTables 事件

Destroy 事件

GotFocus 事件

Init 事件

Load 事件

QueryUnload 事件

ReadActivate事件

ReadShow 事件

ReadValid　事件

ReadWhen 事件

Show 方法

Unload 事件

Valid 事件

Visual FoxPro 事件顺序

When 事件


 Load 事件中的变量范围

请参阅

在 FoxPro 2.6 READ 兼容性方式中，在 WindowType 属性为 2 或 3 的表单集的 Load 事件中创建的变量适用于表单集，并且对整个表单集及其表单和控制都是可见的。通过使用 PRIVATE，PUBLIC 或 LOCAL 命令可以控制在其它表单集事件或方法中创建的变量的可见性。


请参阅

将转换后的屏幕更改成 Visual FoxPro 表单

LOCAL 命令

PRIVATE 命令

PUBLIC 命令


表单集接收的参数

请参阅

WindowType 属性决定了 Visual FoxPro 表单集是怎样处理参数的。

WindowType 属性设置	将参数传送至
0 或 1	表单集的 Init 事件
2 或 3	表单集的 Load 事件


请参阅

将转换后的屏幕更改成 Visual FoxPro 表单

Init 事件

Load 事件


检查转换的 FoxPro 2.6 报表和标签

请参阅

将 FoxPro 2.6 报表或标签转变为 Visual FoxPro 文件会改变 .FRX 或 .LBX 文件的表结构，并且，为了支持报表或标签的数据环境，会添加记录。

一旦把一个报表转换成 Visual FoxPro 格式，就可向其添加功能了。有关 FoxPro 2.6 报表和 Visual FoxPro 报表之间差别的详细内容，请参阅 FoxPro 2.6 和 Visual FoxPro 之间的差别。有关创建或修改报表的详细内容，请参阅报表设计器。


请参阅

AutoCloseTables 属性

AutoOpenTables 属性

FoxPro 2.6 和 Visual FoxPro 之间的差别

REPORT 命令

报表设计器


检查转换的 FoxPro 2.6 表

请参阅

Visual FoxPro 不更改 FoxPro 表的结构，除非把该表添加到数据库中或添加一个新的数据类型或者允许接受 Null 值，一旦通过添加新的字段类型如日期时间或通过允许字段中存在 NULL 值来更改表的结构，则 Visual FoxPro 将更改表文件结构，从而使 FoxPro2.6 不能识别该文件。

可以使用带 Type 子句和 Fox 2X 关键字的 COPY TO 命令从一个 Visual FoxPro 表中创建一个 FoxPro 2.6 表，如同下面的实例：

USE vfptable.dbf	&& a Visual FoxPro 表

COPY TO fp26tabl.dbf TYPE FOX2X	&& 创建 FoxPro 2.6 表

要从一个Visual FoxPro表中复制一个 FoxPro 2.6 表结构，可使用 COPY TO 和 NEXT 子句，如同下面的实例。

COPY TO fp26tabl.dbf NEXT 0 TYPE FOX2X	&& 创建一个空的

&& FoxPro 2.6 表

Visual FoxPro 把允许 NULL 值的字段中的全部 null 值更改成 0 或空，并创建一个 FoxPro 2.6 能识别的结构。有关 Visual FoxPro 表结构的详细内容，请参阅表文件的表结构。


请参阅

COPY TO 命令

表文件的表结构


检查转换后的代码

请参阅

当转换项目或文件时，要检查 .PRG 文件中能够修改的代码，以充分利用 Visual FoxPro 事件模式。可以把代码或过程重新定位到容器或对象中的事件和方式中，也可使用新的 Visual FoxPro 命令或函数。

从项目管理器中，可以在全部项目文件检查下列情形：

 •	   检查 UDF 或能复制新的 Visual FoxPro 函数的其它代码，有关这方面的详细内容，请参阅 FoxPro 2.6 和 Visual FoxPro 之间的差别或新的命令和函数。

 •	   检查 .PRG 文件中可创建层叠控制的 @ ... GET 代码。必须对 @ ... GET 代码进行重新排序并更改控制的 ZOrder 方法，以维持 FoxProw 2.6 的功能。

提示

要访问 .PRG 文件中的控制属性，可使用 _SCREEN 系统内存变量，以及 ActiveForm 和 ActiveControl 属性。

 •	   使用新的保留字来寻找符号名冲突。

 •	   检查冲突的可配置键组合和定位键，有关这方面的详细内容，请参阅界面差别中的键击区别。

 •	   把表单或表单集中的 CLEAR READ 命令更改成 RELEASE THISFORMSET 或 RELEASE THISFORM ，或者 CLEAR EVENTS。

 •	   把 SHOW GET 和 SHOW GETS 语句更改成 object.Refresh 语句。

 •	   把列表和组合框中的 SHOW GET 和 SHOW GETS 语句更改成 object.Requery 语句。

 •	   使用 READ EVENTS 和 CLEAR EVENTS 命令来移动基本 READ 到 Visual FoxPro 事件模式中。


请参阅

_SCREEN 系统内存变量

ActiveControl 属性

ActiveForm 属性

CLEAR 命令

FoxPro 2.6 和 Visual FoxPro 之间的差别

界面差别

将基础 READ 语句转移到 Visual FoxPro

新的命令和函数

项目管理器窗口

READ 命令

Refresh 方法

RELEASE 命令

保留字

SHOW GET 命令

SHOW GETS 命令


从 dBASE 升级

请参阅

在 Visual FoxPro 中使用 dBASE 程序或文件，可以采用几种不同方法：

若要	请参阅
在 Visual FoxPro 下不作修改地运行已有的 dBASE 程序(.PRG 文件)	运行已有的 dBASE 程序
在 Visual FoxPro 下使用已有的 dBASE 表，或将其添加到 VIsual FoxPro 项目中。	在 Visual FoxPro 中使用 dBASE 表
将 dBASE 目录（.CAT 文件）转换成 Viusal FoxPro 项目	将 dBASE.CAT 文件转换成 Visual FoxPro项目
将已有的 dBASE 表单转换成 Visual FoxPro 表单	转换 dBASE 表单
将已有的 dBASE 报表或标签转换成 Visual FoxPro 报表或标签	转换 dBASE 报表和标签
在 Viusal FoxPro 下把已有的 dBASE 查询(.QBE 文件) 作为程序运行	在 Visual FoxPro 中运行 dBASE 查询
要得到与 dBASE 兼容的大致信息	dBASE 兼容性


请参阅

运行已有的 dBASE 程序

在 Visual FoxPro 中使用 dBASE 表

将 dBASE.CAT 文件转换成 Visual FoxPro项目

转换 dBASE 表单

转换 dBASE 报表和标签

在 Visual FoxPro 中运行 dBASE 查询

dBASE 兼容性


运行已有的 dBASE 程序

请参阅

所有的 dBASE III PLUS 程序和大部分 dBASE IV 程序可以不经修改在 Viusal FoxPro 环境下运行。可以在项目管理器、命令窗口中运行 dBASE 程序，或者通过菜单系统运行 dBASE 程序。

运行一个 dBASE 程序时，Viusal FoxPro 先将该 .PRG 文件编译成 .FXP 文件，然后运行该 .FXP 文件。

要提高 dBASE 程序顺利运行的可能性，运行 dBASE 程序之前应在命令窗口中发出 SET COMPATIBLE DB4 命令。如果程序不能正确运行，它可能包含 Visual FoxPro 不支持的 dBASE IV 命令、函数或子句。

有关详细内容，请参阅不支持的 dBASE IV 命令，函数和子句。

附注

因为 Visual FoxPro 重新编译 dBASE 程序，所以源代码 (.PRG) 文件或设计文件 (.QBC，.SCR，.FRG，.LBL) 必须可用。

由于 SQL 实施方式（implementation）的差异，dBASE IV.PRS程序不能在 Visual FoxPro 中运行。有关 SQL 实施方式差异的信息，请参阅 dBASE IV 和 Visual FoxPro 之间的 SQL 差异 。

� 若要运行 dBASE IV 程序，

1.	在命令窗口中，键入 SET COMPATIBLE DB4 命令。

2.	选择下列某一选项：

 •	   在项目管理器中，选择“代码”选项卡，选定要运行的 dBASE 程序，然后选择“运行”按钮。

 — 或者 —

 •	   在命令窗口中，键入 Do 命令，在 Do 后键入要运行的 dBASE 程序名。

 — 或者 —

 •	   从“程序菜单”中选择“运行”选项，然后选择 dBASE 程序名称。

运行错误

如果 dBASE 程序引起运行错误或产生意外的结果，可以使用 Visual FoxPro 调试工具（“跟踪”和“调试”）调试程序。

跟踪窗口允许逐行运行代码。调试窗口有两个窗格，可以在左窗格中输入变量或 Viusal FoxPro 函数，右窗格显示运行时指定给变量或函数返回的值。有关在 Visual FoxPro 中调试的详细内容，请参阅使用调试工具。

语法错误

如果运行程序时产生语法错误，Visual FoxPro 在编辑窗口中突出显示发生错误的程序行。可以使用帮助文件查看引起错误的命令或函数的正确语法和用法。

调试提示

 •	   确保程序中不包含不支持的 dBASE IV 命令，函数和子句中所列的， Visual FoxPro 不支持的命令、函数和子句。

 •	   确保 dBASE 程序中不含有以 Visual FoxPro 保留字命名的过程、函数，变量或数组。


请参阅

将文件加入到项目中

解决问题

命令窗口

调试窗口

项目管理器

dBASE IV 和 Visual FoxPro 之间的 SQL 差异

跟踪窗口

不支持的 dBASE IV 命令，函数和子句

使用调试工具


在 Visual FoxPro 中使用 dBASE 表

请参阅

在 Visual FoxPro 中打开 dBASE 表（.DBF 文件）时，自动转换成 Viusal FoxPro 格式。可以象其它 Viusal FoxPro 表一样使用它们。

如果 dBASE 表包含备注字段，Viusal FoxPro 将询问是否把备注字段转换成 Viusal FoxPro 格式。然后询问是否移去 dBASE 软回车。如果备注包含普通文本，选择“是”；如果备注包含二进制数据，选择“否”。

必须以独占方式打开表以便进行备注转换。

转换前不备份表。如果还要在 dBASE 中使用这些表，需要以 FoxPlus 类型表方式进行复制。可以在命令窗口中键入以下代码：

COPY TO Filename TYPE FOXPLUS

� 若要在 Visual FoxPro 中使用 dBASE 表

 •	   在命令窗口中，键入：

USE <database name> EXCLUSIVE

 — 或者 —

 •	   从“文件”菜单中，选择“打开”选项并选定要用的 dBASE 表。

加密的表

如果表已加密，在 Visual FoxPro 中使用它以前必须在 dBASE 中将其解密。

索引

Visual FoxPro 使用与 dBASE 不同的索引算法。因此，如果转换的表具有相关的 dBASE  .MDX 或 .NDX 索引，Visual FoxPro 自动为该表创建 Visual FoxPro  .CDX 或 .IDX 索引。

要在 dBASE 中使用一个 Visual FoxPro 转换过的没有备注字段但有索引的 dBASE IV 表，在 dBASE 中打开该文件并重新索引。只有更改了数据时，这一步聚才是必要的。

有备注文件的表

如果 dBASE 表有一个或多个备注字段，Visual FoxPro 自动地转换备注文件以便使其与 Visual FoxPro 兼容。带备注字段的 dBASE IV 表转换成 Visual FoxPro 格式后不能在 dBASE 中使用。

Visual FoxPro 备注字段文件格式允许存储的数据数量仅受硬盘空间的限制。


请参阅

命令窗口

COPY TO 命令

索引文件结构

备注文件结构

项目管理器

USE 命令


将 dBASE.CAT 文件转换成 Visual FoxPro项目

请参阅

如果有 dBASE 目录（.CAT 文件），可以将其转换成 Viusal FoxPro 项目（.PJX 文件）。

� 若要转换 dBASE 目录

1.	从“文件”菜单中，选择“打开”。

2.	选择 dBASE 目录文件名，然后选择“确定”。

打开一个 dBASE 目录时，Visual FoxPro 根据目录内容决定执行下列某些或全部操作：

 •	   将表转换成 Visual FoxPro 格式。

 •	   将屏幕转换成表单以便使用“表单设计器”修改它们。

 •	   转换报表和标签以便使用“报表设计器”修改它们。

 •	   在“代码”选项卡中将 dBASE 查询（.QBE 文件）作为程序添加到“项目管理器”中以便运行它们。


请参阅

转换 dBASE 表单

转换 dBASE 报表和标签

dBASE 兼容性

在 Visual FoxPro 中运行 dBASE 查询


转换 dBASE 表单

请参阅

把 dBASE 屏幕添加到 Visual FoxPro 项目中并修改它时，可以有两个转换选项：

 •	   可视转换

 •	   全部转换

可视转换将 dBASE 屏幕上的对象转换成 Visual FoxPro 新表单上的对象。转换器设置对象的基本属性，比如大小和位置，但不对对象使用事件代码或方法代码。

与屏幕相关的代码存放在具有指定名称的 .PRG 文件中。若要编写使表单工作的新代码以利用 Visual FoxPro 新的对象模型功能，应使用可视转换。

如果使用全部转换选项，屏幕在功能上立即表现为 FoxPro 2.x/dBASE READ-兼容表单。有关处理转换后表单的详细内容，请参阅转换 FoxPro 2.6 屏幕。


请参阅

转换选项对话框

向表单中添加控制

表单设计器


转换 dBASE 报表和标签

请参阅

在 Visual FoxPro 中修改 dBASE 报表和标签时，Visual FoxPro 将其转换成 Visual FoxPro 格式。

Visual FoxPro 转换报表和标签时，根据 dBASE.FRM 文件的信息创建一个 .FRX 文件，根据 dBASE.LBL 文件的信息创建一个 .LBX 文件。

Visual FoxPro 转换所有的带区，字段，计算结果字段，隐藏字段，图片模板和字段函数。Visual FoxPro 也转换样式属性，比如下划线，粗体，斜体和颜色。Visual FoxPro 不转换字体，不过 Visual FoxPro 支持包括 True Type 字体在内的所有基于 Windows 的字体，在这方面提供了比以前更强的控制能力。

自动换行带区转换成 Visual FoxPro 报表的一系列单行文本字段。不转换带区间隔和间距信息。Visual FoxPro 不使用全局标尺或自动换行段落标尺，因此不保留上述信息。转换后报表的右页边距等于报表的宽度。左页边距不变，但可以用 Visual FoxPro 的报表设计器设置其值。

如果报表有 tab 字符，需要重新组织字段以获得希望的外观。

转换后的差异

因为 dBASE 打印空报表带区，Visual FoxPro 将在这些带区中添加空字符以便打印它们。

dBASE 报表不存储完整的环境信息，只存储数据库别名。因此打开一个转换的报表时，可能得到“未找到 Customer.dBF”这样的错误信息。Visual Foxpro 报表可以保存数据库名、关系、跳过和索引信息。进入“报表设计器”，使用数据环境设置所需的环境，然后将环境信息与报表一起保存，上述错误将不再出现。

硬代码报表

Visual FoxPro 将硬代码报表重编译为 .PRG 文件。可以在“程序管理器”中象程序一样运行该报表（选择“文件”然后选择“运行”）。


请参阅

控制报表的数据源

数据环境设计器

设计报表

报表设计器


在 Visual FoxPro 中运行 dBASE 查询

请参阅

dBASE 查询主要由执行查询所需的 dBASE IV 命令组成，以 .QBE 为扩展名。在 Visual FoxPro 中可以不经修改地运行 dBASE 查询（.QBE 文件）。

dBASE 查询作为程序导入到“项目管理器”中“代码”选项卡下，不能用“查询设计器”修改它们。

� 若要运行 dBASE 查询 (.QBE)

在命令窗口中键入：

 •	   DO <query name>.QBE

  或者

 •	   在项目管理器中，选择“代码”选项卡，选定查询名称，然后选择“运行”选项。


请参阅

DO 命令

运行文件 (项目菜单)

SELECT - SQL 命令


dBASE 兼容性

请参阅

从 dBASE 升级到 Visual FoxPro，可能需要考虑下列兼容性问题：

 •	   DBASE 和 Visual FoxPro 的兼容性问题

 •	   受 SET COMPATIBLE 影响的命令和函数

 •	   其他 dBASE IV 兼容性问题

 •	   DBASE 和 Visual FoxPro 之间的国际差异

 •	   DBASE 和 Visual FoxPro 之间的键盘差异

 •	   DBASE IV 和 Visual FoxPro 之间的语言差异


请参阅

DBASE 和 Visual FoxPro 的兼容性问题

受 SET COMPATIBLE 影响的命令和函数

DBASE 和 Visual FoxPro 之间的国际差异

DBASE 和 Visual FoxPro 之间的键盘差异

DBASE IV 和 Visual FoxPro 之间的语言差异

其他dBASE IV 兼容性问题

SET COMPATIBLE 命令


dBASE 和 Visual FoxPro 的兼容性问题

请参阅

dBASE III PLUS 和 dBASE IV 文件都可以在 Visual FoxPro 使用。

在 dBASE 和 Visual FoxPro 之间共享文件

尽管可以在 dBASE 和 Visual FoxPro 之间同时共享文件，但不推荐这样做，因为 Visual FoxPro 和 dBASE 有不兼容文件的锁定机制。另外，由于每个应用程序都要重新创建索引和备注字段文件，维护表很困难。

dBASE III PLUS

Visual FoxPro 语言是 dBASE III PLUS 的超集。 dBASE III PLUS 程序可以不经修改地在 Visual FoxPro 中运行。

dBASE IV

与 dBASE IV 明显不兼容的地方是保密性，网络函数，很少使用的 SQL 和事务处理函数。Visual FoxPro 要重新编写大多数 SQL 程序（.PRS 文件）。Visual FoxPro 的某些 SQL 命令和事务命令与 dBASE IV 命令名称相同。

增强与 dBASE IV 的兼容性

发出下列命令可以获得最大的兼容性：

SET COMPATIBLE DB4

该命令更改 Visual FoxPro 执行某些命令和函数的方法以便与 dBASE 行为相匹配。设置 COMPATIBLE to DB4 是升级和运行应用程序的好办法。最后，随着 Visual FoxPro 功能的添加，您可能较容易地不使用兼容性功能。


请参阅

SET COMPATIBLE 命令


受 SET COMPATIBLE 影响的命令和函数

请参阅

所有引用驱动器的文件处理命令（例如，SET DEFAULT TO c:\vfp\samples\data ）都受 SET COMPATIBLE 命令的影响。

受 SET COMPATIBLE 影响的其它命令

@ ... GET 带有 RANGE 子句	@ ... SAY 带有 CHR(7)
@ ... SAY 滚动	@ ... SAY (当 STATUS 为 ON 时)
ACTIVATE SCREEN	ACTIVATE WINDOW
APPEND MEMO	DECLARE
DIMENSION	GO | GOTO 带有 SET TALK ON
FSIZE( )	INKEY( )
LASTKEY( )	LIKE( )
MENU 和 POPUP 命令	PLAY MACRO
READ 带有 @ ... GET VALID 子句	READ 带有数值型的 PICTURE 子句
READ - 嵌套的 READ	RUN | !
SET COLOR TO	SET("BORDER")
SET FIELDS	SET MESSAGE
SET PRINTER <文件>	STORE
SUM	TRANSFORM( ) 带有数值型的 PICTURE 子句
SELECT( )	SYS(2001, "COLOR")
有关每个命令如何受影响的详细说明，请参阅 SET COMPATIBLE。

模板程序设计

dBASE IV 模板语言不同于且独立于 dBASE，因此 dBASE 模板程序不能在 Visual FoxPro 下运行，必须进行重写。然而，您不必学习另外一种模板语言，Visual FoxPro 自然地支持模板程序设计。可以在模板程序设计中使用的 Visual FoxPro 命令包括：

 •	   \ | \\

 •	   SET TEXTMERGE DELIMITERS

 •	   SET TEXTMERGE

 •	   _TEXT

 •	   _PRETEXT

 •	   TEXT ... ENDTEXT


请参阅

SET COMPATIBLE 命令


其他 dBASE IV 兼容性问题

请参阅

Visual FoxPro 和 dBASE 之间，除了少量的语言和语法差异外，还应注意下列不同。

参数传递

dBASE IV 以引用方式把参数传递给过程和函数。Visual FoxPro 以引用方式将参数传递给过程而以值传递方式把参数传递给函数。

若要以引用方式将参数传递给函数，把命令 SET UDFPARMS TO REFERENCE 添加到程序中，或者直接在变量前使用 @。

在用户自定义函数中更改工作区

在 Visual FoxPro 中，如果更改 UDF 的选定工作区，当 UDF 把控制返回到调用程序时新选定的工作区保持选定状态。从 UDF 返回后，dBASE IV 却要重新选择调用函数之前选定的工作区。

设置多项锁定

在 dBASE IV 中 SET MULTILOCKS ON 是隐含的。在 Visual FoxPro 中必须明确地在“命令”窗中发出

SET MULTILOCKS ON

命令来设置多项锁定。

读键击

dBASE IV 和 Visual FoxPro 在界面环境中使用不同的键盘快捷键。如果一个 dBASE IV 应用程序使用 READKEY( ) 或 LASTKEY( ) 函数来检查用户的最后动作并作适当反应，可能导致错误。

硬代码文件扩展名

如果 dBASE 程序中有硬代码文件扩展名，您可能需要更改某些扩展名。下表显示了程序可能使用的每种类型的 dBASE 文件扩展名及其对应的 Visual FoxPro 文件扩展名。本表假定转换器已转换了所有相关 dBASE 文件。

dBASE 文件	Visual FoxPro 文件
.DBF	不需更改
.DBT	.FPT
.FMT	.SCX
.FRG	不需更改
.FRM	.FRX
.LBG	不需更改
.LBL	.LBX
.MDX	.CDX
.NDX	.IDX
.PRG	不需更改
.QBE	不需更改


请参阅

LASTKEY( ) 函数

READKEY( ) 函数

SET MULTILOCKS 命令

SET UDFPARMS 命令


dBASE 和 Visual FoxPro 之间的国际差异

请参阅

dBASE 通过语言驱动器，ASCII SORT和 LANGTABLES 配置项以及 SET LDCHECK 命令提供国际支持。Visual FoxPro 忽略它们。

Visual FoxPro 提供广泛的国际功能，包括自动翻译重音字符（�, � ,�,等等）。自动翻译重音字符可能出现在表、程序和文本文件中。Visual FoxPro提供对多个排序序列灵活的支持，允许排序某一特定语言的表。

Visual FoxPro 通过代码页和 COLLATE 配置项以及几个命令或函数提供国际功能。

打开 dBASE 表时，您应在命令窗口中发布 SET CPDIALOG 命令以便显示“代码页”对话框，从中可以为表设置适当的代码页。


请参阅

在 .DBF 文件中查找代码页标记

Visual FoxPro 支持的代码页

IDXCOLLATE( ) 函数

国际选项卡 (选项对话框)

禁止对字符型或备注型字段中的数据进行转换

SYS(15) - 字符转换


dBASE 和 Visual FoxPro 之间的键盘差异

请参阅

当 dBASE IV 的“浏览”窗口活动时，从 F1 到 F10 的功能键提供与平时不同的功能。在 Visual FoxPro 中，功能键总是提供相同的功能。

下面的第一个表列出了每个功能键标准的 dBASE 和 Visual FoxPro 动作。

第二个表列出了当“浏览”窗口活动时功能键的 dBASE 动作。Visual FoxPro 不支持这些动作。

Visual FoxPro 和 dBASE 功能键指定值

键	动作
F1	激活联机帮助
F2	设置（显示“查看”窗口）
F3	列表
F4	目录
F5	显示结构
F6	显示状态
F7	显示内存
F8	显示
F9	追加
F10	激活系统菜单栏／使系统菜单栏不活动（与 Alt 相同）
dBASE 浏览窗口功能键指定值
（Visual FoxPro 不支持）

键	动作
F1	激活联机帮助
F2	切换“浏览”和“编辑”方式
F3	前一个字段
F4	下一个字段
F5	无效
F6	扩展选择（选择备注字段文本）
F7	移动（移动选定的备注字段文本）
F8	复制（复制选定的备注字段文本）
F9	将备注字段窗口放大到满屏
F10	激活“浏览”菜单栏
DOWN ARROW	激活追加记录提示


请参阅

FKLABEL( ) 函数


dBASE IV 和 Visual FoxPro 之间的语言差异

请参阅

Visual FoxPro 实际上支持所有的 dBASE IV 可用命令和函数。不过，有几个 dBASE IV 命令和函数 Visual FoxPro 不支持，其他一些在 Visual FoxPro 中以不同的方式运行。

下列主题说明了 Visual FoxPro 不支持以及在 Visual FoxPro 中运行方式不同的 dBASE IV 命令和函数。

若要	请参阅
查找支持的 dBASE 命令	支持的 dBASE IV 命令和函数
查找 Visual FoxPro 不支持的命令和函数，或者 Visual FoxPro 不支持仅用于 dBASE IV 的命令子句。	不支持的 dBASE IV 命令，函数和子句
dBASE IV 和 Visual FoxPro之间 SQL 支持的差异（Visual FoxPro 不支持 dBASE IV SQL 命令和函数）。	dBASE IV 和 Visual FoxPro 之间的 SQL 差异


请参阅

SQL 命令概述

dBASE IV 和 Visual FoxPro 之间的 SQL 差异

支持的 dBASE IV 命令和函数

不支持的 dBASE IV 命令，函数和子句


支持的 dBASE IV 命令和函数

请参阅

Visual FoxPro 支持下列 dBASE IV 命令和函数。有关 Viaual FoxPro 不支持的 dBASE IV 命令，函数和子句的列表，请参阅不支持的 dBASE IV 命令，函数和子句。

dBASE 命令或函数	相应的 Visual FoxPro 命令或函数
@ ... SCROLL	请参阅 @ ... SCROLL
BARCOUNT( )	请参阅 CNTBAR( )
BARPROMPT( )	请参阅 BARPROMPT( )
BLANK	请参阅 BLANK
DESCENDING( )	请参阅 DESCENDING( )
FOR( )	请参阅 FOR( )
FDATE( )	请参阅 FDATE( )
FLDCOUNT( )	等效的函数是 FCOUNT( )
FLDLIST( )	请参阅 FLDLIST( )
FTIME( )	请参阅 FTIME( )
HOME( )	等效的函数是 SYS(2004)
ID( )	等效的函数是 SYS(0)
ISBLANK( )	请参阅 ISBLANK( )
ISREADONLY( )	请参阅 ISREADONLY( )
KEYMATCH( )	请参阅 KEYMATCH( )
MEMORY(0)	等效的函数是 SYS(1001)
MEMORY(1)	等效的函数是 SYS(1001)
MEMORY(2)	等效的函数是 SYS(12)
MEMORY(3)	等效的函数是 SYS(1001)
MEMORY(4)	等效的函数是 SYS(23)
MEMORY(5)	等效的函数是 SYS(23)
MEMORY(6)	等效的函数是 SYS(1016)
ON BAR	请参阅 ON BAR
ON EXIT BAR	请参阅 ON EXIT BAR
ON EXIT MENU	请参阅 ON EXIT MENU
ON EXIT PAD	请参阅 ON EXIT PAD
ON EXIT POPUP	请参阅 ON EXIT POPUP
ON MENU	等效的函数是 ON SELECTION MENU
ON MOUSE	等效的函数是 ON KEY LABEL
ON PAD	等效的函数是 ON SELECTION PAD
ON POPUP	等效的函数是 ON SELECTION POPUP
PADPROMPT( )	等效的函数是 PRMPAD( )
PCOUNT( )	等效的函数是 PARAMETERS( )
PRTINFO( )	请参阅 PRTINFO( )
REPLACE FROM ARRAY	请参阅 REPLACE FROM ARRAY
SET("ATTRIBUTES")	请参阅 SET( )
SET DIRECTORY	等效的函数是 SET DEFAULT
SET("DIRECTORY")	等效的函数是 SYS(5) + SYS(2003)
SET("DISPLAY")	请参阅 SET( )
SET FIELDS	请参阅 SET FIELDS
SET FORMAT	请参阅 SET FORMAT
SET KEY	请参阅 SET KEY
SET("LIBRARY")	请参阅 SET( )
SET MBLOCK	请参阅 SET BLOCKSIZE
SET("MBLOCK")	请参阅 SET( )
SET VIEW	请参阅 SET VIEW
SYS(1037)	Print Setup Dialog. 请参阅 SYS(1037)
TAG( )	请参阅 TAG( )
TAGCOUNT( )	请参阅 TAGCOUNT( )
TAGNO( )	请参阅 TAGNO( )
UNIQUE( )	请参阅 UNIQUE( )
WINDOW( )	等效的函数是 WOUTPUT( )


请参阅

不支持的 dBASE IV 命令，函数和子句


不支持的 dBASE IV 命令,函数和子句
不支持的 dBASE IV 命令，函数和子句

请参阅

几乎所有几百个 dBASE IV 命令和函数以相同的方式在 Visual FoxPro 中工作，兼容程度非常高，对 dBASE IV 1.0 和 1.1 的兼容程度甚至更高。不过，下列命令、函数和子句在 dBASE 和 Visual FoxPro 中是不相同的。

@ ... GET

Visual FoxPro 忽略 dBASE 要求的 @ ... GET 子句。

@ ... SCROLL

Visual FoxPro 忽略 dBASE 的 WRAP 子句。

ACCESS( )

dBASE 函数 ACCESS( ) 在 Visual FoxPro 中总是返回 0。

APPEND

Visual FoxPro 忽略 dBASE 中 APPEND 的 NOORGANIZE 子句。

APPEND FROM

Visual FoxPro 忽略 APPEND FROM 的 dBASE  NOVERIFY 和 REINDEX 子句。

APPEND FROM ARRAY

Visual FoxPro 忽略了 APPEND FROM ARRAY 的 dBASE PEINBEX 子句。

数组和函数

在程序执行过程中，Visual FoxPro 先查找函数，然后查找数组。如果在 Visual FoxPro 中运行一个 dBASE 程序，并且该程序中有一个与 Visual FoxPro 函数或用户自定义函数同名的数组，Visual FoxPro 执行 Visual FoxPro 函数或用户自定义函数。

BARCOUNT( ) 函数

提供 BARCOUNT( ) 函数是为了提供与 dBASE 的兼容性。在 dBASE 中，BARCOUNT( ) 函数返回定义的弹出式菜单中菜单栏的数目，不管它是否激活。在 Visual FoxPro 中 BARCOUNT( ) 计算活动弹出式菜单中菜单栏数目。如果在 Visual FoxPro 中定义了一个弹出式菜单但没激活它，BARCOUNT( ) 返回 0。

BEGIN TRANSACTION 命令

Visual FoxPro 仅为数据库表支持该命令，标记事务的开始。使用 ROLLBACK 命令可以回复原始状态。END TRANSACTION 命令保存事务。

BROWSE 命令

Visual FoxPro 忽略 BROWSE 的 dBASE NOORGANIZE 子句。

Visual FoxPro 忽略 BROWSE FOMAT 子句所指定格式文件中的任何初始代码或清理代码。

CALL( ) 函数

在 Visual FoxPro 中，dBASE 的 CALL( ) 函数产生错误。可用 CALL 代替。

CERROR( ) 函数

Visual FoxPro 不支持 dBASE 的 CERROR( ) 函数。

CHANGE( ) 函数

在 VIsual FoxPro 中，dBASE 的 CHANGE( ) 函数总是返回“假”(.F.)。

CLEAR SCREEN 命令

Visual FoxPro 忽略 dBASE 的 CLEAR SCREEN 命令。可用 RELEASE 命令清除屏幕类型内存变量。

CLOSE PRINTER 命令

dBASE 的 CLOSE PRINTER 命令等同于 Visual FoxPro 的 SET PRINTER TO 命令。

COMPLETED( ) 函数

在 Visual FoxPro 中，dBASE 的 COMPLETED( ) 函数总是返回“假”(.F.)。

CONVERT 命令

dBASE 的 CONVERT 命令在 Visual FoxPro 中产生错误。

DEBUG 命令

dBASE 的 DEBUG 命令在 Visual FoxPro 中产生错误。可用 Visual FoxPro 的“调试”和“跟踪”窗口代替。

DEXPORT 函数

 dBASE  DEXPORT 命令在 Visual FoxPro 中产生错误。

DGEN( ) 函数

 dBASE  DGEN( ) 函数在 Visual FoxPro 中产生错误。

END TRANSACTION 命令

Visual FoxPro 仅为数据库表支持 END TRANSACTION 命令，保存事务过程中对表所做的更改。

FCREATE( ) 和 FOPEN( ) 函数

在 dBASE IV 中， FCREATE( ) 和FOPEN( ) 函数的第二个参数可以是“R”（只读），“W”（只写），“A”（只追加），“RW”或“WR”（读写），或者“RA”或“AR”（读和追加）。Visual FoxPro 支持这些文件属性。下表列出了与这些 dBASE 参数相应的 Visual FoxPro 行为。

FCREATE( ) 函数

dBASE 参数	Visual FoxPro 行为
RW 或 WR	以读写权创建文件并设置为 MS-DOS 档案属性。
A	以读写权创建文件并设置为 MS-DOS 档案属性。
RA 或 AR	以读写权创建文件并设置为 MS-DOS 档案属性。
R	以只读权创建文件并设置为  MS-DOS 只读属性。
FOPEN( ) 函数

dBASE 参数	Visual FoxPro 行为
RW 或 WR	以读写权打开文件并将文件指针放到文件头。
A	以只读权打开文件  并将文件指针放到文件尾。
RA 或 AR	以读写权打开文件并将文件指针放到文件尾。
R	以只读权打开文件并将文件指针放到文件头。
FLDLIST( ) 函数

在 dBASE 中， FLDLIST( ) 返回的字段名后跟“-> ”操作符和表别名。在 Visual FoxPro 中，FLDLIST( ) 返回的字段名后跟一个句点和表别名。

ID( ) 函数

在 dBASE 中 ID( )返回运行 dBASE 的机器名。在 Visual FoxPro 中 ID( )返回运行 Visual FoxPro 的机器名和机器在网络中的编号。如果没有安装网络，ID( ) 返回机器名和 1。

ISMARKED( ) 函数

Visual FoxPro 不支持 ISMARKED( ) 函数。

LKSYS( ) 函数

Visual FoxPro 不支持 LKSYS( ) 函数。

MEMORY( ) 函数

在 dBASE 中，不带数值参数发出的 MEMORY( ) 函数的返回值与 MEMORY(0) 相同，即 dBASE 的可用内存数量。

在 Visual FoxPro 中，MEMORY( ) 返加可用于运行外部程序 640K 以下的内存数量。

MEMORY(7) 函数

dBASE 函数 MEMORY(7) 在 Visual FoxPro 中总是返回 0。

NETWORK( ) 函数

dBASE 函数 NETWORK( ) 在 Visual FoxPro 中总是返回“真”(.T.)。

ON SELECTION POPUP 命令

Visual FoxPro 忽略 ON SELECTION POPUP的 dBASE  BLANK 子句。

_PDRIVER 系统内存变量

在 Visual FoxPro 中，如果 _PDRIVER 指定的打印机驱动程序有文件扩展名，必须将文件扩展名包含到打印机驱动程序文件名中。dBASE 假定文件扩展名为 .PR2。只有当打印机驱动程序文件名的扩展名不是 .PR2 时，才需要包含文件扩展名。

PROTECT 命令

dBASE  PROTECT 命令在 Visual FoxPro 中产生错误。

RESET 命令

Visual FoxPro 忽略 dBASE RESET 命令。

ROLLBACK 命令

Visual FoxPro 的 ROLLBACK 命令处理数据库表。它把记录回复到发出 BEGIN TRANSACTION 命令之前的状态。

RUN( ) 函数

Visual FoxPro 不支持 dBASE RUN( ) 函数。可用 RUN 命令代替。

SAVE SCREEN 命令

在 Visual FoxPro 中，过程中 SAVE SCREEN 保存的屏幕为私有。在 dBASE 中，过程中保存的屏幕为公有。

要在 Visual FoxPro 中模拟 dBASE 的方式，定义一个公有内存变量然后将屏幕保存到该公有内存变量中。

SET CATALOG 命令

FoxPro 忽略 dBASE SET CATALOG 命令。

SET DBTRAP 命令

Visual Foxpro 忽略 dBASE SET DBTRAP 命令。在 Visual FoxPro 中 DBTRAP 的值总是 OFF。

SET DESIGN 命令

Visual FoxPro 忽略dBASE  SET DESIGN 命令。在 Visual FoxPro 中 DESIGN 值总是 on 。

SET EXCLUSIVE 命令

Visual FoxPro 和dBASE IV 2.0 版中 SET EXCLUSIVE 的默认值是 ON。dBASE IV 1.5 版的 SET EXCLUSIVE 的默认值是 OFF。

SET FIELDS 命令

在dBASE中，可以将 /R 添加到 SET FIELDS 命令的字段中使其只读。Visual FoxPro 忽略这一开关选项。

SET IBLOCK 命令

Visual FoxPro 忽略 dBASE SET IBLOCK 命令。

SET INSTRUCT 命令

Visual FoxPro 忽略 dBASE  SET INSTRUCT 命令。在 Visual FoxPro中 INSTRUCT 的值总是 OFF 。

SET LDCHECK 命令

Visual FoxPro 忽略 dBASE SET LDCHECK 命令。在Visual FoxPro中 LDCHECK 总是 OFF。

SET MBLOCK 命令

在 dBASE 中，要用 64 乘以 SET MBLOCK 命令为备注字段块大小指定的值。

SET MESSAGE 命令

Visual FoxPro 忽略 SET MESSAGE 中的 dBASE  AT 子句。

SET PRECISION 命令

Visual FoxPro 忽略 dBASE SET PRECISION 命令。Visual FoxPro 总是采用 16 位计算。

SET SQL 命令

Visual FoxPro忽略 dBASE  SET SQL 命令。在 Visual FoxPro 中 SQL 总是 ON。

SET TRAP 命令

Visual FoxPro 忽略 dBASE  SET TRAP 命令。在 Visual FoxPro 中 TRAP 总是 ON。

SET('BORDER') 命令

Visual FoxPro 返回边界字符。在 dBASE 中，SET('BORDER') 返回边界字符的 ASCII 值。

SET("CATALOG") 命令

在 Visual FoxPro 中，SET("CATALOG")总是返回 OFF。

SET("DBTRAP") 命令

在 Visual FoxPro 中，SET("DBTRAP")总是返回 OFF。

SET("DESIGN") 命令

在 Visual FoxPro 中， SET("DESIGN")总是返回 ON。

SET('FIELDS',1) 命令

在 Visual FoxPro 中，当 FIELDS 设置为 LOCAL 并且 COMPATIBLE 设置为 FOXPLUS 或 OFF 时，不与字段名一起返回别名。

SET("IBLOCK") 命令

在 Visual FoxPro 中，SET("IBLOCK") 总是返回 0。

SET("INSTRUCT") 命令

在 Visual FoxPro 中，SET("INSTRUCT") 总是返回 OFF。

SET("LDCHECK") 命令

在 Visual FoxPro 中，SET("LDCHECK") 总是返回 OFF。

SET("PRECISION") 命令

在 Visual FoxPro 中，SET("PRECISION") 总是返回 16。

SET("SQL") 命令

在 Visual FoxPro 中，SET("SQL") 总是返回 ON。

SET("TRAP") 命令

在 Visual FoxPro 中，SET("TRAP") 总是返回 ON。

SET("VIEW") 命令

在 Visual FoxPro 中， SET("VIEW") 总是返回空子符串("")。

SYSPROC 配置选项

在 dBASE 中，可以在 dBASE 配置文件中包含 SYSPROC 配置选项以打开一个过程文件。该过程文件在整个 dBASE 工作期中保持打开状态。

在 Visual FoxPro 中，可以用 SET LIBRARY 打开一个外部 API 库文件。

USE 命令

Visual FoxPro 忽略 USE 中的 dBASE  NOSAVE 和 NOLOG 子句。


请参阅

USE 命令


dBASE IV 和 Visual FoxPro 之间的 SQL 差异

请参阅

dBASE IV 和 Visual FoxPro 在支持 SQL 方面有明显的差异，并且 Visual FoxPro 不支持某些 dBASE IV SQL 命令。

dBASE SQL

要用 SQL 处理 dBASE IV 数据，需要创建一个 SQL 数据库并以特殊的 SQL 方式对其进行操作。使用 SQL 的程序必须独立且不同于其他 dBASE 程序（为 .PRS 程序，不同于 .PRG 程序）。分号是 dBASE 命令继续字符，也是 SQL 命令需要的命令终止字符。

Visual FoxPro SQL

Visual FoxPro 支持 SQL 命令 ALTER TABLE，CREATE CURSOR，CREATE TABLE，DELETE，INSERT 和 UPDATE。SQL 在 Visual FoxPro 中完全集成，可以象任何其他 Visual FoxPro 命令一样使用 SQL 命令，或者随便交叉放置 Visual FoxPro 和 SQL 命令。分号是所有 Visual FoxPro 命令和 SQL 命令的继续字符。

由于在 dBASE IV 和 Visual FoxPro 中 SQL 实施方式的明显差异，复杂的 dBASE IV SQL 程序可能不能在 Visual FoxPro 中运行，必须重新编写。


请参阅

SQL 命令概述


使用 Visual FoxPro 启动选项

请参阅

可以使用配置文件或选项对话框定制 Visual FoxPro 环境。一些环境设置实际上是 SET 命令或系统变量。设置的值或者存储在当前数据工作期中，或者作为系统注册时的启动默认值，或者存储在资源文件中。

Visual FoxPro 提供了两个可选的启动开关。开关用于：

 •	   隐藏启动屏幕.

 •	   指定配置文件.


请参阅

用配置文件设置环境

使用选项对话框设置环境

指定配置文件

隐藏启动屏幕

SYS(2005) - 当前资源文件

系统内存变量概述


隐藏启动屏幕

请参阅

启动屏幕用于显示 Visual FoxPro 的徽标和产品注册信息，您可能需要为自己的应用程序隐藏这些信息。

� 若要不显示启动屏幕

 •	   在 Visual FoxPro 命令行中添加 -T 开关。

例如，若想在启动 Visual FoxPro 时不显示启动屏幕，可以使用下面的命令行：

VFP.EXE -T


请参阅

用配置文件设置环境

使用选项对话框设置环境


指定配置文件

请参阅

� 若要指定配置文件

 •	   在命令行中添加 -C 开关再加上配置文件的路径和文件名。在开关和路径信息之间不要有任何空格。

例如，要指出在 C:\MYAPP 中的配置文件，可以使用下面的命令行：

VFP.EXE -CC:\MYAPP\CONFIG.FPW

 — 或者 —

 •	   如果合适，可将下面的命令行添加到您的 AUTOEXEC.BAT 文件中：

SET FOXPROWCFG=C:\MYAPP\CONFIG.FPW

� 若要隐藏配置文件

 •	   向命令行添加 -C 开关，其后不跟任何字符。

例如，无论配置文件是建立在启动目录中，还是在系统路径中，若不想使用任何配置文件，可使用下面的命令行：

VFP.EXE -C


请参阅

用配置文件设置环境

使用选项对话框设置环境


使用选项对话框设置环境

请参阅

若要查看和更改环境设置，您可以从“工具”菜单中选择“选项”命令。“选项”对话框有十个选项卡，表示环境选项的十个类别，如下表所示。

若要访问下列功能	从工具菜单中选择选项，然后选择下列选项卡
界面选项	显示
数据输入和程序设计选项	常规
文本编辑器选项	编辑
表选项	数据
远程数据访问选项	远程数据
目录，路径和文件位置选项	文件位置
表单设计器选项	表单
项目管理器选项	项目
可视类库和 OLE 选项	控制
日期、时间和数值型格式选项	国际


请参阅

修改数据输入和程序设计选项

修改日期、时间和数值型格式选项

修改目录路径和文件位置选项

修改表单设计器选项

修改界面选项

修改项目管理器选项

修改远程数据访问选项

修改表选项

修改文本编辑器选项

为表单设计器设置可视类库和 OLE 选项


显示设置

请参阅

运行 Visual FoxPro 之后，可以使用“选项”对话框或 DISPLAY STATUS 命令，也可以通过显示各 SET 命令的值，检查环境设置。

� 若要显示多个环境设置

 •	   打开“工具”菜单中的选项对话框并查看当前设置。

 — 或者 —

 •	   在命令窗口中键入 DISPLAY STATUS 命令。

� 若要显示单个环境设置

 •	   在命令窗口中使用 SET( ) 函数显示任何 SET 命令的当前值。

例如，若要查看 SET TALK 命令的当前状态，可键入：

? SET('TALK')

 — 或者 —

 •	   在调试窗口中使用 SET( ) 函数但不用 Print (?) 命令。


请参阅

? 命令

命令窗口

调试窗口

DISPLAY STATUS 命令

环境命令

选项 (工具菜单)

SET( ) 函数

SET TALK 命令


保存设置

请参阅

� 若要保存当前数据工作期设置

1.	在选项对话框中选择设置。

2.	选择“确定”按钮。

当您运行 Visual FoxPro 时，它将从系统注册表中读取任何现有的由 SET 命令设置的值。在 Visual FoxPro 工作期中更改的任何设置在退出 Visual FoxPro 时都将丢失，除非您将它们作为默认值保存在“选项”对话框中。

� 若要保存默认设置

1.	在“选项”对话框中更改设置。

2.	选择“设置为默认值”按钮。


请参阅

DataSession 属性

选项 (工具菜单)

另存为类 (文件菜单)

SaveAsClass 方法

SaveAs 方法

SET( ) 函数

SET DATASESSION 命令


回显设置

请参阅

由于设置仅在当前数据工作期有效，因此您可能会希望获取这些设置并将它们放置到一个程序中或表单的 Init 事件代码中。完成上述操作的方法之一是将设置回显到命令窗口中，并将它们复制粘贴到另一个位置上。

� 若要将选项对话框的设置回显到命令窗口中

1.	在选项对话框中选择设置。

2.	按住 SHIFT 键并选择“确定”按钮。

设置将回显到命令窗口。

3.	从命令窗口复制设置命令。


请参阅

命令窗口

选项 (工具菜单)


修改界面选项

请参阅

使用“选项”对话框的“显示”选项卡或使用等价的命令，您可以修改 Visual FoxPro 界面的一些功能。

显示选项卡的选项设置	语言设置
状态栏	SET STATUS BAR
时钟	SET CLOCK
命令结果1	SET TALK1
系统消息	SET NOTIFY
最近用过的项目列表	仅在系统注册表中
启动时打开最近用过的项目	仅在系统注册表中
1 选项仅与当前数据工作期有关。


请参阅

自动打开项目

显示或隐藏命令结果

显示或隐藏系统信息

在状态栏中显示或关闭时钟

打开或关闭最近用过的项目列表

打开或关闭状态栏

SET CLOCK 命令

SET NOTIFY 命令

SET STATUS BAR 命令

SET TALK 命令

显示选项卡 (选项对话框)


打开或关闭状态栏

请参阅

� 若要打开或关闭状态栏

Visual FoxPro 主窗口底部的状态栏用于显示各种提示信息。

 •	   在“显示”区中，选定或清除“状态栏”复选框。

 — 或者 —

 •	   使用 SET STATUS BAR 命令。


请参阅

SET STATUS BAR 命令

显示选项卡 (选项对话框)


在状态栏中显示或关闭时钟

请参阅

� 若要在状态栏中显示或关闭时钟

 •	   在“显示”区中，选定或清除“时钟”复选框。

 — 或者 —

 •	   使用带有 STATUS 或 OFF 子句的 SET CLOCK 命令。

您也可以使用 SET CLOCK 命令将时钟放在状态栏以外的位置。


请参阅

SET CLOCK 命令

SET STATUS BAR 命令

显示选项卡 (选项对话框)


显示或隐藏命令结果

请参阅

� 若要打开或关闭命令结果的显示

 •	   在“显示”区中，选定或清除“命令结果”复选框。

 — 或者 —

 •	   使用 SET TALK 命令。

您也可以使用 SET TALK 命令决定将命令结果输出到任何用户自定义的窗口中。


请参阅

SET TALK 命令

显示选项卡 (选项对话框)


显示或隐藏系统信息

请参阅

� 若要显示或隐藏系统信息

 •	   在“显示”区中，选定或清除“系统消息”复选框。

 — 或者 —

 •	   使用 SET NOTIFY 命令。


请参阅

SET NOTIFY 命令

显示选项卡 (选项对话框)


打开或关闭最近用过的项目列表

请参阅

� 在“文件”菜单中打开或关闭“最近用过的项目列表”

 •	   在“显示”区中，选定或清除“最近用过的项目列表”复选框。

此选项没有等价命令。


请参阅

显示选项卡 (选项对话框)


自动打开项目

请参阅

� 若要在启动 Visual FoxPro 时自动打开一个项目

 •	   选定“启动时打开最近用过的项目”复选框。

当退出 Visual FoxPro 时一个项目正处于打开状态，并且您在“显示”选项卡上选定了“启动时打开最近用过的项目”复选框，那么，在下一次启动 Visual FoxPro 时，自动打开此项目。

此选项没有等价命令。


请参阅

显示选项卡 (选项对话框)


修改数据输入和程序设计选项

请参阅

您可以在“选项”对话框的“常规”选项卡中修改数据输入和程序设计选项，或使用下表显示的等价命令：

常规选项卡上的选项设置	命令设置
警告声音	SET BELL
按 ESC 键取消程序运行	SET ESCAPE
显示跟踪窗口	SET ECHO
记录编译错误	SET LOGERRORS
与dBASE 兼容	SET COMPATIBLE
使用 Visual FoxPro 调色板	SET PALETTE
文件替换时加以确认1	SET SAFETY1
SET DEVELOPMENT	SET DEVELOPMENT
导航键	SET KEYCOMP
用当前值填充新记录1	SET CARRY1
使用 Enter 或 Tab 键退出字段1	SET CONFIRM1
1 选项仅与当前数据工作期有关。


请参阅

比较时间和日期戳

创建编译错误日志

当改写文件时打开或关闭警告声音

打开或关闭 dBASE 兼容能力

允许或禁止使用 ESC 键

常规选项卡 (选项对话框)

打开跟踪窗口

还原或替换默认调色板

SET BELL 命令

SET CARRY 命令

SET COMPATIBLE 命令

SET CONFIRM 命令

SET DEVELOPMENT 命令

SET ECHO 命令

SET ESCAPE 命令

SET KEYCOMP 命令

SET LOGERRORS 命令

SET PALETTE 命令

SET SAFETY 命令

设置数据输入选项

设置警告声音


设置警告声音

请参阅

当发生错误或数据输入字段已完全填满时，Visual FoxPro 发出警告声音。

� 若要关闭警告声音

 •	   在“警告声音”区中，选定“关闭”复选框。

 — 或者 —

 •	   使用 SET BELL 命令。

� 若要将系统默认的嘟嘟声设置成警告声音

 •	   在“警告声音”区中，选定“默认值”复选框。

 — 或者 —

 •	   使用 SET BELL 命令。

� 若要用 .WAV 文件设置警告声音

 •	   在“警告声音”区中，选定“播放”复选框并输入 .WAV 文件的路径和文件名。

 — 或者 —

 •	   使用 SET BELL 命令。


请参阅

常规选项卡 (选项对话框)

SET BELL 命令


设置程序开发选项

请参阅

有一些环境设置专用于开发应用程序。这些选项包括禁止使用 ESC 键结束应用程序的运行，打开“跟踪”窗口以及创建编译错误日志等。

若要	请参阅
禁止使用 ESC 键	允许或禁止使用 ESC 键
打开“跟踪”窗口	打开跟踪窗口
创建编译错误日志	创建编译错误日志


请参阅

创建编译错误日志

允许或禁止使用 ESC 键

常规选项卡 (选项对话框)

打开跟踪窗口


允许或禁止使用 ESC 键

请参阅

� 若要允许或禁止使用 ESC 键中断程序的运行

 •	   在“程序设计”区中，选定或清除“按 ESC 键取消程序运行”复选框。

 — 或者 —

 •	   使用 SET ESCAPE 命令。

附注

在 Visual FoxPro 的开发环境中使用 SET ESCAPE OFF 命令没有作用。仅当执行应用程序时，此设置才有用。


请参阅

常规选项卡 (选项对话框)

SET ESCAPE 命令


打开跟踪窗口

请参阅

� 若要打开“跟踪”窗口

 •	   在“程序设计”区中，选定“显示跟踪窗口”复选框。

附注

清除此复选框并不会关闭“跟踪窗口”。

 — 或者 —

 •	   从“工具”菜单中，选择跟踪窗口命令。

 — 或者 —

 •	   使用 SET ECHO 命令。

附注

发出 SET ECHO OFF 命令不能关闭“跟踪”窗口。


请参阅

常规选项卡 (选项对话框)

SET ECHO 命令

跟踪窗口 (工具菜单)


创建编译错误日志

请参阅

� 若要允许或禁止编译错误日志的创建

 •	   在“程序设计”区中，选定或清除“记录编译错误”复选框。

 — 或者 —

 •	   使用 SET LOGERRORS 命令。


请参阅

常规选项卡 (选项对话框)

SET LOGERRORS 命令


比较时间和日期戳

请参阅

� 若要允许或禁止比较时间和日期戳

 •	   在“程序设计”区中，选定或清除“ SET DEVELOPMENT”复选框。

 — 或者 —

 •	   使用 SET DEVELOPMENT 命令。

附注

由 MODIFY COMMAND 调用的程序总是执行其最新版本，且忽略 SET DEVELOPMENT 设置。


请参阅

常规选项卡 (选项对话框)

MODIFY COMMAND 命令

SET DEVELOPMENT 命令


允许或禁止 dBASE 兼容能力

请参阅

� 若要允许或禁止 dBASE 兼容能力

 •	   选定或清除“与 dBASE 兼容”复选框。

 — 或者 —

 •	   使用 SET COMPATIBLE 命令。


请参阅

常规选项卡 (选项对话框)

SET COMPATIBLE 命令


还原或替换默认调色板

请参阅

� 若要还原或替换默认调色板

 •	   选定或清除“使用 Visual FoxPro 调色板”复选框。

 — 或者 —

 •	   使用 SET PALETTE 命令。


请参阅

常规选项卡 (选项对话框)

SET PALETTE 命令


改写文件时允许或禁止警告

请参阅

� 若要允许或禁止在改写一个现有文件时显示警告对话框

 •	   选定或清除“文件替换时加以确认”复选框。

 — 或者 —

 •	   使用 SET SAFETY 命令。


请参阅

常规选项卡 (选项对话框)

SET SAFETY 命令


设置数据输入选项

请参阅

您可以为输入、填充和退出字段设置数据输入选项。

� 若要将导航键设置为与 Windows 或 MS-DOS 兼容的风格

 •	   选定“与 Windows 兼容”或“与 MS-DOS 兼容”列表项。

 — 或者 —

 •	   使用 SET KEYCOMP 命令。

当您使用 APPEND 或 INSERT 命令创建一个新记录时，可以用存储在当前记录中的值填充新记录。

� 若要允许或禁止用当前值填充新记录

 •	   在“常规”选项卡中，选定或清除“用当前值填充新记录”复选框。

 — 或者 —

 •	   使用 SET CARRY 命令。

您可以强制使用 ENTER 或 TAB 键让用户退出字段。

� 若要允许或禁止用 ENTER 或 TAB 键退出字段，

 •	   在“数据输入”区中，选定或清除“使用 Enter 或 Tab 键退出字段”复选框。

 — 或者 —

 •	   使用 SET CONFIRM 命令。


请参阅

常规选项卡 (选项对话框)

SET CARRY 命令

SET CONFIRM 命令

SET KEYCOMP 命令


修改文本编辑器选项

请参阅

您可以通过“选项”对话框的编辑选项卡修改文本编辑器选项。这些设置存储在当前资源文件中并且没有等价的命令。

若要	请参阅
为编辑工作期的类型设置选项	设置常规编辑选项
为指定文件设置编辑选项	设置常规编辑选项


请参阅

SYS(2005) - 当前资源文件

编辑选项卡 (选项对话框)

设置常规编辑选项


设置常规编辑选项

请参阅

您可以为单独的文件或按类型设置文件的常规编辑选项。类型有：

 •	   MODIFY COMMAND 工作期

 •	   MODIFY FILE 工作期

 •	   MODIFY PROCEDURE 工作期

 •	   MODIFY MEMO 工作期

 •	   编辑窗口

 •	   命令窗口

当您调用“选项”对话框时，正在运行的工作期就是您为其设置选项的工作期。

� 若要允许或禁止拖放编辑

 •	   选定或清除“拖放编辑”复选框。

� 若要允许或禁止自动换行

 •	   选定或清除“自动换行”复选框。

� 若要允许或禁止自动缩进

 •	   选定或清除“自动缩进”复选框。

� 若要设置文本对齐方式

 •	   在“对齐方式”框中，选定一个选项。

� 若要设置文本字体

1.在一个打开的编辑窗口中，从“格式”菜单中选择“字体”命令设置字体样式。

2.离开打开的编辑窗口，从“工具”菜单中选择“选项”命令。

3.在“编辑”选项卡中，选择“设置为默认值”按钮。

� 若要设置制表符宽度，

 •	   在“制表符宽度”框中，设置每个制表符可代表的字符数目。

� 若要允许或禁止显示行和列的位置

 •	   选定或清除“显示行／列位置”复选框。

� 若要允许或禁止制作备份文件

 •	   选定或清除“制作备份”复选框。

� 若要允许或禁止在保存前自动编译

 •	   选定或清除“保存前先编译”复选框。

� 若要允许或禁止随文件一起保存文件结束标记

 •	   选定或清除“保存文件尾标记”复选框。

� 若要允许或禁止随文件一起保存终止换行符

 •	   选定或清除“保存换行符”复选框。

� 若要允许或禁止保存文件设置

 •	   选定或清除“保存选择的参数”复选框。

参数设置是为当前编辑工作期保存的，或如果没有激活工作期，那就是为命令窗口保存的。

� 若要允许或禁止文件默认设置

 •	   在“编辑”选项卡中，选择“设置为默认值”按钮。

默认值是为正在编辑的文件类型保存的。例如，如果您正在编辑一个程序文件，则为所有带有 .PRG 扩展名的文件保存此设置。


请参阅

命令窗口 (窗口菜单)

编辑选项卡 (选项对话框)

编辑窗口

MODIFY COMMAND 命令

MODIFY FILE 命令

MODIFY MEMO 命令

MODIFY PROCEDURE 命令


修改表选项

请参阅

可以在“选项”对话框的“数据”选项卡中，或通过使用下表中等价的命令修改表选项：

数据选项卡中的选项	等价命令
以独占方式打开1	SET EXCLUSIVE1
自动保存1	SET AUTOSAVE1
显示字段名	SET HEADINGS
提示代码页	SET CPDIALOG
忽略已删除记录	SET DELETED
Rushmore 优化	SET OPTIMIZE
在索引中不出现重复记录1	SET UNIQUE1
排序序列1	SET COLLATE1
记录计数器间隔	SET ODOMETER
备注块大小1	SET BLOCKSIZE1
浏览窗口刷新时间间隔1	SET REFRESH1
表刷新时间间隔1	SET REFRESH1
SET NEAR1	SET NEAR1
SET EXACT1	SET EXACT1
SET ANSI1	SET ANSI1
文件自动锁定1	SET LOCK1
多个记录锁定1	SET MULTILOCKS1
缓冲	CURSORSETPROP("Buffering",...)
重新处理1	SET REPROCESS1
1 选项仅与当前数据工作期有关。


请参阅

数据选项卡 (选项对话框)

允许或禁止代码页提示

允许或禁止清理数据缓冲区

允许或禁止忽略删除的记录

允许或禁止 Rushmore 优化

允许或禁止显示字段名

允许或禁止唯一索引关键字

允许或禁止独占使用表

设置文件锁定和缓冲

设置备注字段块的大小

设置浏览窗口刷新时间间隔

设置排序序列

设置记录计数器时间间隔

设置表刷新时间间隔


允许或禁止独占使用表

请参阅

� 若要允许或禁止自动以独占方式打开表，

 •	   选定或清除“以独占方式打开”复选框。

 — 或者 —

 •	   使用 SET EXCLUSIVE 命令。


请参阅

数据选项卡 (选项对话框)

SET EXCLUSIVE 命令


允许或禁止清理数据缓冲区

请参阅

� 若要允许或禁止清理数据缓冲区，

 •	   选定或清除“自动保存”复选框。

 — 或者 —

 •	   使用 SET AUTOSAVE 命令。


请参阅

数据选项卡 (选项对话框)

SET AUTOSAVE 命令


允许或禁止显示字段名

请参阅

� 若要允许或禁止显示字段名

 •	   选定或清除“显示字段名”复选框。

 — 或者 —

 •	   使用 SET HEADINGS 命令。


请参阅

数据选项卡 (选项对话框)

SET HEADINGS 命令


允许或禁止代码页提示

请参阅

� 若要允许或禁止在打开表时自动提示输入代码页

 •	   选定或清除“提示代码页”复选框。

 — 或者 —

 •	   使用 SET CPDIALOG 命令。


请参阅

数据选项卡 (选项对话框)

SET CPDIALOG 命令


允许或禁止忽略删除的记录

请参阅

� 若要允许或禁止忽略已做删除标记的记录

 •	   选定或清除“忽略已删除记录”复选框。

 — 或者 —

 •	   使用 SET DELETED 命令。


请参阅

数据选项卡 (选项对话框)

SET DELETED 命令


允许或禁止 Rushmore 优化

请参阅

� 若要允许或禁止 Rushmore 优化

 •	   选定或清除 “Rushmore 优化”复选框。

 — 或者 —

 •	   使用 SET OPTIMIZE 命令。


请参阅

数据选项卡 (选项对话框)

SET OPTIMIZE 命令


允许或禁止唯一索引关键字

请参阅

� 若要允许或禁止唯一索引关键字

 •	   选定或清除“在索引中不出现重复记录”复选框。

 — 或者 —

 •	   使用 SET UNIQUE 命令。


请参阅

数据选项卡 (选项对话框)

SET UNIQUE 命令


设置排序序列

请参阅

� 若要设置排序序列

 •	   在“排序序列”框中，选定排序序列。

 — 或者 —

 •	   使用 SET COLLATE 命令。


请参阅

数据选项卡 (选项对话框)

SET COLLATE 命令


设置记录计数器间隔

请参阅

� 若要设置记录计数器间隔

 •	   在“记录计数器间隔”框中，键入或选定记录的数目。

 — 或者 —

 •	   使用 SET ODOMETER 命令。


请参阅

数据选项卡 (选项对话框)

SET ODOMETER 命令


设置备注字段块的大小

请参阅

� 若要为存储备注字段分配磁盘空间

 •	   在“备注块大小”框中，键入或选定字节数。

 — 或者 —

 •	   使用 SET BLOCKSIZE 命令。


请参阅

数据选项卡 (选项对话框)

SET BLOCKSIZE 命令


设置浏览刷新时间间隔
设置浏览窗口刷新时间间隔

请参阅

� 若要设置浏览窗口刷新时间间隔

 •	   在“浏览窗口刷新时间间隔”框中，键入或选定秒数。

 — 或者 —

 •	   使用 SET REFRESH 命令。


请参阅

数据选项卡 (选项对话框)

SET REFRESH 命令


设置表刷新时间间隔

请参阅

� 若要设置表刷新时间间隔

 •	   在“表刷新时间间隔”框中，键入或选定秒数。

 — 或者 —

 •	   使用 SET REFRESH 命令。


请参阅

数据选项卡 (选项对话框)


比较字符串

请参阅

您可以使用一些 SET 命令设置字符串的比较方式。

� 若要允许或禁止相似比较字符串

 •	   在“字符串比较”区中，选定或清除“SET NEAR”复选框。

 — 或者 —

 •	   使用 SET NEAR 命令。

� 若要允许或禁止精确比较字符串

 •	   在“字符串比较”区中，选定或清除“SET EXACT”复选框。

 — 或者 —

 •	   使用 SET EXACT 命令。

� 若要允许或禁止比较不同长度的填充字符串

 •	   在“字符串比较”区中，选定或清除“SET ANSI”复选框。

 — 或者 —

 •	   使用 SET ANSI 命令。


请参阅

数据选项卡 (选项对话框)

SET ANSI 命令

SET EXACT 命令

SET NEAR 命令


设置文件锁定和缓冲

请参阅

您可以为多用户应用程序指定下列文件锁定和缓冲选项。

� 若要允许或禁止自动文件锁定

 •	   在“锁定和缓冲”区中，选定或清除“文件自动锁定”复选框。

 — 或者 —

 •	   使用 SET LOCK 命令。

� 若要允许或禁止多个记录锁定并确定缓冲方式

1.	在“锁定和缓冲”区中，选定或清除“多个记录锁定”复选框。

2.	如果选定了“多个记录锁定”，从“缓冲”框中选择缓冲方法。

 — 或者 —

 •	   使用 SET MULTILOCKS 命令并用 CURSORSETPROP( ) 函数设置 Buffering 属性。

� 若要为失败的文件或记录锁定操作设置重新处理的方法

 •	   在“重新处理”框中，选择重新处理的方法。

 — 或者 —

 •	   使用 SET REPROCESS 命令。


请参阅

CURSORSETPROP( ) 函数

数据选项卡 (选项对话框)

SET LOCK 命令

SET MULTILOCKS 命令

SET REPROCESS 命令


修改远程数据访问选项

请参阅

您可以使用“选项”对话框中的“远程数据”选项卡，或使用下表所列的等价命令，为视图设计器和连接设计器设置远程数据访问选项。

远程数据选项卡中的选项	等价命令
共享连接	CURSORSETPROP("ShareConnection",...)
取备注字段	CURSORSETPROP("FetchMemo",...)
SQL Update：条件	CURSORSETPROP("WhereType",...)
SQL Update：方法	CURSORSETPROP("UpdateType",...)
每次取的记录数	CURSORSETPROP("FetchSize",...)
要取的最大记录数	CURSORSETPROP("MaxRecords",...)
使用备注字段	CURSORSETPROP("UseMemoSize",...)
成批更新的记录数	CURSORSETPROP("BatchUpdateCount",...)
异步执行	SQLSETPROP("Asynchronous",...)
显示警告信息	SQLSETPROP("DispWarnings",...)
批处理	SQLSETPROP("BatchMode",...)
自动事务处理	SQLSETPROP("Transactions",...)
显示注册信息	SQLSETPROP("DispLogin",...)
连接超时设定	SQLSETPROP("ConnectTimeOut",...)
空闲超时设定	SQLSETPROP("IdleTimeOut",...)
查询超时设定	SQLSETPROP("QueryTimeOut",...)
等待时间	SQLSETPROP("WaitTime",...)


请参阅

CURSORSETPROP( ) 函数

远程数据选项卡 (选项对话框)

设置远程数据连接默认值

设置远程视图默认值

SQLSETPROP( ) 函数


设置远程视图默认值

请参阅

对于远程数据访问，您可以使用“选项”对话框中的“远程数据”选项卡或 CURSORSETPROP( ) 函数，为视图设计器和连接设计器指定下列设置。

� 若要允许或禁止共享连接

 •	   在“远程视图默认值”区中，选定或清除“共享连接”复选框。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 ShareConnection 属性。

� 若要允许或禁止应请求取备注字段，

 •	   在“远程视图默认值”区中，选定或清除“取备注字段”复选框。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 FetchMemo 属性。

� 若要定义 SQL 更新方法，

1.	在“条件”框中，选择更新条件。

2.	在“方法”框中，选择更新方法。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 WhereType 和 UpdateType 属性。

� 若要指定每次取的远程记录的数目

 •	   在“每次取的记录数”框中，键入或选择记录的数目，或者选定“全部”复选框。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 FetchSize 属性。

� 若要指定每次要取记录的最大数目

 •	   在“要取的最大记录数”框中，键入或选定记录的数目，或选定“全部”复选框。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 MaxRecords 属性。

� 若要指定需使用备注字段时的字段大小

 •	   在“长度>=右值时使用备注字段”框中，键入或选择字符的数目。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 UseMemoSize 属性。

� 若要指定批处理更新的远程记录数目

 •	   在“成批更新的记录数”框中，键入或选择记录的数目。

 — 或者 —

 •	   用 CURSORSETPROP( ) 函数设置 BatchUpdateCount 属性。


请参阅

CURSORSETPROP( ) 函数

远程数据选项卡 (选项对话框)


设置远程数据连接默认值

请参阅

对于远程数据访问，您可以使用“选项”对话框中的“远程数据”选项卡或 SQLSETPROP( ) 函数，为视图设计器和连接设计器指定下列连接设置。

� 若要允许或禁止异步执行

 •	   在“连接默认值”区中，选定或清除“异步执行”复选框。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 Asynchronous 属性。

� 若要允许或禁止远程数据警告

 •	   在“连接默认值”区中，选定或清除“显示警告信息”复选框。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 DispWarnings 属性。

� 若要允许或禁止批处理

 •	   在“连接默认值”区中，选定或清除“批处理”复选框。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 BatchMode 属性。

� 若要允许或禁止自动事务处理

 •	   在“连接默认值”区中，选定或清除“自动事务处理”复选框。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 Transactions 属性。

� 若要在用户注册到远程数据时予以提示

 •	   在“显示注册信息”框中，选择某一选项。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 DispLogon 属性。

� 若要为远程数据设置连接超时

 •	   在“连接超时设定”框中，键入或选择秒数。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 ConnectTimeOut 属性。

� 若要为远程数据设置空闲超时

 •	   在“空闲超时设定”框中，键入或选定分钟数。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 IdleTimeOut 属性。

� 若要为远程数据设置查询超时

 •	   在“查询超时设定”框中，键入或选定秒数。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 QueryTimeOut 属性。

� 若要为远程数据设置等待时间

 •	   在“等待时间”框中，键入或选择毫秒数。

 — 或者 —

 •	   用 SQLSETPROP( ) 函数设置 WaitTime 属性。


请参阅

远程数据选项卡 (选项对话框)

SQLSETPROP( ) 函数


修改目录路径和文件位置选项

请参阅

您可以使用“选项”对话框的“文件位置”选项卡，或使用下表中的等价命令，修改目录、路径和文件选项：

文件位置选项卡中的选项	等价命令
默认目录	SET DEFAULT
搜索路径1	SET PATH1
临时文件	TMPFILES
帮助文件	SET HELP
资源文件	SET RESOURCE
转换器	_CONVERTER
菜单生成器	_GENMENU
拼写检查器	_SPELLCHK
生成器	_BUILDER
向导	_WIZARD
1 选项仅在当前数据工作期有效。


请参阅

定向临时文件

文件位置选项卡 (选项对话框)

设置默认目录

设置搜索路径

指定生成器应用程序

指定转换器应用程序

指定帮助文件

指定菜单生成器

指定资源文件

指定拼写检查器

指定向导应用程序


Visual FoxPro 搜索路径

请参阅

当执行代码时，查找数据、过程或其他文件的命令都进行相同的搜索操作。

搜索过程

若要查找过程，Visual FoxPro 在下列位置进行搜索：

 •	   对于表的规则、默认条件、触发器或索引表达式，Visual FoxPro 搜索表所在的数据库中的存储过程。

 •	   在当前应用程序中的过程。

 •	   在当前数据库中的存储过程。

搜索文件

Visual FoxPro 在下列位置中搜索文件：

 •	   当前默认目录。

 •	   当前 Visual FoxPro 搜索路径。


请参阅

文件位置选项卡 (选项对话框)

设置默认目录

设置搜索路径


设置默认目录

请参阅

� 若要打开并设置一个默认目录

1.	选定“默认目录”复选框。

2.	键入默认路径或单击三点按钮，然后选择一个目录。

 — 或者 —

 •	   使用 SET DEFAULT 命令。


请参阅

文件位置选项卡 (选项对话框)

SET DEFAULT 命令


设置搜索路径

请参阅

� 若要设置搜索路径

 •	   在“搜索路径”框中，键入路径或单击三点按钮，并选择一个路径。

 — 或者 —

 •	   使用 SET PATH 命令。


请参阅

文件位置选项卡 (选项对话框)

SET PATH 命令


定向临时文件

请参阅

� 若要为临时文件设置存储位置

 •	   在“临时文件”框中，键入路径或单击“三点”按钮，并选择一个路径。

 — 或者 —

 •	   在配置文件中，使用 TMPFILES 命令。


请参阅

文件位置选项卡 (选项对话框)

用配置文件设置环境


指定帮助文件

请参阅

� 若要指定帮助文件

1.	选择“帮助文件”复选框。

2.	键入路径和帮助文件名或单击三点按钮，并选择一个文件。

 — 或者 —

 •	   使用 SET HELP 命令。


请参阅

文件位置选项卡 (选项对话框)

SET HELP 命令


指定资源文件

请参阅

� 若要指定资源文件

1.	选择“资源文件”复选框。

2.	键入路径和资源文件名或单击三点按钮，并选择一个文件。

 — 或者 —

 •	   使用 SET RESOURCE 命令。


请参阅

文件位置选项卡 (选项对话框)

SET RESOURCE 命令


指定转换器应用程序

请参阅

� 若要设置其他转换器应用程序

 •	   在“转换器”框中，键入路径和文件名或单击三点按钮，并选择一个路径。

 — 或者 —

 •	   使用 _CONVERTER 系统内存变量。


请参阅

_CONVERTER 系统内存变量

文件位置选项卡 (选项对话框)


指定菜单生成器

请参阅

� 若要设置其他菜单生成器程序

 •	   在“菜单生成器”框中，键入路径和文件名或单击三点按钮，并选择一个路径。

 — 或者 —

 •	   使用 _GENMENU 系统变量。


请参阅

_GENMENU 系统内存变量

文件位置选项卡 (选项对话框)


指定拼写检查器

请参阅

� 若要设置拼写检查器

 •	   在“拼写检查器”框中，键入路径和文件名或单击三点按钮，并选择一个路径。

 — 或者 —

 •	   使用 _SPELLCHK 系统变量。


请参阅

_SPELLCHK 系统内存变量

文件位置选项卡 (选项对话框)


指定生成器应用程序

请参阅

� 若要设置其他生成器应用程序

 •	   在“生成器”框中，键入路径和文件名或单击三点按钮，并选择一个路径。

 — 或者 —

 •	   使用 _BUILDER 系统变量。


请参阅

_BUILDER 系统内存变量

文件位置选项卡 (选项对话框)


指定向导应用程序

请参阅

� 若要设置其他向导应用程序

 •	   在“向导”框中，键入路径和文件名或单击三点按钮，并选择一个路径。

 — 或者 —

 •	   使用 _WIZARD 系统变量。


请参阅

_WIZARD 系统内存变量

文件位置选项卡 (选项对话框)


修改表单设计器选项

请参阅

您可以在“选项”对话框的表单选项卡中为新表单修改表单设计器选项的默认值。这些选项应用于在当前数据工作期中设计的任何表单或表单集上。已有的表单使用存储在资源文件中的设置。

若要	请参阅
设置网格和显示选项	设置表单设计器网格和显示选项
设置模板类	设置表单设计器模板类


请参阅

表单设计器

表单选项卡 (选项对话框)

设置表单设计器网格和显示选项

设置表单设计器模板类


设置表单设计器网格和显示选项

请参阅

可用下列选项修改表单设计器的网格和显示方式。

� 若要显示或隐藏默认网格线

 •	   在“网格”区中，选定或清除“网格线”复选框。

� 若要显示或隐藏对齐格线

 •	   在“网格”区中，选定或清除“对齐格线”复选框。

� 若要设置水平网格间距

 •	   在“水平间距”框中，键入或选择象素的数目。

� 若要设置垂直网格间距

 •	   在“垂直间距”框中，键入或选择象素的数目。

� 若要允许或禁止在状态栏中显示选定对象的位置和大小

 •	   选定或清除“显示位置”复选框。

� 若要设置 Tab 键次序

 •	   在 “Tab 键次序”框中，选择某一选项。

� 若要设置度量单位

 •	   在“度量单位”框中，选择某一选项。

� 若要设置最大的设计区

 •	   在“最大设计区”框中，选择显示方案。

为使应用程序具有最大的可移植性，请使用 640×480。


请参阅

表单选项卡 (选项对话框)


设置表单设计器模板类

请参阅

您可以修改下列表单设计器模板类选项。

� 若要指定一个表单集可以继承的可视类库

1.	在“模板类”区中，选定“表单集”复选框。

2.	键入可视类库的路径和文件名或选择一个文件名。

� 若要指定一个表单可以继承的可视类库

1.	在“模板类”区中，选定“表单”复选框。

2.	键入可视类库的路径和文件名或选择一个文件名。

� 若要允许或禁止为新对象自动执行生成器

 •	   选定或清除“生成器锁定”复选框。


请参阅

表单选项卡 (选项对话框)

使用表单模板和表单集模板


修改项目管理器选项

请参阅

您可以在“选项”对话框的“项目”选项卡中修改“项目管理器”选项。

� 若要在项目管理器中通过双击一个文件来运行它

 •	   选择“运行选定文件”复选框。

� 若要在项目管理器中通过双击一个文件来修改它

 •	   选择“修改选定文件”复选框。

� 若要允许或禁止在项目管理器中建新文件时提供向导提示

 •	   选定或清除“向导提示”复选框。


请参阅

项目选项卡 (选项对话框)


为表单设计器设置可视类库和 OLE 选项

请参阅

您可以将可视类库和 OLE 选项应用于表单设计器，这需要使用“选项”对话框的控制选项卡。这些选项仅在 Visual FoxPro 的开发环境中有效。

若要	请参阅
添加或移去可视类库	使用控制选项卡
添加或移去 OLE 控制	使用控制选项卡


请参阅

控制选项卡，选项 (工具菜单)

使用控制选项卡


使用控制选项卡

请参阅

� 若要添加或移去可视类库

1.	在“控制”选项卡中，选定“可视类库”单选钮。

2.	若要添加或移去一个 .VCX 文件，选择“添加”或“移去”按钮。

3.	选定要添加或移去的 .VCX 文件。

此选项没有等价的命令。

� 若要添加或移去一个 OLE 控制

1.	在“控制”选项卡中，选定“OLE 控制”单选钮。

2.	选定或清除“可插入的对象”和“控制”复选框。

3.	选定或清除选定列表中的项。

此选项没有等价命令。


请参阅

控制选项卡，选项 (工具菜单)


修改日期、时间和数值型格式选项

请参阅

您可以使用“选项”对话框的“国际”选项卡，或使用下表中的等价命令，为当前数据工作期修改日期、时间和数值型格式选项：

“国际”选项卡中的选项	等价命令
使用系统设置1	SET SYSFORMATS1
日期格式1	SET DATE1
日期分隔符1	SET MARK TO1
世纪1	SET CENTURY1
12-小时	SET HOURS
24-小时	SET HOURS
秒	SET SECONDS
货币格式1	SET CURRENCY1
货币符号1	SET CURRENCY1
千位分隔符1	SET SEPARATOR1
小数分隔符1	SET POINT1
小数位数1	SET DECIMALS1
星期开始于	SET FDOW
一年的第一周	SET FWEEK
1 选项仅与当前数据工作期有关。


请参阅

国际选项卡 (选项对话框)

设置货币和数字格式

设置日期选项

设置时间选项

使用系统设置


使用系统设置

请参阅

� 若要允许或禁止在日期、时间、货币和数字格式选项中使用系统设置

 •	   选定或清除“使用系统设置”复选框。

 — 或者 —

 •	   使用 SET SYSFORMATS 命令。


请参阅

国际选项卡 (选项对话框)

SET SYSFORMATS 命令


设置日期选项

请参阅

� 若要设置日期格式

 •	   在“日期格式”框中，选择一种日期格式。

 — 或者 —

 •	   使用 SET DATE 命令。

� 若要指定或清除日期分隔符

1.	选定或清除“日期分隔符”复选框。

2.	如果选定了“日期分隔符”复选框，将分隔符字符键入到框中。

 — 或者 —

 •	   使用 SET MARK TO 命令。

� 若要打开或关闭世纪设置

 •	   选定或清除“世纪”复选框。

 — 或者 —

 •	   使用 SET CENTURY 命令。

� 若要设置每周的第一天

 •	   在“星期开始于”框中，选择每周的第一天。

 — 或者 —

 •	   使用 SET FDOW 命令。

� 若要设置一年的第一周

 •	   在“一年的第一周”框中，选择一个选项。

 — 或者 —

 •	   使用 SET FWEEK 命令。


请参阅

国际选项卡 (选项对话框)

SET CENTURY 命令

SET DATE 命令

SET FDOW 命令

SET FWEEK 命令

SET MARK TO 命令


设置时间选项

请参阅

� 若要指定时钟的 12 小时表示法或 24 小时表示法

 •	   选定“12 小时”或“24 小时”单选钮。

 — 或者 —

 •	   使用 SET HOURS 命令。

� 若要允许或禁止显示秒数

 •	   选定或清除“秒”复选框。

 — 或者 —

 •	   使用 SET SECONDS 命令。


请参阅

国际选项卡 (选项对话框)

SET HOURS 命令

SET SECONDS 命令


设置货币和数字格式

请参阅

货币设置显示在“国际”选项卡“货币和数字”区的右上角。您可以更改下列货币和数字格式。

� 若要设置货币格式

 •	   在“货币格式”框中，选择货币格式。

 — 或者 —

 •	   使用 SET CURRENCY 命令。

� 若要设置货币符号

 •	   在“货币符号”框中，输入符号。

 — 或者 —

 •	   使用 SET CURRENCY 命令。

� 若要设置千位分隔符字符

 •	   在“千位分隔符”框中，输入字符。

 — 或者 —

 •	   使用 SET SEPARATOR 命令。

� 若要设置小数分隔符字符

 •	   在“小数分隔符”框中，输入字符。

 — 或者 —

 •	   使用 SET POINT 命令。

� 若要设置小数部分的位数

 •	   在“小数位数”框中，选择小数部分的位数。

 — 或者 —

 •	   使用 SET DECIMALS 命令。


请参阅

国际选项卡 (选项对话框)

SET CURRENCY 命令

SET DECIMALS 命令

SET POINT 命令

SET SEPARATOR 命令


用配置文件设置环境

请参阅

您可以创建 Visual FoxPro 配置文件，定制 Visual FoxPro 环境。配置文件是一个文本文件，默认情况下，它的文件名为 CONFIG.FPW，并且存储在 Visual FoxPro 的启动目录中。您可以更改配置文件的名称和位置，但是您必须随后用命令行开关或 MS-DOS 环境变量指明它。

附注

MS-DOS 环境变量选项不能应用在 Windows NT 中。

在配置文件中所做的任何设置都将忽略在“工具”菜单的“选项”对话框中所做的、体现在系统注册表中的默认设置。配置文件可用于：

 •	   设置 Visual FoxPro 环境。

 •	   定制界面。

 •	   自动启动应用程序。


请参阅

定制界面

默认配置文件

设置 Visual FoxPro 环境

自动启动应用程序


设置 Visual FoxPro 环境

请参阅

借助“工具”菜单的“选项”对话框或使用等价命令，您可以设置大多数环境选项。SET 命令 可用于配置文件中而不必带有 SET 关键字。

� 若要在配置文件中输入 SET 命令

 •	   用等号输入不带 SET 关键字的 SET 命令。

例如，若要设置默认路径，可使用下面的格式：

DEFAULT=C:\VFP

如果想使选项在 Visual FoxPro 启动时生效，需将它们输入到配置文件中。例如，要设置一个用于存储临时文件的目录，则应将 TMPFILES 命令包括到配置文件中。


请参阅

默认配置文件

环境

使用选项对话框设置环境


定制界面

请参阅

您也可以使用配置文件修改 Visual FoxPro 的部分界面。

� 若要更改主窗口的标题

 •	   在您的配置文件中添加 TITLE 命令。

例如，要将 Visual FoxPro 主窗口的标题更改为“Tasmanian Traders，应将下面的命令添加到配置文件中：

TITLE=Tasmanian Traders

� 若要添加时钟

 •	   在配置文件中添加 CLOCK 命令。

有关时钟选项，请参阅 SET CLOCK。

� 若要修改状态栏

 •	   在配置文件中添加 STATUS BAR 命令。

有关状态栏选项的详细内容，请参阅 SET STATUS BAR。


请参阅

默认配置文件

SET CLOCK 命令

SET STATUS BAR 命令


自动启动应用程序

请参阅

有两个配置文件命令用于在 Visual FoxPro 启动时自动启动一个程序或应用程序：_STARTUP 和 COMMAND。

您可以在配置文件中的任何地方对 _STARTUP 系统变量赋值：

_STARTUP=MYAPP.APP

也可以使用 COMMAND 命令，但它必须出现在配置文件的最后一行：

DEFAULT=C:\MYAPP

TITLE=Welcome to My Application

COMMAND=DO MYAPP.APP


请参阅

_STARTUP 系统内存变量

默认配置文件


定制工具栏和功能键

请参阅

Visual FoxPro 包含下列可定制的工具栏：

工具	相关的工具栏	命令
数据库设计器	数据库	CREATE DATABASE
表单设计器	表单控制 表单设计器 调色板 布局	CREATE FORM
打印预览	打印预览
查询设计器	查询设计器	CREATE QUERY
报表设计器	报表控制 报表设计器 调色板 布局	CREATE REPORT
默认情况下，仅“常规”工具栏是可见的。要更改这些工具栏，请参阅定制Visual FoxPro 工具栏。


请参阅

定制 Visual FoxPro 工具栏


激活工具栏或使工具栏不活动

请参阅

� 若要激活一个工具栏

 •	   运行相关的工具。

 — 或者 —

1.	从“查看”菜单中，选择“工具栏”命令。

2.	在工具栏对话框中，选定想要激活的工具栏。

� 若要使一个工具栏失效

 •	   关闭相关的工具。

 — 或者 —

1.	从“查看”菜单中，选定“工具栏”命令。

2.	在“工具栏”对话框中，清除您想使其不活动的工具栏。


请参阅

定制Visual FoxPro工具栏

工具栏 (查看菜单)


Windows 的配置

请参阅

配置选项根据 Windows 版本的不同有所不同。

Windows 3.11 以前的版本

确认 SHARE 已加载。

除了 Windows NT 以外的其他 Windows 版本

在 CONFIG.SYS 文件中，最低设置应为：

 •	   FILES=60

 •	   BUFFERS=10 （带有 SmartDrv）

 •	   BUFFERS=40 （不带 SmartDrv）

Windows NT

支持 Windows NT 3.5 及其更高版本。


请参阅

默认配置文件

指定配置文件

用配置文件设置环境


默认配置文件

请参阅

当安装 Visual FoxPro 时，默认的配置文件 (CONFIG.FPW) 仅只包含如下一行：

COMMAND=DO VFPSTART

VFPSTART.PRG 程序文件可以执行如下三种任务：

1.	通过查看 FOXUSER.DBF 文件中记录的数目确定当前安装 Visual FoxPro 是否是一次新的安装。

2.	如果是新安装，最小化命令窗口并显示新项目。

3.	如果新安装用的是专业版，把“类浏览器”添加到“工具”菜单中。

可以在配置文件 CONFIG.FPW 中替换对 VFPSTART.PRG 的引用。还可根据自已的需要，修改 VFPSTART.PRG 程序。


请参阅

用配置文件设置环境


定制 Visual FoxPro 工具栏

请参阅

可以定制 Visual FoxPro 提供的工具栏。也可以创建由其它工具栏上的按钮组成的自己的工具栏。

� 若要定制 Visual FOxPro 工具栏

1.	从“查看”菜单中，选择“工具栏”。

2.	选择要定制的工具栏，然后选择“定制”。

3.	拖动按钮离开工具栏，将按钮从工具栏中移去。

4.	选择定制工具栏对话框中适当的分类，然后将适当按钮拖动到工具栏上，将按钮添加到工具栏中。

5.	选择“定制工具栏”对话框中的“关闭”选项，关闭工具栏窗口，完成工具栏定制。

提示

如果更改了 Visual FoxPro 工具栏，可以选择“工具栏”对话框中的工具栏，然后选择“重置”，将工具栏还原到原始的按钮配置。

� 若要创建自己的工具栏

1.	从“查看”菜单中，选择“工具栏”选项。

2.	选择“新建”。

3.	在“新建工具栏”对话框中，为工具栏命名。

4.	选择“定制工具栏”对话框中的一个分类，然后拖动适当的按钮到工具栏上，将按钮添加到工具栏中。

5.	如果必要的话，拖动工具栏上的按钮来重排按钮。

6.	选择“定制工具栏”对话框的“关闭”选项关闭工具栏窗口，完成工具栏。

附注：

不能重置创建的工具栏按钮。

� 若要删除创建的工具栏

1.	从“查看”菜单中，选择“工具栏”。

2.	选择要删除的工具栏。

3.	选择“删除”选项。

4.	选择“确定”按钮以确定删除。

附注

不能删除 Visual FoxPro 提供的工具栏。


请参阅

定制工具栏和功能键

定义工具栏类


对系统进行优化

请参阅

优化 Visual FoxPro 系统最有效的方法是提供尽可能多的内存。Visual FoxPro 可以利用大量的计算机内存。如果您的计算机具有扩展内存并进行了正确的配置，那么将极大地增强 Visual FoxPro 的性能。

若要最大限度地提高性能，应遵循下列准则：

 •	   当运行 Visual FoxPro 时不要运行任何其他 Windows 应用程序。

 •	   不要使用 RAM 驱动器。

 •	   不要使用扩充内存（expanded-memory）管理程序。

 •	   仅使用操作所必需的常驻内存程序。

 •	   使用不大于 1048K 的磁盘高速缓存。

若要在带有 8 MB 内存的机器上达到最佳性能：

 •	   使用一个 8 MB 的永久交换文件作为虚拟内存。

如果创建了一个小的高速缓存（大约 128 KB），则可以使用一个 6 MB 交换文件。

若要在带有 12 MB 或更多内存的机器上达到最佳性能：

 •	   不使用交换文件作为虚拟内存。将虚拟内存设置为零。


请参阅

优化 Visual FoxPro 性能


优化关键的 SET 命令

请参阅

调整某些 SET 命令的值可以优化 Visual FoxPro 的操作。

下表显示了对性能影响最大的 SET 命令，以及可确保最佳性能的相应设置。要指定这些值，可以在 CONFIG.FPW 文件中包含 SET 命令，或在命令窗口中键入 SET 命令，也可以在“选项”对话框中进行设置。

SET 命令	性能设置
SET DOHISTORY	OFF
SET ESCAPE	ON
SET OPTIMIZE	ON
SET REFRESH TO	0,0
SET STATUS BAR	OFF
SET STATUS	OFF
SET SYSMENU TO	DEFAULT
SET TALK	OFF
SET VIEW	OFF


请参阅

优化关键的 SET 命令

SET DOHISTORY 命令

SET ESCAPE 命令

SET OPTIMIZE 命令

SET REFRESH 命令

SET STATUS BAR 命令

SET STATUS 命令

SET SYSMENU 命令

SET TALK 命令

SET VIEW 命令


在多用户环境中共享表

请参阅

在多用户环境中，采用不同的文件和记录加锁方式来访问文件对性能会有不同的影响。使用 USE 和 OPEN DATABASE 命令的 EXCLUSIVE 子句可以提高性能。

Visual FoxPro 自动使用 VSHARE，由它管理文件和锁定的参数，并对非共享文件启用缓冲。如果不加载 VSHARE，应确保在 AUTOEXEC.BAT 文件中加载 SHARE。

在允许共享，并将 EXCLUSIVE 设置为 OFF 时，共享驱动器上的表可被打开，供多用户访问。如果属于这种情况，那么下面的命令可以共享方式打开表 CUSTOMER.DBF：

USE c:\customer.dbf

Visual FoxPro 可以缓冲针对非共享文件的写操作，因而提高性能。若要提高 APPEND，REPLACE 和 DELETE 命令的性能，请使用 USE 或 OPEN 命令的 EXCLUSIVE 子句打开本地表或数据库，如下例所示：

OPEN DATABASE mycompany EXCLUSIVE

USE c:\customer.dbf EXCLUSIVE

如果使用了 SHARE，则必须将 VFP.EXE 设置成只读的，并且必须提供足够大的文件和记录参数，如下例所示：

SHARE /F:5100 /L:500


请参阅

OPEN DATABASE 命令

USE 命令


清理 Visual FoxPro 环境

请参阅

如果您希望关闭所有的操作，并回到 Visual FoxPro 启动时的状态，可在命令窗口中，按顺序发出如下命令。

CLEAR ALL

CLOSE ALL

CLEAR PROGRAM

CLEAR ALL 从内存中移去所有对象，从而关闭所有私有数据工作期和临时表。

当 CLEAR ALL 已经成功执行完后，CLOSE ALL 关闭数据工作期 1 （Visual FoxPro 的默认数据工作期）中的所有数据库、表和临时表。

CLEAR PROGRAM 清除最近执行的程序的编译程序缓冲区。CLEAR PROGRAM 强制 Visual FoxPro 从磁盘中读取程序，而不是从程序缓冲区中读取。

在事务期间清除

如果事务正在执行中，在执行以上三条命令前，对每级事务使用 END TRANSACTION 命令。

在缓冲区更新期间清除

如果在缓冲区更新数据过程中，执行以上三条命令前，对每个带有更新缓冲区数据的临时表使用 TABLEUPDATE( ) 或 TABLEREVERT( ) 函数。


请参阅

CLEAR 命令

CLOSE 命令

END TRANSACTION 命令

优化 Visual FoxPro 性能

TABLEUPDATE( ) 函数

TABLEREVERT( ) 函数


用户指南中的更改
对《用户指南》的更改

请参阅

在“文件”菜单中选择“打印标题”命令，您可以打印这个更改概述。这里的更改是按章节、页码和部分组织的。


请参阅

打印文档的更改

开发指南的更改

安装指南的更改


开发指南中的更改
对《开发指南》的更改

请参阅

在“文件”菜单中选择“打印标题”命令，您可以打印这个更改概述。这里的更改是按章节、页码和部分组织的。

第二章：语言概述

Page 32  在“日期时间型数据类型”部分，将第一段的第二句用下面的句子代替：

日期时间型值存贮为八字节（两个四字节）的整数。前面的四字节代表日期。后面的四字节从午夜起按毫秒计算的时间。

Page 34  在第一段中，将 .DBT 改为 .FPT。

Page 37  在“记录”部分，将“若要创建记录”过程用下面的内容代替：

若要创建记录

�	使用 INSERT - SQL 命令或 APPEND 命令。

Page 39  在“字符操作符”表中，将第二行用下列内容代替：

-	连接。将操作符前面的元素的空格去掉，然后将两个元素连接起来。	? customer.first - customer.last
Page 42  在页的上部列表下面的第一句中，将“另一种引号”用下面内容代替：

另一种字符串分隔符 [ ] 或

Page 43  在“创建名称表达式”部分，将最后一段用下段代替：

Visual FoxPro 将字段名 city 存储到变量 cVarCity，然后将 city 字段中的值用 "Paris" 代替，city 是名称表达式 cVarCity 的值。

Page 45  将其中的两个过程用下面的过程代替：

若要按引用方式传递参数

�	在调用 UDF 之前键入下面的命令：

SET UDFPARMS TO REFERENCE

— 或者 —

�	用 @ 符号按引用传递变量或数组，如下例所示：

? "UDF value: " + STR(plusone(@nX))

若要按值方式传递参数

�	在调用 UDF 之前键入下面的命令：

SET UDFPARMS TO VALUE

— 或者 —

�	用括号按值传递变量或数组，如下例所示：

? "UDF value: " + STR(plusone((nX)))

Page 49  在“处理类和对象”部分，将 ADD OBJECT 的说明用下段代替：

在设计时基于已存在的类或子类添加对象。

第七章：处理表

Page 177  在“临时筛选数据”部分，在最后一段最后一句前插入下面这句：

若要关闭当前表的筛选器，您可以使用 SET FILTER TO 命令，不要带表达式。

第九章：创建表单

Page 225  在“常用数据环境属性”部分，将表后面的符号去掉。

Page 239  在“编辑事件代码和方法代码”部分，删除下面这句：

方法代码中的 RETURN 语句只在为下列事件编写的代码中有效：Init、Valid 和 When，其他情况将被忽略。

Page 243  在“在对象层次上引用对象”部分，删除两段和示例。

Page 245  在“在运行时调用方法”部分，在示例前添加下面的代码：

* 表单集保存在 MYF_SET.SCX 中

第十章：设计类

Page 272  在“调用父类方法代码”部分的最后添加下面的内容：

如果您想忽略容器类中控制的方法代码，您可以用容器的 Class 属性、作用域操作符和控制的 Name 属性，来调用控制的方法：

ContainerClass::ControlName.MethodName( )

例如，如果您想用“表单向导”向表单中添加文字按钮，在表单中就添加了一个基于 Txtbtn 类的文字按钮，该类在 WIZSTYLE.VCX 中。若想让 Next 按钮保留按钮原来的功能，可在 cmdNext 的 Click 事件代码中包含下面一行：

txtbtn::cmdNext.Click( )

第十一章：使用控制

Page 312  在“设置控制的 Tab 键次序”部分的最后添加下面内容：

您可以设置控制组中的选项按钮和命令按钮的选定顺序。用键盘移动到一个控制组时，用户用制表键选择控制组的第一个按钮，然后用箭头键选择控制组中的其他按钮。

若要改变控制组中按钮的选择次序

1.	 在属性窗口中，在对象列表中选中控制组。粗边框表明组处于编辑状态。

2.	选中“表单设计器”窗口。

3.	从“查看”菜单中选择“Tab 键次序”。

4.	按照您的需要设置控制的选择次序。

第十八章：添加 OLE

Page 404  在“添加绑定型或非绑定型 OLE 对象”部分，将第二句中的“通用型字段的内容”改为“通用型字段中的 OLE 对象的内容”。

Page 413  在“总结”部分，将代码中第十六行的 "4100" 改为 " − 4100"。


请参阅

打印文档的更改

安装指南的更改

用户指南的更改


安装指南中的更改
对《安装指南》的更改

请参阅

在“文件”菜单中选择“打印标题”命令，您可以打印这个更改概述。这里的更改是按章节、页码和部分组织的。

第三章：配置 Visual FoxPro

Page 20  在“指定配置文件”部分的最后，将“使用配置文件”改为“用配置文件设置环境”。


请参阅

打印文档的更改

开发指南的更改

用户指南的更改


语法约定

本资料使用下列印刷约定：

示例	约定
DELETE	命令名、命令中的关键字、首字母缩略词、常量和设备名称等用大写字母表示。
DELETED( )	函数名用大写字母后跟括号表示。
AUTOEXEC.BAT C:\DOS\AUTOEXEC.BAT	文件名用大写字母表示。用反斜杠隔开的大写字母表示路径名。
Press CTRL+ALT+F1	小号的大写字母表示键名。加号 ( + ) 表示组合键。
BackColor	首字母大写表示对象、属性、事件或方法的名称。若名称中包含多个单词，则将各个首字母大写的单词连接起来。
BROWSE FIELD location	等宽字体表示所键入的命令行、示例程序以及文本中对示例程序的引用。
USE customer	数据库、表和字段的名称用小写字母表示。
nTotal, cName	变量名和数组元素名的小写前缀表明它们的数据类型： c 代表字符型， n 代表数值型， l 代表逻辑型， d 表示日期型， t 表示时间型， y 表示货币型， a 表示数组， e 表示表达式。
DELETE VIEW ViewName	在语法项中，斜体单词为占位符，使用时要用实际信息代替。若占位符包含多个单词，则将各个首字母大写的单词连接起来。
[STYLE cStyleName]	在语法项中，方括号所括的是可选项。
SET BELL ON | OFF	在语法项中，由垂直线所隔开的两个选项中只能包含一个。
[, WindowName2 ...]	在语法项中，省略号表示列表中可包含任意数目的参数。各参数间用逗号隔开。


使用示例程序

很多语言帮助主题中包含有代码示例，这些代码示例可以在程序窗口中运行。要运行示例程序，必须先安装系统提供的示例文件。有关安装示例文件的内容，请参阅《安装指南》第一章“安装 Visual FoxPro”。若要查看这些示例文件，可在“帮助”工具栏中单击“示例”按钮。

� 若要运行代码示例程序

1.	在主题的帮助窗口的上部，单击绿色显示的“示例”。

此时将出现“示例”窗口。

2.	单击“示例”窗口中“复制”按钮。

此时将出现“复制”窗口。

3.	使用鼠标选择想要运行的示例代码，然后再按下“复制”按钮。

4.	在 Visual FoxPro 的命令窗口中单击，并键入 MODIFY COMMAND 命令，打开一个程序窗口。

— 或者 —

在 Visual FoxPro 的“文件”菜单中选择“新建”，然后在“新建”对话框中单击“程序”选项按钮，最后单击“新文件”按钮。

5.	在 Visual FoxPro 的“编辑”菜单中选择“粘贴”。

代码被粘贴到程序窗口中。

6.	单击“运行”按钮。

系统将提示您为该程序命名并且保存它。保存之后，将运行该程序。


#DEFINE ... #UNDEF 预处理器命令

请参阅	示例

创建和释放编译期间所用的常量。

语法

#DEFINE ConstantName eExpression
...
#UNDEF ConstantName

参数

ConstantName

指定编译期间所用的常量名。常量名必须是合法的 Visual FoxPro 常量名，第一个字符为字母或下划线，其他字符可以是字母、数字、或下划线，最长可达 254 个字符。为提高程序的可读性和简化调试过程，应对常量名使用大写字母并遵循标准命名约定。

重要内容

请不要使用 Visual FoxPro 关键字作常量名。

要取消用 #DEFINE 定义的编译期间常量，可使用 #UNDEF ConstantName。

eExpression

指定编译期间所用常量的值。eExpression 可以是一个名称或一个表达式。表达式的值可以是字符、数值、货币、日期、日期时间或逻辑值等。

重要内容

请不要在 eExpression 中使用系统内存变量。系统内存变量只有在运行时才具有值。

说明

#DEFINE 和 #UNDEF 预处理器命令在程序中用来定义和取消编译期间所用的常量。用 #DEFINE 定义编译期间所用常量，同使用内存变量相比，能够减少内存消耗，简化程序并增强程序运行性能。

要使用 #DEFINE 定义常量，应该用 ConstantName 给出常量名，并用 eExpression 指定它的值表达式。编译程序时将执行文本替换，把程序中任何出现常量名的地方都用常量表达式替换过来。在程序中添加 #UNDEF 命令可以停止这种替换。

上述替换只在定义常量的 #DEFINE 语句行与取消该常量的 #UNDEF 语句行之间发生。常量只在定义该常量的程序中有效。

如果 #DEFINE 语句放在表单的一个事件或方法过程中，则定义的编译时间常量只在该事件或方法的过程中有效。要使得 #DEFINE 语句定义的编译常量对表单中所有事件和方法过程都有效，请从“表单”菜单中选择“包含文件”菜单项，并指定一个头文件来包含 #DEFINE 编译时间常量。


* 下面的程序定义了一个名为 MAXITEMS 的编译时间常量。该
* 常量在 FOR ... NEXT 循环中用来显示数值 1 到 10 。

#DEFINE MAXITEMS 10

CLEAR

FOR gnCount = 1 TO MAXITEMS

? gnCount

NEXT


请参阅

COMPILE，#IF ... #ENDIF，#IFDEF | #IFNDEF ... #ENDIF


 #IF ... #ENDIF 预处理器命令

请参阅	示例

在编译时根据条件决定是否编译某段源代码。

语法

#IF nExpression1 | lExpression1
Commands
[#ELIF nExpression2 | #ELIF lExpression2
Commands
 ...
#ELIF nExpressionN | #ELIF lExpressionN
Commands]
[#ELSE
Commands]
#ENDIF

参数

#IF nExpression1 | lExpression1
Commands

nExpression1 给出了要计算的数值表达式。

 •	   如果该表达式的值不为零，则编译紧接在 #IF 命令后面的程序。然后退出 #IF ... #ENDIF 结构，接着编译 #ENDIF 命令后面的程序。

 •	   如果该表达式的值为 0，则不编译紧接在 #IF 命令后面的程序，而计算 #ELIF 命令后的表达式。

lExpression1 给出要计算的逻辑表达式。

 •	   如果逻辑表达式的值为“真”(.T.)，则编译紧接在 #IF 命令后面的程序。然后退出 #IF ... #ENDIF 结构，接着编译 #ENDIF 命令后面的程序。

 •	   如果逻辑表达式的值为“假”(.F.)，则不编译紧接在 #IF 命令后面的程序，而计算 #ELIF 命令后的表达式。

附注

请不要为 nExpression1 和 lExpression1 指定系统内存变量。因为系统内存变量只有在运行时才具有值。

#ELIF nExpression2 | #ELIF lExpression2
Commands

 ...

#ELIF nExpressionN | #ELIFlExpressionN
Commands

如果表达式 nExpression1 的值为 0，或者表达式 lExpression1 的值为“假”(.F.)，则计算 #ELIF 命令。如果存在 nExpression2 或 lExpression2，则计算 #ELIF 命令中表达式的值。如果表达式 nExpression2 的值不为 0，或者表达式 lExpression2 的值为“真”，则编译在 #ELIF 命令后的程序代码，然后退出 #IF ... #ENDIF 结构，接着编译 #ENDIF 命令后面的程序。

如果表达式 nExpression2 的值为 0，或者表达式 lExpression2 的值为“假”(.F.)，则不编译 #ELIF 命令后的程序，而继续处理下一个 #ELIF 命令。

#ELSE Commands

如果没有 #ELIF 命令，或者全部 #ELIF 命令的表达式计算结果都为 0 或都为“假”(.F.)，#ELSE 的存在与否将决定 #IF ... #ENDIF 结构中是否有其他需要编译的程序。

 •	   如果存在 #ELSE 语句，则编译紧接在 #ELSE 命令后面的程序代码。

 •	   如果不存在 #ELSE 语句，在 #IF 和 #ENDIF 之间则没有要编译的代码。退出 #IF ... #ENDIF 结构后，编译从 #ENDIF 后面的第一行程序继续进行。

#ENDIF

表示 #IF 语句的结束。

说明

#IF ... #ENDIF 能够提高源代码的可读性，缩小编译后程序的大小，以及在某些情况下提高程序的运行性能。

编译 #IF ... #ENDIF 结构时，首先计算该结构中的一系列逻辑表达式或数值表达式的值，这些表达式的计算结果将决定编译哪些 Visual FoxPro 程序（如果存在）。


*在下面的示例中，使用 #IF ... #ENDIF 结构确定使用哪个
*  Visual FoxPro 版本编译程序，并显示相应的信息。

#IF 'WINDOWS' $ UPPER(VERSION( ))

? 'This was compiled under Visual FoxPro'

#ELIF 'MAC' $ UPPER(VERSION( ))

? 'This was compiled under FoxPro for Macintosh'

#ELIF 'UNIX' $ UPPER(VERSION( ))

? 'This was compiled under FoxPro for UNIX'

#ELSE

? 'This was compiled under FoxPro for MS-DOS'

#ENDIF


请参阅

COMPILE，#DEFINE ... #UNDEF，#IFDEF | #IFNDEF ... #ENDIF


#IFDEF | #IFNDEF ... #ENDIF 预处理器命令

请参阅	示例

编译期间，根据是否定义了某一个编译常量，决定一段代码是否要编译。

语法

#IFDEF | #IFNDEF ConstantName
Commands
[#ELSE
Commands]
#ENDIF

参数

#IFDEF

指定如果已定义了 ConstantName 指定的编译常量，则编译一段程序代码。

下面描述如何根据 #IFDEF 预处理器命令确定要编译的程序代码：

 •	   如果定义了 ConstantName，则要编译从 #IFDEF 到 #ELSE 或者 #ENDIF （取决于哪个在前面）之间的程序代码。

 •	   如果没有定义 ConstantName，但有 #ELSE 命令，则编译 #ELSE 到 #ENDIF 之间的程序代码。

 •	   如果没有定义 ConstantName，也没有 #ELSE 命令，则 #IFDEF ... #ENDIF 结构中的所有程序都不编译。

#IFNDEF

当没有定义 ConstantName 指定的编译常量时，指定要编译的一组程序代码。

下面描述如何根据 #IFNDEF 预处理器命令决定要编译的程序代码：

 •	   如果没有定义 ConstantName，则编译 #IFNDEF 到 #ELSE 或者 #ENDIF（取决于哪个在前面）之间的程序代码。

 •	   如果已经定义了 ConstantName，并且有 #ELSE 命令，则编译 #ELSE 到 #ENDIF 之间的程序代码。

 •	   如果定义了 ConstantName，但没有 #ELSE 命令，则 #IFNDEF ... #ENDIF 结构中的所有程序都不编译。

ConstantName

指定编译时间所用的常量。它的存在决定了是否编译某一组程序代码。编译常量由 #DEFINE 命令定义。

Commands

指定要编译的程序代码。

说明

一个 #IFDEF | #IFNDEF ... #ENDIF 结构可以嵌套另一个#IFDEF | #IFNDEF ... #ENDIF 结构。

注释可以放在 #IFDEF、#IFNDEF、#ELSE 和 #ENDIF 所在行的后面。这些注释在编译和程序运行期间将被忽略。


*下面的示例定义了一个编译常量 MYDEFINE。如果定义了
* 这一编译常量，#IFDEF ... #ENDIF 将显示一条信息。

#DEFINE MYDEFINE 1

#IFDEF MYDEFINE

WAIT WINDOW "MYDEFINE exists"

#ELSE

WAIT WINDOW "MYDEFINE does not exist"

#ENDIF


请参阅

COMPILE，#DEFINE ... #UNDEF，#IF ... #ENDIF，*


#INCLUDE 预处理器命令

请参阅	示例

告诉 Visual FoxPro 预处理器去处理指定头文件的内容，就好象头文件中的内容出现在 Visual FoxPro 程序中一样。

语法

#INCLUDE FileName

参数

FileName

指定头文件的文件名。头文件在编译时将合并到程序中去。

头文件名中可以包含路径。当头文件名中包含路径时，Visual FoxPro 只在指定路径里寻找头文件。

如果头文件名中不包含路径，则 Visual FoxPro 首先在默认的 Visual FoxPro 目录中寻找头文件，然后沿着 Visual FoxPro 路径寻找。Visual FoxPro 路径用 SET PATH 指定。

说明

您可以创建包含预处理器命令的头文件，然后在编译程序时用 #INCLUDE 命令把它的内容合并到程序中去。编译时，头文件的内容放在程序中 #INCLUDE 命令出现的位置。

头文件中，只有 #DEFINE ... #UNDEF 和 #IF ... #ENDIF 预处理器命令有效。头文件中的注释和 Visual FoxPro 命令无效。

一个程序可以包含任意多个 #INCLUDE 命令，并且这些命令可以出现在程序中的任何位置。#INCLUDE 命令也可以出现在头文件中。Visual FoxPro 允许嵌套 #INCLUDE 命令。

头文件一般具有 .H 扩展名，但是也可以带其他扩展名。Visual FoxPro 提供了一个头文件 FOXPRO.H，它包含了本文档中所提到的许多常量。


*下面的示例中使用了两个文件，一个是头文件
* CONST.H，一个是程序文件 MYPROG.PRG。头文件
* 中包含了几个创建编译常量的 #DEFINE 命令。程序文
* 件使用 #INCLUDE 命令包含头文件 CONST.H，这样，
* 在编译时程序可以获得头文件中的所有编译常量。

*** 头文件 CONST.H ***

#DEFINE ERROR_NODISK	    1

#DEFINE ERROR_DISKFULL  2

#DEFINE ERROR_UNKNOWN  3

*** 程序文件 MYPROG.PRG ***

#INCLUDE CONST.H

FUNCTION chkerror

PARAMETER errcode

  DO CASE

    CASE errcode = ERROR_NODISK

      ?"Error - No Disk"

    CASE errcode = ERROR_DISKFULL

      ?"Error - Disk Full"

    CASE errcode = ERROR_UNKNOWN

      ?"Unknown Error"

  ENDCASE

RETURN


请参阅

#DEFINE ... #UNDEF，#IF ... #ENDIF，#IFDEF | #IFNDEF ... #ENDIF


:: 作用域操作符

请参阅	示例

在子类方法中运行父类的方法。

语法

cClassName::cMethod

说明

操作符 :: 用来从子类方法中执行父类的方法。在创建一个子类时，子类方法可以通过自动继承父类方法来得到。操作符 :: 使您在子类方法中执行完父类方法后，还能执行子类方法的其他一些操作。示例的子类定义演示了如何使用操作符 :: 在子类方法中执行父类方法。

有关作用域操作符 :: 的详细内容，请参阅《开发指南》的第三章“面向对象程序设计”，和第十章“设计类” 。


*在下面的示例中，由 Visual FoxPro 基类 Form 派生了一个名为
* MyForm 的子类，并在其中创建了 Click 方法。因此，在单击
*  MyForm 时，将显示出一个等待窗口。

*此后，基于子类 MyForm，又创建了一个新的子类
*  AnotherForm。在子类 AnotherForm 的 Click 方法中，
* 加入如下程序行来执行父类的 Click 方法：

* MyForm::Click

*执行父类的 Click 方法（显示一个等待窗口）后，
* 接着执行其他代码，改变表单的背景色。

DEFINE CLASS MyForm AS FORM

.

.

PROCEDURE Click

WAIT WINDOW 'MyForm has been clicked'

ENDPROC

ENDDEFINE

DEFINE CLASS AnotherForm AS MyForm

.

.

PROCEDURE Click

MyForm::Click

This.BackColor = This.BackColor+1

ENDPROC

ENDDEFINE


请参阅

ADD CLASS，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，DEFINE CLASS，GETOBJECT( )，MODIFY CLASS，RELEASE CLASSLIB，SET CLASSLIB，WITH ... ENDWITH


$ 操作符

请参阅	示例

如果一个字符表达式包含在另一个字符表达式中，则返回“真”(.T.)；否则，返回“假”(.F.)。

语法

cSearchFor $ cSearchIn

返回值类型

逻辑型

参数

cSearchFor

指定要在 cSearchIn 中查找的字符表达式。

cSearchIn

指定要在其中查找是否包含 cSearchFor 的字符表达式。

如果在 cSearchIn 中找到了 cSearchFor，则 $ 返回“真”(.T.)；否则，返回“假”(.F.)。cSearchIn 和 cSearchFor 可以是字符型内存变量或数组元素、字符型字段、原义字符串、或任意长度的备注型字段。

备注型字段可以象字符表达式、表中字段、内存变量以及数组元素一样操作。例如，如果 MEMO_FLD 是一个备注型字段，则下面的语句有效：

LIST FOR 'FOX' $ UPPER(memo_fld)

说明

如果没有找到字符表达式，则返回“假”(.F.)。操作符 $ 区分大小写，但不能进行 Rushmore 优化。


*下面的示例创建一个名为 memotest 的表，该表包含
* 一个备注型字段。先往表中追加三条记录，再用
*  LIST 命令显示这三条记录。美元符号 ($) 用来列出
* 所有包含“FOX”字符串的记录。最后，删除为本例
* 创建的文件。

CLOSE DATABASES

CLEAR

CREATE TABLE memotest (Text C(3), Memo M)

INSERT INTO  memotest (Text, Memo) VALUES ('Fox', 'Fox')

INSERT INTO  memotest (Text, Memo) VALUES ('Cat', 'Cat')

INSERT INTO  memotest (Text, Memo) VALUES ('FOX', 'FOX')

LIST FIELDS  Memo, Text FOR 'FOX' $ UPPER(Memo)

USE

DELETE FILE memotest.dbf

DELETE FILE memotest.fpt


请参阅

AT( )


% 操作符

请参阅	示例

返回两个数值表达式相除的余数。

语法

nDividend % nDivisor

参数

nDividend

给出被除数（被除的数值表达式）。被除数 nDividend 中的小数位数决定了计算结果中的小数位数。

nDivisor

给出除数（除被除数 nDividend 的数值表达式）。当 nDivisor 为正数时，返回值为正数；当 nDivisor 为负数时，返回值为负数。除数 nDivisor 不能为零。

说明

取余操作符 (%) 和 MOD( ) 返回相同的结果。

取余操作符 (%) 是一个算术操作符。算术操作符还有：+（加法）、-（减法）、*（乘法）、/（除法）和 ^（乘幂）。当数值表达式中包含这些操作符时，% 和 *、/ 的优先级相同。有关操作符及其优先级顺序的详细内容，请参阅操作符主题或《开发指南》的第二章“语言概述”。


? 36 % 10	&& Displays 6

? (4*9) % (90/9)	&& Displays 6

? 25.250 % 5.0	&& Displays 0.250

? IIF(YEAR(DATE( )) % 4 = 0, 'Summer Olympics this year';

, 'No Summer Olympics this year')


请参阅

MOD( )


& 命令

请参阅	示例

执行宏替换。

语法

& MemVarName [.cExpression]

参数

& MemVarName

指定宏替换中引用的内存变量名或数组元素名。请不要加上用于区分内存变量与字段的前缀 M.，否则将产生语法错误。宏的长度不要超过 Visual FoxPro 中允许的最大语句长度。

在宏替换中，变量不能递归引用其自身。例如，下列语句将产生错误信息：

STORE '&gcX' TO gcX

? &gcX

出现在 DO WHILE、FOR 和 SCAN 中的宏替换语句只在循环开始时计算值，在后续的循环中则不再计算值。因此在循环内改变内存变量和数组元素的值对宏替换都无效。

.cExpression

句点分隔符 (.) 和 cExpression 选项可用来在宏后面追加额外的字符。使用 .cExpression 附加在宏后面的 cExpression 也可以是一个宏。

说明

宏替换把内存变量和数组元素中的内容当作原义字符串。当连字符 (&) 位于字符型内存变量或数组元素前面时，内存变量和数组元素的内容将替代宏引用。宏替代可用在任何接受原义字符串的命令和函数中。

提示

请尽可能使用名称表达式来取代宏替换。名称表达式与宏替换作用相似，但是，名称表达式限于传递作为名称的字符串。当命令或函数接受名称（文件名、窗口名、菜单名等）时，使用名称表达式的处理速度要明显快得多。有关名称表达式的详细内容，请参阅《开发指南》的第二章“语言概述”。

下列代码可以正确执行：

STORE 'customer' TO gcTableName

STORE 'company'  TO gcTagName

USE &gcTableName ORDER &gcTagName

但是可以使用名称表达式代替：

USE (gcTableName) ORDER (gcTagName)

宏替换对于替换命令中的关键字是很有用的。在下面的示例中，把 TALK 设置保存在内存变量中，以便后面的程序能够恢复它。TALK 的原始设置使用宏替换恢复。


STORE SET('TALK') TO gcSaveTalk

SET TALK OFF

*

* 其他程序代码

*

SET TALK &gcSaveTalk  && Restore original TALK setting


请参阅

STORE


&& 命令

请参阅	示例

标明程序文件中非执行的内部注释的开始。

语法

&& [Comments]

参数

&& [Comments]

标明其后是内部注释。例如：

STORE (20*12) TO gnPayments  && 20年月工资之和

通过插入内部注释来标明 IF ... ENDIF、DO 和FOR ... ENDFOR 等结构化命令的结束，能够大大地提高程序的可读性。

说明

在注释行的后面加入分号 (;)，表明下一行也是注释行。不能在命令行续行的分号后面加入 && 和注释。


附注：初始化页码;
变量

STORE 1 to gnPageNum

* 建立循环

DO WHILE gnPageNum <= 25  && 循环 25 次

gnPageNum = gnPageNum + 1

ENDDO  && DO WHILE gnPageNum <= 25


请参阅

*，MODIFY COMMAND，MODIFY FILE，NOTE


* 命令

请参阅	示例

标明程序文件中非执行的注释行的开始。

语法

* [Comments]

参数

Comments

给出注释行中的注释，例如:

*	这是一行注释

说明

在注释行的后面加入分号 (;)，表明下一行也是注释行。


* 初始化页码;
变量

STORE 1 to gnPageNum

* 建立循环

DO WHILE gnPageNum <= 25  && 循环 25 次

gnPageNum = gnPageNum + 1

ENDDO  && DO WHILE gnPageNum <= 25


请参阅

&&，MODIFY COMMAND，MODIFY FILE，NOTE


= 命令

请参阅

计算表达式的值。

语法

= Expression1 [, Expression2 ...]

参数

Expression1 [, Expression2 ...]

指定 = 命令计算的表达式。

说明

= 命令计算一个或多个表达式的值，并且放弃返回值。这个命令对于那些只须获得所需效果，而不需要把返回值赋给内存变量、数组元素或字段的 Visual FoxPro 函数和用户自定义函数是非常有用的。

例如，要使用插入方式，可以发布命令：

= INSMODE(.T.)

正常情况下，INSMODE 返回“真”(.T.) 或“假”(.F.)。但在上述示例中，函数执行后舍弃了返回值。

附注

等号 (=) 还有其他两个与以上所述无关的用法。它可用在逻辑表达式中作为比较操作符，还可用来给内存变量和数组元素赋值。在这两种情况下，等号 (=) 是一个操作符而不是一个命令。


请参阅

EVALUATE


\ | \\ 命令

请参阅	示例

输出文本行。

语法

 \TextLine
 — 或者 —
 \\TextLine

参数

 \TextLine

如果使用 \，文本行输出时先输出一个回车符和一个换行符。

 \\TextLine

如果使用 \\，文本行输出前不回车换行。

\ 和 \\ 前面的空格不包含在输出行中，但是 \ 和 \\ 之后的空格包含在输出行中。

可以在文本行中嵌套一个表达式。如果表达式放在文本合并分隔符（默认情况下为<< >>）之内，并且 SET TEXTMERGE 设置为 ON，则计算表达式的值，并将结果以文本形式输出。

说明

\ 和 \\ 简化了 Visual FoxPro 中的文本合并过程。文本合并允许把文本输出到一个文件，并以此创建套用信函或程序。

使用 \ 和 \\ 可以把文本行输出到当前的文本合并输出文件或屏幕。SET TEXTMERGE 用来指定文本合并输出文件。如果没有为文本合并指定文件，那么文本行将只输出到 Visual FoxPro 的主窗口中，或者输出到活动的用户自定义输出窗口中。SET TEXTMERGE NOSHOW 用来禁止输出到 Visual FoxPro 主窗口，或者输出到活动的用户自定义窗口。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

SET TEXTMERGE ON

SET TEXTMERGE TO letter.txt

\<<CDOW(DATE( ))>>, <<CMONTH(DATE( ))>>

\\ <<DAY(DATE( ))>>, <<YEAR(DATE( ))>>

\

\

\Dear <<contact>>

\Additional text

\

\Thank you,

\

\XYZ Corporation

CLOSE ALL

MODIFY FILE letter.txt NOEDIT


请参阅

_PRETEXT，SET TEXTMERGE，SET TEXTMERGE DELIMITERS，_TEXT，TEXT ... ENDTEXT


? | ?? 命令

请参阅	示例

计算表达式的值，并输出计算结果。

语法

? | ?? Expression1
[PICTURE cFormatCodes] | [FUNCTION cFormatCodes] | [VnWidth]
[AT nColumn]
[FONT cFontName [, nFontSize] [STYLE cFontStyle | Expression2]]
[, Expression3] ...

参数

? Expression1

计算表达式 Expression1 的值，然后先输出一个回车和换行符，再输出计算结果。计算结果显示在 Visual FoxPro 主窗口或者活动的用户自定义窗口的下一行，并且如果函数代码 cFormatCodes 或系统内存变量 _ALIGNMENT 没有指定其他值，该结果则打印在左页边距中。

如果省略了表达式，则显示或打印一个空行。当包含多个表达式时，表达式结果之间将插入一个空格。

?? Expression1

计算表达式 Expression1 的值，并把结果显示在 Visual FoxPro 主窗口、活动的用户定义窗口或者打印机当前行的当前位置上。输出计算结果前不回车换行。

PICTURE cFormatCodes

指定显示表达式 Expression1 计算结果的图片格式。cFormatCodes 可以包括函数代码、图片代码或者两者的组合。表达式中可以使用与 @ ... SAY 中相同的图片和函数代码。有关这些代码的列表，请参阅 @ ... SAY 。

函数代码影响结果输出的总体格式，图片代码则只对结果中的单个字符有影响。如果 cFormatCodes 中使用了函数代码，那么函数代码必须放在图片之前，并且代码之前必须加 @ 符号。没有内嵌空格的多重函数代码可以紧接着放在 @ 之后。最后一个函数代码之后必须有一个或多个空格。空格标志着函数代码的结束和图片代码的开始。

FUNCTION cFormatCodes

指定在 ? 和 ?? 输出中的函数代码。如果包括函数子句，则不要把 @ 放在函数代码之前。当 PICTURE 中包括函数代码时，函数代码前必须使用 @。

VnWidth

指定一种特殊函数代码，能使字符表达式的结果在有限列中垂直伸展。 nWidth 指定输出的列数。

? 'This is an example of how the V function code works.' ;

FUNCTION 'V10'

AT nColumn

指定显示结果的列数。这个选项使您能够在指定的若干列中对齐输出结果，以便创建一个表。数值表达式 nColumn 可以是返回数值的用户自定义函数。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

指定用于 ? | ?? 输出的字体。cFontName 指定字体名称，nFontSize 指定字体的大小。例如，下列命令用 16 磅的 Courier 字体显示系统日期：

? DATE( ) FONT 'Courier',16

如果给出 FONT 子句但是没有指定字体大小 nFontSize，此时字体大小为 10 磅。

如果省略了 FONT 子句，并且 ? | ?? 的输出结果放在 Visual FoxPro 主窗口中，则输出的字体为 Visual FoxPro 主窗口字体。如果省略了 FONT 子句，并且 ? | ?? 的输出结果放在用户自定义窗口中，则输出的字体为用户自定义窗口字体。

 •	   在 Visual FoxPro 和 FoxPro for Windows 中，如果找不到指定的字体，则用具有相似字体特性的字体代替。

 •	   在 FoxPro for Macintosh 版本中，如果找不到指定的字体，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

指定用于 ?|?? 输出的字体样式。如果省略 STYLE 子句，则使用“正常”字体样式。

 •	   在 Visual FoxPro 和 FoxPro for Windows 中，如果找不到指定的字体样式，则用具有相似字体特性的字体样式代替。

 •	   在 FoxPro for Macintosh 版本中，如果找不到指定的字体样式，则使用“正常”字体样式。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

附注

当您使用 STYLE 子句指定字体样式时，必须包含有 FONT 子句。

可以用 cFontStyle 指定的字体样式有：

字符	字体样式
B	粗体
C	Condense（仅用于FoxPro for Macintosh）
E	Extend（仅用于FoxPro for Macintosh）
I	斜体
N	正常
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以使用多个字符的组合来指定字体样式。例如，下面的命令用 Courier 粗斜体来显示系统日期：

? DATE( ) FONT 'COURIER' STYLE 'BI'

STYLE Expression2

仅用于 FoxPro for MS-DOS。

指定用 ? | ?? 输出到打印机上的字体样式和字体大小。STYLE 子句中的表达式 Expression2 传送到当前 FoxPro 打印机驱动程序的三个过程 PDOBJST、DOBJECT 和 PDOBJEND 中，这些过程决定怎样打印 ? 和 ?? 计算结果。当 ? 和 ?? 的计算结果被传送到 FoxPro 主窗口或用户自定义窗口时，忽略 STYLE 子句。

说明

? 和 ?? 计算表达式的值，并把计算结果传送到 Visual FoxPro 主窗口、活动的用户自定义窗口或者打印机上。

如果 SET PRINTER 是 ON，则表达式的计算结果送到打印机和 Visual FoxPro 主窗口或活动的用户自定义窗口上。如果 SET PRINTER 为 ON，但 SET CONSOLE 为 OFF，表达式计算结果则只送到打印机。


? 15 * (10+10)

? 'Welcome to ' PICTURE '@!'

?? 'Visual FoxPro'


请参阅

???，@ ... SAY，SET MEMOWIDTH，SET PRINTER


??? 命令

请参阅

把结果直接输出到打印机。

语法

??? cExpression

参数

cExpression

指定要输出到打印机的字符。

说明

三个问号不通过打印机驱动程序而直接把 cExpression 的内容传送到打印机上。cExpression 必须包含有效的打印机代码。

打印机控制代码能够重置打印机，改变打印样式和大小，还能启用或取消黑体打印等。这些代码可由两种字符的任意组合来组成，这两种字符是可打印字符和正在使用的打印机特有的非打印字符。将控制代码发送到打印机的方法有很多：

 •	   使用 + 把 CHR( ) 和引号括起的字符串合并到一起，然后直接把 ASCII 字符串传送给打印机。

 •	   使用引号把包含打印代码的字符串或 ASCII 字符串送入打印机。

 •	   在开始打印前和打印结束后，可使用 _PSCODE 和 _PECODE 系统内存变量把代码传送到打印机上。有关详细内容，请参阅 _PSCODE 和 _PECODE 。

打印机控制代码随打印机的不同而不同。有关打印控制代码信息的最好来源是打印机的随机手册。


请参阅

? | ??，@ ... SAY，CHR( )，打印（文件菜单）


@ ... BOX 命令

请参阅	示例

用指定的坐标画一个方框。包含此命令是为了提供向后兼容性。对于 Visual FoxPro 应用程序，可用Shape（形状）控制来代替。

语法

@ nRow1, nColumn1, nRow2, nColumn2 BOX [cBorder]

参数

@ nRow1, nColumn1, nRow2, nColumn2

nRow1 和 nColumn1 是方框的左上角坐标，nRow2 和 nColumn2 是方框的右下角坐标。如果 nRow1 和 nRow2 相同，则画一条水平线。如果 nColumn1 和 nColumn2 相同，则画一条垂直线。

BOX [cBorder]

本项是可选的。它指定画方框所用的字符。cBorder 可包括九个字符，每角一个，每边一个，另一个填在框里。这些字符的显示顺序是从左上角开始顺时针进行的。如果指定了九个字符，则第九个字符用来填充框的内部。如果只指定了一个字符，则用这个字符画全部边框。如果省略了 cBorder，则使用单线画方框。

说明

可以用这个命令在 Visual FoxPro 主窗口和用户自定义窗口中画方框。

在 Visual FoxPro 中，应该使用 Shape（形状）控制来创建方框。使用表单设计器或 DEFINE CLASS 命令可以创建 Shape 控制。有关与 FoxPro 2.x 控制向后兼容性的详细内容，请参阅控制和对象。

有关把控制添加到表单中的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象部分。


*下面的例子用于画一个单线框：

@ 10，20，14，60 BOX


请参阅

@ ... TO，CREATE FORM，DEFINE CLASS，Shape（形状）控制


@ ... CLASS 命令

请参阅	示例

创建可以用 READ 激活的控制或对象。

语法

@ nRow, nColumn CLASS ClassName NAME ObjectName

参数

nRow, nColumn

指定控制或对象的位置。控制或对象的宽度和高度由类的默认宽度和高度值确定。

行从上向下编号。Visual FoxPro 主窗口或用户自定义窗口中的第一行编号为 0。Visual FoxPro 的第 0 行就是紧接着 Visual FoxPro 系统菜单栏的那一行。

列从左向右编号。Visual FoxPro 主窗口或用户自定义窗口中的第一列编号为 0。当把一个对象或控制添加到用户自定义窗口中时，行和列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

在 Visual FoxPro 中，Visual FoxPro 主窗口或用户自定义窗口中的某一位置，由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用不同大小显示。有一些字体能够按比例留间隔。行的高度与当前字体的高度一致，列的宽度则与当前字体字符的平均宽度一致。

在 Visual FoxPro 中，可以使用小数指定控制或对象的行、列坐标。

CLASS ClassName

指定控制或对象的类。ClassName 可以是 Visual FoxPro 的一个基类，也可以是用户自定义类。下表列出了 ClassName 可指定的 Visual FoxPro 基类。

基类名称
CheckBox	Line
Column	ListBox
ComboBox	OLE Control
CommandButton	OLE Bound Control
CommandGroup	OptionButton
Container	OptionGroup
Control	Page
Cursor	PageFrame
Custom	Relation
DataEnviroment	Separator
EditBox	Shape
Grid	Spinner
Header	TextBox
Image	Timer
Label
NAME ObjectName

指定对象引用内存变量的名称，NAME 子句可以创建此变量。控制或对象的面向对象属性、事件和方法都可以通过引用这个内存变量来操纵。

说明

@ ... CLASS 提供了一个捷径，能把 FoxPro 早期版本中创建的应用程序移植到更受欢迎的 Visual FoxPro 面向对象编程方法中来。有关与 FoxPro 2.x 控制向后兼容性的详细内容，请参阅控制和对象主题。

有关 Visual FoxPro 中面向对象编程的详细内容，请参阅《开发指南》的第三章“面向对象程序设计”。


*下面的例子说明了如何把 @ ... CLASS 同早期 FoxPro 版本中的编程
* 技术结合起来使用（在这个例子中，使用 READ 激活控制）。
* @ ... CLASS 创建了一个文本框。这个文本框的属性可以用
*  Visual FoxPro 面向对象的编程技术来改变。

*使用 ON KEY LABEL，可以在按 CTRL + I 时显示“窗口颜色”
* 对话框。用 @ ... CLASS 命令把文本框添加到 Visual FoxPro
*  主窗口中，然后用 READ 激活文本框。

CLEAR

ON KEY LABEL CTRL+I _SCREEN.PageFrame1.Page1.goFirstName.BackColor;

 = GETCOLOR( )

@ 2，2 SAY 'Press Ctrl+I to change the background color'

@ 4，2 CLASS TextBox NAME goFirstName

READ

CLEAR


请参阅

CREATEOBJECT( )，DEFINE CLASS， READ，_SCREEN


@ ... CLEAR 命令

请参阅	示例

清除 Visual FoxPro 主窗口或用户自定义窗口的部分区域。

语法

@ nRow1, nColumn1 [CLEAR | CLEAR TO nRow2, nColumn2]

参数

@ nRow1, nColumn1 CLEAR

清除一长方形区域。该长方形区域的左上角是第 nRow1 行第 nColumn1 列，右下角是 Visual FoxPro 主窗口或用户自定义窗口的右下角。

CLEAR TO nRow2, nColumn2

清除一长方形区域。该长方形区域左上角是第 nRow1 行第 nColumn1 列，右下角是第 nRow2 行第 nColumn2列。

说明

如果省略 CLEAR 或 CLEAR TO，Visual FoxPro 将清除第 nRow1 行中从 nColumn1 列开始到行尾的内容。


* 以下示例清除屏幕上 Visual FoxPro 主窗口或用户自定义窗口从
* 第二行开始到窗口右下角的区域。

@ 2，0 CLEAR

* 以下示例清除从第 10 行第 0 列开始一直到
* 第 20 行 20 列的长方形区域。

@ 10，0 CLEAR TO 20，20


请参阅

CLEAR


@ ... EDIT -编辑框命令
@ ... EDIT 编辑框命令

请参阅

创建一个编辑框。从中可以编辑字符型内存变量、数组元素、字段和备注字段。包含此命令是为了提供向后兼容性。对于 Visual FoxPro 应用程序，可使用 EditBox（编辑框）控制代替。

语法

@ nRow, nColumn
EDIT MemVarName | FieldName
SIZE nHeight， nWidth [， nCharacters]
[NAME ObjectName]
[FUNCTION cFormatCodes]
[FONT cFontName [， nFontSize]]
[STYLE cFontStyle]
[DEFAULT cExpression]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[VALID lExpression1 | nExpression [ERROR cErrorText]]
[WHEN lExpression2]
[NOMODIFY]
[SCROLL]
[TAB]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定编辑框的位置。nRow 和 nColumn 都是数值表达式，用来确定编辑框左上角的位置。

行从上往下编号。Visual FoxPro 主窗口或用户自定义窗口中的第一行编号为 0。

在 Visual FoxPro 中，第 0 行是指紧接着 Visual FoxPro 系统菜单栏下的一行。

在 FoxPro for Macintosh 中，第 0 行是指紧着 FoxPro 标题栏下的一行。

在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏所在的那一行。有关在 FoxPro for MS-DOS 中如何操纵系统菜单以便能把编辑框放在第 0 行上的详细内容，请参阅 SET SYSMENU 命令。

列从左向右编号。Visual FoxPro 主窗口或用户自定义窗口中的第一列编号为 0。

当编辑框放在用户自定义窗口中时，编辑框的行、列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以按多种大小显示。有些字体能够按比例留间隔。行的高度与当前字体的高度相一致。列的宽度则与当前字体字符的平均宽度相一致。

在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中编辑框的行、列坐标。

在 FoxPro for MS-DOS 中，用于指定行、列坐标的小数按四舍五入原则转换成相近的整数。

EDIT MemVarName | FieldName

指定保存编辑结果的字符型内存变量、数组元素或备注字段。当用 READ 或 READ CYCLE 命令激活编辑框时，MemVarName 或 FieldName 的内容就出现在编辑框中，可以对其进行编辑。当退出编辑框时，编辑框所作的变化都保存在相应的内存变量、数组元素、字段或备注字段中。

SIZE nHeight, nWidth [, nCharacters]

指定编辑框的大小。nHeight 指定编辑框高度有多少行。nWidth 指定编辑框的宽度有多少列。

如果 nHeight 等于 1，则创建的编辑框是单行编辑框。单行编辑框可以水平滚动。单行编辑框处于活动状态时，按回车键可将焦点移到其他控制上。

可选数值表达式 nCharacters 指定了内存变量、数组元素或字段中从第一个字符开始可以编辑的字符数。如果省略 nCharacters，内存变量、数组元素或字段中的所有字符都可以编辑。

在 Visual FoxPro 和 FoxPro for Macintosh 中，编辑框的字体决定了编辑框的大小。编辑框字体用 FONT 子句指定。如果省略 FONT 子句，编辑框将使用其父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

NAME ObjectName

仅用于 Visual FoxPro。

创建编辑框的对象引用。创建了编辑框对象引用后，就能够用编辑框控制所具有的面向对象的属性操纵编辑框。有关如何使用 NAME 子句操纵 FoxPro 控制的详细内容，请参阅控制和对象部分。有关为 NAME 子句创建的编辑框指定编辑框控制属性的详细内容，请参阅 EditBox（编辑框）控制。

FUNCTION cFormatCodes

指定编辑框中文本的对齐方式和编辑框的外观。在 FUNCTION 子句中包含 Ｉ 或 Ｊ 选项可以指定编辑框中文本的对齐方式。包含 2 或 3 选项则可以指定编辑框的外观。选项 2 和选项 3 仅用于 FoxPro for Macintosh。FUNCTION 子句中包含的其他字符不起作用。

选项	用途
I	把编辑框中的文本居中对齐。
J	右对齐文本。编辑框默认对齐方式是左对齐。
2	创建一个平面（二维的）编辑框。在 FoxPro for Macintosh 中，默认的编辑框是二维的
3	创建一个三维编辑框。同 FoxPro for Macintosh 中的编辑框一样。
以下示例创建一编辑框，其对齐方式为右对齐：

STORE 'This will be edited' TO gcText

@ 2，2 EDIT gcText FUNCTION 'J' SIZE 5， 50

READ

以下示例在 FoxPro for Macintosh 中创建一个三维编辑框：

STORE 'This will be edited' TO gcText

@ 2，2 EDIT gcText FUNCTION '3' SIZE 5， 50

READ

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh。

指定编辑框中所显示文本的字体。cFontName 指定字体，nFontSize 指定字体大小。例如，下面的子句在编辑框中以 16 磅的 Courier 字体显示文本：

FONT 'Courier'， 16

如果省略 FONT 子句，并且把编辑框放到 Visual FoxPro 主窗口中，则编辑框使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句，并把编辑框放到用户自定义窗口中，则编辑框使用用户自定义窗口的字体。

如果有 FONT 子句，但是省略了字体大小 nFontSize，则使用 10 磅字体。

在 Visual FoxPro 中，如果指定的字体无效，则用与该字体有相似特征的字体代替。

在 FoxPro for Macintosh 中，如果指定字体无效，则使用 Chicago 字体。

在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh。

指定编辑框中文本的字体样式。如果省略 STYLE 语句，则使用正常体字形。

在 Visual FoxPro 中，如果指定的字形无效，则使用与该字体类型有相似特征的字形。

在 FoxPro for Macintosh 中，如果指定字体无效，则使用正常体字形。

在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

可用 cFontStyle 指定的字形有：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以包括多个字符来指定字体样式的组合。例如，下面的子句指定的字形是“粗斜体”：

STYLE 'BI'

DEFAULT cExpression

指定内存变量的初始值。在编辑框中编辑文本时，从 MemVarName 或 FieldName 指定的内存变量、数组元素或字段中将文本读到编辑框中。假若指定的内存变量不存在，则自动创建一个内存变量。如果包含了 DEFAULT 子句，就根据该子句的值初始化自动创建的内存变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不能创建内存变量。当内存变量已经存在，或者指定的是字符字段或备注字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句，并且内存变量 MemVarName 不存在时，Visual FoxPro 将产生错误信息。

下面给出几个使用 DEFAULT 子句的例子：

@ 2，2 EDIT gcText DEFAULT 'This will be edited' SIZE 5， 50

READ

@ 2，2 EDIT gcText DEFAULT SPACE(20) SIZE 5， 50

READ

ENABLE

激活编辑框。默认情况下，在执行 READ 命令时激活编辑框。程序中使用 ENABLE 可用来说明能访问创建的编辑框。

DISABLE

防止在发出 READ 命令时激活编辑框。非活动区以暗灰色显示，用户不能选择。使用 SHOW GET ENABLE 命令可以激活非活动的编辑框。

MESSAGE cMessageText

创建一条信息。该信息在选中编辑框时出现。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，此信息出现在状态栏中。如果状态栏已被 SET STATUS BAR OFF 关掉，则信息显示在 Visual FoxPro 主窗口的最后一行。

 •	   在 FoxPro for MS-DOS 中，默认情况下，信息在 FoxPro 主窗口的最后一行居中对齐。信息出现的位置可以用 SET MESSAGE 来更改。

VALID lExpression1 | nExpression

检查用户输入。当用户修改文本后退出编辑框时，要计算 VALID 表达式的值。

lExpression1 或 nExpression 通常是一个用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开一个浏览窗口，打开另一个数据录入表单，还可以移到一条新记录。在用户自定义函数中使用 CLEAR READ 命令可以终止 READ 命令。

lExpression1

如果表达式 lExpression1 的计算值为“真”(.T.)，那么当用户按 TAB、CTRL+TAB 或 SHIFT+TAB 键退出编辑框时，将保存所作更改。如果用户按 ESC 键退出编辑框，则放弃所作的修改。

如果 lExpression1 的计算值为“假”(.F.)，则当用户想按 TAB、CTRL+TAB 或 SHIFT+TAB 键把编辑框中所作的更改保存到备注字段中去时，将提示用户如何正确操作。这时，如果用户按 ESC 键退出编辑框，将保存所作的修改。

如果 lExpression1 的计算值为“假”，并且用户编辑的是内存变量、数组元素或字段，那么当按 ESC 键退出编辑框时，不保存所作更改。

nExpression

指定退出编辑框时激活哪一个控制。

表达式 nExpression 有如下作用：

 •	   当 nExpression = 0 时，编辑框仍然保持活动状态，并且不输出 MESSAGE cMessageText 和ERROR cErrorText 命令的信息。您可以编写一个特有的错误信息例程，作为 VALID 可以调用的用户自定义函数的一部分。

 •	   当 nExpression 为正数时，nExpression 指定焦点向前移动的控制数目。例如，当选中编辑框并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression 大于已有的控制数目，则终止 READ 命令（除非发出 READ CYCLE 来激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定焦点后退的控制数目。例如，当选中编辑框且 VALID 返回 -1 时，激活前一个控制。当 nExpression 的值使得后退超过第一个控制时，则终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

ERROR cErrorText

用来指定不同于默认信息的错误信息。当 VALID 子句表达式 lExpression1 计算为“假”(.F.) 时，默认的错误信息是“无效输入”。

WHEN lExpression2

指定一个条件。选中编辑框之前，表达式 lExpression2 的计算结果必须是“真”(.T.)。如果表达式 lExpression2 的计算值为“假”(.F.)，编辑框所在区域不能选中。如果编辑框放在其他控制之间，则跳过编辑框。

NOMODIFY

显示编辑框但不能编辑。编辑框中的文本可以滚动，也可以复制，但不能修改。

SCROLL

在编辑框的右边放置滚动栏。滚动栏只有当编辑框中的文本太长而放不下时才显示。

TAB

指定当用户按 TAB 键时，在编辑框的文本中光标所在位置插入一个制表符。如果省略 TAB 关键字，则制表符不能插入到编辑框的文本中。这时，按 TAB 或 CTRL+TAB 键将保存对编辑框文本所作的修改，退出编辑框，并把活动焦点移到下一个控制上。

COLOR SCHEME nSchemeNumber

指定编辑框的颜色。默认情况下，编辑框的颜色从配色方案 2 （用户菜单）中得到。如果不包含 COLOR 子句，则编辑框的颜色由 Visual FoxPro 主窗口的配色方案决定。如果编辑框在用户自定义的窗口中，用户自定义窗口的颜色决定了编辑框的颜色。

COLOR ColorPairList

指定编辑框的颜色。

颜色对编号	编辑区域属性
2	启用的编辑框
3	滚动栏*
5	信息
6	选中的编辑框
10	废止的编辑框
* 用底色画控制。用暗前景色画滚动栏。
下面示例用 FoxPro for MS-DOS 定义了一个带有下列颜色特征的编辑框：

 •	   当选中编辑框中文本时，文本底色为蓝色，前景色是亮白色 (W+/B)。

 •	   当启用编辑框时，此区域底色是蓝色，前景色是黄色 GR+/B)。

 •	   当废止编辑框后，底色是蓝色，前景色是白色 (W/B)。

当省略一个颜色对时，必须在相应位置加一个逗号。

命令如下：

STORE 'To be edited' TO gcText

@ 2，2 EDIT gcText SIZE 5， 50 COLOR ，GR+/B，，，，W+/B，，，，W/B

READ

下面的例子说明如何用一种预先定义好的颜色方案来改写 Visual FoxPro 主窗口的颜色方案。

ACTIVATE SCREEN

STORE 'To be edited' TO gcText

@ 2，2 EDIT gcText COLOR SCHEME 4 SIZE 5， 50

READ

有关颜色方案和颜色对的详细内容，请参阅 Colors（颜色）概述主题。

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS命令来创建编辑框。有关与 FoxPro 2.x 控制向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

附注

编辑框控制使用 EDIT 的语法与其他 Visual FoxPro 控制不同。例如，复选框、命令按钮和选项按钮等使用 GET。

按 TAB 或 CTRL+TAB 可以保存对编辑框所作的修改，并把活动焦点移到下一个控制上。要保存对编辑框所作的更改，并且把活动焦点移到前一个控制上，可以按 SHIFT+TAB 键。按 ESC 键可以放弃所做的修改并移到下一个控制上。如果正在编辑的是一个备注字段，并且包括了 VALID 子句，则所做的修改可能无法保存。因为 VALID 子句返回的值决定了是否保存所做的修改。有关详细内容，请参阅本主题前面的 VALID 子句部分。

所有 Visual FoxPro 的标准编辑特征，如剪切、复制和粘贴，都可以在编辑框中使用。编辑框中的文本可垂直滚动，单词会自动换行。


请参阅

控制和对象，EditBox（编辑框）控制，CREATE FORM，DEFINE CLASS


@ ... FILL 命令

请参阅	示例

更改屏幕中某区域内已有文本的颜色。

语法

@ nRow1, nColumn1 FILL TO nRow2, nColumn2
[COLOR SCHEME nSchemeNumber | COLOR ColorPairList]

参数

@ nRow1, nColumn1

指定要更改颜色区域的左上角。

FILL TO nRow2, nColumn2

指定要更改颜色区域的右下角。

COLOR SCHEME nSchemeNumber

指定区域的颜色。只有指定配色方案中的第一个颜色对决定了区域的颜色。

COLOR ColorPairList

指定区域的颜色。只有指定颜色对列表中第一个颜色对决定了区域的颜色。

如果省略 COLOR SCHEME 或 COLOR 子句，则清除指定的长方形区域。清除一长方形区域也可使用 @ ... CLEAR 命令。

有关颜色方案和颜色对的详细内容，请参阅 Colors（颜色）概述主题。

说明

这个命令用来更改 Visual FoxPro 主窗口或活动的用户自定义窗口中长方形区域的文本颜色。使用该命令，只能为正在显示的文本设置前景和背景颜色属性。所有在使用 @ ...FILL 命令之后输出到该指定区域中的文本，仍以屏幕或窗口默认的颜色显示。


* 以下示例先清除 Visual FoxPro 主窗口，然后用彩色填充一个区域。

ACTIVATE SCREEN

CLEAR

@ 4，1 FILL TO 10， 8 COLOR GR+/B


请参阅

@ ... SAY，颜色概述


@ ... GET - 复选框命令

请参阅

此命令用于创建复选框。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，请使用复选框控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
FUNCTION cFormatCodes | PICTURE cFormatCodes
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT Expression]
[SIZE nHeight, nWidth]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[VALID lExpression1 | nExpression]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定复选框的位置。

行位置由上向下编号。第一行是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro for Windows 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏所占据的那一行。在该版本中，有关如何处理系统菜单以便能把复选框放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列位置由左向右编号。第一列是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当复选框被添加到用户自定义窗口中时，复选框的行和列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的复选框位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度一致。列的宽度与当前字体字符的平均宽度一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中复选框的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列坐标通过四舍五入原则转换成相近的整数。

GET MemVarName | FieldName

指定保存用户选择结果（选定或未选定）的内存变量、数组元素或字段。

MemVarName 或 FieldName 必须是数值型或逻辑型。当复选框初始显示在屏幕或窗口中时，如果 MemVarName 或 FieldName 具有非零值或“真”(.T.)，复选框以选定状态出现，否则以未选定状态出现。

可用 READ 或 READ CYCLE 激活复选框。取消 READ 命令时，复选框的显示状态决定了保存到相关内存变量、数组元素和字段中的值，即若选定，保存 1 或 .T.；若未选定，保存 0 或 .F.。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定复选框并给出复选框的标题或图片。GET 命令必须包括 FUNCTION 子句、PICTURE 子句或两者兼有。这三种方法具有同等效果。FUNCTION 子句和 PICTURE 子句都包含复选框的特有代码 *C。

FUNCTION 子句中的字符表达式 cFormatCodes 起始字符必须是 *C。要创建复选框的标题，请在 *C 之后加一个空格，再写上标题文本。例如，可用下面命令创建一个标题为 Taxable 的复选框：

... FUNCTION '*C Taxable' ...

PICTURE 子句中的字符表达式 cFormatCodes 使用的语法同 FUNCTION 子句中字符表达式使用的语法基本一样。不同的是 PICTURE 子句字符表达式必须以 @ 开头，后面紧跟 *C 。例如，可用下面命令创建一个标题为 Taxable 的复选框：

... PICTURE '@*C Taxable' ...

您还可以同时使用 FUNCTION 和 PICTURE 子句来创建复选框。同时使用时，FUNCTION 字符表达式 cFormatCodes 必须包含 *C 来创建复选框，PICTURE 字符表达式 cFormatCodes 必须包含复选框标题。例如：

... FUNCTION '*C' PICTURE 'Taxable' ...

下面的示例说明了各种可用来创建复选框的语法。在所有示例中，创建的复选框都放在第二行第二列上。复选框的状态（选定或未选定）保存在内存变量 gnChoice 中。各例中创建的是同一复选框。

只用 FUNCTION 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*C Taxable'

READ

STORE 1 TO gnChoice

STORE '*C Taxable' TO gcPrompt

@ 2,2 GET gnChoice FUNCTION gcPrompt

READ

只用 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@*C Taxable'

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@*C' + ' Taxable'

READ

同时使用 FUNCTION 和 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*C' PICTURE ' Taxable'

READ

图片复选框

在 Visual FoxPro 和 FoxPro for Macintosh 中，复选框的标题也可以是图片的名称。在 Visual FoxPro 中，图片文件可以是 .BMP 位图文件。在 FoxPro for Macintosh 中，图片文件可以是 .BMP 位图文件和 PICT 类型的文件。

复选框使用图片文件作标题与使用文本作标题时的行为极为相似。例如，使用图片文件作标题时，显示图片文件而不显示复选框。就象选择复选框一样，选择图片也会使 MemVarName 或 FieldName 的值在 1 和 0、或者 .T. 和 .F. 之间变动。

要在复选框中使用图片文件，请把 B 加入到复选框的特有代码中。FUNCTION 和 PICTURE 子句所创建的复选框特有代码分别是 *C 和 @*C。因此它们创建具有图片标题的复选框的规格代码分别是 *CB 和 @*CB。创建图片复选框时，在规格代码后加一个空格，再加图片文件名。如果图片文件不在默认目录或文件夹中，则应把路径加入图片文件名当中。

附注

图片不会根据复选框的大小自动剪切、缩小或者放大以使复选框的大小能与其相符。请使用 SIZE 子句调节复选框的大小，使其正好放下图片。

在 FoxPro for Macintosh 中，如果省略了图片文件的扩展名，FoxPro 首先寻找指定文件名加 .BMP 扩展名的图片文件。如果找不到该文件，FoxPro 接着寻找指定文件名加 .PCT 扩展名的图片文件。如果还找不到，FoxPro 再寻找没有扩展名的指定图片文件。

图片掩码和复选框

在 Visual FoxPro 和 FoxPro for Macintosh 版本中，图片复选框有三种状态：上、下和废止。Visual FoxPro 自动控制图片复选框这三种状态的外观。但是，可以使用图片掩码来覆盖默认外观。

图片掩码用来控制图片复选框的透明区域。默认情况下，白色是透明的。如果存在图片掩码，图片掩码（而不是图片文件）的白色区域是透明的。

图片掩码是单色图片文件。在 Visual FoxPro 中，图片掩码是带有 .MSK 扩展名的位图文件。在 FoxPro for Macintosh 中，图片掩码是带有 .MSK 扩展名的位图文件，或者是带有 .PCM 扩展名的 PICT 类型的文件。图片掩码必须同图片文件具有相同的文件名和适当的扩展名。 Visual FoxPro 自动在图片文件所在目录或文件夹中寻找图片文件的图片掩码。

大多数情况下，图片掩码是不需要的。如果在图片中不需要将任何东西显示成白色并且图片文件具有白色背景，那么图片复选框就会如希望的那样出现三种状态：上、下和废止。

当图片复选框具有图片掩码并处在上或下状态时，图片中的白色看上去是透明的，可以看到复选按钮的前景颜色。不过，图片中的某些部分仍保持白色。

假设有一幅狗的画面，背景色是白色。如果狗的眼睛是白色的，按钮的前景颜色是红色的。若想使按钮背景色看起来是红色，狗的眼睛是白色而不是红色，可以通过做一幅图片掩码来实现。图片掩码的大小和图片文件一样，但只有黑白两种颜色。图片掩码的背景仍是白色，只是把狗及其眼睛全部变成黑色。这样，显示按钮时，按钮的前景色与背景色匹配呈红色，而狗的眼睛却是白色的。

当废止一个图片复选框时，图片文件中的白色部分是透明的，可以透过它看到按钮的前景色。但图片文件中非白色部分以暗灰色出现。如果按钮有图片掩码，那么掩码中所有白色部分都是透明的，可以通过它看到按钮的色彩，而所有黑色部分看上去象暗灰色。

PICTURE 和 FUNCTION 选项 N, T, 2, 和 3

可以将 FUNCTION 和 PICTURE 子句的 *C 规格代码与其他选项组合起来改变复选框的行为（N和T）和外观（2和3）。

选项 2（二维的）和选项 3（三维的）的规格代码仅用于 FoxPro for Macintosh 中。

选项	说明
N	（默认）当复选框选定时，不终止 READ 命令
T	当复选框选定时，终止 READ 命令
2	创建与 Macintosh 对话框中复选框一样的平面（二维）复选框。本项是复选框外观的默认设置
3	创建三维复选框。
例如，下面的语句创建复选框，并且当复选框选定时，不会终止 READ 命令：

... FUNCTION '*CN ... '

在 FoxPro for Macintosh 中，下面语句创建一个三维的复选框，且当复选框被选中时，不会终止 READ 命令：

... FUNCTION '*CN3 ... '

具有特殊功能的复选框

可以为复选框指定一个快捷键，也可以在定义复选框时，在复选框的标题中加入一些特殊字符来废止复选框。

快捷键

快捷键可以用来选择或改变复选框的状态。给复选框指定快捷键，只需在复选框的标题中用作快捷键的字符前加上一个反斜杠和一个小于号 (\<)。

如果当前控制是文本框或编辑框，按快捷键可在文本框或编辑框中输入对应字符。如果当前控制是列表框或可滚动的列表，按快捷键可以选择列表框中标题首字符与快捷键字符相同的第一个列表项。

附注

在 Visual FoxPro 中，如果当前控制是文本框、编辑框或列表框，按快捷键不能激活复选框，除非 KEYCOMP 设置为 WINDOWS。但是，可以同时按 Alt 和快捷键来选择复选框。

下面的示例创建一个标题为 Taxable 、快捷键为 T 的复选框。

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*C' PICTURE ' \<Taxable'

READ

有关快捷键的详细内容，请参阅《开发指南》的第十二章“设计菜单”。

废止的复选框

不能选择被废止的复选框，它是以暗灰色显示的。要废止一个复选框，请在复选框标题前加入两个反斜线字符 (\\)，或使用 DISABLE 子句。下面的示例废止一个已经创建的复选框。

STORE 1 TO gnChoice1, gnChoice2, gnChoice3

@ 2,2 GET gnChoice1 FUNCTION '*C \\Taxable'

@ 4,2 GET gnChoice2 FUNCTION '*C Taxable' DISABLE

@ 6,2 GET gnChoice3 FUNCTION '*C Taxable'

READ

NAME ObjectName

仅用于 Visual FoxPro 中。

创建复选框的对象引用，就能够用“复选框”控制所具有的面向对象属性来处理复选框。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。可以给使用 NAME 子句创建的复选框指定“复选框”控制属性，有关“复选框”控制属性的详细内容，请参阅复选框控制。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定复选框标题中的字体和字体磅值。cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下面的子句可以使复选框标题以 16 磅的 Courier 字体显示：

@ 2,2 GET gnChoice FUNCTION '*C Taxable' DEFAULT 1 ;

FONT 'Courier',16

如果省略 FONT 子句，并且复选框放置在 Visual FoxPro 主窗口中，复选框将使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句，并且复选框放置在用户自定义窗口中，复选框则使用用户自定义窗口的字体。

如果包含了 FONT 子句，但是省略了字体磅值 nFontSize，则使用 10 磅的字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用与该字体相似的字体。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定复选框字体的样式。

在 Visual FoxPro 中，如果指定的字体无效，则使用与该字形相似的字体。

在 FoxPro for Macintosh 中，如果指定的字体无效，则使用正常体字形。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh 中）
E	Extend（仅用于 FoxPro for Macintosh 中）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro 中）
T	透明
U	下划线
可以组合多个字符来指定字形。例如，下面的子句指定的字形是“粗斜体”：

STYLE 'BI'

如果使用 T 来创建透明复选框，复选框标题下显示背景色。如果使用 Q 来创建复选框，复选框标题下不显示背景色。

在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

DEFAULT Expression

复选框的选定或未选定状态都保存在内存变量、数组元素或字段中。如果指定的内存变量不存在且命令中包含了 DEFAULT 子句，就自动创建并初始化此变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建数组元素。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略了 DEFAULT 子句，并且内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

DEFAULT 表达式 Expression 决定了创建的内存变量的类型及初始化值。Expression 必须是一个数值型或逻辑型表达式。下面给出几个使用 DEFAULT 子句的示例：

@ 2,2 GET gnChoice FUNCTION '*C Taxable' DEFAULT .T.

READ

STORE .T. TO button

@ 2,2 GET gnChoice FUNCTION '*C Taxable' DEFAULT button

READ

SIZE nHeight, nWidth

指定复选框的高度、宽度及其标题。

在 Visual FoxPro 和 FoxPro for Macintosh 中，可以指定复选框的高度。如果高度 nHeight 等于 1，会剪切掉围绕复选框标题的矩形。在这种情况下，应使用更大一些的高度值。

默认情况下，复选框的宽度是由复选框标题的长度确定的。可以用 nWidth 来设置比默认值更大的复选框宽度。数值表达式 nWidth 指定复选框宽度（以列数计算）。

复选框的字体决定了复选框的大小。复选框的字体用 FONT 子句指定。如果省略了 FONT 子句，复选框使用其父窗口的字体（Visual FoxPro 主窗口或用户自定义窗口）。

在 FoxPro for MS-DOS 中，忽略 nHeight。这是因为复选框的高度只能是一行。但是，如果想用 SIZE 子句指定复选框标题的宽度 nWidth 时，就必须同时包括 nHeight 。

ENABLE

激活复选框。默认情况下，在发出 READ 命令时激活复选框。程序中可以包括 ENABLE 子句来提示复选框可被访问。

DISABLE

该命令可以阻止用 READ 命令激活复选框。非活动的复选框以废止色显示，而且用户不能进行选择。要激活被废止的复选框可以使用 SHOW GET ENABLE。

MESSAGE cMessageText

创建一条信息，当复选框被选中时显示该信息。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在状态栏中。如果状态栏被 SET STATUS BAR OFF 命令关掉，信息则出现在 Visual FoxPro 主窗口最后一行的中间。

 •	   在 FoxPro for MS-DOS 中，默认时，信息出现在 FoxPro 主窗口最后一行的中间。信息出现的位置可以用 SET MESSAGE 来指定。

VALID lExpression1 | nExpression

检查用户输入。当用户选定复选框时，对 VALID 表达式求值。

通常，lExpression1 或 nExpression 是用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开“浏览”窗口，打开另一个数据输入表单，还可以移到一条新记录。用户自定义函数可以使用 CLEAR READ 命令来终止 READ 命令。

lExpression1

当逻辑值 lExpression1 返回给 VALID 子句时，逻辑值被忽略，复选框仍然是活动控制。不过，可以指定一个用户自定义函数来返回逻辑值给 VALID 子句，并激活另一个控制。

下面的示例说明了当选定复选框时，VALID 子句用户自定义函数是怎样执行的。例中用户自定义函数执行时复选框仍是活动控制。这是因为用户自定义函数返回“假”(.F.)。

CLEAR

STORE 1 TO gnChoice1, gnChoice2, gnChoice3

@ 2,2 GET gnChoice2

@ 4,2 GET gnChoice1 FUNCTION '*C \<Taxable' ;

VALID showmes( ) ;

MESSAGE 'Execute the VALID. ' + ;

'Select this check box using Spacebar.'

@ 6,2 GET gnChoice3

READ CYCLE	&& Press Esc to exit the READ

FUNCTION showmes

WAIT WINDOW NOWAIT 'The VALID clause was executed.'

RETURN .F.

nExpression

指定了选定复选框后，激活哪一个控制。

数值表达式 nExpression 有如下三种作用：

 •	   当 nExpression 为 0 时，复选框仍然是活动控制。

 •	   当 nExpression 为正数时，nExpression 指定向前走过控制的数目。例如，当选定了复选框并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression 大于复选框之后控制的总数，则终止 READ 命令（除非发出了 READ CYCLE 去激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定向后回退控制的数目。例如，当选定了复选框并且 VALID 子句返回 -1 时，激活前一个控制。当 nExpression 退回到第一个控制之前时，则终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

下面的示例说明 VALID 子句用户自定义函数怎样根据返回的数值来激活其他控制。例中 VALID 子句用户自定义函数执行时，用户自定义函数返回 2。例中激活在复选框之后的第二个控制。由于发出 READ CYCLE 命令，即使只剩下一个控制，READ 也没有废除。

CLEAR

STORE 1 TO gnChoice1, gnChoice2

STORE 0 TO m.choice3

@ 2,2 GET gnChoice1

@ 4,2 GET gnChoice2

@ 6,2 GET m.choice3 FUNCTION '*C \<Taxable' ;

VALID showmes( ) ;

MESSAGE 'Execute the VALID. ' + ;

'Select this check box using Spacebar.'

READ CYCLE	&& Press Esc to exit the READ

FUNCTION showmes

WAIT WINDOW NOWAIT 'The VALID clause was executed.'

RETURN 2

WHEN lExpression2

根据 lExpression2 的逻辑值决定是禁止还是允许选择复选框。如果 lExpression2 求值为“真”，可以选择复选框。如果 lExpression2 求值为“假”，不能选择复选框。如果将它放在其他控制之间，则跳过。

在下面的示例中，复选框的 WHEN 子句返回“假”(.F.)。因此，即使复选框没有被废止，也跳过它。

CLEAR

STORE 1 TO gnChoice1, gnChoice2

STORE 0 TO gnChoice3

@ 2,2 GET gnChoice1

@ 4,2 GET gnChoice2 FUNCTION '*C \<Taxable' ;

WHEN showmes( )

@ 6,2 GET gnChoice3

READ CYCLE	&& Press {Esc} to exit the READ

FUNCTION showmes

WAIT WINDOW NOWAIT 'The WHEN clause was executed.'

RETURN .F.

COLOR SCHEME nSchemeNumber

指定复选框的配色方案。如果不包含 COLOR 子句，复选框的颜色由 Visual FoxPro 主窗口的配色方案决定。如果复选框在用户自定义窗口中，用户自定义窗口的配色方案决定了复选框的颜色。

COLOR ColorPairList

指定复选框的颜色。配色方案或颜色对列表中只有颜色对 5、6、7、9 和10 影响复选框的颜色。

颜色对编号	复选框颜色属性
5	消息颜色
6	选定的复选框标题颜色（仅用于 FoxPro for MS-DOS 中）
7	访问键颜色（仅用于 FoxPro for MS-DOS 中）
9	可选的复选框标题颜色
10	被废止的复选框标题颜色
下面的示例说明如何使用另一个预定义的配色方案，来覆盖 Visual FoxPro 主窗口的配色方案：

ACTIVATE SCREEN

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*C Taxable' COLOR SCHEME 4

READ

下面的示例创建一个复选框，标题为 Taxable，访问键为 T，并且具有如下颜色特征：

 •	   在 FoxPro for MS-DOS 中，选定的复选框的背景色是蓝色，标题是亮白色 (W+/B)。

 •	   在 FoxPro for MS-DOS 中，快捷键字符以红色显示，其背景色为蓝色 (R/B)。在 Visual FoxPro 中，快捷键字符加下划线。

 •	   可选的复选框标题是黄色，其背景是蓝色 (GR+/B)。

 •	   被废止的复选框背景色为蓝色，标题为白色 (W/B)。

当省略颜色对时，必须在省略颜色对的地方加入一个逗号。

命令如下：

CLEAR

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*C \<Taxable' ;

COLOR ,,,,,W+/B,R/B,,GR+/B,W/B

@ 4,2 GET gnChoice FUNCTION '*C \\Taxable' ;

COLOR ,,,,,W+/B,R/B,,GR+/B,W/B

@ 6,2 GET gnChoice FUNCTION '*C \<Taxable' ;

COLOR ,,,,,W+/B,R/B,,GR+/B,W/B

READ

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 命令创建复选框。有关与 FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

复选框用来在诸如真与假、是与不是两种状态中切换。当条件为“真”时，复选框中出现一个 X。

在 Visual FoxPro 和 FoxPro for Macintosh 中，可以给复选框指定标题或图片。有关这方面的内容，请参阅“参数”部分的 FUNCTION 和 PICTURE 子句。

一个 @ ... GET 命令只能产生一个复选框。激活复选框请使用 READ 或 READ CYCLE 命令。


请参阅

复选框控制，控制和对象，CREATE FORM，DEFINE CLASS


@ ... GET - 组合框命令

请参阅

创建组合框。包含此命令是为了提供向后兼容性。对于 Visual FoxPro 应用程序，请使用组合框控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
FUNCTION cFormatCodes | PICTURE cFormatCodes
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT Expression]
[FROM ArrayName
[RANGE nStartElement [, nElements]]]
[SIZE nHeight, nWidth]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[VALID lExpression1 | nExpression]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber1 [, nSchemeNumber2]
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定组合框的位置。nRow 和 nColumn 是数值表达式，指定组合框左上角所在的位置。

行由上向下编号。第一行是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏占据的那一行。在该版本中，有关如何处理系统菜单以便能把组合框放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当把组合框放到用户自定义窗口中时，组合框行和列的坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度一致。列的宽度与当前字体字符的平均宽度一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中组合框的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列的坐标通过四舍五入原则去掉小数部分。

GET MemVarName | FieldName

指定保存用户选择结果的内存变量、数组元素或字段。当用户按 Esc 键退出组合框时，MemVarName 或 FieldName 的值不变。

MemVarName 和 FieldName 必须是数值型或字符型变量。如果 MemVarName 或 FieldName 是字符型的，选择的组合框项标题将保存到 MemVarName 或 FieldName 当中。如果 MemVarName 或 FieldName 是数值型的，保存到 MemVarName 或 FieldName 当中去的将是代表组合框中项位置的编号。

初始化选择项

当用 READ 语句激活组合框时，MemVarName 或 FieldName 的值决定组合框初始时显示哪个组合框项。

 •	   如果 MemVarName 或 FieldName 是数值型的，组合框上显示的是组合框中与指定数值相对应的项。例如，如果内存变量、数组元素或字段中包含的是 1，则显示组合框中的第一项。如果 MemVarName 或 FieldName 的值与组合框中的项没有对应关系（指定的值小于 1 或者大于组合框项的总数），组合框是空的。

 •	   如果 MemVarName 或 FieldName 是字符型，在 MemVarName 或 FieldName 与组合框的每个列表项之间进行区分大小写的比较。进行比较时，忽略所有特殊字符以及前导空格或后缀空格。如果有匹配的项，该项初始时显示在组合框上。如果没有匹配的项，MemVarName 或 FieldName 的值初始时显现在组合框中，并且把它加在组合框列表项的最后，作为一个临时项。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定组合框及其项。GET命令必须包括 FUNCTION 子句、PICTURE 子句或二者兼有。这三种方法具有同等效果。FUNCTION 子句和 PICTURE 子句包含组合框的特征代码 ^ 和组合框的项集合。

组合框项也可以用 FROM Arrayname 子句指定。如果用它来指定项，就不需要在 FUNCTION 或 PICTURE 子句中再包括它们。不过，即使使用 FROM Arrayname 子句，^ 必须还包含在 FUNCTION 和 PICTURE 子句中。

FUNCTION 子句中的字符表达式 cFormatCodes 的起始字符必须是 ^。若要创建出现在组合框中的项，请在 ^ 之后加一个空格，再接一组用分号隔开的组合框项。例如，可以用下面的命令创建一组组合框项标题 Cash、Charge、Net 30 和 Net 60：

... FUNCTION '^ Cash;Charge;Net 30;Net 60' ...

PICTURE 子句中的字符表达式 cFormatCodes 使用的语法同 FUNCTION 子句中字符表达式使用的语法基本一样。不同是 PICTURE 子句字符表达式起始字符要在 ^ 前加一个 @ 字符。

例如，可用下面的 PICTURE 命令创建组合框项标题 Cash、Charge、Net 30 和 Net 60：

... PICTURE '@^ Cash;Charge;Net 30;Net 60' ...

您还可以同时使用 FUNCTION 和 PICTURE 子句来创建组合框。同时使用时，FUNCTION 字符表达式 cFormatCode 必须包含 ^ 来创建组合框，后面加一空格以及组合框的列表项。PICTURE 字符表达式 cFormatCodes 也可以包含标题来创建附加的组合框项。

下面的示例说明了各种可用来创建组合框的语法。在所有示例中，创建的组合框都是放在第二行第二列上。组合框包含四项，标题分别是 Cash、Charge、Net 30 和 Net 60。组合框用内存变量 gnChoice 初始化。当从组合框中选择一个组合框项时，选择的结果保存在变量 gnChoice 中。

只用 FUNCTION 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '^ Cash;Charge;Net 30;Net 60'

READ

STORE 1 TO gnChoice

STORE '^ Cash;Charge;Net 30;Net 60' TO gcMyFunc

@ 2,2 GET gnChoice FUNCTION gcMyFunc

READ

只用 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@^ Cash;Charge;Net 30;Net 60'

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@^' + ' Cash;Charge;Net 30;Net 60'

READ

同时使用 FUNCTION 和 PICTURE 两子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '^' ;

PICTURE ' Cash;Charge;Net 30;Net 60'

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '^ Cash;Charge' ;

PICTURE ';Net 30;Net 60'

READ

PICTURE 和 FUNCTION 选项 N、T、2 和 3

您可以在 FUNCTION 和 PICTURE 子句的特征代码 ( ^ ) 后加入其他选项，来改变组合框的行为（N 和 T）和组合框的外观（2 和 3）。

特征代码 2 和 3 仅用于 FoxPro for Macintosh 中。

选项	说明
N	（默认）当组合框选定时，不终止 READ 命令
T	当组合框选定时，终止 READ 命令
2	创建平面（二维）组合框。这是在 FoxPro for Macintosh 中默认的组合框
3	创建一个三维组合框
具有特殊功能的列表框项

当定义列表项的标题时，可以为项指定特殊功能。例如，可以为项指定一个访问键或加入一些特殊字符来废止复选框。

快捷键

给复选框指定快捷键，只需在复选框标题中的快捷键字符前加上一个反斜杠和一个小于号 (\<)。下面的示例给 Cash 和 Charge 指定了快捷键 C 和 R：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '^ \<Cash;Cha\<rge;Net 30;Net 60'

READ

有关快捷键的详细内容，请参阅《开发指南》的第十二章“设计菜单”。

废止的组合框项

可以废止组合框的某一项，使它不能被选择。被废止的组合框项以废止色显示。要废止一个组合框项，只需在该项前加一个反斜杠 (\)。要废止整个组合框，需要包含 DISABLE 关键词。

在下面的示例中，Charge 项被废止。

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '^ Cash;\Charge;Net 30;Net 60'

READ

NAME ObjectName

仅用于 Visual FoxPro 中。

创建组合框的对象引用。以此使用“组合框”控制所具有的面向对象属性来处理组合框。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定组合框标题的字体和磅值。cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下面的子句可以使组合框中的项以 16 磅 Courier 字体显示：

FONT 'Courier', 16

如果省略 FONT 子句，并把组合框添加到 Visual FoxPro 主窗口中，组合框使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句并把组合框添加到用户自定义窗口中，组合框使用用户自定义窗口的字体。

如果有 FONT 子句，但是省略字体磅值 nFontSize，则使用 10 磅字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用相似的字体代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定组合框项的字形。如果省略 STYLE 子句，则使用正常体字形。

 •	   在 Visual FoxPro 中，如果指定的字形无效，就使用相似的字形代替。

 •	   在 FoxPro for Macintosh 中， 如果指定的字体无效，就使用正常体字形。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了可供 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh only）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以使用多个字符来指定字形的组合。例如，下面子句指定的字形是“粗斜体”：

STYLE 'BI'

DEFAULT Expression

当从组合框中选择某一项时，选择的结果保存在指定的内存变量、数组元素或字段中。如果指定的内存变量不存在，将自动创建该内存变量。若创建内存变量的命令中包含了 DEFAULT 子句，则根据它初始化自动创建的内存变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句，并且内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

DEFAULT 表达式 Expression 决定了所创建内存变量的类型及初始值。Expression 必须是一个数值或字符表达式。下面给出几个使用 DEFAULT 子句的示例：

@ 2,2 GET gnChoice FUNCTION '^ Cash;Charge;Net 30;Net 60' ;

DEFAULT 'Cash'

READ

@ 2,2 GET gnChoice FUNCTION '^ Cash;Charge;Net 30;Net 60';

DEFAULT 3

READ

FROM ArrayName

用预定义的数组创建组合框项。如果使用 FROM ArrayName 创建组合框项，必须在 FUNCTION 子句中包含指定的特征代码 ^ 或在 PICTURE 子句中包含指定的特征代码 @^。例如：

... FROM gaMyArray PICTURE '@^' ...

... FROM gaMyArray FUNCTION '^' ...

如果包括 FROM ArrayName，则忽略 PICTURE 或 FUNCTION 子句中任何指定组合框项的标题，而显示从 ArrayName 指定的数组元素中得到的项。如果数组是一维的，数组中的第一个元素成为组合框的第一项，数组中的第二个元素成为组合框的第二项，依此类推。

如果数组是二维的，只有数组中的第一列元素成为组合框的项。数组中的第一个元素成为组合框的第一项，数组中第一列的第二个元素成为组合框的第二项，依此类推。

RANGE nStartElement [, nElements]

允许从指定数组中的不同元素开始。例如，如果数组是一维的且 nStartElement 是 3，则数组中第三个元素成为组合框中的第一项，数组中的第四个元素成为组合框中的第二项，等等。默认情况下，组合框中的项从数组的第一个元素开始。

二维数组中元素的位置编号是沿行来计算的。例如，假设创建下面 3×3 的数组：

a b c

d e f

g h i

元素 a、b 和 c 的位置编号分别是 1、2 和 3，元素 d、e 和 f 的位置编号分别是 4、5 和 6，等等。使用二维数组时，只有与 nStartElement 在同一列的数组元素才能成为组合框中的项。例如，如果 nStartElement 等于 2，数组元素 b e h 成为组合框的项，如果 nStartElement 等于 5，只有元素 e 和 h 成为组合框项，等等。

如果包含了起始元素 nStartElement，还可以用一个数值表达式来指定数组元素中成为组合框项的数目。组合框中出现的项数由 nElements 决定。如果命令中不包括 nElements 项，则从元素 nStartElement 开始到该列结束的所有元素都是组合框中的项。

如果数组是二维的，nElements 指定数组列中元素的个数，这个数组列中包含了起始元素 nStartElement。例如，如果 nStartElement 是 2 而 nElements 是 3，数组的第二个元素和同一列接下来的两个元素就创建了组合框的项。

组合框中的元素可以动态地改变。可以通过修改数组来插入或删除一个组合框项。当发出 SHOW GETS 命令后，需重新计算 RANGE 子句。此时，如果序号为 nStartElement 或 nElements 的元素发生变化时，组合框的项将更新以反映发生的变化。

下列函数能够方便地操作数组：ACOPY( )、ADEL( )、ADIR( )、AELEMENT( )、AFIELDS( )、AINS( )、ALEN( )、ASCAN( )、ASORT( ) 和 ASUBSCRIPT( )。

下面的程序示例说明了组合框是如何动态地发生变化的。程序中有两个选项按钮可供选择：Vegetable 和 Fruits。另一组选项按钮指定蔬菜和水果的颜色：red、yellow 或者 green。当选择不同按钮时，组合框将发生变化。

CLEAR

SET TALK OFF

STORE 1 TO gnColor, gnFruitOrVeg, gnListChoice, gnStart

DIMENSION gaFoodArray(4,3)

STORE 'Apples'	TO gaFoodArray(1,1)

STORE 'Bananas'	TO gaFoodArray(1,2)

STORE 'Limes'	TO gaFoodArray(1,3)

STORE 'Strawberries'	TO gaFoodArray(2,1)

STORE 'Lemons'	TO gaFoodArray(2,2)

STORE 'Grapes'	TO gaFoodArray(2,3)

STORE 'Radishes'	TO gaFoodArray(3,1)

STORE 'Corn'	TO gaFoodArray(3,2)

STORE 'Lettuce'	TO gaFoodArray(3,3)

STORE 'Beets'	TO gaFoodArray(4,1)

STORE 'Squash'	TO gaFoodArray(4,2)

STORE 'Celery'	TO gaFoodArray(4,3)

@ 9,2   SAY 'Color:'

@ 11,2  SAY 'Type:'

@ 9,10  GET gnColor  FUNCTION '*RH \<Red;\<Yellow;\<Green' ;

SIZE 1, 9, 1 VALID PROC1( )

@ 11,10 GET gnFruitOrVeg FUNCTION '*RH \<Fruit;\<Vegetable' ;

SIZE 1, 12, 1 VALID PROC2( )

@ 4,14  GET gnListChoice FUNCTION '^' FROM gaFoodArray ;

RANGE gnStart,2

@ 14,17 GET gnOk FUNCTION '*T OK' DEFAULT 1 SIZE 1, 8

@ 10,0,10,41 BOX

@ 8,0,12,41  BOX

READ CYCLE

PROCEDURE PROC1

DO CASE

CASE gnColor = 1

IF gnFruitOrVeg = 1

gnStart = 1

ELSE

gnStart = 7

ENDIF

CASE gnColor = 2

IF gnFruitOrVeg = 1

gnStart = 2

ELSE

gnStart = 8

ENDIF

CASE gnColor = 3

IF gnFruitOrVeg = 1

gnStart = 3

ELSE

gnStart = 9

ENDIF

ENDCASE

STORE 1 TO gnListChoice

SHOW GETS

RETURN .T.

PROCEDURE PROC2

IF gnFruitOrVeg = 1

DO CASE

CASE gnColor = 1

STORE 1 TO gnStart

CASE gnColor = 2

STORE 2 TO gnStart

CASE gnColor = 3

STORE 3 TO gnStart

ENDCASE

ELSE

DO CASE

CASE gnColor = 1

STORE 7 TO gnStart

CASE gnColor = 2

STORE 8 TO gnStart

CASE gnColor = 3

STORE 9 TO gnStart

ENDCASE

ENDIF

STORE 1 TO gnListChoice

SHOW GETS

RETURN .T.

SIZE nHeight, nWidth

指定组合框的宽度。对于组合框来说，SIZE 中的第一个参数 nHeight 被忽略。这是因为组合框的高度是由组合框中项数的多少决定。SIZE 命令中可以包含一个任意数值的 nHeight。用列表示的组合框宽度由 nWidth 指定。如果省略 SIZE 子句，组合框的默认宽度由组合框中最长项的长度决定。

在 Visual FoxPro 和 FoxPro for Macintosh 中，组合框的字体也决定了组合框的大小。组合框的字体用 FONT 子句指定。如果省略 FONT 子句，组合框使用其父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

ENABLE

激活组合框。默认情况下，在发出 READ 命令时激活组合框。程序中可以包含 ENABLE 子句来提示组合框可被访问。

DISABLE

该命令可以阻止用 READ 命令激活组合框。废止的组合框以废止色显示。用户不能选择已废止的组合框。要废止组合框的某一项而不是整个组合框，请参阅本节前面的“废止组合框项”部分。您可以使用 SHOW GET ENABLE 打开废止的组合框。

MESSAGE cMessageText

创建一条信息。该信息在选定组合框时出现。

在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在状态栏中。如果状态栏用 SET STATUS BAR OFF 关闭，信息出现在 Visual FoxPro 主窗口最后一行的中间。

在 FoxPro for MS-DOS 中，默认情况下，信息出现在 FoxPro 主窗口最后一行的中间。信息的显示位置可以用 SET MESSAGE 来改变。

VALID lExpression1 | nExpression

检查用户输入。当用户选择组合框中的某一项时，要计算 VALID 表达式的值。通常，lExpression1 或 nExpression 是用户自定义函数。使用用户自定义函数，可以选择、打开或者废止其他控制；可以打开“浏览”窗口；可以打开另一个数据输入表单；还可以移到一条新记录上。用户自定义函数可以使用 CLEAR READ 命令来终止 READ 命令。

lExpression1

当返回给 VALID 子句一个逻辑值时，这个逻辑值被忽略，组合框仍然是活动控制。不过，可以指定一个用户自定义函数来返回逻辑值给 VALID 子句，以此激活另一个控制。

nExpression

VALID 子句包含一个数值表达式，用来指定当选择组合框中某一项后，激活哪一个控制。有关控制的详细信息，请参阅控制和对象。

表达式 nExpression 有如下三种作用：

 •	   当 nExpression = 0 时，组合框仍然是活动控制。

 •	   当 nExpression 为正数时，nExpression 指定向前走过控制的数目。例如，当组合框是当前控制，并且 VALID 子句返回 1 时，将激活下一个控制。如果 nExpression 大于组合框之后控制的总数，则终止 READ 命令（除非发出了 READ CYCLE 去激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定回退控制的数目。例如，当组合框是当前控制，并且 VALID 返回 -1 时，激活前一个控制。当 nExpression 退回到第一个控制的前面时，则终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

WHEN lExpression2

指定一个条件。在组合框能够被选定之前，表达式 lExpression2 必须求值为“真”(.T.)。如果 lExpression2 求值为“假”(.F.)，组合框不能被选定。如果将其放在其他控制之间，则跳过它。

COLOR SCHEME nSchemeNumber1 [, nSchemeNumber2]

指定组合框的颜色。如果不包含 COLOR 子句，组合框的颜色由 Visual FoxPro 主窗口的配色方案决定。如果组合框在用户自定义的窗口中，用户自定义窗口的配色方案决定了组合框的颜色。

默认情况下，组合框及其项的颜色是根据 Visual FoxPro 主窗口或活动的用户自定义窗口的配色方案或由配色方案 2 得到的。

第一个配色方案 nSchemeNumber1 决定组合框被选择、激活或废止时前景的颜色。它还决定了消息的显示颜色。第二个配色方案 nSchemeNumber2 决定了组合框中项和组合框边框的颜色。

COLOR ColorPairList

指定组合框的颜色。下表列出了各种配色方案的颜色对，以及组合框的各个颜色对控制。

颜色对编号	nSchemeNumber1 或输出窗口
5	消息
6	选定的组合框
9	打开的组合框
10	废止的组合框
颜色对编号	nSchemeNumber2 或配色方案 2
1	废止的项
2	打开的项
3	边框
6	选定的项
7	快捷键
当选择、激活、废止组合框时，颜色对列表在下列情况下只控制组合框的前景颜色以及显示信息（组合框的颜色属性由配色方案 nSchemeNumber1 控制）的颜色。若要对组合框的所有颜色进行控制，请指定两个配色方案。

下面的示例说明了如何使用其他预定义配色方案改写当前配色方案：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '^ Cash;Charge;Net 30;Net 60' ;

COLOR SCHEME 4, 5

READ

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 命令创建组合框。有关与 FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

当选择一个组合框时，组合框打开，并显示一个项列表，从中可以选择项。您可以使用包含组合框的规格代码──插入符 (^) 的 FUNCTION 和/或 PICTURE 子句来指定组合框的项。


请参阅

控制和对象, 组合框控制, CREATE FORM, DEFINE CLASS, SET KEYCOMP


@ ... GET - 命令按钮命令

请参阅

创建一组命令按钮。包括此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，请使用命令按钮控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
FUNCTION cFormatCodes | PICTURE cFormatCodes
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT Expression]
[SIZE nHeight, nWidth [, nSpacing]]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[VALID lExpression1 | nExpression]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定一组命令按钮中第一个按钮的位置。

行由上向下编号。第一行是 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏占据的那一行。在 FoxPro for MS-DOS 中，有关如何处理系统菜单栏以便能把命令按钮放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当把命令按钮添加到用户自定义窗口中时，命令按钮的行和列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度相一致。列的宽度与当前字体字符的平均宽度相一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中命令按钮的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列的坐标通过四舍五入原则去掉小数部分。

GET MemVarName | FieldName

指定保存选定命令按钮的内存变量、数组元素或字段。MemVarName 和 FieldName 必须是数值型或字符型。

如果 MemVarName 或 FieldName 是数值型，则把与命令按钮相对应的一个数值保存到指定的内存变量、数组元素或字段中。例如，如果创建了四个命令按钮并选定了第三个，那么就保存 3。如果 MemVarName 和 FieldName 是字符型，则把选定的命令按钮标题保存到指定的内存变量、数组元素或字段中。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定命令按钮并给出命令按钮的标题或图片。GET 命令必须包括 FUNCTION 子句、 PICTURE 子句或二者兼有。这三种方法具有同等效果。FUNCTION 子句和 PICTURE 子句都包含命令按钮的特征代码──星号 (*)，以及单个命令按钮的标题文本。在命令按钮的标题中，不支持反斜杠符 (\)。

FUNCTION 字符表达式 cFormatCodes 的起始字符必须是一个星号 (*)。要创建命令按钮标题，请在 * 之后加一空格，再加上用分号隔开的标题列表。您可以为每个按钮创建一个标题。例如，可用下面的 FUNCTION 命令创建标题为 OK 和 Cancel 的一组命令按钮。

... FUNCTION '* OK;Cancel' SIZE 1, 8 ...

PICTURE 字符表达式 cFormatCodes 使用的语法同 FUNCTION 子句中字符表达式使用的语法基本一样。不同的是 PICTURE 字符表达式的起始字符必须为 @，后面紧跟 *。例如，可用下面 PICTURE 命令创建标题为 OK 和 Cancel 的一组命令按钮：

.. PICTURE '@* OK;Cancel' SIZE 1, 8 ...

还可以同时使用 FUNCTION 和 PICTURE 命令来创建命令按钮。同时使用时，FUNCTION 字符表达式 cFormatCodes 必须包含 * 来创建命令按钮。* 之后跟一个空格以及命令按钮标题。PICTURE 字符表达式 cFormatCodes 可以包含标题以创建附加的命令按钮。

下面示例说明了各种可用来创建命令按钮的语法。例中创建了两个命令按钮：OK 和 Cancel。第一个命令按钮 (OK ) 位于第二行第二列上。与选定按钮对应的数值保存在内存变量 gnChoice 中。

只用 FUNCTION 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '* OK;Cancel' SIZE 1, 8

READ

STORE 1 TO gnChoice

STORE '* OK;Cancel' TO gcPrompts

@ 2,2 GET gnChoice FUNCTION gcPrompts SIZE 1, 8

READ

只用 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@* OK;Cancel' SIZE 1, 8

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@*' + ' OK;Cancel' SIZE 1, 8

READ

同时使用 FUNCTION 和 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*' ;

PICTURE ' OK;Cancel' SIZE 1, 8

READ

具有图片标题的命令按钮

在 Visual FoxPro 和 FoxPro for Macintosh 中，命令按钮的标题也可以是图片文件的文件名。

 •	   在 Visual FoxPro 中，图片文件可以是 .BMP 位图文件。

 •	   在 FoxPro for Macintosh 中，可以使用 PICT 类型的图片文件和扩展名为 .BMP 的位图文件。

命令按钮使用图片文件作标题与使用文本作标题时的行为很相似。使用图片文件作标题时，以图片文件代替文本作标题。与选择命令按钮一样，选择图片命令按钮同样把命令按钮的值保存到 MemVarName 或 FieldName 中。

要在命令按钮中使用图片文件，请把 B 加入到命令按钮的特征代码中。FUNCTION 和 PICTURE 子句创建命令按钮的特征代码分别是 * 和 @*，因此它们创建具有图片标题的命令按钮的特征代码分别是 *B 和 @*B。创建图片命令按钮时，在特征代码后加一个空格，再加图片文件名。如果图片文件不在默认目录或文件夹中，则应把路径加入图片文件名中。

附注

图片不会根据命令按钮的大小自动剪切、缩小或者放大以使命令按钮的大小与其相适应。请使用 SIZE 子句调节命令按钮的大小使其正好放下图片。

在 FoxPro for Macintosh 中，如果省略了图片文件的扩展名，FoxPro 首先寻找指定文件名加 .BMP 扩展名的图片文件。如果找不到，FoxPro 接着寻找指定文件名加 .PIC 扩展名的图片文件。如果还找不到，FoxPro 再寻找没有扩展名的指定图片文件。

图片掩码和命令按钮

在 Visual FoxPro 和 FoxPro for Macintosh 中，图片命令按钮有三种状态：上、下和废止。Visual FoxPro 自动控制图片命令按钮这三种状态的外观。但是，可以使用图片掩码来改写默认外观。

图片掩码用来控制图片命令按钮的透明区域。默认情况下，白色区域是透明的。如果存在图片掩码，图片掩码（而不是图片文件）的白色区域是透明的。

图片掩码是单色图片文件。在 Visual FoxPro 中，图片掩码是带有 .MSK 扩展名的位图文件。在 FoxPro for Macintosh 中，图片掩码是带有 .MSK 扩展名的位图文件，或者是带有 .PIC 扩展名的 PICT 类型的文件。图片掩码必须同图片文件具有相同的文件名和适当的扩展名。Visual FoxPro 自动在图片文件所在目录或文件夹中寻找图片文件的图片掩码。

大多数情况下，图片掩码是不需要的。如果图片中不需要显示任何白色的东西，或者图片文件具有白色的背景，那么图片命令按钮就会如希望的那样出现三种状态：上、下和废止。

当图片命令按钮具有图片掩码并处在上或下状态时，图片中的白色看上去是透明的，可以看到按钮的前景颜色。不过，图片中的某些部分仍保持白色。

假设有一幅画着狗的图片，背景色是白色。如果狗的眼睛是白色的，按钮的前景色是红色的，想使按钮背景色看起来是红色，狗的眼睛是白色而不是红色，可以通过做一幅图片掩码来实现。图片掩码与图片文件大小一样，但只有黑白两种颜色。图片掩码的背景色不变，只是把狗及其眼睛全部变成黑色。这样，显示按钮时，按钮的前景色与背景色匹配呈红色，而狗的眼睛却是白色的。

当废止一个图片命令按钮时，图片文件中的白色部分是透明的，可以透过它看到按钮的前景色彩。但图片文件中非白色部分以灰黑色出现。如果按钮有图片掩码，那么掩码上所有白色部分都是透明的，可以通过它看到按扭的色彩，而所有黑色部分看上去象灰黑色。

PICTURE 和 FUNCTION 的选项 N、T、H、V、2 和 3

可以用特征代码 * 组合其他选项，来改变命令按钮的行为（N 和 T）和外观（H、V、2 和 3）。

特征代码 2 和 3 仅用于 FoxPro for Macintosh 中。

选项	说明
N	当选定命令按钮时，不终止 READ 命令
T	当选定命令按钮时，终止 READ 命令。这是默认行为
H	水平行上命令按钮的位置
V	在垂直列中确定命令按钮的位置。这是默认方向。
2	创建平面的（二维的）黑白命令按钮。
3	创建三维命令按钮。本项是 FoxPro for Macintosh 默认的按钮类型。
您可以把选项 H、V 和选项 2、3 同选项 T、N 组合起来。例如，下面的语句在水平行上创建一组命令按钮。当选择命令按钮中一个时，不会终止 READ 命令：

... FUNCTION '*NH ... '

在 FoxPro for Macintosh 中，下面语句在水平行上创建一组二维的命令按钮。当选择命令按钮中一个时，不会终止 READ 命令。

... FUNCTION '*NH2 ... '

具有特殊功能的命令按钮

您可以为命令按钮指定一个快捷键，也可以废止命令按钮，或者创建默认按钮或取消按钮。要把这些特殊功能赋给命令按钮，必须在定义命令按钮标题中加入一些特殊字符。当标题保存到 MemVarName 或 FieldName 中时，将删除这些特殊字符。

快捷键

给命令按钮指定快捷键，只需在命令按钮标题中的快捷键字符前加上一个反斜杠和一个小于号 (\<) 即可。下面的示例创建 OK 和 Cancel 两个命令按扭，它们的快捷键分别是 O 和 C：

STORE 1 TO gnChoice

@ 2,8 GET gnChoice FUNCTION '*  \<OK;\<Cancel'

READ

有关快捷键的详细内容，请参阅《开发指南》的第十二章“设计菜单”。

废止命令按钮

您可以废止命令按钮，这样就不能对其进行选择，废止的按钮用废止色显示。要废止单个的命令按钮，可在该命令按钮标题前加入两个反斜杠字符 (\\)。要废止一组命令按钮，请使用 DISABLE 子句。

下面的示例废止 OK 命令按钮。

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '* \\OK;Cancel'

READ

默认的命令按钮

通常情况下，默认命令按钮用来退出数据输入表单或对话框，并保存在数据输入表单和对话框中所作的修改。要创建默认命令按钮，请在命令按钮的标题前加入一个反斜杠和感叹号 (\!)。

下面的示例指定 OK 命令按钮为默认命令按钮：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*  \!OK;Cancel'

READ

在 FoxPro for MS-DOS 中，默认命令按钮带有双尖括号以区别于其他命令按钮。在按 Ctrl+Enter 或 Ctrl+W 时，自动选择默认命令按钮。对于每个 READ 命令，只能指定一个默认命令按钮。

在 Visual FoxPro 中，默认命令按钮四周有一黑边。按 Enter、Ctrl+Enter 或 Ctrl+W 键都选择它。在 Visual FoxPro 中，KEYCOMP 设置以如下方式决定默认命令按钮的行为：

 •	   如果使用 SET KEYCOMP TO DOS，默认命令按钮的行为同 FoxPro for MS-DOS 中默认命令按钮的行为一样。

 •	   如果使用 SET KEYCOMP TO WINDOWS，当在按钮之间移动时，默认命令按钮发生变化。当按钮以外的其他控制处于活动状态时，用 \! 指定的命令按钮是默认命令按钮。当一个命令按钮为活动状态时，它就变为默认命令按钮。

在 FoxPro for Macintosh 中，默认命令按钮四周有一黑边。在 FoxPro for Macintosh 中，KEYCOMP 设置以如下方式决定默认命令按钮的行为：

 •	   如果使用 SET KEYCOMP TO DOS，默认命令按钮不发生变化，并且可以通过按 Ctrl+Enter 来选中它。

 •	   如果使用 SET KEYCOMP TO WINDOWS，默认命令按钮四周有一黑边，并且不发生变化。要选择它可按 Enter 或 Ctrl+Enter 键。但是，如果当前控制是一个文本编辑区，按 Enter 键时，光标就进入文本编辑区的下一行。在文本编辑区，请按 Ctrl+Enter 选择默认命令按钮。

 •	   如果使用 SET KEYCOMP TO MAC，默认命令按钮四周有一黑边，并且不发生变化。要选择它可按 Enter 键。但是，如果当前活动控制是一个文本编辑区，按 Enter 键时，光标进入文本编辑区的下一行。在文本编辑区中，请按 Ctrl+Enter 选择默认命令按钮。

取消命令按钮

当按 Esc 键时，自动选择取消命令按钮。通常，取消命令按钮用来退出数据输入表单、对话框或例程，并且不保存其中的任何改变。对于每个 READ 命令，只能指定一个取消命令按钮。

在没有设置取消命令按钮、编辑 @ ... GET 的编辑区时，按 Esc 键结束编辑，并且恢复该区域的原始值。此时，如果编辑区有一个 VALID 过程，则不执行该过程。当设置了取消命令按钮时，按 Esc 键会保存 @ ... GET 编辑区的内容，并且执行 VALID 过程。

要创建取消命令按钮，请在创建命令按钮时，在其标题前加入反斜杠和问号 (\?)。

下面的示例指定 Cancel 命令按钮为取消命令按钮：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '* OK;\?Cancel'

READ

具有组合特征的命令按钮

可以创建具有多个特征的命令按钮。在下面的示例中，OK 命令按钮是默认命令按钮，它的快捷键指定为字符 O。Cancel 命令按钮是取消命令按钮，它的快捷键指定为字符 C。快捷键字符紧接在它的前导符 (\<) 之后。

STORE 1 TO gnChoice

@ 2, 2 GET gnChoice FUNCTION '*  \!\<OK;\?\<Cancel'

READ

NAME ObjectName

仅用于 Visual FoxPro 中。

创建命令按钮的对象引用。创建了命令按钮对象引用，就能够使用“命令按钮控制”所具有的面向对象属性来处理命令按钮。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定命令按钮标题中的字体和字体磅值。cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下面的命令使按钮标题以 16 磅 Courier 字体显示：

FONT 'Courier', 16

如果省略 FONT 子句，把命令按钮添加到 Visual FoxPro 主窗口中，命令按钮使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句，并把命令按钮添加到用户自定义窗口中，命令按钮使用用户自定义窗口的字体。

如果包含 FONT 子句，但是省略了字体磅值 nFontSiz，则使用 10 磅字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用相似的字体代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体代替。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定命令按钮标题的字形。如果省略 STYLE 语句，则使用普通字形。

 •	   在 Visual FoxPro 中，如果指定的字形不可用，则使用相似的字形代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字形不可用，使用正常体字形。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以使用多个字符来指定字形的组合。例如，下面的子句指定的字形是“组斜体”：

STYLE 'BI'

DEFAULT Expression

当选定了命令按钮时，选择结果将保存在指定的内存变量、数组元素或字段中。如果指定的内存变量不存在，则自动创建它。若创建内存变量的命令中包含了 DEFAULT 子句，则根据它初始化自动创建的内存变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建此数组。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句，并且内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

DEFAULT 表达式 Expression 决定了创建的内存变量类型及初始值。Expression 必须是数值型或字符型。下面给出几个使用 DEFAULT 子句的示例：

@ 2,2 GET gnChoice FUNCTION '* OK;Cancel' DEFAULT 'OK'

READ

@ 2,2 GET gnChoice FUNCTION '* OK;Cancel' DEFAULT 2

READ

STORE 'OK' TO gcButton

@ 2,2 GET gnChoice FUNCTION '* OK;CANCEL' DEFAULT gcButton

READ

SIZE nHeight, nWidth [, nSpacing]

指定命令按钮的大小及命令按钮间的间隔。nHeight 指定命令按钮以行计的高度。

在 FoxPro for MS-DOS 中，命令按钮的高度只能是一行高，因此数值表达式 nHeight 被忽略。

默认情况下，单个命令按钮的宽度是由该命令按钮标题文本的长度确定的。nWidth 指定命令按钮的宽度，是以列数计算的。命令按钮的大小绝不会比它本身的标题小。

默认情况下，垂直命令按钮间没有间隔，水平命令按钮间保留一列间隔。命令按钮之间的间隔用参数 nSpacing 指定。当建立垂直命令按钮集时，nSpacing 指定的是命令按钮在垂直方向上按钮间相距的行数。当建立水平命令按钮集时，nSpacing 指定的是命令按钮在水平方向上按钮间相距的列数。

在 Visual FoxPro 和 FoxPro for Macintosh 中，命令按钮的字体也决定了命令按钮的大小。命令按钮的字体用 FONT 子句指定。如果省略 FONT 子句，命令按钮将使用其父窗口（Visual FoxPro 主窗或用户自定义窗）的字体。

下面的示例演示了 SIZE 子句如何控制命令按钮间的间隔：

CLEAR

@ 2,2 GET gnChoice FUNCTION '* OK;Cancel' ;

DEFAULT 1 SIZE 2, 10, 1

@ 2,16 GET gnChoice FUNCTION '* OK;Cancel' ;

DEFAULT 1 SIZE 2, 10, 2

READ

ENABLE

激活命令按钮。默认情况下，当发出 READ 命令时激活命令按钮。程序中可以包括 ENABLE 子句来提示命令按钮可被访问。

DISABLE

该命令可以阻止用 READ 命令激活命令按钮。不活动的命令按钮以废止色显示。用户不能选择不活动的命令按钮。要激活已废止的命令按钮，可以使用 SHOW GET ENABLE。

MESSAGE cMessageText

创建一条信息，该信息在选定命令按钮时出现。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在状态栏中。如果状态栏被 SET STATUS BAR OFF 关闭，信息就出现在 Visual FoxPro 主窗口最后一行的中间。

 •	   在 FoxPro for MS-DOS 中，默认情况下，信息出现在 Visual FoxPro 主窗口最后一行的中间。信息出现的位置可以用 SET MESSAGE 来改变。

VALID lExpression1 | nExpression

检查用户的输入。当用户单击命令按钮时，对 VALID 表达式求值。通常，lExpression1 或 nExpression 是用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开“浏览”窗口，打开另一个数据输入表单，还可以移到一条新记录上。用户自定义函数可使用 CLEAR READ 命令终止执行 READ 命令。

lExpression1

当返回给 VALID 子句一个逻辑值时，逻辑值被忽略，命令按钮仍然是活动控制。不过，可以指定一个用户自定义函数将逻辑值返回给 VALID 子句，并激活另一个控制。

nExpression

指定单击命令按钮时，激活哪一个控制。有关控制的信息，请参阅控制和对象。

表达式 nExpression 有如下三种作用：

 •	   当 nExpression = 0 时，命令按钮仍然是活动控制。

 •	   当 nExpression 为正数时，nExpression 指定向前走过控制的数目。例如，当选择命令按钮并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression 大于命令按钮之后控制的总数，则终止 READ 命令（除非发出了 READ CYCLE 去激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定向后回退控制的数目。例如，当选择命令按钮并且 VALID 返回 -1 时，激活前一个控制。当 nExpression 退回到第一个控制之前时，则终止 READ 命令（除非发出 READ CYCLE 命令来将活控制）。

下面的示例说明使用用户自定义函数可以做些什么。本例中，在垂直方向上建立了五个命令按钮。按钮选择用来定位记录指针。由于包含了函数代码 N，当选择命令按钮时，不会终止 READ 命令。当选择命令按钮时，将执行用户自定义函数 gorec。

CLOSE DATABASES

USE customer

SET TALK OFF

DEFINE WINDOW wOne FROM 3,5 TO 20,20 FLOAT DOUBLE COLOR SCHEME 5

ACTIVATE WINDOW wOne

@ 1,2 GET gnChoice FUNCTION '*NV Next;Prior;Top;Bottom;Quit';

SIZE 2, 10, 1 VALID GOREC( ) DEFAULT 1

READ CYCLE

CLEAR WINDOW

PROCEDURE gorec

DO CASE

CASE gnChoice = 1

SKIP

IF EOF( )

SKIP 1

ENDIF

CASE gnChoice = 2

SKIP 1

IF BOF( )

 	SKIP

ENDIF

CASE gnChoice = 3

GO TOP

CASE gnChoice = 4

GO BOTTOM

CASE gnChoice = 5

CLEAR READ

ENDCASE

@ 12,6 SAY ALLTRIM(STR(RECNO( )))

RETURN

WHEN lExpression2

指定一个条件。如果 lExpression 求值为“真”(.T.)，可以选择命令按钮。如果 lExpression 求值为“假”(.F.)，不能选择命令按钮。如果将其放在其他控制之间，则跳过它。

COLOR SCHEME nSchemeNumber

指定命令按钮的颜色。如果不包含 COLOR 子句，命令按钮的颜色由 Visual FoxPro 主窗口的配色方案决定。如果命令按钮在用户自定义的窗口中，用户自定义窗口的配色方案决定了命令按钮的颜色。

COLOR ColorPairList

指定命令按钮的颜色。在 Visual FoxPro 和 FoxPro for Macintosh 中，COLOR 子句不影响命令按钮的颜色。只有信息的颜色受 COLOR 子句的影响（如果状态栏不显示信息）。

下表给出了颜色对和列表控制中颜色对包含的内容。

颜色对编号	按钮属性
5	信息
6	被选择的按钮标题（仅用于 FoxPro for MS-DOS）。
7	快捷键（仅用于 FoxPro for MS-DOS）。
9	被激活的按钮标题（仅用于 FoxPro for MS-DOS）。
10	被废止的按钮标题（仅用于 FoxPro for MS-DOS）。
下面的示例建立 OK 和 Cancel 命令按钮。它们的快捷键分别为 O 和 C。另外，创建的按钮还具有 FoxPro for MS-DOS 的颜色特征：

 •	   被选择按钮的标题为亮白色，背景色为蓝色 (W+/B)。

 •	   快捷键以红色显示，背景色为蓝色 (R/B)。

 •	   活动的命令按钮标题为黄色，背景色为蓝色 (GR+/B)。

 •	   被废止的命令按钮标题为白色，背景色为蓝色 (W/B)。

当省略颜色对时，必须在省略颜色对的地方加入一个逗号。

命令如下：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '* \<OK;\<CANCEL;\\DISABLED';

COLOR ,,,,,W+/B,R/B,,GR+/B,W/B

READ

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，创建命令按钮和命令按钮组，应该使用表单设计器或 DEFINE CLASS。有关与FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

通常情况下，命令按钮用来发布命令，触发一个动作。VALID 子句指定触发的动作。要激活命令按钮，请使用 READ 或 READ CYCLE 命令。

在 Visual FoxPro 和 FoxPro for Macintosh 中，可以给命令按钮指定标题或图片。有关这方面的内容，请参阅“参数”部分的 FUNCTION 和 PICTURE 子句。

在 FoxPro for MS-DOS 中，命令按钮以文本字符串的形式出现，并用左右尖括号括起来。例如，“取消”按钮看上去象 <Cancel>。


请参阅

控制和对象，命令按钮控制，命令组控制，CREATE FORM，DEFINE CLASS，SET KEYCOMP


@ ... GET - 列表框命令

请参阅

创建列表框。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，请使用列表框控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
FROM ArrayName [RANGE nStartElement [, nElements ]]
| POPUP MenuName
[FUNCTION cFormatCodes] | [PICTURE cFormatCodes]
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT Expression]
[SIZE nHeight, nWidth]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[VALID lExpression1 | nExpression]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定列表框的位置。nRow、nColumn 都是数值表达式，用于指定列表框左上角的位置。

行由上向下编号。第一行是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏占据的那一行。在 FoxPro for MS-DOS 中，有关如何处理系统菜单以便能把列表框放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当把列表框放到用户自定义窗口中时，列表框行和列的坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度相一致，列的宽度与当前字体字符的平均宽度相一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中列表框的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列的坐标通过四舍五入原则去掉小数部分。

GET MemVarName | FieldName

指定保存用户选择结果的内存变量、数组元素或字段。MemVarName 和 FieldName 必须是数值型或字符型。如果 MemVarName 或 FieldName 是数值型，就把选择项在列表框中的位置保存到 MemVarName 或 FieldName 中。如果 MemVarName 或 FieldName 是字符型，就把列表框项的标题保存到 MemVarName 或 FieldName 中。

初始的选择项

当激活列表框时，MemVarName 或 FieldName 的值决定了列表框初始时选择哪个列表框项（如果存在）。例如，如果 MemVarName 或 FieldName 的值是 4，在使用 READ 语句激活列表框时，选择列表框的第四项。

如果 MemVarName 或 FieldName 的值在列表框中找不到对应项（小于 1 或大于列表框项数），则初始时列表框不选择任何项。

FROM ArrayName

由数组创建列表框。如果数组是一维的，数组中的第一个元素成为列表框的第一项，数组中的第二个元素成为列表框的第二项，依此类推。

如果数组是二维的，只有数组中的第一列元素成为列表框的项。数组中第一列的第一个元素成为列表框的第一项，数组中第一列的第二个元素成为列表框的第二项，依此类推。

RANGE nStartElement [, nElements]

指定在数组中的哪一个元素是列表框的第一项。例如，如果数组是一维的，且 nStartElemen 是 3，则数组中第三个元素成为列表框中的第一项，数组中的第四个元素成为列表框中的第二项，等等。默认情况下，列表框中的项从数组的第一个元素开始。

二维数组中元素的位置编号是沿行来计算的。例如，假设创建下面 3 x 3 的数组：

a b c

d e f

g h i

元素 a、b 和 c 的位置编号分别是 1、2 和 3，元素 d、e 和 f 的位置编号分别是 4、5 和 6，等等。使用二维数组时，只有与 nStartElement 在同一列的数组元素才能成为列表框中的项。例如，如果 nStartElement 等于 2 时，数组元素 b、 e 和 h 成为列表框的项，如果 nStartElement 等于 5 时，只有元素 e 和 h 成为列表框项。

如果包含了起始元素 nStartElement，还可以用一个数值表达式来指定数组元素中成为列表框项的数目。列表框中出现的项数由 nElements 决定。如果命令中不包括 nElements 项，则从元素 nStartElement 开始到该列结束的所有元素都是列表框中的项。

当发出 SHOW GETS 命令后，则重新计算 RANGE 子句。此时，如果 nStartElement 或 nElements 的值发生变化，列表框将更新以反映发生的变化。

列表框中的项可以动态地改变。可以通过修改数组来插入或删除列表框项。下列函数能够方便地处理数组：ACOPY( )、ADEL( )、ADIR( )、AELEMENT( )、AFIELDS( )、AINS( )、ALEN( )、ASCAN( )、ASORT( ) 和 ASUBSCRIPT( )。

POPUP MenuName

指定可以使用由 DEFINE POPUP 命令建立的菜单来创建列表框。在这种方法中，每个菜单项都成为列表框的项。

若要通过菜单建立列表框，请首先使用 DEFINE POPUP 命令建立菜单。将菜单名包含在 POPUP MenuName 子句中。

您可以创建菜单（也就是列表），它包含表中字段的记录 (PROMPT FIELDS)，磁盘上可用的文件 (PROMPT FILES)，以及表中字段的名称 (PROMPT STRUCTURE)。

下面的示例说明了怎样通过菜单建立列表框。DEFINE POPUP 用来建立一个菜单，它包含有磁盘上可用的表文件的名称。这样，表的名称就成为列表框的选项。MARGIN 用来给标记字符提供间隔。SCROLL 项在列表框的右边建立一个滚动条。

CLEAR

SET TALK OFF

STORE 1 TO gnChoice

DEFINE POPUP lstScrollOpts FROM 0, 0 PROMPT FILES LIKE *.DBF ;

MARGIN SCROLL

@ 2,2 GET gnChoice POPUP lstScrollOpts SIZE 8, 20

READ	&& Activate the list box.

FUNCTION cFormatCodes | PICTURE cFormatCodes

若想当用户从列表框中选择一项时终止 READ 命令，应加入 FUNCTION &T 或 PICTURE @&T。

若想当用户从列表框中选择一项时不终止 READ 命令，应加入 FUNCTION &N 或 PICTURE @&N。例如：

... FUNCTION '&N' ...

... PICTURE '@&N' ...

如果程序中没有 FUNCTION 或 PICTURE 子句，选择列表框项时不会终止 READ 命令。

在 FoxPro for Macintosh 中，可以在特征代码 & 之后添上 2 或 3，来分别建立二维或三维的列表框。特征代码后加 2 建立的二维列表框与 Macintosh 对话框中的列表框一样。特征代码后加 3 建立的三维列表框同 FoxPro for Macintosh 对话框中的列表框一样。如果省略特征代码 2 和 3，默认情况下，建立的是二维列表框。

在 FoxPro for Macintosh 中，下面的子句建立一个三维列表框，并且从中选择列表框项时不会终止 READ 命令。

... FUNCTION '&N3' ...

NAME ObjectName

仅用于 Visual FoxPro 中。

创建列表框的对象引用。以此可以使用“列表框控制”所具有的面向对象属性来处理列表框。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定列表框字体。cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下面的子句可以使列表框标题以 16 磅 Courier 字体显示。

FONT 'Courier', 16

如果省略 FONT 子句，并把列表框添加到 Visual FoxPro 主窗口中，列表框将使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句，并把列表框添加到用户自定义窗口中，列表框将使用用户自定义窗口的字体。

如果有 FONT 子句，但是省略字体磅值 nFontSize，则使用 10 磅字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用相似的字体代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定列表框项的字形。如果省略了 STYLE 语句，则使用正常体字形。

 •	   在 Visual FoxPro 中，如果指定的字形无效，则使用相似的字形代替。

 •	   在 FoxPro for Macintosh 中， 如果指定的字形无效，则使用正常体字形。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以使用多个字符来指定字形的组合。例如，下面的子句指定的字形为“粗斜体”：

STYLE 'BI'

DEFAULT Expression

当从列表框中选择某一项时，选择的结果保存在指定的内存变量、数组元素或字段中。如果指定的内存变量不存在，将自动创建它。若创建内存变量的命令中包含了 DEFAULT 子句，则根据它初始化自动创建的内存变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建此数组。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句并且内存变量 MemVarName 又不存在时，Visual FoxPro 将显示错误信息。

DEFAULT 表达式 Expression 决定了创建的内存变量类型及初始值。Expression 必须是一个数值型或字符型表达式。

SIZE nHeight, nWidth

指定列表框的高度和宽度。nHeight 指定以行计的列表框高度，nWidth 指定以列计的列表框宽度。如果省略 SIZE 子句，列表框的宽度默认值是由列表框中最长文本项的宽度决定的。默认情况下，菜单或数组中项的数目决定了列表框项的数目。

如果列表框无法一次显示全部项时，在列表框项的右边会显示一个滚动条。

在 Visual FoxPro 和 FoxPro for Macintosh 中，列表框的字体决定了列表框的大小。列表框的字体用 FONT 子句指定。如果省略了 FONT 子句，列表框使用父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

ENABLE

激活列表框。默认情况下，在发出 READ 命令时激活列表框。程序中可以包括 ENABLE 子句来提示列表框可被访问。

DISABLE

该命令可以阻止在发布 READ 命令时激活列表框。不活动的列表框以废止色显示。用户不能选择废止的列表框。要激活废止的列表框可以使用 SHOW GET ENABLE。

MESSAGE cMessageText

创建一条信息，该信息在选择列表框时出现。

在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在状态栏中。如果状态栏被 SET STATUS BAR OFF 关闭，信息将出现在 Visual FoxPro 主窗口的最后一行。

在 FoxPro for MS-DOS 中，默认情况下，信息出现在 Visual FoxPro 主窗口最后一行的中间。信息出现的位置可以用 SET MESSAGE 来改变。

VALID lExpression1 | nExpression

检查用户输入。当用户选择列表框中的某一项时，要计算 VALID 表达式的值。

通常，lExpression1 或 nExpression 是用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开“浏览”窗口，打开另一个数据输入表单，还可以移到一条新记录上。用户自定义函数可以使用 CLEAR READ 命令来终止 READ 命令。

lExpression1

当返回给 VALID 子句一个逻辑值时，逻辑值被忽略，列表框仍然是活动控制。不过，可以指定一个用户自定义函数来返回逻辑值给 VALID 子句，并激活另一个控制。

nExpression

VALID 子句包含一个数值表达式，用来指定当选择列表框中某一项后，激活哪一个控制。有关控制的详细信息，请参阅控制和对象。

表达式 nExpression 有如下三种作用：

 •	   当 nExpression = 0 时，列表框仍然是活动控制。

 •	   当 nExpression 为正数时，nExpression 指定向前走过控制的数目。例如，当选择列表框并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression 大于列表框之后控制的总数，则终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定向后回退控制的数目。例如，当选择列表框且 VALID 返回 -1 时，激活前一个控制。若 nExpression 退回至第一个控制之前，则终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

WHEN lExpression2

根据 lExpression2 的逻辑值确定是否允许从列表框中选择项。如果 lExpression2 求值为“真”(.T.)，可以选择列表框。如果 lExpression2 求值为“假”(.F.)，不能选择列表框。如果放在其他控制之间时，则将其跳过。

COLOR SCHEME nSchemeNumber

指定列表框的颜色。如果不包含 COLOR 子句，列表框的颜色由 Visual FoxPro 主窗口的配色方案决定。如果列表框在用户自定义窗口中，用户自定义窗口的配色方案决定了列表框的颜色。

COLOR ColorPairList

指定列表框的颜色。下表说明了各颜色对在 FoxPro for MS-DOS 中控制什么元素。

颜色对编号	列表框颜色属性
1	被废止项
2	激活项
3	边框和滚动条1
5	信息
6	被选择的列表框项
9	激活的列表框
10	被废止的列表框
1 控制用背景色画。滚动条用暗的前景色画
下面的示例使用前面示例中创建的数组来改写 Visual FoxPro 主窗口的配色方案：

ACTIVATE SCREEN

CLEAR

SET TALK OFF

STORE 1 TO gnChoice

DEFINE POPUP lstScrollOpts FROM 0,0 PROMPT FILES LIKE *.DBF ;

MARGIN SCROLL COLOR SCHEME 4

@ 2,2 GET gnChoice POPUP lstScrollOpts SIZE 8, 20

READ	&& Activate the list box

下面的示例使用前面示例中创建的数组来定义一个具有以下颜色特征的列表框：

 •	   被选择的列表框项为亮白色，背景色为蓝色 (W+B)。

 •	   活动的列表框为黄色，背景色为蓝色 (GR+/B)。

 •	   废止的列表框为白色，背景色为蓝色 (W/B)。

当省略颜色对时，必须在省略颜色对的地方加入一个逗号。

命令如下：

CLEAR

SET TALK OFF

STORE 1 TO gnChoice

DEFINE POPUP lstScrollOpts FROM 0,0 PROMPT FILES LIKE *.DBF ;

MARGIN SCROLL COLOR ,GR+/B,,,,W+/B,,,,W/B

@ 2,2 GET gnChoice POPUP lstScrollOpts SIZE 8, 20

READ	&& Activate the list box

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 来创建列表框。有关与FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

列表框中的项可从数组或菜单中得到。使用 FROM ArrayName 命令可以通过数组建立列表框。使用 POPUP MenuName 可以由 DEFINE POPUP 建立的菜单得到列表框。

要激活列表框，请使用READ 或 READ CYCLE 命令。


请参阅

控制和对象，DEFINE POPUP，列表框控制


@ ... GET - 选项按钮命令

请参阅

创建一组选项按钮。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，请使用选项组控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
FUNCTION cFormatCodes | PICTURE cFormatCodes
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT Expression]
[SIZE nHeight, nWidth [, nSpacing]]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[VALID lExpression1 | nExpression]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定一组选项按钮中第一个选项按钮的位置。nRow 和 nColumn 都是数值表达式，用于指定选项按钮组中第一个选项按钮的位置。

行从上往下编号。第一行是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏占据的那一行。在 FoxPro for MS-DOS 中，有关如何处理系统菜单，以便能把选项按钮放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当把选项按钮添加到用户自定义窗口中时，选项按钮的行和列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度相一致，列的宽度与当前字体字符的平均宽度相一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中选项按钮的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列的坐标通过四舍五入原则去掉小数部分。

GET MemVarName | FieldName

指定当用户选择一个选项按钮时，用来保存选择结果的内存变量、数组元素或字段。MemVarName 和 FieldName 必须是数值型或字符型。

如果 MemVarName 或 FieldName 是数值型，与选定的选项按钮相对应的数值将保存到指定的内存变量、数组元素或字段中。例如，如果创建了三个选项按钮且用户选择了第二个，则保存 2。

如果 MemVarName 或 FieldName 是字符型，则把用户选择的选项按钮的标题文本保存到指定的内存变量、数组元素或字段中。

初始的选项按钮选择

当发出 READ 命令激活选项按钮时，MemVarName 或 FieldName 的值决定了哪个选项按钮具有焦点。如果 MemVarName 或 FieldName 是数值型，则与数值对应的选项按钮具有焦点。例如，如果 MemVarName 或 FieldName 是 1，定义的第一个选项按钮在初始时具有焦点。如果没有与 MemVarName 或 FieldName 对应的选项按钮（小于 1 或大于选项按钮的总数），则初始时任何按钮都不具有焦点。

如果 MemVarName 或 FieldName 是字符型，则在 MemVarName 或 FieldName 与每个选项按钮标题之间进行区分大小写的比较。比较进行时，忽略所有特殊字符以及前导空格或后缀空格。如果有匹配的，相匹配的那一个选项按钮在初始时具有焦点。如果没有匹配的，初始时所有选项按钮都不具有焦点。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定选项按钮及其标题或图片。在此必须包括 FUNCTION 子句、PICTURE 子句或二者兼有。这三种方法具有同等效果。在选项按钮的标题中不支持反斜杠 (\)。

FUNCTION 子句中的字符表达式 cFormatCodes 起始字符必须是 *R。要创建选项按钮的标题，请在 *R 之后加一个空格，再写上用分号隔开的标题名称。一个选项按钮创建一个标题。例如，可用下面 FUNCTION 命令给三个选项按钮分别创建标题 None、Single 或 Double：

... FUNCTION '*R None;Single;Double' ...

PICTURE 子句中的字符表达式 cFormatCodes 使用的语法同 FUNCTION 子句中字符表达式使用的语法基本一样。不同的是 PICTURE 子句字符表达式必须以 @，后面紧跟 *R。例如，可用下面的 PICTURE 命令给三个选项按钮分别创建标题 None、Single 或 Double：

... PICTURE '@*R None;Single;Double' ...

您还可以同时使用 FUNCTION 和 PICTURE 命令来创建选项按钮。同时使用时，FUNCTION 字符表达式 cFormatCodes 必须包含 *R 来创建选项按钮，同时也可以加空格后写上选项按钮的标题。PICTURE 字符表达式 cFormatCodes 可以包括选项按钮标题，以创建其他的选项按钮。

下面示例说明了各种可用来创建选项按钮集的语法。在所有示例中，创建的选项按钮都起始于第二行第二列。创建的三个选项按钮的标题分别是 None、Single 和 Double。与选择的按钮对应的数字保存在内存变量 gnChoice 中。

只用 FUNCTION 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R None;Single;Double'

READ

STORE 1 TO gnChoice

STORE '*R None;Single;Double' TO gcMyFunc

@ 2,2 GET gnChoice FUNCTION gcMyFunc

READ

只用 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@*R None;Single;Double'

READ

同时使用 FUNCTION 和 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R' PICTURE ' None;Single;Double'

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R None;Single' PICTURE ';Double'

READ

具有图片标题的选项按钮

在 Visual FoxPro 和 FoxPro for Macintosh 中，选项按钮的标题也可以是图片文件的名称。在 Visual FoxPro 中，图片文件可以是 .BMP 位图文件。在 FoxPro for Macintosh 中，图片文件可以是 .BMP 位图文件和 PICT 类型的文件。

选项按钮使用图片文件作标题与使用文本作标题时的行为相似。例如，使用图片文件作标题时，显示图片文件而不显示选项按钮。就象选择选项按钮一样，选择图片标题也把选项按钮的值保存到 MemVarName 或 FieldName 当中。

要在选项按钮中使用图片文件，请把 B 加入到选项按钮的特征代码中。FUNCTION 和 PICTURE 子句创建选项按钮的特征代码分别是 *R 和 @*R。因此它们创建具有图片标题选项按钮的特征代码分别是 *RB 和 @*RB。创建图片选项按钮时，在其特征代码后加一个空格，再加上用分号分隔的图片文件名。如果图片文件不在默认目录及其子目录中，则应把路径加入到图片文件名中。

附注

图片不会根据选项按钮的大小自动剪切、缩小或者放大以使选项按钮与其大小相适应。请使用 SIZE 子句调节选项按钮的大小以便正好放下图片。

在 FoxPro for Macintosh 中，如果省略了图片文件的扩展名，FoxPro 首先寻找指定文件名加上 .BMP 扩展名的图片文件。如果找不到，FoxPro 接着寻找指定文件名加上 .PIC 扩展名的图片文件。如果还找不到，FoxPro 再寻找没有扩展名的指定的图片文件。

图片掩码和选项按钮

在 Visual FoxPro 和 FoxPro for Macintosh 中，图片选项按钮有三种状态：上、下和废止。Visual FoxPro 自动控制图片选项按钮这三种状态的外观。但是，可以使用图片掩码来覆盖默认外观。

图片掩码用来控制图片选项按钮的透明区域。默认情况下，白色是透明的。如果存在图片掩码，图片掩码（而不是图片文件）的白色区域是透明的。

图片掩码是单色图片文件。在 Visual FoxPro 中，图片掩码是带有 .MSK 扩展名的位图文件。在 FoxPro for Macintosh中，图片掩码是带有 .MSK 扩展名的位图文件，或者是带有 .PIC 扩展名的 PICT 类型的文件。图片掩码必须同图片文件具有相同的文件名和适当的扩展名。Visual FoxPro 自动在图片文件所在目录或文件夹中寻找图片文件的图片掩码。

大多数情况下，图片掩码是不需要的。如果图片中不需要将任何东西显示成白色或者图片文件具有白色背景，那么图片选项按钮就会如所希望的那样出现三种状态：上、下和废止。

当图片选项按钮具有图片掩码并处在上或下状态时，图片中的白色看上去是透明的，可以看到选项按钮的前景颜色。不过，图片中的某些部分仍保持白色。

假设有一幅关于狗的画，背景是白色。如果狗的眼睛是白色的，按钮的前景色是红色的，若想使按钮背景色看起来是红色，狗的眼睛是白色而不是红色，可以通过做一幅图片掩码来实现，图片掩码的大小和图片文件一样，但只有黑白两种颜色。图片掩码的背景仍是白色，只是把狗及其眼睛全部变成黑色。这样，显示按钮时，按钮的前景色与背景色匹配成红色，但狗的眼睛却是白色的。

当废止一个图片选项按钮时，图片文件中的白色部分是透明的，可以透过它看到按钮的前景色。但图片文件中非白色部分以暗灰色出现。如果按钮有图片掩码，那么掩码中所有白色部分都是透明的，可以通过它看到按钮的色彩，而所有黑色部分看上去都象暗灰色。

PICTURE 和 FUNCTION 选项 N、T、H、V、2 和 3

可以将 FUNCTION 和 PICTURE 子句的特征代码 *R 和其他选项组合起来改变选项按钮的行为（N 和 T）和外观（H、V、2 和 3）。

特征代码 2 和 3 仅用于 FoxPro for Macintosh 中。

选项	说明
N	当选定选项按钮时，不终止 READ 命令。这是默认行为
T	当选定选项按钮时，终止 READ 命令。
H	选项按钮在水平行上的位置。
V	选项按钮在垂直栏中的位置。这是默认方向。
2	创建平面的（二维的）选项按钮。在 FoxPro for Macintosh 中，这是选项按钮的默认类型。
3	创建三维选项按钮。
可以把上表各选项组合起来使用。例如，下面的语句在垂直方向创建一个选项按钮集，并且当选择选项按钮时，不会终止 READ 命令：

... FUNCTION '*RNV ... '

在 FoxPro for Macintosh 中，下面语句在垂直方向上创建二维选项按钮集，且当选择选项按钮时，不会终止 READ 命令：

... FUNCTION '*RNV2 ... '

具有特殊功能的选项按钮

您可以为选项按钮指定一个快捷键，也可以废止选项按钮。要给选项按钮指定特殊功能，必须在定义选项按钮时，在选择按钮的标题中加入一些特殊字符。当把选项按钮的标题存入到 MemVarName 或 FieldName 中时，这些特殊字符将被去掉。

快捷键

给选项按钮指定快捷键，只需在选项按钮标题中用作快捷键的字符前加上一个反斜杠和一个小于号 (\<)。下面的示例中创建三个标题分别为 None、Single 和 Double的选项按钮，并指定快捷键分别为 N、S 和 D：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R' PICTURE '\<None;\<Single;\<Double'

READ

有关快捷键的详细内容，请参阅《开发指南》的第十二章“设计菜单”。

废止选项按钮

您可以废止一个选择按钮，这样就无法选择该按钮，并且以暗灰色显示。要废止一个选项按钮，请在该选项按钮的标题前加入两个反斜杠字符 (\\)。要废止一个选项按钮集，请使用 DISABLE 子句。

下面的示例废止一个标题为 Single 的选项按钮：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R' PICTURE 'None;\\Single;Double'

READ

NAME ObjectName

仅用于 Visual FoxPro 中。

创建选项按钮的对象引用，就能够使用“选项按钮控制”所具有的面向对象属性来处理选项按钮。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定选项按钮标题中的字体和字体磅值。cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下面的子句可以使选项按钮标题以 16 磅 Courier 字体显示：

FONT 'Courier', 16

如果使用 FONT 子句，但是省略了字体磅值 nFontSize，则使用 10 磅字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用相似的字体代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

如果省略 FONT 子句，并把选项按钮添加到 Visual FoxPro 主窗口中，选项按钮将使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句，并把选项按钮添加到用户自定义窗口中，选项按钮将使用用户自定义窗口的字体。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定选项按钮标题的字形。如果省略了 STYLE 子句，则使用正常体字形。

 •	   在 Visual FoxPro 中，如果指定的字形不可用，则使用相似的字形代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字形不可用，则使用正常体字形。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
您可以组合多个字符来指定字形。例如，下面的子句指定的字形是“粗斜体”：

STYLE 'BI'

DEFAULT Expression

当选择一个选项按钮时，选择的结果保存在指定的内存变量、数组元素或字段中。如果指定的内存变量不存在，将自动创建该变量。若包含了 DEFAULT 子句，则初始化此变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建此数组。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句并且内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

DEFAULT 表达式 Expression 决定了创建的内存变量的类型及初始值。Expression 必须是一个数值型或字符型表达式。下面给出几个使用 DEFAULT 子句的示例：

@ 2,2 GET gnChoice FUNCTION '*R' + ;

'None;Single;Double' DEFAULT 'Single'

READ

@ 2,2 GET gnChoice FUNCTION '*R None;Single;Double' ;

DEFAULT 2

READ

SIZE nHeight, nWidth [, nSpacing]

指定各个选项按钮的大小及选项按钮间的间隔。nHeight 指定选项按钮以行计的高度。

在 FoxPro for MS-DOS 中，忽略 nHeight，这是因为选项按钮的高度只能是一行。

nWidth 指定每个选项按钮的宽度。如果省略了 SIZE 子句，每个选项按钮的宽度默认值是由选项按钮标题的长度确定的。

nSpacing 指定选项按钮间以行计的间隔。如果省略了 SIZE 子句，在垂直选项按钮之间不留空隔，在水平选项按钮之间空一列。

在 Visual FoxPro 和 FoxPro for Macintosh 中，选项按钮的字体决定了选项按钮的大小。选项按钮的字体由 FONT 子句指定。如果省略 FONT 子句，选项按钮将使用其父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

下面的示例说明了 SIZE 子句怎样决定按钮间的间隔：

CLEAR

@ 2,2 GET gnChoice1 FUNCTION '*R'+ '\<None;\<Single;\<Double' ;

DEFAULT 'None' SIZE 1, 12, 1

@ 2,16 GET gnChoice2 FUNCTION '*R'+ '\<None;\<Single;\<Double' ;

DEFAULT 'None' SIZE 1, 12, 3

READ

ENABLE

激活选项按钮。默认情况下，当发出 READ 命令时激活选项按钮。程序中可以包括 ENABLE 子句来提示选项按钮可被访问。

DISABLE

该命令可以阻止用 READ 命令激活选项按钮。要废止单个选项按钮而不是整个选项按钮集，请参阅前面的“废止选项按钮”。废止的选项按钮以暗灰色显示，用户不能选择废止的选项按钮。要激活废止的选项按钮，请使用 SHOW GET ENABLE。

MESSAGE cMessageText

创建一条信息，当选定选项按钮时显示该信息。

在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在状态栏中。如果状态栏被 SET STATUS BAR OFF 关闭，信息出现在 Visual FoxPro 主窗口的最后一行。

在 FoxPro for MS-DOS 中，默认情况下，信息出现在 Visual FoxPro 主窗口最后一行的中间。信息出现的位置可以用 SET MESSAGE 来改变。

VALID lExpression1 | nExpression

检查用户输入。当用户选择选项按钮时，将对 VALID 表达式求值。通常情况下，lExpression1 或 nExpression 是用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开“浏览”窗口，打开另一个数据输入表单，还可以移到一条新记录上。要终止 READ 命令，可以在用户自定义函数中使用 CLEAR READ 命令。

lExpression1

当返回给 VALID 子句一个逻辑值时，逻辑值被忽略，选项按钮仍然是活动控制。不过，可以指定一个用户自定义函数将逻辑值返回给 VALID 子句，并激活另一个控制。

nExpression

指定选择选项按钮后，激活哪一个控制。有关控制的详细内容，请参阅控制和对象。

表达式 nExpression 有如下三种作用：

 •	   当 nExpression = 0 时，选项按钮仍然是活动控制。

 •	   当 nExpression 为正数时，nExpression 指定向前走过控制的数目。例如，当选择选项按钮选中最后一个选项按钮，并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression 大于剩余的控制数，则终止 READ 命令（除非发出了 READ CYCLE 去激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定向后回退控制的数目。例如，当选择选项按钮选中第一个选项按钮且 VALID 返回 -1 时，激活前一个控制。当 nExpression 后退到第一个控制之前时，终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

WHEN lExpression2

根据 lExpression2 的逻辑值决定是否禁止选择选项按钮。如果 lExpression2 求值为“真”，可以选择选项按钮。如果 lExpression2 求值为“假”，不能选择选项按钮。如果它放在其他控制之间，则将其跳过。

COLOR SCHEME nSchemeNumber

指定选项按钮的颜色。如果不包含 COLOR 子句，选项按钮的颜色由 Visual FoxPro 主窗口的配色方案决定。如果选项按钮在用户自定义窗口中，用户自定义窗口的配色方案决定了选项按钮的颜色。

COLOR ColorPairList

指定选项按钮的颜色。下表列出了颜色对和每一颜色对控制什么。

颜色对编号	选项按钮属性
5	信息
6	被选择的选项标题
7	快捷键
9	激活的选项标题
10	被废止的选项标题
下面的示例说明了如何用另一个预定义的配色方案来覆盖一个配色方案：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R None;Single;Double';

COLOR SCHEME 4

READ

下面的示例中创建了 None、Single 和 Double 三个选项按钮，并指定 None 的快捷键为 N，Single 的快捷键为 S。另外，选项按钮具有 FoxPro for MS-DOS 的颜色特征：

 •	   选定的选项按钮的标题为亮白色，背景色为蓝色 (W+/B)。

 •	   快捷键字符以红色显示，其背景色为蓝色 (R/B)。

 •	   活动的选项按钮标题为黄色，其背景为蓝色 (GR+/B)。

 •	   废止的选项按钮标题为白色，背景色为蓝色 (W/B)。

当省略颜色对时，必须在省略颜色对的地方加入一个逗号。

命令如下：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*R \<None;\<Single;\\Double';

COLOR ,,,,,W+/B,R/B,,GR+/B,W/B

READ

有关配色方案和颜色对的详细内容，请参阅颜色概述主题

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 创建选项按钮组。有关与 FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

选择一个选项按钮使选择结果为当前选择，并取消前面的选择结果。同时，在该选项按钮旁的选项框中显示出当前选择结果。

如果使用“表单设计器”来创建数据输入表单，可能根本用不着这一命令。“表单设计器”自动生成命令创建选项按钮。

在 Visual FoxPro 和 FoxPro for Macintosh 中，可以指定选项按钮标题或图片。有关这方面的内容，请参阅“参数”部分的 FUNCTION 和 PICTURE 子句。


请参阅

控制和对象，CREATE FORM，DEFINE CLASS，选项按钮控制，SET KEYCOMP


@ ... GET - 微调控制命令

请参阅

创建微调控制。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，请使用微调控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
SPINNER nChangeValue [, nMinValue [, nMaxValue]]
[FUNCTION cFormatCodes]
[PICTURE cFormatCodes]
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT nExpression1]
[SIZE nHeight, nWidth]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[RANGE [nLowerBound] [, nUpperBound]]
[VALID lExpression1 | nExpression2 [ERROR cErrorText]]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定微调控制的位置。

行由上向下编号。第一行是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中第 0 列。

当把微调控制添加到用户自定义窗口中时，微调控制的行和列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度相一致，列的宽度与当前字体字符的平均宽度相一致。

可以用小数表示微调控制在窗口中的行和列坐标。

GET MemVarName | FieldName

指定保存用户选择结果的内存变量、数组元素或字段。在发出 READ 或 READ CYCLE 命令前，保存在 MemVarName 或 FieldName 中的数值是微调控制中显示的初始值。

SPINNER nChangeValue [, nMinValue [, nMaxValue]]

指定微调控制中显示的值。

在微调控制的文本框中显示的值以 nChangeValue 指定的值递增或递减。例如，如果 nChangeValue 指定为 2，那么当单击 up arrow 或 down arrow 键时，微调控制文本框中的值以 2 递增或递减。

下面的示例定义了微调控制的内存变量 gnChoice。微调控制的递增值为 1，下限为 -5，上限为 24，初始值为 3。

@ 2,2 GET gnChoice SPINNER 1, 5, 24 DEFAULT 3

nMinValue 指定微调控制中显示的最小值，nMaxValue 指定微调控制中显示的最大值。但是，使用键盘可以在文本框中输入一个值，它不在 nMinValue 和 nMaxValue 指定的范围内。要控制在文本框中可以用键盘输入那些值，请使用 VALID 或 RANGE 子句。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定微调控制及其标题。GET 命令必须包括 FUNCTION 子句、PICTURE子句或二者兼有。这三种方法具有同等效果。FUNCTION 子句和 PICTURE 子句控制微调控制文本框的显示方式和编辑方式。

下表说明 FUNCTION 子句中 cFormatCodes 如何决定微调控制文本框中值的显示方式。

cFormatCodes	用途
B	文本框中的值左对齐。
I	文本框中的值居中对齐。
J	文本框中的值右对齐。
K	当选定微调控制时，选择文本框中的全部值。
L	在值前显示一个导引符 0。
Z	当值为零时值显示为空。
^	使用科学记数法显示值
$	以货币格式显示值。货币值出现在值的左边还是右边取决于 SET CURRENCY 的值。
PICTURE 子句字符表达式 cFormatCodes 决定了微调控制文本框可以输入什么值、如何显示值以及微调控制的外观。PICTURE 子句表达式 cFormatCodes 处理微调控制文本框中的单个字符。要想输入允许的最大值及其他任何符号，请加入足够的掩码字符。

特征代码 2 和 3 仅用于 FoxPro for Macintosh 中。

cFormatCodes	用途
9	允许输入数字和符号（+ 或 -）。
#	允许输入数字、空格和符号（+ 或 -）。
$	显示当前货币符号（SET CURRENCY 指定）。
*	在值的左边显示星号。
.	指定小数点的位置。
,	可以用逗号隔开小数点左边的数字。
2	创建一个与 Macintosh 对话框中的微调控制一样的平面（二维的）微调控制。这是在 FoxPro for Macintosh 中默认的微调控制类型
3	创建一个与 Macintosh 对话框中的微调控制一样的三维的微调控制。
NAME ObjectName

仅用于 Visual FoxPro 中。

创建微调控制的对象引用，就能够使用“微调控制控制”所具有的面向对象属性来处理微调控制。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定微调控制标题中的字体和字体磅值。cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下面的示例中微调控制标题以 16 磅 Courier 字体显示：

@ 2, 2 GET gnChoice SPINNER 1, 1, 10 DEFAULT 3 FONT 'Courier', 16

如果包含 FONT 子句，但是省略了字体磅值 nFontSize，则使用 10 磅字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用相似的字体代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

如果省略 FONT 子句，并把微调控制添加到 Visual FoxPro 主窗口中，微调控制将使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句，并把微调控制添加到用户自定义窗口中，微调控制将使用用户自定义窗口的字体。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定微调控制的字形。如果省略 STYLE 语句，则使用正常体字形。

 •	   在 Visual FoxPro 中，如果指定的字形无效，则使用相似的字形代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字形无效，则使用正常体字形。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
您可以组合多个字符来指定字形。例如，下面的子句指定微调控制中的文本字形是“粗斜体”：

@ 2, 2 GET gnChoice SPINNER 1, 1, 10 DEFAULT 3 STYLE 'BI'

DEFAULT nExpression1

当退出微调控制时，微调控制的值存到指定的内存变量、数组元素或字段中。如果指定的内存变量不存在，就自动创建该变量。如果包含了 DEFAULT 子句，则初始化此变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建此数组。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句，并且内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

SIZE nHeight, nWidth

指定微调控制的高度和宽度。nHeight 指定微调控制的高度。微调控制的高度是当前字体或创建微调控制时指定的字体高度的倍数。例如，nHeight 等于 2 时，那么微调控制的高度就是当前字体或指定字体高度的两倍。

nWidth 指定微调控制的宽度。微调控制的宽度是当前字体或创建微调控制时指定字体字符平均宽度的倍数。例如，nWidth 等于 2 时，微调控制的宽度就是当前字体或指定字体字符平均宽度的两倍。

微调控制字体也决定微调控制的大小。微调控制字体由 FONT 子句指定。如果省略 FONT 子句，微调控制则使用其父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

ENABLE

激活微调控制。默认情况下，在发出 READ 命令时激活微调控制。程序中可以包括 ENABLE 子句来提示微调控制可被访问。

DISABLE

该命令可以阻止用 READ 命令激活微调控制。废止的微调控制以暗灰色显示。用户不能选择废止的微调控制。要激活一个废止的微调控制，请使用 SHOW GET ENABLE。

MESSAGE cMessageText

创建一条信息，在选定微调控制时显示该信息。如果状态栏被 SET STATUS BAR OFF 关闭，信息将出现在 Visual FoxPro 主窗口的最后一行。

RANGE [nLowerBound] [, nUpperBound]

指定可接受的微调控制值的范围。如果输入微调控制文本框中的数值不在指定的范围内，将出现一条信息提示正确的数值范围。可以使用 ON READERROR 改写默认范围。

nLowerBound 指定范围的下限，nUpperBound 指定范围的上限。可以省略 nLowerBound 或 nUpperBound，但不能两个都省略。如果省略了一个界限值，则不检查该范围的这一端。

在没有改变微调控制初始值前按 ENTER 键，将不检查该范围。

VALID lExpression1 | nExpression2 [ERROR cErrorText]

检查用户输入。当用户使用微调控制选择一个值并试图退出微调控制时，对 VALID 表达式求值。

附注

同 RANGE 的范围检查不同，除按 Esc 键退出之外，在试图退出控制时总要进行 VALID 检查。RANGE 范围检查则只是当微调控制的初始值发生变化时执行。

通常，lExpression1 或 nExpression2 是用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开“浏览”窗口，打开另一个数据输入表单，还可以移到一条新记录上。用户自定义函数可以用 CLEAR READ 命令来终止 READ 命令。

lExpression1

 •	   如果 lExpression1 求值为“真”(.T.)，微调控制中的值被认为是正确的并退出微调控制。

 •	   如果 lExpression1 求值为“假”(.F.)，在微调控制中输入的值被认为是不正确的，微调控制仍是活动控制。这时，图形状态栏中显示提示信息，要求在按 Spacebar 键之后重新输入数据。

nExpression2

nExpression2 用来指定选择微调控制后，激活哪一个控制。有关控制的详细信息，请参阅控制和对象。

 •	   当 nExpression2 = 0 时，微调控制仍然是活动控制，且 MESSAGE cMessageText 和 ERROR cErrorText 信息被压缩。可以在由 VALID 子句调用的用户自定义函数中编写特别出错信息例程。

 •	   当 nExpression2 为正数时，nExpression2 指定向前走过控制的数目。例如，当选择微调控制并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression2 大于余下控制的总数，则终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

 •	   当 nExpression2 为负数时，nExpression2 指定向后回退控制的数目。例如，当选择微调控制且 VALID 返回 -1 时，激活前一个控制。当后退到第一个控制之前时，终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

ERROR cErrorText

指定一个当 VALID 求值为“假”(.F.) 时显示的用户出错信息，cErrorText 会出现在默认出错信息的位置上。

WHEN lExpression2

指定一个条件。微调控制可被选择之前，表达式 lExpression2 的值必须为“真”(.T.)。如果 lExpression2 求值为“假”(.F.)，微调控制不能被选择。如果它放在其他控制之间，则将其跳过。

COLOR SCHEME nSchemeNumber

指定微调控制的颜色。如果不包含 COLOR 子句，微调控制的颜色由 Visual FoxPro 主窗口的配色方案决定。如果微调控制添加在用户自定义窗口中，用户自定义窗口的配色方案决定了微调控制的颜色。

COLOR ColorPairList

指定微调控制的颜色。如果不包含 COLOR 子句，微调控制的颜色由 Visual FoxPro 主窗口的配色方案决定。如果微调控制添加在用户自定义窗口中，用户自定义窗口的配色方案决定微调控制的颜色。

在下面的配色方案或颜色对中只有颜色对 2、5、6 和 10 影响微调控制的颜色。

颜色对编号	微调控制的属性
2	文本框
5	信息
6	被选择的微调控制
10	被废止的微调控制
有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 创建微调控制。有关与 FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

在 FoxPro for MS-DOS 中，微调控制语法创建数值文本框。必须使用键盘向文本框中输入数值。增量 nChangevalue、最低限值、最高限值 (nMinValue 和 nMaxValue)、以及 FONT 和 STYLE 子句都被忽略。


请参阅

控制和对象，CREATE FORM，DEFINE CLASS，微调控制


@ ... GET - 文本框命令

请参阅

创建文本框。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，请使用文本框控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
[FUNCTION cFormatCodes]
[PICTURE cFormatCodes]
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[DEFAULT Expression]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[[OPEN] WINDOW WindowName]
[RANGE [LowerBound] [, UpperBound]]
[SIZE nHeight, nWidth]
[VALID lExpression1 | nExpression [ERROR cErrorText]]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定文本框的位置。

行由上向下编号。第一行是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏占据的那一行。在 FoxPro for MS-DOS 中，有关如何处理系统菜单以便把文本框放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当把文本框添加到用户自定义窗口中时，文本框行和列的坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体可以用多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度相一致，列的宽度与当前字体字符的平均宽度相一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中文本框的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列的坐标通过四舍五入原则去掉小数部分。

GET MemVarName | FieldName

指定内存变量、数组元素或字段，用于保存用 @ ... GET 命令创建的文本框。

提示

要编辑备注字段，使用 @ ... EDIT 比使用 @ ... GET 更好。@ ... EDIT 命令创建带有滚动条的文本编辑窗口。发出 @ ... EDIT 命令时，文本编辑窗口显示出备注字段的内容。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定决定文本框输出效果（屏幕显示或打印）的函数代码或图片代码。在创建文本框的命令中，可以包括 FUNCTION 子句，也可以包括 PICTURE 子句，还可以既包括 FUNCTION 子句又包括 PICTURE 子句。这些子句包含特殊的代码来控制指定的内存变量、数组元素或字段的显示和编辑方式。

FUNCTION 代码可以包含在 PICTURE 子句中。在这种情况下，PICTURE 子句的起始字符必须是 @。另外，PICTURE 子句中可以包含 FUNCTION 代码、PICTURE 代码或者两者都有。由于 FUNCTION 子句会影响整个表达式，因此它只能包含 FUNCTION 代码。

FUNCTION 代码	用途
A	只允许字母字符（不允许空格和标点符号）。
B	文本框中的数值数据左对齐。
D	使用当前 SET DATE 格式。
E	将日期型数据用 BRITISH 日期类型来编辑。
I	文本框中的文本居中对齐。
J	文本框中的文本右对齐。
K	当光标移入文本框中时，选定文本框中的全部内容。
L	在文本框中显示前导零（代替空格）。这只在使用数值数据时使用。
MList	创建多重预置的选择。List 是一个用逗号隔开的项集。 列表中的单项不能包含逗号。如果发出 READ 命令时，MemVarName 或 FieldName 不包含列表中的一项，则显示列表中的第一项。要滚动列表，请按空格键或键入列表项的第一个字符。要选择列表项中的一项，然后将活动焦点交给下一个控制，请按 ENTER 键。本代码只在使用字符数据时使用。
R	显示文本框的格式掩码。在退出文本框时不保存格式掩码字符。本代码只在使用字符或数值数据时使用。
Sn	限定文本框中的字符为 n 个。可以使用光标控制键在文本框内滚动。只在使用字符数据时使用。
T	去掉 MemVarName 或 FieldName 中的前导空格和后缀空格。
Z	当 MemVarName 或 FieldName 的值为 0 时显示空格。只在使用数值数据时使用。
!	把字母字符转换为大写。只在使用字符数据时使用。
^	使用科学记数法显示数据。只在使用数值数据时使用。
$	在数值数据前显示货币符号。只在使用数值数据时使用。
PICTURE 表达式中可以包含任意个字符，但是只有下表中列出的字符才决定文本框中文本的显示和编辑方式。

PICTURE 代码	用途
A	只允许输入字母和数字。
L	只允许输入逻辑数据。
N	只允许输入字符和数字。
X	允许输入任何字符。
Y	允许输入 Y、y、N 和 n 等表示逻辑值“真”(.T.) 和“假”(.F.) 的字符。
9	只有字符数据中的数字允许输入。数值数据中的数字和符号允许输入。
#	允许输入数字、空格和符号。
!	将小写字符转换为大写字符。
$	显示由 SET CURRENCY 指定的当前货币符号。默认情况下，货币符号紧放在数值的前面或后面。不过，货币符号及其位置 ( SET CURRENCY )、分隔符 ( SET SEPARATOR ) 和小数点符号都可以改变。
*	星号显示在数值前面，使用美元符 ($) 进行检查保护。
.	小数点指定小数点的位置。
,	逗号用来分隔小数点左边的数字。
NAME ObjectName

仅用于 Visual FoxPro 中。

创建文本框的对象引用，就能够使用“文本框控制”所具有的面向对象属性来处理文本框。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定文本框中的字体和字体磅值。cFontName 指定字体名称，nFontSize 指定字体磅值。

例如，下面这段短程序在文本框中显示 CONTACT 字段。在 Visual FoxPro 和 FoxPro for Macintosh 中，文本框中的文本以 12 磅 Courier 字体显示：

CLOSE DATABASES

USE customer

DO CASE

CASE _WINDOWS OR _MAC

@ 2, 2 GET contact FONT 'Courier',12

OTHERWISE

@ 2, 2 GET contact

ENDCASE

READ

如果省略 FONT 子句，并把文本框添加到 Visual FoxPro 主窗口中，文本框将使用 Visual FoxPro 主窗口的字体。如果省略 FONT 子句并把文本框添加到用户自定义窗口中，文本框将使用用户自定义窗口的字体。

如果使用 FONT 子句，但是省略字体磅值 nFontSize，则使用 10 磅字体。

 •	   在 Visual FoxPro 中，如果指定的字体无效，则使用相似的字体代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定文本框的字形。如果省略 STYLE 子句，则使用正常体字形。

 •	   在 Visual FoxPro 中，如果指定的字形无效，则使用相似的字形代替。

 •	   在 FoxPro for Macintosh 中，如果指定的字形无效，则使用普通字形。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	正常体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
如果使用 T 来创建透明的文本框，文本框背景的颜色将被忽略。

您可以组合多个字符来指定字形。例如，下面的短程序创建一个文本框。CONTACT 字段的值以“粗斜体”字形显示在文本框中。

CLOSE DATABASES

CLEAR

USE customer

DO CASE

CASE _WINDOWS OR _MAC

@ 2, 2 GET contact STYLE 'BI'

OTHERWISE

@ 2, 2 GET contact

ENDCASE

READ

DEFAULT Expression1

如果指定的保存文本框的内存变量不存在，将自动创建并根据 DEFAULT 子句将其初始化。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建此数组。当内存变量已经存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

.如果省略 DEFAULT 子句，并且内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

Expression1 决定了创建的内存变量的类型和初始值。

ENABLE

激活文本框。默认情况下，在发出 READ 命令时激活文本框。程序中可以包括 ENABLE 子句来提示文本框是可存取的。

DISABLE

该命令可以阻止 READ 命令激活文本框。废止的文本框以暗灰色显示，用户不能选择废止的文本框。

附注

如果废止用户自定义窗口中的所有文本框，则该窗口将不再是最顶层窗口。如果所有的文本框都用当前的 READ 命令废止掉，则 READ 命令被终止。

MESSAGE cMessageText

创建一条信息，在选定文本框时显示该信息。

在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在图形状态栏中。如果图形状态栏被 SET STATUS BAR OFF 关闭，信息出现在 Visual FoxPro 主窗口的最后一行。

在 FoxPro for MS-DOS 中，默认情况下，信息出现在 FoxPro 主窗口最后一行的中间，并临时取消任何 SET MESSAGE 表达式。

[OPEN] WINDOW WindowName

包含 OPEN WINDOW 是为了提供向后兼容性。在 Visual FoxPro 中，请使用 @ ... EDIT 代替它。

这一命令允许在用户自定义窗口中编辑一个备注字段。用户自定义窗口必须使用 DEFINE WINDOW 创建。当发出 @ ... GET WINDOW 命令时显示单词“备注”。

如果使用 OPEN 命令，在发出 READ 或 READ CYCLE 命令时将自动创建备注编辑窗口。

提示

要编辑备注字段，使用 @ ... EDIT 比使用 @ ... GET 更好。@ ... EDIT 命令创建带有滚动条的文本编辑窗口。发出 @ ... EDIT 命令时，文本编辑窗口中显示出备注字段的内容。

RANGE [LowerBound] [, UpperBound]

指定用户可以在文本框中输入值的范围。如果输入文本框中的值不在指定的范围内，就出现一条信息提示正确的值范围。可以使用 ON READERROR 来改写默认范围。

LowerBound 指定范围的下限，UpperBound 指定范围的上限。LowerBound 和 UpperBound 必须是与内存变量、数组元素或字段中数据相一致的字符、日期、日期时间、数值、浮点数、双精度数或货币型表达式。可以省略 LowerBound 或 UpperBound，但不能两个都省略。如果省略了一个界限值，则不检查该范围的这一端。

附注

如果在没有改变内存变量、数组元素或字段的值之前按 Enter 键，则不做范围检查。

SIZE nHeight, nWidth

指定文本框的高度和宽度。默认情况下，文本框的高度是一行。文本框区域的大小决定于内存变量、数组元素或字段的长度，或者决定于 PICTURE 子句。

nHeight 指定文本框以行计的高度。nWidth 指定文本框以列计的宽度。

在 Visual FoxPro 和 FoxPro for Macintosh 中，文本框的字体决定了文本框的大小。文本框的字体由 FONT 子句指定。如果省略了 FONT 子句，文本框使用其父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

VALID lExpression1 | nExpression [ERROR cErrorText]

检查用户输入。当用户试图退出文本框时，对 VALID 表达式求值。

当用户把 VALID 子句用到用户自定义函数中时，VALID 子句可大大简化数据的有效性检查。如果用 @ ... GET 中的 VALID 子句调用用户自定义函数，此函数将返回一个逻辑值或数值。

附注

与 RANGE 的范围检查不同，在试图退出控制时总要执行 VALID 子句（除非按 Esc 键）。RANGE 子句则只是在保存文本框的内存变量、数组元素或字段发生变化时才执行。

lExpression1

如果 lExpression1 求值为“真”(.T.)，文本框中输入的数据被认为是正确的并退出文本框。

如果 lExpression1 求值为“假”(.F.)，在文本框中输入的数据被认为是不正确的，并显示信息提示用户在按 Spacebar 键之后重新输入数据。

如果用户自定义有效检查程序在字段上执行替换，而有效检查程序返回“假”，则当用户从用户自定义函数返回到文本框时，发生替换的字段恢复成以前的字段值。

nExpression

指定退出文本框后，激活哪一个控制。有关控制方面的详细内容，请参阅控制和对象。数值表达式 nExpression 有如下三种作用：

 •	   当 nExpression 为 0 时，光标仍然在文本框中，同时不显示 MESSAGE cMessageText 和 ERROR cErrorText 的出错信息。可在 VALID 调用的用户自定义函数中编写特殊的出错处理程序。

如果用户自定义有效检查程序在字段上执行替换，而有效检查程序返回“假”，则当用户从用户自定义函数返回到文本框时，发生替换的字段恢复成以前的字段值。

 •	   当 nExpression 为正数时，nExpression 指定向前走过控制的数目。例如，当光标停在文本框上，并且 VALID 子句返回 1 时，激活下一个控制。如果 nExpression 大于剩余的控制总数，将终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

 •	   当 nExpression 为负数时，nExpression 指定向后回退控制的数目。例如，当光标停在文本框上并且 VALID 返回 -1 时，激活前一个控制。当 nExpression 退到第一个控制之前时，将终止READ命令（除非发出READ CYCLE命令来激活控制）。

ERROR cErrorText

指定当 VALID 子句求值为“假”(.F.) 时显示的用户错误信息。Visual FoxPro 显示 cErrorText 来代替默认的错误信息。

WHEN lExpression2

根据 lExpression2 的逻辑值决定是禁止还是允许存取文本框。如果 lExpression2 求值为“真”(.T.)，可以存取文本框。如果 lExpression2 求值为“假”(.F.)，不能存取文本框，激活下一个控制。

COLOR SCHEME nSchemeNumber

指定文本框的颜色。如果不包含 COLOR SCHEME 子句，文本框的颜色由 Visual FoxPro 主窗口的配色方案决定。如果文本框在用户自定义窗口中，用户自定义窗口的配色方案决定了文本框的颜色。

COLOR ColorPairList

指定文本框的颜色。只有颜色对列表中第一个颜色对影响文本框的颜色。

在配色方案或颜色对列表中只有颜色对 2、5、6 和 10 影响文本框的颜色。

颜色对编号	文本框属性
2	文本框
5	信息
6	被选择的文本框
10	被废止的文本框
有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 创建文本框。有关与 FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

使用 @ ... GET 创建文本框来显示内存变量、数组元素或字段中的内容。使用 READ 或 READ CYCLE 激活文本框。

可以把 @ ... GET 和 @ ... SAY 组合在一个命令中。如果组合 SAY 和 GET 子句，请指定 @ ... SAY 命令输出的起始坐标 nRow 和 nColumn。在 @ ... SAY 的输出和文本框之间自动插入一空格。


请参阅

@ ... SAY，控制和对象，CREATE FORM，DEFINE CLASS，_CUROBJ，FONTMETRIC( )，OBJNUM( )，READ，颜色概述，SET CURRENCY，SET DEVICE，文本框控制


@ ... GET - 透明按钮命令

请参阅

创建一个透明的命令按钮。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序，请使用命令按钮控制代替此命令。

语法

@ nRow, nColumn
GET MemVarName | FieldName
FUNCTION cFormatCodes | PICTURE cFormatCodes
[DEFAULT nExpression1]
[SIZE nHeight, nWidth [, nSpacing]]
[ENABLE | DISABLE]
[MESSAGE cMessageText]
[NAME ObjectName]
[VALID lExpression1 | nExpression2]
[WHEN lExpression2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定透明按钮的位置。nRow 和 nColumn 都是数值表达式，指定一组透明按钮中第一个按钮的位置。

行由上向下编号。第一行是指 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是指紧挨着 Visual FoxPro 系统菜单栏下的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是指紧挨着 FoxPro 标题栏下的那一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是指 FoxPro 系统菜单栏占据的那一行。在 FoxPro for MS-DOS 中，有关如何处理系统菜单以便能把透明按钮放在第 0 行上的详细内容，请参阅 SET SYSMENU。

列由左向右编号。第一列是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 列。

当把透明按钮组中第一个透明按钮添加到用户自定义窗口中时，透明按钮行和列的坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口或用户自定义窗口中的位置由 Visual FoxPro 主窗口或用户自定义窗口的字体决定。大多数字体能够以多种尺寸显示。有些字体按比例留出间隔。行的高度与当前字体的高度相一致，列的宽度与当前字体字符的平均宽度相一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定窗口中透明按钮组中第一个透明按钮的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列的坐标通过四舍五入原则去掉小数部分。

GET MemVarName | FieldName

指定保存选择结果的内存变量、数组元素或字段。例如，如果创建了四个透明按钮，并且用户选择第三个，那么就保存 3。MemVarName 或 FieldName 的初始值决定初始时选择哪个按钮。

FUNCTION cFormatCodes | PICTURE cFormatCodes

创建透明按钮时，必须包括 FUNCTION 子句、PICTURE 子句或二者兼有。这三种方法具有同等效果。

FUNCTION 子句字符表达式 cFormatCodes 的起始符必须是 *I。要创建多个透明按钮，请在按钮之间加入分号。例如，下面的子句创建三个透明选择按钮：

... FUNCTION '*I ;;' ...

请注意，尽管子句中只包含两个分号，但是创建的是三个透明按钮。

PICTURE 子句字符表达式 cFormatCodes 的起始字符必须是 @*I 加空格。例如，下面子句创建三个透明按钮：

... PICTURE '@*I ;;' ...

您还可以同时使用 FUNCTION 和 PICTURE 命令来创建透明按钮。同时使用时，FUNCTION 字符表达式 cFormatCodes 必须包含 *I 来创建透明按钮，*I 之后可跟一个空格和分号来创建其他透明按钮。PICTURE 字符表达式 cFormatCodes 可以包含分号来创建其他透明按钮。

下面的示例说明了各种可用来创建透明按钮的语法。本例中，创建了五个透明按钮。与每个按钮相对应的数字保存在内存变量 gnChoice 中。第一个透明按钮的起始位置是第二行第二列。每个按钮都是二行高四列宽。按钮之间相隔一行。

只用 FUNCTION 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*I ;;;;' SIZE 2, 4, 1

READ

STORE 1 TO gnChoice

STORE '*I ;;;;' TO mfunc

@ 2,2 GET gnChoice FUNCTION mfunc SIZE 2, 4, 1

READ

只用 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@*I ;;;;' SIZE 2, 4, 1

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice PICTURE '@*I' + ' ;;;;' SIZE 2, 4, 1

READ

同时使用 FUNCTION 子句和 PICTURE 子句：

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*I' PICTURE ' ;;;;' SIZE 2, 4, 1

READ

STORE 1 TO gnChoice

@ 2,2 GET gnChoice FUNCTION '*I ;;' PICTURE ';;' SIZE 2, 4, 1

READ

PICTURE 和 FUNCTION 选项 N、T、H 和 V

可以在特征代码 *I 中组合其他选项来改变透明按钮的行为（N 和 T 选项）和对齐方式（H 和 V 选项）。

选项	说明
N	当选定透明按钮时，不终止 READ 命令。这是默认行为。
T	当选择透明按钮时，终止 READ 命令。
H	透明按钮在水平行上的位置。
V	透明按钮在垂直栏中的位置。这是默认的排列方式。
可以把选项 H 和 V 同选项 T 和 N 组合成下列方式：NH、NV、TH 和 TV。例如，下面的子句在垂直方向上创建一组透明按钮。当选择透明按钮中的一个时，不会终止 READ 命令：

... FUNCTION '*INV ... '

废止透明按钮

您可以废止透明按钮，这样就不能对其进行选择。当一个透明按钮被废止时，它以暗灰色显示。要废止一个透明按钮，可在 FUNCTION 或 PICTURE 子句中对应该透明按钮的分号前加入两个反斜杠字符 (\\)。

在下面的示例中，创建了五个透明按钮。第二个和第四个按钮由于在其对应的分号前加入了两个反斜杠 (\\) 而被废止。

CLEAR

STORE 1 TO gnChoice

IF NOT _DOS

MODIFY WINDOW SCREEN FONT 'foxfont', 9

ENDIF

*** Draw boxes for the transparent-button regions. ***

@ 4,2  SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)

@ 5,2  SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)

@ 7,2  SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)

@ 8,2  SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)

@ 10,2 SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)

@ 11,2 SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)

@ 13,2 SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)

@ 14,2 SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)

@ 16,2 SAY CHR(218) + CHR(196) + CHR(196) + CHR(191)

@ 17,2 SAY CHR(192) + CHR(196) + CHR(196) + CHR(217)

@ 4,2 GET gnChoice FUNCTION '*I ;\\;;\\;' SIZE 2, 4, 1

READ

DEFAULT nExpression1

当选择透明按钮时，选择结果保存在指定的内存变量、数组元素或字段中。如果指定的内存变量不存在，将自动创建该变量。若包含了 DEFAULT 子句，则初始化此变量。但是，如果 DEFAULT 子句中指定的是一个数组元素，则不创建此数组。当内存变量已存在，或者指定的是字段时，忽略 DEFAULT 子句。

附注

如果省略 DEFAULT 子句，而内存变量 MemVarName 又不存在时，Visual FoxPro 将产生错误信息。

nExpression 决定了 MemVarName 的初始值。下面给出几个使用 DEFAULT 子句的示例：

@ 2,2 GET gnChoice FUNCTION '*I ;;;;' DEFAULT 1

READ

STORE 3 TO gnButton

@ 2,2 GET gnChoice FUNCTION '*I ;;;;' DEFAULT gnButton

READ

SIZE nHeight, nWidth [, nSpacing]

指定透明按钮的大小及透明按钮间的间隔。nHeight 指定透明按钮的高度，nWidth 指定透明按钮的宽度。宽度和高度的默认值为 0。

默认情况下，垂直透明按钮间没有间隔，水平透明按钮间保留一列的间隔。透明按钮之间的间隔由 nSpacing 指定。当建立垂直透明按钮集时，nSpacing 指定透明按钮在垂直方向上按钮间相距的行数。当建立水平透明按钮集时，nSpacing 指定透明按钮在水平方向上按钮间相距的列数。

ENABLE

激活一组透明按钮。默认情况下，当发出 READ 命令时激活透明按钮。程序中可以包括 ENABLE 子句来提示透明按钮可被访问。

DISABLE

该命令可以阻止用 READ 命令激活透明按钮。废止的透明按钮以暗灰色显示。用户不能选择废止的透明按钮。要废止单个透明按钮而不是整个一组透明按钮，请参阅前面的“废止透明按钮”。要激活一组废止的透明按钮，请使用 SHOW GET ENABLE。

MESSAGE cMessageText

创建一条信息，在选定透明按钮时显示该信息。

在 Visual FoxPro 和 FoxPro for Macintosh 中，信息出现在状态栏中。如果状态栏被 SET STATUS BAR OFF 关闭，信息出现在 Visual FoxPro 主窗口的最后一行。

在 FoxPro for MS-DOS 中，默认情况下，信息出现在 FoxPro 主窗口最后一行的中间。信息出现的位置可以用 SET MESSAGE 来改变。

NAME ObjectName

仅用于 Visual FoxPro 中。

创建透明按钮的对象引用，就能够使用“透明按钮控制”所具有的面向对象属性来处理透明按钮。有关如何使用 NAME 子句处理 FoxPro 控制的详细内容，请参阅控制和对象。

VALID lExpression1 | nExpression2

检查用户输入。当用户选择透明按钮时，对 VALID 表达式求值。

通常情况下，lExpression1 或 nExpression2 是用户自定义函数。使用用户自定义函数，可以选择、激活或者废止其他控制，打开“浏览”窗口，打开另一个数据输入表单，还可以移到一条新记录上。用户自定义函数可以使用 CLEAR READ 命令来终止 READ 命令。

lExpression1

当返回给 VALID 子句一个逻辑值时，逻辑值被忽略，透明按钮仍然是活动控制。不过，可以指定用户自定义函数来返回逻辑值给 VALID 子句，并激活另一个控制。

nExpression2

VALID 子句中的数值表达式 nExpression2 用来指定当选定透明按钮后，激活哪一个控制。有关控制的详细内容，请参阅控制和对象。

数值表达式 nExpression2 有如下三种作用：

 •	   当 nExpression2 = 0 时，选定的透明按钮仍然是活动控制。

 •	   当 nExpression2 为正数时，nExpression2 指定向前走过控制的数目。例如，当选定透明按钮并且 VALID 子句返回 1 时，将激活下一个控制。如果 nExpression2 大于剩余控制的总数时，将终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

 •	   当 nExpression2 为负数时，nExpression2 指定向后回退控制的数目。例如，当选定透明按钮且 VALID 返回 -1 时，将激活前一个控制。当 nExpression2 退回到第一个控制之前时，将终止 READ 命令（除非发出 READ CYCLE 命令来激活控制）。

WHEN lExpression2

根据 lExpression2 的逻辑值决定是否允许选择透明按钮。如果 lExpression2 求值为“真”(.T.)，可以选择透明按钮。如果 lExpression2 求值为“假”(.F.)，不能选择透明按钮。如果它放在其他控制之间，则将其跳过。

COLOR SCHEME nSchemeNumber

指定透明按钮的颜色。如果不包含 COLOR 子句，透明按钮的颜色由 Visual FoxPro 主窗口的配色方案决定。如果透明按钮在用户自定义窗口中，用户自定义窗口的配色方案决定了透明按钮的颜色。

COLOR ColorPairList

指定透明按钮的颜色。在配色方案或颜色对列表中只有颜色对 5、6 和 10 影响透明按钮的颜色。

颜色对编号	编辑区颜色属性
5	信息
6	被选择的透明按钮
10	被废止的透明按钮
有关配色方案和颜色对的详细内容，请参阅颜色概述主题

说明

在 Visual FoxPro 中，应该使用表单设计器或 DEFINE CLASS 创建透明按钮。有关与 FoxPro 2.x 控制的向后兼容性的详细内容，请参阅控制和对象。

有关如何向表单中添加控制的详细内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

@ ... GET 命令的这种变化可以创建透明按钮，这些按钮在 Visual FoxPro 主窗口或选择的用户自定义窗口中是矩形区域。可以使用 @ ... SAY 命令把字符放在矩形按钮区域上。当选择透明按钮时，按钮上的字符以亮色显示。要激活透明按钮，请使用 READ 或 READ CYCLE 命令。


请参阅

控制和对象，命令按钮控制，CREATE FORM，DEFINE CLASS


@ ... MENU 命令

请参阅

创建一个菜单。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，可用菜单设计器和 CREATE MENU 代替。

语法

@ nRow, nColumn MENU ArrayName, nMenuItems [, nDisplayed]
[TITLE cTitleText]
[SHADOW]

参数

@ nRow, nColumn

指定菜单左上角在 Visual FoxPro 主窗口或用户自定义窗口中的位置。

MENU ArrayName

指定一维数组，该数组包含出现在菜单中的菜单项。菜单项必须为字符型。

nMenuItems

指定菜单中可用的菜单项总数。若数组有 10 个元素，而 nMenuItems 的值为 5，则菜单可以使用数组的前 5 个元素。

nDisplayed

指定菜单中显示的菜单项数目。如果 nMenuItems 参数大于 nDisplayed 参数，则 nDisplayed 将确定所显示的菜单项数目。如果菜单项太多而无法容纳在菜单中，那么菜单将成为可滚动的列表。

TITLE cTitleText

指定菜单顶部显示的标题。

SHADOW

仅用于 FoxPro for MS-DOS。

为菜单创建阴影。被阴影覆盖的文本或控制仍然可见。默认情况下，菜单没有阴影。

说明

发出 READ MENU 命令时，将激活菜单。一次只能有一个菜单是活动的。

创建和激活菜单的另一对命令是 DEFINE POPUP 和 ACTIVATE POPUP，它们不依赖 @MENU 和 READ MENU 命令执行。


请参阅

CREATE MENU, DEFINE POPUP, MENU, MENU TO, READ MENU


@ ... PROMPT 命令

请参阅

创建菜单栏。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，可用菜单设计器和 CREATE MENU 代替。

语法

@ nRow, nColumn PROMPT cMenuTitleText
[MESSAGE cMessageText]

参数

@ nRow, nColumn

指定菜单标题的位置。如果每条 @ ... PROMPT 命令的 nRow 参数相同，则创建水平菜单；如果每条 @ ... PROMPT 命令的 nColumn 参数相同，则创建垂直菜单。

PROMPT cMenuTitleText

指定菜单标题。

MESSAGE cMessageText

创建消息，并在 MENU TO 命令激活菜单栏时显示该消息。

说明

使用一系列 @ ... PROMPT 命令创建若干菜单标题，并指定菜单栏在 Visual FoxPro 主窗口或用户自定义窗口中的位置。

创建菜单标题之后，用 MENU TO 命令激活菜单栏。

当选择菜单栏名称时，向 MENU TO 命令指定的内存变量或数组元素返回一个编号。返回的编号由名称定义的顺序决定。例如，用五个 @PROMPT 命令定义了五个名称，并且选择第三个名称，则 3 就存贮在内存变量或数组元素中。

把反斜杠 (\) 放在菜单标题前可以废止该菜单标题。废止的菜单标题虽然显示在菜单栏中，但不可选择。您也可以创建一个存取键，方法是将标题中指定为存取键的字符之前加上反斜杠和小于号 (\<)。

如果一个字符在提示中出现多次，则第一次出现的该字符是存取键。在下面的示例中，ADD 中的第二个 D 被指定为存取键，但实际上第一个 D 是存取键。

@ 1,20 PROMPT 'AD\<D' MESSAGE 'Add a record'


请参阅

CREATE MENU, MENU TO, SET CONFIRM, SET MESSAGE


@ ... SAY 命令

请参阅

在指定的行列位置显示或打印输出结果。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，可用标签控制命令来显示文本，用文本框控制显示字段与内存变量内容。

语法

@ nRow, nColumn SAY Expression
[FUNCTION cFormatCodes]
[PICTURE cFormatCodes]
[SIZE nHeight, nWidth]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow, nColumn

指定 @ ... SAY 命令输出结果的位置。

行从上到下编号。在 Visual FoxPro 主窗口或用户自定义窗口中，第一行记第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是紧接在 Visual FoxPro 系统菜单栏下面的一行。

 •	   在 FoxPro for Microsoft 中，第 0 行是紧接在 FoxPro 标题栏下面的一行。

 •	   在 FoxPro for MS-DOS 中，第 0 行是 FoxPro 系统菜单栏所占据的那一行。有关系统菜单栏的操作信息，请参阅 SET SYSMENU，以便将 @ ... SAY 命令的输出结果放在 FoxPro for MS-DOS 中的第 0 行。对于打印机，第一行标为 1，物理页面尺寸和每页行数决定了最大行号。

列从左到右编号。在 Visual FoxPro 主窗口或用户定义窗口中，第一列为 0 列。对于打印机而言，第一列标为 1，最大列号由物理页面尺寸决定。

当 @ ... SAY 命令输出到用户自定义窗口时，行列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，Visual FoxPro 主窗口与用户自定义窗口中的某个位置由该窗口使用的字体决定。大多数字体可以按一系列尺寸显示，有一些字体能按比例留出间隔。行高与当前字体的高度相一致，列宽与当前字体字母的平均宽度相一致。

 •	   在 Visual FoxPro 和 FoxPro for Macintosh 中，可以用小数来指定 @ ... SAY 输出的行和列坐标。

 •	   在 FoxPro for MS-DOS 中，行和列坐标通过四舍五入原则转换成相近的整数。

SAY Expression

指定从 nRow1, nColumn1 处开始计算、显示或打印的内容。它可以是一个用户自定义函数。

FUNCTION cFormatCodes | PICTURE cFormatCodes

指定函数代码或图片代码，该代码决定了 @ ... SAY 输出的显示或打印方式。您可以只加入 FUNCTION 子句或 PICTURE 子句，或者二者兼而有之。

FUNCTION 代码可以包含在 PICTURE 子句中。在这种情况下，PICTURE 子句必须以 @ 开头，而且 PICTURE 了句可以包含 FUNCTION 代码、PICFURE 代码或者二者兼而有之。由于 FUNCTION 子句将影响整个表达式，所以其中可以只包含 FUNCTION 代码。

FUNCTION 代码	应用于
B	数值型数据在显示区中左对齐。
C	在负号后使用 CR 表明财会中贷值。仅用于数值型数据。
D	使用当前的 SET DATE 格式。
E	将日期型数据编辑为 BRITISH 日期。
T	去掉 Expression 中的首尾空格。
X	在负数后使用 DB 来表明财会中借值。仅用于数值型数据。
Z	如果 Expression 值为零，则全部显示为空格。仅用于数值型数据。
(	用圆括号将负数括起。仅用于数值型数据。
!	将字母转换为大写。仅用于字符型数据。
^	用科学计数法显示数值型数据。仅用于数值型数据。
$	显示由 SET CURRENCY 指定的当前贷币符号。默认情况下，符号紧接在字段的前后。贷币符号及其位置（由 SET CURRENCY 指定）、分隔字符（由 SET POINT 指定）以及小数位字符（由 SET POINT 指定）都可以改变。仅用于数值型数据。
PICTURE 表达式可以包含任何字符，但只有下列字符可以在活动窗口中显示和打印。

PICTURE 代码	应用于
X	显示所有字符，确定显示的宽度或打印区大小。
Y	将“真”(.T.) 和“假”(.F.) 分别显示为 Y 和 N。
!	将小写字母显示为大写字母。
$	显示由 SET CURRENCY 指定的当前贷币符号。默认情况下，符号紧跟在字段前或后。贷币符号及其位置（由 SET CURRENCY 指定）、分隔字符（由 SET POINT 指定）以及小数位字符（由 SET POINT 指定）都可以改变。
*	在数值前显示星号。若和美元符号 ($) 一起使用，可以进行复选保护。
.	小数点，指定小数点位置。
,	逗号，用来分隔小数点左侧的数据。
以下示例结合两个 FUNCTION 代码来设置数值格式，$$ 代码创建了浮点型美元符号，而 C 代码将 CR 放置在数字后面。

CLEAR

@ 2, 2 SAY 1.15 FUNCTION 'C$$'

SIZE nHeight, nWidth

指定 @ ... SAY 命令显示区域或打印区域的高度与宽度，nHeight 参数指定了区域高度的行数，nWidth 参数指定了区域宽度的列数。若省略 SIZE 子句，Visual FoxPro 将按默认值将区域创建为一行的高度。

在第 nHeight 行中由 nWidth 指定的宽度上，@... SAY 输出自动换行。

在 Visual FoxPro 和 FoxPro for Macintosh 中，@ ... SAY 字体决定了文本框的大小。@ ... SAY 的字体由 FONT 子句指定。若省略 FONT 子句，则 @ ... SAY 输出使用父窗口（Visual FoxPro 主窗口或用户自定义窗口）的字体。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro 和 FoxPro for Macintosh。

指定 @ ... SAY 输出的字体。cFontName 参数指定字体名称，nFontSize 参量指定磅值。例如，以下命令用 16 磅 Courier 字体显示 @ ... SAY 的文本：

@ 2, 2 SAY 'Font clause example' FONT 'Courier', 16

如果有 FONT 子句，但省略了磅值参数 nFontSize，则使用 10磅 字体。

 •	   在 Visual FoxPro 中，若指定的字体无效，则用类似字体代替。

 •	   在 Visual for Macintosh 中，若指定的字体无效，则使用 Chicago 字体。

 •	   在 FoxPro for MS-DOS 中，忽略 FONT 子句。.

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

指定 @ ... SAY 输出的字体样式，若省略 STYLE 子句，则使用普通字体样式。

 •	   在 Visual FoxPro 中，若指定的字体形式不可用，则用类似的字体形式代替。

 •	   在FoxPro for Macintosh 中，若指定的字体形式不可用，则使用正常体体形式。

 •	   在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下列为可以用 cFontStyle 指定的字体形式：

字符	字体样式
B	粗体
C	缩体（仅用于 FoxPro for Macintosh）
E	扩体（仅用于 FoxPro for Macintosh）
I	斜体
N	普通体
O	简体
Q	不透明
S	阴影
-	删除（仅用在 Visual FoxPro ）
T	透明
U	带下划线
您可以用多个字符来指定字体形式的组合。例如，以下命令指定了“粗斜体”：

@ 2, 2 SAY 'Font clause example' STYLE 'BI'

COLOR SCHEME nSchemeNumber

指定 @ ... SAY 输出的颜色。若未包括 COLOR 子句，@ ... SAY 输出的颜色将由 Visual FoxPro 主窗口的颜色方案决定。如果 @ ... SAY 直接输出到用户自定义窗口中，其输出的颜色由该窗口的颜色方案决定。

只有颜色方案或颜色对列表中的第一个颜色对影响 @ ... SAY 输出的颜色。

COLOR ColorPairList

指定 @ ... SAY 输出的颜色。只有颜色对列表中的第一个颜色对起作用。

有关颜色方案和颜色对的详细内容，请参阅颜色概述主题，

说明

在 Visual FoxPro 中，应使用表单设计器或 DEFINE CLASS 命令来创建标签和文本框控制。有关与 FoxPro 2.X 控制的向后兼容性的内容，请参阅控制和对象。

有关向表单中添加控制的其他内容，请参阅“开发指南”的第九章“创建表单”以及在容器类中添加对象。

使用 @ ... SAY 可在 Visual FoxPro 主窗口或用户自定义窗口中显示带格式的输出，也可设置打印机的输出格式。

您可以将 @ ... SAY 和 @ ... GET 合并为一条命令。若同时包括 SAY 和 GET 子句，只需指定一对坐标 nRow, nColumn，该坐标为 @ ... SAY 输出的开始位置。@SAY 输出与文本框之间自动插入空格。

若发出 SET DEVICE TO SCREEN 默认启动命令，@ ... SAY 将输出到 Visual FoxPro 主窗口或活动的用户自定义窗口中；若发出 SET DEVICE TO PRINTER 命令，则输出到打印机。


请参阅

颜色概述, CREATE FORM, DEFINE CLASS, 标签控制, SET CURRENCY, SET DEVICE, 文本框控制


@ ... SAY - 图片 & OLE 对象命令

请参阅

显示图片和 OLE 对象，或调用 OLE 服务器来执行 OLE 对象操作。包含此命令是为了提供向后兼容性。在 Visual FoxPro 应用程序中，可用图象控制、OLE 绑定型控制和OLE 容器控制代替。

语法

@ nRow1, nColumn1
SAY cPictureFile BITMAP | GeneralField
[STYLE cFormatCode]
[CENTER]
[ISOMETRIC | STRETCH]
[SIZE nRow2, nColumn2]
  Or
@ nRow1, nColumn1 SAY GeneralField
VERB nOleCommand | cOleCommand
[NOWAIT]

参数

@ nRow1, nColumn1

指定图片或 OLE 对象的位置。

行从上到下编号。第一行是指在 Visual FoxPro 主窗口或用户自定义窗口中的第 0 行。

 •	   在 Visual FoxPro 中，第 0 行是紧接在 Visual FoxPro 系统菜单栏下面的那一行。

 •	   在 FoxPro for Macintosh 中，第 0 行是紧接在 FoxPro 标题栏下面的那一行。对于打印机，第一行标记为 1，物理页面尺寸和每页行数决定了最大行号。

列从左到右编号，第 0 列是 Visual FoxPro 主窗口或用户自定义窗口中的第一列；对于打印机，第一列标记为 1，物理页面尺寸决定了最大列号。

图片或 OLE 对象输出到用户自定义窗口时，行和列坐标与用户自定义窗口，而不是 Visual FoxPro 主窗口相关。Visual FoxPro 主窗口或用户自定义窗口中的位置由窗口的字体决定。大多数字体可以用多种大小显示，有一些字体能名按比例留出间距。行的高度与当前字体的高度相一致，列的宽度与当前字体字符的平均宽度相一致。

可以用小数指定行、列坐标来设置图片或 OLE 对象在窗口中的位置。

SAY cPictureFile BITMAP

指定图片的文件名。BITMAP 关键字必须紧跟在 cPictureFile 参数后面。图片文件名必须用单引号、双引号或方括号分隔开。如果文件名存贮在内存变量或数组元素中，可以不用分隔符来包括内存变量或数组元素。

如果图片文件不在当前默目录或文件夹中，在文件名中还应包括路径。

在 FoxPro for Macintosh 中，如果省略图片文件的扩展名，FoxPro 将首先查找具有指定文件名并且带有 .BMP 扩展名的图片文件；若未找到，则接着查找具有指定文件名并带有 .PCT 扩展名的图片文件；若仍未找到，FoxPro 将寻找具有指定文件名，但不带扩展名的图片文件。

SAY GeneralField

指定包含 OLE 对象的通用字段。

STYLE cFormatCode

指定不透明或透明图片。如果在 cFormatCode 参数中包括 Q，则显示不透明的图片，但不显示不透明图片后面的文本、图片或控制。如果在 cFormatCode 中包括 T，则显示透明图片，图片后的文本、图片或控制能够透过图片显示出来。

CENTER

在 SIZE 子句指定的区域中居中对齐图片或 OLE 对象。如果省略 SIZE 子句，则图片或 OLE 对象在矩形区域中居中对齐，该区域由行、列坐标以及 Visual FoxPro 主窗口或用户自定义窗口的右下角决定。

ISOMETRIC

缩放图片或 OLE 对象以保持其比例。图片将收缩或扩展以适应指定区域的大小，并且不会变形。如果省略 ISOMETRIC 参数，并且 SIZE 子句指定的区域不能容纳图片或 OLE 对象，将裁剪图片使其大小与区域相适应。

STRETCH

在水平、垂直或两个方向缩放图片或 OLE 对象，以适应 SIZE 子句指定的区域大小，这时不再保持图片或 OLE 对象的比例。

SIZE nRow2, nColumn2

指定图片或 OLE 对象的大小。

nRow2 指定图片或 OLE 对象的高度，图片或 OLE 对象的高度是活动窗口字体高度的倍数。例如，如果 nRow2 为 2，则图片或 OLE 对象的高度是活动窗口字体高度的 2 倍。

nColumn2 指定图片或 OLE 对象的宽度，图片或 OLE 对象的宽度是活动窗口字体宽度的倍数。例如，如果 nColumn2 为 2，则图片或 OLE 对象的宽度是活动窗口字体宽度的 2 倍。

如果 SIZE 子句指定的区域太小而不能容纳图片或 OLE 对象，则裁剪图片或 OLE 对象。包括 ISOMETRIC 或 STRETCH 参数可以避免裁剪图片。

如果省略 SIZE 子句，图片或 OLE 对象则按默认尺寸显示。

VERB nOleCommand | cOleCommand

执行 OLE 对象的命令操作。

提示

在 Visual FoxPro 中，可以运行 REGEDIT /V 来查看每一个安装的 OLE 服务器可以使用的命令，命令动词及其对应编号都会显示出来。

命令动词可以是数值表达式 nOleCommand，也可以是字符表达式 cOleCommand。命令动词的编号从 0 开始。

例如，如果 OLE 对象为 Microsoft Word 文档，并且第一个命令动词 (nOleCommand = 0) 是 EDIT，那么发出以下两条命令中的任意一个命令，都将打开包含在 WORDDOC 通用型字段中的 Word 文档。

@ 2, 2 SAY worddoc VERB 0

  或者

@ 2, 2 SAY worddoc VERB 'EDIT'

大多数 OLE 对象都支持 EDIT 命令。

有关 OLE 对象的其他内容，请参阅《开发指南》的第十八章“添加 OLE”，以及在表单中添加 OLE 对象。

NOWAIT

在 Visual FoxPro 开始执行 OLE 命令之后继续执行程序。例如，打开电子表格需要占用几秒钟的时间。加入 NOWAIT 参数后，在打开电子表格的同时，将继续执行程序。

在 Visual FoxPro 中，如果正使用 Quick Recorder 来播放声音，必须加入 NOWAIT 参数。Quick Recorder 在播放完声音之后仍保持打开，因此必须在重新执行 Visual FoxPro 程序之前由人工进行关闭。加入 VOWAIT 参数可自动关闭 Quick Recorder。

说明

在 Visual FoxPro 中，可使用表单设计器或 DEFINE CLASS来创建图象或 OLE 绑定型控制。有关与 FoxPro 2.x 控制的向后兼容性的内容，请参阅控制和对象。

有关向表单中添加控制的其他内容，请参阅《开发指南》的第九章“创建表单”，以及在容器类中添加对象。

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

使用第一种语法格式在 Visual FoxPro 主窗口或用户自定义窗口中显示图片文件和 OLE 对象。图片文件和 OLE对象还可以用 @ ... SAY 命令直接输出到打印机。

 •	   在 Visual FoxPro 中，可以用此命令显示 .BMP（位图文件）。

 •	   在 FoxPro for Macintosh 中，可以显示 PICT 型图片文件以及 .BMP 位图文件。

如果发出 SET DEVICE TO SCREEN 命令（这也是初始默认方式），则输出则显示在 Visual FoxPro 主窗口或活动的用户自定义窗口中；如果发出 SET DEVICE TO PRINTER 命令，则输出到打印机。

该命令的第二种语法格式用于调用 OLE 服务器，使之为 OLE 对象服务。OLE 命令是操纵 OLE 对象强有力的工具，VERB 子句可以执行与 OLE 对象相关联的命令。例如，您可以启动创建 OLE 对象的应用程序，或者编辑或打印 OLE 对象。


请参阅

APPEND GENERAL, 控制和对象, CREATE FORM, DEFINE CLASS, 图象控制, MODIFY GENERAL, OLE 绑定型控制, OLE 容器控制, SET DEVICE, SET PALETTE


@ ... SCROLL 命令

请参阅

将 Visual FoxPro 主窗口或用户自定义窗口的某个区域向上、下、左、右移动。

语法

@ nRow1, nColumn1 TO nRow2, nColumn2 SCROLL
[UP | DOWN | LEFT | RIGHT]
[BY nMoveAmount]

参数

@ nRow1, nColumn1 TO nRow2, nColumn2 SCROLL

移动矩形区域，该区域左上角坐标为 nRow1, nColumn1，右下角坐标为 nRow2, nColumn2。

UP | DOWN | LEFT | RIGHT

指定矩形区域的移动方向。若省略该子句，区域将向上移动。

BY nMoveAmount

指定区域移过多少行或列。若省略 BY nMoveAmount 参数，则区域移动一行或一列。


请参阅

SCROLL


@ ... TO 命令

请参阅

绘制方框、圆或椭圆。包含此命令是为了提供向后兼容性。在 Visual FoxPro 的应用程序中，可以用形状控制命令代替。

语法

@ nRow1, nColumn1 TO nRow2, nColumn2
[DOUBLE | PANEL | cBorder]
[PATTERN nFillPattern]
[PEN nPenWidth [, nPenType]]
[STYLE cShape]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

@ nRow1, nColumn1

指定方框左上角的坐标。

TO nRow2, nColumn2

指定方框右下角的坐标。

如果 nRow1 和 nRow2 相同，则绘出一条水平线；如果 nColumn1 和 nColumn2 相同，则绘出一条竖直线。

DOUBLE | PANEL | cBorder

DOUBLE 参数指定方框有双线边界。

PANEL 参数指定方框有实线边界。

cBorder 为一个字符集，其字符按以下顺序指定框的各个部分：顶边、底边、左边、右边、左上角、右上角、左下角、右下角。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，必须使用 FoxFont 来正确显示边界。

用下列某一格式指定边界字符串中的字符，并用逗号将它们分隔开：

 •	   括在字符串分隔符（单引号、双引号或者方括号）中的原义字符。

    @ 1,10 TO 22,45 '=', '=', '|', '|', '+', '+', '+', '+'

 •	   用逗号分隔的字符表达式或变量。

STORE '=' TO gcEnd

STORE '|' TO gcSide

STORE '+' TO gcCorner

@ 1,10 TO 22,45 ;

    gcEnd,gcEnd,gcSide,gcSide,gcCorner,gcCorner,gcCorner,gcCorner

 •	   在 CHR( ) 函数中指定字符的 ASCII 码。

STORE CHR(61) TO gcEnd

STORE CHR(124) TO gcSide

STORE CHR(43) TO gcCorner

@ 1,10 TO 22,45 ;

    gcEnd,gcEnd,gcSide,gcSide,gcCorner,gcCorner,gcCorner,gcCorner

  或者

@ 1,10 TO 22,45 CHR(61),CHR(61),CHR(124),CHR(124);

    CHR(43),CHR(43),CHR(43),CHR(43)

通过包括第一个字符而省略其余字符，可以用单个字符绘制框。下面的示例使用星号绘制方框：

STORE '*' TO gcBoxChar

@ 1,10 TO 22,45 gcBoxChar

附注

如果 SET BORDER 设置为 NONE，并且未包含 DOUBLE、PANEL 或边界字符串，则所绘制的方框不带边框。

PATTERN nFillPattern

仅用在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中。

指定填充形状的图案。参数 nFillPattern 可以是 0 到 7 中的任意一个数字。

附注

因为图案用背景颜色绘制，所以必须包括 COLOR 子句来指定不同的背景色以使图案可见。

nFillPattern	图案
0	无
1	实心
2	水平线
3	垂直线
4	反向对角线
5	正向对角线
6	下交叉线
7	斜交叉线
在 FoxPro for MS-DOS 中，将忽略 PATTERN 子句。

PEN nPenWidth [, nPenType]

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中。

指定画笔线条宽度和图案形状轮廓：nPenWidth 参数指定轮廓线宽度，nPenType 参数指定线条的类型。注意，如果用 nPenType 来指定画笔线条类型，则永远使用 1 磅粗细的线条。

下表列出了 nPenWidth 的取值及对应的画笔线条宽度磅值。

nPenWidth	画笔线条宽度
0	最细型*
1	1-磅*
2	2-磅
3	3-磅
4	4-磅
5	5-磅
6	6-磅
* 用最细型和 1 磅型绘制的线条在某些显示驱动器和硬件中可能显示成 1 磅粗细的线条。
下表列出了 nPenType 的取值和相应画笔线条类型图案。

nPenType	画笔线条类型
0	无
1	点线
2	虚线
3	点划线
4	双点划线
100	3 维框（仅用于 FoxPro for Macintosh）。
在 FoxPro for Macintosh 中，只支持实线和点线型，画笔线条类型 1、2、3 和 4 都生成点线。包含 100 时，将忽略所包含的任何附加子句（如 PATTERN、STYLE、COLOR 等等）。

在 FoxPro for MS-DOS 中，将忽略 PEN 子句。

STYLE cShape

仅用在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中。

指定创建的形状类型（方框、圆角框、圆或椭圆等）。用 @ ... TO 命令创建的形状默认为不透明。在 cShape 中包含 T 可以创建透明的形状。

在 cShape 中，包括从 0 到 99 中的一个数字可以指定形状的角曲率。0 指定没有曲率，即创建直角；99 代表最大曲率，即创建圆和椭圆。

在 FoxPro for MS-DOS 中，将忽略 STYLE 子句。

COLOR SCHEME nSchemeNumber

指定方框、圆角框、圆或椭圆的颜色。在指定颜色方案中，只有第一个颜色对决定形状的颜色。颜色对中的第一个颜色为画笔颜色，第二个为背景包（填充色）。

COLOR ColorPairList

指定方框、圆角框、圆或椭圆的颜色。只有指定颜色对列表中的第一个颜色对决定形状的颜色。颜色对中的第一个颜色为画笔色，第二个为背景色（填充色）。例如，下面的示例用实心的红色背景和兰色轮廓线来创建一个椭圆。

@ 2,2 TO 12,22 STYLE '99' ;

    PATTERN 1 PEN 2 COLOR 'B/R'

省略 COLOR SCHEME 或 COLOR 子句则清除区域。您也可以用 @ ... CLEAR 命令来清除区域。

有关颜色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

在 Visual FoxPro 中，应该用表单设计器或 DEFINE CLASS 来创建形状控制（如方框、圆或椭圆）。有关它与 FoxPro 2.x 控制的向后兼容性的内容，请参阅控制和对象。

有关向表单中添加控制的其他内容，请参阅《开发指南》的第九章“创建表单”，以及在容器类中添加对象。

若省略可选的子句，方框的边界将用单线绘制，颜色采用当前颜色。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，可以加入 PATTERN、PEN 和 STYLE 子句来绘制形状（如方框、圆角框、圆或椭圆），这些子句是可选择的，并且可以加入它们的任意组合。若同时加入 PATTERN、PEN、STYLE 子句以及 DOUBLE 或 PANEL 子句，则忽略 DOUBLE 或 PANEL 子句。

重要内容

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，如果 FoxFont 为当前字体，并且没有包含 PATTERN，PEN 和 STYLE 子句，则使用 FoxFont 的绘框字符来绘制方框。这个功能提供了与早期 FoxPro 版本的兼容性。

如果 FoxFont 不是当前字体，或者虽然 FoxFont 是当前字体，但却包含了 PATTERN，PEN 或 STYLE 子句，则在绘制方框时使用图形。用 FoxFont 绘框字符所绘制的方框与用图形所绘制的同一方框会在位置上有细微的差别。


请参阅

@ ... BOX，CREATE FORM，DEFINE CLASS，形状控制


ABS( ) 函数

请参阅	示例

返回指定数值表达式的绝对值。

语法

ABS(nExpression)

参数

nExpression

指定需由 ABS( ) 返回绝对值的数值表达式。

返回值类型

数值型


? ABS(-45)    && 显示 45

? ABS(10-30)	  && 显示 20

? ABS(30-10)	  && 显示 20

STORE 40 TO gnNumber1

STORE 2 TO gnNumber2

? ABS(gnNumber2-gnNumber1)	  && 显示 38


请参阅

INT( )，ROUND( )，SIGN( )


ACCEPT 命令

请参阅

从屏幕接收字符串数据，包含此命令是为了提供向后兼容性，在 VisualFoxpro 中，可使用文本框控制命令代替。

语法

ACCEPT [cPromptText] TO MemVarName

参数

cPromptText

指定提示字符，其后是数据输入区。在 Visual FoxPro 和 FoxPro for Macintosh 中，提示文本的字体与 Visual FoxPro 主窗口的字体相同。但输入的字符数据用 9 磅 FoxFont 字体显示。

MemVarName

指定存储字符数据的内存变量或数组元素。如果没有定义此内存变量，ACCEPT 将自动创建。

如果没有输入数据就按 ENTER 键，内存变量或数组元素则为空字符串。

说明

在 Visual FoxPro 中，可用表单设计器或 DEFINE CLASS 来创建文本框控制。有关 FoxPro2.X 控制的向后兼容性的内容，请参阅控制和对象。

有关向表单中添加控制的其他内容，请参阅《开发指南》的第九章“创建表单”和在容器类中添加对象。

ACCEPT 命令允许直接向一个内存变量或数组元素输入字符数据，输入时不需要用引号将字符括起来。

ACCEPT 命令与 INPUT 命令有两点不同。在 ACCEPT 命令中：

 •	   输入的数据均被视为字符类型。

 •	   不必用引号把输入的数据括起来。


请参阅

READ，WAIT


ACLASS( ) 函数

请参阅	示例

将一个对象的类名和祖先类名存放到一个内存变量中。

语法

ACLASS(ArrayName, oExpression)

参数

ArrayName

指定存放类名的数组名。如果指定的数组名不存在，Visual FoxPro 将自动创建此数组；如果指定的数组已存在，但它的大小不足以容纳所有父类名，则 Visual FoxPro 自动增加数组的大小；如果已存在的数组超过所需大小，将截掉多余部分；如果指定数组是已存在的二维数组，则将它化为一维数组。

oExpression

指定一个对象，此对象的类名及其父类名将存放在指定的数组中。oExpression 可以为任意的对象表达式，例如，对象引用、对象内存变量、或对象数组元素。

返回值类型

数值型

说明

ACLASS( ) 函数创建一个一维数组，数组包含了指定对象的类名和祖先类名。第一个数组元素包含此对象的类名，第二个元素包含对象的父类名；第三个元素包含对象的祖父类名，依此类推。

ACLASS( ) 函数返回数组中类名的数目。如果不能创建此数组，则 ACLASS( ) 函数的返回值为 0。


*下面的示例在 Visual FoxPro 表单基类的基础上创建两个自定
* 义类，分别为 FormChild 和 FormGrandchild。然后用
*  ACLASS( ) 函数创建一个名为 gaNewarray 的数组，数组中
* 包含了这些类名，最后显示这些类名。

CLEAR

frmMyForm = CREATEOBJECT("FormGrandChild")

FOR nCount = 1 TO ACLASS(gaNewarray, frmMyForm) 	&& 创建一个数组

? gaNewarray(nCount)  && 显示所有类的名称

ENDFOR

RELEASE frmMyForm

DEFINE CLASS FormChild AS FORM

ENDDEFINE

DEFINE CLASS FormGrandChild AS FormChild

ENDDEFINE


请参阅

ADD CLASS，AMEMBERS( )，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，DEFINE CLASS


ACOPY( ) 函数

请参阅	示例

把一个数组的元素复制到另一个数组中。

语法

ACOPY(SourceArrayName, DestinationArrayName
[, nFirstSourceElement [, nNumberElements [, nFirstDestElement ]]])

参数

SourceArrayName, DestinationArrayName

将源数组 SourceArrayName 中的元素一对一地复制到目标数组 DestinationArrayName 中去，源数组中的元素将替换目标数组的元素。

数组可以是一维或二维数组。如目标数组不存在，Visual FoxPro 将自动创建目标数组。这时，目标数组的大小与源数组大小相同。

附注

可以用两种方法引用二维内存变量数组的元素．第一种是用两个下标值指定元素在数组中的行和列，另一种则指定单个元素的编号。此函数和其他操作二维数组的函数需要单个元素编号（此处为 nFirstSourceElement 和 nFirstDestElement）。使用 AELEMENT( ) 函数，可以根据元素的行和列下标，返回二维数组中某元素的正确元素编号。

nFirstSourceElement

指定源数组中第一个被复制元素的编号，复制从此元素开始（复制时，包含编号为 nFirstSourceElement 的元素）。如果复制时不使用元素编号 nFirstSourceElement，则从源数组的第一个元素开始复制。

nNumberElements

指定复制的源数组的元素数目。如果 nNumberElement 为 -1，则从元素 nFirstSourceElement 开始，复制源数组中所有的元素。

nFirstDestElement

指定目标数组中第一个被替换的元素。

返回值类型

数值型

说明

ACOPY( ) 函数返回复制到目标数组中的元素个数。


*下面的示例根据 customer 表中选定的记录创建一个数组，
* 然后用 ACOPY() 函数创建一个新的数组。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开 customer 表

SELECT DISTINCT company ;

FROM customer ;

ORDER BY company ;

WHERE country = 'Germany';

INTO ARRAY gaCompanies

= ACOPY(gaCompanies, gaCompaniesTemp)  && 对数组进行复制

CLEAR

DISPLAY MEMORY LIKE gaCompaniesTemp


请参阅

ADEL( )，AELEMENT( )，AINS( )，ASCAN( )，ASORT( )，DIMENSION


ACOS( ) 函数

请参阅	示例

返回指定数值表达式的反余弦值。

语法

ACOS(nExpression)

参数

nExpression

指定一个数值表达式，ACOS( ) 函数返回此表达式的反余弦值。nExpression 参数的取值范围从 -1 到 +1，ACOS( ) 函数的值域从 0 到 π (3.141592)。ACOS( ) 函数返回数值的小数位数由 SET DECIMALS 指定。

RTOD( ) 函数可把弧度值转化为角度值。

返回值类型

数值型

说明

函数返回的反余弦值为弧度值。


CLEAR

? RTOD(ACOS(0))  && 显示 90.00

STORE -1 to gnArcAngle

? RTOD(ACOS(gnArcAngle))  && 显示 180.00

? RTOD(ACOS(SQRT(2)/2))  && 显示 45.00


请参阅

ASIN( )，ATAN( )，ATN2( )，COS( )，DTOR( )，RTOD( )，SET DECIMALS，SIN( )，TAN( )


Activate 事件

请参阅

当激活表单、表单集或页对象，或者显示工具栏对象时，将发生 Activate 事件。

应用于

表单，表单集，页面，工具栏。

语法

PROCEDURE Object.Activate

说明

此事件的触发取决于对象的类型：

 •	   当表单集中的一个表单获得焦点，或调用表单集的 Show 方法时，激活表单集对象。

 •	   当用户单击一个表单或单击一个控制，或者调用表单对象的 Show 方法时，激活表单对象。

 •	   当用户单击页面的选项卡，单击页面上的控制，或者将包含页对象的页框的 ActivePage 属性设置为此页对象对应页码时，激活页对象。

 •	   当调用工具栏的 Show 方法时，激活工具栏。

使用表单集的 Show 方法时，将显示所有 Visable 属性为“真”(.T.) 的表单。Activate 事件触发后，首先激活表单集，然后是表单，最后是页面。


请参阅

ActivePage 属性，Deactivate 事件，GotFocus 事件，LostFocus 事件，SetFocus 方法，Show 方法，Visible 属性


ACTIVATE MENU 命令

请参阅	示例

显示并激活一个菜单栏。

语法

ACTIVATE MENU MenuBarName
[NOWAIT]
[PAD MenuTitleName]

参数

MenuBarName

指定要激活的菜单栏的名称。

NOWAIT

指定在程序执行时，不等待用户在已激活菜单栏中选择菜单或按 ESC 键，而是继续执行程序。发出 DEACTIVATE MENU 命令后，如果菜单是用 NOWAIT 选项激活的，则程序的执行不返回到 ACTIVATEMENU 命令的下一行命令。

PAD MenuTitleName

指定一个菜单标题名，当激活菜单栏时，选中此菜单标题名。如果不指定菜单标题名，菜单栏激活后，默认激活第一个菜单标题名。

说明

该命令显示并且激活 MenuBarName 指定的菜单栏，需要结合 DEFINE MENU 和 DEFINE PAD 命令使用。

提示

当应用程序中包含 Visual FoxPro 系统菜单栏 (_MSYSMENU) 时，不需激活此菜单，而是执行 SET SYSMENU AUTOMATIC 命令。


*下面的示例用 ACTIVATE MENU 命令显示并激活一个用户定义的
* 菜单系统。当前系统菜单栏先用 SET SYSMENU SAVE 命令保
* 存在内存中，然后用 SET SYSMENU TO 命令删除所有系统菜
* 单标题。

*用 DEFINE PAD 命令创建两个菜单标题，并且用 DEFINE POPUP
* 为每个菜单标题创建下拉式菜单，然后用 DEFINE BAR 命令在每
* 个菜单上创建菜单项。当选中某个菜单标题后，ON PAD 命令使
* 用 ACTIVATE POPUP 子句激活相应菜单。ACTIVATE MENU
* 命令显示并激活这个选中的菜单栏。

*选择菜单中的某菜单项后，开始执行 CHOICE 过程，CHOICE
* 过程显示了选择的菜单项名和包含此项的菜单名。

***  把此程序命名为 ACTIMENU.PRG***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

ON KEY LABEL ESC KEYBOARD CHR(13)

DEFINE MENU example BAR AT LINE 1

DEFINE PAD convpad OF example PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD cardpad OF example PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD convpad OF example ACTIVATE POPUP conversion

ON PAD cardpad OF example ACTIVATE POPUP cardinfo

DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' ;

KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;

KEY CTRL+S, '^S'

DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;

KEY CTRL+D, '^D'

DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;

KEY CTRL+T, '^T'

DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;

KEY CTRL+I, '^I'

DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

ON SELECTION POPUP conversion DO choice IN actimenu;

WITH PROMPT( ), POPUP( )

DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;

KEY ALT+V, ''

DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;

KEY ALT+P, ''

DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;

KEY ALT+W, ''

DEFINE BAR 4 OF cardinfo PROMPT '\-'

DEFINE BAR 5 OF cardinfo PROMPT '\<Charges ' ;

KEY ALT+C, ''

ON SELECTION POPUP cardinfo;

DO choice IN actimenu WITH PROMPT( ), POPUP( )

ACTIVATE MENU example

DEACTIVATE MENU example

RELEASE MENU example EXTENDED

SET SYSMENU TO DEFAULT

ON KEY LABEL ESC

PROCEDURE choice

PARAMETERS mprompt, mpopup

WAIT WINDOW 'You chose ' + mprompt + ' from popup ' + mpopup NOWAIT


请参阅

CLEAR MENUS，CREATE MENU，DEACTIVATE MENU，DEFINE MENU，DEFINE PAD，HIDE MENU，SET SYSMENU，SHOW MENU


ACTIVATE POPUP 命令

请参阅	示例

显示并且激活一个菜单。

语法

ACTIVATE POPUP MenuName
[AT nRow, nColumn]
[BAR nMenuItemNumber]
[NOWAIT]
[REST]

参数

MenuName

指定要激活的菜单的名称。

AT nRow, nColumn

指定菜单在屏幕或用户自定义窗口中显示的位置，行和列的坐标值为菜单左上角的坐标值。用此参数确定的位置优先于 DEFINE POPUP 命令的 FROM 参数指定的位置。

BAR nMenuItemNumber

指定菜单激活后自动选定的菜单项。例如，如果 nMenuItemNumber 为 2，则菜单激活后将自动选择第二个菜单项。如果省略参数 BAR nMenuItemNumber，或者 nMenuItemNumber 的数值大于菜单中的项数，则菜单激活后将选择第一个菜单项。

NOWAIT

指定程序运行时不等待用户选择菜单项，而是继续执行程序。

REST

如果 DEFINE POPUP 命令中带有 PROMPT FIELD 子句，则它所创建菜单的各项就是每个记录指定字段的内容。此菜单激活时，既使包含此字段的表的记录指针没有指向第一个记录，初始时还是选定第一个菜单项。

包含 REST 选项，则指定此菜单激活时选定与表中当前记录指针相对应的项。

说明

ACTIVATE POPUP 与 DEFINE POPUP 命令结合使用，用于创建菜单，而 DEFINE BAR 命令则用于创建菜单中的菜单项。


*这个示例在选择一个菜单标题后，用 ACTIVATE POPUP 命令激活菜
* 单。当前系统菜单栏先用 SET SYSMENU SAVE 命令存入内存，
* 然后用 SET SYSMENU TO 命令删除所有系统菜单标题。

*用 DEFINE PAD 命令创建两个新的系统菜单标题，并且用 DEFINE
* POPUP 命令为每一个菜单标题创建一个菜单，再用 DEFINE BAR
* 命令为每个菜单创建建菜单项。当选择一个菜单标题后，ON PAD
* 命令通过 ACTIVATE POPUP 子句激活相应的菜单。

*从菜单中选择某个菜单项后，将执行 CHOICE 过程。CHOICE
* 过程将显示选定的菜单项名和对应菜单名。如果从 Card Info
* 菜单中选择 Exit 菜单项，将恢复为原来的 Visual FoxPro 系统菜单。

*** 命名此程序为 ACTIPOP.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD convpad OF _MSYSMENU PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD cardpad OF _MSYSMENU PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion

ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo

DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;

KEY CTRL+S, '^S'

DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;

KEY CTRL+D, '^D'

DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;
KEY CTRL+T, '^T'

DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;
KEY CTRL+I, '^I'

DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

ON SELECTION POPUP conversion;

DO choice IN actipop WITH PROMPT(), POPUP()

DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;

KEY ALT+V, ''

DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;

KEY ALT+P, ''

DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;

KEY ALT+W, ''

DEFINE BAR 4 OF cardinfo PROMPT '\-'

DEFINE BAR 5 OF cardinfo PROMPT '\<Charges' ;

KEY ALT+C, ''

DEFINE BAR 6 OF cardinfo PROMPT '\-'

DEFINE BAR 7 OF cardinfo PROMPT 'E\<xit';

KEY ALT+X, ''

ON SELECTION POPUP cardinfo;
DO choice IN actipop WITH PROMPT(),POPUP()

PROCEDURE choice

PARAMETERS mprompt, mpopup

WAIT WINDOW 'You chose ' + mprompt + ;
' from popup ' + mpopup NOWAIT

IF mprompt = 'Exit'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

CLEAR POPUPS，CREATE MENU，DEACTIVATE POPUP，DEFINE BAR，DEFINE POPUP，HIDE POPUP，MOVE POPUP，ON SELECTION POPUP，POP POPUP，POPUP( )，PROMPT( )，PUSH POPUP，SHOW POPUP


ACTIVATE SCREEN 命令

请参阅

把结果输出到 Visual FoxPro 主窗口，而不是活动的用户自定义窗口。

语法

ACTIVATE SCREEN

说明

用 ACTIVATE WINDOW 命令可使输出结果输出到用户自定义窗口中。


请参阅

ACTIVATE WINDOW，DEACTIVATE WINDOW，DEFINE WINDOW，HIDE WINDOW，SHOW WINDOW


ACTIVATE WINDOW 命令

请参阅	示例

显示并且激活一个或多个用户自定义窗口或 Visual FoxPro 系统窗口。

语法

ACTIVATE WINDOW WindowName1 [, WindowName2 ...]
| ALL | SCREEN
[IN [WINDOW] WindowName3 | IN SCREEN | IN MACDESKTOP]
[BOTTOM | TOP | SAME]
[NOSHOW]

参数

WindowName1 [, WindowName2 ...]

指定每一个待激活窗口的名称，窗口名用逗号分开。在 Visual foxPro 中，可以指定一个待激活工具栏的名称。若要列出 Visual FoxPro 所有的工具栏名，请参阅 SHOW WINDOW。

ALL

指定激活所有窗口，最后一个被激活的窗口为活动的输出窗口。

SCREEN

仅用于 FoxPro for Macintosh。

显示 FoxPro 主窗口。

单击关闭框或执行 DEACTIVATE WINDOW SCREEN 命令、HIDE WINDOW SCREEN 命令或者 RELEASE WINDOW SCREEN 命令，能隐藏 FoxPro 主窗口。

IN [WINDOW] WindowName3

指定父窗口名，要激活的窗口放入这个父窗口中并激活，激活的窗口变成一个子窗口。一个父窗口可以有多个子窗口，在父窗口内激活的子窗口不能移出父窗口。如移动父窗口，子窗口也随之一起移动。

附注

父窗口对于每一个可视的子窗口来说必须是可视的。

IN SCREEN

在 Visual FoxPro 主窗口中放置并激活窗口。创建一个窗口时，可用 DEFINE WINDOW 的 IN WINDOW 子句将它放入一个父窗口中。用包含 IN SCREEN 子句的 ACTIVATE WINDOW 命令激活窗口时，DEFINE WINDOW 命令中的 IN WINDOW 子句将不起作用。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

在 Macintosh 桌面上放置并激活窗口，窗口与 FoxPro 主窗口同级。此窗口可移出 FoxPro 主窗口，同时 FoxPro 主窗口可置于此窗口前。如果包含 MACDESKTOP 子句，被激活窗口的行为就如同 FoxBASE+ for Macintosh 中的窗口。

如果包含 MACDESKTOP 子句，将忽略当前的 SET MACDESKTOP 设置。有关在 FoxPro 主窗口或 Macintosh 桌面上激活窗口的详细内容，请参阅 SET MACDESKTOP。

BOTTOM | TOP | SAME

指定被激活窗口对应其他已激活窗口的位置。默认情况下，窗口激活后为最顶层的窗口。如果使用 BOTTOM 子句，窗口激活后位于所有其他窗口之后；如果使用 TOP 子句，则激活窗口位于所有其他窗口之前。如果使用 SAME 子句，窗口激活后并不影响窗口的前后位置。

NOSHOW

激活一个窗口，并使输出结果输出至此窗口，但不显示这个窗口。

说明

可以使用 DEFINE WINDOW 命令创建用户自定义窗口。

激活一个窗口，使它成为最顶层的窗口，并且所有的输出结果都输出到这个窗口。输出结果一次只能输出到一个窗口中。只有在活动的输出窗口变为不活动的或被释放时，或者将另一个窗口或 Visual FoxPro 主窗口激活时，才将其他窗口设置为活动的输出窗口。

用户自定义窗口的名称显示在窗口菜单底部。在 FoxPro for MS-DOS 中，活动的用户自定义窗口用一方块标记；而在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，则用复选标记来标识。

在 Visual FoxPro 主窗口中，能同时放置多个窗口，但输出窗口只能是最后一个被激活的窗口。当打开多个窗口时，使输出窗口由活动变为非活动将从 Visual FoxPro 主窗口中移去此窗口，并把以后的输出结果送至另一个窗口。如果没有活动的输出窗口，输出结果将输出到 Visual FoxPro 主窗口。

附注

当活动输出窗口变为非活动窗口时，为了保证输出结果定向到一个确定的窗口，您必须用 ACTIVATE WINDOW 命令明确地激活这个窗口。

所有活动窗口只要不用 DEACTIVATE WINDOW 或 HIDE WINDOW 命令把它从屏幕上移去，就一直显示。但是执行这两个命令只是从屏幕上移去窗口，并不从内存中删除窗口。事实上，执行 ACTIVATEWINDOW 或 SHOW WINDOW 命令，又可使窗口重新显示。

要从屏幕和内存中同时删除窗口，可使用 CLEAR WINDOWS、RELEASE WINDOWS 或 CLEAR ALL 命令。从内存中删除的窗口必须重新定义，才能重新放置到 Visual FoxPro 主窗口中。

您可以用 ACTIVATE WINDOW 命令把 Visual FoxPro 系统窗口放在 Visual FoxPro 主窗口或一个父窗口中。

下列系统窗口可用 ACTIVATE WINDOW 命令打开：

 •	   命令

 •	   调试

 •	   跟踪

 •	   查看

若要激活一个（Visual FoxPro 中的）系统窗口或工具栏，要用引号把整个系统窗口名或工具栏名括起来。例如，要在 Visual FoxPro 中激活“报表控制”工具栏，可发出下面命令：

ACTIVATE WINDOW Report Controls

用 HIDE WINDOW 或 RELEASE WINDOW 命令可从 Visual FoxPro 主窗口或父窗口中移去系统窗口。


*下面的示例定义了名为 output 的窗口并将这个窗口激活，然后
* 把它放在 Visual FoxPro 主窗口中。WAIT 命令暂停程序执行，然
* 后将窗口隐藏起来，最后又重新显示这个窗口。

CLEAR

DEFINE WINDOW output FROM 2,1 TO 13,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

ACTIVATE WINDOW output

WAIT WINDOW 'Press any key to hide window output'

HIDE WINDOW output

WAIT WINDOW 'Press any key to show window output'

SHOW WINDOW output

WAIT WINDOW 'Press any key to release window output'

RELEASE WINDOW output


请参阅

CLEAR WINDOWS，DEACTIVATE WINDOW，DEFINE WINDOW，HIDE WINDOW，RELEASE WINDOWS，SHOW WINDOW


ActivateCell 方法

请参阅

激活表格控制中的一个单元。

应用于

表格

语法

Grid.ActivateCell(nRow, nCol)

参数

nRow, nCol

指定活动单元所在的行和列。


请参阅

ActiveColumn 属性，ActiveRow 属性


ActiveColumn 属性

请参阅

返回表格控制中包含活动单元的列。

应用于

表格

语法

Grid.ActiveColumn

说明

设计时不可用，运行时只读。


请参阅

ActivateCell 方法，ActiveRow 属性


ActiveControl 属性

请参阅

引用对象上的活动控制。

应用于

表单，页面，_SCREEN，工具栏

语法

Object.ActiveControl.Property[ = Value]

设置

Property

要返回或设置的属性。

Value

当前属性值或新的属性值。

说明

此属性在设计时不可用，运行时只读。若指定对象的所有控制都不可见或被废止，则此属性也不可用。

如果对象是活动的，则 ActiveControl 属性引用有焦点的控制；如果对象处于非活动状态，则产生错误。


请参阅

ActiveForm 属性


ActiveForm 属性

请参阅

引用表单集中或 _SCREEN 对象中活动的表单对象。

应用于

表单，表单集，SCREEN

语法

Object.ActiveForm.Property [ = Setting]
 — 或者 —
Object.ActiveForm.Method

设置

Property

指定表单集中活动表单的任一属性，例如 Caption 属性。

Method

指定表单集中活动表单的任一方法，例如 Move 方法。

Setting

Property 属性已有的或新的设置。

说明

设计时不可用，运行时只读。

如果表单集对象是活动的，则 ActiveForm 引用有焦点的表单对象；如果表单集处于非活动状态，则产生错误。

使用 ActiveForm 属性可以访问活动表单对象的属性和方法。


请参阅

Activate 事件，Deactivate 事件


ActivePage 属性

请参阅

返回页框对象中活动页面的页码。

应用于

页框

语法

PageFrame.ActivePage

说明

设计时可用，运行时可读写。


请参阅

Activate 事件，GotFocus 事件


ActiveRow 属性

请参阅

指定表格控制中包含活动单元的行。

应用于

表格

语法

Grid.ActiveRow

说明

设计时不可用，运行时只读。

附注

ActiveRow 属性的返回值与索引表中 RECNO( ) 函数的返回值不同。


请参阅

ActivateCell 方法，ActiveColumn 属性，RECNO( )


ADATABASES( ) 函数

请参阅	示例

将所有打开数据库的名称和路径放到内存变量数组中。

语法

ADATABASES(ArrayName)

参数

ArrayName

指定数组名。如果指定数组不存在，则 Visual ForPro 自动创建一个数组。如果数组存在，但大小不足以包含所有数据库信息，则 Visual ForPro 自动增加数组大小，使得数组能容纳所有信息；若数组超过了所需值，则 Visual FoxPro 将截掉多余部分；若数组存在，并且由于没有打开的数据库而导致 ADATABASES( ) 的返回值为零，则不更改已有的数组；如果数组不存在，并且 ADATABASES( ) 函数的返回值为零，则不创建指定数组。

返回值类型

数值型

说明

在当前数据工作期，所有打开数据库的名称都将放置在内存变量数组里。

ADATABASES( ) 函数创建一个二维数组。数组的第一列存放打开数据库的名称，第二列存放数据库的路径。

ADATABASE( ) 函数返回数组中数据库名的数目（行数）。如果没有打开的数据库，则 ADATABASES( ) 函数的返回值为零，并且不创建数组。


* 下面的示例先打开数据库 testdata，然后用 DATAABASE( )
* 函数创建一个包含所有打开数据库名的数组 gaDatabase。

SET PATH TO (HOME( ) + 'samples\data\')	  && 设置到数据库的路径

OPEN DATABASE testdata   && 打开数据库

CLEAR

? ADATABASES(gaDatabase)	  && 创建一个包含打开数据库的数组

DISPLAY MEMORY LIKE gadatabase  && 显示数组的内容

CLOSE DATABASES


请参阅

CREATE DATABASE，DISPLAY DATABASE，LIST DATABASE，MODIFY DATABASE，OPEN DATABASE


ADBOBJECTS( ) 函数

请参阅	示例

把当前数据库中的命名连接名、关系名、表名或 SQL 视图名放到一个内存变量数组中。

语法

ADBOBJECTS(ArrayName, cSetting)

参数

ArrayName

指定存放数据库名称的数组名。若指定数组不存在，Visual FoxPro 将自动创建一个数组。如果数组存在，但数组大小不足以包含所有名称，则 Visual FoxPro 自动增大数组，使得数组能容纳所有名称。如果数组的大小超过所需值，Visual FoxPro 将截掉多余部分；如果数组存在，但由于没找到任何名称导致 ADBOBJECTS( ) 函数返回零，则数组内容将保持不变；如果数组不存在，并且 ADBOBJECTS( ) 函数返回零，则不创建指定数组。

如果一维数组在创建时指定为 CONNECTION、TABLE 或 VIEW，则一维数组中每行包含数据库中的连接名、表名或视图名。

如果创建二维数组时指定为 RELATION，则二维数组的每行对应数据库中的一个关系。数组第一列存放子表名，第二列存放父表名，第三列存放子表的索引标识名，第四列存放父表的索引标识名。

数组的第五列存放参照完整性信息。如果关系没有参照完整性规则，则这一列为空。如果关系具有参照完整性规则，则这一列存放一些字符，这些字符决定了修改、删除和插入的参照完整性规则类型。第一个字符代表更新规则类型，第二个字符代表删除规则类型，第三个字符代表插入规则类型。更新和删除的可选字符值为“C”、“R”和“I”，其中“C”表示级联，“R”表示约束，“I”表示忽略。插入的可选字符值为“R”和“I”，其中“R”表示约束，“Ｉ”代表忽略。例如，如果某个关系的参照完整性规则是级联更新、约束删除和忽略插入，则第五列存放符串“CRI”。

cSetting

指定哪些名称放在内存变量数组中。下表列出了参数 cSetting 的可选值和放在数组中的相应名称。

cSetting 值	名称
CONNECTION	连接名
RELATION	表关系
TABLE	表名
VIEW	视图名
CONNECTION、RELATION、TABLE 和 VIEW 设置不能缩写。

返回值类型

数值型

说明

运行 ADBOBJECTS( ) 函数时，必须有一个数据库是打开的，并且为当前数据库，否则 Visual FoxPro 将产生错误信息。


*  下面的示例首先打开数据库 testdata，然后用
*  ADBOBJECTS( ) 函数创建名为 gaTables 的数组，数组将包
* 含数据库中的表名，最后显示这些表名。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	  &&设置数据库的路径

OPEN DATABASE testdata  && 打开数据库 testdata

CLEAR

? ADBOBJECTS(gaTables, 'TABLE')	  && 创建包含表名的数组

DISPLAY MEMORY LIKE gaTables	  && 显示数组内容


请参阅

ADATABASES( )，CREATE，CREATE CONNECTION，CREATE DATABASE，CREATE SQL VIEW，CREATE TABLE - SQL，DISPLAY DATABASE，INDBC( )，LIST DATABASE，MODIFY DATABASE，SET DATABASE


ADD CLASS 命令

请参阅

向 .VCX 可视类库中添加一个类定义。

语法

ADD CLASS ClassName [OF ClassLibraryName1] TO ClassLibraryName2
[OVERWRITE]

参数

ClassName

指定添加到 .VCX 可视类库 ClassLibraryName2 中的类定义名。

如果忽略可选的 OF ClassLibraryName1 子句，Visual FoxPro 将在所有以 SET CLASSLIB 命令打开的可视类库 .VCX 中寻找这个类定义。

如果找不到这个类定义，或者具有指定名称的类定义在 ClassLibraryName2 中已经存在，Visual FoxPro 将产生错误。

OF ClassLibraryName1

指定可从中复制类定义的 .VCX 可视类库名。

TO ClassLibraryName2

指定 .VCX 可视类库名，将类定义加入到这个可视类库中去；如果指定的 .VCX 可视类库不存在，则 Visual FoxPro 将自动创建指定的可视类库，并把类定义加入到新创建的库中。

OVERWRITE

指定改写与指定类定义 ClassName 同名的类定义。如果省略参数 OVERWRITE，并且在 .VCX 可视类库中存在与 ClassName 同名的类定义，Visual FoxPro 将产生错误信息。

说明

使用 ADDCLASS 命令可以往类库中添加一个类定义，或者将某个类定义从一个可视类库 .VCX 复制到另一个类库中去。新添加的类定义不能来源于 Visual FoxPro 应用程序（ .PRG 或 .APP）或过程文件。


请参阅

ACLASS( )，AMEMBERS( )，CREATE CLASS，CREATE CLASSLIB，DEFINE CLASS，MODIFY CLASS，RELEASE CLASSLIB，RENAME CLASS，设置 CLASSLIB


ADD TABLE 命令

请参阅	示例

在当前数据库中添加一个自由表。

语法

ADD TABLE TableName | ?
[NAME LongTableName]

参数

TableName

指定添加到数据库中的表的名称。

?

显示“打开”对话框，从中可以选择添加到数据库中的表。

NAME LongTableName

指定表的长名。长名可以包含 128 个字符，可用来取代扩展名为 .DBF 的短文件名。

说明

将表添加到数据库中后，可以象其他数据库表一样对该表进行操作。

表添加到数据库中后，就不再是自由表。但是使用 REMOVE TABLE 命令又可以使数据库中的任何一个表成为自由表。

要添加的表必须具备下列条件：

 •	   该表是有效的 .DBF 文件。

 •	   除非为表指定一个唯一的长名称，否则表不能与打开数据库中已有的表同名。

 •	   表不能同时放在另一个数据库中。使用 REMOVE TABLE 命令可把表从另一个数据库中移去。

要往其中加入表的数据库必须具备下列条件：

 •	   必须以独占方式打开。要想独占地打开一个数据库，请在使用 OPEN DATABASE 命令时加入 EXCLUSIVE 子句。

 •	   不包含在事务中。


* 下面的示例创建名为 mydbc1 和 mydbc2 的两个数据库和一个名
* 为 table1 的表。在创建表时，把表添加到数据库 mydbc1 中，
* 然后关闭这个表，并将它从数据库 mydbc1 中移去。接着使用
*  ADD TABLE 命令把表添加到 mydbc2 中，最后使用 RENAME
* 命令将表名由 table1 改为 table2。

CREATE DATABASE mydbc1

CREATE DATABASE mydbc2

SET DATABASE TO mydbc1

CREATE TABLE table1 (cField1 C(10), n N(10))  && 往 mydbc1 中添加表

CLOSE TABLES	  && 要从数据库中移去表，应先将该表关闭

REMOVE TABLE table1

SET DATABASE TO mydbc2

ADD TABLE table1

RENAME TABLE table1 TO table2


请参阅

CLOSE DATABASES，CREATE DATABASE，DISPLAY TABLES，FREE TABLE，OPEN DATABASE，REMOVE TABLE


AddColumn 方法

请参阅

向表格控制中添加列对象。

应用于

表格

语法

Grid.AddColumn(nIndex)

参数

nIndex

指定一个表示位置的数，新列将添加到表格中的此位置上。原有的列向右移动，但是 ColumnCount 属性的值不增加。


请参阅

AddObject 方法，ColumnCount 属性，DeleteColumn 方法


AddItem 方法

请参阅

在组合框或列表框中添加一个新数据项，并且可以指定数据项索引。

应用于

组合框，列表框

语法

Control.AddItem(cItem [, nIndex] [, nColumn])

参数

cItem

指定添加到控制中的字符串表达式。

nIndex

指定控制中放置数据项的位置。如果指定了有效的 nIndex 值，cItem 将放置在控制的正确位置。如果指定的 nIndex 已经存在，数据项将插入到这个位置，在这个数据项后面的其他所有数据项在组合框或列表框控制的列表区中向下移一个位置。

如果忽略参数 nIndex，并且 Sorted 属性设置为“真”(.T.)，则 cItem 数据按字母排序方式添加到队列；如果忽略参数 nIndex，并且 Sorted 属性设置为“假”(.F.)，则 cItem 将添加到组合框或列表框控制的列表区未尾。

nColumn

指定控制的列，新数据项加入到此列中。默认值为 1。

说明

当 RowSourceType 属性设置为 0 (None) 时，可使用 AddItem 方法或 AddListItem 方法。

每个添加到组合框或列表框中的数据项都有两个标识号：

 •	   nItemID，这是一个与控制中数据项的唯一标识 ID 相关的整数。除非指定了其他的 nIndexID 值，第一个数据项的 nIndexID 值为 1。

 •	   nIndex，这是一个与控制中数据项显示顺序有关的整数，在控制中第一个数据项的 nIndex 值为 1。


请参阅

AddListItem 方法，Clear 方法，ListIndex 属性，ListItemID 属性，RowSourceType 属性，RemoveItem 方法，Sorted 属性


AddListItem 方法

请参阅

在组合框或列表框控制中添加新的数据项，并且可以指定数据项的 ID 值。

应用于

组合框，列表框

语法

Control.AddListItem(cItem [, nItemID] [, nColumn])

参数

cItem

指定添加到控制中的数据项。

nItemID

指定一个整数，此值表示数据项在控制中唯一的 ID。

如果忽略参数 nItemID，并且 Sorted 属性设置为“真”(.T.)，则 cItem 按字母顺序添加到组合框或列表框的列表中；如果忽略参数 nItemID，并且 Sorted 属性设置为“假”(.F.)，则 cItem 添加到组合框或列表框的列表未尾。

nColumn

指定新数据项加入到控制的哪一列。默认值为 1。

说明

当 RowSource 属性设置为 0 (None) 时，可使用 AddItem 或 AddListItem 方法。

每个添加到组合框或列表框中的数据项都有两个标识号：

 •	   nItemID，这是一个与控制中数据项的唯一标识 ID 相关的整数。除非指定了其他的 nIndexID 值，否则第一个数据项的 nIndexID 值为 1。

 •	   nIndex，这是一个与控制中数据项显示顺序有关的整数，在控制中第一个数据项的 nIndex 值为 1。


请参阅

AddItem 方法，Clear 方法，ListIndex 属性，ListItemID 属性，RowSourceType 属性，RemoveItem 方法，Sorted 属性


AddObject 方法

请参阅	示例

运行时，在容器对象中添加对象。

应用于

列，命令组，容器对象，定制，数据环境，表单，表单集，表格，选项组，页面，页框，_SCREEN，工具栏

语法

Object.AddObject(cName, cClass [, cOLEClass] [, aInit1, aInit2 ...])

参数

cName

指定引用新对象的名称。

cClass

指定添加对象所在的类。

cOLEClass

指定添加对象的 OLE 类。

aInit1, aInit2 ...

指定传给新对象的 Init 事件的参数。

说明

调用 AddObject 方法时，将触发新添加对象的 Init 事件。在表单集中加入表单时，Load 事件在 Init 事件之前发生。

附注

当用 AddObject 方法往容器中加入对象时，对象的 Visible 属性设置为“假”(.F.)。因此您可以设置对象的属性，而不看更改对象外观时的一些中间效果。


*下面的示例介绍怎样使用 AddObject 方法将对象或控制添加到表单
* 中。此例用 AddObject 方法往表单中加入一个 Line 控制和三个
* 命令按钮。

* Line 控制和命令按钮的 Visible 属性设置为“真”(.T.)。在默认情
* 况下，将对象或控制添加到表单后，它们是不可见的。

frmMyForm = CREATEOBJECT('Form')  && 创建表单

frmMyForm.Closable = .F.  &&  废止控制菜单框

frmMyForm.AddObject('shpLine','Line')  && 在表单中添加 Line 控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && 向上命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && 向下命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && 退出命令按钮

frmMyForm.shpLine.Visible = .T.  && 设置 Line 控制可见

frmMyForm.shpLine.Top = 20  && 指定 Line 控制所在的行

frmMyForm.shpLine.Left = 125  && 指定 Line 控制所在的列

frmMyForm.cmdCmndBtn1.Visible =.T.  && 使向上命令按钮可视

frmMyForm.cmdCmndBtn2.Visible =.T.  && 使向下命令按钮可视

frmMyForm.cmdCmndBtn3.Visible =.T.  && 使退出命令按钮可视

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事务处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮的标题

Left = 50  && 命令按钮所在的列

Top = 100  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  &&隐藏 Line 控制

ThisForm.shpLine.LineSlant ='/'  && 向上倾斜

ThisForm.shpLine.Visible = .T.  && 显示 Line 控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮的标题

Left = 200  && 命令按钮所在的列

Top = 100  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏 Line 控制

ThisForm.shpLine.LineSlant ='\'  && 向下斜

ThisForm.shpLine.Visible = .T.  && 显示 Line 控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标题

Cancel = .T.  && 默认的取消(ESC)命令按钮

Left = 125  && 命令按钮所在的列

Top = 150  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

ENDDEFINE


请参阅

Init 事件，Load 事件，RemoveObject 方法，Visible 属性


ADEL( ) 函数

请参阅	示例

删除一维数组中的一个元素或删除二维数组的一行或一列。

语法

ADEL(ArrayName, nElementNumber [, 2])

参数

ArrayName

指定一个数组，ADEL( ) 函数删除这个数组的一个元素或一行一列。

nElementNumber

指定从数组中删除第几个元素，或者第几行或第几列。如果要从数组中删除一列，必须包含可选参数 2。

附注

您可以用两种方法引用二维数组中的一个元素。第一种是用两个下标值指定元素在数组中的行和列，另一种则指定单个元素的编号。此函数和其他操作二维数组的函数需要单个元素的编号（此处为 nElementNumber）。使用 AELEMENT( ) 函数可以根据元素的行和列下标返回正确的元素编号。

有关如何引用数组中元素的详细内容，请参阅 DIMENSION。

2

从数组中删除一列。

返回值类型

数值型

说明

从数组中删除一个元素、一行或一列，但并不改变数组的大小；后续元素、行或列向数组的起始方向移动，并把最后一个元素、行或列设置为“假”(.F.)。

如果成功地删除了一个元素、行或列，则返回 1。


*下面的示例创建并且填充一个数组，然后搜索一个公司名。如果找
* 到此公司名，则从数组删除这个公司名。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开 customer 表

SELECT company FROM customer ;

WHERE country = 'UK' ;

INTO ARRAY gaCompanies

gnCount = _TALLY

gcName = 'Seven Seas Imports'

CLEAR

DISPLAY MEMORY LIKE gaCompanies*

gnPos = ASCAN(gaCompanies, gcName)	&& 搜索公司名

IF gnPos != 0

*** 找到公司名后，从数组中删除这个公司名***

= ADEL(gaCompanies, gnPos)

gnCount = gnCount - 1

ENDIF

DISPLAY MEMORY LIKE gaCompanies


请参阅

ACOPY( )，ADIR( )，AELEMENT( )，AFIELDS( )，AINS( )，ALEN( )，ASCAN( )，ASORT( )，ASUBSCRIPT( )，DIMENSION


ADIR( ) 函数

请参阅	示例

将文件信息存放到数组中，然后返回文件个数。

语法

ADIR(ArrayName [, cFileSkeleton [, cAttribute [, cCreatorType]]])

参数

ArrayName

指定数组名。如果数组不存在，Visual FoxPro 将自动创建此数组。如果数组存在，但其大小不足以包含所有信息，则 Visual FoxPro 自动增加数组大小，使得数组能容纳所有信息。如果数组超过了所需大小，Visual FoxPro 将截掉多余部分。如果数组存在，并且 ADIR( ) 函数由于没找到匹配文件而返回 0，则数组保持不变。如果数组不存在，并且 ADIR( ) 函数返回零，则不创建数组。

下表说明了数组中每列的内容及其数据类型：

列	数组内容	数值类型
1	文件名	字符型
2	文件大小	数值型
3	文件日期	日期型
4	文件时间	字符型
5	文件属性	字符型
数组的最后一列包含匹配文件的文件属性。每个文件属性值由一个字母表示，一个文件可有多个属性。下表说明每个字母表示的文件属性含义：

字母	属性
A	档案文件 一 可读写（在 FoxPro for Macintosh 中，此属性无效）
H	隐藏文件
R	只读文件
S	系统文件
D	目录或文件夹
cFileSkeleton

指定文件梗概，以便存储满足搜索条件的文件名或扩展名的文件信息。例如，条件可以是所有表、所有文本文件、所有文件名第一个字母为“A”的文件，等等。这些通配查询在 cFileSkeleton 中可以包含通配符 * 和 ?。其中问号代表单个字符，星号代表任意字符串。在文件梗概中，可在任意位置使用任意个数的通配符。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，可以指定驱动器和目录名，程序将在此驱动器和目录下搜索匹配文件。如果不指定驱动器和目录名，将把当前目录下的文件信息存入数组中。

在 FoxPro for Macintosh 中，可以搜索匹配文件名的卷和文件夹。如果不指定卷和文件夹，FoxPro for Macintosh 将当前文件夹中的文件信息存入数组中。

cAttribute

指定在返回内容中包含子目录或嵌套文件夹、隐藏或系统文件、或者卷名。

cAttribute 可以是 D、H 和 S 的任意组合。如果包含 D，除了返回匹配 cFileSkeleton 的文件名外，还将返回当前目录的子目录或当前文件夹的嵌套文件夹。如果包含 H，将返回与 cFileSkeleton 指定相匹配的隐藏文件信息。如果包含 S，将返回与 cFileSkeleton 指定通配文件名相匹配的系统文件信息。

如果 cFileSkeleton 为空字符串，仅返回子目录或嵌套文件夹名、隐藏或系统文件。

cAttribute 参数中包含字符 V，将返回当前驱动器的卷名。如果 V 和 D、H 或 S 一起包含在数组中，则只返回卷名。卷名存入数组的第一个元素中，并截去数组的其余部分。

cCreatorType

仅用于 FoxPro for Macintosh。

用指定的创建程序类型指定文件。如果参数 cFileSkeleton 为空字符串，则仅有匹配指定创建程序类型 cCreatorType 的文件放置到数组中去。如果在参数 cfileSkeleton 中有一个文件梗概，则匹配文件梗概且具有 cCreatorType 指定的创建程序类型的文件被放入数组中。

若要获取 FoxPro for Macintosh 所有的文件扩展名以及相关的创建程序类型，请参阅文件扩展名与文件类型。

返回值类型

数值型

说明

对于每一个文件，ADIR( ) 将文件名、大小、日期、时间和属性信息存入数组。


*下面的示例使用 ADIR( ) 函数创建一个包含数据库信息的数组，
* 然后显示这些数据库名。

CLOSE DATABASES

SET PATH TO (HOME( ) + 'samples\data')

gnDbcnumber = ADIR(gaDatabase, '*.DBC')  && 创建数组

CLEAR

FOR nCount = 1 TO gnDbcnumber  && 依据数据库的个数循环

? gaDatabase(nCount,1)  && 显示数据库名

ENDFOR

SET PATH TO HOME( )  && 设置路径至 Visual FoxPro 目录


请参阅

ADEL( )，AELEMENT( )，AFIELDS( )，AINS( )，ALEN( )，ASCAN( )，ASORT( )，ASUBSCRIPT( )，DIMENSION，DIR 或 DIRECTORY，FILER


AELEMENT( ) 函数

请参阅

由元素下标值返回数组元素的编号。

语法

AELEMENT(ArrayName, nRowSubscript [, nColumnSubscript])

参数

ArrayName

指定想要返回元素编号的数组名。

nRowSubscript

指定行下标。如果数组为一维数组，AELEMENT( ) 函数的返回值为 nRowSubscript。

如果仅有参数 nRowSubscript，并且此值大于数组的行总数，将产生错误信息。

nColumnSubscript

Visual FoxPro 指定列下标。如果数组为二维数组，则需要 nRowSubscript 和 ColumnSubscript 两个参数。

返回值类型

数值型

说明

有两种方法引用二维数组中的元素。第一种方法用两个下标值指定元素在数组中的行和列，另一种方法则给出单个元素的编号。在第一种方法中提供元素的行和列下标后，AELEMENT( ) 函数能返回元素的编号。

Visual FoxPro 函数 ADEL( )、ADIR( )、AFIELDS( )、AINS( )、ALEN( )、ASCAN( )、ASORT( ) 和 ASUBSCRIPT( ) 可以操作二维数组，并且需要通过元素编号来引用元素。AELEMENT( ) 为这些函数提供了由下标值转化为元素编号的方法。使用 ASUBSCRIPT( ) 函数可由编号值返回相应的行和列下标值。

下面的示例说明了如何创建一个具有二行三列的数组。DISPLAY MEMORY 命令按元素编号顺序显示每个元素的内容。

DIMENSION gaMyArray(2,3)

DISPLAY MEMORY LIKE gaMyArray

gaMyArray     Pub    A

  (   1,   1)     L  .F. (element number 1)

  (   1,   2)     L  .F. (element number 2)

  (   1,   3)     L  .F. (element number 3)

  (   2,   1)     L  .F. (element number 4)

  (   2,   2)     L  .F. (element number 5)

  (   2,   3)     L  .F. (element number 6)

一个元素可通过下标或编号来引用。命令 STORE 'INVOICE' TO gaMyArray(2,1) 和 STORE 'INVOICE' TO gaMyArray(4) 都将字符串 INVOICE 存入同一数组元素中。

在一维数组中，元素编号与行下标相同。因此对于一维数组，没有必要使用 AELEMENT( ) 函数。


请参阅

ADEL( )，ADIR( )，AFIELDS( )，AINS( )，ALEN( )，ASCAN( )，ASORT( )，ASUBSCRIPT( )，DIMENSION，DISPLAY MEMORY


AERROR( ) 函数

请参阅	示例

创建一个内存变量数组，数组中包含最近的 Visual FoxPro、OLE 或 OBBC 的错误信息。

语法

AERROR(ArrayName)

参数

ArrayName

指定 AERROR( ) 函数创建的数组名。

返回值类型

数值型

说明

AERROR( ) 函数创建的数组有六列，并且返回数组的行数。行数由产生的错误类型决定。

下表描述了 Visual FoxPro 产生错误时数组中每个元素的内容。当发生 VisualFoxPro 错误时，数组只有一行。

元素编号	说明
1	数值型，这是一个错误编号，与 ERROR( ) 函数返回的值相同。
2	字符型，错误文本信息，与 MESSAGE( ) 函数返回的值相同。
3	Null 值，但是如果错误具有附加错误参数，则包含错误参数的文本信息，与 SYS(2018) 的返回值相同。
4	Null 值，但是在适当的时候，包含发生错误的工作区编号。
5	Null 值，但是当触发失败时（错误 1539），包含下列数值之一： 1 - 插入触发失败。 2 - 更新触发失败。 3 - 删除触发失败。
6	Null 值。
7	Null 值。
下表描述了发生 OLE 错误 1427 和 1429 时各元素的内容。当这些 OLE 错误发生时，数组只有一行。

元素编号	说明
1	数值型，为 1427 或 1429。
2	字符型，Visual FoxPro 的错误信息文本。
3	字符型，OLE 错误信息文本。
4	字符型，应用程序名（例如，Microsoft Excel）。.
5	Null 值或字符，如果能从应用程序的帮助文件中得到更详细的有关错误的信息，则此处包含应用程序中保存这些信息的帮助文件名，否则为 Null 值。
6	如果能从应用程序中得到有关信息，此处存放相应帮助主题的帮助文本中的主题标识，否则为 Null 值。.
7	数值型，OLE 2.0 的异常数值。
下面表描述了发生 ODBC 错误 1526 时各元素的内容。当发生 ODBC 错误时，数组可能包含两行或更多行，每一行为一个 ODBC 错误。

元素编号	说明
1	数值型，为 1526。
2	字符型，错误信息文本。
3	字符型，ODBC 错误信息文本。
4	字符型，当前的 ODBC SQL 状态。
5	数值型，ODBC 数据源的错误编号。
6	数值，ODBC 连接句柄。
7	Null 值。


*下面的示例用 ON ERROR 命令指定名为 errhand 的错误处理程
*序。发出拼写错误的 BRWS 命令时会产生一个错误。errhand 程序
* 创建一个包含错误信息的数组，然后显示这些信息。

ON ERROR DO errhand	  && 确定 errhand 为错误处理程序

BRWS  && 语法错误

ON ERROR  && 恢复系统错误处理程序

PROCEDURE errhand

= AERROR(aErrorArray)  && 靠近错误的数据

CLEAR

? 'The error provided the following information'  && 显示信息

FOR n = 1 TO 7  && 显示数组中所有元素

? aErrorArray(n)

ENDFOR


请参阅

CREATE TRIGGER，ERROR( )，MESSAGE( )，ON ERROR，SYS(2018) - 错误信息参数


AFIELDS( ) 函数

请参阅	示例

把当前表的结构信息存放在一个数组中，并且返回表的字段数。

语法

AFIELDS(ArrayName [, nWorkArea | cTableAlias])

参数

ArrayName

指定数组名，将表结构信息存放在这个数组中。如果 AFIELDS( ) 函数指定的数组不存在，Visual FoxPro 将自动创建此数组。如果数组存在，但大小不足以包含 AFIELDS( ) 函数返回的所有信息，Visual FoxPro 将自动增加数组大小，使数组能容纳所有信息。

nWorkArea

指定表所在的工作区，在这个工作区中打开的表的结构信息要存放到数组中。

cTableAlias

指定表的别名。此表的结构信息要存放到数组中。

如果省略参数 nWorkArea 和 cTableAlias，将把当前选定工作区中的表结构信息存入数组中。

下表描述了数组中每列的内容和每列信息的数据类型，每行对应表的一个字段。

列号	字段信息	数据类型
1	字段名	字符型
2	字段类型: C = 字符型 D = 日期型 L = 逻辑型 M = 备注型 N = 数值型 F = 浮点型 I = 整数型 B = 双精度型 Y = 货币型 T = 日期时间型 G = 通用型	字符型
3	字段宽	数值型
4	小数点位数	数值型
5	是否允许 Null 值	逻辑型
6	是否不允许代码转化	逻辑型
7	字段有效性规则	字符型
8	字段有效性说明	字符型
9	字段默认值	字符型
10	表有效性规则	字符型
11	表有效性说明	字符型
返回值类型

数值型

说明

AFIELDS( ) 函数返回表的字段数。数组包含 11 列，行数与表中字段数相同。

使用 COPY STRUCTURE EXTENDED 命令可以将类似的信息复制到一个表而不是一个数组中。


*下面的示例创建名为 gaMyArray 的数组，数组中放置表
* customer 的字段信息，然后显示字段名。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开表 customer

gnFieldcount = AFIELDS(gaMyArray)  && 创建一个数组

CLEAR

FOR nCount = 1 TO gnFieldcount

? gaMyArray(nCount,1)  && 显示所有的字段名

ENDFOR


请参阅

ADEL( )，ADIR( )，AELEMENT( )，AINS( )，ALEN( )，ALTER TABLE - SQL，ASCAN( )，ASORT( )，ASUBSCRIPT( )，COPY STRUCTURE，CREATE，CREATE TABLE，DIMENSION


AFONT( ) 函数

请参阅	示例

将可用字体的信息放到一个数组中。

语法

AFONT(ArrayName [, cFontName [, nFontSize]])

参数

ArrayName

指定存放可用字体名的内存变量数组。如果数组大小不足以包含所有字体，Visual FoxPro 将自动增加数组大小。如果指定的是已有的二维数组，Visual FoxPro 将把数组转化为一维数组。

如果创建数组成功，则 AFONT( ) 函数的返回值为“真”(.T.)，否则返回值为“假”(.F.)。

cFontName

指定需存放信息到数组中的字体名。

如果指定字体仅支持离散的字体尺寸大小（8 磅、10 磅...），这些字体尺寸大小将存入数组，并且 AFONT( ) 函数的返回值为“真”(.T.)。如果参数 cFontName 指定的字体为可缩放的（支持连续字体大小值），数组中将包含一个值为 -1 的元素，并且 AFONT( ) 函数的返回值为“真”(.T.)。

如果指定了无效的字体名，将不创建数组并且 AFONT( ) 函数返回“假”(.F.)。

nFontSize

指定字体 cFontName 的大小。

如果指定的 cFontSize 对字体 FontName 可用，则数组将包含一个值为“真”(.T.) 的元素，并且 AFONT( ) 函数返回“真”(.T.)。如果指定的字体大小对指定字体无效，将不创建数组并且 AFONT( ) 函数返回“假”(.F.)。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

AFONT( ) 函数将可用字体的名称存放在数组中，此函数还可用于确定有效的字体大小或字体是否可缩放。用 GETFONT( ) 函数可以显示包含有效字体、字体大小和样式信息的对话框。


*下面的示例用 AFONT( ) 函数创建包含所有有效字体名的数组。
* 然后显示每种字体的名字并显示此字体的一个示例。如果安装了
* 十种以上字体，则仅显示前十种字体。

CLEAR

=AFONT(gaFontArray)  && 创建包含字体名的数组

gnNumFonts = ALEN(gaFontArray)  && 字体数目

IF gnNumFonts > 10

gnNumFonts = 10  && 只显示前十种字体

ENDIF

FOR nCount = 1 TO gnNumFonts

? ALLTRIM(gaFontArray(nCount))  && 显示字体名

?? '  This is an example of ' ;

+ ALLTRIM(gaFontArray(nCount)) FONT gaFontArray(nCount), 8

ENDFOR


请参阅

FONTMETRIC( )，GETFONT( )，TXTWIDTH( )，SYSMETRIC( )，WFONT( )


AfterCloseTables 事件

请参阅

在表单、表单集或报表的数据环境中，释放指定表或视图后，将发生此事件。

应用于

数据环境

语法

PROCEDURE DataEnvironment.AfterCloseTables

说明

对于表单或表单集，AfterCloseTable 事件发生在表单集或表单的 Unload 事件发生之后，另外还发生在由数据环境打开的表或视图关闭之后。

对于报表，AfterCloseTable 事件发生在由数据环境打开的任意表和视图关闭之后。

在任何时候调用 CloseTables 方法，都会发生 AftercloseTables 事件。AfterCloseTable 事件发生后，将发生数据环境和其相关对象的 Destory 事件。


请参阅

CloseTables 方法，Destroy 事件，Unload 事件


AfterDock 事件

请参阅

停放工具栏后，将发生此事件。

应用于

工具栏

语法

PROCEDURE ToolBar.AfterDock
[LPARAMETERS nIndex]

参数

nIndex

当一个控制存放在一个控制数组中时，指定它在控制数组中的唯一索引标识。

说明

当用户停放一个工具栏或调用 Dock 方法时，发生 AfterDock 事件。


请参阅

BeforeDock 事件，Dock 方法，Undock 事件


AfterRowColChange 事件

请参阅

当用户移到表格的另一行或列时，新单元获得焦点以及新行或列中对象的 When 事件发生后，发生此事件。如果新行或列中对象的 When 事件不返回“真”(.T.)，则不触发 AfterRowColChange 事件。

应用于

表格

语法

PROCEDURE Grid.AfterRowColChange
LPARAMETERS nColIndex

参数

nColIndex

返回最新选择的行或列的索引。

说明

触发 AfterRowColChange 事件的方法可以通过交互式使用鼠标或键盘，或用编程的方法，或调用 Activatecell 方法。


请参阅

ActivateCell 方法，BeforeRowColChange 事件，When 事件


AINS( ) 函数

请参阅	示例

往一维数组中插入一个元素，或往二维数组中插入一行或一列。

语法

AINS(ArrayName, nElementNumber [, 2])

参数

ArrayName

指定需插入元素的数组名。

nElementNumber

指定在数组的第几个元素，或第几行（或列）处插入新元素。

若要往一维数组中插入新元素时，请包含参数 ArrayName 和插入位置 nElementNumber，新元素插到元素 nElementNumber 前。若要往二维数组中插入行时，请包含参数 ArrayName 和行号 nElementNumber，新行正好插到参数 nElementNumber 指定的行前。

有关用下标引用数组元素列的详细内容，请参阅 DIMENSION。

2

往二维数组中插入一列。新列正好插到参数 nElementNumber 指定的列前。

返回值类型

数值型

说明

往数组中插入一个元素、一行或一列，并不改变数组大小。后续的元素、行或列将依次往数组末尾移一步，并丢弃数组中最后一个元素、一行或一列的数据。新插入的元素、行或列初始化为“假”(.F.)。

如果元素、行或列成功地插入到数组中，则 AINS( ) 函数返回 1。


*下面的示例用来创建一个数组，并且用公司名给每个元素赋值。在
* 数组中搜索某个公司名时，如果没有找到此公司名，则把它加到
* 数组中去。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开 customer 表

SELECT company FROM customer ;

WHERE country = 'Germany' ;

INTO ARRAY gaCompanies

gnCount = _TALLY

gcName = 'Seven Seas Imports'

CLEAR

DISPLAY MEMORY LIKE gaCompanies

IF ASCAN(gaCompanies, gcName) = 0  && 搜索公司名

*** 公司名未找到，将萁加入到数组中***

DIMENSION gaCompanies[gnCount+1,1]

= AINS(gaCompanies, gnCount+1)

gaCompanies[gnCount+1] = gcName

ENDIF

DISPLAY MEMORY LIKE gaCompanies


请参阅

ACOPY( )，ADEL( )，ADIR( )，AELEMENT( )，AFIELDS( )，ALEN( )，ASCAN( )，ASORT( )，ASUBSCRIPT( )，DIMENSION


AINSTANCE( ) 函数

请参阅	示例

将一个类的实例存放到一个内存变量数组中，并且返回数组中存放的实例个数。

语法

AINSTANCE(ArrayName, cClassName)

参数

ArrayName

指定存放实例的数组名。如果指定数组不存在，Visual FoxPro 将自动创建指定的数组。如果数组存在，但其大小不足以包含所有实例，Visual FoxPro 则自动增加数组大小，使数组能容纳所有实例。如果数组大小大于所需值，Visual FoxPro 将截掉多余部分。如果数组存在，但由于没找到实例使 AINSTANCE( ) 函数的返回值为 0，则不改变数组。如果数组不存在，并且 AINSTANCE( ) 函数的返回值为 0，将不创建指定数组。

只有用 CREATEOBJECT( ) 赋给内存变量和数组元素的类实例才存放到数组中。

cClassName

指定 Visual FoxPro 基类名或用户自定义类名。下表列出了可以给 cClassName 指定的 Visual FoxPro 基类。

基类名称
CheckBox（复选框）	Label（标签）
Column（列）	Line（线条）
ComboBox（组合框）	ListBox（列表框）
CommandButton（命令按钮）	OLEControlOLE（控制）
CommandGroup（命令组）	OLEBoundControlOLE （联系型控制）
Container（容器）	OptionButton（选项按钮）
Control（控制）	OptionGroup（选项组）
Cursor（临时表）	Page（页）
Custom（自定义）	PageFrame（页框）
DataEnvironment（数据环境）	Relation（关系）
EditBox（编辑框）	Separator（分隔符）
Form（表单）	Shape（形状）
FormSet（表单集）	Spinner（微调）
Grid（网格）	TextBox（文本框）
Header（标头）	Timer（计时器）
Image（图像）	ToolBar（工具栏）
返回值类型

数值型


* 在下面的示例中，将用 CREATEOBJECT( ) 函数创建 Visual
* FoxPro 表单基类的两个实例。然后用 AINSTANCE( ) 函数创建
* 数组 gaMyArray，数组中包括每个表单实例的内存变量引用
* （goINSTANCE1 和 goINSTANCE2）。最后显示数组的内容。

CLEAR ALL

goINSTANCE1 = CREATEOBJECT('Form')

goINSTANCE2 = CREATEOBJECT('Form')

CLEAR

? AINSTANCE(gaMyArray, 'Form')  && 返回值2，表示有两个表单实例

DISPLAY MEMORY LIKE gaMyArray  && 显示引用值


请参阅

ADD CLASS，AMEMBERS( )，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，DEFINE CLASS


ALEN( ) 函数

请参阅	示例

返回数组中元素、行或列的数目。

语法

ALEN(ArrayName [, nArrayAttribute])

参数

ArrayName

指定数组名。如果参数仅包含数组名，ALEN( ) 函数则返回元素的数目。

nArrayAttribute

确定 ALEN( ) 函数返回的是数组元素的数目、数组的行数，还是数组的列数。nArrayAttribute 可以取值为 0、1 或 2。

0 指定返回数组元素数目。省略 nArrayAttribute 与指定 nArrayAttribute 为 0 作用相同。

1 指定返回数组的行数。

2 指定返回数组的列数。如果数组是一维数组，则 ALEN( ) 函数返回 0（没有列）。

返回值类型

数值型


*下面的示例用 AFONT( ) 函数创建一个数组，数组中包含所有有效
* 字体的名称。然后用 ALEN( ) 函数求出数组行数，接着显示每
* 种字体的字体名，并显示此字体的一个示例。如果已安装的字体
* 超过 10 种，则仅显示前 10 种。

CLEAR

=AFONT(gaFontArray)  && 包含字体名的数组

gnNumFonts= ALEN(gaFontArray)  && 已有字体数目

IF gnNumFonts > 10

gnNumFonts = 10  && 显示前十种字体

ENDIF

FOR nCount = 1 TO gnNumFonts

? ALLTRIM(gaFontArray(nCount))  && 显示字体名

?? '  This is an example of ' ;

+ ALLTRIM(gaFontArray(nCount)) FONT gaFontArray(nCount), 8

ENDFOR


请参阅

ADEL( )，ADIR( )，AELEMENT( )，AFIELDS( )，AINS( )，ASCAN( )，ASORT( )，ASUBSCRIPT( )，DIMENSION，STORE


Alias 属性

请参阅

指定与临时对象相关的每个表或视图的别名。

应用于

临时表

语法

DataEnvironment.Cursor.Alias[ = cText]

设置

cText

指定与临时对象相关的表或视图的别名。

说明

设计和运行时可用。

加载数据环境后，与临时对象相关的表或视图都分配了一个别名。在默认状态下，别名与表或视图名相同。使用 Alias 属性可以覆盖默认的别名。

Alias 属性与 USE 命令的 Alias 子句功能相似。


请参阅

USE 命令


ALIAS( ) 函数

请参阅	示例

返回当前表或指定工作区表的别名。

语法

ALIAS([nWorkArea | cTableAlias])

参数

nWorkArea

指定工作区编号，ALIAS( ) 函数返回此工作区表的别名。

cTableAlias

指定表别名，ALIAS( ) 函数返回此表的别名。

如果省略参数 nWorkArea 或 cTableAlias，ALIAS( ) 函数将返回在当前工作区中打开的表的别名。如果当前或指定工作区没有打开的表，则函数返回空字符串。

返回值类型

字符型


*下面的示例用于打开 customer 表并显示其别名。customer 表在
*  另一工作区中被再次打开，并被指定别名为 MyCustomer，
*  然后显示该别名。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开表 customer

CLEAR

? ALIAS( )  && 显示别名

SELECT 0

USE customer AGAIN ALIAS MyCustomer  && 不同的别名

? ALIAS( )  && 显示别名


请参阅

DBF( )，SELECT( )


Align 属性

请参阅

指定表单上 OLE 控制 (.OCX) 的对齐方式。

应用于

OLE 容器控制

语法

OLEContainerControl.Align[ = nAlign]

设置

nAlign

Align 属性的设置是：

设置	说明
0	标准对齐方式。在表单上 OLE 控制的位置与 OLE 容器控制的位置相同。
1	顶部。OLE 控制放置在表单的顶部。
2	底部。OLE 控制放置在表单的底部。
3	左边。OLE 控制放置在表单的左边。
4	右边。OLE 控制放置在表单的右边。
说明

可用于设计时和运行时。

OLE 控制（.OCX 文件）放置在 OLE 容器控制中。

Align 属性仅用于那些对更改对齐方式提供支持的 OLE 控制。可插入的 OLE 对象（如 Microsoft Excel 工作表）不支持 Align 属性。

Align 属性仅用于表单上的 OLE 控制。

如果有二个或多个 OLE 控制具有相同的 Align 属性设置，则这些控制将相互重叠。


请参阅

OLE 容器控制


Alignment 属性

请参阅

指定与控制相关的文本的对齐方式。

应用于

复选框，列，组合框，编辑框，标头，标签，选项按钮，微调，文本框

语法

Control.Alignment[ = nAlign]

设置

nAlign

对于复选框或选项按钮控制，Alignment 属性的设置可以为：

设置	说明
0	（默认设置）左对齐。控制左对齐，文本安排在控制的右边。
1	右对齐。控制右对齐，文本安排在控制的左边
对于组合框、编辑框、标题、标签或微调控制，Alignment 属性的设置可以为：

设置	说明
0	（默认设置）左对齐。
1	右对齐。
2	居中对齐。文本放置正中间。左右所留空间相等。
对于列或文本框控制，Alignment 属性的设置可以为：

设置	说明
0	左对齐
1	右对齐
2	居中对齐。文本放置在正中间，左右所留空间相等
3	（默认设置）自动。对于列对象和不包含在列中的文本框控制，文本对齐方式取决于控制源的数据类型。数值类型（数值型、双精度型、浮点型、货币型和整型）采用右对齐；其他数据类型采用左对齐。对于包含在列中的文本框控制，列的对齐方式决定了文本框中文本的对齐方式。
说明

设计和运行时可用。对于组合框而言，仅当 Style 属性设置为 0 时，此属性才可用。


请参阅

AutoSize 属性，Caption 属性


_ALIGNMENT 系统内存变量

请参阅

在页边距之间对齐文本，包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_ALIGNMENT = cAlignment

参数

cAlignment

决定输出结果在页边距之间对齐方式。cAlignment 取值必须为以下值中的一个：

cAlignment	说明
LEFT	左对齐输出结果（默认值）。
CENTER	居中对齐输出结果。
RIGHT	右对齐输出结果
仅当 _WRAP 设置为“真”(.T.) 时，_ALIGNMENT 变量才是活动的。


请参阅

_LMARGIN，_RMARGIN，_WRAP


AllowTabs 属性

请参阅

指定编辑控制中是否允许使用选项卡。

应用于

编辑框

语法

EditBox.AllowTabs[ = lExpr]

设置

lExpr

AllowTabs 属性的设置如下:

设置	说明
真 (.T.)	允许使用选项卡，并且按 CTRL+TAB 键退出。
假 (.F.)	（默认）不允许在编辑框中使用选项卡，按 TAB 键使焦点移到下一控制。
说明

设计和运行时可用。


请参阅

TabIndex 属性，TabStop 属性


ALLTRIM( ) 函数

请参阅	示例

删除指定字符表达式的前后空格符，并且返回删除空格符后的字符串。

语法

ALLTRIM(cExpression)

参数

cExpression

指定删除首尾空格的字符表达式。

返回值类型

字符型

说明

使用 ALLTRIM( ) 函数能确保删除用户输入数据首尾的空格字符。


* 下面的示例使用 AFONT( ) 函数创建一个包含所有可用
* 字体名的数组。然后使用 ALLTRIM( ) 函数删除
* 字体名前后的空格符。接着显示每种去掉空格后
* 的字体名，以及该字体的示例。如果字体多于 10 种，
* 则仅显示前 10 种。

CLEAR

=AFONT(gaFontArray)  && 包含字体名称的数组

gnNumFonts= ALEN(gaFontArray)  && 字体号

IF gnNumFonts > 10

gnNumFonts = 10  && 显示前 10 种字体

ENDIF

FOR nCount = 1 TO gnNumFonts

? ALLTRIM(gaFontArray(nCount))  && 显示字体名称

?? '  This is an example of ' ;

+ ALLTRIM(gaFontArray(nCount)) FONT gaFontArray(nCount), 8

ENDFOR


请参阅

LTRIM( )，RTRIM( )，TRIM( )


ALTER TABLE - SQL 命令

请参阅

以编程方式修改表的结构。

语法

ALTER TABLE TableName1
ADD | ALTER [COLUMN] FieldName1
FieldType [(nFieldWidth [, nPrecision])]
[NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE]
[REFERENCES TableName2 [TAG TagName1]]
[NOCPTRANS]
 — 或者 —
ALTER TABLE TableName1
ALTER [COLUMN] FieldName2
[NULL | NOT NULL]
[SET DEFAULT eExpression2]
[SET CHECK lExpression2 [ERROR cMessageText2]]
[DROP DEFAULT]
[DROP CHECK]
 — 或者 —
ALTER TABLE TableName1
[DROP [COLUMN] FieldName3]
[SET CHECK lExpression3 [ERROR cMessageText3]]
[DROP CHECK]
[ADD PRIMARY KEY eExpression3 TAG TagName2]
[DROP PRIMARY KEY]
[ADD UNIQUE eExpression4 [TAG TagName3]]
[DROP UNIQUE TAG TagName4]
[ADD FOREIGN KEY [eExpression5] TAG TagName4
REFERENCES TableName2 [TAG TagName5]]
[DROP FOREIGN KEY TAG TagName6 [SAVE]]
[RENAME COLUMN FieldName4 TO FieldName5]
[NOVALIDATE]

参数

TableName1

指定要修改其结构的表名。

ADD [COLUMN] FieldName1

指定要添加的字段名。

ALTER [COLUMN] FieldName1

指定要修改的已有的字段名。

FieldType [(nFieldWidth [, nPrecision]])

指定新字段或待修改字段的字段类型、字段宽度和字段精度（小数点后的位数）。

参数 FieldType 是表示字段数据类型的单个字符。有些字段类型还需要参数 nFiledWidth 或 nPrecision，或者两者皆要。

下表列出了参数 FiledType 的值及其对应参数 nFiledWidth 和 nPression 的取舍情况。

字段类型	字段宽度	精度	说明
C	n	-	宽度为 n 的字符字段
D	-	-	日期
T	-	-	日期时间
N	n	d	宽度为 n 的数值型字段，小数点后保留 d 位
F	n	d	宽度为 n 的浮点型字段，小数点后保留 d 位
I	-	-	整数型
B	-	d	双精度型
Y	-	-	货币型
L	-	-	逻辑型
M	-	-	备注型
G	-	-	通用型
对于 D、T、I、Y、L、M、G 和 P 型数据，省略参数 nFieldWidth 和 nPrecision。如果对 N、F 或 B 型数据没有给出参数 nPrecision 的值，其的默认值为零。

NULL | NOT NULL

允许或不允许字段为空值。

如果省略 NULL 和 NOT NULL，当前的 SET NULL 设置将决定字段是否允许为空；并且如果命令中带有 PRIMARY KEY 或 UNIQUE 子句，当前的 SET NULL 设置不起作用，字段默认状况为非空。

CHECK lExpression1

指定字段的有效性规则。lExpression1 为逻辑表达式值，可以是用户定义的函数或存储过程。注意：每添加一个空记录时，都将进行有效性检查。如果有效性规则不允许添加的记录中有空字段值，VisualFoxPro 将产生错误信息。

ERROR cMessageText1

指定字段有效性检查出现错误时显示的错误信息。只有在“浏览”或“编辑”窗口中修改数据时，此信息才可能显示。

DEFAULT eExpression1

指定字段默认值。eExpression1 的数据类型必须与字段的数据类型相同。

PRIMARY KEY

创建主索引标识。索引标识与字段同名。

UNIQUE

创建与字段同名的候选索引标识。有关候选索引的详细内容，请参阅《开发指南》的第七章“处理表”。

附注

候选索引（由 UNIQUE 选项创建，具有在 ALTER TABLE 或 CREATE TABLE 中的 ANSI 兼容性。）与带 UNIQUE 选项的 INDEX 命令创建的索引不同。用带 UNIQUE 选项的 INDEX 命令创建的索引允许有重复索引关键字，而候选索引不允许有重复索引关键字。

在主索引或候选索引字段中，不允许有空值和重复记录。

如果用 ADD COLUMN 子句创建一个新字段，若给允许空值的字段创建主索引或候选索引，VisualFoxPro 不会产生错误。但是，如果您试图往用作主索引或候选索引的字段中输入空值或重复值，VisualFoxPro 将产生错误信息。

如果修改已有的字段和由字段组成的主索引表达式或候选表达式时，将检查字段是否为空值或重复记录。如果为空值或重复记录，Visual FoxPro 将产生错误，并且不对表进行修改。

REFERENCES TableName2 TAG TagName1

指定与之建立永久关系的父表。参数 TAG TagName1 指定父表索引标识，关系建立在此父表索引标识基础上。索引标识最长为 10 个字。

NOCPTRANS

防止对字符串或备注字段进行代码页转换。如果表转换到另一代码页，指定了 NOCPTRANS 的字段不进行转换。NOCPTRANS 只能指定字符字段和备注字段。

下面的例子建立了一个名字为 MYTABLE 的表：该表包括两个字符字段和两个备注字段。第二个字符字段 char2 和第二个备注字段 memo2 包含 NOCPTRANS 以防止转换。

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)

ALTER [COLUMN] FieldName2

指定要修改的已有的字段名。

SET DEFAULT eExpression2

指定已有字段的新默认值。eExpression2 的数据类型必须与字段数据类型相同。

SET CHECK lExpression2

指字已有字段新的有效性规则。lExpression2 值必须为逻辑表达式，也可以为用户自定义函数或已有的过程。

ERROR cMessageText2

指定有效性检查出现错误时显示的错误信息。只有在“浏览”窗口或“编辑”窗口改变数据时，才可能显示此信息。

DROP DEFAULT

删除已有字段的默认值。

DROP CHECK

删除已有字段的有效性规则。

DROP [COLUMN] FieldName3

从表中删除一个字段。删除一个字段的同时也删除了字段的默认值和字段有效性规则。

字段被删除后，索引关键字或引用此字段的触发器表达式将变为无效。在这种情况下，删除字段并不产生错误，但是在运行时刻，无效的索引关键字或触发器表达式将导致错误。

SET CHECK lExpression3

指定表的有效性规则。lExpression3 必须是逻辑表达式，也可以是用户自定义函数或已有的过程。

ERROR cMessageText3

指定表的有效性检查出现错误时显示的错误信息。只有在“浏览”窗口或“编辑”窗口中改变数据值时，才可能显示此信息。

DROP CHECK

删除表的有效性规则。

ADD PRIMARY KEY eExpression3 TAG TagName2

往表中添加主索引，eExpression 指定主索引关键字表达式，TagName2 指定主索引标识名，索引标识名最长为 10 个字符。如果省略TAG TagName2 而 eExpression3 是一个字段，主关键索引标识与指定的 eExpression3 同名。

DROP PRIMARY KEY

删除主索引及其标识。因为表只能有一个主关键字，所以不必指定关键字的名称。删除主索引也将删除所有基于此关键字的永久关系。

ADD UNIQUE eExpression4 [TAG TagName3]

往表中添加候选索引。eExpression4 指定候选索引关键字表达式，TagName3 指定候选索引标识名。候选标识名最长可为 10 个字符。如果省略参数 TAG TagName3 并且 eExpression4 为单个字段，候选索引标识与 eExpression4 中的指定的字段同名。

DROP UNIQUE TAG TagName4

删除候选索引及其标识。因为表可能有多个候选关键字，所以必须指定候选索引标识名。

ADD FOREIGN KEY [eExpression5] TAG TagName4

往表中添加外部关键字（非主关字）索引。eExpression5 指定外部索引关键字表达式，TagName4 指定外部索引标识名。索引标识名最长为 10 个字符。

REFERENCES TableName2 [TAG TagName5]

指定在其上创建了永久关系的父表。使用 TAG TagName5 指定一个已有的索引标识，基于此索引标识建立表与父表的一个关系。索引标识名最长可以为 10 个字符。如果省略参数 TAG TagName5，则使用父表的主索引标识建立关系。

DROP FOREIGN KEY TAG TagName6 [SAVE]

删除索引标识为 TagName6 的外部关键字。如果省略 SAVE 参数，将从结构索引中删除索引标识。如果加入 SAVE 参数，则不从结构索引中删除索引标识。

RENAME COLUMN FieldName4 TO FieldName5

允许改变表中字段的字段名。FieldName4 指定待更改的字段名，FieldName5 指定新的字段名。

注意

改变表的字段名时一定要小心－－索引表达式、字段和表的有效性规则、命令、函数等等可能仍会引用原始字段名。

NOVALIDATE

选用这一选项后，Visual FoxPro 修改表的结构不受表中数据完整性的约束。默认时，Visual FoxPro 改变表结构将受到表中数据的完整性约束。使用 NOVALIDATE 参数将使默认情况无效。

说明

ALTER TABLE 命令可以用于修改还没有添加到数据库中的表的结构。然而在修改自由表时，如果加入 DEFAULT、FOREIGN KEY、PRIMARY REFERENCES 或 SET 子句，Visual FoxPro 将出现错误。

ALTER TABLE 命令可以通过建立新表头和往表头中添加记录来重建表。例如，改变字段类型或字段宽度。

表经过重建后，将对所有改变了类型或宽度的字段执行字段有效性规则。如果修改了表中所有字段的类型或宽度，将执行表的有效性规则。

如果对已含有记录的表修改其字段有效规则或表有效性规则，Visual FoxPro 将检查新的字段或表有效性规则是否与存在数据相符合，并在发现有不符之处时发出警告。

如果要修改的表在数据库中，ALTER TABLE-SQL 命令需要独占使用数据库。若要独占打开数据库，可使用包含 EXCLUSIVE 子句的 OPEN DATABASE 命令。

* 示例 1 往表 customer 中添加字段 fax，
* 并且允许字段有空值。

* 示例2 使 cust_id 字段为 customer 表的
* 主关键字。

* 示例3 给 orders 表中的 quantity 字段添加
* 有效性规则，使字段 quantity 的值非负。

* 示例 4 基于表 customer 的关键字 cust_id和表
*  orders 中的候选关键字 cust_id，
* 建立 customer 和 orders 间的一对多
* 永久关系。

* 示例 5 删除表 orders 的 quantity 字段的
* 有效性规则。

* 示例 6 删除表 customer 和表 orders 间的永久关系，
* 但保持 orders 表中的 cust_id 索引标识。

* 示例 1

SET PATH TO (HOME( ) + 'samples\data\')	  && 为表设置路径
ALTER TABLE customer ADD COLUMN fax c(20) NULL

* 示例 2

ALTER TABLE customer ADD PRIMARY KEY cust_id TAG cust_id

ALTER TABLE customer ALTER COLUMN cust_id c(5) PRIMARY KEY

* 示例 3

ALTER TABLE orders;

 ALTER COLUMN quantity SET CHECK quantity >= 0;

 ERROR "Quantities must be non-negative"

* 示例 4

ALTER TABLE orders;

ADD FOREIGN KEY cust_id TAG cust_id REFERENCES customer

* 示例 5

ALTER TABLE orders ALTER COLUMN quantity DROP CHECK

* 示例 6

ALTER TABLE orders DROP FOREIGN KEY TAG cust_id SAVE


请参阅

CREATE TABLE - SQL，INDEX，MODIFY STRUCTURE，OPEN DATABASE


AlwaysOnTop 属性

请参阅

避免其他窗口覆盖住表单窗口。

应用于

表单，SCREEN

语法

Object.AlwaysOnTop[ = lExpr]

设置

lExpr

AlwaysOnTop 属性设置为：

设置	设置
真 (.T.)	表单总是显示在最顶层（只有 AlwaysOnTop 属性设为 .T. 的窗口可显示在表单之上）。
假 (.F.)	默认值。表单可被其他窗口覆盖。
说明

设计时可用，运行时只读。


请参阅

ZOrder 方法


AMEMBERS( ) 函数

请参阅	示例

将一个对象的属性名、过程名和成员对象存入内存变量数组。

语法

AMEMBERS(ArrayName, ObjectName | cClassName [, 1 | 2])

参数

ArrayName

指定存放对象的成员属性名的数组。如果指定的数组不存在，Visual FoxPro 将自动创建该数组。如果数组大小不足以包含所有名称，Visual FoxPro 将自动增加数组大小。

ObjectName

指定对象名，此对象的成员属性将存入指定的内存变量数组 ArrayName 中。ObjectName 可以是任意的对象表达式，如对象引用、对象内存变量或对象数组中的一个元素。

cClassName

指定类名。它的成员属性放在 ArrayName 指定的内存变量数组中。

1

指定数组中既包含对象的方法和成员信息，还包含其对象的属性信息。生成的数组是二维数组，第一列放置成员信息，第二列放置成员的类型信息。第二列的可选值有 Property、Event、Method 和 Object。

2

指定数组中包含 ObjectName 对象的成员对象名。结果数组是一维的。

此选项提供了一种方法，用于确定表单集中所有表单的名称或表单中所有控制的名称。

返回值类型

数值型

说明

AMEMBERS( ) 函数返回对象的成员对象、属性和过程的总数。若不能创建数组则返回零。如果省略参数 1 和 2，将创建包含对象 ObjectName 属性的一维数组。


* 以下示例用 CREATEOBJECT( ) 函数创建表单
* 对象 goForm1，然后用 AMEMBERS( ) 函数创建数组
*  gaPropArray，数组中包含表单的可用属性，
* 最后显示这些属性。

CLEAR

goForm1 = CREATEOBJECT("Form")  && 建立一个表单

= AMEMBERS(gaPropArray, goForm1, 1)  && 包含表单属性的数组

DISPLAY MEMORY LIKE gaPropArray  && 显示表单属性


请参阅

ADD CLASS，AINSTANCE( )，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，DEFINE CLASS


ANSITOOEM( ) 函数

请参阅

将字符表达式中的每一个字符转换成 MS-DOS (OEM) 字符集中对应的字符。加入此函数是为了提供向后兼容性。

语法

ANSITOOEM(cExpression)

参数

cExpression

指定要转换到 MS-DOS (OEM) 字符集中的字符。表达式必须包含 ANSI 字符集中的字符。如果 cExpression 中的字符没有对应的 MS-DOS 字符，Visual FoxPro 将把它转换成相似的 MS-DOS 字符。

返回值类型

字符型

说明

仅用于 Visual FoxPro 和 FoxPro for Macintosh 中。

使用 ANSITOOEM() 函数可以将数据从 Visual FoxPro 和 FoxPro for Macintosh 中移植到 FoxPro for MS-DOS 中。


请参阅

CHRTRAN( )，OEMTOANSI( )


APPEND 命令

请参阅	示例

在表的末尾添加一个或多个新记录。

语法

APPEND [BLANK]
[IN nWorkArea | cTableAlias]
[NOMENU]

参数

BLANK

在当前表的末尾添加一个空记录。Visual FoxPro 在发出 APPEND BLANK 命令时并不打开编辑窗口。

可以使用 BROWSE、CHANGE 或 EDIT 命令编辑新记录。

IN nWorkArea

指定要添加新记录的表所在的工作区。

IN cTableAlias

指定要添加新记录的表的别名。

如果省略 nWorkArea 和 cTableAlias，新记录将添加到当前选定工作区的表中。如果发出 APPEND 命令，空记录将添加到由 nWorkArea 或 cTableAlias 指定的工作区的表中，并且自动选定该表；如果发出 APPEND BLANK 命令，空记录将添加到指定的 nWorkarea 或 cTableAlias 工作区的表中，但不选定表。

NOMENU

仅用于 Visual FoxPro 和 FoxPro for Windows，在 FoxPro for Macintosh 和 FoxPro for MS-DOS 中无法使用。

在 Visual FoxPro 中，此参数指定将表菜单标题从系统菜单栏中删除，以避免改变编辑窗口的格式。

在 FoxPro for Windows 中，此参数指定将浏览菜单标题从系统菜单栏中删除，以避免改变编辑窗口的格式。

说明

当发出 APPEND 或 APPEND BLANK 命令，并且没有在当前选定工作区中打开表时，将显示一个打开对话框，您可以在对话框中选择需要添加记录的表。

APPEND 命令打开一个编辑窗口，您可以在其中输入一个或多个新记录。增加新记录后，Visual FoxPro 将自动修改打开的所有索引。


* 以下示例用 APPEND BLANK 命令创建一个
* 有 10 条记录的表，记录中包含有随机值，然后显示
* 表的最大值和最小值。

CLOSE DATABASES

CREATE TABLE Random (cValue N(3))

FOR nItem = 1 TO 10  && 增加 10 个记录

APPEND BLANK

REPLACE cValue WITH 1 + 100 * RAND( )  && 插入随机数

ENDFOR

CLEAR

LIST  && Display the values

gnMaximum = 1  && 初始化最小值

gnMinimum = 100  && 初始化最大值

SCAN

gnMinimum = MIN(gnMinimum, cValue)

gnMaximum = MAX(gnMaximum, cValue)

ENDSCAN

? 'The minimum value is: ', gnMinimum  && 显示最小值

? 'The maximum value is: ', gnMaximum  && 显示最大值


请参阅

APPEND FROM ARRAY，BROWSE，CHANGE，EDIT，INSERT - SQL，REPLACE


APPEND FROM 命令

请参阅	示例

从一个文件中读入记录，添加到当前表的尾部。

语法

APPEND FROM FileName | ?
[FIELDS FieldList]
[FOR lExpression]
[[TYPE] [DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB]
| DIF | FW2 | MOD | PDOX | RPD | SDF | SYLK | WK1 | WK3 | WKS
| WR1 | WRK | XLS | XL5]]
[AS nCodePage]

参数

FileName

指定从哪个文件中读入记录。如果给出的文件名不包含扩展名，则将文件默认为 Visual FoxPro 表，扩展名为 .DBF。如果文件是 Visual FoxPro 表，无论 SET DELETED 为何种设置，表中标记为删除的记录也将添加到当前表中。

?

显示打开对话框，从中可以选择从哪个表中读入记录。

FIELDS FieldList

指定添加哪些字段数据。

FOR lExpression

为当前选定表中每一条 lExpression 为“真”(.T.) 的记录追加新记录，直至达到当前选定表的末尾。如果省略 FOR，则整个源文件记录都追加到当前表中。

TYPE

指定源文件类型。如果指定的源文件类型不是 Visual FoxPro 表，则必须指定文件类型，但不必包括 TYPE 关键字。您可以从各种类型文件（包括分隔 ASCII 文本文件）中读入信息添加到表中，在这些文件中可以指定字段分隔符。

如果要追加的源文件扩展名不是默认的扩展名，源文件名必须包括文件扩展名。例如，Microsoft Excel 工作表通常具有 .XLS 扩展名。如果要追加的 Microsoft Excel 工作表扩展名不是 .XLS，一定要指定扩展名。

附注

如果要追加的记录来自工作表，工作表中的数据必须以主行序而非主列序存储，这样才能使追加的工作表数据符合表结构。

DELIMITED

指定源文件为分隔数据文件。分隔数据文件是 ASCII 文本文件，文件中每条记录以回车和换行符结尾。各字段内容默认地由逗号分开，字符字段值还需要用引号括上。例如：

"Smith", 9999999, "TELEPHONE"

所有分隔数据文件的扩展名默认为 .TXT 数据的格式。

如果日期格式正确，可以从分隔文件中导入日期数据，日期的默认格式为 mm/dd/yy。您还可以选择加入世纪信息。Visual FoxPro 导入的数据（如 12/25/95）不包含世纪信息，世纪信息的默认值为二十世纪。日期分隔符可以为任意非数值字符，但不能使用分隔文件中字段的分隔符。

如果其他一些日期格式与 SET DATE 中可以使用的格式相匹配，Visual FoxPro 也可以导入这些格式的日期数据。若要导入非默认格式的日期，应在使用 APPEND FROM 前先发出 SET DATE 修改数据格式设置。要想检查日期格式是否能成功地导入，可使用 CTOD( ) 函数。如果 CTOD( ) 函数接收此日期值，则日期数据就能正确地导入。

DELIMITED WITH Delimiter

指定字符字段由字符分隔，而非引号。

DELIMITED WITH BLANK

指定由空格符分隔字段，而不是用逗号分隔字段的文件。

DELIMITED WITH TAB

指定文件中各字段由 tab 键而非逗号来分隔。

DIF

选用 DIF 可从 VisiCalc .DIF（数据交换格式）文件中导入数据。矢量（列）对应当前选定表的字段，tuples（行）对应表的记录。DIF 文件的默认扩展名为 .DIF。

FW2

选用 FW2 可从由 Framework II 创建的文件中导入数据。FW2 文件的默认扩展名为 .FW2。

MOD

选用 MOD 可从Microsoft Multiplan 4.01 版本的文件中导入数据。MOD 文件由 Microsoft Multiplan 4.01 版本创建，默认扩展名为 .MOD。

PDOX

选用 PDOX 可从 Paradox 3.5 版或 4.0 版数据库文件中导入数据。Paradox 文件名的默认扩展名为 .DB。

RPD

选用 RPD 可从由 RapidFile 1.2 版本创建的文件中导入数据。RapidFile 文件名的默认扩展名为 .RPD。

SDF

选用 SDF 可从系统数据格式文件中导入数据。SDF 文件是一种 ASCII 文本文件，记录有固定长度，并且以回车和换行符结尾，各字段不分隔开。文件的默认扩展名为 .TXT。

SYLK

选用 SYLK 可从 SYLK（符号链接）交换格式文件中导入数据。SYLK 文件用于 Microsoft MultiPlan 中。SYLK 文件中的列对应 Visual FoxPro 表的字段，行对应表的记录。SYLK 文件没有扩展名。

WK1

选用 WK1 可从 Lotus 1-2-3 2.x 版本的电子表格中导入数据。电子表格的每列为表的一个字段，每行为表的一条记录。Lotus 1-2-3 版2.x 创建的电子表格扩展名为 WK1。

WK3

选用 WK3 可从 Lotus1-2-3 的电子表格中导入数据，电子表格的每列为表的一个字段，每行为表的一条记录。Lotus1-2-3 版本 3.X 创建的电子表格扩展名为 .WK3。

WKS

选用 WKS 可从 Lotus1-2-3 1-A 版的电子表格中导入数据。电子表格的每列为表的一个字段，每行为表的一条记录。Lotus1-2-3 1-A 版本创建的文件扩展名为 .WKS。

WR1

选用 WR1 可从 Lotus Symphony 1.1 或 1.2 版的电子表格中导入数据。电子表格的每列为表的一个字段，每行为表的一条记录。Symphony1.1 或 1.2 版创建的电子表格扩展名为 .WR1。

WRK

选用 WRK 可从 Lotus Symphony 1.0 版的电子表格中导入数据。电子表格中的每列为表的一个字段，每行为表的一条记录。Symphony 1.0 版创建的电子表格扩展名为 .WRK。

XLS

选用 XLS 可从 Microsoft Excel 工作表中导入数据。工作表的每列为表的一个字段，每行为表的一条记录。由 Microsoft Excel 创建的工作表扩展名为 .XLS。

XL5

选用 XL5 可从 Microsoft Excel 5.0 版中导入数据。工作表的每列为表的一个字段，每行为表的一条记录。工作表文件的扩展名为 .XLS。

AS nCodePage

指定源表或源文件的代码页。Visual FoxPro 将复制源表或源文件的内容，并在复制时自动把数据转换到当前表的代码页中。

如果指定的 nCodePage 值无法使用，Visual FoxPro 将产生一条错误信息。您可以用 GETCP( ) 函数显示代码页对话框，在对话框中可以为追加的表或文件指定代码页。

如果省略 AS nCodePage 子句，并且 Visual FoxPro 不能判定源表或文件的代码页，Visual FoxPro 将复制源表或文件内容，并在复制数据的过程中，自动将数据转换到当前的 Visual FoxPro 代码页中。如果 SET CPDIALOG 为 ON，当前选定工作区中的表以代码页标记。如果要从没有代码页标记的表中读入数据并添加到表中时，将显示代码页对话框，您可以在其中选择表的代码页。当前的 Visual FoxPro 代码页可以由 CPCURRENT( ) 函数设定。

如果省略 AS nCodePage 子句，并且 Visual FoxPro 可以确定追加记录的表或文件的代码页，Visual FoxPro 将复制表或文件的内容，并在复制数据的过程中，自动将数据转换到当前选定表的代码页中。

如果 nCodePage 为零，Visual FoxPro 认为需追加记录的表和文件的代码页与当前选定表的代码页相同，并且不进行代码页的转换。

说明

如果从其中追加数据的文件是 Visual FoxPro 表或在 FoxPro 早期版本中创建的表，其扩展名为 .DBF。如果其扩展名不是 .DBF，您必须指定扩展名。如果文件不是 Visual FoxPro 表或 FoxPro 早期版本创建的表，还必须指定文件的类型。

在从 DBASE IV 或 DBASE V 创建的包含备注字段的表中追加记录前，您必须先用 USE 命令在 Visual FoxPro 中打开此表，当提示信息询问您是否要转换文件时，请选择“是”。

如果从 FoxPro 早期版本的表或 Visual FoxPro 表中读入记录，此表可以在另一工作区打开。对于源表中有删除标记的记录，一但添加到表中，将会去掉删除标记。


* 以下示例用于打开表 customer，将其结构
* 复制到表 backup 中，并且打开表 backup。
* 然后 Visual FoxPro 将 customer 表中满足 'Finland'
* 的记录追加到表 backup 中。这些记录然后又被复制到一个新
* 的分隔文件 TEMP.TXT 中。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

COPY STRUCTURE TO backup

USE backup

APPEND FROM customer FOR country = 'Finland'

COPY TO temp TYPE DELIMITED

MODIFY FILE temp.txt

USE

DELETE FILE backup.dbf

DELETE FILE temp.txt


请参阅

COPY FILE，COPY TO，EXPORT，GETCP( )，IMPORT


APPEND FROM ARRAY 命令

请参阅	示例

对数组中的每一行，添加一条记录到当前选定表中，并从相应的数组行中取出数据添加到记录中。

语法

APPEND FROM ARRAY ArrayName
[FOR lExpression]
[FIELDS FieldList]

参数

ArrayName

指定数组名，该数组包含要复制到新记录中的数据。命令将把数组中所有的行都追加到表中。

一维数组

如果数组是一维的，APPEND FROM ARRAY 命令只在表中添加一个记录。第一个数组元素的内容将填充到新添加记录的第一个字段，第二个元素的内容将填充到记录的第二字段，依此类推。

如果一维数组元素的个数多于表字段数，将忽略多余的元素。如果表字段数多于数组元素的个数，多出的字段将初始化为默认的空值。下面给出了各种字段类型对应的默认空值。

字段类型	默认值
字符型	空格
数值型	0
货币型	0
浮点型	0
整型	0
双精度型	0
日期型	空日期（例如 CTOD('')）
时间型	时间型（例如2 CTOD('')）
逻辑型	假 (.F.)
备注型	空（无内容）
二维数组

当指定数组为二维数组，数组中的每一行作为一个新记录添加到表中。例如，如果数组有 4 行，将有 4 个记录添加到表中。

数组中第一列的内容赋值给新添加记录的第一个字段，第二列内容赋值给新记录的第二个字段，依此类推。例如，数组有四行三列，数组中的第一列元素分别赋值给四个新记录的第一个字段。

如果二维数组的列数多于表中的字段数，多余的列将被省略。如果表字段数多于数组列数，多出的字段将初始化为空值。

FOR lExpression

为数组中用于追加的记录指定条件。在 lExpression 条件表达式中必须包含目标字段名。

在数组中的行追加到表中的记录之前，先检查与 lExpression 中指定的目标字段对应的数组元素是否满足 lExpression 中的条件。如果数组元素满足条件，则将记录追加表中。

如果数组元素不满足条件，这一数组行不追加到表中，并继续检查下一行。

FIELDS FieldList

指定只有 FieldList 中的字段才从数组进行更新。FieldList 中的第一个字段用数组第一个元素的内容更新，第二个字段用第二个元素更新，依此类推。

数据类型不匹配

如果数组元素数据与相应字段的数据类型兼容，即使相应的数组元素的数据类型与字段数据类型不匹配，APPEND FROM ARRAY 命令也能给字段赋值。如果数据不兼容，则字段初始化为空值。

说明

在 APPEND FROM ARRAY 命令中，备注字段和通用字段将被忽略。当表处于打开状态并被共享使用，在追加记录时，APPEND FROM ARRAY 命令将锁定表头。


* 以下示例说明了如何往表中加入记录。
* 打开表 customer 并且用 SCATTER 命令创建
* 名为 gaCustArray 的数组，表中每个字段都为空值。
* FOR...ENDFOR 循环依次显示表中的每个字段，
* READ 命令将激活 @...GET 命令。

* 如果不按 ESC 键停止编辑，APPEND FROM ARRAY
* 将往表中追加新记录。gaCustArray 内存变量数组
* 中的数据将替代字段值。

SET TALK OFF

CLEAR

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && Open customer table

SCATTER TO gaCustArray BLANK	&& 创建空数组

FOR gnCount = 1 TO ALEN(gaCustArray)	&& 数组行数

@ gnCount, 2 SAY FIELD(gnCount) ;

GET gaCustArray(gnCount)	&& 显示字段并获得信息

ENDFOR

READ

IF READKEY( ) != 12	&& 是否按了ESC键

APPEND FROM ARRAY gaCustArray	&& 由数组中读入数据，并往表中追加记录

GOTO BOTTOM

BROWSE

DELETE

PACK

ENDIF

USE

CLEAR


请参阅

APPEND，COPY TO ARRAY，DIMENSION，GATHER，SCATTER


APPEND GENERAL 命令

请参阅	示例

从文件中导入 OLE 对象并将其放入通用字段中。

语法

APPEND GENERAL GeneralFieldName
[FROM FileName | FROM MEMO PictureFieldName]
[DATA cExpression]
[LINK]
[CLASS OLEClassName]

参数

GeneralFieldName

指定放置 OLE 对象的通用字段名。可以用带有表别名的字段名来指定在非当前工作区中打开的表的通用字段。

FROM FileName

指定包含 OLE 对象的文件。必须给出文件全名，包括扩展名。如果文件不在当前目录或当前文件夹中，还需要给出文件的路径。

在 FoxPro for Macintosh 中，不能将 PICT 或 BMP 类型的图片文件导入到通用字段。若要导入图片，可把图片复制到剪切板中，然后粘贴到通用字段中去。

FROM MEMO PictureFieldName

指定 FoxBase+for Macintosh 的图片字段。用这个子句可从 FoxPro for Macintosh 表中导出 PICT 型图片。

包含通用字段的 FoxPro for Macintosh 表必须在当前选定工作区中打开。包含图片文件的 FoxBASE+for Macintosh 表必须在另一工作区中打开，图片字段名前必须加上 FoxBASE+for Macintosh 表的别名，用句点隔开图片字段名和别名。

例如，以下命令从 FoxBASE+for Macintosh 表 picttble 的 pictfield 字段中导出 PICT 类型图片，并保存到名为 genfield 的通用字段中。

APPEND GENERAL genfield FROM MEMO picttble.pictfield

APPEND GENERAL 处理两个表的当前记录。若要确保 PICT 图片导入到正确记录的通用字段中，必须使用 SET RELATION 命令建立两表之间的关系，或人工移动两个表的记录指针。

DATA cExpression

指定字符表达式，此表达式作为一个字符串存入 OLE 对象的通用字段中。OLE 对象必须能接收和处理字符串。例如，不能往 Paintbrush. 的图片对象中存入字符串。

LINK

建立 OLE 对象和包含对象的文件间的链接。OLE 对象出现在通用字段，但对象定义仍在文件中。如果省略 LINK，OLE 对象将嵌入到通用字段中。

CLASS OLEClassName

指定 OLE 对象是 OLE 类，而非其默认类。

提示

在 Visual FoxPro 和 FoxPro for Windows 中，您可以通过运行 REGEDIT 和双击 OLE 对象来为 OLE 对象确定类。类名列在“Identifier”下。

当包含 OLE 对象的文件的扩展名不同于默认扩展名，并且要强制类行为时，您可以指定类名。如果默认扩展名可用于多个 OLE 服务器，用 Class 子句指定特殊的服务器。

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 Foxpro for Macintosh 中。

如果在通用字段中已有一个 OLE 对象，它将被源文件中的 OLE 对象取代。

有关 Visual FoxPro 的 OLE 对象的详细内容，请参阅《开发指南》的第八章“添加 OLE”和在表中添加 OLE 对象主题。


* 以下示例从 Excel 目录或文件夹中导入 Microsoft Excel 图表，
* 存入通用字段 mygenfield 中。

CREATE TABLE MyGenTbl (mygenfield G)

APPEND BLANK  && 添加一个空记录

APPEND GENERAL mygenfield FROM C:\EXCEL\BOOK1.XLS CLASS EXCELCHART


请参阅

@ ... SAY - 图片 & OLE 对象，MODIFY GENERAL，OLE 绑定型控制


APPEND MEMO 命令

请参阅	示例

将文本文件的内容复制到备注字段中。

语法

APPEND MEMO MemoFieldName FROM FileName
[OVERWRITE] [AS nCodePage]

参数

MemoFieldName

指定备注字段名，文件内容将追加到此备注字段中。

FROM FileName

指定文本文件，其内容将复制到备注字段中。此参数必须包含完整的文本文件名，包括扩展名。

OVERWRITE

用文件的内容替换备注字段当前的内容。

AS nCodePage

指定复制到备注字段中的文本文件的代码页。Visual FoxPro 复制文本文件的内容，并在将数据复制到备注字段的过程中，自动将数据从指定代码页转换成备注字段所在表的代码页。如果包含备注段的表没有使用代码页标记，Visual FoxPro 自动将数据从指定代码页转换到当前 Visual FoxPro 代码页。

如果指定的 nCodePage 值无效，Visual FoxPro 将产生一条错误信息。您可以使用 GETCP( ) 函数显示“代码页”对话框，并从中指定要追加的表或文件的代码页。

如果忽略 AS nCodePage 子句，或者指定 nCodePage 值为零，将不转换文本文件的代码页。

说明

如果忽略参数 OVERWRITE，文本文件的全部内容将追加到当前记录的指定备注字段中。


* 在下面的示例中，先将备注字段 notes 的内容复制到文件
*  TEST.TXT 中，然后将 TEST.TXT 的内容追加到备
* 注字段，最后用 TEST.TXT 的内容改写备注
* 字段中的内容。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开 Employee 表

WAIT WINDOW 'Employee notes memo field - press ESC' NOWAIT

MODIFY MEMO notes NOEDIT  && 打开 notes 备注字段

COPY MEMO notes TO test.txt  && 由备注字段建立 test 文件

WAIT WINDOW 'TEST.TXT text file - press ESC' NOWAIT

MODIFY FILE test.txt NOEDIT && 打开文本文件

WAIT WINDOW 'Employee notes now appended - press ESC' NOWAIT

APPEND MEMO notes FROM test.txt  && 添加文本文件的内容

MODIFY MEMO notes NOEDIT  && 再次显示备注字段

WAIT WINDOW 'Overwrite Employee notes- press ESC' NOWAIT

APPEND MEMO notes FROM test.txt OVERWRITE  && 代替 notes

MODIFY MEMO notes NOEDIT NOWAIT

DELETE FILE test.txt


请参阅

COPY MEMO，GETCP( )


APPEND PROCEDURES 命令

请参阅	示例

将文本文件中的存储过程追加到当前数据库中。

语法

APPEND PROCEDURES FROM FileName
[AS nCodePage] [OVERWRITE]

参数

FileName

指定文本文件，函数将追加其中的存储过程。

AS nCodePage

指定要追加其存储过程的文本文件所在的代码页。Visual FoxPro 在复制文本文件的内容时，自动将文本文件的内容转换成指定的代码页。

如果指定的 cCodePage 值无效，Visual FoxPro 将产生错误信息。可以使用 GETCP( ) 函数显示“代码页”对话框，并从中指定文本文件的代码页，此文本文件包含要追加的存储过程。

如果忽略 AS nCodePage，Visual FoxPro 将复制文本文件的内容，并自动将文本文件内容转化成 Visual FoxPro 的当前代码页。您可以用 CPCURRENT( ) 函数设置 Visual FoxPro 的当前代码页。

如果 nCodePage 值为零，Visual FoxPro 将假定文本文件的代码页与当前数据库的代码页相同，不进行代码页转换。

OVERWRITE

指定用文本文件中的过程改写数据库中的当前存储过程。如果忽略参数 OVERWRITE，将不改写数据库中的当前存储过程，文本文件中的存储过程追加到当前存储过程中。

说明

使用 APPEND PROCEDURES 命令，可以用编程方式修改数据库中的存储过程。运行 APPEND PROCEDURES 时，数据库必须是打开的，并且为当前数据库，否则 Visual FoxPro 将产生错误信息。

APPEND PROCEDURES 命令要求数据库以独占方式打开。要以独占方式打开数据库，需要在 OPEN DATABASE 命令中包含 EXCLUSIVE 子句。


* 下面的示例先打开数据库 TESTDATA，然后创建一个包含单个备注字段
* 的临时表 MYTABLE，用 REPLACE 命令把存储过程 MyProcedure
*  存入备注字段中。接着使用 COPY MEMO 命令创建包含备注字段
*  内容的临时文本文件 MYTEMP.TXT。

* 使用 APPEND PROCEDURES 命令将临时文本文件中的
* 存储过程追加到数据库中。使用 DISPLAY PROCEDURES
* 命令显示数据库中的过程，然后删除临时表和
* 文本文件。

CLOSE DATABASES

SET PATH TO (HOME( ) + 'samples\data\')	  && 设置数据库路径

OPEN DATABASE testdata  && 打开数据库 testdata

CREATE TABLE mytable FREE (mProcedure M)  && 创建临时表

APPEND BLANK

REPLACE mProcedure WITH 'PROCEDURE MyProcedure' + CHR(13) + CHR(10)

COPY MEMO mProcedure TO mytemp.txt && 临时文件

USE  && 关闭临时表

APPEND PROCEDURES FROM mytemp.txt  && 将过程复制到数据库中

CLEAR

DISPLAY PROCEDURES  && 显示过程

DELETE FILE mytable.dbf  && 删除临时表

DELETE FILE mytable.fpt  && 删除临时表备注文件

DELETE FILE mytemp.txt && 删除临时文件


请参阅

COPY PROCEDURES，CREATE TRIGGER，DISPLAY PROCEDURES，MODIFY PROCEDURE，OPEN DATABASE，PROCEDURE，SET DATABASE


APRINTERS( ) 函数

请参阅	示例

将安装在 Windows 打印管理器中的打印机名称存入内存变量数组中。

语法

APRINTERS(ArrayName)

参数

ArrayName

指定数组名，已安装的打印机名称和它们的端口将存入这个数组。如果指定数组不存在，Visual FoxPro 将自动创建此数组。如果数组存在，但数组大小不足以容纳所有的打印机信息，Visual FoxPro 将自动增大数组，以便能容纳所有信息。如果数组太大超过所需值，Visual FoxPro 将截去多余部分。如果数组存在，但没有安装任何打印机，APRINTERS( ) 函数的返回值为零，数组保持不变。如果数组不存在，并且 APRINTER( ) 函数的返回值为零，Visual FoxPro 将不创建这个数组。

返回值类型

数值型

说明

APRINTERS( ) 函数创建一个二维数组。数组第一列存放当前安装的打印机名称，第二列存放打印机联接的通讯端口。

APRINTERS( ) 函数返回安装的打印机数目。如果没有安装打印机，函数的返回值为零。

Visual FoxPro 从 Windows 中获得已安装打印机的名称和它们的通讯端口，但不检查打印机是否和计算机正确连接。


*.下面的示例用 APRINTERS( ) 函数创建一个存储已安装
* 打印机的名称和它们通信端口名的数组 gaPrinters，
* 然后显示打印机名和端口名。如果没有安装任何打印机，
* 程序将显示相应信息。

IF APRINTERS(gaPrinters) > 0  && 是否有安装的打印机驱动程序

CLEAR  && 清除Visual FoxPro主窗口

DISPLAY MEMORY LIKE gaPrinters && 显示打印机名和端口

ELSE  && 否则，没有安装打印机

WAIT WINDOW 'No printers installed.'

ENDIF


请参阅

GETPRINTER( )，PRINTSTATUS( )，PRTINFO( )，SET PRINTER


ASC( ) 函数

请参阅	示例

返回字符表达式中最左边字符的 ANSI 值。

语法

ASC(cExpression)

参数

cExpression

指定字符串表达式。函数仅返回 cExpression 中第一个字符的 ANSI 值，忽略其他字符。

返回值类型

数值型

说明

ASC( ) 函数返回字符在当前代码页字符表中所处的位置。每个字符都有唯一的 0-255 之间的 ANSI 值。

在 FoxPro for MS-DOS 中，打开 ASCII 字符桌面附件可以得到字符及其 ANSI 值的列表。


* 下面的示例显示从 A 到 J 的字符，
*  并用 ASC( ) 函数显示相应的 ANSI 值。

STORE 'ABCDEFGHIJ' TO gcANSI  && 10 个字符

CLEAR

FOR nCOUNT = 1 TO 10

? SUBSTR(gcANSI, nCount,1)  && 显示一个字符

?? ASC(SUBSTR(gcANSI, nCount)) && 显示 ANSI 值

ENDFOR


请参阅

CHR( )


ASCAN( ) 函数

请参阅	示例

在数组中搜索与一个表达式具有相同数据和数据类型的元素。

语法

ASCAN(ArrayName, eExpression [, nStartElement [, nElementsSearched]])

参数

ArrayName

指定要在其中进行搜索的数组。

eExpression

指定要搜索的常规表达式。

nStartElement

指定开始搜索的元素号（含此元素）。如果忽略参数 nStartElement，则默认搜索整个数组。

nElementsSearched

指定要搜索的元素数目。如果忽略参数 nStartElement 和 nElementSearched，将从第一个元素开始搜索到最后一个元素。

附注

有两种方式可以引用二维内存变量数组中的某个元素。第一种方法为引用确定元素在数组的第几行和第几列的两个下标值，另一种方法为使用元素编号。此函数和其他操作二维数组的函数需要元素的编号值 ( nStartElement 和 nElementsSearched )。使用 AELEMENT( ) 函数可将二维数组中元素的行列下标值转换成编号。

返回值类型

数值型

说明

如果找到了匹配元素，ASCAN( )函数将返回找到的元素编号。如果没有找到匹配元素，ASCAN( ) 的返回值为零。

字符数据成功匹配的条件由 SET EXACT 命令决定。如果 SET EXACT 为 ON，数组元素与查找表达式必须逐字符匹配并且长度相等；如果 SET EXACT 为 OFF，只要元素与到表达式末尾为止的字符相匹配，匹配即成功。有关字符串匹配条件的详细内容，请参阅 SET EXACT 主题中的“字符串比较表”。


*下面的示例创建一个数组，并用公司名给每个元素赋值。
* 然后使用 ASCAN( ) 函数搜索特定的公司名。
* 如果在数组中找到这个公司名，将其从数组中删除。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开表 customer

SELECT company FROM customer ;

WHERE country = 'UK' ;

INTO ARRAY gaCompanies

gnCount = _TALLY

gcName = 'Seven Seas Imports'

CLEAR

DISPLAY MEMORY LIKE gaCompanies*

gnPos = ASCAN(gaCompanies, gcName) && 搜索公司名

IF gnPos != 0

*** 如果找到此公司名，将其从数组删除 ***

= ADEL(gaCompanies, gnPos)

gnCount = gnCount - 1

ENDIF

DISPLAY MEMORY LIKE gaCompanies


请参阅

ACOPY( )，ADEL( )，ADIR( )，AELEMENT( )，AFIELDS( )，AINS( )，ASORT( )，ASUBSCRIPT( )，DIMENSION，SET EXACT


_ASCIICOLS 系统内存变量

请参阅

指定用 REPORT...TO FILE ASCII 创建的文本文件中包含的列数。

语法

_ASCIICOLS = nExpression

参数

nExpression

指定文本文件中的列数。默认值为 80。

说明

文本文件由包含 TO FILE ASCII 子句的 REPORT 命令创建。


请参阅

_ASCIIROWS，CREATE REPORT，MODIFY REPORT，REPORT


_ASCIIROWS 系统内存变量

请参阅

指定用 REPORT...TO FILE ASCII 创建的文本文件中包含的行数。

语法

_ASCIIROWS = nExpression

参数

nExpression

指定文本文件的行数。默认值为 63。

说明

文本文件由包含 TO FILE ASCII 子句的 REPORT 命令创建。


请参阅

_ASCIICOLS，CREATE REPORT，MODIFY REPORT，REPORT


ASELOBJ( ) 函数

请参阅	示例

把对活动“表单设计器”中当前选定控制的对象引用存入内存变量数组。

语法

ASELOBJ(ArrayName, [1 | 2])

参数

ArrayName

指定数组名，当前选定控制的对象引用存入此数组中。如果数组不存在，Visual FoxPro 将自动创建此数组；如果数组存在，但其大小不足以包含所有控制信息，VisualFoxPro 将自动增大数组，使其能够容纳所有信息；如果数组大小超过所需值，VisualFoxPro 将截去多余部分。如果数组存在，但由于当前没有选定的控制而使 ASELOBJ( ) 函数的返回值为零，数组将保持不变。如果数组不存在，并且 ASELOBJ( ) 函数的返回值为零，Visual FoxPro 将不创建此数组。

1

创建一个单元素数组，保存对当前选定控制所在容器的对象引用。例如假设当前选择的控制为表单的微调控制，包含参数 1，在“命令”窗口中发出 ASELOBJ( ) 命令后，数组将包含一个值为“FORM”的元素。注意，如果选择的是页框，ASELOBJ( ) 函数将返回当前的页名。

2

指定 Visual FoxPro 创建一个单元素数组，保存表单中对数据环境对象的一个对象引用。数据环境对象决定了表单的数据环境属性。

返回值类型

数值型

说明

ASELOBJ( ) 函数创建一个一维数组，保存对活动表单设计器中当前选定控制的对象引用，并且返回当前选定控制的数目。如果当前没有选定任何控制并忽略参数选项 1，ASELOBJ( ) 函数的返回值为 0，并且不创建数组。如果表单中没有控制，ASELOBJ( ) 函数不能识别表单。如果当前没有选定控制，并且函数包含参数选项 1，ASELOBJ( ) 函数的返回值为 1。

可以使用 ASEOBJ( ) 函数创建自己的控制生成器。


*运行下面的示例之前，先在“表单设计器”中打开一个新表单，
* 并且往表单中加入一个或多个包含 Caption 属性的控制。
* 例如，标签或命令按钮。给每个控制选一个编号，
*.然后运行示例。ASELOBJ( ) 函数将显示
* 所选择控制的名称，然后改变选择控制
* 的标题。

gnobjects = ASELOBJ(gaSelected)	  && 创建包含控制名的数组

IF gnobjects > 0  && 0 表示没有选择控制

CLEAR

DISPLAY MEMORY LIKE gaSelected	  && 显示选定的控制

FOR nCnt = 1 TO gnobjects

? gaSelected(nCnt).Caption + ' => New Caption ' ;

+ LTRIM(STR(nCnt))  &&显示新和老的标题

gaSelected(nCnt).Caption = 'New Caption ' ;

+ ALLTRIM(STR(nCnt))  && 分配新标题

NEXT

ENDIF


请参阅

CREATE FORM，数据环境对象


ASIN( ) 函数

请参阅	示例

返回数值表达式的反正弦弧度值。

语法

ASIN(nExpression)

参数

nExpression

指定数值表达式，ASIN( ) 函数返回此表达式的反正弦值。nExpression 的取值范围为 -1 到 +1，ASIN( ) 函数返回值的值域范围为 -π/2 到 +π/2 (-1.57079 到 1.57079)。显示结果中小数点的位置可以用 SET DECIMAL 命令指定。

返回值类型

数值型

说明

可以用 RTOD( ) 函数将弧度值转换成角度值。


CLEAR

? RTOD(ASIN(0))  && 返回 0.00

STORE 1 to gnArcAngle

? RTOD(ASIN(gnArcAngle))  && 返回 90.00

? RTOD(ASIN(SQRT(2)/2))  && 返回 45.00


请参阅

RTOD( )，SET DECIMALS，SIN( )


ASORT( ) 函数

请参阅	示例

按升序或降序对数组中的元素排序。

语法

ASORT(ArrayName [, nStartElement [, nNumberSorted [, nSortOrder]]])

参数

ArrayName

指定要排序的数组名称。

nStartElement

指定从第几个元素开始排序。如果忽略参数 nStartElement，则默认从数组的第一个元素开始排序。如果数组是一维的，函数从 nStartElement 开始排序。如果数组是二维的，则参数 nStartElement 既决定从第几行开始排序，又决定以每行中的第几列元素为排序依据。

附注

引用二维数组中的一个元素有两种方法。第一种为使用两个下标值指定元素在数组中行和列位置，另一种方法为使用元素编号。此函数和其他处理二维数组的函数都需要使用元素编号（ASORT( ) 函数中为数值表达式 nStartElement 和 nNumberSorted）。使用 AELEMENT( ) 函数可以将数组的行、列下标值转换成元素的编号值。

下面的示例说明了起始元素 nStartElement 决定二维数组中的行如何排序。创建一个小的数组 gaArray 并且进行两次排序。第一次排序从数组的第一个元素开始，并且行依据数组的第一列数值进行排序。第二次排序从数组 gaArray 的第四个元素开始，行依据数组的第二列数值进行排序。

第一次排序从第一行开始，第二次排序从第二行开始。可以使用 DISPLAY MEMORY 命令显示数组内容，下面的示例表中显示了排序结果。

下面命令创建数组 gaArray：

DIMENSION gaArray(3,2)

gaArray(1) = 'G'

gaArray(2) = 'A'

gaArray(3) = 'C'

gaArray(4) = 'Z'

gaArray(5) = 'B'

gaArray(6) = 'N'

数组 gaArray 值如下：

	第一列	第二列
第一行	G	A
第二行	C	Z
第三行	B	N
用 ASORT( ) 函数从第一个元素 (1, 1) 开始对数组进行排序。排序时，通过调整行与行之间的位置使数组的第一列元素按升序放置。

=ASORT(gaArray,1)

新的行序为：

	第一列	第二列
第一行	B	N
第二行	C	Z
第三行	G	A
然后从第四个元素 (2, 2) 开始对数组进行排序。排序时，通过调整行与行之间的位置使数组第二列元素按顺序放置。

=ASORT(gaArray,4)

注意行序的不同：

	第一列	第二列
第一行	B	N
第二行	G	A
第三行	C	Z
nNumberSorted

指定一维数组中参与排序的元素个数，或二维数组中参与排序的行数。例如，如果数组是一维的，并且参数 nStartElement 为 2，这表明从数组的第二个元素开始排序。参数 nNumberSorted 为 3，表明有三个元素参与排序，即对第二、第三和第四个元素排序。如果参数为 -1 或忽略此参数，则从起始元素 nStartelement 到数组中的最后一个元素都参与排序。

如果数组是二维的，nNumberSorted 指定从起始元素 nStartElement 所在行开始参与排序的行数。例如，如若参数 nStarElement 为 2 且参数 nNumberSorted 为 3，将对包含第二个数组元素的行和接下来的两行排序。如果 nNumbersorted 为 -1 或忽略此参数，从包含起始元素的行到数组的最后一行都参与排序。

nSortOrder

指定数组元素的排序方向（升序或降序）。默认情况下，数组元素按升序排序；如果 nSortOrder 值为零或忽略此参数，数组中元素将按升序排序。如果 nSortOrder 值为 1 或任意非零值，数组元素按降序排序。

返回值类型

数值型

说明

所有参与排序的元素必须为同一数据类型。一维数组对元素排序，二维数组对行排序。对二维数组排序时，将改变数组行的顺序，使数组中某一列的元素按升序或降序排列。

如果排序成功，返回值为 1，否则返回值为 -1。


* 下面的示例将表 customer 的 contact 字段内容复制
* 到数组 gaContact 中。然后显示数组中前 20 条
* 字段的内容，对数组进行排序，重新按排序顺序
* 显示 contact 字段的内容。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer  && 打开表 customer

COUNT TO gnCount  && contacts 字段的数目

DIMENSION gaContact(gnCount,1)  && 创建数组

COPY TO ARRAY gaContact FIELD contact	  && 填充数组

CLEAR

? 'Contact names:'

?

FOR nCount = 1 TO 20

? gaContact(nCount)  && 显示前 20 条 contact 内容

ENDFOR

= ASORT(gaContact))	  && 对数组排序

?

? 'Sorted Contact names:'

?

FOR nCount = 1 TO 20

? gaContact(nCount)  && 排序后，再显示前 20 条 contact 内容

ENDFOR


请参阅

ACOPY( )，ADEL( )，ADIR( )，AELEMENT( )，AFIELDS( )，AINS( )，ALEN( )，ASCAN( )


ASSIST 命令

请参阅

运行 _ASSIST 系统内存变量指定的程序。包含此命令是为了提供向后兼容性。

语法

ASSIST


请参阅

_ASSIST


_ASSIST 系统内存变量

请参阅

指定发出 ASSIST 命令后运行的程序名。包含此命令是为了提供向后兼容性。

语法

_ASSIST = cProgramName

参数

cProgramName

指定要运行的程序。

说明

使用_ ASSIST 系统内存变量指定发出 _ASSIST 命令后运行的程序。默认情况下，_ASSIST 包含空字符串。


请参阅

ASSIST


ASUBSCRIPT( ) 函数

请参阅

根据元素编号返回元素的行和列下标值。

语法

ASUBSCRIPT(ArrayName, nElementNumber, nSubscript)

参数

ArrayName

指定数组名。

nElementNumber

指定元素编号。

nSubscript

决定返回的值是行下标还是列下标。

如果数组是一维数组，参数 nElementNumber 的值为元素编号，参数 nSubscript 的值为 1，ASUBSCRIPT( ) 函数的返回值将与 ElementNumber 值相等。

如果数组是二维数组，则必须给定元素编号值 nElementNumber 和参数 nSubscript 的值（1 或 2）。参数 nSubscript 的值为 1，函数返回元素的行下标；参数 nSubscript 值为2，则返回元素的列下标。

有关如何引用数组元素的详细内容，请参阅 DIMENSION 命令。

返回值类型

数值型

说明

引用二维内存变量数组的元素有两种方法。第一种为使用两个下标值确定元素在数组中的行和列位置，第二种为使用元素编号。使用 ASUBSCRIPT( ) 函数可以将元素编号转换成元素的行和列下标值。

下面的示例创建一个两行三列的数组，然后使用 DISPLAY 命令按元素编号顺序显示数组每个元素的内容。

DIMENSION gaMyArray(2,3)

DISPLAY MEMORY LIKE gaMyArray

GAMYARRAY  Pub    A

  (   1,   1)     L  .F. (element number 1)

  (   1,   2)     L  .F. (element number 2)

  (   1,   3)     L  .F. (element number 3)

  (   2,   1)     L  .F. (element number 4)

  (   2,   2)     L  .F. (element number 5)

  (   2,   3)     L  .F. (element number 6)

下面两个命令往同一个数组元素中存入字符串 'INVOICE'：

STORE 'INVOICE' TO gaMyArray(2, 1)

STORE 'INVOICE' TO gaMyArray(4)

对于一维数组，元素编号值与单个行下标值相等。对一维数组没有必要使用 ASUBSCRIPT( ) 函数。


请参阅

ADEL( )，ADIR( )，AELEMENT( )，AFIELDS( )，AINS( )，ALEN( )，ASCAN( )，ASORT( )，DIMENSION，DISPLAY MEMORY


AT( ) 函数

请参阅	示例

返回一个字符表达式或备注字段在另一个字符表达或备注字段中首次出现的位置，从最左边开始计数。

语法

AT(cSearchExpression, cExpressionSearched [, nOccurrence])

参数

cSearchExpression

指定字符表达式，AT( ) 函数将在 cExpressionSearched 中搜索此字符表达式。

cExpressionSearched

指定在其中进行搜索的字符表达式。

参数 cExpression 和 cExpressionSearched 都可以是任意大小的备注字段。

nOccurrence

指定搜寻 cSearchExpression 在 cExpressionSearched 中的第 nOccurrence 次（第一、第二、第三次等等）出现。默认情况下，AT( ) 函数搜索到 cSearchExpression 首次出现 ( nOccurrence=1)。使用 Occurrence 参数可以搜索 cSearchExpression 在 cExpressionSearched 中其他的出现，如果参数 nOccurrence 的值大于 cExpressionSearched 中包含 cExpressionSearched 的数目，AT( ) 函数返回 0。

返回值类型

数值型

说明

AT( ) 函数在第二个字符表达式中搜索首次出现的第一个字符表达式，函数返回第一个字符表达式的首字符在第二个字符表达式中所在的位置。如果没有搜索到，AT( ) 函数的返回值为 0。

AT( ) 函数区分搜索字符的大小写。如果不区别搜索字符的大小写，可使用 ATC( ) 函数。


STORE 'Now is the time for all good men' TO gcString

STORE 'is the' TO gcFindString

CLEAR

? AT(gcFindString,gcString)  && 显示 5

STORE 'IS' TO gcFindString

? AT(gcFindString,gcString)  && 显示 O，区分大小写


请参阅

AT_C( )，ATC( )，ATCLINE( )，ATLINE( )，LEFT( )，RAT( )，RATLINE( )，RIGHT( )，SUBSTR( )


 AT_C( ) 函数

请参阅

返回一个字符表达式或备注字段在另一个字符表达式或备注字段中第一次出现的数值位置，从最左边字符算起。

语法

AT_C(cSearchExpression, cExpressionSearched [, nOccurrence])

参数

cSearchExpression

指定 AT_C( ) 要在 cExpressionSearched 中查找的字符表达式。

cExpressionSearched

指定要在其中进行查找操作的字符表达式。

cSearchExpression 和 cExpressionSearched 可以是任意大小的备注字段。

nOccurrence

指定 cSearchExpression 在 cExpressionSearched 中出现的次数（第一、第二、第三次，等等）。默认情况下，AT_C( ) 搜索 cSearchExpression 的第一次出现 (nOccurrence = 1)。参数 nOccurrence 允许在 cExpressionSearched 中搜索 cSearchExpression 的其他出现。如果 nOccurrence 大于 cSearchExpression 在 cExpressionSearched 中出现的次数，则 AT_C( ) 返回 0。

返回值类型

数值型

说明

AT_C( ) 返回字符表达式第一次出现的位置的数值表示，字符表达式可以包含单字节和双字节字符的任意组合。

AT_C( ) 在第二个表达式中搜索第一个表达式的第一次出现，然后返回第一个字符所在位置的数值表示。如果未找到，则返回 0。

AT_C( ) 函数区分大小写。若要不区分大小写，请使用 ATCC( )。


请参阅

ATCC( )，LEFTC( )，RATC( )，RIGHTC( )，SUBSTRC( )


ATAN( ) 函数

请参阅	示例

返回数值表达式的反正切弧度值。

语法

ATAN(nExpression)

参数

nExpression

指定一个数值表达式，ATAN( ) 函数返回此数值表达式的反正切值。nExpression 可为任意值。ATAN( ) 返回值的值域范围从 -π/2 到 +π/2 (-1.57079 到 1.57079)。返回值显示到小数点后第几位数由 SET DECIMALS 决定。

返回值类型

数值型

说明

使用 RTOD( ) 函数可以将弧度值转换为角度值。


CLEAR

? ATAN(0)  && 显示数值 0.00

STORE PI( )/2 to gnAngle

? ATAN(gnAngle)  && 显示数值 1.00

? ATAN(PI( )/2)  && 显示数值 1.00

? ATAN(DTOR(90))  && 显示数值 1.00


请参阅

ATN2( )，RTOD( )，SET DECIMALS，TAN( )


ATC( ) 函数

请参阅	示例

返回一个字符表达式或备注字段在另一个字符表达式或备注字段中首次出现的位置，此函数不区分字符大小写。

语法

ATC(cSearchExpression, cExpressionSearched [, nOccurrence])

参数

cSearchExpression

指定字符表达式，ATC( ) 函数将在 cExpressionSearched 中搜索此字符表达式。

cExpressionSearched

指定在其中搜索 cSearchExpression 的字符表达式。

参数 cSearchExpression 和 cExpressionSearched 都可以是任意大小的备注字段。

nOccurrence

指定搜索 cSearchExpression 在 cExpressionSearched 中的第 nOccurrence 次出现（第一、第二、第三次等等）。默认情况下，ATC( ) 函数搜索 cSearchExpression 的首次出现 ( nOccurrence=1)。使用参数 Occurrence 可以在 cExpressionSearched 中搜索 cSearchExpression 的其他出现。

返回值类型

数值型

说明

ATC( ) 函数在第二个字符表达式中搜索首次出现的第一个字符表达式，搜索时忽略字符表达式中字符的大小写。若要区分大小写来搜索字符，请使用AT( ) 函数。

ATC( ) 函数在第二个字符表达式中搜索首次出现的第一个字符表达式，函数返回第一个字符表达式的首字符在第二个字符表达式中所在的位置。如果没有搜索到，ATC( ) 函数的返回值为 0。


STORE 'Now is the time for all good men ... ' TO gcString

STORE 'IS THE' TO gcFindString

CLEAR

? ATC(gcFindString, gcString)  && 显示 5

STORE 'is' TO gcFindString

? ATC(gcFindString, gcString)  && 显示 5

? ATC('now',gcString)  && 显示 1


请参阅

AT( )，ATCC( )，ATCLINE( )，ATLINE( )，LEFT( )，RAT( )，RATLINE( )，RIGHT( )，SUBSTR( )


ATCC( ) 函数

请参阅

返回一个字符表达式或备注字段在另一个字符表达式或备注字段中首次出现的位置。不区分两个表达式的大小写。

语法

ATCC(cSearchExpression, cExpressionSearched [, nOccurrence])

参数

cSearchExpression

指定 ATCC( ) 要在 cExpressionSearched 中查找的字符表达式。

cExpressionSearched

指定要在其中进行查找操作的字符表达式。

cSearchExpression 和 cExpressionSearched 可以是任意大小的备注字段。

nOccurrence

指定搜索 cSearchExpression 在 cExpressionSearched 中的第几次出现（第一、第二、第三次等等）。默认情况下，ATCC( ) 搜索 cSearchExpression 的第一次出现 (nOccurrence = 1)。参数 nOccurrence 允许在 cExpressionSearched 中搜索 cSearchExpression 的其他出现。

返回值类型

数值型

说明

ATCC( ) 返回第一个字符表达式或备注字段在第二个字符表达式或备注字段中第一次出现的数值位置，字符表达式可以包含单字节和双字节字符的任意组合。

ATCC( ) 函数在第二个字符表达式中搜索首次出现的第一个字符表达式，搜索时忽略字符表达式中字符的大小写。若要区分大小写来搜索字符，请使用 AT_C( ) 函数。

ATCC( ) 在第二个表达式中搜索第一个表达式的第一次出现，然后返回第一个字符所在位置的数值表示。如果未找到，则返回 0。


请参阅

AT_C( )，LEFTC( )，RATC( )，RIGHTC( )，SUBSTRC( )


ATCLINE( ) 函数

请参阅	示例

返回一个字符表达式或备注字段在另一个字符表达式或备注字段中第一次出现的行号，不区分字符大小写。

语法

ATCLINE(cSearchExpression, cExpressionSearched)

参数

cSearchExpression

指定字符表达式，ATCLINE( ) 函数将在 cExpressionSearched 中搜索此字符表达式。

cExpressionSearched

指定在其中进行搜索的字符表达式。

参数 cSearchExpression 和 cExpressionSearched 都可以是任意大小的备注字段。使用 MLINE( ) 函数可以返回包含匹配字符表达式的行。

提示

ATCLINE( ) 是搜索备注字段的一种便捷方法。

返回值类型

数值型

说明

如果搜索成功，ATCLINE( ) 函数返回第一个字符表达式首次在 cExpressionSearched 中出现时的行号。如果搜索不成功，ATCLINE( ) 函数返回 0。

即使参数 cExpressionSearched 不是备注字段，也用 SET MEMOWIDTH 设定的值确定 ATLINE( ) 函数返回的行号。有关的详细内容，请参阅 SET MEMOWIDTH。

若要在搜索时区分字符的大小写，请使用 ATLINE( ) 函数。


*示例 1 将指针定位到备注字段中某个字符串首次
* 出现的位置，并且显示表“employee”中的姓名字
* 段和包括字符串的备注行。

*示例 2 说明备注的宽度如何影响 ATCLINE( ) 函数的返回值。

*示例 1

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开表 employee

CLEAR

STORE 'JAPANESE' TO gcFindString  && 不区分大小写

LOCATE FOR ATCLINE(gcFindString, notes) != 0

? First_Name

?? Last_Name

? MLINE(notes, ATCLINE(gcFindString, notes))

*示例 2

STORE '1234567890ABCDEFGHIJ' TO gcString

SET MEMOWIDTH TO 20

? ATCLINE('AB', gcString)  && 显示数值 1

SET MEMOWIDTH TO 10

? ATCLINE('AB', gcString)  && 显示数值 2


请参阅

AT( )，ATC( )，ATLINE( )，MLINE( )，RAT( )，RATLINE( )，SET MEMOWIDTH


ATLINE( ) 函数

请参阅	示例

返回一个字符表达式或备注字段在另一个字符表达式或备注字段中首次出现的行号。从第一行开始计算。

语法

ATLINE(cSearchExpression, cExpressionSearched)

参数

cSearchExpression

指定字符表达式，Visual FoxPro 在 cExpressionSearched 中查找此表达式。

cExpressionSearched

指定在其中进行搜索的表达式。

参数 cSearchExpression 和 cExpressionSearched 都可以是任意大小的备注字段。

使用 MLINE( ) 函数可以把包含匹配字符表达式的行做为字符串返回。

提示

ATLINE( ) 函数是搜索备注字段的一种便捷方法。

返回值类型

数值型

说明

ATLINE( ) 函数在第二个字符表达式中搜索第一个字符表达式的首次出现。此函数区分字符的大小写。如果不区分字符的大小写，请使用 ATCLINE( ) 函数。

如果搜索成功，ATLINE( ) 函数返回匹配字符表达式的行号；如果搜索不成功，ATLINE( ) 函数返回 0。

即使 cExpressionSearched 不是备注字段，也用 SET MEMOWIDTH 设定的值确定 ATLINE( ) 函数返回的行号。有关的详细内容，请参阅 SET MEMOWIDTH。


* 示例 1 将指针定位到备注字段中首次出现某个字符串的位置，
* 并且显示表“employee”中的姓名字段和包含字符串的
* 备注行。

*示例 2 说明备注字段的宽度如何影响 ATLINE( ) 函数的返回值。

*示例 1

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开表 employee

CLEAR

STORE 'Japanese' TO gcFindString  && 区分大小写

LOCATE FOR ATLINE(gcFindString, notes) != 0

? First_Name

?? Last_Name

? MLINE(notes, ATLINE(gcFindString, notes))

*示例 2

STORE '1234567890ABCDEFGHIJ' TO gcString

SET MEMOWIDTH TO 20

? ATLINE('AB', gcString)  && 显示数值 1

SET MEMOWIDTH TO 10

? ATLINE('AB', gcString)  && 显示数值 2


请参阅

AT( )，ATC( )，ATCLINE( )，MLINE( )，RAT( )，RATLINE( )，SET MEMOWIDTH


ATN2( ) 函数

请参阅	示例

返回指定值的反正切值，返回值无象限限制。

语法

ATN2(nYCoordinate, nXCoordinate)

参数

nYCoordinate

指定 Y 坐标值。

nXCoordinate

指定 X 坐标值。

返回值类型

数值型

说明

ATN2( ) 返回指定点和原点 (0, 0) 连线与 X 轴的夹角大小（弧度值）。

ATN2( ) 返回的值域范围为 -π/2 到 +π/2。

使用 RTOD( ) 函数可以将 ATN2( ) 的返回值转换为角度值。显示到小数点后第几位由 SET DECIMALS 命令指定。


CLEAR

? PI( )  && 显示值 3.14

? ATN2(0,-1)  && 显示值 3.14

STORE COS(PI( )) TO gnXCoord

STORE SIN(PI( )) TO gnYCoord

? ATN2(gnYCoord,gnXCoord)  && 显示值 3.14

? ATN2(gnYCoord,gnXCoord)/PI( )  && 显示值 1.00


请参阅

ATAN( )，DTOR( )，RTOD( )，SET DECIMALS，TAN( )


AUSED( ) 函数

请参阅	示例

将一个数据工作期中的表别名和工作区存入内存变量数组。

语法

AUSED(ArrayName [, nDataSessionNumber])

参数

ArrayName

指定保存数据工作期中表别名和工作区的数组名；如果指定的数组不存在，Visula FoxPro 将自动创建此数组。如果数组存在，但其大小不足以包含所有表别名和工作区，Visula FoxPro 将自动增加数组大小。如果数组大小超过所需值，Visula FoxPro 将截去多余部分。如果数组存在，但由于数据工作期中没有打开的表而使 AVSED( ) 函数返回 0，数组将保持不变。如果数组不存在，并且 AUSED( ) 函数返回 0，Visula FoxPro 将不创建此数组。

nDataSessionNumber

指定数据工作期编号，AVSED( ) 函数返回此数据工作期中的表别名和工作区。如果忽略参数 nDataSessionNumber，AVSED( ) 返回当前数据工作期的信息。使用 SET DATASESSTON 可以指定当前数据工作期。

返回值类型

数值型

说明

AUSED( ) 返回数组的行数，与数据工作期中打开表的数目相等。

AUSED( ) 函数创建一个二维数组，并且将数据工作期中打开表的别名存入数组的第一列，数组的第二列保存与表相应的工作区编号。


* 下面的示例使用 AUSED( ) 函数创建名为
*  gaInuse 的数组，数组中包含当前数据
* 工作期打开表的别名及其工作区。显示当
* 前数据工作区打开表的数目，然后显示表
* 的别名和工作区。

OPEN DATABASE (SYS(2004) + 'samples\data\testdata') EXCLUSIVE

USE Customer IN 0

CLEAR

? AUSED(gaInuse)

DISPLAY MEMORY LIKE gaInuse

CLOSE DATABASES


请参阅

ALIAS( )，SET DATASESSION，USE


AutoActivate 属性

请参阅

指定如何激活 OLE 容器控制。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Control.AutoActivate[ = nValue]

设置

nValue

AutoActivate 属性设置如下：

设置	说明
0	人工。控制不自动激活。您可以在程序中使用 DoVerb 方法激活控制。
1	获得焦点。如果控制中包含一个对象，那么当控制获得焦点时，提供对象的应用程序将被激活。
2	（默认值）双击。如果控制中包含一个对象，那么用户双击控制，或在控制获得焦点时按 ENTER 将激活提供对象的应用程序。
3	自动。如果控制中包含一个对象，基于对象的常规方法（当用户双击对象或对象接收到焦点时）激活提供对象的应用程序。
说明

设计和运行时该属性可用。

如果嵌入对象支持现场激活 (in-place activation)，可设置 AutoActivate 属性为 1（获得焦点），这样当控制获得焦点时，将激活对象。

附注

当 AutoActivate 设置为 2（双击）时，不发生 DblClick 事件。


请参阅

DoVerb 方法


AutoCenter 属性

请参阅

指定表单对象第一次显示于 Visual FoxPro 主窗口时，是否自动居中放置。

应用于

表单，SCREEN

语法

Object.AutoCenter [ = lExpr]

设置

lExpr

指定表单对象是置于中央还是根据 Top 和 Left 属性设置值确定表单对象在窗口中的位置。AutoCenter 属性设置为：

设置	说明
“真”(.T.)	表单对象置于中央，并且依据当前位置重新设置 Top 和 Left 属性值。
“假”(.F.)	（默认值）表单对象并不置于中央，依据 Top 和 Left 属性值确定的坐标放置表单对象。
说明

设计和运行时该属性可用。

附注

将 AutoCenter 设置值由 .T. 重新恢复到 .F. 时，并不返回表单属性的 Top 和 Left 的初始值。


请参阅

Left 属性，Top 属性


AutoCloseTables 属性

请参阅

指定由数据环境指定的表或视图是否在表单集、表单或报表释放时关闭。

应用于

数据环境

语法

DataEnvironment.AutoCloseTables[ = lValue]

设置

lValue

AutoCloseTables 属性设置为：

设置	说明
“真”(.T.)	（默认值）当表单集、表单或报表释放时，关闭表和视图。
“假”(.F.)	当表单集、表单或报表释放后，表和视图仍保持打开。
说明

设计时该属性可用，运行时只读。

如果 AutoCloseTables 设置为“假”(.F.)，并且表单集、表单或报表不是运行在私有数据工作期中，那么当表单集、表单或报表释放后，不关闭与数据环境中临时表相联系的表和视图。在其他情况下，将关闭与数据环境中临时表相联系的表和视图。


请参阅

AutoOpenTables 属性，DataSession 属性，DataSessionID 属性


AutoOpenTables 属性

请参阅

决定是否自动加载与表单集、表单或报表的数据环境相关联的表或视图。

应用于

数据环境

语法

DataEnvironment.AutoOpenTables[ = lExpr]

设置

lExpr

AutoOpenTables 属性设置如下：

设置	说明
“真”(.T.)	（默认值）表单集、表单或报表所基于的表和视图自动打开。
“假”(.F.)	表和视图不自动打开。
说明

设计时该属性可用，运行时只读。

如果 AutoOpenTables 设置为“假”(.F.)，可以通过编程方式调用数据环境的 OpenTables 方法来加载数据环境。


请参阅

BeforeOpenTables 事件，OpenTables 方法


AutoRelease 属性

请参阅

指定表单集中最后一个表单释放后是否释放表单集。

应用于

表单集

语法

FormSet.AutoRelease[ = lExpr]

设置

lExpr

AutoRelease 属性设置如下：

设置	说明
“真”(.T.)	在表单设计器中默认值为“真”(.T.)。当表单集中最后一个表单释放时释放表单集。
“假”(.F.)	程序代码中默认值为“假”(.F.)。当表单集中最后一个表单释放时不释放表单集。
说明

设计时可用，运行时可读写。


请参阅

Release 方法，ReleaseType 属性


AutoSize 属性

请参阅

指定控制是否依据其内容自动调节大小。

应用于

复选框，命令按钮，命令组，标签，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组

语法

Control.AutoSize[ = lExpr]

设置

lExpr

指定控制是否根据其内容调节大小。AutoSize 属性设置为：

设置	说明
“真”(.F.)	控制依其内容自动调节大小。
“假”(.F.)	（默认值）当控制内容超过控制区域时，只显示一部分内容，控制大小保持不变。
说明

设计和运行时该属性可用。

对于 OLE 容器控制，AutoSize 属性仅适用于支持现场编辑的 OLE 对象。在现场编辑过程中，若要改变 OLE 对象的尺寸，必须设置 Sizeable 属性为“真”(.T.)。


请参阅

Alignment 属性，Height 属性，Width 属性


AVERAGE 命令

请参阅	示例

计算数值表达式或字段的算术平均值。

语法

AVERAGE [ExpressionList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO MemVarList | TO ARRAY ArrayName]
[NOOPTIMIZE]

参数

ExpressionList

指定求平均值的表达式。ExpressionList 可以是用逗号分隔的表字段或包含表字段的数值表达式。

Scope

指定求平均值的记录或记录范围。只有在指定范围内的记录才参加求平均值运算。Scope 子句可以为 :ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。默认的 Scope（范围）为所有记录。

有关 Scope 子句的详细内容，请参阅 Scope 子句 主题或《开发指南》的第二章“语言概述”。包含 Scope 子句的命令仅处理活动工作区中的表。

FOR lExpression1

指定只有满足逻辑条件 lExpression1 的记录才参与计算。这样可以筛选出不想要的记录。

如果 lExpression 是可优化的表达式，Rushmore 技术将优化 AVERAG FOR 查询。若要获得最佳性能，应在 FOR 子句中使用可优化的表达式。有关 Rushmore 可优化表达式的详细内容，请参阅 SET OPTIMIZE 和掌握 Rushmore 技术，以及《开发指南》的第十七章“优化程序”。

WHILE lExpression2

指定只要逻辑表达式 lExpression2 为“真”(.T.)，记录就参与运算。直到遇到第一个使 lExpression2 计算得“假”(.F.) 为止。

TO MemVarList

指定保存平均值结果的内存变量或数组元素的列表。

TO ARRAY ArrayName

指定保存平均值结果的一维数组。一维数组可以在使用 AVERAGE 命令前创建。

如果指定数组不存在，Visula FoxPro 将自动创建该数组。如果数组存在，但大小不能包含所有结果，Visula FoxPro 将自动根据信息量增加数组大小。

NOOPTIMIZE

取消 AVERAGE 命令的 Rushmore 优化。有关的详细内容，请参阅 SET OPTIMIZE 和掌握 Rushmore 技术，或《开发指南》的第十七章“优化程序”。

说明

除非包含可选的表达式列表，否则选定表的所有字段都将参与求平均值的运算。如果 SET TALK 为 ON，结果显示在屏幕上。如果 SET HEADINGS 为 ON，字段名或包括字段名的表达式将显示在结果的上面。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE orders  && 打开 order 表

CLEAR

AVERAGE Order_Amt  && 记算所有记录的平均值

AVERAGE Order_Amt TO gnAvg  && 结果存入内存变量

? 'Average order amount: '

?? gnAvg  && 再次显示平均值


请参阅

CALCULATE，DIMENSION，SET HEADINGS，SUM


BackColor, ForeColor 属性

请参阅	示例

指定用于显示对象中文本和图形的背景色或前景色。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，标头，标签，选项按钮，选项组，页面，_SCREEN，形状，微调，文本框，工具栏

附注

BackColor 属性不适用于命令按钮控制，ForeColor 属性不适用于命令组控制、选项组控制或形状控制。

语法

Object.BackColor[ = nColor]
Object.ForeColor[ = nColor]

设置

nColor

指定单个颜色值。下表列出常用的颜色值：

颜色	RGB 值	nColor 值
白色	255, 255, 255	16777215
黑色	0, 0, 0	0
灰色	192, 192, 192	12632256
暗灰色	128, 128, 128	8421504
红色	255, 0, 0	255
暗红色	128, 0, 0	128
黄色	255, 255, 0	65535
暗黄色	128, 128, 0	32896
绿色	0, 255, 0	65280
暗绿色	0, 128, 0	32768
青色	0, 255, 255	16776960
暗青色	0, 128, 128	8421376
蓝色	0, 0, 255	16711680
暗蓝色	0, 0, 128	8388608
洋红色	255, 0 ,255	16711935
暗洋红色	128, 0, 128	8388736
说明

设计和运行时可用。

Visual FoxPro 采用 Windows 红绿蓝 (RGB) 配色方案，每一个红、绿、蓝组件由一个 0 到 255 之间的值代表。使用 RGB( ) 函数将三个组件颜色转换为一个复合的 nColor。

若 BackStyle 属性设定为 0（透明），则忽略 BackColor 属性。


* 下面示例演示了如何在表单中使用 Shape 控制显示圆、椭圆或
* 正方形，以及怎样用 BackColor 属性来指定每一形状的颜色。

* 创建一个表单，并且将一个命令按钮和一组选项按钮放置在表单
* 上。当选择某一选项按钮时，表单上将显示相应的形状。
* BackColor 属性可用于指定每一形状的颜色。每一形状的 Height、
* Width 和 Curvature 属性决定其类型。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 使控制菜单框无效

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp')  && 添加选项组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加圆

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加框

frmMyForm.cmdCommand1.Visible =.T.  && "退出"命令按钮可见

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100)  && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 启动事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建一个选项组

ButtonCount = 3  && 三个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认取消命令按钮 (Esc)

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  && 创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  && 创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建一个正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 蓝色

ENDDEFINE


请参阅

BackStyle 属性，ColorScheme 属性，颜色概述，DisabledBackColor, DisabledForeColor 属性，FillColor 属性，FillStyle 属性，GETCOLOR( )，RGB( )


BackStyle 属性

请参阅

指定一个对象的背景是否透明。

应用于

复选框，命令组，容器对象，控制对象，编辑框，图象，标签，选项按钮，选项组，页面，形状，文本框

语法

Object.BackStyle[ = nStyle]

设置

nStyle

BackStyle 属性的设置为：

设置	说明
0	透明。对象后面的任何事物都是可见的。忽略 BackColor 属性。
1	（默认值）不透明。用对象的 BackColor 属性填充控制，并隐藏控制后面的颜色或图形。
说明

设计和运行时可用。

当在表单对象上使用背景色，或者在图形上设置控制时，可使用 BackColor 属性来创建透明控制。如果要在杂乱的背景上突出控制，则使用不透明控制。

若 BackStyle 属性设置为 0（透明），则忽略对象的 BackColor 属性。

对页面对象来说，当其页框的 Tabs 属性设置为“真”(.T.) 时，BackStyle 属性为只读。


请参阅

BackColor, ForeColor 属性


BAR( ) 函数

请参阅	示例

返回最近一次选择的菜单项的编号。该菜单项选自 DEFINE POPUP 命令定义的菜单，或是一个 Visual FoxPro 菜单。

语法

BAR( )

返回类型

数值型

说明

DEFINE BAR 给菜单上的每一个菜单项赋予一个编号。当从菜单中选择一个菜单项时，BAR( ) 返回该菜单项对应的编号。根据 BAR( ) 的返回值，一个程序可以分支调用其他例程。

如果没有活动菜单，或者用户按下 Esc 键退出菜单，那么 BAR( ) 返回 0。


* 下面的示例使用 BAR( ) 将一个菜单项的编号传递给一个过程。
* 用SET SYSMENU SAVE 命令将当前系统菜单栏保存到内存中，
* 然后用 SET SYSMENU TO 命令删除所有系统菜单标题。

* DEFINE PAD 命令创建了两个菜单标题，DEFINE POPUP 为每一
* 个菜单标题创建一个菜单，DEFINE BAR 在每一个菜单上创建菜
* 单项。当选择菜单标题时，ON PAD 使用 ACTIVATE POPUP 命令
* 激活相应菜单。

* 当从菜单中选择一个菜单项时，ON SELECTION POPUP 使用
* BAR( ) 和 POPUP( ) 把菜单项编号和菜单标题传递给
* choice 过程，choice 过程将显示所选菜单项的
* 编号及其所属的菜单的名称。若选择 Card Info 菜单
* 的 Exit 项，原来的 Visual FoxPro 系统菜单将由
* SET SYSMENU TO DEFAULT 命令恢复。

*** Name this program BAR_EXAM.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD padConv OF _MSYSMENU ;

PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD padCard OF _MSYSMENU ;

PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD padConv OF _MSYSMENU ACTIVATE POPUP popConv

ON PAD padCard OF _MSYSMENU ACTIVATE POPUP popCard

DEFINE POPUP popConv MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF popConv PROMPT 'Ar\<ea' KEY CTRL+E, '^E'

DEFINE BAR 2 OF popConv PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF popConv PROMPT 'Ma\<ss' ;

KEY CTRL+S, '^S'

DEFINE BAR 4 OF popConv PROMPT 'Spee\<d' ;
KEY CTRL+D, '^D'

DEFINE BAR 5 OF popConv PROMPT '\<Temperature' ;

KEY CTRL+T, '^T'

DEFINE BAR 6 OF popConv PROMPT 'T\<ime' ;

KEY CTRL+I, '^I'

DEFINE BAR 7 OF popConv PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

*** Here is where the POPCONV menu uses the BAR( ) function

*** to pass a bar number to the procedure called choice below.

ON SELECTION POPUP popConv;

DO choice IN bar_exam WITH BAR( ), POPUP( )

DEFINE POPUP popCard MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF popCard PROMPT '\<View Charges' ;

KEY ALT+V, ''

DEFINE BAR 2 OF popCard PROMPT 'View \<Payments' ;
KEY ALT+P, ''

DEFINE BAR 3 OF popCard PROMPT 'Vie\<w Users' ;
KEY ALT+W, ''

DEFINE BAR 4 OF popCard PROMPT '\-'

DEFINE BAR 5 OF popCard PROMPT '\<Charges ';

KEY ALT+C

DEFINE BAR 6 OF popCard PROMPT '\-'

DEFINE BAR 7 OF popCard PROMPT 'E\<xit ';
KEY ALT+X

*** Here is where the POPCARD menu uses the BAR( ) function

*** to pass a bar number to the procedure called choice below.

ON SELECTION POPUP popCard;

DO choice IN bar_exam WITH BAR( ), POPUP( )

*** The procedure choice uses the gnBar parameter

*** to contain the value passed by the BAR( ) function.

PROCEDURE choice

PARAMETERS gnBar, gcPopup

WAIT WINDOW 'You chose bar #' + LTRIM(STR(gnBar)) + ;
' from popup ' + gcPopup NOWAIT

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE POPUP，CNTBAR( )，DEFINE BAR，DEFINE POPUP，GETBAR( )，MRKBAR( )，ON BAR，ON SELECTION BAR，PRMBAR( )


BARCOUNT( ) 函数

请参阅

返回菜单项的编号。该菜单项在 DEFINE POPUP 命令定义的菜单上，或在 Visual FoxPro 系统菜单上。包含此函数是为了提供 dBASE 兼容。

语法

BARCOUNT([cMenuName])

参数

cMenuName

指定菜单名。有关 Visual FoxPro 系统菜单的列表，请参阅系统菜单名称。

若省略 cMenuName，BARCOUNT( ) 将返回 DEFINE POPUP 命令创建的活动菜单的菜单项编号。

返回类型

数值型

说明

在 dBASE 中，BARCOUNT( ) 返回一个已定义菜单内的菜单项编号，而不管该菜单是否被激活。在 Visual FoxPro 中，BARCOUNT( ) 计算活动菜单的菜单项编号；若某一菜单已定义但尚未激活，BARCOUNT( ) 返回 0。

如果菜单项已由 DEFINE POPUP... PROMPT 定义，那么当发出 ACTIVATE POPUP 命令时，Visual FoxPro 对菜单项求值（对这样的菜单，只有在菜单被激活后，BARCOUNT( ) 才返回一个有意义的值）。如果菜单项是由 DEFINE BAR 命令定义的，那么在发出 ACTIVATE POPUP 命令之前，BARCOUNT( ) 就可以确定菜单项的编号。


请参阅

ACTIVATE POPUP，CNTBAR( )，CNTPAD( )，CREATE MENU，DEFINE BAR，DEFINE POPUP，GETBAR( )，MRKBAR( )，ON BAR，ON SELECTION BAR，PRMBAR( )


BARPROMPT( ) 函数

请参阅

返回菜单项的文本。

语法

BARPROMPT(nMenuItemNumber, cMenuName)

参数

nMenuItemNumber

指定菜单项的编号，BARPROMPT( ) 将返回此菜单项的文本。例如，若 nMenuItemNumber 为 1，则返回第一个菜单项的文本；若 nMenuItemNumber 为 2，则返回第二个菜单项的文本；依此类推。nMenuItemNumber 的最小值为 1，最大值为菜单项的数目。

cMenuName

指定菜单名。

返回类型

字符型

说明

包含此函数是为了提供 dBASE 兼容，它与带对应参数的 PRMBAR( ) 函数等效。

菜单由 DEFINE POPUP 命令和 DEFINE BAR 命令共同创建：DEFINE BAR 命令创建菜单项，DEFINE POPUP 命令创建菜单。

BARPROMPT( ) 也处理 Visual FoxPro 系统菜单。BARPROMPT( ) 返回菜单项的文本，而不要求菜单是活动的。如果创建的菜单项带有热键 (\<) 或禁止选项 (\)，则 BARPROMPT( ) 仅返回文本，不返回特殊字符；当一个菜单项是带有 \- 特殊字符的分隔符时，BARPROMPT( ) 返回空字符串。若所创建的菜单项没有文本，也返回空字符串。


请参阅

CNTBAR( )，DEFINE BAR，DEFINE POPUP，GETBAR( )，MRKBAR( )，PRMBAR( )，PRMPAD( )


BaseClass 属性

请参阅

指定 Visual FoxPro 基类名。被引用对象基于该基类。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，定制，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.BaseClass[ = cBaseClass]

设置

cBaseClass

指定对象所基于的 Visual FoxPro 基类的类名。

说明

设计和运行时只读。

有关 Visual FoxPro 基类的列表，请参阅控制和对象.


请参阅

Class 属性


_BEAUTIFY 系统内存变量

请参阅

为 Visual FoxPro 程序指定一个优化应用程序。包含此变量是为了提供向后兼容性。可以使用“文档向导”来代替。

语法

_BEAUTIFY = cProgramName

参数

cProgramName

指定一个优化应用程序。如果该程序不在当前默认目录下，那么应用程序名里应包括完整的路径。

也可以通过在配置文件中加入下面的语句来指定一个优化应用程序：

_BEAUTIFY = cProgramName

附注

优化应用程序必须接收的参数就是要优化的程序名。优化应用程序能够修改这个程序，将修改写入一个临时文件，然后将临时文件的文件名返回给 FoxPro。FoxPro 根据原始的程序名将临时文件读回编辑工作区，然后删除该临时文件。

说明

在 FoxPro 早期版本中，_BEAUTIFY 默认包含 BEAUTIFY.APP，并安装在 FoxPro 目录下。用户也可以为优化应用程序指定另一个文件名。

仅用于 FoxPro for Windows 和 FoxPro for Macintosh。


请参阅

_FOXDOC，MODIFY COMMAND


BeforeDock 事件

请参阅

该事件发生在工具栏对象停放之前。

应用于

工具栏

语法

PROCEDURE ToolBar.BeforeDock
LPARAMETERS [nIndex] ,nLocation

参数

nIndex

唯一地标识控制数组中的一个控制。

nLocation

指定工具栏停放的位置。nLocation 可以为下列值：

值	FOXPRO.H 常量	说明
1	TOOL_NOTDOCKED	不停放“工具栏”。
0	TOOL_TOP	“工具栏”停放在 Visual FoxPro 主窗口的顶端。
1	TOOL_LEFT	“工具栏”停放在 Visual FoxPro 主窗口的左端。
2	TOOL_RIGHT	“工具栏”停放在 Visual FoxPro 主窗口的顶端。
3	TOOL_BOTTOM	“工具栏”停放在 Visual FoxPro 主窗口的顶端。
说明

当“工具栏”拖放到停放区或者激活一个 Dock 方法时，发生 BeforeDock 事件。

BeforeDock 事件在重绘“工具栏”之前被触发，因此您可以修改工具栏的外观。这样如果“工具栏”有一个控制（例如一个组合框），当“工具栏”停放时，可以将它改变成另一个不同类型的控制（例如一个命令按钮）。


请参阅

AfterDock 事件，Dock 方法，Undock 事件


BeforeOpenTables 事件

请参阅

仅发生在与表单集、表单或报表的数据环境相关联的表和视图打开之前。

应用于

数据环境

语法

PROCEDURE DataEnvironment.BeforeOpenTables

说明

对于表单集或表单，BeforeOpenTables 事件发生在表单集或表单的 Load 事件之前。


请参阅

AfterCloseTables 事件，CloseTables 方法，Load 事件，OpenTables 方法，Unload 事件


BeforeRowColChange 事件

请参阅

当用户更改活动的行或列，而新单元还未获得焦点时发生该事件。也可以在表格列中当前对象和数据库中任何规则的 Valid 事件之前发生。使用 NODEFAULT 可以防止改变表格中活动的行和列。

应用于

表格

语法

PROCEDURE Grid.BeforeRowColChange
LPARAMETERS nColIndex

参数

nColIndex

返回新的活动行或活动列索引。

说明

可以采用鼠标、键盘交互方式或编程方式（如调用 ActivateCell 方法）触发 BeforeRowColChange 事件。


请参阅

ActivateCell 方法，AfterRowColChange 事件，DEFINE CLASS [NO DEFAULT]，Valid 事件


BEGIN TRANSACTION 命令

请参阅	示例

启动一个事务处理。

语法

BEGIN TRANSACTION

说明

仅对数据库中的表支持事务处理。有关如何在数据库中创建和增加表的详细信息，请参阅 CREATE DATABASE 和 ADD TABLE。

为了保存所做的修改并终止事务处理，应发出 END TRANSACTION 命令。如果事务处理失败（如服务器有故障或工作站有故障，以及没有提交事务处理就退出 Visual FoxPro），或者用户发出 ROLLBACK 命令，事务处理中的文件就恢复成原状态。

事务处理最深可嵌套五层，如果要进行第六层嵌套，则产生错误。

当修改一个数据库的记录，而该数据库又是事务处理的一部分时，网络上的其他用户在您终止事务处理之前无法访问（读或写）这些记录。

如果网络上的其他用户要访问您已经修改的记录，就必须等待您终止事务处理。在记录可用之前，用户将一直收到“记录不可用...请等待”的消息。因此，减小事务处理长度或在其他用户不需要访问期间进行事务处理就变得非常重要。

在事务处理期间不支持下列命令和函数：

命令和函数
APPEND PROCEDURES	CREATE SQL VIEW
CLEAR ALL	DELETE CONNECTION
CLOSE ALL1	DELETE DATABASE
CLOSE DATABASES1	DELETE TRIGGER
COPY INDEXES	DELETE VIEW
COPY PROCEDURES	MODIFY CONNECTION
CREATE CONNECTION	MODIFY DATABASE
CREATE DATABASE	MODIFY PROCEDURE
CREATE TRIGGER	MODIFY VIEW
CREATE VIEW	REQUERY( )
1 在事务处理期间执行 CLOSE ALL 命令，则关闭所有打开数据库中的表，但数据库仍保持打开状态；在事务处理期间执行 CLOSE DATABASES 命令，则关闭当前数据库中的所有表，但数据库仍保持打开状态。
下列命令和函数不能发送给参与事务处理的指定的表：

命令和函数
ALTER TABLE	PACK
CREATE TABLE	REINDEX
DELETE TAG	SETCURSORPROP( )
INDEX	TABLEREVERT( )
INSERT	ZAP
MODIFY STRUCTURE


* 在下面示例中，打开数据库 testdata 的 customer 表，发
* 出 BEGIN TRANSACTION 命令来启动一个事务处理，接着显
* 示 cust_id 和 company 字段内容。然后替换 company 字段
* 内容，再显示新的 company 字段内容。发送 ROLLBACK 命令
* 来恢复 company 字段的原来内容，然后再次显示 cust_id
* 和 company 字段的内容，这时的 company 字段保持
* 原值。
*

OPEN DATABASE (HOME( ) + 'samples\data\testdata.dbc')

BEGIN TRANSACTION

USE customer  && 仅在 DBC 中支持事务处理

CLEAR

LIST FIELDS cust_id, company NEXT 20

WAIT WINDOW 'Press a key to change the company field'

REPLACE ALL company WITH '***'  && 更改 company 字段内容

CLEAR

GO TOP

LIST FIELDS cust_id, company NEXT 20

WAIT WINDOW 'Press a key to restore the company field'

ROLLBACK  && 恢复字段的原来内容

CLEAR

GO TOP

LIST FIELDS cust_id, company NEXT 20

WAIT WINDOW 'Press a key to exit'

CLEAR

CLOSE ALL


请参阅

END TRANSACTION，ROLLBACK，TXNLEVEL( )


BETWEEN( ) 函数

请参阅	示例

判断一个表达式的值是否在另外两个相同数据类型的表达式的值之间。

语法

BETWEEN(eTestValue, eLowValue, eHighValue)

参数

eTestValue

指定 BETWEEN( ) 函数所测试的表达式。当 eTestValue 大于等于 eLowerValue 而小于等于 eHighValue 时，BETWEEN( ) 返回逻辑值“真”(.T.)，否则返回逻辑值“假”(.F.)。如果 eLowerValue 或 eHighValue 为 Null 值，则返回 Null 值。

eLowValue

指定 BETWEEN( ) 计算范围的下界。

eHighValue

指定 BETWEEN( ) 计算范围的上界。

返回值类型

逻辑型或 Null 值

说明

如果一个字符型、日期型、日期时间型、数值型、浮点型、整型、双精度型或货币型表达式的值在另外两个相同数据类型表达式的值之间，BETWEEN( ) 就返回“真”(.T.)，否则返回“假”(.F.)。如果 eLowValue 或 eHighValue 为 Null 值，则返回 Null 值。


*下面的示例找出 orders 表中满足条件 — order_amt 字段值在 950
* 和 1000 之间的所有记录，并显示这些记录的 cust_id 字段
* 和 order_amt 字段的内容。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE orders  &&　打开 order 表

CLEAR

SCAN FOR BETWEEN(order_amt,950,1000)

? cust_id, order_amt

ENDSCAN


请参阅

MAX( )，MIN( )


BITAND( ) 函数

请参阅	示例

返回两个数值型数值在按位进行 AND 运算后的结果。

语法

BITAND(nExpression1, nExpression2)

参数

nExpression1, nExpression2

指定按位进行 AND 运算的两个数值。如果 nExpression1 和 nExpression2 为非整数型，那么它们在按位进行 AND 运算之前转换为整数。

返回值类型

数值型

说明

BITAND( ) 将 nExpression1 的每一位同 nExpression2 的相应位进行比较。如果 nExpression1 和 nExpression2 的位都是 1，相应的结果位就是 1；否则相应的结果位是 0。

下表列出对 nExpression1 和 nExpression2 按位进行 AND 运算的结果：

nExpression1 位	nExpression2 位	结果位
0	0	0
0	1	0
1	0	0
1	1	1


x = 5  && 二进制为 0101

y = 6  && 二进制为 0110

? BITAND(x,y) && 返回值 4，二进制为 0100


请参阅

BITCLEAR( )，BITLSHIFT( )，BITNOT( )，BITOR( )，BITRSHIFT( )，BITSET( )，BITTEST( )，BITXOR( )


BITCLEAR( ) 函数

请参阅	示例

清除一个数值型数值的指定位（将此位设置成 0），并返回结果值。

语法

BITCLEAR(nExpression1, nExpression2)

参数

nExpression1

指定要清除位的数值。如果 nExpression1 不是整数，那么在清除位之前，将转换成整数。

nExpression2

指定 nExpression1 要清除位的位置。nExpression2 的取值范围为 0 到 31，0 表示最右端位。

返回值类型

数值型


x = 7  &&　二进制为 0111

y = 1  && 第二位（0 = 第一位）

? BITCLEAR(x,y) &&　返回值 5， 二进制为 0101


请参阅

BITAND( )，BITLSHIFT( )，BITNOT( )，BITOR( )，BITRSHIFT( )，BITSET( )，BITTEST( )，BITXOR( )


BITLSHIFT( ) 函数

请参阅	示例

返回一个数值型数值向左移动给定位后的结果。

语法

BITLSHIFT(nExpression1, nExpression2)

参数

nExpression1

指定要左移的数值。如果 nExpression1 不是整数，那么在左移之前，将转换成整数。

nExpression2

指定要左移的位数。如果 nExpression2 不是整数，那么将转换成整数。

返回值类型

数值型


x = 5  &&　二进制为 0101

y = 1  &&　左移一位

? BITLSHIFT(x,y) && 返回值 10，二进制为 1010


请参阅

BITAND( )，BITCLEAR( )，BITNOT( )，BITOR( )，BITRSHIFT( )，BITSET( )，BITTEST( )，BITXOR( )


BITNOT( ) 函数

请参阅	示例

返回一个数值型数值按位进行 NOT 运算的结果。

语法

BITNOT(nExpression)

参数

nExpression

指定按位进行 NOT 运算的数值。如果 nExpression 不是整数，那么在位操作之前转换成整数。

返回值类型

数值型

说明

BITNOT( ) 返回 nExpression 按位取反操作的结果。返回值是将 nExpression 的每一位按 0 转换成 1、1 转换成 0 后得到的结果。

下表列出了对 nExpression 按位进行 NOT 运算的结果：

nExpression 位	结果位
0	1
1	0


x = 5  && 二进制为 0101

? BITNOT(x) && 返回值为 -6


请参阅

BITAND( )，BITCLEAR( )，BITLSHIFT( )，BITOR( )，BITRSHIFT( )，BITSET( )，BITTEST( )，BITXOR( )


BITOR( ) 函数

请参阅	示例

返回两个数值型数值按位进行 OR 运算的结果。

语法

BITOR(nExpression1, nExpression2)

参数

nExpression1, nExpression2

指定按位进行 OR 运算的数值表达式。如果 nExpression1 和 nExpression2 不是整数，在进行 OR 运算之前都将转换为整数。

返回值类型

数值型

说明

BITOR( ) 将 nExpression1 的每一位同 nExpression2 的相应位进行比较。如果 nExpression1 和 nExpression2 的相应位有一个是 1，相应的结果位就是1；否则相应的结果位是 0。

下表列出对 nExpression1 和 nExpression2 按位进行 OR 运算的结果：

nExpression1 位	nExpression2 位	结果位
0	0	0
0	1	1
1	0	1
1	1	1


x = 5  && 二进制 0101

y = 6  && 二进制 0110

? BITOR(x,y) && 返回值为 7，二进制为 0111


请参阅

BITAND( )，BITCLEAR( )，BITLSHIFT( )，BITNOT( )，BITRSHIFT( )，BITSET( )，BITTEST( )，BITXOR( )


BITRSHIFT( ) 函数

请参阅	示例

返回一个数值型数值向右移动指定位后的结果。

语法

BITRSHIFT(nExpression1, nExpression2)

参数

nExpression1

指定要右移的数值。如果 nExpression1 不是整数，那么在右移之前，将转换成整数。

nExpression2

指定要右移的位数。如果 nExpression2 不是整数，那么将转换成整数。

返回值类型

数值型


x = 5  && 二进制为 0101

y = 1  && 右移一位

? BITRSHIFT(x,y) && 返回值是 2，二进制为 0010


请参阅

BITAND( )，BITCLEAR( )，BITLSHIFT( )，BITNOT( )，BITOR( )，BITSET( )，BITTEST( )，BITXOR( )


BITSET( ) 函数

请参阅	示例

将一个数值型数值的某一位设置为 1 并返回结果。

语法

BITSET(nExpression1, nExpression2)

参数

nExpression1

指定要置位的数值。如果 nExpression1 不是整数，那么在位设置之前，将转换成整数。

nExpression2

指定 nExpression1 要置位为 1 的位置。nExpression2 的取值范围为 0 到 31，0 表示最右端位。

返回值类型

数值型


x = 5  && 二进制为 0101

y = 1  && 第二位（0= 第一位）

? BITSET(x,y) && 返回值 7， 二进制为 0111


请参阅

BITAND( )，BITCLEAR( )，BITLSHIFT( )，BITNOT( )，BITOR( )，BITRSHIFT( )，BITTEST( )，BITXOR( )


BITTEST( ) 函数

请参阅	示例

确定一个数值型数值的指定位是否为 1。如果为 1，返回“真”(.T.)，否则返回“假”(.F.)。

语法

BITTEST(nExpression1, nExpression2)

参数

nExpression1

指定要检查位的数值。如果 nExpression1 不是整数，那么该数在检查之前，将转换成整数。

nExpression2

指定 nExpression1 需要检查的位置。nExpression2 的取值范围为 0 到 31，0 表示最右端位。

返回值类型

逻辑型


* 下例使用 BITTEST( ) 函数来确定一系列
* 整数是否为偶数。如果是偶数，函数 IsEven 返回
* “真”(.T.)；否则返回“假”(.F.)。

CLEAR

? '2 even? '

?? IsEven(2)  && 偶数，返回 .T.

? '3 even? '

?? IsEven(3)  && 非偶数，返回 .F.

? '0 even? '

?? IsEven(0)  && 偶数，返回 .T.

? '-13 even? '

?? IsEven(-13)  && 非偶数，返回 .F.

Function IsEven

PARAMETER nInteger

RETURN NOT BITTEST(nInteger, 0)


请参阅

BITAND( )，BITCLEAR( )，BITLSHIFT( )，BITNOT( )，BITOR( )，BITRSHIFT( )，BITSET( )，BITXOR( )


BITXOR( ) 函数

请参阅	示例

返回两个数值型数值按位进行异或运算的结果。

语法

BITXOR(nExpression1, nExpression2)

参数

nExpression1, nExpression2

指定要按位进行异或运算的两个数值。如果 nExpression1 和 nExpression2 不是整数，那么它们在位操作之前，将转换成整数。

返回值类型

数值型

说明

BITXOR( ) 函数比较 nExpression1 和 nExpression2 的每个对应位。如果一个数的某一位为 0，并且另一个数相应位为 1，那么操作结果的对应位等于 1；否则等于 0。

下表列出对 nExpression1 和 nExpression2 按位进行异或运算的结果：

nExpression1 位	nExpression2 位	结果位
0	0	0
0	1	1
1	0	1
1	1	0


x = 5  && 二进制为 0101

y = 6  && 二进制为 0110

? BITXOR(x,y) && 返回值为 3 ，二进制为 0011


请参阅

BITAND( )，BITCLEAR( )，BITLSHIFT( )，BITNOT( )，BITOR( )，BITRSHIFT( )，BITSET( )，BITTEST( )


BLANK 命令

请参阅	示例

如果发出该命令时不带任何参数，则清除当前记录中所有字段的数据。

语法

BLANK
[FIELDS FieldList]
[Scope]
[FOR lExpression1]
[WHILE lExpression2]
[NOOPTIMIZE]

参数

FIELDS FieldList

仅清除在 Fieldlist 中指定的字段。默认情况下，如果省略了 FIELDS 子句，则清除该记录的所有字段的数据。在非选定工作区中指定的任何字段名都必须以工作区别名开始。

重要内容

如果记录指针已指向当前工作区的文件末尾，那么 BLANK 命令不清除另一个相关工作区中记录的字段数据。要使 BLANK 命令能够作用在其他相关记录的字段上，记录指针必须指向当前工作区中一个已排序的记录。

Scope

指定要清除的记录范围，只有在范围之内的记录才被处理。Scope 子句包括：ALL、NEXT nRecords、RECORD nRecordNumber 及 REST。有关 Scope 子句的详细内容，请参阅 Scope（作用域）子句主题，或《开发指南》的第二章“语言概述”。包含 Scope 子句的命令仅对活动工作区中的表进行处理。

BLANK 默认的作用域范围为当前记录 (NEXT 1)。

FOR lExpression1

清除使条件 lExpression1 为“真”(.T.) 的记录中的字段数据。若 lExpression1 为可优化表达式，则 Rushmerc 优化 BLANK FOR。有关 Rushmcre 优化的详细内容，请参阅《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定要清除的记录字段数据应满足的条件，即令逻辑表达式 lExpression2 为“真”(.T.)。

NOOPTIMIZE

禁止 BLANK 进行 Rushmore 优化。有关的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或者《开发指南》的第十七章“优化应用程序”。

说明

使用 APPEND BLANK 在表尾添加一个新的空记录，使用 ISBLANK( ) 来确定一个记录的某一字段是否为空。


* 下面的示例在数据库 testdata 中打开 customer 表，显示
* 第一个记录的内容。使用 SCATTER 命令将该记录的内容存
* 进一个数组中，BLANK 命令清除该记录，然后再次显示该
* 记录内容。GATHER 命令恢复记录的原有内容，并再次显示
* 恢复后的记录内容。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

CLEAR

DISPLAY  && 显示当前记录

SCATTER TO gaCustomer  && 创建一个数组，存储记录内容

BLANK  && 清除该记录

DISPLAY  && 显示空记录

GATHER FROM gaCustomer  && 恢复原记录内容

DISPLAY  && 显示恢复后的记录


请参阅

APPEND，EMPTY( )，ISBLANK( )，REPLACE，SET OPTIMIZE


BOF( ) 函数

请参阅	示例

确定当前记录指针是否在表头。

语法

BOF([nWorkArea | cTableAlias])

参数

nWorkArea

指定在非当前工作区中打开的表所在的工作区号。

cTableAlias

指定在非当前工作区中打开的表别名。

如果表是在非当前选定工作区中打开的，那么使用这些可选的参数为表指定别名或所在的工作区号。若此表未在指定的工作区中打开，则 BOF( ) 返回“假”(.F.)。

返回值类型

逻辑型

说明

BOF( ) 函数可以用来测试一个表的记录指针是否位于文件头。如果用户尝试将记录指针移动到表的第一条记录之前，则 BOF( ) 返回“真” (.T.)。


* 下面的示例打开 customer 表并显示一个窗口，使用命令
* 按钮可以向前或向后移动表的记录指针，根据记录指针移
* 动的方向，Visual FoxPro 测试该指针是在文件末尾 (EOF)
* 还是在文件头 (BOF)。如果任一条件为“真”(.T.)，
* Visual FexPro 显示正确的内容，并移动记录指针到一个
* 新的位置。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

SET TALK OFF

CLEAR

ACTIVATE SCREEN

@ 2,1 SAY 'Company: '+ company

DEFINE WINDOW wSkip FROM 9,10 TO 14,65 DOUBLE COLOR SCHEME 5

ACTIVATE WINDOW wSkip

@ 1,5 GET gnChoice FUNCTION '*HN \<Forward;\<Backward;\<Quit' ;

DEFAULT 0 SIZE 2,14 VALID CHOICE( )

READ CYCLE

RELEASE WINDOW wSkip

PROCEDURE choice

DO CASE

CASE gnChoice = 1

SKIP

IF EOF('CUSTOMER')

WAIT WINDOW 'End of file encountered' NOWAIT

SKIP -1

ENDIF

CASE gnChoice = 2

SKIP -1

IF BOF('CUSTOMER')

WAIT WINDOW 'Beginning of file encountered' NOWAIT

GO TOP

ENDIF

CASE gnChoice = 3

CLEAR READ

ENDCASE

ACTIVATE SCREEN

@ 2,1 CLEAR TO 2,50

@ 2,1 SAY 'Company: '+ company

RETURN .T.


请参阅

EOF( )


BorderColor 属性

请参阅

指定对象的边框颜色。

应用于

组合框，命令组，容器对象，控制对象，图象，线条，列表框，选项组，页框，形状，文本框

语法

Object.BorderColor[ = nColor]

设置

nColor

指定边框的颜色值，下表列出了常用的颜色值：

颜色	RGB 值	nColor 值
白色	255, 255, 255	16777215
黑色	0, 0, 0	0
灰色	192, 192, 192	12632256
深灰色	128, 128, 128	8421504
红色	255, 0, 0	255
深红色	128, 0, 0	128
黄色	255, 255, 0	65535
深黄色	128, 128, 0	32896
绿色	0, 255, 0	65280
深绿色	0, 128, 0	32768
青色	0, 255, 255	16776960
深青色	0, 128, 128	8421376
蓝色	0, 0, 255	16711680
深蓝色	0, 0, 128	8388608
洋红色	255, 0 ,255	16711935
深洋红色	128, 0, 128	8388736
说明

设计和运行时可用。

利用 RGB( ) 函数可以将三元色转换成一个复合的 nColor。


请参阅

BackColor 属性，颜色概述，GetColor( )，RGB( )


BorderStyle 属性

请参阅

指定对象的边框样式。

应用于

命令组，编辑框，表单，图象，标签，线条，选项组，_SCREEN，形状，文本框

语法

Object.BorderStyle[ = nStyle]

设置

nStyle

对于命令组、编辑框、图象、标签、选项组或文本框，BorderStyle 属性可取下列值：

设置	说明
0	无。图象和标签的默认值。
1	固定单线。命令组、编辑框、选项组或文本框的默认值
对于线条或形状，BorderStyle 属性可取下列值：

设置	说明
0	透明
1	（默认值）实线。边框的外边缘就是形状的外边缘
2	虚线
3	点线
4	点划线
5	双点划线
对于一个表单对象，BorderStyle 属性可取下列值：

设置	说明
0	无边框
1	单线边框
2	双线边框
3	（默认值）可调边框
4	保留供将来使用
说明

设计和运行时可用。

如果 BorderWidth 属性的设置大于 1，那么不管 BorderStyle 的设置如何，都将绘成实线边框；若 BorderWidth 设置为 1，BorderStyle 的效果将如上表所述。


请参阅

BorderColor 属性，BorderWidth 属性，DrawStyle 属性，DrawWidth 属性


BorderWidth 属性

请参阅

指定一个控制的边框宽度。

应用于

容器对象，控制对象，线条，页框，形状

语法

Control.BorderWidth[ = nWidth]

设置

nWidth

指定边框宽度。范围是 0 ~ 8192。

附注

如果 BorderWidth 属性的设置大于 1，则忽略 BorderStyle 属性的设置。

说明

设计和运行时可用。

当 BorderWidth 属性设置为 0 时，控制没有边框。对 PageFrame 控制不能改变 BorderWidth 属性设置。


请参阅

BorderStyle 属性


Bound 属性

请参阅

确定一个列对象里的控制是否与列的控制源绑定。

应用于

列

语法

Column.Bound[ = lExpr]

设置

lExpr

Bound 属性的设置如下：

设置	说明
“真”(.T.)	（默认值）控制与列的控制源绑定。
“假”(.F.)	控制不与列的控制源绑定。
说明

设计和运行时可用。

如果列的 Bound 属性设置为“真”(.T.)，则列的 ControlSource 属性设置适用于该列和它的所有控制，这时若想再修改控制的 ControlSource 属性，则会出错。如果列的 Bound 属性设成“假”(.F.)，那么用户可以直接设定列的控制的 ControlSource 属性。如果用户再设置列的 ControlSource 属性，那么该值将改写控制的 ControlSource 原值。

通常，控制对应的数据类型如下表所示：

列控制基类	常用的列数据类型
复选框	逻辑型，数值型
组合框	字符型，数值型
命令按钮	字符型，数值型
编辑框	字符型
列表框	字符型，数值型
选择按钮	字符型，数值型
微调	字符型，数值型
文本框	除通用型或备注型外的任何数据类型
附注

不能将一个控制与一个通用型或备注型的列绑定在一起。


请参阅

AddObject 方法，ControlSource 属性，CurrentControl 属性，Sparse 属性


BoundColumn 属性

请参阅

对于一个多列的列表框或组合框，确定哪一个列与该控制的 Value 属性绑定。

应用于

组合框，列表框

语法

Control.BoundColumn[ = nCol]

设置

nCol

指定与 Value 属性绑定的列的编号，nCol 的默认值为 1。

说明

设计和运行时可用。

在一个多列的列表框或组合框中，当用户需要将某一列的数据（不是第一列）保存在控制的 Value 属性中时，应使用 BoundColumn 属性。


请参阅

Value 属性


Box Method 方法
Box 方法

请参阅

在表单对象上画矩形。

应用于

表单，_SCREEN

语法

Object.Box(nXCoord1, nYCoord1, nXCoord2, nYCoord2)
  或者
Object.Box(nXCoord2, nYCoord2)

参数

nXCoord1, nYCoord1

指定矩形起始点的坐标。度量单位由表单的 ScaleMode 方法确定。如果省略了这些参数，则使用 CurrentX 和 CurrentY 值。

nXCoord2, nYCoord2

指定矩形的终点。

说明

矩形的线宽由 DrawWidth 属性确定。如何在背景上绘出一个矩形取决于 DrawMode 和 DrawStyle 属性设置。当调用 Box 方法时，将 CurrentX 和 CurrentY 属性设置为参数 nXCoord2 和 nYCoord2 指定的终点坐标。


请参阅

CurrentX, CurrentY 属性，DrawMode 属性，DrawStyle 属性，DrawWidth 属性，ScaleMode 属性


_BOX 系统内存变量

请参阅

打印框。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_BOX = lExpression

参数

lExpression

确定是否打印文本周围的框。若 lExpression 为“真”(.T.)（默认值），则打印框；否则不打印。

说明

_BOX 只影响由 DEFINE BOX 命令创建的框。用户可以使用 @ ... BOX 或 @ ... TO 在屏幕上或窗口内绘制框。


请参阅

@ ... BOX，@ ... TO，DEFINE BOX


BROWSE 命令

请参阅

打开浏览窗口。

语法

BROWSE
[FIELDS FieldList]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FOR lExpression1 [REST]]
[FORMAT]
[FREEZE FieldName]
[KEY eExpression1 [, eExpression2]]
[LAST | NOINIT]
[LOCK nNumberOfFields]
[LPARTITION]
[NAME ObjectName]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLGRID] [NORGRID]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NOREFRESH]
[NORMAL]
[NOWAIT]
[PARTITION nColumnNumber [LEDIT] [REDIT]]
[PREFERENCE PreferenceName]
[SAVE]
[TIMEOUT nSeconds]
[TITLE cTitleText]
[VALID [:F] lExpression2 [ERROR cMessageText]]
[WHEN lExpression3]
[WIDTH nFieldWidth]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

FIELDS FieldList

指定显示在浏览窗口中的字段。这些字段以 Fieldlist 指定的顺序显示。在该字段列表中可包含其他相关表中的字段。在包含一个相关表的字段时，应在字段名前面放一个句点号及相关表的别名。

如果忽略 FIELDS 子句，表中的所有字段按其在表结构中出现的顺序显示。

字段列表可以是字段或计算结果字段的任意组合。

字段列表的语法是：

FieldName1

[:R]

[:nColumnWidth]

[:V = lExpression1 [:F] [:E = cMessageText]]

[:P = cFormatCodes]

[:B = eLowerBound, eUpperBound [:F]]

[:H = cHeadingText]

[:W = lExpression2]

[, FieldName2 [:R]...]

计算结果字段：

字段列表可包含创建计算结果字段的语句。计算结果字段包含由表达式创建的只读数据。该表达式可以是任何格式，但必须是有效的 Visual FoxPro 表达式。

用于创建计算结果字段的语句格式为：

CalculatedFieldName = eExpression

下面的示例创建一个名为 location 的计算结果字段：

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

BROWSE FIELD location = ALLTRIM(city) + ', ' + country

city 和 country 都是当前选定表的字段名。

FIELDS 子句的字段列表包含对显示于浏览窗口中的字段进行特殊处理的选项：

:R

指定字段为只读字段，字段包含的数据可显示但不可编辑。

下例中打开的浏览窗口包含 cust_id 和 company 字段。cust_id 字段为只读字段，不可更改。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

BROWSE FIELD cust_id:R, company

:nColumnWidth

指定字段的显示列数。nColumnWidth 值不影响表中字段的大小，只改变字段在浏览窗口中显示的方式。

:V = lExpression1 [:F] [:E = cMessageText]

检验选项 (:V) 在浏览窗口中执行字段级数据有效性检查。若从一个字段移走光标时，lExpression1 值为“真”(.T.)，则认为输入到该字段的数据正确，光标移向下一字段。

若 lExpression1 值为“假”(.F.)，则认为所输入数据不正确，光标停留在当前字段并显示一条错误信息。若 lExpression1 值为 0，则认为所输入数据不正确，光标仍停留在当前字段但不显示错误信息。

默认情况下，lExpression1 只在修改字段时求值。欲强制执行检验，需包括 :F 选项。

用户可包含下面所述的 :E 选项来显示自己定义的错误信息。对备注字段不执行检验选项。

:F

决定当从一个字段移走光标或激活另一个窗口时，是否对检查选项中的表达式求值。若不包括 :F，则 lExpression1 仅在修改字段时求值。若包括 :F，即使不修改字段也对 lExpression1 求值。

:E = cMessageText

如果有效性检查表达式 :V = lExpression1 值为“真”，则允许光标移动。如果该表达式值为“假”，光标停留在当前字段，Visual FoxPro 产生一个错误信息。

如果包含错误选项 (:E)，cMessageText 代替系统错误信息。cMessageText 仅在 SET NOTIFY 为 ON 时显示。若 SET BELL 为 ON，则响铃。

如果 :V = lExpression1 值为 0，则不显示错误信息，光标停留于当前有效字段。这使得用户可以在有效性检查例程中显示自己定义的错误信息。

下例打开 products 表并显示 product_id 和 prod_name 字段。product_id 字段是一个可接收 5 个数字的数值型字段。在该例中，认为大于 100 的 product_id 是无效的。

:V 指定有效性准则。 不论数据是否更改，:F 都强制执行有效性检查。:E 使用用户自定义错误信息来代替 Visual FoxPro 系统错误信息。在 Visual FoxPro、ForPro for Windows 和 FoxPro for Macintosh 中，错误信息显示在 Visual FoxPro 主窗口底部的状态栏中。

按下 Esc 键可关闭浏览窗口。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

IF _WINDOWS OR _MAC

SET STATUS BAR ON

ENDIF

USE products

BROWSE FIELDS in_stock :V = in_stock < 100 ;

:F ;

:E = 'The stock amount must be less than 100'

:P = cFormatCodes

如果包含 FIELDS 子句，用户也可为列表中的每一字段指定一个图片选项 (:P)。图片选项可创建一个代码列表，该列表控制浏览窗口中每一字段的显示和数据输入。cFormatCodes 即为代码列表。

有关使用图片格式代码的详细内容，请参阅 @ ... GET 和 @ ... SAY 主题。除 M 代码外，所有在 @ ... GET 和 @ ... SAY 中可用的函数和图片格式代码，均可用于 PICTURE 和 FUNCTION 子句。

下例采用图片选项，只允许指定格式的数值型数据输入到 unit_price 字段中。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

BROWSE FIELDS unit_price :P = '99,999.99'

:B = eLowerBound, eUpperBound [:F]

指定一对边界，字段数据必须处于边界范围内。边界表达式 eLowerBound 和 eUpperBound 必须与字段的数据类型匹配，并且不能是用户自定义函数。如果数据不能处在 eLowerBound 和 eUpperBound 之间，则出现一条系统错误信息，指出数据允许的范围。

默认情况下，仅在修改字段内容时对输入的数据作边界值检查。要想强制执行边界值检查，需包含强制有效性选项 (:F)。

下例确保 in_stock 字段值处于 1 和 100 之间。按 Esc 键，可关闭浏览窗口。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

BROWSE FIELDS in_stock :B = 1, 100 	:F

:H = cHeadingText

用 cHeadingText 指定的自定义标头替换默认字段名。默认情况下，在浏览窗口中用字段名作列标头。

下例为所显示的字段提供自定义列标头。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

BROWSE FIELDS prod_name :H = 'Product Name:', ;

unit_price :H = 'Price per Unit:'

:W = lExpression2

根据逻辑表达式 lExpression2 的值，用户可以禁止光标移向某一字段。如果 lExpression2 值为“假” (.F.)，则禁止光标移向该字段。如果 lExpression2 值为“真” (.T.)，光标可移向该字段。lExpression2 支持用户自定义函数。

如果禁止光标移向所有字段，则当前记录标记为只读记录。只有在每一字段均包含一个值为“假”的 WHEN 子句时，这种情况才出现。

FONT cFontName [, nFontSize]

指定浏览窗口的字体及字体大小。字符型表达式 cFontName 指定字体，数值型表达式 nFontSize 指定字体大小。例如，下列子句指定显示于浏览窗口的字段为 16 磅 Courier 字体。

FONT 'Courier',16

如果在包含 FONT 子句的同时省略了字体大小 nForitSize，则浏览窗口采用 10 磅字体。在 Visual FoxPro 和 FoxPro for Windows 中，如果省略 FONT 子句，则采用 9 磅 Arial 字体；而在 FoxPro for Macintosh 中，则采用 10 磅 Geneva 字体。

在 Visual FoxPro 和 FoxPro for Windows 中，如果用户指定的字体不可用，则用具有相似字体特征的字体代替。

在 FoxPro for Macintosh 中，若指定的字体不可用，则采用 Chicago 字体。

在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，指定浏览窗口的字形。如果省略 STYLE 子句，则采用常规字形。

在 Visual FoxPro 和 FoxPro for Windows 中，如果指定的字形不可用，则用具有相似特征的字形代替。

在 FoxPro for Macintosh 中，若指定的字形不可用，则采用常规字形。

在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro 和 FoxPro for Windows）
T	透明
U	下划线
可用多个字符的组合来指定字形。下例打开一个浏览窗口，并采用下划线字形。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

IF _WINDOWS

BROWSE FIELDS contact FONT 'System', 15  STYLE 'NU'

ENDIF

IF _MAC

BROWSE FIELDS contact FONT 'Geneva', 14  STYLE 'NU'

ENDIF

FOR lExpression1

指定一个条件，确定只有 lExpression1 为“真”的记录才显示于浏览窗口。

若 lExpression1 是一个可优化表达式，则 Rushmore 优化由 BROWSE FOR 指定的查询。为达到最佳性能，需在 FOR 子句中采用可优化表达式。有关 Rushmore 可优化表达式的内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

包含 FOR 子句使记录指针移向符合该条件的第一条记录。包含 REST 子句使记录指针处于当前位置。

REST

防止在 FOR 子句打开浏览窗口时，记录指针从当前位置移向表顶部。若不包含 REST，默认情况下，BROWSE 将记录指针放置在表顶部。

FORMAT

使用格式文件来控制浏览窗口的显示和输入数据的格式。首先应用 SET FORMAT 打开格式文件。以下是从格式文件中提取的、应用于浏览窗口的信息：

 •	   要浏览的字段列表

 •	   所有 VALID 子句

 •	   所有 WHEN 子句

 •	   所有 RANGE 子句

 •	   字段大小（如 PICTURE 子句所指定）

 •	   所有 SAY 表达式（包含 BROWSE 计算结果字段）

下例采用格式文件检查输入到浏览窗口中的数据，忽略由 @ ... GET 指定的位置。

第一行创建一个浏览字段 (cust_id)，该字段为 5 个字符宽，并且只允许输入字母和数字。第二行创建一个浏览字段 (company)，该字段不能包含空值，但最多只能包含 20 个字母字符。

第三行创建一个浏览字段 (contact)，只在该字段为空时才输入数据。最后一行创建一个计算结果字段（由 @ ... SAY 指出），由一个已删除空格的 20 个字符宽的字段显示 city 和 country 字段的内容。

以下是 CUSTENTR.FMT 格式文件的内容，用于检查输入到 customer 表中的数据：

@ 3,0 GET cust_id PICTURE 'NNNNN'

@ 3,0 GET company VALID company != SPACE(40) ;

PICTURE 'AAAAAAAAAAAAAAAAAAAA'

@ 3,0 GET contact WHEN contact = SPACE(40)

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

SET FORMAT TO custentr.fmt

BROWSE FORMAT

FREEZE FieldName

允许在浏览窗口中只修改一个字段。使用 FieldName 指定该字段，其他字段可显示但不可编辑。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

BROWSE FIELDS phone :H = 'Phone Number:' , ;

company :H = 'Company:' ;

FREEZE phone

KEY eExpression1 [, eExpression2]

限制显示于浏览窗口的记录范围。用 KEY 指定显示于浏览窗口的记录的一个索引关键字值 (eExpression1) 或关键字值的范围 (eExpression1，eExpression2)。所浏览的表必须已建立索引，并且索引关键字值或 KEY 子句的值必须与主索引文件或标识的索引表达式为同一数据类型。

例如，customer 表包含一个保存邮政编码的字符字段。如果该表已建立邮政编码字段索引，则可用 KEY 子句指定邮政编码的范围。

下例中，只有在 10,000 到 30,000 范围内的邮政编码记录才显示在浏览窗口。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

SET ORDER TO postalcode

BROWSE KEY '10000', '30000'

LAST | NOINIT

保存浏览窗口外观的任何配置的变更。这些变更可保存于 FOXUSER 文件中，包括字段列表、每一字段的大小、浏览窗口的位置及尺寸等内容的变更。

如果用户发出带有 LAST 或 NOINIT 子句的 BROWSE 命令，在 SETRESOURCE 为 ON 的情况下，以最后保存于 FOXUSER 文件中的配置打开浏览窗口，恢复以最后一个 BROWSE 命令创建的原有的浏览窗口配置。如果在命令窗口中最后发出的 BROWSE 命令包含一长串子句，则发出带有 LAST 或 NOINIT 选项的 BROWSE 命令，可以避免重新键入命令。有关 FOXUSER 文件的详细内容，请参阅 SET RESOURCE。

如果最后一个浏览窗口是由一个包含 PREFERENCE 子句的 BROWSE 命令打开的，BROWSE LAST 将不再恢复原配置。

如果用户按 Ctrl+Q 退出浏览，则任一当前工作区中的浏览窗口配置的变更，都不会被保存。

LAST 子句等同于 NOINIT 子句。NOINIT 提供 dBASE 兼容。

LOCK nNumberOfFields

指定不需滚动就能在浏览窗口左分区中看见的字段数。分区的大小可自动调整以显示 nNumberOfFields 指定的字段数。

LPARTITION

指定光标位置为浏览窗口左分区的第一个字段。默认情况下，打开浏览窗口时，光标位于右分区的第一字段。

NAME ObjectName

仅用于 Visual FoxPro。

创建浏览窗口的一个对象引用，允许在操作浏览窗口时使用表格控制的面向对象属性。有关 Visual FoxPro 中面向对象程序设计的详细内容，请参阅《开发指南》的第三章“面向对象程序设计”。有关表格控制属性（表格控制属性用于指定由 Name 子句创建的浏览窗口）的详细内容，请参阅表格控制主题。

NOAPPEND

禁止用户通过如下方式添加表记录：在 Visual FoxPro 中按 Ctrl+Y 键，或在 FoxPro 早期版本中按 Ctrl+N 键，或选择 Visual FoxPro 的表菜单的追加记录命令和 FoxPro 早期版本浏览菜单中的追加记录命令。

重要内容

包含 NOAPPEND 并不禁止用户从程序中向浏览窗口中添加记录（该例程由 VALID、WHEN 或 ON KEY LABEL 等命令创建）。

NOCLEAR

在 FoxPro for MS-DOS 中，窗口关闭之后，仍保持显示浏览窗口的图像。该图象不是一个活动的浏览窗口。使用 CLEAR 命令可删除浏览窗口图象。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，忽略 NOCLEAR。

NODELETE

禁止在浏览窗口中为记录作删除标记。默认情况下，按 Ctrl+T 键、选择 Visual FoxPro 中的表菜单或 FoxPro 早期版本浏览菜单的切换删除标记项，或单击要删除的记录的最左边一列，可为记录作删除标记。

重要内容

包含 NODELETE 不禁止用户在程序中为浏览窗口中的记录作删除标记（该例程由 VALID，WHEN 或 ONKEY LABEL 等命令创建）。

NOEDIT | NOMODIFY

禁止用户修改表。NDEDIT 等同于 NOMDDIFY。包含其中任何一个子句，用户可以浏览或搜索表，可以添加或删除记录，但不能编辑。

NOLGRID

删除浏览窗口左分区中字段的网格线。

NORGRID

删除浏览窗口右分区中字段的网格线。

NOLINK

将浏览窗口的左右两部分分开。默认情况下，浏览窗口的左分区和右分区链接在一起，因此滚动其中一区时，另一区也随之滚动。

NOMENU

从系统菜单栏中删除 Visual FoxPro 中的表菜单标题和 FoxPro 早期版本中的浏览菜单标题，禁止访问浏览菜单。

NOOPTIMIZE

禁止 BROWSE 的Rushmore 优化。有关的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

NOREFRESH

禁止对浏览窗口进行刷新。浏览窗口以 SET REPRESH 确定的速度进行刷新。NOREPRESH 对只读文件非常有用，并且可以改进性能。

NORMAL

使用通常的默认设置打开浏览窗口，如颜色、尺寸、标题、位置和控制选项（如 GROW，FLOAT，ZOOM 等等）。如果省略 NORMAL，而当前输出窗口为用户自定义窗口，浏览窗口使用这些用户自定义设置。

NOWAIT

打开浏览窗口之后继续运行程序。程序不必等待浏览窗口关闭，而是继续执行 BROWSE NOWAIT 之后的程序行。若在程序中发出 BROWSE 命令时省略 NOWAIT，则浏览窗口打开后，暂停执行程序，直至浏览窗口关闭。

NOWAIT 只用于程序中。在命令窗口中发出 BROWSE 命令时包含 NOWAIT 无此作用。

PARTITION nColumnNumber

将浏览窗口拆分为左右分区，nColumnNumber 指定拆分条所在的列数。例如，nColumnNumber 为 20，则拆分条放置于浏览窗口的第 20 列。

LEDIT

指定浏览窗口的左分区以编辑方式显示。

REDIT

指定浏览窗口的右分区以编辑方式显示。下例以位于第 20 列的拆分条打开浏览窗口，并以编辑方式打开右分区。

若同时包含 LEDIT、REDIT 两个关键字，以编辑方式打开两个分区。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

BROWSE PARTITION 20 REDIT

PREFERENCE PreferenceName

保存浏览窗口的属性和选项以供以后使用。PREPERENCE 不象 LAST 以浏览窗口在先前工作区中出现的方式恢复该窗口，而是将浏览窗口的属性随时存储于 FOXUSER 资源文件中，PREFERENCE 可在任何时候恢复。

第一次发出带有指定的状态名的 BROWSE 命令时，在 FOXUSER 文件中创建一个保存浏览窗口配置的的数据项。以后用同样的状态名发出 BROWSE 命令时，恢复浏览窗口该状态。在浏览窗口关闭时，更新该状态。

状态名可为 10 个字符长，必须以字母或下划线开头，可包括字母、数字或下划线的任意组合。

如果您喜爱某种状态，可禁止其被更改。关闭浏览窗口，发出 SET RESOURCE OFF 命令，将 FOXUSER 作为一个表打开，并将逻辑字段 READONLY 的值更改为“真”(.T.)，可将包含状态的记录改为只读记录。

有关 FOXUSER 资源文件的详细内容，请参阅 SET RESOURCE。

若按 Ctrl+Q 键退出浏览窗口，则资源文件不保存任何对浏览窗口的更改。

REST

防止记录指针从当前位置移向表的顶部。默认情况下，BROWSE 将记录指针指向表的顶部。

SAVE

保持浏览窗口及其所有备注字段的文本编辑窗口为活动和可视（打开）的。用键盘或鼠标访问其他打开的窗口后，可以返回浏览窗口。

SAVE 仅用于程序中。在命令窗口中发出 BROWSE 命令时包含 SAVE，则无此作用。默认情况下，BROWSE SAVE 以交互方式工作。

TIMEOUT nSeconds

指定浏览窗口等待输入的时间。数值型表达式 nSeconds 指定在没有输入的情况下，浏览窗口可保持多少秒才自动关闭。

TIMEOUT 仅用于程序中。在命令窗口中发出 BROWSE 命令时包含 TIMEOUT，则无此作用。下例中，如果在 10 秒内没有输入，则关闭浏览窗口：

DEFINE WINDOW wBrowse FROM 1,1 TO 24,40 ;

CLOSE ;

GROW ;

COLOR SCHEME 10

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

BROWSE WINDOW wBrowse ;

FIELDS phone :H = 'Phone Number:' , ;

company :H = 'Company:' ;

TIMEOUT 10

RELEASE WINDOW wBrowse

TITLE cTitleText

以 cTitleText 指定的标题改写显示于浏览窗口标题栏中的默认表名或别名。否则，要浏览的表的名称或别名显示于标题栏中。

如果发出 BROWSE WINDOW 命令将浏览窗口置于用户自定义窗口中，则浏览窗口的标题替换用户自定义窗口的标题。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

BROWSE;

TITLE 'My Browse Window' ;

FIELDS phone :H = 'Phone Number' , ;

company :H = 'Company:'

VALID lExpression2

在浏览窗口中执行记录级有效性检测。VALID 子句仅在记录已被更改并且试图将光标移至另一记录时执行。如果只是对备注字段的更改，不执行 VALID 子句。

如果 VALID 返回值为“真”(.T.)，用户可将光标移向另一记录；如果 VALID 返回值为“假”(.F.)，光标停留在当前记录上，Visual FoxPro 产生一条错误信息。如果 VALID 返回值为 0，光标停留在当前记录上，但不显示错误信息。

不要把 VALID 子句和启用字段级有效性的检验选项 (:V) 相混淆。

:F

在用户将光标移至下一个记录之前，强制执行 VALID 子句。这种情况下，即使记录不更改，也执行 VALID 。

ERROR cMessageText

指定一条错误信息来改写系统默认的错误信息。在 VALID 返回值为“假”(.F.) 时，Visual FoxPro 显示 cMessageText。

WHEN lExpression3

用户将光标移向另一记录时对 lExpression3 进行求值。如果 lExpression3 的值为“真”(.T.)，用户可修改所移向的记录，如果 lExpression3 值为“假”(.F.) 或 0，用户所移向的记录为只读记录，不可修改。

在激活另一窗口时，不执行 WHEN 子句。

WIDTH nFieldWidth

将浏览窗口中所有字段的字符数限制为 nFieldWidth，使用左右箭头或水平滚动栏，可水平滚动字段内容。包括 WIDTH 子句并不修改表中字段的大小，只修改字段在浏览窗口中的显示方式。如果已由 FIELDS 子句指定一个字段的宽度，它将改写 WIDTH 子句所指定的该字段的宽度。

WINDOW WindowName1

指定一个用户自定义窗口，浏览窗口采用它的特性。例如，如果该用户自定义窗口是由 FLOAT 子句创建的，则浏览窗口可移动。所指定的窗口不需要是活动的和可见的，但必须是已定义的。在 FoxPro for MS-DOS 中，如果该窗口是由一注脚定义的，则该注脚不出现，而以浏览窗口滚动栏取代。

IN [WINDOW] WindowName2

指定打开浏览窗口的父窗口，该浏览窗口并不采用父窗口的特性。在父窗口内激活的浏览窗口不能移出父窗口。如果父窗口移动，则浏览窗口随之移动。

要访问浏览窗口，必须首先用 DEPINE WINDOW 定义父窗口，而且父窗口是活动和可见的。

IN SCREEN

在用户自定义窗口为活动窗口时，将浏览窗口放置在 Viusal FoxPro 主窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将浏览窗口放置在 Macintosh 桌面上，浏览窗口和 FoxPro 主窗口处于同一平面。浏览窗口可移出 FoxPro 主窗口之外，而且可被 FoxPro 主窗口隐藏起来。当包含 MACDESKTOP 子句时，浏览窗口和 FoxBase+for Macintosh 中的浏览窗口的行为相同。

包含 MACDESKTOP 子句可改写当前 SET MACDESKTOP 设置。在不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 确定浏览窗口是放置在 FoxPro 主窗口中还是放置在 Macintosh 桌面上。有关将浏览窗口放置在 FoxPro 主窗口还是放置在 Macintosh 桌面的详细内容，请参阅 SET MACDESKTOP。

COLOR SCHEME nSchemeNumber

指定用于浏览窗口的配色方案的编号。在 FoxPro for MS-DOS 中，浏览窗口的默认颜色由 COLOR SCHEME 10 (Browse) 指定。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，浏览窗口假定配色方案已由 Windows 的颜色控制面板建立。

COLOR ColorPairList

指定用于浏览窗口的颜色对。下表显示在 FoxPro for MS-DOS 中每一颜色对控制的相应单元。

颜色对编号	浏览窗口单元
1	其他记录
2	当前字段
3	边框
4	浏览窗口活动时的标题颜色
5	其他窗口活动时的标题颜色
6	选定的文本
7	当前记录
8	阴影
在 FoxPro for MS-DOS 中，编号为 1 的颜色对所指定的第二种颜色，指示表格的背景色；编号为 3 的颜色对中的第二种颜色为表格的前景色。

说明

浏览窗口允许查看、编辑表中的记录，并追加附加记录。Visual FoxPro 允许同时打开多个浏览窗口。

若按 Esc 键退出浏览窗口，则放弃对最后一个字段所做的更改。然而，若在修改一个字段后移向另一记录，则可保存对此字段所做的更改。

有关在浏览窗口中定位的详细内容，请参阅在表中移动主题或《用户指南》的第三章“创建表”。

SET SKIP 支持

允许用户建立两表之间的一对多关系。对于父表中的每一条记录，均可在子表中有多个相关记录。如果创建一对多关系，那么使用 BROWSE 命令可以查看父表和子表中的记录。

父记录仅显示一次，接着显示子表的第一条匹配记录。随后的任何匹配记录均在父记录和第一条匹配记录之后显示。

在 FoxPro for MS-DOS 中，除第一条匹配记录外，包含父表信息的任何一列中均显示阴影块。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，重复父信息的填充字符决定于当前浏览窗口的字体。

如果记录指针位于一条父记录，在浏览窗口中可通过按 CTRL+DOWN ARROW 将指针移至下一父记录，或按 CTRL+UP ARROW 将指针移向前一父记录。有关创建一对多关系的详细内容，请参阅 SET SKIP。

下例使用 SET SKIP 在两表间创建一对多关系。父表 (customer) 中有一个记录，子表 (orders) 包含对应于父表中每一条记录的多个记录。在该关系创建后，打开浏览窗口，并显示父表和子表中的记录。

FIELDS 子句的字段列表包含父表和子表的记录。字段名前应加上表别名（orders 或 customer）和句点号分隔符。

CLEAR

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer ORDER cust_id IN 0	&& 父表

USE orders ORDER cust_id IN 0  && 子表

SELECT customer	  && 返回父工作区

SET RELATION TO cust_id INTO orders  	&& 建立关系

SET SKIP TO orders  && 一对多关系

WAIT WINDOW 'Scroll to see shipping dates for each customer' NOWAIT

BROWSE FIELDS customer.cust_id :H='Customer Number', ;

customer.city :H='Customer City', orders.shipped_on

有用的函数

几个 Visual FoxPro 函数返回浏览窗口的有用信息。

函数	说明
VARREAD( )	返回活动浏览窗口中光标所在的字段名
RECNO( )	返回活动浏览窗口中选定的记录号
ROW( )	返回活动浏览窗口中光标的行位置
COL( )	返回活动浏览窗口中光标的列位置


请参阅

CHANGE, EDIT，表格控制，SET SKIP，WTITLE( )


_BROWSER 系统内存变量

请参阅

包含类浏览器的应用程序名称。

语法

_BROWSER = cProgramName

参数

cProgramName

指定类浏览器应用程序。如果已安装类浏览器应用程序，_BROWSER 包含 BROWSER.APP。Visual FoxPro 的专业版中有 BROWSER.APP。

如果类浏览器不位于当前 Visual FoxPro 默认目录下，则应在类浏览器应用程序名中包含路径。

使用以下语法，可以在 Visual FoxPro 配置文件中指定类浏览器应用程序。

_BROWSER = cProgramName

可以在命令窗口或程序中通过向 _BROWSER 存储新的应用程序名而指定另一个类浏览器。

说明

Visual FoxPro 的专业版提供一个名为 BROWSER.APP 的类浏览器。BROWSER.APP 显示可视类库 (.VCX) 中类之间的关系。默认情况下，BROWSER.APP 安装在 Visual FoxPro 目录中。

用户可发出下列命令运行类浏览器：

DO (_BROWSER)

发出该命令在工具菜单中添加一个类浏览器菜单项，并启动类浏览器。选择该类浏览器菜单项，可再次运行类浏览器。

若要在工具菜单中添加一个类浏览器菜单项但不启动类浏览器。可发出以下命令：

DO (_BROWSER) WITH 0

用户也可运行一个特殊可视类库或一个对象引用的类浏览器，也可任意包含一个初始选定的类名。例如，下面的命令启动类浏览器，打开按钮可视类库并选择 VCR 类：

DO (_BROWSER) WITH HOME( ) + '\SAMPLES\CONTROLS\BUTTONS.VCX', 'VCR'

有关类浏览器的详细内容，请参阅示例文件主题。


请参阅

CREATE CLASS，CREATE CLASSLIB，CREATE FORM，CREATEOBJECT( )，DEFINE CLASS，系统内存变量概述


BufferMode 属性

请参阅

指定保守式更新还是开放式更新记录。

应用于

表单，表单集，_SCREEN

语法

Object.BufferMode[ = nValue]

设置

nValue

BufferMode 属性的设置为：

设置	说明
0	（默认值）无。在开始编辑时，记录锁定。在记录指针移动时，写字段。模拟 FoxPro 2.x 行为。
1	保守式。在开始编辑时，记录锁定，在记录指针移动时写字段。可用 TABLE REVERT( ) 来撤消对当前记录的更改。
2	开放式。编辑时记录不锁定。当使用 TABLE UPDATE( ) 将记录写向磁盘时，Visual FoxPro 试图锁定记录。
说明

设计和运行时可用。

若 BufferMode 设置为 1 或 2 ，网格控制所用的任何临时表采用表缓冲。数据的其他任何控制均采用行缓冲。


请参阅

BufferModeOverride 属性，TABLEREVERT( )，TABLEUPDATE ( )


BufferModeOverride 属性

请参阅

指定是否改写表单级或表单集级的 BufferMode 属性设置。

应用于

临时表

语法

DataEnvironment.Cursor.BufferModeOverride[ = nValue]

设置

nValue

下表列出了 BufferModeOverride 属性的设置：

设置	说明
0	无。不使用缓冲。
1	（默认值）使用表单设置。在表单级或表单集级使用 BufferMode 属性设置。
2	保守式行缓冲。锁定记录并缓冲更改，直至记录指针移动。可使用 TABLEREVERT( ) 函数撤消更改。
3	开放式行缓冲。允许编辑单个记录，仅在将记录写入磁盘时锁定记录。可使用 TABLEREVERT( ) 函数撤消更改。
4	保守式表缓冲。锁定每个编辑的记录，但在调用 TABLEUPDATE( ) 函数前记录不写入磁盘。可使用 TABLEREVERT( ) 函数撤消更改。
5	开放式表缓冲。允许编辑所有记录，在以 TABLEUPDATE( ) 函数将记录写入磁盘前不锁定该记录。可使用 TABLEREVERT( ) 函数撤消更改。
说明

设计和运行时可用。

如果临时表基于本地视图或远程视图，BufferModeOverride 只能设置为 3 和 5。如果表单集或表单的 BufferMode 属性设置为 1（保守式），则基于视图的临时表的 BufferModeOverride 默认设置为 3（开放式行缓冲）。


请参阅

BufferMode 属性，TABLEREVERT( )，TABLEUPDATE ( )


BUILD APP 命令

请参阅

使用项目文件信息创建以 .APP 为扩展名的应用程序。

语法

BUILD APP APPFileName FROM ProjectName

参数

APPFileName

指定要创建的应用程序文件名称。默认应用程序文件扩展名为 .APP。

FROM ProjectName

指定一个项目，在该项目中建立应用程序。

说明

用 CREATE PROJECT 或 MODIFY PROJECT 命令创建一个项目文件。项目文件是一个表，该表的文件扩展名为 .PJX（表文件）和 .PJT（备注文件）。

在使用 BUILD APP 之前，确保项目文件包含应用程序所需的所有文件。如果在生成期间遗漏所需文件，Visual FoxPro 产生一个错误。这个错误和编译时产生的其他错误都存储于一个扩展名为 .ERR 的错误文件中。错误文件名的前 8 个字符和项目名的前 8 个字符相同。

有关生成项目的详细内容，请参阅以下内容：

 •	   连编项目并显示错误。

 •	   连编应用程序。

 •	   《开发指南》的第十五章“编译应用程序”。


请参阅

BUILD EXE，BUILD PROJECT，CREATE PROJECT，MODIFY PROJECT


BUILD EXE 命令

请参阅

在一个项目中创建一个可执行文件。

语法

BUILD EXE EXEFileName FROM ProjectName
[STANDALONE | EXTENDED]

参数

EXEFileName

指定要创建的可执行文件名。如果一个 .APP 应用程序文件和现有独立可执行文件有相同的根文件名，则删除该应用程序文件。请注意，如果已有一个可执行文件，而用户创建一个有相同文件名的 .APP 文件，则删除该可执行文件。

FROM ProjectName

指定项目名，在该项目中生成可执行文件。

STANDALONE

在 FoxPro for MS-DOS 中，创建一个标准版本（16 位）可执行文件，该文件完全独立，而且与标准的 FoxPro for MS-DOS 版本（16 位）具有相同的系统要求。

在 FoxPro for Macintosh 中，创建一个完全独立的可执行文件时必须包含 STANDALONE，该文件与 FoxPro for Macintosh 具有相同的系统要求。

EXTENDED

在 FoxPro for MS-DOS 中，创建一个扩展版本（32 位）的可执行文件，该文件完全独立，与 FoxPro 的扩展版本（32 位）具有相同的系统要求。创建一个扩展版本（32 位）可执行文件比创建一个标准版本（16 位）可执行文件需要更长的时间。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，如果既不包含 STANDALONE，又不包含 EXTENDED，则创建一个压缩的可执行文件。在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，要想执行压缩的可执行文件，必须在 MS-DOS 路径中定位可执行文件支持库。

如果在 Visual FoxPro 或 FoxPro for Windows 中包含 STANDALONE 或 EXTENDED，或在 FoxPro for Macintosh 中包含 EXTENDED，则产生一条错误信息。

说明

在 Visual FoxPro 中，BUILD EXE 仅用于专业版。

在 FoxPro 早期版本中，若该版本安装有发布工具，则 BUILD EXE 可用。

有关创建可执行文件的详细内容，请参阅《专业级功能指南》的第九章“生成可发布的应用程序”。


请参阅

BUILD APP，BUILD PROJECT


BUILD PROJECT 命令

请参阅

创建并生成一个项目文件。

语法

BUILD PROJECT ProjectFileName
FROM ProgramName1 | MenuName1 | ReportName1 | LabelName1
| FormName1 | LibraryName1
[, ProgramName2 | MenuName2 | ReportName2 | LabelName2
| FormName2 | LibraryName2 ...]

参数

ProjectFileName

指定要创建的项目表名。

FROM ProgramName1 | MenuName1 | ReportName1 | LabelName1
| FormName1 | LibraryName1

指定项目包含的文件。可指定一个或多个程序、菜单、报表、标签、表单或库文件。项目追踪这些文件的变化情况，包括它们之间的相关性、引用和连接等。

默认情况下，FROM 子句中的第一个可执行程序或菜单文件是项目的主程序文件。

说明

通过打开并处理一个或多个指定的程序、菜单、报表、列表、标签或库文件，BUILD PROJECT 自动创建一个文件扩展名为 .PJX 的项目表。用户可以使用项目文件创建以下两种类型程序：以 .APP 为扩展名的程序文件或以 .EXE 为扩展名的可执行文件。项目表保持对创建一个应用程序所需的所有文件的追踪，包括文件间的相关性、引用以及关系。一旦用户指定了项目的内容，Visual FoxPro 可确保应用程序基于最新的源文件。

有关生成项目的详细内容，请参阅以下内容：

 •	   连编项目并显示错误。

 •	   连编应用程序。

 •	   《开发指南》的第十五章“编译应用程序”。

在 BUILD PROJECT 创建一个项目文件时，如果 Visual FoxPro 遇到一个程序、菜单或表单文件，它将查找其编译文件并比较两个文件的时间和日期标记。如果源文件的时间和日期标记比编译文件晚，Visual FoxPro 将编译源文件。

每一个项目文件均包含一个时间日期戳，便于用户在更改项目文件或更改相关性时刷新项目文件。这便于确保项目文件创建的所有应用程序一直使用最新的源文件。发出不包含 FROM 子句的 BUILD PROJECT 命令，可以刷新项目文件，并更新所指定的项目。

在发出 BUILD PROJECT 命令时，Visual FoxPro 报告不能识别的引用和其他错误，但不禁止创建项目文件列表。这样，即使所有必需内容并未实际创建或者不可用，您仍然可以生成项目。通过以后刷新项目文件或用 MODIFY PROJECT 命令人工修改存储于项目文件中的信息，可以解决不能识别的引用和其他问题。


请参阅

BUILD APP，BUILD EXE，CREATE PROJECT，EXTERNAL，MODIFY PROJECT


_BUILDER 系统内存变量

请参阅

包含 Visual FoxPro 生成器的应用程序名称。

语法

_BUILDER = cProgramName

参数

cProgramName

指定一个生成器应用程序。如果生成器应用程序不在当前 Visual FoxPro 默认目录中，应在应用程序名中包含路径。

也可使用以下语句，在用户的 Visual FoxPro 配置文件中指定一个生成器应用程序。

_BUILDER = cProgramName

说明

当用户在表单设计器中选择一个生成器时，_BUILDER 系统内存变量包含 Visual FoxPro 使用的应用程序名。默认情况下，_BUILDER 包含安装在 Visual FoxPro 目录下的 BUILDER.APP。用户也可指定一个不同的生成器应用程序。


请参阅

系统内存变量概述


ButtonCount 属性

请参阅	示例

指定命令组或选项组中的按钮数。

应用于

命令组，选项组

语法

Control.ButtonCount[ = nNumber]

设置

nNumber

指定按钮数目。

说明

设计和运行时可用。

使用 ButtonCount 属性来动态设置包含于命令组或选项组中的按钮数。

如果在运行时更改按钮数，则自动给新按钮命名。命令组中按钮被命名为 CommandN，选项组中按钮被命名为 OptionN，其中 N 为所添加的按钮数。例如，如果命令组中有四个按钮而 ButtonCount 属性设置更改为 5，则新按钮命名为 Command5。


* 下例创建一个选项组控制并将该控制放置在表单中。选项
* 组控制有三个按钮，根据用户单击的选项按钮，显示一个
* 圆、椭圆或正方形。ButtonCount 属性用于指定选项组中的
* 按钮数。Buttons 和 Caption 属性用于指定显示在每一选
* 项按钮旁的文本。
*

* 形状控制用于创建圆、椭圆和正方形。选项组控制的 Click
* 事件采用 DO CASE…ENDCASE 结构，并在用户单击一个
* 选项按钮时，Value 属性显示相应的形状。
*

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止“控制”菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') && 添加“选择”按钮

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加“圆”形状控制

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加“椭圆”形状控制

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加“框”形状控制

frmMyForm.cmdCommand1.Visible =.T.  && “退出”命令按钮可视

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 设置选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 建立选项组

ButtonCount = 3  && 三个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 在命令按钮上的标题

Cancel = .T.  && 默认“取消”命令按钮 (ESC)

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  && 创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  && 创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建一个正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 蓝色

ENDDEFINE


请参阅

Buttons 属性


Buttons 属性

请参阅	示例

访问一个控制组中每个按钮的数组。

应用于

命令组，选项组

语法

Control.Buttons (nIndex).Property = Value
— 或者 —
Control.Buttons (nIndex).Method

设置

nIndex

是 1 和 Control 的 ButtonCount 属性所指定的按钮数之间的一个整数。

Property

命令按钮或选项按钮的属性。

Method

命令按钮或选项按钮的方法。

Value

Property 的值。

说明

设计时不可用。

可使用 Buttons 属性为组内的所有按钮设置属性和调用方法。Buttons 属性是在创建按钮组时创建的一个数组。


请参阅

ButtonCount 属性，SetAll 方法


* 下例创建一个选项组控制并在一个表单上设置该控制。
* 选项组有三个按钮，根据用户单击的选项按钮，显示
* 一个圆、椭圆或正方形。ButtonCount 属性用于指定
* 选项组的按钮数，Buttons 和 Caption 属性用于指定
* 显示在每一选项按钮旁的文本。
*

* 形状控制用于创建圆、椭圆和正方形。选项组控制
* 的 Click 事件采用 DO CASE ... ENDCASE 结构，
* 并在用户单击一个选项按钮时，Value 属性显示
* 相应的形状。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止“控制”菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') && 添加选项组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加圆

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加框

frmMyForm.cmdCommand1.Visible =.T.  && “退出”命令按钮可视

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 启动事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建一个选项组

ButtonCount = 3  && 三个选择按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认“取消”命令按钮 (Esc)

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  && 创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  && 创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建一个正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 蓝色

ENDDEFINE


_CALCMEM 系统内存变量

请参阅	示例

包含 Visual FoxPro 存储在计算器内存中的数值。

语法

_CALCMEM = nCalculatorMemoryValue

参数

nCalculatorMemoryValue

指定由 _CALCMEM 存储到内存中的数值。

说明

可在计算器内存中保存计算结果，并将结果返回给一个程序，或者在使用计算器之前向计算器内存中设置一个指定值。

要初始化计算器内存，可用 STORE 或 ＝ 赋值操作符在 _CALCMEM 中存储一个数值。当使用计算器时，内存中就包含了指定的值。


*下列程序示例将数值常量 1234 存储到 _CALCMEM 中。然后
* 程序显示计算器并用字母“R”填充键盘缓冲区。键击 R 可以
* 显示存储于计算器内存中的值。

STORE 1234 TO _CALCMEM

ACTIVATE WINDOW calculator

CLEAR TYPEAHEAD

KEYBOARD CHR(82)


请参阅

ACTIVATE WINDOW，_CALCVALUE，STORE


CALCULATE 命令

请参阅	示例

对表中的字段或包含字段的表达式进行财务和统计操作。

语法

CALCULATE eExpressionList
[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO MemVarList | TO ARRAY ArrayName]
[NOOPTIMIZE]

参数

eExpressionList

指定表达式，表达式可以包含下列函数的任意组合：

AVG(nExpression)

CNT( )

MAX(eExpression)

MIN(eExpression)

NPV(nExpression1, nExpression2 [, nExpression3])

STD(nExpression)

SUM(nExpression)

VAR(nExpression)

用逗号分隔表达式列表 eExpressionList 中的函数。这些函数仅用于 CALCULATE 命令。在本段后面将详细说明这些函数。不要与有相似名称的独立函数相混淆。例如，CALCULATE MIN( ) 与 MIN( ) 不同。

Scope

指定计算中所使用记录的范围。只有在范围之内的记录才进行计算。Scope 子句有：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关范围子句的详细信息，请参阅 Scope 子句或《开发指南》第二章“语言概述”。包含 Scope 子句的命令只能在活动工作区内的表上操作。

FOR lExpression1

指定只有满足逻辑条件 lExpression1 的记录才进行计算。在计算中包含 FOR 子句可以有条件地选择记录，筛选出不想要的记录。若 lExpression1 是可优化的表达式，Rushmore 技术将优化 CALCULATE...FOR 查询。为了获得最佳性能，应在 FOR 子句中使用可优化表达式。有关 Rushmore 可优化表达式的内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只要逻辑表达式 lExpression2 计算为“真”(.T.)，记录就进行计算。

TO MemVarList

指定一个或多个用以存储计算结果的变量。若指定的内存变量不存在，Visual FoxPro 自动用该名称创建此内存变量。

TO ARRAY ArrayName

指定存储计算结果的数组。若指定的数组不存在，Visual FoxPro 自动用该名称创建此数组。若该数组存在，但容纳不下所有的计算结果，Visual FoxPro 自动增大数组以容纳信息。若数组比需要的大，多余元素的内容保持不变。计算结果按照 CALCULATE 命令指定的顺序保存到数组中。

NOOPTIMIZE

关闭 CALCULATE 的 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术 ，或《开发指南》第十七章“优化应用程序”。

AVG(nExpression)

计算 nExpression 的算术平均值。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

CNT( )

返回表中记录的数目。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

MAX(eExpression)

返回 eExpression 的最大值或最新值。在 MAX( ) 子句中可指定任何字符型、日期型、日期时间型、数值型、浮点型、整型、双精度型或货币型字段，或包含这些类型字段的表达式。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

MIN(eExpression)

返回 eExpression 的最小值或最早值。eExpression 中可包括任何字符型、日期型、日期时间型、数值型、浮点型、整型、双精度型或货币型字段，或任何使用这些类型字段的有效表达式。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

NPV(nExpression1, nExpression2 [, nExpression3])

计算一个固定周期利率下，一系列现金流的净现值。

nExpression1 指定用十进制表示的利率。

nExpression2 指定代表一系列现金流的字段、字段表达式或数值表达式。每个现金流可正可负。当 nExpression2 是字段时，每个记录的字段值都认为是一个现金流。

nExpression3 指定可选的初始投资。如果不包括初始投资，则假定初始投资发生在第一阶段末。这个初始投资就是第一个记录，而且是负的，代表现金流出。

只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

STD(nExpression)

计算 nExpression 的标准偏差。标准偏差用来衡量字段或包含字段的表达式的值偏离平均值的程度。标准偏差越小，这些值偏离平均值就越少。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

SUM(nExpression)

对 nExpression 的值求和。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

VAR(nExpression)

从 nExpression 的平均值中计算方差。方差是标准偏差的平方。方差越小，值偏离平均值就越少。只有满足 Scope 和/或可选的 FOR 或 WHILE 条件的记录才包括到结果中。

说明

含有 Null 值的记录不包含在 CALCULATE 的操作中。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE orders  && 打开 Orders 表

SET TALK ON

CLEAR

CALCULATE AVG(order_amt), MIN(order_amt), MAX(order_amt)

CALCULATE STD(order_amt), VAR(order_amt) TO gnStd, gnVar

? gnStd, gnVar


请参阅

AVERAGE，COUNT，DIMENSION，FV( )，MAX( )，MIN( )，PAYMENT( )，PV( )，SUM


_CALCVALUE 系统内存变量

请参阅	示例

包含计算器显示的数值。

语法

_CALCVALUE = nCalculatorDisplayValue

参数

nCalculatorDisplayValue

指定计算器显示的数值。

说明

在使用计算器之前，可向程序返回计算器结果，或设置一个特定数值显示在计算器中。

要初始化计算器显示，可用 STORE 或 ＝ 赋值操作符在 _CALCVALVE 中存储一个数值。当使用计算器时，该值就显示在计算器中。


*在下列示例中，先将 1234 保存到 _CALCVALUE 中，
* 然后计算器显示值 1234。

STORE 1234 TO _CALCVALUE

ACTIVATE WINDOW calculator


请参阅

ACTIVATE WINDOW，_CALCMEM，STORE


CALL 命令

请参阅

执行由 LOAD 加载到内存中的二进制文件、外部命令或外部函数。包含此命令是为了提供向后兼容性。可用 SET LIBRARY 代替。

语法

CALL BinaryFileName
[WITH cExpression | WITH MemVarName1]
[TO MemVarName2]
[SAVE | NOSAVE]

参数

BinaryFileName

在 FoxPro for Windows 和 FoxPro for MS-DOS 中指定要调用的二进制文件。不必指定文件扩展名。

在 FoxPro for Macintosh 中指定要执行的常驻内存的外部命令或函数。

WITH cExpression | WITH MemVarName1

指定传递给二进制子例程、外部命令或外部函数的字符串、内存变量或数组元素参数。内存变量或数组元素可以是任何数据类型。

在 FoxPro for Windows 和 FoxPro for MS-DOS 中可向二进制子例程传递单个参数。当被调用的二进制文件执行时，代码段最初指向模块的开头。DS 和 BX 寄存器对指向 WITH 所传递参数的第一个字节。若没有传递参数，BX 包含 0。

在 FoxPro for Macintosh 中，用逗号分隔字符表达式可以传递多个参数。

TO MemVarName2

指定用来接受二进制子例程、外部命令或外部函数返回值的内存变量或数组元素。

SAVE | NOSAVE

在 FoxPro for Windows 和 FoxPro for MS-DOS 中，CALL 和 LOAD 都支持 SAVE 关键字，用于保存输出到屏幕的二进制子例程。

在 FoxPro for Macintosh 中忽略 SAVE 和 NOSAVE。

NOSAVE 是默认值。用 CALL 调用二进制子例程时可包含 SAVE，也可在用LOAD 把二进制子例程加载到内存中时包含 SAVE 和 NOSAVE。CALL 指定的 SAVE 或 NOSAVE 改写 LOAD 指定的 SAVE 或 NOSAVE 设置。

若指定 CALL ... SAVE，则从二进制子例程返回时，FoxPro for Windows 和 FoxPro for MS-DOS 将视频 RAM 的当前内容复制到 FoxPro for Windows 或 FoxPro for MS-DOS 的主窗口中（假定该二进制子例程直接写入视频 RAM）。这说明由二进制子例程输出的任何信息对 FoxPro for Windows 和FoxPro for MS-DOS 来说是可知的，并且把这些信息看作是由 FoxPro for Windows 或 FoxPro for MS-DOS 输出的。特别地，如果 SAVE 起作用，当 FoxPro for Windows 或 FoxPro for MS-DOS 对象第一次从这些外部写入的数据上拖过时，不会删除它们。

除非必要，否则不要使用 SAVE 子句，因为每次从二进制子例程返回时，FoxPro for Windows 和 FoxPro for MS-DOS 都会花费一定的时间来恢复屏幕内容。

注意

在 FoxPro for Windows 和 FoxPro for MS-DOS 中必须遵从下列汇编语言接口规则：

 •	   在二进制文件中使用字符串变量时，不要改变字符串长度。哪怕字符串变量长度只变化 1 字节，自由内存列表也有可能损坏。

 •	   当把字符串地址从一个调用保存到另一个调用时，使用该字符串变量之前仍需重置要保存的字符串地址。

说明

Visual FoxPro 忽略 CALL 语句。可使用 SET LIBRARY 打开 API 库代替。

在 FoxPro for Windows 和 FoxPro for MS-DOS 中，CALL 用来从内存直接运行定制的二进制子例程。LOAD 可将二进制文件置于内存。CALL 执行已加载的二进制文件。

在 FoxPro for Macintosh 中，CALL 用来执行已用 SET XCMDFILE 和 LOAD 命令放入内存的外部命令 (XCMD) 或外部函数 (XFNC)。


请参阅

LOAD，RELEASE MODULE，SET LIBRARY，SET XCMDFILE


CANCEL 命令

请参阅	示例

结束当前 Visual FoxPro 程序的执行。

语法

CANCEL

说明

在 FoxPro for MS-DOS 中，控制权返回到命令窗口或 MS-DOS 操作系统。若在运行时执行一个独立的发布应用程序，CANCEL 终止该应用程序并将控制权返回到 MS-DOS。若设计时在 FoxPro for MS-DOS 中执行程序，则 CANCEL 终止程序并将控制权返回命令窗口。

在 Visual FoxPro 和 FoxPro for Windows 中，当交互使用 Visual FoxPro 时控制权返回命令窗口。若在运行时执行一个独立的发布应用程序，CANCEL 终止该应用程序并将控制权返回 Windows。若设计时在 Visual Foxpro 或 FoxPro for Windows 中执行程序，CANCEL 终止程序并将控制权返回到命令窗口。

在 Foxpro for Macintosh 中，控制权返回命令窗口或 Finder。若在运行时期执行一个独立的发布应用程序，CANCEL 终止应用程序并将控制返回到 Finder。若设计时在 FoxPro for Macintosh 中执行程序，CANCEL 终止程序，并将控制权返回命令窗口。

执行 CANCEL 将释放所有私有内存变量。


* 在下列示例中，检察内存变量 gcPassword 是否包含字符串。
* 若输入无效口令，则用 CANCEL 终止程序。

SET TALK OFF

DO WHILE .T.

CLEAR

STORE SPACE(13) TO gcPassword

@ 8,29 SAY 'Password  '

@ 8,39 GET gcPassword

READ

IF UPPER(gcPassword) = 'VISUAL FOXPRO'

@ 18,25 SAY 'Password correct'

ELSE

WAIT WINDOW 'Sorry! Password not accepted. Try "VISUAL FOXPRO"'

CANCEL

ENDIF

ENDDO


请参阅

QUIT，RESUME，RETURN，SUSPEND


Cancel 属性

请参阅	示例

指定一个命令按钮或 OLE 容器控制是否为“取消”按钮；即当用户按 ESC 键时，“取消”按钮的 Click 事件是否发生。

应用于

命令按钮，OLE 容器控制

语法

Object.Cancel[ = lExpr]

设置

lExpr

Cancel 属性的设置是：

设置	说明
“真”(.T.)	命令按钮或 OLE 容器控制是“取消”按钮。
“假”(.F.)	（默认值）命令按钮或 OLE 容器控制不是“取消”按钮。
说明

设计和运行时可用。

Cancel 属性仅用于特定的 OLE 容器控制，此容器控制包含“动作类似于按钮”的 OLE 控制。


*下列示例创建了一个命令按钮和一个选项组控制，把它们放在
* 一个表单中。Cancel 属性用来将命令按钮指定为“取消”按钮。若
* 按 ESC 键，命令按钮的 Click 事件发生，并且 Click 事件执行
* CLEAR EVENTS 来关闭表单和终止事件处理。

*选项组控制有三个按钮，根据用户单击的选项按钮，可显示一个圆、
* 椭圆或正方形。Shape 控制用来创建圆、椭圆和正方形。在
* 选项组控制的 Click 事件中使用 DO CASE ... ENDCASE 结
* 构和 Value 属性，按下选项按钮时可以显示适当的形状。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止“控制”菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') &&添加选项组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加圆

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加正方形

frmMyForm.cmdCommand1.Visible =.T.  && “退出”命令按钮可见

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建一个选项组

ButtonCount = 3  && 三个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  &&隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. &&显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认取消按钮(Esc)

Left = 125  &&命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  && 创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  && 创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建一个正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 蓝色

ENDDEFINE


请参阅

Click 事件，Default 属性


CANDIDATE( ) 函数

请参阅	示例

如果一个索引标识是候选索引标识，则返回“真”(.T.)；否则，返回“假”(.F.)。

语法

CANDIDATE([nIndexNumber] [, nWorkArea | cTableAlias])

参数

nIndexNumber

指定索引标识编号，CANDIDATE( ) 返回其候选状态。当 nIndexNumber 从 1 递增到结构复合索引标识和独立复合索引标识总数时，CANDIDATE( ) 按下列顺序返回候选状态：

1.	首先返回结构复合索引（若存在）中每个标识的候选状态。按照标识在结构索引中的创建顺序返回它们的候选状态。

2.	然后返回任何打开的独立复合索引中每个标识的候选状态。按照标识在独立复合索引中的创建顺序返回它们的候选状态。

若省略 nIndexNumber，CANDIDATE( ) 检查主控索引标识是否为候选索引标识。若没有主控索引标识，则 CANDIDATE( ) 返回“假”(.F.)。

nWorkArea

指定由 nIndexNumber 指定的索引标识所在的工作区。

cTableAlias

指定由 nIndexNumber 指定的索引标识所在的表的别名。

若省略 nWorkArea 和 cTableAlias，则 CANDIDATE( ) 检查当前选定工作区中的索引标识是否为候选索引标识。

返回值类型

逻辑型

说明

由于候选索引标识不包含 Null 或重复值，因此可以作为主索引标识。


*下列示例打开 testdata 数据库中的 customer 表。使用
* FOR ... ENDFOR 创建一个循环。在循环中检验 customer 结构索
* 引中每个索引标识的候选状态。然后显示每个结构索引标识名与
* 候选状态。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开 customer 表

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引标识

? TAG(nCount)  && 显示标识名

? CANDIDATE(nCount)  && 显示候选状态

ELSE

EXIT  && 当找不到其他标识时退出循环

ENDIF

ENDFOR


请参阅

ALTER TABLE - SQL，CREATE TABLE - SQL，INDEX，PRIMARY( )


CAPSLOCK( ) 函数

请参阅	示例

返回 CAPS LOCK 键的当前状态，或把 CAPS LOCK 键状态设置为“开”或“关”。

语法

CAPSLOCK([lExpression])

参数

lExpression

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，可包含 lExpression 来开、关 CAPS LOCK 键。CAPSLOCK(.T.) 打开 CAPS LOCK 键；而 CAPSLOCK(.F.) 关闭 CAPS LOCK 键。在执行 CAPSLOCK(.T.) 或 CAPSLOCK(.F.) 之前，根据 CAPS LOCK 的设置返回一个逻辑值。

在 FoxPro for Macintosh 中，不能用 CAPSLOCK( ) 来开、关 CAPS LOCK，CAPS LOCK 必须由人工设置。若包含了 lExpression，则在 CAPS LOCK 打开时 CAPSLOCK( ) 返回“真”，在 CAPS LOCK 关闭时返回 “假”。

返回值类型

逻辑型

说明

不带参数运行 CAPSLOCK( ) 时，若 CAPS LOCK 打开则返回“真”，若 CAPS LOCK 关闭则返回“假”。


*在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，下
* 列代码将 CAPSLOCK( ) 的状态存入一个内存变量中。用 ＝ 赋值
* 命令执行 CAPSLOCK( ) 函数，设置 CAPS LOCK 打开。然后用 ＝
* 赋值命令执行 CAPSLOCK( ) 函数将 CAPS LOCK 设置为先前状态。

glOldLock = CAPSLOCK( )	  && 保存原有状态

= CAPSLOCK(.T.)	  && 打开 CAPS LOCK

*** 执行下列任意语句***

= CAPSLOCK(glOldLock)  && 返回到原有设置

*** 或者,先将 CapsLock 切换成相反值再切换回来 ***

= CAPSLOCK(!CAPSLOCK( ))

WAIT WINDOW

= CAPSLOCK(!CAPSLOCK( ))

WAIT WINDOW

= CAPSLOCK(glOldLock)  && 返回到原有设置


请参阅

INSMODE( )，NUMLOCK( )


Caption 属性

请参阅

指定在对象标题中显示的文本。

应用于

复选框，命令按钮，表单，标头，标签，选项按钮，页面，_SCREEN，工具栏

语法

Object.Caption[ = cText]

设置

cText

指定在对象标题中显示的文本。

说明

设计和运行时可用。

若要为控制指定访问键，可在标题中要用作访问键的字母前面加上一个反斜杠和一个小于符号 (\＜)。当显示对象时，该字母带有下划线。用户可同时按 ALT 和加下划线的字母将焦点移到该控制上。

对象不同，标题的显示也不同：

 •	   对于表单，Caption 属性指定显示在表单标题栏中的文本。若将表单最小化，文本就显示在表单图标的下面。

 •	   对于页框对象中的页面，Caption 属性指定显示在每页选项卡上的文本。

 •	   对于控制，标题属性指定显示在控制上或控制旁的文本。

 •	   对于 Style 属性设置为 1（图形）的控制以及被最小化的表单，标题显示在图标下面。

当创建一个新表单或控制时，默认标题与默认 Name 属性的设置值相同。这个默认标题包括对象类名和一个整数，如 Command1、Combo1 或 Form1。

附注

Name 属性指定如何在代码中引用对象，Caption 属性指定屏幕上用以标识控制的内容。这两个属性初始值相同，但以后可以独立设置。

若没有特别为控制设置 Width 属性值，则控制自动改变大小以容纳标题。

对于命令组和选项组对象，只有 BorderStyle 属性设置为单实线 1 时，才显示标题。

附注

对于标签控制，设置 AutoSize 属性为“真”时，控制可自动调整大小以容纳标题，而且 Caption 属性的最大字符数是 256。


请参阅

AutoSize 属性，BorderStyle 属性，Name 属性，Style 属性，Width 属性


CD | CHDIR 命令

请参阅	示例

将 Visual FoxPro 的默认目录更改为指定的目录。

语法

CD cPath | CHDIR cPath

参数

cPath

指定下列中的一个：

 •	   驱动器指示符

 •	   带目录的驱动器指示符

 •	   子目录

 •	   任何使用 MS-DOS 速记符号（\ 或 ..）的上述内容。注意当包含 .. 更改到父目录时，必须在 CD（或 CHDIR）与两句点之间包含一个空格。

说明

使用 CD 或 CHDIR 可指定默认的 Visual FoxPro 目录，Visual FoxPro 在默认的目录中搜索文件。若 Visual FoxPro 在默认目录中找不到文件，则搜索已指定的 Visual FoxPro 路径。可以使用 SET PATH 指定 Visual FoxPro 路径。

如果创建一个文件，但没有指定存放在何处，则该文件存放在默认 Visual FoxPro 子目录下。


*下面示例使用 MKDIR 创建一个名为 mytstdir 的新目录。使用
* CHDIR 转换到新目录，然后使用 GETDIR( ) 显示目录结构，再
* 使用 RMDIR 删除新建的目录，最后再用 GETDIR( ) 显示目录结构。

SET DEFAULT TO HOME( )  && 还原 Visual FoxPro 目录

MKDIR mytstdir  && 创建一个新目录

CHDIR mytstdir  && 转换到新建目录下

= GETDIR( )  && 显示“选定目录”对话框

SET DEFAULT TO HOME( )  && 还原 Visual FoxPro 目录

RMDIR mytstdir  && 删除新建目录

= GETDIR( )  && 显示“选定目录”对话框


请参阅

GETDIR( )，HOME( )，MD | MKDIR，RD | RMDIR，SET DEFAULT，SET PATH，SYS(5) - 默认驱动器，SYS(2003) - 当前目录，SYS(2004) - Visual FoxPro 启动目录或文件夹


CDOW( ) 函数

请参阅	示例

从给定日期或日期时间表达式中返回星期值。

语法

CDOW(dExpression | tExpression)

参数

dExpression

指定日期，CDOW( ) 返回其星期值。

tExpression

指定日期时间，CDOW( )返回其星期值。

返回值类型

字符型

说明

CDOW( ) 是字符型星期值函数，可

从日期表达式中返回星期值。


STORE {02/16/95} TO gdDate && 显示 Thursday

CLEAR

? CDOW(gdDate)


请参阅

DAY( )，DOW( )，SET FDOW，SET FWEEK，SYS( ) 函数概述


CDX( ) 函数

请参阅	示例

根据指定的索引位置编号，返回打开的复合索引 (.CDX) 文件名称。

语法

CDX(nIndexNumber [, nWorkArea | cTableAlias])

参数

nIndexNumber

下列规则适用于具有一个结构复合索引以及一个或多个复合索引的表：

 •	   若 nIndexNumber 是 1，则 CDX( ) 返回结构索引文件名（一般与表名相同）。

 •	   若 nIndexNumber 是 2，则 CDX( ) 返回 USE 命令 INDEX 子句或 SET INDEX 命令指定的第一个复合索引文件名。

 •	   若 nIndexNumber 是 3，则 CDX( ) 返回第二个复合索引文件名。依此类推。

 •	   若 nIndexNumber 大于打开的 .CDX 文件的数目，则 CDX( ) 返回空字符串。

下列规则适用于没有结构复合索引而有一个或多个复合索引的表：

 •	   若 nIndexNumber 是 1，则 CDX( ) 返回 USE 命令 INDEX 子句或 SET INDEX 命令指定的第一个复合索引文件名。

 •	   若 nIndexNumber 是 2，CDX( ) 返回第二个复合索引文件名。依此类推。

 •	   若 nIndexNumber 大于打开的 .CDX 文件的数目，CDX( ) 返回空字符串。

nWorkArea

指定表所在的工作区编号，CDX( ) 函数返回该工作区中打开表的复合索引文件的文件名。

cTableAlias

指定表的别名，CDX( ) 函数返回该表的复合索引文件的文件名。

若省略 nWorkArea 和 cTableAlias，则返回当前选定工作区中表的复合索引文件名。

返回值类型

字符型

说明

CDX( ) 函数等同于 MDX( ) 函数。

一个 .CDX（复合）索引由一个物理文件组成，文件中包含许多索引标识，每个标识都是对相关表中索引的引用。

.CDX 文件有两类：标准复合索引 (.CDX) 和结构 .CDX。标准复合索引 (.CDX) 可以与相关表不同名，并可保存在与相关表不同的目录下。一个表可以有多个复合索引文件。用 USE 命令的 INDEX 子句或 SET INDEX 命令可以打开一个复合索引。

结构 .CDX 文件必须与相关表同名并保存于同一目录下。一个表只能有一个结构索引文件。当用 USE 打开相关表时，结构 .CDX 文件自动打开和更新。

CDX( ) 忽略 USE 或 SET INDEX 中指定的任何 .IDX（FoxBASE+ 和 FoxPro 1.0 兼容索引）文件。

使用 TAG( ) 可以返回包含于 .CDX 文件中的单个标识名称。使用 NDX( )可以返回打开的 .IDX 文件名。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，当 SET FULLPATH 为 ON 时，CDX( ) 返回 .CDX 文件的路径和名称；当 SET FULLPATH 为 OFF 时，CDX( ) 返回 .CDX 文件所在的驱动器及其名称。

FoxPro for Macintosh 忽略 FULLPATH 设置，并且 CDX( ) 总是返回 .CDX 文件的路径和名称。


*下面的示例打开 testdata 数据库的 customer 表。使用
* FOR ... ENDFOR 创建一个循环。在循环中显示每个结构索引的名称。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  && 打开 customer 表

CLEAR

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引中的标识

? CDX(nCount)	  && 显示结构索引名

ELSE

EXIT  &&当找不到更多的标识时退出循环

ENDIF

ENDFOR


请参阅

INDEX，MDX( )，NDX( )，SET FULLPATH，SET INDEX，SYS(14) - 索引表达式，SYS(21) - 控制索引编号，SYS(22) - 控制标识或索引名称，SYS(2021) - 筛选索引表达式，TAG( )，USE


CEILING( ) 函数

请参阅	示例

返回大于或等于指定数值表达式的最小整数。

语法

CEILING(nExpression)

参数

nExpression

指定一个数值，CEILING( ) 返回其后续的整数。

返回值类型

数值型

说明

CEILING 将一个带有小数位的数取整为下一个大于它的整数。


STORE 10.1 TO num1

STORE -10.9 TO num2

? CEILING(num1)  && 显示 11

? CEILING(num2)  && 显示 -10

? CEILING(10.0)  && 显示 10

? CEILING(-10.0) && 显示 -10


请参阅

FLOOR( )，ROUND( )


CHANGE 命令

请参阅

显示要编辑的字段。

语法

CHANGE
[FIELDS FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FREEZE FieldName]
[KEY eExpression1 [, eExpression2]]
[LAST | NOINIT]
[LPARTITION]
[NAME ObjectName]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NORMAL]
[NOWAIT]
[PARTITION nColumnNumber [LEDIT] [REDIT]]
[PREFERENCE PreferenceName]
[REST]
[SAVE]
[TIMEOUT nSeconds]
[TITLE cTitleText]
[VALID [:F] lExpression3 [ERROR cMessageText]]
[WHEN lExpression4]
[WIDTH nFieldWidth]
[[WINDOW WindowName1]
[IN [WINDOW] WindowNam2 | IN SCREEN | IN MACDESKTOP]]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

CHANGE 的参数与 EDIT 的参数相同。有关参数说明，请参阅 EDIT。

说明

CHANGE 功能与 EDIT 类似。


请参阅

BROWSE，EDIT，WTITLE( )


CheckBox 控制
CheckBox（复选框）控制

请参阅	属性	事件	方法

创建一个复选框。

语法

CheckBox

说明

复选框用来在两个状态，如“真”(.T.) 与“假”(.F.)，或“是”与“否”之间切换。若条件是“真”，就在复选框中显示一个“X”。

使用 Caption 属性可指定显示在复选框旁的文本。使用 Picture 属性可以为复选框指定一幅图片。

有关复选框控制的其他内容，请参阅使用复选框和《开发指南》第十一章“使用控制”。


 属性

Alignment	AutoSize	BackColor
BackStyle	BaseClass	Caption
Class	ClassLibrary	ColorScheme
ColorSource	Comment	ControlSource
DisabledBackColor	DisabledForeColor	DisabledPicture
DownPicture	DragIcon	DragMode
Enabled	FontBold	FontItalic
FontName	FontOutline	FontShadow
FontSize	FontStrikeThru	FontUnderline
ForeColor	Height	HelpContextID
Left	MousePointer	Name
Parent	ParentClass	Picture
ReadObject	SpecialEffect	StatusBarText
Style	TabIndex	TabStop
Tag	TerminateRead	ToolTipText
Top	Value	Visible
Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
ErrorMessage	GotFocus	Init
InteractiveChange	KeyPress	LostFocus
Message	MouseDown	MouseMove
MouseUp	ProgrammaticChange	RightClick
UIEnable	Valid	When


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	Refresh
SaveAsClass	SetFocus	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


ChildAlias 属性

请参阅

指定子表的别名。

应用于

关系

语法

DataEnvironment.Relation.ChildAlias[ = cText]

设置

cText

指定关系中子表的别名。

说明

设计和运行时只读。

ChildAlias 属性设置必须与代表子表的临时表对象的 Alias 属性设置相同。


请参阅

Alias 属性，ParentAlias 属性


ChildOrder 属性

请参阅

为表格控制或关系对象的记录源指定索引标识。

应用于

表格，关系

语法

Object.ChildOrder[ = cField]

设置

cField

指定一个现有的索引标识名。

说明

设计和运行时可用。若已设置了 ChildOrder 属性，则忽略子表临时表的 Order 属性。

使用这个属性可连接两个有一对多关系的表。例如，把一个包含每位顾客记录的顾客表与一个包含每位顾客多个订单的订单表相联接。对于这个一对多关系，应把 ChildOrder 属性设置为顾客 ID 索引标识字段。

ChildOrder 属性和 SET ORDER 语句的功能相似。


请参阅

ControlSource 属性，LinkMaster 属性，SET ORDER


CHR( ) 函数

请参阅	示例

根据指定的 ANSI 数值代码返回其对应的字符。

语法

CHR(nANSICode)

参数

nANSICode

指定一个介于 0 和 255 之间的数值，CHR( ) 返回与之对应的 ANSI 字符。

使用 ASC( ) 可以返回一个指定字符的 ANSI 值。

返回值类型

字符型

说明

CHR( ) 根据当前代码页字符表中字符的数值位置返回其对应的字符。可用 CHR( ) 向打印机发送打印控制代码。


* 下面的示例显示从 65 到 75 的数值，并使用 CHR( ) 显示对应的
* 字符值 A 到 K。

CLEAR

FOR nCOUNT = 65 TO 75

? nCount && 显示数值

?? ' ' + CHR(nCount) && 显示字符

ENDFOR


请参阅

ASC( )，INKEY( )


CHRSAW( ) 函数

请参阅	示例

确定一个字符是否出现在键盘缓冲区中。

语法

CHRSAW([nSeconds])

nSeconds

指定 CHRSAW( ) 在检查键盘缓冲区之前等待的秒数。若省略 nSeconds ，则立刻检查键盘缓冲区。

包含 nSeconds 可以使 CHRSAW( ) 用于多种限时操作中。例如，若在指定秒数内未按下一键则关闭应用程序。

返回值类型

逻辑型

说明

若一个字符在键盘缓冲区中出现，则 CHRSAW( ) 返回“真”(.T.)，否则返回“假”(.F.)。CHRSAW( ) 不影响键盘缓冲区内容。


*在下面的示例中，系统显示一个窗口，包含 ＠ ... GET 命令创建的一个
* 输入字段，并且等待键盘输入 5 秒钟。若在这段时间内未按下一个
* 键，则 CHRSAW( ) 返回“假”(.F.)，并且终止程序。

SET TALK OFF

DEFINE WINDOW wEnter FROM 7,10 to 13,70 PANEL

ACTIVATE WINDOW wEnter

@ 1,3 SAY 'Customer: '	输入 gcCustomer 默认值 SPACE(40)

@ 3,3 SAY 'Address:  '	输入 gcAddress  默认值 SPACE(40)

WAIT WINDOW 'Waiting for input' NOWAIT

IF NOT CHRSAW(5)

DEACTIVATE WINDOW wEnter

CLEAR GETS

ELSE

READ

DEACTIVATE WINDOW wEnter

ENDIF

RELEASE WINDOW wEnter

WAIT

CLEAR


请参阅

INKEY( )，KEYBOARD，READKEY( )


CHRTRAN( ) 函数

请参阅	示例

在一个字符表达式中，把与第二个表达式字符相匹配的字符替换为第三个表达式中相应字符。

语法

CHRTRAN(cSearchedExpression, cSearchExpression, cReplacementExpression)

参数

cSearchedExpression

指定字符表达式，CHRTRAN( ) 函数替换其中的字符。

cSearchExpression

指定字符表达式，CHRTRAN( ) 函数在 cSearchedExpression 中寻找该表达式的字符。

cReplacementExpression

指定包含替换字符的表达式，。

若在 cSearchedExpression 中发现一个 cSearchExpression 中的字符，则用 cReplacementExpression 中的一个字符替换。替换字符在 cReplacementExpression 中的位置与被替换字符在 cSearchExpression 中的位置相同。

若 cReplacenentExpression 中的字符比 cSearchExpression 中的字符少，则删除 cSearchExpression 中多余的字符。若cReplacementExpression 中的字符比 cSearchExpression 中的字符多，则忽略 cReplacementExpression 中的多余字符。

返回值类型

字符型

说明

CHRTRAN( ) 使用翻译表达式 cSearchExpression 和 cReplacementExpression，翻译字符表达式 cSearchedExpression，并返回结果字符串。


? CHRTRAN('ABCDEF', 'ACE', 'XYZ')  && 显示 XBYDZF

? CHRTRAN('ABCD', 'ABC', 'YZ')  && 显示 YZD

? CHRTRAN('ABCDEF', 'ACE', 'XYZQRST')  && 显示 XBYDZF


请参阅

CHRTRANC( ) 函数，SYS(15) - 字符转换


CHRTRANC( ) 函数

请参阅

将第一个字符表达式中与第二个表达式的字符相匹配的字符替换为第三个表达式中相应的字符。

语法

CHRTRANC(cSearched, cSearchFor, cReplacement)

参数

cSearched

指定表达式，CHRTRANC( ) 函数对其中的字符进行替换。

cSearchFor

指定表达式，CHRTRANC( ) 函数在 cSearched 中查找此表达式。

cReplacement

指定包含替换字符的表达式。

若在 cSearched 中发现一个 cSearchFor 中的字符，则用 cReplacement 中的一个字符替换。替换字符在 cReplacement 中的位置与被替换字符在 cSearchFor 中的位置相同。

若 cReplacement 中的字符比 cSearchFor 中的字符少，则删除 cSearchFor 中多余的字符。若 cReplacement 中的字符比 cSearchFor 中的字符多，则忽略 cReplacement 中多余的字符。

返回值类型

字符型

说明

用 CHRTRANC( ) 可以进行单字节字符与双字节字符之间的替换。


请参阅

CHRTRAN( )


Circle 方法

请参阅

在表单上画一个圆或椭圆。

应用于

表单，_SCREEN

语法

Object.Circle (nRadius, nXCoord, nYCoord [, nAspect])

参数

nRadius

指定圆或椭圆的半径。度量单位由表单的 ScaleMode 属性确定。

nXCoord, nYCoord

指定圆或椭圆的中心坐标。度量单位由表单的 ScaleMode 属性确定。

nAspect

指定圆的纵横比。默认值是 1.0，生成一个正圆（非椭圆）。大于 1.0 的值将生成一个垂直方向椭圆；小于 1.0 的值将生成一个水平方向椭圆。

说明

要控制画圆或椭圆的线宽，可设置 DrawWidth 属性。

要控制在背景中画圆的方式，可设置 DrawMode 和 DrawStyle 属性。

要填充圆，可设置表单的 FillColor 和 FillStyle 属性。

当激活 Circle 方法时，CurrentX 和 CurrentY 属性被设置为中心点参量：nXCoord，nYCoord。


请参阅

BackColor 属性，CurrentX, CurrentY 属性，DrawMode 属性，DrawStyle 属性，DrawWidth 属性，FillColor 属性，FillStyle 属性，ForeColor 属性，ScaleMode 属性


Class 属性

请参阅

返回一个对象所基于的类的名称。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，_SCREEN，微调，文本框，计时器，工具栏

语法

Object.Class

说明

设计和运行时只读。

附注

在类设计器中，Class 属性返回类的实际名称。


请参阅。

AddObject 方法，BaseClass 属性


ClassLibrary 属性

请参阅

指定用户自定义类库的名称，此类库中包含对象所基于的类。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.ClassLibrary

说明

设计和运行时只读。

Visual FoxPro 基类对象已连编进产品中，没有 ClassLibrary 设置。


请参阅

BaseClass 属性


CLEAR 命令

请参阅

从内存中释放指定项。

语法

CLEAR
[ALL | CLASS ClassName | CLASSLIB ClassLibraryName | DLLS | EVENTS
| FIELDS | GETS | MACROS | MEMORY | MENUS | POPUPS
| PROGRAM | PROMPT | READ [ALL] | TYPEAHEAD | WINDOWS]

参数

ALL

从内存中释放所有的内存变量和数组以及所有用户自定义菜单栏、菜单和窗口的定义。CLOSE ALL 也能关闭所有表，包括所有相关的索引、格式和备注文件，并且选择工作区 1。CLEAR ALL 还从内存中删除所有用 DECLARE-ALL 注册的外部 Windows 32 位动态链接库 (.DLLS)。

CLEAR ALL 不释放系统内存变量，也不清除已编译程序的缓冲区。应使用 CLEAR PROGRAM 来清除已编译程序的缓冲区。

在活动控制或对象的事件或方法内执行 CLEAR ALL，Visual FoxPro 会产生错误信息。当对象类型内存变量的相关控制或对象活动时，不能将其从内存中释放。

CLASS ClassName

从内存中清除类的定义。如果创建了类的一个实例，释放该实例以后，Visual FoxPro 仍在内存中保存类定义。释放实例以后，应使用 CLEAR CLASS 从内存中清除类定义。

CLASSLIB ClassLibraryName

从内存中清除所有包含在可视类库中的类定义。若类库中的类的实例仍然存在，则不从内存中清除类定义，并产生错误信息。但是，内存中所有没有实例的类定义会被清除。

DLLS

从内存中清除所有用 DECLARE-DLL 注册的外部 Windows 32 位动态链接库 (.DLLS)。有关注册外部 DLL 的详细内容，请参阅 DECLARE -DLL。

EVENTS

停止以 READ EVENTS 开始的事件处理。当执行 CLEAR EVENTS 后，程序从 READ EVENTS 的下一条程序行继续执行。

FIELDS

释放用 SET FIELDS 命令创建的列表，并且执行 SET FIELDS OFF。CLEAR FIELDS 与 SET FIELDS TO 的不同之处在于，它释放所有工作区中的所有字段列表，不仅仅是当前工作区中的字段列表。另外，SET FIELDS TO 不会隐含执行 SET FIELDS OFF。

GETS

释放所有等待的 ＠...GET 控制。执行 CLEAR 也可以释放所有等待的 ＠...GET 控制。

MACROS

从内存中释放所有键盘宏，包括任何用 SET FUNCTION 指定的功能键定义。可用SAVE MACROS 将宏存入一个宏文件或备注字段中，并在以后用 RESTORE MACROS 命令还原。也可用 RESTORE MACROS 恢复默认宏。

MEMORY

从内存中释放所有公共或私有内存变量和数组，但不释放系统内存变量。

MENUS

释放内存中所有的菜单栏定义。

POPUPS

释放内存中所有用 DEFINE POPUP 命令创建的菜单定义。

PROGRAM

清除已编译程序的缓冲区。Visual FoxPro 保存最近执行程序的缓冲区。Visual FoxPro 可能不认可对磁盘上程序文件所做的更改，但这种情况很少出现。CLEAR PROGRAM 迫使 Visual FoxPro 从磁盘上而不是程序缓冲区读程序。Visual FoxPro 不认可对程序文件所做更改的可能的原因是使用了外部或常驻内存 (TSR) 编辑器修改程序文件。除此之外，不必使用 CLEAR PROGRAM。

PROMPT

释放用 ＠...PROMPT 创建的菜单项。

READ [ALL]

包含此子句是为了提供向后兼容性。可用 CLEAR EVENTS 代替。

退出活动的 READ。若活动的 READ 嵌套在其他的 READ 中，则将控制返回到前一个 READ 层。READ 命令最多可嵌套五层。当执行 CLEAR READ 时，READ 并不立即终止。在返回 READ 前，先执行任何需要执行的命令。

含有 ALL 则终止所有 READ 层上的所有 READ 命令。

CLEAR READ 不会终止一个不包含 ＠...GET 控制的 READ。此时，若执行 CLEAR READ，则运行 READ VALID。若 READ 包含 ＠...GET 控制并且有一个 VALID 子句，则执行 CLEAR READ 时不执行 VALID 子句。

TYPEAHEAD

清除键盘缓冲区。若要在显示字段或提示之前禁止向字段输入或对提示应答，CLEAR TYPEAHEAD 很有用。

WINDOWS

释放内存中所有用户自定义窗口的定义，并从 Visual FoxPro 主窗口或活动的用户自定义窗口中清除窗口。使用 SAVE WINDOW 可将窗口定义存入文件或备注字段以备后用。

执行 CLEAR WINDOWS 将释放任何对表单的内存变量引用。例如，下列命令创建一个对表单的内存变量引用，然后显示有关变量的信息：

goMyForm = CREATEOBJECT('FORM')

DISPLAY MEMORY LIKE goMyForm  && 显示 GOMYFORM  O  FORM

执行 CLEAR WINDOWS 释放内存变量引用，则当前内存变量中包含 null 值：

CLEAR WINDOWS

DISPLAY MEMORY LIKE goMyForm  &&显示 GOMYFORM  O  .NULL.

说明

CLEAR 删除 Visual FoxPro 主窗口或当前用户自定义窗口，并且释放内存中所有等待的 ＠...GET 控制。可在格式文件中包含 CLEAR。


请参阅

@ ... CLEAR，CLOSE，DECLARE -DLL，READ，READ EVENTS，RELEASE，RELEASE CLASSLIB，RELEASE WINDOWS


Clear 方法

请参阅

清除组合框或列表框控制的内容。

应用于

组合框，列表框

语法

Object.Clear

说明

为使 Clear 方法有效，必须将 RowSourceType 属性设置为 0（无）。


请参阅

AddItem 方法，RemoveItem 方法


Click 事件

请参阅	示例

当在程序中包含触发此事件的代码，或者将鼠标指针放在一个控制上按下并释放鼠标左键，或者更改特定控制的值，或在表单空白区单击时，此事件发生，

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，标头，图象，标签，线条，列表框，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.Click
[LPARAMETERS nIndex]

参数

nIndex

唯一标识控制数组中的一个控制。

说明

Click 事件发生在用户：

 •	   用鼠标左键单击复选框、命令按钮、列表框或选项按钮控制时。

 •	   使用箭头键或按鼠标键在组合框或列表框中选择一项时。

 •	   在命令按钮、选项按钮或复选框有焦点时按 SPACEBAR。

 •	   表单中有 Default 属性设置为“真”(.T.) 的命令按钮并且按 ENTER 时。

 •	   按一个控制的访问键。例如，若一个命令按钮的标题为“\<Go”，则按 ALT+G 可触发 Click 事件。

 •	   单击表单空白区。当指针位于标题栏、控制菜单框或窗口边界上时，不发生表单的 Click 事件。

 •	   单击微调控制的文本输入区。

 •	   单击废止的控制时，废止控制所在的表单发生 Click 事件。

Click 事件也可能由于包含下列内容的代码而发生：

 •	   设置命令按钮控制的 Value 属性为“真”(.T.)。

 •	   设置选项按钮控制的 Value 属性为“真”(.T.) 或 1。

 •	   更改复选框控制的 Value 属性设置。

 •	   执行 MOUSE 命令。


*下面的示例创建一个选项组控制，并将此控制放置在一个表单上。
* 选项组控制有三个按钮，根据用户按下的选项按钮，显示一个
* 圆、椭圆或正方形。ButtonCount 属性用来指定选项组中按钮
* 的数目。Buttons 和 Caption 属性用来指定在每个选项按
* 钮旁显示的文本。

*Shape 控制用来创建圆、椭圆和正方形。选项组控制的 Click
* 事件使用 DO CASE...ENDCASE 结构和 Value 属性，以便在单击
* 选项按钮时显示适当的形状。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 使 Control 菜单框无效

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') && 添加选项组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加圆

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加正方形

frmMyForm.cmdCommand1.Visible =.T.  && 设置 Quit 命令按钮可见

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建一个选项组

ButtonCount = 3  && 三个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 俱按钮标题

Cancel = .T.  && 默认的取消按钮(Esc)

Left = 125  && 命令按钮所在列

Top = 210  && 命令按钮所在行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  &&创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  && 创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建一个正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 兰色

ENDDEFINE


请参阅

DblClick 事件，MOUSE，MouseDown 事件，MouseUp 事件，Value 属性


ClipControls 属性

请参阅

确定 Paint 事件中的图形方法是重画整个对象还是只重画新露出的区域，也确定 Windows 操作环境是否创建一个剪裁区域来除去对象中的非图形控制。

应用于

表单，_SCREEN

语法

Object.ClipControls[ = lExpr]

设置

lExpr

ClipControls 属性的设置为：

设置	说明
“真”(.T.)	（默认值） Paint 事件中的图形方法重画整个对象。Paint 事件发生之前在表单的非图形控制周围创建一个剪裁区。
“假”(.F.)	Paint 事件中的图形方法只重画新露出的区域。不在非图形控制周围创建剪裁区。
说明

设计和运行时可用。


请参阅

Paint 事件


_CLIPTEXT 系统内存变量

请参阅

包含剪贴板的内容。

语法

_CLIPTEXT = cExpression

参数

cExpression

指定要存储于剪贴板中的字符表达式。

说明

可用 STORE 或 = 赋值操作符将字符表达式 cExpression 放置到剪贴板上。


请参阅

PRIVATE，PUBLIC，STORE


CloneObject 方法

请参阅

复制对象，包括对象所有的属性、事件和方法。

应用于

复选框，组合框，命令按钮，命令组，自定义，编辑框，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，计时器，工具栏

语法

Object.CloneObject(NewName)

参数

NewName

指定新建或复制的对象的名称。

说明

设计时可用。


请参阅

SaveAs 方法，SaveAsClass 方法


Closable 属性

请参阅	示例

指定能否由双击控制菜单框或从控制菜单中选择“关闭”项关闭表单。

应用于

表单，_SCREEN

语法

Object.Closable[ = lExpr]

设置

lExpr

下表列出了 Closable 属性的设置：

设置	说明
“真”(.T.)	（默认值）可关闭表单，并将“关闭”菜单命令添加到控制菜单中。
“假”(.F.)	不能使用控制菜单关闭表单，并从控制菜单中删除“关闭”菜单命令。
说明

设计和运行时可用。


*下面示例演示了如何使用 Closable 属性禁止用控制菜单关闭表单。
* 表单的 Closable 属性设置为“假”(.F.)，禁止用控制菜单关闭表
* 单。若表单的 closable 属性已经设置为“真”（.T.），并且已用
* 控制菜单关闭了此表单，则必须执行 CLEAR EVENTS 终止事件
* 处理，并退出程序。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 使控制菜单框无效

frmMyForm.AddObject('shpLine','Line')  && 向表单添加一个 Line 控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && Up 命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && Down 命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && Quit 命令按钮

frmMyForm.shpLine.Visible = .T.  && 使 Line 控制可见

frmMyForm.shpLine.Top = 20  && 指定 Line 控制所在行

frmMyForm.shpLine.Left = 125  && 指定 Line 控制所在列

frmMyForm.cmdCmndBtn1.Visible =.T.  && Up 命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && Down 命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && Quit 命令按钮可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮标题

Left = 50  && 命令按钮所在列

Top = 100  && 命令按钮所在行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏 Line 控制

ThisForm.shpLine.LineSlant ='/'  & 向上倾斜

ThisForm.shpLine.Visible = .T.  && 显示 Line 控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  &&命令按钮标题

Left = 200  && 命令按钮所在列

Top = 100  && 命令按钮所在行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏 Line 控制

ThisForm.shpLine.LineSlant ='\'  && 向下倾斜

ThisForm.shpLine.Visible = .T.  && 显示 Line 控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认取消命令(Esc)

Left = 125  && 命令按钮所在列

Top = 150  && 命令按钮所在行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理， 关闭表单

ENDDEFINE


 请参阅

ControlBox 属性


CLOSE 命令

请参阅

关闭各种类型的文件。

语法

CLOSE
[ALL | ALTERNATE | DATABASES [ALL] | FORMAT | INDEXES
| PROCEDURE | TABLES [ALL]]

参数

ALL

关闭所有工作区中打开的数据库、表和索引，并选择工作区 1。CLOSE ALL 也关闭任何用 FCREATE( ) 和 FOPEN( ) 低级文件功能打开的文件。

CLOSE ALL 关闭：

 •	   表单设计器

 •	   项目管理器

 •	   标签设计器

 •	   报表设计器

 •	   查询设计器

但 CLOSE ALL 不关闭：

 •	   命令窗口

 •	   调试窗口

 •	   帮助

 •	   跟踪窗口

CLOSE ALTERNATE

关闭用 SET ALTERNATE 打开的替代文件。

CLOSE DATABASES [ALL]

关闭当前数据库和表。若没有当前数据库，则关闭所有工作区内所有打开的自由表、索引和格式文件，并选择工作区 1。

ALL

指定关闭：

 •	   所有打开的数据库和其中的表。

 •	   所有打开的自由表。

 •	   所有工作区内所有索引和格式文件。

选择工作区 1。

CLOSE FORMAT

关闭当前工作区内用 SET FORMAT 打开的格式文件。

CLOSE INDEXES

关闭当前工作区内所有打开的索引文件（只有单项索引的 .IDX 和独立复合 .CDX 文件）。不关闭结构复合索引（与表自动同时打开的 .CDX 文件）。

CLOSE PROCEDURE

关闭用 SET PROCEDURE 打开的过程文件。

CLOSE TABLES [ALL]

关闭所有打开数据库中的所有表，但不关闭数据库。若没有已打开的数据库，则 CLOSE TABLES 关闭所有工作区内的自由表。

若正在执行某一事务，则不应执行 CLOSE TABLES；否则 Visual FoxPro 产生错误信息。

ALL

指定关闭所有工作区中的所有表，包括自由表。所有数据库仍保持打开。


请参阅

ADD TABLE，CLOSE MEMO，CREATE DATABASE


CLOSE MEMO 命令

请参阅

关闭一个或多个备注编辑窗口。

语法

CLOSE MEMO MemoFieldName1 [, MemoFieldName2 ...] | ALL

参数

MemoFieldName1 [, MemoFieldName2 ...]

指定备注字段名，以关闭其备注编辑窗口。若要关闭一组备注编辑窗口，可以包括一列用逗号分隔的备注字段名。通过包括表别名可以关闭另外一个工作区的打开表中的备注字段的备注编辑窗口。

ALL

关闭任何打开表中所有备注字段的备注编辑窗口。

说明

CLOSE MEMO 关闭用 MODIFY MEMO 打开或从浏览窗口或编辑窗口打开的备注编辑窗口。CLOSE MEMO 保存对备注字段的任何更改。

关闭包含备注字段的表会保存所做的任何更改，并关闭备注窗口。


请参阅

BROWSE，MODIFY MEMO


CloseTables 方法

请参阅

关闭与数据环境相关的表和视图。

应用于

数据环境

语法

DataEnvironment.CloseTables

说明

关闭与数据环境中临时表对象相关的表和视图。通过调用 OpenTables 方法可以重新打开表和视图。


请参阅

AfterCloseTables 事件，AutoCloseTables 属性，BeforeOpenTables 事件，OpenTables 方法


Cls 方法

请参阅

清除表单中的图形和文本。

应用于

表单，_SCREEN

语法

Object.Cls

说明

Cls 清除运行期间图形和打印语句生成的文本和图形。Cls 方法不影响设计期间用 Picture 属性和控制创建并放置在表单上的背景位图。

Cls 方法将 CurrentX 和 CurrentY 属性重新设置为 0。


请参阅

Circle 方法，CurrentX, CurrentY 属性，Line 方法，Picture 属性


CMONTH( ) 函数

请参阅	示例

返回给定日期或日期时间表达式的月份名称。

语法

CMONTH(dExpression | tExpression)

参数

dExpression

指定日期表达式，CMONTH( ) 返回其月份名称。

tExpression

指定日期时间表达式，CMONTH( ) 返回其月份名称。

返回值类型

字符型

说明

CMONTH( ) 是字符型月份函数，按适当的名词格式返回月份名称字符串。


? CMONTH(DATE( ))

STORE {02/16/95} TO gdDueDate

? 'Your payment was due in ', CMONTH(gdDueDate)

STORE gdDueDate+60 TO gdFinalDate

? 'You must pay by ', CMONTH(gdFinalDate)


请参阅

DMY( )，MDY( )，MONTH( )


CNTBAR( )函数

请参阅	示例

返回用户自定义菜单或 Visual FoxPro 系统菜单上菜单项的数目。

语法

CNTBAR([cMenuName])

参数

cMenuName

指定菜单名，CNTBAR( ) 函数返回其菜单项数目。有关 Visual FoxPro 系统菜单名的清单，请参阅系统菜单名称主题。

若省略 cMenuName，则 CNTBAR( )返回 DEFINE POPUP 创建的活动菜单上菜单项的数目。

返回值类型

数值型

说明

若用户自定义菜单是用 DEFINE POPUP 中的 PROMPT 子句创建的，则当执行 ACTIVATE POPUP 时，Visual FoxPro 求出菜单中菜单项的数目。对于这种菜单，只有在激活菜单以后 CNTBAR( ) 才能返回一个有意义的值。但是，如果菜单中的菜单项是用 DEFINE BAR 命令创建的，则在执行 ACTIVATE POPUP 之前 CNTBAR( ) 便能确定菜单项数目。


*在下面名为 CNTBAR.PRG 的示例中，向系统菜单中添加一个
* 菜单标题，创建带有四个菜单项的菜单 popEnv 。当选择菜单
* 项时，程序在每个菜单项旁放置一个标记字符。在循环中使用
* CNTBAR( ) 可以在菜单项旁显示标记。

*** 此程序命名为 CNTBAR.PRG ***

CLEAR

SET TALK OFF

DEFINE PAD padEnv OF _MSYSMENU PROMPT 'E\<nvironment';

KEY ALT+V, 'ALT+V'

ON PAD padEnv OF _MSYSMENU ACTIVATE POPUP popEnv

DEFINE POPUP popEnv MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF popEnv PROMPT '\<Status Bar'

DEFINE BAR 2 OF popEnv PROMPT '\<Clock'

DEFINE BAR 3 OF popEnv PROMPT '\<Extended Video'

DEFINE BAR 4 OF popEnv PROMPT 'St\<icky'

ON SELECTION POPUP popEnv DO enviropop IN cntbar.prg

FOR i = 1 TO CNTBAR('popEnv')

DO CASE

CASE PRMBAR('popEnv', i) = 'Status Bar'

SET MARK OF BAR i OF popEnv TO  SET('STATUS') = 'ON'

CASE PRMBAR('popEnv', i) = 'Clock'

SET MARK OF BAR i OF popEnv TO  SET('CLOCK') = 'ON'

CASE PRMBAR('popEnv', i) = 'Extended Video'

SET MARK OF BAR i OF popEnv TO  SROW( ) > 25

CASE PRMBAR('popEnv', i) = 'Sticky'

SET MARK OF BAR i OF popEnv TO  SET('STICKY') = 'ON'

ENDCASE

ENDFOR

PROCEDURE enviropop

DO CASE

CASE PROMPT() = 'Status'

IF mrkbar('popEnv', bar( ))

DO CASE

CASE _WINDOWS OR _MAC

SET STATUS BAR OFF

CASE _DOS

SET STATUS OFF

OTHERWISE

ENDCASE

SET MARK OF BAR bar( ) OF popEnv TO .F.

ELSE

DO CASE

CASE _WINDOWS OR _MAC

SET STATUS BAR ON

CASE _DOS

SET STATUS ON

OTHERWISE

ENDCASE

SET MARK OF BAR bar( ) OF popEnv TO .T.

ENDIF

CASE PROMPT( ) = 'Clock'

IF mrkbar('popEnv', bar( ))

SET CLOCK OFF

SET MARK OF BAR bar( ) OF popEnv TO .F.

ELSE

DO CASE

CASE _WINDOWS OR _MAC

SET STATUS BAR ON

SET CLOCK STATUS

CASE _DOS

SET CLOCK ON

OTHERWISE

ENDCASE

SET MARK OF BAR bar( ) OF popEnv TO .T.

ENDIF

CASE PROMPT( ) = 'Extended Video'

IF MRKBAR('popEnv', bar( ))

SET DISPLAY TO VGA25

SET MARK OF BAR bar( ) OF popEnv TO .F.

ELSE

SET DISPLAY TO VGA50

SET MARK OF BAR bar( ) OF popEnv TO .T.

ENDIF

CASE PROMPT( ) = 'Sticky'

IF MRKBAR('popEnv', bar( ))

DO CASE

CASE _WINDOWS OR _MAC

WAIT WINDOW 'STICKY is always on in this Visual FoxPro version'

CASE _DOS

SET STICKY OFF

OTHERWISE

ENDCASE

SET MARK OF BAR bar( ) OF popEnv TO .F.

ELSE

DO CASE

CASE _WINDOWS OR _MAC

WAIT WINDOW 'STICKY is always ON in Visual FoxPro'

CASE _DOS

SET STICKY ON

OTHERWISE

ENDCASE

   	SET MARK OF BAR bar( ) OF popEnv TO .T.

ENDIF

ENDCASE


请参阅

ACTIVATE POPUP，CNTPAD( )，CREATE MENU，DEFINE BAR，DEFINE POPUP，GETBAR( )，MRKBAR( )，ON BAR，ON SELECTION BAR，PRMBAR( )


CNTPAD( ) 函数

请参阅	示例

返回用户自定义菜单栏或 Visual FoxPro 系统菜单栏上菜单标题的数目。

语法

CNTPAD(cMenuBarName)

参数

cMenuBarName

指定菜单栏名称，CNTPAD( ) 返回其中菜单标题数目。

返回值类型

数值型


* 下列命令使用 CNTPAD( ) 显示 Visual FoxPro 系统菜单栏中菜
* 单标题的数目。

? CNTPAD('_MSYSMENU')


请参阅

ACTIVATE MENU，CNTBAR( )，CREATE MENU，DEFINE PAD，DEFINE MENU，GETPAD( )，MRKPAD( )，ON PAD，ON SELECTION PAD，PRMPAD( )


COL( ) 函数

请参阅	示例

返回光标当前所在的列号。

语法

COL( )

返回值类型

数值型

说明

将屏幕输出内容重定向到相对于光标当前列位置的某个位置时，COL( ) 特别有用。

特殊操作符 ＄ 可代替 COL( )。


CLEAR

@ 5,5 SAY ''

@ ROW( ), COL( )+12 SAY 'Contact person'

@ ROW( ), $+12 SAY 'Contact person'


请参阅

PCOL( )，PROW( )，ROW( )，WCOLS( )，WROWS( )


Colors 概述
Colors（颜色）概述

请参阅

Visual FoxPro 为完全控制颜色提供了一组完善的命令。

默认时，Visual FoxPro 和 FoxPro for Macintosh 从操作系统的“控制面板”设置中取得颜色。启动时，将控制面板颜色映象为 Visual FoxPro 和 FoxPro for Macintosh 默认配色方案。可直接用 SET COLOR 命令或在控制面板中交互地设置颜色。有关用控制面板设置颜色的详细内容，请参阅 Windows 和 Macintosh 文档。

并非所有的 Visual FoxPro 和 FoxPro for Macintosh 界面单元都可用配色方案来控制。例如，查看窗口和命令窗口系统单元、系统菜单栏等等。

在 FoxPro for MS-DOS 中，可以定义 FoxPro for MS-DOS 系统界面（系统菜单栏、窗口、警告、对话框等）和用户自定义对象（控制、菜单、窗口等）单元的颜色。可直接用 SET COLOR 命令或用 Color Picker 对话框交互地设置颜色。从“窗口”菜单中选择 Color 即可得到 Color Picker 对话框。Color Picker 对话框提供了设置颜色的最快方法，并允许保存颜色设置以备后用。有关用 Color Picker 对话框设置颜色的详细内容，请参阅 FoxPro for MS-DOS 2.6 版《用户指南》中的“窗口菜单”一章。

颜色术语

在整个 FoxPro 文档中都可以使用下列颜色术语。

颜色对

一个颜色对包含两个分别指定前景和背景颜色的颜色代码。颜色对由正斜杠分隔的两个字母组成；第一个字母指定前景色，第二个字母指定背景色。

例如，下列颜色对指定了白色背景和红色前景：

R/W

下表列出了可用的颜色及其代码：

颜色	代码
黑	N
空白	X
蓝	B
棕	GR
青	BG
绿	G
相反色	I
洋红	RB
红	R
白	W
黄	GR+
增强	U
放在颜色代码后的星号 ( * ) 用来指示背景色的闪烁或发亮（取决于视频硬件和 SETBLINK 的设置值）。在 Visual FoxPro 和 FoxPro for Macintosh 中，包含星号使背景发亮而不是闪烁。放在颜色代码后的加号 ( + ) 指示背景高亮度。

在单色监视器上，只有四种颜色可用：白 ( W )、黑 ( N )、增强 ( U )和反相视频 ( I )。空白 ( X )色可用于输入口令。

RGB 颜色对

颜色对也可由一组用逗号分隔的六个 RGB（红、绿、蓝）颜色值指定。这些值的范围是从 0（最低亮度或没有颜色）到 255（最高亮度或发亮颜色）。每个前景色或背景色需要三个值，一个用于红色，一个用于绿色，另一个用于蓝色。因此，一个颜色对需要六个值：三个用于前景色，三个用于背景色。

下面是深灰色（高亮度黑色）中红色的 RGB 颜色代码：

RGB(255,0,0,128,128,128)

上面 RGB 表达式中的前三个值设置前景色为红色，而后三个值设置背景色为深灰色。

下面是 FoxPro 中可用的颜色表。包括颜色代码和相应的RGB值。

颜色	颜色代码	RGB 值
白	W+	255,255,255
黑	N	0,0,0
深灰	N+	64,64,64
灰	W	192,192,192
红	R+	255,0,0
深红	R	128,0,0
黄	GR+	255,255,0
深黄	GR	128,128,0
绿	G+	0,255,0
深绿	G	0,128,0
青	BG+	0,255,255
深青	BG	0,128,128
蓝	B+	0,0,255
深蓝	B	0,0,128
洋红	RB+	255,0,255
深洋红	RB	128,0,128
空白	X	N/A
当使用 RGB 值时，用下列规则确定颜色：

 •	   当所有三个颜色值（R、G或B）都小于 32 时，颜色是黑色。

 •	   当所有三个颜色值（R、G或B）处于 32 和 64 之间时，字符代码为深灰色。

 •	   .当所有三个颜色值（R、G或B）处于 65 和 191 之间时，字符代码为灰色。

 •	   当三个颜色值（R、G或B）中的任何一个值大于 191 时，颜色是高亮度色（+ 或 *）。

颜色对列表

颜色对列表包括用逗号分隔的一到十个颜色对。例如：

W+/B, W+/BG, GR+/B, GR+/B, R+/B, W+/GR, GR+/RB, N+/N, GR+/B, R+/B

单色监视器的颜色对列表如下所示：

W/N, N+/W, W+/N, W+/N, W/N, U+/N, W+/N, -, W+/N, W/N

单色监视器的颜色对列表中，第八个颜色对位置可能有一个虚线 ( - ) 说明没有阴影。

颜色对也可指定为一组 RGB（红、绿、蓝）值。一组 RGB 颜色值如下所示：

RGB(0,255,0,255,0,0), RGB(127,255,0,0,0,0), ...

配色方案

配色方案是一组 10 个颜色对。使用 SCHEME( ) 或 RGBSCHEME( ) 返回配色方案的颜色对。

配色方案控制界面单元（如系统窗口、用户自定义窗口、菜单等）的颜色。在 Visual FoxPro 和 FoxPro for Macintosh 中，一些界面单元的颜色不是由配色方案控制的，如查看窗口、命令窗口和系统菜单栏等等。

可以在 Visual FoxPro、FoxPro for Macintosh 和 FoxPro for MS-DOS 配置文件中指定自己的启动配色方案。对每个想要更改的配色方案应包含下行：

COLOR OF SCHEME nScheme = Colorpairlist

附注

在 Visual FoxPro 中，配色方案 13 到 15 被保留为内部使用。在 FoxPro for Windows 中，配色方案 13 和 14 被保留为内部使用。在 FoxPro for Macintosh 中，配色方案 13 到 16 被保留为内部作用。不要使用这些配色方案。

颜色集合

颜色集合由 24 个配色方案组成。可在颜色集合中保存完整的颜色环境。在 FoxPro for Macintosh 中不支持颜色集合。

可象键盘宏和内存变量一样保存颜色集合以备后用。用 CREATE COLOR SET 命令可以保存颜色集合。在 FoxPro for MS-DOS 中，也可在 Color Picker 对话框中保存颜色集合。可为颜色集合指定最长 10 个字符的名称。颜色集合存储在 FOXUSER.DBF 资源文件中。

可用 SET COLOR SET 加载颜色集合。在 FoxPro for MS-DOS 中，也可在 Color Picker 对话框中加载颜色集合。

当第一次启动 Visual FoxPro 和 FoxPro for Windows 时，控制面板颜色设置被加载到默认颜色集合中。当第一次启动 FoxPro for MS-DOS 时，加载一个默认颜色集合。若要在配置文件中指定一个启动颜色集合，应包括下行：

COLOR SET = ColorSetName


请参阅

CREATE COLOR SET，GETCOLOR( )，RGB( )，RGBSCHEME( )，SET COLOR OF SCHEME，SET COLOR SET，SET COLOR TO


ColorScheme 属性

请参阅

指定控制使用的配色方案。包含此属性是为了提供向后兼容性。可使用 BackColor, ForeColor 属性代替。

应用于

复选框，组合框，命令按钮，编辑框，标签，列表框，选项框按钮，形状，微调，文本框

语法

Control.ColorScheme[ = nType]

设置

nType

下表列出了 ColorScheme 属性设置：

设置	说明
0	（默认值）标准颜色属性决定控制的颜色。
1 到 24	FoxPro 2.X 版配色方案决定控制的颜色。
说明

设计和运行时可用。若要使用 ColorScheme 属性，必须将 ColorSource 设置为 2（对象配色方案）。


请参阅

BackColor, ForeColor 属性，ColorSource 属性


ColorSource 属性

请参阅

确定如何设置控制的颜色。

应用于

复选框，组合框，命令按钮，编辑框，标签，列表框，选项框按钮，形状，微调，文本框

语法

Object.ColorSource[ = nSource]

设置

nSource

下表列出了 nSource 的设置：

设置	说明
0	（默认值）对象的 Color 属性。控制使用对象的 Color 属性设置（前景色、背景色等）。
1	表单配色方案。控制使用所在表单的配色方案。
2	ColorScheme 属性方案。控制使用 ColorScheme 属性指定的配色方案。
3	默认方案。控制使用默认配色方案。对大多数控制，默认配色方案是表单配色方案；对于编辑框和列表框，默认配色方案是方案 2，“用户菜单”。
说明

设计和运行时可用。


请参阅

ColorScheme 属性


Column 对象
Column （列）对象

请参阅	属性	事件	方法

创建表格中的列。

语法

Column

说明

表格中列的数目可用表格的 ColumnCount 属性指定。

表格中的列可包括表中的字段数据或表达式的值。可使用 DataSource 属性指定在列中显示的数据。

列也可包含控制。可以用表格所在表单的 Init 事件中的 AddObject 方法将控制添加到表格的列中。

注意，除非发生了表格的 Init 事件，否则不能使用列的标头和控制。

有关在表格中创建列的详细内容，请参阅表格控制主题和《开发指南》第十一章“使用控制”。


 属性

Alignment	BackColor	BaseClass
Bound	Class	ClassLibrary
ColumnOrder	ControlCount	Controls
ControlSource	CurrentControl	DynamicAlignment
DynamicBackColor	DynamicCurrentControl	DynamicFontBold
DynamicFontItalic	DynamicFontName	DynamicFontOutline
DynamicFontShadow	DynamicFontSize	DynamicFontStrikeThru
DynamicFontUnderline	DynamicForeColor	Enabled
FontBold	FontItalic	FontName
FontOutline	FontShadow	FontSize
FontStrikeThru	FontUnderline	ForeColor
Movable	Name	Parent
ParentClass	ReadObject	ReadOnly
Resizable	SelectOnEntry	Sparse
Visible	Width


 事件

MouseMove	Moved	Resize


 方法

AddObject	Move	ReadExpression
ReadMethod	Refresh	RemoveObject
SetAll	SetFocus	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS，表格控制，标头对象


ColumnCount 属性

请参阅

指定表格、组合框或列表框控制中列对象的数目。

应用于

组合框，表格，列表框

语法

Object.ColumnCount[ = nCol]

设置

nCol

对于表格控制，默认的属性设置为  1。当 ColumnCount 属性设置为  1 时，则自动创建足够的列，以容纳数据源中的所有字段。

对于组合框或列表框控制，指定控制中所包含列的数目。若设置 ColumnCount 为 0，则不显示列。

说明

对于表格，该属性设计时可用运行时可读写。

对于组合框或列表框，该属性设计和运行时可用。

对于表格，可使用 AddColumn 方法增加列的数目。


请参阅

AddColumn 方法，Order 属性


ColumnLines 属性

请参阅

显示或隐藏列之间的线条。

应用于

组合框，列表框

语法

Control.ColumnLines[ = lExpr]

设置

lExpr

指定是否显示分隔列的线条。下表列出了 ColumnLines 属性的设置：

设置	说明
“真”(.T.)	（默认值）显示列间线条。
“假”(.F.)	隐藏列间线条。
说明

设计和运行时可用。


请参阅

ColumnWidths 属性


ColumnOrder 属性

请参阅

指定表格控制中列对象的相对顺序。

应用于

列

语法

Column.ColumnOrder[ = nExpr]

设置

nExpr

指定一列相对于表格中其他列的顺序。

说明

设计和运行时可用。

若表格包含了五列，并且要使第三列最后显示，则设置第三列的 ColumnOrder 属性为 5。第四列的 ColumnOrder 设置就变成了 3，第五列的 ColumnOrder 设置变成 4，等等。

附注

ColumnOrder 设置不必是连续的，可以有间隔。例如，若一个表格包含 3 列，可增加第四列并且设置第四列的 ColumnOrder 属性为 10。


请参阅

Activate 事件，Deactivate 事件，ZOrder 方法


Columns 属性

请参阅

通过列编号访问表格控制中单个列对象的数组。

应用于

表格

语法

Grid.Columns(nCol).Property [ = Setting]

设置

nCol

指定表格中的列。最左边的列号为 1。

Property

指定要访问的列的属性。

Setting

为所有用 nCol 指定的单元指定新的属性设置。

说明

设计和运行时可用。

使用 Columns 属性可访问表格中指定列的属性。例如，SpecialGrid.Columns(1) .BackColor=RGB(255，0，0) 更改第一列中所有单元的 BackColor 属性为浅红色。


请参阅

列对象，ColumnCount 属性，SetAll 方法


ColumnWidths 属性

请参阅

指定组合框或列表框控制的列宽。

应用于

组合框，列表框

语法

Control.ColumnWidths[ = cCol1Width， cCol2Width， ... cColnWidth]

设置

cCol1Width， cCol2Width，...cColnWidth

指定组合框或列表框中一列或一组列的宽度。例如，cColumnWidths =“5，7，9”指定第一列为 5 个单位宽，第二列为 7 个单位宽，第三列为 9 个单位宽，度量单位由表单的 ScaleMode 属性指定。使用逗号分隔每个宽度值。可用 ColumnCount 属性指定列数。

说明

设计和运行时可用。


请参阅

ColumnCount 属性，ScaleMode 属性，Width 属性


ComboBox 控制
ComboBox（组合框）控制

请参阅	属性	事件	方法

创建一个组合框。

语法

ComboBox

说明

当被选中时，组合框打开，并显示项的列表，从中可选择一项。组合框控制结合了文本框控制和列表框控制的特性。可在文本框部分输入信息或从列表框部分选择一项。

Style 属性确定组合框的类型。若 Style 属性设为 0，则创建一个下拉式组合框；若 Style 属性设为 2，则创建一个下拉列表框。

有关组合框控制的详细内容，请参阅表单设计器主题和《开发指南》的第十一章“使用控制”。


 属性

Alignment

BackColor

BaseClass

BorderColor

BoundColumn

Class

ClassLibrary

ColorScheme

ColorSource

ColumnCount

ColumnLines

ColumnWidths

Comment

ControlSource

DisabledBackColor

DisabledForeColor

DisabledItemBackColor

DisabledItemForeColor

DisplayValue

DragIcon

DragMode

Enabled

FirstElement

FontBold

FontItalic

FontName

FontOutLine

FontShadow

FontSize

FontStrikeThru

FontUnderLine

ForeColor

Height

HelpContextID

IncrementalSearch

ItemBackColor

ItemData

ItemForeColor

ItemIDData

Left

List

ListCount

ListIndex

ListItem

ListItemID

Margin

MousePointer

Name

NewIndex

NewItemID

NumberOfElements

Parent

ParentClass

ReadObject

RowSource

RowSourceType

Selected

SelectedBackColor

SelectedForeColor

SelectedID

SelectedItemBackColor

SelectedItemForeColor

SelLength

SelStart

SelText

Sorted

SpecialEffect

StatusBarText

Style

TabIndex

TabStop

Tag

TerminateRead

ToolTipText

Top

TopIndex

TopItemID

Value

Visible

Width


 事件

Click	DblClick	Destroy
DownClick	DragDrop	DragOver
DropDown	Error	ErrorMessage
GotFocus	Init	InteractiveChange
KeyPress	LostFocus	Message
MouseDown	MouseMove	MouseUp
ProgrammaticChange	RangeHigh	RangeLow
RightClick	UIEnable	UpClick
Valid	When


 方法

AddItem	AddListItem	Clear
CloneObject	Drag	IndexToItemID
ItemIDToIndex	Move	ReadExpression
ReadMethod	Refresh	RemoveItem
RemoveListItem	Requery	SaveAsClass
SetFocus	UIEnable	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE CLASS， CREATE FORM， DEFINE CLASS


CommandButton 控制
CommandButton（命令按钮）控制

请参阅	属性	事件	方法	示例

创建单个命令按钮。

语法

CommandButton

说明

命令按钮通常用来启动一个事件，如关闭一个表单、移到不同记录、打印报表等动作。使用 CommandGroup 控制可创建一组命令按钮，并且可以单个或作为一组操作其中的按钮。

可使用 Caption 属性指定在命令按钮上显示的文本。使用 Picture 属性指定命令按钮的图片。

通过单击命令按钮可以选择该命令按钮。若 Default 属性设置为“真”(.T.)，则可按 ENTER 键选择此命令按钮；若命令按钮的 Cancel 属性设置为“真”(.T.)，则可通过按 ESC 键选择此命令按钮。

有关命令按钮的详细内容，请参阅表单设计器主题和《开发指南》的第十一章“使用控制”。


 属性

AutoSize	BaseClass	Cancel
Caption	ClassLibrary	Class
ColorScheme	ColorSource	Comment
Default	DisabledForeColor	DisabledPicture
DownPicture	DragIcon	DragMode
Enabled	FontBold	FontItalic
FontName	FontOutLine	FontShadow
FontSize	FontStrikeThru	FontUnderLine
ForeColor	Height	HelpContextID
Left	MousePointer	Name
Parent	ParentClass	Picture
ReadObject	SpecialEffect	StatusBarText
Style	TabIndex	TabStop
Tag	TerminateRead	ToolTipText
Top	Visible	Width


 事件

Click	Destroy	DragDrop
DragOver	Error	ErrorMessage
GotFocus	Init	InteractiveChange
KeyPress	LostFocus	Message
MouseDown	MouseMove	MouseUp
RightClick	UIEnable	Valid
When


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	Refresh
SaveAsClass	SetFocus	WriteExpression
WriteMethod	ZOrder


*下面的示例演示如何向表单中添加命令按钮。用 Caption 属性可指定
* 命令按钮上的文本以及每个按钮的快捷键的文本。Cancel 属性指定
* 一个按钮，按 ESC 时选择此命令按钮。用 AddObject 方法向表单
* 添加三个命令按钮。允许更改“线条”控制倾斜的方向或关闭表单。

frmMyForm = CREATEOBJECT('Form')  &&创建一个表单

frmMyForm.Closable = .F.  && 废止控制菜单框

frmMyForm.AddObject('shpLine'，'Line')  && 向表单添加一个“线条”控制

frmMyForm.AddObject('cmdCmndBtn1'，'cmdMyCmndBtn1')  && Up 命令按钮

frmMyForm.AddObject('cmdCmndBtn2'，'cmdMyCmndBtn2')  && Down 命令按钮

frmMyForm.AddObject('cmdCmndBtn3'，'cmdMyCmndBtn3')  && Quit 命令按钮

frmMyForm.shpLine.Visible = .T.  && 使“线条”控制可见

frmMyForm.shpLine.Top = 20  && 指定“线条”控制行

frmMyForm.shpLine.Left = 125  && 指定“线条”控制列

frmMyForm.cmdCmndBtn1.Visible =.T.  && Up 命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && Down 命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && Quit 命令按钮可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 启动事件处理

DEFINE CLASS cmdMyCmndBtn1 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮上的标题

Left = 50  && 命令按钮列

Top = 100  && 命令按钮行

Height = 25  && 命令按钮高

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏“线条”控制

ThisForm.shpLine.LineSlant ='/'  && 向上倾斜

ThisForm.shpLine.Visible = .T.  && 显示“线条”控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮上的标题

Left = 200  && 命令按钮列

Top = 100  && 命令按钮行

Height = 25  && 命令按钮高

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏“线条”控制

ThisForm.shpLine.LineSlant ='\'  && 向下倾斜

ThisForm.shpLine.Visible = .T.  && 显示“线条”控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认“取消”命令按钮 (Esc)

Left = 125  && 命令按钮列

Top = 150  && 命令按钮行

Height = 25  &&命令按钮高

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭表单

ENDDEFINE


请参阅

命令按钮控制，CREATE CLASS，CREATE FORM，DEFINE CLASS


CommandGroup 控制
CommandGroup（命令组）控制

请参阅	属性	事件	方法

创建一组命令按钮。

语法

CommandGroup

说明

可使用 CommandGroup 控制可创建一组命令按钮，并且可以单个或作为一组操作其中的按钮。使用 CommandButton 控制可创建单个命令按钮。

可使用 ButtonCount 属性指定组中的命令按钮数目，使用 Caption 属性指定命令按钮组的标签。

有关命令按钮组的详细内容，请参阅表单设计器主题和《开发指南》的第十一章“使用控制”。


 属性

AutoSize	BackColor	BackStyle
BaseClass	BorderColor	BorderStyle
ButtonCount	Buttons	Class
ClassLibrary	Comment	ControlSource
DragIcon	DragMode	Enabled
Height	HelpContextID	Left
MousePointer	Name	Parent
ParentClass	ReadObject	SpecialEffect
TabIndex	Tag	TerminateRead
Top	Value	Visible
Width


 事件

Click	DblClick	DragDrop
DragOver	Error	ErrorMessage
Init	InteractiveChange	Message
MouseDown	MouseMove	MouseUp
ProgrammaticChange	RightClick	UIEnable
Valid	When


 方法

AddObject	CloneObject	Drag
Move	ReadExpression	ReadMethod
Refresh	RemoveObject	SaveAsClass
SetAll	WriteExpression	WriteMethod
ZOrder


请参阅

命令按钮控制，CREATE CLASS，CREATE FORM，DEFINE CLASS


Comment 属性

请参阅

存储有关对象的信息。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑，表单，表单集，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.Comment[ = cTextString]

设置

cTextString

指定一个文本字符串。

说明

设计和运行时可用。

与其他属性不同，Visual FoxPro 并不使用 Comment 属性的值。因此可使用这个属性标识或说明对象。

可使用这个属性指定对象的一个标识字符串而不影响对象的其他属性设置。将表单或控制作为变量传递给某一过程时，如果想了解该表单或控制的情况，Comment 属性很有用。

Comment 属性的默认值设置为零长度字符串（“”）。

提示

当创建表单的一个新的实例时，应给 Comment 属性指定一个新值。


请参阅

Caption 属性，Name 属性


COMPILE 命令

请参阅

编译一个或多个源文件，并为每一个源文件创建一个目标文件。

语法

COMPILE FileName | FileSkeleton
[ENCRYPT] [NODEBUG]
[AS nCodePage]

参数

FileName | FileSkeleton

指定一个要编译的文件或编译一组与文件梗概相匹配的文件。该文件梗概可包含通配符如 * 和 ? 。例如，要编译当前目录里所有带 .PRG 扩展名的程序文件，可执行 COMPILE *.PRG。

ENCRYPT

加密编译 Visual FoxPro 程序。这可以防止任何对原始源程序的访问。为保护源代码，在编译要发布的程序时经常需要包含这个选项。

NODEBUG

使编译文件每行缩小 2 字节。编译文件中的这两个字节是对源文件中对应行的引用。删除这些字节不影响程序的性能，但是可缩小编译文件大小并节省磁盘空间。

当包含 NODEBUG 选项时，不能在跟踪窗口中显示程序的执行情况或使用 MESSAGE(1) 返回产生错误的程序行的源代码。

AS nCodePage

指定编译程序的代码页。该子句指定的编译代码页将改写由 SET CPCOMPILE 指定的全局编译代码页。

说明

Visual FoxPro 只执行目标文件。因此若源文件尚未编译，则在运行程序时会自动编译源文件，而源文件保持不变。创建的编译文件与源文件的基本名相同，但扩展名不同。下表列出了每种文件类型的源文件和编译文件扩展名。

文件类型	源文件扩展名	编译文件扩展名
程序文件	PRG	FXP
表单代码	SPR	SPX
菜单代码	MPR	MPX
查询	QPR	QPX
格式	FMT	PRX
编译器检查源文件中的任何语法错误。若 SET LOGERRORS 是 ON，则编译文件时，编译错误信息被保存到一个文本文件中。错误日志文件与编译文件的基本名相同，但扩展名为 .ERR；若 SET LOGERRORS 是 OFF，则不创建错误日志文件。


请参阅

BUILD APP，BUILD PROJECT，#DEFINE ... #UNDEF，#IF ... #ENDIF，#IFDEF | #IFNDEF ... #ENDIF，#INCLUDE，MODIFY COMMAND，MODIFY PROJECT，SET CPCOMPILE，SET LOGERRORS


COMPILE DATABASE 命令

请参阅	示例

编译数据库中的存储过程。

语法

COMPILE DATABASE DatabaseName

参数

DatabaseName

指定数据库名，该数据库中包含要编译的存储过程。可编译未打开数据库中的存储过程。

说明

使用 COMPILE DATABASE 在数据库设计器之外编译存储过程。存储过程可以由 MODIFY PROCEDURE 命令交互地创建和修改，或用 APPEND PROCEDURES 命令以编程方式创建和修改。

COMPILE DATABASE 要求以独占方式使用数据库。要以独占方式打开数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE。


* 下面的示例编译 testdata 数据库中所有的存储过程。

CLOSE DATABASES

COMPILE DATABASE (SYS(2004) + 'samples\data\testdata')


请参阅

APPEND PROCEDURES，COPY PROCEDURES，CREATE TRIGGER，DISPLAY PROCEDURES，MODIFY PROCEDURE，OPEN DATABASE


COMPILE FORM 命令

请参阅

编译一个或多个表单对象。

语法

COMPILE FORM FormName | cFileSkeleton [ALL]

参数

FormName

指定要编译的表单的名称。

cFileSkeleton

指定一组要编译的表单文件。cFileSkeleton 是支持通配符的文件名梗概。例如，要编译所有以 A 开头的表单对象，可使用下列命令：

COMPILE FORM A*

ALL

编译供所有 Visual FoxPro 平台使用的表单表中的所有记录。如果省略 ALL，则只编译供 Visual FoxPro 当前平台使用的记录。

说明

在表单设计器中保存表单时，自动编译表单。使用 COMPILE FORM 命令可以在表单设计器之外编译表单。

表单源代码存储于表单表的备注字段中。COMPILE FORM 将这些备注字段编译为目标代码，存储在附加的备注字段里。当发出 DO FORM 命令时，执行这个附加字段中的目标代码。


请参阅

CREATE FORM，DO FORM，MODIFY FORM


COMPOBJ( ) 函数

请参阅	示例

比较两个对象的属性。若两者的属性和属性值相同则返回“真”(.T.)。

语法

COMPOBJ(oExpression1, oExpression2)

参数

oExpression1, oExpression2

指定要比较的对象。oExpression1 和 oExpression2 可以是任何求值结果为对象的表达式，如对象引用、对象内存变量或对象数组元素。

返回值类型

逻辑型

说明

若一个对象具有另一个对象所没有的属性，或两个对象具有相同的属性但有一个或多个属性值不同，则 COMPOBJ( ) 返回“假”(.F.)。


* 在下面的示例中，创建了两个名为 lstMyList1 和 lstMyList2
* 的列表框和一个名为 cmbMyCombo 的组合框，并显示每个列表
* 框的 Name 属性。

*  COMPOBJ( ) 用来比较第一个列表框和组合框的属性。因为许多
* 属性不同，所以返回 .F.。然后用 COMPOBJ( ) 比较第一个
* 列表框和第二个列表框的属性。因为 Name 属性不同，所以
* 返回 .F.。用第一个列表框 lstMyList1 代替第二个列表框
* lstMyList2，并用 COMPOBJ( ) 来比较属性。因为这两个列
* 表框的属性相同，所以返回 .T.。

lstMyList1 = CREATEOBJ('ListBox')  && 创建第一个“列表框”

lstMyList2 = CREATEOBJ('ListBox')  && 创建第二个“列表框”

cmbMyCombo = CREATEOBJ('ComboBox')  && 创建一个“组合框”

CLEAR

? lstMyList1.Name  && 显示 List1 的 Name 属性

? lstMyList2.Name  && 显示 List2 的 Name 属性

? COMPOBJ(lstMyList1, cmbMyCombo)	  &&  显示.F.

? COMPOBJ(lstMyList1, lstMyList2)	  && 显示.F.，不同的“名称”

lstMyList2.Name = lstMyList1.Name

? COMPOBJ(lstMyList1, lstMyList2)	  && 显示.T.，相同的属性


请参阅

CREATEOBJECT( )，DEFINE CLASS，GETOBJECT( )，SET CLASSLIB


Container 对象
Container（容器）对象

请参阅	属性	事件	方法

创建可包含其他对象的对象。

语法

Container

说明

容器对象可包含其他对象，并且允许访问被包含对象。例如，若创建了一个由两个列表框和两个命令按钮组成的容器对象，然后将容器对象添加到一个表单中，则可在设计和运行时操作列表框和命令按钮。

有关容器对象的详细内容，以及容器对象与其他对象和控制的区别，请参阅《开发指南》的第三章“面向对象程序设计”。

有关向容器中添加对象的详细内容，请参阅向容器类中添加对象。


属性

BackColor	BackStyle	BaseClass
BorderColor	BorderWidth	Class
ClassLibrary	Comment	ControlCount
Controls	DragIcon	DragMode
Enabled	ForeColor	Height
HelpContextID	Left	MousePointer
Name	ParentClass	Picture
SpecialEffect	TabIndex	TabStop
Top	Visible	Width


事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
GotFocus	Init	LostFocus
MouseDown	MouseMove	MouseUp
Moved	Resize	UIEnable


方法

AddObject	Drag	Draw
Move	Refresh	RemoveObject
SaveAsClass	SetAll	SetFocus
ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


CONTINUE 命令

请参阅	示例

继续执行先前的 LOCATE 命令。

语法

CONTINUE

说明

CONTINUE 在用 LOCATE 查找到记录后使用，继续执行 LOCATE 操作。CONTINUE 移动记录指针到下一条逻辑表达式为“真”(.T.) 的记录，该逻辑表达式是在上一个 LOCATE 中指定的。

在到达文件尾或用 LOCATE 指定的作用范围结束之前，可重复使用 CONTINUE。

若 CONTINUE 查找到一个记录，则 RECNO( ) 返回该记录的记录号，FOUND( ) 返回“真”(.T.)，EOF( ) 返回“假”(.F.)。

如果 CONTINUE 没有找到记录，则 RECNO( ) 返回表的记录个数加一，FOUND( ) 则返回“假”(.F.)，而 EOF( ) 则返回“真”(.T.)。


*在下面的示例中，统计所有法国顾客的数目并显示总数。所有记录
* 可用 LOCATE 命令和循环语句中的 CONTINUE 命令来查找。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

SET TALK OFF

STORE 0 TO gnCount

LOCATE FOR ALLTRIM(UPPER(country)) = 'FRANCE'

DO WHILE FOUND( )

gnCount = gnCount + 1

CONTINUE

ENDDO

? 'Total customers from France: '+ LTRIM(STR(gnCount))


请参阅

EOF( )，FOUND( )，LOCATE，SEEK


Control 对象
Control（控制）对象

请参阅	属性	事件	方法

创建能包含其他被保护对象的控制对象。

语法

Control

说明

Control 控制对象能包含其他对象，但是不能象容器对象那样允许访问被包含的对象。例如，若创建一个由两个列表框和两个命令按钮组成的控制对象，然后将控制对象添加到表单中，则在设计和运行时不能操作列表框和命令按钮。

有关控制对象的详细内容，以及控制对象与其他对象和控制的区别，请参阅《开发指南》的第三章“面向对象程序设计”。


属性

BackColor	BackStyle	BaseClass
BorderColor	BorderWidth	Class
ClassLibrary	Comment	ControlCount
Controls	DragIcon	DragMode
Enabled	ForeColor	Height
HelpContextID	Left	MousePointer
Name	ParentClass	Picture
SpecialEffect	TabIndex	TabStop
Top	Visible	Width


事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
GotFocus	Init	LostFocus
MouseDown	MouseMove	MouseUp
Moved	Resize	UIEnable


方法

Drag	Draw	Move
Refresh	SaveAsClass	SetFocus
ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


ControlBox 属性

请参阅

指定运行时在表单或工具栏的左上角是否显示控制菜单框。

应用于

表单，_SCREEN，工具栏

语法

Object.ControlBox[ = lExpr]

设置

lExpr

下表列出了 ControlBox 属性设置：

设置	说明
“真”(.T.)	（默认值）显示控制菜单框。
“假”(.F.)	不显示控制菜单框。
说明

设计和运行时可用。

模式、无模式表单和工具栏都能包含控制菜单框。在运行时菜单命令是否可用取决于相关属性的设置。例如，设置 MaxButton 和 MinButton 为“假”(.F.)，可使控制菜单上的“最大化”和“最小化”菜单项无效，但“移动”和“关闭”命令仍然可用。

附注

为 ControlBox、BorderStyle、MaxButton 和 MinButton 指定的设置只有在运行时才在表单上反映出来。


请参阅

BorderStyle 属性，Closable 属性，MaxButton 属性，MinButton 属性


ControlCount 属性

请参阅

指定容器对象中控制的数目。

应用于

列，容器对象，控制对象，表单，页面，_SCREEN，工具栏

语法

Object.ControlCount

说明

设计时不可用，运行时只读。

可使用此属性循环遍历容器内的所有控制，并在每个控制上执行一个操作。


请参阅

Controls 属性


控制和对象

请参阅

这个主题说明了对 Visual FoxPro 早期版本所创建的控制和对象以及对 Visual FoxPro 新添加的控制的支持。

创建控制和对象的最简单的途径是使用表单设计器。有关使用表单设计器创建控制的详细内容，请参阅的创建表单主题，和《开发指南》的第九章“创建表单”。

也可以在程序中创建控制和对象，有关从 Visual FoxPro 基类以编程方式创建控制的详细内容，请参阅 DEFINE CLASS 和《开发指南》的第三章“面向对象程序设计”。

FoxPro 早期版本创建的每个控制都有 NAME 子句。NAME 子句为控制创建一个对象引用，控制是由 ＠…GET 和 ＠…EDIT 创建的，允许用 Visual FoxPro 的属性、事件和方法操作这些控制。NAME 子句提供了一个中间步骤，使用户可以使用 Visual FoxPro 面向对象的程序设计技术来升级应用程序。

与 FoxPro 2.x 控制的兼容性

下表列出了 FoxPro 早期版本中可用的控制，以及可以通过编程方式在 Visual FoxPro 中创建相同控制的基类。

FoxPro 2.x 控制	等价的 Visual FoxPro 控制	Visual FoxPro 基类名
@ ... GET - Check Boxes	复选框控制	CheckBox
@ ... GET - Lists	列表框控制	ListBox
@ ... GET - Popups	组合框控制	ComboBox
@ ... GET - Push Buttons	命令按钮控制	CommandButton
@ ... GET - Radio Buttons	选项按钮控制	OptionButton
@ ... GET - Spinners	微调控制	Spinner
@ ... GET - Text Boxes	文本框控制	TextBox
@ ... EDIT - Text Edit Regions	编辑框控制	EditBox
Visual FoxPro 基类

另外，下列控制和对象是 Visual FoxPro 中新添的控制，只能用 Visual FoxPro 基类以编程方式创建。

控制和对象	基类名	说明
列对象	Column	创建表格中的列。
命令组控制	CommandGroup	创建一组命令按钮。
容器对象	Container	创建一个能包含其他对象的对象。
控制对象	Control	创建一个能包含其他被保护对象的控制对象。
临时表对象	Cursor	向表单、表单集或报表的数据环境添加表或视图时创建。
自定义对象	Custom	创建一个用户自定义对象。
数据环境对象	DataEnvironment	打开表单、表单集或报表时创建。
表单对象	Form	创建表单。
表单集对象	FormSet	创建表单集。
表格控制	Grid	创建表格控制。
标头对象	Header	创建表格中列的标头。
图象控制	Image	创建显示 .BMP 图片的图像控制。
标签控制	Label	创建显示文本的标签控制。
线条控制	Line	创建显示水平、垂直或对角线的“线条”控制。
OLE 容器控制	OLEControl	创建 OLE 容器控制。
OLE 绑定型控制	OLEBoundControl	创建 OLE 绑定型控制。
选项组控制	OptionGroup	创建一组选项按钮。
页面对象	Page	创建页框中的页面。
页框控制	PageFrame	创建包含页面的页框。
关系对象	Relation	从表单、表单集或报表的数据环境设计器里建立关系时创建。
分隔符对象	Separator	创建在工具栏的控制间放置空格的分隔符对象。
形状控制	Shape	创建显示正方形、圆或椭圆的“形状”控制。
计时器控制	Timer	创建能在给定时间间隔执行代码的定时器控制。
工具栏对象	Toolbar	创建可放置控制的工具栏。


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


Controls 属性

请参阅

访问容器对象中控制的数组。

应用于

列，容器对象，控制对象，表单，页面，_SCREEN，工具栏

语法

ContainerObject.Controls(Index).Property[ = Expr]

设置

Expr

为包含在 ContainerObject 中的控制指定属性值。

说明

运行时可用。

可使用 Controls 属性访问所包含对象的属性。


请参阅

ControlCount 属性


ControlSource 属性

请参阅

指定与对象绑定的数据源。

应用于

复选框，列，组合框，命令组，编辑框，列表框，OLE 绑定型控制，选项按钮，选项组，微调，文本框

语法

Object.ControlSource[ = cName]

设置

cName

对于控制，cName 是一个变量或字段。

说明

设计和运行时可用。

若 ControlSource 属性设置为字段或变量，则 Value 属性将与 ControlSource 属性所设置的变量或字段具有相同的数值和数据类型。

对于文本框控制，cName 一般是字段。

若“列”的 Bound 属性设置为“真”(.T.)，则“列”的 ControlSource 属性设置适用于列和它所包含的任何控制。若再试图设置控制的 ControlSource 属性，则产生一个错误。若“列”的 Bound 属性设置为“假”(.F.)，则可以直接设置控制的 ControlSource 属性。若又设置了“列”的 ControlSource 属性，则此设置覆盖控制的 ControlSource 设置。


请参阅

Bound 属性，Order 属性，RecordSourceType 属性，Value 属性


_CONVERTER 系统内存变量

请参阅

包含 Visual FoxPro 转换器的应用程序名称。

语法

_CONVERTER = cProgramName

参数

cProgramName

指定一个转换器应用程序。若转换器应用程序不在 Visual FoxPro 当前默认目录下，应在应用程序名中包含路径。

也可通过在 Visual FoxPro 配置文件中包含下行来指定一个转换器应用程序。该行使用如下语法：

_CONVERTER = cProgramName

说明

当试图打开在 FoxPro 早期版本中创建的屏幕、报表或项目时，_CONVERTER 系统内存变量包含了 Visual FoxPro 使用的应用程序名。_CONVERTER 默认地包含 CONVERT.APP。CONVERT.APP 安装在 Visual FoxPro 目录下。可以为转换器应用程序指定一个不同的名字。


请参阅

指定转换器应用程序，系统内存变量概述


COPY FILE 命令

请参阅

复制任何类型的文件。

语法

COPY FILE FileName1 TO FileName2

说明

COPY FILE 创建文件 FileName1 的一个备份。可使用 COPY FILE 复制任何类型的文件。要复制的文件不能打开。源文件名 FileName1 和目标文件名 FileName2 都要包含扩展名。

若使用 COPY FILE 复制含有备注字段、结构索引或两者兼有的表，则必须同时复制 .FPT 和 .CDX 文件。


请参阅

DELETE FILE，FILER，RENAME，RENAME TABLE


COPY INDEXES 命令

请参阅

从单项索引 .IDX 文件创建复合索引标识。

语法

COPY INDEXES IndexFileList | ALL
[TO CDXFileName]

参数

IndexFileList

指定 .IDX 单项索引文件，该文件的索引表达式用于创建标识。用逗号分隔索引文件名。每个标识的名称即为相应单项索引文件的基本名。如果由索引文件创建的标识与已有标识同名，则显示一个对话框（若 SAFETY 是 ON），询问是否要改写标识。

ALL

指定从所有打开的单项索引文件创建索引标识。

TO CDXFileName

创建非结构复合索引文件中的标识。使用 CDXFileName 指定非结构复合索引文件名。若指定的非结构复合索引文件不存在，则 Visual FoxPro 自动创建该文件。

说明

复合索引文件是包含称为标识的独立索引项的索引文件。每个标识由各自的唯一标识名来区别。复合索引文件的默认扩展名是 .CDX。

在使用 COPY INDEXES 之前，必须先打开表和单项索引文件。单项索引文件的索引表达式用于创建新标识。

若省略 TO 子句，则新标识被添加到与表一起自动打开的结构复合索引文件中。若表没有结构复合索引文件，COPY INDEXES 将创建一个。

可以使用 COPY TAG 由复合索引文件标识创建单项索引文件。


请参阅

CDX( )，COPY TAG，DELETE TAG，INDEX，TAG( )，USE


COPY MEMO 命令

请参阅	示例

复制当前记录中的指定备注字段的内容到文本文件。

语法

COPY MEMO MemoFieldName TO FileName
[ADDITIVE]
[AS nCodePage]

参数

MemoFieldName

指定要复制到文本文件的备注字段名。

TO FileName

指定一个新的或已有的文本文件名。备注字段将要复制到该文件中。若在 FileName 中没有提供扩展名，则指定扩展名为 .TXT。也可在文件名中包含路径。

ADDITIVE

将备注字段内容追加到指定文本文件尾。若省略 ADDITIVE，则用备注字段内容替换文本文件内容。

AS nCodePage

指定 COPY MEMO 创建的文本文件的代码页。Visual FoxPro 复制指定备注字段的内容，并且在复制数据的同时，并根据文本文件的代码页自动转换数据。

若为 nCodePage 指定了不被支持的值，Visual FoxPro 产生错误信息。可使用 GETCP( ) 来显示“代码页”对话框，并允许为 Visual FoxPro 创建的文件指定代码页。

若省略 AS nCodePage 或 AS nCodePage 为 0，则不发生代码页转换。


*在下面的示例中，名为 notes 的备注字段内容被复制到名为
* TEST.TXT 的文件中，然后再复制一次备注字段并追加到文本
* 文件尾。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee &&  打开 Employee 表

COPY MEMO notes TO test.txt

WAIT WINDOW 'Memo contents now in test.txt' NOWAIT

MODIFY FILE test.txt

COPY MEMO notes TO test.txt ADDITIVE

WAIT WINDOW 'Memo contents added again to test.txt' NOWAIT

MODIFY FILE test.txt

DELETE FILE test.txt


请参阅

APPEND MEMO，COPY FILE，COPY TO，MODIFY MEMO


COPY PROCEDURES 命令

请参阅	示例

将当前数据库中的存储过程复制到文本文件。

语法

COPY PROCEDURES TO FileName
[AS nCodePage] [ADDITIVE]

参数

FileName

指定文本文件名。存储过程将被复制到此文本文件中。若该文件不存在，Visual FoxPro 自动创建它。

AS nCodePage

指定文本文件的代码页。存储过程将被复制到该文本文件中。Visual FoxPro 复制存储过程，并且在指定了代码页的情况下，自动将存储过程转换到指定的代码页。

若为 nCodePage 指定了一个不被支持的值，Visual FoxPro 产生错误信息。可使用 GETCP( ) 显示“代码页”对话框，并允许为文本文件指定代码页。存储过程将被复制到该文本文件。

若省略 AS nCodePage 或 AS nCodePage 为 0，则不进行代码页转换。

ADDITIVE

将存储过程追加到指定文本文件尾。若省略 ADDITIVE，则存储过程替代文本文件的内容。

说明

使用 COPY PROCEDURES 和 APPEND PROCEDURES 可以通过编程方式修改数据库中的存储过程。当执行 COPY PROCEDURES 时，数据库必须是打开的当前数据库，否则 Visual FoxPro 产生错误信息。


* 下面的示例打开 testdata 数据库，并使用
* COPY PROCEDURES 将存储过程复制到一个名为
* MYPROC.TXT 的临时文件中。然后使用 MODIFY FILE
* 打开这个临时文本文件。若数据库中没有存储过程，则该
* 临时文本文件为空文件。

* 若数据库中没有存储过程，则可运行 APPEND PROCEDURES
*  的示例添加一个存储过程到数据库。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

COPY PROCEDURES TO myproc.txt && 复制存储过程到文件

MODIFY FILE myproc.txt  && 打开文件

DELETE FILE myproc.txt  && 删除文件


请参阅

APPEND PROCEDURES，CREATE TRIGGER，DISPLAY PROCEDURES，MODIFY PROCEDURE，SET DATABASE


COPY STRUCTURE 命令

请参阅	示例

用当前选择的表结构创建一个新的空自由表。

语法

COPY STRUCTURE TO FileName
[FIELDS FieldList]
[[WITH] CDX | [WITH] PRODUCTION]

参数

FileName

指定要创建的自由表的名称。

在 Visual FoxPro 中，新表中每一个字段的默认值和 null 值支持与当前选定表的设置是相同的。

FIELDS FieldList

只将 FieldList 指定的字段复制到新表。若省略 FIELDS FieldList，则把所有字段复制到新表。

[WITH] CDX | [WITH] PRODUCTION

创建与已有表的结构索引文件相同的新表的结构索引文件。原始结构索引文件的标识和索引表达式都复制到新的结构索引文件。

CDX 等同于 PRODUCTION 子句。

在 Visual FoxPro 中，当前选定表的主索引转换成新表的候选索引。


*在下面的示例中，先打开 customer 表。然后将该表的结构复制到
* 名为 backup 的表，并打开 backup 表。最后使用 APPEND FROM
* 命令将 customer 表的记录追加到 backup 表，再为 backup 表
* 打开浏览窗口。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

COPY STRUCTURE TO backup

USE backup

APPEND FROM customer FOR country = 'UK'

BROWSE FIELDS contact, country

USE

DELETE FILE backup.dbf


请参阅

COPY STRUCTURE EXTENDED，CREATE，DISPLAY STRUCTURE


COPY STRUCTURE EXTENDED 命令

请参阅	示例

创建新表，它的字段包含当前选定表的结构信息。

语法

COPY STRUCTURE EXTENDED TO FileName [FIELDS FieldList]

参数

FileName

指定要创建的新表。

FIELDS FieldList

指定在新表的记录中只包含由 FieldList 指定的字段。若省略 FIELDS FieldList，则所有字段在新表中都有一个记录。

说明

当前选定表内每个字段的信息被复制到新表的一条记录中。新表的结构在格式上固定，由 11 个字段组成。下表列出了这 11 个字段的名称和内容。

字段	字段类型	内容
FIELD_NAME	字符型	当前选择的表的字段名
FIELD_TYPE	字符型	字段类型： C = 字符型 Y = 货币型 N = 数值型 F = 浮点型 I = 整型 B = 双精度型 D = 日期型 T = 日期时间型 L = 逻辑型 M = 备注型 G = 通用型
FIELD_LEN	数值型	字段宽度
FIELD_DEC	数值型	数值字段中的小数位数
FIELD_NULL	逻辑型	字段支持 null 值
FIELD_NOCP	逻辑型	不允许代码页转换（只用于字符型字段和备注字段）
FIELD_DEFA	备注型	字段默认值
FIELD_RULE	备注型	字段有效性规则
FIELD_ERR	备注型	字段有效性文本
TABLE_RULE	备注型	表有效性规则
TABLE_ERR	备注型	表有效性文本
可修改新建表，然后使用 CREATE FROM 创建一个不同结构的新表。COPY STRUCTURE 和 CREATE FROM 可以用来以编程方式更改表的结构。


*下面的示例显示 orders 表的结构，复制结构扩展到 temp 表，然后
* 浏览 temp，并从 temp 创建 backup 表，最后显示 backup
* 表的结构。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE orders  && 打开 Orders 表

CLEAR

DISPLAY STRUCTURE

WAIT WINDOW 'Structure of the orders table' NOWAIT

COPY STRUCTURE EXTENDED TO temp

USE temp

WAIT WINDOW 'The temp table - 1 row per field in orders' NOWAIT

BROWSE

CREATE backup FROM temp

USE backup

DISPLAY STRUCTURE

WAIT WINDOW 'Backup.dbf has the same structure as orders' NOWAIT

USE

DELETE FILE temp.dbf

DELETE FILE backup.dbf


请参阅

CREATE FROM


COPY TAG 命令

请参阅

根据复合索引文件的标识创建单项索引 (.IDX) 文件。

语法

COPY TAG TagName [OF CDXFileName]
TO IndexFileName

参数

TagName

指定用来创建单项索引 .IDX 文件的标识。

OF CDXFileName

指定包含标识的复合索引文件。若在打开的多个复合索引文件中有同名标识，则需要包含这个子句。若省略 OF CDXFileName，Visual FoxPro 先在结构索引文件中查找标识；若找不到，则 Visual FoxPro 查找所有打开的非结构复合索引文件。

TO IndexFileName

指定要创建的单项索引 .IDX 文件名。

说明

使用 COPY TAG 可由 .CDX 复合索引文件的标识创建一个新的单项索引 .IDX 文件。

用来创建单项索引 .IDX 文件的复合索引文件必须是打开的。当打开表时自动打开结构复合索引文件。而非结构复合索引则必须用 USE ... INDEX 或 SET INDEX 明确打开。有关复合索引文件的详细内容，请参阅 INDEX。

可使用 COPY INDEX 从单项索引 .IDX 文件创建复合索引文件的标识。


请参阅

CDX( )，COPY INDEXES，DELETE TAG，INDEX，TAG( )，USE


COPY TO 命令

请参阅	示例

用当前选定表的内容创建新文件。

语法

COPY TO FileName
[FIELDS FieldList]
| FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[[WITH] CDX] | [[WITH] PRODUCTION]
[NOOPTIMIZE]
[[TYPE] [FOXPLUS | FOX2X | DIF | MOD
| SDF | SYLK | WK1 | WKS | WR1 | WRK | XLS | XL5
| DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB]]]
[AS nCodePage]

参数

FileName

指定 COPY TO 要创建的新文件名。若文件名中不包含扩展名，则指定扩展名为文件类型的默认扩展名。若不指定文件类型，则 COPY TO 创建一个新的 Visual FoxPro 表，并且用默认扩展名 .DBF 指定表文件名。

FIELDS FieldList

指定要复制到新文件的字段。若省略 FIELDS FieldLsit，则将所有字段复制到新文件。若要创建的文件不是表，则即使备注字段名包含在字段列表中，也不把备注字段复制到新文件。

FIELDS LIKE Skeleton

指定与所给字段梗概相匹配的原始表中的字段。

FIELDS EXCEPT Skeleton

复制所有字段，但是与所给字段梗概相匹配的原始表中的字段除外。

字段梗概 Skeleton 支持通配符。例如，可以使用下列语句指定以 A 和 P 开头的字段：

COPY TO mytable FIELDS LIKE A*,P*

LIKE 子句可以和 EXCEPT 子句组合使用：

COPY TO mytable FIELDS LIKE A*,P* EXCEPT PARTNO*

Scope

指定要复制到新文件的记录范围。只有在范围内的记录才被复制。Scope 子句为：ALL、NEXT nRecord、RECORD nRecordNumber 和 REST。有关 Scope 子句的详细内容，请参阅 Scope 子句主题，或《开发指南》的第二章“语言概述”。

FOR lExpression1

指定只复制逻辑条件 lExpression1 为“真”(.T.) 的记录到文件中。包含 FOR lExpression1 可按条件复制记录，筛选出不想要的记录。

若 lExpression1 是可优化表达式，则 Rushmore 优化有 FOR lExpression1 子句的 COPY TO 命令。为获得最佳效果，可在 FOR lExpression1 子句中使用可优化表达式。有关 Rushmore 可优化表达式的内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只有当逻辑表达式 lExpression2 为“真”(.T.) 时才复制记录。

[WITH] CDX | [WITH] PRODUCTION

创建一个与已有表的结构索引文件相同的新表结构索引文件。原始结构索引文件的标识和索引表达式被复制到新结构索引文件。CDX 等同于 PRODUCTION 子句。

若不是复制到 Visual FoxPro 新表，则不要包含 CDX 或 PRODUCTION。

NOOPTIMIZE

使 COPY TO 的 Rushmore 优化无效。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

TYPE

若要创建的文件不是 Visual FoxPro 表，则指定该文件类型。指定文件类型时不必包含 TYPE 关键字。

FOXPLUS

Visual FoxPro 备注文件与 FoxBASE+ 备注文件有不同的结构。若 Visual FoxPro 源表包含备注字段，则包含 FOXPLUS 子句可创建一个能在 FoxBASE+ 中使用的表。Visual FoxPro 备注字段不能包含二进制数据，因为 FoxBASE+ 不支持备注字段中出现二进制数据。

FOX2X

仅用于 Visual FoxPro。

创建能在 FoxPro for Windows、FoxPro for Macintosh 和 FoxPro for MS-DOS 的早期版本（2.0，2.5 和 2.6 版）中打开的新表。

对于数值型、浮点型、整型、双精度型和货币型字段，源表中的 null 值被转换为新表中的 0。对于其他字段类型，源表中的 null 值被转换为新表中的空值。有关空值的详细内容，请参阅 ISBLANK( )。

下表列出了当包含 FOX2X 参数时，被转换为新表中不同字段类型的 Visual FoxPro 字段类型。

Visual FoxPro 字段类型	FoxPro 2.x 字段类型
货币型	浮点型
日期时间型	日期型
双精度型	浮点型
整型	数值型
DIF

创建一个 VisiCalc .DIF （数据交换格式）文件。Visual FoxPro 表的字段变为矢量（列），记录变为元组（行）。若在 FileName 中不包含扩展名，则指定新文件的扩展名为 .DIF。

MOD

创建 Microsoft Multiplan 4.01 版文件。若不包含扩展名，则指定新的 Microsoft Multiplan 文件的扩展名为 .MOD。

SDF

创建 SDF（系统数据格式）文件。SDF 文件是 ASCII 文本文件，其中记录都有固定长度，并以回车和换行符结尾。字段不分隔。若不包含扩展名，则指定 SDF 文件的扩展名为 .TXT。

SYLK

创建 SYLK （符号连接）交换文件。SYLK 文件用于 Microsoft Multiplan。每个当前选定表中的字段变为电子表格中的一列，每个记录变为一行。SYLK 文件没有扩展名。

WK1

创建 Lotus 1-2-3 2.x 版的电子表格文件。每个当前选定表中的字段变为电子表格中的一列，每条记录变为一行。新建电子表格的文件扩展名指定为 .WK1。

WKS

创建 Lotus 1-2-3 1a 版的电子表格文件。当前选定表中的每个字段变为电子表格中的一列，每条记录变为一行。新建电子表格的文件扩展名指定为 .WKS。

WR1

创建 Lotus Symphony 1.1 或 1.2 版的电子表格文件。当前选定表中的每个字段变为电子表格中的一列，每条记录变为一行。新建电子表格的文件扩展名指定为 .WR1。

WRK

创建 Lotus Symphony 1.0 版的电子表格文件。当前选定表中的每个字段变为电子表格中的一列，每条记录变为一行。新建电子表格的文件扩展名指定为 .WRK。

XLS

创建 Microsoft Excel 2.0 版的电子表格文件。当前选定表中的每个字段变为电子表格中的一列，每条记录变为一行。若不包含文件扩展名，则新建电子表格的文件扩展名指定为 .XLS。

XL5

创建 Microsoft Excel 5.0 版的电子表格文件。当前选定表中的每个字段变为电子表格中的一列，每条记录变为一行。若不包含文件扩展名，则新建电子表格的扩展名指定为 .XLS。

DELIMITED

创建分隔文件。分隔文件是 ASCII 文本文件，其中每条记录以一个回车和换行符结尾。默认的字段分隔符是逗号。因为字符型数据可能包含逗号，所以另外用双引号分隔字符型字段。

除非另外指定，否则所有新建 DELIMITED 文件的扩展名都指定为 .TXT。

DELIMITED WITH Delimiter

创建用字符代替引号分隔字符型字段的分隔文件。分隔字符型字段的字符用 Delimiter 指定。

DELIMITED WITH BLANK

创建用空格代替逗号分隔字符型字段的分隔文件。

DELIMITED WITH TAB

创建用制表符代替逗号分隔字符型字段的分隔文件。

AS nCodePage

指定 COPY TO 创建的表或文件的代码页。Visual FoxPro 复制当前选定表的内容，并且在复制数据的同时，自动将数据转换到为新表或文件指定的代码页。如可能，Visual FoxPro 用指定的代码页标记新建的表或文件。

若为 nCodePage 指定了不被支持的值，Visual FoxPro 产生一条错误信息。可使用 GETCP( ) 显示“代码页”对话框，并允许为 Visual FoxPro 创建的表或文件指定代码页。

若省略 AS nCodePage，则将新建的表或文件转换到 Visual FoxPro 当前代码页。

若 nCodePage 是 0，则不发生代码页转换，并且不用代码页标记新建的表或文件。

说明

若已设置了索引排序方式，则按主索引顺序复制记录。


* 在下面的示例中，打开 Customer 表并且复制三个连续的记录
* 到名为 TEMP.TXT 的新建分隔格式的数据文件中。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

COPY NEXT 3 TO temp TYPE DELIMITED

WAIT WINDOW 'This is the delimited text file' NOWAIT

MODIFY FILE temp.txt

DELETE FILE temp.txt


请参阅

APPEND FROM，COPY FILE，GETCP( )，EXPORT，IMPORT，RENAME TABLE


COPY TO ARRAY 命令

请参阅	示例

将当前选定表中的数据复制到数组。

语法

COPY TO ARRAY ArrayName
[FIELDS FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[NOOPTIMIZE]

参数

ArrayName

指定数组名，将当前选定表中的数据复制到该数组中。

FIELDS FieldList

指定只将由 FieldList 指定的字段复制到数组。若省略 FIELDS FieldList，只要数组有足够的列，则复制所有字段到数组。

Scope

指定要复制到数组中的记录的范围。只有在范围内的记录才被复制。范围子句有：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关作用域子句的详细内容，请参阅 Scope 子句主题，或《开发指南》的第二章“语言概述”。

COPY TO ARRAY 的默认范围是 ALL 记录。

FOR lExpression1

指定只复制符合逻辑表达式 lExpression1 的记录到数组。包含 FOR 子句可按条件复制记录到数组，筛选出不想要的记录。

若 lExpression1 是可优化表达式，则 Rushmore 优化包含 FOR lExpression1 的 COPY TO ARRAY 查询。为获得最佳效果，可在 FOR 子句中使用可优化表达式。有关 Rushmore 可优化表达式的内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序。”

WHILE lExpression2

指定一个条件，只有当逻辑表达式 lExpression2 为“真”(.T.) 时才将记录复制到数组。

NOOPTIMIZE

使 COPY TO ARRAY的 Rushmore 优化无效。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

说明

COPY TO ARRAY 和 SCATTER 相似。但 COPY TO ARRAY 将多个记录复制到数组，而 SCATTER 只复制一条记录到数组或一组内存变量。若指定的数组不存在，则 COPY TO ARRAY 和 SCATTER 都创建一个新的数组。

要将单个记录复制到数组，可指定一维数组。指定的一维数组的元素数目必须与表中字段的数目相同，但不包括备注字段。在 COPY TO ARRAY 中不考虑备注字段。

若指定了一维数组，则记录的第一个字段存储到数组的第一个元素，第二个字段存储到数组的第二个元素，依此类推。若一维数组的元素数目比表中字段的数目多，则多余元素保持不变。若数组元素比表中字段少，则忽略多余字段。

要将多个记录或整个表复制到数组，则指定一个二维数组。数组的行数就是数组能容纳的记录数，数组的列数就是数组能容纳的字段数。

每个记录存储在数组的一行，记录的每个字段存储在数组的一列。对每个记录，第一个字段存储在数组的第一列，第二个字段存储在数组的第二列，依此类推。若数组的列比表中的字段多，则不更改多余的列。若数组的列比表中的字段少，则多余的字段不存储到数组中。

数组中每一行都填充了表中的一条记录的内容。若数组的行比表中的记录多，则不更改任何多余的行。若数组的行比表中的记录少，则多余的记录不存储到数组中。

可以用 APPEND FROM ARRAY 将数组中的数据复制到新表中的记录。也可以用 GATHER 将数组或一组内存变量中的数据复制到表中的记录。


* 在下面的示例中，先打开 customer 表。然后创建一个二维
* 数组，并且复制 customer 的前三条记录到数组。
* DISPLAY MEMORY 显示存储在数组中的数据。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开Customer表

DIMENSION gaTemp(3,10)

COPY NEXT 3 TO ARRAY gaTemp

DISPLAY MEMORY LIKE gaTemp


请参阅

APPEND FROM ARRAY，DECLARE，DIMENSION，GATHER，PUBLIC，SCATTER，STORE


COS( ) 函数

请参阅	示例

返回数值表达式的余弦值。

语法

COS(nExpression)

参数

nExpression

指定一个需要返回余弦值的数值表达式。nExpression 可以是任意值。

返回值类型

数值型

说明

COS( ) 返回以弧度表示的 nExpression 的余弦值。可用 DTOR( ) 把角度转换成弧度。COS( ) 返回值的小数位数由 SET DECIMALS 指定。COS( ) 返回值范围在 1 到 1 之间。


CLEAR

? COS(0)  && 显示1.00

? COS(PI( ))  && 显示 -1.00

? COS(DTOR(180))  && 显示 -1.00

STORE PI( ) * 3 TO gnAngle

? COS(gnAngle)  && 显示 -1.00


请参阅

ACOS( )，DTOR( )，RTOD( )，SET DECIMALS，SIN( )


COUNT 命令

请参阅	示例

统计表中记录数目。

语法

COUNT
[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO MemVarName]
[NOOPTIMIZE]

参数

Scope

指定需要进行统计的记录的范围。Scope 子句是 All、NEXT nRecords、RECORD nRecordNumber 和 REST。有关 Scope 子句的详细内容，请参阅 Scope 子句主题或《开发指南》的第二章“语言概述”。包含有 Scope 参数的命令只能对活动工作区中的表进行操作。

对 COUNT 命令，默认的范围是全部记录，即 ALL 。

FOR lExpression1

指定只有满足逻辑条件 lExpression1 的记录才进行计数。包含 FOR 子句可以有条件地对记录进行计数，筛选出不合要求的记录。

如果 lExpression1 是可优化表达式，那么，Rushmore 将优化 COUNT FOR 查询。为获得最佳性能，请在 FOR 子句中使用可优化表达式。有关可优化表达式的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术或《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定对记录进行计数的条件：只要逻辑表达式 lExpression2 的值为“真”(.T.)，则进行计数。

TO MemVarName

指定用于存储记录数目的内存变量或数组。如果所指定的内存变量不存在，Visual FoxPro 会创建它。

NOOPTIMIZE

不允许 COUNT 的 Rushmore 优化。有关的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术 或《开发指南》的第十七章“优化应用程序”。

说明

COUNT 在 FOR 或 WHILE 条件为“真”时，对一定范围内的记录进行计数。如果 SET TALK 是 ON，则显示记录的数目。

如果 SET DELETE 是 OFF，则带有删除标记的记录也包括在计数中。

有关 Null 值是如何影响 COUNT 的讨论，请参阅《开发指南》的第二章“语言概述”。


* 下面的示例统计并显示在巴黎的顾客数目。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

COUNT FOR UPPER(city) = 'PARIS'

DISPLAY FIELDS company, contact FOR UPPER(city) = 'PARIS'


请参阅

CALCULATE，SET DELETED，SET TALK


CPCONVERT( ) 函数

请参阅

把字符、备注字段或字符表达式转换到其他代码页。

语法

CPCONVERT(nCurrentCodePage, nNewCodePage, cExpression)

参数

nCurrentCodePage

指定从某一源代码页转换 cExpression 。

nNewCodePage

指定将 cExpression 转换到某一目标代码页。

cExpression

指定被转换的字符表达式。

说明

请注意产品的标准交叉平台功能并不需要 CPCONVERT( )。它严格地用于访问 Visual FoxPro 的基础翻译工具。

例如，如果变量 gcCharExpr 包含 Macintosh（在代码页10000中）中形如 � 的字符，则 CPCONVERT( ) 将返回在 Microsoft Windows（代码页1252）中形如 � 的字符：

CPCONVERT(10000, 1252, gcCharExpr)

有关代码页和 Visual FoxPro 的国际支持的其他内容，请参阅 Visual FoxPro 支持的代码页，以及《开发指南》第二十章，“开发国际应用程序”。


请参阅

CPCURRENT( )，CPDBF( )，MODIFY COMMAND，MODIFY FILE，SET NOCPTRANS


CPCURRENT( ) 函数

请参阅

返回 Visual FoxPro 配置文件中的代码页设置（若存在），或返回当前操作系统代码页。

语法

CPCURRENT([1 | 2])

说明

CPCURRENT( ) 返回下面中的一个值。

 •	   在 Visual FoxPro 中，如果配置文件中不包含 CODEPAGE 配置项，返回当前操作系统代码页。在 FoxPro 的早期版本中，如果配置文件中不包含 CODEPAGE 配置项，则返回 0。

 •	   返回 CODEPAGE 配置项中指定的代码页编号。例如，如果配置文件中包含有下面的代码，CPCURRENT( ) 返回 852：

CODEPAGE = 852

 •	   如果在配置文件中包含有下面的代码，则返回当前操作系统代码页：

CODEPAGE = AUTO

在 Visual FoxPro 中，不管配置项 CODEPAGE 如何设置，CPCURRENT(1) 都返回 Windows 代码页。在其他 FoxPro 操作平台版本中，不管配置项 CODEPAGE 如何设置，CPCURRENT(1) 都返回当前操作系统代码页。

不管配置项 CODEPAGE 如何设置，CPCURRENT(2) 总是返回基础操作系统代码页。例如，如果正在运行 Windows，CPCURRENT(2) 返回 MS-DOS 代码页。

有关代码页和 Visual FoxPro 的国际支持，请参阅 Visual FoxPro 支持的代码页及《开发指南》的第二十章“开发国际应用程序”。


请参阅

CPCONVERT( )，CPDBF( )，MODIFY COMMAND，MODIFY FILE，SET NOCPTRANS


CPDBF( ) 函数

请参阅

返回一个打开表所使用的代码页。

语法

CPDBF([nWorkArea | cTableAlias])

参数

nWorkArea

指定工作区号。

cTableAlias

指定表别名。

若要指定一个在非当前工作区中打开的表，请包含参数 nWorkArea 或 cTableAlias。如果在指定的工作区中没有打开表，CPDBF( ) 返回 0。如果由 cTableAlias 指定别名的表不存在，Visual FoxPro 产生错误信息。

说明

DISPLAY STRUCTURE 也显示一个打开表所使用的代码页。

有关代码页和 Visual FoxPro 国际支持的其他内容请参阅 Visual FoxPro 支持的代码页及《开发指南》第二十章“开发国际应用程序”。


请参阅

CPCONVERT( )，CPCURRENT( )，MODIFY COMMAND，MODIFY FILE，SET NOCPTRANS


CREATE 命令

请参阅

生成一个新的 Visual FoxPro 表。

语法

CREATE [FileName | ?]

参数

FileName

指定要创建的表名。

?

显示“创建”对话框，提示您为正在创建的表命名。

说明

在 Visual FoxPro 中，如果在创建表时打开了一个数据库，则表自动添加到该数据库中。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，不能创建和 MS-DOS 设备同名的表，如 CON、NUL、PRN 和 COM1。应该避免在表名中使用连字符，因为用连字符连起来的表名不能出现在“查看”窗口中，而且会和别名指示符 ( -> ) 弄混。

可通过定义每个字段的名称、类型和大小来创建表。一旦创建了表的结构，就可以向表中添加记录。有关表的详细内容，请参阅创建新表和《用户指南》第三章“创建表”。


请参阅

ADD TABLE，ALTER TABLE - SQL，CREATE DATABASE，CREATE TABLE - SQL，MODIFY STRUCTURE


CREATE CLASS 命令

请参阅

打开类设计器，创建一个新的类定义。

语法

CREATE CLASS ClassName | ? [OF ClassLibraryName1 | ?]
[AS cBaseClassName [FROM ClassLibraryName2]] [NOWAIT]

参数

ClassName

指定要创建的类定义的名称。

?

显示“新类”对话框，在框内指定要创建的类定义的名称。

OF ClassLibraryName1

指定要创建的 .VCX 可视类库的名称。如果已经存在 .VCX 可视类库，则可在其中添加类定义。

可视类库的文件扩展名一般为 .VCX。如果指定的可视类库的文件扩展名不是 .VCX，应该将这个扩展名明确地包含在文件名中。

?

显示“新类”对话框，在框内指定新的或已存在的 .VCX 可视类库的名称，以便向其中添加类定义。

AS cBaseClassName

指定一个类，新类派生于这个类。cBaseClassName 可以是除了 Column、Cursor、DataEnvironment、Header、Page 和 Relation 之外的任何 Visual FoxPro 基类。如果包含指定 .VCX 可视类库名的 FROM ClassLibraryName2 子句，且这个可视类库中包含有用户自定义类，也可以为 cBaseClassName 指定一个这样的用户自定义类。

如果省略 AS cBaseClassName，则类定义派生于 Visual FoxPro 的 FormSet 基类。

FROM ClassLibraryName2

指定 .VCX 可视类库的名称，该可视类库应包含有 cBaseClassName 指定的用户自定义类。

NOWAIT

在类设计器打开之后继续程序的执行。程序不必等待类设计器关闭，而是继续执行 CREATE CLASS NOWAIT 之后的程序行。如果省略 NOWAIT，当在程序中发出 CREATE CLASS 时，类设计器打开，并且在类设计器关闭之前暂停执行程序。

当在命令窗口中发出包含 NOWAIT 的 CREATE CLASS 命令时，无此作用。

说明

用 CREATE CLASS 可以创建类定义并把它保存到 .VCX 可视类库中。这样的 .VCX 可视类库可以用 SET CLASSLIB 打开，并可以访问其中的类定义。


请参阅

ADD CLASS，_BROWSER，CREATE CLASSLIB，DEFINE CLASS，MODIFY CLASS，RELEASE CLASSLIB，SET CLASSLIB


CREATE CLASSLIB 命令

请参阅	示例

创建一个新的、空的可视类库 ( .VCX ) 文件。

语法

CREATE CLASSLIB ClassLibraryName

参数

ClassLibraryName

指定要创建的可视类库的名称。如果指定的可视类库名称已存在并且 SET SAFETY 是 ON，Visual FoxPro 会询问是否要改写已存在的可视类库。如果 SET SAFETY 是 OFF，则已存在的文件被自动改写。

如果没有为文件指定扩展名，Visual FoxPro 自动指定扩展名为 .VCX。

说明

可用 ADD CLASS 和 CREATE CLASS 将类定义添加到可视类库中。


*  下面的示例用 CREATE CLASSLIB 创建可视类库
* myclslib 。同时创建派生于 Visual FoxPro 的 FORM
* 基类的 myform 类，并把它存储在 myclslib 可视
* 类库中。SET CLASSLIB 用于打开 myclslib 可视类
* 库以便能够使用其中的类。

CREATE CLASSLIB myclslib  	&& 创建一个新的 .VCX 可视类库

CREATE CLASS myform OF myclslib AS "Form"  && 创建新类

SET CLASSLIB TO myclslib ADDITIVE 	 && 打开 MyClsLib.VCX


请参阅

ADD CLASS，_BROWSER，CREATE CLASS，DEFINE CLASS，MODIFY CLASS，RELEASE CLASSLIB，SET CLASS


CREATE COLOR SET 命令

请参阅

从当前颜色设置中创建一个颜色集合。

语法

CREATE COLOR SET ColorSetName

参数

ColorSetName

指定要创建的颜色集合的名称。

说明

在 FoxPro for Macintosh 中不支持颜色集合；CREATE COLOR SET 无效。

配色方案的每个颜色对都存储在创建的颜色集合中。在 Visual FoxPro 中，一个颜色集合的名称最长可至 24 个字符（在早期 FoxPro 版本中是 10 个字符），可以包含数字和下划线，但不能以数字开头。

如果创建了颜色集合，便可用 SET COLOR SET 来加载它。在 FoxPro for MS-DOS 中，也可以在颜色选择器中加载颜色集合。

颜色集合存储在 Visual FoxPro 资源文件中。如果有已存在的同名颜色集合，则改写之。

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。


请参阅

SET COLOR OF SCHEME，SET COLOR SET，SET COLOR TO


CREATE CONNECTION 命令

请参阅	示例

创建一个命名连接并把它存储在当前数据库中。

语法

CREATE CONNECTION [ConnectionName | ?]
[DATASOURCE cDataSourceName
[ USERID cUserID] [ PASSWORD cPassWord]
| CONNSTRING cConnectionString]

参数

ConnectionName

指定要创建的连接的名称。

?

显示连接设计器，可在其中创建和存储连接。

DATASOURCE cDataSourceName

为连接指定 ODBC 数据源的名称。

USERID cUserID

为 ODBC 数据源指定用户标识。

PASSWORD cPassWord

为 ODBC 数据源指定口令。

CONNSTRING cConnectionString

为 ODBC 数据源指定一个连接串。可使用连接串来代替 ODBC 数据源、用户标识和口令。

说明

在创建一个命名连接之前，必须独占地打开数据库。要以独占方式打开数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE 子句。

如果省略了可选的参数，连接设计器对话框就会出现，允许交互地创建一个连接。


*  下面的示例假设 ODBC 数据源 MyFoxSQLNT 是可
* 用的数据源的用户 ID 是“Sa”。先打开 testdata 数据库，
* 并创建 Myconn 连接。然后用 DISPLAY CONNECTIONS 显示
* 数据库中的命名连接，最后用 DELETE CONNECTION
* 从数据库中移去该连接。
*

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE CONNECTION Myconn DATASOURCE "MyFoxSQLNT" USERID "sa"

CLEAR

DISPLAY CONNECTIONS  && 在数据库中显示命名连接

DELETE CONNECTION Myconn  && 移去刚才创建的连接


请参阅

DELETE CONNECTION，DBGETPROP( )，DISPLAY CONNECTIONS，LIST CONNECTIONS，MODIFY CONNECTION，OPEN DATABASE，RENAME CONNECTION


CREATE CURSOR - SQL 命令

请参阅	示例

创建一个临时表。

语法

CREATE CURSOR dbf_name
(fname1 type [(precision [, scale])
[NULL | NOT NULL]
[CHECK lExpression [ERROR cMessageText]]
[DEFAULT eExpression]
[UNIQUE]
[NOCPTRANS]]
[, fname2 ...]])
| FROM ARRAY ArrayName

参数

dbf_name

指定要创建的临时表的名称。dbf_name 可以是一个名称表达式。

fname

指定临时表中的字段名。每个 fname 可以是一个名称表达式。

type

指定一个字母来表明字段的数据类型。

precision

指定由 fname 指定的字段的宽度。有些数据类型要求指定 precision。

scale

为指定的数据类型指定小数位数。有些数据类型要求指定 scale。

下表列出了可用的 type、precision 和 scale：

FieldType	nFieldWidth	nPrecision	说明
C	n	-	宽度为 n 的字符字段
D	-	-	日期型
T	-	-	日期时间型
N	n	d	有 d 个小数位、宽度为 n 的数值型字段。
F	n	d	有 d 个小数位、宽度为 n 的浮点数值型字段。
I	-	-	整型
B	-	d	双精度型
Y	-	-	货币型
L	-	-	逻辑型
M	-	-	备注型
G	-	-	通用型
P	-	-	图片
nFieldWidth 和 nPrecision 对 D、T、Y、L、M、G 和 P 类型不适用。对于 N、F 或 B 类型，若没有包含 nPrecision，则默认为零（没有小数位）。

NULL

在字段中允许 null 值。

NOT NULL

在字段中不允许 null 值。

如果省略了 NULL 和 NOT NULL，则 SET NULL 的当前设置决定字段中是否允许 null 值。但是，如果省略了 NULL 和 NOT NULL，并且包含 PRIMARY KEY 或 UNIQUE 子句，SET NULL 的当前设置无效，字段默认为 NOT NULL。

CHECK lExpression

指定字段的有效性规则，lExpression 可以是用户自定义函数。

ERROR cMessageText

指定当字段有效性规则产生错误时，Visual FoxPro 显示的错误信息。只有在浏览窗口或编辑窗口中的数据改变时，才显示该信息。

DEFAULT eExpression

指定字段的默认值，eExpression 的数据类型必须和字段的数据类型相同。

UNIQUE

创建字段的候选索引。候选索引标识和字段同名。有关候选索引的详细内容，请参阅使用索引以及《开发指南》的第七章“处理表”。

附注

候选索引（通过包含 UNIQUE 选项所创建）和用 INDEX 命令中的 UNIQUE 选项创建的索引不同。用 INDEX 命令中的 UNIQUE 选项创建的索引允许重复的索引关键字，候选索引不允许重复的索引关键字。

用作候选索引的字段中不允许有 null 值和重复记录。但是，如果为支持 null 值的字段创建候选索引，Visual FoxPro 并不产生错误。如果试图在使用候选索引的字段中输入 null 值或重复值，Visual FoxPro 将产生错误。

NOCPTRANS

防止字符字段和备注字段转换到不同的代码页。如果临时表转换到其他代码页，那么，指定了 NOCPTRANS 的字段并不转换。只能对字符字段和备注字段指定 NOCPTRANS。

下面的示例创建了临时表 MYCURSOR，包含有两个字符字段和两个备注字段。第二个字符字段 CHAR2 和该表中第二个备注字段 MEMO2 包含了 NOCPTRANS 来防止转换。

CREATE CURSOR mycursor (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)

FROM ARRAY ArrayName

指定一个已存在数组的名称，其中包含有临时表的每个字段的名称、类型、精度和宽度。有关数组内容的正确格式，请参阅 AFIELDS( )。

说明

CREATE CURSOR 创建了一个在被关闭之前一直存在的临时表。用 CREATE CURSOR 创建的临时表可象其他表一样操作——可进行浏览和索引，也能追加和修该记录。

临时表在最低的可用工作区中打开，可以通过它的别名来访问它。临时表中的每个字段均由名称、类型、精度和宽度定义。这些定义可从命令本身或从数组中获得。不管 SET EXCLUSIVE 的设置如何，临时表都是独占地打开。


*  下面的示例创建了一个别名为 employee 的临时表。

CLOSE DATABASES

CLEAR

CREATE CURSOR employee ;

(Name C(20), Address C(30), City C(30), PostalCode C(10), ;

Comments M)

? ALIAS( )

DISPLAY STRUCTURE


请参阅

AFIELDS( )，CREATE，CREATE QUERY，CREATE TABLE - SQL，INSERT - SQL，MODIFY QUERY，SELECT - SQL


CREATE DATABASE 命令

请参阅	示例

创建并打开一个数据库。

语法

CREATE DATABASE [DatabaseName | ?]

参数

DatabaseName

指定要创建的数据库的名称。

如果 SAFETY 设为 ON，并且所指定的数据库和某一已存在的数据库有相同的名称和路径，Visual FoxPro 将显示一个警告对话框，提示您为数据库指定一个新的路径或名称。

?

显示“创建”对话框，在对话框中指定要创建的数据库名称。

说明

数据库文件的扩展名为 .DBC，关联的数据库备注文件的扩展名为 .DCT，关联的索引文件的扩展名为 .DCX。

不管 SET EXCLUSIVE 的设置如何，数据库都独占地打开。由于 CREATE DATABASE 创建并打开数据库，因而不必随后再发出 OPEN DATABASE 命令来打开数据库。

如果发出 CREATE DATABASE 时不带任何可选参数，将显示“创建”对话框，提示您指定数据库的名称。


*  本示例创建了数据库 people，同时创建表 friends 并自动
* 把它添加到数据库中。DISPLAY TABLES 用来显示数据库中
* 的表，而 DISPLAY DATABASES 用来显示数据库中表的信息。
*

CREATE DATABASE people

CREATE TABLE friends (FirstName C(20), LastName C(20))

CLEAR

DISPLAY TABLES  && 显示数据库中的表

DISPLAY DATABASES  && 显示表的信息


请参阅

ADD TABLE，CLOSE DATABASES，DBC( )，DBGETPROP( )，DBSETPROP( )，DELETE DATABASE，DISPLAY TABLES，FREE TABLE，MODIFY DATABASE，OPEN DATABASE，PACK DATABASE，REMOVE TABLE，SET DATABASE，VALIDATE DATABASE


CREATE FORM 命令

请参阅

打开表单设计器。

语法

CREATE FORM [FormName | ?]
[NOWAIT] [SAVE] [DEFAULT]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN]]

参数

cFormName

指定表单的文件名。如果没有为文件名指定扩展名，Visual FoxPro 自动指定 .SCX 为扩展名。如果指定的表单文件名已经存在，那么将提示您是否要改写已存在的文件（如果 SET SAFETY 设为 ON）。

?

显示“创建”对话框，可从中选择表单或输入要创建的新表单名。

NOWAIT

在表单设计器打开之后继续程序的执行。程序不必等待表单设计器关闭，而是继续执行 CREATE FORM NOWAIT 之后的程序行。如果省略 NOWAIT，当在程序中发出 CREATE FORM 时，表单设计器打开，并且在表单设计器关闭之前暂停程序的执行。

当在命令窗口中发出 CREATE FORM 命令时，NOWAIT 不起作用。

SAVE

在程序中发出包含 SAVE 子句的命令，在激活另一个窗口之后，表单设计器仍然打开。从命令窗口中发出命令时包含 SAVE，则无此作用。

DEFAULT

指定用默认的 Visual FoxPro 表单模板打开表单设计器，覆盖“选项”对话框中“表单”选项卡指定的默认表单模板。

有关表单模板的其他信息，请参阅使用表单模板和表单集模板和《开发指南》的第九章“创建表单”。

WINDOW WindowName1

指定一个窗口，表单设计器采用该窗口的特性。例如，如果用 DEFINE WINDOW 的 FLOAT 选项创建窗口，表单设计器可以移动。窗口不必是活动的或可见的，但必须是已定义的。

表单设计器的默认尺寸可能比它的特性窗口大。在这种情况下，表单设计器仍采用该窗口的特性。表单设计器的左上角和窗口的左上角坐标相同，但其尺寸超出了窗口的边界。

IN [WINDOW] WindowName2

指定打开表单设计器的父窗口。表单设计器不采用父窗口的特性，也不能移出父窗口之外。如果父窗口移动，表单设计器也随之移动。

要访问表单设计器，父窗口必须先用 DEFINE WINDOW 定义，而且必须是可见的。

IN SCREEN

表单设计器放在父窗口中之后，指定在 Visual FoxPro 主窗口中打开该表单设计器。在命令中包含 IN WINDOW 子句，可以把表单设计器放在父窗口中。

说明

发出不带任何附加参数的 CREATE FORM 命令，可以在表单设计器中打开一个新的表单。退出表单设计器时，会提示您用不同的名称存储表单。


请参阅

_BROWSER，COMPILE FORM，DO FORM，GETPEM( )，MODIFY FORM，PEMSTATUS( )，SYS(1269) - 属性信息，SYS(1270) - 对象位置，SYS(1271) - 对象的 .SCX 文件，SYS(1272) - 对象层次


CREATE FROM 命令

请参阅	示例

利用 COPY STRUCTURE EXTENDED 命令建立的文件创建一个表。

语法

CREATE [FileName1] FROM [FileName2]

说明

CREATE 假设由 FileName2 指定的表已经用 COPY STRUCTURE EXTENDED 或用人工方式创建了。利用 FileName2 中说明的结构创建新表 FileName1。新创建的表成为活动表。

如果命令中没有包括 FileName1 或 FileName2，或者两个都不包括，则出现一个对话框，可在其中指定要创建的文件或 FROM 文件，或两者都指定。

请注意 FileName2 中所有记录，包括那些作了删除标记的记录，都用来创建 FileName1。


* 下面的示例显示了 orders 表的结构，用扩展方式把结构复制到
* temp 表，浏览 temp，从 temp 创建表 backup，并显示
* backup 的结构。

CLOSE DATABASES

CLEAR

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置到数据库的路径

USE orders

DISPLAY STRUCTURE

WAIT WINDOW 'Structure of the orders table' NOWAIT

COPY STRUCTURE EXTENDED TO temp

USE temp

WAIT WINDOW 'Temp table has 1 row per field in ORDERS' NOWAIT

BROWSE

CREATE backup FROM temp

USE backup

DISPLAY STRUCTURE

WAIT WINDOW 'Backup.dbf has the same structure as ORDERS' NOWAIT

USE

DELETE FILE temp.dbf

DELETE FILE backup.dbf


请参阅

COPY STRUCTURE EXTENDED


CREATE LABEL 命令

请参阅

打开标签设计器，以创建标签。

语法

CREATE LABEL [FileName | ?]
[NOWAIT] [SAVE]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]

参数

FileName

指定标签的文件名。如没有给该文件指定一个扩展名，Visual FoxPro 自动指定 .LBX 为扩展名。

?

显示“创建”对话框，提示您为要创建的标签命名。

NOWAIT

在标签设计器打开之后继续执行程序。程序不必等待标签设计器关闭，而是继续执行 CREATE LABLE NOWAIT 后面的程序行。如果在程序中发出 CREATE LABLE 时省略 NOWAIT，则在标签设计器打开之后，关闭之前暂停程序的执行。

当在命令窗口中发出 CREATE LABLE 命令时，NOWAIT 不起作用。

SAVE

在激活其他窗口后，标签设计器保持打开。如果省略 SAVE，在其他窗口被激活时关闭标签设计器。在命令窗口中发出命令时包含 SAVE，则无此作用。

WINDOW WindowName1

指定一个窗口，标签设计器采用该窗口的特性。例如，如果该窗口是用 DEFINE WINDOW 命令中 FLOAT 选项来创建的，则标签设计器可以移动。该窗口不必是活动的或可见的，但必须是已定义的。

标签设计器的默认尺寸可能比它的特性窗口大。在这种情况下，标签设计器仍采用该窗口的特性。标签设计器的左上角坐标和窗口的左上角坐标相同，但其尺寸超出了窗口的边界。

IN [WINDOW] WindowName2

指定打开标签设计器的父窗口。标签设计器不采用父窗口的特性，也不能移出父窗口之外。如父窗口移动，标签设计器也随之移动。

要访问标签设计器，父窗口必须先用 DEFINE WINDOW 定义，而且必须是可见的。

IN SCREEN

将标签设计器放入父窗口之后，指定在 Visual FoxPro 主窗口中打开标签设计器。可通过在命令中包含 IN WINDOW 子句，把标签设计器放入父窗口。

IN MACDESKTOP

只能在 FoxPro for Macintosh 中使用。

将标签设计器放到 Macintosh 桌面上。标签设计器和 FoxPro 主窗口属于同一级。标签设计器可移到 FoxPro 主窗口之外，并能被 FoxPro 主窗口遮盖。

包含 MACDESKTOP 将忽略当前的 SET MACDESKTOP 设置。SET MACDESKTOP 在不包含 SCREEN 或 MACDESKTOP 子句时，决定标签设计器是放在 FoxPro 主窗口还是放在 Macintosh 桌面上。有关把标签设计器放置到 FoxPro 主窗口或 Macintosh 桌面的详细内容，请参阅 SET MACDESKTOP。

说明

用 CREATE LABEL 可按标准格式创建标签或设计自定义标签。也可以使用标签向导来创建标签。

有关创建标签的详细内容，请参阅“使用 Visual FoxPro”部分的“设计报表和标签”，和《用户指南》的第九章“设计报表和标签”。


请参阅

LABEL，MODIFY LABEL


CREATE MENU 命令

请参阅

在 Visual FoxPro 和 FoxPro for Windows 中打开菜单设计器，在 FoxPro for Macintosh 中打开菜单生成器。

语法

CREATE MENU [FileName | ?]
[NOWAIT] [SAVE]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]

参数

FileName

指定菜单表的文件名。如果没有为文件指定扩展名，Visual FoxPro 自动指定 .MNX 为扩展名。

?

显示“创建”对话框，提示您为正创建的菜单命名。

NOWAIT

在菜单设计器打开之后继续执行程序。程序不必等待菜单设计器关闭，而是继续执行 CREATE MENU NOWAIT 后面的程序行。如果省略 NOWAIT，当在程序中发出 CREATE MENU 时，菜单设计器打开，并且在它关闭之前暂停程序的执行。

在命令窗口中发出 CREATE MENU 命令时，NOWAIT 不起作用。

SAVE

在激活其他窗口之后，保持菜单设计器打开。如省略 SAVE，当激活其他窗口时，菜单设计器关闭。如果从命令窗口发出命令时包含 SAVE，则无此作用。

WINDOW WindowName1

指定一个窗口，菜单设计器采用该窗口的特性。例如，如果窗口是用 DEFINE WINDOW 命令中 FLOAT 选项创建的，则菜单设计器可以移动。该窗口不必是活动的或可见的，但必须是已定义的。

菜单设计器的默认尺寸可能比它的特性窗口大。在这种情况下，菜单设计器仍然采用该窗口的特性。菜单设计器的左上角坐标和窗口的左上角坐标相同，但其尺寸超出窗口的边界。

IN [WINDOW] WindowName2

指定打开菜单设计器的父窗口。菜单设计器不采用父窗口的特性，也不能移到父窗口之外。如父窗口移动，菜单设计器也随之移动。

要访问菜单设计器，父窗口必须首先用 DEFINE WINDOW 定义，并且必须是可见的。

IN SCREEN

在菜单设计器放到父窗口中之后，指定在 Visual FoxPro 主窗口中打开菜单设计器。可通过在命令中包含 IN WINDOW，把菜单设计器放到父窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

把菜单生成器放到 Macintosh 桌面上。菜单生成器和 FoxPro 主窗口属于同一级。菜单生成器可移到 FoxPro 主窗口之外，并可被 FoxPro 主窗口遮盖。

包含 MACDESKTOP 子句将忽略当前 SET MACDESKTOP 设置。SET MACDESKTOP 在不包含 SCREEN 或 MACDESKTOP 子句时，决定菜单生成器是放在 FoxPro 主窗口还是放在 MACDESKTOP 桌面上。有关在 FoxPro 主窗口或 MACDESKTOP 桌面上放置菜单生成器的详细内容，请参阅 SET MACDESKTOP。

说明

发出不带任何附加参数的 CREATE MENU 命令，将打开菜单设计器，您可在其中定义一个菜单系统，暂时给菜单定义表指定名称“菜单 1”。退出菜单设计器时，可用不同的名称存储菜单定义。有关创建菜单的详细内容，请参阅创建菜单系统和《开发指南》的第十二章“设计菜单”。


请参阅

DEFINE MENU，MODIFY MENU


CREATE PROJECT 命令

请参阅

打开项目管理器并创建一个项目。

语法

CREATE PROJECT [FileName | ?]
[NOWAIT] [SAVE]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]

参数

FileName

指定项目表的文件名。如果没有为文件指定一个扩展名，Visual FoxPro 自动指定 .PJX 为扩展名。

?

显示“创建”对话框，提示您为正创建的项目命名。

NOWAIT

在项目管理器打开之后继续执行程序。程序不必等待项目管理器关闭，而是继续执行 CREATE PROJECT NOWAIT 之后的程序行。如果省略 NOWAIT，当在程序中发出 CREATE PROJECT 时，项目管理器打开，并且在它关闭之前暂停程序的执行。

当在命令窗口中发出 CREATE PROJECT 时，NOWAIT 不起作用。

SAVE

在激活其他窗口之后，保持项目管理器打开。如省略 SAVE，在激活其他窗口时，关闭项目管理器。当从命令窗口发出命令时包含 SAVE，则无此作用。

WINDOW WindowName1

指定一个窗口，项目管理器具有该窗口的特性。例如，如果用 DEFINE WINDOW 命令中的 FLOAT 选项创建该窗口，则项目管理器可以移动。该窗口不必是活动的或可见的，但必须是已定义的。

项目管理器的默认尺寸可能比它的特性窗口大。在这种情况下，项目管理器仍然使用该窗口的特性。项目管理器的左上角坐标和窗口的左上角坐标相同，但其尺寸超出了窗口的边界。

IN [WINDOW] WindowName2

指定打开项目管理器的父窗口。项目管理器不采用父窗口的特性，也不能移到父窗口之外。如父窗口移动，项目管理器也随之移动。

要访问项目管理器，必须先用 DEFINE WINDOW 定义父窗口，且父窗口必须是可视的。

IN SCREEN

在项目管理器放入父窗口之后，指定在 Visual FoxPro 主窗口中打开项目管理器。可通过包含 IN WINDOW 子句把项目管理器放到父窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

把项目管理器放到Macintosh桌面上。项目管理器和 FoxPro 主窗口属于同一级。项目管理器可移到 FoxPro 主窗口之外，并可被 FoxPro 主窗口遮盖。

包含 MACDESKTOP 子句将忽略当前 SET MACDESKTOP 设置。SET MACDESKTOP 在不包含 SCREEN 或 MACDESKTOP 子句时，决定项目管理器是放在 FoxPro 主窗口中还是放在 Macintosh 桌面上。有关在 FoxPro 主窗口或 Macintosh 桌面上放置项目管理器的详细内容，请参阅 SET MACDESKTOP。

说明

项目是一个表，它记录了创建一个应用程序所需的所有文件，以及文件间的所有关系、引用和连接。每个项目表都有一个 .PJX 扩展名以及一个 .PJT 扩展名的备注文件。在项目中，可以为应用程序指定它所要求的所有设置，Visual FoxPro 确保根据最新的源文件编译文件。

可用 USE 打开项目表，并可象操作其他 Visual FoxPro 表那样操作它。

发出不带任何附加参数的 CREATE PROJECT 命令会显示创建对话框，允许您为项目指定名称。

有关生成项目的详细内容，请参阅：

 •	   生成项目和显示错误。

 •	   在项目中连编应用程序。

 •	   《开发指南》的第十五章“编译应用程序”。


请参阅

BUILD APP，BUILD PROJECT，MODIFY PROJECT


CREATE QUERY 命令

请参阅

打开查询设计器。

语法

CREATE QUERY [FileName | ?]
[NOWAIT]

参数

FileName

指定查询的文件名。如果没有为文件指定一个扩展名，Visual FoxPro 自动指定 .QPR 为扩展名。

?

显示“创建”对话框，提示您为要创建的查询命名。

NOWAIT

打开查询设计器之后继续执行程序。程序不必等待查询设计器关闭，而是继续执行 CREATE QUERY NOWAIT 后面的程序行。如果省略 NOWAIT，当在程序中发出 CREATE QUERY 命令时，查询设计器打开，并且在它关闭之前暂停程序的执行。

只有在程序中发出命令时包含 NOWAIT 才有效。当在命令窗口中发出命令时包含 NOWAIT，则无此作用。

说明

CREATE QUERY 打开查询设计器，以便能交互地创建查询。

SQL SELECT 命令用来从表中检索数据。SELECT 非常强大，并能代替一系列 Visual FoxPro 命令。由于一个 SQL SELECT 实现了一系列 Visual FoxPro 命令的功能，所以 SELECT 能优化程序的性能。

可把 SELECT 看作是向 Visual FoxPro 提出查询以从表中获得信息的一种方法。SELECT 允许您指定所需要的信息，而不用告诉 Visual FoxPro 如何去检索这些信息。由 Visual FoxPro 决定检索信息的最好途径。

创建了查询之后，该查询作为 Visual FoxPro 程序文件以 .QPR 扩展名存储起来，查询程序可以用 DO 来执行。在用 DO 执行查询时，必须包含查询文件扩展名，如下面的示例所示。

DO my_query.qpr

发出一个不带任何参数的 CREATE QUERY 命令时，打开一个新的查询窗口，并为该查询指定文件名“查询 1”。退出查询窗口时，可用不同的名称存储该查询。

有关创建查询的详细内容，请参阅建立查询，以及《用户指南》的第六章“查询数据”。


请参阅

MODIFY QUERY，SELECT - SQL


CREATE REPORT 命令

请参阅

在报表设计器中打开报表。

语法

CREATE REPORT [FileName | ?]
[NOWAIT] [SAVE]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]

参数

FileName

指定报表的文件名。如果没有为文件指定一个扩展名，Visual FoxPro 自动指定 .FRX 为扩展名。如果所指定的报表名称已经存在，将提示您是否要改写已存在的文件（如果 SET SAFETY 是 ON）。

?

显示“创建”对话框，提示您为正创建的报表命名。

NOWAIT

在报表设计器打开之后继续执行程序。程序不必等待报表设计器关闭，而是继续执行 CREATE REPORT NOWAIT 后面的程序行。如果省略 NOWAIT，当在程序中发出 CREATE REPORT 时，报表设计器打开，并且在它关闭之前暂停程序的执行。

在命令窗口中发出 CREATE REPORT 命令时，NOWAIT 不起作用。

SAVE

在激活其他窗口之后，保持报表设计器打开。如省略 SAVE，在激活其他窗口时关闭报表设计器。当从命令窗口发出命令时包含 SAVE，则无此作用。

WINDOW WindowName1

指定一个窗口，报表设计器具有该窗口的特性。例如，如果窗口用 DEFINE WINDOW 命令中的 FLOAT 选项来创建，则报表设计器可以移动。该窗口不必是活动的或可见的，但必须是已定义的。

报表设计器的默认尺寸可能比这个窗口大。在这种情况下，报表设计器仍采用这个窗口的特性。报表设计器的左上角和窗口的左上角坐标相同，但其尺寸超出窗口的边界。

IN [WINDOW] WindowName2

指定打开报表设计器的父窗口。报表设计器不采用父窗口的特性，也不能移到父窗口之外。如果父窗口移动，报表设计器也随之移动。

要访问报表设计器，必须先用 DEFINE WINDOW 定义父窗口，且父窗口必须是可见的。

IN SCREEN

在报表设计器放入父窗口之后，指定在 Visual FoxPro 主窗口中打开报表设计器。可通过包含 IN WINDOW 子句，把报表设计器放到父窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

把报表设计器放到 Macintosh 桌面上。报表设计器和 FoxPro 主窗口属于同一级。报表设计器可以移到 FoxPro 主窗口之外，并能被 FoxPro 主窗口遮盖。

包含 MACDESKTOP 子句将忽略当前的 SET MACDESKTOP 设置。当没有包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 决定报表设计器是放在 FoxPro 主窗口还是 Macintosh 桌面上。有关报表设计器放在 FoxPro 主窗口或 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

说明

发出不带任何附加参数的 CREATE REPORT 命令将打开报表设计器，同时为新报表指定名称“报表 1”。退出报表设计器时，可用不同的名称存储报表。

CREATE REPORT 也可用来生成快速报表而不用打开报表设计器。有关详细内容，请参阅 CREATE REPORT - 快速报表。

有关报表和标签的其他内容，请参阅“使用 Visual FoxPro”部分的“设计报表和标签”，以及《用户指南》的第九章“设计报表和标签”。


请参阅

ASCIICOLS，_ASCIIROWS，CREATE REPORT - 快速报表，MODIFY REPORT，REPORT


CREATE REPORT - 快速报表命令

请参阅

以编程方式创建报表。

语法

CREATE REPORT FileName1 | ? FROM FileName2
[FORM | COLUMN] [FIELDS FieldList] [ALIAS]
[NOOVERWRITE] [WIDTH nColumns]

参数

FileName1

指定报表的文件名。如果没有为文件指定扩展名，Visual FoxPro 自动指定 .FRX 为扩展名。

?

显示“创建”对话框，提示您为正创建的报表命名。

FROM FileName2

指定用来创建报表的表的名称。不用打开该表。

FORM

指定在细节带区中按照由上向下排列字段及字段名的方式创建报表。

COLUMN

指定在细节带区中按照由左向右横跨页面排列字段的方式创建报表。字段名放在页标头带区中。如果省略 FORM 和 COLUMN，报表默认为 COLUMN 格式。

FIELDS FieldList

指定出现在报表中的表字段。在 FieldList 中用逗号隔开字段。

ALIAS

指定在报表字段名前加表别名。

NOOVERWRITE

指定不能改写已存在的报表。如果由 FileName1 指定的报表名已存在，则不能创建该报表。

WIDTH nColumns

以列的形式指定报表页的宽度。

说明

这种格式的 CREATE REPORT，可以不打开报表设计器就能创建一个快速报表。这种创建报表的方式类似于从“报表”菜单中选择“快速报表”命令。

CREATE REPORT 的另一种形式是打开报表设计器以交互方式创建报表，具体内容请参阅前一节。

有关报表和标签的详细内容，请参阅“使用 Visual FoxPro”部分的“设计报表和标签”以及《用户指南》第九章“设计报表和标签”。


请参阅

CREATE REPORT，MODIFY REPORT，REPORT


CREATE SCREEN - 快速屏幕命令

请参阅

以编程方式创建一个屏幕。包含此命令是为了提供向后兼容性。

语法

CREATE SCREEN FileName1 | ? FROM FileName2
[ROW | COLUMN] [FIELDS FieldList] [ALIAS]
[NOOVERWRITE] [SIZE nRows, nColumns] [SCREEN]

参数

FileName1

指定屏幕的文件名。如果没有为文件创建一个扩展名，Visual FoxPro 自动指定 .SCX 为扩展名。如果指定的屏幕文件名已经存在，并省略了 NOOVERWRITE 选项，则会询问您是否要改写已存在的文件（如果 SET SAFETY 是 ON）。

?

显示“另存为”对话框，提示您为正创建的屏幕命名。

FROM FileName2

指定表名，快速屏幕基于此表。不必打开该表。

ROW

由上向下排列字段和字段名。如果没有包含 ROW 和 COLUMN，快速屏幕默认这种格式来排列字段和字段名。

COLUMN

由左向右横跨屏幕排列字段和字段名。如果字段的总宽度比屏幕宽度大，字段可能会以 ROW 格式显示。

FIELDS FieldList

从将要包含在快速屏幕中的表中指定字段。在 FieldList 中用逗号隔开字段。

ALIAS

在快速屏幕中把表别名添加到字段名中。

NOOVERWRITE

NOOVERWRITE 防止改写已存在的屏幕。如果名为 <file1> 的屏幕已存在，则不创建该屏幕。

SIZE nRows, nColumns

指定屏幕的高度和宽度，以行计的屏幕高度由 nRows 指定，以列计的屏幕宽度由 nColumns 指定。

SCREEN

在屏幕放入父窗口之后，指定在 Visual FoxPro 主窗口中打开屏幕。

说明

在 Visual FoxPro 中屏幕称作表单。

在 FoxPro 早期版本中，CREATE SCREEN 的快速屏幕版本创建一个屏幕而无需打开 FoxPro 2.x 屏幕设计器。这种创建屏幕的方式类似于从屏幕菜单中选择快速屏幕。其他的 CREATE SCREEN 版本打开 FoxPro 2.x 屏幕设计器，使您可交互地创建一个屏幕。

在 Visual FoxPro 中，发出 CREATE SCREEN 就象发出 CREATE FORM 命令一样，两个命令都打开表单设计器。


请参阅

CREATE FORM，CREATE SCREEN，MODIFY FORM，MODIFY SCREEN


CREATE SCREEN 命令

请参阅

打开表单设计器。包含此命令是为了提供向后兼容性。

语法

CREATE SCREEN [FileName | ?]
[NOWAIT] [SAVE] [DEFAULT]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]

说明

CREATE SCREEN 和 CREATE FORM 一样。有关详细内容，请参阅 CREATE FORM。


请参阅

CREATE FORM，CREATE SCREEN - 快速屏幕，MODIFY SCREEN


CREATE SQL VIEW 命令

请参阅	示例

显示视图设计器来创建 SQL 视图。

语法

CREATE SQL VIEW [ViewName ] [REMOTE]
[CONNECTION ConnectionName [SHARE]
| CONNECTION DataSourceName]
[AS SQLSELECTStatement]

参数

ViewName

指定要创建的视图的名称。

REMOTE

指定创建使用远程表的远程视图。如省略 REMOTE，可用本地表创建视图。

CONNECTION ConnectionName [SHARE]

打开视图时，指定建立一个命名连接。如果包含 SHARE 子句，并且共享连接可用，Visual FoxPro 将使用共享连接。如果共享连接不可用，则在打开视图时创建一个唯一连接，其他视图不能使用该连接。

CONNECTION DataSourceName

指定一个已存在的、建立了连接的数据源。

AS SQLSELECTStatement

指定视图定义。SQLSELECTStatement 必须是一个合法的 SQL SELECT 语句，而且不必用引号括起来。对于本地视图，通过用数据库名和惊叹号 ( ! ) 作为视图或表名的前缀，可以指定数据库（不是当前数据库）中的表和视图。例如，下面的命令创建了 SQL 视图 mysqlview。该视图选择了 customer 数据库的 orders 表中的所有字段：

CREATE SQL VIEW mysqlview AS SELECT * FROM customer!orders

有关 SQL SELECT 语句的其他内容，请参阅 SELECT - SQL。

可通过创建一个参数化视图，而不用为每个记录子集都创建一个单独的视图，来限制视图的范围。参数化视图利用 WHERE 子句，通过提供一个值作参数，把记录限制在那些符合条件的记录上。

例如，可以创建一个 SQL 视图，根据您提供的国家名称下载有关该国的记录。

所提供的参数被当作是 Visual FoxPro 表达式来计算。如果计算失败，Visual FoxPro 提示参数值。例如，假定 Testdata 数据库的 customer 表放在一个远程服务器上，下面的示例创建了一个参数化远程视图，它把视图限制在某个国家的顾客上，国名由参数 ?cCountry 的值提供：

OPEN DATABASE testdata

CREATE SQL VIEW customer_remote_view CONNECTION remote_01 ;

AS SELECT * FROM customer WHERE customer.country = ?cCountry

提示

如果参数是一个表达式，应把参数表达式用圆括号括起来。这样使整个表达式当作是参数的一部分来计算。

有关参数化视图的详细内容，请参阅《开发指南》第八章“创建多表视图”。

说明

在创建 SQL 视图之前，必须独占地打开数据库，可用包含 EXCLUSIVE 关键字的 OPEN DATABASE 命令独占地打开一个已存在的数据库，或用 CREATE DATABASE 来创建一个新的数据库。


* 下面的示例打开 testdata 数据库。用 CREATE SQL VIEW
* 创建一个本地 SQL 视图 myview，这个视图利用
* SELECT-SQL 语句，从 customer 表中选择了所有的记录。
* 然后显示视图设计器，修改 SQL 视图。最后关闭视图设计器
*，删除 SQL 视图。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE SQL VIEW myview AS SELECT * FROM customer

MODIFY VIEW myview

DELETE VIEW myview


请参阅

CREATE DATABASE，CREATE VIEW，DELETE VIEW，DISPLAY VIEWS，LIST VIEWS，MODIFY VIEW，OPEN DATABASE，RENAME VIEW，SELECT - SQL，USE


CREATE TABLE - SQL 命令

请参阅	示例

创建一个含有指定字段的表。

语法

CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]
(FieldName1 FieldType [(nFieldWidth [, nPrecision])]
[NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE]
[REFERENCES TableName2 [TAG TagName1]]
[NOCPTRANS]
[, FieldName2 ...]
[, PRIMARY KEY eExpression2 TAG TagName2
|, UNIQUE eExpression3 TAG TagName3]
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]
REFERENCES TableName3 [TAG TagName5]]
[, CHECK lExpression2 [ERROR cMessageText2]])
| FROM ARRAY ArrayName

参数

CREATE TABLE | DBF TableName1

指定要创建的表的名称。TABLE 和 DBF 选项作用相同。

NAME LongTableName

指定表的长名。因为长表名存储在数据库中，只有在打开数据库时才能指定长表名。

长名最多可包括 128 个字符，在数据库中可用来代替短名。

FREE

指定所创建的表不添加到数据库中。如果没有打开数据库则不需要 FREE。

(FieldName1 FieldType [(nFieldWidth [, nPrecision])]

分别指定字段名、字段类型、字段宽度和字段精度（小数位数）。

FieldType 是指定字段数据类型的单个字母。有些字段数据类型要求指定 nFieldWidth 或 nPrecision 或两者都要指定。

下表列出了 FieldType 的值及是否需要指定 nFieldWidth和 nPrecision。

FieldType	nFieldWidth	nPrecision	说明
C	n	-	宽度为 n 的字符字段
D	-	-	日期型
T	-	-	日期时间型
N	n	d	宽度为 n、有 d 位小数的数值型字段
F	n	d	宽度为 n、有 d 位小数的浮点数值型字段
I	-	-	整型
B	-	d	双精度型
Y	-	-	货币型
L	-	-	逻辑型
M	-	-	备注型
G	-	-	通用型
nFieldWidth 和 nPrecision 不适用于 D、T、I、Y、L、M、G 和 P 类型。对于 N、F 或 B 类型，若不包含 nPrecision，则 nPrecision 默认为零（没有小数位）。

NULL

在字段中允许 Null 值。

NOT NULL

在字段中不允许 Null 值。

如果省略了 NULL 或 NOT NULL，SET NULL 的当前设置将决定在字段中是否允许 Null 值。但是，如果省略 NULL 和 NOT NULL 而包含 PRIMARY KEY 或 UNIQUE 子句，SET NULL 的当前设置无效，字段默认为 NOT NULL。

CHECK lExpression1

指定字段的有效性规则。lExpression1 可以是用户自定义函数。请注意，当追加空记录时，就要检查有效性规则。如果有效性规则不允许在追加记录中有空字段值，则产生错误。

ERROR cMessageText1

指定当字段规则产生错误时，Visual FoxPro 显示的错误信息。只有当数据在浏览窗口或编辑窗口中做了修改时，才显示信息。

DEFAULT eExpression1

指定字段的默认值。eExpression1 的数据类型必须和字段的数据类型相同。

PRIMARY KEY

将此字段作为主索引。主索引标识名和字段名相同。

UNIQUE

将此字段作为一个候选索引。候选索引标识名和字段名相同。有关候选索引的详细内容，请参阅使用索引和《开发指南》的第七章“处理表”。

附注

候选索引（通过在 CREATE TABLE 或 ALTER TABLE-SQL 中包含 UNIQUE 选项来创建）和用 INDEX 命令的 UNIQUE 选项创建的索引不同。用 INDEX 命令的 UNIQUE 选项创建的索引允许重复索引关键字；候选索引不允许重复索引关键字。有关 UNIQUE 选项的其他内容，请参阅 INDEX 命令。

在主索引或候选索引字段中不允许 Null 值和重复记录。但是，如果为支持 Null 值的字段创建主索引或候选索引，Visual FoxPro 将不会产生错误。但是，如果试图把 Null 值或重复值输入到用作主索引或候选索引的字段中时，Visual FoxPro 将产生错误。

REFERENCES TableName2 [TAG TagName1]

指定建立永久关系的父表。如果省略 TAG TagName1，则使用父表的主索引关键字建立关系。如果父表没有主索引，则 Visual FoxPro 产生错误。

可包含 TAG TagName1，为父表建立一个基于现有索引标识的关系，索引标识名最多可包含 10 个字符。

父表不能是自由表。

NOCPTRANS

防止字符字段和备注字段转换到另一个代码页。如果要将表转换到其他代码页，则指定了 NOCPTRANS 的字段不转换。只能为字符字段和备注字段指定 NOCPTRANS。

下面的示例创建了表 MYTABLE，该表有两个字符字段和两个备注字段，第二个字符字段 CHAR2 和第二个备注字段 MEMO2 包含有防止转换的 NOCPTRANS。

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)

PRIMARY KEY eExpression2 TAG TagName2

指定要创建的主索引。eExpression2 指定表中的任一个字段或字段组合。TAG TagName2 指定要创建的主索引标识的名称。索引标识名最多包含 10 个字符。

因为表只能有一个主索引，如已经创建了一个主索引字段，则命令中不能包含本子句。如果在 CREATE TABLE 中包含多个 PRIMARY KEY 子句，Visual FoxPro 将产生错误。

UNIQUE eExpression3 TAG TagName3

创建侯选索引。eExpression3 指定表中的任一字段或字段组合。但是，如果已经用一个 PRIMARY KEY 选项创建了一个主索引，则不能包含指定为主索引的字段。TAG TagName3 为要创建的候选索引标识指定了标识名。索引标识名最多可包含 10 个字符。

一个表可以有多个侯选索引。

FOREIGN KEY eExpression4 TAG TagName4 [NODUP]

创建一个外部索引（非主索引），并建立和父表的关系。eExpression4 指定外部索引关键字表达式，而 TagName4 为要创建的外部索引关键字标识指定名称。索引标识名最多可包含 10 个字符。包含 NODUP 来创建一个候选外部索引。

可以为表创建多个外部索引，但外部索引表达式必须指定表中的不同字段。

REFERENCES TableName3 [TAG TagName5]

指定建立永久关系的父表。可包含 TAG TagName5，为父表建立一个基于索引标识的关系。索引标识名最多可包含 10 个字符。如果省略 TAG TagName5，则默认用父表的主索引关键字建立关系。

CHECK eExpression2 [ERROR cMessageText2]

指定表的有效性规则。ERROR cMessageText2 指定当有效性规则执行时，Visual FoxPro 显示的错误信息。只有当数据在浏览窗口或编辑窗口中做了修改时，才显示该信息。

FROM ARRAY ArrayName

指定一个已存在的数组名称，数组中包含表的每个字段的名称、类型、精度以及宽度。数组的内容可用 AFIELDS( ) 函数来定义。

说明

新表在最低的可用工作区中打开，并可通过它的别名来访问。不管 SET EXCLUSIVE 的当前设置如何，新表都以独占方式打开。

如果打开了数据库，并且没有包含 FREE 子句，则新表添加到数据库中。不能创建和数据库中的表同名的新表。

如果数据库打开，CREATE TABLE-SQL 会要求独占使用数据库。若要以独占方式打开数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE。

如果在创建新表时没有打开数据库，且包含了 NAME、CHECK、DEFAULT、FOREIGN KEY、PRIMARY KEY 或 REFERENCES 子句，则将产生错误。

请注意 CREATE TABLE 语法用逗号隔开各个 CREATE TABLE 选项。同样，NULL、NOT NULL、CHECK、DEFAULT、PRIMARY KEY 和 UNIQUE 子句必须放在包含列定义的圆括号之内。


*  下面的示例创建了一个新的数据库 Mydata1。用
* CREATE TABLE 创建了两个表 Salesman 和 Customer,
* 它们自动添加到数据库中。第二个 CREATE TABLE
* 命令中的 FOREIGN KEY 和 REFERENCE 子句创建了
* Salesman 和 Customer 表间的一个永久的一对多关系。
* 然后用 MODIFY DATABASE 来显示两表间的关系。
*

CREATE DATABASE mydata1

CREATE TABLE salesman (SalesID c(6) PRIMARY KEY, SaleName C(20))

CREATE TABLE customer (SalesID  c(6), ;
CustName c(20), 	SalesBranch c(3), ;
FOREIGN KEY SalesId TAG SalesId REFERENCE SALESMAN)

MODIFY DATABASE


请参阅

AFIELDS( )，ALTER TABLE - SQL，CREATE，CREATE QUERY，INSERT - SQL，MODIFY QUERY，MODIFY STRUCTURE，OPEN DATABASE，SELECT - SQL，SET NOCPTRANS，SQL 命令概述


CREATE TRIGGER 命令

请参阅	示例

创建表的删除、插入或更新触发器。

语法

CREATE TRIGGER ON TableName
FOR DELETE | INSERT | UPDATE AS lExpression

参数

TableName

在当前数据库中指定要创建触发器的表。

FOR DELETE | INSERT | UPDATE

指定 Visual FoxPro 创建的触发器类型。

如果所指定类型的触发器已经存在并且 SET SAFETY 是 ON，Visual FoxPro 会提示您是否要改写已存在的触发器。如果 SET SAFETY 是 OFF，则已存在的触发器被自动改写。

AS lExpression

指定触发器激发时，要计算的逻辑表达式。lExpression 可以是返回逻辑值的用户自定义函数或存储过程。可用 MODIFY PROCEDURE 创建表的存储过程。

用户自定义函数或存储过程可通过 AERROR( ) 决定激发触发器的表的名称以及触发器的类型。

如果 lExpression 计算结果为“真”(.T.)，则执行激发触发器的命令或事件。

如果 lExpression 的计算结果为“假”(.F.)，不执行激发触发器的命令或事件。如果 ON ERROR 过程有效，则执行 ON ERROR 过程来代替激发触发器的命令或事件。如果 ON ERROR 过程无效，则不执行激发触发器的命令或事件，同时 Visual FoxPro 产生错误信息。

说明

利用 CREATE TRIGGER 来俘获引起表中记录被删除、添加或更改的事件。只有数据库表能创建删除、插入或更新触发器。可用 CREATE DATABASE 来创建数据库，用 ADD TABLE 把表添加到数据库中。

CREATE TRIGGER 要求独占使用数据库。若要以独占方式打开数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE。

下面的列表描述了激发删除、插入或更新触发器的事件。

删除触发器

发出 DELETE 命令。

在浏览窗口或编辑窗口的“表”菜单中对记录作删除记号。

插入触发器

 •	   发出 APPEND FROM 命令。

 •	   发出 APPEND FROM ARRAY 命令。

 •	   发出 APPEND BLANK 命令。

 •	   从浏览窗口或编辑窗口的“表”菜单追加记录。

 •	   发出 IMPORT 命令。

 •	   发出 INSERT-SQL 命令。

 •	   发出 RECALL 命令。

 •	   从浏览窗口或编辑窗口的“表”菜单中清除记录的删除标记。

更新触发器

引起记录被修改的任何事件。例如，当表单中的一个控制更改一个字段的内容时，更新触发器被激发。

 •	   发出 GATHER 命令。

 •	   发出 REPLACE 命令。

 •	   发出 REPLACE FROM ARRAY 命令。

 •	   发出 UPDATE  SQL 命令。

下面的规则适用于用 CREATE TRIGGER 创建的触发器：

 •	   不能对有触发器的表使用 INSERT，但可使用 INSERT-SQL。

 •	   发出 PACK 不会激发任何触发器。

 •	   发出 ZAP 不会激发删除触发器。

 •	   如更新具有删除标记的记录，不会激发触发器。

 •	   触发器可能不会立即被激发，这取决于当前缓冲模式：

如果表缓冲不起作用，当记录被更新时更新触发器被激发，这个激发是在检查了规则以及主索引和候选索引关键字之后发生。

如果表缓冲起作用，当发出 TABLEUPDATE( ) 时，激发更新触发器，表中的每个缓冲记录都被更新。


* 下面的示例创建了更新触发器。防止大于 50 的值输入到
* customer 表的 maxordamt 字段中。第一个 REPLACE 命
* 令执行时，产生错误信息，因为 maxordamt 字段的值
* 大于 50。第二个 REPLACE 命令没有产生错误，因为
* maxordamt 的值小于或等于 50。
*

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	&& 设置数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE customer  && 打开 customer 表

CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50

ON ERROR  && 还原系统错误处理程序

REPLACE maxordamt WITH 60  && 显示错误信息

REPLACE maxordamt WITH 50  && 值是可接受的


请参阅

ADD TABLE，AERROR( )，CREATE DATABASE，DELETE TRIGGER，DISPLAY DATABASE，LIST DATABASE，OPEN DATABASE


CREATE VIEW 命令

请参阅

从 Visual FoxPro 环境创建视图文件。

语法

CREATE VIEW FileName

参数

FileName

指定要创建的视图文件的名称。

说明

CREATE VIEW 生成一个新的包含有 Visual FoxPro 环境信息的视图。SET VIEW 可恢复保存在视图文件中的环境。用 CREATE VIEW 创建的视图文件被指定一个 .VUE 扩展名。

存储在视图文件中的信息包含：

 •	   当前在所有工作区中打开的表、索引、替补文件以及格式文件

 •	   包括在 SET FIELDS 列表中的所有字段

 •	   在打开的表间建立的所有关系

 •	   对打开表有效的所有筛选器

 •	   DEFAULT 和 PATH 设置

 •	   过程文件设置

 •	   当前的帮助文件

 •	   当前的资源文件

 •	   SET SKIP 的状态

 •	   状态栏的状态（ON 或 OFF）

视图文件在程序中或是调试时都是有用的。恢复环境时，只需执行 SET VIEW TO FileName 命令。在调试时，可把环境设置存储在视图文件中，进行调试之后，再恢复环境来继续执行程序。


请参阅

CREATE SQL VIEW，SET VIEW


CREATEOBJECT( ) 函数

请参阅	示例

从类定义或支持 OLE 的应用程序中创建对象。

语法

CREATEOBJECT(ClassName [, eParameter1, eParameter2, ...])

参数

ClassName

指定用来创建新对象的类或 OLE 对象。Visual FoxPro 按下面的顺序搜索类或 OLE 对象：

1.	Visual FoxPro 基类。

2.	在内存中按加载顺序排列的用户自定义类定义。

3.	当前程序中的类。

4.	用 SET CLASSLIB 打开的 .VCX 类库中的类。

5.	用 SET PROCEDURE 打开的过程文件中的类。

6.	在 Visual FoxPro 程序执行链中的类。

7.	Windows 注册表（对 OLE 对象而言）。

可对 ClassName 使用下面语法创建 OLE 对象：

ApplicationName.Class

例如，若要创建 Microsoft Excel 工作表（支持 OLE 自动化），可用下面的语法：

x = CREATEOBJECT('Excel.Sheet')

当运行这个代码时，启动 Microsoft Excel（如果还没有运行），并创建一个新的工作表。

一个类库有一个别名。若要用别名来指定类库中的对象，可包含类库别名，后接一个句点号和对象名。

eParameter1, eParameter2, ...

这些可选参数用来把值传给类的 Init 事件过程。当发出 CREATEOBJECT( ) 时执行 Init 事件，并进行对象初始化工作。

返回值类型

对象

说明

可用 CREATEOBJECT( ) 从类定义或支持 OLE 自动化的应用程序中创建对象，并将对象引用赋给内存变量或数组元素。

由用户自定义类创建对象之前，用户自定义类必须先用 DEFINE CLASS 来创建，或者必须是用 SET CLASSLIB 打开的 .VCX 可视类库中的类。

可用 = 或 STORE 来将对象引用赋给内存变量或数组元素。如果释放指定给内存变量或数组元素的对象，则内存变量或数组元素包含 Null 值。可用 RELEASE 从内存中移去内存变量或数组元素。


* 下面的示例利用 DEFINE CLASS 和 CREATEOBJECT( )，
* 由 Visual FoxPro 表单基类，创建了两个自定义类
* FormChild 和 FormGrandChild。ACLASS( ) 用来创建一个
* 存放类名的数组 gaNewarray，然后显示类名。
*

CLEAR

frmMyForm = CREATEOBJECT("FormGrandChild")

FOR nCount = 1 TO ACLASS(gaNewarray, frmMyForm) 	&& 创建一个数组

? gaNewarray(nCount)  && 显示类名

ENDFOR

RELEASE frmMyForm

DEFINE CLASS FormChild AS FORM

ENDDEFINE

DEFINE CLASS FormGrandChild AS FormChild

ENDDEFINE


请参阅

_BROWSER，DEFINE CLASS，GETOBJECT( )，RELEASE，SET CLASSLIB，SET OLEOBJECT


CTOD( ) 函数

请参阅	示例

把字符表达式转换成日期表达式。

语法

CTOD(cExpression)

参数

cExpression

指定一个字符表达式，CTOD( ) 把它转换成日期型值。cExpression 的求值结果必须是从 1/1/100 至 12/31/9999 范围内的一个有效日期。

cExpression 的默认格式是 mm/dd/yy。可用 SET DATE 和 SET CENTURY 来更改默认格式。如果输入日期时没指定是哪个世纪（如字符表达式 1/1/95），则假定为二十世纪。

返回值类型

日期型

说明

CTOD( ) 是将字符转换成日期的函数，从字符表达式返回一个日期型值。


STORE '7/4/1776' TO gcthe_4th

CLEAR

? CTOD(gcthe_4th)

STORE DATE( ) TO gdtoday

STORE CTOD('12/25/95') TO gdchristmas

STORE STR(gdchristmas - gdtoday, 4) TO gddays_left

? 'There are', gddays_left, 'days until Christmas'


请参阅

DTOC( )，SET CENTURY，SET DATE，SYS(1) - 儒略(Julian)系统日期，SYS(10) - 来自儒略(Julian)日期的字符串，SYS(11) - 儒略(Julian)日期


CTOT( ) 函数

请参阅	示例

从字符表达式返回一个日期时间值。

语法

CTOT(cCharacterExpression)

参数

cCharacterExpression

指定要返回日期时间值的字符表达式。根据 SET DATE、SET HOURS 和 SET MARK 的当前设置确定 cCharacterExpression 的正确格式。cCharacterExpression 的求值结果必须是一个可识别的日期时间值，否则 Visual FoxPro 将产生错误。

下面是有效的字符表达式的示例：

02/16/95 2:00:00pm

02/16/95 2:00pm

02/16/95 14:00

02/16/95

14:00

如果在 cCharacterExpression 中只指定了日期部分或时间部分，Visual FoxPro 自动给 cCharacterExpression 加上默认时间，即午夜时间( 12:00:00 A.M. )或默认日期 12/30/1899。

可在 cCharacterExpression 中包含世纪。但只有在 SET CENTURY 是 ON 的时候返回世纪。如果不包含世纪，则指定为二十世纪。

返回值类型

日期时间型


* 下面的示例用 CTOT( ) 把字符串转换成日期时间值。
* 请注意 CTOT( ) 自动给字符串加上午夜时间 ( 12:00:00 A.M. )。
*

? BETWEEN(CTOT('02/16/95'), {02/15/95 11:00pm}, {02/16/95 1:00am})

? CTOT('02/16/95')


请参阅

DATE( )，DATETIME( )，DTOT( )，HOUR( )，MINUTE( )，SEC( )，SECONDS( )，SET SECONDS，TIME( )


CURDIR( ) 函数

请参阅	示例

返回当前目录或文件夹。

语法

CURDIR([cExpression])

参数

cExpression

CURDIR( ) 返回当前目录或文件夹所在的驱动器或卷。如省略 cExpression，则指定当前默认驱动器或卷；如果 cExpression 中指定的驱动器或卷不存在，则返回空字符串。

返回值类型

字符型

说明

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，CURDIR( ) 以字符串形式返回指定驱动器的当前 MS-DOS 目录。

在 FoxPro for Macintosh 中，CURDIR( ) 以字符串形式返回指定驱动器的当前文件夹，返回的文件夹使用 MS-DOS 速记符号。FoxPro for Macintosh 支持 MS-DOS 速记符号，以提供和其他 FoxPro 平台上创建的应用程序的兼容性。有关 MS-DOS 和 Macintosh 速记符号的详细内容，请参阅 SET PATH。可用 SYS(2027) 把包含 MS-DOS 速记符号的文件夹和路径转换成使用 Macintosh 速记符号的文件夹或路径。


* 下面的示例把当前目录存入一个变量中，设置默认值为 Visual FoxPro
* 启动时的目录。显示新的目录，再把默认值设为原来的目录，
* 并显示原来的目录。
*

CLEAR

? 'Current directory: ', CURDIR( )

gcOldDir = SET('DEFAULT') + SYS(2003)

SET DEFAULT TO (HOME( ))

? 'Visual FoxPro directory: ', CURDIR( )

SET DEFAULT TO (gcOldDir)

? 'Current directory: ', CURDIR( )


请参阅

FULLPATH( )，HOME( )


_CUROBJ 系统内存变量

请参阅	示例

存储当前选定的控制编号。包含此变量是为了提供向后兼容性。对新表单可用 ActiveControl 属性代替。

语法

_CUROBJ = nControlNumber

参数

nControlNumber

指定要选定的控制编号。

说明

在 Visual FoxPro 中，对于 FoxPro 早期版本中转换来的屏幕，可以使用 _CUROBJ 确定当前选定的控制。

可以从 _CUROBJ 返回该值，决定选择哪个控制；或把一个值存入 _CUROBJ，选择指定的控制。

根据创建控制的顺序来决定控制编号。


* 下面的程序示例显示了如何给控制编号，以及如何使用 _CUROBJ
* 返回当前控制的标号。按 Tab 或箭头键来选择不同的控制，
* 按 F2 来显示当前控制的编号。
*

CLEAR

SET TALK OFF

STORE 1 to gnX, gnY, gnZ

ON KEY LABEL F2 @ 12,2 SAY 'Object # ' + STR(_CUROBJ)  && 显示编号

@ 4,2 GET gnX  PICTURE '@*R \<Apples;\<Oranges;\<Limes'  && 单选钮

@ 2,2 GET gnY  	  && 获得字段

@ 8,2 GET gnZ  PICTURE '@^ \<Pears;\<Bananas;\<Pineapples' && 弹出菜单

READ CYCLE

ON KEY LABEL F2	  && 把 F2 设置为默认值

SET TALK ON


请参阅

ActiveControl 属性，CREATE FORM


CurrentControl 属性

请参阅

指定列对象中的哪一个控制用来显示活动单元的值。

应用于

列

语法

Column.CurrentControl[ = cName]

设置

cName

指定 Column 对象中显示和接受活动单元数据的控制名。

说明

设计时可用，运行时可读写。

默认控制是一个 Name 属性值为 Text1 的文本框。可用 AddObject 方法添加其他控制。

如果列的 Sparse 属性设为“真”（.T.），则只有列中活动单元使用 CurrentControl 属性中指定的对象，其他单元用文本框显示数据；如果 Sparse 属性设为“假”（.F.），则列中所有单元都用 CurrentControl 属性显示数据。

附注

可用 AddObject 方法把任意数目的控制添加到 Column 对象中，也可以设置 CurrentControl 属性，使任何时候都只有一个控制。


请参阅

AddObject 方法，Bound 属性，RemoveObject 方法，Sparse 属性


CurrentX, CurrentY 属性

请参阅

指定供下一个绘图方法使用的横坐标 (X) 和纵坐标 (Y)。

应用于

表单，_SCREEN

语法

Object.CurrentX[ = nXCoord]
Object.CurrentY[ = nYCoord]

设置

nXCoord

以表单 ScaleMode 属性指定的度量单位来确定表单的横坐标。

nYCoord

以表单 ScaleMode 属性指定的度量单位来确定表单的纵坐标。

说明

设计时不可用，运行时可读写。

坐标从对象的左上角开始计算。对象左上角 CurrentX 是 0，CurrentY 是 0，用 foxels 或 ScaleMode 属性定义的当前度量单位来表示。

当使用下面的图形方法时，CurrentX 和 CurrentY 设置改变如下：

方法	CurrentX，CurrentY 设为
Box	由后两个参数指定的框的终点。
Circle	对象的中心。
Cls	0，0。
Line	线的终点。
Print	下一个打印位置。
PSet	所画的点。


请参阅

Box 方法，Circle 方法，Cls 方法，DrawMode 属性，DrawStyle 属性，Left 属性，Line 方法，PSet 方法，ScaleMode 属性，SYS(1270) - 对象位置，Top 属性


Cursor 对象
Cursor（临时表）对象

请参阅	属性	事件

把表或视图添加到表单、表单集或报表的数据环境时创建该对象。

语法

Cursor

说明

在运行表单、表单集或报表时，可借助临时表对象指定或确定表或视图的属性。

请注意：在运行时，设置临时表对象属性将产生错误（Filter 或 Order 属性除外，它们可以在运行时设置）。要使新的属性设置生效，必须调用数据环境的 CloseTables 和 OpenTables 方法。此外，如果运行时改变具有一对多关系的临时表的 Order 属性，将破坏这个一对多关系。

有关表单和表单集的数据环境的详细内容，请参阅设置数据环境以及《开发指南》的第九章“创建表单”。

有关报表的数据环境的详细内容，请参阅《开发指南》的第十四章“添加查询和报表”。


属性

Alias	BufferModeOverride	CursorSource
Database	Exclusive	Filter
Name	NoDataOnLoad	Order
ReadOnly


事件

Destroy	Error	Init


请参阅

数据环境对象，关系对象


CURSORGETPROP( ) 函数

请参阅	示例

返回 Visual FoxPro 表或临时表的当前属性设置。

语法

CURSORGETPROP(cProperty [, nWorkArea | cTableAlias])

参数

cProperty

指定要返回的属性设置。

下表列出了可以返回的属性设置、返回值的数据类型以及返回值说明。

cProperty	类型	说明
BatchUpdateCount	N	送到缓冲表后端的更新语句的数目。1 是默认值。调整该值可大大提高更新的性能。 可读写。
Buffering	N	1 - （默认值）行缓冲和表缓冲关闭。 2  打开保守式行缓冲。 3  打开开放式行缓冲。 4  打开保守式表缓冲。 5  打开开放式表缓冲。 可读写。
ConnectHandle	N	连接句柄。 只读。
ConnectName	C	在创建临时表时使用的命名连接。 只读。
Database	C	包含表或视图的数据库名称。如表是自由表，包含空字符串。 只读。
FetchMemo	L	如果视图结果中含有备注字段，则为“真”(.T.)，否则为“假”(.F.)（默认值）。 可读写。
FetchSize	N	从远程表结果集合中逐步提取的行数。默认是 100 行。设置 FetchSize 为 -1 将检索整个结果集（但受 MaxRecords 设置限制）。 可读写。
KeyFieldList	C	逗号分隔的临时表的主字段列表。 可读写。
MaxRecords	N	当返回结果集时所提取的最大行数。默认值是  1（返回所有行）。0 值指定运行视图，但不提取结果。 可读写。
SendUpdates	L	如果 SQL 更新查询被执行以更新远程表，则为“真”(.T.)，否则为“假”(.F.)（默认值）。 可读写。
SourceName	C	包含数据库中的 SQL 视图或表的长名，或者自由表的文件路径和表名。 只读。
SourceType	N	1  指定数据源是本地 SQL 视图。 2  指定数据源是远程 SQL 视图。 3  指定数据源是表。 只读。
SQL	C	创建临时表时执行的 SQL 语句。 只读。
Tables	C	逗号分隔的远程表名的列表。 可读写。
UpdatableFieldList	C	逗号分隔的指定给临时表的远程字段名和本地字段名的列表。 可用该选项将临时表的无效 Visual FoxPro 字段名指定为有效的 Visual FoxPro 字段名。 可读写。
UpdateNameList	C	逗号分隔的视图中字段的列表，该列表包含有来自本地和远程表的字段。 可读写。
UpdateType	N	1  指定用新数据更新旧数据（默认值）。 2  指定通过删除旧数据，插入新数据来进行更新。 可读写。
UseMemoSize	N	使得结果返回到备注字段的列的最小宽度（按字节）。例如，如果一个列的结果的宽度比 UseMemoSize 的值大，列结果存储在备注字段中。UseMemoSize 可以从 1 到 255，默认值是 255。 可读写。
WhereType	N	更新远程表的 WHERE 子句。WhereType 可以指定为下列值： 1 或 DB_KEY（源于 FOXPRO.H）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段。 2 或 DB_KEYANDUPDATABLE（源于 FOXPRO.H）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段及任何可更新字段。 3 或 DB_KEYANDMODIFIED（源于 FOXPRO.H）（默认值）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段及任何已修改字段。 4 或 DB_KEYANDTIMESTAMP（源于 FOXPRO.H）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段及时间戳。 有关 WhereType 的详细内容，请参阅《开发指南》的第八章“创建多表视图”。 可读写。
nWorkArea

指定从表或临时表的哪一个工作区返回属性设置。如果 nWorkArea 为 0，CURSORGETPROP( ) 返回环境设置。

cTableAlias

指定要返回属性设置的表或临时表的别名。

返回值类型

字符型、数值型或逻辑型

说明

可用 CURSORSETPROP( ) 设置 Visual FoxPro 表或临时表的具体属性。有关每个属性及它们的设置，请参阅 CURSORSETPROP( )。

如果发出不带可选 cTableAlias 或 nWorkArea 参数的 CURSORGETPROP( ) 命令，则在当前选定工作区中打开的表或临时表的当前属性设置被返回。


* 下面示例打开了 testdata 数据库中的 customer 表。然后用
* CURSORGETPROP( ) 来显示表的缓冲方式以及包含该表的数据
* 库名称。

CLOSE DATABASES

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置到数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE customer	  && 打开 customer 表

? CURSORGETPROP('Buffering')  && 显示缓冲方式

? CURSORGETPROP('Database')  && 显示数据库名称


请参阅

CURSORSETPROP( )，SQLGETPROP( )，SQLSETPROP( )


CURSORSETPROP( ) 函数

请参阅	示例

指定 Visual FoxPro 表或临时表的属性设置。

语法

CURSORSETPROP(cProperty [, eExpression] [, cTableAlias | nWorkArea])

参数

cProperty

指定要设置的表或临时表属性。请注意，对 Visual FoxPro 表只能指定 Buffering 属性。

eExpression

为 cProperty 属性指定值。如省略 eExpression，属性设为默认值。

下表列出可为 cProperty 指定的属性以及能指定的 eExpression 值。

属性	eExpression 值
BatchUpdateCount	发送到缓冲表后台的更新语句数目。1 是默认值，调整该值可以大大提高更新性能。
Buffering	1  设置行缓冲和表缓冲关闭。在 FoxPro 早期版本中，锁定记录和写数据的操作是等价的（默认值）。 2  打开保守式行缓冲。 3  打开开放式行缓冲。 4  打开保守式表缓冲。 5  打开开放式表缓冲。 除了方式 1 之外，SET MULTILOCKS 都必须是 ON。
FetchMemo	.T.  视图结果中包含备注字段。 .F.  视图结果中不包含备注字段。
FetchSize	从远程结果集合中逐步提取的行数，默认值是 100 行。FetchSize 设为 -1 将检索全部结果集（但受 MaxRecords 设置限制）。
KeyFieldList	逗号分隔的临时表主字段的列表。 无默认值。必须包含字段名的列表。
MaxRecords	当结果集返回时所提取的最大行数。默认值是 1（返回所有行）。0 值指定执行视图，但不提取结果。
SendUpdates	.T.  执行 SQL 更新查询以更新远程表。 .F.  不执行 SQL 更新查询。
Tables	逗号分隔的远程表名称的列表。 无默认值。必须包含表名称的列表。
UpdatableFieldList	逗号分隔的指定给临时表的远程字段名和本地字段名的列表。 可用该选项来为包含无效 Visual FoxPro 字段名的临时表指定有效的 Visual FoxPro 字段名。
UpdateType	1  用新数据更新旧数据（默认值）。 2  通过删除旧数据，插入新数据来进行更新。
UseMemoSize	使得结果返回到备注字段的列的最小宽度（按字节）。例如，如果列结果的宽度比 UseMemoSize 值大，列结果存储在备注字段中。UseMemoSize 可从 1 到 255，默认值是 255。
WhereType	更新远程表的 WHERE 子句。WhereType 可以设为下列值： 1 或 DB_KDY（源于 FOXPRO.H）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段。 2 或 DB_KEYANDUPDATABLE（源于 FOXPRO.H）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段及任何可更新字段。 3 或 DB_KEYANDMODIFIED（源于 FOXPRO.H）（默认值）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段及任何已修改字段。 4 或 DB_KEYANDTIMESTAMP（源于 FOXPRO.H）。对远程表进行更新的 WHERE 子句仅包含由 KeyFieldList 属性指定的主关键字段及时间戳。 有关 WhereType 属性的详细内容，请参阅《开发指南》的第八章“创建多表视图”。
cTableAlias

指定要设置属性的表或临时表的别名。

nWorkArea

指定要设置属性的表或临时表的工作区。如指定 nWorkArea 为 0，CURSORSETPROP( ) 为后面所有的表或临时表设定环境设置。

返回值类型

逻辑型

说明

如果 Visual FoxPro 成功地设置指定的属性，则 CURSORSETPROP( ) 返回“真”（.T.）；如果不能设置指定的属性，Visual FoxPro 将产生错误。

CURSORSETPROP( ) 缓冲属性的设置决定 Visual FoxPro 如何执行记录锁定和更新缓冲。有关记录锁定和更新缓冲的详细内容，请参阅缓冲访问数据，以及《开发指南》的第十九章“共享访问程序设计”。

CURSORSETPROP( ) 的 WhereType 属性设置决定了在远程表上如何执行更新。有关远程表更新的其他内容，请参阅《开发指南》的第六章“使用数据库”。

可用 CURSORSETPROP( ) 改写临时表的 FetchSize SQLSETPROP( ) 属性，默认情况下该属性从临时表的连接句柄继承而来。

对于 Visual FoxPro 表和为表创建的临时表，可用 CURSORGETPROP( ) 返回其当前属性设置。

如执行不带可选 cTableAlias 或 nWorkArea 参数的 CURSORSETPROP( ) 命令，可以为当前选定工作区中打开的表或临时表指定属性设置。


* 下面示例显示了如何用 CURSORSETPROP( ) 激活开放式表缓
* 冲，表缓冲要求 MULTILOCKS 设为 ON。首先打开
* testdata 数据库的 customer 表，然后用 CURSORSETPROP( )
* 设置缓冲方式为开放式表缓冲（5）。如果成功地激活开放式
* 表缓冲，则显示“真”（.T.），否则显示“假”（.F.）。

CLOSE DATABASES

SET MULTILOCKS ON

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE customer	  && 打开 customer 表

CLEAR

? CURSORSETPROP('Buffering', 5, 'customer')  && 设置缓冲方式


请参阅

CURSORGETPROP( )，SET MULTILOCKS，SQLGETPROP( )，SQLSETPROP( )


CursorSource 属性

请参阅

指定与临时表对象相关的表或视图名。

应用于

临时表对象

语法

DataEnvironment.Cursor.CursorSource[ = cText]

设置

cText

对于视图，指定数据库中视图的名称；对于数据库中的表，指定长表名；对于自由表，指定到自由表的绝对路径。

说明

设计时只读，运行时可读写。


请参阅

Database 属性


CURVAL( ) 函数

请参阅	示例

从磁盘上的表或远程数据源中直接返回字段值。

语法

CURVAL(cExpression [, cTableAlias | nWorkArea])

参数

cExpression

指定一个表达式，CURVAL( ) 从表或远程数据源返回该表达式的值。cExpression 通常是表或远程数据源的一个字段或包含一组字段的表达式。

cTableAlias

指定表的别名，可从磁盘上的表或远程数据源返回该表的字段值。

nWorkArea

指定表的工作区，可从磁盘上的表或远程数据源返回该表的字段值。

返回值类型

字符型、货币型、日期型、日期时间型、双精度型、浮点型、逻辑型、数值型或备注型

说明

CURVAL( ) 和 OLDVAL( ) 返回的字段值可进行比较，以决定编辑字段时，网络中的其他用户是否改变了字段值。当激活开放式行缓冲或表缓冲时，CURVAL( ) 和 OLDVAL( ) 必须返回不同的值。可用 CURSORSETPROP( ) 激活开放式行缓冲或表缓冲。

CURVAL( ) 返回当前记录的字段值，返回值的数据类型由 cExpression 决定。

如果执行不带可选 cTableAlias 或 nWorkArea 参数的 CURVAL( ) 命令，则返回当前选定工作区中打开的表或临时表的对应值。


*下面的示例创建了一个自由表 mytable，并在 cDigit 字段中
* 插入值“One”。首先用 SET MULTILOCKS ON 和
* CURSORSETPROP( ) 激活开放式表缓冲。

*然后在 cDigit 字段中插入值“Two”，用 CURVAL( ) 和
* OLDVAL( ) 显示原来的 cDigit 值。最后用 TABLEUPDATE( )
* 来提交对表所作的更改，并用 CURVAL( ) 和 OLDVAL( ) 来
* 显示新的 cDigit 值。请注意：由于这是单用户示例，
* CURVAL( ) 和 OLDVAL( ) 返回同一值。
*

CREATE TABLE mytable FREE (cDigit C(10))

INSERT INTO mytable (cDigit) VALUES ("One")  && 原始值

SET MULTILOCKS ON  && 必须设成 ON 以得到开放式表缓冲

= CURSORSETPROP('Buffering',5)	&& 打开开放式表缓冲

REPLACE cDigit WITH "Two"  && 新值

CLEAR

? 'Current value: ' + CURVAL('cDigit', 'mytable')

? 'Old value: ' + OLDVAL('cDigit', 'mytable')

= TABLEUPDATE(.T.)  && 提交所有对表作出的更改

? 'Table changes committed'

? 'New current value: ' + CURVAL('cDigit', 'mytable')

? 'New old value: ' + OLDVAL('cDigit', 'mytable')


请参阅

GETFLDSTATE( )，OLDVAL( )，TABLEREVERT( )，TABLEUPDATE( )，CURSORSETPROP( )


Curvature 属性

请参阅	示例

指定形状控制的弯角曲率。

应用于

形状

语法

Shape.Curvature[ = nCurve]

设置

nCurve

下表列出了 Curvature 属性的设置：

设置	说明
0	指定无曲率。创建方角。
1 到 98	指定圆角。数字越大，曲率越大。
99	指定最大曲率。创建一个圆或椭圆。
说明

设计和运行时可用。


* 下面示例显示了如何使用形状控制和 Curvature 属性，在表单
* 上显示圆、椭圆或矩形。

* 创建表单，在表单上放置一组选项按钮和命令按钮。当单击一个
* 选项按钮时，表单上显示相应的形状。每个形状的 Height、
* Width 和 Curvature 属性决定了要创建的形状类型（圆、椭
* 圆或正方形）。Curvature 属性为 99 时，则创建圆和椭圆。
*

frmMyForm = CREATEOBJECT('Form')  && 创建表单

frmMyForm.Closable = .F.  && 使“控制”菜单框失效

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') && 添加选项组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加圆

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加正方形

frmMyForm.cmdCommand1.Visible =.T.  && “退出”命令按钮可视

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 选项组可视

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建选项组

ButtonCount = 3  && 三个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标题

Cancel = .T.  && 默认的取消命令按钮（Esc）

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  && 创建圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  && 创建椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 蓝色

ENDDEFINE


请参阅

形状控制


自定义对象
Custom（自定义）对象

请参阅	属性	事件	方法

创建用户自定义对象。

语法

Custom

说明

可使用 DEFINE CLASS 或类设计器来创建用户自定义类，执行 CREATE CLASS 将显示类设计器。

用户自定义类具有属性、事件和方法，但没有可视的外观。所有用于定义其他类型的类的通用规则也适用于定义自定义类。

有关用户定义对象示例的列表，请参阅示例文件主题；有关创建自定义对象的详细内容，请参阅《开发指南》的第十一章，“使用控制”


 属性

BaseClass	Class	ClassLibrary
Comment	Height	Left
Name	Parent	ParentClass
Picture	ReadObject	Top
Width


 事件

Destroy	Error	Init


 方法

AddObject	CloneObject	RemoveObject
SaveAsClass


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


Database 属性

请参阅

指定数据库的路径，该数据库包含与临时表对象相关联的表或视图。

应用于

临时表

语法

DataEnvironment.Cursor.Database[ = cText]

设置

cText

指定数据库 ( .DBC ) 文件的完整路径。

说明

设计时只读，运行时可读写。

附注

当用 CURSORSETPROP( ) 访问对象时，Database 属性在运行时只读。

如果临时表对象建立在自由表基础上，则该属性返回一个空字符串（“ ”）。


请参阅

CursorSource 属性


DataEnvironment 对象
DataEnvironment（数据环境）对象

请参阅	属性	事件	方法

当创建表单、表单集或报表时，创建该对象。

语法

DataEnvironment

说明

数据环境对象是临时表对象或关系对象的容器对象，而这些临时表对象或关系对象与表单、表单集或报表相关联。

注意：在运行时设置数据环境对象属性将产生错误。要使新的属性设置生效，必须为数据环境对象调用 CloseTables 和 OpenTables 方法。

有关表单和表单集数据环境的详细内容，请参阅设置数据环境和《开发指南》第九章“创建单表”。

有关报表数据环境的详细内容，请参阅《开发指南》的第十四章“添加查询和报表”。


 属性

AutoCloseTables	AutoOpenTables	InitialSelectedAlias
Name


 事件

AfterCloseTables	BeforeOpenTables	Destroy
Error	Init


 方法

AddObject	CloseTables	OpenTables
RemoveObject


请参阅

临时表对象，关系对象


DataEnvironment 属性

请参阅

引用对象的数据环境。

应用于

表单，表单集

语法

Object.DataEnvironment

说明

设计和运行时只读。


请参阅

数据环境对象


DataSession 属性

请参阅

指定一个表单、表单集或工具栏能否在自身的数据工作期中运行，能否具有独立的数据环境。

应用于

表单，表单集，_SCREEN，工具栏

语法

Object.DataSession[ = nSession]

设置

nSession

下表列出了 DataSession 属性的设置：

设置	说明
1	（默认值）默认数据工作期。
2	私有数据工作期。为表单、表单集或工具栏的每个实例创建一个新的数据工作期。
说明

设计时可用，运行时只读。


请参阅

DataSessionID 属性


DataSessionID 属性

请参阅

返回数据工作期 ID 标识号，来标识表单集、表单或工具栏的私有数据工作期。

如果表单、表单集或工具栏的 DataSession 属性设置为 1（默认数据工作期），则返回默认数据工作期的 ID 标识号。

应用于

表单，表单集，_SCREEN，工具栏

语法

Object.DataSessionID

说明

设计时只读，运行时可读写。只有当表单集、表单或工具栏的 DataSession 属性设置为 2（私有数据工作期）时，才可使用该属性。

可以使用 SET DATASESSION 和 DataSessionID 属性改变数据工作期。

当设置 DataSessionID 属性时，将影响容器对象和它包含的所有对象的数据工作期。DataSessionID 属性设置不影响未包含的对象，也不影响用 CREATEOBJECT( ) 创建的对象。

改变 DataSessionID 属性设置后，将增加改变后数据工作期的引用次数，而减少改变前数据工作期的引用次数。然而，如果数据工作期是通过将 DataSession 属性设置为 2（私有数据工作期）创建的，则改变属性设置不会释放最初的数据工作期，在这种情况下，必须通过释放对象来释放初始数据工作期。

有关多个数据工作期的详细内容，请参阅使用数据工作期和《开发指南》的第十九章“共享访问程序设计”。

注意

对于包含数据绑定型控制的对象，当改变其中的 DataSessionID 属性设置时，将丢失原始数据源。通常对不包含数据绑定型控制的对象使用 DataSessionID。


请参阅

CREATEOBJECT( )，DataSession 属性，SET DATASESSION


DATE( ) 函数

请参阅	示例

返回由操作系统控制的当前系统日期。

语法

DATE( )

返回值类型

日期型

说明

Visual FoxFro 命令或函数都不能直接改变系统日期。

DATE( ) 返回的字符串格式可以通过 SET CENTURY、SET DATE 和 SET MARK TO 命令来改变。


* 下面的示例显示带有世纪和不带世纪的当前系统日期。

CLEAR

SET CENTURY OFF

? DATE( )  && 显示不带世纪的当天日期

SET CENTURY ON

? DATE( )  && 显示带世纪的当天日期


请参阅

SET CENTURY，SET DATE，SET MARK TO，SYS( ) 函数概述


DATETIME( ) 函数

请参阅	示例

以日期时间值返回当前的日期和时间。

语法

DATETIME( )

返回值类型

日期时间型

说明

DATETIME( ) 返回的日期时间值格式由 SET DATE、SET MARK、SET CENTURY、SET HOURS 和 SET SECONDS 的当前设置决定，这种格式也依赖于 Windows 控制面板中的“国别设定”选项。


*该示例将元旦的日期时间存储到内存变量 tNewyear 中，将当前
* 的日期时间存放在内存变量 tToday 中，然后显示当前日期时间
* 与元旦相距的秒数。

tNewyear = {01/01/96 12:00am}  	&& 1996 年元旦

tToday = DATETIME( )

nSecondstonewyear = tNewyear - tToday

CLEAR

? "There are " + ALLTRIM (STR(nSecondstonewyear)) ;

+ " seconds to the New Year."


请参阅

CTOT( )，DATE( )，DTOT( )，HOUR( )，SEC( )，SECONDS( )，SET SECONDS，SET SYSFORMATS，TIME( )


DAY( ) 函数

请参阅	示例

以数值型返回给定日期表达式或日期时间表达式是某月中的第几天。

语法

DAY(dExpression | tExpression)

参数

dExpression

指定一个日期，DAY( ) 返回该日期是某月中的第几天。dExpression 可以是一个日期字符串，或是一个日期型内存变量、数组元素或字段。

tExpression

指定一个日期时间，DAY( ) 返回该日期时间是某月中的第几天。tExpression 可以是一个日期时间字符串，或是一个日期时间型内存变量、数组元素或字段。

返回值类型

数值型

说明

DAY( ) 返回 1 到 31 之间的数。


STORE {03/05/95} TO gdBDate

CLEAR

? CDOW(gdBDate)  && 显示 Sunday

? DAY(gdBDate)   && 显示 5

? 'That date is ', CMONTH(gdBDate),STR(DAY(gdBDate),2)


请参阅

CDOW( )，DOW( )，SET FDOW，SET FWEEK，SYS( ) 函数概述


DBC( ) 函数

请参阅	示例

返回当前数据库的名称和路径。

语法

DBC( )

返回值类型

字符型

说明

如果没有当前数据库，则 DBC( ) 返回空字符串。

可使用 SET DATABASE 指定当前数据库。


* 下面例子打开 testdata 数据库，并用 DBC( ) 显示该数据库
* 的信息。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + "samples\data\testdata")  && 打开 DBC

CLEAR

? DBC( )  && 显示数据库的路径和名称


请参阅

ADD TABLE，CLOSE DATABASES，CREATE DATABASE，DISPLAY TABLES，OPEN DATABASE，REMOVE TABLE，SET DATABASE


DBF( ) 函数

请参阅	示例

返回指定工作区中打开的表名，或根据表别名返回表名。

语法

DBF([cTableAlias | nWorkArea])

参数

cTableAlias

指定表的别名。

nWorkArea

指定工作区编号。

如果省略 cTableAlias 和 nWorkArea，DBF( ) 返回当前工作区中打开的表名；如果指定的工作区中没有打开的表，DBF( ) 返回一个空字符串；如果表没有 cTableAlias 别名，则 Visual FoxPro 产生错误。

有关创建表别名的详细内容，请参阅 USE。

返回值类型

字符型

说明

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，当 SET FULLPATH 设置为 ON 时，DBF( ) 返回表的路径和表名；当 SET FULLPATH 设置为 OFF 时，DBF( ) 返回表所在的驱动器和表名。

在 FoxPro for Macintosh 中，忽略 FULLPATH 设置，DBF( ) 返回表的路径和表名。


*下面例子从表的工作区中返回表名和表别名。当所有的表关闭后，
* 返回一个空串。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer IN 2 ALIAS mycust

CLEAR

? DBF(2)  && 显示 customer.dbf 和它的路径

? DBF('mycust')  && 显示 customer.dbf 和它的路径

CLOSE DATABASES

? DBF( )	&& 显示空串


请参阅

CDX( )，FIELD( )，NDX( )，SET FULLPATH，USE


DBGETPROP( ) 函数

请参阅	示例

返回当前数据库的属性，或者返回当前数据库中字段、命名连接、表或视图的属性。

语法

DBGETPROP(cName, cType, cProperty)

参数

cName

指定数据库、字段、命名连接、表或视图的名称，DBGETPROP( ) 函数返回有关信息。

要返回表或视图中字段的信息，可将包含该字段的表或视图的名称放在该字段名前面。例如，要返回 customer 表中 custid 字段的信息，可指定 cName 为：

customer.custid

cType

指定 cName 是否为当前数据库，或者当前数据库中的一个字段、命名连接、表或视图。下表列出了 cType 的允许值：

cType	说明
CONNECTION	cName 是当前数据库中的一个命名连接。
DATABASE	cName 是当前数据库。
FIELD	cName 是当前数据库中的一个字段。
TABLE	cName 是当前数据库中的一个表。
VIEW	cName 是当前数据库中的一个视图。
cProperty

指定属性名称，DBGETPROP( ) 函数返回该属性的信息。下表列出了 cProperty 的允许值、返回值类型以及属性说明，每个说明都包括属性的读写权限。如果属性是只读的，则它的值就不能用 DBSETPROP( ) 更改。有关更改属性值的详细内容，请参阅 DBSETPROP( )。

连接属性

cProperty	类型	说明
Asynchronous	L	连接方式。 默认值为“假”(.F.)，同步连接方式；“真”(.T.) 为异步连接方式。 可读写。
BatchMode	L	批处理方式。 默认值为“真”(.T.)，以批处理方式操作的连接。 可读写。
Comment	C	连接的注释文本。 可读写。
ConnectString	C	注册连接字符串。 可读写。
ConnectTimeout	N	以秒为单位的连接超时间隔。默认值为 0 （无限期等待）。 可读写。
DataSource	C	ODBC.INI 文件中定义的数据源名。 可读写。
DispLogin	N	决定 ODBC 的注册对话框何时显示。DispLogin 可以是以下值： 1 或 DB_PROMPTCOMPLETE（在 FOXPRO.H 中定义的常量）。 1 是默认值。 2 或 DB_PROMPTALWAYS（在 FOXPRO.H 中定义的常量）。 3 或 DB_PROMPTNEVER （在 FOXPRO.H 中定义的常量）。 如果指定为 1 或 DB_PROMPTCOMPLETE，只有当缺少所需信息时，Visual FoxPro 才显示 ODBC 的注册对话框。 如果指定 2 或 DB_PROMPTALWAYS，那么每次都显示 ODBC 的注册对话框，并允许在连接前改变设置。 如果指定 3 或 DB_PROMPTNEVER，不显示 ODBC 注册对话框，并且当不能获得所需要的注册信息时，Visual FoxPro 产生错误信息。 可读写。
DispWarnings	L	包含一个逻辑值，决定是否显示远程表、ODBC 或 Visual FoxPro 中不可俘获的警告信息。 默认值为“真”(.T.)，指定显示不可俘获的警告信息。 可读写。
IdleTimeout	N	以秒为单位的空闲超时间隔，在指定的时间间隔后，活动连接变成不活动。默认值为 0（无限期地等待）。 可读写。
PacketSize	N	连接用的网络包大小，调整这个值可以提高性能，默认值为 4096 个字节 ( 4K )。 可读写。
PassWord	C	连接口令。 可读写。
QueryTimeout	N	以秒为单位的查询超时间隔。默认值为 0（无限期地等待）。 可读写。
Transactions	N	决定连接如何管理远程表上的事务，Transactions 可为以下值： 1 或 DB_TRANSAUTO（在 FOXPRO.H 中定义的常量）。 1 是默认值。远程表的事务自动进行。 2 或 DB_TRANSMANUAL（在 FOXPRO.H 中定义的常量）。用SQLCOMMIT( ) 和 SQLROLLBACK( ) 人工处理事务。
UserId	C	用户标识。 可读写。
WaitTime	N	在 Visual FoxPro 检查 SQL 语句是否完成以前，以毫秒为单位计算所消耗的时间总和。默认值为 100 毫秒。 可读写。
数据属性

cProperty	类型	说明
Comment	C	数据库的注释文本。 可读写。
Version	N	数据库版本号。 只读。
表字段属性

cProperty	类型	说明
Caption	C	字段标题。 可读写。
Comment	C	字段的注释文本。 可读写。
DefaultValue	C	字段默认值。 只读。
RuleExpression	C	字段规则表达式。 只读。
RuleText	C	字段规则错误文本。 只读。
视图字段属性

cProperty	类型	说明
Caption	C	字段标题。 可读写。
Comment	C	字段的注释文本。 可读写。
DataType	C	视图中字段的数据类型。最初设置为数据源字段的数据类型。若要用 DBSETPROP( ) 函数为字段指定不同的数据类型，可使用 CREATE TABLE - SQL 语法创建字段。 例如，要将 Mytable 表中 iCost 字段由整型改为长度为 4 带 2 个小数位的数值型，可使用如下命令： DBSETPROP('mytable.icost', 'field', ;      'DataType', 'N(4,2)') 也可包含 NOCPTRANS 子句禁止将字符字段和备注字段转换到不同的代码页。有关视图数据类型的详细内容，请参阅“帮助”中“下载远程视图时更改默认数据类型”主题。 对于远程视图可读写。 本地视图忽略这个属性。
DefaultValue	C	字段默认值。 可读写。
KeyField	L	如果在索引关键表达式中指定了这个字段，则为“真”(.T.)；否则为“假”(.F.)。 可读写。
RuleExpression	C	字段规则表达式。 可读写。
RuleText	C	字段规则错误文本。 可读写。
Updatable	L	如果可以更改字段，则为“真”(.T.)；否则为假(.F.)。 可读写。
UpdateName	C	当字段数据更新到远程表上时使用的字段名。默认时为远程表字段名。 可读写。
表属性

cProperty	类型	说明
Comment	C	表的注释文本。 可读写。
DeleteTrigger	C	删除触发器表达式。 只读。
InsertTrigger	C	插入触发器表达式。 只读。
Path	C	表的路径。 只读。
PrimaryKey	C	主关键字的标识名。 只读。
RuleExpression	C	行规则表达式。 只读。
RuleText	C	行规则错误文本。 只读。
UpdateTrigger	C	更新触发器表达式。 只读。
视图属性

cProperty	类型	说明
BatchUpdateCount	N	发送到视图后台的更新语句数目。1 为默认值。调整这个值能极大提高更新的性能。 可读写。
Comment	C	视图的注释文本。 可读写。
ConnectName	C	打开视图时所用的命名连接。 只读。
FetchMemo	L	如果视图结果含有备注字段和通用字段，则为“真”(.T.)（默认值）；否则为“假” (.F.)。 可读写。
FetchSize	N	当可逐步读取记录时，每次从远程表中所取得的记录数。默认值为 100 条记录。如果将 FetchSize 设置为 -1，一次读取整个结果集合（只受 MaxRecords 设置的限制）。 可读写。
MaxRecords	N	返回结果集合时获取的最大行数。默认值为 -1（返回所有行）。0 表示执行视图，但不获取任何结果。 可读写。
ParameterList	C	WHERE 子句参数。参数的格式为 ''ParameterName1, 'Type1'; ParameterName2, 'Type2'; ...'' ，其中 Type 是下列字符之一，用来指定参数类型： C - 字符型 D - 日期型 T - 日期时间型 N - 数值型 F - 浮点型 B - 双精度型 I - 整型 Y -货币型 L - 逻辑型 例如，''MyParam1, 'C' '' 指定一个名为 MyParaml 的单个字符型参数。 有关创建参数化视图的详细内容，请参阅《开发指南》第八章“创建多表视图”。 可读写。
RuleExpression	C	行规则表达式。 可读写。
RuleText	C	在浏览窗口或编辑窗口中编辑数据时，若出现错误，所显示的规则文本表达式。 可读写。
SendUpdates	L	如果由 SQL 更新查询去更新远程表，则为“真”(.T.)；否则为“假”(.F.)（默认值）。 可读写。
ShareConnection	L	如果视图能与其他连接共享其连接句柄，则为“真”(.T.)；否则为“假”(.F.)。 可读写。
SourceType	N	视图源。SourceType 可以是以下值： 1. 视图使用本地表。 2. 视图使用远程表。 只读。
SQL	C	打开视图时执行的 SQL 语句。 只读。
Tables	C	一个用逗号分隔的表名列表。 可读写。
UpdateType	N	更新类型。有效值为： 1 或 DB_UPDATE（在 FOXPRO.H 中定义的常量），表示用新数据更新旧数据（默认值）。 2 或 DB_DELETEINSERT（在 FOXPRO.H 中定义的常量）。删除旧数据并插入新数据。 可读写。
UseMemoSize	N	将结果返回到备注字段中的列最小尺寸（以字节为单位）。例如，如果一个列结果的宽度大于 UseMemoSize 的值，那么列结果就存放在一个备注字段中。UseMemoSize 的取值从 1 到 255，默认值为 255。 可读写。
WhereType	N	WHERE 子句更新远程表，WhereType 可以为以下值： 1 或 DB_KEY（在 FOXPRO.H 中定义的常量）。用来更新远程表的 WHERE 子句仅由 KeyFieldList 属性指定的主关键字段组成。 2 或 DB_KEYANDUPDATABLE（在 FOXPRO.H 中定义的常量）。用来更新远程表的 WHERE 子句由 KeyFieldList 属性指定的主关键字段和所有可更新字段组成。 3 或 DB_KEYANDMODIFIED（在 FOXPRO.H 中定义的常量）（默认值）。更新远程表的 WHERE 子句包含 KeyFieldList 属性指定的主关键字段和其他已修改字段。 4 或 DB_KEYANDTIMESTAMP（在 FOXPRO.H 中定义的常量）。更新远程表的 WHERE 子句由 KeyFieldList 属性指定的主关键字段和时间戳组成。 有关 WhereType 属性的详细内容，请参阅《开发指南》第八章“创建多表视图”。 可读写。
返回值类型

字符型、数值型或逻辑型


*下面的示例显示 customer 表中 cust_id 字段的字段注释。如果字段
* 没有注释，则显示信息说明。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	&& 设置存放数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE customer	  && 打开 Customer 表

cRESULTS = DBGETPROP('customer.cust_id', 'Field', 'Comment')

IF LEN(cRESULTS) = 0

WAIT WINDOW 'No Comment for this field,' + CHR (13) + ;

'Use DBSETPROP( ) to add comments.'

ELSE

WAIT WINDOW 'Cust_id field comments: '+ cRESULTS

ENDIF


请参阅

ADD TABLE，CREATE CONNECTION，CREATE DATABASE，CREATE SQL VIEW，CURSORGETPROP( )，CURSORSETPROP( )，DBSETPROP( )，DISPLAY DATABASE，LIST DATABASE，RENAME CONNECTION，SQLCOMMIT( )，SQLROLLBACK( )


DblClick 事件

请参阅

当连续两次快速按下鼠标左按钮（主按钮）并释放时，此事件发生。

应用于

复选框，组合框，命令组，容器对象，控制对象，编辑框，表单，表格，标头，图象，标签，线条，列表框，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.DblClick
[LPARAMETERS nIndex]

参数

nIndex

如果控制在数组中，用以唯一指定控制的索引号。

说明

当从列表框或组合框中选择一个选项并按 ENTER 键时，也发生 DblClick 事件。

如果在系统指定的双击时间间隔内不发生 DblClick 事件，那么对象认为这种操作是一个 Click 事件。因此，当向这些相关事件中添加过程时，必须确认这些事件不冲突。另外，不响应 DblClick 事件的控制可能会将一个双击事件确认为两个单击事件。

附注

要区分鼠标的左、右、中按钮，可使用 MouseDown 和 MouseUp 事件。


请参阅

Click 事件，MouseDown 事件，MouseUp 事件


_DBLCLICK 系统内存变量

请参阅

指定双击鼠标和三击鼠标的最大时间间隔。

语法

_DBLCLICK = nTicks

参数

nTicks

以秒为单位指定时间间隔。内部计时器以时钟的“滴答”为单位，每“滴答”一次大约 1/18 秒。如果在 _DBLCLICK 中存放一个整数或小数，Visual FoxPro 会存放一个略有不同的值，同时按“滴答声”对之四舍五入。_DBLCLICK 的默认值为 0.5 秒，可变范围为 0.05 秒到 5.5 秒（1 到 100 次“滴答”）。

说明

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中可用。在 Visual Fox Pro 和 FoxPro for Windows 中，_DBLCLICK 的设置改写 Windows 控制面板中“鼠标”对话框的指定设置；在 FoxPro for Macintosh 中，忽略 _DBLCLICK，要设置这个时间间隔，应该使用 Macintosh 鼠标控制面板。

_DBLCLICK 包含一个数值，它指定了一个时间间隔，Visual FoxPro 用这个时间间隔来确定连续两次鼠标击键或三次鼠标击键是否为双击或三击鼠标。_DBLCLICK 是鼠标击键的时间间隔。例如，如果 _DBLCLICK 设定为 0.5 秒，则在 1/2 秒时间内两次单击表示一个双击，在 1 秒内三次单击表示一个三击。

_DBLCLICK 的值越大，Visual FoxPro 在把两次单击解释成一次双击时，第一次与第二次单击间的等待时间就可以越长；如果 _DBLCLICK 设成非常小的值，即使快速地双击（或三击）也可能被解释成两个（或三个）单击。


请参阅

INKEY( )


DBSETPROP( ) 函数

请参阅	示例

给当前数据库或当前数据库中的字段、命名连接、表或视图设置一个属性。

语法

DBSETPROP(cName, cType, cProperty, ePropertyValue)

参数

cName

指定要设置属性的数据库、字段、命名连接、表或视图的名称。

若要给表或视图中的字段设置一个属性，应将包含该字段的表或视图的名称加在字段名前面。例如，要为 customer 表中的 custid 字段设置属性，应该将 cName 指定为：

customer.custid

cType

指定 cName 是当前数据库还是当前数据库中的一个字段、命名连接、表或视图。下表列出了可以为 cType 指定的值。

cType	说明
CONNECTION	cName 是当前数据库中的命名连接。
DATABASE	cName 是当前数据库。
FIELD	cName 是当前数据库中的字段。
TABLE	cName 是当前数据库的一个表。
VIEW	cName 是当前数据库中的一个视图。
cProperty

指定要设置的属性名。如果某个属性是只读，它的值就不能用 DBSETPROP( ) 函数修改。如果要设置只读属性，Visual FoxPro 会产生错误信息。

有关用 cProperty 指定属性（包括它们的数据类型）的详细内容，请参阅 DBGETPROP( )。

ePropertyValue

指定 cProperty 的设定值，ePropertyValue 的数据类型必须和属性的数据类型相同。

注意

可用 DBSETPROP( ) 函数为某一属性设置无效值，Visual FoxPro 并不验证为属性指定的值是否有效。例如，可以用 DBSETPROP( ) 函数为一个字段的规则表达式设置一个无效表达式，而 Visual FoxPro 并不产生错误。

返回值类型

逻辑型

说明

使用 DBSETPROP( ) 函数可为当前数据库或当前数据库中的字段、命名连接、表或视图设置属性，使用 DBGETPROP( ) 函数则可确定当前属性值。

DBSETPROP( ) 函数要求以独占方式使用当前数据库。要以独占方式打开一个数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE 子句。

如果 Visual FoxPro 成功地设置了指定的属性，则 DBSETPROP( ) 函数返回“真”(.T.)；如果不能设置指定的属性，则 Visual FoxPro 产生错误。


*下面的示例用 DBSETPROP( ) 函数为 customer 表的 cust_id 字段
* 指定一个注释，然后用 DBGETPROP( ) 函数显示指定的注释。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	&& 指定到数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE customer	  && 打开 Customer 表

= DBSETPROP('customer.cust_id', 'Field', 'Comment', ;

'Property has been set by DBSETPROP.')  && 新的字段注释

cRESULTS = DBGETPROP('customer.cust_id', 'Field', 'Comment')

WAIT WINDOW 'Cust_id field comments: '+ cRESULTS  && 显示注释


请参阅

ADD TABLE，CREATE DATABASE，CURSORGETPROP( )，CURSORSETPROP( )，DBGETPROP( )，DISPLAY DATABASE，LIST DATABASE，OPEN DATABASE，SQLCOMMIT( )，SQLROLLBACK( )


DBUSED( ) 函数

请参阅	示例

当指定的数据库已打开时，返回“真”(.T.)。

语法

DBUSED(cDatabaseName)

参数

cDatabaseName

指定数据库的名称。DBUSED( ) 函数返回一个逻辑值，表明该数据库是否打开。

返回值类型

逻辑型

说明

如果指定的数据库已经打开，则 DBUSED( ) 函数返回“真”(.T.)；否则返回“假”(.F.)。


*下面的示例打开 TESTDATA 数据库，然后用 DBUSED( ) 函数确定
* 数据库 TESTDATA 和另一个名为 TEST 的数据库是否打开。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + "samples\data\testdata")

CLEAR

? 'Testdata database open? '

?? DBUSED('testdata')	  && 显示 .T.

? 'Test database open? '

?? DBUSED('test')	  && 显示 .F.


请参阅

CLOSE DATABASES，CREATE DATABASE，OPEN DATABASE


DDE 函数

请参阅

在 Visual FoxPro 和其他 Microsoft Windows 应用程序之间交换数据。

说明

在 Visual FoxPro 和 FoxPro for Windows 中可用。

Visual FoxPro 可以作为服务器和客户向 Microsoft Windows 应用程序发送数据，并从其他的 Microsoft Windows 应用程序接收数据。

在支持 DDE（动态数据交换）的应用程序中使用以下命名约定。

名称	说明
服务名称	当一台客户要访问服务器时，服务器响应的服务名称。一台服务器能支持很多服务名。
主题名称	指定数据的主题名。对于基于文件的应用程序，主题名通常为文件名；而在其他程序中，主题名会根据程序的不同而不同。要访问服务器，客户除了指定服务器服务名外，还要指定主题名。
单元名称	指定服务器可以传送给客户的数据单元名称。
要从其他应用程序请求数据，可创建一个 Visual FoxPro 程序，将 Visual FoxPro 作为一台客户。下面简述一个过程，按照这个过程可以创建一个向其他应用程序请求数据的 Visual FoxPro 程序：

 •	   用 DDEInitiate( ) 函数建立一个服务器应用程序的链接。

 •	   如果成功地建立了链接，则可以使用 DDERequest( ) 函数向服务器应用程序请求数据，DDERequest( ) 函数能重复发送以请求更多的数据。

 •	   接收到数据后，使用 DDETerminate( ) 函数终止与服务器和程序的链接，释放系统资源。

以上函数建立了一个冷链接，当客户对应用程序间的所有通讯初始化时，存在冷链接。有关其他类型链接的讨论，请参阅 DDEAdvise( )。

下面简述一个过程，该过程建立一个作为服务器的 Visual FoxPro 应用程序：

 •	   利用 DDEService( ) 函数创建一个服务并指定服务类型。

 •	   利用 DDESetTopic( ) 函数创建服务主题，并为该主题指定一个过程。当客户请求中指定了该主题时，执行这个过程。

 •	   创建 DDESetTopic( ) 函数中指定的过程，以接收传给该过程的参数。

 •	   在过程中处理请求，如果合适，向客户返回这些数据。

注意，这些 DDE 函数在以下几个方面与以前的 Visual FoxPro 函数有不同约定：

 •	   这些函数名的前 4 个字符不能唯一确定该函数。

 •	   函数名必须超过 10 个字符且不能缩写。

DDE 函数	说明
DDEAbortTrans( )	结束一个异步 DDE 事务。
DDEAdvise( )	创建 DDE 中的交互式链接或自动链接。
DDEEnabled( )	启用或废止 DDE 处理，或者返回 DDE 处理状态。
DDEExecute( )	使用 DDE，向另一个应用程序发送一条命令。
DDEInitiate( )	建立 Visual FoxPro 和另一个 Microsoft Windows 应用程序之间的 DDE 通道。
DDELastError( )	返回最后执行的 DDE 函数错误编号。
DDEPoke( )	DDE 会话过程中，在客户和服务器应用程序之间发送数据。
DDERequest( )	在动态 DDE 会话中，向一个服务器应用程序请求数据。
DDESetOption( )	更改或返回 DDE 设置。
DDESetService( )	创建、释放或修改 Visual FoxPro 中的服务名和设置。
DDESetTopic( )	DDE 会话过程中，在服务名中创建或释放一个主题名。
DDETerminate( )	关闭一个用 DDEInitiate( ) 函数建立的通道。


请参阅

DDEAbortTrans( )，DDEAdvise( )，DDEEnabled( )，DDEExecute( )，DDEInitiate( )，DDELastError( )，DDEPoke( )，DDERequest( )，DDESetOption( )，DDESetService( )，DDESetTopic( )，DDETerminate( )


DDEAbortTrans( ) 函数

请参阅

结束一个异步动态数据交换 ( DDE ) 事务。

语法

DDEAbortTrans(nTransactionNumber)

参数

nTransactionNumber

当事务发送到服务器应用程序时，该参数指定 DDEExecute( ) 函数、DDEPoke( ) 函数或 DDERequest( ) 函数返回的事务编号。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

异步事务允许 Visual FoxPro 程序继续执行，而不必等待服务器应用程序响应数据请求。

在服务器应用程序响应时，除非指定执行用户自定义函数，否则 DDExecute( ) 函数、DDEPoke( ) 函数和 DDERequest( ) 函数要等待一定的服务器应用程序响应时间，这个时间由 DDESetOption( ) 函数指定。指定一个用户自定义函数并在这些函数中执行该函数，会创建一个异步事务。

如果服务器请求处理完成前调用了 DDEAbortTrans( ) 函数，则在事务中不会调用用户自定义函数。

如果成功地结束异步事务，则 DDEAbortTrans( ) 函数返回“真”(.T.)；如果不能结束异步事务，则返回“假”(.T.)。使用 DDELastError( ) 函数可确定不能结束该事务的原因。


请参阅

DDEExecute( )，DDELastError( )，DDEPoke( )，DDERequest( )


DDEAdvise( ) 函数

请参阅	示例

创建一个交互式链接或自动链接，用来进行动态数据交换 ( DDE )。

语法

DDEAdvise(nChannelNumber, cItemName, cUDFName, nLinkType)

参数

nChannelNumber

指定通道号。

cItemName

指定项名。例如，Microsoft Excel 使用行标志和列标志指出工作表的单元，项名 R1C1 指出工作表第一行、第一列的单元。

cUDFName

当建立一个交互式链接或自动链接并且修改 cItemName 时，指定要执行的用户自定义函数。执行用户自定义函数时，按下面给定顺序给用户自定义函数传递六个参数：

参数	内容
Channel Number	服务器应用程序的通道号
Action	ADVISE 或 TERMINATE
Item	项名。如：R1C1 表示一个 Microsoft Excel 的工作表单元
Data	新数据（自动链接）或空字符串（交互式链接）
Format	数据格式。如：CF_TEXT
Advise Status	链接类型（0 = 人工，1 = 交互式，2 = 自动）
用户自定义函数在它的 LPARAMETER 或 PARAMETER 语句中，应该有六个参数接受从服务器应用程序传递的值。如果建立的是交互式链接，则执行用户自定义函数时，Data 参数中将传入一个空字符串，在此之后可以用 DDERequest( ) 函数获取这些数据；如果建立自动链接，则执行用户自定义函数，并通过 Data 参数传送数据。

当链接由服务器更新时，Action 参数包含 ADVISE。当客户或服务器关闭链接时，调用用户自定义函数，并且 Action 参数包含 TERMINATE。

任何用户自定义函数返回的值都被忽略。

nLinkType

可以指定以下链接类型：

nLinkType	链接类型
0	人工
1	交互式
2	自动
可通过将 nLinkType 指定为 0 来关闭服务器应用程序发来的通知。如果项改变了，就不执行用户自定义函数。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

DDEAdvise( ) 函数用来为服务器应用程序中的一个项名创建一个交互式链接或自动链接。当用 DDEAdvise( ) 函数创建交互式链接时，服务器应用程序会告诉 Visual FoxPro 项名已被更新；如果创建自动链接，服务器应用程序就通知 Visual FoxPro，告诉它项名已被更新，同时将新数据传送给 Visual FoxPro。

在创建一个链接前，必须用 DDEInitiate( ) 函数建立一个通向服务器应用程序的通道。

可以用 DDEAdvise( ) 函数关闭服务器的通知。

当 DDEAdvise( ) 函数执行成功，返回“真”(.T.)；否则返回“假”(.F.)。


*下面的示例演示如何与 Microsoft Excel 的 Sheetl 工作表建立一个
* DDE 通道，并用 DDEAdvise( ) 函数建立与两个工作表单元
* R1C1 和 R1C2 中数据的链接。当两个工作表单元中任意数据
* 发生变化时，执行用户自定义函数 NEWDATA。用户自定义函
* 数测试在 item 和 advise 参数中改变了哪些项，建立什么类
* 型的链接。

PUBLIC mchannum

mchannum = DDEInitiate('Excel', 'Sheet1')

IF mchannum != -1

= DDEAdvise(mchannum, 'R1C1', 'newdata', 1)	  && 交互式链接

= DDEAdvise(mchannum, 'R1C2', 'newdata', 2)	  && 自动链接

WAIT WINDOW 'Enter data in first two cells in Excel.'

ENDIF

PROCEDURE newdata

PARAMETERS channel, action, item, data, format, advise

IF action = 'ADVISE'

DO CASE

CASE item = 'R1C1'	&& 交互式链接

newvalue = DDERequest(channel, item)

? 'R1C1 notify link: ' + newvalue

CASE item = 'R1C2'	&& 自动链接

newvalue = data

? 'R1C2 automatic link: ' + newvalue

ENDCASE

ELSE

IF action != "TERMINATE"

= DDETerminate(mchannum)

   ENDIF

ENDIF


请参阅

DDEInitiate( )，DDELastError( )，DDESetOption( )，DDETerminate( )


DDEEnabled( ) 函数

请参阅

启用或废止动态数据交换 (DDE) 处理，或返回 DDE 处理状态。

语法

DDEEnabled([lExpression1 | nChannelNumber [, lExpression2]])

参数

lExpression1

当为“真”(.T.) 或“假”(.F.) 时，全局启用或废止 DDE 处理。如果成功启用或废止 DDE，则 DDEEnabled( ) 函数返回“真”(.T.)；否则返回“假”(.F.)。

nChannelNumber

指定通道号，DDEEnabled( ) 函数返回该通道的 DDE 处理状态。如果已经启用指定通道的 DDE 处理，则 DDEEnabled( ) 函数返回“真”(.T.)；如果废止 DDE 处理，则返回“假”(.F.)。

lExpression2

要为指定的通道启用 DDE 处理，应包含通道号 (nChannelNumber)，并将 lExpression2 指定为“真”(.T.)；若要为指定的通道废止 DDE 处理，则包含通道编号 (nChannelNumber) 并将 lExpression2 指定为“假”(.F.)。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

使用 DDEEnabled( ) 可以全局启用或废止 DDE 处理，也可以为特定的通道启用或废止 DDE 处理。

DDEEnabled( ) 函数能在短时间内保护关键代码或废止链接。当 DDE 处理废止时，客户请求加入队列等待，直到 DDE 处理激活。

如果 DDEEnabled( ) 不带任何可选参数运行，则返回全局 DDE 处理状态；如果 DDE 处理已经全局启用，则 DDEEnabled( ) 函数返回“真”(.T.)；如果 DDE 处理已经全局废止，则返回“假”(.F.)。


请参阅

DDEAbortTrans( )，DDEAdvise( )，DDEExecute( )，DDEInitiate( )，DDELastError( )，DDEPoke( )，DDERequest( )，DDESetOption( )，DDESetService( )，DDESetTopic( )，DDETerminate( )


DDEExecute( ) 函数

请参阅	示例

使用动态数据交换 (DDE) 向另一个应用程序发送一条命令。

语法

DDEExecute(nChannelNumber, cCommand [, cUDFName])

参数

nChannelNumber

指定通道号。

cCommand

指定要发往另一个应用程序的命令。命令格式由接收命令的程序决定，查阅应用程序的文档可以了解正确语法。

cUDFName

允许异步命令执行请求。如果省略 cUDFName，客户应用程序等待的时间由 DDESetOption( ) 函数指定。如果用 cUDFName 指定一个用户自定义函数，则客户程序在发出命令执行请求后立即执行下一个命令。

当服务器应用程序执行命令后，就执行 cUDFName 指定的用户自定义函数，用户自定义函数接受六个参数，它们按下列顺序给出：

参数	内容
Channel Number	服务器应用程序的通道号
Action	XACTCOMPLETE（执行成功时）  XACTFAIL（命令执行失败时）
Item	项名，例如 R1C1 表示 Microsoft Excel 工作表单元
Data	新数据 (REQUEST)、传递的数据（POKE 或 EXECUTED）
Format	数据格式，例如 CF_TEXT
Transaction Number	DDEExecute( ) 函数返回的事务编号
使用 DDEAbortTrans( ) 函数可以取消一个未完成的事务。如果事务失败，可用 DDELastError( ) 函数确定失败的原因。

当包含 cUDFName 时，DDEExecute( ) 函数并不返回一个逻辑值，而返回一个事务号。如果发生错误则返回 -1。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro和 FoxPro for Windows。

DDEExecute( ) 函数发出的命令必须能被应用程序解释。在执行命令前，用 DDEInitiate( ) 函数建立一个通向服务器应用程序的通道。

例如，Mircrosoft Excel 有一个扩展的宏命令集合，包括允许 Microsoft Excel 向 Visual FoxPro 请求数据的 DDE 命令。如果建立了通向 Microsoft Excel 的通道，就可以用 DDEExecute( ) 函数从 Visual FoxPro 向 Microsoft Excel 发送宏命令。

如果接收命令的应用程序成功地执行命令，则 DDEExecute( ) 返回“真”(.T.)；如果接收命令的应用程序没有成功地执行命令，或者包含的通道号无效，则 DDEExecute( ) 返回“假”(.F.)。如果包含了可选的异步用户自定义函数 cUDFName，则返回一个事务号；若发生错误，则 DDEExecute( ) 返回 -1。


*下面的示例使用 DDEInitiate( ) 在 Visual Fox Pro 和 Microsoft 工作
* 表 Sleet1 之间建立一个 DDE 通道。DDEExecute( ) 用来执行一个
* Microsoft Excel 命令，最大化 Microsoft Excel 窗口。

gnChanNum = DDEInitiate('Excel', 'Sheet1')

IF gnChanNum != -1

glExecute = DDEExecute(gnChanNum, '[App.Maximize]')

IF glExecute != .F.

WAIT WINDOW 'EXCEL window has been zoomed out.'

ENDIF

= DDETerminate(gnChanNum)	&& 关闭通道

ENDIF


请参阅

DDEAbortTrans( )，DDEInitiate( )，DDELastError( )，DDESetOption( )，DDETerminate( )


DDEInitiate( ) 函数

请参阅	示例

在 Visual FoxPro 和另一个 Microsoft Windows 应用程序之间建立一个动态数据交换 (DDE) 通道。

语法

DDEInitiate(cServiceName, cTopicName)

参数

cServiceName

指定服务器应用程序的服务名。通常情况下，是一个不带扩展名的可执行文件名，Visual FoxPro 默认的服务名是 Visual FoxPro。如果建立通向 Microsoft Excel 的通道，cServiceName 为 Excel。

cTopicName

指定主题名。主题根据应用程序的不同而不同，因此指定的主题必须能让应用程序理解。例如，绝大多数 DDE 服务器提供一个 System 主题。有关应用程序支持的服务名和主题名内容，请参阅应用程序文档。

返回值类型

数值型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

DDEInitiate( ) 在 Visual FoxPro 和 DDE 服务器应用程序间建立一个 DDE 通道。通道建立后，Visual FoxPro 就可以在后续函数中通过指定通道从服务器中请求数据。Visual FoxPro 也可以作为一个客户通过通道从服务器应用程序中请求数据。

如果成功建立通道，则 DDElnitiate( ) 返回通道号。通道号是非负值，所能建立的通道数量仅受系统资源的限制。

如果不能建立通道，则 DDEInitiate( ) 返回 1；如果没有打开服务器应用程序，则 Visual FoxPro 询问是否要打开。选择“是”，Visual FoxPro 会试图打开这个应用程序（可以用 DDELastError( ) 确定不能建立通道的原因）。

要避免询问是否打开应用程序，可设置 DDESetOption 的“SAFETY”选项，也可以使用带 /N 选项的 RUN 命令启动应用程序。

可以使用 DDETerminate( ) 关闭一个通道。


* 下面的示例使用 DDEInitiate( ) 在 Visual FoxPro 和 Microsoft
* Excel 的工作表 Sheetl 之间建立 DDE 通道。‘Excel’是服务
* 名，‘Sheetl’是主题名。通道号存放在内存变量 mchannum
* 中，可以供后续 DDE 函数使用。

mchannum = DDEInitiate('Excel', 'Sheet1')

IF mchannum != -1

* 进行客户操作

= DDETerminate(mchannum)  && 关闭通道

ENDIF


请参阅

DDEAdvise( )，DDEEnabled( )，DDEExecute( )，DDELastError( )，DDEPoke( )，DDERequest( )，DDESetOption( )，DDETerminate( )，RUN | !


DDELastError( ) 函数

请参阅

返回最近一个动态数据交换 (DDE) 函数的错误号。

语法

DDELastError( )

返回值类型

数值型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

当 DDE 函数执行失败时，可以使用 DDELastError( ) 确定出错的原因。

如果最近的 DDE 函数执行成功，则 DDELastError( ) 返回 0；如果不成功，则返回一个非零值。下表列出了错误号和相应的说明。

错误号	说明
1	服务忙
2	主题忙
3	通道忙
4	没有这样的服务
5	没有这样的主题
6	错误通道
7	内存不足
8	接收超时
9	请求超时
10	没有 DDEInitiate( )
11	客户尝试服务器事务
12	执行超时
13	参数错误
14	内存不足
15	内存出错
16	连接失败
17	请求失败
18	发送超时
19	不能显示信息
20	多个同步事务
21	服务器已关闭
22	内部 DDE 错误
23	建议超时
24	无效的事务标识符
25	不能识别


请参阅

DDEAbortTrans( )，DDEAdvise( )，DDEEnabled( )，DDEExecute( )，DDEInitiate( )，DDEPoke( )，DDERequest( )，DDESetOption( )，DDESetService( )，DDESetTopic( )，DDETerminate( )


DDEPoke( ) 函数

请参阅

在动态数据交换 (DDE) 会话中，在客户和服务器应用程序之间传送数据。

语法

DDEPoke(nChannelNumber, cItemName, cDataSent
[, cDataFormat [, cUDFName]])

参数

nChannelNumber

指定发送应用程序数据的通道号。如果是服务器通道，则 DDEPoke( )响应一个请求，或响应以前建立的交互式链接或自动链接发送数据。

cItemName

指定接收数据的项名。项名根据应用程序的不同而不同，并且必须能被应用程序理解。例如，Microsoft Excel 支持 R1C1 为有效项名，它指明工作表中的第一个单元。

cDataSent

指定发送给项名的数据，项名由 cItemName 指定。

cDataFormat

指定发送数据的格式，默认格式是 CF_TEXT。在这种格式中，字段用制表符分隔，记录用回车和换行符分隔。

cUDFName

允许异步数据传送。如果省略 cUDFName，客户会等待一段时间，时间长短由 DDESetOption( ) 指定。如果用 cUDFName 指定用户自定义函数，客户程序在请求之后继续执行下一行代码。

当从服务器应用程序得到数据时，执行 cUDFName 指定的用户自定义函数。用户自定义程序接受六个参数，参数按下列顺序传递：

参数	内容
Channel Number	服务器应用程序的通道号
Action	XACTCOMPLETE（成功的事务） XACTFAIL（失败的事务）
Item	项名。例如，R1C1 表示 Microsoft Excel 工作表的单元
Data	新数据 (REQUEST) 或已传送的数据（POKE 或 EXECUTED ）
Format	数据格式。例如，CF_TEXT
Transaction Number	DDEPoke( ) 返回的事务编号
可使用 DDEAbortTrans( ) 取消未完成的事务。如果事务失败了，可以用 DDELastError( ) 确定失败的原因。

若包含 cUDFName，事务成功时，DDEPoke( ) 返回一个事务号；发生错误时返回 -1。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

DDEPoke( ) 将数据以字符串形式发送给通道号指定的应用程序中的项名。

如果数据发送成功，则 DDEPoke( ) 返回“真”(.T.)；如果不能发送数据，则返回“假”(.F.)。如果包含一个异步用户自定义函数 cUDFName，则 DDEPoke( ) 返回一个事务号；如果发生错误，DDEPoke( ) 返回 -1。


请参阅

DDEAbortTrans( )，DDEInitiate( )，DDELastError( )，DDESetOption( )，DDETerminate( )


DDERequest( ) 函数

请参阅	示例

在动态数据交换 (DDE) 会话中，向一个服务器应用程序请求数据。

语法

DDERequest(nChannelNumber, cItemName [, cDataFormat [, cUDFName]])

参数

nChannelNumber

指定服务器应用程序的通道号。

cItemName

指定接收数据的项名，项名根据应用程序不同而不同，因此，指定的项名必须能被应用程序理解。例如，Microsoft Excel 支持 R1C1 为有效项名，它指明工作表的第一个单元。

cDataFormat

指定发送数据的格式，默认格式是 CF_TEXT。在这种格式中，字段用制表符键分隔，记录用回车和换行符分隔。

cUDFName

允许异步数据传送。如果省略 cUDFName，Visual FoxPro 为从服务器获取数据而等待一段时间，时间长短由 DDESetOption( ) 指定。如果用 cUDFName 指定用户自定义函数，Visual FoxPro 程序在请求之后马上执行下一行代码。

当从服务器应用程序得到数据时，就执行 cUDFName 指定的用户自定义函数。用户自定义程序接受六个参数，参数按下列顺序传递：

参数	内容
Channel Number	服务器应用程序的通道号
Action	XACTCOMPLETE（成功的事务） XACTFAIL（失败的事务）
Item	项名。例如，R1C1 表示 Microsoft Excel 工作表的单元
Data	新数据 (REQUEST) 或已传送的数据（POKE 或 EXECUTED）
Format	数据格式。例如，CF_TEXT
Transaction Number	DDEPoke( ) 返回的事务编号
使用 DDEAbortTrans( ) 取消未完成的事务。如果事务失败，可用 DDELastError( ) 确定失败的原因。

当包含 cUDFName 时，事务成功则 DDEPoke( ) 返回一个大于等于 0 的事务号，出错则返回 -1。

返回值类型

字符型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

在用 DDERequest( ) 请求数据之前，必须用 DDEInitiate( ) 建立通向服务器应用程序的通道。

如果数据请求成功，DDERequest( ) 以字符串的形式返回数据；如果请求失败，DDERequest( ) 返回一个空字符串，且 DDELastError( ) 返回一个非零值。如果包含异步用户自定义函数 cUDFName，则在事务成功时，DDERequest( ) 返回一个事务号；发生错误则返回 1 。


*下面的示例使用 DDEInitiate( ) 在 Visual FoxPro 和 Microsoft Excel
* 工作表 Sheetl 之间建立一个 DDE 通道。‘Excel’是服务
* 名，‘Sheetl’是主题名，通道号存放在内存变量 mchannum 中
* 以供后续 DDE 函数使用。

* DDERequest( ) 请求项 R1C1 是电子表格 Sheetl 的第一行第一列中
* 的数据。

mchannum = DDEInitiate('Excel', 'Sheet1')

IF mchannum != -1

mrequest = DDERequest(mchannum, 'R1C1')

IF !EMPTY(mrequest) AND DDELastError( ) = 0	&& 成功

WAIT WINDOW 'R1C1 contents: ' + mrequest

ENDIF

= DDETerminate(mchannum)	&& 关闭通道

ENDIF


请参阅

DDEAbortTrans( )，DDEInitiate( )，DDELastError( )，DDESetOption( )，DDETerminate( )


DDESetOption( ) 函数

请参阅

更改或返回动态数据交换 (DDE) 的设置。

语法

DDESetOption(cOption [, nTimeoutValue | lExpression])

参数

cOption

指定设置选项。

nTimeoutValue

指定超时值。

lExpression

启用或废止对话框的显示。

cOption	设置	默认值	说明
TIMEOUT	nTimeoutValue （毫秒数）	2000	DDE 函数等待服务器应用程序响应的毫秒数。如果省略 nTimeoutValue，则返回当前的 TIMEOUT 值。
SAFETY	lExpression （“真”(.T.)  或“假”(.F.)）	.T.	使用 DDEInitiate( ) 建立一个通向服务器应用程序的通道且应用程序没有响应时，指定是否显示对话框。如果省略 lExpression 则返回当前的 SAFETY 设置
返回值类型

逻辑型或数值型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

使用 DDESetOption( ) 可以改变或返回 DDE 设置。有两个选项可用：TIMEOUT 和 SAFETY。


请参阅

DDEAdvise( )，DDEEnabled( )，DDEExecute( )，DDEInitiate( )，DDEPoke( )，DDERequest( )，DDESetService( )，DDETerminate( )


DDESetService( ) 函数

请参阅

创建、释放或更新 DDE 服务名和设置。

语法

DDESetService(cServiceName, cOption [, cDataFormat | lExpression])

参数

cServiceName

指定要创建、释放、更改或返回信息的服务名。

cOption

指定是创建、释放或更改一个服务名，还是返回一个服务名的信息。下表列出了可用 cOption 指定的选项、选项的默认值以及对每个选项的说明。

选项	默认值	说明
DEFINE	-	创建新的服务名
RELEASE	-	释放一个已有的服务名
ADVISE	.F.	启用或废止有关改变项名的客户通知
EXECUTE	.F.	启用或废止命令的执行
POKE	.F.	启用或废止客户向服务的发送
REQUEST	.T.	启用或废止对服务的请求
FORMATS	CF_TEXT	规定数据格式
DEFINE

创建一个新的服务名。例如，下面的命令创建服务名 myservice：

glNewService = DDESetService('myservice', 'DEFINE')

RELEASE

释放一个已有的服务名，从而释放系统资源。当服务名释放后，这个服务的所有主题名也跟着被释放。

下面的命令释放前一个例子的服务名：

glRelease = DDESetService('myservice', 'RELEASE')

要释放默认的 Visual FoxPro 服务，可执行下面这条命令：

glRelFox = DDESetService('Visual FoxPro', 'RELEASE')

ADVISE

当一个项中的数据改变时，指定是否通知客户，或者返回服务名的当前建议状态。有关向客户提供建议的其他内容，请参阅 DDEAdvise( )。

要启用客户通知，可指定 lExpression 为“真”(.T.)；将 lExpression 指定为“假”(.F.) 可废止客户通知。

要返回服务名的当前客户通知状态，省略 lExpression 即可。如果已经启用了服务名的客户通知，则 DDESetService( ) 返回“真”；如果已废止客户通知，则返回“假”。

EXECUTE

允许启用或废止向一个服务名的命令请求，或确定服务名的当前执行状态。

要启用客户执行命令的请求，可以指定 lExpression 为“真”(.T.)；要废止客户执行命令的请求，则可以指定 lExpression 为“假”(.F.)。“假”(.F.)为默认值。

要返回服务名的当前命令执行状态，省略 lExpression 即可。如果客户对服务的命令执行请求已启用，则 DDESetService( ) 返回“真”；否则返回“假”。

下面的命令启用服务名 myservice 命令执行，并废止客户应用程序对这个服务名的数据请求，然后显示 myservice 的当前命令执行状态：

glExecute = DDESetService('myservice', 'EXECUTE', .T.)

glRequest = DDESetService('myservice', 'REQUEST', .F.)

? DDESetService('myservice', 'EXECUTE')

POKE

允许启用或废止对服务名的发送请求，或确定服务名的当前发送状态。有关向服务器或客户发送数据的详细内容，请参阅 DDEPoke( )。

要启用客户发送请求，可以将 lExpression 指定为“真”(.T.)；将 lExpression 指定为“假”(.F.)，则可以废止客户发送请求。“假”(.F.) 是默认值。

要返回服务名的当前发送状态，省略 lExpression 即可。如果启用了服务名的发送请求，则 DDESetService( ) 返回“真”，否则返回“假”。

REQUEST

可以用 REQUEST 启用或者废止对服务名的用户请求，或返回对服务名的当前请求状态。

要启用对服务名的客户请求，需将 lExpression 指定为“真”(.T.)；将 lExpression 指定为“假”(.F.)，则可以废止对服务名的客户请求。“真”(.T.) 是默认值。

要想返回服务名的当前请求状态，省略 lExpression 即可。如果启用了服务名的发送请求，则 DDESetService( ) 返回“真”，否则返回“假”。

下面的命令废止从客户应用程序对服务名 myservice 的请求，并显示 myservice 的当前请求状态：

glRequest = DDESetService('myservice', 'REQUEST', .F.)

? DDESetService('myservice', 'REQUEST')

FORMATS [cDataFormat]

指定服务名支持的数据格式，没有用 cDataFormat 指定格式的服务器请求会被拒绝。当指定数据格式时，请用逗号分隔列表中的格式。例如：

=DDESetService('myservice', 'FORMATS', 'CF_TEXT, CF_SYLK')

如果省略 cDataFormat，则只支持 CF_TEXT 格式。

lExpression

指定 REQUEST、EXECUTE、POKE 或 ADVISE 选项。将 lExpression 指定为“真”(.T.) 可以启用一个选项，指定为“假”(.F.) 则可以废止一个选项。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

Visual FoxPro 可以作为一个动态数据交换 (DDE) 服务器向 Microsoft Windows 的客户应用程序发送数据，DDESetService( ) 用来创建、释放或更改 Visual FoxPro 中的服务名和设置。每个服务名可以有多个由 DDESetService( ) 创建的主题名，客户应用程序向 DDE 主题名请求数据。

如果成功地创建、释放或修改了服务名，则 DDESetService( ) 返回“真”(.T.)；如果服务名不能被创建、释放或修改，则 DDESetService( ) 返回“假”(.F.)。

DDESetService( ) 也能返回有关服务名的信息。Visual FoxPro 有默认的服务名 Visual FoxPro，Visual FoxPro 服务名有一个称为 System 的主题名。下表列出了 System 主题支持的所有项名。

项名	项
Topics	可用的主题名列表
Formats	服务名支持格式列表
Status	繁忙或等待
SysItems	项名列表
可以使用 DDESetTopic( ) 修改 Visual FoxPro 服务名或释放服务名。有关 Visual FoxPro 服务名操作的详细内容，请参阅 DDESetTopic( ) 选项。


请参阅

DDEEnabled( )，DDELastError( )，DDEPoke( )，DDESetTopic( )


DDESetTopic( ) 函数

请参阅	示例

在动态数据交换 (DDE) 会话中，创建或释放一个服务名的主题名。

语法

DDESetTopic(cServiceName, cTopicName [, cUDFName])

参数

cServiceName

指定服务名。服务名可用 DDESetTopic( ) 创建。

cTopicName

指定要创建或释放的主题名。如果包括 cUDFName，则 DDESetTopic( ) 创建主题名 cTopicName；如果省略 cUDFName，则释放主题名 cTopicName。若 cTopicName 是一个空字符串，对任何没有明确声明的主题名，执行 cUDFName 指定的用户自定义函数。

cUDFName

在客户应用程序向主题名发出请求时，指定要执行的用户自定义函数。如果省略了 cUDFName，则从服务名中释放主题名 cTopicName。

执行用户自定义函数时，按下列顺序给该函数传递六个参数：

参数	内容
Channel Number	客户通道号
Action	ADVISE, EXECUTE, INITIATE, POKE, REQUEST, 或 TERMINATE
Item	项名；例如，R1C1 表示一个 Microsoft Excel 工作表单元
Data	来源于客户的数据
Format	数据格式。例如，CF_TEXT
Advise Status	链接类型（0 = 人工，2 = 交互式或自动）
Item、Data 和 Advise Status 参数值取决于 Action 参数，下表列出了 Action 参数值以及包含在 Item、Data 和 Advise Status 参数中的值。短横线 ( - ) 表明参数值是个空字符串。

Action 值	Item 值	Data 值	Advise status 值
INITIATE	-	主题名	-
TERMINATE	-	-	-
POKE	项名	新数据	-
REQUEST	项名	-	-
EXECUTE	-	新命令	-
ADVISE	项名	-	链接类型
如果用户自定义函数成功地处理了客户请求，则用户自定义函数返回“真”(.T.)；如果用户自定义函数不能处理请求或发生错误，则用户自定义函数应返回“假”(.F.)。如果 Action 参数值为 INITIATE 时返回“假”，则拒绝客户主题名的请求；如果在 Action 参数值是 POKE、REQUEST 或 EXECUTE 时返回“假”，则忽略请求；如果这个参数值为 ADVISE 时返回“假”，则拒绝客户交互式或自动链接的请求。

返回值类型

字符型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

创建主题名后，任何对主题名的客户请求都会使 Visual FoxPro 执行 cUDFName 指定的用户自定义函数。向用户自定义函数传递的一组参数值是由客户请求决定的。用户自定义函数的返回值由 DDEPoke( ) 函数传递给客户，其返回值是一个逻辑值，该值表明主题能否提供客户请求的服务。

如果成功地创建或释放主题名，则 DDESetTopic( ) 返回“真”(.T.)；如果不能创建或释放主题名，则返回“假”(.F.)。使用 DDELastError( ) 可确定不能创建或释放主题名的原因。


*下面的示例创建一个名为 myserver 的示例服务器，该服务器支
* 持在客户应用程序中执行 Visual FoxPro 命令。客户应
* 用程序通过 DO 主题向 myserver 发送请求，并用宏替换
* 执行客户命令。

*** 将 Visual FoxPro 设置为一个 DDE 服务器 ***

= DDESetService('myserver', 'DEFINE')

= DDESetService('myserver', 'EXECUTE', .T.)

= DDESetTopic('myserver', 'DO', 'DOTOPIC')

WAIT WINDOW 'Server portion service setup ... ' NOWAIT

*** 使用 Visual FoxPro 作为一个 DDE 客户 ***

gnChannel = DDEInitiate('myserver','DO')

=DDEExecute(gnChannel, 'WAIT WINDOW "Command Executed ... "')

=DDETerminate(gnChannel)

PROCEDURE dotopic

PARAMETERS gnChannel, gcAction, gcItem, gData, gcFormat, gnAdvise

glResult = .F.

*** 有必要从一个 INITATE 行为返回“真”(.T.)，否则不建立任何连接。***

IF gcAction = 'INITIATE'

glResult = .T.

ENDIF

IF gcAction = 'EXECUTE'

&gData

glResult = .T.

ENDIF

IF gcAction = 'TERMINATE'

WAIT WINDOW 'Goodbye ... ' NOWAIT

glResult = .T.

ENDIF

RETURN glResult

* 运行这个示例程序后，您已经建立了其他应用程序可以访问的 Visual FoxPro 服务。如果安装了 Microsoft Excel，可以运行下列 Excel 宏：

gnMyChan = INITIATE("myserver,"DO")

=EXECUTE(MyChan,"WAIT WINDOW 'Hi, this is EXCEL speaking'")

=RETURN( )


请参阅

DDEEnabled( )，DDELastError( )，DDEPoke( )，DDESetService( )


DDETerminate( ) 函数

请参阅

关闭用 DDEInitiate( ) 建立的动态数据交换 (DDE) 通道。

语法

DDETerminate(nChannelNumber | cServiceName)

参数

nChannelNumber

指定要关闭的通道号。

cServiceName

指定要关闭的服务名。

返回值类型

逻辑型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

如果通道关闭成功，则 DDETerminate( ) 返回“真”(.T.)；如果通道不能关闭，DDETerminate( ) 返回“假”(.F.)。

不再需要通道时，应将它们关闭，节约系统资源。

如果通过选择“文件”菜单中的“退出”来退出 Visual FoxPro，或者通过命令窗口或从程序内执行 QUIT 退出 Visual FoxPro，则通道将自动关闭。


请参阅

DDEAbortTrans( )，DDEAdvise( )，DDEExecute( )，DDEInitiate( )，DDELastError( )，DDEPoke( )，DDERequest( )，DDESetOption( )


Deactivate 事件

请参阅

对于一个容器对象（例如一个表单），当所包含的对象没有焦点而不再处于活动状态时，该事件发生。对于一个工具栏来说，当使用 Hide 方法隐藏工具栏时，该事件发生。

应用于

表单，表单集，页面，工具栏

语法

PROCEDURE Object.Deactivate

说明

在应用程序中只有移动焦点时，才发生 Activate 与 Deactivate 事件。将焦点移入或移出另一个应用程序的表单时，都不触发这两个事件。当卸载表单时，不发生 Deactivate 事件。

无论何时以编程方式或交互方式激活新对象时，都会触发原先活动对象的 Deactivate 事件，同时触发新建对象的 Activate 事件。


请参阅

Activate 事件，Hide 方法，LostFocus 事件，Show 方法，Visible 属性


DEACTIVATE MENU 命令

请参阅	示例

使一个用户自定义菜单栏失效，并将它从屏幕上移去，但并不从内存中删除菜单栏的定义。

语法

DEACTIVATE MENU MenuName1 [, MenuName2 ...] | ALL

参数

MenuName1 [, MenuName2 ...]

指定失效的菜单栏名。包含逗号分隔的菜单栏列表可以使一组菜单栏失效。

ALL

使所有的活动菜单失效。

说明

DEACTIVATE MENU 从 Visual FoxPro 主窗口或用户自定义窗口中移去一个活动菜单栏或一组菜单栏，而不从内存中删除菜单栏的定义。可以用 ACTIVATE MENU 命令和菜单栏名重新激活菜单栏。

提示

当在应用程序中包含系统菜单栏 (_MSYSMENU) 时，不必定义、激活或废止该菜单栏，只需发送 SET SYSMENU AUTOMATIC 命令即可。

要从内存中释放特定的一个或一组菜单栏，可使用 RELEASE MENUS 命令。可用 CLEAR MENUS 或 CLEAR 命令从内存中释放所有的菜单栏。

除非使用 DEFINE MENU BAR 创建菜单栏或使用 ACTIVATE MENU NOWAIT 激活菜单栏，否则程序控制回到激活菜单栏的命令行之后的程序行。


*下面的示例使用 DEACTIVATE MENU 使菜单失效，并从屏幕上移
* 去它。当前的系统菜单栏用 SET SYSMENU SAVE 保存到内存中，
* 用 SET SYSMENU TO 移去所有的系统菜单标题。

* DEFINE PAD 创建两个菜单标题，DEFINE POPUP 为每个菜单标题
* 创建一个菜单，DEFINE BAR 在每个菜单上创建菜单项。当选择
* 一个菜单标题时，ON PAD 使用 ACTIVATE POPUP 激活相应的菜
* 单，ACTIVATE MENU 显示并激活菜单栏。

*当从菜单中选择一项时，执行 CHOICE 过程，CHOICE 显示选中项
* 名称和包含该项的菜单名。程序控制在 ACTIVATE MENU
* 命令后继续执行。

*最后，菜单变为无效，并从屏幕上移去，然后用 RELEASE MENUS
EXTENDED 将它从内存中释放。

*** 请将此程序命名为 DEACMENU.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

ON KEY LABEL ESC KEYBOARD CHR(13)

DEFINE MENU example BAR AT LINE 1

DEFINE PAD convpad OF example PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD cardpad OF example PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD convpad OF example ACTIVATE POPUP conversion

ON PAD cardpad OF example ACTIVATE POPUP cardinfo

DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' ;

KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;

KEY CTRL+S, '^S'

DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;
KEY CTRL+D, '^D'

DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;

KEY CTRL+T, '^T'

DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;

KEY CTRL+I, '^I'

DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

ON SELECTION POPUP conversion ;

DO choice IN deacmenu WITH PROMPT( ), POPUP( )

DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;

KEY ALT+V, ''

DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;

KEY ALT+P, ''

DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;

KEY ALT+W, ''

DEFINE BAR 4 OF cardinfo PROMPT '\-'

DEFINE BAR 5 OF cardinfo PROMPT '\<Charges '

ON SELECTION POPUP cardinfo;

DO choice IN deacmenu WITH PROMPT( ), POPUP( )

ACTIVATE MENU example

DEACTIVATE MENU example

RELEASE MENU example EXTENDED

SET SYSMENU NOSAVE

SET SYSMENU TO DEFAULT

ON KEY LABEL ESC

PROCEDURE choice

PARAMETERS mprompt, mpopup

WAIT WINDOW 'You chose ' + mprompt + ;

' from popup ' + mpopup NOWAIT


请参阅

ACTIVATE MENU，CLEAR ALL，CLEAR MENUS，CREATE MENU，DEFINE MENU，HIDE MENU，RELEASE，SHOW MENU


DEACTIVATE POPUP 命令

请参阅

使 DEFINE POPUP 创建的菜单失效。

语法

DEACTIVATE POPUP MenuName1 [, MenuName2 ...] | ALL

参数

MenuName1 [, MenuName2 ...]

指定一个或多个要失效的菜单名。包含逗号分隔的多个菜单名可以使一组菜单失效。

ALL

使所有的活动菜单失效。

说明

DEACTIVATE POPUP 只从 Visual FoxPro 主窗口或用户自定义窗口中移去一个或一组活动菜单，而不从内存中删除菜单定义。可以用 ACTIVATE POPUP 和菜单名重新激活菜单。

可以使用 RELEASE POPUPS 和菜单名从内存中释放特定的一个或一组菜单，用 CLEAR POPUPS 或 CLEAR ALL 从内存中释放所有菜单。

除非用 ACTIVATE POPUP NOWAIT 激活菜单，否则，程序控制将回到激活菜单的命令行的下一程序行。


请参阅

ACTIVATE POPUP，CLEAR ALL，CLEAR POPUPS，CREATE MENU，DEFINE POPUP，HIDE POPUP，RELEASE POPUPS，SHOW POPUP


DEACTIVATE WINDOW 命令

请参阅	示例

使用户自定义窗口或 Visual FoxPro 系统窗口失效，并将它们从屏幕上移去，但不从内存中删除。

语法

DEACTIVATE WINDOW WindowName1 [, WindowName2 ...]
| ALL | SCREEN

参数

WindowName1 [, WindowName2 ...]

指定一个或多个要失效的窗口。可以指定 Visual FoxPro 系统窗口，例如命令窗口或浏览窗口。

ALL

使所有的活动窗口失效。

SCREEN

仅用于 FoxPro for Macintosh。

使 FoxPro 主窗口失效并隐藏起来。单击 FoxPro 主窗口上的“关闭”框也可以使窗口无效。

若要重新显示 FoxPro 主窗口，可从“窗口”菜单中选择“屏幕”，或者发出 ACTIVATE WINDOW SCREEN 或 SHOW WINDOW SCREEN 命令。

说明

在 Visual FoxPro 主窗口中，同时可放置多个用户自定义窗口，但只能向最近被激活的用户自定义窗口输出。当存在多个用户自定义窗口时，使当前窗口无效会清除该窗口的内容，并从屏幕上移走该窗口，将输出发送到前一个被激活的用户自定义窗口中。如果没有输出窗口，则输出将直接送入 Visual FoxPro 主窗口。

可使用 CLEAR WINDOWS 或 RELEASE WINDOWS 从屏幕和内存中删除窗口。

要使 Visual FoxPro 的系统窗口或工具栏无效，应将整个系统窗口或工具栏名包括在引号中。例如，要使 Visual FoxPro 的“报表控制”工具栏失效，可使用下列命令：

DEACTIVATE WINDOW Report Controls


*在下面的示例中，定义并激活一个名为 wOutput1 的窗口。当显示完
* customer 表中的一个记录后，程序等待用户按任意键并使窗口失效。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

CLEAR

DEFINE WINDOW wOutput1 FROM 2,1 TO 13,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

ACTIVATE WINDOW wOutput1

DISPLAY

WAIT WINDOW 'Press a key to deactivate the window'

DEACTIVATE WINDOW wOutput1

RELEASE WINDOW wOutput1


请参阅

ACTIVATE WINDOW，CLEAR WINDOWS，DEFINE WINDOW，HIDE WINDOW，RELEASE WINDOWS，SHOW WINDOW


DECLARE 命令

请参阅

创建一维或二维数组。

语法

DECLARE ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] ...

说明

DECLARE 在操作和语法上与 DIMENSION 相同。有关详细内容，请参阅 DIMENSION。


请参阅

APPEND FROM ARRAY，COPY TO ARRAY，DIMENSION，GATHER，PRIVATE，PUBLIC，SCATTER，SET COMPATIBLE，STORE


DECLARE - DLL 命令

请参阅	示例

注册外部 Windows 32 位动态链接库 ( .DLL ) 中的一个函数。

语法

DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
[cParamType1 [@] ParamName1,
cParamType2 [@] ParamName2, ...]

参数

cFunctionType

表明 32 位 Windows .DLL 函数是否有返回值。如果函数有返回值，则包含 cFunctionType ，否则省略 cFunctionType。

cFunctionType 可以是以下值：

cFunctionType	说明
SHORT	16 位整数
INTEGER	32 位整数
SINGLE	32 位浮点数
DOUBLE	64 位浮点数
STRING	字符串
FunctionName

指定在 Visual FoxPro 中要注册的 32 位 Windows .DLL 函数名。注意 FunctionName 区分大小写。

32 位 Windows .DLL 函数名可以与 Win32 API 手册中规定的不同。例如，Messagebox 函数应该命名为 MessogeBoxA（对于单字节字符）和 MessageBoxW（对于 UNICODE）。如果 Visual FoxPro 不能定位 FunctionName 指定的 32 位 Windows .DLL 函数，则将字母 A 追加到函数名尾部，Visual FoxPro 用新的函数名重新搜索。

如果指定的 32 位 Windows .DLL 函数与一个 Visual FoxPro 函数同名，或者函数名不是合法的 Visual FoxPro 函数名，则将 32 位 Windows .DLL 函数名作为 FunctionName，并用 AS 子句给该函数取一个合法的 Visual FoxPro 名，这点在本主题的后面将要说明。

IN LibraryName

指定外部 Windows .DLL 的名称，该动态链接库包含 FunctionName 指定的 Windows 32 位 .DLL 函数。如果为 LibraryName 指定 WIN32API，则 Visual FoxPro 就在 KERNEL32.DLL、GDI32.DLL、USER32.DLL、MPR.DLL 和 ADVAPI32.DLL 中搜索 32 位 Windows .DLL 函数。

AS AliasName

为一个与 Visual FoxPro 函数同名或不合法的 Windows 32 位 .DLL 函数名指定别名。AliasName 不能是 Visual FoxPro 的保留字或已经由 Visual FoxPro 注册的 Windows 32 位 .DLL 函数名。

可使用 AliasName 去调用 Windows 32 位 .DLL 函数。AliasName 不区分大小写。

cParameterType1 [@] ParamName1, cParameterType2 [@] ParamName2, ...

指定传递给 Windows 32 位 .DLL 函数的参数类型。

Windows 32 位 .DLL 函数由 cParameterType 指定需要的参数类型。cParameterType 可以为下列某一类型：

cParameterType	说明
INTEGER	32 位整数
SINGLE	32 位浮点数
DOUBLE	64 位浮点数
STRING	字符串
如果参数不是 Windows 32 位 .DLL 函数所需要类型，Visual FoxPro 产生一个错误。Null 值可以作为字符串传递。

调用函数时，若按引用传递一个参数，必须在这条命令的参数 cParameterType 后面、在调用函数相应变量前面包含 ＠。如果在 DECLARE 中或在调用函数中没有包含 ＠，参数就按值传递。有关需要按引用传递参数的 .DLL 函数的详细内容，请参阅《Microsoft Win32 编程指南》。

附注

参数名 ParamName1，ParamName2 等是可选的，Visual FoxPro 或 Windows 32 位 .DLL 函数并不使用它们，它们可以作为函数接收的参数名和参数类型的提示。

说明

在从 Visual FoxPro 调用一个 32 位 Windows .DLL 函数前，必须发出带有函数名、包含该函数的 Windows .DLL 名以及函数将要接收的参数类型的 DECLARE 命令。

为了提供向后兼容性，Visual FoxPro 仍支持 FOXTOOLS.FLL（包含在 FoxPro 早期版本中），并允许调用 16 位 .DLL 函数的 Visual FoxPro API 库。在 Visual FoxPro 中，调用 .DLL 函数时使用 DECLARE 是可取的方法。

有关 Windows 32 位 .DLL 函数的详细内容，请参阅《Microsoft Win32 编程指南》中的文档。

执行 DISPLAY STATUS 或 LIST STATUS 可以显示注册函数的名称，执行 CLEAR ALL 或 CLEAR DLLS 可从内存中删除注册函数。


*这个示例为当前活动的 Windows 应用程序显示句柄。当出现
* “等待”窗口时，可在 5 秒的时间内按下 ALT + TAB 键切换到
* 不同的 Windows 应用程序，否则以活动的应用程序离开 Visual
* FoxPro。

CLEAR

DECLARE INTEGER GetActiveWindow IN win32api

WAIT WINDOW "You can switch to another application now" TIMEOUT 5

? GetActiveWindow( )


请参阅

CALL，CLEAR，DISPLAY DLLS，DISPLAY STATUS，LIST DLLS，LOAD，SET LIBRARY


Default 属性

请参阅

若活动表单上有两个或更多命令按钮，在按下 ENTER 时，指定哪个命令按钮或 OLE 容器控制做出响应。

应用于

命令按钮，OLE 容器控制

语法

Object.Default[ = lExpr]

设置

lExpr

下表列出了Default 属性的设置：

设置	说明
“真”(.T.)	当按钮的 Default 属性设置为“真”(.T.) 且父表单处于活动状态时，用户可以通过按下 ENTER 执行按钮命令。将焦点移到同一表单的另一个按钮上时，按下回车键，只能影响带焦点的按钮，而不是默认按钮。
“假”(.F.)	（默认值）本按钮不是默认按钮。
说明

设计和运行时可用。

在表单上只能有一个命令按钮或 OLE 容器控制作为默认的命令按钮。当一个命令按钮或 OLE 容器控制的 Default 属性设置为“真”(.T.) 时，表单上所有其他命令按钮或 OLE 容器控制都自动设置为“假”(.F.)。在工具栏中无法创建默认的命令按钮或 OLE 容器控制。


请参阅

Enabled 属性，KeyPress 事件


DEFINE BAR 命令

请参阅	示例

在 DEFINE POPUP 创建的菜单中创建一个菜单项。

语法

DEFINE BAR nMenuItemNumber1 | SystemItemName
OF MenuName PROMPT cMenuItemText
[BEFORE nMenuItemNumber2 | AFTER nMenuItemNumber3]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[KEY KeyLabel [, cKeyText]]
[MARK cMarkCharacter]
[MESSAGE cMessageText]
[SKIP [FOR lExpression]]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

nMenuItemNumber1

指定菜单项编号，以便在其他命令或函数中引用此菜单项。

SystemItemName

指定 Visual FoxPro 系统菜单中的一个菜单项。例如，要访问“打印”菜单项，可发出如下命令：

DEFINE BAR _MFI_PRINT OF popMyPopup PROMPT "Print..."

不是所有的 Visual FoxPro 系统菜单项都可用，使用 SYS(2013) 可返回可用的 Visual FoxPro 系统菜单列表。

OF MenuName

指定放置菜单项的菜单名。

PROMPT cMenuItemText

指定显示的菜单项文本。

为 cMenuItemText 指定一个反斜杠和破折号 ( \- )，可创建一个分隔线。分隔线用来分隔菜单中的菜单项组。例如，在菜单定义中包含如下命令，将在第三和第四个菜单项之间创建一条分隔线：

DEFINE BAR 4 OF popMyPopup PROMPT '\-'

在用作访问键的字符前放置一个反斜杠和一个小于号 ( \＜ ) 可以创建一个访问键。例如：

DEFINE POPUP popReceive

DEFINE BAR 1 OF popReceive PROMPT '\<Invoices'

DEFINE BAR 2 OF popReceive PROMPT 'In\<quiry'

ACTIVATE POPUP popReceive

用户可按下“I”键从 Receive 菜单中选择 Invoices，按下“Q”键从同样的菜单中选择 Inquiry。

BEFORE nMenuItemNumber2

在 nMenuItemNumber2 指定的菜单项前面放置一个菜单项。

AFTER nMenuItemNumber3

在 nMenuItemNumber3 指定的菜单项后面放置一个菜单项。

附注

为了使 BEFORE 或 AFTER 有效，用 DEFINE POPUP 创建菜单时必须包含 RELATIVE 子句。

也可以在 BEFORE 和 AFTER 子句中包含 _MFIRST 和 _MLAST。如果 BEFORE 子句中包含 _MFIRST，则菜单项就是菜单中的第一项；如果 AFTER 子句中包含 _MFIRST，则菜单项就是菜单上的第二项；如果在 AFTER 子句中包含 _MLAST，则菜单项就是菜单上的最后一项；如果在 BEFORE 子句中包含 _MLAST，则菜单项就是菜单上的倒数第二项。

用 DEFINE POPUP RELATIVE 创建的菜单不会给没有定义的菜单项保留空间。例如，如果在一个菜单上定义了项 1，2，4 和 5，则不为项 3 保留空间，可在以后插入项 3，使菜单扩充来容纳该项。

运行下列程序示例。注意每个菜单上菜单项的顺序和放置的区别：

*** RELATIVE 示例 ***

DEFINE POPUP popRelatYes RELATIVE FROM 1,1

DEFINE BAR 4  OF popRelatYes PROMPT '4444'

DEFINE BAR 3  OF popRelatYes PROMPT '3333'

DEFINE BAR 2  OF popRelatYes PROMPT '2222'

DEFINE BAR 1  OF popRelatYes PROMPT '1111'

DEFINE BAR 6  OF popRelatYes PROMPT '6666' BEFORE 4

ACTIVATE POPUP popRelatYes

*** NON-RELATIVE 示例 ***

DEFINE POPUP popRelatNo FROM 1,10

DEFINE BAR 4 OF popRelatNo PROMPT '4444'

DEFINE BAR 3 OF popRelatNo PROMPT '3333'

DEFINE BAR 2 OF popRelatNo PROMPT '2222'

DEFINE BAR 1 OF popRelatNo PROMPT '1111'

DEFINE BAR 6 OF popRelatNo PROMPT '6666'

ACTIVATE POPUP popRelatNo

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro。

为菜单项指定字体。cFontName 指定字体的名称，nFontSize 指定字体磅值。例如，下面的命令用 12 磅 Courier 字体创建一个菜单项：

DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' FONT 'Courier', 12

如果包含 FONT 子句但省略磅值 nFontSize，则使用 10 磅。在 Visual FoxPro 中，如果指定的字体不可用，则用相似的字体代替。

STYLE cFontStyle

仅用于 Visual FoxPro。

为菜单项指定字形。如果省略 STYLE 子句，则使用常规字形。在 Visual FoxPro 中，如果指定的字形不可用，则用相似的字形代替。

cFontStyle 可指定以下字形：

字符	字形
B	粗体
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线
T	透明
U	下划线
可组合多个字符指定一个字形。例如，下面的命令指定字形为“粗斜体”：

DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' STYLE 'BI'

KEY KeyLabel [, cKeyText]

为菜单项指定访问键或组合键。与使用反斜杠和小于号 (\<) 指定快捷键不同，此时若要选择菜单项时，不一定要激活菜单。有关可用键、可用键组合以及键标记名称列表的内容，请参阅 ON KEY LABEL。

附注

如果对同样的键定义了键标记和键盘宏，则键盘宏优先，不能用指定的键或组合键去选择菜单项。

包含 cKeyText 可用自己的文本替换键标记。例如，如果包含 KEY Ctrl+B，则将菜单上的文本 Ctrl+B 放在菜单项名的右端；如果指定的不是 KEY Ctrl+B，而是 ^B，则 ^B 就会出现在菜单上。也可以通过指定 cKeyText 为空字符串而不输出一个键标记的显示。

MARK cMarkCharacter

指定出现在菜单项左端的标记字符。通过包含 MARK 可以将默认的标记字符改为 cMarkCharacter 指定的字符。如果 cMarkCharacter 包含不止一个字符，则只有第一个字符用作标记字符。

FoxPro for MS-DOS 中默认的标记字符为一个菱形，而在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中是一个对勾。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，如果包含菜单项的菜单合并到 Visual FoxPro 系统菜单中，则忽略 MARK 子句而使用默认的标记字符。如果包含菜单项的菜单放置在 Visual FoxPro 主窗口或用户自定义窗口中，而 FoxFont 不是该窗口的字体，则忽略 MARK 子句。

附注

标记字符并不标记一个菜单项，可使用 SET MARK OF 来标记一个菜单项。

在 DEFINE BAR 中指定的标记字符优先于 DEFINE POPUP 中用 MARK 指定的标记字符。SET MARK OF 用来将标记字符切换为开或关，也可用来为单个菜单项或所有菜单项指定标记字符。

MESSAGE cMessageText

当选择一个菜单项时显示一条信息。在 FoxPro for MS-DOS 中，默认的情况是将信息 cMessageText 放在 FoxPro 主窗口最后一行的中央；可用 SET MESSAGE 改变信息的位置。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，信息放在图形方式状态栏中。如果用 SET STATUS BAR OFF 关闭图形方式状态栏，则信息放到 Visual FoxPro 主窗口最后一行的中央。

SKIP [FOR lExpression]

指定一个条件。如果 lExpression 计算为“真”(.T.)，则使菜单项无效，不让用户选择它；如果为“假”(.F.)，则激活此菜单项。无效的菜单项以暗灰色显示。

也可以通过在提示文本前加一个反斜杠 (\) 使一个菜单项无效。例如：

DEFINE BAR 1 OF popReceive PROMPT '\Invoices'

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中不能选择用 SKIP 或 \ 废止的菜单项；而在 FoxPro for Macintosh 中，可以选定一个废止的菜单项但不能选择执行。当选定废止的菜单项后，仍然显示有关废止菜单项的信息。

在 FoxPro for Windows 中，当拼写检查或向导处于活动状态时，所创建的包含 SKIP FOR 表达式的菜单可能不会正确执行。

SKIP FOR 表达式通常依赖于跳过变量的值，但当拼写检查或向导处于活动状态时，跳过变量对菜单是不可见的。在拼写检查和向导应用程序（分别为 SPELLCHK.APP 和 GENGRAPH.APP）的初始化代码中都有意设置了 PRIVATE ALL，这将会隐藏用户自定义菜单中的跳过变量，并且在选择一个菜单时会产生错误信息。

要纠正这种错误，可将下面代码放在拼写检查和向导应用程序的开头：

IF TYPE("_memvarmask") = "C" and !EMPTY(_memvarmask)

PRIVATE ALL EXCEPT &_memvarmask

ELSE

PRIVATE ALL

ENDIF

假定名为“skipvar”的内存变量计算为“真”时要跳过某一菜单项。可以在菜单启动代码中包含下面几行来利用 _MEMVARMASK 变量：

PUBLIC _memvarmask

_memvarmask = "skipvar"

STORE .T. TO skipvar             && 初始时跳过。

要创建一组跳过变量，可以在菜单启动代码中包含下面几行：

PUBLIC _memvarmask

_memvarmask = "skip*"

STORE .T. TO skipthis, skipthat  && 初始时跳过。

当运行拼写检查和向导时，它们不隐藏 SKIP FOR 表达式中的变量，这就避免了在拼写检查或向导处于活动状态时可能遇到的错误信息。

注意：_MEMVARMASK 不是一个系统内存变量。

COLOR SCHEME nSchemeNumber

为单个菜单项指定颜色，这会改写默认颜色或 DEFINE POPUP 指定的颜色。在 FoxPro for MS-DOS 中，可指定所有菜单项、标记字符以及信息的颜色。

COLOR ColorPairList

为单个菜单项指定颜色，这将改写默认颜色或 DEFINE POPUP 指定的颜色。可为所有菜单项、标记字符以及信息指定颜色。

默认情况下，菜单项颜色由当前颜色集的配色方案 2 决定。

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

DEFINE BAR 和 DEFINE POPUP 共同来创建菜单，用 DEFINE POPUP 创建菜单并给它命名，用一组 DEFINE BAR 命令在菜单上放置菜单项。

如果使用菜单设计器创建菜单，则没有必要使用这些命令。菜单设计器自动为菜单创建一个命令。菜单设计器使用 Visual FoxPro 系统菜单，您可以增加菜单项来更改它。有关创建菜单的详细内容，请参阅创建菜单系统和《开发指南》的第十二章“设计菜单”。

也可创建一个菜单，让它包含位于磁盘上的表或一组文件中的记录或字段。有关详细内容，请参阅 DEFINE POPUP 中的 PROMPT FIELD 子句、PROMPT STRUCTVRE 子句和 PROMPT FILES 子句。

使用 ON BAR 可为菜单项创建一个层叠式子菜单。


*下面的示例使用 DEFINE BAR 在菜单上创建菜单项。首先用 SET
* SYSMENU SAVE 将当前的系统菜单存入内存，然后用 SET
* SYSMENU TO 将所有的系统菜单标题删除。

*先用 DEFINE PAD 创建两个新的系统菜单标题，用 DEFINE POPUP
* 为每个菜单标题创建一个下拉菜单。然后用 DEFINE BAR 创建每
* 个菜单的菜单项。当选择一个菜单标题时，ON PAD 使用
* ACTIVATE POPUP 去激活相应的菜单。

* 当从菜单上选择一个菜单项时，ON SELECTION POPUP 使用
* PROMPT( ) 和 POPUP( ) 函数将菜单项号和菜单名传递给
* CHOICE 过程，CHOICE 显示被选择的菜单项的提示符和包含
* 该菜单项的菜单名。如果从 Card Info 中选择了 Exit，则恢复
* 最初的 Visual FoxPro 系统菜单。

*** 请将这个程序命名为 DEFINBAR.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD convpad OF _MSYSMENU PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD cardpad OF _MSYSMENU PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion

ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo

DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;
KEY CTRL+S, '^S'

DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;

KEY CTRL+D, '^D'

DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;

KEY CTRL+T, '^T'

DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;
KEY CTRL+I, '^I'

DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

ON SELECTION POPUP conversion;

DO choice IN definbar WITH PROMPT( ), POPUP( )

DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;
KEY ALT+V, ''

DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;
KEY ALT+P, ''

DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;
KEY ALT+W, ''

DEFINE BAR 4 OF cardinfo PROMPT '\-'

DEFINE BAR 5 OF cardinfo PROMPT '\<Charges '

DEFINE BAR 6 OF cardinfo PROMPT '\-'

DEFINE BAR 7 OF cardinfo PROMPT 'E\<xit '

ON SELECTION POPUP cardinfo;

DO choice IN definbar WITH PROMPT( ), POPUP( )

PROCEDURE choice

PARAMETERS mprompt, mpopup

WAIT WINDOW 'You chose ' + mprompt + ;
' from popup ' + mpopup NOWAIT

IF mprompt = 'Exit'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE POPUP，DEACTIVATE POPUP，DEFINE POPUP，HIDE POPUP，RELEASE BAR，SET MESSAGE，SHOW POPUP


DEFINE BOX 命令

请参阅

在打印文本周围画一个方框。包含此命令是为了提供向后兼容性。可用报表设计器代替。

语法

DEFINE BOX FROM nColumn1 TO nColumn2
HEIGHT nLines [AT LINE nLineNumber]
[SINGLE | DOUBLE | cBorderString]

参数

FROM nColumn1 TO nColumn2

为框指定所在列。框的左上角位于打印列 nColumn1，右上角位于列 nColumn2。

HEIGHT nLines

指定框的高度，框的高度受系统内存变量 _PSPACING 的影响。例如，如果 nLines 设置为 5，_PSPACING 设置为 3，则框的高度为 15 行。

AT LINE nLineNumber

指定框的上边线所在行号。如果省略 AT LINE nLineNumbe，则框的上边线画在当前默认打印行上。

SINGLE | DOUBLE | cBorderString

为框指定边框样式。SINGLE 指定单线边框，DOUBLE 指定双线边框，可用 cBorderString 定义自己的边框。cBorderString 的语法与 SET BORDER 中的语法相同。有关详细内容，请参阅 SET BORDER。

说明

这条命令只在打印的报表文本周围画一个框，且仅当 _BOX 系统内存变量设置为“真”(.T.) 时，画一个框。

只有 SET PRINTER 设置为 ON 时，才能打印一个框。框只能画在用 ? 或 ?? 命令产生的输出周围，而不能画在用 ＠…SAY 产生的输出周围。

与 DEFINE BOX 相关的两个有用函数为 PCOL( ) 和 PROW( )，这些函数返回当前的打印列和打印行的位置。


请参阅

@ ... BOX，_BOX，PCOL( )，PROW( )，_PSPACING，SET BORDER，SET PRINTER


DEFINE CLASS 命令

请参阅	示例

创建一个用户自定义类或子类，并为创建的类或子类指定属性、事件和方法。

语法

DEFINE CLASS ClassName1 AS ParentClass
[[PROTECTED PropertyName1, PropertyName2 ...]
PropertyName = eExpression ...]
[ADD OBJECT [PROTECTED] ObjectName AS ClassName2 [NOINIT]
[WITH cPropertylist]]...
[[PROTECTED] FUNCTION | PROCEDURE Name
[NODEFAULT]
cStatements
[ENDFUNC | ENDPROC]]...
ENDDEFINE

参数

ClassName1

指定要创建的类名。

AS ParentClass

指定派生类或子类的父类，父类可以是一个 Visual FoxPro 基类（例如 Form 类）或者是另一个用户自定义的类或子类。

下表列出了 Visual FoxPro 的基类：

基类名
CheckBox	Label
Column	Line
ComboBox	ListBox
CommandButton	OLE Control
CommandGroup	OLE Bound Control
Container	OptionButton
Control	Option
Cursor	Page
Custom	PageFrame
DataEnviroment	Relation
EditBox	Separator
Form	Shape
FormSet	Spinner
Grid	TextBox
Header	Timer
Image	ToolBar
通过指定 ParentClass 为 Custom，可以创建一个非可视的用户自定义类。

在下面示例中，创建一个名为 MyForm 的子类，它派生于 Form 基类，并创建了一个 Click 方法。当单击 MyForm 时，该方法可显示一个对话框。

DEFINE CLASS MyForm AS Form

PROCEDURE Click

= MESSAGEBOX('MyForm has been clicked!')

ENDPROC

ENDDEFINE

[PROTECTED PropertyName1, PropertyName2 ...]
PropertyName = eExpression ...

PropertyName = eExpression 创建一个类属性或子类属性，并给属性赋默认值。这些属性是类的命名属性，它们为类定义了特性和行为。类和子类可以有多个属性。

可使用“=”为属性赋值。下面示例创建了一个名为 MyClass 的用户自定义类，并创建了两个名为 Name 和 Version 的属性，Name 属性初始化为空字符串，Version 属性初始化为字符串 1.0。

DEFINE CLASS MyClass AS Custom

Name = ''

Version = '1.0'

ENDDEFINE

当用 CREATEOBJECT( ) 函数创建对象后，可以在类或子类的定义之外访问属性：

MyOjbect = CREATEOBJECT('MyClass')

访问属性的语法如下：

ObjectName.Property

在属性名前加 PROTECTED 可以阻止从类定义或子类定义的外部访问和改变这些属性，在类或子类内部定义的方法和事件可以访问被保护属性。

在下面例子中，Version 属性受保护，它禁止在类定义以外访问和修改它。但是，Name 属性不受保护，可以访问和修改它。

DEFINE CLASS MyClass AS Custom

PROTECTED Version

Name = ''

Version = '1.0'

ENDDEFINE

ADD OBJECT

从 Visual FoxPro 的一个基类、用户自定义类（子类）或从 OLE 自定义控制向一个类定义或子类定义中添加一个对象。

PROTECTED

禁止从类定义或子类定义的外部访问和修改对象的属性，PROTECTED 关键字必须直接放在 ObjectName 之前，否则 FoxPro 将产生语法错误。

ObjectName

在类定义或子类定义创建一个对象后，ObjectName 指定对象名，并用来从类定义或子类定义内部引用对象。

AS ClassName2

指定类或子类名，该类或子类中包含添加到类定义中的对象。例如，下面的类定义从 CommandButton 基类中添加一个命令按钮，从 ListBox 基类中添加一个列表框。

DEFINE CLASS MyClass AS Custom

ADD OBJECT CB1 AS CommandButton

ADD OBJECT LIST1 AS ListBox

ENDDEFINE

NOINIT

当添加对象时，不执行对象的 Init 方法。

WITH cPropertyList

为添加到类定义或子类定义中的对象指定一列属性和属性值。例如，下面的类定义创建一个名为 MyClass 的类，向类定义中添加一个命令按钮，并为此命令按钮指定 Caption 和 Backcolor 属性：

DEFINE CLASS MyClass AS CUSTOM

ADD OBJECT CB1 AS CommandButton;

WITH Caption = 'Cancel', BackColor = 2

ENDDEFINE

[PROTECTED] FUNCTION | PROCEDURE Name
[NODEFAULT]
cStatements
[ENDFUNC | ENDPROC ...]

FUNCTION Name 或 PROCEDURE Name 为类（或者子类）创建事件和方法，而事件和方法是作为一组函数或过程来创建的。

可以在类定义或子类定义中创建事件函数或过程去响应一个事件。一个事件是一次活动（例如一次鼠标单击），它可以由类定义或子类定义创建的对象去识别。有关 Visual FoxPro 事件处理的详细内容，请参阅核心事件主题和《开发指南》第四章“深入了解事件模型”。

事件可用下面的语法调用：

ObjectName.Event

也可以在一个类或子类的定义中创建一个方法函数或过程。一个方法就是一个过程，它作用于由类或子类定义创建的对象。方法可用下列语法调用：

ObjectName.Method

NODEFAULT 会导致 Visual FoxPro 不对它本身的事件和方法进行默认处理。例如，如果 KeyPress 事件发生，而 KeyPress 过程或函数中包含 NODEFAULT，则禁止 Visual FoxPro 将按下的键放入 Visual FoxPro 的键盘缓冲区。这样就允许您自己创建一个 KeyPress 过程，它可在按下键并将键送入键盘缓冲区前先测试按下了哪个键。

NODEFAULT 可以放在事件或方法过程的任何位置。注意，NODEFAULT 也可放在表单设计器的事件或方法过程中。

cStatements 是 Visual FoxPro 命令，当执行一个事件或方法时就执行它。

事件和方法函数以及过程可以通过包含 PARAMETERS 或 LPARAMETERS 语句来接收值，只要将它作为函数或过程的第一个可执行语言即可。

与大多数 Visual FoxPro 关键字不同，不能缩写 ENDFUNC 和 ENDPROC，主要是为了避免与 ENDFOR 和 ENDPRINTJOB 关键字发生冲突。

下面示例演示了当单击命令按钮时，如何创建一个显示信息的事件过程，这个事件过程改写命令按钮的默认 Click 事件。

DEFINE CLASS MyClass AS Custom

ADD OBJECT MyButton AS CommandButton

ADD OBJECT MyList AS ListBox

PROCEDURE MyButton.Click

= MESSAGEBOX('This is my click event procedure')

ENDPROC

ENDDEFINE

说明

用户自定义类是放在程序文件中的一组命令，类似一个过程。与过程一样，这些类定义或子类定义后的命令并不执行，它们只定义类或子类的属性、事件和方法。

要根据一个类定义或子类定义创建对象，应发出包含该类名或子类名的 CREATEOBJECT( )。

不能在结构化编程命令中使用 DEFINE CLASS 创建类定义或子类定义（例如 IF…ENDIF 或 DO CASE…ENDCASE），它们也不能放在循环语句中（例如 DO WHILE…ENDDO 或 FOR…ENDFOR）。


* 下面的示例使用 DEFINE CLASS 和 CREATOBJECT( ) 从 Visual
* FoxPro 的 Form 基类创建两个名为 FormChild 和 FormGrandChild
* 的用户自定义类。ACLASS( ) 用来创建一个名为 gaNewarray 的
* 数组，该数组中包含这些类名。随后显示这些类名。

CLEAR

frmMyForm = CREATEOBJECT("FormGrandChild")

FOR nCount = 1 TO ACLASS(gaNewarray, frmMyForm) 	&& 创建一个数组

? gaNewarray(nCount)  && 显示类名

ENDFOR

RELEASE frmMyForm

DEFINE CLASS FormChild AS FORM

ENDDEFINE

DEFINE CLASS FormGrandChild AS FormChild

ENDDEFINE


请参阅

:: 作用域操作符，ADD CLASS，_BROWSER，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，GETOBJECT( )，MODIFY CLASS，RELEASE CLASSLIB，SET CLASSLIB，WITH ... ENDWITH


DEFINE MENU 命令

请参阅	示例

创建菜单栏。

语法

DEFINE MENU MenuBarName
[BAR [AT LINE nRow]]
[IN [WINDOW] WindowName | IN SCREEN]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[KEY KeyLabel]
[MARK cMarkCharacter]
[MESSAGE cMessageText]
[NOMARGIN]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

MenuBarName

指定要创建的菜单栏的名称。给菜单栏命名使您能够在其他命令和函数中引用该菜单栏。

BAR [AT LINE nRow]

创建一个与 Visual FoxPro 系统菜单栏类似的菜单栏，该菜单栏有以下特征：

 •	   水平菜单栏的高度为一个行高，宽度为它所在的 Visual FoxPro 主窗口或用户自定义窗口的宽度。

 •	   自动处理菜单栏上菜单标题的位置。

 •	   如果您所定义的菜单标题的大小与数目超出了菜单栏所在的屏幕或窗口的大小，可以滚动菜单栏。

可用 AT LINE 子句指定菜单所在的行。在 Visual FoxPro 和 FoxPro for Windows 中忽略 AT LINE 子句，行号用 nRow 指定。

IN [WINDOW] WindowName

在用户自定义窗口中放置一个菜单栏。WindowName 指定用户自定义窗口名。如果省略 IN WINDOW，除非有一个活动的用户自定义窗口，在默认的情况下，菜单栏放置在 Visual FoxPro 主窗口中。如果有一个活动的用户自定义窗口，菜单栏就放在其中。

IN SCREEN

在 Visual FoxPro 主窗口中放置菜单栏。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro。

为菜单栏中所有的菜单标题指定默认的字体，在 DEFINE PAD 中包含 FONT 子句可以改写单个菜单标题的默认字体。

cFontName 指定字体名称，nFontSize 指定磅值。例如，下面的命令创建一个菜单栏，它的菜单标题使用 12 磅 Courier 字体：

DEFINE MENU mnuExample FONT 'Courier', 12

如果在 FONT 子句中省略磅值 nFontSize，就使用 10 磅字体。在 Visual FoxPro 中，如果指定的字体不可用，就用相似的字体代替。

添加到 Visual FoxPro 系统菜单 _MSYSMENU 中的菜单标题忽略 FONT 子句。注意菜单设计器使用的是 Visual FoxPro 系统菜单。

STYLE cFontStyle

仅用于 Visual FoxPro。

为菜单栏中所有的菜单标题指定一个默认的字形，在 DEFINE PAD 命令中包含 STYLE 子句可以改写单个菜单标题的默认字形。

如果省略了 STYLE 子句，就使用常规字形。在 Visual FoxPro 中，如果指定的字形不可用，那么就用相似的字形代替。

下表列出了可以用 cFontStyle 指定的字形：

字符	字形
B	粗体
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线
T	透明
U	下划线
可以组合多个字符来指定一个字形。例如，下列命令指定粗斜体：

DEFINE MENU mnuExample STYLE 'BI'

添加到 Visual FoxPro 系统菜单 _MSYSMENU 中的菜单标题忽略 STYLE 子句。注意菜单设计器使用的是 Visual FoxPro 系统菜单。

KEY KeyLabel

指定用于激活菜单栏的键或组合键。有关可用键或组合键，以及它们的键标记名的内容，请参阅 ON KEY LABEL。包含 KEY 子句等于使用了下列命令：

ON KEY LABEL KeyLabel ACTIVATE MENU MenuName

附注

如果一个键同时具有键标记和键盘宏，则键盘宏优先，不能用它指定的键或组合键来激活菜单栏。

MARK cMarkCharacter

指定在菜单栏的菜单标题左端出现的标记字符。可以使用 MARK 将默认的标记字符改为用 cMarkCharacter 指定的标记字符。如果 cMarkCharacter 包含一个以上字符，则仅有第一个字符用作标记字符。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中默认的标记字符是对号，在 FoxPro for MS-DOS 中默认的标记字符为菱形。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中忽略 MARK 子句。如果菜单栏是 Visual FoxPro 系统菜单，就使用默认的标记字符。如果放置菜单栏所在的 Visual FoxPro 主窗口或用户自定义窗口中的字体不是 FoxFont，则忽略 MARK 子句。

附注

指定一个标记字符并不能在菜单栏上标记菜单名。可使用 SET MARK OF 和指定的字符在菜单栏上标记菜单标题。

DEFINE PAD 指定的标记字符优先于 DEFINE MENU 中用 MARK 子句指定的标记字符。SET MARK OF 用来切换标记字符的打开或关闭，它也能用来为单个菜单项或所有的菜单项指定标记字符。

MESSAGE cMessageText

当您选择菜单标题时显示一条信息。在 FoxPro for MS-DOS 中，信息 cMessageText 在默认的情况下显示在 FoxPro 主窗口最后一行的中央，信息的显示位置可用 SET MESSAGE 改变。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，信息放在图形方式状态栏中。如果图形方式状态栏被 SET STATUS BAR OFF 关闭，信息就显示在 Visual FoxPro 主窗口最后一行的中央。

NOMARGIN

默认情况下，删除每个菜单名左端和右端的空格。

COLOR SCHEME nSchemeNumber

为单个菜单栏指定颜色。在 FoxPro for MS-DOS 中，可以为所有的菜单项、标记字符和信息指定颜色。

COLOR ColorPairList

为单个菜单栏指定颜色。在 FoxPro for MS-DOS 中，可以为所有的菜单项、标记字符和信息指定颜色。

默认情况下，菜单项的颜色由当前颜色集中配色方案 2 决定。

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

使用 DEFINE MENU 为应用程序的菜单系统创建菜单栏。使用 DEFINE PAD 在菜单栏上创建菜单标题。使用 ON PAD ... ACTIVATE 指定在每个菜单标题下显示的菜单。使用 DEFINE POPUP 在每个菜单标题下创建菜单。使用 ACTIVATE MENU 激活整个菜单系统。

如果使用菜单设计器创建菜单，就完全没有必要使用这些命令，菜单设计器自动地为菜单创建命令。菜单设计器使用 Visual FoxPro 系统菜单，您可以通过添加自己的菜单项更新它。有关创建菜单的详细内容，请参阅创建菜单系统和《开发指南》的第十二章“设计菜单”。


* 下面的示例使用 DEFINE MENU 创建一个用户自定义菜单系统。
* 首先将当前的系统菜单栏用 SET SYSMENU SAVE 存入内存，
* 然后用 SET SYSMENU TO 清除系统菜单标题。
*

* DEFINE MENU 创建菜单栏，用 DEFINE PAD 创建两个
* 菜单标题，DEFINE POPUP 为每个菜单标题创建一个菜单，
* DEFINE BAR 在每个菜单上创建菜单项。当选择一个
* 菜单标题时，ON PAD 使用 ACTIVATE POPUP 激活
* 相应的菜单。ACTIVATE MENU 显示并激活菜单栏。

* 当从一个菜单中选择菜单项时，就执行 CHOICE 过程，CHOICE
* 显示选择的菜单项名和包含该项的菜单名。
*

*** 该程序名为 DEFIMENU.PEG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

ON KEY LABEL ESC KEYBOARD CHR(13)

DEFINE MENU example BAR AT LINE 1

DEFINE PAD convpad OF example PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD cardpad OF example PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD convpad OF example ACTIVATE POPUP conversion

ON PAD cardpad OF example ACTIVATE POPUP cardinfo

DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' ;

KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;

KEY CTRL+S, '^S'

DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;

KEY CTRL+D, '^D'

DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;

KEY CTRL+T, '^T'

DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;

KEY CTRL+I, '^I'

DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

ON SELECTION POPUP conversion;

 DO choice IN defimenu WITH PROMPT( ), POPUP( )

DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;

KEY ALT+V, ''

DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;

KEY ALT+P, ''

DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;

KEY ALT+W, ''

DEFINE BAR 4 OF cardinfo PROMPT '\-'

DEFINE BAR 5 OF cardinfo PROMPT '\<Charges '

ON SELECTION POPUP cardinfo;

DO choice IN defimenu WITH PROMPT( ), POPUP( )

ACTIVATE MENU example

DEACTIVATE MENU example

RELEASE MENU example EXTENDED

SET SYSMENU TO DEFAULT

ON KEY LABEL ESC

PROCEDURE choice

PARAMETERS mprompt, mpopup

WAIT WINDOW 'You chose ' + mprompt + ;

 	' from popup ' + mpopup NOWAIT


请参阅

ACTIVATE MENU，CNTPAD( )，CREATE MENU，DEACTIVATE MENU，DEFINE PAD，GETPAD( )，HIDE MENU，MRKPAD( )，ON PAD，ON SELECTION PAD，PRMPAD( )，RELEASE PAD，SET MARK OF，SET SYSMENU，SHOW MENU


DEFINE PAD 命令

请参阅	示例

在用户自定义菜单栏或 Visual FoxPro 系统菜单栏上创建一个菜单标题。

语法

DEFINE PAD MenuTitle1 OF MenuBarName PROMPT cMenuTitleText
[AT nRow, nColumn]
[BEFORE MenuName2 | AFTER MenuName3]
[NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[KEY KeyLabel [, cKeyText]]
[MARK cMarkCharacter]
[SKIP [FOR lExpression]]
[MESSAGE cMessageText]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

MenuTitle1

指定要创建的菜单的标题。指定菜单标题使您能够在其他命令和函数中引用该菜单。

OF MenuBarName

指定菜单标题所在的菜单栏名。

PROMPT cMenuTitleText

指定显示的菜单标题文本。

在作为访问键的字符前加反斜杠和小于号(\<)，可以为菜单标题创建访问键。在下面的例子中，用户可按下“I”键从“Receive”菜单中选择“Invoices”，按下“Q”键从同样的菜单中选择“Inquiry”：

DEFINE MENU mnuReceive

DEFINE PAD padInvoice OF mnureceive PROMPT "\<Invoices"

DEFINE PAD padInquire OF mnureceive PROMPT "In\<quiry"

ACTIVATE MENU mnuReceive

AT nRow, nColumn

指定菜单标题出现在菜单栏中的位置。nRow，nColumn 是菜单标题的左端在 Visual FoxPro 主窗口或用户自定义窗口中的坐标。

如果省略了 AT 子句，第一个菜单标题的左端就放在 Visual FoxPro 主窗口或用户自定义窗口的第 0 行，下一个菜单标题放在第一个标题的右端，依此类推。

附注

对于由 DEFINE MENU 中的 BAR 子句创建的菜单栏，不能通过包含 AT 子句指定菜单标题的位置。

BEFORE MenuName2

将菜单栏上的菜单标题放到 MenuName2 指定的菜单标题的左边。通过键盘访问菜单标题的顺序与菜单栏中菜单标题的位置一致。

AFTER MenuName3

将菜单栏上的菜单标题放到 MenuName3 指定的菜单标题的右边。通过键盘访问菜单标题的顺序与菜单栏中菜单标题的位置一致。

首先必须创建在 BEFORE 或 AFTER 子句中指定的菜单标题。如果不创建菜单标题，那么菜单栏上的菜单标题的放置就由创建的顺序或用 AT 子句指定的位置决定。

对于不带 BAR 创建的菜单栏，BEFORE 或 AFTER 子句决定了由键盘访问菜单标题的顺序，菜单标题的位置由 AT 子句指定。

运行下面两个示例，并注意当分别用 AT 子句和不用 AT 子句定义菜单标题时菜单标题的位置与访问顺序的区别：

*** 程序示例 1 不用 AT 子句 ***

DEFINE MENU mnuBefAft

DEFINE PAD padOne   OF mnuBefAft PROMPT '1111'

DEFINE PAD padTwo   OF mnuBefAft PROMPT '2222'

DEFINE PAD padThree OF mnuBefAft PROMPT '3333'

DEFINE PAD padFour  OF mnuBefAft PROMPT '4444' BEFORE padTwo

ACTIVATE MENU mnuBefAft

***程序示例 2 使用 AT 子句 ***

DEFINE MENU mnuBefAft

DEFINE PAD padOne   OF mnuBefAft PROMPT '1111' AT 1,5

DEFINE PAD padTwo   OF mnuBefAft PROMPT '2222' AT 1,15

DEFINE PAD padThree OF mnuBefAft PROMPT '3333' AT 1,25

DEFINE PAD padFour  OF mnuBefAft PROMPT '4444' BEFORE padTwo AT 1,35

WAIT WINDOW 'Press ESC to erase menu' NOWAIT

ACTIVATE MENU mnuBefAft

NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT

当进行 OLE 可视编辑时，指定菜单标题在 Visual FoxPro 菜单栏中的位置。

NEGOTIATE LEFT 指定菜单标题放在“文件组”的左边。

NEGOTIATE MIDPLE 指定菜单标题放在“容器组”的左边，“编辑”菜单的后面。

NEGOTIATE RIGHT 指定菜单标题放在“窗口组”的左边。

如果省略 NEGOTIATE 子句，则当进行 OLE 可视编辑时从菜单栏中删除菜单标题。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro。

为菜单标题指定字体。cFontName 指定字体名称，nFontSize 指定磅值。例如，下列命令创建一个12 磅 Courier 字体的菜单标题。

DEFINE PAD padPageAccts OF mnuReceive FONT 'Courier', 12

如果在 FONT 子句中省略磅值 nFontSize，则使用 10 磅的字体。在 Visual FoxPro 中，如果指定的字体不可用，那么就用相似的字体代替。

添加到 Visual FoxPro 系统菜单 _MSYSMENU 中的菜单标题忽略 FONT 子句，注意菜单设计器使用 Visual FoxPro 系统菜单。

STYLE cFontStyle

仅用于 Visual FoxPro。

为菜单标题指定字形。如果省略 STYLE 子句，那么就使用常规字形。在 Visual FoxPro 中，如果指定的字形不可用，那么就用相似的字形代替。

下表列出了可以使用 cFontStyle 指定的字形：

字符	字形
B	粗体
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除
T	透明
U	下划线
可以组合多个字符来指定字形。例如，下列命令指定粗斜体：

DEFINE PAD padPageAccts OF mnuReceive STYLE 'BI'

添加到 Visual FoxPro 系统菜单 _MSYSMENU 中的菜单标题忽略 STYLE 子句，注意菜单设计器使用 Visual FoxPro 系统菜单。

KEY KeyLabel [, cKeyText]

为菜单标题指定快捷键或组合键。有关可用的键和组合键以及它们的键标记名的详细内容，请参阅 ON KEY LABEL。

附注

如果一个键具有同样的键标记和键盘宏，则键盘宏优先，此时不能用指定的键或组合键去选择菜单标题。

对于不是用 BAR 子句创建的菜单栏，键标记放在菜单标题的右边。用 BAR 子句创建的菜单栏中，不显示键标记。Visual FoxPro 系统菜单栏中菜单标题的键标记也不显示。

包含 cKeyText 可以用自己的文本替换键标记。例如，包含 KEY ALT+B 将文本 ALT+B 放到菜单标题的右端。如果指定的不是 KEY ALT+B，而是“^B”，则 ^B 就出现在菜单标题的右端。通过为 cKeyText 指定空字符串可以不显示一个键标记。

MARK cMarkCharacter

指定出现在菜单标题左端的标记字符。包含 MARK 子句可以将默认的标记字符改写为 cMarkCharacter 指定的字符。如果 cMarkCharacter 包含一个以上字符，则仅用第一个字符作为标记字符。

在 FoxPro for MS-DOS 中默认的标记字符为菱形，在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中默认的标记字符为对号。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中忽略 MARK 子句，且当包含菜单标题的菜单栏是 Visual FoxPro 系统菜单时将使用默认的标记字符。如果菜单栏所在的 Visual FoxPro 主窗口或用户自定义窗口中的字体不是 FoxFont，也忽略 MARK 子句。

用 DEFINE PAD 指定的标记字符优先于 DEFINE MENU 中用 MARK 子句指定的标记字符。SET MARK OF 用来切换标记的打开或关闭。它也能用来为单个菜单标题或所有的菜单标题指定标记字符。

附注

指定一个标记字符并不能给菜单标题做标记，可以使用 SET MARK OF 命令以及指定的字符去标记一个菜单标题。

SKIP [FOR lExpression]

指定一个条件。如果 lExpression 为“真”(.T.)，菜单标题被废止，禁止用户选择；如果 lExpression 为“假”(.F.)，则允许选择菜单标题。

也可以在菜单标题文本前放置反斜杠 (\) 来废止一个菜单项。例如：

DEFINE PAD padPageAccts OF mnuReceive PROMPT '\Age Accounts'

菜单标题 padPageAccts 以暗灰色显示，表明不能选择它。

在 FoxPro for MS-DOS 中，不能选择用 SKIP 或反斜杠 (\) 废止的菜单标题。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中废止的菜单标题可以显示但不能选择。但是可以显示由 MESSAGE 指定的菜单信息。

在 FoxPro for Windows 中，当拼写检查或向导处于活动状态时，创建的包含 SKIP FOR 表达式的菜单标题可能不能正确执行。SKIP FOR 表达式通常依赖于跳过变量。当拼写检查或向导处于活动状态时，跳过变量对于菜单是不可见的。在拼写检查和向导应用程序（分别为 SPELLCHK.APP 和 GENGRAPH.APP）的初始化代码中，有意设置了 PRIVATE ALL。这将使跳过变量从用户自定义菜单中隐藏起来。当选择一个菜单时，产生错误信息。

要改变这种情况，可在拼写检查和向导应用程序的开头放置如下代码：

IF TYPE("_memvarmask") = "C" and !EMPTY(_memvarmask)

PRIVATE ALL EXCEPT &_memvarmask

ELSE

PRIVATE ALL

ENDIF

若要在名为“skipvar”的内存变量计算为“真”(.T.)时跳过某一菜单标题，应该在菜单启动代码中包含下列代码行来利用 _MEMVARMASK 变量：

PUBLIC _memvarmask

_memvarmask = "skipvar"

STORE .T. TO skipvar             && 初始时跳过。

要创建一组跳过变量，可在菜单启动代码中包含下列代码行：

PUBLIC _memvarmask

_memvarmask = "skip*"

STORE .T. TO skipthis, skipthat  && 初始时跳过。

当运行拼写检查和向导应用程序时，它们并不隐藏 SKIP FOR 表达式中的变量，这样，当拼写检查或向导处于活动状态时就可以避免出现可能遇到的错误信息。

注意，_MEMVARMASK 不是系统内存变量。

MESSAGE cMessageText

当选择一个菜单标题时显示信息。在 FoxPro for MS-DOS 中，默认情况下信息 cMessageText 显示在 FoxPro 主窗口最后一行的中央；信息的显示位置可用 SET MESSAGE 改变。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，信息放在图形方式状态栏中。如果图形方式状态栏用 SET STATUS BAR OFF 关闭，信息就显示在 Visual FoxPro 主窗口最后一行的中央。

COLOR SCHEME nSchemeNumber

为单个菜单标题指定颜色，它将取代默认的或用 DEFINE MENU 指定的颜色。在 FoxPro for MS-DOS 中，可以为所有的菜单标题、标记字符和信息指定颜色。

COLOR ColorPairList

为单个菜单标题指定颜色。它将取代默认的或用 DEFINE MENU 指定的颜色。在 FoxPro for MS-DOS 中，可以为所有的菜单标题、标记字符和信息指定颜色。

默认情况下，菜单栏中菜单标题的颜色由当前颜色集中的配色方案 2 决定。

有关配色方案与颜色对的详细内容，请参阅颜色概述主题。

说明

必须用 DEFINE PAD 命令创建放置在菜单栏上的每个菜单标题。在放置菜单标题之前，必须用 DEFINE MENU 定义菜单栏，且必须在 DEFINE PAD 中包含菜单栏名。

如果使用菜单设计器创建菜单，根本没有必要使用这些命令，菜单设计器会自动为菜单创建这些命令。菜单设计器使用的是 Visual FoxPro 系统菜单。您可以通过添加自己的菜单项来更新它。有关创建菜单的详细内容，请参阅创建菜单系统和《开发指南》的第十二章“设计菜单”。

附注

在 FoxPro for Macintosh 中，添加的菜单标题不要超过屏幕的宽度。可以在 Balloon Help 菜单标题以外添加菜单标题，但它们是不可访问的。


* 下面的示例使用 DEFINE PAD 在 Visual FoxPro
* 系统菜单栏中放置菜单标题。首先用 SET SYSMENU SAVE
* 将当前系统菜单栏存入内存，然后用 SET SYSMENU TO
* 将所有的系统菜单标题删除。

*系统菜单标题是用 DEFINE PAD 创建的，当选择一个菜单标
* 题时，执行 CHOICE 过程。CHOICE 显示被选择的菜单
* 标题名和菜单栏名，并切换菜单标题的标记字符的打开和
* 关闭。如果选择退出菜单标题，恢复最初的 Visual FoxPro
* 系统菜单。

*** 该程序名为 DEFINPAD.PRG ***

CLEAR

SET TALK OFF

SET SYSMENU SAVE

SET SYSMENU TO

PUBLIC markpad

markpad = .T.

DEFINE PAD syspad    OF _MSYSMENU PROMPT '\<System'  COLOR SCHEME 3 ;

KEY ALT+S, ''

DEFINE PAD editpad   OF _MSYSMENU PROMPT '\<Edit'    COLOR SCHEME 3 ;

KEY ALT+E, ''

DEFINE PAD recordpad OF _MSYSMENU PROMPT '\<Record'  COLOR SCHEME 3 ;

KEY ALT+R, ''

DEFINE PAD windowpad OF _MSYSMENU PROMPT '\<Window'  COLOR SCHEME 3 ;
KEY ALT+W, ''

DEFINE PAD reportpad OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 ;

KEY ALT+P, ''

DEFINE PAD exitpad   OF _MSYSMENU PROMPT 'E\<xit'    COLOR SCHEME 3 ;

KEY ALT+X, ''

ON SELECTION MENU _MSYSMENU ;

DO choice IN definpad WITH PAD( ), MENU( )

PROCEDURE choice

PARAMETER mpad, mmenu

WAIT WINDOW 'You chose ' + mpad + ;

' from menu ' + mmenu NOWAIT

SET MARK OF PAD (mpad) OF _MSYSMENU TO ;

! MRKPAD('_MSYSMENU', mpad)

markpad = ! markpad

IF mpad = 'EXITPAD'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE MENU，CREATE MENU，DEACTIVATE MENU，DEFINE MENU，GETPAD( )，HIDE MENU，MRKPAD( )，ON PAD，ON SELECTION PAD，PRMPAD( )，SET MARK OF，SET MESSAGE，SET SYSMENU，SHOW MENU


DEFINE POPUP 命令

请参阅	示例

创建菜单。

语法

DEFINE POPUP MenuName
[FROM nRow1, nColumn1]
[TO nRow2, nColumn2]
[IN [WINDOW] WindowName | IN SCREEN]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FOOTER cFooterText]
[KEY KeyLabel]
[MARGIN]
[MARK cMarkCharacter]
[MESSAGE cMessageText]
[MOVER]
[MULTISELECT]
[PROMPT FIELD FieldName | PROMPT FILES [LIKE FileSkeleton]
| PROMPT STRUCTURE]
[RELATIVE]
[SCROLL]
[SHADOW]
[TITLE cMenuTitleText]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

MenuName

指定要创建的菜单的名称。

FROM nRow1, nColumn1 TO nRow2, nColumn2

指定菜单放置的位置。nRow1、nColumn1 指定菜单左上角的坐标。如果省略 FROM 子句，Visual FoxPro 就将菜单的左上角放在 Visual FoxPro 主窗口或用户自定义窗口的第一行第一列。

若要用指定的尺寸创建菜单，可包含 TO nRow2, nColumn2 来指定菜单右下角的位置。如果包含了 FROM nRow1, nColumn1 而省略了 TO nRow2, nColumn2，Visual FoxPro 自动设置菜单大小。菜单的宽度与最长的菜单项一样宽（如果菜单项是用 DEFINE BAR 创建的），菜单的长度受到所在的 Visual FoxPro 主窗口或用户自定义窗口的限制。若菜单的长度不够容纳所有的菜单项，就会出现一个滚动条允许在菜单项间滚动。

IN [WINDOW] WindowName

在 WindowName 指定的用户自定义窗口中放置菜单。如果省略这个子句，在默认情况下，菜单放在 Visual FoxPro 主窗口中，除非有一个活动的用户自定义窗口。如果有一个活动的用户自定义窗口，菜单就放在该活动窗口中。

IN SCREEN

在 Visual FoxPro 主窗口中放置菜单。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro。

为菜单指定默认的字体。可以通过在 DEFINE BAR 中包含 FONT 子句改写单个菜单项的默认字体。

cFontName 指定字体名称，nFontSize 指定字体磅值。例如，下列命令创建 12 磅 Courier 字体的菜单：

DEFINE MENU popMyPopup FONT 'Courier', 12

如果在 FONT 子句中省略磅值 nFontSize，就用 10 磅字体。在 Visual FoxPro 中，如果指定的字体不可用，就用相似的字体代替。

STYLE cFontStyle

仅用于 Visual FoxPro。

为菜单指定默认的字形。可在 DEFINE BAR 中包含 FONT 子句改写单个菜单项的默认样式。

如果省略 STYLE 子句，就使用常规字形。在 Visual FoxPro 中，如果指定的字形不可用，就用相似的字形代替。

下表列出了可用 cFontStyle 指定的字形：

字符	字形
B	粗体
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除
T	透明
U	下划线
可以组合多个字符来指定字形。例如，下列命令指定粗斜体：

DEFINE MENU popMyPopup STYLE 'BI'

FOOTER cFooterText

用 cFooterText 指定的文本在菜单底部中央创建一个注脚。

KEY KeyLabel

为菜单指定快捷键或键组合。请参阅 ON KEY LABEL，可得到可用键和组合键以及它们的键标记名称的列表。在此使用 KEY 子句等效于发出下列命令：

ON KEY LABEL KeyLabel ACTIVATE POPUP MenuName

附注

如果一个键具有同样的键标记和键盘宏，则键盘宏优先。不能用指定的键或组合键激活菜单。

MARGIN

在每个菜单的两边设置额外的空间，标记字符显示在菜单项左端的空间里，表明有一个附加的层叠式子菜单的箭头显示在菜单项的右端。如果省略 MARGIN，标记字符改写菜单项名的第一个字符，表示菜单层次的箭头改写菜单项的最后一个字符。

MARK cMarkCharacter

指定出现在菜单项左端的标记字符。在 FoxPro for MS-DOS 中默认标记字符是菱形。而在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中默认的标记字符为对号。

在 Visual FoxPro 和 FoxPro for Macintosh 中忽略 MARK 子句。如果菜单并入 Visual FoxPro 系统菜单中，就使用默认的标记字符。如果菜单所在的 FoxPro 主窗口或用户自定义窗口中的字体不是 FoxFont，也忽略 MARK子句。

可以包含 MARK 将默认的标记字符改写为 cMarkCharacter 指定的字符。如果 cMarkCharacter 包含多个字符，则仅第一个字符用作标记字符。

附注

指定一个标记字符并不能给一个菜单项做标记，可用 SET MARK OF 给菜单项做标记。

MARK 子句可为菜单上所有的菜单项设置标记字符。DEFINE BAR 命令指定的标记字符优先于 DEFINE POPUP 中用 MARK 子句指定的标记字符。SET MARK OF 用来切换标记字符的打开或关闭，它也可用来为单个菜单项或为所有菜单项指定标记字符。

MESSAGE cMessageText

当选择一个菜单项时显示信息。在 FoxPro for MS-DOS 中，默认情况下，信息 cMessageText 显示在 FoxPro 主窗口最后一行的中央。信息的显示位置可以用 SET MESSAGE 改变。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，信息放在图形方式状态栏中。如果基于字符方式的状态栏用 SET STATUS ON 打开时，信息就显示在 Visual FoxPro 主窗口最后一行的中央。

MOVER

将双向箭头 ( [image]) 放到菜单中被选定菜单项左边的移动钮中。可拖着这个双向箭头将一个菜单项移到菜单上的另一个位置。GETBAR( ) 可用来确定菜单上每个菜单项的位置。

不能重新调整用 PROMPT 子句创建的菜单中的菜单项。

MULTISELECT

允许用户同时从一个菜单中选择多个菜单项，当用户从一个菜单中选择一项时，菜单项的左端就放置一个标记字符。

不能从一个用 PROMPT 子句创建的菜单中选择多项。

MRKBAR( ) 可用来确定从菜单中选择的菜单项。

如果在 DEFINE POPUP 中包含了 MULTISELECT，可以包含 MARGIN 子句，在每个菜单项中为标记字符保留空间。

在下面的例子中创建一个名为 popFruits 的菜单。其中 MULTISELECT 子句创建一个允许选择多个菜单项的菜单。

四个菜单项各有一个不同的标记字符，当用户从菜单上选择菜单项时，给菜单项打开标记并由名为 yourchoice 的例程显示被选的菜单项。

CLEAR

IF NOT _DOS

MODIFY WINDOW SCREEN FONT 'foxfont', 12

ENDIF

ACTIVATE SCREEN

DEFINE POPUP popFruits FROM 5,5 ;

MULTISELECT MARGIN	&& 创建多重选择菜单

DEFINE BAR 1 OF popFruits ;

PROMPT '\<Apples'  MARK CHR(3) 	&& 第一个菜单项

DEFINE BAR 2 OF popFruits ;

PROMPT '\<Bananas' MARK CHR(4) 	&& 第二个菜单项

DEFINE BAR 3 OF popFruits ;

PROMPT '\<Grapes'  MARK CHR(5) && 第三个菜单项

DEFINE BAR 4 OF popFruits ;

PROMPT '\<Lemons'  MARK CHR(6)	 && 第四个菜单项

@ 12,5 SAY 'Your choices:'

ON SELECTION POPUP popFruits DO yourchoice 	&& Choice 例程

ACTIVATE POPUP popFruits

PROCEDURE yourchoice	&& 当选定时执行

@ 13,5 CLEAR

FOR gnCount = 1 TO CNTBAR('popFruits')	&& 菜单项数目次循环

IF MRKBAR('popFruits', gnCount) = .T.	&& 给选项做上标记

? PRMBAR('popFruits', gnCount) AT 5	&& 显示标题

ENDIF

NEXT

PROMPT FIELD FieldName

指定一个已打开的表的字段名，该表的记录作为菜单上的菜单项。对于表中的每个记录，菜单都对应一个菜单项。当激活该菜单时，就选定了该表的工作区。

提示

如果为 PROMPT FIELD 指定的、用于菜单中的字段设置了筛选条件，可以使用 Rushmore 优化。有关 Rushmore 优化的详细内容，请参阅 SET OPTIMIZE 或《开发指南》的第十七章“优化应用程序”。

FieldName 可包含多个用加号操作符 (+) 连接的字段名和表达式。FieldName 也可以是在另一个工作区打开表中的字段名或是一个用户自定义函数。

在 FoxPro for MS-DOS 的标准（16 位）版本中，可以出现在 PROMPT FIELD 创建的菜单上的菜单项的最大数目为 32,767。如果表中有更多的记录，FoxPro 显示一条错误信息。在 FoxPro for MS-DOS 的扩展（32 位）版和 Visual FoxPro、FoxPro for Windows 以及 FoxPro for Macintosh 中，对可以出现在 PROMPT FIELD 创建的菜单上的菜单项数目没有限制。

PROMPT FILES [LIKE FileSkeleton]

创建一个显示当前目录中可用的文件名的菜单。

LIKE FileSkeleton 允许使用通配符指定在菜单上显示的文件。例如，要创建一个显示默认驱动器和路径下的表名的菜单，可使用以下命令：

PROMPT FILES LIKE *.DBF

可以包含驱动器标识符、路径标识符或同时包含两者，来创建显示在其他驱动器、其他路径上的文件名的菜单。例如，若想使创建的菜单中包含 C 驱动器 PROGRAMS 子目录下的文件名，可使用下列命令：

PROMPT FILES LIKE C:\PROGRAMS\*.PRG

PROMPT STRUCTURE

根据表的字段结构，在菜单上显示当前表中的字段名。当激活菜单时，也就选择了表所在的工作区。

RELATIVE

指定菜单项在菜单上放置的顺序。如果菜单不是用 RELATIVE 子句创建的，那么菜单项在菜单上放置的顺序由该菜单项的编号决定。菜单为没有定义的菜单项保留空间。例如，如果定义了第一项和第三项且激活了菜单，则菜单上就会为第二项保留一空行。

如果用 RELATIVE 创建菜单，菜单项就以定义它们的顺序出现在菜单上。菜单不为未定义的项保留空间。

用 RELATIVE 定义菜单允许您在 DEFINE BAR 中使用 BEFORE 和 AFTER 子句在菜单上相对于其他项的位置放置菜单项。如果菜单不是由 RELATIVE 创建，在 DEFINE BAR 中包含 BEFORE 或 AFTER 会产生错误。

运行以下两个程序实例并比较每个菜单上菜单项安置位置。

*** RELATIVE 示例  ***

DEFINE POPUP popRelatYes RELATIVE FROM 1,1

DEFINE BAR 4  OF popRelatYes PROMPT '4444'

DEFINE BAR 3  OF popRelatYes PROMPT '3333'

DEFINE BAR 2  OF popRelatYes PROMPT '2222'

DEFINE BAR 1  OF popRelatYes PROMPT '1111'

DEFINE BAR 6  OF popRelatYes PROMPT '6666' BEFORE 4

ACTIVATE POPUP popRelatYes

*** NON-RELATIVE 示例***

DEFINE POPUP popRelatNo FROM 1,1

DEFINE BAR 4  OF popRelatNo PROMPT '4444'

DEFINE BAR 3  OF popRelatNo PROMPT '3333'

DEFINE BAR 2  OF popRelatNo PROMPT '2222'

DEFINE BAR 1  OF popRelatNo PROMPT '1111'

DEFINE BAR 6  OF popRelatNo PROMPT '6666'

ACTIVATE POPUP popRelatNo

SCROLL

在创建的菜单右端放置滚动条。只有当菜单项太多而菜单装不下，或菜单太长而它所在的 Visual FoxPro 主窗口或用户自定义窗口中放不下时，才出现滚动条。

SHADOW

仅用于 FoxPro for MS-DOS。

在菜单后设置阴影。SET SHADOWS 可以用来显示或删除菜单的阴影。有关的详细内容，请参阅 SET SHADOWS。

TITLE cMenuTitleText

在菜单的顶边中央显示一个标题。cTitleText 指定菜单标题。

COLOR SCHEME nSchemeNumber

为菜单上所有元素指定颜色。默认情况下，DEFINE POPUP 创建的菜单颜色由配色方案 2 控制。

COLOR ColorPairList

为菜单上所有元素指定颜色。

有关配色方案和颜色对的详细内容，请参阅颜色概述主题。

说明

要在菜单上放置一组定义的菜单项，请使用一系列 DEFINE BAR 命令。要在菜单中放置记录、文件或字段，使用 DEFINE POPUP 中的选项 PROMPT FIELD、PROMPT FILES 或 PROMPT STRUCTURE。

当菜单显示出来并由 ACTIVATE POPUP 激活时，可在菜单上选择一个菜单项。根据选择的菜单项，可能会执行一个例程或显示并激活另一个菜单。当选择一个菜单项时显示的另一个菜单称为层叠式子菜单。有关创建子菜单的详细内容，请参阅 ON BAR。

如果使用菜单设计器创建菜单，根本没有必要使用这些命令。菜单设计器自动为菜单创建这些命令。菜单设计器使用 Visual FoxPro 系统菜单，可以通过添加自己的菜单项更新它。有关创建菜单的详细内容，请参阅创建菜单系统和《开发指南》的第十二章“设计菜单”。


* 下面的示例使用 DEFINE POPUP 创建菜单，该菜单在选择菜
* 单栏中的菜单标题时被激活。首先用 SET SYSMENU SAVE
* 将当前系统菜单栏存入内存，然后用 SET SYSMENU TO 将
* 所有的系统菜单标题删除。

* 用 DEFINE PAD 创建两个新的系统菜单标题，DEFINF POPUP
* 为每个菜单标题创建一个下拉式菜单。DEFINE BAR 在每个菜单
* 上创建菜单项。当选择一个菜单标题时，ON PAD 使用 ACTIVATE
*  POPUP 激活相应的菜单。

* 当从一个菜单中选择一个菜单项时，ON SELECTION POPUP
* 使用 PROMPT( ) 和POPUP( ) 函数将菜单项号和菜单名传递给
* CHOICE 过程。CHOICE 过程显示被选项的文本和包含该项的
* 菜单名。如果从“Card Info”菜单中选择了“Exit”项，就恢复到
* 最初的 Visual FoxPro 系统菜单。

*** 该程序名为 DEFINPOP.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD convpad OF _MSYSMENU PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD cardpad OF _MSYSMENU PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion

ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo

DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT '\<Length' ;

KEY CTRL+L, '^L'

DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;

KEY CTRL+S, '^S'

DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;

KEY CTRL+D, '^D'

DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;
KEY CTRL+T, '^T'

DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;
KEY CTRL+I, '^I'

DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;

KEY CTRL+M, '^M'

ON SELECTION POPUP conversion;

DO choice IN definpop WITH PROMPT( ), POPUP( )

DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;

KEY ALT+V, ''

DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;

KEY ALT+P, ''

DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;

KEY ALT+W, ''

DEFINE BAR 4 OF cardinfo PROMPT '\-'

DEFINE BAR 5 OF cardinfo PROMPT '\<Charges '

DEFINE BAR 6 OF cardinfo PROMPT '\-'

DEFINE BAR 7 OF cardinfo PROMPT 'E\<xit '

ON SELECTION POPUP cardinfo;
DO choice IN definpop WITH PROMPT( ), POPUP( )

PROCEDURE choice

PARAMETERS mprompt, mpopup

WAIT WINDOW 'You chose ' + mprompt + ;
' from popup ' + mpopup NOWAIT

IF mprompt = 'Exit'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE POPUP，CNTBAR( )，CREATE MENU，DEFINE BAR，GETBAR( )，HIDE POPUP，MOVE POPUP，MRKBAR( )，ON BAR，ON SELECTION BAR，POPUP( )，PRMBAR( )，PROMPT( )，SET MARK OF，SET MESSAGE，SIZE POPUP，SHOW POPUP


DEFINE WINDOW 命令

请参阅	示例

创建一个窗口并指定它的属性。

语法

DEFINE WINDOW WindowName1
FROM nRow1, nColumn1 TO nRow2, nColumn2
| AT nRow3, nColumn3 SIZE nRow4, nColumn4
[IN [WINDOW] WindowName2 | IN SCREEN | IN DESKTOP
| IN MACDESKTOP]
[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FOOTER cFooterText]
[TITLE cTitleText]
[HALFHEIGHT]
[DOUBLE | PANEL | NONE | SYSTEM | cBorderString]
[CLOSE | NOCLOSE]
[FLOAT | NOFLOAT]
[GROW | NOGROW]
[MDI | NOMDI]
[MINIMIZE | NOMINIMIZE]
[SHADOW | NOSHADOW]
[ZOOM | NOZOOM]
[ICON FILE FileName1]
[FILL cFillCharacter | FILL FILE FileName2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

WindowName1

指定要创建的窗口的名称。在 Visual FoxPro 中窗口名长度可以达到 254 个字符。（早期 FoxPro 版本中为 10 个字符）。必须以字母或下划线开头而不能以数字开头。它们可以包含字母、数字和下划线的任意组合。

FROM nRow1, nColumn1 TO nRow2, nColumn2

在 Visual FoxPro 主窗口中指定用户自定义窗口的位置和大小。FROM nRow1, nColumn1 指定用户自定义窗口左上角在 Visual FoxPro 主窗口中的位置。TO nRow2, nColumn2 指定用户自定义窗口的右下角在 Visual FoxPro 主窗口中的位置。

定义窗口时，坐标可以超出 Visual FoxPro 边框，窗口可以比 Visual FoxPro 主窗口更大。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，窗口的位置和大小由父窗口的字体决定。父窗口可以是另一个用户自定义窗口或 Visual FoxPro 主窗口。

AT nRow3, nColumn3 SIZE nRow4, nColumn4

指定一个用户自定义窗口的位置和大小。

AT nRow3, nColumn3 指定用户自定义窗口的左上角在 Visual FoxPro 主窗口中的位置，这个位置是由父窗口中当前字体决定的。因为 AT 子句在各方面都与 FROM 子句相同，所以这两个子句可以互换使用。

SIZE nRow4, nColumn4 以行和列为单位指定用户自定义窗口的大小，它确保以特定字体显示的文本能在创建的窗口中显示。

可以使用 FONT 和 STYLE 子句为用户自定义窗口指定字体和字形。如果为窗口指定了字体并包含了 SIZE 子句，那么窗口的大小就由窗口字体的高度和宽度决定。在 Visual FoxPro 和 FoxPro for Windows 中，如果没有为窗口指定字体，窗口的字体就是默认的系统 10 磅 FoxFont 字体。在 FoxPro for Macintosh 中使用 9 磅 Monaco 作为默认字体。

在 FoxPro for MS-DOS 中，AT 和 SIZE 子句还可以用来指定一个用户自定义窗口的位置和大小。因为 FoxPro for MS-DOS 只支持单一的字体，所以窗口的大小总是相同的。

IN [WINDOW] WindowName2

将一个用户自定义窗口放入父窗口。用户自定义窗口变成一个子窗口，它不能移到父窗口之外。如果父窗口移动，子窗口随之移动。

当子窗口放在父窗口中时，用 FROM 和 TO 子句或 AT 和 SIZE 子句指定的子窗口的坐标是相对于父窗口的，而不是相对于 Visual FoxPro 主窗口。

下面的示例创建一个父窗口 wParent，子窗口 wChild 放在父窗口中。

CLEAR

DEFINE WINDOW wParent ;

FROM 1, 1 TO 20, 30 ;

TITLE "Parent"	&& 父窗口。

ACTIVATE WINDOW wParent

DEFINE WINDOW wChild ;

FROM 1, 1 TO 20, 20 ;

TITLE "Child" ;

IN WINDOW wParent 	&& 子窗口。

ACTIVATE WINDOW wChild

ACTIVATE SCREEN

WAIT WINDOW 'Press a key to clear the windows'

RELEASE WINDOW wParent, wChild

CLEAR

IN SCREEN

在 Visual FoxPro 主窗口中放置用户自定义窗口。如果省略 IN SCREEN，默认情况下，用户自定义窗口放在 Visual FoxPro 主窗口中。

在 ACTIVATE WINDOW 中包含 IN WINDOW 子句，可以在另一个用户自定义窗口中放置窗口并忽略此 IN SCREEN 子句。

IN DESKTOP

在 Visual FoxPro 和 FoxPro for Windows 中，用户自定义窗口可以放在 Microsoft Windows 桌面上，但位于 Visual FoxPro 主窗口外。窗口的位置与 Windows 桌面和 Visual FoxPro 主窗口中的当前字体有关。

在 FoxPro for Macintosh 中，将用户自定义窗口放在 Macintosh 桌面上。FoxPro 主窗口不能遮盖用户自定义窗口。

在 FoxPro for MS-DOS 中，用户自定义窗口放在 FoxPro 主窗口中。在 FoxPro for MS-DOS 中，IN DESKTOP 与 IN SCREEN 完全相同。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将一个用户自定义窗口放在 Macintosh 桌面上。用户自定义窗口与 FoxPro 主窗口属于同一级。它能移到 FoxPro 主窗口外，也能被 FoxPro 主窗口隐藏起来。

包含 MACDESKTOP 子句将忽略当前 SET MACDESKTOP 设置。当不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 决定将用户自定义窗口放在 FoxPro 主窗口还是 Macintosh 桌面上，有关在 FoxPro 主窗口或 Macintosh 桌面上放置用户自定义窗口的详细内容，请参阅 SET MACDESKTOP。

NAME ObjectName

仅用于 Visual FoxPro。

为窗口创建一个对象引用，这允许您使用表单对象的面向对象属性对窗口进行操作。有关 Visual FoxPro 中面向对象程序设计的详细内容，请参阅《开发指南》第三章“面向对象程序设计”。可以为 NAME 子句创建的窗口指定表单对象属性。有关的详细内容，请参阅表单对象主题。

FONT cFontName [, nFontSize]

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

为放在窗口中的文本指定字体。cFontName 指定字体名称，nFontSize 指定磅值。如果省略 nFontSize，就使用 10 磅字体。

例如，在 Visual FoxPro 和 FoxPro for Windows 中，此命令创建一个窗口，用 16 磅 Courier 字体显示定向到窗口中的输出感畔：

DEFINE WINDOW wDisplayFont FROM 2,2 TO 12,22 FONT 'Courier', 16

在 Visual FoxPro 和 FoxPro for Windows 中，如果省略 FONT 子句，就使用 10 磅 FoxFont 字体，在 FoxPro for Macintosh 中使用 9 磅 Monaco 字体。

在 Visual FoxPro 和 FoxPro for Windows 中，如果指定的字体不可用，就用相似的字体代替。

在 FoxPro for Macintosh 中，如果指定的字体不可用，就使用 Chicago 字体。

在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

为放置在窗口中的文本指定字形。cFontStyle 指定字形。如果省略了 STYLE 子句，就使用常规字形。

在 Visual FoxPro 和 FoxPro for Windows 中，如果指定的字形不可用，就用相似的字形代替。

在 FoxPro for Macintosh 中，如果指定的字形不可用，就使用常规字形。

在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

下表列出了字形和它们相应的字符。

字符	字形
B	粗体
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
可以组合多个字符指定字形。在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，下列命令指定粗斜体字形：

DEFINE WINDOW wDisplayStyle FROM 2, 2 TO 12, 22 STYLE 'BI'

FOOTER cFooterText

仅用于 FoxPro for MS-DOS。

给用户自定义窗口加一个注脚。cFooterText 指定要作为注脚显示的文本。注脚放在窗口的底边中央。如果注脚比窗口宽，就截断注脚。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，忽略 FOOTER 子句。

TITLE cTitleText

用 TITLE 子句加一个标题。cTitleText 指定标题文本，它显示在窗口底边的中央。如果标题比窗口宽，就截断它。

HALFHEIGHT

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

所创建的窗口具有对分标题栏。此参数提供了与 FoxPro 早期版本创建的窗口的兼容性，使这些窗口能导入到 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中。

当使用 DEFINE WINDOW 在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中创建窗口时，除非包含 SYSTEM 关键字或包含 FONT 子句，否则会使用对分标题栏。

如果包含 HALFHEIGHT 关键字，则不管是否包含了 SYSTEM 或 FONT 子句，都会使用对分标题栏。

在 FoxPro for MS-DOS 中，忽略 HALFHEIGHT 子句。

DOUBLE | PANEL | NONE | SYSTEM | cBorderString

为用户自定义窗口指定边框样式，默认的边框为一条单线。

参数	说明
DOUBLE	指定窗口周围用双线边框。
PANEL	指定窗口周围用宽边框。
NONE	彻底地隐藏边框。
SYSTEM	指定用户自定义窗口，使其看上去象一个系统窗口，当包含某些其他子句（GROW，ZOOM 等）时，要在窗口的边框上设置适当的窗口控制。
cBorderString	指定一个自定义边框。有关自定义边框的详细内容，请参阅 SET BORDER 。
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，包含 DOUBLE 或自定义边框字符串可以创建带有 PANEL 边框的窗口。即使不包含 SYSTEM 窗口定义子句，包含 CLOSE、FLOAT、GROW 或 MINIMIZE 子句也会在窗口中设置适当的控制。

CLOSE

允许使用键盘或界面关闭用户自定义窗口。关闭窗口是将它从 Visual FoxPro 主窗口或用户自定义的父窗口中移去，并将它的定义从内存中删除。如果省略了 CLOSE 子句，就不能关闭窗口。

NOCLOSE

禁止关闭一个窗口。

FLOAT

允许您使用键盘或界面移动一个用户自定义窗口。如果省略了 FLOAT，不能移动窗口。MOVE WINDOW 也可用来移动一个窗口。

NOFLOAT

禁止移动一个用户自定义窗口。

GROW

允许您使用键盘或界面调整用户自定义窗口的大小。如果省略 GROW，不能调整窗口大小。

NOGROW

禁止调整窗口的大小。

MDI

仅用于 Visual FoxPro 和 FoxPro for Windows。

创建一个适合 MDI 的用户自定义窗口。MDI（多文档界面）允许使用多文档窗口并决定它们的结构和行为。如果省略 MDI，您所创建的窗口就不适合 MDI。

当一个适合 MDI 的窗口最小化时：

 •	   窗口假定为 Visual FoxPro 主窗口的大小。窗口控制消失且控制菜单框出现在 Visual FoxPro 系统菜单栏中，窗口的复原按钮也放在 Visual FoxPro 系统菜单栏中。

 •	   窗口标题放在 Visual FoxPro 标题栏中，用连字符将它与 Visual FoxPro 标题分隔开。

 •	   如果激活了另一个适合 MDI 的窗口，它将自动最小化。

NOMDI

创建一个不适合 MDI 的窗口。

MINIMIZE

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS。

允许使用键盘或界面最小化一个用户自定义窗口。

在 FoxPro for Macintosh 中的用户自定义窗口不能最小化，它忽略 MINIMIZE 子句。

NOMINIMIZE

用 NOMINIMIZE 创建的或不用 MINIMIZE 创建的窗口不能最小化。

SHADOW

仅用于 FoxPro for MS-DOS 和 FoxPro for Macintosh。

在用户自定义窗口后加阴影。默认情况下，窗口没有阴影，可以用 SET SHADOWS 改变阴影的默认设置。

在 Visual FoxPro 和 FoxPro for Windows 中，忽略 SHADOW 子句。

NOSHADOW

用 NOSHADOW 或不用 SHADOW 创建的窗口没有阴影。

ZOOM

允许使用键盘或界面最大化一个用户自定义窗口。也可以将窗口复原到它原先的大小。

NOZOOM

禁止最大化一个窗口。

ICON FILE FileName

仅用于 Visual FoxPro 和 FoxPro for Windows。

指定当窗口最小化时显示的图标。必须在 DEFINE WINDOW 中包含 MINIMIZE 关键字。只能指定一个图标 (.ICO) 文件，而不能指定一个位图 (.BMP) 文件。

FILL cFillCharacter

仅用于 FoxPro for MS-DOS。

用字符填充窗口的背景。如果 cFillCharacter 包含多个字符，那么只有第一个字符用作填充字符。您可以使用 CHR( ) 指定填充字符。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，忽略 FILL 子句。

FILL FILE FileName2

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

为窗口指定壁纸（背景）。窗口由 FileName2 填充。

在 Visual FoxPro 和 FoxPro for Windows 中，可以指定一个 .BMP 位图文件。

在 FoxPro for Macintosh 中，可以指定 PICT 类型的图片文件或 .BMP 的位图文件。如果省略了图片文件的扩展名，FoxPro for Macintosh 首先查找由指定的文件名与 .BMP 扩展名组成的文件；若没找到，则 FoxPro for Macintosh 就查找由指定的文件名和 .PCT 扩展名组成的文件。若还没找到，FoxPro for Macintosh 就查找指定的文件名而不带扩展名的文件。

在 FoxPro for MS-DOS 中忽略 FILL FILE 子句。

COLOR SCHEME nSchemeNumber

为用户自定义窗口指定颜色。默认情况下，DEFINE WINDOW 创建的窗口的颜色由配色方案 1 控制。

COLOR ColorPairList

为用户自定义窗口指定颜色。

有关配色方案与颜色对的详细内容，请参阅颜色概述主题。

说明

DEFINE WINDOW 创建用户自定义窗口后，就可以用 ACTIVATE WINDOW 或 SHOW WINDOW 在 Visual FoxPro 主窗口中显示它们。可创建的用户自定义窗口的数量仅受可用内存和系统资源的限制。

被激活的窗口保存在 Visual FoxPro 主窗口中，直到执行 DEACTIVATE WINDOW 或 HIDE WINDOW 命令。DEACTIVATE WINDOW 和 HIDE WINDOW 命令从 Visual FoxPro 主窗口中移去窗口，但不从内存中删除窗口定义。可使用 ACTIVATE WINDOW 或 SHOW WINDOW 命令将窗口放会到 Visual FoxPro 主窗口中。

使用 CLEAR WINDOWS 或 RELEASE WINDOWS 从 Visual FoxPro 主窗口中移走窗口，并从内存中删除窗口定义。要重新显示已从内存中删除定义的窗口，必须用 DEFINE WINDOW 重新创建该窗口。


* 下面的示例创建并激活一个名为 output 的窗口。
* 程序等待您按下一个键，然后隐藏窗口。
* 程序等待您再按一下键，然后重新显示窗口。

CLEAR

DEFINE WINDOW output FROM 2,1 TO 13,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

ACTIVATE WINDOW output

WAIT WINDOW 'press any key to hide window output'

HIDE WINDOW output

WAIT WINDOW 'press any key to show window output'

SHOW WINDOW output

WAIT WINDOW 'press any key to release window output'

RELEASE WINDOW  output


请参阅

ACTIVATE WINDOW，DEACTIVATE WINDOW，字体概述，表单对象，HIDE WINDOW，MODIFY WINDOW，MOVE WINDOW，RELEASE WINDOWS，SET BORDER，SET MACDESKTOP，SHOW WINDOW


DefOLELCID 属性

请参阅

指定表单或 Visual FoxPro 主窗口中默认的 OLE 环境 ID 值。

应用于

表单，_SCREEN

语法

Form.DefOLELCID[ = nValue]

设置

nValue

指定表单或 Visual FoxPro 主窗口中默认的 OLE 环境 ID 值。当 OLE 绑定型控制和 OLE 容器控制在表单上或 Visual FoxPro 主窗口中，此默认值决定了它们的环境 ID 值。

说明

设计和运行时可用。

如果表单或 Visual FoxPro 主窗口中默认 OLE 的环境 ID 值改为一个新值，则在新的默认 OLE 环境 ID 值起作用之后，其中的 OLE 绑定型控制和 OLE 容器控制将启用该值。

表单或 Visual FoxPro 主窗口的 DefOLELCID 设置成 0 时，SYS(3004) 将决定在表单上或 Visual FoxPro 主窗口中的 OLE 绑定型控制和 OLE 容器控制的默认环境 ID 值。

有关环境 ID 值的详细内容，请参阅 SYS(3005)。

附注 DefOLELCID 属性仅影响显示 OLE 控制的用户接口语言，而不是 OLE 自动化命令语言。OLE 自动化命令语言仅受全局环境 ID 影响，由 SYS(3005) 设置。


请参阅

OLELCID 属性，SYS(3005) - 设置环境 ID 值


DELETE 命令

请参阅	示例

给要删除的记录做标记。

语法

DELETE
[Scope] [FOR lExpression1] [WHILE lExpression2]
[IN nWorkArea | cTableAlias]
[NOOPTIMIZE]

参数

Scope

指定要做删除标记的记录范围，Scope 子句有：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关 Scope 子句的详细内容，请参阅 Scope 子句主题或《开发指南》第二章“语言概述”。

DELETE 的默认范围是当前记录 (NEXT 1)。

FOR lExpression1

指定一个条件，仅给满足逻辑条件 lExpression1 的记录做删除标记。

如果 lExpression1 是一个可优化表达式，且表在 DELETED( ) 上建立索引时，可以用 Rushmore 优化 DELETE ... FOR 创建的查询。要得到最佳性能，可在 FOR 子句中使用一个可优化表达式。有关 Rushmore 可优化表达式的内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件。只要 lExpression2 计算为“真”(.T.)，就给这些记录做删除标记。

IN nWorkArea

指定要添加记录删除标记的表所在的工作区。

IN cTableAlias

指定要添加记录删除标记的表的别名。

如果省略 nWorkArea 和 cTableAlias，就给当前选定工作区中的表记录做删除标记。

NOOPTIMIZE

关闭 DELETE 的 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

说明

标有删除标记的记录在使用 PACK 前并不从表上做物理删除。标有删除标记的记录可以用 RECALL 恢复（清除标记）。


* 下面的示例打开 testdata 数据库中的 customer 表，
* DELETE 标识字段 country 中包含 USA 的所有要删除
* 的记录。所有做了删除标记的记录都显示出来。
* RECALL ALL 用来清除所有删除标记。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

DELETE FOR country = 'USA'  && 做删除标记

CLEAR

LIST FIELDS company, country FOR DELETED( ) && 列出标有标记的记录

RECALL ALL  && 清除所有删除标记


请参阅

DELETE - SQL，DELETED( )，PACK，RECALL，SET DELETED


DELETE - SQL 命令

请参阅	示例

给要删除的记录做标记。

语法

DELETE FROM [DatabaseName!]TableName
[WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

参数

FROM [DatabaseName!]TableName

指定要给其中的记录加删除标记的表。

DatabaseName! 指定包含该表的非当前数据库名。如果数据库不是当前的数据库，必须加上包含有该表的数据库名。在数据库名的后面、表名的前面包含感叹号 (!) 分隔符。

WHERE FilterCondition1 [AND | OR FilterCondition2 ...]

指定 Visual FoxPro 只给某些记录做删除标记。

FilterCondition 指定要做删除标记的记录必须满足的条件。可以包含许多筛选条件，它们用 AND 或 OR 操作符连接。也可以使用 NOT 操作符给一个逻辑表达式的值取反，或使用 EMPTY( ) 检查一个空的字段。

说明

带有删除标记的记录在执行 PACK 前并不从表中做物理删除。可以用 RECALL 命令恢复（清除标记）带有删除标记的记录。

如果 SET DELETED 设置为 ON，则所有命令都忽略带有删除标记的记录。

与 DELETE 不同，DELETE-SQL 在为以共享方式打开的表中的多个记录做删除标记时，会使用记录锁定技术。这会在多用户的情况下减少对记录的竞争，但可能会降低性能。要获得最佳性能，可以独占方式打开表，或使用 FLOCK( ) 锁定该表。


* 下面的示例打开 testdata 数据库中的 customer 表。
* DELETE-SQL 为字段 country 内容为 USA 的所有记录
* 做删除标记。所有带有删除标记的记录都显示出来。
* RECALL ALL 用来清除所有删除标记。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

DELETE FROM customer WHERE country = 'USA'  && 做删除标记

CLEAR

LIST FIELDS company, country FOR DELETED( ) && 列出标有标记的记录

RECALL ALL  && 清除所有删除标记


请参阅

DELETE，DELETED( )，PACK，RECALL，SET DELETED


DELETE CONNECTION 命令

请参阅	示例

从当前数据库中删除一个命名连接。

语法

DELETE CONNECTION ConnectionName

参数

ConnectionName

指定要从当前数据库中删除的命名连接的名称。

说明

删除一个命名连接定义并不关闭任何活动的连接。

DELETE CONNECTION 要求独占使用数据库。要以独占方式打开数据库，需在 OPEN DATABASE 中包含 EXCLUSIVE。


* 下面的示例假定名为 MyFoxSQLNT 的 ODBC 数据源
* 是可用的，数据源的用户标识 (ID) 为“sa”，打开
* testdata 数据库。创建名为 Myconn 的连接。
* DISPLAY CONNECTIONS 用来显示数据库中的命名连接。
* 然后用 DELETE CONNECTION 将连接
* 从数据库中删除。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE CONNECTION Myconn DATASOURCE "MyFoxSQLNT" USERID "sa"

DISPLAY CONNECTIONS	 && 显示数据库中的命名连接。

DELETE CONNECTION Myconn  && 删除刚创建的连接


请参阅

CREATE CONNECTION，MODIFY CONNECTION，RENAME CONNECTION


DELETE DATABASE 命令

请参阅	示例

从磁盘上删除数据库。

语法

DELETE DATABASE DatabaseName | ?
[DELETETABLES]

参数

DatabaseName

指定要从磁盘上删除的数据库的名称。指定的数据库不能是打开的。DatabaseName 可以包含指定数据库的路径和数据库名。

?

显示“打开”对话框，从该对话框中可以指定要从磁盘上删除的数据库名。

DELETETABLES

从磁盘上删除包含在数据库中的表和包含表的数据库。

说明

最好使用 DELETE DATABASE 从磁盘上删除一个数据库。DELETE DATABASE 从数据库的表中删除对数据库的引用，它不同于其他文件操作工具，例如 Windows 的“文件管理器”。

如果 SET SAFETY 设为 ON，Visual FoxPro 会提示是否要删除指定的数据库。如果 SET SAFETY 设置为 OFF，自动从磁盘上删除数据库。


* 此例创建了名为 people 的数据库和名为 friends 的表，
* 并自动添加到数据库中。DISPLAY TABLES 用来
* 显示数据库中的表，DISPLAY DATABASES 用来
* 显示数据库中表的信息。

* DELETE DATABASE 和 DELETETABCES 选项一起用来
* 从磁盘上删除数据库和它的表 friends。

CLOSE ALL

CREATE DATABASE people

CREATE TABLE friends (FirstName C(20), LastName C(20))

CLEAR

DISPLAY TABLES  && 显示数据库中的表

DISPLAY DATABASES  && 显示表信息

CLOSE ALL

DELETE DATABASE people DELETETABLES


请参阅

ADD TABLE，CLOSE DATABASES，DBC( )，DBGETPROP( )，DBSETPROP( )，DISPLAY TABLES，OPEN DATABASE，REMOVE TABLE


DELETE FILE 命令

请参阅	示例

从磁盘上删除文件。

语法

DELETE FILE [FileName | ?]

参数

FileName

指定要删除的文件。

?

显示“删除”对话框，可以从中选择要删除的文件。

说明

注意

任何用此命令删除的文件都不能恢复。即使 SET SAFETY 设置为 ON，在删除文件前也不给警告。

当执行 DELETE FILE 命令时，想删除的文件不能是打开的。如果文件所在的驱动器或路径与默认的不同，文件名必须包含路径和扩展名。文件名中不能包含通配符。

在删除数据库表之前，应该以表名为参数执行 REMOVE TABLE 从数据库中删除对表的引用。如果删除的表带有 .FPT 备注文件，要确保删除此备注文件。


* 在下面的示例中，COSTOMER.DBF 结构和 country 字段将
* USA 的所有记录都复制到名为 backup 的一张表中。
* backup 中的数据又复制到一个打开的文本文件中，
* 当此文件关闭时就删除它。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

COPY STRUCTURE TO backup

USE backup

APPEND FROM customer FOR country = 'USA'

COPY TO temp TYPE DELIMITED

WAIT WINDOW 'Press Esc to close and erase temp.txt' NOWAIT

MODIFY FILE temp.txt NOEDIT

DELETE FILE temp.txt

? IIF(FILE('temp.txt'),'File not deleted','File deleted')

USE

DELETE FILE backup.dbf


请参阅

ERASE，FILER，REMOVE TABLE，SET SAFETY


DELETE TAG 命令

请参阅

从复合索引 (.CDX) 文件中删除标识。

语法

DELETE TAG TagName1 [OF CDXFileName1]
[, TagName2 [OF CDXFileName2]] ...

 — 或者 —

DELETE TAG ALL [OF CDXFileName]

参数

TagName1 OF CDXFileName1 [, TagName2 [OF CDXFileName2]] ...

指定要从复合索引文件中删除的标识。可以使用包含一系列用逗号隔开的标识名的 DELETE TAG 命令删除多个标识。如果在打开的多个索引文件中有两个或更多同名的标识，可以通过包含 OF CDXFileName 从某一特定的索引文件中删除一个标识。

ALL [OF CDXFileName]

从复合索引文件中删除所有标识。如果当前表中有结构复合索引文件，就从该索引文件中删除所有的标识，并从磁盘上删除该索引文件。表头上标明有一个关联的结构复合索引文件存在的标记同时被删除。使用 ALL 时带有 OF CDXFileName 可从另一个打开的复合索引文件中删除所有标识，而不是从结构复合索引文件中删除标识。

说明

用 INDEX 创建的复合索引文件包含与索引项相对应的标识。DELETE TAG 用来从打开的复合索引文件中删除一个或多个标识，可以只删除在当前工作区中打开的复合索引文件的标识。如果删除了一个复合索引文件中的所有标识，文件就从磁盘上删除。

Visual FoxPro 首先在结构复合索引文件（如果已打开）中查找一个标识，如果此标识不在结构复合索引文件中，Visual FoxPro 就在其他打开的复合索引文件查找。

如果试图删除一个主索引标识或候选索引标识，且 SET SAFETY 设置为 ON，Visual FoxPro 就会发出警告。


请参阅

COPY INDEXES，COPY TAG，INDEX，TAG( )


DELETE TRIGGER 命令

请参阅	示例

从当前数据库的表中删除“删除”、“插入”或“更新”触发器。

语法

DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE

参数

TableName

指定要删除触发器的表名。

FOR DELETE | INSERT | UPDATE

指定要删除的触发器。包含 FOR DELETE 删除“删除”触发器，包含 FOR INSERT 删除“插入”触发器，包含 FOR UPDATE 删除“更新”触发器。

说明

使用 CREATE TRIGGER 为表创建“删除”、“插入”或“更新”触发器。

DELETE TRIGGER 要求独占使用数据库。要以独占方式打开数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE。


*下面的示例创建一个“更新”触发器，该触发器禁止大于 50 的数
* 放入 customer 表的 maxordamt 字段中。DISPLAY TRIGGER
* 显示“更新”触发器，DELETE TRIGGER 删除“更新”触发
* 器，重新执行 DISPLAY DATABASE 来检验“更新”触发器
* 是否被删除。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\') && 设置数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE CUSTOMER  && 打开 customer 表

CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50

CLEAR

DISPLAY DATABASE

DELETE TRIGGER ON customer FOR UPDATE

DISPLAY DATABASE


请参阅

ADD TABLE，AERROR( )，CREATE DATABASE，CREATE TRIGGER，DISPLAY DATABASE，LIST DATABASE，OPEN DATABASE


DELETE VIEW 命令

请参阅	示例

从当前数据库中删除一个 SQL 视图。

语法

DELETE VIEW ViewName

参数

ViewName

指定从当前数据库中删除的视图名。

说明

可使用 CREATE SQL VIEW 创建一个 SQL 视图，并向当前数据库中添加该视图。如果打开了一个 SQL 视图，然后删除它，包含 SQL 视图结果的临时表不会被关闭。

DELETE VIEW 要求独占地使用数据库。要以独占方式打开数据库，可在 OPEN DATABASE 中包含 EXCLUSIVE。


*下面的示例打开 testdata 数据库，CREATE SQL VIEW 创建一个
* 名为 myview 的本地 SQL 视图。显示视图设计器，为 SQL
* 视图指定表和条件。保存 SQL 视图后，用 DISPLAY DATABASE
* 显示有关 SQL 视图的信息，然后用 DELETE VIEW 删除名
* 为 myview 的本地 SQL 视图。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE SQL VIEW myview

CLEAR

DISPLAY DATABASE

DELETE VIEW myview


请参阅

CREATE SQL VIEW，OPEN DATABASE


DeleteColumn 方法

请参阅

从一个表格控制中删除一个列对象。

应用于

表格

语法

Grid.DeleteColumn[(nIndex)]

参数

nIndex

指定在表格中的列的编号。如果不指定 nIndex，就删除表格中活动的列。


请参阅

AddColumn 方法，AddObject 方法，RemoveObject 方法


Deleted 事件

请参阅

当用户在记录上做删除标记、清除一个删除标记，或执行 DELETE 命令时，此事件发生。

应用于

表格

语法

PROCEDURE Grid.Deleted
LPARAMETERS nRecNo

参数

nRecNo

返回被删除行的记录号。


请参阅

DELETE，DeleteMark 属性


DELETED( ) 函数

请参阅	示例

返回一个表明当前记录是否标有删除标记的逻辑值。

语法

DELETED([cTableAlias | nWorkArea])

参数

cTableAlias | nWorkArea

可以用 nWorkArea 指定工作区号，或用 cTableAlias 指定表别名检查在另一工作区打开的表中当前记录的状态。如果在指定的工作区中没有打开的表，DELETE( ) 就返回“假”。

如果省略了 cTableAlias 和 nWorkArea，该函数就返回当前工作区中当前记录的删除状态。

返回值类型

逻辑型

说明

如果记录标有删除标记，DELETED( ) 函数就返回“真”(.T.)；否则，DELETED( ) 返回“假”(.F.)。

可以用 DELETE 和 DELETE - SQL 给记录标上删除标记，用 RECALL 清除它们的标记。

如果表对 DELETED( ) 建立了索引，那么 Rushmore 将对测试记录删除状态的查询优化。有关使用 Rushmore 优化查询的内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或者《开发指南》第十七章“优化应用程序”。


*下面的示例打开 testdata 数据库中的 customer 表。使用
* DELETE - SQL 给所有 country 字段包含 USA 的记录做上
* 删除标记。DELETED( ) 显示所有具有删除标记的记录。
* RECALL ALL 用来清除所有删除标记。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

DELETE FROM customer WHERE country = 'USA'  && 做删除标记

CLEAR

LIST FIELDS company, country FOR DELETED( ) && 列出标有删除标记的记录

RECALL ALL  && 清除所有删除标记


请参阅

DELETE，DELETE - SQL，PACK，RECALL，SET DELETED


DeleteMark 属性

请参阅

指定在表格控制中是否出现删除标记列。

应用于

表格

语法

Grid.DeleteMark[ = lExpr]

设置

lExpr

下表列出了 DeleteMark 属性的设置：

设置	说明
“真”(.T.)	（默认值）删除标记列作为最左列出现在表格上。
“假”(.F.)	删除标记列不出现。
说明

设计和运行时可用。

删除标记列使用户能标记要删除的记录。用户可在记录的删除列中单击来删除记录。


请参阅

DELETE，Deleted 事件


DESCENDING( ) 函数

请参阅	示例

返回一个逻辑值，该值表明是否用 DESCENDING 关键字创建了一个索引标识，或是否在 USE、SET INDEX 或 SET ORDER 中包含 DESCENDING 关键字。

语法

DESCENDING([CDXFileName,] nIndexNumber [, nWorkArea | cTableAlias])

参数

CDXFileName

可用 CDXFileName 指定一个复合索引文件名。所指定的复合索引文件可以是和表一起自动打开的结构复合索引文件，或者是一个独立复合索引文件。

nIndexNumber

数值型表达式 nIndexNumber 指定 DESCENDING( ) 测试的索引标识或索引文件。nIndexNumber 通常是一个从 1 开始且以 1 为单位递增的整数，代表了各个索引标识。

如果 nIndexNumber 为 1，就为 .IDX 主控单项索引文件或主控索引标识（如果存在）返回一个值。

随着 nIndexNumber 递增，可以为结构复合索引文件（如果存在）中的每个标识返回值。为标识返回的值按照它们在结构复合索引文件中创建的顺序返回。

为结构复合索引文件中的所有标识返回了值以后，再为所有打开的独立复合索引文件中的每个标识返回值。为标识返回的值按照它们在独立复合索引文件中创建的顺序返回。

如果 nIndexNumber 大于打开的单项索引 .IDX 文件和结构复合以及独立复合索引标识的总数，就返回空字符串。

nWorkArea | cTableAlias

为非当前工作区的索引文件或标识返回值。nWorkArea 指定工作区号，cTableAlias 指定表别名。

如果没有指定的表别名，Visual FoxPro 将产生错误信息。

返回值类型

逻辑型

说明

可以用两种方法对一个表中的记录进行降序排列：

 •	   可以在 INDEX 命令中包含 DESCENDING 关键字实现在复合索引 .CDX 中创建一个降序索引标识。

 •	   可以在 USE、SET INDEX 或 SET ORDER 中包含 DESCENDING 关键字，指定主控索引标识或主控单项索引 (.IDX) 文件为降序索引。

DESCENDING( ) 可以确定一个索引标识是否以降序创建。如果所指定的索引标识是用 DESCENDING 关键字创建的，则 DESCENDING( ) 返回“真”(.T.)。

DESCENDING( ) 也可以确定主控索引标识或主控索引文件是否为降序。如果指定的主控索引标识或一个单项索引 (.IDX) 文件在 USE、SET INDEX，或 SET ORDER 中包含了 DESCENDING 关键字，DESCENDING( ) 就返回“真”(.T.)。

如果不包含任何可选的参数，DESCENDING( ) 就为主控索引标识或主控索引文件返回一个值。如果不包含任何可选的参数，且主控索引标识或 .IDX 文件无效（例如，执行了 SET ORDER TO 按物理记录顺序对表排序），DESCENDING( ) 返回“假”(.F.)。


*下面的示例打开 testdata 数据库中的 customer 表。用
* FOR ... ENDFOR 创建一个循环。在循环中检查 customer 结构
* 索引中的每个索引标识的降序状态。每个结构索引标识名和它
* 的降序状态一起显示出来。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

CLEAR

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引中的标识状态

? TAG(nCount) + ' Descending? ' && 显示标识名

?? DESCENDING(nCount)  && 显示降序状态

ELSE

EXIT  && 当没有标识时退出循环

ENDIF

ENDFOR


请参阅

INDEX，SET INDEX，SET ORDER，USE


Desktop 属性

请参阅

指定表单是否放在 Visual FoxPro 主窗口中。

应用于

表单，_SCREEN

语法

Object.Desktop[ = lExpr]

设置

lExpr

下表列出了 Desktop 属性的设置：

设置	说明
“真”(.T.)	表单可放在 Windows 桌面的任何位置。
“假”(.F.)	（默认值）表单包含在 Visual FoxPro 主窗口中。
说明

设计时可用，运行时只读。


请参阅

AlwaysOnTop 属性，AutoCenter 属性，MaxHeight 属性，MaxLeft 属性，MaxTop 属性，MaxWidth 属性，MinHeight 属性，MinWidth 属性


Destroy 事件

请参阅

当释放一个对象的实例时发生。

应用于

复选框，组合框，命令按钮，容器对象，控制对象，临时表，自定义，数据环境，编辑框，表单，表单集，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，页面，页框，关系，形状，微调，文本框，计时器，工具栏

语法

PROCEDURE Object.Destroy
[LPARAMETERS nIndex]

参数

nIndex

在控制数组中，唯一地指定一个控制。

说明

一个容器对象的 Destroy 事件在它所包含的任何一个对象的 Destroy 事件之前触发；容器的 Destroy 事件在它所包含的各对象释放之前可以引用它们。


请参阅

AddObject 方法，CREATEOBJECT( )，Init 事件，RELEASE


_DIARYDATE 系统内存变量

请参阅	示例

包含“日历/日记”中的当前日期。

语法

_DIARYDATE = dExpression

参数

dExpression

为“日历/日记”指定日期。

说明

用 _DIARYDATE，可用选择的特定日期显示“日历/日记”，或返回选定的“日历/日记”日期。

默认情况下，当前日期存储在 _DIARYDATE 中。当打开“日历/日记”时就选定了当前日期。也可在 _DIARYDATE 中存储一个不同的日期，用新选定的日期打开“日历/日记”。

当“日历/日记”打开时，选择新的日期会导致在 _DIARYDATE 中存储新的日期。当关闭“日历/日记”时，_DIARYDATE 中就包含最近选定的日期。


*在下面的程序示例中，用选定的 March，28，2001 打开
* “日历/日记”，_DIARYDATE 的值显示在下面。
* 将 July，4，1776 存入 _DIARTDATE，重新显示
* _DIARYDATE。然后该程序使用 DATE( ) 函数选择
* 当前日期，并显示 _DIARYDATE。

CLEAR

SET TALK OFF

SET CENTURY ON

STORE {03/28/2001} TO _DIARYDATE

@ 24,0 SAY _DIARYDATE

ACTIVATE WINDOW calendar

WAIT WINDOW

STORE {07/04/1776} TO _DIARYDATE

@ 24,16 SAY _DIARYDATE

WAIT WINDOW

STORE DATE( ) TO _DIARYDATE

@ 24,32 SAY _DIARYDATE


请参阅

STORE


DIFFERENCE( ) 函数

请参阅	示例

返回 0 到 4 间的一个整数，表示两个字符表达式间的相对语音差别。

语法

DIFFERENCE(cExpression1, cExpression2)

参数

cExpression1, cExpression2

指定用 DIFFERENCE( ) 比较的两个字符表达式。

返回值类型

数值型

说明

当对表进行搜索但不知道某一项的确切拼写时，DIFFERENCE( )很有用处。

两个表达式拼写越相似，DIFFERENCE( ) 返回的数值就越高。如果字符表达式拼写非常相似，DIFFERENCE( ) 就返回 4。对于两个在语音上几乎不同的表达式，DIFFERENCE( ) 返回 0。


STORE 'Smith'   TO gcName1

STORE 'Smythe'  TO gcName2

STORE 'Smittie' TO gcName3

STORE '' TO gcName4

CLEAR

? DIFFERENCE(gcName1, gcName2)  && 显示 4

? DIFFERENCE(gcName1, gcName3)  && 显示 4

? DIFFERENCE(gcName1, gcName4)  && 显示 1


请参阅

SOUNDEX( )


DIMENSION 命令

请参阅	示例

创建一维或二维内存变量数组。

语法

DIMENSION ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] ...

参数

ArrayName1

指定数组名。可以通过包含多个数组名（ArrayName2, ArrayName3 等）用一个 DIMENSION 命令创建多个数组。

nRows1 [, nColumns1]

指定要创建的数组大小。如果只包含 nRows1，就创建一维数组。一维数组含有一列和 nRows1 行。例如，下列命令创建一个名为 gaArrayOne 的一列十行的数组。

DIMENSION gaArrayOne(10)

若要创建二维数组，应包含 nRows1 和 nColumns1。nRows1 指定数组中的行数，nColumns1 指定列数。下列命令创建一个名为 gaArrayTwo 的二行四列的二维数组。

DIMENSION gaArrayTwo(2,4)

使用 DIMENSION 创建数组时，必须指定大小。在下面的示例中，创建了三个数组：前面两个示例中的数组 gaArrayOne 和 gaArrayTwo，以及第三个名为 gaArrayThree 的数组：

DIMENSION gaArrayOne(10), gaArrayTwo(2,4), gaArrayThree(3,3)

在 DIMENSION 或 DECLARE 中，可以用方括号或圆括号括起表达式。例如，下面的两个命令创建相同的数组：

DIMENSION gaArrayOne(10), gaArrayTwo[2,4], gaArrayThree(3,3)

DIMENSION gaArrayOne[10], gaArrayTwo(2,4), gaArrayThree[3,3]

数组元素

一个数组的大小决定了它包含的元素数目。数组中的每个元素可以存储一条信息。要确定一个数组中包含的元素数目和存储的信息量，可用数组的行 (nRows1) 数乘以数组的列数 (nColumns1)。

数组元素可以包含任何类型的数据，并在最初创建数组时将它们初始化为“假”(.F.)。如果 SET COMPATIBLE 设置为 FOXPLUS 或 OFF（默认设置），那么可以用 STORE 将一个数组中所有元素初始化为相同的值。例如，

DIMENSION gaArray(10,3)

STORE 'initial' TO gaArray

数组下标

通过下标来引用数组中的元素。每个数组元素都有唯一一个可以识别它的数值下标。如果数组是一维的，则数组元素的下标与它的行号相同。例如，一个一维数组第三行中元素的下标就是 3。

通过两个下标来引用二维数组中的元素。第一个下标表明元素的行位置，第二个下标表明元素的列位置。例如，一个二维数组第三行第四列中的元素下标为 3，4。有关数组元素下标的进一步讨论，请参阅 ASUBSCRIPT( )。

数组中第一个元素的下标通常从 1 开始。如果数组是二维的，也可以用单个下标引用它。可使用 AELEMENT( ) 根据数组的行列下标中返回单个下标；使用 ASUBSCRIPT( ) 根据单个下标返回行列下标。

重新定义数组的维数

重新执行 DIMENSION 命令可以改变数组的大小和维数。数组的大小可以增加或减小，一维数组可以转换为二维数组，二维数组可以降低为一维数组。

如果数组中元素的数目增加了，就将原数组中所有元素内容复制到维数重新调整过的数组中，增加的数组元素初始化为“假”(.F.)。

说明

DIMENSION 在操作与语法上与 DECLARE 相同。


* 示例 1 演示增加一维数组大小。（注意，如果在命令
* 窗口中键入这些命令，数组就是 PUBLIC 型的，但是
* 如果这些命令在一个程序中运行，数组就是 PRIVATE 的）。
*

* 如果数组中元素的数目减少了，就删除这些元素和它们
* 包含的所有数据。当一个一维数组变为二维数组时，原
* 先一维数组中的内容就以行优先的顺序，复制到新
* 数组中。

*示例 2 将一维数组转换成二维数组。一维数组中元素的内容
* 复制到新数组的第一行，接下来是第二行。增加的元素初始
* 化为“假”(.F.)。
*

*当一个二维数组转化成一维数组时，原先二维数组中的内容
* 以行优先的顺序复制到新数组中。二维数组中第一行的第
* 一个元素成为一维数组中的第一个元素，二维数组中第一
* 行的第二个元素变成一维数组中的第二个元素，等等。
*

*可使用 ADEL( ) 或 AINS( ) 删除或插入数组元素、行和列。
* 使用 APPEND FROM ARRAY、COPY TO ARRAY、SCATTER
* 和 GATHER 在表记录和数组之间传输数据。

*示例 3 创建二维数组并填加了数据。然后显示数组元素和它
* 们所包含的数据。

* 示例 1

DIMENSION marray(2)

STORE 'A' TO marray(1)

STORE 'B' TO marray(2)

CLEAR

DISPLAY MEMORY LIKE marray

DIMENSION marray(4)

DISPLAY MEMORY LIKE marray

* 示例 2

DIMENSION marrayone(4)

STORE 'E' TO marrayone(1)

STORE 'F' TO marrayone(2)

STORE 'G' TO marrayone(3)

STORE 'H' TO marrayone(4)

CLEAR

DISPLAY MEMORY LIKE marrayone

DIMENSION marrayone(2,3)

DISPLAY MEMORY LIKE marrayone

* 示例 3

DIMENSION sample(2,3)

STORE 'Goodbye' TO sample(1,2)

STORE 'Hello' TO sample(2,2)

STORE 99 TO sample(6)

STORE .T. TO sample(1)

CLEAR

DISPLAY MEMORY LIKE sample


请参阅

ACOPY( )，ADEL( )，ADIR( )，AELEMENT( )，AFIELDS( )，AFONT( )，AINS( )，ALEN( )，APPEND FROM ARRAY，ASCAN( )，ASORT( )，ASUBSCRIPT( )，COPY TO ARRAY，DECLARE，EXTERNAL，GATHER，PRIVATE，PUBLIC，SCATTER，SET COMPATIBLE，STORE


DIR 或 DIRECTORY 命令

请参阅	示例

显示目录或文件夹中文件的信息。

语法

DIR | DIRECTORY [ON Drive]
[[LIKE] [Path] [FileSkeleton]]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

ON Drive

指定目录或文件夹所在的驱动器名。

[LIKE] [Path] [FileSkeleton]

指定文件所在的目录或文件夹的路径。如果省略了 ON Drive，路径可以包含驱动器名。

可包含 FileSkeleton 显示其他文件类型而不仅表的信息。FileSkeleton 是支持通配符的文件梗概。例如，要想列出当前目录中的所有程序文件，请执行下列命令：

DIR *.PRG

在 Visual FoxPro、 FoxPro for Windows 和 FoxPro for Macintosh 中，可执行以下命令列出所有不带扩展名的文件：

DIR *.

TO PRINTER [PROMPT]

将 DIRECTORY 的输出定向到打印机。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，包含可选的 PROMPT 子句可在打印开始前显示一个“打印”对话框。在此对话框中可以调整打印机设置，包括打印的数目、要打印的页数。可调整的打印机设置依赖于当前安装的打印机驱动程序。PROMPT 关键字直接放置在 TO PRINTER 后面。

在 FoxPro for MS-DOS 中忽略 PROMPT。

TO FILE FileName

将 DIR 的结果定向到 FileName 指定的文件中。如果文件已经存在，且 SET SAFETY 设置为 ON，则会提示您是否要改写此文件。

在 FoxPro for MS-DOS 中，如果加载了打印机驱动程序设置，则定向到文件或打印机的 DIR 输出就使用打印机驱动程序中的设置。可使用打印机驱动程序用不同的字形和大小打印 DIR 的输出结果。

说明：

可使用 DIR 显示有关文件的信息。

不带 LIKE 子句或梗概的 DIR 显示如下信息：

 •	   目录或文件夹中所有表的名称。

 •	   每个表中记录的数目。

 •	   每个表最近更新的日期。

 •	   以字节数表示的每个表的大小（早期的 FoxBASE 格式中的表就是以此附注的）。

 •	   每个表是否为数据库的组成部分。

 •	   表所占的磁盘空间的总字节数（不包括相关的 .FPT 备注文件）。

 •	   显示表的数目。

 •	   磁盘上剩余的字节总数。

除非用 Drive 或 Path 或同时用两者指定了驱动器和目录或文件夹，否则显示默认的驱动器和目录或文件夹中有关表的信息。


CLEAR

DIR  && 目录或文件夹中的表。

DIR *.CDX   && 显示在当前目录或文件夹中的索引文件。

DIR A*.DBF  && 显示以“A”打头的表

DIR *.*  && 显示所有文件，包括不带扩展名的文件。


请参阅

DISPLAY FILES，FILER


DisabledBackColor, DisabledForeColor 属性

请参阅

为一个废止的控制指定背景色和前景色。

应用于

复选框，组合框，命令按钮，编辑框，标签，列表框，选项按钮，微调，文本框

附注：

DisabledBackColor 属性不能应用于 CommandButton 控制。

语法

Control.DisabledBackColor[ = nColor]
— 或者 —
Control.DisabledBackColor = RGB(nRedValue, nGreenValue, nBlueValue)

Control.DisabledForeColor[ = nColor]
— 或者 —
Control.DisabledForeColor = RGB(nRedValue, nGreenValue, nBlueValue)

设置

nColor

指定一个数值来代表颜色。

nRedValue, nGreenValue, nBlueValue

分别指定组成控制的前景色或背景色的三种颜色深度，它们必须和 RGB( ) 一起使用，将三种颜色合并到一个颜色号中。

说明

设计和运行时可用。

所指定的颜色与灰色一起抖动。

附注

在属性窗口中，可双击任何颜色属性来显示“颜色”对话框。可以从这个对话框中选择或定义颜色。当关闭“颜色”对话框后，与所选颜色相应的红、绿、蓝的深度就变成这些属性的设置。


请参阅

BackColor, ForeColor 属性，颜色概述


DisabledItemBackColor, DisabledItemForeColor 属性

请参阅

为列表框或组合框中的不可用项指定背景色或前景色。

应用于

组合框，列表框

语法

Control.DisabledItemBackColor[ = nColor]
 — 或者 —
Control.DisabledItemBackColor RGB(nRedValue, nGreenValue, nBlueValue)
Control.DisabledItemForeColor[ = nColor]
 — 或者 —
Control.DisabledItemForeColor RGB(nRedValue, nGreenValue, nBlueValue)

设置

nColor

指定一个数值代表颜色。

附注

在属性窗口中，可双击任何颜色属性来显示“颜色”对话框。可以在此对话框中选择或定义颜色。当关闭颜色对话框后，与所选颜色相应的红、绿、蓝的深度就变成这些属性的设置。

有关的详细内容，请参阅 BackColor, ForeColor 属性主题中的颜色表。

说明

设计和运行时可用。


请参阅

BackColor, ForeColor 属性，DisabledForeColor, DisabledBackColor 属性，RGB( )，SelectedBackColor, SelectedForeColor 属性，SelectedItemBackColor, SelectedItemForeColor 属性


DisabledPicture 属性

请参阅

指定当废止控制时要显示的图形。

应用于

复选框，命令按钮，选项按钮

语法

Control.DisabledPicture[ = cPicture]

设置

cPicture

指定位图的完整路径和文件名，或指定数据库表中的通用字段名。

说明

设计时和运行时可用

附注

如果在设计时设置了 DisabledPicture 属性，且所指定的文件不存在，Visual FoxPro 就显示一条错误信息，但属性设置仍然保留。如果 DisabledPicture 属性设置为一个不存在的文件，Visual FoxPro 在运行时将忽略该属性。

如果不设置 DisabledPicture 属性，Visual FoxPro 就使用 Picture 属性的设置来确定当废止控制时显示的图形。

附注

对于 CheckBoxes 和 OptionButtons，如果 Style 属性设置成 1（图形方式），控制仅显示位图。


请参阅

DownPicture 属性，Enabled 属性，Picture 属性，Style 属性


DISKSPACE( ) 函数

请参阅	示例

返回默认磁盘驱动器上可用的字节数。

语法

DISKSPACE( )

返回值类型

数值型

说明

此函数可用来确定是否有足够的可用空间来备份文件，或执行诸如 SORT 这样的需要为临时工作文件提供额外磁盘空间的命令。

在一些网络上，DISKSPACE( ) 返回的值对于大的网络驱动器可能是不精确的。


* 下面的示例使用 DISKSPACE( ) 确定是否有足够的可用空间
* 来执行一个排序命令。

*** 在排序前检查可用磁盘空间 ***

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

*** 获取表头大小 ***

gnTableHead = HEADER( )

*** 计算表的大小 ***

gnFileSize = gnTableHead + (RECSIZE( ) * RECCOUNT( ) + 1)

IF DISKSPACE( ) > (gnFileSize * 3)

WAIT WINDOW 'Sufficient diskspace to sort.'

ELSE

WAIT WINDOW 'Insufficient diskspace. Sort cannot be done.'

ENDIF


请参阅

HEADER( )，RECSIZE( )


DISPLAY 命令

请参阅	示例

在 Visual FoxPro 主窗口或用户自定义窗口中显示与当前表有关的信息。

语法

DISPLAY
[[FIELDS] FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[OFF]
[NOCONSOLE]
[NOOPTIMIZE]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

FIELDS FieldList

指定要显示的字段。如果省略了 FIELDS FieldList，就默认显示表中所有的字段。

除非明确地将备注字段名包含在字段列表中，否则不显示备注字段的内容。备注字段的显示宽度由 SET MEMOWIDTH 决定。

Scope

指定要显示的记录范围。只显示在指定范围中的记录。范围子句有：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句主题，或《开发指南》第二章“语言概述”。包含 Scope 的命令只对活动工作区中的表进行操作。

DISPLAY 默认的范围是当前记录 ( NEXT 1 )。

FOR lExpression1

指定只显示满足逻辑条件 lExpression1 的记录。这就允许您筛选出不想要的记录。

如果 lExpression1 是一个可优化表达式，Rushmore 优化用 DISPLAY ... FOR 创建的查询。要获得最佳效果，请在 FOR 子句中使用可优化表达式。有关的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术或《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只要逻辑表达式 lExpression2 求值为“真”(.T.)，就显示记录。

OFF

不显示记录号。如果省略了 OFF，就在每个记录前显示记录号。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

NOOPTIMIZE

使 DISPLAY 的 Rushmore 优化无效。有关 NOOPTIMIZE 的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或参阅《开发指南》的第十七章“优化应用程序”。

TO PRINTER [PROMPT]

将 DISPLAY 的结果定向输出到打印机。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，可以包含可选的 PROMPT 子句，在打印开始前显示一个对话框。在此对话框中可以调整打印机的设置，包括打印的数目和要打印的页数。可调整的打印机设置依赖于当前安装的打印机驱动程序。请将 PROMPT 直接放在 TO PRINTER 后面。

在 FoxPro for MS-DOS 中，忽略 PROMPT。

TO FILE FileName

将 DISPLAY 的结果定输出向到 FileName 指定的文件中。如果文件已经存在，且 SET SAFETY 设置为 ON，将提示您是否要改写此文件。

在 FoxPro for MS-DOS 中，如果加载了打印机驱动程序设置，直接输出到一个文件或打印机的 DISPLAY 命令就使用打印机驱动程序的设置。可使用打印机驱动程序用不同的字形和大小打印 DISPLAY 的输出结果。

说明

DISPLAY 显示当前表记录的内容和表达式的结果。如果有更多信息需要显示，而在窗口中显示不完，就显示第一屏信息，然后暂停。按任意键或在任意位置单击鼠标可以看下一屏的信息。DISPLAY 与 LIST 相似，只是 LIST 在显示同样信息时连续输出而不暂停。

DISPLAY 也可用来显示表达式的结果，它可以包括字母和数字的组合、内存变量、数组元素、字段和备注字段。如果 SET HEADINGS 设为 ON，就显示字段名和表达式。


* 下面的示例打开 testdata 数据库的 customer 表，
* 显示第一个记录的内容。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

DISPLAY


请参阅

LIST，SET HEADINGS，SET MEMOWIDTH


DISPLAY CONNECTIONS 命令

请参阅	示例

显示当前数据库中与命名连接有关的信息。

语法

DISPLAY CONNECTIONS
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 DISPLAY CONNECTIONS 的结果定向输出到打印机。

在 Visual FoxPro 中，可以包含可选的 PROMPT 子句，在打印开始前显示“打印”对话框。应将 PROMPT 直接放在 TO PRINTER 后面。

TO FILE FileName

将 DISPLAY CONNECTIONS 的结果定向输出到 FileName 指定的文件中。如果文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 将提示您是否要改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

DISPLAY CONNECTIONS 显示当前数据库中的连接名、数据源和连接字符串。请使用 DBGETPROP( ) 函数返回有关当前数据库中连接的详细信息。


* 下面的示例假定一个名为 MyFoxSQLNT 的 ODBC 数据源
* 是可用的，数据源的用户标识 ID 为“sa”。打开
* testdata 数据库并创建一个名为 Myconn 的连接。
* DISPLAY CONNECTIONS 用来显示数据库中的命名
* 连接。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE CONNECTION Myconn DATASOURCE "MyFoxSQLNT" USERID "sa"

CLEAR

DISPLAY CONNECTIONS	  &&显示数据库中的命名连接


请参阅

CREATE CONNECTION，DELETE CONNECTION，DBGETPROP( )，LIST CONNECTIONS，RENAME CONNECTION


DISPLAY DATABASE 命令

请参阅	示例

显示有关当前数据库的信息，或当前数据库中的字段、命名连接、表或视图的信息。

语法

DISPLAY DATABASE
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 DISPLAY DATABASE 的结果定向输出到打印机。

在 Visual FoxPro 中,可以包含可选的 PROMPT 子句，在打印开始前显示打印对话框。应将 PROMPT 直接放在 TO PRINTER 后面。

TO FILE FileName

将 DISPLAY DATABASE 的结果定向输出到 FileName 指定的文件中。如果文件已经存在，且 SET SAFETY 设置为 ON，Visual FoxPro 将提示您是否要改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

可使用 DBGETPROP( ) 函数返回有关当前数据库的附加信息。


* 下面的示例创建了一个名为 people 的数据库，同时
* 创建了一个名为 friends 的表并自动添加到数据库中。
* DISPLAY TABLES 用来显示数据库中的表，
* DISPLAY DATABASES 用来显示数据库有关
* 表的信息。

CREATE DATABASE people

CREATE TABLE friends (FirstName C(20), LastName C(20))

CLEAR

DISPLAY TABLES  && 显示数据库中的表

DISPLAY DATABASES  && 显示表信息


请参阅

LIST DATABASE


DISPLAY DLLS 命令

请参阅

在 Visual FoxPro 中，显示与 32 位 Windows 动态链接库 ( DLL ) 函数有关的信息，这些动态链接库 ( DLL ) 函数是用 DECLARE - DLL 注册的。

语法

DISPLAY DLLS
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 DISPLAY DLLS 的结果定向输出到打印机。

在 Visual FoxPro 中，可以包含可选的 PROMPT 子句，在打印开始前显示“打印”对话框。应将 PROMPT 直接放在 TO PRINTER 后面。

TO FILE FileName

将 DISPLAY DLLS 的结果定向输出到 FileName 指定的文件中。如果文件已经存在且 SET SAFETY 设置为 ON，Visual FoxPro 将提示您是否要改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。


请参阅

DECLARE - DLL，LIST DLLS


DISPLAY FILES 命令

请参阅	示例

显示关于文件的信息。

语法

DISPLAY FILES
[ON Drive]
[LIKE FileSkeleton]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

ON Drive

指定文件所在的驱动器。

LIKE FileSkeleton

指定一个条件，Visual FoxPro 只显示那些与文件梗概 FileSkeleton 匹配的文件的有关信息。文件梗概可以包含通配符，例如“?”和“*”。

TO PRINTER [PROMPT]

将 DISPLAY FILES 的结果定向输出到打印机。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，可以包含可选的 PROMPT 子句，在打印开始前显示“打印”对话框。在此对话框中，可以调整打印机的设置，包括打印的数目和要打印的页数。可以调整的打印机设置依赖于当前安装的打印机驱动程序。应将 PROMPT 关键字直接放在 TO PRINTER 的后面。

在 FoxPro for MS-DOS 中忽略 PROMPT。

TO FILE FileName

将 DISPLAY FILES 的结果定向输出到 FileName 指定的文件中。如果文件已经存在，且 SET SAFETY 设置为 ON，Visual FoxPro 将提示您是否要改写此文件。

在 FoxPro for MS-DOS 中，如果加载了打印机驱动程序设置，那么，就使用打印机驱动程序中的设置将结果定向输出到文件或打印机中。可使用不同的字形和大小打印 DISPLAY FILES 的输出。

说明

可用 DISPLAY FILES 显示有关磁盘文件的信息。可以显示某一特定驱动器、路径或文件夹中的所有文件的信息，或者仅显示与某一文件梗概（包含“?”和“*”）相匹配的文件的有关信息：

不带任何参数执行 DISPLAY FILES 将显示当前目录中表的信息。显示的信息包含以下内容：

 •	   表名

 •	   表中记录的数目

 •	   最近更新表的日期和时间

 •	   每个表的字节数

 •	   表是否为数据库的组成部分


* 下面的示例显示了在目录 SAMPLES\DATA 中的数据库名。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

CLEAR

DISPLAY FILES LIKE *.DBC


请参阅

DIR 或 DIRECTORY，FILER，LIST


DISPLAY MEMORY 命令

请参阅	示例

显示内存变量和数组的当前内容。

语法

DISPLAY MEMORY
[LIKE FileSkeleton]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

LIKE FileSkeleton

可以通过包含 LIKE 子句有选择地显示内存变量和数组的信息。如果包含 LIKE FileSkeleton，Visual FoxPro 只显示匹配 FileSkeleton 的内存变量和数组的内容。FileSkeleton 支持诸如“?”和“*”的通配符。例如，要显示所有以字母 A 开头的内存变量，可执行下面的命令：

DISPLAY MEMORY LIKE A*

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

TO PRINTER [PROMPT]

将 DISPLAY MEMORY 的结果定向输出到打印机。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，可包含可选的 PROMPT 子句在打印开始前显示“打印”对话框。在此对话框中，可调整打印机设置，包括打印数目和要打印的页数。可调整的打印机设置依赖于当前安装的打印机驱动程序。应将 PROMPT 关键字直接放在 TO PRINTER 后面。

在 FoxPro for MS.DOS 中忽略 PROMPT。

TO FILE FileName

将 DISPLAY MEMORY 的结果定向输出到 FileName 指定的文件中。如果文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 提示您是否要改写此文件。

在 FoxPro for MS-DOS 中，如果加载了打印机驱动程序设置，DISPLAY MEMORY 的结果定向输出到文件或打印机时，就使用该打印机驱动程序的设置。可以使用打印机驱动程序不同的字形和大小打印 DISPLAY MEMORY 的输出。

说明

DISPLAY MEMORY 显示所有当前定义的内存变量和内存变量数组的名称、类型、内容和状态。也显示已定义的内存变量的数目、已使用的字节总数和可用的额外内存变量数目。注意，已使用的字节总数表示字符类型的变量使用的内存。字符型变量是唯一需要使用附加内存的内存变量，附加内存是超出 MVCOUNT 配置项指定的内存变量分配空间的内存。

DISPLAY MEMORY 也显示有关系统内存变量、菜单、菜单栏、菜单标题和窗口的信息。


*在下面的示例中，创建了几个内存变量并给它们赋了值。
* DISPLAY MEMORY 首先显示所有以“sam”开头的内存变量，
* 然后显示所有包含五个字母且以“exit”结尾的内存变量。

STORE 'Goodbye' TO sample1

STORE 'Hello' TO sample2

STORE .T. TO texit

STORE .F. TO mexit

CLEAR

DISPLAY MEMORY LIKE sam*

DISPLAY MEMORY LIKE ?exit


请参阅

DECLARE， DIMENSION， LIST， STORE


DISPLAY OBJECTS 命令

请参阅	示例

显示有关一个对象或一组对象的信息。

语法

DISPLAY OBJECTS
[LIKE cObjectSkeleton]
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

LIKE cObjectSkeleton

显示有关一组对象的信息。cObjectSkeleton 是支持通配符（“*”和“?”）的对象梗概。例如，要显示所有以 A 开头的对象，可使用以下命令：

DISPLAY OBJECTS LIKE A*

TO PRINTER [PROMPT]

将 DISPLAY OBJECTS 的结果定向输出到打印机。

包含可选的 PROMPT 子句会在打印开始前显示“打印”对话框。应将 PROMPT 关键字直接放在 TO PRINTER 后面。

TO FILE FileName

将 DISPLAY OBJECTS 的结果定向输出到 FileName 指定的磁盘文件中。如果文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 就提示您是否改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

DISPLAY OBJECTS 显示所有已有对象的下列信息：

 •	   属性和它们的值

 •	   方法

 •	   成员对象以及它们所基于的类或子类

 •	   对象所基于的类或子类

 •	   对象的类层次

用 DISPLAY OBJECTS 显示的信息将整个 Visual FoxPro 主窗口或用户自定义窗口填满后暂停，按任意键或在任意位置单击鼠标可看下一屏信息。DISPLAY 与 LIST 类似，不同的只是 LIST 在显示同样的信息时，连续输出而不暂停。


*下面的示例使用 DEFINE CLASS 和 CREATEOBJECT( ) 从
* Visual FoxPro 的表单基类中创建两个名为 FormChild 和
* FormGrandChild 的用户自定义类。DISPLAY OBJECT 显示
* 有关对象和它们属性的信息。

CLEAR

frmMyForm = CREATEOBJECT("FormGrandChild")

DISPLAY OBJECTS LIKE frm*

RELEASE frmMyForm

DEFINE CLASS FormChild AS FORM

ENDDEFINE

DEFINE CLASS FormGrandChild AS FormChild

ENDDEFINE


请参阅

LIST OBJECTS


DISPLAY PROCEDURES 命令

请参阅	示例

显示当前数据库中存储过程的名称。

语法

DISPLAY PROCEDURES
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 DISPLAY PROCEDURES 的输出定向到打印机。

包含 PROMPT 可以在打印开始前显示打印对话框。应将 PROMPT关键字直接放在 TO PRINTER 后面。

TO FILE FileName

将 DISPLAY PROCEDURES 的输出定向到 FileName 指定的磁盘文件中。如果文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 提示您是否改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

可用 APPEND PROCEDURES、COPY PROCEDURES 或 MODIFY PROCEDURE 创建存储过程。


* 下面的示例打开 testdata 数据库，用 DISPLAY PROCEDURES
* 显示数据库中的存储过程（如果存在）。如果数据库中没有存储
* 过程，可运行 APPEND PROCEDURES
* 的示例向数据库中添加一个过程。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CLEAR

DISPLAY PROCEDURES  && 显示数据库中的存储过程


请参阅

APPEND PROCEDURES， COPY PROCEDURES， CREATE DATABASE， DISPLAY DATABASE， LIST PROCEDURES， MODIFY PROCEDURE


DISPLAY STATUS 命令

请参阅

显示 Visual FoxPro 环境的状态。

语法

DISPLAY STATUS
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

TO PRINTER [PROMPT]

将 DISPLAY STATUS 的结果定向输出到打印机。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，包含可选的 PROMPT 子句可在打印开始前显示打印对话框。在此对话框中可以调整打印机设置，包括打印份数和要打印的页数。可调整的打印机设置依赖于当前已安装的打印机驱动程序。应将 PROMPT 关键字直接放在 TO PRINTER 后面。

在 FoxPro for MS-DOS 中忽略 PROMPT。

TO FILE FileName

将 DISPLAY STATUS 的结果定向输出到 FileName 指定的文件中。如果此文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 提示您是否要改写此文件。

在 FoxPro for MS-DOS 中，如果加载了一个打印机驱动程序设置，那么就使用该设置将 DISPLAY STARUS 的结果定向输出到文件或打印机中。可使用打印机驱动程序可以用不同字形和大小打印 DISPLAY STATUS 的输出。

说明

DISPLAY 列出了有关当前 Visual FoxPro 环境的信息。信息的分类和每一类中的信息如下所示：

表和索引文件信息：

 •	   已打开的表

 •	   已打开的备注文件

 •	   表别名

 •	   表代码页

 •	   表关系

 •	   活动索引

 •	   索引文件关键字

 •	   主控索引文件或标识

 •	   已打开的结构复合文件

 •	   已打开的复合索引标识

 •	   每个打开表的共享属性状态

 •	   每个表中当前锁定的记录

 •	   EXCLUSIVE 使用设置

 •	   LOCK 设置

 •	   MULTILOCKS 设置

 •	   SET REFRESH 值

 •	   SET REPROCESS 值

已打开的低级文件信息：

 •	   已打开的低级文件

 •	   每个低级文件的文件句柄号

 •	   每个低级文件的文件指针位置

 •	   每个低级文件的“读-写”属性

附加的 Visual FoxPro 环境信息：

 •	   正在使用的过程文件

 •	   处理器类型

 •	   Visual FoxPro 路径

 •	   Visual FoxPro 默认的目录

 •	   打印目标

 •	   页边距设置

 •	   当前工作区

 •	   SET 命令设置

 •	   当前加载的二进制模块

 •	   Visual FoxPro 的 DDE 信息

 •	   当前代码页

 •	   当前排序序列

 •	   编译器代码页

 •	   当前数据格式

 •	   键盘宏组合键

 •	   UDF 参数的传递方法

 •	   文本合并选项

 •	   外部注册的 .DLL 函数


请参阅

LIST


DISPLAY STRUCTURE 命令

请参阅	示例

显示一个表文件的结构。

语法

DISPLAY STRUCTURE
[IN nWorkArea | cTableAlias]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

IN nWorkArea | cTableAlias

显示非当前工作区中的表的结构。nWorkArea 指定工作区号，cTableAlias 指定表别名。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

TO PRINTER [PROMPT]

将 DISPLAY STRUCTURE 的结果定向输出到打印机。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中可以包含可选的 PROMPT 子句，在打印开始前显示“打印”对话框。在此对话框中可调整打印机设置，包括打印份数和要打印的页数。可调整的打印机设置依赖于当前安装的打印机驱动程序。应将 PROMPT 关键字直接放在 TO PRINTER 的后面。

在 FoxPro for MS-DOS 中忽略 PROMPT。

TO FILE FileName

将 DISPLAY STRUCTURE 的结果定向输出到 FileName 指定的文件中。如果此文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 提示您是否要改写此文件。

在 FoxPro for MS-DOS 中，如果加载了打印机驱动程序设置，那么就使用该设置将 DISPLAY STRUCTURE  的结果定向输出到文件或打印机中。使用打印机驱动程序可用不同的字形和大小打印 DISPLAY STRUCTURE 的输出。

说明

可显示一个表的字段结构，表中每个字段名及其类型和宽度一起显示。如果字段是数值型、双精度型或浮点型的，还将显示小数点在字段中放置的位数。DISPLAY STRUCTURE 也显示支持空值。

DISPLAY STRUCTURE 还显示表中当前记录的编号和最近更新的日期。如果表中有一个相关备注字段，还显示备注字段块的大小。此外，还显示所有字段的总宽度和表的代码页。

表可以有一个和它一起打开的结构复合索引。如果结构复合索引中的标识与表中的一个字段同名，标识的顺序（升序或降序）和标识的排序序列就显示在字段名旁边。

如果用 SET FIELDS 限制了对表中字段的访问，一个尖括号就会出现在可以被访问的字段名旁边。


* 在下面的示例中，打开 testdata 数据库中的 customer 表。
* 并用 DISPLAY STRUCTURE 显示表结构。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

DISPLAY STRUCTURE


请参阅

LIST


DISPLAY TABLES 命令

请参阅	示例

显示包含在当前数据库中所有的表和表的信息。

语法

DISPLAY TABLES
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 DISPLAY TABLES 的结果定向输出到打印机。

可以包含 PROMPT 在打印开始前显示“打印”对话框。应将 PROMPT 关键字直接放在 TO PRINTER 后面。

TO FILE FileName

将 DISPLAY TABLES 的结果定向输出到 FileName 指定的磁盘文件中。如果此文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 提示您是否要改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

返回的信息是 DISPLAY STATUS 所显示信息的一个子集。但是，用 DISPLAY TABLES 显示的信息只包含相关表的信息，且不论表是否打开都显示信息。

显示的信息有：

 •	   表名

 •	   表路径


* 下面的示例打开了 testdata 数据库中的 customer 表，
* DISPLAY TABLES 用来显示数据库中有关表的信息。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	&& 设置到数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

CLEAR

DISPLAY TABLES  && 显示关于数据库中表的信息


请参阅

ADD TABLE， CLOSE DATABASES， CREATE DATABASE， LIST TABLES， OPEN DATABASE， REMOVE TABLE


DISPLAY VIEWS 命令

请参阅	示例

显示当前数据库中关于 SQL 视图的信息以及 SQL 视图是否基于本地或远程表的信息。

语法

DISPLAY VIEWS
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 DISPLAY VIEWS 的结果定向输出到打印机。

包含 PROMPT 可以在打印开始前显示打印对话框。应将 PROMPT 关键字直接放在 TO PRINTER 的后面。

TO FILE FileName

将 DISPLAY VIEWS 的结果定向输出到 FileName 指定的磁盘文件中。如果文件已经存在，且 SET SAFETY 设为 ON，Visual FoxPro 提示您是否要改写此文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

使用 DBGETPROP( ) 可以返回当前数据库中关于 SQL 视图的详细信息。

SQL 视图可用 CREATE SQL VIEW 创建。


* 下面的示例打开了 testdata 数据库，然后用 CREATE
* VIEW 创建一个名为 myview 的本地 SQL 视图。再显示
* 视图设计器，为 SQL 视图指定表和条件。最后在保
* 存创建的 SQL 视图后，显示数据库中关于 SQL 视图的信息。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE SQL VIEW myview

CLEAR

DISPLAY VIEWS


请参阅

CREATE DATABASE， CREATE SQL VIEW， DBGETPROP( )， DISPLAY DATABASE， LIST VIEWS


DisplayValue 属性

请参阅

指定在一个列表框或组合框中选定项的第一列的内容。

应用于

组合框，列表框

语法

[Form.]Control.DisplayValue[ = Expr]

设置

Expr

如果 DisplayValue 是一个字符串，就指定选定项的第一列的值；如果 DisplayValue 是数值，就指定选定项的索引。

说明

设计和运行时可用。

当组合框或列表框中的项不止一列并且控制的 BoundColumn 属性设置大于 1 时，应使用 DisplayValue 属性。当 DisplayValue 是一个字符串时，组合框的文本框中的文本由 DisplayValue 指定。

附注

当组合框或列表框只有一列时，如果控制的 DisplayValue 属性和 Value 属性都包含字符串，则两者有相同的设置。


请参阅

BoundColumn 属性，Value 属性


DMY( ) 函数

请参阅	示例

从一个日期型或日期时间型表达式返回一个“日-月-年”格式的字符表达式（例如，31 May 1995）。月名不缩写。

语法

DMY(dExpression | tExpression)

参数

dExpression

指定日期型表达式，DMY( ) 函数从该表达式返回“日-月-年”格式的字符串。

tExpression

指定日期时间表达式，DMY( ) 函数从该表达式返回“日-月-年”格式的字符串。

返回值类型

字符型

说明

如果 SET CENTURY 设置为 OFF，DMY( ) 函数以 dd Month yy 格式（例如，16 February 95，不带世纪）返回一个字符串。如果 SET CENTURY 设为 ON，格式为“日-月-年”（例如，16 February 1995，带世纪）。


CLEAR

SET CENTURY OFF

? DMY(DATE( ))

SET CENTURY ON

? DMY(DATE( ))


请参阅

MDY( )， SET CENTURY， SET DATE


DO 命令

请参阅

执行一个 Visual FoxPro 程序或过程。

语法

DO ProgramName1 | ProcedureName
[IN ProgramName2]
[WITH ParameterList]

参数

ProgramName1

指定要执行的程序的名称。

如果执行的程序不包含扩展名，Visual FoxPro 就以下列顺序查找并执行这些版本的程序：

 •	   .EXE（可执行版本）

 •	   .APP（一个应用程序）

 •	   .FXP（已编译的版本）

 •	   .PRG（程序）

若要使用 DO 执行一个特定的菜单程序、表单程序或者查询，则必须包含它的扩展名（.MPR、.SPR 或者 .QPR）。

ProcedureName

指定要执行的过程的名称。Visual FoxPro 首先在当前执行的程序中查找此过程，如果在该程序中找不到此过程，Visual FoxPro 就在用 SET PROCEDURE 打开的过程文件中查找过程。

可以包含 IN ProgramName2 子句，通知 Visual FoxPro 在指定的文件中查找过程。

在一个可执行文件 (.EXE) 或应用程序 (.APP) 中，多个过程可以有相同的过程名。当使用 DO 去启动一个可执行文件或一个应用程序的过程时，Visual FoxPro 只在可执行文件或应用程序的主程序中搜索指定的过程。

IN ProgramName2

执行 ProgramName2 指定的程序文件中的一个过程。

当找到该文件时就执行该过程。如果找不到该程序文件，就会显示“文件不存在”信息。如果找到了程序文件，但指定的过程不存在，就会显示“找不到过程”信息。

WITH ParameterList

指定要传递给程序或过程的参数。列在 ParameterList 中的参数可以是表达式、内存变量、字母和数字、字段或用户自定义函数。默认情况下，参数按引用传递给程序和过程，也可以将参数放在括号中按值传递。关于按值或按引用传递参数的内容，请参阅 SET UDFPARMS。传递给程序或过程的参数的最大数目为 27。有关参数传递的详细内容，请参阅 LPARAMETERS 和 PARAMETERS.

说明

DO 执行一个程序或一个过程文件中的 Visual FoxPro 程序或过程。一个程序文件自身又可以包含其他的 DO 命令，这种嵌套最多可允许 128 级。

当使用 DO 运行一个程序时，包含在程序文件中的命令一直执行，直到下列某一事件发生：

 •	   遇到 RETURN 语句。

 •	   执行了 CANCEL 命令。

 •	   执行了另一个 DO 命令。

 •	   到达文件末尾。

 •	   执行了 QUIT 命令。

当程序执行结束时，控制可以返回到：

 •	   调用的程序。

 •	   命令窗口。

 •	   操作系统。

如果是从“程序”菜单中选择“执行”命令，并在非当前的某个目录或驱动器上执行一个程序，Visual FoxPro 就自动地将默认的目录和驱动器改为包含该程序的目录和驱动器。


请参阅

CLEAR， LPARAMETERS， PARAMETERS， PARAMETERS( )， PRIVATE， PROCEDURE， PUBLIC， SET DEFAULT， SET DEVELOPMENT， SET PATH， SET PROCEDURE


DO CASE ... ENDCASE 命令

请参阅	示例

根据不同的条件表达式结果执行不同的命令。

语法

DO CASE
CASE lExpression1
Commands
[CASE lExpression2
Commands
 ...
CASE lExpressionN
Commands]
[OTHERWISE
Commands]
ENDCASE

参数

CASE lExpression1 Commands ...

当遇到第一个结果为“真”的 CASE 表达式时，就执行它后面的命令集合。命令集合连续执行，直到遇到下一个 CASE 或 ENDCASE。然后就从 ENDCASE 后面的第一个命令恢复程序的执行。

如果一个 CASE 表达式为“假”(.F.)，就忽略它与下一个 CASE 子句之间的命令集合。

此命令只能执行一组命令，这些命令是 CASE 表达式计算为“真”(.T.)的第一个命令集合，而其他计算为“真”(.T.) 的 CASE 表达式被忽略。

OTHERWISE Commands

如果所有的 CASE 表达式计算为“假”(.F.)，就由 OTHERWISE 确定是否执行一组额外的命令：

 •	   如果包含 OTHERWISE，就执行 OTHERWISE 后面的命令集，执行后跳到 ENDCASE 后的第一条命令执行。

 •	   如果省略了 OTHERWISE，就跳到 ENDCASE 后面的第一条命令处执行。

说明

DO CASE 根据逻辑表达式的值执行一组 Visual FoxPro 命令。当执行 DO CASE 时，先计算它后面的逻辑表达式，表达式的值决定了执行哪一组命令集。

可在 DO CASE 和 END CASE 之后放置注释，在编译和执行过程中，这些注释被忽略。


*在下面的示例中，Visual FoxPro 计算每一个 CASE 子句，直到在列表
* 中找到 MONTH 变量为止。在内存变量 rpt_title 中存入适当
* 的串，然后退出 DO CASE 结构。

STORE CMONTH(DATE( )) TO month  && 今天的月份

DO CASE 可在此放置注释

CASE INLIST(month，'January'，'February'，'March')

STORE 'First Quarter Earnings' TO rpt_title

CASE INLIST(month，'April'，'May'，'June')

STORE 'Second Quarter Earnings' TO rpt_title

CASE INLIST(month，'July'，'August'，'September')

STORE 'Third Quarter Earnings' TO rpt_title

OTHERWISE

STORE 'Fourth Quarter Earnings' TO rpt_title

ENDCASE 或在此放置注释

WAIT WINDOW rpt_title NOWAIT


请参阅

DO WHILE ... ENDDO， EXIT， FOR ... ENDFOR， IF ... ENDIF， IIF( )， SCAN ... ENDSCAN


DO FORM 命令

请参阅	示例

运行用表单设计器创建的、编译过的表单或表单集。

语法

DO FORM FormName | ?
[NAME MemVarName [LINKED]]
[WITH cParameterList]
[TO MemVarName]
[NOREAD]

参数

FormName

指定要运行的表单或表单集的名称。

?

显示“执行”对话框，从对话框中选择要运行的表单或表单集。

NAME MemVarName [LINKED]

指定一个内存变量或数组元素，可通过它们引用表单或表单集。如果指定的内存变量不存在，Visual FoxPro 就自动创建它。如果指定一个数组元素，在执行 DO FORM 前数组必须存在。如果指定的内存变量或数组元素已经存在，将会改写它的内容。

如果省略 NAME 子句，Visual FoxPro 就创建一个与表单或表单集文件同名的对象类型的内存变量。

包含 LINKED 可用来链接表单和相关联的内存变量。当变量超出作用域时就释放表单。如果不包含 LINKED，即使没有与表单相关联的内存变量，表单仍可以是活动的。

WITH cParameterList

指定传递给表单或表单集的参数。

运行表单时，参数传递给表单的 Init 方法。

运行表单集时，如果表单集的 WindowType 属性设置为无模式 (0) 或模式 (1)，参数就传递给表单集的 Init 方法；如果表单集的 WindowType 属性设为读 (2) 或读模式 (3)，参数就传递给 Setup 方法。

TO MemVarName

指定存放表单返回值的变量。如果变量不存在，Visual FoxPro 就自动创建它。可在表单的 Unload 事件过程中使用 RETURN 命令来指定返回值。如果不指定返回值，就返回默认值“真”(.T.)。要使用 TO 命令，表单的 WindowType 属性必须设置为 1(Modal)。

NOREAD

创建并显示表单集，但在执行 READ 前不激活控制。如果表单集对象的 WindowType 属性没有设为 2（读），就忽略 NOREAD。

说明

DO FORM 执行表单或表单集的 Show 方法。


*  下面的示例运行计时器控制 (SWATCH.SCX) 示例。

DO FORM (HOME( ) + 'samples\controls\timer\swatch.scx')


请参阅

COMPILE FORM，CREATE FORM，MODIFY FORM


DO WHILE ... ENDDO 命令

请参阅	示例

在一个条件循环里执行一组命令。

语法

DO WHILE lExpression
Commands
[LOOP]
[EXIT]
ENDDO

参数

lExpression

指定一个逻辑表达式，它的值决定是否执行 DO WHILE 和 ENDDO 之间的命令集。如果 lExpression 计算为“真”(.T.)，就执行命令集。

Commands

指定当 lExpression 计算为“真”(.T.)时，要执行的 Visual FoxPro 命令集。

LOOP

直接将程序控制返回到 DO WHILE。LOOP 可放在 DO WHILE 和 ENDDO 间的任何位置。

EXIT

将程序控制从 DO WHILE 循环的内部转到 ENDDO 后的第一个命令。EXIT 可放在 DO WHILE 和 ENDDO 间的任何位置。

ENDDO

表明 DO 语句的结束。

说明

只要逻辑表达式 lExpression 为“真”(.T.)，就执行位于 DO WHILE 和 ENDDO 间的命令集。每个 DO WHILE 语句必须有一个相应的 ENDDO 语句。

可在 DO WHILE 和 ENDDO 之后放注释。在程序编译和执行期间忽略注释。


* 在下面的示例中，DO WHILE 循环统计仓库中价格高于 20 美元
* 的产品数量，遇到文件结束符 (EOF) 时，退出 DO WHILE 循环
* 并显示总数。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 Products 表

SET TALK OFF

gnStockTot = 0

DO WHILE .T.	  可在此加注释

IF EOF( )

EXIT

ENDIF

IF unit_price < 20

SKIP

LOOP

ENDIF

gnStockTot = gnStockTot + in_stock

SKIP

ENDDO  或在此加注释

CLEAR

? 'Total items in stock valued over 20 dollars:'

?? gnStockTot


请参阅

DO WHILE ... ENDDO，FOR ... ENDFOR，IF ... ENDIF，IIF( )，SCAN ... ENDSCAN


Dock 方法

请参阅

沿着 Visual FoxPro 主窗口的边界停放“工具栏”对象。

应用于

工具栏

语法

ToolBar.Dock [nLocation [, X, Y]]

参数

nLocation

指定工具栏停放的位置。nLocation 的值有：

值	常量	说明
- 1	TOOL_NOTDOCKED	不停放工具栏。
0	TOOL_TOP	在 Visual FoxPro 主窗口的顶部停放工具栏。
1	TOOL_LEFT	在 Visual FoxPro 主窗口的左边停放工具栏。
2	TOOL_RIGHT	在 Visual FoxPro 主窗口的右边停放工具栏。
3	TOOL_BOTTOM	在 Visual FoxPro 主窗口的底部停放工具栏。
X, Y

指定工具栏停放位置的水平坐标和垂直坐标。

说明

当停放一个工具栏时将隐藏它的标题栏，它的边框变成单线边框。工具栏的大小调整为一个单行的按钮，窗口的大小也自动调整，使工具栏不掩盖屏幕上任何信息。例如，如果工具栏停放在上边，屏幕就根据工具栏的高度下移。

使用 Move 方法可移去工具栏。当使用 Move 方法时，指定的坐标必须在停放区的外部。


请参阅

AfterDock 事件，BeforeDock 事件，Docked 属性，Undock 事件


Docked 属性

请参阅

包含一个逻辑值，表明是否停放用户自定义的工具栏对象。

应用于

工具栏

语法

ToolBar.Docked[ = lExpr]

设置

lExpr

下表列出了 Docked 属性的设置：

设置	说明
“真”(.T.)	停放工具栏。
“假”(.F.)	不停放工具栏。
说明

设计和运行时只读。


请参阅

DockPosition 属性


DockPosition 属性

请参阅

指定用户自定义工具栏对象停放的位置。

应用于

工具栏

语法

nPosition = ToolBar.DockPosition

设置

nPosition

下表列出了 nPosition 的值：

设置	位置
1	不停放
0	顶部
1	左边
2	右边
3	底部
说明

设计和运行时只读。


请参阅

Docked 属性


DocumentFile 属性

请参阅	示例

返回文件名，由该文件创建一个嵌入或链接的对象。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Object.DocumentFile[ = cFileName]

设置

cFileName

指定文件名，由该文件创建一个嵌入或链接的对象。

说明

设计和运行时只读。

附注

当用 CREATEOBJECT( ) 函数创建 OLE 对象时，在代码中设置 DocumentFile 属性。

当用 APPEND GENERAL 命令创建 OLE 对象时，也可在代码中设置 DocumentFile 属性。


* 下面的示例向一个表单中添加一个 OLE 容器控制，并使
* 用 DocumentFile 和 OleClass 属性来指定一个 Excel 工作
* 表作为要编辑的文件，指定 Excel 作为 OLE 服务器。

* DocumentFile 属性在 EXCEL 目录中指定一个名为
* BOOK1.XLS 的工作表。如果在 DocumentFile 属性中指
* 定的文件和目录不存在，这个示例将不能正确地执行；
* 可能有必要更新 DocumentFile 属性来指定一个存在
* 的目录和工作表文件。

* Doverb 方法用于激活要编辑的工作表。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && “控制”菜单框无效

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject("oleObject","oleExcelObject")  && 添加 OLE 对象

frmMyForm.cmdCommand1.Visible=.T.  && 显示“退出”命令按钮

frmMyForm.oleObject.Visible=.T.  && 显示 OLE 控制

frmMyForm.oleObject.Height = 50  && 控制高度

frmMyForm.Show  && 显示表单

frmMyForm.oleObject.DoVerb(-1)  && -1表示“编辑”

READ EVENTS  && 启动事件处理

DEFINE CLASS oleExcelObject as OLEControl

OleClass ="Excel.Sheet"  && 服务器名

DocumentFile = "C:\EXCEL\BOOK1.XLS"  && 此文件必须存在

ENDDEFINE

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标签

Cancel = .T.  && 默认“取消”按钮 (Esc)

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理，关闭表单

ENDDEFINE


请参阅

APPEND GENERAL，CREATEOBJECT( )


_DOS 系统内存变量

请参阅

如果使用 FoxPro for MS-DOS，该命令为“真”(.T.)。如果使用一个不同平台的 FoxPro 版本（Visual FoxPro、FoxPro for Windows、FoxPro for Macintosh 或 FoxPro for UNIX），该变量为“假”(.F.)。

语法

_DOS = lExpression

说明

不能用 STORE 或“=”更改 _DOS 中的值。


请参阅

_MAC，_UNIX，VERSION( )，_WINDOWS


DoScroll 方法

请参阅

滚动表格控制来模拟用户单击滚动条操作。

应用于

表格

语法

Grid.DoScroll(nDirection)

参数

nDirection

下表列出了 nDirection 的设置：

滚动命令	滚动动作
0	向上滚动
1	向下滚动
2	向上翻页滚动
3	向下翻页滚动
4	向左滚动
5	向右滚动
6	向左翻页滚动
7	向右翻页滚动
说明

使用 DoScroll 方法后触发 Scrolled 事件。


请参阅

Scrolled 事件


DoVerb 方法

请参阅	示例

在指定的对象上执行一个动作。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Object.DoVerb[Verb]

参数

Verb

指定在 OLE 容器控制中对象要执行的动作。如果没有指定，就执行默认的动作。此参数值可以是所有对象都支持的某个标准动作，或是 ObjectVerbs 属性数组的一个索引。每个对象可支持它自身的动作集，下列值表示每个对象支持的标准的动作：

值	动作
0	对象的默认动作。
1	激活要编辑的对象。如果创建对象的应用程序支持现场激活，就在 OLE 容器控制中激活对象。
2	在一个独立的应用程序窗口中打开对象。如果创建对象的应用程序支持现场激活，就在对象自身的窗口中激活对象。
3	对于嵌入的对象，隐藏创建对象的应用程序。
4	如果对象支持现场激活，就以现场激活方式激活对象并显示任何用户界面工具。如果对象不支持现场激活，对象就不激活并产生错误。
5	如果用户将焦点移到 OLE 容器控制中，就创建一个窗口，并准备要编辑的对象。如果对象不支持以鼠标单击的方式激活，就产生错误。
6	当激活要编辑的对象时，用来放弃所有记录的更改，对象的应用程序可以撤消这些更改。
说明

如果将 AutoActivate 属性设置为 2（双击），那么当用户双击控制时，OLE 容器控制就自动激活当前的对象。

提示

尽管可以使用动作名（编辑、打开、播放等）来指定 Doverb 的动作，但使用索引（0，1，2 等）会更快。


* 下面的示例向一个表单中添加一个 OLE 容器控制，
* 并使用 OleClass 和 DocumentFile 属性指定 Excel 作为
* OLE 服务器，指定一个 Excel 工作表作为要编辑的文件。

* DocumentFile 属性在驱动器 C 上的 EXCEL 目录中指定
* 一个名为 BOOK1.XLS 的工作表。如果 DocumentFile
* 指定的文件和目录不存在，此示例将不能正确地执行，
* 可能有必要更新 DocumentFile 属性来指定一个存在的
* 目录和工作表文件。

* 使用 Doverb 方法激活要编辑的工作表。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 使“控制”菜单框无效

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject("oleObject","oleExcelObject")  && 添加OLE对象

frmMyForm.cmdCommand1.Visible=.T.  && 显示“退出”命令按钮

frmMyForm.oleObject.Visible=.T.  && 显示 OLE 控制

frmMyForm.oleObject.Height = 50  && OLE 控制的高度

frmMyForm.Show  && 显示表单

frmMyForm.oleObject.DoVerb(-1)  && -1 表示“编辑”

READ EVENTS  && 启动事件处理

DEFINE CLASS oleExcelObject as OLEControl

OleClass ="Excel.Sheet"  && 服务器名

DocumentFile = "C:\EXCEL\BOOK1.XLS"  && 此文件必须存在

ENDDEFINE

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标题

Cancel = .T.  && 默认的“取消”命令按钮 (Esc)

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理，关闭表单

ENDDEFINE


请参阅

OLE 绑定型控制，OLE 容器控制


DOW( ) 函数

请参阅	示例

从日期表达式或日期时间表达式返回该日期是一周的第几天。

语法

DOW(dExpression | tExpression [, nFirstDayOfWeek])

参数

dExpression

指定日期表达式。

tExpression

指定日期时间表达式。

nFirstDayOfWeek

指定一周的第一天。nFirstDayOfWeek 可以是下列某个值：

nFirstDayOfWeek	说明
0	DOW( ) 使用当前在“星期开始于”列表框中选定的日期，该列表框出现在“选项”对话框中的“国际”选项卡上。
1	星期日。当省略 nFirstDayOfWeek 时这是默认值。它是早期 FoxPro 版本使用的一周的第一天。
2	星期一
3	星期二
4	星期三
5	星期四
6	星期五
7	星期六
返回值类型

数值型


STORE DATE( ) TO gdDayNum

CLEAR

? DOW(gdDayNum)

? CDOW(gdDayNum)


请参阅

CDOW( )，DAY( )，SET FDOW，SET FWEEK，SYS( ) 函数概述，WEEK( )


DownClick 事件

请参阅

当单击控制的下箭头时，此事件发生。

应用于

组合框，列表框，微调

语法

PROCEDURE Control.DownClick
[LPARAMETERS nIndex]

参数

nIndex

在控制数组中，唯一表示一个控制。


请参阅

UpClick 事件


DownPicture 属性

请参阅

指定选择控制时显示的图形。

应用于

复选框，命令按钮，选项按钮

语法

Control.DownPicture[ = cPicture]

设置

cPicture

指定位图的完整路径和文件名或数据库表中的通用字段名。

说明

设计和运行时可用。

附注

若在设计时设置 DownPicture 属性，而指定的文件不存在，则 Visual FoxPro 显示错误信息，但是该属性仍保留。若在运行时，DownPicture 属性设置给不存在的文件，则 Visual FoxPro 忽略此属性。

若不指定 DownPicture 属性的设置，则当选择控制时 Visual FoxPro 使用 Picture 属性指定的图形。

附注

要使这个属性有效，必须把 Style 属性设置为 1（图形方式）。


请参阅

DisabledPicture 属性，Enabled 属性，Picture 属性，Style 属性


Drag 方法

请参阅

启动、结束或取消拖动操作。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框

语法

Control.Drag [nAction]

参数

nAction

指示要执行的动作。若省略 nAction，则 nAction 设置为 1。下表列出了 Drag 的设置：

设置	说明
0	取消拖动操作；恢复控制的原始位置。
1	（默认值）启动对控制的拖动操作。
2	结束拖动—即放下控制。
说明

通常，MouseDown 事件过程调用 Drag 方法来启动拖动操作。

只有当控制的 DragMode 属性设置为 0（人工）时，才需要使用 Drag 方法来控制拖动。在 DragMode 属性设置为 1（自动）的控制上也可以使用 Drag，但并不触发 MouseDown 和 MouseUp 事件。

若想在拖动控制时更改鼠标指针，可使用 DragIcon 属性或 MousePointer 属性定义指针。只有在未设置 DragIcon 属性时，MousePointer 属性才有效。


请参阅

DragDrop 事件，DragIcon 属性，DragMode 属性，MousePointer 属性，Move 方法


DragDrop 事件

请参阅

当完成拖放操作时发生。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.DragDrop
LPARAMETERS [nIndex,] oSource, nXCoord, nYCoord

参数

在事件处理中必须包含一个 LPARAMETERS 或 PARAMETERS 语句，并且为每一个参数指定一个名称。Visual FoxPro 按下列顺序把三个或四个参数传递给 DragDrop 事件：

nIndex

唯一标识控制数组中的控制。

oSource

引用被拖动的控制。可用此参数引用控制的属性和方法。

nXCoord, nYCoord

包含鼠标指针在目标表单或控制中的当前水平 ( nXCoord ) 和垂直 ( nYCoord ) 坐标。这些坐标通常使用目标坐标系来表达，度量单位由 ScaleMode 属性确定。

说明

如果将控制拖动到另一个控制或表单上后释放鼠标按钮，或者调用了 Drag 方法，并将 nAction 参数设置为 2（放下），就算完成了拖放操作。

使用 DragDrop 事件可以控制拖动操作完成后所发生的事情。例如，可将源控制移动到新位置，或把文件从一个位置复制到另一个位置。

附注

DragDrop 事件涉及两个对象，即被拖动的控制和目标对象。DragDrop 事件是被目标对象触发，而不是由被拖动的控制触发。

可使用 DragMode 属性和 Drag 方法指定如何开始拖动。一旦开始拖动，则可用 DragOver 事件处理在 DragDrop 事件之前的事件。


请参阅

Drag 方法，DragIcon 属性，DragMode 属性，DragOver 事件，MouseDown 事件，MouseUp 事件，MouseMove 事件


DragIcon 属性

请参阅

指定在拖放操作时作为指针显示的图标。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，形状，微调，文本框

语法

Control.DragIcon[ = cIcon]

设置

cIcon

指定用作鼠标指针的图标的文件路径。一般来说，在设计时可用属性窗口指定图标文件。指定的文件必须有 .CUR 扩展名，并且按 VGA-Mono 2-Color 32×32 格式保存。若想使用彩色的 .CUR 文件，则产生错误信息。Visual FoxPro 专业版中包含的 ImageEdit（图象编辑），可用来创建一个两色 .CUR 文件。若省略 cIcon，则使用的指针为矩形内带一个箭头。

说明

设计和运行时可用。

若想在拖动操作期间提供可视的反馈信息，比如指示源控制已在合适的目标之上，DragIcon 很有用处。当用户开始拖动时 DragIcon 有效。一般来说，可在 MouseDown 或 DragOver 事件中设置 DragIcon。

附注

若在设计时设置了 DragIcon 属性，但指定的文件并不存在，则 Visual FoxPro 产生错误信息，但是属性仍保留。若运行时设置的文件不存在，则 Visual FoxPro 忽略 DragIcon 属性。


请参阅

Drag 方法，DragDrop 事件，DragMode 属性，MouseDown 事件， MouseMove 事件 MousePointer 属性，MouseUp 事件


DragMode 属性

请参阅

指定拖放操作的拖动方式为人工或自动。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框

语法

Control.DragMode[ = nMode]

设置

nMode

下表列出了 DragMode 属性的设置：

设置	说明
0	（默认值）人工。要求使用 Drag 方法开始源控制的拖动。
1	自动。单击源控制则自动开始拖动。
说明

设计和运行时可用。

当 DragMode 设置为 0（人工）时，控制响应鼠标事件，并且必须使用 Drag 方法开始拖动操作。

当 DragMode 设置为 1（自动）时，控制不响应鼠标事件。并且当用户在控制上按下鼠标主（左）键时，自动开始拖动操作。

在拖动操作中，当鼠标指针在目标控制或表单上时，释放鼠标按钮会生成目标对象的 DragDrop 事件，并且结束拖动操作。拖动也可触发 DragOver 事件。

附注

在拖动控制时，控制不会接受其他用户生成的鼠标或键盘事件（KeyPress、MouseDown、MouseMove 或 MouseUp）。


请参阅

DragDrop 事件，DragIcon 属性，DragOver 事件，KeyPress 事件，MouseDown 事件，MouseMove 事件，MouseUp 事件


DragOver 事件

请参阅

控制拖过目标对象时发生此事件。

应用于

复选框，组合框，命令按钮，命令组，控制对象，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.DragOver
LPARAMETERS [nIndex,] oSource, nXCoord, nYCoord, nState

参数

在事件过程中必须包含一个 LPARAMETERS 或 PARAMETERS 语句，并且为每一个参数指定名称，否则产生错误。

Visual FoxPro 按下列顺序把四或五个参数传递给 DragOver 事件：

nIndex

唯一标识控制数组中的控制。

oSource

包含对被拖动控制的引用。可用此参数引用控制的属性和方法。

nXCoord, nYCoord

包含鼠标指针在目标表单或控制内的当前水平 ( nXCoord ) 和垂直 ( nYCoord ) 位置。这些坐标通常使用目标的坐标系来表达，度量单位由 ScaleMode 属性确定。

nState

包含一个数值，表示被拖动控制相对于目标对象的移动状态。

设置	说明
0	进入。控制拖入了目标范围之内。
1	离开。控制拖出了目标范围之外。
2	经过。控制从目标上的一个位置移动到另一个位置。
用 nState 可以确定关键移动点处的动作。例如，可在 nState = 0（进入）时突出显示可能的目标，并在 nState = 1（离开）时恢复对象外观。

当对象在 nState = 0（进入）的情况下接受 DragOver 事件时：

 •	   如果源控制在目标对象上放下，则触发 DragDrop 事件。

 •	   如果源控制不在有效目标上放下，则用 nState=1（离开）触发一个 DragOver 事件。

说明

在拖动图标下面的对象是目标对象，它响应 DragOver 事件。当鼠标指针进入、离开或经过目标对象时可使用这个事件进行监控。

DragOver 事件确定在拖动开始之后和控制放到目标上之前所发生的一切操作。例如，通过设置 BackColor 或 ForeColor 属性，或显示一个独特的鼠标指针来突出显示目标，可以检验有效的目标范围。


请参阅

Drag 方法，DragDrop 事件，DragIcon 属性，DragMode 属性，MouseDown 事件，MouseUp 事件，MouseMove 事件


Draw 方法

请参阅

重画表单对象。

应用于

表单，_SCREEN

语法

Object.Draw


请参阅

Paint 事件


DrawMode 属性

请参阅

与颜色属性一起确定如何在屏幕上显示形状或线条控制。

应用于

表单，线条，_SCREEN，形状

语法

Object.DrawMode[ = nMode]

设置

nMode

下表列出了 DrawMode 属性的设置：

设置	说明
1	Blackness 笔。用黑色画形状。
2	NotMerge 笔。与设置 15 相反。
3	Mask Not 笔。背景色和反前景色中共有颜色的合成。
4	Not Copy 笔。与设置 13 相反。
5	Mask Pen Not。前景色和反背景色中共有颜色的合成。
6	Invert 。背景色的反色。
7	XOR 笔。前景色或背景色中颜色的合成。
8	Not Mask 笔。与设置 9 相反。
9	Mask 笔。前景色和背景色共有颜色的合成
10	Not XOR 笔。与设置 7 相反。
11	NOP。输出保持不变。实际上，此设置关闭了绘图。
12	MergeNot 笔。背景色和反前景色的合成。
13	（默认值）Copy 笔。由 ForeColor 属性指定颜色。
14	Merge Pen Not。前景色和反背景色的合成。
15	Merge 笔。前景色和背景色的合成。
16	Whiteness 笔。用白色画形状。
说明

设计和运行时可用。

使用 DrawMode 属性，可在使用形状和线条控制或用图形方法画图时增强视觉效果。当画新形状时，Visual FoxPro 比较图案中的每个象素和已有背景中的相应象素，然后进行逐位操作。例如，设置 7 用异或操作 (XOR) 组合绘图图案的象素和背景象素。

DrawMode 属性设置的效果取决于运行时画线的颜色和屏幕颜色如何结合。设置 1、6、7、11、13、16 可以产生可预测的结果。


请参阅

Box 方法，Circle 方法，DrawWidth 属性，DrawStyle 属性，FillColor 属性，FillStyle 属性，Line 方法，Pset 方法


DrawStyle 属性

请参阅

指定用图形方法绘图时的线条样式。

应用于

表单，_SCREEN

语法

Object.DrawStyle[ = nStyle]

设置

nStyle

下表列出了 DrawStyle 属性的设置：

设置	说明
0	（默认值）实线
1	虚线
2	点线
3	点划线
4	双点划线
5	透明
6	内实线
附注

若 DrawWidth 设置为 1，对每个设置 DrawStyle 可产生上表所述的效果。但是若 DrawWidth 设置为大于 1 的值，则设置 1 到 4 都产生一条实线。

说明

设计和运行时可用。


请参阅

Circle 方法，DrawMode 属性，DrawWidth 属性，FillColor 属性，FillStyle 属性，ForeColor 属性，Line 方法，PSet 方法


DrawWidth 属性

请参阅

指定图形方法输出时所用的线条宽度。

应用于

表单，_SCREEN

语法

Object.DrawWidth[ = nSize]

设置

nSize

指定线宽的象素数。DrawWidth 有效设置值从 1 到 32,767 。默认值是 1 个象素宽。

增加此属性的值会增加线条宽度。

说明

设计和运行时可用。


请参阅

Circle 方法，DrawMode 属性，DrawStyle 属性，FillColor 属性，FillStyle 属性，ForeColor 属性


DropDown 事件

请参阅

单击组合框控制中的下箭头后，列表部分即将下拉时此事件发生。

应用于

组合框

语法

PROCEDURE ComboBox.DropDown
[LPARAMETERS nIndex]

参数

必须在事件过程中包含 LPARAMETERS 或 PARAMETERS 语句，并且为每个参数指定名称，否则产生错误。Visual FoxPro 将下列参数传递给 DropDown 事件：

nIndex

包含一个数值，唯一标识控制数组中的控制。

说明

使用 DropDown 事件过程，可在用户做选择之前，对组合框的列表部分进行最后的更新，从而可以用 AddItem 或 RemoveItem 方法从列表中添加或删除菜单项。在运行时需要对此控制进行交互操作时，这种灵活性很有用处。例如，可以让在组合框列表部分中显示的内容取决于用户在 OptionGroup 中的选择。


请参阅

AddItem 方法，DownClick 事件，RemoveItem 方法


DTOC( ) 函数

请参阅	示例

由日期或日期时间表达式返回字符型日期。

语法

DTOC(dExpression | tExpression [, 1])

参数

dExpression

指定日期型内存变量、数组元素或字段，DTOC( ) 由此返回字符型日期。

tExpression

指定日期时间型内存变量、数组元素或字段，DTOC( ) 由此返回字符型日期。

1

以适合作为索引的格式返回日期。对于按时间顺序维护表的记录特别有用。

例如，要按录入顺序排列表中记录，可执行命令：

INDEX ON DTOC(gdInvDate, 1) + gnInvTime TAG Timeindx

gdInvDate 和 gdInvTime 是包含数据录入日期和时间的字段。

返回值类型

字符型

说明

DTOC( ) 返回对应于日期或日期时间表达式的字符串。日期格式由 SET CENTURY 和 SET DATE 确定。


STORE CTOD('10/31/95') TO gdThisDate

CLEAR

? DTOC(gdThisDate)

STORE DTOC({10/31/95}+90) TO gcExpireDate

? 'Your 90-day warranty expires ', gcExpireDate

? DTOC({10/31/95},1)


请参阅

CTOD( )，SET CENTURY，SET DATE，SYS( ) 函数概述


DTOR( ) 函数

请参阅	示例

将度转换为弧度。

语法

DTOR(nExpression)

参数

nExpression

指定数值表达式，将其值转换为弧度。一个用“度：分：秒”格式表示的度数应先转换为实数形式。

返回值类型

数值型

说明

DTOR( ) 把以度数表示的数值表达式转换为弧度值。DTOR( ) 在使用 Visual FoxPro 的三角函数 ACOS( )、ASIN( )、COS( )、SIN( )、TAN( ) 时很有用。

用 RTOD( ) 可将弧度转换为度。


CLEAR

? DTOR(0)    && 显示 0.00

? DTOR(45)   && 显示 0.79

? DTOR(90)   && 显示 1.57

? DTOR(180)  && 显示 3.14

? COS(DTOR(90))  && 显示 0.00


请参阅

ACOS( )，ASIN( )，COS( )，RTOD( )，SIN( )，TAN( )


DTOS( ) 函数

请参阅	示例

从指定日期或日期时间表达式中返回 yyyymmdd 格式的字符串日期。

语法

DTOS(dExpression | tExpression)

参数

dExpression

指定日期表达式，DTOS( ) 将其转换为八位字符串。

tExpression

指定日期时间表达式，DTOS( ) 将其转换为八位字符串。

返回值类型

字符型

说明

若要按日期或日期时间型字段对表索引，此函数很有用。它与包含参数 1 的 DTOC( ) 相同。

用 DTOS( ) 返回的字符串不受 SET DATE 或 SET CENTURY 的影响。


CLEAR

? DTOS(DATE( ))


请参阅

DATE( )，DATETIME( )，CTOD( )，DTOC( )


DTOT( ) 函数

请参阅	示例

从日期型表达式返回日期时间型值。

语法

DTOT(dDateExpression)

参数

dDateExpression

指定要返回日期时间型值的日期型表达式。

返回值类型

日期时间型

说明

DTOT( ) 返回的日期时间型值的格式由 SET DATE 和 SET MARK 当前设置值决定。若未提供世纪值，则假定为二十世纪。

DTOT( ) 向日期中加上午夜 (12：00：00 A.M.) 的默认时间来生成有效的日期时间值。


? DTOT({02/16/95}) && 显示 02/16/95 12:00:00am


请参阅

CTOT( )，DATE( )，SEC( )，SECONDS( )，SET SECONDS，TIME( )


DynamicAlignment 属性

请参阅

指定列对象中文本和控制的对齐方式。运行期间每次刷新表格控制时都重新计算对齐方式。

应用于

列

语法

Column.DynamicAlignment[ = cAlign]

设置

cAlign

指定运行时重新计算的字符串表达式，其结果可以是下列某一值：

设置	说明
0	左
1	右
2	居中
3	（默认值）自动
说明

设计时可用，运行时可读写。


请参阅

Alignment 属性


DynamicBackColor, DynamicForeColor 属性

请参阅	示例

指定列对象的背景和前景色。运行期间每次刷新表格控制时，都重新计算颜色值。

应用于

列

语法

Column.DynamicBackColor[ = cExpression]
Column.DynamicForeColor[ = cExpression]

设置

cExpression

用引号指定表达式。运行期间每次刷新表格控制时都重新求值。运行时的计算结果必须是单个颜色值。

说明

设计时可用，运行时可读写。

附注

可使用 DynamicBackColor 和 DynamicForeColor 属性创建特殊效果。例如，用绿色显示奇数行，而用灰色显示偶数行。


*下面的示例使用 DynamicBackColor 属性和 SetAll 方法指定表格
* 控制中记录的背景颜色。若显示在表格中的记录号为偶数，则该
* 记录的 DyamicBackColor 是白色，否则 DynamicBackColor 是绿色。

*在表单上放置一个表格控制后，打开 customer 表并且在表格上
* 显示该表的内容。Caption 属性用来为 CUST_ID 字段指定不同
* 的标头标题。在表单上放置一个命令按钮来关闭表单。

CLOSE ALL  && 关闭表和数据库

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  IN 0  && 打开 Customer表

frmMyForm = CREATEOBJECT('Form')  && 创建表单

frmMyForm.Closable = .f.  && 使控制菜单框无效

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject('grdGrid1','Grid')  && 添加表格控制

frmMyForm.grdGrid1.Left = 25    && 调整表格位置

frmMyForm.grdGrid1.SetAll("DynamicBackColor", ;

"IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) ;

, RGB(0,255,0))", "Column")  && 交替白色和绿色记录

frmMyForm.grdGrid1.Visible = .T.  && 表格控制可见

frmMyForm.cmdCommand1.Visible =.T.  && “退出”命令按钮可见

frmMyForm.grdGrid1.Column1.Header1.Caption = 'Customer ID'

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 启动事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认取消命令按钮(Esc)

Left = 125  && 命令按钮的列

Top = 210  && 命令按钮的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

CLOSE ALL  && 关闭表和数据库

ENDDEFINE


请参阅

BackColor, ForeColor 属性


DynamicCurrentControl 属性

请参阅

指定用包含在列对象中的哪个控制来显示活动单元的值。每次刷新表格控制时都重新计算控制名称。

应用于

列

语法

Column.DynamicCurrentControl[ = cExpression]

设置

cExpression

在运行时计算得到控制的名称。该控制显示和接收列中活动单元的数据。

说明

设计时可用，运行时可读写。

默认控制是 Name 属性为“Textl”的文本框。可使用 AddObject 方法添加其他控制。

若列的 Sparse 属性设置为“真”(.T.)，则只有列中的活动单元才使用 DynamicCurrentControl 属性设置中指定的对象来显示数据，其他单元用文本框显示数据。若 Sparse 属性设置为“假”(.F.)，则列中的所有单元都使用 DynamicCurrentControl 属性设置中指定的对象来显示数据。


请参阅

AddObject 方法，CurrentControl 属性


DynamicFontBold, DynamicFontItalic, DynamicFontStrikethru, DynamicFontUnderline Properties
DynamicFontBold, DynamicFontItalic, DynamicFontStrikeThru, DynamicFontUnderline 属性

请参阅

指定显示在列对象中的文本具有下列一种或多种字形：粗体，斜体，删除线或下划线。每次刷新表格控制时，都要重新计算此逻辑表达式。

应用于

列

语法

Column.DynamicFontBold[ = "lExpr"]
Column.DynamicFontItalic[ = "lExpr"]
Column.DynamicFontStrikeThru[ = "lExpr"]
Column.DynamicFontUnderline[ = "lExpr"]

设置

"lExpr"

值可以是“真”(.T.)或“假”(.F.)。下表列出了动态字体属性的设置：

设置	说明
“真”(.T.)	字形是粗体、斜体、删除线或下划线。
“假”(.F.)	（默认值，FontBold 除外）字形不是粗体、斜体、删除线，也不是下划线。
说明

设计时可用，运行时可读写。

可在运行时根据数值的情况分别使用不同的属性。例如，可设置 DynamicFontStrikethru 属性来指示已失去会员资格的人的姓名。


请参阅

DynamicFontSize 属性


DynamicFontName 属性

请参阅

指定列对象中显示文本所用的字体名。每次刷新表格控制时，都重新计算此逻辑表达式。

应用于

列

语法

Column.DynamicFontName[ = cName]

设置

cName

计算得到的字体名称。

说明

设计时可用，运行时可读写。

在设计期间，如果在属性窗口中选择 FontName 属性，并单击属性框右边的下箭头，就可以显示一个可用字体的列表。


请参阅

FontName 属性


DynamicFontOutline 属性

请参阅

指定与列对象相关的文本是否以轮廓方式显示。运行期间每次刷新表格控制时，都要重新计算此逻辑表达式。

应用于

列

语法

Column.DynamicFontOutline[ = "lExpr"]

设置

"lExpr"

计算结果为“真”(.T.) 或“假”(.F.)。下表列出了 DynamicFontOutLine 属性的设置：

设置	说明
“真”(.T.)	文本以轮廓方式显示。
“假”(.F.)	（默认值）文本不以轮廓方式显示。
说明

设计和运行时可用。


请参阅

FontOutline 属性，DynamicFontShadow 属性


DynamicFontShadow 属性

请参阅

指定与列对象相关的文本是否带阴影。运行期间每次刷新表格控制时，都要重新计算此逻辑表达式。

应用于

列

语法

Column.DynamicFontShadow[ = "lExpr"]

设置

"lExpr"

计算结果为“真”(.T.) 或“假”(.F.)。下表列出了 DynamicFontShadow 属性的设置：

设置	说明
“真”(.T.)	文本带阴影显示。
“假”(.F.)	（默认值）文本不带阴影显示。
说明

设计和运行时可用。


请参阅

FontShadow 属性，DynamicFontOutline 属性


DynamicFontSize 属性

请参阅

指定列对象中显示文本的字体大小。运行期间每次刷新表格控制时，都要重新计算字体大小。

应用于

列

语法

Column.FontSize[ = "nSize"]

设置

"nSize"

计算结果等于字体大小。默认字体大小是 10 磅。

说明

设计时可用，运行时只读写。

nSize 的最大值是 2048 磅。1 英寸等于 72 磅。

用这个属性可更改一行的字体大小。


请参阅

DynamicAlignment 属性，DynamicFontName 属性


EDIT 命令

请参阅	示例

显示要编辑的字段。

语法

EDIT
[FIELDS FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FREEZE FieldName]
[KEY eExpression1 [, eExpression2]]
[LAST | NOINIT]
[LPARTITION]
[NAME ObjectName]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NORMAL]
[NOWAIT]
[PARTITION nColumnNumber [LEDIT] [REDIT]]
[PREFERENCE PreferenceName]
[REST]
[SAVE]
[TIMEOUT nSeconds]
[TITLE cTitleText]
[VALID [:F] lExpression3 [ERROR cMessageText]]
[WHEN lExpression4]
[WIDTH nFieldWidth]
[[WINDOW WindowName1]
[IN [WINDOW] WindowNam2 | IN SCREEN | IN MACDESKTOP]]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

FIELDS FieldList

指定出现在编辑窗口中的字段。这些字段按照 FieldList 中指定的顺序显示。在字段列表中可以包含其他相关表的字段。当包含相关表的字段时，应在字段名前加上表别名和一个句点。

如果省略 FIELDS，将按照字段在表结构中出现的顺序显示表的所有字段。

字段列表可以指定字段或计算结果字段的任意组合，包括其他工作区中打开表的字段。字段列表的语法是：

FieldName1

[:R]

[:nColumnWidth]

[:V = lExpression1 [:F] [:E = cMessageText]]

[:P = cFormatCodes]

[:B = eLowerBound, eUpperBound [:F]]

[:H = cHeadingText]

[:W = lExpression2]

[, FieldName2 [:R]...]

Calculated Fields

字段列表中可以包含创建计算结果字段的语句。计算结果字段中包含用表达式创建的只读数据。表达式可以是任何形式，但它必须是一个有效的 Visual FoxPro 表达式。

用于创建计算结果字段的语法是：

CalculatedFieldName = eExpression

以下示例创建一个名为 location 的计算结果字段：

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

EDIT FIELD location = ALLTRIM(city) + ', ' + country

FIELDS 子句的字段列表包含有 8 个选项，可以对编辑窗口中显示的字段进行特殊处理。

:nColumnWidth

以列为单位指定字段的显示宽度。nColumnWidth 的值并不影响表中该字段的大小，只是改变此字段在编辑窗口中的显示。

:R

下面的示例打开编辑窗口，并显示 cust_id 和 company 这两个字段。其中，字段 cust_id 是只读的，不能更改。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

EDIT FIELD cust_id:R, company

:V = lExpression1

指定在编辑窗口内执行字段级数据有效性检查的选项。当把光标从此字段上移走时，如果 lExpression1 计算为“真”(.T.)，则说明向此字段输入的数据是正确的，光标将移动到下一字段。

如果 lExpression1 取值为“假”(.F.)，则输入的数据不正确，光标仍停留在此字段上并显示错误信息。如果 lExpression1 取值为 0，则所输入的数据不正确，光标仍停留在此字段上，但不显示任何错误信息。

默认情况下，只有当修改此字段时，才计算 lExpression1 的值。要强制进行检查，可加入 :F 选项。

如果加入 :E 选项，则可以显示自己定义的错误信息。

对于备注字段，不执行此检验选项。

:F

指定强制有效性检查选项，此选项决定从一个字段移走光标或另一个窗口被激活时，是否计算检验选项表达式 (lExpression1) 的值。如果不包含 :F 选项，则只有修改此字段时，才计算 lExpression1 的值。如果包含 :F 选项，即使此字段未作修改，也要计算 lExpression1 的值。

:E = cMessageText

显示由 cMessageText 指定的错误信息而不是默认的系统信息。

如果有效性检查表达式：V= lExpression1 计算为“真”(.T.)，则光标从字段中正常移出。如果该表达式计算为“假”(.F.)，则光标仍停留在字段上，并显示错误信息。

如果有效性检查表达式：V= lExpression1 计算为 0，则不显示系统错误信息，且光标仍停留在被检查的字段上，允许您在有效性检查例程中显示自定义的错误信息。

只有当 SET NOTIFY 为 ON 时，才能显示此错误信息。当 SET BELL 为 ON 时，将会响铃。

下面的示例打开 products 表并显示 product_id 和 prod_name 这两个字段。在 product_id 字段中输入一个大于 100 的值来执行字段有效性检验。

:V 指定了有效性检验准则。:F 说明无论数据是否更改，都要强制进行有效性检查。:E 把 Visual FoxPro 的系统错误信息替换为用户自定义的错误信息。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，错误信息都显示在 FoxPro 主窗口底部的状态栏上。

按 ESC 键关闭编辑窗口。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

IF _WINDOWS OR _MAC

SET STATUS BAR ON

ENDIF

USE products

EDIT FIELDS in_stock :V = in_stock < 100 ;

:F ;

:E = 'The stock amount must be less than 100'

:P = cFormatCodes

指定一个模板选项，允许您创建由 cFormatCodes 指定的编辑模板，模板控制编辑窗口中各个字段数据的显示和输入。

有关使用模板编辑代码的详细内容，请参阅 @ ... GET 和 @ ... SAY。除了 M 代码以外，在 @ ... GET 和 @ ... SAY 中可用的所有函数和图片代码都能在 PICTURE 和 FUNCTION 子句中使用。

下面的示例使用了模板选项，从而在 unit_price 字段上只允许输入特定格式的数值型数据：

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

EDIT FIELDS unit_price :P = '99,999.99'

:B = eLowerBound, eUpperBound [:F]

指定一组边界值，数据应在这两个边界值之间取值。边界值表达式 eLowerBound 和 eUpperBound 应该与此字段的数据类型相匹配，并且不能是用户自定义函数的函数名。如果输入的数据没有落在 eLowerBound 和 eUpperBound 之间，将会显示一条系统信息，指明数据的取值范围。

默认情况下，只有当更改字段的内容时，才用边界值检查输入的数据。要强制进行边界值检查，应选用强制检验项 (:F)。

下面的示例保证 in_stock 字段的值在 1 到 100 之间。按 ESC 键关闭编辑窗口。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

EDIT FIELDS in_stock :B = 1, 100 :F

:H = cHeadingText

指定标题选项，允许用户用 cHeadingText 指定的标题替换默认的字段名称。默认情况下，编辑窗口中字段名放置在字段左边。

下面的示例为所显示的字段提供用户自定义标题。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

EDIT FIELDS prod_name :H = 'Product Name:', ;

unit_price :H = 'Price per Unit:'

:W = lExpression2

指定 WHEN 选项，根据逻辑表达式 lExpression2 的值有条件地禁止光标移动到某个字段上。(:W) 计算 lExpression2 的值。如果 lExpression2 取值为“假”(.F.)，则不能把光标移到该字段上。如果 lExpression2 取值为“真”(.T.)，则可以把光标移到该字段上。lExpression2 也支持用户自定义函数。

如果当前字段标记为只读，则禁止向任一字段移动光标。仅当每一字段都包含计算为“假”的 WHEN 子句时，才发生这种情况。

Scope

指定在编辑窗口中显示记录的范围。说明范围的子句有：ALL、NEXT nRecords、RECORD nRecordNumber 以及 REST。有关范围子句的详细内容，请参阅 Scope 子句主题，或《开发指南》的第二章“语言概述”。包含 Scope 的命令只对活动工作区的表进行操作。

EDIT 命令默认的作用范围是所有记录 (ALL)。

FOR lExpression1

规定只有满足逻辑条件 lExpression1 的记录才能在编辑窗口中显示。这有助于用户筛选出不需要的记录。

如果 lExpression1 是可优化的表达式，Rushmore 将优化 EDIT FOR 查询。为达到最佳性能，应在 FOR 子句中使用可优化表达式。有关 Rushmore 可优化表达式的详细内容，请参阅 SET OPTIMIZE 和 深入了解 Rushmore 技术，或者《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定条件，只要逻辑表达式 lExpression2 计算为“真”(.T.)，记录就显示在编辑窗口中。

FONT cFontName [, nFontSize]

指定编辑窗口的字体和字体大小。其中字符表达式 cFontName 指定字体名，数值表达式 nFontSize 指定字体大小。例如，下面子句为编辑窗口中显示的字段指定了 16 磅的 Courier 字体：

FONT 'Courier',16

如果包含了 FONT 子句，但省略了字体大小 nFontSize，编辑窗口将使用 10 磅的字体。

在 Visual FoxPro 和 FoxPro for Windows 中，如果省略了 FONT 子句，则将使用 9 磅的 Arial 字体。如果指定的字体无效，则用类似的字体代替。

在 FoxPro for Macintosh 中，使用 10 磅的 Geneva 字体。如果指定的字体无效，则使用 Chicago 字体。

在 FoxPro for MS-DOS 中，忽略 FONT 子句。

STYLE cFontStyle

指定在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中编辑窗口的字形。如果省略了 STYLE 子句，将使用常规字形。

在 Visual FoxPro 和 FoxPro for Windows 中，如果您所指定的字形无效，则使用类似的字形代替。

在 FoxPro for Macintosh 中，如果您所指定的字形无效，则使用常规字形。

在 FoxPro for MS-DOS 中，忽略 STYLE 子句。

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以包含一个以上的字符以指定组合字形。下面的示例打开编辑窗口，并使用加下划线的字形：

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

IF _WINDOWS

EDIT FIELDS contact FONT 'System', 15  STYLE 'NU'

ENDIF

IF _MAC

EDIT FIELDS contact FONT 'Geneva', 14  STYLE 'NU'

ENDIF

FREEZE FieldName

在编辑窗口中只允许更改 FieldName 中指定的一个字段。其余字段能够显示，但不能编辑。

KEY eExpression1 [, eExpression2]

限制在编辑窗口中所显示记录的范围。使用 KEY 子句，可以指定能够在编辑窗口中显示的记录的索引关键字值 (eExpression1) 或关键字值的范围 (eExpression1,eExpression2)。此表应已建立索引，并且 KEY 子句中包含的索引关键字值的数据类型应该与主控索引文件或主控索引标识中索引表达式的数据类型一致。

在下面的示例中，编辑窗口只显示邮政编码在 10000 到 30000 范围内的记录：

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

SET ORDER TO postalcode

EDIT KEY '10000', '30000'

LAST | NOINIT

保存对编辑窗口外观设置所做的更改。这些更改将保存在 FOXUSER 文件中，其中包括对字段列表、每个字段的大小以及编辑窗口的位置和大小的更改。有关此文件的详细内容，请参阅 SET RESOURCE。

如果在 EDIT 命令中包含 LAST 子句，编辑窗口按照最近一次保存在 FOXUSER 文件中的配置打开。这将还原最近一次用 EDIT 命令创建的编辑窗口的配置。如果最近一次在命令窗口中发出的 EDIT 命令包含一长串子句，使用 EDIT LAST 命令可以避免重复键入这些命令。

如果按 CTRL+Q 退出编辑窗口，则不会保存当前工作期中对编辑窗口配置的更改。

LPARTITION

把光标放置在编辑窗口左分区的第一个字段上。使用 PARTITION 子句，可以把编辑窗口拆分为左、右两个分区。默认情况下，编辑窗口打开时光标放置在右分区的第一个字段上。

如果包含 LPARTITION 子句而无 PARTITION 子句，则光标将放置在编辑窗口的右分区内。

NAME ObjectName

仅用于 Visual FoxPro。

创建编辑窗口的对象引用，允许使用表格控制面向对象的属性操作编辑窗口。有关在 Visual FoxPro 中进行面向对象程序设计的详细内容，请参阅《开发指南》的第三章“面向对象程序设计”。有关为 NAME 子句所创建的编辑窗口指定表格控制属性的详细内容，请参阅表格控制主题。

NOAPPEND

禁止用户通过按 CTRL+Y 或从“查看”菜单中选择“追加方式”向表中添加记录。

重要内容

包含 NOAPPEND 并不禁止用户在编辑窗口中通过例程（用 VALID、WHEN 或 ON KEY LABEL 创建）追加记录。

NOCLEAR

仅用于 FoxPro for MS-DOS。

指定即使在编辑窗口关闭以后，仍继续显示它的图象。此图象并非活动的编辑窗口。使用 CLEAR 命令可以清除编辑窗口的图象。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，忽略 NOCLEAR 子句。

NODELETE

禁止在编辑窗口中为记录作删除标记。默认时，可以通过按 CTRL+T、从“表”菜单中选择“切换删除标记”，或单击待删除记录最左边的一列为记录作删除标记。

重要内容

包含 NODELETE 并不禁止用户在编辑窗口中通过例程（用 VALID、WHEN 或 ON KEY LABLE 创建）为记录作删除标记。

NOEDIT | NOMODIFY

禁止用户修改表。NOEDIT 与 NOMODIFY 是等价的。无论包含哪一个子句，都可以浏览或搜索此表，但不能编辑。不过，可以追加或删除记录。

NOLINK

解除编辑窗口中左、右分区的链接。默认时，编辑窗口中的左、右分区是链接的；当在某一分区滚动时，另一分区也相应滚动。

NOMENU

从系统菜单栏中移去 Visual FoxPro 的“表”菜单标题以及 FoxPro 早期版本的“浏览”菜单标题，禁止访问“编辑”菜单。

NOOPTIMIZE

关闭 Rushmore 对 EDIT 命令的优化。有关详细内容，请参阅 SET OPTIMIZE，或《开发指南》的第十七章“优化应用程序”。

NORMAL

按照正常默认设置打开编辑窗口，这些设置包括颜色、大小、位置、标题和控制选项（GROW、FLOAT、ZOOM 等等）。如果省略 NORMAL，并且当前输出窗口是有其自己设置的用户自定义窗口，编辑窗口将使用这些自定义设置。

NOWAIT

编辑窗口打开后，立刻继续程序的执行。程序并不等待关闭编辑窗口，而是继续执行 EDIT NOWAIT 所在程序行下面的程序行。如果省略 NOWAIT，则在程序中发出 EDIT 命令时，将打开编辑窗口并暂停执行程序，直到编辑窗口关闭为止。

NOWAIT 只用于程序中。从命令窗口发出 EDIT 命令时，加入 NOWAIT 将不起作用。

PARTITION nColumnNumber

把编辑窗口拆分成左、右两个分区，nColumnNumber 指定拆分条所在的列。例如，如果 nColumnNumber 等于 20，则拆分条放置在编辑窗口的第 20 列上。

LEDIT

指定编辑窗口的左分区处于浏览方式。

REDIT

指定编辑窗口的右分区处于浏览方式。下面的示例将打开一个编辑窗口，拆分条放置在第 20 列上，并且右分区在打开时处于浏览方式。

同时包含两个关键字可以使左、右分区在打开时均处于“浏览”方式。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

EDIT PARTITION 30 REDIT

PREFERENCE PreferenceName

保存编辑窗口的属性和选项供以后使用。LAST 能够还原前一工作期中出现的编辑窗口，与此不同，PREFERENCE 在 FOXUSER 资源文件中保存编辑窗口的属性而没有时间限制，可随时获取。有关 FOXUSER 资源文件的详细内容，请参阅 SET RESOURCE。

第一次发出带有特定参数设置名称 PreferenceName 的 EDIT 命令时，将在 FOXUSER 文件中创建一个数据项，保存编辑窗口的配置。此后若发出带有相同参数设置名称的 EDIT 命令，则把编辑窗口还原为此参数设置名称所表示的状态。当编辑窗口关闭时，将更新该参数设置。

参数设置名称最多可包含 10 个字符，并应以字母或下划线开头，可包含字母、数字和下划线的任意组合。

如果您刻意要使用某个参数设置，可以禁止对其进行更改。关闭编辑窗口，发出 SET RESOURCE OFF 命令，并以表的方式打开 FOXUSER，然后把逻辑字段 READONLY 的值改为“真”(.T.)，就可以把包含参数设置的字段改为只读字段。

有关 FOXUSER 资源文件的详细内容，请参阅 SET RESOURCE。

REST

禁止记录指针从当前位置移动到表的头部。默认情况下，EDIT 命令把记录指针定位于表的头部。

SAVE

使编辑窗口和所有备注字段的文本编辑窗口处于活动状态并可见（打开）。在使用鼠标或键盘循环遍历其他打开的窗口后，即返回到编辑窗口。

SAVE 只可用在程序中。在命令窗口中，使用 EDIT 命令时包含 SAVE 不起作用，因为 EDIT SAVE 在交互方式时总是默认的。

TIMEOUT nSeconds

指定编辑窗口等待输入的时间。数值表达式 nSeconds 指定经过多少秒仍没有输入，编辑窗口就自动关闭。

TIMEOUT 只在程序中可用。从命令窗口中发出带此子句的 EDIT 命令时没有什么作用。下面的示例中，如果 10 秒钟内没有输入，则编辑窗口关闭。

DEFINE WINDOW wEdit FROM 1,1 TO 24,40 ;

CLOSE ;

GROW ;

COLOR SCHEME 10

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

EDIT WINDOW wEdit ;

FIELDS phone :H = 'Phone Number:' , ;

company :H = 'Company:' ;

TIMEOUT 10

RELEASE WINDOW wEdit

TITLE cTitleText

用 cTitleText 指定的标题改写编辑窗口标题栏中出现的默认表名或别名。否则，正被浏览的表的名称或别名将出现在标题栏上。

如果发出 EDIT WINDOWS 命令把编辑窗口放在某个用户自定义窗口中，则编辑窗口的标题将替换用户自定义窗口的标题。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

EDIT;

TITLE 'My Edit Window' ;

FIELDS phone :H = 'Phone Number' , ;

company :H = 'Company:'

VALID lExpression3

在编辑窗口中执行记录级有效性检查。只有在更改了记录，并且把光标移到另一个记录上时才执行 VALID 子句。如果只是对备注字段作了更改，则不执行 VALID 子句。

如果 VALID 子句返回“真”(.T.)，那么可以把光标移到另一个记录上。如果 VALID 子句返回“假”(.F.)，则光标仍停留在当前字段上，Visual FoxPro 显示错误信息。如果包含 ERROR 子句，则可以在 VALID 子句返回“假”值时显示自定义的错误信息。字符表达式 cMessageText 作为错误信息显示。如果 VALID 子句的返回值为 0，则光标仍然停留在当前字段上，但不显示错误信息。

不要把 VALID 子句与启用字段有效性检查的检验选项 (:V) 混淆起来。

:F

在用户把光标移到下一个记录之前强制执行 VALID 子句。在这种情况下，即使当前记录未作更改，也执行 VALID 子句。

ERROR cMessageText

用 cMessageText 定义错误信息的内容，并指定用此错误信息改写系统默认信息。当 VALID 子句返回“假”(.F.) 时，Visual FoxPro 显示自定义的错误信息。

WHEN lExpression4

当用户把光标移到另一个记录上时，计算某个条件是否被满足。如果 lexpression4 为“真”(.T.)，则用户可以修改光标所在的记录。如果 lexpression4 为“假”(.F.) 或 0，则光标所在的记录成为只读记录，不能修改。

当激活另一个窗口时，不执行 WHEN 子句。

WIDTH nFieldWidth

限制编辑窗口每个分区中所有字段所能显示的字符数不超过 nFieldWidth。包含 WIDTH 子句并不更改表中字段的大小，只改变字段在编辑窗口中的显示方式。如果已经用 FIELDS 子句指定了某个字段的宽度，则此宽度值将忽略由 WIDTH 子句为这个字段指定的宽度值。

WINDOW WindowName1

指定一个用户自定义窗口，编辑窗口具有与之相同的特征。例如，如果创建此用户自定义窗口时使用了 FLOAT 子句，则编辑窗口也可以移动。所指定的窗口不一定要活动或可见，但必须已定义。在 FoxPro for MS-DOS 中，如果定义该窗口带有注脚，在编辑窗口中并不出现注脚，编辑窗口的滚动条将取代注脚的位置。

IN [WINDOW] WindowName2

指定一个父窗口，编辑窗口在其中打开。编辑窗口并不继承父窗口的特征。在父窗口中激活的编辑窗口不能移出父窗口外。如果父窗口移动，则编辑窗口也随之移动。

要访问编辑窗口，必须首先用 DEFINE WINDOW 定义其父窗口，并且父窗口应该活动并可见。

IN SCREEN

当一个用户自定义窗口活动时，把编辑窗口明确地放置在 Visual FoxPro 主窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

把编辑窗口放在 Macintosh 桌面上。编辑窗口与 FoxPro 主窗口属于同一级。编辑窗口可以移出 FoxPro 主窗口之外，也可以被它隐藏。当包含 MACDESKTOP 子句时，编辑窗口与 FoxBASE + for Macintosh 中编辑窗口的运行方式相同。

包含 MACDESKTOP 子句将忽略当前 SET MACDESKTOP 的设置值。省略 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 将决定把编辑窗口放在 FoxPro 主窗口还是 Macintosh 桌面上。有关把编辑窗口放在 FoxPro 主窗口还是 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

COLOR SCHEME nSchemeNumber

指定编辑窗口颜色的配色方案编号。在 FoxPro for MS-DOS 中，默认时编辑窗口选用配色方案 10（浏览）指定的颜色。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，编辑窗口选用由控制面板的“颜色”程序建立的配色方案。

COLOR ColorPairList

指定控制编辑窗口颜色的一组颜色。下表显示了 FoxPro for MS-DOS 中各颜色对所能控制的窗口元素。

颜色对编号	编辑窗口的元素
1	其他记录
2	当前字段
3	边框
4	编辑窗口活动时标题的颜色
5	另一个窗口活动时标题的颜色
6	选定文本
7	当前记录
8	阴影
在 FoxPro for MS-DOS 中，颜色对 1 中指定的第二个颜色即为表格的背景色。颜色对 3 中指定的第二个颜色为表格的前景色。

说明

EDIT 命令有助于在一个窗口内编辑选定表。EDIT 命令在功能上与 CHANGE 命令等价。

如果按 ESC 键退出编辑窗口，则放弃对字段所做的最近一次修改。但是，如果在修改完某个字段后，把光标移动到了另一个记录上，则保存对此字段所做的修改。

在程序中，可使用 DEACTIVATE WINDOW 命令保存所做的修改并关闭编辑窗口。在 DEACTIVATE WINDOW 命令中应包含编辑窗口的名称。有关编辑窗口名的详细内容，请参阅 WTITLE( )。

SET SKIP 支持

使用 SET SKIP 命令可以在两个表之间建立一对多关系（请参阅示例）。对于父表中的每个记录，在子表中都可能有多个相关记录。如果创建了一个一对多关系，则可以使用 EDIT 命令查看父表和子表的记录。

父记录只出现一次，子表中第一个匹配的记录显示在旁边，余下的匹配记录则显示在父记录和第一个匹配子记录之后。在 FoxPro for MS-DOS 中，第一个匹配记录之后的记录中包含父表信息的列都显示为阴影块。在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，由编辑窗口的当前字体决定重复父记录信息的填充字符。

有关详细内容，请参阅 SET SKIP。

COL( ) 和 ROW( ) 支持

函数 COL( ) 和 ROW( ) 返回编辑窗口光标在屏幕上的当前行、列坐标。如果编辑窗口在 Visual FoxPro 主窗口中打开，则返回的光标位置是相对于 Visual FoxPro 主窗口，而不是编辑窗口。如果编辑窗口在某个用户自定义窗口中打开，则 COL( ) 和 ROW( ) 返回的光标位置相对于这个用户自定义窗口。


*下面的示例使用 SET SKIP 命令在两个表之间创建一对多关系。对于创建
*  的每一张货单，在父表 (customer) 中都有一个记录与之对应。对于
*  父表中的每一个记录，子表 (orders) 中都有多个记录与之对应。
*

*在这种一对多关系创建以后，打开一个编辑窗口，
* 同时显示父表和子表的记录。

CLEAR

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer ORDER cust_id IN 0	&& 父表

USE orders ORDER cust_id IN 0  && 子表

SELECT customer	  && 回到父工作区

SET RELATION TO cust_id INTO orders	  && 建立关系

SET SKIP TO orders  && 一对多关系

WAIT WINDOW 'Scroll to see shipping dates for each customer' NOWAIT

EDIT FIELDS customer.cust_id :H='Customer Number', ;

customer.city :H='Customer City', orders.shipped_on


请参阅

BROWSE，表格控制，SET SKIP，WTITLE( )


EditBox（编辑框）控制

请参阅	属性	事件	方法

创建一个编辑框。

语法

EditBox

说明

编辑框控制可用来编辑字符类型的内存变量、数组元素、字段或备注字段。

所有标准的 Visual FoxPro 编辑功能，如剪切、复制和粘贴，在编辑框中都可以使用。编辑框中的文本在垂直方向上可以滚动，在水平方向上可以自动换行。

有关创建编辑框的其他内容，请参阅《开发指南》的第十一章“使用控制”。


 属性

Alignment	AllowTabs	BackColor
BackStyle	BaseClass	BorderStyle
Class	ClassLibrary	ColorScheme
ColorSource	Comment	ControlSource
DisabledBackColor	DisabledForeColor	DragIcon
DragMode	Enabled	FontBold
FontItalic	FontName	FontOutline
FontShadow	FontSize	FontStrikeThru
FontUnderline	ForeColor	Format
Height	HelpContextID	HideSelection
Left	Margin	MaxLength
MousePointer	Name	Parent
ParentClass	ReadObject	ReadOnly
ScrollBars	SelectedBackColor	SelectedForeColor
SelLength	SelStart	SelText
SpecialEffect	StatusBarText	TabIndex
TabStop	Tag	TerminateRead
ToolTipText	Top	Value
Visible	Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
ErrorMessage	GotFocus	Init
InteractiveChange	KeyPress	LostFocus
Message	MouseDown	MouseMove
MouseUp	ProgrammaticChange	RightClick
UIEnable	Valid	When


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	Refresh
SaveAsClass	SetFocus	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE CLASS, CREATE FORM, DEFINE CLASS


EJECT 命令

请参阅	示例

向打印机发送换页符。

语法

EJECT

说明

EJECT 命令要求打印机走纸到下一页的顶端。如果系统内存变量 _PADVANCE 设置为 FORMFEED，则 EJECT 命令向打印机发送换页符。如果 _PADVANCE 设置为 LINEFEEDS，则 EJECT 命令将不断发送换行符，直至打印机走纸到下一页的顶端。

EJECT 命令把 PCOL( ) 和 PROW( ) 重置为打印机打印头当前的行、列位置值，但并不影响系统内存变量 _PAGENO 或 _PLINENO 的值。


*在下面的示例中，要打印 customer 表中 company 和 phone
* 两个字段。为运行此示例，请确保打印机已联好，并已打开电源。
*  每当打印的行数超过 62 行时，将自动换页。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

SET DEVICE TO PRINTER

SET PRINT ON

DO WHILE NOT EOF( )

@ PROW( )+1,10 SAY 'Company: ' + company

@ PROW( )+1,10 SAY 'Phone: ' + phone

@ PROW( )+1,1  SAY ''

IF PROW( ) > 62

EJECT

ENDIF

SKIP

ENDDO

SET PRINT OFF

SET DEVICE TO SCREEN


请参阅

EJECT PAGE, ON PAGE, SET DEVICE, SET PRINTER, PCOL( ), PROW( ), 系统内存变量概述


EJECT PAGE 命令

请参阅

向打印机发出有条件走纸的指令。

语法

EJECT PAGE

说明

使用 EJECT PAGE 命令可以连续走纸。走纸取决于 _PADVANCE 的值以及 ON PAGE 例程是否有效。

如果 _PADVANCE 设置为 FORMFEED 而 ON PAGE 例程没有运行，则 EJECT PAGE 命令执行下列操作：

 •	   如果打印机已经联机，则向打印机发送一个换页符。

 •	   根据系统内存变量 _PLENGTH 和 _PLINENO，向屏幕、某个替补文件或者同时向两者发送换行符。

 •	   _PAGENO 加 1。

 •	   _PLINENO 设置为 0。

如果系统内存变量 _PADVANCE 设置为 LINEFEEDS，而 ON PAGE 例程正在运行，并且 _PLINENO 的值小于 ON PAGE 例程所指定的行数，则 EJECT PAGE 命令将不断向打印机、Visual FoxPro 主窗口或某个替补文件或者以上两者发送换行符，直到打印机走纸到下一页顶端为止。

如果 ON PAGE 例程未执行，或当 _PADVANCE 设置为 LINEFEEDS，并且 _PLINENO 大于 ON PAGE 例程所指定的行号，则 EJECT PAGE 命令执行下列操作：

 •	   根据系统内存变量 _PLENGTH 和 _PLINENO，向打印机、Visual FoxPro 主窗口或其替补文件或者以上两者发送换行符。

 •	   _PAGENO 加 1。

 •	   _PLINENO 设置为 0。


请参阅

EJECT, ON PAGE, SET ALTERNATE, SET DEVICE, SET PRINTER, PCOL( ), PROW( ), 系统内存变量概述


EMPTY( ) 函数

请参阅	示例

确定表达式是否为空值。

语法

EMPTY(eExpression)

参数

eExpression

指定 EMPTY( ) 函数作用的表达式。可包含字符、数值、日期或逻辑表达式，也可以是已打开表的备注字段或通用字段的名称。当表达式取下列值时，EMPTY( ) 函数返回“真”(.T.)。

表达式类型	取值
字符型	空字符串、空格、制表符、回车、换行符或以上各字符的任意组合。
数值型	0
货币型	0
浮点型	0
整型	0
双精度型	0
日期型	空（例如 CTOD('')）
日期时间型	空（例如 CTOT('')）
逻辑型	“假”(.F.)
备注字段	空（没有内容）
通用字段	空（没有 OLE 对象）
图片	空（没有图片）
注意，不能用 EMPTY( ) 函数确定内存变量对象引用是否为空。例如，内存变量可以包含对某个表单中对象的引用。如果从表单的控制菜单框或使用 CLEAR WINDOWS 命令关闭此表单，则这个内存变量包含 null 值。

下面的示例演示了如何使用 TYPE( ) 和 ISNULL( ) 函数判定内存变量的对象引用是否有效。

goMyForm = CREATEOBJECT('Form')

WAIT WINDOW IIF(TYPE('goMyForm') = 'O' AND !ISNULL(goMyForm), ;

'goMyForm has valid object reference',;

'goMyForm does not have valid object reference')

返回值类型

逻辑型

说明

如果表达式 eExpression 取值为空，则 EMPTY( ) 返回“真”(.T.)；否则，EMPTY( ) 返回“假”(.F.)。


* 下面的示例打开 testdata 数据库的 customer 表。用 FOR ... ENDFOR
*  创建一个循环，在这个循环中用 EMPTY( ) 函数确定 TAG( )
* 函数是否返回空字符串。显示每个结构索引标识的名称及其候选状态。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	  &&  打开 customer 表

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查空字符串

? TAG(nCount)  && 显示标识名

? CANDIDATE(nCount)  && 显示候选状态

ELSE

EXIT  && 当没有发现更多标识时退出循环

ENDIF

ENDFOR


请参阅

LEN( )


Enabled 属性

请参阅

指定对象能否响应用户引发的事件。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.Enabled[ = lExpr]

设置

lExpr

Enabled 属性的设置为：

设置	说明
“真”(.T.)	（默认值）对象可以响应事件。
“假”(.F.)	对象不响应事件。
说明

设计和运行时可用。

Enabled 属性允许在运行时将对象设置为启用或废止状态。例如，可以废止应用程序当前状态中不使用的对象，也可以废止某个控制以限制其使用权。例如，可以废止编辑框，使之显示只读信息。如果废止了某个控制，则不能再选择它。

当某个容器对象的 Enabled 属性设置为“假”(.F.) 时，同时废止它包含的所有控制。用户单击已废止表单所包含的控制时，不会触发任何事件。

把计时器控制的 Enabled 属性设置为“假”(.F.)，可以废止计时器控制，从而取消由计时器控制 Interval 属性指定的计时。


请参阅

Click 事件, DblClick 事件, DragDrop 事件, DragOver 事件, DropDown 事件, KeyPress 事件, MouseDown 事件, MouseMove 事件, MouseUp 事件, RightClick 事件, Scrolled 事件, Undock 事件


END TRANSACTION 命令

请参阅

结束当前事务。

语法

END TRANSACTION

说明

END TRANSACTION 命令保存事务过程中对表、表的备注文件或索引文件所做的任何修改并结束此事务。

此时提交 BEGIN TRANSACTION 命令与 END TRANSACTION 命令之间对数据库所作的更新。如果当前事务是第一个事务，或者是唯一的事务（即事务并不嵌套），则将所做的更改写入磁盘。

如果事务有嵌套，则 END TRANSACTION 命令将已缓冲的更新放入更高层事务中。嵌套事务有可能改写在更高层事务中对数据的更改。

如果 END TRANSACTION 命令产生错误（例如，没有足够磁盘空间写入所做的修改），则取消事务中所做的修改，并结束该事务。


请参阅

BEGIN TRANSACTION, ROLLBACK, TXNLEVEL( )


EOF( ) 函数

请参阅	示例

确定记录指针位置是否超出当前表或指定表中的最后一个记录。

语法

EOF([nWorkArea | cTableAlias])

参数

nWorkArea

指定表所在的工作区号。

cTableAlias

指定表的别名。

如果指定工作区中没有打开的表，则 EOF( ) 函数返回“假”(.F.)。

如果没有指定工作区或别名，则检查当前选定工作区中打开的表，看是否到达了表的最后一个记录。

返回值类型

逻辑型

说明

如果记录指针已指向表文件的末尾 (EOF)，则 EOF( ) 返回“真”(.T.)。当记录指针超过表中的最后一个记录时，即到达表的末尾。例如，当 FIND、LOCATE 或 SEEK 命令不成功时，Visual FoxPro 将把记录指针移动到最后一个记录之后，EOF( ) 函数返回“真”(.T.)。当记录指针并不指向表的末尾时，EOF( ) 函数返回“假”(.F.)。


*下面的示例打开 customer 表并显示带有命令按钮的窗口，可用此
* 命令按钮在表中向前或向后移动记录指针。随着记录指针
* 移动方向的不同，Visual FoxPro 将检查记录指针是否指向文件尾
* (EOF)，或是否指向文件头 (BOF)。当任一条件为“真”(.T.) 时，
*  Visual FoxPro 将显示相应的信息并重定位记录指针。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

SET TALK OFF

CLEAR

ACTIVATE SCREEN

@ 2,1 SAY 'Company: '+ company

DEFINE WINDOW wSkip FROM 9,10 TO 14,65 DOUBLE COLOR SCHEME 5

ACTIVATE WINDOW wSkip

@ 1,5 GET gnChoice FUNCTION '*HN \<Forward;\<Backward;\<Quit' ;

DEFAULT 0 SIZE 2,14 VALID CHOICE( )

READ CYCLE

RELEASE WINDOW wSkip

PROCEDURE choice

DO CASE

CASE gnChoice = 1

SKIP

IF EOF('CUSTOMER')

WAIT WINDOW 'End of file encountered' NOWAIT

SKIP -1

ENDIF

CASE gnChoice = 2

SKIP -1

IF BOF('CUSTOMER')

WAIT WINDOW 'Beginning of file encountered' NOWAIT

GO TOP

ENDIF

CASE gnChoice = 3

CLEAR READ

ENDCASE

ACTIVATE SCREEN

@ 2,1 CLEAR TO 2,50

@ 2,1 SAY 'Company: '+ company

RETURN .T.


请参阅

BOF( ), GO | GOTO, SKIP


ERASE 命令

请参阅	示例

从磁盘上删除文件。

语法

ERASE FileName | ?

参数

FileName

指定要删除的文件。必须包括文件的扩展名。如果该文件在当前驱动器或目录以外的某驱动器或目录上，则应在文件名前包含路径。

ERASE 命令不支持在 FileName 中使用通配符。

?

显示“删除”对话框，从中可以选择要删除的文件。

说明

注意

当使用 ERASE 命令时，必须十分小心。此命令删除的文件不能再恢复。在删除文件前，即使 SET SAFETY 已设置为 ON，也不会有任何警告。


* 在下面的示例中，把 CUSTOMER.DBF 的结构和 country 字段
*  等于“USA”的所有记录复制到 backup 表中，然后把 backup
*  表中的数据复制到打开的文本文件 temp 中。之后，
*  在关闭 temp 文件的同时删除该文件。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

COPY STRUCTURE TO backup

USE backup

APPEND FROM customer FOR country = 'USA'

COPY TO temp TYPE DELIMITED

WAIT WINDOW 'Press Esc to close and erase temp.txt' NOWAIT

MODIFY FILE temp.txt NOEDIT

ERASE temp.txt

? IIF(FILE('temp.txt'),'File not deleted','File deleted')

USE

ERASE backup.dbf


请参阅

DELETE FILE, FILER


ERROR 命令

请参阅	示例

生成一个 Visual FoxPro 错误。

语法

ERROR nErrorNumber
| nErrorNumber, cMessageText1
| [cMessageText2]

参数

nErrorNumber

指定要生成错误的编号。在指定错误编号时，应使用标准的 Visual FoxPro 错误信息。有关 Visual FoxPro 的错误信息及其错误编号的列表，请参阅“技术参考”内的“错误信息”。

cMessageText1

指定在错误信息中显示的一段文本，并提供该错误的附加信息。例如，如果引用了一个并不存在的内存变量，Visual FoxPro 将在错误信息中提供此内存变量的名称。

cMessageText2

指定在错误信息中显示的一段文本。当指定 cMessageText2 而不是 nErrorNumber 时，将生成 Visual FoxPro 的错误编号 1098（用户自定义错误）。在 cMessageText2 中使用回车 (CHR(13)) 可以将部分错误信息移到下一行。

说明

可用 ERROR 命令测试错误处理例程或显示自定义错误信息。

如果在发出 ERROR 命令时，某个 ON ERROR 错误处理例程正在运行，Visual FoxPro 将执行这个 ON ERROR 例程。如果某个对象发生错误，则执行该对象的 Error 事件。

如果是从命令窗口发出 ERROR 命令，而 ON ERROR 错误处理例程未运行，Visual FoxPro 将显示错误信息。如果从程序中发出 ERROR 命令，而 ON ERROR 错误处理例程未运行，Visual FoxPro 将显示错误信息，并允许取消程序、挂起程序，或忽略此错误。


* 下面的示例生成三条错误信息。第一条错误信息是 Visual FoxPro
* 错误信息“找不到变量”（错误编号 12）。第二条错误信息再
* 生成 12 号错误，并包含有变量名 Myvariable。最后一条错误信息
* 是用户自定义错误信息（错误编号 1098）“我的错误信息”。
*

ERROR 12  && 生成 Visual FoxPro 错误“找不到变量”。

ERROR 12, 'Myvariable'  && 变量'Myvariable'未找到，出错。

ERROR '我的错误信息'  && 生成错误“我的错误信息”。


请参阅

ON ERROR


Error 事件

请参阅

当某方法中在运行出错时，此事件发生。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，临时表，自定义，数据环境，编辑框，表单，表单集，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，关系，形状，微调，文本框，计时器，工具栏

语法

PROCEDURE Object.Error
LPARAMETERS [nIndex,] nError, cMethod, nLine

参数

Visual FoxPro 按下列顺序向 Error 事件传送三或四个参数。

nIndex

唯一标识控制数组中的控制。

nError

Visual FoxPro 的错误编号。有关错误编号的列表，请参阅“技术参考”的“错误信息”部分。

cMethod

存放造成此错误的方法。但是，如果方法调用了用户自定义函数，并且正是在此函数中发生了错误，则 cMethod 包含的是这个用户自定义函数名，而不是调用此函数的方法名。

nLine

存放方法中或自定义函数中造成此错误的程序行号。

说明

Error 事件使得对象可以对错误进行处理。此事件忽略当前的 ON ERROR 例程，并允许各个对象在内部俘获并处理错误。

重要内容

只有错误发生在代码中时，才调用 Error 事件。

如果正在处理错误时，Error 事件过程中又发生了第二个错误，Visual FoxPro 将调用 ON ERROR 例程。如果 ON ERROR 例程不存在，Visual FoxPro 将挂起程序并报告错误，如同 Error 事件和 ON ERROR 例程不存在一样。


请参阅

ON ERROR


ERROR( ) 函数

请参阅	示例

返回触发 ON ERROR 例程的错误编号。

语法

ERROR( )

返回值类型

数值型

说明

ERROR( ) 函数返回最近一次错误的编号。必须有一个 ON ERROR 例程处于活动状态，才能使 ERROR( ) 函数返回非零值。

在程序执行中俘获了一个错误时，在 ON ERROR 例程中可以通过 ERROR( ) 函数返回错误类型。相应的错误信息可由 MESSAGE( ) 函数返回。

可用 RETURN 或 RETRY 命令重置 ERROR( ) 函数的返回值。

有关错误编号的列表及其相应的错误信息，请参阅“技术参考”的“错误信息”部分。


* 下面的示例演示了一个简单的错误处理例程。在发生错误
*  时显示信息。

CLEAR

ON ERROR DO errhand WITH ERROR( ), MESSAGE( )

*** 下面一行将产生错误——不存在 BRNSE 命令

BRWSE

ON ERROR

RETURN

*** 错误处理过程 ***

PROCEDURE errhand

PARAMETER errnum,message

? Message

? 'Error number: '+ ALLTRIM(STR(Errnum))

RETURN


请参阅

MESSAGE( ), ON ERROR, RETRY, RETURN


ErrorMessage 事件

请参阅

当 Valid 事件返回“假”(.F.) 时，此事件发生并提供显示错误信息的手段。

应用于

复选框，组合框，命令按钮，命令组，编辑框，列表框，选项按钮，选项组，微调，文本框

语法

PROCEDURE Object.ErrorMessage

说明

可用 ErrorMessage 事件返回错误信息。

包含 ErrorMessage 事件是为了提供与 FoxPro 2.X 的向后兼容性，对应于 @ ... GET 命令中的 ERROR 子句。


请参阅

Valid 事件


EVALUATE( ) 函数

请参阅

计算字符表达式的值并返回结果。

语法

EVALUATE(cExpression)

参数

cExpression

指定要计算的表达式。cExpression 可以是原义字符串，也可以是引号括起的各种数据类型的有效 Visual FoxPro 表达式、内存变量、数组元素或字段。cExpression 中的字符不能超过 255 个。

只要可能，就应使用 EVALUATE( ) 和名称表达式来代替使用 & 的宏替换，因为 EVALUATE( ) 函数或名称表达式比宏替换的执行速度快。

返回值类型

字符型、数值型、货币型、日期型、日期时间型、逻辑型或备注型。

说明

EVALUATE( ) 函数与 TYPE( ) 函数类似，只不过返回的是表达式的值而不是其类型。包含 EVALUATE( ) 函数的表达式不能使用 Rushmore 技术优化。


请参阅

TYPE( )


Exclusive 属性

请参阅

指定是否以独占方式打开某个与临时表对象相关联的表。

应用于

临时表

语法

DataEnvironment.Cursor.Exclusive[ = lText]

设置

lText

Exclusive 属性的设置有：

设置	说明
“真”(.T.)	（默认值）当加载数据环境时，以独占方式打开与临时表关联的表。
“假”(.F.)	当加载数据环境时，不以独占方式打开与临时表关联的表。
说明

设计时可用，运行时可读写。

附注

当使用 CURSORSETPROP( ) 函数访问临时表对象时，在运行时 Exclusive 属性只读。

加载数据环境时，与临时表关联的每个表都能以独占方式打开（在多用户环境中不允许其他用户访问该表），或以共享方式打开。可以使用 Exclusive 属性指定访问表的方式。

附注

如果 DataSession 属性设置为 2（私有数据工作期）时，所有临时表对象 Exclusive 属性的默认值将更改为“假”(.F.)。

对于视图，视图对象本身总是以共享方式打开。不过，定义视图的表受 Exclusive 属性的影响。对于本地视图，以独占还是以共享方式打开定义视图的 Visual FoxPro 表，取决于 Exclusive 属性的设置。Exclusive 属性对远程视图不起作用。

Exclusive 属性与 USE 命令的 EXCLUSIVE 子句和 SHARE 子句作用相似。


请参阅

DataSession 属性, SET EXCLUSIVE, USE


EXIT 命令

请参阅	示例

从 DO WHILE、FOR 或 SCAN 循环中退出。

语法

EXIT

说明

EXIT 命令把控制权从循环 DO WHILE ... ENDDO、FOR ... ENDFOR 或 SCAN ... ENDSCAN 中转交给紧接在 ENDDO、ENDFOR 或 ENDSCAN 后的命令。


*在下面的示例中，使用 DO WHILE 循环对价格超过 20
*  美元的库存产品的数目进行统计，直至文件尾 (EOF)，
*  然后退出 DO WHILE 循环并显示总计值。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 Prodocts 表

SET TALK OFF

gnStockTot = 0

DO WHILE .T.	  可以在此处加入注释！

IF EOF( )

EXIT

ENDIF

IF unit_price < 20

SKIP

LOOP

ENDIF

gnStockTot = gnStockTot + in_stock

SKIP

ENDDO	  或在此处加入注释！

CLEAR

? 'Total items in stock valued over 20 dollars:'

?? gnStockTot


请参阅

DO WHILE ... ENDDO, FOR ... ENDFOR, SCAN ... ENDSCAN


EXP( ) 函数

请参阅	示例

返回 e^x 的值，其中 x 是某个给定的数值型表达式。

语法

EXP(nExpression)

参数

nExpression

指定指数表达式 e^x 中的指数 x。

返回值类型

数值型

说明

自然对数的底 e 约等于 2.71828。EXP( ) 函数返回的小数位数由 SET DECIMALS 命令指定。


? EXP(0)  && 显示 1.00

? EXP(1)  && 显示 2.72


请参阅

LOG( ), SET DECIMALS


EXPORT 命令

请参阅

把 Visual FoxPro 表中的数据复制到其他格式的文件中。

语法

EXPORT TO FileName
[TYPE] DIF | MOD | SYLK | WK1 | WKS | WR1 | WRK | XLS | XL5
[FIELDS FieldList]
[Scope]
[FOR lExpression1]
[WHILE lExpression2]
[NOOPTIMIZE]
[AS nCodePage]

参数

FileName

指定文件名，Visual FoxPro 向其中导入数据。如果该文件名中不包含扩展名，则赋给它指定文件类型的默认扩展名。

FIELDS FieldList

指定要复制到新文件中的字段。如果省略 FIELDS 子句，则把全部字段复制到新文件中。即使在字段列表中包含备注字段和通用字段，也不会将它们复制到新文件中。

Scope

指定要复制到新文件中的记录范围，只有此范围内的记录才复制到新文件中。Scope 子句有 ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关 Scope 子句的详细内容，请参阅“帮助”中的 Scope 子句主题，或《开发指南》的第二章“语言概述”。包含 Scope 子句的命令只能操作活动工作区中的表。

EXPORT 命令的默认范围是所有 (ALL) 记录。

FOR lExpression1

指定只有满足逻辑条件 lExpression1 的记录才被复制到新文件中。这可以帮助您筛选出不想要的记录。

如果 lExpression1 是可优化表达式，则 Rushmore 将优化 EXPORT ... FOR lExpression1 命令。为达到最佳性能，应在 FOR 子句中使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只要逻辑表达式 lExpression2 取值为“真”(.T.)，就把记录复制到新文件中。

NOOPTIMIZE

关闭对 EXPORT 命令的 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

TYPE

指定要创建文件的类型。关键字 TYPE 是可选的，但指定的值必须是下列某一文件类型。

文件类型	说明
DIF	如果指定 DIF 类型，则 Visual FoxPro 表中的每个字段成为 VisiCalc 所使用的 DIF (Data Interchange Format )文件中的一个矢量（列），而每个记录成为该文件中的一个元组（行）。如果 FileName 没有包含扩展名，则为新文件名指定 DIF 扩展名。
MOD	MOD 子句用于向 Microsoft Multiplan 4.0 版 MOD 格式的文件导入数据。如果 FileName 没有包含扩展名，则为新文件名指定 .MOD 扩展名。
SYLK	对于 SYLK 文件（符号链接交换格式，Microsoft Multiplan 中使用），Visual FoxPro 表中的每个字段成为电子表格中的列，而每条记录成为电子表格中的一行。默认情况下，SYLK 文件没有扩展名。
WK1	包含此选项用于从 Visual FoxPro 的表中创建 Lotus-1-2-3 的电子表格。对于使用 Lotus-1-2-3 修订版 2.X 的电子表格文件，指定扩展名为 .WK1。表中的每个字段成为新电子表格的列，而每条记录成为此电子表格的一行。
WKS	包含此选项可从 Visual FoxPro 表中创建 Lotus-1-2-3 电子表格。对于使用 Lotus-1-2-3 修订版 1—A 的电子表格文件，指定扩展名为 .WKS。表中每个字段成为新电子表格的一列，而每条记录成为此电子表格的一行。
WR1	包含此选项可以从 Visual FoxPro 表中创建 Lotus Symphony 电子表格。对于使用 Symphony 1.01 版的电子表格，指定扩展名为 .WRI。表中的每个字段成为新建电子表格的一列，而每条记录成为此电子表格的一行。
WRK	包含此选项可从 Visual FoxPro 表中创建 Lotus Symphony 电子表格。对于使用 Symphony 1.01 版的电子表格，指定扩展名为 .WRK。表中的每个字段成为新电子表格的一列，而每条记录成为此电子表格的一行。
XLS	包含 XLS 选项可以创建在 Microsoft Excel 中使用的工作表。选定表的每个字段成为该工作表的一列，而每条记录成为一行。除非用户指定另一个扩展名，否则将为新创建的工作表文件指定文件扩展名 .XLS。
XL5	包含 XL5 选项可以创建 Microsoft Excel 5.0 版的工作表文件。当前选定表的每个字段成为该电子表格的一列，而每条记录成为其中的一行。如果没有包含文件扩展名，则将为此新建的工作表指定扩展名 .XLS。
AS nCodePage

为 EXPORT 命令创建的文件指定代码页。Visual FoxPro 不仅复制当前选定表的内容，而且在复制数据的同时，自动把数据转换到为新文件指定的代码页上。如果可能，Visual FoxPro 使用指定的代码页来标记新创建的文件。

如果不支持指定的 nCodePage 值，Visual FoxPro 将产生错误信息。可以用 GETCP( ) 函数代替 nCodePage，显示“代码页”对话框，从中指定代码页。

如果省略 AS nCodePage，则不转换代码页。如果可能，Visual FoxPro 将使用被复制数据的表所在的代码页来标记新创建的文件。

如果 nCodePage 为 0，则不转换代码页，并且不用代码页标记新建的文件。

说明

EXPORT 命令可以让其他软件包使用 Visual FoxPro 的数据。

如果导出数据的表已建立索引，则按索引顺序创建新文件。


请参阅

APPEND FROM, COPY TO, GETCP( ), IMPORT


EXTERNAL 命令

请参阅

向项目管理器提示一个未定义的引用。

语法

EXTERNAL FILE FileList | ARRAY ArrayList
| CLASS | FORM | LABEL | LIBRARY | MENU
| PROCEDURE | QUERY | REPORT | SCREEN | TABLE

参数

FILE FileList

告知项目管理器包含在间接文件引用或宏替换中的文件（诸如文本文件、.BMP 位图文件等等）是独立文件。FileList 可以包含一系列文件，文件名之间用逗号分隔。

ARRAY ArrayList

在程序中创建了某个数组，然后要在低一层的程序中使用此数组时，应在这个低层程序中包含 ARRAY 子句和该数组名。ArrayList 可以包含一系列数组名，数组名之间用逗号分隔。

在下面的示例中，第一个程序创建了一个名为 gaInvoice 的数组。先初始化该数组，然后调用低一层的程序 dispinvo。dispinvo 显示上一层程序中创建的数组内容。包含 EXTERNAL ARRAY GAINVOICE 命令可以提示项目管理器。

DIMENSION gaInvoice(4)

STORE 'Paid' TO gaInvoice

DO dispinvo

*** dispinvo 程序***

PROCEDURE dispinvo

EXTERNAL ARRAY gaInvoice

? gaInvoice(1)

? gaInvoice(2)

? gaInvoice(3)

? gaInvoice(4)

RETURN

*** dispinvo 程序结束 ***

当向用户自定义函数或过程传递数组时，相应数组应该在项目管理器中进行标识。包含此 ARRAY 子句，并将 PARAMETER 语句中包括的数组放在此子句后面。

DIMENSION gaArrayOne(2)	&& 创建数组

EXTERNAL ARRAY gaArrayTwo	&& 在 UDF 中使用的数组

SET TALK OFF

STORE 10 TO gaArrayOne(1)

STORE  2 TO gaArrayOne(2)

= ADDTWO(@gaArrayOne)	&& 向 UDF 按引用传递数组

FUNCTION ADDTWO

PARAMETER gaArrayTwo

CLEAR

gaArrayTwo(1) = gaArrayTwo(1) + 2

gaArrayTwo(2) = gaArrayTwo(2) + 2

? gaArrayTwo(1)

? gaArrayTwo(2)

CLASS

告知项目管理器包含在一个间接文件引用或宏替换中的文件是一个可视类库。

EXTERNAL CLASS myvclass  && 类 myvclass 必须存在

STORE 'myvclass' TO gcClassFile

MODIFY CLASS (gcClassFile)

FORM

如果在间接文件引用或宏替换中包含表单定义文件，应包含 FORM 子句及该表单文件名。FORM 子句与 SCREEN 子句等价。

EXTERNAL FORM dataentr  && 表单文件 dataentr 必须存在

STORE 'dataentr' TO gcFormFile

DO FORM (gcFormFile)

LABEL

告知项目管理器包含在间接文件引用或宏替换中的文件是一个标签定义文件。

EXTERNAL LABEL Maillabl	  && 标签文件 Maillabel 必须存在

STORE 'Maillabl' TO gcLabelFile

LABEL FORM (gcLabelFile) PREVIEW

LIBRARY

当在 SET LIBRARY 命令中通过间接文件引用或宏替换引用某个库文件时，应包含 LIBRARY 子句。

EXTERNAL LIBRARY regress  && 库文件 regress 必须存在

STORE 'regress' TO gcStatFunc

SET LIBRARY TO (gcStatFunc)

MENU

如果在间接文件引用或宏替换中包含有菜单定义文件时，应包含 MENU 子句及菜单文件名。

EXTERNAL MENU pickfile  && 菜单文件 Pickfile 必须存在

STORE 'pickfile' TO gcSysMenPad

MODIFY MENU (gcSysMenPad)

PROCEDURE

标识一个外部过程或用户自定义函数。

EXTERNAL PROCEDURE delblank	  && 过程 delblank 必须存在

STORE 'delblank' TO gcTrimBlanks

DO (gcTrimBlanks) WITH 'A B C D E'

QUERY

提示项目管理器包含在间接文件引用或宏替换中的文件是一个查询文件。

EXTERNAL QUERY sales  && 查询文件 sales 必须存在

STORE 'sales.qpr' TO gcSalesFile

DO (gcSalesFile)

REPORT

提示项目管理器包含在间接文件引用或宏替换中的文件是报表定义文件。

EXTERNAL REPORT overdue	  && 报表文件 overdue 必须存在

STORE 'overdue' TO gcReportFile

REPORT FORM (gcReportFile) PREVIEW

SCREEN

如果在间接文件引用或宏替换中包含有表单定义文件，则应包含 SCREEN 子句及表单文件名。SCREEN 子句与 FORM 子句等价。

EXTERNAL SCREEN dataentr  && 表单文件 dataentr 必须存在

STORE 'dataentr' TO gcScreenFile

MODIFY SCREEN (gcScreenFile)

TABLE

提示项目管理器包含在间接文件引用或宏替换中的文件是 Visual FoxPro 的一个表。

EXTERNAL TABLE customer && 表 cnstomer 必须存在

STORE 'customer' TO gcMyTable

USE (gcMyTable)

说明

使用 EXTERNAL 命令，可以在项目管理器创建的项目中包含文件并解决未定义引用的问题。只有项目管理器才使用 EXTERNAL 命令，在程序的执行中忽略此命令。

有关用项目管理器创建项目的详细内容，请参阅使用项目管理器和《开发指南》的第十五章“编译应用程序。”

项目管理器将 EXTERNAL 命令中指定的文件包含在项目中。在文件名前应加入 CLASS、FILE、FORM、LABEL、LIBRARY、MENU、PROCEDURE、QUERY、REPORT、SCREEN 或 TABLE，以告知项目管理器要包含在项目中的文件类型。

当在名称表达式或宏替换中包含文件名时，也应给项目管理器以提示。这可以保证在项目连编时包含所有必要的文件。另外，在其他过程或用户自定义函数中创建的数组也必须提示给项目管理器。

有关名称表达式和宏替换的详细内容，请参阅 &。只要可能，就应使用名称表达式，而不要使用宏替换，这有助于提高程序的性能。


请参阅

BUILD APP, BUILD PROJECT


FCHSIZE( ) 函数

请参阅

更改用低级文件函数打开的文件的大小。

语法

FCHSIZE(nFileHandle, nNewFileSize)

参数

nFileHandle

指定希望改变其大小的文件的句柄，此句柄可以在打开文件时由 FOPEN( ) 函数返回，或者在创建文件时用 FCREATE( ) 函数返回。如果使用 FOPEN( ) 函数打开文件，该文件应以“写”或“读写”方式打开，以便更改其大小。

nNewFileSize

以字节为单位，指定新的文件大小。如果 nNewFileSize 小于文件的原始大小，文件将被截断；如果 nNewFileSize 大于文件的原始大小，则增大文件。

返回值类型

数值型

说明

FCHSIZE( ) 函数根据指定字节数增大文件或截断文件。

当增大文件时，在打开文件所在的驱动器上，Visual FoxPro 将为文件分配扇区。由于 FCHSIZE( ) 函数并不对新的文件存储空间初始化，因而这些空间可能包含以前的数据，此时应对新的文件存储空间进行妥善的管理。

此函数返回文件最终的字节数。由于某些原因（例如磁盘空间不够），如果 FCHSIZE( ) 函数所指定的文件句柄无效，或文件为只读文件，则 Visual FoxPro 返回 1。

提示

此函数可把文件长度截短为 0。


请参阅

FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FCLOSE( ) 函数

请参阅

刷新并关闭低级文件函数打开的文件或通信端口。

语法

FCLOSE(nFileHandle)

参数

nFileHandle

指定要关闭的低级文件句柄。在使用 FCREATE( ) 函数创建文件或在使用 FOPEN( ) 函数打开文件时，可返回数值型的文件句柄。

如果用低级文件函数打开某个通信端口，则可以通过分配给此端口的文件句柄将其关闭。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，不能使用低级文件函数打开端口。

返回值类型

逻辑型

说明

如果成功地关闭文件，则 FCLOSE( ) 函数返回“真”(.T.)，并释放该文件句柄；如果文件不能关闭，FCLOSE( ) 函数返回“假”(.F.)。

CLOSE ALL 命令也用于关闭低级文件。


请参阅

CLOSE ALL, FCHSIZE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FCOUNT( ) 函数

请参阅	示例

返回表中的字段数目。

语法

FCOUNT([nWorkArea | cTableAlias])

参数

nWorkArea

指定一个表所在的工作区，FCOUNT( ) 函数返回该表的字段数目。

如果在指定工作区没有打开的表，则 FCOUNT( ) 函数返回 0。

cTableAlias

指定表的别名，FCOUNT( ) 函数返回该表的字段数目。

如果所指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

数值型

说明

如果省略可选的参数，FCOUNT( ) 函数将返回当前选定工作区中已打开表的字段数目。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

SELECT 0

USE employee  && 打开 Employee 表

CLEAR

? FCOUNT('CUSTOMER')	  && 显示“13”-- Customer 的字段数目

? FCOUNT('EMPLOYEE')  && 显示“22”-- Employee的字段数目


请参阅

DBF( ), FIELD( ), FSIZE( )


FCREATE( ) 函数

请参阅	示例

创建并打开一个低级文件。

语法

FCREATE(cFileName [, nFileAttribute])

参数

cFileName

指定要创建的文件名称，在文件名前可以加入驱动器指示符和路径。如果没有包括驱动器指示符或路径，则在默认目录下创建该文件。

nFileAttribute

指定文件的属性。下表列出了可以指定的文件属性。

nFileAttribute	文件属性
0	（默认值）读写
1	只读
2	隐含
3	只读／隐含
4	系统
5	只读／系统
6	系统／隐含
7	只读／隐含／系统
可以使用 DISPLAY STATUS 或 LIST STATUS 命令显示或打印由 FCREATE( ) 函数创建并打开的文件的信息，每个用低级文件函数打开或创建的文件可由 DISPLAY STATUS 和 LIST STATUS 给出下列信息：

 •	   驱动器、目录和文件名

 •	   文件句柄编号

 •	   文件指针的位置

 •	   读写属性

返回值类型

数值型

说明

如果指定名称的文件已经存在，则改写此文件，并不作任何警告。

FCREATE( ) 函数为此文件指定一个文件句柄编号，在其他的 Visual FoxPro 低级文件函数中，可用此编号标识该文件。在创建一个文件时，FCREATE( ) 函数返回该文件句柄编号，如果不能创建文件，则返回 1。

提示

可以把文件句柄的编号赋给内存变量，从而可以在其他的低级文件函数中用此内存变量访问该文件。

不能用 FCREATE( ) 打开通信端口。要打开通信端口，可以使用 FOPEN( )。


IF FILE('errors.txt')  && 文件存在吗?

gnErrFile = FOPEN('errors.txt',12)  	&& 如果存在，用“读写”方式打开

ELSE

gnErrFile = FCREATE('errors.txt')  && 如果不存在，创建文件

ENDIF

IF gnErrFile < 0	  && 检查打开文件时是否有错误

WAIT 'Cannot open or create output file' WINDOW NOWAIT

ELSE  && 如果没有错误，写文件

=FWRITE(gnErrFile , 'Error information to be written here')

ENDIF

=FCLOSE(gnErrFile )	  && 关闭文件

MODIFY FILE errors.txt NOWAIT  && 在编辑窗口中打开文件


请参阅

CLOSE ALL, FCHSIZE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FDATE( ) 函数

请参阅	示例

返回文件最近一次修改的日期。

语法

FDATE(cFileName)

参数

cFileName

指定文件名，由 FDATE( ) 函数返回其最近一次修改的日期，cFileName 可在文件名前包含路径。如果文件名前不包含路径，Visual FoxPro 将在默认目录和 SET PATH 命令指定的所有目录下搜索该文件。

返回值类型

日期型

说明

FDATE( ) 函数返回的日期是由操作系统指定给该文件的。FDATE( ) 函数返回值的格式由 SET DATE、SET MARK 和 SET CENTURY 的当前设置决定。

使用 LUPDATE( ) 函数可获得某个打开表最近一次修改的日期。


*  下面的示例使用 FDATE( ) 函数显示 Visual FoxPro 资源文件
*  FOXUSER.DBF 最近一次修改的日期。

? FDATE('FOXUSER.DBF')  && 显示最近一次修改的日期


请参阅

FTIME( ), LUPDATE( )


FEOF( ) 函数

请参阅	示例

判断文件指针的位置是否在文件尾部。

语法

FEOF(nFileHandle)

参数

nFileHandle

指定要进行“文件尾部”状况检查的文件句柄编号。当指定的文件句柄编号是用 FOPEN( ) 打开的通信端口所对应的文件句柄编号时，FEOF( ) 函数的返回值总为“真”(.T.)。

返回值类型

逻辑型

说明

对于用低级文件函数打开的文件，如果文件指针的位置在文件尾部，则这个低级文件函数的返回值为“真”(.T.)；如果文件指针并不在文件尾部，则 FEOF( ) 函数的返回值为“假”(.F.)。


*** 打开文件 test.txt ***

gnFileHandle = FOPEN('test.txt')

*** 把文件指针移到 BOF***

gnPosition = FSEEK(gnFileHandle, 0)

*** 如果文件指针既在 BOF 又在 EOF，则是“空”文件***

*** 否则文件中必有内容***

IF FEOF(gnFileHandle)

WAIT WINDOW 'This file is empty!' NOWAIT

ELSE

WAIT WINDOW 'This file has something in it!' NOWAIT

ENDIF

= FCLOSE(gnFileHandle)


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FERROR( ) 函数

请参阅

返回与最近一次低级文件函数错误相对应的编号。

语法

FERROR( )

返回值类型

数值型

说明

如果低级文件函数执行成功，则 FERROR( ) 函数返回 0；如果函数执行不成功，此函数返回一个正值。下表列出了 FERROR( ) 函数返回的各个错误编号及错误原因。

错误编号	错误原因
2	文件没有找到
4	打开的文件太多（文件句柄不够）
5	不能访问
6	给出的文件句柄无效
8	内存不足
25	移动文件指针时出错（无法将指针移到文件开始位置之前）
29	磁盘满
31	打开文件时出错


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FFLUSH( ) 函数

请参阅	示例

刷新低级函数打开的文件内容，并将它写入磁盘。

语法

FFLUSH(nFileHandle)

参数

nFileHandle

指定输出到磁盘的刷新文件的句柄。

返回值类型

逻辑型

说明

FFLUSH( ) 函数释放此文件缓冲区所占用的内存。

FLUSH 命令与 FFLUSH( ) 函数不同。FLUSH 命令不对低级文件操作，而对表和索引进行操作。


* 下面的示例打开文件 INPUT.DAT，并向其中写入内容。在写入头
*  两个字符串后，程序刷新缓冲区以保证字符串写入磁盘。然后再
*  写入后两个字符串，再次刷新缓冲区，并关闭该文件。
*

IF FILE('input.dat')

gnTestFile = FOPEN('input.dat',2)

ELSE

gnTestFile = FCREATE('input.dat')

ENDIF

gnIOBytes = FWRITE(gnTestFile,'Test output')

gnIOBytes = FWRITE(gnTestFile,' for low-level file I/O')

glFlushOk = FFLUSH(gnTestFile)

gnIOBytes = FWRITE(gnTestFile,'Test output2')

gnIOBytes = FWRITE(gnTestFile,' for low-level file I/O')

glFlushOk = FFLUSH(gnTestFile)

glCloseOk = FCLOSE(gnTestFile)

MODIFY FILE input.dat NOWAIT NOEDIT


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FGETS( ) function
FGETS( ) 函数

请参阅	示例

从低级文件函数打开的文件或通信端口中返回一连串字节，直至遇到回车符。

语法

FGETS(nFileHandle [, nBytes])

参数

nFileHandle

指定一个数值型文件句柄，FGETS( ) 函数根据此句柄，从相应的文件或通信端口返回数据。

nBytes

指定由 FGETS( ) 函数返回的字节数。如果在此之前没有遇到回车符，FGETS( ) 函数返回 nBytes 个字节。如果回车符在 nBytes 个字节当中，则 FGETS( ) 函数返回文件指针起始位置与回车符之间的数据。

如果省略 nBytes，则 FGETS( ) 函数默认最多可返回 254 个字节。

返回值类型

字符型

说明

通过使用一串 FGETS( ) 函数，可以逐行阅读文件。

FGETS( ) 函数将一串字节作为单个字符串返回，所返回的数据从文件指针的当前位置开始，直至遇到回车符为止，此时文件指针将定位在紧接此回车符的字节上。回车符不包含在所返回的字节中，其中的换行符也被放弃。


*** TEST.TXT 文件必须存在 ***

STORE FOPEN('test.txt') TO gnFileHandle 	&& 打开文件

STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd	 && 移动指针到 EOF

STORE FSEEK(gnFileHandle, 0) TO gnTop  	&& 移动指针到BOF

IF gnEnd <= 0  && 是“空”文件吗?

WAIT WINDOW 'This file is empty!' NOWAIT

ELSE  && 如果非“空”

gcString = FGETS(gnFileHandle, gnEnd)  && 存储内容

? gcString

ENDIF

= FCLOSE(gnFileHandle)  && 关闭文件


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FIELD( ) 函数

请参阅	示例

根据编号返回表中的字段名。

语法

FIELD(nFieldNumber [, nWorkArea | cTableAlias])

参数

nFieldNumber

指定字段编号。如果 nFieldNumber 等于 1，则返回表中的第一个字段名；如果 nFieldNumber 等于 2，则返回第二个字段名，依此类推。如果 nFieldNumber 大于字段的数目，则返回空字符串。返回的字段名为大写。

nWorkArea

字段所属表的工作区。

如果在指定工作区中没有打开的表，FIELD( ) 函数将返回空字符串。

cTableAlias

字段所属表的别名。

如果指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

字符型

说明

如果省略可选参数，FIELD( ) 函数将返回当前选定工作区中已打开表的字段名。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

CLEAR

FOR gnCount = 1 TO FCOUNT( )  && 循环次数等于字段的数目

? FIELD(gnCount)  && 显示各字段

NEXT

?

? 'Number of fields: ' + ALLTRIM(STR(gnCount -1))


请参阅

DISPLAY STRUCTURE, FCOUNT( ), FSIZE( )


FILE( ) 函数

请参阅	示例

如果在磁盘上找到指定的文件，则返回“真”(.T.)。

语法

FILE(cFileName)

参数

cFileName

指定要查找文件的名称，必须包含文件的扩展名。Visual FoxPro 首先在默认目录下查找该文件，如果在默认目录下未找到该文件，Visual FoxPro 将按照 SET PATH 命令建立的 Visual FoxPro 路径进行搜索。

可以在文件名前加入路径，从而在某个非当前目录或驱动器上搜索文件。如果在文件名前加入路径，而 SET COMPATIBLE 设置为 OFF，则按照所建立的 Visual FoxPro 路径进行搜索。当 SET COMPATIBLE 设置为 OFF 时，驱动器和目录说明符被忽略。

返回值类型

逻辑型

说明

FILE( ) 函数在磁盘上查找文件。如果找到文件，则返回“真”(.T.)；否则，返回“假”(.F.)。


*下面的示例显示一条信息，指明 Visual FoxPro 资源文件是否在
*  Visual FoxPro 的启动目录下。

SET PATH TO HOME( )

CLEAR

IF FILE('foxuser.dbf')

WAIT WINDOW 'Visual FoxPro resource file present'

ELSE

WAIT WINDOW 'Visual FoxPro resource file not present'

ENDIF


请参阅

FULLPATH( ), GETFILE( ), LOCFILE( )


FILER 命令

请参阅

打开名称为 Filer 的文件维护程序。

语法

FILER
[LIKE FileSkeleton]
[NOWAIT]
[IN [WINDOW] WindowName | SCREEN]

参数

LIKE FileSkeleton

只显示与文件梗概相匹配的文件，文件梗概可以包含通配符 * 和 ?。

NOWAIT

在打开 Filer 后，继续执行程序。程序并不等待 Filer 关闭，而是继续执行紧接在 FILER NOWAIT 之后的一行代码。

在程序中执行 FILER 命令时，如果省略 NOWAIT 子句，则 Filer 打开后，程序将暂停执行，等待用户关闭 Filer，然后程序才继续执行紧接在 FILER 之后的一行代码。

IN [WINDOW] WindowName

在父窗口 WindowName 中打开 Filer，必须首先使用 DEFINE WINDOW 命令定义这个父窗口。

只能在父窗口的边界内移动 Filer。如果移动父窗口，Filer 也随之移动，Filer 并不继承父窗口的特征。在父窗口中可以移动、关闭或最小化 Filer，Filer 不继承父窗口的颜色。

IN [WINDOW] SCREEN

Filer 放置在 Visual FoxPro 主窗口内。

说明

Filer 提供一种管理硬盘或软盘的有效机制。可以借助 Filer 复制文件、创建目录或文件夹、移动文件或删除文件，还可以查看并更改文件属性、查找文件、对文件重命名，以及检查某个文件或一组文件的大小。

不能通过 Visual FoxPro 界面访问 Filer。


请参阅

COPY FILE, DELETE FILE, DIR or DIRECTORY, ERASE, RENAME


FillColor 属性

请参阅

指定图形例程在对象上所画图形的填充颜色。

应用于

表单，_SCREEN，形状

语法

Object.FillColor[ = nColor ]
Object.FillColor[ = RGB(nRedValue, nGreenValue, nBlueValue) ]

设置

nColor

指定一个数字代表颜色，默认时，FillColor 设置为 0（黑色）。有关颜色设置的详细内容，请参阅 BackColor, ForeColor 属性主题。

nRedValue, nGreenValue, nBlueValue

分别指定填充颜色中红、绿、蓝三种颜色的比例，必须使用 RGB( ) 函数把三种颜色成分合并为一个数字，作为 FillColor 属性。

附注

在“属性”窗口中，双击任一颜色属性可以显示“颜色”对话框，用户可在此对话框中选择颜色或定义颜色。在“颜色”对话框关闭后，与选定颜色相对应的红、绿、蓝三种颜色的比例成为这些属性当前的设置值。

说明

在设计和运行时均可用。

当 FillStyle 属性设置为默认值 1（透明）时，忽略 FillColor 设置。

只有封闭形状（如圆、方框或椭圆之类的形状）才能被填充。

形状对象使用 BackColor 属性填充颜色。


请参阅

BackColor 属性, BorderColor 属性, Box 方法, Circle 方法, FillStyle 属性, ForeColor 属性, GETCOLOR( ), RGB( )


FillStyle 属性

请参阅

指定图案，用来填充圆和方框图形方法创建的形状和图形。

应用于

表单，_SCREEN，形状

语法

Object.FillStyle[ = nStyle]

设置

nStyle

指定填充形状或图形的图案。FillStyle 的设置有：

设置	说明
0	实心。
1	（默认值）透明。忽略 FillColor 属性。
2	水平线。
3	垂直线。
4	向上对角线。向上对角线由左上角开始，到右下角为止。
5	向下对角线。向下对角线由左下角开始，到右上角为止。
6	十字线。垂直线与水平线交叉构成许多小方块。
7	对角交叉线。
说明

在设计和运行时均可用。


请参阅

BorderStyle 属性, Box 方法, Circle 方法, DrawMode 属性, DrawStyle 属性, DrawWidth 属性, FillColor 属性


Filter 属性

请参阅

排除不满足条件的记录。筛选条件由给定表达式指定。

应用于

临时表

语法

DataEnvironment.Cursor.Filter[ = cExpr]

设置

cExpr

任意的 Visual FoxPro 表达式，通常是能够对一组记录进行操作的表达式。

说明

设计时可用，运行时可读写。

附注

如果使用 CURSORSETPROP( ) 函数访问临时表对象，Filter 属性在运行时只读。

与 SET FILTER 命令的作用相类似。


请参阅

SET FILTER


FILTER( ) 函数

请参阅	示例

返回 SET FILTER 命令中指定的表筛选表达式。

语法

FILTER([nWorkArea | cTableAlias])

参数

nWorkArea

指定表所在的工作区，FILTER( ) 函数返回该表的筛选表达式。

在指定的工作区中如果没有打开表，FILTER( ) 函数返回空字符串。

cTableAlias

指定表的别名，FILTER( ) 函数返回其筛选表达式。

如果所指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

字符型

说明

如果省略可选参数，FILTER( ) 函数返回在当前选定工作区中已打开表的筛选表达式。有关筛选的详细内容，请参阅 SET FILTER。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

SET TALK ON

SET FILTER TO SUBSTR(cust_id,1) = 'B'

CLEAR

? FILTER( )  && 显示筛选表达式

STORE FILTER('customer') TO gcOldFilter 	&& 保存筛选表达式

SET FILTER TO country = 'USA'

? FILTER( )  && 显示筛选表达式

SET FILTER TO &gcOldFilter	 && 还原筛选表达式

? FILTER( )  && 显示筛选表达式

LIST FIELDS cust_id, contact  && 显示筛选条件


请参阅

SET FILTER


FIND 命令

请参阅

搜索某个已建立索引的表。包含此命令是为了提供向后兼容性。可用 SEEK 代替。

语法

FIND cExpression

说明

FIND 命令移动记录指针，指向表中索引关键字与字符表达式 cExpression 相匹配的第一个记录，cExpression 不能为 null 值。FIND 命令要求当前选定表已经建立了索引。除非 SET EXACT 设置为 OFF，否则与索引表达式的匹配应该是精确的。

如果找到匹配记录，RECNO( ) 函数返回匹配记录的记录号，FOUND( ) 函数返回“真”(.T.)，而 EOF( ) 函数返回“假”(.F.)。

如果未找到匹配记录，则 RECNO( ) 函数的返回值等于表的记录数加 1，FOUND( ) 函数返回“假”(.F.)，而 EOF( ) 函数返回“真”(.T.)。

如果 SET NEAR 为 ON，且 FIND 命令不成功，则记录指针指向的记录紧接在最接近匹配的记录后面；如果 SET NEAR 为 OFF，且 FIND 命令不成功，则记录指针指向文件尾。在以上两种情况下，参数为 0 的 RECNO( ) 函数返回最接近匹配的记录号。


请参阅

EOF( ), FOUND( ), INDEX, LOCATE, RECNO( ), SEEK, SET EXACT, SET NEAR


FirstElement 属性

请参阅

指定在组合框或列表框控制内所显示的数组的第一个元素。

应用于

组合框，列表框

语法

Control.FirstElement[ = nElement]

设置

nElement

指定列表中第一个显示的数组元素。

说明

在设计和运行时可用。只有当 RowSource 是数组（RowSourceType = 5）时，此属性才可用。


请参阅

NumberOfElements 属性, RowSource 属性


FKLABEL( ) 函数

请参阅	示例

根据功能键对应的编号，返回该功能键的名称 (F1, F2, F3 ...)。

语法

FKLABEL(nFunctionKeyNumber)

参数

nFunctionKeyNumber

指定功能键编号。nFunctionKeyNumber 的取值从 0 开始，最大值为功能键的数值减去 1。如果 nFunctionKeyNumber 比功能键的数目减 1 要大，FKLABEL( ) 函数返回空字符串。功能键的数目可以使用 FKMAX( ) 函数得到。

返回值类型

字符型

说明

可以用 SET FUNCTION 命令对功能键编程。

FKLABEL( ) 函数的返回值受 SET COMPATIBLE 的影响。当 COMPATIBLE 设置为 FOXPLUS （默认值）时，FKLABEL( ) 函数返回功能键的名称；而当 COMPATIBLE 设置为 DB4 时，FKLABEL( ) 函数返回功能键与组合功能键 (F1、CTRL+F1、SHIFT+F1、F2、CTRL+F2、SHIFT+F2...) 的名称。


CLEAR

SET COMPATIBLE OFF

? 'COMPATIBLE OFF'

?

FOR nCount = 1 TO FKMAX( )  && 循环次数等于功能键的数目

? FKLABEL(nCount)  && 显示可编程的功能键

ENDFOR

SET COMPATIBLE ON

?

? 'COMPATIBLE ON'

?

FOR nCount = 1 TO FKMAX( )  && 循环次数等于功能键的数目

? FKLABEL(nCount)  && 显示可编程的功能键

ENDFOR


请参阅

FKMAX( ), SET COMPATIBLE, SET FUNCTION


FKMAX( ) 函数

请参阅	示例

返回键盘上可编程功能键或组合功能键的数目。

语法

FKMAX( )

返回值类型

数值型

说明

FKMAX( ) 函数的返回值受 SET COMPATIBLE 的影响。当 SET COMPATIBLE 设置为 FOXPLUS（默认值）时，FKMAX( ) 函数返回功能键的数目；当 SET COMPATIBLE 设置为 DB4 时，FKMAX( ) 函数返回功能键与组合功能键 (F1、CTRL+F1、SHIFT+F1、F2、CTRL+F2、SHIFT+F2...) 的数目。


CLEAR

SET COMPATIBLE OFF

? 'COMPATIBLE OFF'

?

FOR nCount = 1 TO FKMAX( )  && 循环次数等于功能键的数目

? FKLABEL(nCount)  && 显示可编程的功能键

ENDFOR

SET COMPATIBLE ON

?

? 'COMPATIBLE ON'

?

FOR nCount = 1 TO FKMAX( )  && 循环次数等于功能键的数目

? FKLABEL(nCount)  && 显示可编程的功能键

ENDFOR


请参阅

FKLABEL( ), SET COMPATIBLE, SET FUNCTION


FLDLIST( ) 函数

请参阅

对于 SET FIELDS 命令指定的字段列表，返回其中的字段和计算结果字段表达式。

语法

FLDLIST([nFieldNumber])

参数

nFieldNumber

指定字段列表中返回的字段（或计算结果字段表达式）。如果 nFieldNumber 等于 1，FLDLIST( ) 函数返回第一个字段（或计算结果字段表达式）；如果 nFieldNumber 等于 2，FLDLIST( ) 函数返回第二个字段（或计算结果字段表达式）；依此类推。如果 nFieldNumber 大于字段列表中字段和计算结果字段表达式的数目，FLDLIST( ) 函数返回空字符串。

如果省略 nFieldNumber，FLDLIST( ) 函数返回字段列表中的所有字段和计算结果字段表达式。

返回值类型

字符型

说明

包含此命令是为了提供对 dBASE 的兼容性。

SET FIELDS 命令指定一个表中可以访问和显示的一组字段，同时创建计算结果字段。


请参阅

SET FIELDS


FLOCK( ) 函数

请参阅	示例

尝试锁定当前表或指定表。

语法

FLOCK([nWorkArea | cTableAlias])

参数

nWorkArea

指定表所在的工作区，FLOCK( ) 函数对此表进行锁定。

如果指定工作区没有打开的表，FLOCK( ) 函数的返回值为“假”(.F.)。

cTableAlias

指定待锁定表的别名。

如果指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

逻辑型

说明

如果成功锁定该表，FLOCK( ) 函数返回“真”(.T.)；而当该表或表中的某个记录已经被另一用户锁定，FLOCK( ) 函数返回“假”(.F.)。

如果省略可选参数，FLOCK( ) 函数对当前选定工作区中的已打开表进行锁定。

附注

如果 FLOCK( ) 函数锁定表的操作失败，返回“假”(.F.)，但并不产生错误信息。因此，FLOCK( ) 函数不触发 ON ERROR 例程。

当某个表被锁定时，对表加锁的用户可以对此表进行读和写访问，网络上的其他用户则只能对此表进行只读访问。有关如何锁定一个表并禁止其他用户访问该表的详细内容，请参阅 SET EXCLUSIVE 和 USE。

对于锁定的表，只有加锁的用户才能解锁。可以通过执行 UNLOCK 命令、关闭该表或退出 Visual FoxPro 来解锁锁定的表。使用 USE、CLEAR ALL 或 CLOSE DATABASES 命令可以关闭表。

默认情况下，FLOCK( ) 函数对一个表只进行一次锁定尝试，使用 SET REPROCESS 可以在第一次尝试失败后自动重试对表的锁定操作。SET REPROCESS 可以给定尝试加锁的次数，也可以给定在初次锁定操作不成功时，加锁尝试持续的时间。有关详细内容，请参阅 SET REPROCESS。

可以用 SET RELATION 命令在两个或更多的表之间建立关系。如果某个表与一个或多个表相关，则在此表上设置文件锁定并不会引起在相关表上设置文件锁定。必须在相关表上明确设置文件锁或移去文件锁。

对记录和文件加锁以及通过网络共享表的详细内容，请参阅《开发指南》的第十九章“共享访问程序设计”。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 products 表

SET REPROCESS TO 3 SECONDS

SELECT * FROM products INTO TABLE newprods

IF FLOCK( )

*** 初始化 ***

REPLACE ALL in_stock  WITH 0.00

REPLACE ALL on_order WITH 0.00

WAIT 'Initialization Complete' WINDOW NOWAIT

ELSE

*** 文件已锁定，警告用户 ***

WAIT WINDOW 'Unable to open products file; try again later!' NOWAIT

ENDIF

BROWSE FIELDS in_stock, on_order && 显示 newprods 表

USE

ERASE newprods.dbf


请参阅

LOCK( ), RLOCK( ), SET REPROCESS, SET RELATION, UNLOCK, USE, SET EXCLUSIVE


FLOOR( ) 函数

请参阅	示例

对于给定的数值型表达式值，返回小于或等于它的最大整数。

语法

FLOOR(nExpression)

参数

nExpression

指定数值型表达式，FLOOR( ) 函数返回小于或等于此数值型表达式值的最大整数。

返回值类型

数值型


STORE  10.9 TO gnNumber1

STORE -10.1 TO gnNumber2

CLEAR

? FLOOR(gnNumber1)  && 显示 10

? FLOOR(gnNumber2)  && 显示 -11

? FLOOR(10.0)  && 显示 10

? FLOOR(-10.0)  && 显示 -10


请参阅

CEILING( ), INT( ), ROUND( )


FLUSH 命令

请参阅

将对表和索引所作的修改存入磁盘。

语法

FLUSH

说明

FLUSH 命令确保对所有打开表和索引的修改都存入磁盘。

在下列情况下，Visual FoxPro 自动保存所做修改：

 •	   用 USE、CLOSE ALL 或 CLOSE DATABASES 命令关闭表。只有被关闭文件的有关信息存入磁盘。

 •	   对记录或文件解锁。只有被解锁记录或文件的信息存入磁盘。


请参阅

CLOSE DATABASES, FFLUSH( ), SET AUTOSAVE


Fonts 概述
Fonts（字体）概述

请参阅

Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 可以使用以前安装的字体。字体决定了文字显示或打印的外观，另外，还决定控制的位置与大小。

控制的大小和位置

在 Visual FoxPro 中，表单的 ScaleMode 属性决定了表单上控制的大小和位置。如果 ScaleMode 设置为“象素”(3)，则以象素为单位指定控制的大小；如果 ScaleMode 设置为“Foxel”(0)，则控制的大小由表单的当前字体和字体大小决定。

Foxel 是 Visual FoxPro 的术语，它与当前字体中字符的最大高度及平均宽度相对应。行的高度与当前字体中字母的最大高度相对应，而列的宽度与当前字体中字母的平均宽度相对应。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，可使用小数指定行坐标和列坐标，以精确定位控制和输出。在 FoxPro for MS-DOS 中，则忽略小数部分。

在 FoxPro for Windows 和 FoxPro for Macintosh 中，创建控制时如果选用 FONT 子句，FONT 子句中指定的字体大小将决定控制的大小；如果省略 FONT 子句，则控制的父窗口字体将决定此控制的大小。如果控制放置在 FoxPro 主窗口内，则该控制的父窗口为 FoxPro 主窗口；如果控制放置在用户自定义窗口内，此窗口即为控制的父窗口。

在 Visual FoxPro 中，要确定或更改 Visual FoxPro 主窗口的字体，可以按住 SHIFT 键激活“格式”菜单，然后选择“屏幕字体”选项。在使用 DEFINE WINDOW 命令创建此窗口时，用户自定义窗口可以包含 FONT 子句来指定字体。

在 FoxPro for Windows 和 FoxPro for Macintosh 中，要确定或更改 FoxPro 主窗口的字体，可按 SHIFT 键激活“文本”菜单，然后选择“屏幕字体”选项。

字体替代

在 Visual FoxPro 和 FoxPro for Windows 中，如果指定的字体无效，Windows 将用具有相似字体特征的字体来代替，同时考虑所选字体的磅值大小、衬线特征和间距。TrueType 字体是典型的代用字体。只有当光栅字体或矢量字体的特征与请求字体特征非常匹配时，才用光栅字体或矢量字体替代。

在 FoxPro for Machtosh 中，如果指定的字体无效，则用相同磅值的 Chicago 字体代替；如果指定的字体大小不存在，Macintosh 将合成所指定的字体大小。

字体函数

有若干个函数可返回字体信息或关于特定字体的文本信息。

这些函数包括：

AFONT( )	将可用字体的信息放置在一个数组中。
FONTMETRIC( )	返回已安装字体的字体属性。
GETFONT( )	显示“字体”对话框并返回选定字体的名称。
SYSMETRIC( )	返回某一显示元素的大小。
SCOLS( )	返回 Visual FoxPro 主窗口可用的列数。 当在 Visual FoxPro 主窗口内居中对齐文本或控制时，此函数有用。
SROWS( )	返回 Visual FoxPro 主窗口可用的行数。 当在 Visual FoxPro 主窗口内居中对齐文本或控制时，此函数有用。
WCOLS( )	返回指定窗口中的列数。 当在用户自定义窗口内居中对齐文本或控制时，此函数有用。
WFONT( )	返回窗口当前字体的名称、大小或字形。
WROWS( )	返回指定窗口中的行数。 当在用户自定义窗口居中对齐文本或控制时，此函数有用。


请参阅

AFONT( ), FONTMETRIC( ), GETFONT( ), SYSMETRIC( ), ScaleMode 属性, SCOLS( ), SROWS( ), WCOLS( ), WFONT( ), WROWS( )


FontBold, FontItalic, FontStrikethru, FontUnderline 属性

请参阅

指定文本是否具有下列效果：粗体，斜体，删除线或下划线。

应用于

复选框，列，组合框，命令按钮，编辑框，表单，表格，标头，标签，列表框，选项按钮，页面，_SCREEN，微调，文本框

附注

页框对象不使用 FontBold 属性。

语法

Object.FontBold[ = lExpr]
Object.FontItalic[ = lExpr]
Object.FontStrikeThru[ = lExpr]
Object.FontUnderline[ = lExpr]

设置

lExpr

字体属性的设置有：

设置	说明
“真”(.T.)	字体效果为粗体、斜体、删除线或下划线。
“假”(.F.)	（默认值，但 FontBold 属性除外）字体效果不是粗体、斜体、删除线或下划线
说明

设计和运行时均可用。

通常在使用 FontSize、FontBold、FontItalic、FontStrikethru 和 FontUnderline 属性设置字体大小与字形之前，先设置 FontName 属性。不过，当设置小于 8 磅的 TrueType 字体时，应该先设置 FontSize 属性的磅值大小，然后设置 FontName 属性，最后重新设置 FontSize 属性的磅值大小。当 TrueType 字体小于 8 磅时，Windows 环境使用另一种不同的字体。

附注

可用字体随系统配置、显示设备和打印设备的不同而不同，与字体相关的属性只能根据字体的实际情况进行设置。


请参阅

FontName 属性, FontSize 属性, SetAll 方法


FontCondense, FontExtend 属性

指定文本是否具有紧缩或扩展样式。这些属性保留下来供以后使用。


FONTMETRIC( ) 函数

请参阅

返回当前操作系统已安装字体的字体属性。

语法

FONTMETRIC(nAttribute [, cFontName, nFontSize [, cFontStyle]])

参数

nAttribute

确定 FONTMETRIC( ) 函数返回的字体属性。如果省略 cFontName、nFontSize 和 cFontStyle 选项，FONTMETRIC( ) 函数将返回活动输出窗口当前字体的属性。

下表列出 nAttribute 的值与返回的相应字体属性。

nAttribute	属性
1	以象素为单位的字符高度
2	以象素为单位的字符提升值（高于基线的象素数）
3	以象素为单位的字符降低值（低于基线的象素数）
4	以象素为单位表示的前导空间（线条的间距）
5	以象素为单位的附加前置空间*
6	以象素为单位的字符平均宽度
7	以象素为单位的字符最大宽度
8	字体灰度。在 FoxPro for Macihtosh 中，对于粗体字体，返值为 700，而对于其他字体，返值为 400。
9	斜体（0 为否，非 0 为是）
10	下划线（0 为否，非 0 为是）
11	删除线（0 为否，非 0 为是）
12	字体中定义的第一个字符
13	字体中定义的最后一个字符
14	默认字符（替代字体中没有的字符）*
15	断字符。FoxPro for Macintosh 总是返回 32，对应非符号字体中的空格。
16	间距和族*
17	字符集*
18	突出（额外增加的宽度）*
19	水平方向字体的设备
20	垂直方向字体的设备
* 这些属性不适用于 FoxPro for Macintosh，返回值总为 0。
有关 FONTMETRIC( ) 函数返回值的详细内容，请参阅《Microsoft Windows 程序员参考手册》中的 TEXTMETRIC 函数。

cFontName

指定一个已安装字体的名称。

nFontSize

指定字体 cFontName 的磅值大小。

cFontStyle

指定字体 cFontName 的字形。如果省略 cFontStyle 选项，FONTMETRIC( ) 函数返回“常规”字体的属性。

cFontStyle 可以是下面字形表中列出的字符或字符组合。例如，字符组合 BI 指定了粗斜体字形。

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
返回值类型

数值型

说明

可用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

FONTMETRIC( ) 函数返回活动输出窗口当前字体的属性，可使用 WFONT( ) 函数确定当前窗口的字体。

有关在 Microsoft Windows 中安装或删除字体的详细内容，请参阅《Microsoft Windows 用户手册》的“控制面板”一章。

有关在 Macintosh 中安装或移去字体的详细内容，请参阅《Macintosh 用户指南》的“打印”一章。


请参阅

AFONT( ), 字体概述, GETFONT( ), SYSMETRIC( ), TXTWIDTH( ), WFONT( )


FontName 属性

请参阅

指定显示文本的字体名。

应用于

复选框，列，组合框，命令按钮，编辑框，表单，表格，标头，标签，列表框，选项按钮，页面，_SCREEN，微调，文本框

语法

Object.FontName[ = cName]

设置

cName

指定字体的名称，默认值为 Arial。

说明

设计和运行时均可用。

FontSize 默认的设置是 10 磅。系统配置不同，可用的字体也不同。与字体相关的属性只能被设置为与该字体相关的值。在设计时，当在“属性”窗口中选定 FontName 属性，并单击“属性设置”框右侧的下箭头时，将显示可用字体列表。

一般情况下，在用 FontSize、FontBold、FontItalic、FontStrikethru 和 FontUnderline 这些属性设置字体的大小或字形之前，先设置 FontName 属性。


请参阅

FontBold 属性, FontItalic 属性, FontStrikethru 属性, FontUnderline 属性, FontSize 属性


FontOutline 属性

请参阅

指定与某个控制相关的文本是否加上轮廓。包含此命令是提供对 FoxPro for Macintosh 的向后兼容性。

应用于

复选框，列，组合框，命令按钮，编辑框，表单，表格，标头，标签，列表框，选项按钮，页面，_SCREEN，微调，文本框

语法

Control.FontOutline[ = lExpr]

设置

lExpr

FontOutline 属性的设置有：

设置	说明
“真”(.T.)	给与控制相关的文本加上轮廓。
“假”(.F.)	（默认值）与控制相关的文本不加轮廓。
说明

设计和运行时均可用。


请参阅

FontShadow 属性


FontShadow 属性

请参阅

指定与某个控制相关的文本是否加上阴影。包含此命令是为了提供对 FoxPro for Macintosh 的向后兼容性。

应用于

复选框，列，组合框，命令按钮，编辑框，表单，表格，标头，标签，列表框，选项按钮，页面，_SCREEN，微调，文本框

语法

Control.FontShadow[ = lExpr]

设置

lExpr

FontShadow 属性的设置有：

设置	说明
“真”(.T.)	给与控制相关的文本加上阴影。
“假”(.F.)	（默认值）与控制相关的文本不加阴影。
说明

设计和运行时均可用。


请参阅

FontOutline 属性


FontSize 属性

请参阅

指定对象文本的字体大小。

应用于

复选框，列，组合框，命令按钮，编辑框，表单，表格，标头，标签，列表框，选项按钮，页面，_SCREEN，微调，文本框

语法

Object.FontSize[ = nSize]

设置

nSize

以磅为单位指定字体大小，默认值为 10 磅。

说明

设计和运行时均可用。

nSize 的最大值是 2048 磅。72 磅相当于 1 英寸。

一般情况下，在用 FontSize、FontBold、FontItalic、FontStrikethru 和 FontUnderlined 属性设置字体的大小和字形之前，先设置 FontName 属性。不过在设置小于 8 磅的 TrueType 字体时，应该先设置 FontSize 属性，然后设置 FontName 属性，最后重新设置 FontSize 属性。当 TrueType 字体小于 8 磅时，Windows 环境使用另一种不同的字体。

附注

可用字体随系统配置和打印设备的不同而不同。与字体相关的属性只能根据字体的实际情况进行设置。


请参阅

FontBold 属性, FontItalic 属性, FontStrikethru 属性, FontUnderline 属性


FOPEN( ) 函数

请参阅	示例

打开文件或通信端口，供低级文件函数使用。

语法

FOPEN(cFileName [, nAttribute])

参数

cFileName

指定要打开的文件或通信端口的名称。cFileName 中可包含 Visual FoxPro 搜索路径中未指定的驱动器名、目录名或文件夹。如果不含路径，Visual FoxPro 将在以下位置搜索文件：

 •	   默认目录

 •	   SET PATH 命令建立的路径。

在 FoxPro for MS-DOS 中，如果 cFileName 是通信端口的名称，该端口必须先用 MS-DOS 的 MODE 命令初始化，然后指定此端口的名称，如 COM1 或 COM2。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，端口不能用低级文件函数打开。

nAttribute

指定打开文件的读写权限或缓冲方案，下表列出可包含在 nAttribute 中的数字及其相应的文件读写权限和缓冲方案。

nAttribute	读写权限	缓冲／非缓冲
0	（默认值）只读	缓冲
1	只写	缓冲
2	读写	缓冲
10	只读	非缓冲
11	只写	非缓冲
12	读写	非缓冲
如果不包含 nArribute 或 nAttribute 等于 0，则以缓冲方式用只读权限打开文件。通信端口总是以非缓冲方式打开。

返回值类型

数值型

说明

不能在 Visual FoxPro、FoxPro for Windows 或 FoxPro for Macintosh 中打开通信端口。

如果 FOPEN( ) 函数成功地打开文件或通信端口，则函数返回文件或端口的文件句柄号；如果文件或端口无法打开，则 FOPEN( ) 函数返回 1。

提示

可以把文件句柄号赋给某个内存变量，从而在其他低级文件函数中通过这个内存变量访问相应文件或通信端口。

可以使用 DISPLAY STATUS 或 LIST STATUS 命令显示、打印有关 FOPEN( ) 函数打开的文件的信息：

 •	   驱动器、目录及文件名

 •	   文件句柄号

 •	   文件指针位置

 •	   读写属性


IF FILE('errors.txt')  && 文件存在吗?

gnErrFile = FOPEN('errors.txt',12)  && 如果存在，以读写方式打开

ELSE

gnErrFile = FCREATE('errors.txt')  && 如果不存在，创建文件

ENDIF

IF gnErrFile < 0  && 检查文件打开时的错误

WAIT 'Cannot open or create output file' WINDOW NOWAIT

ELSE  && 如果没有错误，则写文件

=FWRITE(gnErrFile, 'Error information to be written here')

ENDIF

=FCLOSE(gnErrFile)  && 关闭文件

MODIFY FILE errors.txt NOWAIT  && 在编辑窗口中打开文件


请参阅

CLOSE ALL, FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FPUTS( ), FREAD( ), FSEEK( ), FWRITE( )


FOR ... ENDFOR 命令

请参阅	示例

按指定的次数重复执行一组命令。

语法

FOR MemVarName = nInitialValue TO nFinalValue [STEP nIncrement]
Commands
[EXIT]
[LOOP]
ENDFOR | NEXT

参数

MemVarName

指定作为计数器的内存变量或数组元素。在 FOR ... ENDFOR 语句执行之前，此内存变量或数组元素不一定存在。

nInitialValue TO nFinalValue

nInitialValue 是计数器的初始值，而 nFinalValue 是计数器的最终值。

STEP nIncrement

nIncrement 是计数器递增或递减的步长。如果 nIncrement 为负，则计数器递减；如果省略 STEP 子句，计数器每次的增量为 1。

Commands

指定要执行的 Visual FoxPro 命令，Commands 可以包含任意数目的命令。

EXIT

在 FOR ... ENDFOR 循环中，将控制权传递给紧接在 ENDFOR 后面的命令。可以在 FOR 与 ENDFOR 之间的任何地方放置 EXIT。

LOOP

将控制权直接返给 FOR 子句，不再执行 LOOP 与 ENDFOR 之间的语句。计数器正常递增或递减，就象执行到 ENDFOR 一样。可以在 FOR 与 ENDFOR 之间的任何地方放置 LOOP。

说明

可以用内存变量或数组元素作为计数器，指定 FOR ... ENDFOR 循环中 Visual FoxPro 命令的执行次数。

在遇到 ENDFOR 或 NEXT 之前，始终执行 FOR 后面的 Visual FoxPro 命令。执行过程中，每循环一次，计数器 MemVarName 都会递增，增量为 nIncrement（如果省略 STEP 子句，则计数器每次的增量为 1），然后把计数器的值与 nFinalValue 作比较。如果计数器的值小于或等于 nFinalValue，将再次执行 FOR 语句后的命令；如果计数器的值大于 nFinalValue，则退出 FOR ... ENDFOR 循环，程序继续执行 ENDFOR 或 NEXT 之后的第一条命令。

附注

nInitialValue、nFinalValue 和 nIncrement 只能是初次读入的值。在循环过程中更改计数器 MemVarName 的值将影响循环的执行次数。

如果 nIncrement 为负，且初始值 nInitialValue 大于最终值 nFinalValue，则每经过一次循环，计数器都将递减。


* 在示例 1 中，显示数字 1 到 10。

* 示例 2 使用内存变量作为初始值、最终值和 STEP 值，显示
*  customer 表 2 号到 10 号记录中所有记录号为偶数的记录。

* Example 1

CLEAR

FOR gnCount = 1 TO 10

? gnCount

ENDFOR

* Example 2

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

STORE 2 TO gnI  && 初始值

STORE 10 TO gnJ  && 最终值

STORE 2 TO K  && 步长

FOR gnCount = gnI TO gnJ STEP K

GOTO gnCount  && 移动记录指针

DISPLAY company && 显示公司名

ENDFOR


请参阅

DO CASE ... ENDCASE, DO WHILE ... ENDDO, IF ... ENDIF, SCAN ... ENDSCAN


FOR( ) 函数

请参阅

返回一个已打开的单项索引文件或索引标识的索引筛选表达式。

语法

FOR([nIndexNumber [, nWorkArea | cTableAlias]])

参数

如果不包含任何可选参数，FOR( ) 函数将返回主控索引文件或主控索引标识的索引筛选表达式。如果主控索引文件或主控索引标识不发生作用（例如，已经发出 SET ORDER TO 命令，使表中记录按物理记录次序排列），FOR( ) 函数将返回空字符串。

nIndexNumber

指定返回筛选表达式的索引文件或索引标识。nIndexNumber 从 1 开始递增，直至等于已打开的单项索引文件、结构复合索引标识及独立复合索引标识的总数，在此过程中，FOR( ) 函数将按下列顺序返回筛选表达式：

1.	返回单项索引文件（如果已打开）的筛选表达式，在 USE 或 SET INDEX 中包含的单项索引文件顺序决定了筛选表达式返回的顺序。

2.	返回结构复合索引（如果存在）中每一标识的筛选表达式，标识的筛选表达式按照在结构索引中创建标识的顺序返回。

3.	返回所有打开的独立复合索引中各个标识的筛选表达式，标识的筛选表达式将按照在独立的复合索引中创建标识的顺序返回。

如果创建索引或索引标识时没有使用 FOR 子句，或 nIndexNumber 大于打开的单项索引文件、结构复合索引标识和独立复合索引标识的总数，函数将返回空字符串。

nWorkArea

指定表所在的工作区，FOR( ) 函数返回该表的索引筛选表达式。

如果在指定工作区中没有打开的表，FOR( ) 函数返回空字符串。

cTableAlias

指定表的别名，FOR( ) 函数返回其索引筛选表达式。

如果指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

字符型

说明

在 Visual FoxPro 中可以创建筛选索引。如果在 INDEX 命令中包含可选的 FOR lExpression 子句，索引文件将成为表的筛选器。只能显示和访问与筛选表达式 lExpression 匹配的记录，而且在索引文件中只对与筛选表达式匹配的记录创建索引关键字。

USE 和 SET INDEX 命令都支持多个索引文件的列表，为一个表打开多个索引文件。索引文件名的列表中可以包含单项索引文件名、结构复合索引文件名或独立复合索引文件名的任意组合。FOR( ) 函数与 SYS(2021) 函数等价，并且具有同 dBASE IV 的兼容性。


请参阅

INDEX


Form 对象
Form（表单）对象

请参阅	属性	事件	方法

创建表单。

语法

Form

说明

使用 Form 对象可以创建能向其中添加控制的表单，您也可以使用表单设计器创建表单。表单属性决定了表单的外观（如位置、大小和颜色）及特性（例如是否可调整）。

表单还可以对用户启动或系统触发的事件作出响应。例如可以在表单的 Click 事件过程中编写程序，从而在单击表单时，更改表单的颜色。

除了属性和事件之外，还可以使用方法操作表单。例如，可以使用 Move 方法更改表单的位置和大小。

在设计表单时，可使用 BorderStyle 属性指定表单的边框，使用 Caption 属性指定标题栏的文本。BorderStyle 为 0 时移去边框。在程序中可以使用 Hide 和 Show 方法，使表单在运行时透明或可见。

有关创建表单的详细内容，请参阅创建表单，及《开发指南》的第九章“创建表单”。


 属性

ActiveControl

ActiveForm

AlwaysOnTop

AutoCenter

BackColor

BaseClass

BorderStyle

BufferMode

Caption

Class

ClassLibrary

ClipControls

Closable

Comment

ControlBox

ControlCount

Controls

CurrentX

CurrentY

DataEnvironment

DataSession

DataSessionID

DefOLELCID 属性

Desktop

DrawMode

DrawStyle

DrawWidth

Enabled

FillColor

FillStyle

FontBold

FontItalic

FontName

FontOutline

FontShadow

FontSize

FontStrikeThru

FontUnderline

ForeColor

HalfHeightCaption

Height

HelpContextID

Icon

KeyPreview

Left

LockScreen

MaxButton

MaxHeight

MaxLeft

MaxTop

MaxWidth

MDIForm

MinButton

MinHeight

MinWidth

MousePointer

Movable

Name

Parent

ParentClass

Picture

ReadObject

ReleaseType

ScaleMode

ShowTips

TabIndex

TabStop

Tag

Top

Visible

Width

WindowState

WindowType


 事件

Activate	Click	DblClick
Deactivate	Destroy	DragDrop
DragOver	Error	GotFocus
Init	KeyPress	Load
LostFocus	MouseDown	MouseMove
MouseUp	Moved	Paint
QueryUnload	Resize	RightClick
Unload


 方法

AddObject	Box	Circle
Cls	Draw	Hide
Line	Move	Point
Print	PSet	ReadExpression
ReadMethod	Refresh	Release
RemoveObject	SaveAs	SaveAsClass
SetAll	Show	TextHeight
TextWidth	WriteExpression	WriteMethod
ZOrder


请参阅

CREATE CLASS, CREATE FORM, DEFINE CLASS, 表单集对象


Format 属性

请参阅

指定某个控制的 Value 属性的输入和输出格式。

应用于

编辑框，微调，文本框

语法

Control.Format[ = cFunction]

设置

cFunction

指定数据输入的限制条件和显示的格式。cFunction 的设置有：

设置	说明
A	只允许字母字符（不允许空格或标点符号）。
D	使用当前的 SET DATE 格式。
E	以英国日期格式编辑日期型数据。
K	当光标移动到文本框上时，选定整个文本框。
L	在文本框中显示前导零，而不是空格。只对数值型数据使用。
M	允许多个预设置的选择项。选项列表存储在 InputMask 属性中，列表中的各项用逗号分隔。列表中独立的各项不能再包含嵌入的逗号。如果文本框的 Value 属性并不包含此列表中的任何一项，则它被设置为列表中的第一项。此设置只用于字符型数据，且只用于文本框。
R	显示文本框的格式掩码，掩码字符并不存储在控制源中。此设置只用于字符型或数值型数据，且只用于文本框。
T	删除输入字段前导空格和结尾空格。
!	把字母字符转换为大写字母。只用于字符型数据，且只用于文本框。
^	使用科学记数法显示数值型数据，只用于数值型数据。
$	显示货币符号，只用于数值型数据或货币型数据。
说明

设计和运行时可用。

Format 属性与 @ ... GET 和 @ ... EDIT 命令中 FUNCTION 子句作用相类似。

Format 属性指定整个输入区域的特性。可以组合使用多个格式代码，它们对输入区域的所有输入都有影响。这个属性与 InputMask 属性形成对照，后者中每种输入掩码对应输入域中的一个输入项。


请参阅

InputMask 属性


FormCount 属性

请参阅

存放表单集中的表单对象的数目。

应用于

表单集，_SCREEN

语法

Object.FormCount

说明

设计时不可用，运行时只读。

可利用这个属性循环遍历表单集中的所有表单，并执行某些操作。


请参阅

Forms 属性


Forms 属性

请参阅

访问表单集中单个表单对象的数组。

应用于

表单集，_SCREEN

语法

Object.Forms( nIndex)

设置

nIndex

唯一标识表单集中的一个表单对象。

说明

设计时不可用，运行时只读。

利用 Forms 属性，不使用表单的 Name 属性也可以更改表单集中表单的属性设置。可以把 Forms 属性与 FormCount 属性结合起来，遍历表单集中的所有表单，并执行某种操作。例如，下面的程序更改表单集中所有表单的标题：

FOR x = 1 TO THISFORMSET.FormCount

THISFORMSET.Forms(x).Caption = THISFORMSET.Forms(x).Caption;

+ "[Read Only]"

ENDFOR


请参阅

FormCount 属性


FormSet 对象
FormSet（表单集）对象

请参阅	属性	事件	方法

创建表单集。

语法

FormSet

说明

表单集是一个容器对象，可包含一组表单。表单集类似于 FoxPro 早期版本使用的屏幕集。

有关创建表单集的详细内容，请参阅创建新表单集，及《开发指南》的第九章“创建表单”。


 属性

ActiveForm	AutoRelease	BaseClass
Buffermode	Class	ClassLibrary
Comment	DataEnvironment	DataSession
DataSessionID	FormCount	Forms
Name	ParentClass	ReadBackColor
ReadCycle	ReadForeColor	ReadLock
ReadMouse	ReadObject	ReadSave
ReadTimeOut	Visible	WindowList
WindowType


 事件

Activate	Deactivate	Destroy
Error	Init	Load
ReadActivate	ReadDeactivate	ReadShow
ReadValid	ReadWhen	Unload


 方法

AddObject	Hide	Init
ReadExpression	ReadMethod	Refresh
Release	RemoveObject	SaveAs
SaveAsClass	SetAll	Show
WriteExpression	WriteMethod


请参阅

CREATE CLASS, CREATE FORM, DEFINE CLASS, 表单对象


FOUND( ) 函数

请参阅	示例

如果 CONTINUE、FIND、LOCATE 或 SEEK 命令执行成功，函数的返回值为“真”(.T.)。

语法

FOUND([nWorkArea | cTableAlias])

参数

nWorkArea

指定表所在的工作区。FOUND( ) 函数的返回值指明此表最近一次的 CONTINUE、FIND、LOCATE 或 SEEK 命令是否执行成功。

如果在指定工作区中没有打开的表，FOUND( ) 函数的返回值为“假”(.F.)。

cTableAlias

指定表的别名。FOUND( ) 函数的返回值指明此表最近一次的 CONTINUE、FIND、LOCATE 或 SEEK 命令是否执行成功。

如果所指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

逻辑型

说明

FOUND( ) 函数返回一个逻辑值，指明最近执行的 CONTINUE、FIND、LOCATE 或 SEEK 命令是否成功，或指明记录指针在相关表中是否移动。如果搜索成功，FOUND( ) 函数的返回值为“真”(.T.)，否则为“假”(.F.)。

如果省略可选参数，FOUND( ) 函数的操作对象是当前选定工作区中打开的表，其返回值指明最近一次的 CONTINUE、FIND、LOCATE 或 SEEK 命令执行是否成功。

提示

这个函数可以用来判定子表是否有记录和父表的记录相匹配。


* 在下面的示例中，统计所有德国顾客的数量。

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

STORE 0 TO gnCount

LOCATE FOR UPPER(country) = 'GERMANY'

DO WHILE FOUND( )

gnCount = gnCount + 1

CONTINUE

ENDDO

WAIT WINDOW 'Total customers from Germany: ' ;

+ LTRIM(STR(gnCount)) NOWAIT


请参阅

CONTINUE, EOF( ), FIND, LOCATE, SEEK


_FOXDOC 系统内存变量

请参阅

在 FoxPro 早期版本中，此变量指定文档自动生成器 FoxDoc 的名称和位置。包含该变量是为了提供向后兼容性。可用“文档向导”代替。

语法

_FOXDOC = ProgramName

参数

ProgramName

指定为 FoxPro 早期版本中的 FoxPro 程序制作文档的应用程序。如果该应用程序在非当前目录下，则应该在应用程序名前加入路径。

有关为程序制作文档的详细内容，请参阅《开发指南》的第十五章“编译应用程序”。

说明

在 FoxPro 早期版本中，_FOXDOC 的默认值为 FOXDOC.APP。

如果在安装补充程序时选择“安装 FoxDoc”，则 FoxDoc 及其相关文件将安装在 FoxPro 目录下；如果重命名 FOXDOC.APP，或把 FoxDoc 及其相关文件移动到另一目录下，请在 _FOXDOC 中存储新的 FOXDOC.APP 文件名及所在的目录名。


请参阅

_BEAUTIFY


_FOXGRAPH 系统内存变量

请参阅

指定可选图形软件包 FoxGraph 的名称和位置，包含此变量是为了提供向后兼容性。可用图形向导代替。

语法

_FOXGRAPH = ProgramName

参数

ProgramName

当从“程序”菜单上选择“图形”菜单项，或在“命令”窗口中发出 FOXGRAPH 命令时，指定所要执行的应用程序。如果此图形应用程序在非当前目录下，则应该在应用程序名前加入路径。

说明

仅用于 FoxPro for MS-DOS。

在 FoxPro for MS-DOS 中，_FOXGRAPH 的默认值为 FOXGRAPH.EXE。FoxGraph 及其相关文件安装在 FoxPro 目录下。

如果把 FoxGraph 及其相关文件移到另一个目录下，请在 _FOXGRAPH 中存储新的 FOXGRAPH.EXE 及其位置。


请参阅

_GENGRAPH, _GENXTAB


FPUTS( ) 函数

请参阅

向低级文件函数打开的文件或通信端口写入字符串、回车符及换行符。

语法

FPUTS(nFileHandle, cExpression [, nCharactersWritten])

参数

nFileHandle

对 FPUTS( ) 函数要写入数据的文件或通信端口，指定文件句柄号。

cExpression

指定写入文件或端口的字符表达式。

nCharactersWritten

指定写入文件或端口的 cExpression 中的字符数目。

如果省略 nCharacterWritten 选项，FPUTS( ) 函数将把整个字符表达式 cExpression 写入文件或端口；如果包含 nCharacterWritten 选项，则向文件或端口写入 nCharacterWritten 个字符。如果 nCharacterWritten 小于 cExpression 中的字符数目，只向文件或端口中写入前 nCharacterWritten 个字符；如果 nCharacterWritten 等于或大于 cExpression 中的字符数目，则 cExpression 中所有字符都将写入文件或端口。

返回值类型

数值型

说明

FPUTS( ) 函数返回写入文件或端口的字节数。如果由于某种原因，FPUTS( ) 函数不能向文件或端口写入数据，其返回值为 0。


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FREAD( ), FSEEK( ), FWRITE( )


FREAD( ) 函数

请参阅	示例

从低级文件函数打开的文件或通信端口返回指定数目的字节。

语法

FREAD(nFileHandle, nBytes)

参数

nFileHandle

文件句柄号或要返回数据的通信端口。

nBytes

FREAD( ) 函数返回的字节数。FREAD( ) 从文件指针的当前位置开始，返回 nBytes 个字节的数据，或是遇到文件尾为止。

返回值类型

字符型


*下面的示例用 FREAD( ) 函数显示文件内容。如果文件为“空”，
* 则提示相应信息。

*** TEST.TXT 文件必须存在 ***

STORE FOPEN('test.txt') TO gnFileHandle  	&& 打开该文件

STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd 	&& 把指针移到 EOF

STORE FSEEK(gnFileHandle, 0) TO gnTop  && 把指针移到 BOF

IF gnEnd <= 0  && 文件“空”吗?

WAIT WINDOW 'This file is empty!' NOWAIT

ELSE  && 如果不“空”

gcString = FREAD(gnFileHandle, gnEnd)  && 读入内存

? gcString

ENDIF

= FCLOSE(gnFileHandle)  && 关闭该文件


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FSEEK( ), FWRITE( )


FREE TABLE 命令

请参阅

删除表中的数据库引用。

语法

FREE TABLE TableName

参数

TableName

指定要删除数据库引用的表的名称。

说明

如果从磁盘中意外地删除了某个数据库，那么原来此数据库中包含的表仍然保留对该数据库的引用。FREE TABLE 命令在打开该表或把此表添加到另一个数据库中的同时，可以从表中删除数据库引用。

附注

如果数据库在磁盘上仍然存在，则不能用 FREE TABLE 命令从该数据库中移去表。如果数据库在磁盘上存在，同时执行 FREE TABLE 命令，将可能无法使用该数据库，在这种情况下应该使用 REMOVE TABLE 命令。与 FREE TABLE 命令不同，REMOVE TABLE 命令移去与表相关的所有引用——从数据库到主索引、默认值以及有效性规则。


请参阅

ADD TABLE, CREATE DATABASE, OPEN DATABASE, REMOVE TABLE


FSEEK( ) 函数

请参阅	示例

在低级文件函数打开的文件中移动文件指针。

语法

FSEEK(nFileHandle, nBytesMoved [, nRelativePosition])

参数

nFileHandle

指定文件句柄，FSEEK( ) 函数移动句柄所对应的文件的指针。可以在创建或打开文件时，由 FCREATE( ) 函数或 FOPEN( ) 函数返回句柄号。

nBytesMoved

指定文件指针移动的字节数。如果 nByteMoved 为正，则文件指针向文件尾移动；如果 nByteMoved 为负，文件指针向文件头移动。

nRelativePosition

在文件中把文件指针移动到某个相对位置。默认情况下，文件指针相对于文件头移动，也可以包含 nRelativePosition 使文件指针相对于文件指针的当前位置或文件尾移动。下表列出了 nRelativePosition 可能的取值及相对应的文件指针移动的起始位置。

nRelativePosition	移动指针的相对起点
0	（默认值）文件头
1	文件指针当前位置
2	文件尾
返回值类型

数值型

说明

移动文件指针后，FSEEK( ) 函数返回从文件开始到文件指针位置的字节数。FREAD( ) 函数和 FWRITE( ) 函数也能够移动文件指针。


*  下面的用户自定义函数使用 FSEEK( ) 函数返回文件的大小。如果
*  不向此用户自定义函数传递参数，则函数返回 2；如果文件没有
*  找到，则此函数返回 1。

FUNCTION fsize2

PARAMETERS gcFileName  && 所要检查的文件

PRIVATE pnHandle,pnSize

IF PARAMETERS( ) = 0

RETURN -2  && 如果没有传递任何参数，返回 -2

ELSE

IF !FILE(gcFileName)

RETURN -1  && 如果文件不存在，返回 -1

ENDIF

ENDIF

pnHandle = FOPEN(gcFileName)	&& 打开文件

pnSize = FSEEK(pnHandle,0,2)	&& 确定文件大小，并赋值给 pnSize

=FCLOSE(pnHandle)  && 关闭文件

RETURN pnSize  && 返回值


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FWRITE( )


FSIZE( ) 函数

请参阅	示例

以字节为单位，返回指定字段或文件的大小。

语法

FSIZE(cFieldName [, nWorkArea | cTableAlias] | cFileName)

参数

cFieldName

指定字段名。

nWorkArea

指定表所在的工作区，FSIZE( ) 函数返回该表中某个字段的大小。

如果在指定工作区中没有打开的表，FSIZE( ) 函数的返值为 0。

cTableAlias

指定表的别名，FSIZE( ) 函数返回该表中某个字段的大小。

如果指定的表别名不存在，Visual FoxPro 将产生错误信息。

cFileName

指定文件名，FSIZE( ) 函数以字节为单位返回其大小。

返回值类型

数值型

说明

SET COMPATIBLE 的当前设置决定了 FSIZE( ) 函数返回的是字段大小还是文件大小。如果 SET COMPATIBLE 设置为 OFF 或 FOXPLUS（默认值），则 FSIZE( ) 函数返回字段大小；如果 SET COMPATIBLE 设置为 ON 或 DB4，则 FSIZE( ) 函数返回文件大小。

下表列出了各种字段类型的默认大小（以字节为单位）。

字段类型	默认的字段大小（以字节为单位）
货币型	8
日期型	8
日期时间型	14
双精度型	8
整型	4
逻辑型	1
备注型	4
通用型	4
可以使用 DISPLAY STRUCTURE 或 LIST STRUCTURE 命令显示字段大小。

如果省略可选参数 nWorkArea 和 cTableAlias，FSIZE( ) 函数将返回当前表和工作区中字段的大小。


* 下面的示例用 FSIZE( ) 函数返回 customer 表中两个字段的
*  大小。

SET COMPATIBLE OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

? FSIZE('contact')  && 显示 30

? FSIZE('cust_id')  && 显示 6


请参阅

DISPLAY STRUCTURE, FCOUNT( ), LIST


FTIME( ) 函数

请参阅	示例

返回最近一次修改文件的时间。

语法

FTIME(cFileName)

参数

cFileName

指定要返回最近修改时间的文件的名称。cFileName 可在文件名前加入路径。如果在文件名前不包含路径，Visual FoxPro 将在默认目录和 SET PATH 命令指定的目录下搜索文件。

返回值类型

字符型

说明

FTIME( ) 函数返回的时间值由操作系统指定给该文件。


*  下面的示例用 FTIME( ) 函数显示对 Visual FoxPro 的资源文件
*  FOXUSER.DBF 最近一次修改的时间。

? FTIME('FOXUSER.DBF')  && 显示最近一次修改时间


请参阅

FDATE( ), LUPDATE( )


FULLPATH( ) 函数

请参阅

返回指定文件的路径或相对于另一文件的路径。

语法

FULLPATH(cFileName1 [, nMSDOSPath | cFileName2])

参数

cFileName1

指定 Visual FoxPro 要搜索的文件，应包含文件扩展名。

如果文件在 Visual FoxPro 路径上，则该路径随文件名一起返回。Visual FoxPro 路径可以用 SET PATH 命令来指定。

nMSDOSPath

搜索 MS-DOS 路径，而不是 Visual FoxPro 路径，nMSDOSPath 可取任何数值。如果文件不在 MS-DOS 路径上，将象在当前默认目录下找到文件一样返回路径及文件名。

cFileName2

指定要搜索的第二个文件名，应包含文件扩展名。FULLPATH( ) 函数将返回第一个文件相对于第二个文件的路径。

返回值类型

字符型


请参阅

DBF( ), FILE( ), LOCFILE( ), SYS(2014) - 最小路径


FUNCTION 命令

请参阅	示例

定义一个用户自定义函数。

语法

FUNCTION FunctionName

参数

FunctionName

在 Visual FoxPro 中，函数名最长不超过 254 个字符；在 FoxPro for Windows 和 FoxPro for MS-DOS 中，函数名最长不超过 10 个字符。

在 FoxPro for Macintosh 中，函数名最长不超过 31 个字符；为了把包含 10 个以上字符的程序文件名与具有前 10 个相同字符的函数名区分开，可以把程序文件名用引号括起来，或在程序文件名后加上扩展名。

说明

许多程序中，都要经常重复运行若干例程。把公用例程定义为单独的函数可以减小程序的大小及其复杂性，也有利于程序的维护。

在程序中使用 FUNCTION FunctionName 语句，它指明程序中某个函数的开始，并用名称标识整个函数。

FUNCTION FunctionName 语句之后是组成该函数的一系列 Visual FoxPro 命令，可以使用 RETURN 作为函数的最后一行，但是如果不包含此命令，则自动执行一条隐含的 RETURN 语句。

下一条 FUNCTION 语句或者文件尾指示当前函数的结束。

如果发出 DO 命令时包含某个函数名，Visual FoxPro 将按下列顺序搜索该函数：

1.	Visual FoxPro 在包含 DO 命令的文件中搜索。

2.	如果在该文件中找不到此函数，Visual FoxPro 将在打开的过程文件中搜索。过程文件可通过 SET PROCEDURE 命令打开。

3.	如果在打开的过程文件中也找不到此函数，Visual FoxPro 将在执行链 (execution chain) 的各程序中搜索。首先搜索最近一次执行的程序，然后依次搜索，直到最开始执行的程序。

4.	如果仍未找到函数，Visual FoxPro 将搜索独立的程序。如果能够找到匹配的程序文件，则执行该程序，否则 Visual FoxPro 产生错误信息。

在 DO 命令中，包含 IN 子句可以执行指定文件中的函数。

默认情况下，参数以值传递方式传递给函数。有关以引用传递方式向函数传递参数的详细内容，请参阅 SET UDFPARMS。最多可以向函数传递 27 个参数。


*下面的示例创建了两个函数：LONGDATE 和 QUARTER。
*  LONGDATE 函数将日期型变量转换为适于在报表中使用的字符串，
*  QUARTER 函数根据传递的月份数返回季度值。这两个函数可用来
* 打印报表的标题。
*

SET CENTURY ON

@ 5,0 SAY longdate({02/16/95})

@ 6,5 SAY quarter(DATE( ))

FUNCTION longdate

PARAMETER mdate

RETURN CDOW(mdate) + ', ' + MDY(mdate)

FUNCTION quarter

PARAMETER qdate

DO CASE

CASE MONTH (qdate) > 9

RETURN 'Fourth Quarter'

CASE MONTH (qdate) > 6

RETURN 'Third Quarter'

CASE MONTH (qdate) > 3

RETURN 'Second Quarter'

OTHERWISE

RETURN 'First Quarter'

ENDCASE


请参阅

LPARAMETERS, PARAMETERS, PARAMETERS( ), PRIVATE, PROCEDURE, PUBLIC, RETURN, SET PROCEDURE, SET UDFPARMS, 处理用户自定义函数


FV( ) function
FV( ) 函数

请参阅	示例

返回一笔金融投资的未来值。

语法

FV(nPayment, nInterestRate, nPeriods)

参数

nPayment

指定固定的周期性付款金额（可以为正数或负数）。

nInterestRate

指定周期利率。如果已知年利率，但是每月付款一次，则 nInterestRate 等于年利率除以 12。

nPeriods

指定已经付款的周期数，FV( ) 函数假定周期性付款在每个周期末进行。

返回值类型

数值型

说明

FV( ) 函数按照不变复利计算一系列固定的周期性付款的未来值，未来值是所有已付款与利息之和。


STORE 500 TO gnPayment  && 每月付款

STORE .075/12 TO gnInterest	  && 7.5% 的年利率

STORE 48 TO gnPeriods  && 4 年(48 个月)

CLEAR

? FV(gnPayment, gnInterest, gnPeriods) 	&& 显示 27887.93


请参阅

CALCULATE, PV( )


FWRITE( ) 函数

请参阅

向低级文件函数打开的文件或通信端口写入字符串。

语法

FWRITE(nFileHandle, cExpression [, nCharactersWritten])

参数

nFileHandle

文件句柄号，或要写入字符串的通信端口。

cExpression

指定 FWRITE( ) 函数写入的字符表达式。

nCharactersWritten

除非包含 nCharacterWritten，否则 FWRITE( ) 函数向文件或端口写入整个字符表达式。当包含 nCharacterWritten 时，向文件或端口写入 nCharacterWritten 个字符。如果 nCharacterWritten 小于 cExpression 中字符的数目，只向文件或端口写入 nCharacterWritten 个字符；如果 nCharacterWritten 等于或大于 cExpression 中字符的数目，将把 cExpression 中的所有字符都写入文件或端口。

返回值类型

数值型

说明

与 FPUTS( ) 函数不同，FWRITE( ) 函数并不在字符串的尾部放置回车和换行符。

FWRITE( ) 函数返回向文件或端口写入的字节数。如果由于某种原因，FWRITE( ) 函数不能向该文件或端口写入数据，则函数的返回值为 0。


请参阅

FCHSIZE( ), FCLOSE( ), FCREATE( ), FEOF( ), FFLUSH( ), FGETS( ), FOPEN( ), FPUTS( ), FREAD( ), FSEEK( )


GATHER 命令

请参阅	示例

将当前选定表中当前记录的数据替换为某个数组、内存变量组或对象中的数据。

语法

GATHER FROM ArrayName | MEMVAR | NAME ObjectName
[FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]
[MEMO]

参数

FROM ArrayName

指定一个数组，用它的数据替换当前记录中的数据。从数组的第一个元素起，各元素的内容依次替换记录中相应字段的内容。第一个数组元素的内容替换记录第一个字段的内容，第二个数组元素的内容替换记录第二个字段的内容，依此类推。

如果数组的元素少于表的字段数目，则忽略多余的字段。如果数组的元素多于表的字段数目，则忽略多余的数组元素。

MEMVAR

指定一组内存变量或数组，把其中的数据复制到当前记录中。内存变量的数据将传送给与此内存变量同名的字段。如果没有与某个字段同名的内存变量，则不替换此字段。

提示

在 SCATTER 命令中包含 MEMVAR 或 BLANK 子句，可以创建与字段同名的内存变量。

NAME ObjectName

指定某个对象，其属性与表的字段同名。每个字段的内容分别替换为与字段同名的属性的值。如果没有与某个字段同名的属性，则此字段的内容不做替换。

FIELDS FieldList

指定用数组元素或内存变量的内容替换字段的内容。只替换在 FieldList 中指定的字段的内容。

FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton

选用 LIKE 子句或 EXCEPT 子句，或者同时包含以上两个子句，可以有选择地将字段内容替换为数组元素或内存变量的内容。如果包含 LIKE Skeleton 子句，Visual FoxPro 将替换与 Skeleton 匹配的字段；如果包含 EXCEPT Skeleton 子句，Visual FoxPro 将替换与 Skeleton 不匹配的所有字段。

Skeleton 支持通配符（* 和 ?）。例如，要替换所有以字母 A 和 P 开头的字段，可使用下列命令：

GATHER FROM gamyarray FIELDS LIKE A*,P*

MEMO

指定用数组元素或内存变量的内容替换备注字段的内容。如果省略 MEMO 子句，则在用数组或内存变量的内容替换字段内容时， GATHER 命令将跳过备注字段。即使包含了 MEMO 关键字，GATHER 命令也忽略通用字段和图片字段。


* 下面的示例说明了 SCATTER 命令和 GATHER
* 命令的使用方法。SCATTER 命令将当前记录的数据复
* 制到内存变量中，此内存变量可以在窗口中显示
* 并编辑。当退出最后一个字段时，使用 GATHER 命令
* 将数据复制到当前记录中。

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Custmer 表

SCATTER MEMVAR

DEFINE WINDOW menter FROM 5,10 to 15,70 PANEL

ACTIVATE WINDOW menter

@ 1,3   SAY 'Customer: '	GET m.company

@ 3,3   SAY 'Address: '	 GET m.address

@ 7,13 SAY 'Press <Esc> to discard changes'

READ

IF LASTKEY( ) != 27

GATHER MEMVAR

ENDIF

DEACTIVATE WINDOW menter

USE


请参阅

APPEND FROM ARRAY, COPY TO ARRAY, DIMENSION, SCATTER


_GENGRAPH 系统内存变量

请参阅

指定应用程序，该程序用于向 Microsoft Graph（Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh ）或 FoxGraph (FoxPro for MS-DOS ) 中输出查询结果。包含此变量是为了提供向后兼容性。可用图形向导代替。

语法

_GENGRAPH = ProgramName

参数

ProgramName

指定用于向 Microsoft Graph 或 FoxGraph 中输出查询结果的 FoxPro 应用程序。如果此应用程序不在当前默认目录下，应在应用程序名前包含路径。

有关使用“查询设计器”创建查询的详细内容，请参阅 CREATE QUERY 和创建查询，或《用户指南》的第六章“查询数据”。

说明

在 FoxPro 的先前版本中，默认情况下，GENGRAPH 包含 GENGRAPH.APP。


请参阅

CREATE QUERY


_GENMENU 系统内存变量

请参阅

指定菜单生成程序。

语法

_GENMENU = ProgramName

参数

ProgramName

指定用来生成菜单代码的先前版本的程序。该程序从 .MNX 菜单定义表中生成菜单代码。如果此程序不在当前默认目录下，应该在程序名前包含路径。

说明

默认情况下，_GENMENU 中包含 GENMENU.PRG。


请参阅

CREATE MENU，_GENSCRN


_GENPD 系统内存变量

请参阅

为 FoxPro for MS-DOS 中创建的基于字符的报表指定打印机驱动接口程序。包含此变量是为了提供向后兼容性。在 REPORT 中使用 TO FILE ASCⅡ 参数。

语法

_GENPD = ProgramName

参数

ProgramName

指定打印机驱动接口程序。如果此程序不在当前目录下，应该在程序名前包含路径。

所指定的打印机驱动接口程序可以是任何形式的，但必须在第一行中包含 LPARAMETES 和 PARAMETERS 语句。Visual FoxPro 将向该程序传递两个参数：一个数值，以及打印机驱动程序设置的名称。

第一个参数可以是下列某一数值：

 •	   如果通过在“打印机设置”对话框中选定“打印机驱动程序设置”复选框，或发出 SET PDSETUP 命令，或在 _PDSETUP 变量中存储打印机驱动程序设置而执行打印机接口程序，Visual FoxPro 将把 0 传递给该程序。

 •	   如果在报表生成器的“布局”对话框或“标签设计器”的“标签环境”对话框中选定“设置打印机驱动程序”，Visual FoxPro 将把 2 传递给打印机驱动接口程序。

为了避免递归，最好测试传递给打印机驱动接口程序的数值参数。例如，可以在 _PDRIVER 变量中存储打印机驱动程序名，从而自动执行打印机驱动程序中的 PDONLOAD 过程。这个 PDONLOAD 过程执行打印机设置接口应用程序，并向此程序传递数值 1。

打印机设置接口应用程序测试该数值。如果该值为 1，则不应在 _PDRIVER 变量中再存储打印机驱动程序名。因为在这种情况下，如果仍在 _PDRIVER 变量中存储打印机驱动程序名，则再次自动执行 PDONLOAD，并再次执行打印机驱动接口程序，从而进入无限循环。

Visual FoxPro 向打印机驱动程序的接口程序传递的第二个参数是由 SET PDSETUP 命令指定或存储在 _PDSETUP 变量中的打印机驱动程序设置名称。如果在“打印机设置”对话框中选定“打印机驱动程序设置”复选框而执行打印机驱动接口程序，Visual FoxPro 将把问号 (?) 作为第二个参数传递给 _GENPD 变量中指定的程序。

说明

在FoxPro 先前的版本中，默认情况下，_GENPD 等于 GENPD.APP。

在 Visual FoxPro 中，应该在 REPORT 中使用 TO FILE ASCII 选项，打印 FoxPro for MS-DOS 中创建的基于字符的报表。如果在 REPORT 中省略 TO FILE ASCII 选项，Visual FoxPro 将使用 GENPD.APP。

在 FoxPro for Windows 中，只使用 GENPD.APP 打印 FoxPro for MS-DOS 中所创建的基于字符的报表。

在 FoxPro for Macintosh 中，打印 FoxPro for MS-DOS 中所创建的基于字符的报表，并不一定需要有打印机驱动接口程序。

在 FoxPro for MS-DOS 中，当选择下列某一操作时，将执行程序名存储于 _GENPD 变量中的程序：

 •	   在“打印机设置”对话框中选定“打印机驱动程序设置”复选框。

 •	   在报表书写器的“页面布局”对话框或“标签设计器”的“标签环境“对话框中选中“设置打印机驱动程序”复选框。

 •	   发出 SET PDSETUP 命令。

 •	   在 _PDSETUP 变量中存储一个打印机驱动程序设置名称。

 •	   在启动 Visual FoxPro 前指定默认的打印机设置。

附注

当把打印机驱动接口程序名保存于 _GENPD 时，如果不包含扩展名，Visual FoxPro 按照下面的顺序搜寻该程序的某个版本。如果找到，则执行。

1.	该程序的可执行版本 (.EXE)。

2.	该程序的应用程序版本 (.APP)。

3.	该程序的编译版本 (.FXP)。

4.	该程序 (.PRG)。


请参阅

REPORT, SET PRINTER


_GENSCRN 系统内存变量

请参阅

指定表单生成程序。包含此变量是为了提供向后兼容性。可用表单设计器代替。

语法

_GENSCRN = ProgramName

参数

ProgramName

指定先前版本中用来从 .SCX 文件生成表单代码的程序。如果此程序不在当前默认目录下，应该在程序名前包含路径。

说明

在 FoxPro 先前的版本中，默认情况下，_GENSCRN 包含 GENSCRN.PRG。


请参阅

CREATE SCREEN, _GENMENU


_GENXTAB 系统内存变量

请参阅

指定用来以交叉表格式输出查询结果的程序。包含此变量是为了提供向后兼容性。可用交叉表向导代替。

语法

_GENXTAB = ProgramName

参数

ProgramName

指定 Visual FoxPro 用来输出查询结果的程序。如果此程序不在当前默认目录下，应该在程序名前包含路径。

说明

在 FoxPro 先前的版本中，默认情况下，_GENXTAB 包含 GENXTAB.PRG。

在 Visual FoxPro 和 FoxPro for Macintosh 中，查询结果输出到 Microsoft Graph 中。

在 FoxPro for MS-DOS 中，查询结果输出到 FoxGraph、报表表单或带有交叉数据表格式的表中。


请参阅

CREATE QUERY, _GENGRAPH, SELECT - SQL


GETBAR( ) 函数

请参阅	示例

返回用 DEFINE POPUP 命令定义的菜单或 Visual FoxPro 系统菜单上某个菜单项的编号。

语法

GETBAR(MenuItemName, nMenuPosition)

参数

MenuItemName

指定菜单项。

nMenuPosition

指定菜单上的某一位置。nMenuPosition 取值范围为 1 到菜单中菜单项的数目。1 与菜单中的第一个菜单项相对应，而 2 与第二个菜单项相对应，依此类推。

返回值类型

数值型

说明

使用 GETBAR( ) 函数可以确定菜单特定位置上的菜单项。当在菜单中添加、删除或重新安排菜单项时，此函数很有用。使用 DEFINE BAR 命令可以向菜单中添加菜单项，用 RELEASE BAR 命令可从菜单中删除菜单项。用 DEFINE POPUP 命令创建菜单时，如果包含 MOVER 子句，则可以更改菜单项在菜单中的位置。


*下面的示例创建一个名为 popDemo 的菜单。
* 由于包含了 MOVER 关键字，可以重新安排
* 菜单项在菜单中的位置。有关重新安排菜单项位置的详细内容，
* 请参阅 DEFINE POPUP 的 MOVER 子句。

* 激活此菜单后，在 PRMBAR( ) 中用一系列
*  GETBAR( ) 函数返回每个菜单项的标题。重新安
* 排菜单项位置后，按 CTRL+Z 键以显示菜单项的新顺序。

CLEAR

ON KEY LABEL CTRL+Z DO showorder

WAIT WINDOW "Press CTRL+Z to refresh." NOWAIT

DEFINE POPUP popDemo MOVER FROM 2,2

DEFINE BAR 1 OF popDemo PROMPT 'One'

DEFINE BAR 2 OF popDemo PROMPT 'Two'

DEFINE BAR 3 OF popDemo PROMPT 'Three'

DEFINE BAR 4 OF popDemo PROMPT 'Four'

DO showorder

ACTIVATE POPUP popDemo

PROCEDURE showorder

CLEAR

@ 3,12 SAY  '1 ' + PRMBAR('popDemo', GETBAR('popDemo',1))

@ 4,12 SAY  '2 ' + PRMBAR('popDemo', GETBAR('popDemo',2))

@ 5,12 SAY  '3 ' + PRMBAR('popDemo', GETBAR('popDemo',3))

@ 6,12 SAY  '4 ' + PRMBAR('popDemo', GETBAR('popDemo',4))

RETURN


请参阅

DEFINE BAR, DEFINE POPUP, RELEASE BAR


GETCOLOR( ) 函数

请参阅	示例

显示 Windows 的“颜色”对话框，并返回选定颜色的颜色编号。

语法

GETCOLOR([nDefaultColorNumber])

参数

nDefaultColorNumber

指定显示“颜色”对话框时初始选定的颜色。如果 nDefaultColorNumber 不与“颜色”对话框中的任何颜色对应，则选择“颜色”对话框中的第一种颜色。如果省略 nDefaultColorNumber 参数，则选择黑色。

返回值类型

数值型

说明

如果按 ESC 键、选择“取消”按钮，或从“控制”菜单中选择“关闭”项退出“颜色”对话框时，GETCOLOR( ) 函数返回 -1。


* 下面的示例显示初始选择为红色的
*  Windows “颜色”对话框。当退出对话框时，
* 将显示所选定颜色对应的编号。

CLEAR

? GETCOLOR(255)  && 显示 Windows 的“颜色”对话框


请参阅

GETPICT( ), RGB( )


GETCP( ) 函数

请参阅	示例

显示“代码页”对话框，提示输入代码页，然后返回选定代码页的编号。

语法

GETCP([nCodePage] [, cDialogCaption] [, cDialogTitle])

参数

nCodePage

指定显示“代码页”对话框时初始选择的代码页编号。如果 nCodePage 等于 0，或者省略 nCodePage，当显示“代码页”对话框时，没有选定的代码页。

cDialogCaption

指定“代码页”对话框中显示的标题。如果省略 cDialogCaption，Visual FoxPro 则显示下列标题：“请选择代码页供跨平台数据共享”

cDialogTitle

指定“代码页”对话框标题栏上出现的标题。如果省略 cDialogTitle，则显示“代码页”。

返回值类型

数值型

说明

如果按 ESC 键、选择“取消”按钮，或从“控制”菜单上选择“关闭”项退出“代码页”对话框，GETCP( ) 函数返回 0。

在“代码页”对话框中列出的代码页由 FOXPRO.INT 决定，它是 Visual FoxPro 国际代码页支持文件。

可以在诸如 MODIFY COMMAND、APPEND FROM 和 COPY TO 等支持 AS nCodePage 子句的命令中包含 GETCP( ) 函数，此时将显示“代码页”对话框，并允许您为打开、追加或创建的文件指定代码页。因为不存在编号为 0 的代码页，所以在用户按 ESC 键、选择“取消”按钮或从“控制”菜单上选择“关闭”时，必须俘获 0 返回值。


* 下面的示例显示初始选择 1252 号代码页 (Windows ANSI)
* 的“代码页”对话框。“选择代码页”作为
* 此“代码页”对话框的标题显示，而“代码页选择”
* 在“代码页”对话框的标题栏中显示。

? GETCP(1252, "Select a Code Page", "Code Page Selection")


请参阅

APPEND FROM, COPY TO, EXPORT, IMPORT, MODIFY COMMAND, MODIFY FILE, MODIFY QUERY


GETDIR( ) 函数

请参阅

显示“选择目录”对话框，从中可以选择目录或文件夹。

语法

GETDIR([cDirectory [, cDialogCaption]])

参数

cDirectory

指定在“选择目录”对话框中初始显示的目录或文件夹。如果不指定 cDirectory，“选择目录”对话框打开时，将显示 Visual FoxPro 默认目录或文件夹。

cDialogCaption

指定“选择目录”对话框中目录或文件夹列表的标题。

返回值类型

字符型

说明

GETDIR( ) 函数返回字符串，其内容为选定目录或文件夹的名称。

如果没有选择目录或文件夹（选择“取消”、按 ESC 键或从控制菜单上选择“关闭”），GETDIR( ) 函数将返回空字符串。


请参阅

GETEXPR, GETFILE( )


GETENV( ) 函数

请参阅	示例

返回指定的 MS-DOS 环境变量的内容。

语法

GETENV(cVariableName)

参数

cVariableName

指定 MS-DOS 环境变量的名称。如果所指定的 MS-DOS 环境变量不存在，则返回空字符串。

在 Visual FoxPro 和 FoxPro for Windows 中，可以用 Windows 启动时设置的 WINDIR 环境变量放置 Windows 的目录。

返回值类型

字符型

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS。

有两个环境变量总是可用的：COMSPEC 和 PATH。您可以使用 MS-DOS 的 SET 命令创建自己的环境变量。

有关环境变量的其他内容，请参阅 MS-DOS 手册。

在 FoxPro for Macintosh 中，GETENV( ) 函数总是返回空字符串。


CLEAR

? GETENV('PATH')  && 显示 MS-DOS 路径


请参阅

DISKSPACE( ), OS( ), VERSION( )


GETEXPR 命令

请参阅	示例

显示表达式生成器对话框，从中可以创建表达式并把此表达式存储在内存变量或数组元素中。

语法

GETEXPR [cCaptionText] TO MemVarName
[TYPE cExpressionType [; cErrorMessageText]]
[DEFAULT cDefaultExpression]

参数

cCaptionText

指定在“表达式生成器”中显示的标题。该标题可提示用户生成何种类型的表达式。

TO MemVarName

指定存储表达式的内存变量或数组元素。如果此内存变量不存在，Visual FoxPro 将创建该变量。GETEXPR 命令不创建数组元素。

如果按 ESC 键或选择“取消”按钮退出“表达式生成器”，将在内存变量或数组元素中存储空字符串。如果已经用 DEFAULT 子句创建了某个默认表达式，在按 ESC 键或选择“取消”按钮退出“表达式生成器”时，将把这个默认表达式存储在内存变量中。

TYPE cExpressionType [; cErrorMessageText]

指定表达式类型。下表列出了在 cExpressionType 中用于指定各表达式类型的字符：

cExpressionType	表达式类型
C	字符型
D	日期型
T	日期时间型
N	数值型
F	浮点型
I	整型
B	双精度型
Y	货币型
L	逻辑型
可以指定当表达式无效时显示的错误信息 cErrorMessageText。如果同时包含 cErrorMessageText 和 cExpressionType，应该用分号（；）将它们分隔开。cExpressionType、分号以及 cErrorMessageText 的组合应该用成对的单引号或双引号括起来。

DEFAULT cDefaultExpression

在“表达式生成器”中显示初始的默认表达式。可以接受这个默认表达式，或用 cDefaultExpression 指定的表达式改写它。如果按 ESC 键或选择“取消”按钮退出“表达式生成器”，cDefaultExpression 的值将存储在内存变量或数组元素中。


*在下面的示例中，使用 GETEXPR 命令建立适当类型
* 的 LOCATE 表达式。如果 LOCATE 命令成功，
* 将显示公司名，否则显示一条信息。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && Op ustomer 表

GETEXPR 'Enter condition to locate ' TO gcTemp;

TYPE 'L' DEFAULT 'COMPANY = ""'

LOCATE FOR &gcTemp

IF FOUND( )

DISPLAY

ELSE

? 'Condition ' + gcTemp + ' was not found '

ENDIF


请参阅

GETFILE( ), GETPICT( ), LOCFILE( ), PUTFILE( )


GETFILE( ) 函数

请参阅	示例

显示“打开”对话框，并返回选定文件的名称。

语法

GETFILE([cFileExtensions] [, cDialogCaption] [, cOpenButtonCaption]
[, nButtonType] [, cCreatorType])

参数

cFileExtensions

指定没有选择“所有文件”菜单项时，可滚动列表中显示的文件扩展名。

cFileExtensions 可具有多种形式：

 •	   如果 cFileExtensions 包含单一扩展名（例如 .PRG），只显示具有此扩展名的文件。

 •	   cFileExtensions 可以包含由分号分隔的文件扩展名列表。例如包含 PRG;FXP，可以显示扩展名为 .PRG 或 .FXP 的所有文件。

如果文件的名称相同而扩展名不同（例如 CUSTOMER.PRG 与 CUSTOMER.FXP），则只显示其扩展名排列在 cFileExtensions 前面的文件。

 •	   cFileExtensions 也可以包含由垂直线分隔的文件扩展名的列表（例如 PRG | FXP）。在这种情况下，即使文件名相同，也将显示所有具有这些扩展名的文件。

 •	   如果 cFileExtensions 只包含分号 (;)，则显示所有不带扩展名的文件。

 •	   如果 cFileExtensions 为空字符串，并且不包含 cCreatorType 子句，则显示当前目录下的所有文件。

 •	   cFileExtensions 也可以包含通配符（* 和 ?）。此时将显示扩展名满足通配符条件的所有文件。例如，如果 cFileExtensions 为 '?X?'，则显示扩展名为 .FXP，.EXE 和 .TXT 的所有文件。

cDialogCaption

指定在“打开”对话框上部显示的标题。注意：长标题在 Windows 95 中可能被截断。

cOpenButtonCaption

为“确定”按钮指定标题。

nButtonType

指定出现在“打开”对话框中按钮的数目与类型。当 nButtonType 等于 0、1 或 2 时，在对话框中分别出现下列按钮。

nButtonType	按钮
0  (或省略)	确定 取消
1	确定 新建 取消
2	确定 无 取消
如果 nButtonType 等于 1，而用户选择了“新建”按钮，此函数返回在“打开”对话框中指定的路径与“尚未命名”。如果 nButtonType 等于 2 而用户选定了“无”按钮，函数返回空字符串。

cCreatorType

仅用于 FoxPro for Macintosh。

在可滚动列表中显示具有指定 Creator 类型的文件。

如果 cFileExtensions 为空字符串，则在可滚动列表中只显示与 cCreatorType 所指定的 Creator 类型相匹配的文件。如果在 cFileExtensions 中包含文件梗概，则在列表中显示与文件梗概相匹配，并且具有 cCreatorType 所指定的 Creator 类型的文件。

返回值类型

字符型

说明

如果按 ESC 键、选择“取消”按钮，或者从控制菜单上选择“关闭”退出“打开”对话框，GETFILE( ) 函数将返回空字符串。


CLOSE DATABASES

SELECT 0

gcTable = GETFILE('DBF', 'Browse or Create a .DBF:', 'Browse',1)

DO CASE

CASE 'Untitled' $ gcTable

CREATE (gcTable)

CASE EMPTY(gcTable)

RETURN

OTHERWISE

USE (gcTable)

BROWSE

ENDCASE


请参阅

FULLPATH( ), GETEXPR, GETPICT( ), LOCFILE( ), PUTFILE( )


GETFLDSTATE( ) 函数

请参阅	示例

返回一个数值，标明表或临时表中的字段是否已被编辑，或是否有追加的记录，或者指明当前记录的删除状态是否已更改。

语法

GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea])

参数

cFieldName | nFieldNumber

指定要返回其编辑状态的字段的名称或编号。字段编号 nFieldNumber 对应于字段在表或临时表结构中的位置。可以使用 DISPLAY STRUCTURE 命令或 FIELD( ) 函数确定字段的编号。

指定 nFieldNumber 为 -1 可以返回一个字符串，该字符串包含表或临时表中所有字段的删除和编辑状态。例如，如果某个表有五个字段，而只编辑过第一个字段，则 GETFLDSTATE( ) 函数将返回下列值：

121111

第一个位置上的 1 表明删除状态尚未更改。

也可以把 nFieldNumber 设置为 0，从而确定自表或临时表打开以来是否更改过当前记录的删除状态。

附注

GETFLDSTATE( ) 函数只能用于判定是否更改过当前记录的删除状态。例如，如果对某个记录作了删除标记，然后又进行了恢复操作，即使此时该记录的删除状态已恢复为原始状态，GETFLDSTATE( ) 函数仍将指示删除状态已进行了更改。可以使用 DELETED( ) 函数确定记录当前的删除状态。

cTableAlias

指定表或者临时表的别名，函数将返回其字段的编辑状态或记录的删除状态。

nWorkArea

指定表或者临时表所在的工作区，函数将返回其字段的编辑状态或记录的删除状态。

如果没有指定别名或工作区，则 GETFLDSTATE( ) 函数返回当前选定表或者临时表中字段的状态。

返回值类型

数值型

说明

下表列出了返回值及其相应的编辑或删除状态。

返回值	编辑或删除状态
1	字段未作编辑，或者删除状态未作更改。
2	已编辑了字段，或者更改了删除状态。
3	追加记录的字段未做编辑，或者追加记录的删除状态未做更改。
4	已编辑了追加记录的字段，或者已更改了追加记录的删除状态。
必须首先用 CURSORSETPROP( ) 函数启用行缓冲或表缓冲，才能使 GETFLDSTATE( ) 函数操作本地表。

如果 GETFLDSTATE( ) 函数未带可选的参数 cTableAlias 或 nWorkArea，则返回当前选定工作区中打开的表或临时表的编辑或删除状态。


*下面的示例演示了如何利用 GETFLDSTATE( )
* 函数判定字段的内容是否已进行了更改。为满足表缓冲的要求，
* 将 MULTILOCKS 设置为 ON。打开 testdata 数据库
* 中的 customer 表，然后用 CURSORSETPROP( ) 函数
* 将缓冲方式设置为开放式表缓冲 (5)。

* 在 cust_id 字段修改之前发出 GETFLDSTATE( ) 函数，
* 显示与此字段的未修改状态相对应的值 (1)。
* 用 REPLACE 命令修改 cust_id 字段后，再次发出
*  GETFLDSTATE( )函数，显示与此字段的修改状态相对应的值 (2)。
* 之后调用 TABLEREVERT( ) 函数使表返回
* 到原始状态，并且再次发出 GETFLDSTATE( ) 函数，
* 显示与 cust_id 字段原始状态相对应的值 (1)。

CLOSE DATABASES

SET MULTILOCKS ON  && 必须为 ON ，以请求表缓冲

SET PATH TO (HOME( ) + 'samples\data\')  	&&  设置数据库的路径

OPEN DATABASE testdata  && 打开textdata数据库

USE Customer	  && 打开customer表

= CURSORSETPROP('Buffering', 5, 'customer')  &&  启用表缓冲

CLEAR

? GETFLDSTATE('cust_id')  &&  显示1，未作修改

REPLACE cust_id 	WITH '***'  && 更改字段内容

? GETFLDSTATE('cust_id')  && 返回2，已修改了该字段

= TABLEREVERT(.T.)  && 放弃对表的所有修改

? GETFLDSTATE('cust_id')  && 显示1，未作修改


请参阅

CURVAL( ), DELETED( ), FIELD( ), OLDVAL( ), CURSORSETPROP( ), SETFLDSTATE( )


GETFONT( ) 函数

请参阅

显示“字体”对话框，并返回所选定字体的名称。

语法

GETFONT( )

返回值类型

字符型

说明

只用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

GETFONT( ) 函数返回所选定字体的名称、大小和字形。您的选择将作为一个字符串返回，其中包含用逗号分隔的字体名称、字体大小与字形。

如果选择“取消”按钮、从控制菜单中选择“关闭”或按 ESC 键退出“字体”对话框，GETFONT( ) 函数将返回空字符串。

附注

Visual FoxPro 的命令和函数可以缩写为 4 个字符。对于 GETFONT( ) 函数与 GETFILE( ) 函数，它们开始的 4 个字符完全相同，在这种情况下，优先权将给予 GETFILE( ) 函数。发出 GETF( ) 函数将显示“打开”对话框。


请参阅

FONTMETRIC( ), SYSMETRIC( ), TXTWIDTH( ), WFONT( )


GETNEXTMODIFIED( ) 函数

请参阅	示例

返回一个记录号，对应于缓冲表或临时表中下一个被修改的记录。

语法

GETNEXTMODIFIED(nRecordNumber [, cTableAlias | nWorkArea])

参数

nRecordNumber

指定记录编号，GETNEXTMODIFIED( ) 函数在此记录后搜索下一个被修改的记录。nRecordNumber 可以指定为 0，从而确定表或临时表中第一个被修改的记录。

cTableAlias

指定表或临时表的别名，GETNEXTMODIFIED( ) 函数返回该表中下一个被修改记录的记录号。

nWorkArea

指定表或临时表所在的工作区，GETNEXTODIFIED( ) 函数返回该工作区中下一个被修改记录的记录号。

如果没有指定别名或工作区，GETNEXTMODIFIED( ) 函数将返回当前选定表或临时表中下一个被修改记录的记录号。

返回值类型

数值型

说明

如果在所指定的记录后没有被修改的记录，GETNEXTMODIFIED( ) 函数返回 0。只要更改了记录中任一字段的内容（即使还原为字段的原始内容）或记录的删除状态，就认为该记录已被修改。

GETNEXTMODIFIED( ) 函数只能对启用表缓冲的表和临时表进行操作。可以利用 CURSORSETPROP( ) 函数启用表缓冲。


* 下面的示例演示了如何利用 GETNEXTMODIFIED( ) 函数判定表
* 中哪一个记录已作了更改。为满足表缓冲的要求，将
*  MULTILOCKS 设置为 ON。打开 testdate 数据
* 库中的 customer 表，并调用 CURSORSETPROP( ) 函数，
* 将缓冲方式设置为开放式表缓冲(5)。
*

*发出 SKIP 命令，把记录指针移动到第二个记录上，并用
*  REPLACE 命令修改 cust_id 字段。从表的起始处开始，
* 使用 GETNEXTMODI FIED(0) 显示从表中下一个被修改记录
* 的记录号（2，第二个记录）。然后调用 TABLEREVERT( ) 函数
* 使表返回到原始状态，并且再次使用 GETNEXTMODIFIED(0)
* 被显示下一个修改的记录号（0，表示没有修改过记录）。
*

CLOSE DATABASES

SET MULTILOCKS ON  && 必须为 ON 以请求表缓冲

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置数据库的路径

OPEN DATABASE testdata  && 打开testdata数据库

USE Customer	  &&  打开customer表

= CURSORSETPROP('Buffering', 5, 'customer')  &&  启用表缓冲

CLEAR

SKIP  && 把记录指针移到第二个记录上

REPLACE cust_id 	WITH '***'  &&  更改字段内容

? GETNEXTMODIFIED(0)  && 返回 2，第二个记录被修改过

= TABLEREVERT(.T.)  && 放弃对表的所有修改

? GETNEXTMODIFIED(0)  &&  返回0，没有记录被修改过


请参阅

CURSORSETPROP( ), CURVAL( ), GETFLDSTATE( ), OLDVAL( ),


GETOBJECT( ) 函数

请参阅

激活 OLE 自动化对象，并创建此对象的引用。

语法

GETOBJECT([FileName [, ClassName]])

参数

FileName

指明所要激活文件的完整路径与文件名。并不需要指定应用程序，因为 OLE 动态链接库将根据提供的文件名确定要启动的应用程序。

例如，下面的代码将启动 Microsoft Excel，打开名为 BUDGET.XLS 的文件，并通过名为 MBUDVAR 的对象内存变量创建引用：

MBUDVAR = GETOBJECT('C:\EXCEL\WORK\BUDGET.XLS')

ClassName

指定所要检索对象的类名。有的应用程序可以在同一文件中存储一个以上的对象类型，并允许使用类名指定要激活的对象。例如，如果某个文字处理应用程序在同一文件中存储了文档、宏定义与工具栏对象，则可用下列命令创建对文档文件的引用：

MDOCFILE = GETOBJECT('C:\WRDPROC\MYDOC.DOC','WrdProc.Document')

对于某些服务器应用程序，每次调用 GETOBJECT( ) 函数，都将启动该应用程序的一个额外实例，并占用额外内存。如果该应用程序已经运行，可以仿照下面的示例，忽略 FileName 而包含 ClassName，从而避免启动该应用程序的额外实例：

oleApp = GETOBJECT(, "Excel.Application")

说明

用 GETOBJECT( ) 函数从文件中激活某个 OLE 自动化对象，并通过内存变量或数组元素指定对该对象的引用。


请参阅

CREATEOBJECT( ), DEFINE CLASS, SET OLEOBJECT


GETPAD( ) 函数

请参阅	示例

返回菜单栏给定位置上的菜单标题。

语法

GETPAD(cMenuBarName, nMenuBarPosition)

参数

cMenuBarName

指定菜单栏名称。

nMenuBarPosition

指定菜单栏上的某一位置。nMenuPosition 的取值范围从 1 开始（对应菜单栏上最左面的菜单标题），直到菜单中菜单标题的总数。

返回值类型

字符型

说明

可以添加、删除或重新调整标题栏上的菜单名。使用 DEFINE PAD 命令可以向标题栏中添加主菜单名，使用 RELEASE PAD 命令可以删除菜单标题。


* 下面的示例用 GETPAD( ) 函数测试“编辑”菜单名是否在
*  Visual FoxPro 的系统菜单栏上。如果在，GETPAD( ) 函
* 数返回该菜单名（要把“编辑”菜单栏还原为默认状态，可
* 执行 SE SYSMENU TO DEFAULT 命令）。

FOR gnCount = 1 TO CNTPAD('_msysmenu')	&& 菜单的数目

IF PRMPAD('_msysmenu', GETPAD('_msysmenu', gnCount)) = 'Edit'

RELEASE PAD (GETPAD('_msysmenu', gnCount)) OF _msysmenu

EXIT

ENDIF

ENDFOR


请参阅

DEFINE MENU, DEFINE PAD, RELEASE PAD


GETPEM( ) 函数

请参阅

返回事件或方法的属性值或程序代码。

语法

GETPEM(oObjectName | cClassName, cProperty | cEvent | cMethod)

参数

oObjectName

指定对象，函数将返回它的属性值或其事件、方法的程序代码。oObjectName 可以是求值结果为对象的任意表达式，例如对象引用、对象内存变量或对象数组元素。

cClassName

指定类，函数将返回其属性值或其事件、方法的程序代码。

cProperty

指定要返回其值的属性。

cEvent

指定要返回其程序代码的事件。

cMethod

指定要返回其程序代码的方法。

返回值类型

字符型、货币型、日期型、日期时间型、数值型或逻辑型


请参阅

CREATE FORM, PEMSTATUS( ), SYS(1269) - 属性信息, SYS(1270) - 对象位置, SYS(1271) - 对象的 .SCX 文件, SYS(1272) - 对象层次


GETPICT( ) 函数

请参阅

显示“打开”对话框，并返回选定图片文件的文件名。

语法

GETPICT([cFileExtensions] [, cFileNameCaption] [, cOpenButtonCaption])

参数

cFileExtensions

没有选择“所有文件”菜单项时，在可滚动列表中指定显示图片文件的文件扩展名。

cFileExtensions 可以为下列形式：

 •	   如果 cFileExtensions 只包含单一扩展名（例如 .BMP），则只显示有这个扩展名的文件。

 •	   cFileExtensions 也可以包含通配符（* 和 ?），此时将显示扩展名与通配符条件相匹配的所有文件。例如，如果 cFileExtensions 为 ?X?，则显示扩展名为 .FXP、.EXE 和 .TXT 的所有文件。

 •	   如果 cFileExtensions 中包含空字符串 ('')，则显示扩展名为 .BMP 和 .DIB 的文件。

cFileNameCaption

指定在“文件名”文本框上方显示的标题，cFileNameCaption 将替换“文件名”。省略 cFileNameCaption 时，将显示“文件名”。

cOpenButtonCaption

为“确定”按钮指定标题。

返回值类型

数值型

说明

如果按 ESC 键、选择“取消”按钮或从控制菜单上选择“关闭”而退出“打开”对话框，GETPICT( ) 函数将返回空字符串。


请参阅

GETFILE( ), GETEXPR, LOCFILE( ), PUTFILE( )


GETPRINTER( ) 函数

请参阅	示例

显示 Windows 的“打印设置”对话框，并返回所选择的打印机名称。

语法

GETPRINTER( )

返回值类型

字符型

说明

如果按 ESC 键、选择“取消”按钮或从控制菜单上选择“关闭”而退出“打印设置”对话框，GETPRINTER( ) 函数将返回空字符串。


CLEAR

cPrinter = GETPRINTER( )	 && 显示 Windows 的“打印设置”对话框

*** 显示所选定的打印机的名字 ***

WAIT WINDOW IIF(EMPTY(cPrinter), 'No printer chosen', cPrinter)


请参阅

APRINTERS( ), SET PRINTER


GO | GOTO 命令

请参阅	示例

将记录指针移动到指定记录上。

语法

GO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias]
— 或者 —
GO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]
— 或者 —
GOTO [RECORD] nRecordNumber [IN nWorkArea | IN cTableAlias]
— 或者 —
GOTO TOP | BOTTOM [IN nWorkArea | IN cTableAlias]

参数

RECORD nRecordNumber

指定一个物理记录号，记录指针将移至该记录。您可以省略 GO 或 GOTO 命令而只指定记录号，但如果仅指定记录号，则只能在当前工作区中移动记录指针。

IN nWorkArea

指定表所在的工作区，记录指针在此表中移动。

IN cTableAlias

指定表的别名，记录指针在此表中移动。

TOP

将记录指针定位在表的第一个记录上。如果此表使用升序索引，则第一个记录是关键字值最小的记录；如果使用降序索引，则第一个记录是关键字值最大的记录。

BOTTOM

将记录指针定位在表的最后一个记录上。如果此表使用升序索引，则最后一个记录是关键字值最大的记录；如果使用降序索引，则最后一个记录是关键字值最小的记录。

说明

可以互换使用 GO 和 GOTO 命令。除非在 IN 子句中指定了另一个工作区，否则这两个命令都对当前工作区中的表进行操作。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 Products 表

USE customer IN 0  && 打开 Customer 表

GO BOTTOM IN products

CLEAR

? RECNO('products')

GO TOP  && 显示 1

? RECNO( )

GO 5

? RECNO( )  && 显示 5


请参阅

RECNO( ), SELECT, SKIP


GOMONTH( ) 函数

请参阅	示例

对于给定的日期表达式或日期时间表达式，返回指定月份数目以前或以后的日期。

语法

GOMONTH(dExpression | tExpression, nNumberOfMonths)

参数

dExpression

指定日期表达式。相对于此日期，GOMONTH( ) 函数返回日期。

tExpression

指定日期时间表达式。相对于此日期时间，GOMONTH( ) 函数返回日期。

nNumberOfMonths

指定从给定日期或日期时间开始的月数。如果 nNumberOfMonths 为正，GOMONTH( ) 函数返回给定日期或日期时间 nNumberOfMonths 个月以后的日期；如果 nNumberOfMonths 为负，GOMONTH( ) 函数返回给定日期或日期时间 nNumberOfMonths 个月以前的日期。

返回值类型

日期型


SET CENTURY ON

STORE GOMONTH({08/02/95}, 5) TO gdDeadLine

CLEAR

? gdDeadLine  && 显示 01/02/1996

? GOMONTH({12/31/95}, 2)  && 显示 02/29/1996

? GOMONTH({12/31/95}, -2)  && 显示 10/31/1995


请参阅

CMONTH( )


GotFocus 事件

请参阅

当通过用户操作或执行程序代码使对象接收到焦点时，此事件发生。

应用于

复选框, 组合框, 命令按钮, 容器对象, 控制对象, 编辑框, 表单, 列表框, OLE 绑定型控制, OLE 容器控制, 选项按钮, 微调, 文本框

语法

PROCEDURE Object.GotFocus
[LPARAMETERS nIndex]

参数

nIndex

唯一标识控制数组中的控制。

说明

对象接收到焦点时，GotFocus 事件用来指定要发生的动作。例如，通过为表单中的每个控制附加 GotFocus 事件，可以显示简单说明或状态栏信息以指导用户；也可以通过激活、废止或显示依赖于拥有焦点控制的其他控制，提供可视化的提示。

可根据用户的操作（例如单击鼠标）或在程序代码中调用 SetFocus 方法使控制接收焦点。

当表单没有控制，或者它的所有控制已废止或不可见时，此表单才能接收焦点。

附注

只有当对象的 Enabled 属性和 Visible 属性均设置为“真”（.T.）时，此对象才能接收焦点。要为焦点的移动定制键盘操作方式，可以为表单上的控制设置 TAB 键次序或指定访问键。

在控制所在的容器 Activate 事件后，发生 GotFocus 事件。


请参阅

Activate 事件, ActiveControl 属性, Click 事件, Deactivate 事件, Enabled 属性, LostFocus 事件, SetFocus 方法, TabIndex 属性, TabStop 属性, Visible 属性


表格控制
Grid（表格）控制

请参阅	属性	事件	方法	示例

创建表格。

语法

Grid

说明

表格是按行和列显示数据的容器对象，其外观与浏览窗口相似。表格是包含列对象的容器对象。列可以包含标头对象及控制。由于表格及其列、标头和控制都有各自的属性集，您可以完全控制表格中的每一个元素。可以在表格生成器中交互地创建“表格”。

有关创建表格的其他内容，请参阅向表单中添加表格，以及《开发指南》的第十一章“使用控制”。


 属性

ActiveColumn	ActiveRow	BackColor
BaseClass	ChildOrder	Class
ClassLibrary	ColumnCount	Columns
Comment	DeleteMark	DragIcon
DragMode	Enabled	FontBold
FontItalic	FontName	FontOutline
FontShadow	FontSize	FontStrikeThru
FontUnderline	ForeColor	GridLineColor
GridLines	GridLineWidth	HeaderHeight
Height	HelpContextID	HighLight
Left	LeftColumn	LinkMaster
MousePointer	Name	Panel
PanelLink	Parent	ParentClass
Partition	ReadObject	ReadOnly
RecordMark	RecordSource	RecordSourceType
RelationalExpr	RelativeColumn	RelativeRow
RowHeight	ScrollBars	StatusBarText
TabIndex	TabStop	Tag
ToolTipText	Top	Value
View	Visible	Width


 事件

AfterRowColChange	BeforeRowColChange	Click
DblClick	Deleted	Destroy
DragDrop	DragOver	Error
Init	MouseDown	MouseMove
MouseUp	Moved	Resize
RightClick	Scrolled	UIEnable
Valid	When


 方法

ActivateCell	AddColumn	AddObject
CloneObject	DeleteColumn	DoScroll
Drag	Move	ReadExpression
ReadMethod	Refresh	RemoveObject
SaveAsClass	SetAll	SetFocus
WriteExpression	WriteMethod	ZOrder


*下面的示例在表单上设置表格控制。首先打开 Customer 表，
* 并在表格中显示其内容，然后使用 Caption 属性为 CUST_ID
* 字段指定另一个标头标题 (Customer ID)，最后在表单上设置
* 关闭表单的命令按钮。

*使用 SetAll 方法设置 DynamicBackColor 属性以指定记录的背景色。
* 如果表格中显示的记录编号为偶数，则记录的 DynamicBackColor
* 为白色，否则记录的 DynameBackColor 为绿色。
*

CLOSE ALL  && 关闭表和数据库

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  IN 0  && 打开 Customer 表

frmMyForm = CREATEOBJECT('Form')  &&  创建“表单”

frmMyForm.Closable = .f.  &&   废止“控制”菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject('grdGrid1','Grid')  && 添加“表格”控制

frmMyForm.grdGrid1.Left = 25    && 调整“表格”位置

frmMyForm.grdGrid1.SetAll("DynamicBackColor", ;

"IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) ;

, RGB(0,255,0))", "Column")  && 交替显示白色和绿色的记录

frmMyForm.grdGrid1.Visible = .T.  && “表格”控制可见

frmMyForm.cmdCommand1.Visible =.T.  && 使“退出”命令按钮可见

frmMyForm.grdGrid1.Column1.Header1.Caption = 'Customer ID'

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 启动事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  &&  默认“取消”命令按钮(ESC)

Left = 125  && 命令按钮的列

Top = 210  && 命令按钮的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭“表单”

CLOSE ALL  && 关闭表和数据库

ENDDEFINE


请参阅

列对象, CREATE CLASS, CREATE FORM, DEFINE CLASS, 标头对象


GridLineColor 属性

请参阅

指定表格控制中分隔各单元的网格线的颜色。

应用于

表格

语法

Grid.GridLineColor[ = nColor]
Grid.GridLineColor = RGB(nRedValue, nGreenValue, nBlueValue)

设置

nColor

指定代表颜色的数字。默认情况下，GridLineColor 设置为 0（黑）。

nRedValue, nGreenValue, nBlueValue

指定组成表格网格线颜色的三元色比例，并且必须使用 RGB( ) 函数将三种颜色成分合并为一个数字，作为 GridLineColor 属性值。

附注

在属性窗口中，可以双击任一颜色属性以显示“颜色”对话框。在此对话框中可以选择或定义颜色。关闭“颜色”对话框后，与所选定颜色相对应的红、绿、蓝三元色的比例成为这些属性的当前设置。

说明

设计时可用，运行时可读写。


请参阅

GridLines 属性, GridLineWidth 属性


GridLines 属性

请参阅

决定在表格控制中是否显示水平线和垂直线。

应用于

表格

语法

Grid.GridLines[ = nSetting]

设置

nSetting

GridLines 属性的设置有：

设置	说明
0	无。不使用网格线。
1	水平。只显示水平网格线。
2	垂直。只显示垂直网格线。
3	（默认值）全部。既显示水平网格线，又显示垂直网格线。
说明

设计时可用，运行时可读写。


请参阅

GridLineColor 属性, GridLineWidth 属性


GridLineWidth 属性

请参阅

以象素为单位，指定表格控制中分隔单元的网格线宽度。

应用于

表格

语法

Grid.GridLineWidth[ = nWidth]

设置

nWidth

指定在表格控制中分隔单元的网格线宽度。

说明

设计时可用，运行时可读写。


请参阅

GridLineColor 属性, GridLines 属性


HalfHeightCaption 属性

请参阅

指定表单标题高度是否为正常高度的一半。

应用于

表单，_SCREEN

语法

Object.HalfHeightCaption[ = lExpr]

说明

设计和运行时可用。

设置

lExpr

下表列出了 HalfHeightCaption 属性的设置：

设置	说明
“真”(.T.)	表单标题高度为正常高度的一半。
“假”(.F.)	（默认值）表单标题高度为正常高度。


请参阅

Caption 属性


Header 对象
Header（标头）对象

请参阅	属性	事件	方法	示例

为表格控制的列创建标头。

语法

Header

说明

表格中的列包含有标头。标头在列的最上面显示列标题，并且可以响应事件。

有关在表格中创建标头的详细内容，请参阅《开发指南》第十一章“使用控制”。


 属性

Alignment	BackColor	BaseClass
Caption	Class	ClassLibrary
FontBold	FontItalic	FontName
FontOutline	FontShadow	FontSize
FontStrikeThru	FontUnderline	ForeColor
Name	Parent	ParentClass
ReadObject


 事件

Click	DblClick	MouseDown
MouseMove	MouseUp	RightClick


 方法

ReadExpression	ReadMethod	Refresh
WriteExpression	WriteMethod


*下面的示例使用 Header 对象和 Caption 属性来更改表格控制中
* 第一个标头的标题。

*先在表单上设置一个表格控制，然后打开 Customer 表并在表格
* 上显示表中的内容。再使用 Header 对象和 Caption 属性，为
* 表格中的第一个标头指定另外一个标头标题 (CustomerID)。

*SetAll 方法和 DynamicBackColor 属性一起用来指定记录的背景色。
* 如果表格中某个记录号是偶数，则该记录 DynamicBackColor
* 为白色；否则，为绿色。表单中还设置了一个可以关闭该表单的
* 命令按钮。

CLOSE ALL  && 关闭所有的表和数据库

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  IN 0  && 打开 Customer 表

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .f.  && 使“控制”菜单失效

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  &&添加命令按钮

frmMyForm.AddObject('grdGrid1','Grid')  && 添加表格控制

frmMyForm.grdGrid1.Left = 25    && 调整表格位置

frmMyForm.grdGrid1.SetAll("DynamicBackColor", ;

"IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) ;

, RGB(0,255,0))", "Column")  && 轮流用白色和绿色显示记录

frmMyForm.grdGrid1.Visible = .T.  && 表格控制可见

frmMyForm.cmdCommand1.Visible =.T.  && "Quit" 命令按钮可见

frmMyForm.grdGrid1.Column1.Header1.Caption = 'Customer ID'

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始处理事件

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认为“取消”(ESC)命令按钮

Left = 125  && 命令按钮所在的列

Top = 210  && 命令按钮所在的行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止处理事件，关闭表单

CLOSE ALL  && 关闭表和数据库

ENDDEFINE


请参阅

列对象, CREATE FORM, CREATE CLASS, DEFINE CLASS, 表格对象


HEADER( ) 函数

请参阅

返回当前或指定表文件的表头所占的字节数。

语法

HEADER([nWorkArea | cTableAlias])

参数

nWorkArea | cTableAlias

返回在非当前工作区中打开的表的表头大小。参数 nWorkArea 指定工作区号，cTableAlias 指定表别名。如果省略工作区号和表别名，则 HEADER( ) 函数将返回当前工作区中打开的表的表头大小。

如果指定的工作区中没有打开的表，则 HEADER( ) 函数将返回 0。若指定的别名不存在，则 Visual Foxpro 将显示一条错误信息。

返回植类型

数值型

说明

表头中包含了该表本身的一些信息，其中包括该表的所有字段名、字段大小以及该表是否具有备注文件或结构索引文件等等。


请参阅

FSIZE( ), RECSIZE( )


HeaderHeight 属性

请参阅

指定表格控制中列标头的高度。

应用于

表格

语法

Header.HeaderHeight[ = nHeight]

设置

nHeight

标头的高度，以象素为单位。

说明

设计时可用，运行时可读写。


请参阅

ScaleMode 属性


Height 属性

请参阅	示例

指定对象在屏幕上的高度。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.Height[ = nHeight]

设置

nHeight

指定对象的高度，其单位由表单的 ScaleMode 属性决定。

说明

设计和运行时可用。

对于表单，高度不包括边框和标题栏。

对于控制，高度是从其边框的外侧算起的。

当用户或程序调整对象的大小时，Height 属性的值随之发生变化。

在计算对象的面积时，要用到 Height 和 Width 属性。

附注

当用于列对象包含的控制时，Height 属性只读。


*下面的示例演示了 Height 属性是如何指定表单中三个命令按钮
* 的高度的。

*先使用 Addobject 方法向表单中添加了一个线条控制和三个
* 命令按钮。再使用 Height 属性指定每个命令按钮的垂直高度。

frmMyForm = CREATEOBJECT('Form')  && 创建表单

frmMyForm.Closable = .F.  && 使控制菜单框失效

frmMyForm.AddObject('shpLine','Line')  && 向表单添加一个 Line 控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && 向上命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && 向下命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && Quit 命令按钮

frmMyForm.shpLine.Visible = .T.  && 显示线条控制

frmMyForm.shpLine.Top = 20  && 指定线条控制所在的行

frmMyForm.shpLine.Left = 125  && 指定线条控制所在的列

frmMyForm.cmdCmndBtn1.Visible =.T.  && 向上命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && 向下命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && Quit 命令按钮可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始处理事件

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮的标题

Left = 50  && 命令按钮所在的列

Top = 100  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏 Line 控制

ThisForm.shpLine.LineSlant ='/'  && 向上倾斜

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮的标题

Left = 200  && 命令按钮所在的列

Top = 100  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='\'  && 向下倾斜

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标题

Cancel = .T.  && 默认为“取消”（ESC）命令按钮

Left = 125  && 命令按钮所在的列

Top = 150  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

ENDDEFINE


请参阅

Left 属性, Move 方法, ScaleMode 属性, Top 属性, Width 属性


HELP 命令

请参阅

打开“帮助”窗口。

语法

HELP
[Topic | ID nContextID]
[IN [WINDOW] WindowName | IN [WINDOW] SCREEN
| IN [WINDOW] MACDESKTOP]
[NOWAIT]

参数

Topic

指定要显示的帮助主题。如果只给出主题词的部分拼写字母，Visual FoxPro 会打开“帮助”窗口，并显示拼写最相近的主题。

ID nContextID

仅用于 Visual FoxPro。

根据主题的上下文标识 (ID)，指定要显示的帮助主题。

在使用 DBF 样式帮助时，nContextID 是帮助表中 Contextid 字段的值。Contextid 字段必须是该表的第一个字段。

当使用图形样式帮助时，nContextID 是帮助项目文件中 MAP 部分的上下文编号。

IN [WINDOW] WindowName

在一个父窗口中打开“帮助”窗口，“帮助”窗口并不继承父窗口的任何特性。如果“帮助”窗口在一个父窗口内激活，则它不能移出父窗口。父窗口移动时，“帮助”窗口随之移动。在父窗口中打开“帮助”窗口之前，必须先用 DEFINE WINDOW 命令定义父窗口。

IN [WINDOW] SCREEN

把“帮助”窗口放置到 Visual FoxPro 主窗口中。

IN [WINDOW] MACDESKTOP

仅用于 FoxPro for Macintosh，并且只能用于 DBF 样式帮助。

将“帮助”窗口放置到 Macintosh 桌面上。此时，“帮助”窗口与 FoxPro 主窗口属于同一级。“帮助”窗口可以移到 FoxPro 主窗口之外，也可以被 FoxPro 主窗口遮盖。在包含 MACDESKTOP 子句时，“帮助”窗口的使用方式与 FoxBASE+ for Macintosh 中的“帮助”窗口相同。

包含 MACDESKTOP 子句将忽略当前的 SET MACDESKTOP 设置。在不包括 SCREEN 或 MACDESKTOP 子句的情况下，SET MACDESKTOP 决定“帮助”窗口是放在 FoxPro 主窗口中还是放在 Macintosh 桌面上。有关将“帮助”窗口放在 FoxPro 主窗口或放在 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

NOWAIT

在打开“帮助”窗口之后继续执行程序。程序不必等待“帮助”窗口的关闭，而是继续执行 HELP NOWAIT 之后的下一行程序。如果省略 NOWAIT，则在一个程序中执行 HELP 命令后，打开“帮助”窗口，并且在关闭“帮助”窗口之前暂停执行程序。

说明

有关如何创建用户自己的帮助系统的详细内容，请参阅专业版 Visual FoxPro 的《专业级功能指南》第五章“创建 DBF 样式帮助”和第六章“创建图形样式帮助”。


请参阅

SET HELP, SET HELPFILTER, SET TOPIC


HelpContextID 属性

请参阅

为帮助文件的一个主题指定上下文标识，以便提供上下文相关帮助。

应用于

复选框，组合框，命令按钮，命令组，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，_SCREEN，形状，微调，文本框，工具栏

语法

Object.HelpContextID[ = nContextID]

设置

nContextID

指定主题在图形样式或 DBF 样式的帮助文件中的上下文标识编码。

说明

设计和运行时可用。

若要在应用程序中为某个对象创建上下文相关帮助，必须在创建帮助文件时把相同的上下文编码同时赋给该对象和相关帮助主题。

如果已经为应用程序创建了图形样式或 DBF 样式帮助，Visual FoxPro 将调用帮助文件，并且请求当前上下文 ID 编码所标识的主题。可以使用 SET HELP TO 语句指定帮助文件，并指定一个键以便使用 ON KEY LABEL 语句激活这个帮助文件。创建图形样式帮助所需要的帮助编译器在专业版 Visual FoxPro 中提供。

当前的上下文标识编号是焦点对象的 HelpContextID 属性的设置。如果没有搜索到一个非零的当前上下文编号，则显示帮助文件的主目录。


请参阅

SET HELP, SET TOPIC


HIDE MENU 命令

请参阅

隐藏活动的用户自定义菜单栏。

语法

HIDE MENU MenuBarName1 [, MenuBarName2 ...] | ALL
[SAVE]

参数

MenuBarName1 [, MenuBarName2 ...]

指定要隐藏的菜单栏的名称或名称列表（以逗号隔开各个菜单栏名）。

ALL

隐藏所有的用户自定义菜单栏。

SAVE

把菜单栏的图象放置到屏幕或某个窗口中。常用于程序的开发和调试。要从 Visual FoxPro 主窗口或用户自定义窗口中清除菜单栏的图象，可以使用 CLEAR 命令。

说明

HIDE MENU 命令可以从 Visual FoxPro 主窗口或用户自定义窗口中移去指定的菜单栏、一组菜单栏或所有菜单栏，但并不从内存中移去菜单的定义。只有那些用 DEFINE MENU 创建的菜单栏才能被隐藏。菜单栏的隐藏与废止是不同的。菜单栏被隐藏之后仍然驻留在内存中，并且可以使用 ACTIVATE MENU 或 SHOW MENU 命令重新显示。


请参阅

ACTIVATE MENU, DEFINE MENU, DEFINE PAD, SHOW MENU


Hide 方法

请参阅

通过把 Visible 属性设置为“假”(.F.)，隐藏表单、表单集或工具栏。

应用于

表单，表单集，_SCREEN，工具栏

语法

Object.Hide

说明

表单被隐藏后，用户不可访问它的控制，但是这些控制仍然可用，并且可以在代码中访问它们。虽然这些控制是不可见的，但这些保存在不可见表单中的控制仍然保留自己的 Visible 属性设置值。

当表单集的 Visible 属性为“假”(.F.) 时，用户看不到它所包含的表单。表单集被隐藏后，用户不可访问其中的表单，但是这些表单仍然可用，并且可以在代码中访问它们。表单集的 Hide 方法并不设置子表单的 Visible 属性。因此，当一个表单包含在一个表单集中时，若要判断表单是否可见，必须同时检查表单和表单集的 Visible 属性设置。

隐藏表单集之后，Visual FoxPro 激活前一个活动对象。如在此之前没有活动对象，则激活 Visual FoxPro 主窗口。


请参阅

Activate 事件, Deactivate 事件, Enabled 属性, GotFocus 事件, Show 方法, Visible 属性


HIDE POPUP 命令

请参阅

隐藏由 DEFINE POPUP 创建的一个或多个活动菜单。

语法

HIDE POPUP MenuName1 [, MenuName2 ...] | ALL
[SAVE]

参数

MenuName1 [, MenuName2 ...]

指定要隐藏的菜单的名称或名称列表（以逗号隔开各个菜单名）。

ALL

隐藏所有已定义的菜单。

SAVE

把菜单图象放到 Visual FoxPro 主窗口或用户自定义窗口上。常用于程序开发和调试。若要从 Visual FoxPro 主窗口或用户自定义窗口中清除菜单的图象，可使用 CLEAR 命令。

说明

HIDE POPUP 命令可以从 Visual FoxPro 主窗口或用户自定义窗口中移去指定的一个、一组或全部菜单，但并未删除内存中的菜单定义。本命令只隐藏那些由 DEFINE POPUP 命令创建的菜单。菜单的隐藏与废止是不同的。菜单被隐藏之后仍然驻留在内存中，可用 ACTIVATE POPUP 或 SHOW POPUP 命令重新显示。


请参阅

ACTIVATE POPUP, DEFINE BAR, DEFINE POPUP, SHOW POPUP


HIDE WINDOW 命令

请参阅	示例

隐藏一个活动的用户自定义窗口或 Visual FoxPro 系统窗口。

语法

HIDE WINDOW WindowName1 [, WindowName2 ... ] | ALL | SCREEN
[IN [WINDOW] WindowNameN | IN [WINDOW] SCREEN
| IN [WINDOW] MACDESKTOP]
[BOTTOM | TOP | SAME]
[SAVE]

参数

WindowName1 [, WindowName2 ...]

指定要隐藏的窗口的名称或名称列表（以逗号隔开各个窗口名）。不包含任何参数的 HIDE WINDOW 命令将隐藏当前的活动窗口。在 Visual FoxPro 中，也可指定要隐藏的工具栏名。若要查阅 Visual FoxPro 的全部工具栏名，请参阅 SHOW WINDOW。

ALL

隐藏所有窗口。

SCREEN

仅用于 FoxPro for Macintosh。

隐藏 FoxPro 主窗口。若要重新显示 FoxPro 主窗口，可用 ACTIVATE WINDOW SCREEN 或 SHOW WINDOW SCREEN 命令。

IN [WINDOW] WindowNameN

在父窗口内隐藏一个窗口。

IN [WINDOW] SCREEN

隐藏 Visual FoxPro 主窗口中的一个窗口。

IN [WINDOW] MACDESKTOP

仅用于 FoxPro for Macintosh。

隐藏 Macintosh 桌面上的一个窗口。所隐藏的窗口与 FoxPro 主窗口属于同一级窗口。

包含 MACDESKTOP 子句可忽略当前 SET MACDESTOP 设置。当没有包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 设置决定是隐藏 FoxPro 主窗口中的窗口还是隐藏 Macintosh 桌面上的窗口。有关隐藏 FoxPro 主窗口或 Macintosh 桌面上窗口的详细内容，请参阅 SET MACDESKTOP。

BOTTOM | TOP | SAME

指定要把窗口隐藏到什么位置（相对其他窗口而言）。BOTTOM 将窗口放到所有窗口的后面。TOP（默认值）则将窗口放到所有窗口的前面。SAME 在隐藏窗口时不影响原先的前后关系。在用 SHOW WINDOW ALL 命令显示所有隐藏窗口时，若要保持它们之间的相对位置，应使用 SAME 关键字。

SAVE

仅用于 FoxPro for MS-DOS。

窗口被隐藏以后，仍然在 FoxPro 主窗口或用户自定义窗口中显示该窗口的图象。一般情况下，在窗口被隐藏以后，其图象将从 FoxPro 主窗口或用户自定义窗口中消失。用 CLEAR 命令可清除窗口的图象。不能保存当前输出窗口的图象。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh中，忽略 SAVE。

说明

HIDE WINDOW 命令可从 Visual FoxPro 主窗口或用户自定义窗口中移去一个或多个窗口。HIDE WINDOW 命令也可以用来隐藏系统窗口，如命令窗口和查看窗口等。

隐藏窗口与关闭窗口是不同的。隐藏后的窗口仍驻留在内存中，并且仍然是活动窗口。可以向隐藏窗口输出数据，只是不能看见该窗口。

释放一个窗口可从内存中删除该窗口。要想重新显示已移去的窗口则必须重定义这个窗口。显示窗口可使用 ACTIVATE WINDOW 或 SHOW WINDOW 命令。

若要隐藏系统窗口和工具栏（在 Visual FoxPro中），必须用引号把系统窗口或工具栏的全名括起来。例如，若要隐藏 Visual FoxPro 中“报表控制”工具栏，可执行下列命令：

HIDE WINDOW Report Controls


*在下面的示例中，定义并激活一个名为 wOutput1 的窗口。程序
* 等待您按任意键，然后隐藏这个窗口。程序等待再按一个键后，
* 重新显示这个窗口。第三次按键时，程序将从屏幕上和内存中
* 删除这个窗口。

DEFINE WINDOW wOutput1 FROM 6,1 TO 19,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

ACTIVATE WINDOW wOutput1

WAIT WINDOW 'Press a key to hide this window'

HIDE WINDOW wOutput1

WAIT WINDOW 'Press a key to see the window again'

SHOW WINDOW wOutput1

WAIT WINDOW 'Press a key to remove the window from memory'

DEACTIVATE WINDOW wOutput1

RELEASE WINDOW wOutput1


请参阅

ACTIVATE WINDOW, DEACTIVATE WINDOW, DEFINE WINDOW, RELEASE WINDOW, SHOW WINDOW


HideSelection 属性

请参阅

指定当控制失去焦点时，选定文本是否以选定状态显示。

应用于

编辑框，微调，文本框

语法

Control.HideSelection[ = lExpr]

设置

lExpr

下表列出了 HideSelection 属性的设置：

设置	说明
“真”(.T.)	（默认设置）当前控制失去焦点时选定文本不以选定状态显示。
“假”(.F.)	当前控制失去焦点时，选定文本按选定状态显示。
说明

设计和运行时可用。

使用这个属性可以标出在其他的表单或对话框（如拼写检查框）具有焦点时所选定的文本。


请参阅

DisabledBackColor, DisabledForeColor 属性, GotFocus 事件, LostFocus 事件


Highlight 属性

请参阅

指定表格控制中具有焦点的单元是否以选定状态显示。

应用于

表格

语法

Grid.Highlight[ = lExpr]

设置

lExpr

下表列出了 HighLight 属性的设置：

设置	说明
“真”(.T.)	（默认设置）选定单元以选定状态显示。
“假”(.F.)	选定单元不以选定状态显示。
说明

设计时可用，运行时可读写。

如果 HighLight 属性设置为“真”(.T.)，则它和列的 SelectOnEntry 属性共同决定整个单元是否按选定状态显示。若 HighLight 属性设置为“假”(.F.)，则忽略 SelectOnEntry 属性。


请参阅

SelectOnEntry 属性


HOME( ) 函数

请参阅	示例

返回启动 Visual FoxPro 的目录名。

语法

HOME( )

返回值类型

字符型

说明

HOME( ) 函数返回启动 Visual FoxPro 的目录名。

HOME( ) 函数与 SYS(2024) 命令等价，包含它是为了提供与 dBASE IV 的兼容性。


? 'Visual FoxPro launch directory: ', HOME( )


请参阅

SYS( ) 函数概述, SYS(2004)


HostName 属性

请参阅

返回或设置 Visual FoxPro 应用程序的用户可读宿主名。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Control.HostName [ = cName]

设置

cName

返回或设置一个字符串表达式来指定宿主名。

说明

设计时可用，运行时可读写。

当编辑对象时，HostName 属性可显示在对象的窗口标题中。但也有一些可提供对象的应用程序不显示 HostName 属性。


请参阅

DocumentFile 属性


HOUR( ) 函数

请参阅	示例

返回日期时间表达式的小时部分。

语法

HOUR(tExpression)

参数

tExpression

指定日期时间表达式，HOUR( ) 函数将返回它的小时部分。

返回值类型

数值型

说明

HOUR( ) 函数返回的数值是以 24 小时制为基础的，并且不受 SET HOURS 当前设置的影响。例如，不论 SET HOURS 设置为 12 还是 24，下列命令都将返回 13：

? HOUR({02/16/95 1:00pm})


* 下面的示例将显示当前时间的小时部分和一个指定时间的小时部分。

CLEAR

? HOUR(DATETIME( ))

? HOUR({10:42am})  && 显示 10


请参阅

CTOT( ), DATE( ), DATETIME( ), DTOT( ), MINUTE( ), SEC( ), SECONDS( ), SET SECONDS, TIME( )


Icon 属性

请参阅

指定最小化表单时显示的图标。

应用于

表单，_SCREEN

语法

Object.Icon[ = cFileName]

设置

cFileName

指定表单最小化时所显示图标的文件名和路径。

说明

设计和运行时可用。

Icon 属性可以为任何表单指定自定义图标，运行时，供用户最小化表单时使用。例如，可以指定一个特殊图标来说明表单的功能。设计时，从属性窗口中输入图标的文件名，文件名必须以 .ICO 为扩展名，并且具有图标的格式。如果不指定图标，系统使用 Visual FoxPro 的默认表单图标。

可以使用 SAMPLES\GRAPHICS\ICONS 子目录中的 Visual FoxPro 图标库。

附注

如果在设计时设置了 Icon 属性，而指定的文件不存在，Visual FoxPro 会显示错误信息，但该属性仍指向指定文件。如果在运行时 Icon 属性指向一个不存在的文件，Visual FoxPro 忽略这个 Icon 属性。


请参阅

Caption 属性, Picture 属性


IDXCOLLATE( ) 函数

请参阅	示例

返回索引或索引标识的排序序列。

语法

IDXCOLLATE([cCDXFileName,] nIndexNumber [, nWorkArea | cTableAlias])

参数

cCDXFileName

指定复合索引文件名。该复合索引文件可以是随表自动打开的结构复合索引文件，也可以是独立的复合索引文件。

nIndexNumber

指定索引或索引标识，IDXCOLLATE( ) 返回其排序序列。当 nIndexNumber 从 1 递增到打开的索引文件和索引标识总数时，IDXCOLLATE( ) 按如下次序返回索引或索引标识的排序序列：

1.	首先返回单项索引 .IDX 文件（如果有此类文件打开）的排序序列，返回的排序序列取决于 USE 或 SET INDEX 中包含的单项索引文件的序列。

2.	然后返回结构复合索引（如果存在）中标识的排序序列，标识的排序序列按照标识在结构复合索引中创建的次序返回。

3.	最后返回打开的独立复合索引中标识的排序序列，标识的排序序列按照标识在独立的复合索引中创建的序列返回。

如果 nIndexNumber 大于打开的单项索引文件、结构复合索引标识和独立的复合索引标识的总数目，则返回空字符串。

nWorkArea

指定表的工作区，IDXCOLLATE( ) 函数返回该表的索引文件和索引标识的排序序列。

如果指定的工作区中没有打开的表，IDXCOLLATE( ) 函数将返回空字符串。

cTableAlias

指定表的别名，IDXCOLLATE( ) 返回该表的索引文件和索引标识的排序序列。

如果指定的表别名不存在，Visual FoxPro 产生错误信息。

返回值类型

字符型

说明

IDXCOLLATE( ) 函数可以返回多项复合索引文件中每一标识的排序序列，这样只需使用一系列的 SET COLLATE 和 INDEX 命令，就可以完全删除一个索引文件，然后再正确地重建这个索引文件。

注意：REINDEX 的某些功能并不需要 IDXCOLLATE( )，因为其排序序列信息已经存放在索引和索引标识中。

有关 Visual FoxPro 国际支持方面的其他内容，请参阅《开发指南》第二十章“开发国际应用程序”。


下面示例先打开 testdata 数据库的 customer 表，然后使用
* FOR ... ENDFOR 创建一个循环，在该循环中应用
* IDXCOLLATE( ) 函数来显示 customer 结构索引中每个索引
* 标识的排序序列，每个结构索引标识的名称和它的排序序列
* 一起显示。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

CLEAR

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引标识

? TAG(nCount) + ' '  && 显示标识名

?? IDXCOLLATE(nCount)  && 显示排序序列

ELSE

EXIT  && 在找到所有的标识之后退出循环

ENDIF

ENDFOR


请参阅

SET COLLATE


IF ... ENDIF 命令

请参阅	示例

根据逻辑表达式值，有选择地执行一组命令。

语法

IF lExpression
Commands
[ELSE
Commands]
ENDIF

参数

lExpression

指定要计算的逻辑表达式。如果 lExpression 的计算结果为“真”（.T.），则执行 IF 语句之后、ELSE 或 ENDIF 语句（以先出现的语句为准）之前的所有命令。

 •	   如果 lExpression 为“假”（.F.）而且包含 ELSE 语句，则执行 ELSE 语句之后、ENDIF 语句之前的所有命令。

 •	   如果 lExpression 为“假”（.F.）但不包含 ELSE 语句，则忽略 IF 语句和 ENDIF 之间的所有命令。在这种情况下，程序从 ENDIF 语句后面的第一条命令开始，继续往下执行。

说明

一个 IF ... ENDIF 语句块之中可以嵌套另一个 IF ... ENDIF 语句块。

注释可以放在 IF、ELSE 和 ENDIF 所在行的后面。在编译和执行时，程序将忽略这些注释。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

GETEXPR 'Enter condition to locate ' TO gcTemp;

TYPE 'L' DEFAULT 'COMPANY = ""'

LOCATE FOR &gcTemp  && 输入 LOCATE 表达式

IF FOUND( )  && 是否找到记录

DISPLAY  && 如果找到，则显示这一条记录

ELSE  && 如果没找到

? 'Condition ' + gcTemp + ' was not found '	&& 显示一条信息

ENDIF

USE


请参阅

DO CASE ... ENDCASE, DO WHILE ... ENDDO, FOR ... ENDFOR, IIF( ), SCAN ... ENDSCAN


IIF( ) 函数

请参阅	示例

根据逻辑表达式的值，返回两个值中的某一个。

语法

IIF(lExpression, eExpression1, eExpression2)

参数

lExpression

指定要计算的逻辑表达式。

eExpression1, eExpression2

如果 lExpression 计算结果为“真”(.T.)，返回 eExpression1；如果 lExpression 为“假”(.F.)，则返回 eExpression2。

返回值类型

字符型、数字型、货币型、日期型或日期时间型

说明

该函数也称作 Immediate IF。它计算一个逻辑表达式的值，然后根据计算结果，返回两个表达式中的一个。如果逻辑表达式的值为“真”(.T.)，则 IIF( ) 返回第一个表达式；如果逻辑表达式的值为“假”(.F.)，则 IIF( ) 返回第二个表达式。

提示

对于简单的条件表达式，该函数可以代替 IF ... ENDIF 语句。在按条件指定报表和标签表达式中的字段内容时 IIF( ) 特别有用。IIF( ) 函数比等价语句 IF ... ENDIF 执行速度快得多。


* 下面示例用 IIF( ) 函数检查 category 表中的 described 字段
* 是否为空。如果为空，则显示“No description”；否则，显示备注
* 字段的内容。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开 Employee 表

CLEAR

SCAN

? IIF(EMPTY(notes), 'No notes', notes) 	&& 备注字段是否为空?

ENDSCAN


请参阅

IF ... ENDIF


Image 控制
Image（图象）控制

请参阅	属性	事件	方法

创建一个可以显示 .BMP 图片的图象控制。

语法

Image

说明

图象控制是一种图形控制，可以显示 .BMP 图片，但不能直接修改图片。然而，同其他控制一样，图象控制具有一整套属性、事件和方法，因而可以响应事件，并且可以在运行时改变自己。

有关创建图象的其他详细内容，请参阅《开发指南》第十一章“使用控制”。


 属性

BackStyle	BaseClass	BorderColor
BorderStyle	Class	ClassLibrary
Comment	DragIcon	DragMode
Enabled	Height	HelpContextID
Left	MousePointer	Name
Parent	ParentClass	Picture
ReadObject	Stretch	Tag
Top	Visible	Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
Init	MouseDown	MouseMove
MouseUp	RightClick	UIEnable


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	SaveAsClass
WriteExpression	WriteMethod	ZOrder


请参阅

CREATE CLASS, CREATE 表单, DEFINE CLASS


IMESTATUS( ) 函数

请参阅

打开或关闭 IME（输入法编辑器）窗口或者返回当前的 IME 状态。

语法

IMESTATUS([nExpression])

参数

nExpression

打开或关闭 IME（输入法编辑器）窗口。下表列出了 nExpression 的值和相应的 IME 窗口的状态。

nExpression	IME 窗口动作
0	关闭 IME 窗口
1	打开 IME 窗口
如果省略 nExpression，IMESTATUS( ) 返回当前的 IME 状态。下表列出了 IME 状态的返回值，使用 VERSION(3) 决定当前环境。

返回值	IME 状态
0	没有安装 IME
1	打开 IME
2	关闭 IME
3	使 IME 不可用
下表列出了日语环境下 IME 状态的返回值。

返回值	IME 状态
4	Hiragana 双字节
5	Katakana 双字节
6	Katakana 单字节
7	Alphanumeric 双字节
8	Alphanumeric 单字节
下表列出了朝鲜语环境下 IME 状态的返回值。

返回值	IME 状态
4	Hangeul 方式
5	Junja 方式（双字节）.
6	Hanja 转换方式
返回值类型

数值型


请参阅

输入国际字符, ISLEADBYTE( ) 函数, STRCONV( ) 函数


IMPORT 命令

请参阅

从外部文件导入数据，创建一个 Visual FoxPro 新表。

语法

IMPORT FROM FileName
[TYPE] FW2 | MOD | PDOX | RPD
| WK1 | WK3 | WKS | WR1 | WRK | XLS
| XL5 [SHEET cSheetName]
[AS nCodePage]

参数

FileName

指定导入数据的文件名。如果不包含文件扩展名，则使用默认扩展名。

TYPE

关键字 TYPE 是可选的，但 IMPORT 命令中必须包含以下某种文件类型。

文件类型	说明
FW2	包含 FW2 表示要导入由 Framework II 创建的 FW2 型文件。
MOD	包含 MOD 表示要导入由 Microsoft Multiplan 4.0 创建的 MOD 型文件。
PDOX	包含 PDOX 可导入 Paradox 文件，要导入 Borland 公司的 Paradox 3.5 和 4.0 中的数据库文件，可以包含 PDOX。
RPD	包含 RPD 可导入由 RapidFile 创建的 RPD 型文件。
WK1 | WK3 | WKS	包含 WK1 可以从 Lotus 1-2-3 的电子表格中导入数据。电子表格中的列变为表中的字段，行变为表中的记录。Lotus 1-2-3 2.X 创建的电子表格以 WK1 为扩展名；Lotus 1-2-3 3.X 创建的电子表格以 WK3 为扩展名；Lotus 1-2-3 1-A 创建的电子表格以 WKS 为扩展名。
WR1 | WRK	包含 WR1 可由 Lotus Symphony 电子表格导入数据。电子表格中的列变为表中的字段，行变为表中的记录。Symphony 1.10 产生的电子表格以 WR1 为扩展名，Symphony 1.1 产生的电子表格以 .WRK 为扩展名。
XLS	包含 XLS 可从 Microsoft Excel 2.0、3.0 和 4.0 的工作表中导入数据。工作表中的列变为表中的字段，行变为表中的记录。Microsoft Excel 创建的工作表文件以 .XLS 为扩展名。
XL5 [SHEET cSheetName]	包含 XL5 可以从 Microsoft Excel 5.0 中导入数据。工作表中的列变为表中的字段，行变为表中的记录。Microsoft Excel 创建的工作表文件以 .XLS 为扩展名。 如果省略了 SHEET 子句，则 Visual FoxPro 从 SHEET1 中导入数据。若要从某一指定工作表中导入数据，就应包含关键字 SHEET，并用参数 cSheetName 来指定工作表的名称。
AS nCodePage

指定导入文件的代码页。Visual FoxPro 复制导入文件的内容，并且在复制同时，把数据自动转换成当前 Visual FoxPro 代码页。

如果 Visual FoxPro 不支持指定的 nCodePage 的值，会产生错误信息。也可以使用获取 nCodePage 的 GETCP( ) 函数来显示“代码页”对话框，并在对话框中指定一个代码页。

如果省略了 AS nCodePage，而 Visual FoxPro 不能决定导入文件的代码页，Visual FoxPro 会复制导入文件的内容，而且在复制的同时把数据自动转换成当前的 Visual FoxPro 代码页；如果省略了 AS nCodePage 子句而 Visual FoxPro 可以决定导入文件的代码页，则 Visual FoxPro 会自动将导入文件中的数据从数据代码页转换成当前的 Visual FoxPro 代码页。使用 CPCURRENT( ) 可以确定当前的 Visual FoxPro 代码页。

如果 nCodePage 的值为 0，Visual FoxPro 假定导入文件的代码页即为当前的 Visual FoxPro 代码页，并且不进行代码页转换。

说明

大部分软件包以自己可以使用的文件格式存储数据，Visual FoxPro 不能直接打开它们。IMPORT 命令使用存储于 Visual FoxPro 不能直接读的文件格式中的数据创建新的 Visual FoxPro 表。

新创建的表与导入数据的文件名同名，但以 .DBF 为扩展名。


请参阅

APPEND FROM, COPY TO, EXPORT, GETCP( )


Increment 属性

请参阅

单击上箭头或下箭头时，微调控制中数值增加或减小的量。

应用于

微调

语法

Spinner.Increment[ = nIncrement]

设置

nIncrement

指定单击向上箭头时微调中增加的数值和单击下箭头时微调减少的数值。默认值为 1.00。

说明

设计和运行时可用。


请参阅

RangeLow 事件


IncrementalSearch 属性

请参阅

指定控制是否支持对键盘操作的递增搜索。

应用于

组合框，列表框

语法

Control.IncrementalSearch[ = lExpr]

设置

lExpr

下表列出了 IncrementalSearch 属性的设置：

设置	说明
“真”(.T.)	（默认设置）支持递增搜索。
“假”(.F.)	不支持递增搜索。
说明

设计和运行时可用。

下面举例说明什么是递增搜索。比如要搜索“ELASTIC”这个单词，可以键入 E-L-A，…等等。在键入字母的时候，Visual FoxPro 会逐步搜索所键入字母的组合，逐字匹配要找的单词。在非递增搜索的情况下，它会找首字母为 E 的第一个单词，然后再找首字母为 L 的第一个单词，…以此类推。


请参阅

组合框, 列表框


INDBC( ) 函数

请参阅	示例

如果指定的数据库对象在当前数据库中，则返回“真”（.T.）；否则返回“假”（.F.）。

语法

INDBC(cDatabaseObjectName, cType)

参数

cDatabaseObjectName

指定一个命名连接、字段、索引、表或者 SQL 视图的名称，INDBC( ) 函数将据此返回一个逻辑值，表明该对象是否存在于当前数据库中。

cType

指定 cDatabaseObjectName 的数据库对象类型。下表列出了 cType 可能的取值和相应的数据库对象类型：

cType	数据库对象类型
CONNECTION	命名连接
FIELD	字段
INDEX	索引
TABLE	表
VIEW	SQL 视图
CONNECTION、FIELD、INDEX、TABLE 和 VIEW 不能简写。

返回值类型

逻辑型

说明

执行 INDBC( ) 函数时，必须打开一个数据库并把它设置为当前数据库。否则，Visual FoxPro 会产生错误信息。


* 下面示例中，创建一个名为 mydbc 的临时数据库，并把名为
* mytable 的临时表添加到这个数据库中，然后用 INDBC( ) 函数
* 来检查这个新创建的表是否在该数据库中，最后关闭所创建的
* 数据库和表，并删除它们。

CLOSE DATABASES

CREATE DATABASE mydbc  && 创建一个新数据库

CREATE TABLE mytable (field1 C(10)) && 自动添加到数据库中

? 'MyTable in the database? '

?? INDBC('mytable', 'TABLE')  && 返回 .T.

CLOSE DATABASES

DELETE DATABASE mydbc DELETETABLES


请参阅

ADBOBJECTS( ), CREATE DATABASE, DELETE DATABASE, OPEN DATABASE, SET DATABASE


_INDENT 系统内存变量

请参阅

使每段的第一行产生缩进。包含此内存变量是为了提供向后兼容性。可以用报表设计器代替。

语法

_INDENT = nCharacters

参数

nCharacters

指定由左页边距缩进或凸出的字符数。

说明

_INDENT 命令包含一个数值，定义 ? 命令输出时每段的第一行都从左页边距缩进（或凸出）一定的字符数。

只有当 _WRAP 设置成“真”(.T.) 时，_INDENT 才处于激活状态。


请参阅

_LMARGIN, _PLOFFSET, _RMARGIN, SET MARGIN, _WRAP


INDEX 命令

请参阅	示例

创建一个索引文件，利用该文件可以按某种逻辑顺序显示和访问表记录。

语法

INDEX ON eExpression TO IDXFileName | TAG TagName [OF CDXFileName]
[FOR lExpression]
[COMPACT]
[ASCENDING | DESCENDING]
[UNIQUE | CANDIDATE]
[ADDITIVE]

参数

eExpression

指定一个索引表达式，该表达式中可以包含当前表中的字段名。在索引文件中，按索引表达式给每一个表记录都创建一个索引关键字，Visual FoxPro 使用这些关键字来显示和访问表中的记录。

附注

尽管不提倡，eExpession 也可以是一个内存变量、数组元素或者其他工作区中表的字段或字段表达式。备注字段不能单独用于索引文件表达式中，它们必须与其他的字符表达式结合起来。如果索引中包含的变量或字段不存在或不能定位，Visual FoxPro 会产生错误信息。

如果索引表达式中的字段以表别名或工作区字母开头，Visual FoxPro 会产生错误信息。虽然在包含别名字段的情况下，可以用 Rushmore 技术优化 FOR 子句，但在创建索引时最好避免使用别名字段。在有些情况下（USE ... AGAIN、SQL 查询等等），Visual FoxPro 会自动给表指定一个不同的别名，这时可能不能正确更新或使用索引。有关 Rushmore 技术的详细内容，请参阅《开发指南》第十七章“优化应用程序”。

如果要建立一个具有可变长度关键字的索引，关键字会被空格填充。Visual FoxPro 不支持可变长度的索引关键字。

索引关键字的长度可以为 0。例如，当索引表达式是空备注字段的一个子字符串时，所创建的索引关键字长度就为 0。当 Visual FoxPro 创建索引时，它检验表中第一个记录的字段，如有一个字段为空，可能需要向第一个记录中这样的字段内填入一些临时数据，以免产生长度为 0 的索引关键字。

TO IDXFileName

创建 .IDX 索引文件。索引文件的默认扩展名为 .IDX，可以使用一个与之不同的扩展名，也可以在 Visual FoxPro 配置文件内改变索引文件的这个默认扩展名。创建索引文件时，必须遵循标准 MS-DOS 的文件命名规则。

TAG TagName [OF CDXFileName]

创建一个复合索引文件。复合索引文件是一种可包含任意数量的独立标识（索引项）的单个索引文件，每一个标识都由其唯一标识名确定。标识名必须以字母或下划线开头，最多可由 10 个字母、数字或下划线组成。复合索引文件中的标识数目仅受可用内存和磁盘空间的限制。

多项复合索引文件一般是压缩的。创建复合索引文件时不必包含 COMPACT 。复合索引文件的扩展名为 .CDX。

可创建的复合索引文件有两种类型：结构复合索引文件的和非结构复合索引文件。

结构复合索引文件

在 TAG TagName 参数中不包含可选的 OF CDXFileName 子句，便可以创建结构复合索引文件。结构复合索引文件的基本名（不含扩展名的文件名）总是与表的基本名相同，并且自动与表同时打开。

如果一个表的复合索引文件不能被定位、已被删除，或者已被重命名，则在打开该表时会显示一个对话框。这时如果在对话框中选择默认的“取消”按钮，则不打开表；如选择“忽略”按钮，则打开该表，并且删除表头中的标记。表头表明该表与结构复合索引文件相关联。

提示

如果一个结构复合索引已经与它的表脱离关系，则用下面的命令可以使它重新和表相关联：

USE TableName INDEX CDXFileName

其中，CDXFileName 是与表脱离关系的结构复合索引名。如果结构复合索引与表脱离关系以后对表进行了修改，则需要重索引该表。

非结构复合索引文件

在 TAG TagName 参数之后包含 OF CDXFileName，便可以创建非结构复合索引文件。与结构复合索引不同的是，必须明确使用 SET INDEX 命令或 USE 命令中的 INDEX 子句打开非结构复合索引文件。

创建并打开一个复合索引文件之后，执行带有 TAG TagName 参数的 INDEX 命令可以在该复合索引文件中添加一个标识。

FOR lExpression

指定一个条件，只显示或访问满足这个条件表达式 lExpression 的记录，索引文件只为那些满足条件表达式的记录创建索引关键字。

如果 lExpression 是一个可优化表达式，Rushmore 将优化 INDEX ... FOR lExpression 命令。要获取最佳性能，请在 FOR 子句中使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或者《开发指南》第十七章“优化应用程序”。

COMPACT

使用 COMPACT 可以创建一个压缩的 .IDX 文件。

ASCENDING

指定 .CDX 文件为升序。在默认情况下，按升序创建 .CDX 标识（包含 ASCENDING 参数可以将索引文件的排序方式明确指示出来）。同样，包含 DESCENDING 可按降序索引一个表。

DESCENDING

指定 .CDX 文件为降序。在创建 .IDX 文件时不能包含 DESCENDING 参数，但可以用 SET INDEX 或 SET ORDER 命令将 .IDX 索引文件指定为降序。

UNIQUE

对于一个索引关键字值，只有第一个满足该值的记录包含在 .IDX 文件或 .CDX 标识中。利用 UNIQUE 子句可以避免显示或访问记录的重复值。所有添加到表中的记录，如果与表中原有记录有重复的索引关键字值，则不包含在索引文件之内。使用 INDEX 命令的 UNIQUE 选项，与在执行 INDEX 或 REINDEX 命令之前执行 SET UNIQUE ON 命令完全等效。

在 UNIQUE 索引或索引标识处于激活状态时，如果更改了一个有重复索引关键字值的记录，则同时需要更新索引或索引标识。但在重新用 REINDEX 命令重索引该文件之前，仍然不能访问下一个有相同索引关键字值的记录。

CANDIDATE

创建候选结构索引标识。只有在创建结构索引标识时才能包含关键字 CANDIDATE；否则，Visual FoxPro 会产生错误信息。

使用候选索引标识可以避免索引表达式 eExpression 指定的字段或字段组合有重复值。Candidate（候选）一词是指索引类型；因为候选索引中不同的记录没有重复值，所以它们可以作为主索引的“候选”索引。

如果一个字段或字段组合已包含重复值，那么为它创建候选索引标识时，Visual FoxPro 会产生错误信息。

有关候选索引标识和主索引标识的详细内容，请参阅设置主索引或候选索引 和《开发指南》第七章“处理表”。

ADDITIVE

所有先前已打开的索引文件保持打开状态。如省略 ADDITIVE 子句，则在用 INDEX 命令创建索引文件或表时，关闭所有先前已打开的索引文件（结构复合索引文件除外）。

说明

在具有索引文件的表中，可以按索引表达式所规定的顺序显示或访问记录，但并不按索引文件更改表的物理存储顺序。

如果 SET TALK 设置成 ON，则在索引过程中，Visual FoxPro 会报告已建立索引的记录数目。索引过程中显示记录的计数器间隔可由 SET ODOMETER 指定。

使用 DISPLAY STATUS 命令可以显示打开的索引文件的许多内容，其中包括所有打开的索引文件的文件名、类型（结构、非结构的 .CDX、.IDX）、索引表达式、排序序列以及主控索引文件名或主控标识名。

可以打开的索引文件（.CDX 或 .IDX）数目只受内存或系统资源的限制。在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，能打开的文件总数目由 MS-DOS 的配置文件 CONFIG.SYS 中的 FILES 设置决定。有关 FILES 设置的详细内容，请参阅 MS-DOS 手册。

索引类型

Visual FoxPro 允许创建两种类型的索引文件：

 •	   包含多个索引标识项（索引名）的 .CDX 复合索引文件

 •	   包含一个索引项的 .IDX 单项索引文件

也可以创建结构复合索引文件，这种索引文件在打开表时自动打开。

提示

因为结构复合索引文件随表的打开而自动打开，所以这种类型比较常用。

包含 COMPACT 子句可创建压缩的 .IDX 索引文件，复合索引文件总是压缩的。

在 Visual FoxPro 与 FoxBASE+ 或 FoxBASE+ for Macintosh 中共享文件时，应该使用非压缩的 .IDX 索引文件。否则，在创建 .IDX 时，应包含 COMPACT 子句以利用 Visual FoxPro 的 Rushmore 技术。

索引的顺序与更新

表的显示或访问顺序只由一个索引文件（主控索引文件）或标识（主控标识）控制。有一些命令（如 SEEK 命令）使用主控索引文件或标识搜索记录，但是在修改表时，所有已打开的 .IDX 和 .CDX 索引文件都将被更新。使用 USE 命令的 INDEX 子句或 SET INDEX 和 SET ORDER 命令可以指定主控索引文件或标识。

用户自定义函数

索引表达式中虽然可以包含用户自定义函数，但最好不要这样做，因为索引表达式中使用用户自定义函数会增加创建或更新索引所需的时间。另外，如果索引表达式中使用了用户自定义函数，有可能不更新这个索引。

如果索引表达式中使用了用户自定义函数，则应该保证 Visual FoxPro 能够找到这个函数。当 Visual FoxPro 创建索引时，索引表达式存储在索引文件中，但用户自定义函数并不存储在索引文件中，索引文件中只保存指向用户自定义函数的引用。


*在例 1 中，打开 customer 表，并创建一个名为 complist 的索引
* 文件，该索引文件按 company 字段的字母顺序显示和处理记录。

*在例 2 中，再一次打开 customer 表，并创建名为 citycomp 的
* 索引文件，其索引表达式由 city 字段的前 5 个字母和 company
* 字段的前 6 个字母组成。在使用该文件时，表记录先根据 city
* 字段排列顺序，然后才按 company 字段排序。

*在例 3 中，创建了一些索引标识：第一个是 address1 的结构复合
* 索引标识，第二个是在名为 custcdx 的非结构索引文件中创建
* 的，最后一个也是在非结构索引文件 custcdx 中创建的，但按
* 照递减顺序。

* 示例 1

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

INDEX ON company TO complist

CLEAR

DISPLAY STATUS

* 示例 2

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

INDEX ON SUBSTR(city,1,5) + SUBSTR(company,1,6) TO citycomp

CLEAR

DISPLAY STATUS

* 示例 3

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

INDEX ON address TAG address

INDEX ON company TAG company OF custcdx

CLEAR

DISPLAY STATUS


请参阅

ALTER TABLE, COPY INDEXES, COPY TAG, DELETE TAG, REINDEX, SET COLLATE, SET INDEX, SET ODOMETER, SET ORDER, SET TALK, SET UNIQUE, SORT, USE


IndexToItemID 方法

请参阅

返回一个指定项的 ID 号。

应用于

组合框，列表框

语法

[nItemID =] Control.IndexToItemID(nIndex)

参数

nItemID

指定唯一标识号。

nIndex

指定编号，该编号代表在控制中显示对象的位置。

说明

每一个添加到组合框或列表框中的项都有两个标识号：

 •	   nItemID，唯一的标识编号。

 •	   nIndex，一个整数，对应于控制中显示项的排列位置：列表中的第一个项对应于 nIndex = 1。

在对象刚添加到控制中时，这两个编号是相同的。但随着对象的排序、删除和添加，它们就不一定再相等了。

如果知道控制中一个特定项的 nIndex 号时，可使用 IndexToItemID 方法返回它的 nItemID 号。


请参阅

AddItem 方法，AddListItem 方法，ItemIDToIndex 方法


Init 事件

请参阅

在创建对象时发生。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，临时表，自定义控制，数据环境，编辑框，表单，表单集，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，关系，形状，微调，文本框，计时器，工具栏

语法

PROCEDURE Object.Init
[LPARAMETERS Param1, Param2,...]

参数

Param1, Param2...

参数是可选的。但是如果传递参数，就必须用 LPARAMETERS 或 PARAMETERS 语句列出每一个参数，否则 Visual FoxPro 产生错误信息。

说明

对于表单集和其他容器对象来说，容器中对象的 Init 事件在容器的 Init 事件之前触发，因此容器的 Init 事件可以访问容器中的对象。容器中对象的 Init 事件的发生顺序与它们添加到容器中的顺序相同。

如果不创建控制，可在 Init 事件中返回“假”（.F.），这时不触发 Destroy 事件。例如，下面的代码在 Invoice 表不存在时返回“假”（.F.）：

PROCEDURE INIT

    IF NOT FILE("INVOICE.DBF")

      ERROR Initialization Failed: File not found

      RETURN .F.

    ELSE

      USE INVOICE IN 0 AGAIN

      THIS.WorkArea = SELECT()

    ENDIF

ENDPROC


请参阅

AddObject 方法，CREATEOBJECT( )，Load 事件


InitialSelectedAlias 属性

请参阅

在加载数据环境时，指定一个与临时表对象相关联的别名作为当前别名。

应用于

数据环境

语法

DataEnvironment.InitialSelectedAlias[ = cText]

设置

cText

指定一个与临时表对象相关联的别名。

说明

设计时可用，运行时只读。

与 SELECT 语句的执行方式相似。


请参阅

Alias 属性，SELECT


INKEY( ) 函数

请参阅

返回一个编号，该编号对应于键盘缓冲区中第一个鼠标单击或按键操作。

语法

INKEY([nSeconds] [, cHideCursor])

参数

nSeconds

以秒为单位，指定 INKEY( ) 函数对键击的等待时间。如果不包含 nSeconds，INKEY( ) 函数立即返回一次键击的值；如果 nSeconds 为 0，INKEY( ) 函数一直等待到有键击为止。

cHideCursor

显示或隐藏光标，或者检查鼠标单击。若要显示光标，请在 cHideCursor 中包含 S；若要隐藏光标，请在 cHideCursor 中包含 H；如果既包含 S 又包含 H，则使用后一个字符的设置。

默认时，INKEY( ) 函数不检查鼠标单击。如果要检查鼠标单击，可在 cHideCursor 中包含 M。若在 cHideCursor 中包含了 M，则 INKEY( ) 函数返回 151 表示一次鼠标单击。要查看如何检查双击，请参阅下表中的第二个示例。

如果既要检查鼠标单击又要显示光标，可在 cHideCursor 中包含 M 和 S；若要检查鼠标单击并且隐藏光标，可包含 M 和 H。

当为一个键或组合键指定了键盘宏时，在 cHideCursor 中包含 E 可以扩展键盘宏。包含 E 时，INKEY( ) 函数将返回指定给键盘宏的第一个键击所对应的值，重复执行包含 E 的 INKEY( ) 函数，可返回后续键击所对应的值；如省略 E，INKEY( ) 函数将返回触发键盘宏的键或组合键本身的对应值。

在 cHideCursor 中，除了 H、M、S 和 E 之外的其他字符都被忽略。

下表列出了单键以及单键与 Shift、Ctrl 和 Alt 组合键时 INKEY( ) 函数的返回值。

键名	单键	Shift	Ctrl	Alt
F1	28	84	94	104
F2	-1	85	95	105
F3	-2	86	96	106
F4	-3	87	97	107
F5	-4	88	98	108
F6	-5	89	99	109
F7	-6	90	100	110
F8	-7	91	101	111
F9	-8	92	102	112
F10	-9	93	103	113
F11	133	135	137	139
F12	134	136	138	140
1	49	33		120
2	50	64	33	121
3	51	35		122
4	52	36		123
5	53	37		124
6	54	94	30	125
7	55	38		126
8	56	42		127
9	57	40		128
0	48	41		19
a	97	65	1	30
b	98	66	2	48
c	99	67	3	46
d	100	68	4	32
e	101	69	5	18
f	102	70	6	33
g	103	71	7	34
h	104	72	127	35
i	105	73	9	23
j	106	74	10	36
k	107	75	11	37
l	108	76	12	38
m	109	77	13	50
n	110	78	14	49
o	111	79	15	24
p	112	80	16	25
q	113	81	17	16
r	114	82	18	19
s	115	83	19	31
t	116	84	20	20
u	117	85	21	22
v	118	86	22	47
w	119	87	23	17
x	120	88	24	45
y	121	89	25	21
z	122	90	26	44
Ins	22	22	146	162
Home	1	55	29	151
Del	7	7	147	163
End	6	49	23	159
Pageup	18	18	31	153
pagedown	3	3	30	161
Up Arrow	5	5	141	152
Down Arrow	24	24	145	160
Right Arrow	4	4	2	157
Left Arrow	19	19	26	155
Esc	27	27	27	1
Enter	13	13	10	28
Backspace	127	127	127	14
Tab	9	15	148	165
SPACEBAR	32	32	32	57
返回值类型

数值型

说明

如果没有按下键，则 INKEY( ) 函数返回 0；如果键盘缓冲区中有多个键，INKEY( ) 函数只返回第一个输入到缓冲区的键的值。


请参阅

_DBLCLICK，KEYBOARD，KeyPress 事件，LASTKEY( )，ON KEY，READKEY( )，SET TYPEAHEAD


INLIST( ) 函数

请参阅	示例

判断一个表达式是否与一组表达式中的某一个相匹配。

语法

INLIST(eExpression1, eExpression2 [, eExpression3 ...])

参数

eExpression1

指定 INLIST( ) 函数要在表达式组中搜索的表达式。

eExpression2 [, eExpression3 ...]

指定要搜索的表达式组。表达式组中必须至少包含一个表达式 ( eExpression2)，最多可包含 24 个。

表达式组中的所有表达式必须具有相同的数据类型。

返回值类型

逻辑型或 null 值

说明

如 INLIST( ) 函数在表达式组中找到了要搜索的表达式，就返回“真”（.T.）；否则，返回“假”（.F.）。如果 eExpression1 为 null 值，则 INLIST( ) 函数返回 null 值；如果 eExpression1 与表达式组中的任何表达式都不匹配，或者表达式组中有一个表达式为 null 值，INLIST( ) 函数也返回 null 值。


*下面的示例用 INLIST( ) 函数来判断当前月份属于一年中的哪一个季
* 度，变量 gcMonth 中存储的是当前月份。每个 CASE 语句利用
* INLIST( ) 函数来判断 gcMonth 的值是否包含在一个月份列表中，
* 返回的季度名称保存在变量 gcReporTitle 中。

SET TALK ON

STORE CMONTH(DATE( )) TO gcMonth

DO CASE

CASE INLIST(gcMonth,'January','February','March')

STORE 'First Quarter' TO gcReporTitle

CASE INLIST(gcMonth,'April','May','June')

STORE 'Second Quarter' TO gcReporTitle

CASE INLIST(gcMonth,'July','August','September')

STORE 'Third Quarter' TO gcReporTitle

OTHERWISE

STORE 'Fourth Quarter' TO gcReporTitle

ENDCASE

WAIT WINDOW gcReporTitle


请参阅

BETWEEN( )


INPUT 命令

请参阅

从键盘输入数据，送到一个内存变量或数组元素中。包含此命令是为了提供向后兼容性。可用文本框控制代替。

语法

INPUT [cMessageText] TO MemVarName

参数

cMessageText

提示信息。提示用户输入数据。

MemVarName

指定一个内存变量或数组元素，存储从键盘输入的数据。如果指定的内存变量或数组元素不存在，Visual FoxPro 将自动创建 MemVarName。

从键盘输入的表达式决定了内存变量或数组元素的创建类型。如果输入一个数值，则创建的内存变量或数组元素就是数值型的；如果输入一个字符型的值，创建的内存变量或数组元素就是字符型的，依此类推。另外，输入的字符值必须用方括号或引号加分隔。


请参阅

文本框控制，WAIT


InputMask 属性

请参阅

指定控制中数据的输入格式和显示方式。

应用于

微调，文本框

语法

Control.InputMask[ = cMask]

设置

cMask

下表列出了对 InputMask 属性的设置：

设置	说明
X	可输入任何字符。
9	可输入数字和正负符号，如负号 (  ) 。
#	可输入数字、空格和正负符号。
$	在某一固定位置显示（由 SET CURRENCY 命令指定的）当前货币符号。
$$	在微调控制或文本框中，货币符号显示时不与数字分开。
*	在值的左侧显示星号。
.	句点分隔符指定小数点的位置。
,	逗号可以用来分隔小数点左边的整数部分。
说明

设计和运行时可用。

该属性与 Format 属性恰恰相反，Format 属性指定了整个输入字段的输入方式。可以同时使用几种 Format 代码，不过它们都会影响整个输入字段。


请参阅

Format 属性


INSERT 命令

请参阅

在当前表中插入一个新记录。包含此命令是为了提供向后兼容性。可以使用 APPEND 或 INSERT - SQL 命令代替。

语法

INSERT [BEFORE] [BLANK]

参数

BEFORE

在当前表的当前记录前插入一个新记录，然后显示这个记录，并可对它进行编辑。在编辑窗口中可以继续添加新记录。

BLANK

在当前记录后插入一个空记录。不显示编辑窗口。

说明

如果发出的 INSERT 命令中不包含 BEFORE 和 BLANK 子句，则在表的当前记录之后添加一个新记录，随后显示该记录以便编辑。在编辑窗口中可以继续添加新记录。

在 Visual FoxPro 中，如果数据库具有表缓冲或行缓冲功能，则 INSERT 命令不能用于该数据库的表；对具有参照完整性规则（如触发器、主关键字或候选关键字，等等）的表也不能使用 INSERT 命令。有关表缓冲和行缓冲的详细内容，请参阅 CURSORSETPROP( )。有关参照完整性的其他内容，请参阅《开发指南》第七章“处理表”。

如果 SET CARRY 设置成 ON，则当前记录中的数据会自动复制到新记录中。

如果该文件已建立索引，INSERT 命令的功能与 APPEND 命令类似。

附注

在较大的表中不宜使用 INSERT 命令，因为在表的前部插入记录时，几乎要重写每一个记录，这样做要花费很长的时间。最好使用 INSERT - SQL 命令。


请参阅

APPEND，CHANGE，EDIT，INSERT - SQL，SET CARRY


INSERT - SQL 命令

请参阅	示例

在表尾追加一个包含指定字段值的记录。

语法

INSERT INTO dbf_name [(fname1 [, fname2, ...])]
VALUES (eExpression1 [, eExpression2, ...])
 — 或者 —
INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR

参数

INSERT INTO dbf_name

指定要追加记录的表名。dbf_name 中可以包含路径，也可以是一个名称表达式。

如果指定的表没有打开，则 Visual FoxPro 先在一个新工作区中以独占方式打开该表，然后再把新记录追加到表中。此时并未选定这个新工作区，选定的仍然是当前工作区。

如果所指定的表是打开的，INSERT 命令就把新记录追加到这个表中。如果表不是在当前工作区打开的，则追加记录后表所在的工作区仍然不是选定工作区，选定的仍然是当前工作区。

[(fname1 [, fname2 [, ...]])]

指定新记录的字段名，INSERT - SQL 命令将向这些字段中插入字段值。

VALUES (eExpression1 [, eExpression2 [, ...]])

新插入记录的字段值。如果省略了字段名，那么必须按照表结构定义字段的顺序来指定字段值。

FROM ARRAY ArrayName

指定一个数组，数组中的数据将被插入到新记录中。从第一个数组元素开始，数组中的每个元素的内容依次插入到记录的对应字段中。第一个数组元素的内容插入到新记录的第一个字段，第二个元素的内容插入到第二个字段，… 依次类推。

FROM MEMVAR

把内存变量的内容插入到与它同名的字段中。如果某一字段不存在同名的内存变量，则该字段为空。

说明

新记录中包含了 VALUE 子句列出的值，或包含指定的数组或内存变量中的值。插入新记录后，记录指针指向新记录。


*下面的例子先打开 testdata 数据库中的 customer 表，把当前表的
* 内容分散存储于内存变量中，再把当前表的结构复制到一个名为
* cust2 的新表，然后使用 INSERT - SQL 命令在 cust2 表中插入一
* 个新记录，最后发出 BROWSE 命令显示这个新记录。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

SCATTER MEMVAR

COPY STRUCTURE TO cust2

INSERT INTO cust2 FROM MEMVAR

SELECT CUST2

BROWSE


请参阅

CREATE QUERY，CREATE TABLE - SQL，MODIFY QUERY，SELECT - SQL


INSMODE( ) 函数

请参阅	示例

返回当前的插入方式，或者把插入方式设置成 ON 或 OFF。

语法

INSMODE([lExpression])

参数

lExpression

把插入方式设置成 ON 或 OFF。INSMODE(.T.) 将插入方式设置成 ON，INSMODE(.F.) 将插入方式设置成 OFF。返回的逻辑值表示在执行 INSMODE(.T.) 或 INSMODE(.F.) 之前的插入方式。

返回值类型

逻辑型

说明

省略可选参数时，如果插入方式处于 ON 状态（在光标前面插入字符），则 INSMODE( ) 函数返回“真”(.T.)；如果插入方式处于 OFF 状态（改写光标所在位置的字符），则 INSMODE( ) 函数返回“假”(.F.)。


* 下面的示例利用 INSMODE( ) 函数把插入方式设置成 ON，然后
* 再把插入方式切换成相反的状态。

SET TALK ON

=INSMODE(.T.)  && 把插入方式置为 ON

? INSMODE( )

= INSMODE(!INSMODE( ))  && 把插入方式切换到相反的状态

? INSMODE( )


请参阅

CAPSLOCK( )，NUMLOCK( )，SYS(2008) - 插入点形状，SYS(2009) - 切换插入点形状


INT( ) 函数

请参阅	示例

计算一个数值表达式的值，并返回其整数部分。

语法

INT(nExpression)

参数

nExpression

指定 INT( ) 要计算的数值表达式。

返回值类型

数值型


CLEAR

? INT(12.5)  && 显示 12

? INT(6.25 * 2)  && 显示 12

? INT(-12.5)  && 显示 -12

STORE -12.5 TO gnNumber

? INT(gnNumber)  && 显示 -12


请参阅

CEILING( )，FLOOR( )，ROUND( )


InteractiveChange 事件

请参阅

在使用键盘或鼠标更改控制的值时，此事件发生。

应用于

复选框，组合框，命令组，编辑框，列表框，选项组，微调，文本框

语法

PROCEDURE Control.InteractiveChange
[LPARAMETERS nIndex]

参数

nIndex

对于控制数组中的控制，指定唯一标识号。

说明

在每次交互地更改对象时，都要发生此事件。例如，当用户在文本框中键入字符时，每一次击键都会触发 InteractiveChange 事件。


请参阅

Click 事件


Interval 属性

请参阅

指定计时器控制的 Timer 事件之间的时间间隔毫秒数。

应用于

计时器

语法

Timer.Interval[ = nTime]

设置

nTime

指定 Timer 事件之间的时间间隔毫秒数。默认值为 0，不触发 Timer 事件。

说明

设计和运行时可用。

有关 Interval 属性的详细内容，请参阅初始化计时器控制，和《开发指南》的第十一章“使用控制”中的“使用计时器控制”部分。


请参阅

Reset 方法，Timer 事件


ISALPHA( ) 函数

请参阅	示例

判断字符表达式的最左边一个字符是否为字母。

语法

ISALPHA(cExpression)

参数

cExpression

ISALPHA( ) 函数所要判断的字符表达式。cExpression 中第一个字符之后的所有字符都将被忽略。

返回值类型

逻辑型

说明

如果字符表达式的第一个字符是字母，ISALPHA( ) 函数将返回“真”(.T.)；否则，返回“假”(.F.)。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

CLEAR

DISPLAY contact

? ISALPHA(contact)  && 显示.T.

DISPLAY maxordamt

? ISALPHA(cust_id)  && 显示.F.


请参阅

ISLOWER( )，ISUPPER( )，LOWER( )，UPPER( )


ISBLANK( ) 函数

请参阅	示例

判断表达式是否为空值。

语法

ISBLANK(eExpression)

参数

eExpression

ISBLANK( ) 要判断的表达式。eExpression 可以是表中的一个字段、一个内存变量或数组元素，也可以是一个表达式。

对一个字段来说，如果该字段包含下述值，则 ISBLANK( ) 函数将返回“真”(.T.)。

类型	内容
字符型	空字符串、空格或无值（新追加的空记录或用 BLANK 命令清除后的记录）
数值型	无值（新追加的空记录或用 BLANK 命令清除后的记录）
浮点型	无值（新追加的空记录或用 BLANK 命令清除后的记录）
日期型	空日期（{  /  /  }）或无值（新追加的空记录或用 BLANK 命令清除后的记录）
日期时间型	空日期时间（{  /  /    :  :  }）或无值（新追加的空记录或用 BLANK 命令清除后的记录）
逻辑型	无值（新追加的空记录或用 BLANK 命令清除后的记录）
备注型	空（无备注内容）
通用型	空（无 OLE 对象）
图片	空（无图片）
返回值类型

逻辑型

说明

如果表达式 eExpression 为空值，则 ISBLANK( ) 函数返回“真”(.T.)；否则，返回“假”(.F.)。

APPEND BLANK 和 BLANK 命令可用来创建空记录。BLANK 命令还可以用来清除一个记录内某些字段中的数据。用 ISBLANK( ) 函数则可以判断一个字段是否为空值。

请注意：货币型、整型、双精度型表达式永远不可能为空值，因而对这些表达式 ISBLANK( ) 函数总是返回“假”(.F.)。

ISBLANK( ) 函数与 EMPTY( ) 和 ISNULL( ) 函数不同。例如，当字符表达式是 null 值、空格、Tab 字符、回车、换行符的某种组合时，EMPTY( ) 函数将返回“真”(.T.)；但只有在字符表达式中仅包含空字符串或空格时，ISBLANK( ) 函数才返回“真”(.T.)。


*在下面的示例中，先创建一个名为 mytable 的表，向表中追加一个
* 空记录。因为此时 myfield 字段是空值，所以 ISBLANK( ) 函数
* 返回“真”(.T.)，然后用一个值替换 myfield 字段的内容。由于这
* 时 myfield 不再是空值，所以 ISBLANK( ) 函数返回“假”(.F.)。

CREATE TABLE mytable FREE (myfield C(20))

APPEND BLANK  && 添加一个空记录

CLEAR

? ISBLANK(myfield)  && 显示 .T.

REPLACE myfield WITH 'John Smith'  && 替换 myfield字段的值

? ISBLANK(myfield)  && 显示 .F.


请参阅

APPEND，BLANK，EMPTY( )，ISNULL( )，LEN( )


ISCOLOR( ) 函数

请参阅	示例

判断当前计算机能否显示彩色。

语法

ISCOLOR( )

返回值类型

逻辑型

说明

在 Visual FoxPro、FoxPro for Windows 以及 FoxPro for MS-DOS 中，如果当前计算机具有彩色显示能力（不管当前所用的是否为彩色监视器），ISCOLOR( ) 函数将返回“真”(.T.)；如果当前计算机不支持彩色显示，ISCOLOR( ) 函数将返回“假”(.F.)。

在 FoxPro for Macintosh 中，如果当前的 Macintosh 以彩色或灰色方式显示，则 ISCOLOR( ) 函数返回“真”(.T.)；如果 Macintosh 以黑白方式显示，则返回“假”(.F.)。


*下面的示例在 FoxPro for MS-DOS 中加载恰当的色彩设置。

IF ISCOLOR（ ) AND _DOS

SET COLOR SET TO color

ENDIF

IF NOT ISCOLOR( ) AND _DOS

SET COLOR SET TO monochrome

ENDIF


请参阅

颜色概述，SET DISPLAY，SYS(2006) - 当前图形适配卡


ISDIGIT( ) 函数

请参阅	示例

判断字符表达式的最左边一个字符是否为数字（0 到 9）。

语法

ISDIGIT(cExpression)

参数

cExpression

指定 ISDIGIT( ) 函数要判断的字符表达式。cExpression 中第一个字符之后的所有字符都被忽略。

返回值类型

逻辑型

说明

如果字符表达式的最左边一个字符是数字（0 到 9），则 ISDIGIT( ) 函数返回“真”(.T.)；否则，ISDIGIT( ) 函数返回“假”(.F.)。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE orders  && 打开 Orders 表

CLEAR

DISPLAY cust_id

? ISDIGIT(cust_id)  && 显示 .F.

DISPLAY order_dsc

? ISDIGIT(ALLTRIM(STR(order_dsc)))  && 显示 .T.


请参阅

ISALPHA( )


ISEXCLUSIVE( ) 函数

请参阅	示例

如果一个表或数据库是以独占方式打开的，则返回“真”(.T.)；否则，返回“假”(.F.)。

语法

ISEXCLUSIVE([cTableAlias | nWorkArea | cDatabaseName [, nType]])

参数

cTableAlias

指定表别名，ISEXCLUSIVE( ) 函数将返回它的独占使用状态。如指定的表别名不存在，Visual FoxPro 会显示错误信息。

nWorkArea

指定一个工作区，ISEXCLUSIVE( ) 函数将返回指定工作区中表的独占使用状态；如果所指定的工作区中没有打开的表，则 ISEXCLUSIVE( ) 函数返回“假”(.F.)。

cDatabaseName

指定数据库名，ISEXCLUSIVE( ) 函数返回该数据库的独占使用状态。

nType

指定所返回的是表的独占使用状态还是数据库的独占使用状态。下表列出了 nType 的值和相应的返回状态。

nType	要返回独占使用状态的对象
1	表
2	数据库
若要判断数据库的独占使用状态，必须把 nType 设置为 2。

返回值类型

逻辑型

说明

如果省略了 cTableAlias、nWorkArea 和 cDatabaseName 三个可选参数，ISEXCLUSIVE( ) 函数返回当前选定工作区中表的独占使用状态。

要以独占方式打开一个表，可以在 USE 命令中包含关键字 EXCLUSIVE 子句，也可以在打开表之前把 SET EXCLUSIVE 设置成 ON。

要以独占方式打开数据库，可在 OPEN DATABASE 命令中包含关键字 EXCLUSIVE。


*在下例中，使用 ISEXCLUSIVE( ) 函数检验表是否以独占方式打
* 开。由于当前工作区中的表不是以独占方式打开，所以表没有
* 被重索引。

cExclusive = SET('EXCLUSIVE')

SET EXCLUSIVE OFF

SET PATH TO (SYS(2004) + 'SAMPLES\DATA\')

OPEN DATA testdata  && 打开一个测试数据库

USE customer	  && 不以独占方式打开 customer 表

USE employee IN 0 EXCLUSIVE	 && 在另一个工作区中以独占方式打开 employee

IF ISEXCLUSIVE( )

   REINDEX  && 只有当表以独占方式打开时，才重建索引

ELSE

    WAIT WINDOW 'The table has to be exclusively opened'

ENDIF

SET EXCLUSIVE &cExclusive


请参阅

OPEN DATABASE，SET EXCLUSIVE，USE


ISLEADBYTE( ) 函数

请参阅

如果字符表达式第一个字符的第一个字节是前导字节，则返回“真”(.T.)。

语法

ISLEADBYTE(cExpression)

参数

cExpression

指定 ISLEADBYTE( ) 求值的字符表达式，忽略 cExpression 中第一个字符的第一个字节之后的任何字节。

返回值类型

逻辑型

说明

如果字符表达式第一个字符的第一个字节是前导字节，ISLEADBYTE( ) 返回“真”(.T.)，否则返回“假”(.F.)。

ISLEADBYTE( ) 可以判定字符是否是双字节字符。如果字符的第一个字节是前导字节，那么字符是双字节字符，否则字符是单字节字符。


请参阅

ISALPHA( ) 函数，ISDIGIT( ) 函数，ISLOWER( ) 函数，ISUPPER( ) 函数


ISLOWER( ) 函数

请参阅	示例

判断字符表达式最左边的字符是否为小写字母。

语法

ISLOWER(cExpression)

参数

cExpression

指定 ISLOWER( ) 函数要判断的字符表达式。cExpression 中第一个字符之后的所有字符都被 ISLOWER( ) 函数忽略。

返回值类型

逻辑型

说明

如果指定字符表达式的第一个字符是小写字母，ISLOWER( ) 函数返回“真”(.T.)；否则返回“假”(.F.)。


CLEAR

? ISLOWER('redmond')  && 显示 .T.

? ISLOWER('Redmond')  && 显示 .F.


请参阅

ISALPHA( )，ISUPPER( )，LOWER( )，UPPER( )


ISMOUSE( ) 函数

请参阅	示例

如果所用计算机具有鼠标，则返回“真”(.T.)。

语法

ISMOUSE( )

说明

若有鼠标，ISMOUSE( ) 函数返回“真”(.T.)；否则返回“假”(.F.)。


*  下面的示例在有鼠标时显示“真”(.T.)；否则显示“假”(.F.)。

CLEAR

? 'Mouse hardware present? '

?? ISMOUSE( )


请参阅

MCOL( )，MDOWN( )，MROW( )，SYSMETRIC( )


ISNULL( ) 函数

请参阅	示例

如果一个表达式的计算结果为 null 值，则返回“真”(.T.)；否则返回“假”(.F.)。

语法

ISNULL(eExpression)

参数

eExpression

指定要计算的表达式。

返回值类型

逻辑型

说明

ISNULL( ) 函数可用于判断字段、内存变量或数组元素是否为 null 值，也可以判断表达式的计算结果是否为 null 值。关于 null 值的详细内容，请参阅《开发指南》的第二章“语言概述”。


*下面的示例使用 ISNULL( ) 函数检查 null 值。

STORE .NULL. TO mNullvalue  && 在一个内存变量中存入 null 值

CLEAR

? mNullvalue  && 显示内存变量的值。

? ISNULL(mNullvalue)  && 返回.T.，说明是一个 null 值

? TYPE('mNullvalue')	  && 返回 L，说明是一个逻辑值

? (mNullvalue = .NULL.)  && 返回 .NULL.，null 测试无效


请参阅

NVL( )，SET NULL


ISREADONLY( ) 函数

请参阅	示例

判断是否以只读方式打开表。

语法

ISREADONLY([nWorkArea | cTableAlias])

参数

nWorkArea | cTableAlias

返回指定工作区中打开表的只读状态。nWorkArea 指定工作区号，cTableAlias 指定表或工作区的别名。若在指定的工作区中没有打开的表，ISREADONLY( ) 函数返回“假”(.F.)。

如果没有指定工作区号、表别名或工作区别名，则返回当前工作区中打开的表的只读状态。

返回值类型

逻辑型

说明

若表是以只读方式打开，ISREADONLY( ) 返回“真”(.T.)；否则，返回“假”(.F.)。

要以只读方式打开表，可以使用包含 NOUPDATE 选项的 USE 命令，也可以在“打开”对话框打开该表时，在对话框中选定“只读”复选框，还可以把表文件的 MS-DOS 文件属性设置为只读。

用 SELECT - SQL 命令创建的临时表总是只读的。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer	 NOUPDATE  && 以只读方式打开 customer 表

CLEAR

? ISREADONLY('customer')  && 返回 .T.


请参阅

USE


ISUPPER( ) 函数

请参阅	示例

判断字符表达式的第一个字符是否为大写字母 (A～Z)。

语法

ISUPPER(cExpression)

参数

cExpression

指定要判断的字符表达式。cExpression 中第一个字符以后的所有字符都将被忽略。

返回值类型

逻辑型

说明

若字符表达式的第一个字符为大写字母 (A～Z)，ISUPPER( ) 函数返回“真”(.T.)；否则，返回“假”(.F.)。


? ISUPPER('Redmond')  && 显示 .T.

? ISUPPER('redmond')  && 显示 .F.


请参阅

ISALPHA( )，ISLOWER( )，LOWER( )，UPPER( )


ItemBackColor, ItemForeColor 属性

请参阅

在组合框或列表框控制中，指定显示数据项文本的背景色或前景色。

应用于

组合框，列表框

语法

Control.ItemBackColor[ = nColor]
 — 或者 —
Control.ItemBackColor = RGB(nRedValue, nGreenValue, nBlueValue)

Control.ItemForeColor[ = nColor]
 — 或者 —
Control.ItemForColor = RGB(nRedValue, nGreenValue, nBlueValue)

设置

nColor

指定表示文本颜色的整数。

附注

在属性窗口中双击颜色属性，系统显示“颜色”对话框，可以在此对话框中选择或定义颜色。关闭“颜色”对话框后，与所选颜色相对应的红、绿、蓝三色的深度就变成这些属性的设置。

有关详细内容，请参阅 BackColor, ForeColor 属性主题中的颜色表。

说明

设计和运行时可用。


请参阅

BackColor, ForeColor 属性，SelectedItemBackColor, SelectedItemForeColor 属性


ItemData 属性

请参阅

使用索引引用一维数组，该数组包含的数据项数目与组合框或列表框控制中 List 属性的设置相等。

应用于

组合框，列表框

语法

Control.ItemData(nIndex)[ = nData]

设置

nIndex

指定要保存或检索的数据项的索引，nIndex 对应于列表中数据项的显示顺序。

nData

在 ItemData 列表中，要保存或检索的编号。

说明

设计时不可用，运行时可读写。

使用 ItemData 属性，可使组合框或列表框中的每个数据项都与一个指定编号相联系，然后可以在程序中使用这些编号来标识列表中的各个数据项。例如，在列表框中，可用编号来标识每个雇员的姓名。在填充列表框的同时，也把雇员的编号填充到 ItemData 数组的对应元素中。

附注

当使用 AddItem 方法向列表中插入数据项时，ItemData 数组中也将自动插入一个数据项，但并未对该数据项的值进行初始化，即这个数据项所在位置的值并没有发生变化。因而，如果使用 ItemData 属性，当向列表中添加新数据项时，一定要给每个数组元素赋值。


请参阅

AddItem 方法，ItemIDToIndex 方法，List 属性，ListItemID 属性，NewItemID 属性，RemoveItem 方法，Selected 属性，TopItemID 属性


ItemIDData 属性

请参阅

使用唯一的标识编号来引用一维数组，该数组中包含的数据项数目与组合框或列表框控制中 List 属性的设置相等。

应用于

组合框，列表框

语法

Control.ItemIDData(nItemID)[ = nData]

设置

nItemID

指定数据项的唯一标识号。

nData

ItemIDData 列表中要保存或检索的编号。

说明

设计时不可用，运行时可读写。

使用 ItemIDData 属性，可使组合框或列表框中的每个数据项都与一个指定的编号相联系，然后可以在程序中使用这些编号来标识列表中的各个数据项。例如，在列表框中，可用编号来标识每个雇员的姓名。在填充列表框的同时，也把雇员的编号填充到 ItemIDData 数组的对应元素中。

附注

当使用 AddItem 方法向列表中插入数据项时，ItemIDData 数组中也将自动插入一个数据项，但并未对该数据项的值进行初始化，即这个数据项所在位置的值并没有发生变化。因而在使用 ItemIDData 属性向列表中添加新数据项时，一定要给每个数组元素赋值，该数组与 ItemData 属性所访问的数组相同。


请参阅

IndexToItemID 方法，List 属性，ListItemID 属性，NewItemID 属性，RemoveItem 方法，Selected 属性，TopItemID 属性


ItemIDToIndex 方法

请参阅

返回 nIndex 值，这个值指示数据项在控制列表中的位置。

应用于

组合框，列表框

语法

[nIndex =]Control.ItemIDToIndex(nItemID)

参数

nItemID

与数据项相联系的唯一标识号。

说明

添加到组合框或列表框中的每个数据项都具有两个编号：

 •	   nItemID，唯一的标识编号。

 •	   nIndex，一个整数，它对应于控制中数据项显示顺序。列表中的第一个数据项对应于 nIndex = 1。

在数据项刚添加到控制中时，这两个编号是相同的。但随着数据项的排序、删除和添加，这两个编号可能不相同。

当知道控制列表中某一指定项的 nItemID 编号时，可使用 ItemIDToIndex 方法得到它的 nIndex 编号。


请参阅

AddItem 方法，AddListItem 方法，IndexToItemID 方法，ListItemID 属性，List 属性，ListCount 属性


JOIN 命令

请参阅

通过联接两个已有的表来创建一个新表。包含此命令是为了提供向后兼容性。可使用 SELECT - SQL 命令代替。

语法

JOIN WITH nWorkArea | WITH cTableAlias
TO FileName
FOR lExpression
[FIELDS FieldList]
[NOOPTIMIZE]

参数

WITH nWorkArea

指定第二个表所在的工作区号。

WITH cTableAlias

指定第二个表的表别名。

TO FileName

指定联接后所创建的新表的表名。

FOR lExpression

指定一个筛选条件。若 lExpression 的值为“真”(.T.)，则向新表中写入一个新记录。若 lExpression 为“假”(.F.)，则不向新表中写入新记录。

附注

若 lExpression 是可优化表达式，则 Rushmore 将对由 JOIN ... FOR 命令创建的查询进行优化。若要获得最佳性能，在 FOR 子句中应使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE 或《开发指南》第十七章“优化应用程序”。

FIELDS FieldList

指定新表中包含的字段的列表。两个表中指定的字段都可以包含在 FieldList 中。

NOOPTIMIZE

不对 JOIN 命令进行优化。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

说明

JOIN 命令可由如下两个表创建一个新表：当前的选定工作区中打开的表和在其他工作区（由工作区号或表别名指定）中打开的另一个表。

JOIN 命令先把记录指针指向当前选定工作区中的表的第一个记录，然后在第二个表中进行搜索。对于第二个表中每个使 lExpression 条件为“真”(.T.) 的记录，都在新表中添加一个记录。搜索完第二个表后，将当前选定工作区中打开表的记录指针移到下一个记录，并重复上述过程。

重要内容

执行该命令可能要花费很长的时间，具体时间长短取决于要连接的两个表的大小。此外，即使两个表都大小适中，JOIN 命令所生成的新文件也有可能超出磁盘上的可用空间。


请参阅

SET FIELDS，SET RELATION


KEY( )  函数

请参阅	示例

返回索引标识或索引文件的索引关键字表达式。

语法

KEY([CDXFileName,] nIndexNumber [, nWorkArea | cTableAlias])

参数

CDXFileName

指定复合索引文件的文件名。KEY( ) 函数将返回 .CDX 文件中索引标识的索引关键字表达式。所指定的复合索引文件可以是和表一起自动打开的结构复合索引文件，也可以是独立的复合索引文件。

nIndexNumber

指定要返回哪一个索引关键字表达式。

USE 和 SET INDEX 命令都支持一个索引文件列表，从中可以为一个表同时打开多个索引文件。索引文件列表中可以包含 .IDX 单项索引文件、结构复合索引文件或独立的复合索引文件等三种索引文件的任意组合。

数值表达式 nIdexNumber 指定从打开的索引文件中返回哪一个索引表达式。随着 nIndexNumber 从 1 递增到所打开的 .IDX 单项索引文件、结构复合索引文件和独立复合索引文件三者的总数，KEY( ) 函数将按下列顺序依次从打开的各索引文件中返回索引表达式：

1.	首先返回 .IDX 单项索引文件（如果有此类文件打开）中的索引表达式。各个单项索引文件在 USE 或 SET INDEX 命令中的排列顺序决定索引表达式的返回顺序。

2.	其次返回结构复合索引（如果有）中的每个标识的索引表达式。多个标识的索引表达式的返回顺序取决于各标识在结构复合索引中的创建顺序。

3.	最后返回打开的独立复合索引中的每个标识的索引表达式。多个标识的索引表达式的返回顺序取决于标识在独立复合索引中创建的顺序。

若 nIndexNumber 大于打开的索引文件总数（包括 .IDX 单项索引文件、结构复合索引文件和独立的复合索引文件），则返回空字符串。

nWorkArea

指定表所在的工作区号，KEY( ) 函数将返回该表的索引关键字表达式。

如果指定的工作区中没有表打开，则 KEY( ) 函数返回空字符串。

cTableAlias

指定表别名，KEY( ) 函数将返回该表的索引关键字表达式。

若指定的表别名不存在，Visual FoxPro 将产生错误信息。

若省略 nWorkArea 和 cTableAlias 参数，将返回当前工作区中打开表的索引关键字表达式。

返回值类型

字符型

说明

用 INDEX 命令创建索引标识或索引文件时可指定其索引关键字表达式。当该索引标识或索引文件作为主控索引标识或主控索引文件打开时，其索引关键字表达式将决定表的显示或访问方式。

有关创建索引标识、索引文件以及索引关键字表达式的详细内容，请参阅 INDEX。


* 下面的示例先打开 testdata 数据库中的 customer 表，
* 然后在 FOR ... ENDFOR 创建的循环中使用 KEY( ) 函数
* 来显示 customer 结构索引文件中每个索引标识的索引表达式。
* 每个结构索引标识名和它的索引表达式同时显示。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

CLEAR

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引文件中的标识

? TAG(nCount) + ' '  && 显示标识的名称

?? KEY(nCount)  && 显示索引表达式

ELSE

EXIT  && 所有标识都搜索完以后退出循环

ENDIF

ENDFOR


请参阅

INDEX，REINDEX，SET INDEX，SYS(14) - 索引表达式，USE


KEYBOARD 命令

请参阅

把指定的字符表达式放置到键盘缓冲区中。

语法

KEYBOARD cKeyboardValue
[PLAIN] [CLEAR]

参数

cKeyboardValue

指定要放入键盘缓冲区的字符表达式。字符表达式可以是字符串、一个键标记、一组键标记，也可以是一个可返回字符表达式的用户自定义函数。

若 cKeyboardValue 是一个键标记，则必须把它用大括号和引号括起来。例如：

KEYBOARD '{CTRL+LEFTARROW}'

有关键标记的列表，请参阅 ON KEY LABEL。

键盘缓冲区中最多可容纳 128 个字符。当键盘缓冲区完全充满以后，多余的字符将被忽略。

PLAIN

如果您定义了键盘宏或激活了 ON KEY LABEL 命令，包含 PLAIN 参数可忽略这些键盘指定。包含 PLAIN 参数的 KEYBOARD 命令向键盘缓冲区中放置的是原义字符，而非键盘指定值。

例如，若您已用 ON KEY LABEL 命令给“A”键指定了一条命令而且 cKeyboardValue 中又包含有“A”，使用 PLAIN 参数可把字母“A”放到键盘缓冲区中，而没有执行指定给“A”的 ON KEY LABEL 命令。

CLEAR

在把 cKeyboardValue 放置到键盘缓冲区以前，先清除该缓冲区里的所有内容。

说明

使用 KEYBOARD 命令可把字符放置到键盘缓冲区中。在 Visual FoxPro 查找键盘输入之前，这些字符将一直保存在键盘缓冲区中。在查找键盘输入时，这些字符将被读出并执行，如同我们直接从键盘输入一样。

利用 KEYBOARD 命令可创建自动运行的演示系统，来演示您的应用程序。


请参阅

CHRSAW( )，ON KEY LABEL，PLAY MACRO，SET FUNCTION


KeyboardHighValue 和 KeyboardLowValue 属性

请参阅

指定可用键盘输入到微调控制文本框中的最大、最小值。

应用于

微调

语法

Spinner.KeyboardHighValue[ = nHigh]
Spinner.KeyboardLowValue[ = nLow]

设置

nHigh

指定可输入的最大值。nHigh 的默认值为 2,147,483,647。

nLow

指定可输入的最小值。nLow 的默认值为  2,147,483,647。

说明

设计和运行时可用。


请参阅

SpinnerHighValue, SpinnerLowValue 属性


KEYMATCH( ) 函数

请参阅

在索引标识或索引文件中搜索一个索引关键字。

语法

KEYMATCH(eIndexKey [, nIndexNumber [, nWorkArea | cTableAlias]])

参数

eIndexKey

指定要搜索的索引关键字。索引文件或索引标识中的索引关键字是由索引表达式决定的。用 INDEX 命令创建索引文件或索引标识时可以指定其索引表达式。KEY( ) 函数和 SYS(14) 命令都可返回索引文件或索引标识的索引表达式。有关创建索引文件、索引表达式以及索引关键字的详细内容，请参阅 INDEX。

若省略所有可选参数，KEYMATCH( ) 函数将在主控索引文件或主控引标识中搜索指定的索引关键字。如果不存在有效的主控索引文件或主控索引标识（例如，已用不包含任何参数的 SET ORDER TO 命令把表设置成了物理记录顺序），Visual FoxPro 将产生错误信息。

nIndexNumber

指定在哪一个索引文件或索引标识中搜索。通常情况下，若要搜索其他索引标识，nIndexNumber 一般是一个从 1 开始以 1 为步长递增的整数。

如 nIndexNumber 为 1，则搜索主控单项索引 (.IDX) 文件或主控索引标识（如果有）。

随着 nIndexNumber 的增大，依次搜索结构复合索引文件（如果有）中各个后续标识。各个标识的搜索次序取决于它们在结构复合索引中的创建顺序。

随着 nIndexNumber 的继续增大，在搜索结构复合索引文件中的所有标识后，将搜索打开的独立复合索引文件中的标识。各标识的搜索次序取决于它们在独立复合索引中的创建顺序。

若 nIndexNumber 大于打开的索引文件总数（包括 .IDX 单项索引文件、结构复合索引标识和独立的复合索引标识），Visual FoxPro 将产生错误信息。

nWorkArea | cTableAlias

用于搜索非当前工作区中的索引文件或标识。nWorkArea 指定工作区号，cTableAlias 指定表别名。若省略这两个参数，KEYMATCH( ) 函数将搜索由当前工作区中的表打开的索引文件或标识。

如果指定的表别名不存在，Visual FoxPro 将产生错误信息。

返回值类型

逻辑型

说明

KEYMATCH( ) 函数在索引标识或索引文件中搜索指定的索引关键字，若找到，则返回“真”(.T.)；否则，返回“假”(.F.)。该函数可以用来防止重复的索引关键字。

KEYMATCH( ) 函数运行完之后，仍把记录指针放置到运行该函数之前记录指针所指的记录上。


请参阅

INDEX，KEY( )，SET INDEX，SYS(14)，USE


KeyPress 事件

请参阅

当用户按下并释放某个键时发生此事件。

应用于

复选框，组合框，命令按钮，编辑框，表单，列表框，选项按钮，微调，文本框

语法

PROCEDURE Object.KeyPress
LPARAMETERS [nIndex,] nKeyCode, nShiftAltCtrl
 — 或者 —
LPARAMETERS nKeyCode, nShiftAltCtrl

参数

在该事件的处理程序里，必须包含 LPARAMETERS 或 PARAMETERS 语句，并为每个参数指定名称。

nIndex

唯一地标识控制数组中的一个控制。

nKeyCode

包含一个数值，该数值标识被按下的键。有关特殊键和组合键的编码，请参阅 INKEY( )。

nShiftAltCtrl

若有键按下则把相应的位设置为 1。nShiftAltCtrl 参数值是以下三位的值之和：SHIFT 键（0 位）、CTRL 键（1 位）和 ALT 键（2 位）。这些位对应的值分别是 1，2 和 4。该参数表明了这些键的状态。三个位可以全部或部分地置 1，分别说明三个键全部或部分地按下，三个位也可以全不置1，表明没有键按下。例如，若同时按下了 CTRL 和 ALT 键，nShiftAltCtrl 的值就是 6。

说明

具有焦点的对象接收该事件。

在两种特殊情况下，表单可以接收 KeyPress 事件：

 •	   表单中不包含控制，或表单的控制都不可见或未激活。

 •	   表单的 KeyPreview 属性设置为“真”(.T.)。表单首先接收 KeyPress 事件，然后具有焦点的控制才接收此事件。

KeyPress 事件常用于截取输入到控制中的键击。它使您可以立即检验键击的有效性或对键入的字符进行格式编排。使用 KeyPreview 属性可以创建全局键盘处理程序。


请参阅

INKEY( )，KeyPreview 属性


KeyPreview 属性

请参阅

指定表单的 KeyPress 事件是否优先于控制的 KeyPress 事件。

应用于

表单，页面，_SCREEN，工具栏

语法

Object.KeyPreview[ = lExpr]

设置

lExpr

下表列出了 KeyPreview 属性的设置：

设置	说明
“真”(.T.)	表单首先接收 KeyPress 事件，然后活动控制才接收。
“假”(.F.)	（默认值）由活动控制接收 KeyPress 事件，表单不接收。
说明

设计和运行时可用。

使用 KeyPreview 属性可使表单先对 KeyPress 事件进行处理，然后再由当前活动控制对这些事件进行处理。

可以使用这个属性为表单创建一个全局键盘处理程序。例如，在应用程序中用到功能键时，可以在表单层次上对这些键击做出处理，而不用为每一个接收到键击事件的控制分别编写代码。

若表单没有可见的活动控制，它将自动接收所有键盘事件。


请参阅

Enabled 属性，KeyPress 事件，Visible 属性


LABEL 命令

请参阅

根据表文件和标签定义文件打印标签。

语法

LABEL [FORM FileName1 | FORM ?]
[ENVIRONMENT]
[Scope]
[FOR lExpression1]
[WHILE lExpression2]
[NOCONSOLE]
[NOOPTIMIZE]
[PDSETUP]
[PREVIEW [NOWAIT]]
[SAMPLE]
[NAME ObjectName]
[TO PRINTER [PROMPT] | TO FILE FileName2]

参数

FORM FileName1

指定要打印的标签所对应的标签定义文件名。标签定义文件的默认扩展名为 .LBX。若标签定义文件不在当前驱动器或当前目录中，则必须指定驱动器和目录。

FORM ?

显示“打开”对话框，从中可以选择一个已有的标签文件。

ENVIRONMENT

包含此参数是为了提供与 FoxPro 2.x 标签的向后兼容性。若要恢复与 Visual FoxPro 标签相联系的数据环境，可把该数据环境的 AutoOpenTables 属性置为默认值“真”(.T.)。为了确保在标签打印完毕后关闭数据环境，可把该数据环境的 AutoClose 属性设置为默认值 “真” (.T.)。

当创建或修改标签时，可把当前的 Visual FoxPro 数据环境同标签定义文件一起保存起来。保存 Visual FoxPro 数据环境，可把所有打开的表和索引文件、索引顺序以及表之间的关系等其他信息作为附加记录放置在标签定义表中。

Scope

指定记录的范围。系统只打印该范围以内的记录。Scope 子句有 ALL，NEXT nRecords，RECORD nRecordNumber 和 REST 等。有关 Scope 子句的详细内容，请参阅 Scope 子句 主题或《开发指南》第二章“语言概述”。包含 Scope 参数的命令只对活动工作区中的表进行操作。

LABEL 命令默认的范围是所有 (ALL) 记录。

FOR lExpression1

指定一个条件，只打印满足逻辑条件 lExpression1 的记录。这样可以把不想打印的记录筛选掉。

若 lExpression1 是一个可优化的表达式，则 Rushmore 将对 LABEL…FOR 命令所创建的查询进行优化。为了达到最好的运行效率，应在 FOR 子句中使用可优化的表达式。有关详细内容，请参阅 SET OPTIMIZE 和 深入了解 Rushmore 技术，或者《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只要逻辑表达式 lExpression2 计算为“真”(.T.)，就连续打印记录。

NOCONSOLE

在打印标签或向文件中传送标签时，不在 Visual FoxPro 主窗口或用户自定义窗口显示标签的输出结果。

NOOPTIMIZE

关闭 Rushmore 对 LABEL 命令的优化。有关详细内容，请参阅 SET OPTIMIZE 和 深入了解 Rushmore 技术，或《开发指南》第十七章“优化应用程序”。

PDSETUP

加载打印机驱动程序设置。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，包含 PDSETUP 关键字，可以使用打印机驱动程序设置来打印在 FoxPro for MS-DOS 中创建的基于字符的标签。打印 Visual FoxPro 和 FoxPro for Macintosh 中建立的基于图形的标签时，忽略 PDSETUP。

在 FoxPro for MS-DOS 中，使用 FoxPro 标签设计器定义一个标签时，可以指定一个打印机驱动程序设置，它决定了标签打印的外观。如果环境与标签定义一起保存，则打印机驱动程序设置也被保存。如果打印标签时包含 PDSETUP 关键字，那么在打印时将装载并使用打印机驱动程序设置。

PREVIEW [NOWAIT]

打印之前先在“预览”窗口中显示标签，而不打印。若要打印标签，必须再发出一条不含 PREVIEW 子句的 LABEL 命令。

在 Visual FoxPro 中，若包含可选的 NOWAIT 子句，则在运行时 Visual FoxPro 将不等待关闭“页面预览”窗口，而是在该窗口打开的情况下继续往下执行。

SAMPLE

显示或打印一个样本来检验标签的对齐方式。在显示或打印完每个样本以后，提示“需要更多样本吗?”。选择“是”可以继续检验标签的对齐方式。

NAME ObjectName

为标签的数据环境指定一个对象变量名。数据环境和其中的对象具有属性和方法，例如 AddObject，运行时需要设置或调用它们。利用对象变量可对这些属性和方法进行访问。若不指定对象变量名，Visual FoxPro 将把标签文件的文件名作为对象变量名的默认值，供事件代码引用。

TO PRINTER [PROMPT]

向打印机发送标签。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，若包含可选项 PROMPT，则在开始打印以前提示“打印”对话框。

FoxPro for MS-DOS 忽略 PROMPT 选项。

TO FILE FileName2

把 FoxPro for MS-DOS 中创建的基于字符的标签发送到文本文件 FileName2 中。包含 TO FILE 子句将创建该文件，默认扩展名为 .TXT。

说明

用 MODIFY LABEL 或 CREATE LABEL 命令可以创建标签定义文件。

若不带任何参数发出 LABEL 命令，“打开”对话框出现，显示已有的标签文件以供选择。


请参阅

CREATE LABEL，MODIFY LABEL


Label 控制
Label（标签）控制

请参阅	属性	事件	方法

创建用以显示文本的标签。

语法

Label

说明

标签控制是用以显示文本的图形控制，其中的文本不能直接更改。但是，由于标签控制具有与其他控制相同的一套属性、事件和方法，所以运行时它也可以对事件做出反应，或者动态地被更改。

若要给标签指定一个快捷键，可在标题中作为快捷键的字符前面包含反斜杠和小于号 (\<)。显示这一标签时，该字符带有下划线。按下标签的快捷键时，将激活 Tab 键次序中的下一个控制。使用 TabIndex 属性可给标签指定一个 Tab 键次序。

不同的对象，所显示的标题也不同。

注意，标签控制的 Caption 属性中允许包含的最大字符数目为 256 个。

有关创建标签控制的详细内容，请参阅《开发指南》第十一章“使用控制”。


 属性

Alignment	AutoSize	BackColor
BackStyle	BaseClass	BorderStyle
Caption	Class	ClassLibrary
ColorScheme	ColorSource	Comment
DisabledBackColor	DisabledForeColor	DragIcon
DragMode	Enabled	FontBold
FontItalic	FontName	FontOutline
FontShadow	FontSize	FontStrikeThru
FontUnderline	ForeColor	Height
HelpContextID	Left	MousePointer
Name	Parent	ParentClass
ReadObject	TabIndex	Tag
Top	Visible	Width
WordWrap


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
Init	MouseDown	MouseMove
MouseUp	RightClick	UIEnable


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	SaveAsClass
UIEnable	WriteExpression	WriteMethod
ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


LASTKEY( ) 函数

请参阅

返回最近一次按键所对应的整数。

语法

LASTKEY( )

返回值类型

数值型

说明

LASTKEY( ) 函数的返回值与 INKEY( ) 函数的返回值是相等的。有关键及其返回值的列表，请参阅 INKEY( )。

当在各控制间移动时，LASTKEY( ) 函数的值被更新。


请参阅

CHRSAW( )，INKEY( )，READKEY( )


Left 属性

请参阅	示例

对于控制，指定对象的左边界（相对于其父对象）。对于表单对象，确定表单的左边界与 Visual FoxPro 主窗口左边界之间的距离。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.Left[ = nDist]

设置

nDist

指定对象的左边界与容器对象的左边界之间的距离，度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

Left，Top，Height 和 Width 属性多用于与对象的外部尺寸有关的操作（如移动或调整对象大小）。可以用 ScaleMode 属性更改度量单位。

附注

用于列对象所包含的控制时，Left 属性只读。


*下面的示例演示了如何使用 Left 属性确定控制在表单中的位置。
* 使用 AddObject 方法向表单中添加一个线条控制
* 和三个命令按钮，Left 属性指定了表单上每个
* 控制的水平位置。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止控制菜单框

frmMyForm.AddObject('shpLine','Line')  && 向表单中添加线条控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && “向上”命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && “向下”命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && “退出”命令按钮

frmMyForm.shpLine.Visible = .T.  &&使线条控制可见

frmMyForm.shpLine.Top = 20  && 指定线条控制行

frmMyForm.shpLine.Left = 125  &&指定线条控制列

frmMyForm.cmdCmndBtn1.Visible =.T.  && “向上”命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && “向下”命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && “退出” 命令按钮可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  &&  开始事件处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮标题

Left = 50  && 命令按钮行

Top = 100  && 命令按钮列

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='/'  &&  斜向上

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  &&  创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮标题

Left = 200  &&  命令按钮行

Top = 100  &&  命令按钮列

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  &&隐藏线条控制

ThisForm.shpLine.LineSlant ='\'  && 斜向下

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  &&  命令按钮标题

Cancel = .T.  && 默认取消命令按钮(Esc)

Left = 125  && 命令按钮行

Top = 150  && 命令按钮列

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

ENDDEFINE


请参阅

Height 属性，Move 方法，ScaleMode 属性，Top 属性，Width 属性


 LEFT( ) 函数

请参阅	示例

从字符表达式最左边一个字符开始返回指定数目的字符。

语法

LEFT(cExpression, nExpression)

参数

cExpression

指定字符表达式，LEFT( ) 函数从中返回字符。

nExpression

指定从字符表达式中返回的字符个数。若 nExpression 的值大于 cExpression 的长度，则返回字符表达式的全部字符。如果 nExpression 为负值或 0，则返回空字符串。

LEFT( ) 函数与起始位置为 1 的 SUBSTR( ) 函数是等价的。

返回值类型

字符型


CLEAR

? LEFT('Redmond, WA', 7)  && 显示 Redmond


请参阅

AT( )，LTRIM( )，RIGHT( )，RTRIM( )，SUBSTR( )


LEFTC( ) 函数

请参阅

返回字符表达式中指定数目的字符，从最左边的字符开始计数。

语法

LEFTC(cExpression, nExpression)

参数

cExpression

指定要从中返回字符的字符表达式。

nExpression

指定从字符表达式中返回的字符数目。如果 nExpression 大于 cExpression 的长度，则返回 cExpression 的所有字符。如果 nExpression 为负值或 0 ，则返回空字符串。

返回值类型

数值型

说明

LEFTC( ) 从包含单字节和双字节的任意组合的字符表达式中返回指定数目的字符。

LEFTC( ) 与起始位置为 1 的 SUBSTRC( ) 等价。


请参阅

AT_C( )，LEFT( )，RIGHTC( )，SUBSTRC( )


LeftColumn 属性

请参阅

保存表格控制显示的最左列的编号。

应用于

表格

语法

Grid.LeftColumn

说明

设计和运行时只读。

用 LeftColumn 可以指定哪些列对用户是不可见的。例如，若 LeftColumn = 3，则第 1 列和第 2 例就是不可见的。


请参阅

ActiveColumn 属性，ActiveRow 属性，ColumnOrder 属性，RelativeColumn 属性，RelativeRow 属性


LEN( ) 函数

请参阅	示例

返回字符表达式中字符的数目。

语法

LEN(cExpression)

参数

cExpression

指定字符表达式，LEN( ) 函数返回其字符数目。

返回值类型

数值型

说明

LEN( ) 函数可用于确定字符表达式的长度。


*下面的示例打开 testdata 数据库中的 customer 表，
* 用 LEN( ) 显示 cust_id 和 contact 字段的宽度。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

CLEAR

? 'Width of cust_id field: '

?? LEN(contact)

? 'Width of contact field: '

?? LEN(cust_id)


请参阅

FSIZE( )，TXTWIDTH( )


LENC( ) 函数

请参阅

返回字符表达式或备注字段中字符的数目。

语法

LENC(cExpression)

参数

cExpression

指定由 LENC( ) 返回其字符数的字符表达式。

返回值类型

数值型

说明

LENC( ) 返回包含单字节和双字节任意组合的字符表达式或备注字段的字符数。


请参阅

LEN( )


LIKE( ) 函数

请参阅	示例

确定一个字符表达式是否与另一个字符表达式相匹配。

语法

LIKE(cExpression1, cExpression2)

参数

cExpression1

指定要与 cExpression2 相比较的字符表达式。cExpression1 中可以包含通配符 * 和 ?。问号 (?) 可与 cExpression2 中的任何单个字符相匹配，星号 (*) 可与任意数目的字符相匹配。在 cExpression1 中可以把任何数目的通配符进行任意的组合。

cExpression2

指定要与 cExprssion1 相比较的字符表达式。只有在 cExpression1 与 cExpression2 中的字符逐个匹配的情况下，LIKE( ) 函数才返回“真”(.T.)。

返回值类型

逻辑型

说明

如果 cExpression1 与 cExpression2 相匹配，则 LIKE( ) 函数返回“真”(.T.)；否则，返回“假”(.F.)。

SET COMPATIBLE 决定 LIKE( ) 函数如何比较 cExpression1 和 cExpression2 中的空格。若 SET COMPATIBLE 设置为 ON 或 DB4，则在比较之前删除 cExpression1 和 cExpression2 中的后缀空格。若 SET COMPATIBLE 设置为 OFF 或 FOXPLUS，则两字符表达式中的后缀空格也参加比较。


* 下面的示例将显示 products 表中所有
* 前两个字符是“Ch”的产品名。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开 Products 表

CLEAR

? 'All product names with first two letters Ch:'

?

SCAN FOR LIKE('Ch*', prod_name)

? prod_name

ENDSCAN

USE


请参阅

$，AT( )，ATC( )，OCCURS( )，RAT( )，SET COMPATIBLE


LIKEC( ) 函数

请参阅

决定一个字符表达式是否与另一个字符表达式相匹配。

语法

LIKEC(cExpression1, cExpression2)

参数

cExpression1

指定要与 cExpression2 相比较的字符表达式。cExpression1 中可以包含通配符 * 和 ?。问号 (?) 可与 cExpression2 中的任何单个字符相匹配，星号 (*) 可与任意数目的字符相匹配。在 cExpression1 中可以把任何数目的通配符进行任意的组合。

cExpression2

指定要与 cExprssion1 相比较的字符表达式。只有在 cExpression1 与 cExpression2 中的字符逐个匹配的情况下，LIKE( ) 函数才返回“真”(.T.)。

返回值类型

逻辑型

说明

LIKEC( ) 决定一个字符表达式是否与另一个字符表达式相匹配。字符表达式可以包含单字节和双字节的任意组合。

如果 cExpression1 与 cExpression2 相匹配，则 LIKEC( ) 函数返回“真”(.T.)；否则，返回“假”(.F.)。

SET COMPATIBLE 决定 LIKEC( ) 函数如何比较 cExpression1 和 cExpression2 中的空格。若 SET COMPATIBLE 设置为 ON 或 DB4，则在比较之前删除 cExpression1 和 cExpression2 中的所有后缀空格。若 SET COMPATIBLE 设置为 OFF 或 FOXPLUS，则两字符表达式中的后缀空格也参加比较。


请参阅

AT_C( )，ATCC( )，LIKE( )，RATC( )


Line 控制
Line（线条）控制

请参阅	属性	事件	方法	示例

创建一个显示水平、竖直或对角线条的控制。

语法

Line

说明

线条控制是一种用来显示水平、竖直或对角线条的图形控制，所显示的线条不能直接更改。但是，由于线条控制与其他控制一样具有一整套属性、事件和方法，所以运行时它可以对事件做出反应或者动态地被更改。

有关创建线条的详细内容，请参阅表单设计器主题，以及《开发指南》第十一章“使用控制”。


 属性

BaseClass	BorderColor	BorderStyle
BorderWidth	Class	ClassLibrary
Comment	DragIcon	DragMode
DrawMode	Enabled	Height
HelpContextID	Left	LineSlant
MousePointer	Name	Parent
ParentClass	ReadObject	Tag
Top	Visible	Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
Init	MouseDown	MouseMove
MouseUp	RightClick	UIEnable


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	SaveAsClass
WriteExpression	WriteMethod	ZOrder


*下面的示例演示了如何向表单中添加线条控制，
* 以及如何使用 LineSlant 属性来指定
* 线条的倾斜方向。

* 先用 AddObject方法向表单中添加一个线条控制，
* 再添加三个命令按钮。借助于这些按钮，
* 您可以更改线条的倾斜方向或关闭表单。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止控制菜单框

frmMyForm.AddObject('shpLine','Line')  && 向表单中添加线条控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && Up 命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && Down 命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && Quit 命令按钮

frmMyForm.shpLine.Visible = .T.  && 使线条控制可见

frmMyForm.shpLine.Top = 20  && 指定线条控制行

frmMyForm.shpLine.Left = 125  && 指定线条控制列

frmMyForm.cmdCmndBtn1.Visible =.T.  && Up 命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && Down" 命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && Quit 命令按钮可见

frmMyForm.SHOW  &&  显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮标题

Left = 50  &&  命令按钮列

Top = 100  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='/'  && 斜向上

ThisForm.shpLine.Visible = .T.  &&  显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮标题

Left = 200  && 命令按钮列

Top = 100  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='\'  && 斜向下

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认取消命令按钮 (Esc)

Left = 125  && 命令按钮列

Top = 150  &&  命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 停止事件处理并关闭表单

ENDDEFINE


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


Line 方法

请参阅

在表单对象中画一条线。

应用于

表单，_SCREEN

语法

Object.Line(nXCoord2, nYCoord2)
 — 或者 —
Object.Line(nXCoord1, nYCoord1, nXCoord2, nYCoord2)

参数

nXCoord1, nYCoord1

指定线条起始点的坐标。度量单位由表单的 ScaleMode 属性指定。

nXCoord2, nYCoord2

指定线条终点的坐标。

说明

所画线条的宽度取决于 DrawWidth 属性的设置。在背景上画线条的方式取决于 DrawMode 和 DrawStyle 属性的设置。运行 Line 方法后，CurrentX 和 CurrentY 属性分别被设置为 nXCoord2 和 nYCoord2。


请参阅

CurrentX, CurrentY 属性，DrawMode 属性，DrawStyle 属性，DrawWidth 属性，ScaleMode 属性


LINENO( ) 函数

请参阅	示例

返回程序中正在执行的那一行的行号。行号是相对于主程序第一行开始算起的。

语法

LINENO([1])

参数

1

返回相对于当前程序或过程第一行的行号。若省略参数 1，则返回相对于主程序第一行的行号。

返回值类型

数值型

说明

程序行从程序头开始计数，包括注释行、继续行和空行。若程序在执行中被挂起，则 LINENO( ) 返回程序挂起处的程序行号。若取消程序，则 LINENO( ) 返回 0。

默认情况下，返回相对于主程序开始的行号。如果调用一个过程，行号从调用程序头部开始计数。

LINENO( ) 对于调试程序很有用。要设置断点并在指定行号处终止程序执行，可在调试窗口中执行下列命令：

LINENO( ) = nExpression

当 LINENO( ) 的值等于 nExpression 时挂起程序。


*下面示例是一个简单错误处理程序的一部分。

ON ERROR DO bug_proc WITH LINENO( )

BRWS  && Causes an error

ON ERROR

*** Bug_Proc 错误处理程序***

PROCEDURE bug_proc

PARAMETERS gnBadLine

WAIT WINDOW 'Error occurred at line: ' + ALLTRIM(STR(gnBadLine))

RETURN


请参阅

ERROR( )，MESSAGE( )，PROGRAM( )，SYS(16) - 执行程序文件名


LineSlant 属性

请参阅	示例

指定线条倾斜方向，是从左上到右下还是从左下到右上。

应用于

线条

语法

Line.LineSlant[ = cSlant]

设置

cSlant

LineSlant 属性的设置是：

设置	说明
\	（默认值）线条从左上到右下倾斜。
/	线条从左下到右上倾斜。
说明

设计和运行时可用。


* 下面示例演示了如何使用 LineSlant 属性指定线条控
* 制倾向。

*先向表单添加线条控制，再向表单添加三个命令按钮来
* 更改线条倾向或关闭表单。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 使控制菜单框无效

frmMyForm.AddObject('shpLine','Line')  && 向表单添加线条控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && “向上”命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && “向下”命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && “退出”命令按钮

frmMyForm.shpLine.Visible = .T.  && 使线条控制可见

frmMyForm.shpLine.Top = 20  && 指定线条控制行

frmMyForm.shpLine.Left = 125  && 指定线条控制列

frmMyForm.cmdCmndBtn1.Visible =.T.  && “向上”命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && “向下”命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && “退出”命令按钮可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮标题

Left = 50  && 命令按钮列

Top = 100  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='/'  && 上斜

ThisForm.shpLine.Visible = .T.  &&显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  &&创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮标题

Left = 200  && 命令按钮列

Top = 100  &&命令按钮行

Height = 25  &&命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  &&隐藏线条控制

ThisForm.shpLine.LineSlant ='\'  &&下斜

ThisForm.shpLine.Visible = .T.  &&显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  &&创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认“取消”命令按钮(ESC)

Left = 125  &&命令按钮列

Top = 150  &&命令按钮行

Height = 25  &&命令按钮高度

PROCEDURE Click

CLEAR EVENTS  &&终止事件处理，关闭表单

ENDDEFINE


请参阅

DrawMode 属性，DrawStyle 属性


LinkMaster 属性

请参阅

指定表格控制中的子表所链接的父表。

应用于

表格

语法

Grid.LinkMaster[ = cName]

设置

cName

指定用来在表格控制中驱动子表显示的父表别名。

说明

设计时可用，运行时可读写。

使用 LinkMaster 属性可以在表单的父表（或主表）与表格 RecordSource 属性所引用的表之间设置一对多关系。


请参阅

ChildOrder 属性，RelationalExpr 属性


LIST 命令

请参阅

连续显示表或环境信息。

语法

LIST
[FIELDS FieldList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[OFF]
[NOCONSOLE]
[NOOPTIMIZE]
[TO PRINTER [PROMPT] | TO FILE FileName]
— 或者 —
LIST FILES
[ON Drive]
[LIKE FileSkeleton]
[TO PRINTER [PROMPT] | TO FILE FileName]
— 或者 —
LIST MEMORY
[LIKE FileSkeleton]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]
— 或者 —
LIST STATUS
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]
— 或者 —
LIST STRUCTURE
[IN nWorkArea | cTableAlias]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]

说明

除了下列差别，LIST 命令与 DISPLAY 命令相同：

 •	   LIST 的默认范围是所有记录。

 •	   信息充满 Visual FoxPro 主窗口或用户自定义窗口以后，LIST 不给提示，继续显示。

 •	   当 SET DELETED 为 ON 时，LIST 不显示带删除标记的记录。

有关 LIST 命令的详细内容，请参阅 DISPLAY 中的相应命令。


请参阅

DISPLAY，DISPLAY FILES，DISPLAY MEMORY，DISPLAY STATUS，DISPLAY STRUCTURE，SET DELETED


LIST CONNECTIONS 命令

请参阅	示例

连续显示有关当前数据库中命名连接的信息。

语法

LIST CONNECTIONS
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 LIST CONNECTIONS 结果定向输出到打印机。

在 Visual FoxPro 中，包含 PROMPT 子句可在打印之前显示打印对话框。PROMPT 应直接放置在 TO PRINTER 后面。

TO FILE FileName

将 LIST CONNECTIONS 定向输出到 FileName 指定的文件中。若文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

显示信息包括当前数据库中命名连接、数据源和连接字符串的名称。使用 DBGETPROP( ) 可以返回有关当前数据库中连接的其他内容。


* 下面的示例假设一个名为 MyFoxSQLNT 的 ODBC 数据源可用，
* 并且数据源的用户标识是“sa”。示例打开 testdata 数据库，
* 创建一个名为 Myconn 的连接。然后用 LIST CONNECTIONS
* 来列出数据库中的命名连接。
*

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE CONNECTION Myconn DATASOURCE "MyFoxSQLNT" USERID "sa"

CLEAR

LIST CONNECTIONS	  && 列出数据库中的命名连接。


请参阅

CREATE CONNECTION，DELETE CONNECTION，DBGETPROP( )，DISPLAY CONNECTIONS，RENAME CONNECTION


LIST DATABASE 命令

请参阅	示例

连续显示有关当前数据库的信息。

语法

LIST DATABASE
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 LIST DATABASE 的结果定向输出到打印机。

在 Visual FoxPro 中，包含 PROMPT 子句可在打印之前显示“打印”对话框。PROMPT 应直接放置在 TO PRINTER 后面。

TO FILE FileName

将 LIST DATABASE 的结果定向输出到 FileName 指定的文件中。若该文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

使用 DBGETPROP( ) 可以返回有关当前数据库的其他内容。


* 下面示例创建了一个名为 people 的数据库，
* 并将一个名为 friends 的表添加到数据库中。
* 用 DISPLAY TABLES 命令显示数据库中的表，
* 用 LIST DATABASE 命令显示数据库中有关表的信息。

CREATE DATABASE people

CREATE TABLE friends (FirstName C(20), LastName C(20))

CLEAR

DISPLAY TABLES  && 显示数据库中的表

LIST DATABASE  && 列出表的信息


请参阅

DISPLAY DATABASE


LIST DLLS 命令

请参阅

连续显示有关 32 位 Windows DLL 函数的信息。DLL 函数可用 DECLARE - DLL 命令在 Visual FoxPro 中注册。

语法

LIST DLLS
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 LIST DLLS 的结果定向输出到打印机。

在 Visual FoxPro 中，包含 PROMPT 子句可在打印之前显示“打印”对话框。PROMPT 应直接放置在 TO PRINTER 后面。

TO FILE FileName

将 LIST DLLS 的结果定向输出到 FileName 指定的文件中。若该文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。


请参阅

DECLARE - DLL，DISPLAY DLLS


LIST OBJECTS 命令

请参阅	示例

连续显示有关一个对象或一组对象的信息。

语法

LIST OBJECTS
[LIKE cObjectSkeleton]
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

LIKE cObjectSkeleton

显示一组对象的信息。cObjectSkeleton 是对象细节的梗概，并支持通配符（* 和 ?）。例如，要连续显示所有以 A 开头的对象，可使用下列命令：

LIST OBJECTS LIKE A*

TO PRINTER [PROMPT]

将 LIST OBJECTS 的结果定向输出到打印机。

包含 PROMPT 子句可在打印开始之前显示打印对话框。PROMPT 关键字应直接放置在 TO PRINTER 后面。

TO FILE FileName

将 LISTT OBJECTS 的结果定向输出到 FileName 指定的磁盘文件中。若该文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

LIST OBJECTS 显示全部现有对象的下列信息：

 •	   属性和属性值

 •	   方法

 •	   成员对象及其所基于的类或子类

 •	   对象所基于的类或子类

 •	   对象的类等级

LIST OBJECTS 不停顿地填满整个 Visual FoxPro 主窗口。


* 下面示例用 DEFINE CLASS 和 CREATEOBJECT( ) 从
* Visual FoxPro 表单基类中创建两个名为 FormChild 和
* FormGrandChild 的自定义类。LIST OBJECTS 列出有关
* 对象及其属性的信息。

CLEAR

frmMyForm = CREATEOBJECT("FormGrandChild")

LIST OBJECTS LIKE frm*

RELEASE frmMyForm

DEFINE CLASS FormChild AS FORM

ENDDEFINE

DEFINE CLASS FormGrandChild AS FormChild

ENDDEFINE


请参阅

DISPLAY OBJECTS


LIST PROCEDURES 命令

请参阅	示例

连续显示当前数据库存储过程的名称。

语法

LIST PROCEDURES
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 LIST PROCEDURES 的返回信息定向输出到打印机。

包含 PROMPT 可在打印开始之前显示“打印”对话框。PROMPT 关键字应直接放置在 TO PRINTER 后面。

TO FILE FileName

将 LIST PROCEDURES 的结果定向输出到 FileName 指定的磁盘文件中。若该文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

用 MODIFY PROCEDURE 可创建存储过程。


* 下面示例打开 testdata 数据库并且使用 LIST PROCEDURES
* 列出数据库中的存储过程（如果存在）。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CLEAR

LIST PROCEDURES  && 列出数据库中的存储过程


请参阅

APPEND PROCEDURES，COPY PROCEDURES，CREATE DATABASE，DISPLAY DATABASE，DISPLAY PROCEDURES，MODIFY PROCEDURE


List 属性

请参阅	示例

用来访问组合框或列表框控制中各数据项的字符型数组。

应用于

组合框，列表框

语法

Control.List(nRow [, nCol])[ = cChar]

设置

nRow

根据显示顺序指定需要检索的数据项所在的行。例如，nRow = 3 指定在列表中显示第三行。

nCol

根据显示顺序指定需要检索的数据项所在的列。例如，nCol = 2 指定在列表中显示第二列。若未指定 nCol，则 List 属性默认检索第一列。只能对多于一列的组合框和列表框指定 nCol。

说明

设计时不可用，运行时可读写。

可将 List 属性与 ListCount 属性联合使用，从 1 到 ListCount 逐一返回列表中的所有项。

不能同时使用 List 属性和数组函数。然而，如果 RowSourceType 属性设置为 5 （数组）并且 RowSource 属性设置为列表中值所在的数组，则可对 RowSource 属性指定的数组使用数组函数。

附注

当 RowSourceType 设置为 0 或 1 时，可以用 AddItem 方法向组合框或列表框中添加数据项。要删除数据项，可使用 RemoveItem 方法。要按字母顺序放置数据项，在向列表添加数据项之前将控制的 Sorted 属性设置为“真”(.T.)。


*在下面示例中，使用 ListCount 遍历所有数据项。这些数据项由
* 组合框或列表框的 List 属性指定。

*下面示例创建了一个列表框，列表框数据项中的数据项源
* 是一个数组。该数组用 RowSourceType 和 RowSource
* 属性指定。

*列表框的 MultiSelect 属性设置为“真”(.T.)，允许从列表
* 框中做多项选择。在 FOR ... ENDFOR 循环中使用 ListCount
* 属性来显示列表框中选定的数据项。Selected 属性用来确定
* 所选择的数据项。List 属性用来返回数据项。
*

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  && 用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

ENDFOR

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .f. && 使控制数据框无效

frmMyForm.Move(150,10)  && 移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  &&添加“取消”命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  && 添加列表框控制

frmMyForm.lstListBox1.RowSourceType = 5  && 指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' && 数组包含列表框数据项

frmMyForm.cmbCommand1.Visible =.T.  && “取消”命令按钮可见

frmMyForm.lstListBox1.Visible =.T.  && 列表框可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  &&命令按钮标题

Cancel = .T.  && 默认取消命令按钮(Esc)

Left = 125  &&命令按钮列

Top = 210  &&命令按钮行

Height = 25  &&命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭表单

CLEAR  && 清除 Visual FoxPro 主窗口

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  &&创建列表框控制

Left = 10  && 列表框列

Top = 10  && 列表框行

MultiSelect = .T.  && 允许选择多于 1 个数据项

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 是否选择了数据项?

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) && 显示数据项

ENDIF

ENDFOR

ENDDEFINE


请参阅

AddItem 方法，IndexToItemID 方法，ItemIDToIndex 方法，ListCount 属性，ListItem 属性，ListItemID 属性，RowSource，RowSourceType，Sorted 属性


LIST TABLES 命令

请参阅	示例

连续显示包含在当前数据库中的所有表和表的信息。

语法

LIST TABLES
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 LIST TABLES 的返回内容定向输出到打印机。

包含 PROMPT 可在打印开始之前显示打印对话框。PROMPT 关键字应直接放置在 TO PRINTER 之后。

TO FILE FileName

将 LIST TABLES 的结果定向输出到 FileName 指定的磁盘文件中。若文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

此命令返回的信息中包括表名和路径，是 LIST STATUS 显示内容的子集。LIST TABLES 显示的信息仅包含与表有关的信息，而不论表是否打开。


* 下面示例打开 testdata 数据库中的 customer 表，
* 并用 LIST TABLES 命令列出数据库中关于表的信息。
*

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	&& 设置数据库路径

OPEN DATABASE testdata  &&  打开 testdata 数据库

CLEAR

LIST TABLES  && 列出关于数据库中表的信息


请参阅

ADD TABLE，CLOSE DATABASES，CREATE DATABASE，DISPLAY TABLES，OPEN DATABASE，REMOVE TABLE


LIST VIEWS 命令

请参阅	示例

连续显示当前数据库中有关 SQL 视图的信息。

语法

LIST VIEWS
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]

参数

TO PRINTER [PROMPT]

将 LIST VIEWS 返回的内容输出到打印机。

包含 PROMPT 可在打印开始之前显示打印对话框。PROMPT 关键字应直接放置在 TO PRINTER 后面。

TO FILE FileName

将 LIST VIEWS 的结果输出到 FileName 指定的磁盘文件中。若文件已存在并且 SET SAFETY 为 ON，则 Visual FoxPro 询问是否改写文件。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

说明

LIST VIEWS 显示当前数据库中 SQL 视图的名称并且说明 SQL 视图是基于本地表还是远程表。使用 DBGETPROP( ) 可以返回当前数据库中关于 SQL 视图的其他内容。

可用 CREATE SQL VIEW 创建 SQL 视图。


*下面示例打开 testdata 数据库。用 CREATE SQL VIEW
* 创建一个名为 myview 的本地 SQL 视图。显示视图设计器，
* 从中指定 SQL 视图的表和条件。在保存了创建的 SQL
* 视图之后，列出当前数据库中关于 SQL 视图的信息。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE SQL VIEW myview

CLEAR

LIST VIEWS


请参阅

CREATE DATABASE，CREATE SQL VIEW，DBGETPROP( )，DISPLAY DATABASE，DISPLAY VIEWS


ListBox 控制
ListBox（列表框）控制

请参阅	属性	事件	方法	示例

创建列表框。

语法

ListBox

说明

列表框显示一系列数据项，从中可选择一项或多项。列表框与组合框相似，不同的是，组合框初始时只显示一个数据项。

有关创建列表框控制的详细内容，请参阅表单设计器主题和《开发指南》的第十一章“使用控制”。


 属性

BaseClass

BorderColor

BoundColumn

Class

ClassLibrary

ColorScheme

ColorSource

ColumnCount

ColumnLines

ColumnWidths

Comment

ControlSource

DisabledBackColor

DisabledForeColor

DisabledItemBackColor

DisabledItemForeColor

DisplayValue

DragIcon

DragMode

Enabled

FirstElement

FontBold

FontItalic

FontName

FontOutline

FontShadow

FontSize

FontStrikeThru

FontUnderLine

Height

HelpContextID

IncrementalSearch

ItemBackColor

ItemData

ItemForeColor

ItemIDData

Left

List

ListCount

ListIndex

ListItem

ListItemID

MousePointer

MoverBars

MultiSelect

Name

NewIndex

NewItemID

NumberOfElements

Parent

ParentClass

ReadObject

RowSource

RowSourceType

Selected

SelectedID

SelectedItemBackColor

SelectedItemForeColor

Sorted

SpecialEffect

StatusBarText

TabIndex

TabStop

Tag

TerminateRead

ToolTipText

Top

TopIndex

TopItemID

Value

Visible

Width


 事件

Click	DblClick	Destroy
DownClick	DragDrop	DragOver
Error	ErrorMessage	GotFocus
Init	InteractiveChange	KeyPress
LostFocus	Message	MouseDown
MouseMove	MouseUp	ProgrammaticChange
RangeHigh	RangeLow	RightClick
UIEnable	UpClick	Valid
When


 方法

AddItem	AddListItem	Clear
CloneObject	Drag	IndexToItemID
ItemIDToIndex	Move	ReadExpression
ReadMethod	Refresh	RemoveItem
RemoveListItem	Requery	SaveAsClass
SetFocus	WriteExpression	WriteMethod
ZOrder


* 下面示例创建了一个列表框控制。列表框中显示的菜单项源
* 是一个用 RowSourceType 和 RowSource 属性指定的数组。
*

*设置列表框的 Multiselect 属性为真 (.T.)，允许从列表中做多项
* 选择。使用 ListCount、Select 和 List 属性（用来确定列表中
* 菜单项数目和选择的菜单项）来显示选定的菜单项。
*

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  && 用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

NEXT

frmMyForm = CREATEOBJECT('Form')  &&  创建一个表单

frmMyForm.Closable = .f.  && 废止控制菜单框

frmMyForm.Move(150,10)  &&  移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  && 添加“退出”命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  &&添加列表框控制

frmMyForm.lstListBox1.RowSourceType = 5  && 指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' && 数组包含列表框菜单项

frmMyForm.cmbCommand1.Visible =.T.  && “退出”命令按钮可见

frmMyForm.lstListBox1.Visible =.T.  && “列表框”可见

frmMyForm.SHOW  &&  显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  &&  创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认“取消”命令按钮(ESC)

Left = 125  &&命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭表单

CLEAR  && 清除 Visual FoxPro 主窗口

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  && 创建“列表框”控制

Left = 10  &&  列表框列

Top = 10  && 列表框行

MultiSelect = .T.  && 允许选择多于 1 个菜单项

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 是否选定了菜单项?

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) &&  显示菜单项

ENDIF

ENDFOR

ENDDEFINE


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


ListCount 属性

请参阅	示例

存放组合框或列表框控制的列表中的项数。

应用于

组合框，列表框

语法

Control.ListCount

说明

设计时不可用。运行时只读。


* 在下面示例中，用 ListCount 遍历所有组合框或列表框
* 的 List 属性指定的菜单项。

*下面示例创建了一个列表框。显示在列表框中的菜单项
* 源于一个数组，数组由 RowSourceType 和 RowSource
* 属性指定。

*设置列表框的 MultiSelect 属性为真 (.T.)，允许从列表框
* 中做多项选择。在 FOR…ENDFOR 循环中用 ListCount 属性
* 显示列表框中的菜单项。用 Selected 和 List 属性
* 确定选择的菜单项。

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  && 用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

ENDFOR

frmMyForm = CREATEOBJECT('Form')  &&  创建一个表单

frmMyForm.Closable = .f.  && 使控制菜单框无效

frmMyForm.Move(150,10)  && 移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  && 添加“退出”命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  && 添加“列表框”控制

frmMyForm.lstListBox1.RowSourceType = 5  && 指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' & 数组包含列表框菜单项

frmMyForm.cmbCommand1.Visible =.T.  && “退出”命令按钮可见

frmMyForm.lstListBox1.Visible =.T.  && “列表框”可见

frmMyForm.SHOW  &&  显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认“取消”命令铵钮(ESC)

Left = 125  &&  命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理关闭表单

CLEAR  &&  清除 Visual FoxPro 主窗口

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  && 创建“列表框”控制

Left = 10  && 列表框列

Top = 10  && 列表框行

MultiSelect = .T.  &&  允许选择多于 1 项

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 是否选定菜单项?

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) && 显示菜单项

ENDIF

ENDFOR

ENDDEFINE


请参阅

AddItem 方法，List 属性，ListItemID 属性，RemoveItem 方法


ListIndex 属性

请参阅

指定组合框或列表框中选定数据项的索引号。

应用于

组合框，列表框

语法

Control.ListIndex[ = nIndex]

设置

nIndex

ListIndex 属性的设置是：

设置	说明
0	（默认值）指示没有选定数据项。对组合框来说，这说明用户输入了列表中没有的值。
1 ...	选定数据项的索引。
说明

设计时不可用，运行时可读写。

下面显示了选定数据项的字符串。

? List(MyList.ListIndex)

使用控制的 Value 属性可返回相同的值。


请参阅

AddItem 方法，AddListItem 方法，IndexToItemID 方法，ItemIDToIndex 方法，List 属性，ListItem 属性，RemoveItem 方法，Value 属性


ListItem 属性

请参阅

此属性是一个字符型数组，用于通过 ID 值访问组合框或列表框控制中的数据项。

应用于

组合框，列表框

语法

Control.ListItem(nItemID)[ = cChar]

设置

nItemID

使用数据项的唯一标识（ID）指定数据项。

说明

设计时不可用。运行时可读写。

ListItem 属性与 ListCount 属性联合使用，从 1 到 ListCount 逐一返回列表中的所有项。使用 List 属性可按显示顺序检索数据项；使用 ListItem 属性可按数据项的标识检索数据项。

附注

要向组合框或列表框中添加数据项，可使用 AddItem 或 AddListItem 方法。要删除项，可使用 RemovetItem 或 RemoveListItem 方法。要按字母顺序放置项，在向列表中添加项之前设置控制的 Sorted 属性为“真”(.T.)。


请参阅

AddItem 方法，AddListItem 方法，IndexToItemID 方法，ItemIDToIndex 方法，ListCount 属性，List 属性，ListItemID 属性


ListItemID 属性

请参阅

指定组合框或列表框控制中选定项的唯一标识号。

应用于

组合框，列表框

语法

Control.ListItemID[ = nItemID]

设置

nItemID

ListItem 属性的设置和说明是：

设置	说明
1	指示没有选定项。对于组合框，这说明用户输入了列表中没有的值。
1 (或大于 1 的任何数)	选定项的项标识。
说明

设计时不可用，运行时可读写。

若用 RemoveListItem 方法从列表中删除一项，则所有剩余项都保持各自的标识号。当用 AddItem 方法向列表中添加项并且 Sorted 属性设置为“假”(.F.) 时，指定 nItemID 为可用的最低值。当用 AddListItem 向列表中添加项并且 Sorted 属性设置为“假”(.F.) 时，可指定 nItemID 为任何数。


请参阅

AddItem 方法，AddListItem 方法，IndexToItemID 方法，ItemIDToIndex 方法，ListCount 属性，List 属性，ListItem 属性，RemoveItem 方法，RemoveListItem 方法


_LMARGIN 系统内存变量

请参阅

包含左页边距。包含此变量是为了提供向后兼容性。可用报表设计器 代替。

语法

_LMARGIN = nColumns

参数

nColumns

指定左页边距的位置。

说明

_LMARGIN 包含一个数值，用以确定 ? 命令生成的输出中左页边距的位置。有效的 _LMARGIN 值的范围是从 0 到 254。

当输出到打印机时，_LMARGIN 值代表当前页偏移和文本之间的附加空格数。页偏移由 _PLOFFSET 或 SET MARGIN 的设置决定。

只有当 _WRAP 设置为“真”(.T.) 时，_LMARGIN 才是活动的。


请参阅

? | ??，_INDENT，_PLOFFSET，_RMARGIN，SET MARGIN，_WRAP


 LOAD 命令

请参阅

把二进制文件、外部命令或外部函数放置在内存中。包含此变量是为了提供向后兼容性。可用 SET LIBRARY 代替。

语法

LOAD BinaryFileName [FUNCTION]
[SAVE] [NOSAVE]

参数

BinaryFileName

在 FoxPro for Windows 和 FoxPro for MS-DOS 中，指定要放置到内存中的文件名。二进制文件的默认扩展名是 .BIN。当调用二进制程序时，可省略扩展名。若加载的文件与先前加载的文件同名但扩展名不同，则新文件替换先前加载的文件。

在 FoxPro for Macintosh 中，指定要放置到内存中的外部命令或函数。

FUNCTION

在 FoxPro for Macintosh 中，当加载外部函数 (XFNC) 到内存时必须包含 FUNCTION。

SAVE
NOSAVE

仅用于 FoxPro for Windows 和 FoxPro for MS-DOS。

FoxPro for Macintosh 忽略 SAVE 和 NOSAVE。

LOAD 和 CALL 支持可选的 SAVE 子句，用于写入 FoxPro for Windows 或 FoxPro for MS-DOS 中的二进制程序。

如果包含 SAVE ，则当从二进制例程返回时，就把视频 RAM 的当前内容复制到 FoxPro for Windows 或 FoxPro for MS-DOS 主窗口（假定二进制程序直接写向视频 RAM）中。

这意味着 FoxPro for Windows 和 FoxPro for MS-DOS 知道任何由二进制程序写向 FoxPro for Windows 或 FoxPro for MS-DOS 主窗口的内容，并且就象 FoxPro for Windows 或 FoxPro for MS-DOS 写的一样对待。特别地，当 FoxPro for Windows 或 FoxPro for MS-DOS 对象，如窗口，在外部写入数据上拖动时，并不删除这些数据。

除非必要，否则不要包含 SAVE，因为每次从二进制程序返回时，FoxPro for Windows 和 FoxPro for MS-DOS 都要花一些时间还原屏幕内容。

当加载二进制程序时可包含 SAVE（默认值是 NOSAVE），当调用二进制程序时可包含 SAVE 或 NOSAVE。当 CALL 包含 SAVE 或 NOSAVE 时，它们改写 LOAD 包含的关键字。

创建二进制文件

� 若要创建 FoxPro for Windows 和 FoxPro for MS-DOS 的二进制文件：

1.	用下面命令汇编程序并创建一个对象文件：

MASM FileName

2.	用下面命令连接对象文件并创建一个可执行文件：

LINK FileName

3.	用下面命令创建二进制文件：

EXE2BIN FileName

另外，当创建 FoxPro for Windows 或 FoxPro for MS-DOS 二进制文件时，遵循以下规则：

 •	   第一条可执行指令必须在 0 偏移处开始。

 •	   二进制程序不能更改当作参数传递的内存变量的长度。

 •	   使用或分配的内存数量不能超过实际程序的大小，因为文件大小用来确定分配的内存数量。

 •	   在控制返回 FoxPro for Windows 和 FoxPro for MS-DOS 之前，必须恢复 SS 和 CS 寄存器。

 •	   当用 LOAD 和 CALL 执行程序时，必须使用远返回将控制返回到 FoxPro for Windows 和 FoxPro for MS-DOS。

 •	   当程序由退出系统调用而不是由远返回终止时，必须用 RUN 命令执行汇编程序。

注意

仔细阅读下列汇编语言接口警告：

 •	   使用字符串变量时，不能改变字符串长度。即使字符串变量的长度更改 1 字节也可能更改自由内存列表。

 •	   当把字符串地址从一个调用保存到下一个调用时，必须在使用字符串变量之前重置字符串地址。

说明

Visual FoxPro 不支持 LOAD，如果执行则产生错误信息。可用 SET LIBRARY 打开一个 API 库来代替。

在 FoxPro for Windows 和 FoxPro for MS-DOS 中，使用 LOAD 将二进制程序从磁盘放置到内存中，一次可向内存中最多加载 16 个 64K 二进制文件。

在 FoxPro for Macintosh 中，用 LOAD 把外部命令 (XCMD) 或外部函数 (XFNC) 放置到内存中。可用 CALL 来执行 LOAD 放置到内存中的外部命令或函数。一次可向内存中最多加载 16 个外部命令或函数。

在用 LOAD 将外部命令或函数放置到内存中之前，必须用 SET XCMDFILE 打开包含外部命令或函数的外部命令源文件。


请参阅

CALL，SET LIBRARY，SET XCMDFILE


Load 事件

请参阅

在创建对象前发生。

应用于

表单，表单集

语法

PROCEDURE Object.Load
[LPARAMETERS nIndex]

参数

nIndex

唯一地标识控制数组中的控制。

说明

Load 事件先为表单集发生，然后再为其包含的表单发生。Load 事件发生在 Activate 和 GotFocus 事件之前。


请参阅

Activate 事件，GotFocus 事件，Unload 事件


LOCAL 命令

请参阅

创建局部内存变量和内存变量数组。

语法

LOCAL MemVarList
— 或者 —
LOCAL [ARRAY] ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] ...

参数

MemVarList

指定要创建的一个或多个局部内存变量。

[ARRAY] ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] ...

指定要创建的一个或多个局部数组。有关每个参数的说明请参阅 DIMENSION。

说明

局部内存变量和内存变量数组只能在创建它们的过程或函数中使用和更改，不能被高层或低层程序访问。一旦包含局部内存变量和数组的过程或函数执行完毕，则释放这些局部内存变量和数组。

用 LOCAL 创建的内存变量和数组都初始化为“假”(.F.)。必须在赋值之前把内存变量或数组声明为局部。若在用 LOCAL 声明一个内存变量或数组为局部内存变量或数组之前，对该内存变量或数组进行赋值，则 Visual FoxPro 产生错误信息。

局部变量可以由引用方式传递。

不能缩写 LOCAL，因为 LOCAL 和 LOCATE 的前四个字母相同。


请参阅

DIMENSION，FUNCTION，LPARAMETERS，PARAMETERS，PARAMETERS( )，PRIVATE，PUBLIC，RELEASE


LOCATE 命令

请参阅	示例

按顺序搜索表从而找到满足指定逻辑表达式的第一个记录。

语法

LOCATE FOR lExpression1
[Scope]
[WHILE ]
[NOOPTIMIZE]

参数

FOR lExpression1

LOCATE 按顺序搜索当前表以找到满足逻辑表达式 lExpression1 的第一个记录。

若 lExpression1 是可优化表达式，则 Rushmore 优化由 LOCATE FOR 创建的查询。为了获得最佳执行效果，可在 FOR 子句中使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE 和 深入了解 Rushmore 技术 或《开发指南》的第十七章，“优化应用程序”。

Scope

指定要定位的记录范围。只有范围内的记录才被定位。Scope 子句有 ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关 Scope 子句的详细内容，请参阅 Scope 子句 主题或《开发指南》的第二章，“语言概述”。包含 Scope 的命令只能在活动工作区中的表上操作。

LOCATE 的默认范围是所有 (ALL) 记录。

WHILE lExpression2

指定一个条件，只要逻辑表达式 lExpression2 计算值为“真”(.T.)，就继续查找记录。

NOOPTIMIZE

关闭 LOCATE 的 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和 深入了解 Rushmore 技术 或《开发指南》的第十七章，“优化应用程序”。

说明

被索引的表不必已有索引。

若 LOCATE 发现一个满足条件的记录，可使用 RECNO( ) 返回该记录号。若发现满足条件的记录，则 FOUND( ) 返回“真”(.T.)，EOF( ) 返回“假”(.F.)。若 SET TALK 是 ON，则显示满足条件的记录号。

 LOCATE 发现一个满足条件的记录之后，可执行 CONTINUE，从而在表的剩余部分寻找其他满足条件的记录。当执行 CONTINUE 时，搜索操作从满足条件的记录的下一条记录开始继续执行。可重复执行 CONTINUE，直到到达范围边界或表尾。

若找不到满足条件的记录，则 RECNO( ) 返回表中的记录数加 1，FOUND( ) 返回“假”(.F.)，EOF( ) 返回“真”(.T.)。

LOCATE 和 CONTINUE 只能用于当前工作区。若选择了另一工作区，则当重选原来的工作区时可继续原来的搜索过程。


* 在下列示例中，定位德国顾客的记录，然后显示总数。
*

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

SET TALK OFF

STORE 0 TO gnCount

LOCATE FOR ALLTRIM(UPPER(customer.country)) = 'GERMANY'

DO WHILE FOUND( )

gnCount = gnCount + 1

? company

CONTINUE

ENDDO

? 'Total companies Germany: '+ LTRIM(STR(gnCount))


请参阅

CONTINUE，EOF( )，FIND，FOUND( )，RECNO( )，SEEK，SEEK( )，SET OPTIMIZE


LOCFILE( ) 函数

请参阅

在磁盘上定位文件并返回带有路径的文件名。

语法

LOCFILE(cFileName [, cFileExtensions] [, cDialogCaption] [, cCreatorType])

参数

cFileName

指定要定位文件的名称。如果 cFileName 只包含文件名，LOCFILE( ) 函数将首先搜索 Visual FoxPro 的默认目录或文件夹。如果在默认目录或文件夹中找不到该文件，则搜索 Visual FoxPro 路径。可以用 SET PATH 命令指定 Visual FoxPro 路径。

如果 cFileName 包含路径及文件名，则在指定的位置搜索。如果在指定的位置上没有找到该文件，LOCFILE( ) 函数将先搜索 Visual FoxPro 默认目录或文件夹，然后再搜索 Visual FoxPro 路径。

如果已定位了该文件，LOCFILE( ) 返回文件名与路径。

cFileExtensions

指定要定位文件的扩展名。如果用 cFileName 指定的文件名不含扩展名，Visual FoxPro 将把 cFileExtensions 中列出的各个文件扩展名作为该文件的扩展名，并再作搜索。

cFileExtensions 还可以指定当不能定位指定的文件时，在“打开”对话框中显示的文件的扩展名。有关 Visual FoxPro 文件扩展名及相应文件创建程序类型的列表，请参阅文件扩展名和文件类型。

cFileExtensions 可以有不同的形式：

 •	   如果 cFileExtensions 包含单个扩展名（例如，PRG），则只显示具有此扩展名的文件。

 •	   cFileExtensions 可以包含文件扩展名的列表，扩展名之间用分号隔开。例如，包含 PRG;FXP 将显示扩展名为 .PRG 或 .FXP 的所有文件。

 •	   如果文件名称相同，而扩展名不同（例如，CUSTOMER.PRG 与 CUSTOMER.FXP），则只显示扩展名在 cFileExtensions 中首先列出的文件。

 •	   cFileExtensions 可以包含文件扩展名的列表，扩展名之间由垂直线分隔（例如，PRG|FXP）。在这种情况下，将显示具有其中任一扩展名的所有文件。

 •	   如果 cFileExtensions 只包含分号(；)，则显示不带扩展名的所有文件。

 •	   如果 cFileExtensions 为空字符串，并且省略 cCreatorType，则显示当前目录下的所有文件。

 •	   cFileExtensions 还可以包含通配符（* 与 ?），此时显示扩展名满足通配符条件的所有文件。例如，如果 cFileExtensions 为 ?X?，则所有具有扩展名为 .FXP，.EXE，或 .TXT 的文件都将显示出来。

cDialogCaption

指定用来提示用户的文本。该文本出现在“打开”对话框中。

cCreatorType

仅用于 FoxPro for Macintosh。

显示具有特定 Creator 类型的文件。如果 cFileExtensions 包含空字符串，将只显示与 cCreatorType 指定的 Creator 类型相匹配的文件。如果在 cFileExtensions 中包含了文件梗概，则将显示与文件梗概相匹配并具有 cCreatorType 指定 Creator 类型的文件。

有关 Visual FoxPro 文件扩展名及相应 Creator 类型的列表，请参阅文件扩展名和文件类型。

返回值类型

字符型

说明

如果在默认目录或文件夹下，在 Visual FoxPro 路径上以及指定位置上都无法找到该文件，将显示“打开”对话框。该对话框可用于定位文件。当从对话框中选定某个文件时，返回带有文件路径的文件名。

如果选择“取消”、按 ESC 键，或从控制菜单上选择“关闭”而退出“打开”对话框，Visual FoxPro 将产生错误信息，LOCFILE( ) 也不会返回值。


请参阅

FILE( )，GETFILE( )，GETPICT( )，PUTFILE( )，SET PATH


LOCK( ) 函数

请参阅	示例

尝试锁定表中一个或更多的记录。

语法

LOCK([nWorkArea | cTableAlias]
| [cRecordNumberList, nWorkArea | cTableAlias])

参数

nWorkArea | cTableAlias

尝试锁定指定工作区中打开的表的当前记录。nWorkArea 指定工作区号，cTableAlias 指定表别名。如果不指定工作区和表别名，LOCK( ) 函数尝试锁定当前工作区中的表的当前记录。

cRecordNumberList

指定尝试锁定多个记录时必须包含的一个或更多记录编号的列表。SET MULTILOCK 必须为 ON，并且必须要包含给多个记录加锁的工作区或表的别名。

LOCK( ) 函数尝试锁定您所指定的所有记录。cRecordNumberList 指定的记录编号之间用逗号分隔。例如尝试给某表的前四个记录加锁时，cRecordNumberList 应为 1,2,3,4。

若要锁定多个记录，可以对其中的每一个记录重复下列步骤：移动记录指针指向要锁定的记录，再发出 LOCK( ) 或 RLOCK( ) 命令。

在 Visual FoxPro 中，可以将 0 指定为记录编号。指定 0 时试图锁定表头。

重要内容

锁定表头的时间应尽可能地短，因为表头锁定时其他用户不能向表中添加记录。

可以用 UNLOCK RECORD 0，UNLOCK 或 UNLOCK ALL 命令解除对表头的锁定。

如果在 cRecordNumbers 中指定的所有记录均锁定成功，LOCK( ) 函数返回“真”(.T.)。由 cRecordNumbers 指定的记录中即使有一个记录不能锁定，LOCK( ) 函数也将返回“假”(.F.)，并且不锁定任何记录。不过，原来已有的记录锁仍保留原样。多个记录的锁定是个叠加过程。设置额外的记录锁并不释放对其他记录的锁定。

在一个工作区中可以锁定的最大记录数约为 8000，锁定整个表的速度总比只锁定一部分的记录要快。

解除对记录的锁定

只有设置锁的用户才能解除对表中记录的锁定。发出 UNLOCK 命令，关闭该表或退出 Visual FoxPro 都将解除记录锁。

UNLOCK 可以解除当前工作区、指定工作区或所有工作区中的记录锁。有关详细内容，请参阅 UNLOCK。

将 SET MULTILOCKS 的设置由 ON 切换为 OFF，或由 OFF 切换为 ON ，都将隐含地执行 UNLOCK ALL 命令，释放所有工作区中的全部记录锁。

可以使用 USE 命令、CLOSE ALL 命令或 CLOSE DATABASE 命令关闭表。

有关记录与文件锁定以及在网络上共享表的详细内容，请参阅《开发指南》第十九章“共享访问程序设计”。

返回值类型

逻辑型

说明

LOCK( ) 函数与 RLOCK( ) 函数等价。

如果锁定成功，则 LOCK( ) 函数返回“真”(.T.)。设置锁的用户可对锁定记录进行读和写访问；网络上其他的用户只能对这些记录进行只读访问。

执行 LOCK( ) 函数并不保证记录锁设置成功。不能对已由另一用户锁定的记录或位于其他用户锁定的表中的记录设置记录锁。如果由于某种原因不能设置记录锁，LOCK( ) 函数返回“假”(.F.)。

在默认情况下，LOCK( ) 函数尝试锁定记录一次。使用 SET REPROCESS 命令可以在第一次尝试失败后自动地重设记录锁。SET REPROCESS 确定初始锁定失败时锁定操作的尝试次数或尝试锁定应当持续的时间。有关详细内容，请参阅 SET REPROCESS。

SET MULTILOCKS 决定能否锁定表中的多个记录。如果 SET MULTILOCKS 为 OFF（默认值），只能锁定表中的单个记录。而 SET MULTILOCKS 为 ON 时，可以锁定表中的多个记录。有关详细内容，请参阅 SET MULTILOCKS 。


*下面的示例先锁定表 customer 和表 employee 中的前四个
* 记录，再解除对记录的锁定。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

SET REPROCESS TO 3 AUTOMATIC

STORE '1,2,3,4' TO gcRecList

gcOldExc = SET('EXCLUSIVE')

SET EXCLUSIVE OFF

SELECT 0

USE employee  && 打开表 Employee

SELECT 0

USE customer  && 打开表 Customer

? LOCK('1,2,3,4', 'customer')  && 锁定表 Customer 中的前四个记录

? RLOCK(gcRecList, 'employee')  &&  锁定表 employee 中的前四个记录

UNLOCK IN customer

UNLOCK IN employee

SET EXCLUSIVE &gcOldExc


请参阅

CLEAR，CLOSE，FLOCK( )，RLOCK( )，SET MULTILOCKS，SET REPROCESS，UNLOCK，USE


LockScreen 属性

请参阅

确定表单是否以批处理方式执行对表单及所包含对象的属性设置的更改。

应用于

表单，_SCREEN

语法

Object.LockScreen[ = lExpr]

设置

lExpr

LockScreen 属性的设置有：

设置	说明
“真”(.T.)	表单及其包含的对象以批处理方式反映对属性设置的更改，或者说在同一时刻反映，而不是在更改后立即反映。
“假”(.F.)	（默认值）表单及其包含的对象在对属性设置更改后立即反映出更改。
说明

设计和运行时可用。

如果想在运行时更改 BackColor、FontName 等显示属性，应设置 LockScreen 为“真”(.T.) 以减少令人厌烦的屏幕刷新。

附注

如果设置 LockScreen 为“假”(.F.)，将重画表单及其所有的控制。


请参阅

Paint 事件


LOG( ) 函数

请参阅	示例

返回给定数值表达式的自然对数（底数为 e）。

语法

LOG(nExpression)

参数

nExpression

指定数值表达式，LOG( ) 函数返回方程 e^x = nExpression 中的 x 值。nExpression 必须大于 0。

返回值类型

数值型

说明

自然对数以常数 e 为底。返回的结果中小数的位数由 SET DECIMALS 命令指定。


CLEAR

? LOG(1)  && 显示 0.00

STORE EXP(2) TO gneSquare

? LOG(gneSquare)  && 显示 2.00


请参阅

EXP( )，LOG10( )，SET DECIMALS


LOG10( ) 函数

请参阅	示例

返回给定数值表达式的常用对数（以 10 为底）。

语法

LOG10(nExpression)

参数

nExpression

指定数值表达式，LOG10( ) 函数返回方程 10^x = nExpression 的 x 值。nExpression 必须大于 0。

返回值类型

数值型

说明

常用对数以 10 为底。返回的结果中小数的位数由 SET DECIMALS 命令指定。


CLEAR

? LOG10(10)  && 显示 1.00

STORE 100 TO gnBaseTen

? LOG10(gnBaseTen)  && 显示 2.00

? LOG10(gnBaseTen^2)  && 显示 4.00


请参阅

EXP( )，LOG( )，SET DECIMALS


LOOKUP( ) 函数

请参阅	示例

在表中搜索字段值与指定表达式匹配的第一个记录。

语法

LOOKUP(ReturnField, eSearchExpression, SearchedField [, cTagName])

参数

ReturnField

指定一个字段，搜索成功时，LOOKUP( ) 函数返回其内容。如果搜索不成功，LOOKUP( ) 函数返回与 ReturnField 长度和数据类型都相同的空字符串。

eSearchExpression

指定搜索表达式。搜索表达式常常是表中某个字段的内容，或者与活动索引或复合索引标识的索引表达式相对应。

SearchedField

指定要搜索的字段。如果该表没有活动索引，LOOKUP( ) 函数对由 SearchedField 指定的字段执行顺序搜索。

如果打开的某个索引文件或索引标识的索引关键字表达示正是您指定的搜索字段，LOOKUP( ) 函数将利用索引文件或索引标识执行快速搜索。

cTagName

指定 LOOKUP( ) 函数在搜索时使用的复合索引标识名。复合索引搜索是 LOOKUP( ) 函数所能执行的最快的搜索方式。

返回值类型

字符型、数值型、货币型、浮点型、整型、双精度型、日期型、日期时间型或逻辑型。

说明

如果搜索成功，LOOKUP( ) 函数移动记录指针指向匹配记录，并返回该记录指定字段的内容。

如果没有找到搜索表达式，LOOKUP( ) 函数返回与 ReturnField 长度和数据类型相同的空字符串，并将记录指针定位在文件尾。

如果使用 LOOKUP( ) 在父表中搜索，则把所有相关子表的记录指针移动到相关记录上。

本函数不能用 Rushmore 优化。


*在下面的示例中，LOOKUP( ) 函数使用索引标识 company 搜索
* 字符串 "Ernst Handel" 的第一次出现。如果搜索成功，
* LOOKUP( ) 函数返回字段 contact 的内容，并由
* @ ... SAT 命令显示这个返回值。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

USE customer ORDER company

@ 2,2 SAY LOOKUP(contact, 'Ernst Handel', company, 'company')


请参阅

FIND，INDEX，LOCATE，SEEK，SEEK( )


LostFocus 事件

请参阅

当某个对象失去焦点时发生。

应用于

复选框，组合框，命令按钮，容器对象，控制对象，编辑框，表单，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，微调，文本框

语法

PROCEDURE Object.LostFocus
[LPARAMETERS nIndex]

参数

nIndex

唯一地标识控制数组中的一个控制。

说明

这一事件发生的时间取决于对象的类型：

 •	   控制由于用户的操作而失去焦点，这类操作包括选中另一个控制或在另一个控制上单击，或在代码中用 SetFocus 方法更改焦点。用户按 CTRL+TAB 键退出表格时，表格失去焦点。

 •	   只有当表单不包含任何控制，或者所有控制的 Enabled 和 Visible 属性的设置均为“假”(.F.) 时，表单失去控制。

对于表单，LostFocus 事件在 Deactivate 事件之前发生。


请参阅

Deactivate 事件，Enabled 属性，GotFocus 事件，Visible 属性


LOWER( ) 函数

请参阅	示例

以小写字母形式返回指定的字符表达式。

语法

LOWER(cExpression)

参数

cExpression

指定要由 LOWER( ) 函数转换的字符表达式。

返回值类型

字符型

说明

LOWER( ) 函数将字符表达式中所有的大写字母 (A  Z) 转换为小写字母 (a  z)。字符表达式中的其他字符保持不变。


STORE 'FOX' TO gcName

CLEAR

? LOWER(gcName)  &&显示 fox


请参阅

ISALPHA( )，ISLOWER( )，ISUPPER( )，PROPER( )，UPPER( )


LPARAMETERS 命令

请参阅

将调用程序传入的数据赋给局部内存变量或数组。

语法

LPARAMETERS ParameterList

参数

ParameterList

指定接收数据的局部内存变量或数组的名称。

在 ParameterList 中，参数之间用逗号分隔。在 LPARAMETERS 语句中，至少应有与 DO ... WITH 语句中同样多的参数。如果在 LPARAMETERS 语句中列出的变量或数组的数目多于 DO ... WITH 语句传递的参数数目，则多出的变量初始化为“假”(.F.)。最多可以传递 27 个参数。

可以使用 PARAMETERS( ) 函数确定向最近一次执行的程序、过程或用户自定义函数传递的参数数目。

说明

LPARAMETERS 命令在被调用的程序过程或用户自定义函数中创建局部内存变量和数组。可用 PARAMETERS 命令创建私有内存变量和数组。

如果向程序、过程或用户自定义函数传递值、变量或者数组，LPARAMETERS 必须是被调用程序、过程或用户自定义函数的第一条可执行语句。

默认情况下，DO ... WITH 以引用传递方式向过程传递变量和数组。在被调用过程中更改某个值时，新的值将传递回调用程序中相关的变量和数组。如果希望以值传递方式向过程传递某一变量或数组，应在 DO ... WITH 语句的参数列表中用圆括号将该变量或数组括起来。此时，被调用过程中参数的任何更改都不会传递回调用程序。

在默认情况下，变量以引用传递方式传递给过程，以值传递方式传递给用户自定义函数。可以用 SET UDFPARMS TO REFERENCE 指定以引用传递方式向用户自定义函数传递变量。


请参阅

DO，FUNCTION，LOCAL，PARAMETERS( )，PRIVATE，PROCEDURE，PUBLIC，SET UDFPARMS


LTRIM( ) 函数

请参阅	示例

删除指定的字符表达式的前导空格，然后返回得到的表达式。

语法

LTRIM(cExpression)

参数

cExpression

指定字符表达式，LTRIM( ) 函数将删除其前导空格。

返回值类型

字符型

说明

当使用 STR( ) 函数将数值转换为字符串时可能会插入前导空格，本函数对于删除这些前导空格很有用。


STORE 'Redmond' TO gcCity

STORE '         Washington' TO gcState

CLEAR

? gcCity, gcState  && 显示 Redmond         Washington

? gcCity, LTRIM(gcState)  && 显示 Redmond Washington


请参阅

ALLTRIM( )，LEFT( )，RIGHT( )，RTRIM( )，SUBSTR( )，TRIM( )


LUPDATE( ) 函数

请参阅	示例

返回一个表最近一次更新的日期。

语法

LUPDATE([nWorkArea | cTableAlias])

参数

nWorkArea | cTableAlias

返回在指定工作区中打开的表最近一次更改的日期。nWorkArea 指定工作区号，cTableAlias 指定表别名。如果省略 nWorkArea 和 cTableAlias，LUPDATE( ) 函数返回当前选定工作区中的表最近一次更新的日期。

如果指定的工作区中没有打开的表，LUPATE( ) 函数返回空日期。如果不存在具有指定别名的表，Visual FoxPro 将产生错误信息。

返回值类型

日期型

说明

本函数在更新过程中很有用。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开表 Customer

CLEAR

? LUPDATE( )  && 显示最近一次更新的日期


请参阅

DIR，FDATE( )，FILER，FTIME( )


_MAC 系统内存变量

请参阅

当在 Macintosh 机器上使用 FoxPro 时，变量值为“真”(.T.)。

语法

_MAC = lExpression

说明

当在 Macintosh 机上使用 FoxPro 时，_MAC 为“真”(.T.)；当使用别的平台上的 FoxPro 版本（Visual FoxPro、FoxPro for Windows、FoxPro for MS-DOS 或 FoxPro for UNIX）时，_MAC 值为“假”(.F.)。

不能使用 STORE 命令或 = 运算符更改 _MAC 的值。


请参阅

_DOS，_UNIX，VERSION( )，_WINDOWS


MacDesktop 属性

指定是否将表单放置在 Visual FoxPro 主窗口中。包含此属性是为了提供向后兼容性。


Margin 属性

请参阅

为控制的文本部分指定应该留出的空白宽度。

应用于

组合框，编辑框，微调，文本框

语法

Control.Margin[ = nValue]

设置

nValue

为控制的文本部分指定应该留出的空白宽度。

说明

设计和运行时可用。

使用 Margin 属性来指定控制中的文本位置。Margin 属性在控制内部创建空白，它并不影响控制本身的大小。


请参阅

Alignment 属性


MAX( ) 函数

请参阅	示例

对几个表达式求值，并返回具有最大值的表达式。

语法

MAX(eExpression1, eExpression2 [, eExpression3 ...])

参数

eExpression1, eExpression2 [, eExpression3 ...]

指定表达式，MAX( ) 返回其中具有最大值的表达式。所有表达式必须为同一数据类型。

返回值类型

字符型、数值型、货币型、双精度型、浮点型、日期型或日期时间型


*下面的示例使用 APPEND BLANK 命令创建一个有 10 个
* 记录的表，记录包含随机数。然后用
*  MIN( ) 和 MAX( ) 来显示表中的最大值和最小值。

CLOSE DATABASES

CREATE TABLE Random (cValue N(3))

FOR nItem = 1 TO 10  && 追加 10 个记录

APPEND BLANK

REPLACE cValue WITH 1 + 100 * RAND( )  && 插入随机值

ENDFOR

CLEAR

LIST  && 显示值

gnMaximum = 1  && 初始化最小值

gnMinimum = 100  && 初始化最大值

SCAN

gnMinimum = MIN(gnMinimum, cValue)

gnMaximum = MAX(gnMaximum, cValue)

ENDSCAN

? 'The minimum value is: ', gnMinimum  && 显示最小值

? 'The maximum value is: ', gnMaximum  && 显示最大值


请参阅

CALCULATE，MIN( )，SELECT - SQL


MaxButton 属性

请参阅

指定表单是否含有最大化按钮。

应用于

表单，_SCREEN

语法

Object.MaxButton[ = lExpr]

设置

lExpr

MaxButton 属性的设置为：

设置	说明
“真”(.T.)	（默认值）表单有最大化按钮。
“假”(.F.)	表单没有最大化按钮。
说明

设计和运行时可用。

最大化按钮允许用户将表单扩大到整屏。

最大化按钮在窗口最大时自动变为还原按钮。当窗口最小或者还原时，自动将还原按钮变为最大化按钮。

MaxButton、MinButton、Borderstyle 和 ControlBox 属性的设置值只有在运行时才起作用。

在运行时最大化表单将触发 Resize 事件。

附注

WindowState 属性反映了窗口的当前状态。如果将窗口状态设置为 2（最大化），表单将最大化，不管 MaxButton 和 BorderStyle 属性的设置。


请参阅

BorderStyle 属性，ControlBox 属性，MinButton 属性，Resize 事件，WindowState 属性


MaxHeight 属性

请参阅

决定表单可能的最大高度。

应用于

表单，_SCREEN

语法

Object.MaxHeight[ = nHeight]

设置

nHeight

表单的最大高度，度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

当调整表单大小时，无论是选择控制菜单的“大小”命令还是拖动表单的边框，表单的高度将不会超过 MaxHeight 属性的设定值。

MaxHeight 的默认设置为 -1；即没有指定最大高度。


请参阅

ScaleMode 属性


MaxLeft 属性

请参阅

指定表单与 Visual FoxPro 主窗口左侧边缘的最大可能距离。

应用于

表单，_SCREEN

语法

Object.MaxLeft[ = nMaxLeft]

设置

nMaxLeft

指定 Visual FoxPro 主窗口的左边界与最大化表单左边界间的最大距离，度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

用 MaxLeft 属性来保证表单在运行时不会离 Visual FoxPro 主窗口左边界太远。


请参阅

MaxTop 属性，MaxWidth 属性，MinHeight 属性，ScaleMode 属性


MaxLength 属性

请参阅

指定在编辑框中输入字符的最大长度。

应用于

编辑框

语法

EditBox.MaxLength[ = nMaxLength]

设置

nMaxLength

可输入到编辑框中的最大字符数。若 nMaxlength 设置为 0，那么输入到编辑框的字符数目没有限制。

说明

设计和运行时可用。

可使用 MaxLength 来限制用户输入编辑框的字符数目。


请参阅

SelLength 属性


MaxTop 属性

请参阅

指定最大化表单与 Visual FoxPro 主窗口顶端边缘的最大可能距离。

应用于

表单，_SCREEN

语法

Object.MaxTop[ = nMaxTop]

设置

nMaxTop

指定最大化表单上边界与 Visual FoxPro 主窗口顶端边缘的最大距离。度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

可使用 MaxTop 属性确保在运行时表单不会离屏幕上缘太远。


请参阅

MaxLeft 属性，MaxWidth 属性，MinHeight 属性，MinWidth 属性，ScaleMode 属性


MaxWidth 属性

请参阅

指定表单的最大宽度。

应用于

表单，_SCREEN

语法

Object.MaxWidth[ = nMaxWidth]

设置

nMaxWidth

指定表单的最大宽度，度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

调整表单时，无论是选用控制菜单中的“大小”命令还是拖动表单的边框，表单的宽度都不会大于 MaxWidth 属性中设置的值。

MaxWidth 的默认设置为 -1；即没有指定最大宽度。


请参阅

MaxHeight 属性，MinHeight 属性，MinWidth 属性，ScaleMode 属性


MCOL( ) 函数

请参阅

返回鼠标指针在 Visual FoxPro 主窗口或用户自定义窗口中的列位置。

语法

MCOL([cWindowName])

参数

cWindowName

指定窗口名，MCOL( ) 函数返回鼠标指针在该窗口中的列位置。

若省略 cWindowName，且不存在活动的用户自定义窗口，将返回鼠标指针在 Visual FoxPro 主窗口中的列位置。若省略 cWindowName，且存在活动的用户自定义窗口，则返回鼠标指针在活动的用户自定义窗口中的列位置。如果鼠标指针位于用户自定义窗口之外，则返回 -1。

如果未安装鼠标驱动程序，且没有输出窗口，则返回 -1。

在 FoxPro for MS-DOS 中，若 cWindowName 为浏览窗口或调试窗口名，并且鼠标指针位于窗口的左边框上，则返回 0。若鼠标指针位于任何其他窗口的左边框上时，返回值为 -1。

返回值类型

数值型


请参阅

COL( )，INKEY( )，ISMOUSE( )，MROW( )，ROW( )，WCOLS( )，WROWS( )


MD | MKDIR 命令

请参阅	示例

在磁盘上创建一个新目录。

语法

MD cPath | MKDIR cPath

参数

cPath

指定一条路径（含驱动器指示符和目录）或目录。

若 cPath 是不含驱动器指示符的目录，将把该目录创建为当前 Visual FoxPro 默认目录的子目录。

说明

如果试图创建一个已存在的目录，Visual FoxPro 将产生错误信息。


* 在下面示例中，用 MKDIR 创建一个名为 mytstdir 的新目录，
* 用 CHDIR 命令切换到新目录下。用 GETDIR( )
* 显示目录结构。随后用 RMDIR 删除新建的目录。
* 再一次用 GETDIR( ) 显示目录结构。

SET DEFAULT TO HOME( )  && 还原 Visual FoxPro目录

MKDIR mytstdir  && 创建一个新目录

CHDIR mytstdir  &&  转换到新目录下

= GETDIR( )  && 显示目录选取对话框

SET DEFAULT TO HOME( )  && 还原 Visual FoxPro 目录

RMDIR mytstdir  && 删除新建目录

= GETDIR( )  && 显示目录选取对话框


请参阅

CD | CHDIR，GETDIR( )，HOME( )，RD | RMDIR，SET DEFAULT，SET PATH，SYS(5) - 默认驱动器，SYS(2003) - 当前目录，SYS(2004) - Visual FoxPro 启动目录或文件夹


MDIForm 属性

请参阅

指定表单是否为 MDI 界面（多文档界面）。包含此命令是为了提供向后兼容性。

应用于

表单，_SCREEN

语法

Object.MDIForm[ = lExpr]

设置

lExpr

MDIForm 属性的设置为：

设置	描述
“真”(.T.)	表单表现为多文档界面（MDI）。
“假”(.F.)	（默认值）表单表现为标准 Visual FoxPro 窗口。
说明

设计和运行时可用。


请参阅

MaxButton 属性


MDOWN( ) 函数

请参阅	示例

确定鼠标键是否按下，并返回“真”(.T.) 或“假”(.F.)。

语法

MDOWN( )

返回值类型

逻辑型

说明

执行 MDOWN( )时若有鼠标键按下，则返回“真”(.T.)。执行 MDOWN( )时若没有鼠标键按下，则返回“假”(.F.)。

在 FoxPro for MS-DOS 中，只有在左鼠标键按下时才返回“真”(.T.)。若按下右鼠标键或没有鼠标键按下，返回值为“假”(.F.)。


*下面示例中创建一个循环来显示鼠标键的状态。按下 ESC 键
* 退出循环。

CLEAR

@2,2 SAY 'Press <esc> to exit'

DO WHILE .T.

STORE MDOWN( ) TO glMDown

@4,2 CLEAR TO 4,6

@4,2 SAY glMDown

ENDDO


请参阅

ISMOUSE( )，MCOL( )，MROW( )


MDX( ) 函数

请参阅

根据指定的索引编号返回打开的 .CDX 复合索引文件名。

语法

MDX(nIndexNumber [, nWorkArea | cTableAlias])

参数

nIndexNumber

指定索引编号，由此返回复合索引文件名。若表含有一个结构复合索引文件并且 nIndexNumber 为 1，将返回结构复合索引文件名（它总是与表的名称相同)；若 nIndexNumber 为 2，将返回 USE 或 SET INDEX 命令指定的第一个复合索引文件名；若 nIndexNumber 为 3，将返回第二个复合索引文件名，依次类推。若 nIndexNumber 大于打开的复合索引文件数，则返回空字符串。

如果表没有结构复合索引文件并且 nIndexNumber 为 1，则返回 USE 或 SET INDEX 命令指定的第一个复合索引文件。若 nIndexNumber 为 2，将返回第二个复合索引文件名，依次类推。若 nIndexNumber 大于打开的复合索引文件数，将返回空字符串。

nWorkArea

指定非当前工作区中打开的复合索引文件所在的工作区号。若省略这个可选参数，将返回当前工作区中的复合索引文件名。

cTableAlias

指定不在当前工作区中打开的复合索引文件的表别名。若省略该可选参数，将返回当前工作区中打开的复合索引文件名。

返回值类型

字符型

说明

MPX( ) 等同于 CPX( )。

使用含 INDEX 子句的 USE 命令或 SET INDEX 命令均可为表打开索引文件。结构复合索引文件自动随表打开。MDX( ) 忽略用 USE 或 SET INDEX 指定的任何 .IDX 索引文件。

TAG( ) 函数可以返回复合索引文件中的标识名；用 NDX( ) 返回打开的 .IDX 索引文件名。

在 Visual FoxPro、FoxPro for Windows、FoxPro for MS-DOS 中，当 SET FULLPATH 为 ON 时，MDX( ) 返回含 .CDX 文件名的路径。当 SET FULLPATH 为 OFF 时，MDX( ) 返回 .CDX 文件所在的驱动器指示符及 .CDX 文件名。

在 FoxPro for Macintosh 中，MPX( ) 忽略 FULLPATH 的设置，总是返回 .CDX 文件的路径和文件名。


请参阅

CDX( )，INDEX，NDX( )，SET INDEX，SET FULLPATH，SYS(14) - 索引表达式，TAG( )，USE


MDY( ) 函数

请参阅	示例

以“月-日-年”格式返回指定日期或日期时间表达式，其中月份名不缩写。

语法

MDY(dExpression | tExpression)

参数

dExpression

指定要返回的日期表达式。表达式用“月-日-年”格式表示。

tExpression

指定要返回的日期时间表达式。表达式用“月-日-年”格式表示。

返回值类型

字符型

说明

若 SET CENTURY 为 OFF ，按 month dd,yy 格式返回字符表达式；若 SET CENTURY 为 ON，返回格式为 month dd, yyyy。


*下面示例创建了一个用户自定义函数来返回日期和星期几。
*

SET CENTURY OFF

CLEAR

? Longdate({02/16/95})  && 显示 Thursday, February 16, 95

SET CENTURY ON

? Longdate({02/16/95})  && 显示Thursday, February 16, 1995

*** LongDate ***

FUNCTION longdate

PARAMETERS gdDate

RETURN CDOW(gdDate) + ', ' + MDY(gdDate)


请参阅

DMY( )，SET CENTURY，SET DATE


MEMLINES( ) 函数

请参阅	示例

返回备注字段中的行数。

语法

MEMLINES(MemoFieldName)

参数

MemoFieldName

指定备注字段名。若备注字段所在表不在当前工作区中打开，应在字段名前加上表的别名和一个句点。

返回值类型

数值型

说明

备注字段中的行数由 SET MEMOWIDTH 的当前值决定。


*下面的示例从 employee 表中扫描 3 个记录，并使用
* MEMLINES( ) 确定 notes 备注字段中是否有数据，
* 并确定何时分页。显示记录 last_name 字段中的数据，
* 并显示 notes 字段（如果此备注字段有数据）或者
* 显示消息指示该记录没有 notes。

CLOSE DATABASES

CLEAR

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开 Employee 表

SET MEMOWIDTH TO 65

gnLine = 1

GOTO 2

SCAN NEXT 3

gnMemoSize = MEMLINES(notes)

IF gnMemoSize = 0

STORE .T. TO glNoMemo

STORE 1 TO gnMemoSize

ELSE

STORE .F. TO glNoMemo

ENDIF

IF gnLine + gnMemoSize > 65

EJECT

gnLine = 1

ENDIF

@ gnLine,2 SAY 'Last Name: '+ last_name

gnLine = gnLine +1

@ gnLine ,2 SAY 'Notes: '

?? IIF(glNoMemo, 'No notes ',notes)

gnLine = gnLine + gnMemoSize + 2

IF gnLine > 24

gnLine = 1

CLEAR

ENDIF

ENDSCAN


请参阅

MLINE( )，SET MEMOWIDTH


MEMORY( ) 函数

请参阅

返回可供外部程序运行的内存大小。

语法

MEMORY( )

返回值类型

数值型

说明

在 FoxPro for MS-DOS 中，MEMORY( ) 返回可供 RUN 命令执行外部程序的基本内存（640K 以下）量。函数返回值中并不包含可用的扩充内存，并且返回值在 FoxPro for MS-DOS 工作期间不断变化。

在 Visual FoxPro、FoxPro for Windows 以及 FoxPro for Macintosh 中，MEMORY( ) 总是返回 640K。

MEMORY( ) 类似于 SYS(12)，但有两点区别：

 •	   MEMORY( ) 以千字节为单位返回可用内存数量；SYS(12) 以字节为单位返回内存数量。

 •	   MEMORY( ) 返回数值表达式；SYS(12) 以字符串形式返回它的值。


请参阅

SYS(12) - 可用内存的字节数，SYS(1001) - Visual FoxPro 内存


MemoWindow 属性

请参阅

指定当文本框控制的数据源为备注字段时，所使用的用户自定义窗口名。包含此命令是为了提供向后兼容性。可用编辑框控制 代替。

应用于

文本框

语法

TextBox.MemoWindow[ = cName]

设置

cName

指定要使用的用户自定义窗口名称。

说明

设计和运行时可用。


请参阅

ControlSource 属性


MENU 命令

请参阅

创建菜单系统。包含此命令是为了提供向后兼容性。可使用菜单设计器创建菜单。

语法

MENU BAR ArrayName1, nMenuTitles
  或者
MENU nMenuTitle, ArrayName2, nMenuItems [, nItemsDisplayed]
  或者
READ MENU BAR TO MemVarName1, MemVarName2
[SAVE]

参数

MENU BAR ArrayName1, nMenuTitles

创建菜单栏和菜单标题。

ArrayName1 是一个二维数组，包含选定的菜单标题（数组第一列元素）和显示的相应消息（数组第二列元素）。

nMenuTitles 指定菜单栏中显示的菜单标题总数。

MENU nMenuTitle, ArrayName2, nMenuItems [, nItemsDisplayed]

创建选取一个菜单标题时显示的菜单，可以用一组 MENU 命令来创建菜单栏中的全部菜单。

nMenuTitle 指定菜单所属菜单标题的编号。

ArrayName2 是包含菜单项的一维数组。

若数组元素的第一个字符是反斜线（\），对应的菜单项不能被选取。若含反斜线和连字符（\-），将在菜单项之间放置一分隔项。若要创建菜单项快捷键，可在用作快捷键的字符前放置反斜线和小于号（\<）。按下快捷键，可以立即选取所需的菜单项。在 FoxPro for MS-DOS 中，快捷键是突出显示的字符；在 Visual FoxPro 中，快捷键是含下划线的字符。在 FoxPro for Macintosh 中，KEYCOMP 的设置决定快捷键字符是否含下划线。

nMenuItems 指定菜单中菜单项的数目。

nItemsDisplayed 指定同一时刻菜单中可显示的菜单项数目。若菜单项数目多于同一时刻所能显示的数目，可以滚动菜单项。

READ MENU BAR TO MemVarName1, MemVarName2

激活菜单栏。

MemVarName1 和 MemVarName2 为内存变量或数组元素。它们的初始值指定当菜单栏激活时，选取哪一个菜单标题 (MemVarName1) 和哪一个菜单项 (MemVarName2)。当选取一个菜单项时，对应的菜单标题和菜单项分别存贮在 MemVarName1 和 MemVarName2 中。当按下 ESC 键退出菜单时，MemVarName1 和 MemVarName2 中包含 0。

SAVE

选取菜单项后，保留菜单图象。

说明

菜单系统由横跨应用程序窗口顶边上的菜单栏组成。在菜单栏上有菜单标题，例如文件、编辑等等。单击菜单标题将下拉出一个菜单，从中可以选择菜单项。菜单项可能是命令，例如“保存”，或者是要激活的文件或窗口名。


请参阅

@ ... MENU，ACTIVATE MENU，ACTIVATE POPUP，CREATE MENU，DEFINE BAR，DEFINE MENU，DEFINE POPUP，SET SYSMENU，SYS(2013) - 系统菜单名称字符串


MENU TO 命令

请参阅

激活菜单栏。包含此命令是为了提供向后兼容性。可用 Visual FoxPro 的 菜单设计器 来创建菜单。

语法

MENU TO MemVarName

参数

MemVarName

指定激活菜单时，选中哪个菜单项。此内存变量或数组元素的初始值确定选中的菜单项。当选中菜单标题后，对应于此菜单标题的值存入 MemVarName。若按下 ESC 键退出菜单，MemVarName 中包含 0。

说明

可以用 MENU TO 激活由 @ ... PROMPT 创建的菜单系统。


请参阅

@ ... PROMPT，CREATE MENU，DEFINE MENU


MENU( ) 函数

请参阅	示例

以大写字符串形式返回活动菜单栏的名称。

语法

MENU( )

返回值类型

字符型

说明

没有活动菜单时，MENU( ) 返回空字符串。用菜单设计器可创建并激活菜单。


*下面的示例中，用 MENU( ) 将菜单栏的名称传递给一个过程。
* SET SYSMENU SAVE 命令将当前系统菜单栏保存到内存中，
* 同时用 SET SYSMENU TO 命令将系统菜单标题移去。

*先用 DEFINE PAD 命令创建几个系统菜单标题。当选取菜单标题
* 时，MENU( ) 将 Visual FoxPro 系统菜单栏的名字 MSYSMENU
* 传递给 choice 过程。choice 过程显示选取的菜单标题名
* 和系统菜单栏的名字。若选取退出菜单，将恢复原有 Visual FoxPro
* 系统菜单。

*** 程序名称为 MENUEXAM.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD padSys OF _MSYSMENU PROMPT '\<System' COLOR SCHEME 3 ;

KEY ALT+S, ''

DEFINE PAD padEdit OF _MSYSMENU PROMPT '\<Edit' COLOR SCHEME 3 ;

KEY ALT+E, ''

DEFINE PAD padRecord OF _MSYSMENU PROMPT '\<Record' COLOR SCHEME 3 ;

KEY ALT+R, ''

DEFINE PAD padWindow OF _MSYSMENU PROMPT '\<Window' COLOR SCHEME 3 ;

KEY ALT+W, ''

DEFINE PAD padReport OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 ;

KEY ALT+P, ''

DEFINE PAD padExit OF _MSYSMENU PROMPT 'E\<xit' COLOR SCHEME 3 ;

KEY ALT+X, ''

ON SELECTION MENU _MSYSMENU ;

DO choice IN menuexam WITH PAD( ), MENU( )

PROCEDURE choice

PARAMETER gcPad, gcMenu

WAIT WINDOW 'You chose ' + gcPad + ;

' from menu ' + gcMenu NOWAIT

IF gcPad = 'PADEXIT'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE MENU，CREATE MENU，DEFINE MENU


Message 事件

请参阅

在屏幕底部的状态栏中显示一条信息。包含此命令是为了提供向后兼容性。可用 StatusBarText 属性代替。

应用于

复选框，组合框，命令按钮，命令组，编辑框，列表框，选项按钮，选项组，微调，文本框

语法

PROCEDURE Control.Message
[LPARAMETERS nIndex]

参数

nIndex

唯一标识控制数组中的控制。

说明

若要使这个事件起作用，SET MESSAGE 必须为 ON。

控制得到焦点后，Message 事件发生。使用 RETURN 语句时，可以把状态栏消息作为参数。


请参阅

ErrorMessage 事件，StatusBarText 属性


MESSAGE( ) 函数

请参阅	示例

以字符串形式返回当前错误信息，或者返回导致这个错误的程序行内容。

语法

MESSAGE([1])

参数

1

当在 ON ERROR 过程中使用 MESSAGE( ) 时，包含这个参数可以返回导致这个错误的程序源代码。当不能取得程序源代码时，MESSAGE(1) 返回下列内容之一：

 •	   当此行是宏替换时，返回整个程序行。

 •	   当此行是不含附加子句的命令时，返回该命令。

 •	   当程序行是含附加子句的命令时，返回命令以及三个句点 (...)。

返回值类型

字符型

说明

与 ERROR( ) 不同，MESSAGE( ) 不被 RETURN 或 RETRY 重置。


* 下面的示例显示 MESSAGE( ) 和 MESSAGE(1) 的输出。

ON ERROR DO Errhand

***  下一行产生一个错误***

USE Nodatabase

ON ERROR	  && 恢复系统错误处理程序。

PROCEDURE Errhand

? 'Line of code with error: ' + MESSAGE(1)

? 'Error number: ' + STR(ERROR( ))

? 'Error message: ' + MESSAGE( )


请参阅

ERROR( )，ON ERROR


MESSAGEBOX( ) 函数

请参阅	示例

显示一个用户自定义对话框。

语法

MESSAGEBOX(cMessageText [, nDialogBoxType [, cTitleBarText]])

参数

cMessageText

指定在对话框中显示的文本。在 cMessageText 中包含回车符 (CHR(13)) 可以使信息移到下一行显示。对话框的高度和宽度根据 cMessageText 适当增大，以包含全部信息。

nDialogBoxType

指定对话框中的按钮和图标、显示对话框时的默认按钮以及对话框的行为。

在下面的表中，对话框按钮值从 0 到 5 指定了对话框中显示的按钮。图标值 16、32、64 指定了对话框中的图标。默认值 0、256、512 指定对话框中哪个按钮为默认按钮。当显示对话框时选中此默认按钮。

当省略 nDialagBoxType 时，等同于指定 nDialagBoxType 值为0。

数值	对话框按钮
0	仅有“确定”按钮
1	“确定”和“取消”按钮
2	“放弃”、“重试”和“忽略”按钮
3	“是”、“否”和“取消”按钮
4	“是”、“否”按钮
5	“重试”和“取消”按钮
数值	图标
16	“停止”图标
32	问号
48	惊叹号
64	信息 (i) 图标
数值	默认按钮
0	第一个按钮
256	第二个按钮
512	第三个按钮
nDialogBoxType 可以是三个值的和从上面每个表中选一个值。例如，若 nDialogBoxType 为 290（2+32+256），则指定的对话框含有如下特征：

 •	   “放弃”、“重试”或“忽略”按钮。

 •	   消息框显示问号图标。

 •	   第二个按钮，“重试”为默认按钮。

cTitleBarText

指定对话框标题栏中的文本。若省略 cTitleBarText，标题栏中将显示“Microsoft Visual FoxPro”

返回值类型

数值型

说明

MESSAGEBOX( ) 的返回值标明选取了对话框中的哪个按钮。在含有取消按钮的对话框中，如果按下 ESC 键退出对话框，则与选取“取消”按钮一样，返回值 (2)。

注意本函数的最短缩写为 MESSAGEB( )。

下表列出了 MESSAGEBOX( ) 对应每个按钮的返回值。

返回值	按钮
1	确定
2	取消
3	放弃
4	重试
5	忽略
6	是
7	否


*下面的示例中显示了一个用户自定义对话框。
* 标题“Record not found.Would you like to search again?”
* 显示在用户自定义对话框中，标题栏中显示“My Application”。

*用户自定义对话框含有“是”和“否”按钮以及问号
* 图标。第二个按钮 (No) 为默认按钮。当选取一个按钮
*时，显示所选的内容。

cMessageTitle = 'My Application'

cMessageText = 'Record not found. Would you like to search again?'

nDialogType = 4 + 32 + 256

*  4 = Yes and No buttons

*  32 = Question mark icon

*  256 = Second button is default

nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)

DO CASE

CASE nAnswer = 6

WAIT WINDOW 'You chose Yes'

CASE nAnswer = 7

WAIT WINDOW 'You chose No'

ENDCASE


请参阅

WAIT


MIN( ) 函数

请参阅	示例

计算一组表达式，并返回具有最小值的表达式。

语法

MIN(eExpression1, eExpression2 [, eExpression3 ...])

参数

eExpression1, eExpression2 [, eExpression3 ...]

指定一组表达式，MIN( ) 返回其中具有最小值的表达式。所有表达式应该是同一数据类型。

返回值类型

字符型，数值型，货币型，双精度型，浮点型，日期型，日期时间型。


*下面示例使用 APPEND BLANK 创建一个含 10 个记录的表，
* 记录包含随机值，然后用 MIN( ) 和 MAX( ) 来显示表中
* 的最大值和最小值。

CLOSE DATABASES

CREATE TABLE Random (cValue N(3))

FOR nItem = 1 TO 10  && 追加 10 个记录

APPEND BLANK

REPLACE cValue WITH 1 + 100 * RAND( )  && 插入随机值

ENDFOR

CLEAR

LIST  && 显示值

gnMaximum = 1  &&  初始化最小值

gnMinimum = 100  && 初始化最大值

SCAN

gnMinimum = MIN(gnMinimum, cValue)

gnMaximum = MAX(gnMaximum, cValue)

ENDSCAN

? 'The minimum value is: ', gnMinimum  && 显示最小值

? 'The maximum value is: ', gnMaximum  && 显示最大值


请参阅

CALCULATE，MAX( )


MinButton 属性

请参阅

指定表单是否有最小化按钮。

应用于

表单，_SCREEN

语法

Object.MinButton[ = lExpr]

设置

lExpr

MinButton 属性的设置为：

设置	描述
“真”(.T.)	（默认值）表单具有最小化按钮。
“假”(.F.)	表单不具有最小化按钮。
说明

设计和运行时可用。

最小化按钮能够将表单窗口最小化为图标。

MaxButton、MinButton、BorderStyle 和 ControlBox 的设置值，只有运行时才起作用。

在 Microsoft Windows 3.0 或更高版本中，MDI 子表单窗口总是具有最小化按钮，不管 MinButton 的设置如何。但 MinButton 设置为“假”(.F.) 时并不响应单击，并且对应的最小化命令也不出现在表单的控制框菜单中。

运行时将表单最小化为图标，将产生 Resize 事件。

附注

WindowState 属性反应了窗口的当前状态。把 WindowState 属性设为 1（最小化）时，不管 MinButton 和 BorderStyle 属性的有效设置如何，表单将最小化。


请参阅

BorderStyle 属性，ControlBox 属性，MaxButton 属性，WindowState 属性


MinHeight 属性

请参阅

指定表单可被调整到的最小高度。

应用于

表单，_SCREEN

语法

Object.MinHeight[ = nHeight]

设置

nHeight

指定表单可被调整到的最小高度，度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

当用户从控制菜单中选取“大小”命令或者拖动表单的边框调整表单大小时，表单的高度不会小于 MinHeight 属性中的设置值。

MinHeight 属性的默认设置为 -1；即没有指定最小高度。


请参阅

MaxHeight 属性，MaxWidth 属性，MinWidth 属性，ScaleMode 属性


MINUTE( ) 函数

请参阅	示例

返回日期时间型表达式中的分钟部分。

语法

MINUTE(tExpression)

返回值类型

数值型


* 下面的示例显示了当前时间的分钟部分和指定时间的
* 分钟部分。

CLEAR

? MINUTE(DATETIME( ))

? MINUTE({10:42am})  && 显示 42


请参阅

CTOT( )，DATE( )，DATETIME( )，DTOT( )，HOUR( )，SEC( )，SECONDS( )，SET SECONDS，TIME( )


MinWidth 属性

请参阅

指定表单可调整到的最小宽度。

应用于

表单，_SCREEN

语法

Object.MinWidth[ = nWidth]

设置

nWidth

指定表单可调整到的最小宽度，度量单位由表单的 ScaleMode 属性指定。

说明

设计和运行时可用。

当用户选择表单控制菜单中“大小”命令或者拖动表单的边框调整表单时，表单的宽度不会小于 MinWidth 中的设置值。

Minwidth 属性的默认设置为 -1；即没有指定最小宽度。


请参阅

MaxHeight 属性，MaxWidth 属性，MinHeight 属性，ScaleMode 属性


MLINE( ) 函数

请参阅	示例

以字符串形式返回备注字段中的指定行。

语法

MLINE(MemoFieldName, nLineNumber [, nNumberOfCharacters])

参数

MemoFieldName

指定备注字段名，MLINE( ) 从该字段中返回一行。若备注字段是在非当前工作区打开的表中，应在备注字段名前加上表别名和一个句点。

nLineNumber

指定从备注字段中返回行的行号，当 nLineNumber 为负数或者大于备注字段的行数时，则返回空字符串。

nNumberOfCharacters

指定从备注字段开始的字符数，从这些字符之后 MLINE( ) 返回指定行的内容。

_MLINE 系统内存变量通常可用作 nNumberOfCharacters。每次调用 MLINE( ) 后，MLINE 将自动调整。

在从较大备注字段中返回行的递归过程中，把 MLINE 作为 nNumberOfCharacters 将会取得较好效果。

返回值类型

字符型

说明

MLINE( ) 将裁剪掉 nLineNumber 指定行的后续空格。

备注字段的行长度和行数由 SET MEMOWIDTH 的当前值决定（一行的默认长度为 50 个字符）。遇到回车符时，不再返回更多字符。_WRAP 的当前设置决定备注字段行的显示方式。

在备注字段中查找字符串时，可以使用 ATLINE( ) 或 ATCLINE( ) 返回找到的字符串所在行的行号，然后在 MLINE( ) 中使用这个行号返回备注字段中此行的内容。


*下面的示例中，使用两种方法从备注字段中返回行内容。使用
* MLINE( ) 在两个循环中返回备注字段的行。注意在第二个
* 循环中使用系统内存变量 MLINE 作为 MLINE( ) 的参数，
* 从而增强了性能。

CLEAR

SET TALK OFF

SET MEMOWIDTH TO 50

CLOSE DATABASES

CREATE TABLE tmemo (name c(10), notes m)

APPEND BLANK	&& 添加一个记录

WAIT WINDOW 'Filling memo field - takes several seconds' NOWAIT

***填充备注字段 ***

FOR gnOuterLoop = 1 TO 5	&& 循环 5 次

FOR gnAlphabet = 65 TO 75	&& 从字符 A 到 H

REPLACE notes WITH REPLICATE(CHR(gnAlphabet), 10) ;

+ CHR(13) ADDITIVE

NEXT

NEXT

***  显示备注字段的所有行***

STORE MEMLINES(notes) TO gnNumLines	&& 备注字段的行数

STORE SECONDS( ) TO gnBegin	&& 开始时间

FOR gnCount = 1 TO gnNumLines	&& 执行备注字段行数次循环

? MLINE(notes, gnCount)	&& 显示每一行

NEXT

? STR(SECONDS( ) - gnBegin, 4, 2) + ' seconds'	&& 总时间

*** 更好的方法是在 MLINE( ) 中使用 MLINE***

*** 显示备注字段的所有行***

WAIT 'Press a key to see the preferred method' WINDOW

CLEAR

STORE 0 TO _MLINE 	&& 置 MLINE为 0

STORE SECONDS( ) TO gnBegin	&& 开始时间

FOR count = 1 TO gnNumLines	&& 执行备注字段行数次循环

? MLINE(notes, 1, _MLINE)	&& 显示每一行

NEXT

? STR(SECONDS( ) - gnBegin, 4, 2) + ' seconds'	&& 总时间

SET TALK ON

CLOSE DATABASES

ERASE tmemo.dbf

ERASE tmemo.fpt


请参阅

ATCLINE( )，ATLINE( )，COPY MEMO，MEMLINES( )，_MLINE，MODIFY MEMO，SET MEMOWIDTH，_WRAP


_MLINE 系统内存变量

请参阅

包含 MLINE( ) 函数中使用的备注字段偏移量。

语法

_MLINE = nNumberOfCharacters

参数

nNumberOfCharacters

指定备注字段偏移量。有关使用 MLINE 的详细内容和使用的示例，请参阅 MLINE( )。

说明

MLINE( ) 从备注字段中返回一行文本。MLINE( ) 将备注字段中行的偏移量保存在 MLINE 系统内存变量中。把 MLINE 作为 MLINE( ) 函数的第二个数值参数，可以提高 MLINE( ) 的性能。

MLINE 的初始默认值为 0。确保在再次使用 MLINE( ) 函数前，将 MLINE 的值重置为 0。


请参阅

MEMLINES( )，MLINE( )，SET MEMOWIDTH


MOD( ) 函数

请参阅	示例

用一个数值表达式去除另一个数值表达式，返回余数。

语法

MOD(nDividend, nDivisor)

参数

nDividend

指定被除数。nDividend 中的小数位数决定了返回值中的小数位。

nDivisor

指定除数。若 nDivisor 为正数，返回值为正；若 nDivisor 为负数，返回值为负。

返回值类型

数值型

说明

取余函数 MOD( ) 和算子 % 返回同样结果。


CLEAR

? MOD(36,10)  && 显示6

? MOD((4*9), (90/9))  && 显示6

? MOD(25.250,5.0)  && 显示0.250

? IIF(MOD(YEAR(DATE( )), 4) = 0, 'Summer Olympics this year';

, 'No Summer Olympics this year')


请参阅

% 操作符


MODIFY CLASS 命令

请参阅

打开类设计器，让用户修改已有的类定义或创建新的类定义。

语法

MODIFY CLASS ClassName [OF ClassLibraryName1]
[AS cBaseClassName [FROM ClassLibraryName2]]
[NOWAIT] [SAVE]

参数

ClassName

指定要修改或创建的类定义名称。

OF ClassLibraryName1

指定含有这个类定义的 .VCX 可视类库名称。若创建新类，并且 .VCX 可视类库已经存在，那么把类定义添加到库中。

.VCX 是可视类库的默认扩展名。当指定的可视类库扩展名不是 .VCX 时，应指定扩展名。

如果指定的 .VCX 可视类库位于当前 SET CLASSLIB 命令设置的搜索列表中，那么将把这个类库从搜索列表中移走。

AS cBaseClassName

指定类定义的基类。cBaseClassName 可以是 Visual FoxPro 基类中除列、临时表、数据环境、文件头和关系之外的任何类。也可以把用户自定义类作为 cBaseClassName，此时应用 FROM ClassLibraryName2 子句指定含有该用户自定义类的 .VCX 可视类库名。

若省略 AS cBaseClassName 参数，则类定义基于 Visual FoxPro 表单集基类。

FROM ClassLibraryName2

指定 .VCX 可视类库名，该库中包含 cBaseClassName 指定的用户自定义类。

NOWAIT

在打开类设计器后程序继续执行。程序不必等待类设计器关闭，而是继续执行 MODIDFY CLASS NOWALT 行后面的语句。若在程序中使用 MODIFY CLASS 命令时省略 NOWAIT 子句，那么打开类设计器后，程序暂停执行，直到关闭类设计器。

NOWAIT 仅在程序中才有效。当在命令窗口中发出 MODIFY CLASS NOWAIT 时，无效。

SAVE

激活另一窗口后，仍保持类设计器打开。如果省略 SAVE，则当另一窗口激活时，类设计器随之关闭。从命令窗口中发出命令时包含 SAVE 子句，将无此作用。

说明

可利用 MODIFY CLASS 来修改已有的类定义或创建新的类定义，并存入一个 .VCX 可视类库中。可以用 SET CLASSLIB 打开 .VCX 可视类库，并访问 .VCX 可视类库中的类定义。


请参阅

ADD CLASS，CREATE CLASS，CREATE CLASSLIB，RELEASE CLASSLIB，SET CLASSLIB


MODIFY COMMAND 命令

请参阅

打开一个编辑窗口，从中可以修改或创建程序文件。

语法

MODIFY COMMAND [FileName | ?]
[NOEDIT]
[NOMENU]
[NOWAIT]
[RANGE nStartCharacter, nEndCharacter]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[AS nCodePage]
[SAME]
[SAVE]

参数

FileName

指定打开或创建的程序文件名。若不指定新建程序文件的扩展名，Visual FoxPro 自动指定 .PRG 为扩展名。MODIFY COMMAND 支持含有星号（*）和问号（？）通配符的文件梗概。名称与这个文件梗概匹配的每一个文件都在编辑窗口中打开。

若省略文件名，将给打开的编辑窗口赋以一个初始名称“程序 1.PRG”。当关闭编辑窗口时，可以用另外的文件名保存该文件。

?

显示“打开”对话框。可以从中选择一个已有程序或键入要创建的新程序名。

NOEDIT

指定不能对程序文件作更改，但是可以查看，或者复制到剪贴板中。

NOMENU

可用于 Visual FoxPro、FoxPro for Windows 以及 FoxPro for Macintosh 中。

在 Visual FoxPro 中，从系统菜单栏中移去“格式”菜单标题，可以防止用户更改字体、字体大小、行间距和行缩进。

在 FoxPro for Windows 和 FoxPro for Macintosh 中，从系统菜单栏中移去“文本”菜单标题，可以防止改变字体、字体大小、行间距、行缩进，并废止拼写检查器。

FoxPro for MS-DOS 忽略 NOMENU 。

NOWAIT

在打开编辑窗口后继续程序的执行。程序不必等待编辑窗口关闭，而是继续执行命令 MODIFY COMMAND NOWAIT 所在行的后继语句行。若在程序中使用 MODIFY COMMAND 时省略 NOWAIT 子句，打开编辑窗口后，程序暂停执行，直到关闭编辑窗口。

NOWAIT 仅在程序中有效。在命令窗口中使用时，NOWAIT 不起作用。

当用一条 MODIFTY COMMAND 命令打开多个窗口时，隐含使用 NOWAIT，例如：

MODIFY COMMAND *.PRG.

RANGE nStartCharacter, nEndCharacter

指定打开编辑窗口时，选择的字符范围。从 nStartCharacter 位置开始一直到（但不包括） nEndCharacter；若 nStartCharacter 等于 nEndCharacter，则不选择字符，光标停在 nStartCharacter 指定的位置处。

WINDOW WindowName1

指定一窗口名，编辑窗口继承其特性。例如，如果创建该窗口时 DEFINE WINDOWS 含有 FLOAT 选项，则编辑窗口可移动。该窗口不必为活动或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

指定编辑窗口打开时所在的父窗口名。编辑窗口不继承父窗口的特性并且不能移出父窗口之外。父窗口移动时，编辑窗口随之移动。

要访问编辑窗口，必须先用 DEFINE WINDOW 定义父窗口，并且必须是可见的。

IN SCREEN

把编辑窗口放入父窗口后，在 Visual FoxPro 主窗口中打开它。通过包含 IN WINDOW 子句，可以将编辑窗口放在父窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将编辑窗口放在 Macintosh 桌面上。编辑窗口与 FoxPro 主窗口属于同一级。编辑窗口可以移出 FoxPro 主窗口之外并且可被 FoxPro 主窗口隐藏。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 当前设置。在不包含 SCREEN 或 MACDESKTOP 时，由 SET MACDESKTOP 决定将编辑窗口放在 FoxPro 主窗口还是 Macintosh 桌面上。有关编辑窗口放在 FoxPro 主窗口还是 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

AS nCodePage

自动转换在其他 Visual FoxPro 平台上所建程序文件中的重音字符。数值表达式 nCodePage 指定 Visual FoxPro 平台的代码页，在此代码页上创建程序文件。除非从“文件”菜单中选择“另存为”命令将文件以其他代码页保存，否则文件以此代码页保存。

SAME

防止编辑窗口成为活动窗口。若编辑窗口为隐藏状态，它将被显示但不会成为活动窗口。

SAVE

在激活其他窗口后，保持编辑窗口打开。若省略 SAVE，则其他窗口激活后将关闭编辑窗口。在命令窗口中发出命令时包含 SAVE，则无此作用。

说明

修改程序文件之后，更新过的文件将写到磁盘上。在 Visual FoxPro 中，选取“工具”菜单上的选项后，出现“选项”对话框，若在其中的“编辑”选项卡中选取“制作备份”复选框，则创建具有 .BAK 扩展名的备份文件。在先前版本的 FoxPro 中，是通过在“编辑”菜单中选取“参数选择”项，并在出现的“参数选择”对话框中选取“备份”复选框，创建一个带 .BAK 扩展名的备份文件。

除非在配置文件中用 TEDIT 指定一个外部编辑器，否则使用 Visual FoxPro 的内置编辑器。


请参阅

*，&&，DO，MODIFY FILE，NOTE


MODIFY CONNECTION 命令

请参阅	示例

显示连接设计器，让您能够交互地修改当前数据库中已有的命名连接。

语法

MODIFY CONNECTION [ConnectionName | ?]

参数

ConnectionName

指定要修改的连接名。

?

显示“打开”对话框，从中可以选取已有的命名连接进行修改。

说明

在修改连接之前，必须以独占方式打开含有命名连接的数据库。在 OPEN DATABASE 命令中包含 EXCLUSIVE 子句，能够以独占方式打开数据库。

若省略可选参数，将显示“打开”对话框，从中可以指定已有的命名连接进行修改。在选定要修改的命名连接后将打开连接设计器。


* 下面的示例假定 ODBC 数据源 MyFoxSQLNT 可用，数据源
* 的用户标识为“sa”。先打开 testdata 数据库，创建名为
* Myconn 的连接，然后用 MODIFY CONNECTION 来显示连接设
* 计器并修改连接。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE CONNECTION Myconn DATASOURCE "MyFoxSQLNT" USERID "sa"

MODIFY CONNECTION Myconn && 显示数据库的命名连接。


请参阅

CREATE CONNECTION，DELETE CONNECTION，OPEN DATABASE，RENAME CONNECTION


MODIFY DATABASE 命令

请参阅	示例

打开数据库设计器，让您能够交互地修改当前数据库。

语法

MODIFY DATABASE [DatabaseName | ?]
[NOWAIT] [NOEDIT]

参数

DatabaseName

指定要修改的数据库名。

?

显示“打开”对话框，可从中选取数据库进行修改。

NOWAIT

在打开数据库设计器后继续程序的执行。程序不必等待数据库设计器关闭，而是继续执行 MODIFY DATABASE NOWAIT 之后的程序行。若在程序中使用 MODIFY DATABASE 时省略 NOWAIT，则打开数据库设计器后，程序暂停执行，直到关闭数据库设计器。

NOWAIT 仅在程序中有效。在命令窗口中使用时，NOWAIT 无效。

NOEDIT

禁止修改数据库。

说明

在修改数据库前，必须以独占方式打开数据库。若要以独占方式打开数据库，可以在 OPEN DATABASE 命令中包含 EXCLUSIVE，或者在“选项”对话框的“数据”选项卡中选定“以独占方式打开”。

有关使用数据库设计器交互地修改数据库的详细内容，请参阅数据库设计器和数据库设计器工具栏主题和《用户指南》中第五章“将表加入数据库”。


* 下面示例在数据库设计器中显示 testdata 数据库中的表。
*

CLOSE DATABASES

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置数据库的路径。

MODIFY DATABASE testdata  && 打开 testdata 数据库


请参阅

ADD TABLE，CLOSE DATABASES，CREATE DATABASE，DBC( )，DBGETPROP( )，DBSETPROP( )，DELETE DATABASE，DISPLAY TABLES，OPEN DATABASE，REMOVE TABLE


MODIFY FILE 命令

请参阅

打开编辑窗口，从中可以修改或创建文本文件。

语法

MODIFY FILE [FileName | ?]
[NOEDIT]
[NOMENU]
[NOWAIT]
[RANGE nStartCharacter, nEndCharacter]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[AS nCodePage]
[SAME]
[SAVE]

参数

FileName

指定文本文件的文件名。若未给新文本文件指定扩展名，Visual FoxPro 自动指定扩展名为 .TXT 。MODIFY FILE 支持包含星号（*）和问号（？）通配符的文件梗概。每个匹配的文本文件都将出现在打开的编辑窗口中。

若省略文件名，打开的编辑窗口将赋给初始文件名“文件 1”。当关闭编辑窗口时，可以用另外一个文件名保存该文件。

?

显示“打开”对话框，从中可以选取一个文本文件。

NOEDIT

指定该文本文件不能更改，但可以查看，或者复制到剪贴板上。

NOMENU

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

在 Visual FoxPro 中，将“格式”菜单标题从系统菜单栏中移去，可防止更改字体、字体大小、行间距和缩进。

在 FoxPro for Windows 和 FoxPro for Macintosh 中，从系统菜单栏中移去“文本”菜单标题，可以防止更改字体、字体大小、行间距和缩进并且关闭拼写检查器。

FoxPro for MS-DOS 忽略 NOMENU。

NOWAIT

在编辑窗口打开后继续程序执行。程序不必等待关闭编辑窗口，而是继续执行 MODIFY FILE NOWAIT 之后的程序行。如果在程序中发出 MODIFY FILE 命令时省略 NOWAIT，编辑窗口打开后，暂停执行程序直至编辑窗口关闭为止。

NOWAIT 仅在程序中有效。在命令窗口中发出时，NOWAIT 无效。

如果用单个 MODIFY FILE 命令打开多个编辑窗口，将隐含地发生 NOWAIT。例如：

MODIFY FILE *.TXT

RANGE nStartCharacter, nEndCharacter

指定打开编辑窗口时选定的字符范围。字符范围从 nStartCharacter 指定位置到（但不包括） nEndCharacter 指定位置。如果 nStartCharacter 等于 nEndCharacter ，则没有选定值，光标定位于 nStartCharacter 指定的位置。

WINDOW WindowName1

指定一个窗口，编辑窗口继承它的特性。例如，如果窗口是由 DEFINE WINDOW 的 FLOAT 子句创建的，那么编辑窗口能够移动。窗口不必是活动的或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

指定一个父窗口，编辑窗口从中打开。编辑窗口不继承父窗口的特性并且不能移出父窗口之外。如果父窗口移动，编辑窗口随之移动。

要访问编辑窗口，必须先用 DEFINE WINDOW 命令定义父窗口，使其可见。

IN SCREEN

把编辑窗口放入父窗口后，在 Visual FoxPro 主窗口中打开它。包含 IN WINDOW 子句可以把编辑窗口放入父窗口。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将编辑窗口放置在 Macintosh 桌面上。编辑窗口与 FoxPro 主窗口属于同一级。编辑窗口可以移出 FoxPro 主窗口并且可以被 FoxPro 主窗口隐藏。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的设置值。当不包含 SCREEN 或 MACDESKTOP 时，SET MACDESKTOP 决定编辑窗口放在 Visual FoxPro 主窗口还是 Macintosh 桌面上。有关编辑窗口是放在 Visual FoxPro 主窗口还是 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

AS nCodePage

自动转换其他 Visual FoxPro 平台上创建的文本文件中的重音字符。数值表达式 nCodePage 指定了文本文件创建时所在的 Visual FoxPro 平台的代码页。文件以该代码页保存，除非选择“文件”菜单中的“另存为”选项将文件以其他代码页保存。

SAME

防止编辑窗口成为活动窗口。如果编辑窗口被隐藏，它仍显示但不成为活动窗口。

SAVE

激活另外一个窗口后保持编辑窗口打开。若省略 SAVE，激活另外一个窗口后，编辑窗口将关闭。从命令窗口发出命令时包含 SAVE 将不起作用。

说明

对文本文件进行修改后，更新的文件将写到磁盘上。在 Visual FoxPro 中，当在“工具”菜单中选择“选项”时，可以在“选项”对话框的“编辑”选项卡中选定“制作备份副本”复选框，从而创建一个带有 .BAK 扩展名的备份文件。在 FoxPro 早期版本中，当在“编辑”菜单中选择“参数选择”时，可以在“参数选择”对话框中选定“备份”复选框，从而创建一个带有 .BAK 扩展名的备份文件。

除非在配置文件中用 TEDIT 指定一个外部编辑器，否则使用 Visual FoxPro 内置编辑器。


请参阅

*，&&，DO，MODIFY COMMAND，NOTE


MODIFY FORM 命令

请参阅	示例

打开表单设计器，从中可以修改或创建一个表单。

语法

MODIFY FORM
[FormName | ?]
[NOENVIRONMENT] [NOWAIT] [SAVE]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN]]

参数

FormName

指定表单的文件名。若未给文件名指定扩展名，Visual FoxPro 自动指定扩展名为 .SCX 。

?

显示“打开”对话框，从中可以选取已有的表单或者输入新建表单的名称。

NOENVIRONMENT

包含此子句是为了提供与 2.x 屏幕的向后兼容性。用以防止恢复与屏幕一起保存的环境。

在 Visual FoxPro 中，通过把 AutoOpenTables 属性设置为“真”(.T.)，可以恢复与 Visual FoxPro 表单相联系的数据环境。要确保释放表单后关闭表单环境，可以把数据环境 AutoCloseTables 属性设置为“真”(.T.)。此属性的默认设置值为“真”(.T.)。

创建或修改表单时，可以将当前 Visual FoxPro 数据环境与表单定义文件一起保存。保存数据环境将在“表单定义”表中放置附加记录，这些记录指出所有打开的表和索引文件、索引顺序以及任何表间的关系。

NOWAIT

在表单设计器打开后继续程序执行。程序不必等待关闭表单设计器，而是继续执行 MODIFY FORM NOWAIT 之后的程序行。如果在程序中发出 MODIFY FORM 命令时省略 NOWAIT，表单设计器打开后，暂停程序执行，直至表单设计器关闭为止。

NOWAIT 仅在程序中有效。在命令窗口中发出时，NOWAIT 无效。

SAVE

在程序中发出。指出激活另外一个窗口后保持表单设计器打开。从命令窗口发出时，SAVE 将不起作用。

WINDOW WindowName1

指定一个窗口，表单设计器采用它的特性。例如，如果窗口是由 DEFINE WINDOW 的 FLOAT 子句创建的，那么表单设计器能够移动。窗口不必是活动的或可见的，但必须是已定义的。

表单设计器的默认大小可能比它的特性窗口大。这种情况下，表单设计器仍然采用该窗口的特性。表单设计器的左上角放置在特性窗口左上角坐标处，但其尺寸超出窗口的边界。

IN [WINDOW] WindowName2

指定一个父窗口，表单设计器从中打开。表单设计器不继承父窗口的特性并且不能移出父窗口之外。如果父窗口移动，表单设计器随之移动。

要访问表单设计器，必须先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把表单设计器放入父窗口后，在 Visual FoxPro 主窗口中打开它。包含 IN WINDOW 子句可以把表单设计器放在父窗口中。

说明

发出不带有任何参数的 MODIFY FORM 命令，将显示“打开”对话框。关闭表单设计器时可以用其他名称保存表单。


* 下面示例打开了表单设计器中的计时器（SWATCH.SCX）
* 控制示例。

MODIFY FORM (HOME( ) + 'samples\controls\timer\swatch.scx')


请参阅

COMPILE FORM，CREATE FORM，DO FORM


MODIFY GENERAL 命令

请参阅

在编辑窗口中打开当前记录中的通用字段。

语法

MODIFY GENERAL GeneralField1 [, GeneralField2 ...]
[NOMODIFY]
[NOWAIT]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]

参数

GeneralField1 [, GeneralField2 ...]

指定打开的通用字段名称。若要打开非当前工作区中表的通用字段的编辑窗口，可以在字段名称中包含表别名。通过包含逗号分隔的通用字段列表，可以打开当前记录中的多个通用字段。

NOMODIFY

指定不能更改通用字段中包含的 OLE 对象，但可以查看，或者复制到剪贴板上。

NOWAIT

在通用字段编辑窗口打开后继续程序执行。程序不必等待关闭编辑窗口，而是继续执行 MODIFY GENERAL NOWAIT 之后的程序行。如果在程序中发出 MODIFY GENERAL 时省略 NOWAIT，编辑窗口打开后，暂停执行程序直至编辑窗口关闭为止。

NOWAIT 仅在程序中有效。在命令窗口中发出时，NOWAIT 无效。

WINDOW WindowName1

指定一个窗口，通用字段编辑窗口采用它的特性。例如，如果窗口是由 DEFINE WINDOW 的 FLOAT 子句创建的，那么通用字段编辑窗口能够移动。窗口不必是活动的或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

指定一个父窗口，通用字段编辑窗口从中打开。通用字段编辑窗口不继承父窗口的特性并且不能移出父窗口之外。如果父窗口移动，通用字段编辑窗口随之移动。

要访问通用字段编辑窗口，必须先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把通用字段编辑窗口放入父窗口后，在 Visual FoxPro 主窗口中打开它。包含 IN WINDOW 子句可以把通用字段编辑窗口放入父窗口。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将通用字段编辑窗口放置在 Macintosh 桌面上。通用字段编辑窗口与 FoxPro 主窗口属于同一级。通用字段编辑窗口可以移出 FoxPro 主窗口并且可以被 FoxPro 主窗口隐藏。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的设置值。当不包含 SCREEN 或 MACDESKTOP 时，SET MACDESKTOP 将决定编辑窗口是放在 Visual FoxPro 主窗口还是 Macintosh 桌面上。有关通用字段编辑窗口放在 Visual FoxPro 主窗口还是 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

当打开编辑窗口后，不能插入、修改或者删除一个 OLE 对象。

有关 Visual FoxPro 中 OLE 对象的详细内容，请参阅向表中添加 OLE 对象主题以及《开发指南》第十八章“添加 OLE”。


请参阅

@ ... SAY - 图片 & OLE 对象，APPEND GENERAL


MODIFY LABEL 命令

请参阅

打开标签设计器，从中可以修改或创建一个标签。

语法

MODIFY LABEL [FileName | ?]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[NOENVIRONMENT]
[NOWAIT]
[SAVE]

参数

FileName

指定标签的文件名。若未给文件指定扩展名，Visual FoxPro 自动指定扩展名为 .LBX 。如果指定的文件不存在或者未找到，则创建一个新标签文件。

?

显示打开对话框，从中可以选取已有的标签或者输入新建标签的名称。

WINDOW WindowName1

指定一个窗口，标签设计器采用它的特性。例如，如果窗口是由 DEFINE WINDOW 的 FLOAT 子句创建的，那么标签设计器能够移动。窗口不必是活动的或可见的，但必须是已定义的。

标签设计器的默认尺寸可能比它的特性窗口大。这种情况下，标签设计器仍然采用该窗口的特性。标签设计器的左上角放置在属性窗口左上角坐标处，但其尺寸超出窗口的边界。

IN [WINDOW] WindowName2

指定一个父窗口，标签设计器从中打开。标签设计器不继承父窗口的特性并且不能移出父窗口之外。如果父窗口移动，标签设计器随之移动。

要访问标签设计器，必须先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把标签设计器放入父窗口后，在 Visual FoxPro 主窗口中打开它。包含 IN WINDOW 子句可以把标签设计器放在父窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将标签设计器放置在 Macintosh 桌面上。标签设计器与 FoxPro 主窗口属于同一级。标签设计器可以移出 FoxPro 主窗口，也可以被 FoxPro 主窗口隐藏。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的设置值。当不包含 SCREEN 或 MACDESKTOP 时，SET MACDESKTOP 决定标签设计器放在 Visual FoxPro 主窗口还是 Macintosh 桌面上。有关标签设计器放在 Visual FoxPro 主窗口还是 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

NOENVIRONMENT

包含此子句是为了提供与 2.x 屏幕的向后兼容性。用以防止恢复与屏幕一起保存的环境。

在 Visual FoxPro 中，通过把 AutoOpenTables 属性设置为“真”(.T.)，可以恢复与 Visual FoxPro 标签相联系的数据环境。要确保打印标签结束后关闭标签环境，可以把数据环境 AutoCloseTables 属性设置为“真”(.T.)，此属性的默认设置值为“真”(.T.)。

创建或修改标签时，可以将当前 Visual FoxPro 数据环境与标签定义文件一起保存。保存 Visual FoxPro 数据环境将在标签定义表中放置附加记录，这些记录指出所有打开的表和索引文件、索引顺序以及任何表间的关系。

NOWAIT

在标签设计器打开后继续程序执行。程序不必等待关闭标签设计器，而是执行 CREATE LABEL NOWAIT 之后的程序行。如果在程序中发出 CREATE LABEL 时省略 NOWAIT，标签设计器打开后，将暂停执行程序，直至标签设计器关闭为止。

在命令窗口中发出时，NOWAIT 子句将不起作用。

SAVE

激活另外一个窗口后保持标签设计器打开。若省略 SAVE，激活另外一个窗口后，标签设计器将关闭。从命令窗口发出时，SAVE 将不起作用。


请参阅

CREATE LABEL，LABEL


MODIFY MEMO 命令

请参阅	示例

打开当前记录备注字段的编辑窗口。

语法

MODIFY MEMO MemoField1 [, MemoField2 ...]
[NOEDIT]
[NOMENU]
[NOWAIT]
[RANGE nStartCharacter, nEndCharacter]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[SAME]
[SAVE]

参数

MemoField1 [, MemoField2 ...]

指定要编辑的备注字段名。若要打开非当前工作区中表备注字段的编辑窗口，可在字段名称中包含表别名。

NOEDIT

指定打开的备注字段不能被更改，但是可以查看，或者复制到剪贴板上。

NOMENU

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

在 Visual FoxPro 中，从系统菜单栏中移去“格式”菜单标题，可以防止更改字体、字体大小、行间距和缩进。

在 FoxPro for Windows 和 FoxPro for Macintosh 中，从系统菜单栏中移去“文本”菜单标题，可以防止改变字体、字体大小、行间距和行缩进，并关闭拼写检查器。

FoxPro for MS-DOS 忽略 NOMENU。

NOWAIT

在编辑窗口打开后继续程序执行。程序不必等待关闭编辑窗口，而是继续执行 MODIFY MEMO NOWAIT 之后的程序行。如果在程序中发出 MODIFY MEMO 时省略 NOWAIT，编辑窗口打开后，将暂停执行程序直至编辑窗口关闭为止。

NOWAIT 仅在程序中有效。在命令窗口中发出时，NOWAIT 无效。

RANGE nStartCharacter, nEndCharacter

指定打开编辑窗口时，选定的字符范围。字符范围从 nStartCharacter 指定位置到（但不包括） nEndCharacter 指定位置；若 nStartCharacter 等于 nEndCharacter，则不选择字符，光标定位于 nStartCharacter 指定的位置处。

WINDOW WindowName1

指定一个窗口，编辑窗口采用它的特性。例如，如果窗口是由 DEFINE WINDOW 的 FLOAT 子句创建的，那么编辑窗口能够移动。窗口不必是活动的或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

指定一个父窗口，编辑窗口从中打开。编辑窗口不继承父窗口的特性并且不能移出父窗口之外。如果父窗口移动了，编辑窗口随之移动。

要访问编辑窗口，必须先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把编辑窗口放入父窗口后，在 Visual FoxPro 主窗口中打开它。包含 IN WINDOW 子句可以把编辑窗口放在父窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将编辑窗口放置在 Macintosh 桌面上。编辑窗口与 FoxPro 主窗口属于同一级。编辑窗口可以移出 FoxPro 主窗口，也可以被 FoxPro 主窗口隐藏。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的设置值。当不包含 SCREEN 或 MACDESKTOP 时，SET MACDESKTOP 决定编辑窗口放在 Visual FoxPro 主窗口还是 Macintosh 桌面上。有关编辑窗口放在 Visual FoxPro 主窗口还是 Macintosh 桌面上的详细内容，请参阅 SET MACDESKTOP。

SAME

防止编辑窗口成为活动窗口。如果编辑窗口被隐藏，它仍显示但不成为活动窗口。

SAVE

激活另外一个窗口后保持编辑窗口打开。若省略 SAVE，激活另外一个窗口后，编辑窗口将关闭。从命令窗口发出命令时包含 SAVE 将不起作用。

说明

在编辑窗口中，可以查看，或者更改备注字段的内容。

对于在网络上以共享方式打开的表，一旦开始编辑某一记录的备注字段即锁定该记录。


* 下面的示例在编辑窗口中打开了 employee 表中第一条记录的
* notes 备注字段，并且突出显示选定范围的字符。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开 Employee 表

MODIFY MEMO notes NOEDIT RANGE 1,10  && 选定前 10 个字符

USE


请参阅

CLOSE MEMO


MODIFY MENU 命令

请参阅

打开菜单设计器，从中可以修改或创建菜单系统。

语法

MODIFY MENU [FileName | ?]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[NOWAIT]
[SAVE]

参数

FileName

指定菜单的文件名。如果没有指定文件的扩展名，Visual FoxPro 自动指定扩展名为 .MNX。

?

显示“打开”对话框，从中可以选择一个已存在的菜单文件，或者输入要创建的新菜单名。

WINDOW WindowName1

指定一个窗口，菜单设计器采用它的特性。例如，如果该窗口是由 DEFINE WINDOW 命令的 FLOAT 选项创建的，则菜单设计器可以移动。此窗口不必是活动的或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

指定一个父窗口，菜单设计器从中打开。菜单设计器不具有父窗口的特性也不能移出父窗口。如果父窗口移动，菜单设计器随之移动。

要访问菜单设计器，必须首先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把菜单设计器放入父窗口后，在 Visual FoxPro 主窗口中打开它。包含 IN WINDOW 子句，可以把菜单设计器放入一个父窗口。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将菜单设计器放在 Macintosh 的桌面上。菜单设计器与 FoxPro 主窗口属于同一级。菜单设计器可以移出 FoxPro 主窗口，也可以被 FoxPro 主窗口隐藏起来。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的当前设置。当不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 设置决定菜单设计器放在 FoxPro 主窗口还是 Macintosh 桌面上。有关在 FoxPro 主窗口或在 Macintosh 桌面上放置菜单设计器的详细内容，请参阅 SET MACDESKTOP。

NOWAIT

打开菜单设计器之后继续执行程序。程序不必等待关闭菜单设计器，而是继续执行 MODIFY MENU NOWAIT 命令后面的程序行。如果在程序中发出 MODIFY MENU 命令时不含有 NOWAIT 子句，打开菜单设计器后，程序暂停执行，直到关闭菜单设计器为止。

NOWAIT 子句只在程序中起作用。从命令窗口发出时，NOWAIT 子句不起作用。

SAVE

在激活另一个窗口之后，菜单设计器仍保持打开。如果省略 SAVE，在激活另一个窗口之后，将关闭菜单设计器。从命令窗口发出 MODIFY MENU 命令时，SAVE 子句不起作用。

说明

有关创建菜单的详细内容，请参阅创建菜单系统主题，以及《开发指南》第十二章“设计菜单”。


请参阅

DEFINE BAR，DEFINE MENU，DEFINE PAD，DEFINE POPUP，SET SYSMENU


MODIFY PROCEDURE 命令

请参阅	示例

打开 Visual FoxPro 文本编辑器，可在其中为当前数据库创建新的存储过程，或修改数据库已有的存储过程。

语法

MODIFY PROCEDURE

说明

在创建或修改存储过程之前必须打开一个数据库。存储过程通常是在删除、插入或更新触发器中指定的，可以用 CREATE TRIGGER 命令为一个数据库创建触发器。

当前数据库的存储过程可以象其他已打开的过程文件或程序中的 Visual FoxPro 过程一样执行。有关 Visual FoxPro 搜索过程的顺序和位置的说明，请参阅 PROCEDURE。

MODIFY PROCEDURE 命令需要以独占方式使用数据库。若要以独占方式打开一个数据库，应在 OPEN DATABASE 命令中包含 EXCLUSIVE 子句。


* 下面的示例打开 testdata 数据库，并用
*  MODIFY PROCEDURE 命令打开 Visual FoxPro 文本编辑器，
* 在编辑器中可以创建新的存储过程或者修改已有的存储过程。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

MODIFY PROCEDURE  &&打开 Visual FoxPro 文本编辑器


请参阅

CREATE TRIGGER，DISPLAY PROCEDURES，OPEN DATABASE，PROCEDURE


MODIFY PROJECT 命令

请参阅

打开项目管理器，从中可以修改或创建一个项目文件。

语法

MODIFY PROJECT [FileName | ?]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[NOWAIT]
[SAVE]

参数

FileName

指定项目的文件名。如果未指定文件的扩展名，Visual FoxPro 自动指定扩展名为 .PIX。

?

显示“打开”对话框，从中可以打开一个已存在的项目文件，或者输入要创建的新项目名称。

WINDOW WindowName1

仅用于 FoxPro 早期版本。Visual FoxPro 忽略该子句。

指定一个窗口，项目管理器采用它的特性。例如，如果窗口是由 DEFINE WINDOW 命令 FLOAT 选项创建的，则项目管理器可以移动。窗口不必是活动的或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

仅用于 FoxPro 早期版本。Visual FoxPro 忽略该子句。

指定一个父窗口，项目管理器从中打开。项目管理器不具有父窗口的特性，而且不能移出父窗口。如果父窗口移动，项目管理器随之移动。

要访问项目管理器，必须首先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把项目管理器放入父窗口之后，在 Visual FoxPro 主窗口中打开项目管理器。包含 IN WINDOW 子句可以把项目管理器放进一个父窗口。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

把项目管理器放在 Macintosh 桌面上。项目管理器和 FoxPro 主窗口属于同一级，项目管理器可以移出 FoxPro 主窗口，也可以被 FoxPro 主窗口隐藏起来。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的当前设置。不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 的设置决定项目管理器是放在 FoxPro 主窗口还是 Macintosh 桌面上。有关在 FoxPro 主窗口或在 Macintosh 桌面上放置项目管理器的详细内容，请参阅 SET MACDESKTOP。

NOWAIT

打开项目管理器之后继续执行程序。程序不必等待关闭项目管理器，而是继续执行 MODIFY PROJECT NOWAIT 命令后面的程序行。如果在程序中发出 MODIFY PROJECT 命令时不含有 NOWAIT 子句，打开项目管理器后，程序暂停执行，直到关闭项目管理器为止。

NOWAIT 子句只在程序中起作用。从命令窗口发出时，NOWAIT 子句不起作用。

SAVE

在激活另一个窗口之后，仍然保持项目管理器打开。如果省略 SAVE 子句，在激活另一个窗口之后，将关闭项目管理器。从命令窗口发出时，SAVE 子句不起作用。

说明

在一个项目中，为应用程序指定它所需要的所有源文件，Visual FoxPro 将可以确保基于最近的源文件生成应用程序。

项目文件是一个表，它跟踪所有的源文件，如程序、表单、菜单、库、报表、标签、表、索引和格式文件。项目文件也跟踪文件之间的依赖、引用和连接关系。

附注

项目中不能包含 FLL 库。

项目文件扩展名为 .PIX，相关备注文件的扩展名为 .PJT。

发出不带任何参数的 MODIFY PROJECT 命令会显示打开对话框。

有关项目管理器的详细内容，请参阅使用项目管理器主题，以及《开发指南》第十五章“编译应用程序”。


请参阅

BUILD APP，BUILD EXE，BUILD PROJECT，COMPILE，CREATE PROJECT


MODIFY QUERY 命令

请参阅

打开查询设计器，从中可以修改或创建一个查询。

语法

MODIFY QUERY [FileName | ?]
[IN SCREEN | IN MACDESKTOP]
[NOWAIT]
[SAVE]
[AS nCodePage]

参数

FileName

指定查询的文件名。如果未指定扩展名，Visual FoxPro 自动指定扩展名为 .QPR。

?

显示“打开”对话框，从中可以选择一个已存在的查询，或者输入要创建的新查询的名称。

IN SCREEN

把查询设计器放入父窗口之后，在 Visual FoxPro 主窗口中打开查询设计器。包含 IN WINDOW 子句，可以把查询设计器放进一个父窗口。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将查询设计器放在 Macintosh 桌面上。查询设计器与 FoxPro 主窗口属于同一级。查询设计器可以移出 FoxPro 主窗口，也可以被 FoxPro 主窗口隐藏起来。

.包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的当前设置。不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 的设置决定查询设计器是放在 FoxPro 主窗口还是 Macintosh 桌面上。有关在 FoxPro 主窗口或在 Macintosh 桌面上放置查询设计器的详细内容，请参阅 SET MACDESKTOP。

NOWAIT

打开查询设计器之后继续执行程序。程序不必等待查询设计器关闭，而是继续执行 MODIFY QUERY NOWAIT 命令后面的程序行。如果在程序中发出 MODIFY QUERY 命令时不含有 NOWAIT 子句，打开查询设计器后，程序暂停执行，直到关闭查询设计器为止。

NOWAIT 子句只在程序中起作用。从命令窗口发出时，NOWAIT 子句不起作用。

SAVE

激活另一个窗口之后，仍然保持查询设计器打开。如果省略 SAVE，在激活另一个窗口之后，将关闭查询设计器。从命令窗口发出时，SAVE 子句不起作用。

AS nCodePage

指定查询的代码页。当查询由 Visual FoxPro 的非当前代码页创建时，需要包含 AS nCodePage。打开查询时，Visual FoxPro 自动把查询转换到 Visual FoxPro 当前代码页。可以用 GETCP( ) 函数为 nCodePage 显示“代码页”对话框，从中可以为查询指定一个代码页。

查询关闭时，它以原始代码页保存。

如果省略 AS nCodePage 子句或者 nCodePage 等于 0，则查询并不转换到 Visual FoxPro 当前代码页。如果不支持 nCodePage 指定的值， Visual FoxPro 产生错误信息。

在 Visual FoxPro 中，可以把查询添加进一个项目，也可以在项目容器中指定查询的代码页。项目容器跟踪查询的代码页。但是，如果用 MODIFY QUERY 命令在项目容器以外打开查询，则应该包含 AS nCodePage 子句来指定查询的代码页。

说明

有关创建查询的详细内容，请参阅创建查询主题，以及《用户指南》第六章“查询数据”。

如果发出不带任何参数的 MODIFY QUERY 命令，将显示“打开”对话框。如果从中选择了“新建”按钮，则指定查询名为“查询 1”。关闭查询设计器时可以用另外的名字保存该查询。

创建一个查询后，它将存储为带 .QPR 扩展名的 Visual FoxPro 程序文件。可以用 DO 命令执行一个查询程序，但查询文件名必须包含 .QPR 扩展名。


请参阅

CREATE QUERY，DO，GETCP( )


MODIFY REPORT 命令

请参阅

打开报表设计器，从中可以修改或创建一个报表。

语法

MODIFY REPORT [FileName | ?]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[NOENVIRONMENT]
[NOWAIT]
[SAVE]

参数

FileName

指定报表的文件名。如果未指定文件的扩展名，Visual FoxPro 自动指定扩展名为 .FRX。

附注

要修改在 FoxBASE+ 中创建的报表，必须在 FileName 指定的文件名中包含 .FRM 扩展名。修改后，该报表将以 Visual FoxPro 格式保存，不能在 FoxBASE+ 中再次打开。同时创建与 FoxBASE+ 报表同名的 Visual FoxPro 新表和备注文件，新表的扩展名为 .FRM，备注文件的扩展名为 .FPT。如果把新表的扩展名 .FRM 更改为 .FRX（报表文件类型），并且把备注文件的扩展名 .FPT 更改为 .FRT（报表备注文件类型），则打开该报表时不需指定扩展名。

?

显示“打开”对话框，从中可以选择一个已存在的报表文件，或者输入要创建的新报表名称。

WINDOW WindowName1

指定一个窗口，报表设计器采用它的特性。例如，如果窗口是由 DEFINE WINDOW 命令的 FLOAT 选项创建的，则报表设计器可以移动。窗口不必是活动的或可见的，但必须是已定义的。

IN [WINDOW] WindowName2

指定一个父窗口，报表设计器将在这个窗口中打开。报表设计器并不具有父窗口的特性，并且不能移出父窗口。如果父窗口移动，报表设计器随之移动。

要访问报表设计器，必须首先用 DEFINE WINDOW 命令定义父窗口，并且使其可见。

IN SCREEN

把报表设计器放入父窗口之后，在 Visual FoxPro 主窗口中打开报表设计器。包含 IN WINDOW 子句，可以把报表设计器放进一个父窗口。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

将报表设计器放在 Macintosh 桌面上。报表设计器与 FoxPro 主窗口属于同一级。报表设计器可以移出 FoxPro 主窗口，也可以被 FoxPro 主窗口隐藏起来。

包含 IN MACDESKTOP 子句将忽略 SET MACDESKTOP 的当前设置。不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 的设置决定报表设计器是放在 FoxPro 主窗口还是放在 Macintosh 桌面上。有关在 FoxPro 主窗口或在 Macintosh 桌面上放置报表设计器的详细内容，请参阅 SET MACDESKTOP。

NOENVIRONMENT

包含此命令是为了提供对 2.x 报表的向后兼容性，此命令防止保存报表的环境。

在 Visual FoxPro 中，数据环境的 AutoOpenTables 属性设置为（默认值）“真”(.T.)时，可以恢复与 Visual FoxPro 报表相关的数据环境。要想确保报表打印完毕之后关闭报表环境，可以把数据环境的 AutoCloseTables 属性设置为“真”(.T.)。此属性的默认值为“真”(.T.)。

当创建或修改报表时，可以用报表定义文件保存当前的 Visual FoxPro 数据环境。保存 Visual FoxPro 数据环境时，将在“报表定义”表中追加记录，这些记录指出所有打开的表、索引文件和索引排序以及表之间的任何关系。

NOWAIT

打开报表设计器之后继续执行程序。程序不必等待报表设计器关闭，而是继续执行 MODIFY REPORT NOWAIT 命令后面的程序行。如果在程序中发出 MODIFY REPORT 命令时不含有 NOWAIT 子句，打开报表设计器后，程序暂停执行，直到关闭报表设计器为止。

NOWAIT 子句只在程序中起作用。从命令窗口发出时，NOWAIT 子句不起作用。

SAVE

激活另一个窗口之后，仍然保持报表设计器打开。如果省略 SAVE，在激活另一个窗口之后，将关闭报表设计器。从命令窗口发出 MODIFY REPORT 命令时，SAVE 子句不起作用。

说明

如果发出 MODIFY REPORT 命令时不带任何参数，将显示“打开”对话框。如果从中选择了“新建”按钮，则指定报表名为“报表 1”。关闭报表设计器时可以用另外的名字保存报表。

有关创建和修改报表的详细内容，请参阅设计报表主题，以及《用户指南》的第九章“设计报表和标签”。


请参阅

_ASCIICOLS，_ASCIIROWS，CREATE REPORT，REPORT


MODIFY SCREEN 命令

请参阅

打开表单设计器，从中可以修改或创建一个表单。包含此命令是为了提供后兼容性。

语法

MODIFY SCREEN [FileName | ?]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN | IN MACDESKTOP]]
[NOENVIRONMENT]
[NOWAIT]
[SAVE]

说明

MODIFY SCREEN 与 MODIFY FORM 是相同的。有关详细内容，请参阅MODIFY FORM。

如果使用 MODIFY SCREEN 命令时不带任何参数，将会显示打开对话框。如果从中选择了新建按钮，则指定表单文件名为 FORMDOC1。关闭表单设计器时可以用另外的名字保存表单文件。

有关修改和创建表单的详细内容，请参阅创建表单，以及《开发指南》第九章“创建表单”。

有关向表单中添加控制的详细内容，请参阅在容器类中添加对象. 。


请参阅

CREATE SCREEN


MODIFY STRUCTURE 命令

请参阅

显示表设计器，从中可以修改表的结构。

语法

MODIFY STRUCTURE

说明

如果没有在当前选定的工作区中打开表，则显示“打开”对话框，允许您从中选择一个要修改的表。

对表结构的更改包括：添加和删除字段；修改字段的名称、大小和数据类型；添加、删除或修改索引标识，以及指定字段是否支持 null 值。

也可以用交互方式修改表的结构，有关详细内容，请参阅使用表设计器修改表的结构主题，以及《用户指南》第三章“创建表”。

注意

把字段从一种数据类型更改为另一种数据类型并不完全转换字段的内容，或者根本不转换。例如，如果将日期类型的字段转换成数值类型，则字段内容不转换。

在更改表结构之前，Visual FoxPro 自动备份当前表。当修改完之后，将备份表中包含的数据追加到新修改的表结构中。如果表有一个备注字段，也将创建一个备注备份文件。表备份文件的扩展名为 .BAK，备注备份文件的扩展名是 .TBK。

如果接受对结构的更改，然后中断数据复制过程，则新表不包含原表的所有记录。

记住 Visual FoxPro 为原表文件创建一个 .BAK 文件，并且为原备注文件（如果存在）创建一个 .TBK 备份文件。如果使用 MODIFY STRUCTURE 命令时出现问题，可以删除新文件，并且把 .BAK 文件和 .TBK 文件改回为原文件扩展名（.DBF 和 .FPT）。

当修改一个具有备注字段的表结构时，备注文件的块大小设置为当前的块大小。可以用 SET BLOCKSIZE 命令指定备注文件的块大小。

在 FoxPro 的早期版本中，MODIFY STRUCTURE 命令打开“表结构”对话框。


请参阅

ALTER TABLE - SQL，CREATE，CREATE TABLE - SQL，SET BLOCKSIZE


MODIFY VIEW 命令

请参阅

显示视图设计器，从中可以修改已存在的 SQL 视图。

语法

MODIFY VIEW ViewName [REMOTE]

参数

ViewName

指定要修改的视图名称。

REMOTE

指定该视图是一个使用远程表的远程视图。如果省略 REMOTE 子句，可以修改一个基于本地表的视图。

说明

使用 CREATE SQL VIEW 命令创建 SQL 视图。

包含 SQL 视图的数据库必须以独占方式打开。要以独占方式打开数据库，在 OPEN DATABASE 命令中包含 EXCLUSIVE 子句。


请参阅

CREATE SQL VIEW，OPEN DATABASE


MODIFY WINDOW 命令

请参阅	示例

修改用户自定义窗口或 Visual FoxPro 主窗口。

语法

MODIFY WINDOW WindowName | SCREEN
[FROM nRow1, nColumn1 TO nRow2, nColumn2
| AT nRow3, nColumn3 SIZE nRow4, nColumn4]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[TITLE cTitleText]
[HALFHEIGHT]
[DOUBLE | PANEL | NONE | SYSTEM]
[CLOSE | NOCLOSE]
[FLOAT | NOFLOAT]
[GROW | NOGROW]
[MINIMIZE | NOMINIMIZE]
[SHADOW | NOSHADOW]
[ZOOM | NOZOOM]
[ICON FILE FileName1]
[FILL FILE FileName2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

WindowName

指定要修改的用户自定义窗口。要修改的窗口必须先用 DEFINE WINDOW 命令创建。

SCREEN

指定要修改 Visual FoxPro 主窗口。不要缩写 SCREEN，否则 Visual FoxPro 会产生错误信息。要想将 Visual FoxPro 主窗口返回到它启动时的配置，发出下面的命令，并且不带任何附加子句：

MODIFY WINDOW SCREEN

提示

可以用 MODIFY WINDOW SCREEN NOCLOSE 命令防止意外地过早终止 Visual FoxPro。

有关 MODIFY WINDOW 子句的详细内容，请参阅 DEFINE WINDOW。

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

MODIFY WINDOW 命令更改一个已存在的用户自定义窗口（用 DEFINE WINDOW 命令创建的窗口）或 Visual FoxPro 主窗口的属性。MODIFY WINDOW 命令不能用来更改 Visual FoxPro 系统窗口（例如命令窗口和浏览窗口）的属性。

可以用 MODIFY WINDOW 命令更改用户自定义窗口或 Visual FoxPro 主窗口的位置、默认字体、标题、边框、控制、图标、壁纸或颜色。可以包含前面列出的子句从而更改这些属性。（注意，如果您想更改颜色，必须先用 CLEAR 命令使颜色的更改生效。）

例如，要想指定用户自定义窗口或 Visual FoxPro 主窗口的新位置和大小，需要包含 FROM 和 TO 或者 AT 和 SIZE 子句。要想防止用户自定义窗口或 Visual FoxPro 主窗口被移动，需要包含 NOFLOAT 关键字。


* 下面的示例更改 Visual FoxPro 主窗口标题栏的内容。
*

MODIFY WINDOW SCREEN TITLE 'My Application'


请参阅

DEFINE WINDOW，_SCREEN


MONTH( ) 函数

请参阅	示例

返回给定日期或日期时间表达式的月份值。

语法

MONTH(dExpression | tExpression)

参数

dExpression

指定一日期表达式，用 MONTH( ) 函数返回其月份值。

tExpression

指定一日期时间表达式，用 MONTH( ) 函数返回其月份值。

返回值类型

数值型

说明

MONTH( ) 函数返回从 1 到 12 的一个数。一月是 1，十二月是 12。


CLEAR

? DATE( )  &&显示今天的日期

? MONTH(DATE( ))  &&显示月份值

STORE {05/03/95} TO gdBuy

STORE MONTH(gdBuy + 31) TO gdMonth

? gdMonth


请参阅

CMONTH( )，DAY( )，SYS( ) 函数概述，YEAR( )


MOUSE 命令

请参阅	示例

单击、双击、移动或拖动鼠标。

语法

MOUSE [CLICK | DBLCLICK] [AT nRow1, nColumn1]
| DRAG TO nRow2, nColumn2, nRow3, nColumn3 ...]
[PIXELS]
[WINDOW cWindowName]
[LEFT | MIDDLE | RIGHT]
[SHIFT] [CTRL] [ALT]

参数

CLICK | DBLCLICK

指定单击或双击鼠标。如果省略 AT 子句，则在鼠标指针的当前位置单击或双击鼠标。

AT nRow1, nColumn1

指定在哪里单击或双击鼠标，或者是把鼠标指针移动到哪里。如果省略 CLICK 或 DBLCLICK，则鼠标指针移动到 nRow1 ,nColumn1 指定的位置。

除非指定一个窗口，否则 nRow1 ,nColumn1 指定的位置相对于 Visual FoxPro 主窗口，并且由 Visual FoxPro 主窗口的字体决定。大部分字体可以按一系列大小显示，有一些能按比例安排间隔。一行对应于当前字体的高度，一列对应于当前字体的字母平均宽度。

不能用 AT 子句选择一个 Visual FoxPro 菜单标题。可以用 KEYBOARD 命令将选择菜单标题的关键字组合填入键盘缓冲区。

DRAG TO nRow2, nColumn2, nRow3, nColumn3 ...]

指定把鼠标指针拖动到一个或一系列位置。

当拖动鼠标指针时，按下一个鼠标键并保持不放，直到鼠标指针到达目标位置后释放鼠标键。如果省略 LEFT，MIDDLE 和 RIGHT 子句，则默认按下左鼠标键（主键）并保持不放。

DRAG 子句接受多组的 nRow，nColumn 坐标，从而将鼠标指针拖动到多个位置。

如果包含了 CLICK 或 DBLCLICK 子句，则在当前位置单击或双击鼠标，然后将鼠标指针拖动到指定位置。

PIXELS

指定在 AT 和 DRAG TO 子句中包含的位置是以象素为单位的。

如果省略 PIXELS 子句，则位置由 Visual FoxPro 主窗口或用 cWindowName 指定窗口的字体决定。大部分字体可以按一系列大小显示，有一些能按比例安排间隔。一个行对应于当前字体的高度，一个列对应于当前字体的字母平均宽度。

WINDOW cWindowName

指定一个窗口，AT 和 DRAG TO 子句的坐标相对于这个窗口。如果不包含 WINDOW 子句和一个活动窗口名，则 AT 和 DRAG TO 子句的坐标相对于 Visual FoxPro主窗口。

若想指定一个系统窗口和一个工具栏，应把整个系统窗口或工具栏名称括在引号中。

LEFT | MIDDLE | RIGHT

指定当单击、双击或拖动鼠标时，按下哪个鼠标键。如果省略 LEFT，MIDDLE 和 RIGHT 子句，默认按下左鼠标键（主键）。

[SHIFT] [CTRL] [ALT]

指定当单击、双击或拖动鼠标时按下的一个键。SHIFT 指定 SHIFT 键，CTRL 指定 CTRL 键，ALT 指定 ALT 键。可以指定 SHIFT，CTRL 和 ALT 键的任意组合。

说明

MOUSE 命令通常用来自动测试交互的应用程序或者创建演示程序。


* 在下面示例中，第一个命令在 Visual FoxPro 主窗口
* 的第 3 行第 3 列单击鼠标。第二个命令在 Visual FoxPro 主窗口
* 的第 3 行第 3 列单击鼠标，然后把鼠标指针拖动
* 到 Visual FoxPro 主窗口的第 10 行第 10 列。第三个命令
* 把鼠标指针从当前位置拖动到第 20 行第 20 例。第四个
* 命令在当前位置双击鼠标，然后把鼠标指针拖动列第 30 行第
* 30 列，最后一个命令把鼠标指针从当前位置拖动到
* 第 10 行第 10 列，然后拖动到第 30 行第 30 列。

MOUSE CLICK AT 3,3

MOUSE CLICK AT 3,3 DRAG TO 10,10

MOUSE DRAG TO 20,20

MOUSE DBLCLICK DRAG TO 30,30

MOUSE DRAG TO 10,10,20,20,30,30


请参阅

MCOL( )，MDOWN( )，MROW( )


MouseDown 事件

请参阅

当用户按下一个鼠标键时发生。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，标头，图象，标签，线条，列表框，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.MouseDown
[LPARAMETERS nIndex, nButton, nShift, nXCoord, nYCoord]
  或者
LPARAMETERS nButton, nShift, nXCoord, nYCoord

参数

必须在事件过程中包含 LPARAMETERS 或 PARAMETERS 语句，并且为每个参数指定一个名称。Visual FoxPro 按下列顺序把 5 个参数或 4 个参数传送给 MouseDown 事件。

nIndex

存放一个数，它唯一标识控制数组中的一个控制。仅当控制是控制数组的一部分时，才传送 nIndex 参数。

nButton

存放一个数，它指定为触发事件需要按下哪个键：1 (左)，2 (右) 或 4 (中)。

nShift

存放一个数，它指定当按下用 nButton 指定的键时， SHIFT、CTRL 和 ALT 键的状态。

如果按下了一个键，就设置一个位，nShift 参数是这些位的和。低位对应于 SHIFT 键 (0 位)， CTRL 键 (1 位)， ALT 键 (2 位)，这些位分别对应于 1，2 和 4。nShift 参数表明这些键的状态。部分、全部或没有设置三个位，表明部分、全部或没有按下三个键。例如，如果 CTRL 和 ALT 键全部按下，那么 nShift 的值为 6。

nXCoord, nYCoord

存放表单中鼠标指针当前的水平 (nXCoord) 和垂直 (nYCoord) 位置。这些坐标总是以 ScaleMode 属性设置值为度量单位，按照指定表单的坐标系统表达的。

说明

用 MouseDown 过程指定按下鼠标键时发生的动作。与 Click 和 DblClick 事件不同，可以用 MouseDown 事件区别左、右、中鼠标键，也可以为使用 SHIFT， CTRL 和 ALT 键的鼠标-键盘组合编写代码。

附注

可以用 MouseMove 事件响应由鼠标移动引起的事件。MouseDown 和 MouseUp 使用的 nButton 参数与 MouseMove 使用的 nButton 参数不同。对于 MouseDown 或 MouseUp，每个事件中 nButton 参数确切地指明一个键，对于 MouseMove，它表明了所有键的当前状态。


请参阅

Click 事件，DblClick 事件，MouseMove 事件，MousePointer 属性，MouseUp 事件


MouseMove 事件

请参阅

当用户在一个对象上移动鼠标时发生。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，标头，图象，标签，线条，列表框，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.MouseMove
[LPARAMETERS nIndex, nButton, nShift, nXCoord, nYCoord]
  或者
LPARAMETERS nButton, nShift, nXCoord, nYCoord

参数

必须在事件过程中包含 LPARAMETERS 或 PARAMETERS 语句，并且为每个参数指定一个名称。Visual FoxPro 按下列顺序把 5 个参数或 4 个参数传送给 MouseMove 事件。

nIndex

存放一个数，它唯一标识控制数组中的一个控制。仅当控制是控制数组的一部分时，才传送 nIndex 参数。

nButton

存放一个数，它以位总和的形式指定鼠标键的状态。如果按下了一个键，则设置一个位。nButton 参数表明设置了哪个位，0 位相应于左鼠标键，1 位相应于右鼠标键，2 位相应于中鼠标键，对于三种情况 nButton 分别取值为 1，2，4。它表明了鼠标键完整的状态：部分、全部或不设置三个位，表明部分、全部或没有鼠标键按下。可能的取值从 0 到 7。单个鼠标键相应于下列值：1 (左)，2 (右) 和 4 (中)。例如，如果左和右鼠标键都按下了，则 nButton 的值为 3。

nShift

存放一个数，它指定 SHIFT、CTRL 和 ALT 键的状态：1 (SHIFT)，2 (CTRL)，4 (ALT)。如果按下了一个键，就设置一个位。nShift 参数是这些位的总和，低位对应于 SHIFT 键 (0 位)， CTRL 键 (1 位)， ALT 键 (2 位)，这些位的值分别是 1，2 和 4。nShift 参数表明这些键的状态。部分、全部或没有设置三个位，表明部分、全部或没有键被按下。例如，如果 CTRL 和 ALT 键都按下了，那么 nShift 的值为 6。

nXCoord, nYCoord

存放表单中鼠标指针当前的水平 (nXCoord) 和垂直 (nYCoord)位置。这些坐标总是以 ScaleMode 属性的设置值为度量单位，按照指定的表单坐标系统表达的。

当鼠标指针在对象之间移动时，连续触发 MouseMove 事件。

附注

可以用 MouseDown 和 MouseUp 事件响应由按下和释放鼠标键引起的事件。

MouseMove 使用的 nButton 参数与 MouseDown 和 MouseUp 使用的 nButton 参数不同。对于 MouseMove，nButton 参数表明了所有键的当前状态；一个单独的 MouseMove 事件可以表明部分、全部或没有按下任何键；对于 MouseDown 或 MouseUp，每个事件中 nButton 参数确切地指明一个键。

要避免在 MouseMove 事件过程中移动一个窗口，这会引起级联事件并产生运行错误，例如堆栈溢出。当窗口在指针下移动时会触发 MouseMove 事件。这样即使鼠标静止时也会触发一个 MouseMove 事件。


请参阅

Click 事件，DblClick 事件，MousePointer 属性，MouseDown 事件，MouseUp 事件


MousePointer 属性

请参阅

指定运行时，鼠标在一个对象的特定位置之上时，鼠标指针的形状。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，_SCREEN，形状，微调，文本框，工具栏

语法

Object.MousePointer[ = nType]

设置

nType

MousePointer 属性的设置有：

设置	说明
0	（默认值）由对象决定的形式。
1	箭头。
2	十字标。一个十字指针。
3	I- 型标。
4	图标。一个黑块中的一个小白块。
5	尺寸调整标。指向东西南北的四箭头。
6	东北 — 西南方向尺寸调整标。 指向东北和西南的双箭头。
7	南北方向尺寸调整标。指向南北的双箭头。
8	西北 — 东南方向尺寸调整标。 指向西北和东南的双箭头。
9	东西方向尺寸调整标。 指向东西的双箭头。
10	向上的箭头。
11	沙漏。
12	禁止停放。
13	隐藏指针。
14	箭头。
说明

设计和运行时可用。

MousePointer 属性可以用来表明当鼠标指针经过表单或对话框上的控制时功能的变化。例如可以把 MousePointer 属性设置为 11 (沙漏)，表明用户需要等待某过程的结束。


请参阅

MouseMove 事件


MouseUp 事件

请参阅

当用户释放一个鼠标键时发生。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，标头，图象，标签，线条，列表框，选项按钮，选项组，页面，页框，形状，微调，文本框，工具栏

语法

PROCEDURE Object.MouseUp
[LPARAMETERS nButton, nShift, nXCoord, nYCoord]
  或者
LPARAMETERS nIndex, nButton, nShift, nXCoord, nYCoord

参数

必须在事件过程中包含 LPARAMETERS 或 PARAMETERS 语句，并且为每个参数指定一个名称。Visual FoxPro 按下列顺序把 5 个参数或 4 个参数传送给 MouseUp 事件。

nIndex

存放一个数，它唯一标识控制数组中的一个控制。

nButton

存放一个数，它指定为引发事件而释放哪个键：1 (左)，2 (右)，和 4 (中)。

nButton 参数是 3 个位的和，对应于左鼠标键(0 位)，右鼠标键(1 位)，中鼠标键(2 位)，分别取值为 1，2 和 4。只能设置其中一位，它表明哪个键引发了事件。

nShift

存放一个数，它指定当释放 nButton 参数指定的键时 SHIFT， CTRL 和 ALT 键的状态：1 (SHIFT)，2 (CTRL)，4 (ALT)。

每按下一个键，就设置一个位，nShift 参数是这些位的和。低位对应于 SHIFT 键(0 位)， CTRL 键(1 位)， ALT 键(2 位)，其数值分别为 1，2 和 4。nShift 参数表明这些键的状态，部分、全部或没有设置三个位，表明部分、全部或没有键被按下。例如，如果 CTRL 和 ALT 键都按下了，那么 nShift 的值为 6。

nXCoord, nYCoord

存放鼠标指针在表单中当前的水平 (nXCoord) 和垂直 (nYCoord) 位置。这些坐标总是以 ScaleMode 属性的设置值为度量单位，按照指定的表单坐标系统表达的。

说明

可用 MouseUp 过程指定释放鼠标键时发生的动作。与 Click 和 DblClick 事件不同，可以用 MouseUp 事件区别左、右、中鼠标键，也可以为使用 SHIFT， CTRL 和 ALT 键的鼠标 — 键盘组合编写代码。

可以用 MouseMove 过程响应由移动鼠标引起的事件。

附注

MouseDown 和 MouseUp 使用的 nButton 参数与 MouseMove 使用的 nButton 参数不同。对于 MouseDown 或 MouseUp，每个事件中nButton 参数确切地指明一个键；对于 MouseMove，它表明了所有键的当前状态。


请参阅

Click 事件，DblClick 事件，MouseDown 事件，MouseMove 事件，MousePointer 属性，ScaleMode 属性


Movable 属性

请参阅

指定用户是否可以在运行时移动一个对象。

应用于

列，表单，_SCREEN，工具栏

语法

Object.Movable[ = lExpr]

设置

lExpr

Movable 属性的设置有：

设置	说明
“真”(.T.)	(默认值)可以移动对象。对于表单，“移动”命令同时添加到控制菜单中。
“假”(.F.)	不能移动对象。对于表格列，不能人工直接移动表格列，但是，如果更改了列的 ColumnOrder 属性或者把另一个列移动到它上面，就可以移动列。
说明

设计时可用，运行时可读写。


请参阅

Sizable 属性


Move 方法

请参阅

移动一个对象。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，工具栏

语法

Object.Move (nLeft [, nTop [, nWidth [, nHeight]]])

参数

nLeft

指定对象左边沿的水平坐标，nLeft 是一单精度值。

nTop

指定对象上边沿的垂直坐标，nTop 是一单精度值。

nWidth

指定对象的新宽度，nWidth 是一单精度值。

nHeight

指定对象的新高度，nHeight 是一单精度值。

说明

只有 nLeft 参数是必需的。但是，如果想要包含任何其他的参数，也必须包含语法中该参数前的所有参数。例如，不能指定了 nWidth 而不指定 nLeft 和 nTop。任何未指定的后继参数将保持不变。

在屏幕上移动表单，或在表单中移动控制时，都是相对于原点 (0，0)，原点位于左上角。当在容器中移动控制时，使用容器的坐标系。


请参阅

Top 属性，Width 属性


MOVE POPUP 命令

请参阅	示例

把菜单移动到新位置，该菜单可以是用 DEFINE POPUP 命令创建的用户自定义菜单，或者是 FoxPro for MS-DOS 系统菜单（例如 _MFILE，MEDIT，或 _MDATA）。

语法

MOVE POPUP MenuName TO nRow1, nColumn1 | BY nRow2, nColumn2

参数

MenuName

指定要移动的菜单。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中不能移动系统菜单。

TO nRow1, nColumn1

在用户自定义窗口或 Visual FoxPro 主窗口中，把菜单移动到由 nRow1, nColumnl 指定的新位置。

BY nRow2, nColumn2

相对于当前位置移动菜单。数值表达式 nRow2 指定了移动菜单的行数（如果 nRow2 是正值就向下移动，如果是负值就向上移动），数值表达式 nColumn2 指定了移动菜单的列数（如果 nColumn2 是正值，就向右移动，如果是负值就向左移动）。

说明

可以把菜单移动到指定位置，或者相对它的当前位置移动菜单。只要菜单已定义，就可以移动它，它不必是活动或可见的。


* 下面示例定义并激活一个菜单，然后移动，
* 并更改它的大小。

CLOSE DATABASE

CLEAR

DEFINE POPUP popMovIn FROM 2,2 TO 7, 14 PROMPT FILES LIKE *.PRG ;

TITLE 'Programs'

ACTIVATE POPUP popMovIn NOWAIT

=CHRSAW(2)

MOVE POPUP popMovIn BY 5,5  	&&向下移动菜单

=CHRSAW(2)

SIZE POPUP popMovIn BY 5,5  	&& 放大菜单

=CHRSAW(2)

SIZE POPUP popMovIn BY -5,-5	  && 缩小菜单

=CHRSAW(2)

MOVE POPUP popMovIn BY -5,-5  	&&向上移动菜单

=CHRSAW(2)

DEACTIVATE POPUP popMovIn

RELEASE POPUP popMovIn


请参阅

ACTIVATE POPUP，DEFINE POPUP，SIZE POPUP


MOVE WINDOW 命令

请参阅	示例

把窗口移动到新位置，该窗口可以是用 DEFINE WINDOW 命令创建的用户自定义窗口，或者是 Visual FoxPro 系统窗口（例如命令窗口或浏览窗口）。

语法

MOVE WINDOW WindowName TO nRow1, nColumn1
| BY nRow2, nColumn2 | CENTER

参数

WindowName

指定要移动的窗口名。

TO nRow1, nColumn1

在 Visual FoxPro 主窗口或用户自定义窗口中，把窗口移动到由 nRow1, nColumn1 指定的位置。

BY nRow2, nColumn2

相对当前位置移动窗口，数值表达式 nRow2 指定了移动窗口的行数（如果 nRow2 是正值就向下移动，如果是负值就向上移动）。数值表达式 nColumn2 指定了移动窗口的列数（如果 nColumn2 是正值就向右移动，如果是负值就向左移动）。

CENTER

在 Visual FoxPro 主窗口或父窗口中居中放置窗口。

说明

可以把窗口移动到指定位置，或者相对它的当前位置移动窗口。只要窗口已定义，就可以移动它，不必是活动或可见的。

若要移动一个系统窗口和/或一个工具栏（在 Visual FoxPro 中），应把整个系统窗口名称或工具栏名称括在引号中。例如，若要在 Visual FoxPro 中移动报表控制工具栏（还未停放），可以用下面命令：

MOVE WINDOW Report Controls BY 1,1


* 下面示例中，在定义和激活名为
*  menter 的窗口之后，移动它。

DEFINE WINDOW wEnter FROM 10,4 TO 15,54 SYSTEM ;

TITLE "Nomadic Window"

ACTIVATE WINDOW wEnter

WAIT WINDOW 'Press any key to move the window'

MOVE WINDOW wEnter TO 20,15

WAIT WINDOW 'Press any key to center the window'

MOVE WINDOW wEnter CENTER

WAIT WINDOW 'Press any key to release the window'

RELEASE WINDOW wEnter


请参阅

ACTIVATE WINDOW


Moved 事件

请参阅

当对象移动到新位置时，或者以编程方式更改容器对象的 Top 或 Left 属性设置时发生。

应用于

列，容器对象，控制对象，表单，表格，OLE 绑定型控制，OLE 容器控制，页框，工具栏

语法

PROCEDURE Object.Moved

说明

当对象移动到新位置时，或者在代码中更改 Top 或 Left 属性时发生。


请参阅

ColumnOrder 属性，Left 属性，Top 属性


MoverBars 属性

请参阅

指定是否在列表框控制中显示移动钮 — 栏。

应用于

列表框

语法

ListBox.MoverBars[ = lExpr]

设置

lExpr

MoverBars 属性的设置有：

设置	说明
“真”(.T.)	显示移动钮栏，用户可以交互地重新排序控制中的内容。
“假”(.F.)	（默认值）不显示移动钮栏。
说明

设计时该属性可用，运行时可读写。

仅当 RowSourceType 属性设置为 0 (无) 或 1 (值) 时，MoverBars 属性才可用。


请参阅

RowSourceType 属性，ScrollBars 属性


MRKBAR( ) 函数

请参阅	示例

确定是否已标记用户自定义菜单或 Visual FoxPro 系统菜单中的一个菜单项。

语法

MRKBAR(cMenuName, nMenuItemNumber | cSystemMenuItemName)

参数

cMenuName

指定包含该菜单项的菜单名称。菜单可以是 Vsiaul FoxPro 系统菜单（例如 _MFILE，MEDIT 或 _MDATA）。

nMenuItemNumber

指定用户自定义菜单中菜单项的编号。用 DEFINE BAR 命令创建菜单项时，就确定了菜单项的编号。

cSystemMenuItemName

指定 Visual FoxPro 系统菜单项名称。例如，下面的命令显示一个逻辑值，该值指定是否标记“文件”菜单上的“新建”菜单项：

? MRKBAR('_MFILE', _MFI_NEW)

返回值类型

逻辑型

说明

可用 SET MARK OF 命令添加或移去一个菜单项的标记。

如果标记了指定菜单项，MRKBAR( ) 函数返回“真”(.T.) ；否则，MRKBAR( ) 函数返回“假”(.F.)。

有关 MRKBAR( ) 函数的例子，请参阅 CNTBAR( ) 。


请参阅

MRKPAD( )，SET MARK OF，SET MARK TO


MRKPAD( ) 函数

请参阅	示例

确定是否已标记了用户自定义菜单或 Visual FoxPro 系统菜单栏中的一个菜单标题。

语法

MRKPAD(cMenuBarName, cMenuTitleName)

参数

cMenuBarName

指定包含该菜单标题的菜单栏名称。

cMenuTitleName

指定菜单标题名称。

返回值类型

逻辑型

说明

用 SET MARK OF 命令可以添加或移去一个菜单标题的标记。

如果标记了指定的菜单标题，MRKPAD( ) 函数返回“真”(.T.)；否则 MRKPAD( ) 函数返回“假”(.F.)。


*下面名为 MARKPAD.PKG 的示例程序中，当选择一个菜单标
* 题时，使用 MRKPAD( ) 函数来切换菜单标题的标记字符。

*首先用 SET SYSMENO SAVE 命令保存当前系
* 统菜单栏，然后用 SETSYSENU TO
*  命令移去所有的系统菜单栏。

* 用 DEFINE PAD 命令创建几个系统菜单项，当选择一
* 个菜单项时，就执行 choice 过程。choice 显示
* 了所选择的菜单项名和菜单栏名。用 SET MARK OF
* 命令和 MRKPAD( ) 函数一起来显示或移去
* 菜单项的标记字符。如果选择了“退出”菜单，
* 就还原原来的 Visual FoxPro 系统菜单。

*** 程序名为 MARKPAD.PGC ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

SET MARK OF MENU _MSYSMENU TO CHR(4)

PUBLIC glMarkPad

glMarkPad = .T.

DEFINE PAD padSys OF _MSYSMENU PROMPT '\<System'  COLOR SCHEME 3 ;

KEY ALT+S, ''

DEFINE PAD padEdit OF _MSYSMENU PROMPT '\<Edit'    COLOR SCHEME 3 ;

KEY ALT+E, ''

DEFINE PAD padRecord OF _MSYSMENU PROMPT '\<Record'  COLOR SCHEME 3 ;

KEY ALT+R, ''

DEFINE PAD padWindow OF _MSYSMENU PROMPT '\<Window'  COLOR SCHEME 3 ;

KEY ALT+W, ''

DEFINE PAD padReport OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 ;

KEY ALT+P, ''

DEFINE PAD padExit OF _MSYSMENU PROMPT 'E\<xit'    COLOR SCHEME 3 ;
KEY ALT+X, ''

ON SELECTION MENU _MSYSMENU ;
DO choice IN markpad WITH PAD( ), MENU( )

PROCEDURE choice

PARAMETER gcPad, gcMenu

WAIT WINDOW 'You chose ' + gcPad + ;

' from menu ' + gcMenu NOWAIT

SET MARK OF PAD (gcPad) OF _MSYSMENU TO ;

! MRKPAD('_MSYSMENU', gcPad)

glMarkPad= ! glMarkPad

IF gcPad = 'PADEXIT'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

MRKBAR( )，SET MARK OF


MROW( ) 函数

请参阅

返回 Visual FoxPro 主窗口或用户自定义窗口中鼠标指针的行位置。

语法

MROW([cWindowName])

参数

cWindowName

指定一窗口名，MROW( ) 函数返回鼠标指针在其中的行位置。

在 FoxPro for MS-DOS 中，如果 cWindowName 是浏览窗口或调试窗口名，并且鼠标指针指在窗口的上边框上，则 MROW( ) 函数返回 0。在其他窗口中，如果鼠标指针位于上边框上，MROW( ) 函数返回 -1。

返回值类型

数值型

说明

如果没有活动的用户自定义窗口并且省略了 cWindowName 可选参数，则MROW( ) 函数返回鼠标指针在 Visual FoxPro 主窗口中的行位置。

如果有一个活动的用户自定义窗口，并且省略了 cWindowName 可选参数，MROW( ) 函数返回相对于该用户自定义窗口的鼠标指针行坐标。如果鼠标指针指在用户自定义窗口之外，MROW( ) 函数返回 -1。

如果没有加载鼠标驱动程序，并且没有输出窗口，MROW( ) 函数返回 -1。


请参阅

COL( )，ISMOUSE( )，MCOL( )，ROW( )，WCOLS( )，WROWS( )


MTON( ) 函数

请参阅	示例

由一个货币型表达式返回一个数值型值。

语法

MTON(mExpression)

参数

mExpression

指定一个货币型表达式，MTON( ) 函数返回它的值，mExpression 计算结果必须是有效的货币值，否则 Visual FoxPro 产生错误。

在数值型值前面加一个美元符号 ($) 的前缀，就可以创建一个货币型值。

返回值类型

数值型

说明

MTON( ) 函数返回一个带四位小数的数值型值。


* 在下面示例中创建一个名为 gyMoney 的货币型内存
* 变量。TYPE( ) 函数显示 Y，表明内存变量是货币型
* 的。MTON( ) 函数用来把该内存变量转换为数值型，
* 这时 TYPE( ) 函数显示 N，表明转换后内存变量是
* 数值型的。

STORE $24.95 TO gyMoney  &&创建一个货币型内存变量

CLEAR

? "gyMoney is type: "

?? TYPE('gyMoney')  &&显示 Y，货币型值

gyMoney = MTON(gyMoney)	  &&把 gyMoney 转换成数值型的值。

? "gyMoney is now type: "

?? TYPE('gyMoney')  &&显示 N，数值型值。


请参阅

NTOM( )


MultiSelect 属性

请参阅	示例

指定用户是否可以在一个列表框控制中作多项选择，以及如何选择。

应用于

列表框

语法

ListBox.MultiSelect[ = nChoice]

设置

nChoice

MultiSelect 属性的设置有：

设置	说明
0	(默认值)不允许做多项选择。
1	允许做多项选择。若要做多项选择，按下 CTRL 键的同时单击各项。
说明

设计时可用，运行时可读写。

为使用户能在列表中做多项选择，需把 MultiSelect 设置为“真”(.T.)。可以用 Selected 属性确定选择了哪些项。


* 在下面示例中创建了一个“列表框”，
* 它的 MultiSelect 属性设置为“真”(.T.)，
* 允许在列表框中作多项选择。

* 出现在列表框上的项来源于一个数组，这个数组是用 RowSourceType 和
*  RowSource 属性指定的。在 FOR ... ENDFOR 循环中，用
* ListCount 属性来显示“列表框”中已选择的一个或多个选项，
* 用Selected 属性确定要选择的项，用 List 属性返回这些项。

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  &&用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

ENDFOR

frmMyForm = CREATEOBJECT('Form')  &&创建一个表单

frmMyForm.Closable = .f.  && 使“控制”菜单框失效

frmMyForm.Move(150,10)  &&移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  &&添加“退出”命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  &&添加列表框控制

frmMyForm.lstListBox1.RowSourceType = 5  &&指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' &&数组包含列表框选项

frmMyForm.cmbCommand1.Visible =.T.  && “退出”命令按钮可见

frmMyForm.lstListBox1.Visible =.T.  &&“列表框”可见

frmMyForm.SHOW  &&显示表单

READ EVENTS  &&开始事件过程

DEFINE CLASS cmdMyCmdBtn AS CommandButton  &&创建命令按钮

Caption = '\<Quit'  &&命令按钮上的标题

Cancel = .T.  && 默认的取消命令按钮(ESC)

Left = 125  && 命令按钮的列

Top = 210  && 命令按钮的行

Height = 25  &&命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件过程，关闭表单

CLEAR  && 清除 Visual FoxPro 主窗口

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  && 创建列表框控制

Left = 10  && 列表框的列

Top = 10  && 列表框的行

MultiSelect = .T.  &&允许选择多项

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 选择了这个项吗？

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) &&显示该选项

ENDIF

ENDFOR

ENDDEFINE


请参阅

AddItem 方法，Clear 方法，List 属性，ListCount 属性，NewItemID 属性，RemoveItem 方法，Selected 属性，TopItemID 属性


MWINDOW( ) 函数

请参阅

返回鼠标指针所在的窗口名称。

语法

MWINDOW([cWindowName])

参数

cWindowName

指定一窗口名。如果鼠标指针在它上面，MWINDOW( ) 函数返回“真”(.T.)；否则 MWINDOW( ) 函数返回“假”(.F.)。

返回值类型

字符型，逻辑型

说明

如果省略可选的窗口名称，MWINDOW( ) 函数返回鼠标指针所在的窗口名称，或者一个空字符串（如果鼠标指针位于 Visual FoxPro 主窗口上）。


请参阅

MCOL( )，MDOWN( )，MROW( )，WONTOP( )，WOUTPUT( )


Name 属性

请参阅

指定在代码中引用对象时所用的名称。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，临时表，自定义，数据环境，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，关系，_SCREEN，形状，微调，问本框，计时器，工具栏

语法

Object.Name[ = cName]

设置

cName

指定在代码中引用对象时所用的名称。

说明

设计时可用，运行时可读写。

新建对象的默认名称是该对象的类型加上一个唯一的整数。例如：第一个新建表单对象的名称是 Forml，而表单上创建的第三个文本框为 Text3。

附注

若对象为分层结构中的第一个对象（即最外层容器），应使用对象变量代替 Name 属性来引用该对象。


请参阅

Caption 属性，NewIndex 属性，NewItemID 属性


NDX( ) 函数

请参阅

返回为当前表或指定表打开的某一索引 (.IDX) 文件的名称。

语法

NDX(nIndexNumber [, nWorkArea | cTableAlias])

参数

nIndexNumber

指定返回哪一个 .IDX 文件名。USE 和 SET INDEX 命令都支持指定索引文件列表，从而为一个表打开多个 .IDX 文件。索引文件列表中文件名的次序决定了 NDX( ) 函数返回哪一个 .IDX 文件。例如，若 nIndexNumber 为 1，则 NDX( ) 返回索引文件列表中第一个 .IDX 文件；若 nIndexNumber 为 2，则 NDX( ) 返回第二个 .IDX 文件，依此类推。NDX( ) 忽略索引文件列表中的复合索引文件名称(.CDX)。

如果 nIndexNumber 的值大于索引文件列表中的文件数目，NDX( ) 将返回一个空字符串。

nWorkArea

指定工作区号，返回此工作区的 .IDX 文件。如果指定工作区中没有打开的表， NDX( ) 将返回空字符串。如果省略 nWorkArea 参数， NDX( ) 将返回与当前工作区中的表一起打开的 .IDX 文件名。

cTableAlias

指定表别名，返回此别名的 .IDX 文件。如果没有此表别名，Visual FoxPro 将产生错误信息。如果忽略 cTableAlias， NDX( ) 将返回与当前工作区中的表一起打开的 .IDX 文件名。

返回值类型

字符型

说明

CDX( ) 和 MDX( ) 函数可以返回已打开的复合索引(.CDX)文件名。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 中，如果 SET FULLPATH 为 ON， NDX( ) 将返回 .IDX 文件名以及 .IDX 文件的路径。若 SET FULLPATH 为 OFF， NDX( ) 将返回 .IDX 文件名以及IDX 文件所在驱动器。

在FoxPro for Macintosh中，NDX( ) 忽略 FULLPATH 设置，总是返回 .IDX 文件名以及 .IDX 文件的路径。


请参阅

CDX( )，INDEX，MDX( )，SET FULLPATH，SET INDEX，SYS(14) - 索引表达式，TAG( )，USE


NewIndex 属性

请参阅

为最新添加在组合框或列表框控制中的项指定索引。

应用于

组合框，列表框

语法

Control.NewIndex

说明

设计时不可用，运行时只读。

把项添加到一个已排序列表中时，NewIndex 属性特别有用。


请参阅

Caption 属性，NewItemID 属性，Name 属性


NewItemID 属性

请参阅

为最新添加在组合框或列表框控制中的项指定标识号。

应用于

组合框，列表框

语法

[Form.]Control.NewItemID

说明

设计时不可用，运行时只读。

有关项标识号与项索引之间差异的详细内容，请参阅 AddItem 方法或 AddListItem 方法。


请参阅

AddItem 方法，AddListItem 方法，Clear 方法，ItemData 属性，List 属性，ListCount 属性，MultiSelect 属性，NewIndex 属性，RemoveItem 方法，Selected 属性，TopItemID 属性


NoDataOnLoad 属性

请参阅

激活一个与临时表相关联的视图，但不下载数据。

应用于

临时表

语法

DataEnvironment.Cursor.NoDataOnLoad[ = lSetting]

设置

lSetting

NoDataOnLoad 属性设置为：

设置	说明
“真”(.T.)	打开与临时表相关联的视图，但不下载数据。
“假”(.F.)	（默认值）打开与临时表相关联的视图，并下载数据。
说明

设计时可用，运行时可读写。

附注

如果使用CURSORSETPROP( ) 访问临时表对象，则在运行时 NoDataOnLoad 属性为只读。

使用 NoDataOnLoad 属性可以确保快速加载与视图相关联的表单集或表单（从后端服务器下载数据可能耗费很长时间）。把 REQUERY( ) 函数和 NoDataOnLoad 属性一起使用，可以在加载表单之后立即向活动视图下载数据。

NoDataOnLoad 属性与 USE 命令 NODATA 子句的行为相似。


请参阅

REQUERY( )，USE


NORMALIZE( ) 函数

请参阅

把用户提供的字符表达式转换为可以与 Visual FoxPro 函数返回值相比较的格式。

语法

NORMALIZE(cExpression)

参数

cExpression

指定要规范化的字符表达式。

返回值类型

字符型

说明

NORMALIZE( ) 由 cExpression 字符表达式返回一个字符串，并做如下变化：

 •	   字符表达式被转换为大写形式，但嵌入串例外。嵌入串的一个例子是“LEFT('Hello',l)”字符表达式中的 "Hello"。

 •	   字符表达式中任何缩写的 Visual FoxPro 关键字都被扩展为非缩写形式。

 •	   把所有分隔字段名与别名的 -> 操作符转换为句点。

 •	   检查字符表达式中所有的 Visual FoxPro 命令或函数的语法，但并不计算它们的值。若语法不正确，Visual FoxPro 将产生语法错误信息。NORMALIZE( ) 不检查字符表达式中字段、表、内存变量、用户自定义函数或其他引用是否存在。

例如，用户可在“表达式生成器”中输入如下索引表达式：

UPPE(cust->lname) + UPPE(cust->fname)

虽然这是一个有效的 Visual FoxPro 索引关键字表达式，但很难使其与 KEY( ) 这样的 Visual FoxPro 函数的返回值作比较。对于上述表达式，NORMALIZE( ) 将返回下面的字符串：

UPPER(CUST.LNAME) + UPPER(CUST.FNAME)

这可以很容易地与 KEY( ) 这样的函数返回值相比较。本例子可以判断一个由用户提供索引表达式的索引或索引标识是否存在。


请参阅

EVALUATE( )，ISUPPER( )，PROPER( )，UPPER( )


NOTE 命令

请参阅	示例

在程序文件中指示注释行的开始，注释行不可执行。

语法

NOTE [Comments]

参数

Comments

指定注释。

说明

在每行注释的末尾加上一个分号(；)，说明在下一行上继续该行注释。


NOTE  Initialize the page number;
variable.

STORE 1 to gnPageNum

* Set up the loop

DO WHILE gnPageNum <= 25  && 循环 25 次

gnPageNum = gnPageNum + 1

ENDDO  && DO WHILE gnPageNum <= 25


请参阅

&&，*，MODIFY COMMAND，MODIFY FILE


NTOM( ) 函数

请参阅	示例

由一个数值表达式返回含有四位小数的货币值。

语法

NTOM(nExpression)

参数

nExpression

指定一个数值表达式， NTOM( )返回其货币值。如果 nExpression 的小数位数大于四位，则将其圆整至四位；如果少于四位，则添加 0 补齐四位。

返回值类型

货币型


* 下面示例创建了一个数值型内存变量 gnNumeric。
* TYPE( ) 函数显示 N ，标明该内存变量为
* 数值型。之后NTOM( ) 函数将其转换为货币型，
*  TYPE( ) 函数显示 Y ，标明该内存变
* 量在转换后变为货币型。

STORE 24.95 TO gnNumeric  && 创建一个数值型内存变量

CLEAR

? "gnNumeric is type: "

?? TYPE('gnNumeric')  && 显示 N，数值型值

gnNumeric= NTOM(gnNumeric)	  &&  将 gnNumeric 转换成货币型

? "gnNumeric is now type: "

?? TYPE('gnNumeric')  && 显示 Y，货币型值


请参阅

MTON( )


NumberOfElements 属性

请参阅

指定使用数组中的多少项来填充组合框或列表框控制中的列表部分。

应用于

组合框，列表框

语法

[Form.]Control.NumberOfElements[ = nTotal]

设置

nTotal

指定一个列表能包含的元素数目。

说明

设计和运行时可用。并且仅当 ListSourceType 属性设置为 5（数组）时才可用。

要限制列表中显示的数组元素数目时，NumberOfElements 非常有用。列表使用的元素从 FirstElement 属性的设置值开始，包含元素数目是 NumberOfElements 属性的设置值。


请参阅

FirstElement 属性


NUMLOCK( ) 函数

请参阅	示例

返回 Num Lock 键的当前状态，或者设置 Num Lock 键的状态为开或关。

语法

NUMLOCK([lExpression])

参数

lExpression

打开或关闭 NUM LOCK 键。若 lExpression 为“真”(.T.)，则 NUM LOCK 键打开；否则 NUM LOCK 键关闭。在发出 NUMLOCK(.T.) 或 NUMLOCK(.F.) 之前，NUMLOCK( ) 返回一个代表 NUM LOCK 键设置的逻辑值。

返回值类型

逻辑型

说明

若 NUM LOCK 键为打开状态，NUMLOCK( ) 返回“真”(.T.)（在数字键盘上击键将返回一个数字），否则 NUM LOCK( ) 返回“假”(.F.)（在数字键盘上击键将移动光标）。

在 FoxPro for Macintosh 中，可以按 SHIFT+CLEAR 键改变 NUM LOCK 键设置。


* 在下例中，用等号 (=) 来执行 NUMLOCK( ) 函数，
* 而不返回任何值。

gcOldLock = NUMLOCK( )  && 保存初始设置。

WAIT WINDOW 'Press a key to turn Num Lock on'

= NUMLOCK(.T.)  && 打开 Num Lock。

WAIT WINDOW 'Press a key to turn Num Lock off'

= NUMLOCK(!NUMLOCK( ))  && 置 NUM LOCK 为原先值的相反值。

WAIT WINDOW 'Press a key to restore original Num Lock setting'

= NUMLOCK(gcOldLock)	  && 返回初始设置。


请参阅

CAPSLOCK( )，INSMODE( )


NVL( ) 函数

请参阅	示例

从两个表达式返回一个非 null 值。

语法

NVL(eExpression1, eExpression2)

参数

eExpression1, eExpression2

如果 eExpression1 的计算结果为 null 值，则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值，则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值，则 NVL( ) 返回 .NULL.。

返回值类型

字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值

说明

在不支持 null 值或 null 值无关紧要的情况下，可以使用 NVL( ) 来移去计算或操作中的 null 值。


* 下面示例创建了一个名为 glMyNull 的内存变量，它含
* 有 null 值。NVL( ) 用来从 glMyNull 和另一个
* 表达式返回一个非 null 值。

STORE .NULL. TO glMyNull  && 包含 null 值的内存变量

CLEAR

? NVL(.T., glMyNull)  && 显示 .T.

? NVL(glMyNull, glMyNull)  && 显示 .NULL.


请参阅

ISNULL( )，SET NULL


Object 属性

请参阅

提供访问 OLE 对象属性和方法的能力，OLE 对象属性和方法由 OLE 服务器提供。

应用于

OLE 绑定型控制，OLE 容器控制

语法

OLEObject.Object[.Property] [= eValue]
— 或者 —
OLEObject.Object[.Method]

设置

Property

指定 OLE 服务器提供给 OLE 对象的属性。

eValue

指定 OLE 服务器提供给 OLE 对象的属性值。

Method

指定 OLE 服务器提供给 OLE 对象的方法。

说明

设计时不可用。运行时，根据 OLE 服务器来决定 OLE 对象的此属性为只读还是读写。

有关 OLE 服务器所支持的属性和方法的详细内容，请参阅有关创建此 OLE 对象的应用程序的文档。例如，如果 OLE 对象是一个 Microsoft Excel 工作簿，那么请参阅有关 Excel 文档，获得 Excel（一个支持 OLE 的应用程序）所支持的属性与方法。


请参阅

CREATEOBJECT( )，GETOBJECT( )


OBJNUM( ) 函数

请参阅

返回 @ ... GET 控制中某一对象的编号。包含此函数是为了提供向后兼容性。可用 TabIndex 属性代替。

语法

OBJNUM(MemVarName [, nReadLevel])

参数

MemVarName

指定与控制相关的内存变量、数组元素或字段的名称。

nReadLevel

为控制指定一当前读层次之外的其他可选读层次号。在 READ 执行期间调用的例程中发出 @ ... GET 和一个 READ 命令，将创建一个嵌套的 READ 命令。READ 命令可嵌套五层。若省略 nReaddevel，OBJNUM( ) 将返回当前读层次上的 @ ... GET 控制编号。

返回值类型

数值型

说明

OBJNUM( ) 返回的编号，对应于控制在一系列控制中的创建次序。可以使用 @ ... GET 和 @ ... EDIT 来创建控制。有关用面向对象程序设计方法创建控制的详细内容，请参阅控制和对象。


请参阅

CLEAR EVENTS，TabIndex 属性


OBJTOCLIENT( ) 函数

请参阅	示例

返回一个控制或对象相对于表单的位置或尺寸。

语法

OBJTOCLIENT(ObjectName, nPosition)

参数

ObjectName

指定控制或对象名称，返回其表单位置。

nPosition

指定返回对象或控制的哪一个表单位置或尺寸。下表列出了 nPosition 的值，以及返回的相应位置或尺寸。

nPosition	位置或尺寸
1	顶边
2	左边
3	宽度
4	高度
返回值类型

数值型

说明

OBJTOCLIENT( ) 返回一个控制或对象相对于所在表单客户区的位置或尺寸。例如，一个控制或对象可以放在一个页框中的页面上，而这个页框又放在一个表单上。Top、Left、Width 和 Height 属性将返回控制或对象相对于所在页面的位置和尺寸。但是也可以使用 OBJTOCLIENT( ) 来确定控制或对象相对于页所在表单的位置和尺寸。

OBJTOCLIENT( ) 返回值以象素为单位。


* 下面的示例中，使用 OBJTOCLIENT( ) 来显示两个复选框相对于它们
*  所在表单的位置和尺寸。Top、Left、Width 和 Height 属性
* 用来显示两个复选框相对于它们所在页框的位置和尺寸。

* 在表单上放置一个命令按钮和一个页框，用 PageCount 属性指定页框
*  上的页数。Tab 属性被设置为“真”(.T.)，来指定页框中每一页都有
* 选项卡。复选框被放在每一页的不同位置之上。

*单击一个复选框时，将执行该复选框的 Click 过程。
* 若复选框被选中，Top、Left、Width 和 Height
*  属性将显示复选框相对于它们所在页框的位
* 置和尺寸，并且 OBJTOCLIENT( ) 用来显示复选框
* 相对于它们所在表单的位置和尺寸。
* 若清除复选框，则 Visual FoxPro 主窗口被清除。

CLEAR

STORE _DBLCLICK TO gnDblClick  && 保存双击值

STORE 0.05 TO _DBLCLICK  && 使双击不可能发生

frmMyForm = CREATEOBJECT('Form')  &&  创建表单

frmMyForm.Closable = .f.  &&  废止控制的菜单框

frmMyForm.Move(150,10)  && 移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject('pgfPageFrame1','pgfMyPageFrame')  && 添加页框

frmMyForm.pgfPageFrame1.Page1.AddObject('chkCheckBox1','chkMyCheckBox1')

frmMyForm.pgfPageFrame1.Page2.AddObject('chkCheckBox2','chkMyCheckBox2')

frmMyForm.cmbCommand1.Visible =.T.  && “退出”命令按钮可见

frmMyForm.pgfPageFrame1.Visible =.T.  && 页框可见

frmMyForm.pgfPageFrame1.Page1.chkCheckBox1.Visible =.T.

frmMyForm.pgfPageFrame1.Page2.chkCheckBox2.Visible =.T.

frmMyForm.SHOW  &&  显示表单

READ EVENTS  && 启动事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  &&  命令按钮标题

Cancel = .T.  && 默认的取消命令按钮(ESC)

Left = 125  &&  命令按钮列

Top = 210  &&  命令按钮行

Height = 25  &&  命令按钮高

PROCEDURE Click

CLEAR EVENTS  &&停止事件处理，关闭表单

CLEAR  &&清除Visual FoxPro主窗口

STORE gnDblClick TO _DBLCLICK  &&恢复双击值

ENDDEFINE

DEFINE CLASS pgfMyPageFrame AS PageFrame  &&创建页框

Left = 10  &&页框列

Top = 10  &&页框行

Height = 175  &&页框高

Width = 350  &&页框宽

PageCount = 2  && 页框上有两页面

Tabs = .T.  && 选项卡可见

ENDDEFINE

DEFINE CLASS chkMyCheckBox1 AS CheckBox  && 创建第一个复选框

Top = 0

Width = 200

Caption = 'Display Position'

PROCEDURE Click

DO CASE

CASE ThisForm.pgfPageFrame1.Page1.chkCheckBox1.Value = 0

ACTIVATE SCREEN

CLEAR

CASE ThisForm.pgfPageFrame1.Page1.chkCheckBox1.Value = 1

ACTIVATE SCREEN

CLEAR

? 'Positions relative'

? 'to PageFrame:'

?

? 'Top: '

?? ALLTRIM(STR;

(ThisForm.pgfPageFrame1.Page1.chkCheckBox1.Top))

? 'Left: '

?? ALLTRIM(STR;

(ThisForm.pgfPageFrame1.Page1.chkCheckBox1.Left))

? 'Width: '

?? ALLTRIM(STR;

(ThisForm.pgfPageFrame1.Page1.chkCheckBox1.Width))

? 'Height: '

?? ALLTRIM(STR;

(ThisForm.pgfPageFrame1.Page1.chkCheckBox1.Height))

?

? 'Positions relative'

? 'to Form:'

?

? 'Top: '

?? ALLTRIM(STR(OBJTOCLIENT;
(ThisForm.pgfPageFrame1.Page1.chkCheckBox1,1)))

? 'Left: '

?? ALLTRIM(STR(OBJTOCLIENT;

(ThisForm.pgfPageFrame1.Page1.chkCheckBox1,2)))

? 'Width: '

?? ALLTRIM(STR(OBJTOCLIENT;

(ThisForm.pgfPageFrame1.Page1.chkCheckBox1,3)))

? 'Height: '

?? ALLTRIM(STR(OBJTOCLIENT;
(ThisForm.pgfPageFrame1.Page1.chkCheckBox1,4)))

ENDCASE

ENDDEFINE

DEFINE CLASS chkMyCheckBox2 AS CheckBox  && 创建第二个复选框

Top = 30

Left = 175

Width = 200

Caption = 'Display Position'

PROCEDURE CLICK

DO CASE

CASE ThisForm.pgfPageFrame1.Page2.chkCheckBox2.Value = 0

ACTIVATE SCREEN

CLEAR

CASE ThisForm.pgfPageFrame1.Page2.chkCheckBox2.Value = 1

ACTIVATE SCREEN

CLEAR

? 'Positions relative'

? 'to PageFrame:'

?

? 'Top: '

?? ALLTRIM(STR;
(ThisForm.pgfPageFrame1.Page2.chkCheckBox2.Top))

? 'Left: '

?? ALLTRIM(STR;

(ThisForm.pgfPageFrame1.Page2.chkCheckBox2.Left))

? 'Width: '

?? ALLTRIM(STR;

(ThisForm.pgfPageFrame1.Page2.chkCheckBox2.Width))

? 'Height: '

?? ALLTRIM(STR;
(ThisForm.pgfPageFrame1.Page2.chkCheckBox2.Height))

?

? 'Positions relative'

? 'to Form:'

?

? 'Top: '

?? ALLTRIM(STR(OBJTOCLIENT;
(ThisForm.pgfPageFrame1.Page2.chkCheckBox2,1)))

? 'Left: '

?? ALLTRIM(STR(OBJTOCLIENT;

(ThisForm.pgfPageFrame1.Page2.chkCheckBox2,2)))

? 'Width: '

?? ALLTRIM(STR(OBJTOCLIENT;

(ThisForm.pgfPageFrame1.Page2.chkCheckBox2,3)))

? 'Height: '

?? ALLTRIM(STR(OBJTOCLIENT;
(ThisForm.pgfPageFrame1.Page2.chkCheckBox2,4)))

ENDCASE

ENDDEFINE


请参阅

Height 属性，Left 属性，Top 属性，Width 属性


OBJVAR( ) 函数

请参阅

返回与 @ ... GET 控制相关的内存变量、数组元素或字段名。包含此函数是为了提供向后兼容性，可用 Name 属性代替。

语法

OBJVAR([nControlNumber [, nReadLevel]])

参数

nControlNumber

指定控制，OBJVAR( ) 函数返回其内存变量、数组元素或字段。此参数对应于控制的创建次序。例如，指定 nControlNumber 为 1 可以返回第一个控制的内存变量、数组元素或字段值，指定 2 可以返回第二个控制的有关数据，依此类推。如果 nControlNumber 大于控制数目，则 OBJVAR( ) 返回一个空字符串。

如果省略 nControlNumber 参数，OBJVAR( ) 将返回当前活动控制的内存变量、数组元素或字段。可以使用 _CUROBJ 来决定当前的活动控制。

nReadLevel

为控制指定一当前读层次之外的其他可选读层次号。在 READ 执行期间调用的例程中发出 @ ... GET 和一个 READ 命令时，将创建一个嵌套的 READ 命令。READ 命令可嵌套五层。若省略 nReaddevel，OBJNUM( ) 将返回当前读层次上的 @ ... GET 控制编号。

返回值类型

字符型

说明

有关控制的详细内容，请参阅控制和对象。

OBJVAR( ) 在返回的内存变量和数组元素名称前加上一个 M 与一个句点(M.)作为前缀。OBJVAR( ) 在返回的字段名前加上表别名和一个句点作为前缀。


请参阅

控制和对象，Name 属性


OCCURS( ) 函数

请参阅	示例

返回一个字符表达式在另一个字符表达式中出现的次数。

语法

OCCURS(cSearchExpression, cExpressionSearched)

参数

cSearchExpression

指定字符表达式，OCCURS( ) 在 cExpressionSearched 中查找该表达式。

cExpressionSearched

指定一字符表达式，OCCURS( ) 在其中查找 cSearchExpression 字符表达式。

返回值类型

数值型

说明

如果没有在 cExpressionSearched 中找到 cSearchExpression，OCCURS( ) 返回 0。


STORE 'abracadabra' TO gcstring

CLEAR

? OCCURS('a', gcstring)  && 显示 5

? OCCURS('b', gcstring)  && 显示 2

? OCCURS('c', gcstring)  && 显示 1

? OCCURS('e', gcstring)  && 显示 0


请参阅

$，INLIST( )


OEMTOANSI( ) 函数

请参阅

将字符表达式中的每个字符转换成 ANSI 字符集中的相应字符。包含此函数是为了提供向后兼容性。

语法

OEMTOANSI(cExpression)

参数

cExpression

指定要转换为 ANSI 字符集中相应字符的字符。

如果 cExpression 中的某字符没有相应的 ANSI 字符（例如，MS-DOS 中的横线字符在 ANSI 字符集中就没有对应字符），则将其转换为一个相似的 ANSI 字符。

说明

仅用于 Visual FoxPro 和 FoxPro for Macintosh。

可以使用 OEMTOANSI( ) 函数将 FoxPro for MS-DOS 中的数据转换为 Visual FoxPro 和 FoxPro for Macintosh 中的数据。


请参阅

ANSITOOEM( )，CHRTRAN( )，SYS(15) - 字符转换


OLDVAL( ) 函数

请参阅	示例

返回字段的初始值，该字段值已被修改但还未更新。

语法

OLDVAL(cExpression [, cTableAlias | nWorkArea])

参数

cExpression

指定一表达式，OLDVAL( ) 函数从表或远程数据源中返回其初始值。一般情况下，cExpression 是一个字段，或者是一个表达式，此表达式包含了表或远程数据源中一系列字段。

cTableAlias

指定表或临时表的别名，从中返回字段初始值。

nWorkArea

指定表或临时表所在的工作区，从中返回字段初始值。

返回值类型

字符型、货币型、日期型、日期时间型、双精度型、浮点型、整型、逻辑型、数值型或备注型。

说明

OLDVAL( ) 函数返回 Visual FoxPro 表或临时表中记录字段的初始值，必须用 CURSORSETPROP( ) 命令对该表启用行缓冲或表缓冲。

如果数据库中的表或临时表具有有效性规则，那么 OLDVAL( ) 返回字段初始值时不必启用行缓冲或表缓冲。

如果在启用行缓冲的情况下把记录指针移到另外的记录上，或发出 TABLEUPDATE( ) 命令执行对记录的更改，或者发生了结束一个事务这样的行为而引起更新时，将更新字段，其初始值不再可用。

OLDVAL( ) 返回的数据类型取决于 cExpression 所指定的表达式。

如果不带 cTableAlias 或 nWorkArea 参数而发出 OLDVAL( )，则返回当前选定工作区中所打开表或临时表字段的初始值。


* 下面的示例演示了如何使用 OLDVAL( ) 从缓冲表中返回字段的初始值。
* 先创建一个名为 employees 的表，再使用 INSERT-SQL 向
*  clastlName 字段中插入“Smiths”值。

* MULTILOCKS 设置为 ON，需要有表缓冲。CURSORPROP( )
* 命令用于将缓冲模式设置为优化的表缓冲 (5)。

*显示 ClastName 字段的初始值 (Smith)，然后用 REPLACE
*  语句对其进行修改。显示 ClastName 字段的新值 (JoneS)，
* 之后使用 OLDVAL( ) 来显示 ClastName 字段的初始值
*  (Smith)。用 TABLEUPDATE( ) 执行对表的修改，
* 最后显示 ClastName 字段的更新值 (Jones)。

CLOSE DATABASES

CREATE TABLE employee (cLastName C(10))

APPEND BLANK

INSERT INTO employee (cLastName) VALUES ('Smith')

SET MULTILOCKS ON  && 必须设置为 ON 来启动表缓冲

= CURSORSETPROP('Buffering', 5, 'employee' )  && 启动表缓冲

CLEAR

? 'Original cLastName value: '

?? cLastName  && 显示当前 ClastName 值(Smits)

REPLACE cLastName WITH 'Jones'

? 'New cLastName value: '

?? cLastName  &&   显示ClastName的新值(Jones)

? 'cLastName value returned by OLDVAL( ): '

?? OLDVAL('cLastName', 'employee') &&  初始值(Smith)

= TABLEUPDATE(.T.)

? 'Updated cLastName value: '

?? cLastName  &&  显示当前ClastName值(Jones)


请参阅

CURVAL( )，GETFLDSTATE( )，TABLEREVERT( )，TABLEUPDATE( )，CURSORSETPROP( )


OLE Bound 控制
OLE 绑定型控制

请参阅	属性	事件	方法

创建一个 OLE 绑定型控制。

语法

OLEBoundControl

说明

在表单或报表中，一个 OLE 绑定型控制允许在表中的通用字段上显示一个 OLE 对象（例如来源于 Microsoft Word 或 Microsoft Excel）的内容。

与 OLE 容器控制不同，可插入的 OLE 对象没有自己的事件集合。OLE 绑定型控制与 OLE 容器控制的另一个不同点是，它与一个 Visual FoxPro 表的通用字段连接在一起。

有关 Visual FoxPro 中 OLE 对象的详细内容，请参阅“使用 Visual FoxPro”一节的“数据共享”部分，以及《开发指南》的第十八章“添加 OLE”。


 属性

AutoActivate	AutoSize	BaseClass
ClassLibrary	Class	Comment
ControlSource	DocumentFile	DragIcon
DragMode	Enabled	Height
HelpContextId	HostName	Left
MousePointer	Name	Object
OLEClass	OLELCID 属性	OLETypeAllowed
ParentClass	Sizable	Stretch
Sizable	Stretch	TabIndex
TabIndex	TabStop	Tag
Top	Value	Visible
Width


 事件

Destroy	DragDrop	DragOver
Error	GotFocus	Init
LostFocus	Moved	Resize
UIEnable


 方法

CloneObject	DoVerb	Drag
Move	Refresh	SaveAsClass
SetFocus	ZOrder


请参阅

APPEND GENERAL，CREATE FORM，CREATE CLASS，DEFINE CLASS，MODIFY GENERAL，OLE 容器控制


OLE Container 控制
OLE 容器控制

请参阅	属性	事件	方法	示例

创建一个 OLE 容器控制。

语法

OLEControl

说明

OLE 容器控制允许向应用程序中加入 OLE 对象。OLE 对象包括 OLE 控制（.OCX 文件），或者其他应用程序（例如 Microsoft Word 和 Microsoft Excel）创建的可插入 OLE 对象。与 OLE 控制（.OCX 文件）不同的是，可插入 OLE 对象没有自己的事件集合。OLE 容器控制与 OLE 绑定型控制也不同，它不与 Visual FoxPro 表的一个通用字段相连接。

有关 Visual FoxPro 中 OLE 对象的详细内容，请参阅“使用 Visual FoxPro”一节的“共享数据”部分，以及《开发指南》的第十八章“添加 OLE”。

附注

专业版提供一些可能用到的 OLE 控制（.OCX 文件）。有关详细内容，请参阅专业版“帮助”中的“OLE 控制概述”。


 属性

Align	AutoActivate	AutoSize
BaseClass	Cancel	Class
ClassLibrary	Comment	Default
DocumentFile	DragIcon	DragMode
Enabled	Height	HelpContextID
HostName	Left	MousePointer
Name	Object	OLEClass
OLELCID 属性	OLETypeAllowed	Parent
OLETypeAllowed	Parent	ParentClass
ParentClass	ReadObject	Sizable
Stretch	TabIndex	TabStop
Tag	Top	Visible
Width


 事件

Destroy	DragDrop	DragOver
Error	GotFocus	Init
LostFocus	Moved	Resize
UIEnable


 方法

CloneObject	DoVerb	Drag
Move	Refresh	SaveAsClass
SetFocus	ZOrder


*  在下面的示例中，先将一个 OLE 容器控制加入表单，然后使用
*  OLEClass 和 DocumentFile 属性将 Excel 作为 OLE
*  服务器，并将一个 Excel 工作簿指定为要编辑的文件。

* DocumentFile 属性指定了 C 驱动器中 Excel 路径下一个名为
*  BOOK1.XLS 的工作簿。如果在 DocumentFile 属性中
* 指定的文件或路径不存在，则本例程不能正常运行，
* 这时需要修改 DocumentFile 来指明一个存在
* 的路径和工作簿文件。

* DoVerb 方法激活这个工作簿，以便进行编辑。

frmMyForm = CREATEOBJECT('Form')  && 创建表单

frmMyForm.Closable = .F.  && 废止控制菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject("oleObject","oleExcelObject")  && 添加 OLE 对象

frmMyForm.cmdCommand1.Visible=.T.  && 显示“Quit”命令按钮

frmMyForm.oleObject.Visible=.T.  && 显示 OLE 控制

frmMyForm.oleObject.Height = 50  &&  OLE 控制高度

frmMyForm.Show  && 显示表单

frmMyForm.oleObject.DoVerb(-1)  && 编辑为 -1

READ EVENTS  &&  启动事件处理

DEFINE CLASS oleExcelObject as OLEControl

OleClass ="Excel.Sheet"  && 服务器名

DocumentFile = "C:\EXCEL\BOOK1.XLS"  && 该文件必需存在

ENDDEFINE

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.    默认取消命令按钮(ESC)

Left = 125  && 命令按钮列

Top = 210  && 命令按钮行

Height = 25  && 命令按钮高

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

ENDDEFINE


请参阅

APPEND GENERAL，CREATE FORM，CREATE CLASS，DEFINE CLASS，MODIFY GENERAL，OLE 绑定型控制


OLEClass 属性

请参阅

返回当前对象创建时所在的服务器名称。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Control.OLEClass[ = cName]

设置

cName

当前对象创建时所在的服务器名称。

说明

设计和运行时只读。

附注

使用 CREATEOBJECT( ) 函数创建 OLE 对象时，可以在代码中设置 OLEClass。

也可以在使用 APPEND GENERAL 命令创建 OLE 对象时，在代码中设置 OLEClass。


请参阅

APPEND GENERAL，CREATEOBJECT( )


OLELCID 属性

请参阅

返回 OLE 绑定型控制或 OLE 容器控制的 OLE 环境 ID 值。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Control.OLELCID

说明

设计时和运行时只读。

OLELCID 属性包含代表 OLE 绑定型控制或 OLE 容器控制的 OLE 环境 ID 值的数值。

当 OLE 绑定型控制或 OLE 容器控制放置在表单或 Visual FoxPro 主窗口中时，它们的环境 ID 值由表单或 Visual FoxPro 主窗口的 DefOLELCID 属性决定。

当 OLE 绑定型控制或 OLE 容器控制放置在表单或 Visual FoxPro 主窗口中时，表单或 Visual FoxPro 主窗口的 DefOLELCID 属性为 0。控制使用当前的 Visual FoxPro 环境 ID 值 (LCID)。使用 SYS(3004) 可以决定当前的 Visual FoxPro 环境 ID 值。使用 DefOLELCID 属性可以指定表单的环境 ID 值。

有关环境 ID 值的列表，请参阅 SYS(3005)。

附注

OLELCID 属性仅影响 OLE 控制显示的用户接口语言，而不是 OLE 自动化命令语言。OLE 自动化命令语言仅受全局环境 ID 值的影响，请参阅 SYS(3005)。OLEClass。


请参阅

DefOLELCID 属性，SYS(3005) - 设置环境 ID 值


OLETypeAllowed 属性

请参阅

返回控制中所包含 OLE 对象的类型（嵌入或链接）。

应用于

OLE 绑定型控制，OLE 容器控制

语法

Control.OLETypeAllowed[ = nValue]

设置

nValue

返回一个值，它标明包含于控制中的 OLE 对象的类型（嵌入或链接）。可能的值为 0（链接）、1（嵌入）、-1（不包含 OLE 对象的 OLE 绑定型控制）和 -2（OLE 控制 (.OCX)）。

说明

设计和运行时只读。

仅当为 DocumentFile 属性设置值时，OLETypeAllowed 属性才有用。

附注

可以使用 DEFINE CLASS 命令在代码中设置 OLE TypeAllowed 属性，从而创建一个链接的 OLE 对象。


请参阅

DEFINE CLASS，DocumentFile 属性


ON APLABOUT 命令

请参阅	示例

指定当用户在 Apple 菜单上选择 About（关于）时执行的命令。

语法

ON APLABOUT [Command]

参数

Command

指定当在 Apple 菜单上选择 About（关于）时执行的 FoxPro for Macintosh 命令。

说明

仅用于 FoxPro for Macintosh。使用 ON APLABOUT 与 SET APLABOUT 命令可以显示为应用程序而创建的对话框。

不带可选参数使用 ON APLABOUT，在选中 About（关于）菜单项时，将显示默认的“关于 Microsoft for Macintosh”对话框。


*  在 FoxPro for Macintosh 中，本示例用一个示例应用程序菜单项取代了
* Apple 菜单中的“关于 Microsoft FoxPro for Macintosh”菜单项。
* 当选中此菜单项时，执行 ON APLABOUT 中的
*  WAIT 命令并且显示一个窗口。

SET APLABOUT PROMPT 'About My Application...'

ON APLABOUT WAIT WINDOW 'This is My Application'


请参阅

ON MACHELP，SET APLABOUT，SET MACHELP


ON BAR 命令

请参阅	示例

指定从菜单中选择特定菜单项时激活的菜单或菜单栏。

语法

ON BAR nMenuItemNumber OF MenuName1
[ACTIVATE POPUP MenuName2
| ACTIVATE MENU MenuBarName]

参数

nMenuItemNumber OF MenuName1

指定菜单项的编号及所在菜单，该菜单项将激活其他菜单或菜单栏。菜单中的每一项都可以拥有指定给它的另外一个菜单或菜单栏。

凡拥有指定菜单或菜单栏的菜单项右部都有一个箭头。该箭头表示选中此项时将激活额外的菜单或菜单栏。如果使用 DEFINE POPUP ... MARGIN 定义菜单，则在每一菜单项上为层叠式子菜单箭头留出空间。若在创建菜单时不使用 MARGIN 子句，层叠式子菜单箭头可能会改写菜单项最后一个字符。

ACTIVATE POPUP MenuName2

指定选择该菜单项时激活的菜单名称。使用不带 ACTIVATE POPUP 的 ON BAR 命令，可以从菜单项中释放菜单。

ACTIVATE MENU MenuBarName

指定选择该菜单项时激活的菜单栏名称。使用不带 ACTIVATE POPUP 的 ON BAR 命令，可以从菜单项中释放菜单栏。

说明

一个可以显示和激活其他菜单的菜单称为层叠式子菜单。当选中菜单中的菜单项时，使用 ON SELECTION BAR 或 ON SELECTION POPUP 命令可以执行一条命令。

菜单或菜单栏可以是用户自定义的（用 DEFINE POPUP 和 DEFINE MENU 创建），也可以是 Visual FoxPro 菜单系统的一部分。


* 下面的示例演示了一个层叠式子菜单系统。先创建一个
* 名为 mnuDinner 的带有两个菜单栏标题的菜单栏，每个标题
* 都用 ON PAD 命令激活名为 popMainCourse
* 或 popDessert 的菜单。名为 popMainCourse
* 和 popDessert 的菜单分别使用三条 ON BAR 命令为其
* 菜单项列表指定名为 popBurger、popPizza 和 popPie 的
* 附加菜单。还使用两条 ON BAR 命令为 popOlives 和
* popPie 菜单项指定了附加菜单。

* 选中一个菜单时，ON SELECTION POPUP ALL
* 将执行一个名为 yourchoice 的过程来激活
* 一个窗口并显示该选择。根据 POPUP( ) 和 PROMPT( ) 所返
* 回的菜单名和菜单项的内容（文本）来确定此次选择。

DEFINE WINDOW wOrder FROM 10,0 TO 13,39

DEFINE MENU mnuDinner

DEFINE PAD padOne OF mnuDinner PROMPT '\<Main Course' KEY ALT+M, ''

DEFINE PAD padTwo OF mnuDinner PROMPT '\<Dessert'     KEY ALT+D, ''

ON PAD padOne OF mnuDinner ACTIVATE POPUP popMainCourse

ON PAD padTwo OF mnuDinner ACTIVATE POPUP dessert

DEFINE POPUP popMainCourse MARGIN MESSAGE ;

'We have burgers and pizza today'

DEFINE BAR 1 OF popMainCourse PROMPT '\<Hamburgers'

DEFINE BAR 2 OF popMainCourse PROMPT '\<Pizza'

ON BAR 1 OF popMainCourse ACTIVATE POPUP burger

ON BAR 2 OF popMainCourse ACTIVATE POPUP pizza

DEFINE POPUP burger MARGIN MESSAGE ;

'What would you like on your burger?'

DEFINE BAR 1 OF burger PROMPT '\<Ketchup'

DEFINE BAR 2 OF burger PROMPT '\<Mustard'

DEFINE BAR 3 OF burger PROMPT '\<Onions'

DEFINE BAR 4 OF burger PROMPT '\<Pickles'

DEFINE POPUP pizza MARGIN MESSAGE ;

'Here are the available toppings'

DEFINE BAR 1 OF pizza PROMPT '\<Anchovies'

DEFINE BAR 2 OF pizza PROMPT '\<Green Peppers'

DEFINE BAR 3 OF pizza PROMPT '\<Olives'

DEFINE BAR 4 OF pizza PROMPT '\<Pepperoni'

ON BAR 3 OF pizza ACTIVATE POPUP olives

DEFINE POPUP olives MARGIN

DEFINE BAR 1 OF olives PROMPT '\<Black' MESSAGE 'Black olives?'

DEFINE BAR 2 OF olives PROMPT '\<Green' MESSAGE 'Green olives?'

DEFINE POPUP dessert MARGIN MESSAGE 'Our dessert offerings'

DEFINE BAR 1 OF dessert PROMPT '\<Brownies'

DEFINE BAR 2 OF dessert PROMPT '\<Cookies'

DEFINE BAR 3 OF dessert PROMPT '\<Ice Cream'

DEFINE BAR 4 OF dessert PROMPT '\<Pie'

ON BAR 4 OF dessert ACTIVATE POPUP pie

DEFINE POPUP pie MARGIN MESSAGE 'What kind of pie?'

DEFINE BAR 1 OF pie PROMPT '\<Blueberry'

DEFINE BAR 2 OF pie PROMPT '\<Cherry'

DEFINE BAR 3 OF pie PROMPT '\<Peach'

DEFINE BAR 4 OF pie PROMPT '\<Rhubarb'

ON SELECTION POPUP ALL DO yourchoice

ACTIVATE MENU mnuDinner

PROCEDURE yourchoice

ACTIVATE WINDOW wOrder

CLEAR

DO CASE

CASE POPUP( ) = 'BURGER'

@ 0,0 SAY 'A ' + POPUP( ) + ' order:'

@ 1,0 SAY 'You ordered a burger with ' + LOWER(PROMPT( ))

CASE POPUP( ) = 'PIZZA'

@ 0,0 SAY 'A ' + POPUP( ) + ' order:'

@ 1,0 SAY 'You ordered a pizza with ' + LOWER(PROMPT( ))

CASE POPUP( ) = 'OLIVES'

@ 0,0 SAY 'A ' + POPUP( ) + ' order:'

@ 1,0 SAY 'You ordered a pizza with ' ;

+ LOWER(PROMPT( )) + ' olives'

CASE POPUP( ) = 'DESSERT'

@ 0,0 SAY 'A ' + POPUP( ) + ' order:'

@ 1,0 SAY 'You ordered ' + LOWER(PROMPT( )) + ' for dessert'

CASE POPUP( ) = 'PIE'

@ 0,0 SAY 'A ' + POPUP( ) + ' order:'

@ 1,0 SAY 'You ordered ' + LOWER(PROMPT( )) + ' pie'

ENDCASE

WAIT WINDOW

DEACTIVATE WINDOW wOrder

RETURN


请参阅

ACTIVATE MENU，DEFINE BAR，DEFINE MENU，DEFINE POPUP，ON SELECTION BAR，ON SELECTION POPUP


ON ERROR 命令

请参阅	示例

指定当出现错误时执行的命令。

语法

ON ERROR
[Command]

参数

Command

指定应执行的 Visual FoxPro 命令。执行此命令后，程序将从引起错误的程序行的下一行重新开始执行。但如果错误处理过程中包含 RETRY，则重新执行引起错误的程序行。

如果命令指定了错误出现时执行的一个过程，那么可以使用 ERROR( )，MESSAGE( )，LINENO( ) 和 PROGRAM( ) 将错误代码、错误消息、程序行号以及程序名称传递到此过程。这些信息可以用来纠正错误。

说明

若在程序运行时发生错误，Visual FoxPro 将执行 ON ERROR 中指定的命令。通常情况下，ON ERROR 使用 DO 来执行一个错误处理过程。

使用不带可选参数的 ON ERROR 命令可以恢复默认的 Visual FoxPro 错误处理程序。

ERROR 过程不可嵌套。如果在 ON ERROR 过程中又发出了 ON ERROR 命令，则恢复默认的 Visual FoxPro 错误处理程序。


ON ERROR DO errhand WITH ;
ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )

***下面这行命令会引起错误 ***

USE nodatabase

ON ERROR  && 还原系统错误处理器

PROCEDURE errhand

PARAMETER merror, mess, mess1, mprog, mlineno

CLEAR

? 'Error number: ' + LTRIM(STR(merror))

? 'Error message: ' + mess

? 'Line of code with error: ' + mess1

? 'Line number of error: ' + LTRIM(STR(mlineno))

? 'Program with error: ' + mprog


请参阅

AERROR( )，DO，ERROR( )，FUNCTION，LINENO( )，MESSAGE( )，PROGRAM( )，PROCEDURE，RETRY


ON ESCAPE 命令

请参阅	示例

指定在程序或命令运行过程中，按下 ESC 键时所执行的命令。

语法

ON ESCAPE
[Command]

参数

Command

指定 Visual FoxPro 要执行的命令。命令执行之后，程序将从按下 ESC 键时所在执行程序行的下一行重新开始执行。但如果在 ON ESCAPE 指定的过程中包含 RETRY，则重新执行按下 ESC 键时正执行的程序行。

说明

一般来说，ON ESCAPE 使用 DO 来执行一个过程。

如果在按下 ESC 时， ON ESCAPE 和 ON KEY 都有效，Visual FoxPro 将执行 ON ESCAPE 指定的命令。

若使用不带可选参数的 ON ESCAPE， 按下 ESC 键时将不执行任何命令(默认情况)。

附注

如果 SET ESCAPE 为 OFF，Visual FoxPro 将不执行 ON ESCAPE 过程。


*  下例设置了一个无限循环，但定义了一个
*  ON ESCAPE 过程来跳出循环。

SET ESCAPE ON

ON ESCAPE DO stopit

WAIT WINDOW 'Press Esc to stop loop' NOWAIT

glMoreLoop = .T.

DO WHILE glMoreLoop

ENDDO

RETURN

PROCEDURE stopit

glMoreLoop = .F.

RETURN


请参阅

INKEY( )


ON EXIT BAR 命令

请参阅

指定离开一个指定菜单项时执行的命令。

语法

ON EXIT BAR nMenuItemNumber OF MenuName [Command]

参数

nMenuItemNumber

指定菜单项编号。

MenuName

指定包含该菜单项的菜单名称。

Command

指定当离开该菜单项时所要执行的命令。如果省略 Command，将释放 ON EXIT BAR 先前指定给菜单项的命令。

说明

包含此命令是为了提供与 dBASE 的兼容性。


请参阅

ACTIVATE MENU，DEFINE BAR，DEFINE MENU，DEFINE POPUP，ON EXIT POPUP，ON SELECTION BAR，ON SELECTION POPUP


ON EXIT MENU 命令

请参阅

在离开指定菜单栏中任一菜单标题时执行一条命令。

语法

ON EXIT MENU MenuBarName [Command]

参数

MenuBarName

指定菜单栏名称。

Command

指定当离开菜单栏中任一菜单标题时所要执行的命令。如果省略 Command，将释放 ON EXIT MENU 先前指定给菜单栏的命令。

说明

包含此命令是为了提供与 dBASE 的兼容性。

任何没有用 ON EXIT PAD 指定命令的菜单标题，都将执行此处指定的命令。


请参阅

ACTIVATE MENU，DEFINE MENU，ON EXIT PAD，ON PAD，ON SELECTION MENU，ON SELECTION PAD


ON EXIT PAD 命令

请参阅

在离开指定菜单标题时执行一条命令。

语法

ON EXIT PAD MenuTitleName OF MenuBarName [Command]

参数

MenuTitleName

指定菜单标题名称。

MenuBarName

指定包含该菜单标题的菜单栏名称。

Command

指定当离开菜单标题时所要执行的命令。如果省略 Command，将释放  ON EXIT PAD 先前指定给菜单标题的命令。

说明

包含此命令是为了提供与 dBASE 的兼容性。


请参阅

ACTIVATE MENU，DEFINE MENU，ON EXIT MENU，ON PAD，ON SELECTION MENU，ON SELECTION PAD


ON EXIT POPUP 命令

请参阅

在离开指定菜单中任一菜单项时执行一条命令。

语法

ON EXIT POPUP MenuName [Command]

参数

MenuName

指定菜单名称，将为它指定命令。

Command

指定当离开菜单中任一菜单项时所要执行的命令。如果忽略 Command，将释放 ON EXIT POPUP 先前指定给菜单的命令。

说明

包含此命令是为了提供与 dBASE 的兼容性。

任何没有用 ON EXIT BAR 指定命令的菜单项都将执行这个命令。


请参阅

ACTIVATE POPUP，DEFINE BAR，DEFINE POPUP，ON BAR，ON EXIT BAR，ON SELECTION POPUP


ON KEY 命令

请参阅	示例

指定在程序运行过程中按下任一键时，所要执行的命令。

语法

ON KEY
[Command]

参数

Command

指定所要执行的命令。执行完该命令之后，程序将从按键时正执行的程序行的下一行继续执行。但如果 ON KEY 指定的过程中含有 RETRY，则重新执行按键时正执行的程序行。

说明

一般来说，ON KEY 使用 DO 来执行一个过程。

如果在 ON KEY 与 ON ESCAPE 都有效的情况下按下了 ESC，则 Visual FoxPro 将执行 ON ESCAPE 指定的命令。

若使用不带命令的 ON KEY ， 按下键时将不执行任何命令（默认情况）。


*在下面示例中，显示 customer 表中的记录。如果在显
* 示记录时按下一键，将调用一个名为 pause 的过程，
* pause 过程使用 WAIT 来挂起显示过程。

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

ON KEY DO pause

DO WHILE NOT EOF( )

? 'Customer ID: ' + cust_id

? 'Name: ' + contact

?

SKIP

ENDDO

PROCEDURE pause

STORE INKEY( ) TO HOLD

WAIT

RETURN


请参阅

INKEY( )


ON KEY = 命令

请参阅

指定在执行 READ 过程中按下一特定键或组合键时，所要执行的命令。

语法

ON KEY
[ = nKeyCode]
[Command]

参数

= nKeyCode

指定按键代码。如果按键为不可打印字符或者是组合键，可以在 nKeyCode 中包含下表中的值。

键击	nKeyCode
Alt+Q, W, E, R, T, Y, U, I, O ,P* Alt+A, S, D, F, G, H, J, K, L* Alt+Z, X, C, V, B, N, M*	272 - 281 286 - 294 300 - 306
F1 到 F10 功能键 Home Up Arrow	315 - 324 327 328
Page Up Left Arrow Right Arrow	329 331 333
End Down Arrow Page Down	335 336 337
Ins (对于 Macintosh, Help) Del Shift+F1 to Shift+F10	338 339 340 - 349
Ctrl+F1 to Ctrl+F10 Alt+F1 to Alt+F10* Ctrl+Print Scrn	350 - 359 360 - 369 370
Ctrl+Left Arrow Ctrl+Right Arrow Ctrl+End	371 372 373
Ctrl+Page Down Ctrl+Home Alt+1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =* Ctrl+Page Up	374 375 376 - 387 388
* 在 FoxPro for Macintosh 中，用 CTRL+OPTION 替代 ALT。
Command

指定按下单个键或组合键时所要执行的命令。

说明

包含此命令是为了提供向后兼容性。在一个时刻只能有一条 ON KEY= 命令活动。可以使用 ON KEY LABEL 命令执行多个按键或组合键的命令。

一般说来，ON KEY= 使用 DO 来执行一个过程。

如果 READ 无效时按下了特定的键或组合键，Visual FoxPro 将不执行 ON KEY= 命令。


请参阅

INKEY( )，ON KEY LABEL


ON KEY LABEL 命令

请参阅	示例

指定当按下特定键或组合键，或者单击鼠标按钮时所要执行的命令。

语法

ON KEY [LABEL KeyLabelName] [Command]

参数

LABEL KeyLabelName

为键指定键标记，KeyLabelName 是键上的字母或数字或者指定给该键的特殊名称。下表列出了特殊的键标记名称。后面表中列出了 FoxPro for Macintosh 中例外的标记。

Visual FoxPro 键标记指定值：

键	键标记
	LEFTARROW
	RIGHTARROW
	UPARROW
	DNARROW
Home	HOME
End	END
Page Up	PGUP
Page Down	PGDN
Del	DEL
Backspace	BACKSPACE
Spacebar	SPACEBAR
Ins	INS
Tab	TAB
Shift Tab	BACKTAB
Enter	ENTER
F1 到 F12	F1, F2, F3 ...
Ctrl+F1 到 Ctrl+F12	Ctrl+F1, Ctrl+F2 ...
Shift+F1 到 Shift+F12	Shift+F1, Shift+F2 ...
Alt+F1 到 Alt+F12	Alt+F1, Alt+F2, Alt+F3 ...
Alt+0 到 Alt+9	Alt+0, Alt+1, Alt+2 ...
Alt+A 到 Alt+Z	Alt+A, Alt+B, Alt+C ...
Ctrl+Left Arrow	Ctrl+LEFTARROW
Ctrl+Right Arrow	Ctrl+RIGHTARROW
Ctrl+Home	Ctrl+HOME
Ctrl+End	Ctrl+END
Ctrl+Page Up	Ctrl+PGUP
Ctrl+Page Down	Ctrl+PGDN
Ctrl+A 到 Ctrl+Z	Ctrl+A, Ctrl+B, Ctrl+C ...
CTRL+0	CTRL+0
Right Mouse Button	RIGHTMOUSE
Left Mouse Button	LEFTMOUSE
Mouse Button	MOUSE
Esc	ESC
FoxPro for Macintosh 例外键标记

键	键标记
Delete	DEL
Return	RETURN
	CMD or Ctrl
Alt	Ctrl+Option
Command

指定当按下特定键或组合键或者单击鼠标按钮时所执行的命令。

说明

一般来说，ON KEY LABEL 使用 DO 来执行一个过程。

在 READ，BROWSE，EDIT，CHANGE 或者用户自定义菜单的执行过程中，ON KEY LABEL 立即执行命令。如果按键或者单击鼠标时某程序正在运行，Visual FoxPro 将执行完该程序当前行后再执行 ON KEY LABEL 命令。在程序中创建的任何 ON KEY LABEL 键指定值在程序运行完毕后仍然有效。也可以在命令窗口中创建键指定值。

如果要恢复指定键的行为，可以使用 ON KEY LABEL KeyLabelName 命令。如果要把全部键的行为恢复正常，应使用 ON KEY 命令。

提示

为防止在执行 ON KEY LABEL 过程中递归调用，应在过程前面包含 PUSH KEY CLEAR 命令以废止所有激活的 ON KEY LABEL 命令。然后在过程末尾发出一个 POP KEY 命令来启用 ON KEY LABEL 命令。

ON KEY LABEL 键指定值在 Visual FoxPro 系统菜单栏、系统菜单、对话框和警报器等处不起作用。它们只在 Visual FoxPro 系统窗口、Visual FoxPro 文本编辑器、命令窗口、跟踪窗口等处有效。

与 ON KEY 不同，可以有多个激活的 ON KEY LABEL 命令。例如，可以为每个箭头键和鼠标按钮指派命令。

注意：在执行 ON KEY LABEL 时，PARAMETERS( ) 设置为 0。有关详细内容，请参阅 PARAMETERS( )。

FoxPro 中某些事件不可被俘获，因为它们在相应窗口的控制之下。特别的，当单击一个控制菜单或滚动条之类的窗口控制时，不执行 ON KEY LABEL MOUSE，ON KEY LABEL LEFTMOUSE 和 ON KEY LABEL RIGHTMOUSE 。还要注意在 Visual FoxPro 中，ON KEY LABEL 支持 CTRL+0，它将该组合键重定义为向字段中输入空值。

在 FoxPro for Macintosh 中，ON KEY LABEL 支持 [image] 命令键，可以用 CMD 命令指定它。CTRL 与 [image] 命令键在 FoxPro for Macintosh 中等价并且可互换使用。如果应用程序需要运行在其他 FoxPro 平台上，为获得最大的兼容性，最好使用 CTRL 键。

因为 Macintosh 的鼠标只有一个按钮，所以在单击鼠标时，应使用 ON KEY LABEL LEFTMOUSE 或 ON KEY LABEL MOUSE 来执行命令。当按下 [image] + Option 键的同时单击鼠标时，应使用 ON KEY LABEL RIGHTMOUSE 来执行命令。

Macintosh 也支持为 RETURN 键指定值。ON KEY LABEL RETURN 与 ON KEY LABEL ENTER 等价。同样 ON KEY LABEL DEL 与 ON KEY LABEL BACKSPACE 等价。

在 FoxPro for Macintosh 中使用 CTRL+OPTION 来模仿 Visual FoxPro、FoxPro for Windows 以及 FoxPro for MS-DOS 中的 ALT 键。

有关 FoxPro for Macintosh 中键盘与键击的详细内容，请参阅《安装与 Macintosh 功能指南》中“键盘差异”一节。


* 下例在箭头被按下时显示一条信息。

SET TALK OFF

CLEAR

ON KEY LABEL RIGHTARROW  ? 'Right Arrow'

ON KEY LABEL LEFTARROW  ? 'Left Arrow'

ON KEY LABEL UPARROW  ? 'Up Arrow'

ON KEY LABEL DNARROW  ? 'Down Arrow'

SET ESCAPE ON

STORE .F. TO glExit

ON ESCAPE STORE .T. TO glExit

STORE 0 TO TEMP

@ 2,0 SAY 'Press an arrow key to test ON KEY LABEL, <Esc> to exit'

DEFINE WINDOW wEnter FROM 10,20 TO 14,60 DOUBLE

ACTIVATE WINDOW wEnter

DO WHILE NOT glExit

ENDDO

DEACTIVATE WINDOW wEnter

ON KEY


请参阅

INKEY( )，ON( )，POP KEY，PUSH KEY


ON MACHELP 命令

请参阅	示例

指定一条命令，当用户从“帮助”菜单中选择“Microsoft FoxPro 帮助”菜单项时执行该命令。

语法

ON MACHELP [Command]

参数

Command

指定一条命令，当用户从“帮助”菜单中选择“Microsoft FoxPro 帮助”菜单项时执行该命令。

说明

仅用于 FoxPro for Macintosh。可以使用 ON MACHELP 与 SET MACHELP 命令为您的应用程序启动用户帮助系统。

使用不带 Command 的 ON MACHELP 命令，可以在用户选择“Microsoft FoxPro 帮助”菜单项时，激活默认的 FoxPro for Macintosh 帮助。


* 在 FoxPro for Macintosh 中，下例用提供自定义帮助的菜单项，
* 取代了“帮助”菜单中“Microsoft FoxPro for Macintosh 帮助”
* 菜单项。当选中这一菜单项时，执行 ON MACHELP 的
*  WAIT 命令并出现一个窗口。

SET MACHELP PROMPT 'My Application Help...'

ON MACHELP WAIT WINDOW "This is My Application's Help"


请参阅

ON APLABOUT，SET APLABOUT，SET MACHELP


ON PAD 命令

请参阅

指定菜单或菜单栏，当选择特定的菜单标题时激活它。

语法

ON PAD MenuTitleName OF MenuBarName1
[ACTIVATE POPUP MenuName
| ACTIVATE MENU MenuBarName2

参数

MenuTitleName OF MenuBarName1

指定菜单标题，为此菜单标题指定菜单或菜单栏。

ACTIVATE POPUP MenuName

指定选择菜单标题时激活的菜单。使用不带 ACTIVATE POPUP 子句的 ON PAD MenuTitleName OF MenuBarName1 命令，可以从菜单标题中释放一个菜单。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，如果为 MenuBarName1 指定了系统菜单栏 _MSYSMENU，则 MenuName 不能指定用 DEFINE POPUP PROMPT 子句创建的菜单。

ACTIVATE MENU MenuBarName2

指定选择菜单标题时激活的菜单栏名称。使用不带 ACTIVATE MENU 子句的 ON PAD MenuTitleName OF MenuBarName1 命令，可以从一个菜单名中释放菜单栏。

说明

使用 ON SELECTION PAD ，可以在选择一个菜单标题时执行一条命令。


请参阅

ACTIVATE MENU，DEFINE MENU，ON SELECTION MENU，ON SELECTION PAD


ON PAGE 命令

请参阅

指定当报表中打印输出到达一定行数，或发出 EJECT PAGE 时，将执行的命令。

语法

ON PAGE
[AT LINE nLineNumber [Command]]

参数

AT LINE nLineNumber [Command]

指定到达预定行数时执行的命令。当 _PLINENO（保存报表中当前行号的系统变量）大于 nLineNumber 指定行号时，执行指定的命令。当发出 EJECT PAGE 命令时也执行 ON PAGE 指定的命令。有关详细内容，请参阅 EJECT PAGE。

说明

ON PAGE 通常使用 DO 来执行一个处理分页、标头和注脚的过程。

不带 AT LINE 子句执行 ON PAGE 命令，将清除 ON PAGE 命令。


请参阅

EJECT PAGE


ON READERROR 命令

请参阅

指定响应数据输入错误而执行的命令。包含此命令是为了提供向后兼容性，可用 Error 事件代替。

语法

ON READERROR
[Command]

参数

Command

指定出现上述输入错误时应执行的命令。

说明

ON READERROR 可捕获的输入错误包括：

 •	   无效日期。

 •	   输入超出 @ ... GET ... RANGE 定义的范围。

 •	   输入不符合 @ ... GET ... VALID 定义的条件。

通常使用 DO 执行一个过程来提示用户输入正确数据。

使用不带命令的 ON READERROR 命令，可以清除以前的 ON READERROR 命令。


请参阅

Error 事件


ON SELECTION BAR 命令

请参阅

指定选择特定菜单项时应执行的命令。

语法

ON SELECTION BAR nMenuItemNumber OF MenuName
[Command]

参数

nMenuItemNumber OF MenuName [Command]

指定菜单项的编号、菜单名称以及选定此菜单项时执行的命令。

说明

通常，ON SELECTIONBAR 使用 DO 来执行一个过程或程序。当创建并激活一个菜单时，应把 ON SELECTION BAR 命令置于 DEFINE POPUP 和 ACTIVATE POPUP 之间。

可以对 Visual FoxPro 系统菜单使用 ON SELECTION BAR 命令。

使用 ON SELECTION BAR 命令，可以在选择菜单中任何菜单项时执行一条命令。使用 ON BAR 命令，可以在选择特定菜单项时激活一个菜单或菜单栏。

使用不带可选参数的 ON SELECTION BAR nMenuItemNumber OF MenuName 命令，可以释放为菜单项指定的命令。


请参阅

DEFINE BAR，DEFINE POPUP，ON BAR，ON SELECTION POPUP


ON SELECTION MENU 命令

请参阅	示例

指定在菜单栏上选择任何菜单标题时执行的命令。

语法

ON SELECTION MENU MenuBarName | ALL
[Command]

参数

MenuBarName

指定要为其指定命令的菜单栏名称。从该菜单栏上选定任一菜单标题时都执行此命令。可以指定 DEFINE MENU 命令创建的用户自定义菜单名或 Visual FoxPro 系统菜单栏 _MSYSMENU。

ALL

从任何菜单栏上，选择任一菜单标题时都执行此命令。

Command

指定选择菜单标题时要执行的命令。使用不带可选参数的 ON SELECTION MENU 命令，可以释放为菜单栏指定的命令。

说明

创建并激活菜单时，应将 ON SELECTION MENU 命令放置在 DEFINE MENU 命令和 ACTIVATE MENU 命令之间。

使用 ON SELECTION PAD 命令，可以在选择特定菜单项时执行某个命令。ON SELECTION PAD 命令的优先级高于 ON SELECTION MENU 命令。使用 ON PAD 命令，可以在选定特定菜单标题时激活某一菜单或菜单栏。

使用不带可选参数的 ON SELECTION MENU 命令，可以释放为某菜单栏指定的命令。


* 在下面的示例中，使用 ON SELECTION MENU 命令
* 指定从 Visual FoxPro 系统菜单栏上选定菜
* 单标题时执行某个过程。

*使用 SET SYSMENU SAVE 命令将当前系统菜单栏保存在内存中，
* 并用 SET SYSMENU TO 命令删除所有的系统菜单标题。

* DEFINE PAD 命令创建若干系统菜单标题。当选择某个
* 菜单标题时，执行由 ON SELECTION MENU 命令
* 为菜单栏指定的 choice 过程。此过程显示您选定的菜单
* 标题的名字以及菜单栏的名字。如果选定了“退出”菜单标题，
* 则还原初始的 Visual FoxPro 系统菜单。

*** 此程序名为 ONMENU.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD padSys OF _MSYSMENU PROMPT '\<System' COLOR SCHEME 3 ;

KEY ALT+S, ''

DEFINE PAD padEdit OF _MSYSMENU PROMPT '\<Edit' COLOR SCHEME 3 ;

KEY ALT+E, ''

DEFINE PAD padRecord OF _MSYSMENU PROMPT '\<Record' COLOR SCHEME 3 ;

KEY ALT+R, ''

DEFINE PAD padWindow OF _MSYSMENU PROMPT '\<Window' COLOR SCHEME 3 ;

KEY ALT+W, ''

DEFINE PAD padReport OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 ;

KEY ALT+P, ''

DEFINE PAD padExit OF _MSYSMENU PROMPT 'E\<xit' COLOR SCHEME 3 ;

KEY ALT+X, ''

ON SELECTION MENU _MSYSMENU ;

DO choice IN onmenu WITH PAD( ), MENU( )

PROCEDURE choice

PARAMETER gcPad, gcMenu

WAIT WINDOW 'You chose ' + gcPad + ;

' from menu ' + gcMenu NOWAIT

IF gcPad = 'PADEXIT'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE MENU，DEFINE MENU，ON PAD，ON SELECTION PAD


ON SELECTION PAD 命令

请参阅

指定选择菜单栏上特定菜单标题时执行的命令。

语法

ON SELECTION PAD MenuTitleName OF MenuBarName
[Command]

参数

MenuTitleName OF MenuBarName

指定要为其指定命令的菜单标题名称。

Command

指定选择特定菜单标题时要执行的 Visual FoxPro 命令。

说明

当选择此菜单标题时，Visual FoxPro 将执行 ON SELECTION PAD 指定的命令。从菜单栏上选择特定的菜单标题时，ON SELECTION PAD 命令通常使用 DO 执行某个过程或程序。在创建并激活菜单栏时，应将 ON SELECTION PAD 命令放置在 DEFINE MENU 命令与 ACTIVATE MENU 命令之间。

使用 ON SELECTION MENU 命令，可以在菜单栏上选定任一菜单标题时执行某个命令。使用 ON PAD 命令，可以在菜单栏上选择特定菜单标题时激活某个菜单或菜单栏。

使用不带可选参数的 ON SELECTION PAD 命令，可以释放为菜单标题指定的命令。


请参阅

ACTIVATE MENU，DEFINE MENU，DEFINE PAD，ON PAD，ON SELECTION MENU


ON SELECTION POPUP 命令

请参阅

指定从特定菜单或所有菜单上选择任一菜单项时所要执行的命令。

语法

ON SELECTION POPUP MenuName | ALL
[Command]

参数

MenuName

指定要为其指定命令的菜单。

ALL

如果包含 ALL 而不是一个菜单名，则从任何菜单上选择任一菜单项时，Visual FoxPro 都执行此命令。

Command

指定选择菜单项时所要执行的命令。

说明

从菜单上选择任一菜单项时，Visual FoxPro 执行由 ON SELECTION POPUP 命令指定的命令。在创建并激活菜单时，应将 ON SELECTION POPUP 命令放置在 DEFINE POPUP 命令与 ACTIVATE POPUP 命令之间。

使用 ON SELECTION BAR 命令，可以在选择特定的菜单项时执行某个命令。ON SELECTION BAR 命令的优先级高于 ON SELECTION POPUP 命令。使用 ON BAR 命令，可以在选择特定的菜单项时激活某个菜单或菜单栏。

使用不带可选参数的 ON SELECTION POPUP 命令，可以释放 ON SELECTION POPUP 命令先前指定给菜单项的命令。


请参阅

ACTIVATE POPUP，DEFINE BAR，DEFINE POPUP，ON BAR


ON SHUTDOWN 命令

请参阅

指定当试图退出 Visual FoxPro，FoxPro for Windows，FoxPro for Macintosh，Microsoft Windows 或 Macintosh Finder 时所要执行的命令。

语法

ON SHUTDOWN [Command]

参数

Command

指定当试图退出 Visual FoxPro，FoxPro for Windows，FoxPro for Macintosh，Microsoft Windows 或 Macintosh Finder 时， ON SHUTDOWN 要执行的命令。

不带 Command 发出 ON SHUTDOWN 命令，将释放当前的 ON SHUTDOWN 命令。

说明

仅用于 Visual FoxPro, FoxPro for Windows 和 FoxPro for Macintosh。

在 Visual FoxPro 中，当您试图退出 Visual FoxPro 时，将执行 ON SHUTDOWN 中指定的命令。如果在 Visual FoxPro 打开的情况下，试图从“程序管理器”退出 Microsoft Windows，控制权将返回给 Visual FoxPro 并执行 ON SHUTDOWN 中指定的命令。

在 FoxPro for Macintosh 中，如果试图退出 FoxPro，则执行 ON SHUTDOWN 中指定的命令。如果在 FoxPro 打开的情况下，试图从 Finder 中关闭 Macintosh，控制权将返回给 FoxPro 并执行 ON SHUTDOWN 中指定的命令。

ON SHUTDOWN 命令一般用 DO 命令执行某个例程。该例程显示一对话框，询问是否确定要退出当前应用程序和 Visual FoxPro。如果您要退出应用程序，该例程将关闭打开的文件并清理 Visual FoxPro 环境，然后执行 QUIT 命令。如果您不想退出当前的应用程序，例程将把控制权返回给应用程序。


请参阅

QUIT


ON( ) 函数

请参阅	示例

返回为下列事件处理命令指定的命令：ON APLABOUT、ON ERROR、ON ESCAPE、ON KEY、ON KEY LABEL、ON MACHELP、ON PAGE 或 ON READERROR。

语法

ON(cONCommand [, KeyLabelName])

参数

cONCommand

指定其中的一个事件处理命令。下面是各个命令及在 ON( ) 函数中使用的相应的字符表达式：

命令	cONCommand
ON APLABOUT	APLABOUT
ON ERROR	ERROR
ON ESCAPE	ESCAPE
ON KEY	KEY
ON KEY LABEL	KEY
ON MACHELP	MACHELP
ON PAGE	PAGE
ON READERROR	READERROR
例如，要返回当前为 ON ERROR 指定的命令，应使用：

? ON('ERROR')

KeyLabelName

用在 ON KEY LABEL 命令中，为命令指定键或组合键。把 cONCommand 指定为 KEY 后，在 KeyLabelName 中指定键或组合键的键标记名称。有关键标记名称的完整列表，请参阅 ON KEY LABEL。

例如，若要返回当前 ON KEY LABEL 命令为功能键 F7 指定的命令，应使用：

? ON('KEY', 'F7')

返回值类型

字符型

说明

当某一事件发生并被一个事件处理命令俘获时，执行该事件处理命令指定的命令。ON( ) 函数返回为某个事件处理命令指定的命令。如果当前没有命令指定给该事件处理命令，ON( ) 函数返回空字符串。


* 下面的示例利用 ON( ) 函数显示 ON ERROR 与
*  ON KEY LABEL 的设置值。

ON ERROR DO errorhand

ON KEY LABEL CTRL+F2 WAIT WINDOW 'You pressed ^F2'

ON KEY LABEL ALT+Z DISPLAY MEMORY

CLEAR

? ON('ERROR')  && 显示 DO errorhand

? ON('KEY', 'CTRL+F2')  && 显示 WAITWINDOW，您按了 F2

? ON('KEY', 'ALT+Z')  && DISPLAY MEMORY显示 DISPLAY MEMORY

ON ERROR

ON KEY LABEL CTRL+F2

ON KEY LABEL ALT+Z


请参阅

INKEY( )，LASTKEY( )，ON APLABOUT ON ERROR，ON ESCAPE，ON KEY，ON KEY LABEL，ON PAGE，ON READERROR，READKEY( )


OneToMany 属性

请参阅

当在父表的记录上移动记录指针时，指定记录指针是否应保持在同一条父记录上，直至子表的记录指针移过所有与之相关的记录。

应用于

关系

语法

Object.DataEnvironment.Relation.OneToMany[ = lSetting]

设置

lSetting

OneToMany 属性的设置有：

设置	说明
“真”(.T.)	记录指针保持在同一条父记录上，直至子表的记录指针移过所有相关记录。
“假”(.F.)	(默认值)父表的记录指针移动到某一指定记录，子表的记录指针移动到第一条相关记录。
说明

设计时可用，运行时只读。

OneToMany 属性可以指定简单的父-子表关系下记录指针的移动方式。要指定更复杂的关系(如祖父表-父表-子表关系)下记录指针的移动方式，可以在表单或报表 Init 方法中使用 SET SKIP 命令。

OneToMany 属性设置为“真”(.T.)时，与 SET SKIP 命令的行为相似。


请参阅

SET SKIP


OPEN DATABASE 命令

请参阅	示例

打开一个数据库。

语法

OPEN DATABASE
[FileName | ?]
[EXCLUSIVE | SHARED]
[NOUPDATE]
[VALIDATE]

参数

FileName

指定要打开的数据库名。如果没有指定该文件的扩展名，Visual FoxPro 自动指定扩展名为 .DBC。如果省略 FileName 将显示“打开”对话框。

?

显示“打开”对话框，从中可以选择现有的数据库，或输入所要创建的新数据库名。

EXCLUSIVE

以独占方式打开数据库。如果以独占方式打开数据库，则其他用户无法访问该数据库，并且当他们试图访问时会产生错误。如果没有包含 EXCLUSIVE 和 SHARED，则当前 SET EXCLUSIVE 的设置值决定数据库以何种方式打开。

SHARED

以共享方式打开数据库。如果以共享方式打开数据库，其他的用户也可以访问它。如果没有包含 EXCLUSIVE 和 SHARED，则当前 SET EXCLUSIVE 的设置值决定数据库以何种方式打开。

NOUPDATE

指定不能对数据库做任何更改。换句话说，该数据库只读。如果省略 NOUPDATE，则数据库打开后可以进行读写。

数据库中包含的表不受 NOUPDATE 的影响。要防止对数据库中某个表的更改，打开该表时，应在 USE 命令中包含 NOUPDATE。

VALIDATE

指定让 Visual FoxPro 确保数据库中的引用有效。Visual FoxPro 将检查磁盘上数据库中的表和索引是否可用。Visual FoxPro 还将检查被引用的字段和索引标识是否存于表和索引中。

说明

数据库打开时，其中包含的所有表均可用。不过，表不能隐含地打开。必须用 USE 命令打开表。

执行 USE 命令时，Visual FoxPro 首先在当前数据库中查找该表。如果没有找到，Visual FoxPro 接着在此数据库之外查找该表。这意味着如果数据库中的某个表与数据库之外的一个表具有相同的名称，则首先找到的是数据库中的表。

您不能打开其他用户以独占方式打开的数据库。


* 在下面的示例中，使用 OPEN DATABASE 命令打开数据库
* testdata。然后用 DISPLAY DATABASE 命令
* 显示数据库中各个表的有关信息。

CLOSE DATABASES

SET PATH TO (HOME( ) + 'samples\data\')  	&&  设置数据库的路径

OPEN DATABASE testdata  && 打开数据库 testdata

DISPLAY DATABASE  && 显示表的信息


请参阅

ADD TABLE，CLOSE DATABASES，CREATE DATABASE，DBUSED( )，DISPLAY DATABASE，FREE TABLE，LIST DATABASE，REMOVE TABLE


OpenTables 方法

请参阅

以编程方式打开与数据环境相关的表或视图。

应用于

数据环境

语法

DataEnvironment.OpenTables

参数

DataEnvironment

指定与表单集、表单或报表相关的数据环境。

说明

当数据环境的 AutoOpenTables 属性设置为“假”(.F.)，或已经用 CloseTables 方法卸载数据环境后，可以用 OpenTable 方法加载数据环境的表。


请参阅

AfterCloseTables 事件，AutoOpenTables 属性，BeforeOpenTables 事件，CloseTables 方法


OpenWindow 属性

请参阅

当与一个备注字段相联系的文本框控制接收到焦点时，指定是否自动打开窗口。包含此属性是为了提供向后兼容性。可用编辑框控制代替。

应用于

文本框

语法

[Form.]TextBox.OpenWindow[ = lExpr]

设置

lExpr

OpenWindow 属性的设置有：

设置	说明
“真”(.T.)	文本框获得焦点后，自动打开 MemoWindow 属性中指定的窗口。如果在 MemoWindow 属性中没有指定任何窗口，则 Visual FoxPro 将创建窗口来包含该备注。
“假”(.F.)	窗口不自动打开。如果在文本框拥有焦点时按 CTRL+PAGE DOWN 键，则打开 MemoWindow 属性中指定的窗口。如果在 MemoWindow 属性中没有指定任何窗口，则 Visual FoxPro 将创建窗口包含该备注。
说明

设计和运行时均可用。


请参阅

MemoWindow 属性


OptionButton 控制
OptionButton（选项按钮）控制

请参阅	属性	事件	方法

创建单个选项按钮。

语法

OptionButton

说明

只能在选项按钮组中添加单个选项按钮。

有关创建选项按钮组的详细内容，请参阅选项组控制主题，以及《开发指南》第十一章“使用控制”。


 属性

Alignment	AutoSize	BackColor
BackStyle	BaseClass	Caption
Class	ClassLibrary	ColorScheme
ColorSource	Comment	ControlSource
DisabledBackColor	DisabledForeColor	DisabledPicture
DownPicture	DragIcon	DragMode
Enabled	FontBold	FontItalic
FontName	FontOutline	FontShadow
FontSize	FontStrikeThru	FontUnderLine
ForeColor	Height	HelpContextID
Left	MousePointer	Name
Parent	ParentClass	Picture
ReadObject	SpecialEffect	StatusBarText
Style	TabIndex	TabStop
Tag	TerminateRead	ToolTipText
Top	Value	Visible
Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
ErrorMessage	GotFocus	Init
KeyPress	LostFocus	Message
MouseDown	MouseMove	MouseUp
RightClick	Valid	When


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	Refresh
SaveAsClass	SetFocus	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE FORM，CREATE CLASS，DEFINE CLASS，选项组控制


OptionGroup 控制
OptionGroup（选项组）控制

请参阅	属性	事件	方法	示例

创建一组选项按钮。

语法

OptionGroup

说明

选项按钮组是包含选项按钮的容器。选项按钮组允许您从中选择一个按钮。选定某个选项按钮将释放先前的选择同时使您的选择成为当前值。选项按钮旁边的圆点指示当前的选择。例如，可以用选项按钮决定输出到文件、打印机还是窗口。

有关创建选项按钮的详细内容，请参阅“使用 Visual FoxPro”中的“表单”主题，以及《开发指南》第十一章“使用控制”。


 属性

AutoSize	BackColor	BackStyle
BaseClass	BorderColor	BorderStyle
ButtonCount	Buttons	Class
ClassLibrary	Comment	ControlSource
DragIcon	DragMode	Enabled
Height	HelpContextID	Left
MousePointer	Name	Parent
ParentClass	ReadObject	SpecialEffect
TabIndex	Tag	TerminateRead
Top	Value	Visible
Width


 事件

Click	DblClick	DragDrop
DragOver	Error	ErrorMessage
Init	InteractiveChange	Message
MouseDown	MouseMove	MouseUp
ProgrammaticChange	RightClick	UIEnable
Valid	When


 方法

AddObject	CloneObject	Drag
Move	ReadExpression	ReadMethod
Refresh	RemoveObject	SaveAsClass
SetAll	WriteExpression	WriteMethod
ZOrder


*下面的示例创建了 OptionGroup 控制并把它放置在
* 表单上。这个 OptionGroup 控制有三个按钮，
* 根据您单击的选项按钮，分别显示圆、
* 椭圆或正方形。利用 Buttons 属性和 Caption 属性
* 指定每个选项按钮参边显示的文本。

*使用 Shape 控制创建圆、椭圆和正方形。
*  OptionGroup 控制的 Click 事件使用 DO CASE ... ENDCEASE
* 结构以及 Value 属性，
* 在单击选项按钮时显示相应的形状。

frmMyForm = CREATEOBJECT('Form')  &&创建表单

frmMyForm.Closable = .F.  && 废止“控制”菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  &&添加“命令”按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') && 添加“选项”组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && 添加圆形

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加正方形

frmMyForm.cmdCommand1.Visible =.T.  &&  “退出”命令按钮可见

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组的宽度

frmMyForm.opgOptionGroup1.Visible = .T.  && 使选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始进行事件处理

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建选项组

ButtonCount = 3  && 三个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏正方形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示正方形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建“命令”按钮

Caption = '\<Quit'  && “命令”按钮上的标题

Cancel = .T.  && 默认“取消”命令按钮(ESC)

Left = 125  && 按钮的列

Top = 210  && “命令”按钮的行

Height = 25  && “命令”按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件处理，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS SHAPE  && 创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  &&红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS SHAPE  &&  创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  &&绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS SHAPE  && 创建一个正方形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  &&篮色

ENDDEFINE


请参阅

CREATE FORM，CREATE CLASS，DEFINE CLASS，选项按钮控制


Order 属性

请参阅

为临时表对象指定主控索引标识。

应用于

临时表

语法

DataEnvironment.Cursor.Order[ = cField]

设置

cField

指定存在于某个表中的索引标识字段。

说明

设计和运行时可用。如果关系对象的 ChildOrder 属性已经设置，则忽略 Order 属性。

Order 属性可以指定显示或访问记录的顺序。

Order 属性与 SET ORDER 命令的行为相似。


请参阅

ChildOrder 属性，INDEX，SET ORDER


ORDER( ) 函数

请参阅	示例

返回当前表或指定表的主控索引文件或标识。

语法

ORDER([nWorkArea | cTableAlias [, nPath]])

参数

nWorkArea

指定表所在的工作区，ORDERS( ) 函数返回该表的主控索引文件或标识名称。

cTableAlias

指定表的别名，ORDERS( ) 函数返回该表的主控索引文件或主控标识名称。

nPath

指定与单项索引文件名或复合索引文件名一起返回其所在驱动器及目录。数值表达式 nPath 可取任何值。

返回值类型

字符型

说明

一个表可以同时打开多个索引文件。不过，只有一个单项索引文件(主控索引文件)或复合索引文件中的标识(主控标识)控制着显示或访问表的顺序。有些命令，例如 SEEK 命令，它使用主控索引文件或主控标识搜索记录。本函数用来返回主控索引文件或主控标识的名称。

USE 与 SET INDEX 命令都支持用索引文件列表打开一个以上的索引。在这个索引文件列表中可以指定主控索引文件或主控标识。另外也可以用 SET ORDER 命令指定主控索引或主控标识。

默认情况下，ORDER( ) 函数返回当前工作区的主控索引文件名或主控标识名。如果没有设置顺序（发出 SET ORDER TO 命令或不存在主控索引文件和标识），则 ORDER( ) 函数返回空字符串。


* 下面的示例显示索引标识及文件。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer ORDER cust_id && 打开表 Customer

? ORDER( )  && 显示 CUST_ID

? ORDER('customer', 1)  &&显示 CUSTOMER.CDX


请参阅

INDEX，SET INDEX，SET ORDER，USE


OS( ) 函数

请参阅	示例

返回运行当前 Visual FoxPro 的操作系统的名称和版本号。

语法

OS([1])

参数

1

指定 OS( ) 函数返回操作系统版本号。在 FoxPro for MS-DOS 和 FoxPro for UNIX 中不支持可选参数 1。

在 Visual FoxPro 和 FoxPro for Windows 中，使用 OS(1) 返回 Windows 的版本号（例如，Windows 3.10）。在 FoxPro for Macintosh 中，使用 OS(1) 将返回系统软件的版本号（例如，System 7.1.0）。

返回值类型

字符型

说明

如果省略可选参数 1，则返回底层操作系统的名称及其版本号。

在 Visual FoxPro 和 FoxPro for Windows 中，使用 OS( ) 返回 MS-DOS 的版本号（例如，MS-DOS 6.22）。在 FoxPro for Macintosh 中，OS( ) 返回 Macintosh。在 FoxPro for UNIX 中，OS( ) 返回“UNIX”或“XENIX”及版本号。


? OS( )

? OS(1)


请参阅

DISKSPACE( )，GETENV( )，VERSION( )


PACK 命令

请参阅

从当前表中永久删除标有删除标记的记录，减少与该表相关的备注文件所占用的空间。

语法

PACK [MEMO] [DBF]

参数

MEMO

从备注文件中删除未使用空间，但不从表中删除标有删除标记的记录。备注字段的信息保存在一个相关的备注文件内。备注件文件的文件名与表相同，扩展名为 .FPT。

DBF

从表中删除标有删除标记的记录，但不影响备注文件。

说明

当使用 PACK 命令时，Visual FoxPro 把所有没做删除标记的记录复制到一个临时表（temporary table）中。执行完 PACK 命令后，Visual FoxPro 把原表从磁盘上删除，同时用原表名命名临时表。如果按 ESC 键中止 PACK，就会删除临时表，原表保持不变。运行 PACK 命令时，如果磁盘空间不够，原表也将保持不变。

如果不带 MEMO 和 DBF 子句发出 PACK 命令，PACK 命令将同时作用于表和备注文件。

PACK 命令需要以独占方式使用表，有关在网络上以独占方式打开一个表的详细内容，请参阅 SET EXCLUSIVE。

如果当前表有一个或更多打开的索引，PACK 命令将重建索引文件。

注意

应仅在不再使用的记录上作标记。使用 PACK 命令之后，不可能再恢复已删除的记录。


请参阅

DELETE - SQL，DELETE，DELETED( )，RECALL，SET EXCLUSIVE


PACK DATABASE 命令

请参阅	示例

从当前数据库中删除标有删除标记的记录。

语法

PACK DATABASE

说明

当从数据库中删除一个表或视图，或者修改数据库中一个表的结构时，数据库中就会包含做过删除标记的记录。

必须以独占方式打开数据库，并且数据库中不能打开任何表或视图。


* 在下面的示例中，使用 PACK DATABASE 命令清理
* testdata 数据库，删除标有删除标记的记录。

CLOSE DATABASES

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置数据库的路径

OPEN DATABASE testdata  && 打开数据库

PACK DATABASE && 清理当前数据库


请参阅

CLOSE DATABASES，DELETE DATABASE，MODIFY DATABASE，OPEN DATABASE，SET DATABASE，VALIDATE DATABASE


PAD( ) 函数

请参阅	示例

以大写字符串形式返回在菜单栏中最近选取的菜单标题。

语法

PAD( )

返回值类型

字符型

说明

为使 PAD( ) 函数返回一个菜单标题，必须定义且激活一个菜单栏。可以使用 DEFINE MENU 和 ACTIVATE MENU 命令创建和激活菜单栏。

PAD( ) 函数也可以应用于 Visual FoxPro 的系统菜单栏。

如果没有定义并激活一个菜单栏或者在命令窗口中使用 PAD( ) 函数，PAD( ) 函数将返回一个空字符串。


* 本示例应用 PAD( ) 函数向一个过程传送菜单标题。

* 用 SET SYSMENU SAVE 命令把当前 Visual FoxPro
* 系统菜单栏保存在内存中，并且用 SET SYSMENU TO
*  命令删除所有系统菜单标题。

* 一些系统菜单标题是用 DEFINE PAD 命令创建的。当选择了
* 一个菜单标题时，用PAD( ) 函数把菜单标题传给名为
*  choice 的过程，choice 显示所选的菜单标题及
* 菜单栏的名字。如果选择了“退出”菜单标题，
* 则还原原始的 Visual FoxPro 系统菜单。

*** 此程序名为 PADEXAM.PRG ***

CLEAR

SET SYSMENU SAVE

SET SYSMENU TO

DEFINE PAD padSys OF _MSYSMENU PROMPT '\<System' COLOR SCHEME 3 ;

KEY ALT+S, ''

DEFINE PAD padEdit OF _MSYSMENU PROMPT '\<Edit' COLOR SCHEME 3 ;

KEY ALT+E, ''

DEFINE PAD padRecord OF _MSYSMENU PROMPT '\<Record' COLOR SCHEME 3 ;

KEY ALT+R, ''

DEFINE PAD padWindow OF _MSYSMENU PROMPT '\<Window' COLOR SCHEME 3 ;

KEY ALT+W, ''

DEFINE PAD padReport OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 ;

KEY ALT+P, ''

DEFINE PAD padExit OF _MSYSMENU PROMPT 'E\<xit' COLOR SCHEME 3 ;

KEY ALT+X, ''

ON SELECTION MENU _MSYSMENU ;

DO choice IN padexam WITH PAD( ), MENU( )

PROCEDURE choice

PARAMETERS gcPad, gcMenu

WAIT WINDOW 'You chose ' + gcPad + ;

' from menu ' + gcMenu NOWAIT

IF gcPad = 'PADEXIT'

SET SYSMENU TO DEFAULT

ENDIF


请参阅

ACTIVATE MENU，BAR( )，DEFINE PAD，DEFINE MENU，MENU( )，ON PAD，ON SELECTION PAD，PROMPT( )


PADL( ) | PADR( ) | PADC( ) 函数

请参阅	示例

由一个表达式返回一个字符串，并从左边，右边或同时从两边用空格或字符把该字符串填充到指定长度。

语法

PADL(eExpression, nResultSize [, cPadCharacter])
 — 或者 —
PADR(eExpression, nResultSize [, cPadCharacter])
 — 或者 —
PADC(eExpression, nResultSize [, cPadCharacter])

参数

eExpression

指定需填充的表达式。除了逻辑表达式、通用字段或图片字段，这个表达式可以是任何类型的表达式。

nResultSize

指定表达式填充之后的字符总数。

cPadCharacter

指定用于填充的值。必要时这个值重复填充在表达式中，以使字符达到特定数目。

如果省略 cPadCharacter，则用空格（ASCII 码 32）填充。

返回值类型

字符型

说明

PADL( ) 函数从左边插入填充值，PADR( ) 函数从右边插入填充值，PADC( ) 函数从两边插入填充值。


STORE 'TITLE' TO gcString

CLEAR

? PADL(gcString, 40, '=')

? PADR(gcString, 40, '=')

? PADC(gcString, 40, '=')


请参阅

ALLTRIM( )，LEFT( )，LTRIM( )，RIGHT( )，STUFF( )，TRIM( )


_PADVANCE 系统内存变量

请参阅

包含换页方法。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PADVANCE = cAdvanceMethod

参数

cAdvanceMethod

指定一个字符值，该值决定 Visual FoxPro 使用换页符还是换行符换到页头。cAdvanceMethod 必须为下列某一值：

cAdvanceMethod	说明
FORMFEED	当换页时发送一个换页符。这个选项使用打印机内部的表单顶 (top-of-form) 控制(默认值)。
LINEFEEDS	当换页时发送一个计算得到的换行符数目。通过内部计算需要多少换行符，然后发送这个换行符数，这个选项把打印机定位于下页的页头。
在下列情况下，Visual FoxPro 使用公式 (PLENGTH-_PLINENO) 计算需要发送多少换行符：

 •	   发出 EJECT PAGE 命令时不带 ON PAGE 句柄。

 •	   发出 EJECT PAGE 命令时不带 ON PAGE 句柄，且行位置大于 ON PAGE 命令指定的行值。

 •	   当 PRINTJOB 或 ENDPRINTJOB 命令引起 _PEJECT 向打印机发送一个走纸命令时。

在发出下列命令时， Visual FoxPro 使用公式(_PLENGTH-MOD(PROW( )，_PLENGTH))：

 •	   EJECT

 •	   SET DEVICE TO PRINTER 且用一个后续的 @ ... SAY 强迫走纸。

不管 _PADVANCE 如何设置，通过输出 CHR(12) 总可以向打印机发送一个换页符。


请参阅

EJECT，_PEJECT，_PLENGTH，_PLINENO，PROW( )


Page 事件
Page（页面）对象

请参阅	属性	事件	方法

在页框中创建一个页面。

语法

Page

说明

页面允许创建选项卡式表单或对话框。一个页框中包含一系列页面。

可以象下面这样，用名称引用一个页框中的页面：

myFrame.MyPage1

也可以用 PAGES 关键字通过索引编号引用一个页面，这与其他 Visual FoxPro 容器中的控制集合是一致的。

myFrame.PAGES(2).Enabled = .T.

注意，这个索引编号不必等于 PageOrder 属性值。如果有三个页面，它们的 PageOrder 分别是 2，3 和 5，可以象下面这样引用这些页面：

myFrame.PAGES(1)

myFrame.PAGES(2)

myFrame.PAGES(3)

注意，对页面所在的表单使用 Refresh 方法时，只有活动的页面被刷新。

有关创建页面和页框的详细内容，请参阅向表单中添加页框主题，以及《开发指南》第十一章“使用控制”。


  属性

ActiveControl	BackColor	BackStyle
BaseClass	Caption	Class
ClassLibrary	Comment	ControlCount
Controls	DragIcon	DragMode
Enabled	FontItalic	FontName
FontOutline	FontShadow	FontSize
FontStrikeThru	FontUnderline	ForeColor
HelpContextID	KeyPreview	Name
PageOrder	Parent	ParentClass
Picture	ReadObject	TabIndex
TabStop


 事件

Activate	Click	DblClick
Deactivate	Destroy	DragDrop
DragOver	Error	Init
MouseDown	MouseMove	MouseUp
RightClick


 方法

AddObject	CloneObject	Drag
ReadExpression	ReadMethod	Refresh
RemoveObject	SetAll	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE FORM，CREATE CLASS，DEFINE CLASS，页框控制


PageCount 属性

请参阅

指定一个页框控制中的页面数。

应用于

页框

语法

PageFrame.PageCount[ = nPages]

设置

nPages

指定一个页框对象中包含的页面数。

说明

设计和运行时可用。

PageCount 属性的最小设置值为 0。

注意

如果减少 PageCount 属性设置值（例如，由 3 修改为 2），将丢失所有超出新设置值的页面及它们包含的对象。


请参阅

ButtonCount 属性，ControlCount 属性，FormCount 属性，Page 事件


PageFrame（页框）控制

请参阅	属性	事件	方法

创建一个用以包含页面的页框。

语法

PageFrame

说明

页框是包含页面的容器对象，而页面可以包含控制。注意，要使页框可见，必须把它添加到一个表单中。

页框定义了页面的总体特性：大小和位置，边框类型，哪个页面是活动的，等等。

页框决定了页面的位置及每页有多少是可见的。页面相对于页框的左上角定位。如果页框移动了，页面跟着移动。

页框包含的每个页面默认命名为 Page1，Page2，Page3 等等。

注意对页面所在的表单使用 Refresh 方法时，只刷新活动的页面。

有关创建页面和页框的详细内容，请参阅向表单中添加页框主题，以及《开发指南》第十一章“使用控制”。


 属性

ActivePage	BaseClass	BorderColor
BorderWidth	Class	ClassLibrary
Comment	DragMode	Enabled
Height	Left	Name
PageCount	PageHeight	Pages
PageWidth	Parent	ParentClass
ReadObject	SpecialEffect	TabIndex
Tabs	TabStop	TabStretch
Top	Visible	Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
Init	MouseDown	MouseMove
MouseUp	Moved	Resize
RightClick	UIEnable


 方法

AddObject	CloneObject	Drag
Move	ReadExpression	ReadMethod
Refresh	RemoveObject	SaveAsClass
SetAll	WriteExpression	WriteMethod
ZOrder


请参阅

CREATE FORM，CREATE CLASS，DEFINE CLASS，页面对象


PageHeight 属性

请参阅

指定页面的高度。

应用于

页框

语法

PageFrame.PageHeight[ = nHeight]

设置

nHeight

按照表单 ScaleMode 属性指定的度量单位指定页面的高度。

说明

设计和运行时只读。


请参阅

PageWidth 属性，页面对象，ScaleMode 属性


_PAGENO 系统内存变量

请参阅

包含当前页码。

语法

_PAGENO = nCurrentPageNumber

参数

nCurrentPageNumber

为当前页码指定一个从 1 到 32,767 之间的数值。_PAGENO，_PBPAGE 和 _PEPAGE 一起使用。如果设置（或增加）PAGENO，使之超出了 _PBPAGE 和 _PEPAGE 的范围，则不打印任何页面。

说明

_PAGENO 包含了一个决定当前页码的数值，初始值默认为 1。_PAGENO 允许在连续输出中打印页码，而不必为此定义、初始化和增加一个内存变量。


请参阅

ON PAGE，_PBPAGE，_PEPAGE，_PLENGTH，_PLINENO


PageOrder 属性

请参阅

指定页面在一个页框控制中的相对顺序。

应用于

页面

语法

Page.PageOrder[ = nOrder]

设置

nOrder

指定在一个页框对象中页面的相对顺序。

说明

设计和运行时可用。

如果一个页框包含五个页面，且需要将第三页放在最后，则把第三页的 PageOrder 属性设置为 5。第四页的 PageOrder 设置成为 3，第五页的 PageOrder 设置成为 4，依此类推。

附注

PageOrder 的设置不一定是连续，可以有间隔。例如，如果一个页框包含三个页面，可以再增加第四个页面，并且将它的 PageOrder 属性设置为 10。


请参阅

Activate 事件，Deactivate 事件，页框控制，ZOrder 方法


Pages 属性

请参阅

一个用于访问页框控制中各个页面的数组。

应用于

页框

语法

PageFrame.Pages(Index).Property[ = Expr]

设置

Index

代表要访问页面的索引。

Expr

为页框中包含的页面指定一个属性值。

说明

仅在运行时可用。


请参阅

Buttons 属性，页面对象，PageCount 属性


PageWidth 属性

请参阅

指定页面的宽度。

应用于

页框

语法

PageFrame.PageWidth[ = nWidth]

设置

nWidth

按照表单的 ScaleMode 属性指定的度量单位指定页面的宽度。

说明

设计和运行时可用。

除非 PageFrame 对象包含不止一个页面，并且页面是层叠的，否则 PageWidth 属性的设置与 Width 属性的设置总是相同的。


请参阅

PageHeight 属性，页面对象，ScaleMode 属性


Paint 事件

请参阅

当表单或工具栏重画时发生。

应用于

表单，工具栏

语法

PROCEDURE Object.Paint

说明

当表单或工具栏移动或调整大小，或一个覆盖表单或工具栏的窗口移动，使得表单或工具栏部分或全部显露出时，重画该表单或工具栏。

在 Resize 事件中使用 Refresh 方法时，每次调整表单或工具栏大小时，都强制重画整个对象。

完成某种任务时使用 Paint 事件会引起级联事件。通常，在下列情况下应避免使用 Paint 事件：

 •	   移动表单或控制或调整它们的大小。

 •	   更改任何影响大小或外观的变量，例如设置一个对象的 BackColor 属性。

 •	   调用 Refresh 方法。

对于这些任务，调用 Resize 事件可能更合适。


请参阅

Circle 方法，ClipControls 属性，Line 方法，Print 方法，PSet 方法，Refresh 方法，Resize 事件


Panel 属性

请参阅

指定一个表格控制中的活动窗格。

应用于

表格

语法

Grid.Panel[ = nSide]

设置

nSide

nSide 属性的设置为：

设置	说明
0	左窗格是活动的。
1	（默认值）右窗格是活动的。
说明

设计时可用，运行时可读写。且仅当 Partition 属性的设置值大于 0 时该属性可用。


请参阅

PanelLink 属性，Partition 属性


PanelLink 属性

请参阅

指定当拆分表格时，表格控制的左右窗格是否链接。

应用于

表格

语法

Grid.PanelLink[ = lExpr]

设置

lExpr

PanelLink 属性的设置有：

设置	说明
“真”(.T.)	(默认值)当拆分表格时左右窗格链接。
“假”(.F.)	当拆分表格时左右窗格不链接。
说明

设计时可用，运行时可读写。且仅当 Partition 属性的设置值大于 0 时该属性可用。

如果 PanelLink 设置为“真”(.T.)，当设置下列属性时，表格的两个窗格都受影响：HeaderHeight, DeleteMark, GridLineColor, GridLines, GridLineWidth, Highlight, RecordMark, RowHeight 和 ScrollBars。

如果 PanelLink 设置为“假”(.F.)，Panel 属性决定下列属性设置在哪个窗格上：HeaderHeight, DeleteMark, GridLineColor, GridLines, GridLineWidth, HighLight, RecordMark, RowHeight 和 ScrollBars。


请参阅

DeleteMark 属性，GridLineColor 属性，GridLines 属性，GridLineWidth 属性，HeaderHeight 属性，Highlight 属性，Panel 属性，Partition 属性，RecordMark 属性，RowHeight 属性，ScrollBars 属性


PARAMETERS 命令

请参阅	示例

将调用程序传来的数据赋值给私有内存变量或数组。

语法

PARAMETERS ParameterList

参数

ParameterList

指定接收数据的内存变量或数组。

“ParameterLis”中的参数应用逗号分隔。PARAMETERS 语句中的参数数目至少应与 DO ... WITH 语句中的参数数目相同。如果 PARAMETERS 语句中所列的变量或数组数目比 DO ... WITH 语句传递的多，剩余的变量或数组就初始化为“假”(.F.)。最多可传递 27 个参数。

PARAMETERS( ) 函数返回传递给最近执行程序的参数数目。

说明

当 PARAMETERS 命令与 DO ... WITH 语句一起使用时，它必须是被调用程序、过程或用户自定义函数中的第一条可执行语句。

默认情况下，DO ... WITH 语句以引用传递方式向过程传递变量和数组。当一个值在被调用过程中更改时，新值传递回调用程序中相关的变量或数组。如果想以值传递方式向一个过程传递变量或数组，在 DO ... WITH 语句的参数列表中用括号把变量或数组括起来，这样，在被调用过程中对参数的任何更改都不传回调用程序。

默认情况下，变量以引用传递方式向过程传递，以值传递方式向一个用户自定义函数传递。使用 SET UDFPARMS TO REFERENCE 命令，能以引用传递方式向用户自定义函数传递变量。


* 下面的示例向一个错误处理例程传递变量。

ON ERROR DO errhand WITH ERROR( ), MESSAGE( ), ;

MESSAGE(1),PROGRAM( ),LINENO( )

USE nodatabase

ON ERROR	&&还原系统错误处理例程

PROCEDURE errhand

PARAMETERS gnError, gcMess, gnMess1, gcProg, gnLineNo

? 'Error number: ' + LTRIM(STR(gnError))

? 'Error message: ' + gcMess

? 'Line of code with error: ' + gnMess1

? 'Line number of error: '+ LTRIM(STR(gnLineNo))

? 'Program with error: ' + gcProg


请参阅

DO，LOCAL，LPARAMETERS，PARAMETERS( )，PRIVATE，PUBLIC，SET UDFPARMS


PARAMETERS( ) 函数

请参阅	示例

返回传递给程序、过程或用户自定义函数的参数数目，这里的程序、过程或用户自定义函数是指最近调用的程序、过程或用户自定义函数。

语法

PARAMETERS( )

返回值类型

数值型

说明

PARAMETERS( ) 函数用以确定有多少参数传递给一个程序、过程，或用户自定义函数。

附注

每次调用程序、过程或用户自定义函数，或者执行 ON KEY LABEL 命令时，PARAMETERS( ) 函数的返回值都将被重置。


* 例 1 调用一个过程，并在一个等待窗口中显示
* 传递的参数数目。

*例 2 用一个过程显示 4 个数值的平均值。

* 例 1

DO testpar WITH 1,2,3

PROCEDURE testpar

PARAMETERS gn1,gn2,gn3

gcMessage = 'PARAMETERS( ) ='+ALLTRIM(STR(PARAMETERS( )))

WAIT WINDOW (gcMessage)

RETURN

* 例 2

SET TALK OFF

gnVal1 = 10

gnVal2 = 20

gnVal3 = 30

gnVal4 = 15

gnMin = getavg(gnVal1, gnVal2, gnVal3, gnVal4)

? 'Average value is '

?? gnMin

*下面这个用户自定义函数允许最多传递 9 个参数。

* 它用 PARAMETERS( ) 函数确定传递多少参数

* 并返回平均值。

FUNCTION getavg

PARAMETERS gnPara1,gnPara2,gnPara3,gnPara4,gnPara5, ;

gnPara6,gnPara7,gnPara8,gnPara9

IF PARAMETERS( ) = 0

RETURN 0

ENDIF

gnResult = 0

FOR gnCount = 1 to PARAMETERS( )

gcCompare = 'gnPara' +(STR(gnCount,1))

gnResult = gnResult + EVAL(gcCompare)

ENDFOR

gnResult = gnResult / (gnCount - 1)

RETURN gnResult


请参阅

DO，FUNCTION，LPARAMETERS，LOCAL，PARAMETERS，PRIVATE，PROCEDURE，PUBLIC，SET UDFPARMS


Parent 属性

请参阅

引用一个控制的容器对象。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，分隔符，形状，微调，文本框，计时器，工具栏

语法

Control.Parent

说明

设计时不可用，运行时只读。

使用 Parent 属性，可以访问一个控制所属的容器对象的属性、方法或控制。还可以使用 Parent 属性访问一个页面或表单的容器对象。

在应用程序中，当把控制作为参数传递时，Parent 属性很有用。例如，可以把一个控制变量传递给一个通用过程并且应用 Parent 属性访问此控制的容器对象。

如果一个控制类中的对象被放置在未知的表单对象上，也可以用 Parent 属性来引用。


请参阅

BaseClass 属性


ParentAlias 属性

请参阅

指定父表的别名。

应用于

关系

语法

DataEnvironment.Relation.ParentAlias[ = cText]

设置

cText

指定关系中父表的别名。

说明

设计和运行时只读。

ParentAlias 属性的设置必须与代表父表的临时表对象的 Alias 属性设置相同。


请参阅

Alias 属性，ChildAlias 属性


ParentClass 属性

请参阅

返回对象所属类的基类。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.ParentClass

说明

设计和运行时只读。

附注

在类设计器中，ParentClass 属性包含子类所属类的基类名称。


请参阅

Parent 属性


Partition 属性

请参阅

指定一个表格是否拆分为两个窗格，并且指定相对于表格左边的拆分位置。

应用于

表格

语法

Grid.Partition[ = nSplit]

设置

nSplit

指定表格控制中两个窗格的拆分位置，如果 nSplit 为 0，则不拆分表格。

说明

设计时可用，运行时可读写。


请参阅

Panel 属性，PanelLink 属性


PasswordChar 属性

请参阅

决定用户输入的字符或占位符是否显示在文本框控制中，并确定用作占位符的字符。

应用于

文本框

语法

TextBox.PasswordChar[ = cCharString]

设置

cCharString

指定显示在文本框中的字符。

说明

设计和运行时可用。

使用这个属性，可以在对话框中创建一个口令字段。虽然可以使用任何字符，但 Windows 应用程序更经常地使用星号 (*)，即 ANSI 码 42 。

这个属性不影响 Value 属性的设置；它忠实地包含用户键入的内容或者代码的设置值。为了显示实际文本，可把 PasswordChar 设置为空字符串 ("")。默认设置值是空字符串。

可以把这个属性指定为任何字符串，但只有第一个字符是有意义的，其他字符都被忽略。


请参阅

Format 属性，InputMask 属性，Value 属性


PAYMENT( ) 函数

请参阅	示例

返回固定利息贷款按期兑付的每一笔支出数量。

语法

PAYMENT(nPrinciple, nInterestRate, nPayments)

参数

nPrinciple

指定贷款的开始本金。

nInterestRate

指定每个阶段的固定利率。如果贷款是按月偿还的，而利率是按年计算的，则把年利率除以 12。

nPayments

指定贷款的偿还次数。

返回值类型

数值型

说明

PAYMENT( ) 函数假定阶段利率是常数，并且假定在每个阶段未偿还贷款。


STORE 100000 to gnPrincipal	  && $100,000 的开始本金

STORE .105/12 TO gnInterest  && 10.5% 的年利率

STORE (20*12) TO gnPayments	  && 20 年按月偿还

CLEAR

? PAYMENT(gnPrincipal, gnInterest, gnPayments)  && 显示 998.38


请参阅

CALCULATE，FV( )，PV( )


_PBPAGE 系统内存变量

请参阅

包含第一个要打印的页面。包含此变量是为了提供向后兼容性，可用报表设计器代替。

语法

_PBPAGE = nBeginningPage

参数

nBeginningPage

为第一个要打印的页面指定一个值。默认初始值为 1。_PBPACE 必须小于等于 _PEPAGE。

说明

_PBPAGE 包含一个数值，该值决定第一个要打印的页面。当 _PBPAGE 大于 _PAGENO 时，不打印任何页面。Visual FoxPro 内部生成页面并递增 _PAGENO 及其他系统内存变量。当 _PAGENO 的值达到 _PBPAGE 值时，开始打印。


请参阅

_PAGENO，_PEPAGE，PRINTJOB ... ENDPRINTJOB


PCOL( ) 函数

请参阅	示例

返回打印机打印头的当前列位置。

语法

PCOL( )

返回值类型

数值型

说明

PCOL( ) 函数的返回值与打印机左边距的当前设置值有关。可以使用 SET MARGIN 命令设置左边距，或把一个值存储于系统内存变量 _PLOFFSET 中。

PCOL( ) 函数对欲打印文本的相对定位很有用。

可用 ＄ 操作符代替 PCOL( ) 函数。


CLEAR

@ PROW( ), PCOL( )+12 SAY 'Contact person'

@ PROW( ), $+12 SAY 'Contact person'


请参阅

COL( )，ROW( )，PROW( )


_PCOLNO 系统内存变量

请参阅

包含当前列的编号。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PCOLNO = nColumn

参数

nColumn

指定一个 0 到 255 之间的整数，这个整数把输出定位在所需的列上。给 _PCOLNO 指定一个数值与使用 ? 命令的 AT 子句作用相同。

说明

PCOLNO 包含一个建立当前列位置的数值。可以使用 _PCOLNO 决定下一个输出的列地址。当 Visual FoxPro 把输出传送给打印设备时，它自动递增 _PCOLNO 的值以指出当前的列位置。


请参阅

? | ??，PCOL( )，_PLINENO，SET PRINTER


_PCOPIES 系统内存变量

请参阅

包含打印份数。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PCOPIES = nCopies

参数

nCopies

给 nCopies 指定一个 1 到 32,767 之间的数值，该数值决定需要打印多少复本。默认的初始值为 1。

说明

只有与 PRINTJOB ... ENDPRINTJOB 一起使用时，_PCOPIES 才起作用。应在发出 PRINTJOB 命令之前，为 _PCOPIES 指定需要打印的副本数目。


请参阅

PRINTJOB ... ENDPRINTJOB


_PDRIVER 系统内存变量

请参阅

为基于字符的报表指定打印机驱动程序。包含此变量是为了提供向后兼容性。应在 REPORT 中使用 TO FILE ASCII 参数。

语法

_PDRIVER = ProgramName

参数

ProgramName

为基于字符的报表指定打印机驱动程序。把打印机驱动器程序名存储于 _PDRIVER 中，会把当前打印机驱动器程序（如果已经加载了一个）卸载。当把打印机驱动器程序名存储于 _PDRIVER 时，首先执行最近加载的打印机驱动器程序中的 PDONUNLOAD 过程（如果它有 PDONUNLOAD 过程），然后加载存储于 _PDRIVER 中的打印机驱动器，并且执行它的 PDONLOAD 过程（如果它有 PDONLOAD 过程）。

当把一个打印机驱动器程序存储于 _PDRIVER 时，Visual FoxPro 就显示“打印机驱动器已安装”。若不想显示这一信息，可以在向 _PDRIVER 之中存储打印机驱动器程序之前使用 SET NOTIFY OFF 命令。

说明

基于字符的报表是在 FoxPro for MS-DOS 中创建的，可以在 Visual FoxPro 和 FoxPro for Macintosh 中运行。在 FoxPro for Macintosh 中，打印 FoxPro for MS-DOS 中创建的基于字符的报表时，并不必需打印机驱动程序。


请参阅

REPORT，SET PDSETUP


_PDSETUP 系统内存变量

请参阅

加载或清除为基于字符的报表而作的打印机驱动程序设置。包含此变量是为了提供向后兼容性。可以在 REPORT中使用 TO FILE ASCII 参数。

语法

_PDSETUP = cPrinterDriverSetup

参数

cPrinterDriverSetup

指定一个打印机驱动程序设置，打印机驱动程序设置存储在 FOXUSER.DBF 的资源文件中。在 FoxPro for MS-DOS 中，可以在“打印机设置编辑”对话框中交互地创建打印机驱动程序设置并指定它们的名称。

如果源文件中不存在存储于 _PDSETUP 中的打印机驱动程序设置名，就执行当前的打印机设置接口应用程序。如果您在使用 GENPD.APP 并且 Visual FoxPro 包含默认的打印机设置接口应用程序，就会出现“打印机设置编辑”对话框，从中可以创建一个具有指定名称的设置。

如果资源文件中不存在包含于 cPrinteDriverSetup 中的打印机驱动程序设置名，可以在设置名前加横线 (—) 以阻止打印机驱动程序设置应用程序的执行。

也可以用 SET PDSETUP 命令加载或清除一个打印机驱动程序设置。要想加载一个打印机驱动程序设置，把设置的名字存储在 _PDSETUP中。把一个空串存储在 _PDSETUP 中，将清除当前的打印机驱动程序设置，同时也从内存中清除 _PDPARMS 数组。

要在启动 FoxPro for MS-DOS 时加载一个默认的打印机驱动程序设置，可以在 CONFIG.FP 文件中包含下面一行：

PDSETUP = 'cPrinterDriverSetup' WITH ParameterList

确保已把设置名放在引号之中。

说明

加载一个打印机驱动程序设置或清除当前的打印机驱动程序设置。一个打印机驱动程序设置是多种设置的组合，它包括打印机驱动程序及打印信息如页走向、默认字体大小和样式，页边距等等。当在 FoxPro for Windows 中打印创建于 FoxPro for MS-DOS 中的基于字符的报表时，需要用到打印机驱动程序设置。在 FoxPro for Macintosh 中打印创建于 FoxPro for MS-DOS 的基于字符的报表时，就不必需打印机驱动程序。


请参阅

_GENPD，_PDRIVER，SET PDSETUP，SET PRINTER


_PECODE 系统内存变量

请参阅

包含结束打印代码。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PECODE = cPrinterCodes

参数

cPrinterCodes

指定当执行 ENDPRINTJOB 时输出的一个字符值。cPrinterCodes 可以包含打印代码的任意集合，最多可有 255 个字符。_PECODE 的默认值是空串，有效代码在 0 到 255 之间。

有关特定控制代码序列的作用的详细内容，请参阅打印机手册。


请参阅

???，PRINTJOB ... ENDPRINTJOB，_PSCODE


_PEJECT 系统内存变量

请参阅

指定何时走纸。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PEJECT = cPageEjectValue

参数

cPageEjectValue

指定一个字符值，该值决定打印过程中 Visual FoxPro 何时传送走纸命令。cPageEjectValue 计算结果必须等于下列某一值：

cPageEjectValue	说明
BEFORE	打印开始前走纸。
AFTER	打印完成后走纸。
BOTH	打印开始前和打印完成后均走纸。
NONE	打印开始前和打印完成后均不走纸。
说明

如果 cPogeEjectValue 是一个原义字符串，必须把它括在引号中。

_PEJECT 只在 PRINTJOB ... ENDPRINTJOB 命令结构之中起作用。


请参阅

EJECT，EJECT PAGE，_PADVANCE，_PECODE，PRINTJOB ... ENDPRINTJOB，_PSCODE


PEMSTATUS( ) 函数

请参阅

返回一个属性、事件或方法的状态。

语法

PEMSTATUS(oObjectName | cClassName, cProperty | cEvent | cMethod,
nAttribute)

参数

oObjectName

指定一个对象，返回其属性、事件或方法的状态。oObjectName 可以是任意求值结果为对象的表达式，例如对象引用、对象内存变量或对象数组元素。

cClassName

指定一个类，返回其属性、事件或方法的状态。

cProperty

指定要返回其状态的属性。

cEvent

指定要返回其状态的事件。

cMethod

指定要返回其状态的方法。

nAttribute

指定对应属性、事件或方法的状态的数值。

下表列出了与属性、事件或方法的状态对应的值。

nAttribute	属性、事件或方法的状态
0	已更改 (仅用于属性)。如果属性的原始值、默认值已经更改，则返回“真”(.T.)，否则，返回“假”(.F.)。
1	只读 (仅用于属性)。如果属性是只读的，则返回“真”(.T.)，否则，返回“假”(.F.)。
2	受保护的。如果属性、事件或方法是受保护的，则返回“真”(.T.)，否则，返回“假”(.F.)。
3	类型。返回一个字符串表示 cProperty、cEvent 或 cMethod 是否为属性、事件或方法、属性、事件或方法将被返回。
4	用户自定义。如果属性、事件或方法是用户自定义的属性、事件或方法，则返回“真”(.T.) ，否则，返回“假”(.F.) 。
5	已定义的属性、事件或方法。如果 oObjectName 或 cClassName 的属性、事件或方法已存在，则返回“真”(.T.)，否则，返回“假”(.F.)。
返回值类型

字符型或逻辑型


请参阅

CREATE FORM，GETPEM( )，SYS(1269) - 属性信息，SYS(1270) - 对象位置，SYS(1271) - 对象的 .SCX 文件，SYS(1272) - 对象层次


_PEPAGE 系统内存变量

请参阅

指定结束页面的编号。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PEPAGE = nLastPageNumber

参数

nLastPageNumber

为结束页面编号指定一个 1 到 32,767 之间的数值 nLastPageNumber 。_PEPAGE 的值不能小于_PBPAGE，默认初始值为 32,767。把 _PEPAGE 和 _PBPAGE 一起使用可以打印某一范围的页面。如果只打印一个长报表的一页，可以把页面的编号存储到 _PBPAGE 和 _PEPAGE 中，这样只打印该指定的页面。

说明

_PEPAGE 包含一个数值，该值决定要打印的最后一个页面，当 PAGENO 的值大于存储在 _PEPAGE 中的数值时，Visual FoxPro 就停止打印。


请参阅

_PAGENO，_PBPAGE，PRINTJOB ... ENDPRINTJOB


PI( ) 函数

请参阅	示例

返回数值常数 π。

语法

PI( )

返回值类型

数值型

说明

数值常数 π(3.141592) 是一个圆的周长与直径的比值。

PI( ) 函数返回值的小数点位置由 SET DECIMALS 命令决定。


CLEAR

? PI( )   && 显示 3.14

STORE 2.30 TO gnRadius

STORE PI( ) * gnRadius^2 TO gnArea

? gnArea  && 显示 16.6190


请参阅

SET DECIMALS


Picture 属性

请参阅

指定需要在控制中显示的位图文件 (.BMP)，图标文件 (.ICO) 或通用字段。

应用于

复选框，命令按钮，容器对象，控制，自定义，表单，图象，选项按钮，页面，_SCREEN

语法

Control.Picture[ = cFileName | GeneralFieldName]

设置

cFileName

指定一个 .BMP 或 .ICO 文件。

GeneralFieldName

指定存有图形的通用字段名。

说明

设计和运行时可用。

此属性的设置值是一个 .BMP 文件的路径或是表中一个通用字段的名称。

附注

如果在设计时设置 Picture 属性但指定的文件不存在，Visual FoxPro 将显示错误信息，但仍把属性设置为指定的文件。如果运行时设置的文件不存在，Visual FoxPro 将忽略 Picture 属性。

位图在控制中居中对齐。对于复选框和选项按钮控制，为了能在控制中显示位图，Style 属性必须设置为 1（图形）。

对于命令按钮和选项按钮控制，不管按钮可用、选中或不可用，都会使用指定的位图。可以使用 DownPicture 或 DisabledPicture 属性为每种按钮状态指定一个不同的位图。


请参阅

DisabledPicture 属性，DownPicture 属性，Style 属性


PLAY MACRO 命令

请参阅

执行一个键盘宏。

语法

PLAY MACRO MacroName
[TIME nDelay]

参数

MacroName

指定需要执行的键盘宏名称。

TIME nDelay

指定在键盘宏中释放每个键击的时间间隔，延迟时间必须在 0 到 10 秒之间。nDelay 计算结果可以是十进制的小数。例如，如果指定 nDelay 等于 1.5，则将以 1.5 秒的时间间隔执行宏中的键击。

说明

通过按 SHIFT+F10，可以把一系列键击保存为一个键盘宏。PLAY MACRO 执行这一系列键击，在程序中执行键盘宏可以创建自动运行的演示程序。

如果在命令窗口中发出 PLAY MACRO 命令，将立即执行键盘宏。如果在程序中使用 PLAY MACRO 命令，直到程序执行一个允许键盘输入的命令之后才执行它。等待输入的命令有 ＠ ... CET，BROWSE，CHANGE 和 EDIT 等。

如果程序中有一系列的 PLAY MACRO 命令等待执行，Visual FoxPro 并不按它们出现的顺序执行。宏是按逆序执行的第一个 PLAY MACRO 最后执行，最后一个 PLAY MACRO 最先执行——在程序中按照从底向上的顺序执行。


请参阅

CLEAR MACROS，ON KEY LABEL，RESTORE MACROS，SAVE MACROS


_PLENGTH 系统内存变量

请参阅

包含页的长度。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PLENGTH = nLinesPerPage

参数

nLinesPerPage

指定一个数值，该值决定每页有多少行。_PLENGTH 的值应在 1 到 32,767 之间，默认值为 66。_PLENGTH 与 _PLINENO 一起使用可以决定何时需要走纸。


请参阅

EJECT，EJECT PAGE，ON PAGE，_PADVANCE，_PLINENO


_PLINENO 系统内存变量

请参阅

包含当前行的编号。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PLINENO = nCurrentLine

参数

nCurrentLine

指定一个数值，该值建立当前的行位置。使用 _PLINENO 变量可以决定打印输出的下一行。当 Visual FoxPro 向当前打印装置输出时，它递增 _PLINENO 来指出当前位置。nCurrentLine 可以是从 0 到 (_PLENGTH - 1) 之间的一个值。

PROW( ) 函数返回打印头的当前打印位置，并且当 SET PRINTER 设置为 OFF 时就不再递增。与 PROW( ) 函数不同，只要向打印机、屏幕或一个文件输出， Visual FoxPro 就递增 _PLINNO的数值。SET PRINTER 命令不影响 _PLINENO 的数值。


请参阅

_PCOLNO，PCOL( )，_PLENGTH，PROW( )


_PLOFFSET 系统内存变量

请参阅

包含页面偏移值。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_PLOFFSET = nColumns

参数

nColumns

指定一个数值，该值决定所有打印输出中从纸的左边沿到文本的左边沿的打印机列数（偏移）。_PLOFFSET 不影响传送到屏幕的输出。附加的 _LMARGIN 空间是根据 _PLOFFSET 计算得到的。

_PLOFFSE包含 0 到 254 之间的一个数值。_PLOFFSET 的作用等同于 SET MARGIN 命令，调整任何一个会自动地更改另一个。

_PLOFFSET 的设置并不影响用“报表设计器”创建并且用 REPORT FORM 命令运行的报表。运行“报表设计器”创建的报表时，虽然会调整_PLOFFSET 的数值，但在报表运行之后仍返回它的原始值。“报表设计器”内“页面布局”对话框中的“打印机缩进”设置决定了相对纸左边沿的偏移。


请参阅

_LMARGIN，SET MARGIN


Point 方法

请参阅

返回一个表单上特定点的红-绿-蓝（RGB）颜色。

应用于

表单，_SCREEN

语法

Object.Point ([nXCoord, nYCoord])

参数

nXCoord

按照表单 ScaleMode 属性设置的度量单位指定点的横坐标。

nYCoord

按照表单的 ScaleMode 属性设置的度量单位指定点的纵坐标。

说明

如果 nXCoord 或 nYCoord 在表单之外，则 Point 方法返回 -1。


请参阅

Circle 方法，Line 方法，Print 方法，PSet 方法


POP KEY 命令

请参阅

恢复用 PUSH KEY 命令放入栈内的 ON KEY LABEL 指定键值。

语法

POP KEY
[ALL]

参数

ALL

清除所有当前用 ON KEY LABEL 命令定义的键指定值，并且清除堆栈中所有用 ON KEY LABEL 命令定义的键指定值。

说明

当 POP KEY 与 PUSH KEY 命令一起使用时，可以先保存一系列用 ON KEY LABEL 命令创建的键指定值，然后用更多的 ON KEY LABEL 命令更改键的指定值，最后还原初始的键指定值。

有关在堆栈上使用 ON KEY LABEL 命令的详细内容，请参阅 PUSH KEY。


请参阅

ON KEY LABEL，ON( )，PUSH KEY


POP MENU 命令

请参阅	示例

恢复用 PUSH MENU 命令压进堆栈的菜单栏定义。

语法

POP MENU MenuBarName
[TO MASTER]

参数

MenuBarName

指定菜单栏的名称，将此菜单栏的定义从堆栈中弹出。可以指定用户自定义菜单栏或是 Visual FoxPro 系统菜单栏。

TO MASTER

恢复第一个压进堆栈的菜单栏定义，然后清除堆栈。

说明

当 POP MENU与 PUSH MENU 命令一起使用时，可以先保存一个菜单栏定义，然后对菜单栏定义进行修改，最后把菜单栏定义还原成初始状态。

菜单栏按照后进先出顺序压进或弹出堆栈。


*  下面的示例先将系统菜单栏定义压进堆栈中，然后修改，
* 最后把原来的系统菜单栏定义弹出堆栈从而恢复它。
*

PUSH MENU _MSYSMENU

SET SYSMENU TO _MFILE, _MEDIT

POP MENU _MSYSMENU


请参阅

ACTIVATE MENU，DEFINE MENU，POP POPUP，PUSH MENU，PUSH POPUP


POP POPUP 命令

请参阅	示例

恢复用 PUSH POPUP 命令压进堆栈的菜单定义。

语法

POP POPUP MenuName

参数

MenuName

指定菜单名，从堆栈中弹出该菜单定义。这个菜单可以是用 DEFINE MENU 命令创建的用户自定义菜单，或者是 Visual FoxPro 系统菜单。

说明

当 POP POPUP 与 PUSH POPUP 命令一起使用时，可以先保存一个菜单定义，然后修改这个菜单定义，最后把它还原到初始状态。

菜单定义按照后进先出顺序压进和弹出堆栈。


* 在下面这个例子中，先创建一个名为 popExam 的菜单，将该菜单
*  定义压进堆栈。接着修改其中一个菜单项，最后将菜单定义弹出
*  堆栈，从而还原菜单的原始定义。

DEFINE POPUP popExam FROM 5,5

DEFINE BAR 1 OF popExam PROMPT 'One'

DEFINE BAR 2 OF popExam PROMPT 'Two'

DEFINE BAR 3 OF popExam PROMPT 'Three'

DEFINE BAR 4 OF popExam PROMPT 'Four'

ACTIVATE POPUP popExam NOWAIT

PUSH POPUP popExam

WAIT 'Popup pushed' WINDOW

RELEASE BAR 2 OF popExam

WAIT 'This is the modified popup' WINDOW

POP POPUP popExam

WAIT 'Popup popped, original popup restored' WINDOW

DEACTIVATE POPUP popExam

RELEASE POPUP popExam


请参阅

ACTIVATE POPUP，DEFINE POPUP，POP MENU，PUSH MENU，PUSH POPUP


POPUP( ) 函数

请参阅

以字符串形式返回活动菜单名；或者返回一个逻辑值，该值指出是否定义了一个菜单。

语法

POPUP([cMenuName])

参数

cMenuName

返回一个逻辑值，指出 cMenuname 是否已经定义。如果指定的菜单已经定义，POPUP( ) 函数返回“真”(.T.)；否则 POPUP( ) 函数返回“假”(.F.)。

返回值类型

字符型或逻辑型

说明

如果省略可选参数 cMenuName，POPUP( ) 函数以字符串形式返回活动菜单名。要使 POPUP( ) 函数返回菜单名，必须定义且激活一个菜单。可用 DEFINE POPUP 和 ACTIVATE POPUP 命令创建和激活菜单。菜单也可以是 Visual FoxPro 系统菜单。如果没有定义菜单或菜单不活动，或者在命令窗口发出 POPUP( ) 函数，POPUP( ) 将返回一个空字符串。


请参阅

ACTIVATE POPUP，BAR( )，DEFINE BAR，DEFINE POPUP，ON SELECTION POPUP


_PPITCH 系统内存变量

请参阅

存放打印机间距。包含此变量是为了提供向后兼容性，可用报表设计器代替。

语法

_PPITCH = cExpression

说明

FoxPro for MS-DOS 提供的打印机驱动应用程序 GENPD.APP 不使用 _PPITCH 变量，在 _PPITCH 系统内存变量中存储的任何值都不影响打印输出。

可以在您创建的打印驱动应用程序中使用 _PPITCH 内存变量。


请参阅

_PDRIVER


_PQUALITY 系统内存变量

请参阅

存放打印质量。包含此变量是为了提供向后兼容性，可用报表设计器代替。

语法

_PQUALITY = lExpression

说明

FoxPro for MS-DOS 提供的打印机驱动应用程序 GENPD.APP 不使用 _PQUALITY 变量，在 _PQUALITY 系统内存变量中存储的任何值都不影响打印输出。

可以在您创建的打印驱动应用程序中使用  PQUALITY 内存变量。


请参阅

_PDRIVER


_PRETEXT 系统内存变量

请参阅

指定一个放在文本合并行开头的字符表达式。

语法

_PRETEXT = cExpression

说明

用 SET TEXTMERGE 命令可以在一个程序中合并文本。可以向屏幕、窗口、打印机、文本文件或低级文件输出文本行、内存变量的内容以及表达式和函数的结果。

如果把一个字符表达式存储在 _PRETEXT 中，该字符表达式就会加在输出文本行的开头。为了方便程序缩进，可以把一个或多个制表符存储在 _PRETEXT 中。


请参阅

 \ | \\，SET TEXTMERGE，_TEXT


PRIMARY( ) 函数

请参阅	示例

如果索引标识为主索引标识，就返回“真”(.T.)；否则返回“假”(.F.)。

语法

PRIMARY([nIndexNumber] [, nWorkArea | cTableAlias])

参数

nIndexNumber

指定索引标识的编号，PRIMARY( ) 函数返回该索引是否为主索引。对 nIndexNumber 指定从 1 到结构复合索引标识和独立复合索引标识的总数间的某个数时，PRIMARY( ) 函数按下列顺序返回主索引状态：

1.	首先返回结构复合索引（如果存在）中每个标识的主索引状态，主索引状态按照标识在结构复合索引中创建的顺序返回。

2.	然后返回独立复合索引中每个标识的主索引状态，该独立复合索引文件必须是打开的。主索引状态按照标识在独立复合索引中创建的顺序返回。

如果省略 nIndexNumer 参数，PRIMARY( ) 将检查主控索引标识是否为主索引标识。如果没有主控索引标识，PRIMARY( ) 将返回“假”(.F.)。

nWorkArea

指定索引标识的工作区。

cTableAlias

指定索引标识的表别名。

如果省略 nWorkArea 和 cTableAlias 参数。PRIMARY( ) 检查最近选定的工作区中的索引标识，看它是否为主索引标识。

返回值类型

逻辑型


* 下面的示例打开 testdata 数据库中的 customer 表，应用
*  FOR ... ENDFOR 语句创建一个循环，在此循环中检查
*  customer 结构索引中每个索引标识的主索引状态，
* 然后显示每个结构索引标识名称以及其主索引状态。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	&&设置数据库路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE Customer	  && 打开 customer 表

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引标识

? TAG(nCount)  && 显示标识名

? PRIMARY(nCount)	  && 显示主索引状态

ELSE

EXIT  && 当没发现更多标识时退出循环

ENDIF

ENDFOR


请参阅

ALTER TABLE - SQL，CANDIDATE( )，CREATE TABLE - SQL，INDEX


Print 方法

请参阅

在表单对象上打印一个字符串。

应用于

表单，_SCREEN

语法

[FormSet.] Object.Print [(cText)]

参数

cText

指定需要打印的字符。如果省略 cText 参数，就打印一个空行。

在表单上打印的初始位置由 CurrentX 和 CurrentY 属性指定。如果包含一个回车符，CurrentX 按 cText 的宽度值（与 TextWidth 的返回值相同）增加，而 CurrentY 保持不变。

当 Print 方法结束时，CurrentX 和 CurrentY 属性设置成紧跟在最终打印字符后面的点。


请参阅

CurrentX, CurrentY 属性，TextHeight 方法，TextWidth 方法


PRINTJOB ... ENDPRINTJOB 命令

请参阅

激活打印作业中系统内存变量的设置。

语法

PRINTJOB
Commands
ENDPRINTJOB

参数

Commands

在打印作业结束之前，要执行的 Visual FoxPro 命令。

说明

PRINTJOB ...  ENDPRINTJOB 初始化打印机以及一些影响打印输出的系统内存变量。它可以向打印机传送控制代码、在打印作业之前和/或之后走纸、初始化打印机列数、控制打印的数目。

PRINTJOB 执行下列任务：

 •	   向打印机传送打印机启动控制代码，它们存储在系统内存变量 _PSCODE 中。有关打印机控制代码的详细内容，请参阅系统内存变量概述，以及打印机手册。

 •	   如果系统内存变量 _PEJECT 设置为 BEFORE 或 BOTH，则走一页纸。

 •	   把系统内存变量 _PCOLNO 设置为 0。_PCOLNO 存储打印机列数。

ENDPRINTJOB 执行下列任务：

 •	   向打印机传送打印机结束控制代码，它们存储在系统内存变量 _PECODE 中。可以把打印机重新设置为执行 PRINTJOB 前的配置。

 •	   如果系统内存变量 _PEJECT 设置为 AFTER 或 BOTH，则走一页纸。

 •	   如果系统内存变量 _PCOPIES 设置为大于 1（默认值）的值，则循环到 PRINTJOB 语句来开始打印报表的另一个副本，系统内存变量 _PCOPIES 的值决定了副本数目。当已打印的副本数目等于 _PCOPIES 值时，Visual FoxPro 退出循环，程序执行 ENDPRINTJOB 后的下一条命令。

PRINTJOB 和 ENNDPRINTJOB 只能在一个程序内部执行，不能嵌套。


请参阅

ON PAGE，系统内存变量概述


PRINTSTATUS( ) 函数

请参阅	示例

如果打印机或打印设备已联机，则返回“真”(.T.)；否则返回“假”(.F.)。

语法

PRINTSTATUS( )

返回值类型

逻辑型

说明

PRINTSTATUS( ) 与 SYS(13) 相类似，不同的是 SYS(13) 返回 READY 而不是“真”(.T.)，返回 OFFLINE 而不是“假”(.F.)。

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，如果已通过 Windows 的控制面板或 Macintosh Chooser 将打印机联机，则 PRINTSTATUS( ) 总返回“真”(.T.)。


? PRINTSTATUS( )

*** 程序示例 ***

STORE PRINTSTATUS( ) TO glReady

IF NOT glReady

WAIT 'Make sure printer is attached and turned on!' WINDOW

ELSE

WAIT 'Printer is ready!' WINDOW

ENDIF


请参阅

SET DEVICE，SET PRINTER，SYS(13) - 打印机状态


PRIVATE 命令

请参阅	示例

在当前程序中隐藏指定的、在调用程序中定义的内存变量或数组。

语法

PRIVATE MemVarList
 — 或者 —
PRIVATE ALL
[LIKE Skeleton | EXCEPT Skeleton]

参数

MemVarList

要声明为私有的内存变量或数组。

ALL LIKE Skeleton

PRIVATE 隐藏所有名称与 Skeleton 相匹配的内存变量和数组，Skeleton可以包含问号 (?) 和星号 (*) 通配符。

ALL EXCEPT Skeleton

PRIVATE 隐藏所有名称与 Skeleton 不匹配的内存变量或数组，Skeleton 可以包含问号 (?) 和星号 (*) 通配符。

说明

将高层程序中创建的、与私有变量同名的变量隐藏起来，可以在当前程序中操作这些私有变量，而不影响被隐藏变量的值。一旦包含 PRIVATE 命令的程序执行完毕，所有声明为私有的内存变量和数组就可恢复使用。

PRIVATE 并不创建变量，它只在当前程序中隐藏变量，这些变量是在高层程序中声明的。


*** 演示 PRIVATE 的程序示例***

SET TALK OFF

val1 = 10

val2 = 15

DO down

? val1, val2  && 显示 10, 100

PROCEDURE down

PRIVATE val1

val1 = 50

val2 = 100

? '       Val1       Val2'

? val1, val2  && 显示 50, 100

RETURN


请参阅

DIMENSION，FUNCTION，LOCAL，LPARAMETERS，PARAMETERS，PARAMETERS( )，PROCEDURE，PUBLIC


PRMBAR( ) 函数

请参阅

返回一个菜单项的文本。

语法

PRMBAR(MenuName, nMenuItemNumber)

参数

MenuName

指定菜单名。

nMenuItemNumber

菜单项的编号，PRMBAR( ) 返回它的文本。例如，如果 nMenuItemNumber 为 1，就返回第一个菜单项的文本；如果 nMenuItemNumber 为2，就返回第二个菜单项的文本，… 依此类推。这个表达式至少为 1，并且不能大于菜单中菜单项的数目。

返回值类型

字符型

说明

可以用 DEFINE POPUP 命令创建菜单，用 DEFINE BAR 命令创建菜单中的菜单项。PRMBAR( ) 也可以用于 Visual FoxPro 系统菜单。PRMBAR( ) 函数返回出现在菜单项上的文本，菜单可以不是活动的。

如果创建菜单时，用反斜杠和小于号 (\<) 创建了快捷键，或用反斜杠 (\) 使菜单项废止，PRMBAR( ) 只返回菜单项的文本，而不包含这些特殊字符。当菜单项是用反斜杠和破折号 (\-) 创建的分隔线时，PRMBAR( ) 返回一个空字符串。


请参阅

CNTBAR( )，GETBAR( )，DEFINE BAR，DEFINE POPUP，MRKBAR( )，PRMPAD( )


PRMPAD( ) 函数

请参阅	示例

返回一个菜单标题的文本。

语法

PRMPAD(MenuBarName, MenuTitleName)

参数

MenuBarName

指定包含菜单标题的菜单栏名称。

MenuTitleName

指定菜单标题。

返回值类型

字符型

说明

可用 DEFINE MENU 命令创建菜单栏，用 DEFINE PAD 命令创建菜单标题。PRMPAD( ) 函数也可以用于 Visual FoxPro 系统菜单。PRMPAD( ) 返回一个菜单标题的文本，该菜单栏可以不是活动的。

如果创建菜单标题时用反斜杠和小于号 (\<) 创建了快捷键，或用反斜杠 (\) 使菜单标题废止，PRMPAD( ) 只返回菜单标题的文本，而不包含这些特殊字符。


* 在下面示例中，创建了名为 mnuExample 的菜单栏，它有三
* 个菜单标题。从名为 titleTwo 和 titleThree 的菜单
* 标题中，不能返回快捷键和废止选项指示符。激活该菜单显示
* 菜单标题，菜单标题显示后将菜单栏从屏幕和内存中
* 清除掉。

CLEAR

SET TALK OFF

STORE 'mnuExample' TO gcPopName

DEFINE MENU mnuExample BAR AT LINE 1

DEFINE PAD titleOne OF mnuExample PROMPT 'This will be returned'

DEFINE PAD titleTwo OF mnuExample PROMPT '\<As will this'

DEFINE PAD titleThree OF mnuExample PROMPT '\And this, too'

@  8,1 SAY PRMPAD('mnuExample', 'titleOne')

@  9,1 SAY PRMPAD('mnuExample', 'titleTwo')

@ 10,1 SAY PRMPAD(gcPopName, 'titleThree')

ACTIVATE MENU mnuExample

DEACTIVATE MENU mnuExample

RELEASE MENU mnuExample


请参阅

CNTBAR( )，GETBAR( )，DEFINE BAR，DEFINE POPUP，MRKPAD( )，PRMBAR( )


PROCEDURE 命令

请参阅	示例

用在程序文件中标识一个过程的开始。

语法

PROCEDURE ProcedureName

参数

ProcedureName

指定要创建的过程名称。

说明

PROCEDURE 是程序文件中的语句，它指明程序文件中每个过程的开始，并且定义过程名称。过程名称必须以一个字母或下划线开头，可以包含字母、数字和下划线的任何组合。

在 Visual FoxPro 中，过程名最长可达 254 个字符；在 FoxPro for Windows 和 Foxpro for MS-DOS 中，过程名最长可达 10 个字符。

在 FoxPro for Macintosh 中，过程名最长可达 31 个字符。为了把多于 10 个字符的程序文件名与另一个以前 10 个相同字符开始的过程名区分开来，可以把程序文件名放在引号中，或在程序文件名后加一个扩展名。

PROCEDURE 语句后面是一系列命令，它们构成了过程。在最后一条语句之后，过程自动执行一条隐含的 RETURN 命令，也可以在过程最后一行中包含 RETURN 命令。

当用 DO ProcedureName 命令执行过程时，Visual FoxPro 按特定的顺序搜索过程。这个搜索顺序是：

1.	包含 DO ProcedureName 命令的程序。

2.	当前的数据库。

3.	用 SET PROCEDURE 命令打开的过程文件。

4.	执行链中的程序。Visual FoxPro 从最近执行的程序开始，往回连续搜索到第一个执行的程序。

5.	一个独立的程序文件。如果找到了一个与 DO 所指定的文件名同名的程序文件，Visual FoxPro 就执行这个程序；如果没有找到匹配的程序文件名，Visual FoxPro 就产生错误信息。


SET CENTURY ON

? longdate({02/16/95})  && 显示 Thursday, February 16, 1995

PROCEDURE longdate

PARAMETER mdate

RETURN CDOW(mdate) + ', ' + MDY(mdate)


请参阅

FUNCTION，LPARAMETERS，LOCAL，PARAMETERS，PARAMETERS( )，PRIVATE，PUBLIC，RETURN，SET PROCEDURE，SET UDFPARMS，使用过程和用户自定义函数


PROGRAM( ) 函数

请参阅	示例

返回当前正在执行的程序的名称，或者错误发生时所执行的程序的名称。

语法

PROGRAM([nLevel])

参数

nLevel

指定程序嵌套层次，这个参数值在 0 到程序嵌套深度之间。一个程序可以执行另一个程序，这个程序又可以执行另外一个程序，依次类推，最多可以嵌套 128 层。

如果把 nLevel 指定为 0 或 1，PROGRAM( ) 函数返回主程序名（最高层程序)。如果 nLevel 超过程序嵌套深度，PROGRAM( ) 返回一个空字符串。

返回值类型

字符型

说明

PROGRAM( ) 有助于程序从错误中恢复，它类似于 SYS(16)。如果不使用参数，PROGRAM( ) 返回当前执行的程序名。


ON ERROR DO errhand WITH PROGRAM( )

***下面一行应该生成一个错误 ***

USE nodatabase

ON ERROR	  &&返回默认的系统错误处理程序

PROCEDURE errhand

PARAMETERS gcProgram

WAIT 'An error occurred in the program ' + gcProgram WINDOW


请参阅

DO，LINENO( )，MESSAGE( )，SYS(16) - 执行程序文件名


ProgrammaticChange 事件

请参阅

在代码中更改一个控制值时发生。

应用于

复选框，组合框，命令按钮，编辑框，列表框，选项组，微调，文本框

语法

PROCEDURE Control.ProgrammaticChange
[LPARAMETERS nIndex]

参数

nIndex

在控制数组中唯一标识一个控制。


请参阅

Caption 属性，Style 属性


PROMPT( ) 函数

请参阅

返回菜单栏中选定的菜单标题，或者菜单中选定菜单项的文本。

语法

PROMPT( )

返回值类型

字符型

说明

PROMPT( ) 函数返回菜单栏中最近选定的菜单标题文本，或者是一个菜单中最近选定的菜单项文本。菜单栏或菜单可以是用户自定义的菜单栏或菜单，也可以是 Visual FoxPro 的系统菜单栏或菜单。如果菜单栏或菜单不是活动的，或者按了 ESC 键退出菜单栏或菜单，PROMPT( ) 将返回一个空字符串。

可以用 DEFINE MENU 命令创建菜单栏，用 DEFINE PAD 命令创建菜单栏中的每个菜单标题。用 DEFINE POPUP 命令创建菜单，用 DEFINE BAR 命令创建菜单中的菜单项。

当菜单栏（或菜单）中的菜单标题（或菜单项）被选中时，MENU( ) 和 POPUP( ) 函数可以返回菜单栏名（或菜单名）。


请参阅

BAR( )，DEFINE BAR，DEFINE MENU，DEFINE PAD，DEFINE POPUP，POPUP( )，PRMBAR( )


PROPER( ) 函数

请参阅	示例

从字符表达式中返回一个字符串，字符串中的每个首字母大写。

语法

PROPER(cExpression)

参数

cExpression

指定一个字符表达式，PROPER( ) 函数返回首字母大写的字符串。

返回值类型

字符型


STORE 'Visual FoxPro' TO gcExpr1

CLEAR

? PROPER(gcExpr1)  && 显示 Visual FoxPro

STORE 'VISUAL FOXPRO' TO gcExpr2

? PROPER(gcExpr2)  && 显示 Visual FoxPro


请参阅

LOWER( )，UPPER( )


PROW( ) 函数

请参阅	示例

返回打印机打印头的当前行号。

语法

PROW( )

返回值类型

数值型

说明

如果执行 EJECT 命令，Visual FoxPro 把 PROW( ) 重置为 0。

PROW( ) 对于确定打印文本的相对位置特别有用。


*  在下面的示例中，两个命令返回相同的结果。可以用
*  $ 操作符代替 PCOL( ) 函数，＄ 和 PCOL( ) 都返
* 回打印机的当前列位置。

@ PROW( ), PCOL( ) + 12 SAY 'Contact person'

@ PROW( ), $+12 SAY 'Contact person'


请参阅

@ ... SAY，COL( )，PCOL( )，ROW( )


PRTINFO( ) 函数

请参阅

返回当前的打印机设置。

语法

PRTINFO(nPrinterSetting [, cPrinterName])

参数

nPrinterSetting

指定返回 Visual FoxPro 打印机的某个设置。

在下面表中列出了打印机设置的返回值。

附注

如果 PRTINFO(2) 返回 -1，就用 PRTINFO(3) 和 PRTINFO(4) 返回纸的大小。

如果 nPrinterSetting 等于 1 (FOXPRO.H 中的 PRT_ORIENTATION)，PRTINFO( ) 返回纸的方向。

返回值	设置
1	信息不可使用
0	纵向
1	横向
如果 nPrinterSetting 等于 2 (FOXPRO.H 中的PRT_PARERSIZE)，PRTINFO( ) 返回纸的大小：

返回值	设置
1	信息不可使用。使用 nPrinterSetting =3 和 nPrinterSetting =4 决定纸的大小。
1	Letter, 8 1/2 x 11 in
2	Letter Small, 8 1/2 x 11 in
3	Tabloid, 11 x 17 in
4	Ledger, 17 x 11 in
5	Legal, 8 1/2 x 14 in
6	Statement, 5 1/2 x 8 1/2 in
7	Executive, 7 1/4 x 10 1/2 in
8	A3, 297 x 420 mm
9	A4, 210 x 297 mm
10	A4, Small  210 x 297 mm
11	A5, 148 x 210 mm
12	B4, 250 x 354 mm
13	B5, 182 x 257 mm
14	Folio, 8 1/2 x 13 in
15	Quarto, 215 x 275 mm
16	10 x 14 in
17	11 x 17 in
18	Note, 8 1/2 x 11 in
19	Envelope #9, 3 7/8 x 8 7/8 in
20	Envelope #10, 4 1/8 x 9 1/2 in
21	Envelope #11, 4 1/2 x 10 3/8 in
22	Envelope #12, 4 1/2 x 11 in
23	Envelope #14, 5 x 11 1/2 in
24	C size sheet
25	D size sheet
26	E size sheet
27	Envelope DL, 110 x 220 mm
28	Envelope C5, 162 x 229 mm
29	Envelope C3, 324 x 458 mm
30	Envelope C4, 229 x 324 mm
31	Envelope C6, 114 x 162 mm
32	Envelope C65, 114 x 229 mm
33	Envelope B4, 250 x 353 mm
34	Envelope B5, 176 x 250 mm
35	Envelope B6, 176 x 125 mm
36	Envelope, 110 x 230 mm
37	Envelope Monarch, 3 7/8 x 7.5 in
38	6 3/4 Envelope, 3 5/8 x 6 1/2 in
39	US Std Fanfold, 14 7/8 x 11 in
40	German Std Fanfold, 8 1/2 x 12 in
41	German Legal Fanfold, 8 1/2 x 13 in
如果 nPrinterSetting 等于 3 (FOXPRO.H 中的 PRT_PAPERLENGTH)，PRTINFO( ) 按 .1mm 为单位返回纸的长度。

如果 nPrinterSetting 等于 4 (FOXPRO.H 中的 PRT_PAPERWIDTH)，PRTINFO( ) 按 .1mm 为单位返回纸的宽度。

如果 nPrinterSetting 等于 5 (FOXPRO.H 的 PRT_SCALE)，PRTINFO( ) 返回打印输出的比例因子。

如果 nPrinterSetting 等于 6 (FOXPRO.H 中的 PRT_COPIES)，PRTINFO( ) 返回需要打印的副本数目。

如果 nPrinterSetting 等于 7 (FOXPRO.H 中的 PRT_DEFASOURCE)，PRTINFO( ) 返回默认的纸张来源：

返回值	设置
1	上层纸盒
2	下层纸盒
3	中层纸盒
4	人工送纸
5	信封纸盒
6	人工送纸的信封
7	自动选取
8	输纸器送纸
9	小型样式
10	大型样式
11	大容量
14	卡式盒
如果 nPrinterSetting 等于 8 (FOXPRO.H 中的 PRT_PRTQUAL)，PRTINFO( ) 返回一个正值，以每英寸的点数 (DPI) 指示水平分辨率，或一个负值指示打印质量：

返回值	设置
-1	草图
-2	低档
-3	中档
-4	高档
如果 nPrinter Setting 等于 9 (FOXPRO.H 中的 PRT_COLOR)，PRTINFO( ) 返回一个值，指示彩色打印机输出为彩色还是黑白：

返回值	设置
1	彩色
2	黑白
如果 nPrinterSetting 等于 10 (FOXPRO.H 中的 PRT_DUPLEX)，PRTINFO( ) 返回双工方式：

返回值	设置
1	单向打印
2	垂直双向打印
3	水平双向打印
如果 nPrinterSetting 等于 11 (FOXPRO.H 中的 PRT_YRESOLUTION)，PRTINFO( ) 以每英寸的点数 (DPI) 返回垂直分辨率。如果此信息不可用，返回 -1。

如果 nPrinterSetting 等于 12 (FOXPRO.H 中的 PRT_TTOPTION)，PRTINFO( ) 返回一个值，指示如何打印 TueType 字体：

返回值	设置
1	作为位图图形打印
2	作为软字体下载
3	替代设备字体
如果 nPrinterSetting 等于 13，PRTINFO( ) 返回一个值指示输出是否排序：

返回值	设置
0	不排序
1	排序
cPrinterName

指定需要返回信息的打印机名，如果省略 cPrinterName，则返回默认的打印机的信息。

返回值类型

数值型

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

Visual FoxPro 的打印机设置是在“页面设置”对话框中进行的。从“文件”菜单中选择页面设置可以显示 Visual FoxPro 的“页面设置”对话框。


请参阅

GETPRINTER( )，PRINTSTATUS( )，SET DEVICE，SET PRINTER，SYS(13) - 打印机状态，SYS(1037) - 页面设置对话框


_PSCODE 系统内存变量

请参阅

存放初始打印代码。包含此变量是为了提供向后兼容性，可用报表设计器代替。

语法

_PSCODE = cPrinterCodes

参数

cPrinterCodes

指定一个字符值，在执行 PRINTJOB 命令时输出该值。cPrinterCodes 可以包含打印代码的任何组合，最多可达 255 个字符，默认值是空串。

附注

有关特定控制代码序列作用的详细信息，请参阅打印机手册。


请参阅

? | ??，_PECODE 系统内存变量，PRINTJOB ... ENDPRINTJOB


PSet 方法

请参阅

把一个表单或 Visual FoxPro 主窗口中的一个点设置成前景色。

应用于

表单，_SCREEN

语法

[FormSet.]Object.PSet([nXCoord, nYCoord])

参数

nXCoord

按照表单 ScaleMode 属性指定的度量单位指定需要设置的点的横坐标。

nYCoord

按照表单 ScaleMode 属性指定的度量单位指定需要设置的点的纵坐标。

说明

所画点的大小由 DrawWidth 属性决定。当 DrawWidth 设置为 1 时，PSet 方法把单个象素设置成指定颜色；当 DrawWidth 设置为大于 1 的值时，点在指定坐标上居中对齐。画点的方式取决于 DrawMode 和 DrawStyle 属性的设置。

调用 PSet 方法时，CurrentX 和 CurrentY 属性设置为指定点的坐标。


请参阅

CurrentX, CurrentY 属性，DrawMode 属性，DrawStyle 属性，DrawWidth 属性，ForeColor 属性


_PSPACING 系统内存变量

请参阅

存放打印机行间距。包含此变量是为了提供向后兼容性，可用报表设计器代替。

语法

_PSPACING = nLineSpacing

参数

nLineSpacing

指定一个数值，该值确定输出是一倍、二倍还是三倍行距。默认值是一倍行距 (1)，nLineSpacing 必须是 1 到 3 之间的一个值。

可以在“命令”窗口设置 _PSPACING，从而改变 DISPLAY 和 LIST 命令的输出，_PSPACING 也控制 DEFINE BOX 命令所定义框的高度。如果 _PSPACING 设置为 3，那么高度为 5 的框将变为 15 的高度。


请参阅

? | ??，_BOX 系统内存变量，DEFINE BOX，_PSCODE 系统内存变量


PUBLIC 命令

请参阅	示例

定义全局内存变量或数组。

语法

PUBLIC MemVarList
 — 或者 —
PUBLIC [ARRAY] ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] ...

参数

MemVarList

指定一个或多个要初始化为或指定为全局变量的内存变量。

[ARRAY] ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] ...

指定一个或多个数组，将它们初始化或命名为全局数组。有关每个参数的说明，请参阅 DIMENSION。

说明

对于当前 Visual FoxPro 工作期中执行的任何程序，都可以使用和修改全局变量和数组。

除了初始化为“真”(.T.) 的公共变量 FOX 和 FOXPRO 以外，用 PUBLIC 命令创建的内存变量和数组都初始化为“假”(.F.)。公共变量 FOX 和 FOXPRO 可以用来根据正在运行的用户产品的不同，有条件地执行代码。

在命令窗口中创建的任何内存变量或数组都自动设置为公有。

任何想要声明为公共的内存变量或数组，必须在赋值之前把它声明为公有。

如果在一个程序中先给一个内存变量或数组赋值，然后用 PUBLIC 把它声明为公共，Visual FoxPro 将会产生语法错误。


SET TALK OFF

PUBLIC val1,val2

val1 = 10

val2 = 15

DO down

? val1

? val2

RELEASE ALL 	 &&只释放私有变量

DISPLAY MEMORY LIKE val?

RELEASE val1,val2  &&必须明确地释放公共变量

DISPLAY MEMORY LIKE val?

PROCEDURE down

PRIVATE val1

val1 = 50

val2 = 100

? val1

? val2

RETURN


请参阅

DIMENSION，FUNCTION，LOCAL，LPARAMETERS，PARAMETERS，PARAMETERS( )，PRIVATE，PROCEDURE，RELEASE


PUSH KEY 命令

请参阅

把所有当前的 ON KEY LABEL 命令设置压入内存中的一个堆栈。

语法

PUSH KEY
[CLEAR]

参数

CLEAR

从内存中清除所有当前的键指定值。

说明

当 PUSH KEY 与 POP KEY 命令一起使用时，可以先保存用 ON KEY LABEL 命令定义的键指定值，再更改这些指定值，最后恢复为原来的指定值。

例如，在打开一个浏览窗口时，可能想使用一系列新的 ON KEY LABEY 命令。在打开浏览窗口之前，应使用 PUSHKEY 命令把当前的 ON KEY LABEL 键指定值保存到内存中，这时可以针对浏览窗口添加和更改 ON KEY LABEL 指定值。在关闭浏览窗口之后，可以用 POP KEY 从内存中还原原来的 ON KEY LABEL 键指定值。

ON KEY LABEL 设置按后进先出顺序压进和弹出堆栈。

可用 DISPLAY STATUS 和 LIST STATUS 命令显示 ON KEY LABEL 定义的当前键指定值。


请参阅

ON KEY LABEL，ON( )，POP KEY


PUSH MENU 命令

请参阅	示例

把一个菜单栏定义压进内存中的菜单栏定义堆栈。

语法

PUSH MENU MenuBarName

参数

MenuBarName

要压入堆栈的菜单栏名。菜单栏可以是用户自定义菜单栏，也可以是 Visual FoxPro 系统菜单栏。

说明

当 PUSH MENU 与 POP MENU 一起使用时，可以先保存一个菜单栏定义，再修改菜单栏定义，最后还原成初始状态。

菜单栏定义按照后进先出顺序压进和弹出堆栈。


* 在下面示例中，将 Visual FoxPro 系统菜单栏压进堆栈
*  并修改此菜单栏，然后还原初始的系统菜单栏。

WAIT WINDOW 'Press a key to push the system menu bar'

PUSH MENU _MSYSMENU

WAIT WINDOW 'Press a key to change the system menu bar'

SET SYSMENU TO _MFILE, _MEDIT

WAIT WINDOW 'Press a key to restore the system menu bar'

POP MENU _MSYSMENU


请参阅

ACTIVATE MENU，DEFINE MENU


PUSH POPUP 命令

请参阅	示例

把一个菜单定义压进内存中的菜单定义堆栈。

语法

PUSH POPUP MenuName

参数

MenuName

指定要压入堆栈的菜单名称。此菜单可以是 Visual FoxPro 系统菜单。

说明

当 POSH POPUP 与 POP POPUP 一起使用时，可以先保存一个菜单定义，修改菜单定义，然后还原成初始状态。

菜单定义按照后进先出顺序压进和弹出堆栈。


* 在下列示例中，创建了一个名为 popExam 的菜单。先将菜单
* 定义压进堆栈，然后修改此菜单。最后，弹出堆栈，还原初始
* 菜单。

DEFINE POPUP popExam FROM 5,5

DEFINE BAR 1 OF popExam PROMPT 'One'

DEFINE BAR 2 OF popExam PROMPT 'Two'

DEFINE BAR 3 OF popExam PROMPT 'Three'

DEFINE BAR 4 OF popExam PROMPT 'Four'

ACTIVATE POPUP popExam NOWAIT

PUSH POPUP popExam

WAIT 'Original Popup' WINDOW

RELEASE BAR 2 OF popExam

WAIT 'Modified Popup. Original Popup is pushed to a stack.' WINDOW

POP POPUP popExam

WAIT 'Original Popup restored' WINDOW

DEACTIVATE POPUP popExam

RELEASE POPUP popExam


请参阅

ACTIVATE POPUP，DEFINE POPUP


PUTFILE( ) 函数

请参阅	示例

激活“另存为 …”对话框，并返回指定的文件名。

语法

PUTFILE([cDialogCaption] [, cFileName] [, cFileExtensions])

返回值类型

字符型

参数

cDialogCaption

指定在“另存为 …”对话框上部显示的标题。注意：在 Windows 95 中，长标题可能被截断。

cFileName

指定在文本框中显示的默认文件名。

cFileExtensions

指定文件的扩展名。当清除“所有文件”复选框时，在“另存为 …”对话框的可滚动列表中，只显示具有指定扩展名的文件名。如果输入的文件名不包含扩展名，cFileExtensions 中的第一个扩展名会自动加到文件名上。有关 Visual FoxPro 中文件扩展名列表和相应的生成器类型，请参阅文件扩展名和文件类型主题。

Macintosh 忽略 cFileExtensions。可滚动列表中显示所有文件，但不能选中它们。可以选择可滚动列表中的文件夹，以便指定文件所在的文件夹。

字符表达式 cFileExtensions 可以是下列某一形式：

 •	   cFileExtensions 可以包含单个的扩展名（例如 PRG），只有带这个扩展名的文件名才被显示。

 •	   cFileExtensions 可以包含用分号分隔的文件扩展名列表。例如，如果包含 PRG;FXP，Visual FoxPro 将显示所有带 PRG 和 FXP 扩展名的文件名。

 •	   如果文件名具有相同的基本名，但扩展名不同（例如，CUSTOMER.PRG 和 CUSTOMER.FXP)，Visual FoxPro 所显示的文件是其扩展名在 cFileExtension 中位置靠前的文件。

 •	   cFileExtensions 可包含用竖线分隔的文件扩展名列表，例如 PRG|FXP。在这种情况下，即使文件有相同的基本名，Visual FoxPro 也把所有具有指定扩展名的文件名显示出来。

 •	   如果 cFileExtensions 只包含一个分号 (；)，Visual FoxPro 显示所有不带扩展名的文件名。

 •	   如果 cFileExtensions 是个空字符串，Visual FoxPro 显示当前目录中的所有文件名。

 •	   如果 cFileExtensions 包含 MS-DOS 通配符，例如问号 (?) 和星号 (*)，Visual FoxPro 显示所有扩展名符合通配符条件的文件名。例如，如果 cFileExtensions 包含 ?X?，扩展名为 .FXP，.EXE，.TXT 等等的文件都会显示。

说明

可以使用 PUTFILE( ) 选择现有的文件名或指定新文件名，PUTFILE( ) 返回一个文件名及其路径。如果不输入文件名，PUTFILE( ) 返回默认的文件名 (由 cFileName 指定) 和扩展名 (由 cFileExtensions 指定)；如果选定“取消”或按 ESC 键，PUTFILE( ) 返回一个空字符串。可以使用 PUTFILE( ) 返回的文件名命名一个文件并把它保存到磁盘上。


* 下面的例子从任意用户选中的已存储表中创建一个分隔数据
*  文件。GETFILE( ) 用来查找并打开一个表，PUTFILE( )
* 用来返回目标文件名。

gcTableName = GETFILE('DBF', 'Open Table:')

USE (gcTableName)

gcDelimName = ALIAS( ) + '.DLM'

gcDelimFile = PUTFILE('Delimited file:', gcDelimName, 'DLM')

IF EMPTY(gcDelimFile)  &&按了 ESC 键

CANCEL

ENDIF

COPY TO (gcDelimFile) DELIMITED	&&创建分隔数据文件

MODIFY FILE (gcDelimFile) NOEDIT


请参阅

FILE( )，GETEXPR，GETFILE( )，GETPICT( )，LOCFILE( )


PV( ) 函数

请参阅	示例

返回某次投资的现值。

语法

PV(nPayment, nInterestRate, nTotalPayments)

参数

nPayment

指定阶段支付额。nPayment 可取正值或负值。PV( ) 假定在每个阶段末支付。

nInterestRate

指定阶段利率。如果投资的利率是按年计算而按月支付的话，把年利率除以 12。

nTotalPayments

指定支付的总次数。

返回值类型

数值型

说明

在固定的阶段利率和一系列等值的阶段支付额基础上，PV( ) 函数计算投资的现值。


STORE 500 to gnPayment  &&阶段支付是按月进行

STORE .075/12 TO gnInterest	  && 7.5%的年利率

STORE 48 TO gnPeriods  && 4年(48个月)

CLEAR

? PV(gnPayment, gnInterest, gnPeriods)  &&显示 20679.19


请参阅

CALCULATE，FV( )


_PWAIT 系统内存变量

请参阅

指定打印机输出时是否在页之间暂停。包含此变量是为了提供向后兼容性，可用报表设计器代替。

语法

_PWAIT = lExpression

参数

lExpression

指定一个逻辑值来决定打印机是否在页之间暂停。与连续供纸的 (折扇型) 形式不同，_PWAIT 允许在单页纸上打印。当用 EJECT 命令使打印机走一页纸，或当 _PLINENO 超过 _PLENGTH 时，Visual FoxPro 挂起指向打印机的输出，这时可以人工插入另一页纸。


请参阅

EJECT，EJECT PAGE，_PLENGTH 系统内存变量，_PLINENO 系统内存变量


QueryUnload 事件

请参阅

在卸载一个表单之前发生此事件。

应用于

表单

语法

PROCEDURE Form.QueryUnload

说明

QueryUnload 事件发生在 Destroy 事件之前。调用 QueryUnload 事件之前应先设置 ReleaseType 属性。

当在代码中执行 CLEAR WINDOWS，RELEASE| WINDOWS 或 QUIT 等命令时、当用户双击控制菜单框时，或者当用户从表单的控制菜单中选择执行“关闭”命令时，发生 QueryUnload 事件。

附注

当在代码中执行 RELEASE 命令或调用表单的 Release 方法时，不会发生 QueryUnload 事件。

在 QueryUnload 事件过程中执行 NODEFAULT 可以阻止表单卸载。


请参阅

CLEAR，ControlBox 属性，DEFINE CLASS，Destroy 事件，QUIT，RELEASE，Release 方法，RELEASE WINDOWS，ReleaseType 属性，Unload 事件


QUIT 命令

请参阅

结束当前 Visual FoxPro 工作期，并将控制权返回给操作系统。

语法

QUIT

说明

在 FoxPro for MS-DOS 中控制权返回到 MS-DOS 提示符下。

在 Visual FoxPro 和 FoxPro for Windows 中，控制权返回给 Windows。

在 FoxPro for Macintosh，控制权返回给 Finder。

注意

请尽量使用 QUIT 命令结束 Visual FoxPro 工作期。如果不执行 QUIT 命令就关闭计算机电源，有可能损坏已打开的文件并丢失数据，并且，本应该删除的临时工作文件也有可能仍保留在磁盘上。


请参阅

CANCEL，RESUME，RUN，SUSPEND


RAND( ) 函数

请参阅	示例

返回一个 0 到 1 之间的随机数。

语法

RAND([nSeedValue])

参数

nSeedValue

指定种子数值，它决定 RAND( ) 函数返回的数值序列。

在第一次发出 RAND( ) 函数时用种子数 nSeedValue，然后再使用不带 nSeedValue 参数的 RAND( ) 函数，将得到一个随机数序列。如果第三次发出 RAND( ) 函数时使用同样的种子数值 nSeedValue，那么 RAND( )返回同样的随机数序列。

如果第一次发出 RAND( ) 时使用的 nSeedValue 参数是负数，那么将使用来自系统时钟的种子值。若要获得随机程度最大的数字序列，可以最初用一个负的参数发出 RAND( ) 函数，然后再不带参数发出 RAND( ) 函数。

如果省略了 nSeedValue 参数，RAND( ) 函数使用默认的种子数值 100001。

返回值类型

数值型


*下面的示例使用 RAND( ) 函数创建了包含 10 条随机记录
* 的表，然后使用 MIN( ) 和 MAX( ) 函数
* 来显示表中的最大值和最小值。

CLOSE DATABASES

CREATE TABLE Random (cValue N(3))

FOR nItem = 1 TO 10  &&追加 10 个记录。

APPEND BLANK

REPLACE cValue WITH 1 + 100 * RAND( )  && 插入随机数值。

ENDFOR

CLEAR

LIST  && 显示数值

gnMaximum = 1  && 初始化最小值

gnMinimum = 100  && 初始化最大值

SCAN

gnMinimum = MIN(gnMinimum, cValue)

gnMaximum = MAX(gnMaximum, cValue)

ENDSCAN

? 'The minimum value is: ', gnMinimum  && 显示最小值

? 'The maximum value is: ', gnMaximum  && 显示最大值


请参阅

EXP( )，PI( )


RangeHigh 事件

请参阅

对于微调控制或文本框，当控制失去焦点时，此事件发生。对于组合框或列表框，当控制得到焦点时，此事件发生。

应用于

组合框，列表框，微调，文本框

语法

PROCEDURE Object.RangeHigh
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

RangeHigh 事件能够通过 RETURN 语句返回给 Visual FoxPro 一个数值。对于具有某个数值的微调控制或文本框，如果返回给 Visual FoxPro 的数值小于输入到控制中的数值，那么该控制仍然保持焦点。对于组合框或列表框，返回给 Visual FoxPro 的数值指定初始时选定控制中的哪一个数据项。例如，如果 2 返回给 Visual FoxPro，那么初始时选定控制中的第二个数据项。


请参阅

KeyboardHighValue, KeyboardLowValue 属性，RangeLow 事件，RETURN，SpinnerHighValue, SpinnerLowValue 属性


RangeLow 事件

请参阅

对于微调控制或文本框，当控制失去焦点时，此事件发生；对于组合框或列表框，当控制获得焦点时，发生此事件。

应用于

组合框，列表框，微调，文本框

语法

PROCEDURE Object.RangeLow
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

Range Low 事件能够通过 RETURN 语句返回给 Visual FoxPro 一个数值。对于具有某个数值的微调控制或文本框，如果返回给 Visual FoxPro 的数值大于输入到控制中的数值，那么该控制仍然保持焦点。对于组合框或列表框，返回给 Visual FoxPro 的数值指定初始时选定控制中的哪一个数据项。例如，如果 2 返回给 Visual FoxPro，那么初始时选定控制中的第二个数据项。


请参阅

KeyboardHighValue, KeyboardLowValue 属性，RangeHigh 事件，RETURN，SpinnerHighValue, SpinnerLowValue 属性


RAT( ) 函数

请参阅	示例

返回一个字符表达式或备注字段在另一个字符表达式或备注字段内第一次出现的位置，从最右边的字符算起。

语法

RAT(cSearchExpression, cExpressionSearched [, nOccurrence])

参数

cSearchExpression

指定 RAT( ) 函数要在 cExpressionSearched 中搜索的字符表达式。

cExpressionSearched

指定 RAT( ) 函数搜索的字符表达式。字符表达式 cSearchExpression 和 cExpressionSearched 可以是任意大小的备注字段。

nOccurrence

指定 RAT( ) 函数在 cExpressionSearched 中从右到左搜索cSearchExpression 的第几次出现时的位置。默认时，RAT( ) 函数搜索 cSearchExpression 的最后一次出现 (nOccurrence=1) 时的位置。如果 nOccurrence 等于 2，RAT( ) 函数将搜索倒数第二次出现的位置，依此类推。

返回值类型

数值型

说明

与 AT( ) 函数相反，RAT( ) 函数在字符表达式 cExpressionSearched 中从右到左搜索另一个字符表达式 cSearchExpression 最近一次出现的位置。

RAT( ) 函数返回一个整数，该整数指示 cSearchExpression 的第一个字符在 cExpressionSearched 中的位置。如果在 cExpressionSearched 中没有找到 cSearchExpression，或者 nOccurrence 大于 cSearchExpression 在 cExpressionSearched 中的出现次数，那么 RAT( ) 函数返回 0。

RAT( ) 函数执行的搜索区分大小写。


STORE 'abracadabra' TO string

STORE 'a' TO find_str

CLEAR

? RAT(find_str,string)  && 显示 11

? RAT(find_str,string,3)  && 显示 6


请参阅

AT( )，ATCLINE( )，ATLINE( )，LEFT( )，OCCURS( )，RATLINE( )，RIGHT( )，SUBSTR( )


RATC( ) 函数

请参阅

返回一个字符表达式在另一个字符表达式或备注字段最后一次出现所在的行号，从最后一行算起。

语法

RATC(cSearchExpression, cExpressionSearched [, nOccurrence])

参数

cSearchExpression

指定 RATC( ) 函数要在 cExpressionSearched 中搜索的字符表达式。

cExpressionSearched

指定 RATC( ) 函数要在其中进行搜索的字符表达式。字符表达式cSearchExpression 和 cExpressionSearched 可以是任意大小的备注字段。

nOccurrence

指定 RATC( ) 函数在 cExpressionSearched 中，从右到左搜索cSearchExpression 的第几次出现时的位置。默认时，RATC( ) 函数搜索 cSearchExpression 的最后一次出现 (nOccurrence=1) 时的位置。如果 nOccurrence 等于 2，RATC( ) 函数将搜索倒数第二次的出现时的位置，依此类推。

返回值类型

数值型

说明

RATC( ) 返回一个字符表达式或备注字段在另一字符表达式或备注字段中最后出现的位置数值。字符表达式或备注字段可以包含单字节和双字节的任意组合。

与 ATC( ) 函数相反，RATC( ) 函数从左到右搜索。

RATC( ) 函数返回一个整数，该整数指示 cSearchExpression 的第一个字符在 cExpressionSearched 中的位置。如果在cExpressionSearched 中没有找到 cSearchExpression，或者 nOccurrence 大于 cSearchExpression 在 cExpressionSearched 中的出现次数，那么 RATC( ) 函数返回 0。

RATC( ) 函数执行的搜索区分大小写。


请参阅

AT_C( )，LEFTC( )，RAT( )，RIGHTC( )，SUBSTRC( )


RATLINE( ) 函数

请参阅	示例

返回一个字符表达式或备注字段在另一个字符表达式或备注字段中最后出现的行号，从最后一行开始计数。

语法

RATLINE(cSearchExpression, cExpressionSearched)

参数

cSearchExpression

指定 RATLINE( ) 函数要在 cExpressionSearched 中搜索的字符表达式。

cExpressionSearched

指定 RATLINE( ) 函数搜索的字符表达式。字符表达式 cSearchExpression 和 cExpressionSearched 可以是任意大小的备注字段。

使用 MLINE( ) 函数可以返回包含 cSearchExpression 的行。

提示

RATLINE( ) 函数为搜索备注字段提供了一个简便的方法。

返回值类型

数值型

说明

与 ATLINE( ) 函数相反，RATLINE( ) 函数从 cExpressionSearched 中的最后一个字符开始，在字符表达式cExpressionSearched 中搜索 cSearchExpression 出现的行号。

如果搜索成功，RATLINE( ) 函数返回匹配的行号；如果失败，RATLINE( ) 返回 0。

RATLINE( ) 执行的搜索区分大小写。

注意

即使 cExpressionSearched 不是备注字段，RATLINE( ) 函数所返回的行号也由 SET MEMOWIDTH 的值决定。有关详细内容，请参见 SET MEMOWIDTH 主题。


*在下面的示例中，RATLINE( ) 函数返回 notes 备注字段中
* 最后一个包含单词 graduated 的行号，
* MLINE( ) 函数使用这个值返回该行的内容。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  &&打开 Employee 表

STORE 'graduated' TO gcString

STORE MLINE(notes, RATLINE(gcString, notes)) TO gnFileLine

? gnFileLine


请参阅

AT( )，ATCLINE( )，ATLINE( )，LEFT( )，MLINE( )，OCCURS( )，RAT( )，RIGHT( )，SUBSTR( )


RD | RMDIR 命令

请参阅	示例

从磁盘上删除一个目录。

语法

RD cPath | RMDIR cPath

参数

cPath

指定要从磁盘上删除的目录名及其位置。

说明

如果试图删除一个非空的目录，Visual Foxpro 将产生错误信息。


* 下面的示例使用 MKDIR 命令创建了一个名为 mytstdir 的
*  目录，用 CHDIR 命令更改到此目录下，用 GETDIR( ) 函数显示该目
* 录结构，接着用 RMDIR( ) 命令删除该新创建的目录。
* 最后用 GETDIR( ) 再次显示目录结构。

SET DEFAULT TO HOME( )  && 还原Visual FoxPro目录

MKDIR mytstdir  && 创建新目录

CHDIR mytstdir  && 改变到新目录下

= GETDIR( )  && 显示“选择目录”对话框

SET DEFAULT TO HOME( )  && 还原 Visual FoxPro 目录

RMDIR mytstdir  &&删除新目录

= GETDIR( )  && 显示“选择目录”对话框


请参阅

CD | CHDIR，GETDIR( )，HOME( )，MD | MKDIR，SET DEFAULT，SET PATH，SYS(5) - 默认驱动器，SYS(2003) - 当前目录，SYS(2004) - Visual FoxPro 启动目录或文件夹


RDLEVEL( ) 函数

请参阅

返回当前 READ 命令的嵌套层数。包含此函数是为了提供向后兼容性，可用表单设计器代替。

语法

RDLEVEL( )

返回值类型

数值型

说明

可以在活动的 READ 命令期间执行的例程中，通过发出 ＠…GET 命令和 READ 命令来创建嵌套的 READ命令。READ 命令可以嵌套达 5 层。

RDLEVEL( ) 函数可以返回当前 READ 命令的层数，RDLEVEL( ) 函数根据当前 READ 命令嵌套的层数，返回数值 0，1，2，3，4 或 5。如果没有 READ 命令正在执行，RELEVEL( ) 返回 0。


请参阅

CLEAR EVENTS，CREATE FORM，表单设计器，READ


READ EVENTS 命令

请参阅

启动事件处理。

语法

READ EVENTS

说明

仅用于 Visual FoxPro。

当发出 READ EVENTS 命令时，Visual FoxPro 启动事件处理。

发出 CLEAR EVENTS 命令停止事件处理。当发出 CLEAR EVENTS 命令时，程序继续执行紧跟在 READ EVENTS 后面的那条语句。


请参阅

CLEAR 命令，表单设计器


READ 命令

请参阅

激活控制。包含此命令是为了提供向后兼容性，可用表单设计器代替。

语法

READ
[CYCLE]
[ACTIVATE lExpression1]
[DEACTIVATE lExpression2]
[MODAL]
[WITH WindowTitleList]
[SHOW lExpression3]
[VALID lExpression4 | nExpression]
[WHEN lExpression5]
[OBJECT nObjectNumber]
[TIMEOUT nSeconds]
[SAVE]
[NOMOUSE]
[LOCK | NOLOCK]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

CYCLE

当经过最后一个对象向后移动或从第一个对象向前移动时，继续维持 READ 命令。如果光标位于最后一个对象上而试图将其后移（通过按 TAB，ENTER 或 ↓ 键），则光标重新定位到第一个对象上。如果光标位于第一个对象上而试图将光标前移（通过按 SHIFT+TAB 或 ↑ 键），光标将重新定位到最后一个对象上。

若要终止包含 CYCLE 的 READ 命令，必须按终止按钮、ESC 或 CTRL+W 键，或者发出 CLEAR READ 或 TIMEOUT 子句。

ACTIVATE lExpression1

决定当发出 READ 命令或者当前 READ 窗口改变时，是否执行READ 命令。可以将 ACTIVATE 看成是一个窗口级的 WHEN 子句。

lExpression1 一般指定一个用户自定义的函数。WOUTPUT( ) 可以在用户自定义函数中确定哪个窗口是激活的。用户自定义函数可以禁止其他窗中的 ＠…GET 对象，隐藏窗口和显示信息等等。

DEACTIVATE lExpression2

在您试图将任一其他窗口拖前（也就是说，在 WONTOP( ) 的值更改时），计算当前窗口中字段的值。lExpression2 一般指定一个用户自定义函数。如果用户自定义函数返回“假”(.F.)，则不终止 READ 命令。如果用户自定义函数返回“真”(.T.)，则终止 READ 命令。

可以将 DEACTIVATE 看作是一个窗口级的 VALID 子句。

MODAL

防止激活不包含在 READ 语句中窗口的所有其他窗口。当发出 MODAL READ 之后，如果定义了不包含在 READ 语句中的窗口，那么不能激活或访问这些窗口。

WITH WindowTitleList

将参加到 READ 语句中的窗口限制在用 WindowTitlelist 指定的窗口之中。这些窗口可以包含 Visual FoxPro 系统窗口。例如命令窗口、浏览窗口、查看窗口等等。

包含 WITH 子句将自动创建 MODAL READ：

 •	   将浏览窗口标题（默认情况下，表的别名）包含到窗口列表中，使之可访问。

 •	   将别的表名包含到窗口列表中，以使备注窗口可访问。

如果窗口标题包含的不是字母、数字或下划线的字符，可以选择下列某一操作：

 •	   将第一个不是字母，数字或下划线的字符以前的标题部分包含到窗口列表中。例如，如果窗口标题是 Client list，那么将 Client 包含到窗口列表中（介于 Client 和 List 之间的空格不是字母、数字或下划线）。

 •	   将标题括在双引号内放置到窗口列表中。例如，如果窗口标题是 Client list，可以包含 Client list 到窗口列表中。

如果省略了 WITH 子句，所有交互式窗口（浏览窗口、命令窗口等等）和用 MODIRY FILE，MODIFY REPORT 等命令打开的窗口都参加到 READ 语句中。

SHOW lExpression3

刷新 ＠…SAY 命令，或者允许或废止对象。lExpression3 指定一个用以刷新 ＠…SAY 命令或者允许或废止控制的例程名称。

只要发出 SHOW GETS 后就执行 SHOW 子句，忽略 SHOW 例程返回的逻辑值。

VALID lExpression4 | nExpression

如果计算 lExpression4 为“真”(.T.)，就终止 READ 命令；如果计算VALID lExpression4 为“假”(.F.)，当前对象保持为活动。

当试图退出当前的 READ 命令或者发出的没有 ＠…GET 子句的 READ 命令超时时，计算 VALID 子句的值。VALID 子句可以指定一个逻辑或数值表达式，或者指定一个返回逻辑或数值的用户自定义函数 (UDF)。

如果对象不能保持为活动的（可能 VALID 例程使对象为不活动），那么将转移到第一个对象上。

如果 VALID 子句返回一个数值 nExpression，那么控制将移到相应的对象上。对于返回值不是逻辑型或数值型的 VALID 子句，其效果与返回“真”(.T.)的 VALID 子句相同。

WHEN lExpression5

决定是否执行 READ 命令。发出 READ命 令后计算 lExpression5 的值，如果为真，则执行 READ 命令；如果为“假”(.F.)，则忽略 READ 命令，程序紧接着执行 READ 语句之后的命令。

OBJECT nObjectNumber

指定当发出 READ 命令时初始选定的对象。nObjectNumber 决定初始时选定哪一个对象，对象编号由对象创建的顺序决定。

每一单个的命令，选项和透明按钮都可认为是一个对象。在下面的程序示例中，创建了一个字段和三个选项按钮，中间的选项按钮通过在 READ 语句中包含 OBJECT3 子句作为初始选定对象。gcName 字段是编号为 1 的对象。第一个选项按钮是编号为 2 的对象，第 2 个选项按钮是编号为 3 的对象，最后的选项按钮是编号为 4 的对象。

STORE 1 TO gnOption

STORE SPACE(10) TO gcName

CLEAR

@ 2,2 SAY 'Enter a name: ' GET gcName

@ 4,2 GET gnOption PICTURE '@*R Apples;Oranges;Lemons'

READ CYCLE OBJECT 3

TIMEOUT nSeconds

决定 READ 命令有效的时间长短。nSeconds 指定在 READ 命令终止之前，可以没有用户输入的秒数。如果 READ 命令被 TIMEOUT 子句终止，并且对象未做任何修改，READKEY( ) 返回 20。如果对象有修改时，REAKEY( ) 返回 276。

当 READ 命令被 TIME OUT 子句终止时，放弃对 READ 命令终止时正在编辑的字段的更改，但是保存对其他字段所做的更改。

SAVE

防止 READ 命令终止时自动清除对象的定义。如果在前一个 READ 命令中包含了 SAVE 参数，那么就可以再次发出 READ 命令，而不必重新创建这些对象。

NOMOUSE

在 Visual FoxPro 中不可用。

防止用鼠标来选定对象，必须用键盘来从一个对象移到另一个对象上。仍能在字段内部使用鼠标来剪裁、拷贝、粘贴和定位光标。

LOCK | NOLOCK

如果在网络上以共享方式打开表，在 READ 命令期间，决定是否自动锁定包含对象内指定的字段的记录。

LOCK 指定对于对象所用的每一个记录都尝试锁定。如果成功地锁定，就可以编辑该记录。SET REPROCESS 命令决定尝试锁定的次数或时间长短。如果不包含 LOCK 或 NOLOCK 子句，READ 命令默认使用 LOCK 子句。

NOLOCK 指定不锁定对象使用的记录。但是所有使用记录中字段的对象都成为只读的，不能选择该控制，它们以暗淡的颜色显示。

如果发出 READ NOLOC K命令后修改一个备注字段，则自动锁定该记录。

COLOR SCHEME nSchemeNumber

指定当前 ＠…GET 文本框的颜色。颜色对 2 决定当前 ＠…GET文本框的颜色。默认时，当前 ＠…GET 文本框的颜色由配色方案 1 中的颜色对 2，或 ＠…GET 文本框所在窗口的颜色对 2，或者由在 ＠…GET 中颜色子句中指定的颜色对 2 决定。颜色子句并不影响其他对象的颜色。

COLOR ColorPairList

指定当前 ＠…GET 文本框的颜色。颜色对是由正斜杠分隔的两个字母的组合。第一个字母指定前景色，第二个字母指定背景色。

有关颜色的列表和相应的颜色字母，请参阅概述或者有关颜色对的颜色表。


请参阅

CLEAR EVENTS，CREATE FORM，表单设计器


READ MENU 命令

请参阅

激活一个菜单，包含此命令是为了提供向后兼容性。使用菜单设计器可以创建菜单。

语法

READ MENU TO MemVarName [SAVE]

参数

TO MemVarName

指定内存变量或数组元素的名称。Visual FoxPro 将所选择的菜单项的名称存入这些内存变量或数组元素中。如果按 ESC 键退出菜单，那么 MemVarName 包含0。

SAVE

当选择了一个菜单项或按 ESC 键后，在 Visual FoxPro 主窗口或用户自定义的窗口中保留菜单的图象。默认时，Visual FoxPro 从 Visual FoxPro 主窗口或用户自定义的窗口中清除菜单。

说明

READMENU 命令激活用 ＠…MENU 命令创建的菜单。


请参阅

@ ... MENU，CREATE MENU


ReadActivate 事件

请参阅

当表单集中的一个新表单成为活动表单时，此事件发生。包含此事件是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

PROCEDURE FormSet.ReadActivate
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

仅当 WindowType 属性设置为 2（读）或 3（读模式），并且有一个 READ 命令有效时，此事件才会发生。当表单集中的一个表单成为活动时，事件的顺序是：

1.	ReadDeactivate 事件

2.	ReadActivate 事件


请参阅

ReadDeactivate 事件，WindowType 属性


ReadBackColor, ReadForeColor 属性

请参阅

指定当前 ＠…GET 编辑区域的背景色或前景色。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

FormSet.ReadBackColor[ = nColor]
FormSet.ReadForeColor[ = nColor]

设置

nColor

指定单一的颜色值。

附注

在属性窗口中，可以双击任何颜色属性来显示“颜色”对话框。可以从该对话框中选择或定义颜色。在关闭“颜色”对话框之后，与所选颜色对应的红、绿、蓝三种颜色的深度就成为这些属性的设置。

有关详细内容，请参阅 BackColor, ForeColor 属性主题中的颜色表。

说明

设计时可用，运行时可读写。仅当 WindowType 属性设置 2（读）或 3（读模式）时，ReadBackColor 和 ReadForeColor 属性可用。

ReadBackColor 和 ReadForeColor 属性与 READ 命令的 COLOR 子句类似。


请参阅

BackColor, ForeColor 属性，READ，WindowType 属性


ReadCycle 属性

请参阅

指定当焦点移出表单集中的最后一个对象时，表单集的第一个对象是否接受焦点。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

FormSet.ReadCycle[ = lExpr]

设置

lExpr

ReadCycle 属性的设置是：

设置	说明
“真” (.T.)	当焦点移出表单集中的最后一个对象时，焦点移动到表单集中的第一个对象。
“假” (.F.)	（默认值）当焦点移出表单集中的最后一个对象时，表单集就成为不活动的。
说明

设计时可用，运行时只读。仅当 WindowType 属性设置成 2（读）或 3（读模式）时，ReadCycle 属性可用。

ReadCycle 属性与 READ 命令的 CYCLE 子句作用类似。


请参阅

READ，WindowType 属性


ReadDeactivate 事件

请参阅

当表单集中的一个新表单成为不活动表单时，此事件发生。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

PROCEDURE FormSet.ReadDeactivate
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

仅当 WindowType 属性设置为 2（读）或 3（读模式），并且有一个 READ 命令有效时，ReadDeactivate 事件发生。

如果 ReadDeactivate 事件返回“真”(.T.)，那么表单集成为不活动的，并且发生 Unload 事件；如果 ReadDeactivate 事件返回“假”(.F.)，那么表单集仍然保持活动并且发生新表单的 ReadActivate 事件。


请参阅

ReadActivate 事件，Unload 事件，WindowType 属性


ReadExpression 方法

请参阅

返回属性窗口中某属性的表达式。

应用于

复选框，列，组合框，命令按钮，命令组，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，计时器，工具栏

语法

Object.ReadExpression(cPropertyName)

参数

cPropertyName

指定属性的名称，从该属性中返回表达式。

说明

仅在设计时可用。


请参阅

WriteExpression 方法


READKEY( ) 函数

请参阅

返回一个值，该值对应于退出某个编辑命令时需要按下的键，或者该值指明如何终止最后一个 READ 命令。包含此命令是为了提供向后兼容性，可用表单设计器代替。

语法

READKEY([nExpression])

参数

nExpression

指定 READKEY( ) 返回值指明最后一个 READ 命令是如何终止的。nExpression 可以是任意数值。

下表列出 READKEY( ) 函数的返回值和 READ 命令终止的原因。

数值	原因
1	下列之外的原因
2	发出 CLEAR READ 命令
3	选择了终止控制
4	关闭了 READ 窗口
5	DEACTIVATE 子句返回“真” (.T.)
6	READ 命令超时
返回值类型

数值型

说明

如果不带可选参数 nExpression 发出 READKEY( ) 函数，那么返回值代表从下列编辑命令退出时所按的键。这些编辑命令有：APPEND，BROWSE，CREATE，EDIT，INSERT，MODIFY 和 READ。

如果没有修改数据，READKEY( ) 函数就返回一个 0 到 36 之间的整数；如果修改了数据，就返回一个 256 到 292 之间的整数。下表列出了 READKEY( ) 函数返回的数值：

键	未更新数据的代码	更新数据的代码
Backspace Left Arrow Ctrl+H Ctrl+S	0	256
Right Arrow Ctrl+D* Ctrl+L	1	257
Home Ctrl+A*	2	258
End Ctrl+F	3	259
Up Arrow Ctrl+E* Shift+Tab Ctrl+K*	4	260
Down Arrow Ctrl+X* Tab Ctrl+Enter Ctrl+I Ctrl+J	5	261
Page Up Ctrl+R*	6	262
Page Down Ctrl+C	7	263
Ctrl+ Left Arrow	8	264
Ctrl+Q Esc	12	268
Ctrl+End Ctrl+W	-	270
Enter Ctrl+Right Arrow Ctrl+M	15	271
Timeout	20	276
Ctrl+Home Ctrl+]	33	289
Ctrl+Page Up Ctrl+_	34	290
Ctrl+Page Down Ctrl+^	35	291
F1	36	292
* 如果 SET SYSMENU 是 OFF 或者加载了FOXPLUS.FKY 文件，那么就返回这些值。在 FoxPro先前的版本中，可以在 GOODIES 目录下找到FOXPLUS.FKY 文件。在 Visual FoxPro 中不包含 FOXPLUS.FKY 文件。
在 FoxPro for Macintosh 中，READKEY( ) 函数也支持命令键 [image] [image] ．可使用 Cmd 命令来指定命令键 [image] [image] 。在 FoxPro for Macintosh 中控制键 (CTRL) 和命令键 [image] [image] 是等价的，可以相互替换使用。但是如果应用程序可能在其他 FoxPro 平台上运行，那么使用 CTRL 会更通用。有关 FoxPro for Macintosh 中键盘和键击的附加内容，请参阅 Installation and Macintosh Features Guide 书中的 Keyboard Differences 部分。

在 FoxPro for Macintosh 中，鼠标只有一个按钮。单击鼠标时，使用 ON KEY LABEL LEFTMOUSE 或 ON KEY LABEL MOUSE 命令执行一条命令。如果按下 Ctrl 或 Cmd+Option 键的同时单击鼠标，可使用 ON KEY LABEL RIGHTMOUSE 命令来执行一条命令。

FoxPro for Mcintosh 也支持将 RETURN 作为一个键的赋值。在 FoxPro for Macintosh 中 ONKEY LABEL RETURN 与ON KEY LABEL ENTER 等价。同样，ON KEY LABEL DEL 与 ON KEY LABEL BACKSPACE 等价。

FoxPro for MS-DOS 和 Visual FoxPro 中的 ALT 键，与 FoxPro for Macintosh 中的 Ctrl+Option 键相同。


请参阅

CREATE FORM，表单设计器，INKEY( )，ON KEY


ReadLock 属性

请参阅

包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

FormSet.ReadLock[ = lExpr]

设置

lExpr

ReadLock 属性的设置有：

设置	说明
“真” (.T.)	表单集中任何表单引用的全部记录都被锁定。
“假” (.F.)	（默认值）不影响任何记录。
说明

设计时可用，运行时只读。仅当 WindowType 属性设置为 2（读）或 3（读模式）时，Readlock 属性可用。

ReadLock 属性与 READ 命令的 LOCK 子句作用类似。


请参阅

READ，WindowType 属性


ReadMethod 方法

请参阅

返回指定方法的文本内容。

应用于

复选框，列，组合框，命令按钮，命令组，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，计时器，工具栏

语法

Control.ReadMethod(cMethod)

参数

cMethod

指定方法的名称。

说明

设计和运行时可用。


请参阅

ReadExpression 方法，WriteExpression 方法，WriteMethod 方法


ReadMouse 属性

请参阅

指定在给定表单集的表单上是否可以用鼠标在控制之间移动。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

FormSet.ReadMouse[ = lExpr]

设置

lExpr

ReadMouse 属性的设置有：

设置	说明
“真” (.T.)	（默认值）可以使用鼠标在表单上的控制之间移动。
“假” (.F.)	不能使用鼠标在表单上的控制之间移动，必须使用键盘来移动。
说明

设计和运行时可用。仅当 WindowType 属性设置成 2（读）或 3（读模式）时，ReadMouse 属性可用。

如果 ReadMouse 属性设置为“假” (.F.)，那么必须用 TAB 键在控制之间移动。


请参阅

WindowType 属性


ReadObject 属性

请参阅

指定激活表单集时拥有焦点的对象。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

复选框，列，组合框，命令按钮，命令组，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，计时器，工具栏

语法

FormSet.ReadObject[ = nFocus]

设置

nFocus

指定当激活表单集时具有焦点的对象。

说明

设计时可用，运行时只读。仅当 WindowsType 属性设置为 2（读）或 3（读模式）时，ReadObject 属性可用。

ReadObject 属性与 READ 命令的 OBJECT 子句作用类似。


请参阅

READ，WindowType 属性


ReadOnly 属性

请参阅

指定用户是否可以编辑一个控制或者更新与临时表对象相关联的表或视图。

应用于

列，临时表，编辑框，表格，微调，文本框

语法

[Form.]Control.ReadOnly[ = lExpr]
DataEnvironment.Cursor.ReadOnly[ = lExpr]

设置

lExpr

ReadOnly 属性的设置有：

设置	说明
“真” (.T.)	用户不能编辑控制。不能修改与临时表对象相关联的表或视图。
“假” (.F.)	（默认值）用户能够编辑控制。可以修改与临时表对象相关联的表或视图。
说明

设计时可用，运行时可读写。

附注

当用 CURSORSETPROP( ) 函数访问临时表时，ReadOnly 属性在运行时只读。

ReadOnly 属性不同于 Enabled 属性。因为当 ReadOnly 设置为“真” (.T.)时，用户仍然可以移动到控制上。

对于临时表，ReadOnly 属性与 USE 命令的 NOUPDATE 子句作用类似。


请参阅

Enabled 属性，USE


ReadSave 属性

请参阅

指定是否能用 READ 命令再次激活一个对象。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

FormSet.ReadSave[ = lExpr]

设置

lExpr

ReadSave 属性的设置有：

设置	说明
“真” (.T.)	可以通过发出 READ 命令再次激活表单集中的对象。
“假” (.F.)	（默认值）不能通过发出 READ 命令来再次激活表单集中的对象。
说明

设计时可用，运行时只读。仅当 WindowType 属性设置为 2（读）或 3（读模式）时，ReadSave 属性可用。

ReadSave 属性与 READ 命令的 SAVE 子句作用类似。


请参阅

READ，WindowType 属性


ReadShow 事件

请参阅

当在活动表单集中发出 SHOW GETS 命令，并且激活表单集时，发生 ReadShow 事件。包含此事件是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

PROCEDURE FormSet.ReadShow
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

仅当 WindowType 属性设置为 2（读）或 3（读模式）时，此事件才发生。当创建一个表单集时，事件的顺序是：

1.	Load 事件

2.	ReadWhen 事件

3.	ReadActivate 事件

4.	ReadShow 事件


请参阅

Load 事件，ReadActivate 事件，ReadWhen 事件，WindowType 属性


ReadTimeout 属性

请参阅

指定在没有用户输入时，表单集保持为活动状态的时间长短。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

FormSet.ReadTimeout[ = nTime]

设置

nTime

指定在没有用户输入的情况下消逝的秒数。一旦超过了这一时间值，表单就变为不活动的，并且发生 Unload 事件。

说明

设计和运行时可用。仅当 WindowType 属性设置为 2（读）或 3（读模式）时，ReadTimeOut 属性可用。

ReadTimeOut 属性与 READ 命令的 TIMEOUT 子句的动作。


请参阅

Deactivate 事件，READ，Unload 事件，WindowType 属性


ReadValid　事件

请参阅

在表单集成为不活动之后，此事件立即发生。包含此事件是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

PROCEDURE FormSet.ReadValid
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

仅当 WindowType 属性设置为 2（读）或 3（读模式）时，ReadValid 事件才会发生。

如果 ReadValid 事件返回“假”(.F.)，表单集将保持活动并且焦点返回到最近一个活动的表单上；如果 ReadValid 事件返回“真” (.T.)，那么表单集将成为不活动表单集，并且发生 Unload 事件。


请参阅

Deactivate 事件，Unload 事件，WindowType 属性


ReadWhen 事件

请参阅

当表单集加载之后发生此事件。包含此事件是为了提供与 READ 命令的向后兼容性。

应用于

表单集

语法

PROCEDURE FormSet.ReadWhen
[LPARAMETERS nIndex]

参数

nIndex

唯一标识位于控制数组中的一个控制。

说明

如果 ReadWhen 事件返回“假”(.F.)，那么表单集不被激活；如果 ReadWhen 事件返回“真”(.T.)，那么表单集就被激活，并且表单集中的第一个表单获得焦点。

仅当 WindowType 属性设置为 2（读）或 3（读模式）时，此事件才会发生。当创建一个表单集时，事件的顺序是：

1.	Load 事件

2.	ReadWhen 事件

3.	ReadActivate 事件

4.	ReadShow 事件


请参阅

Load 事件，ReadActivate 事件，ReadShow 事件，WindowType 属性


RECALL 命令

请参阅	示例

恢复所选表中带有删除标记的记录。

语法

RECALL
[Scope] [FOR lExpression1] [WHILE lExpression2]
[NOOPTIMIZE]

参数

Scope

指定要恢复记录的范围。只有在指定范围内的记录才被恢复。范围子句有 ALL，NEXT nRecords，RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句主题或者《开发指南》的第二章“语言概述”。

RECALL 命令默认的范围是当前记录 (NEXT1)。

FOR lExpression1

指定只恢复 lExpression1 计算为“真” (.T.)的记录，这可以筛选掉不需要的记录。

如果 lExpression1 是一个可优化表达式，那么 Rushmore 将优化 RECALL FOR 语句。为了得到最佳的性能，请在 FOR 子句中使用可优化表达式。有关 Rushmore 优化表达式的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题，或者《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只要 lExpression2 计算为“真” (.T.)时，就恢复删除的记录。

NOOPTIMIZE

关闭 RECALL 命令的 Rushmore 优化。请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题，或者《开发指南》的第十七章“优化应用程序”。

说明

只要没有发出 PACK 或 ZAP 命令，就可以使用 RECALL 命令恢复记录。

注意

一旦对文件使用了 PACK 或 ZAP 命令，那么所有带删除标记的记录将永远消失。

可以通过发出 DELETE 或 DELETE-SQL 命令给记录做删除标记，或者当浏览窗口或编辑窗口活动时，从“表”菜单中选择“删除记录”菜单项。可以通过发出 RECALL 命令恢复记录，或者当浏览窗口或编辑窗口是活动时，从“表”菜单中选择“恢复记录”菜单项。


* 下面的示例打开 testdata 数据库中的 customer 表，
*  用 DELETE-SQL 命令将所有 country
*  字段中包含 USA 的记录作上删除标记，显示所有
*  带删除标记的记录，最后用 RECALL ALL 命令
*  恢复所有带删除标记的记录。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 cutomer 表

DELETE FROM customer WHERE country = 'USA'  && 作删除标记

CLEAR

LIST FIELDS company, country FOR DELETED( ) &&　列出标记记录

RECALL ALL  &&去除所有删除记录的标记


请参阅

DELETE，DELETE - SQL，PACK，SET DELETED，ZAP


RECCOUNT( ) 函数

请参阅	示例

返回当前或指定表中的记录数目。

语法

RECCOUNT([nWorkArea | cTableAlias])

参数

nWorkArea

指定表所在的工作区编号。

如果在指定的工作区中没有打开的表，RECCOUNT( ) 返回 0。

cTableAlias

指定表别名。

返回值类型

数值型

说明

SET DELETED 和 FILTER 命令并不影响 RECCOUNT( ) 函数的返回值。

不带可选参数 nWorkArea 或 cTableAlias 的 RECCOUNT( ) 函数返回当前所选工作区中表的记录数目。


* 在下面的示例中，Visual FoxPro 将 customer 表排序所需要的
* 空间与可用的磁盘空间进行比较。

***在 SORT 命令之前检查磁盘空间 ***

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  &&打开 customer 表

*** 获得表头大小 ***

gnTableHead = HEADER( )

*** 计算表的大小 ***

gnFileSize = gnTableHead + (RECSIZE( ) * RECCOUNT( ) + 1)

IF DISKSPACE( ) > (gnFileSize * 3)

WAIT WINDOW 'Sufficient diskspace to sort.'

ELSE

WAIT WINDOW 'Insufficient diskspace. Sort cannot be done.'

ENDIF


请参阅

RECNO( )，RECSIZE( )


RECNO( ) 函数

请参阅	示例

返回当前表或指定表中的当前记录号。

语法

RECNO([nWorkArea | cTableAlias])

参数

nWorkArea

指定表所在工作区编号。如果在指定的工作区中没有打开的表，RECNO( ) 函数返回 0。

cTableAlias

指定表别名。

返回值类型

数值型

说明

当前记录就是记录指针所指的记录。

对于在表缓冲区中追加的记录，RECNO( )返回负记录编号。有关负记录编号的详细内容，请参阅在表缓冲区中追加和删除记录主题。

如果记录指针所指的位置超出了表中的最后一个记录，那么 RECNO( ) 函数返回一个比表中记录数目大 1 的数值；如果记录指针所指的位置在表中第一个记录之前或者表中没有记录，那么 RECNO( ) 函数返回 1；如果表中没有记录，EOF( ) 函数总是返回“真” (.T.)。

执行不带可选参数 nWorkArea 或 cTableAlias 的 RECNO( ) 函数，将返回当前所选工作区中表的当前记录号。

在一个经过索引的表中，如果发出的 SEEK 命令失败，那么可以将 nWorkArea 指定为 0，使用“软寻找（soft seek）”方法来返回最接近匹配记录的记录号；如果不能找到接近的匹配记录，RECNO(0) 函数返回 0；如果没有找到接近的匹配记录而发出 GO RECNO(0) 命令，那么 Visual FoxPro 将产生错误信息。


*下面的示例在 customer 表中搜索一个公司的名称。
*如果没有找到该公司的名称，就使用 RECNO(0):
*返回最接近匹配的公司名称。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  &&打开 customer 表

SET ORDER TO company

SEEK 'Ernst'

IF FOUND( )

DISPLAY company, contact

ELSE

GOTO RECNO(0)

CLEAR

? 'Closest matching company is ' + company

? 'Record number: ' + ALLTRIM(STR(RECNO( )))

ENDIF


请参阅

GOGOTO，RECCOUNT( )，RECSIZE( )，SEEK，SKIP


RecordMark 属性

请参阅

指定是否在表格控制中显示记录选择器一列。

应用于

表格

语法

Grid.RecordMark[ = lExpr]

设置

lExpr

RecordMark 属性的设置有：

设置	说明
“真” (.T.)	（默认值）在表格控制中显示记录选择器列。
“假” (.F.)	在表格控制中不显示记录选择器列。
说明

设计时可用，运行时可读写。


请参阅

ScrollBars 属性


RecordSource 属性

请参阅

指定与表格控制相绑定的数据源。

应用于

表格

语法

Grid.RecordSource[ = cName]

设置

cName

cName 一般是临时表的别名或者表的名称。RecordSource 属性指定与表格控制相绑定的主临时表。

说明

设计时可用，运行时只读写。


请参阅

Order 属性，RecordMark 属性，RecordSourceType 属性


RecordSourceType 属性

请参阅

指定如何打开填充表格控制的数据源。

应用于

表格

语法

Grid.RecordSourceType[ = nType]

设置

nType

RecordSourceType 属性的设置有：

设置	说明
0	表。自动打开 RecordSource 属性设置中指定的表。
1	（默认值）别名。按指定方式处理记录源。
2	提示。在运行时刻向用户提示记录源。如果某个数据库已打开，用户可以选择其中的一个表作为记录源。
3	查询(.QPR)。RecordSource 属性设置指定一个 .QPR 文件。
说明

设计时可用，运行时可读写。


请参阅

RecordSource 属性


RECSIZE( )　函数

请参阅	示例

返回表中记录的大小（宽度）。

语法

RECSIZE([nWorkArea | cTableAlias])

参数

nWorkArea

表所在的工作区编号。

如果指定工作区中没有表打开，RECCOUNT( ) 返回 0。

cTableAlias

指定非当前工作区中所打开表的别名。

返回值类型

数值型

说明

不带可选参数 nWorkArea 和 cTableAlias 发出 RECSIZE( ) 函数，将返回当前选定工作区中表的记录大小。


* 在下面的示例中，Visual FoxPro 比较可用的磁盘空间与对
*  customer 表排序所需空间的大小。

***在排序前检查磁盘空间 ***

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开表 Customer

***得到表头的大小 ***

gnTableHead = HEADER( )

***计算表的大小 ***

gnFileSize = gnTableHead + (RECSIZE( ) * RECCOUNT( ) + 1)

IF DISKSPACE( ) > (gnFileSize * 3)

WAIT WINDOW 'Sufficient diskspace to sort.'

ELSE

WAIT WINDOW 'Insufficient diskspace. Sort cannot be done.'

ENDIF


请参阅

RECCOUNT( )，FSIZE( )


Refresh 方法

请参阅

重画表单或控制，并刷新所有值。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表单集，表格，标头，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，微调，文本框，工具栏

语法

[[FormSet.]Object.]Refresh
Object.Refresh

说明

一般地，画表单或控制是在没有事件发生时自动处理的。需要立刻更新表单或控制时可使用 Refresh 方法。

可使用 Refresh 方法强制地完全重画表单或控制，并更新控制的值。若要在加载另一个表单的同时显示某个表单，或更新控制的内容时，Refresh 方法很有用。要更新组合框或列表框的内容，请使用 Requery 方法。

附注

刷新表单的同时，也刷新表单上所有的控制；刷新页框时，只刷新活动的页。


请参阅

Paint 事件，Requery 方法


REFRESH( ) 函数

请参阅

在可更新的 SQL 视图中刷新数据。

语法

REFRESH([nRecords [, nRecordOffset]] [, cTableAlias | nWorkArea])

参数

nRecords

指定要刷新的记录数目。如果 nRecords 等于 0 或省略 nRecords，则只刷新当前记录。

nRecordOffset

指定开始刷新的记录与当前记录的偏移记录数。例如，如果当前记录是 10 号记录，而 nRecordOffset 等于 -4，则从 6 号记录开始刷新；如果 nRecordOffset 等于 0，或省略 nRecordOffset，则只刷新当前记录。

cTableAlias

指定要刷新其记录的远程 SQL 视图的别名。

nWorkArea

指定将在其中刷新记录的表或临时表所在的工作区。如果省略 nWorkArea 和 cTableAlias，则在当前选定工作区的远程 SQL 视图中刷新记录。

返回值类型

数值型

说明

REFRESH() 函数返回刷新的记录数目。

刷新记录使用的是用来创建 SQL 视图的表的数据。记录在当前选定工作区打开的 SQL 视图中刷新。

REFRESH( ) 不能刷新锁定或缓冲的记录，并且记录的主关键字值必须唯一。如果表中的某个记录没有主关键字，则 SQL 视图中相应的记录被做上删除标记。


请参阅

CREATE SQL VIEW，CURSORGETPROP( )，CURSORSETPROP( )


REGIONAL 命令

请参阅	示例

创建区域内存变量和数组。

语法

#REGION nRegionNumber
REGIONAL MemVarList

参数

#REGION nRegionNumber

创建一个区域。在程序中使用区域变量之前，必须先予以声明。要注意的是 #REGION 是一条编译指令，而不是一条命令。nRegionNumber 指定区域号，取值范围为 0 到 31。

REGIONAL MemVarList

声明 #REGION 指令所创建区域中的变量。MemVarList 是由逗号分隔的内存变量及数组的列表。

在程序的编译过程中，如果一个区域变量已做编译，而又遇到另一个同名的区域声明时，将使第二个出现的变量名唯一，以确保不与先前已声明的区域变量发生冲突。

使变量名唯一的办法是用下划线和当前区域号填充区域变量名，使之达到 10 个字符。这种替代完全发生在程序编译过程中，对执行速度没有影响。

变量名修改后，可以使用 DISPLAY MEMORY 命令显示修改后的变量名。为了在调试窗口中监控变量，应使用修改后的变量名。由于跟踪窗口使用原始的程序源代码，因而原始变量名（而不是由编译器创建的修改后的名称）出现在跟踪窗口中。

说明

如果在区域中受保护，即使同名的内存变量或数组也不互相干扰。区域变量与私有变量相似。


*下面的示例中，创建了两组区域变量。在区域 1 中创建变量
*  gcA、gcB、gcC 和 gcD，并在各个变量中存储字符串
*  “One”。在区域 2 中创建变量 gcC、gcD、gcE 和 gcF，并在各个变量
*  中存储字符串“Two”。两个区域中都包含变量 gcC 和 gcD。
*  然后显示 DISPLAY MEMORY 命令的输出。可以看到第二个
*  区域中的内存变量 gcC 及 gcD 的名字作了修改：gcC 变成了
*  GCC________2，gcD 而变成了GCD________2。
* 所有变量均为私有，可以通过低级程序访问。

#REGION 1

REGIONAL gcA,gcB,gcC,gcD

STORE 'One' to gcA,gcB,cgC,gcD

#REGION 2

REGIONAL gcC,gcD,gcE,gcF	  &&两个区域中都包含变量 gcC 和 gcD

STORE 'Two' to gcC,gcD,gcE,gcF

DO showmemory

PROCEDURE showmemory

DISPLAY MEMORY LIKE g*


请参阅

PRIVATE，PUBLIC，STORE


REINDEX 命令

请参阅	示例

重建打开的索引文件。

语法

REINDEX [COMPACT]

参数

COMPACT

将普通的单索引 (.IDX) 文件转换为压缩的 .IDX 文件。

说明

当打开表而不打开相应的索引文件并更改索引文件的关键字段后，索引文件就变得过时。如果索引文件已过时，可以重建索引来更新这些索引文件。

REINDEX 命令更新选定工作区中打开的所有索引文件。Visual FoxPro 识别每种索引文件的类别（ 复合索引 (.CDX) 文件、结构 .CDX 文件及单索引 (.IDX) 文件）并分别重建索引。此命令更新 .CDX 文件中的所有标识，并且更新与表一起自动打开的结构 .CDX 文件。

对使用包含 UNIQUE 关键字的 INDEX 命令或 SET UNIQUE ON 命令创建的索引文件，在重建索引时，仍保持 UNIQUE 状态。

要重建过时的索引文件，可以执行下列命令：

USE TableName INDEX OutdatedIndexNames

REINDEX


* 在下面的示例中，ISEXCLUSIVE() 函数检验 customer 表
*  是否以独占的方式打开。由于当前工作区中
*  的表并不以独占方式打开，所以不能对该表重建索引。

cExclusive = SET('EXCLUSIVE')

SET EXCLUSIVE OFF

SET PATH TO (SYS(2004) + 'SAMPLES\DATA\')

OPEN DATA testdata  && 打开 test 数据库

USE Customer	  && 不以独占方式打开

USE Employee IN 0 EXCLUSIVE	 && 在另一个工作区中以独占方式打开

IF ISEXCLUSIVE( )

   REINDEX  && 仅当表以独占方式打开时才能执行

ELSE

    WAIT WINDOW 'The table has to be exclusively opened'

ENDIF

SET EXCLUSIVE &cExclusive


请参阅

INDEX，SET INDEX，SET EXCLUSIVE，SET UNIQUE，SYS( ) 函数概述，USE


Relation 对象
Relation（关系）对象

请参阅	属性	事件

当在数据环境设计器中为表单、表单集或报表建立关系时创建。

语法

Relation

说明

Relation 对象允许确定或指定两个表如何相关联。

要注意的是，运行时设置 Relation 对象的属性将产生错误。要使新的属性设置起作用，必须对数据环境调用 Close Tables 及 OpenTables 方法。

有关表单和表单集数据环境的详细内容，请参阅 设置数据环境主题及《开发指南》第九章“创建表单”。

有关报表数据环境的详细内容，请参阅《开发指南》第十四章“添加查询和报表”。


属性

ChildAlias	ChildOrder	Name
OneToMany	ParentAlias	RelationalExpr


事件

Destroy	Error	Init


请参阅

临时表对象，数据环境对象


RELATION( ) 函数
RELATION 函数

请参阅	示例

返回为给定工作区中打开的表所指定的关系表达式。

语法

RELATION(nRelationNumber [, nWorkArea | cTableAlias])

参数

nRelationNumber

指定返回哪一个关系。例如，如果 nRelationNumber 等于 3，RELATION( ) 函数返回所创建的第三个关系的关系表达式。

nWorkArea

指定表所在的工作区。如果指定工作区中没有表打开，RELATION( ) 函数返回空字符串。

cTableAlias

指定表别名。

返回值类型

字符型

说明

默认情况下，RELATION( ) 返回当前选定工作区中表的关系表达式。如果不存在关系，则返回空字符串。有关在表间创建关系的其他信息请参阅  SET RELATION。

可用 DISPLAY STATUS 命令与 LIST STATUS 命令显示关系表达式。发出 MODIFY DATABASE 命令将显示数据库设计器，它允许您查看并修改当前打开的数据库中各表之间的关系。发出 SET 命令将显示查看窗口，它允许您查看并修改自由表之间的关系。


* 在下面的示例中，打开表并设置次序，然后
* 用 RELATION() 显示关系。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer IN 0 ORDER cust_id  && 打开表 Customer

USE employee IN 0 ORDER emp_id  &&  打开表Customer

USE orders IN  0 ORDER order_id  && 打开表Customer

SELECT orders

SET RELATION TO emp_id INTO employee

SET RELATION TO cust_id INTO customer ADDITIVE

? RELATION(1)  && 显示CUST_ID

? RELATION(2)  && 显示EMP_ID

? RELATION(3)  && 显示空串


请参阅

DISPLAY STATUS，MODIFY DATABASE，LIST STATUS，SET，SET RELATION，SET RELATION OFF，TARGET( )


RelationalExpr 属性

请参阅

指定一基于父表字段的表达式，该表达式与子表中联接父、子表的索引相关。

应用于

表格，关系

语法

Object.RelationalExpr[ = cExpr]

设置

cExpr

可以指定任何的 Visual FoxPro 表达式，一般是与 ChildOrder 属性指定的子表当前索引相匹配的表达式。

说明

对于表格控制，设计时可用，运行时可读写。

对于 Relation 对象，设计时可用，运行时只读。


请参阅

ChildOrder 属性，LinkMaster 属性，SET RELATION


RelativeColumn 属性

请参阅

指出在表格控制可见部分中的活动列。

应用于

表格

语法

Grid.RelativeColumn[ = nColumn]

设置

nColumn

指定表格控制中的活动列。

说明

设计时不可用，运行时只读。

可以使用 RelativeColumn 属性确定活动列在表格中的相对位置。例如，如果在表格中滚动，使第一列不再可见，而活动列是表格中第一个可见列，这时 RelativeColumn 就为1。要确定表格中活动列的绝对位置，应使用 ActiveColumn 属性。


请参阅

ActiveColumn 属性，ActiveRow 属性，RelativeRow 属性


RelativeRow 属性

请参阅

指出在表格控制可见部分中的活动行。

应用于

表格

语法

Grid.RelativeRow[ = nRow]

设置

nRow

指定表格控制中的活动行。

说明

设计时不可用，运行时只读。

可以使用 RelativeRow 属性确定活动行在表格中的相对设置。例如，如果在表格中滚动，使第一行不再可见，而活动行是表格中第一个可见行，这时 RelativeRow 就为 1。要确定表格中活动行的绝对位置，应使用 Active Row 属性。


请参阅

ActiveColumn 属性，ActiveRow 属性，RelativeColumn 属性


RELEASE 命令

请参阅

从内存中删除内存变量和数组。

语法

RELEASE MemVarList
  或者
RELEASE ALL [EXTENDED]
[LIKE Skeleton | EXCEPT Skeleton]

参数

RELEASE MemVarList

指定要从内存中释放的内存变量和数组。各个内存变量和数组名称可用逗号分隔。

RELEASE ALL

从内存中释放所有的内存变量和数组。

EXTENDED

从程序中发出时，指定释放所有的公共变量。当在程序中执行 RELEASE ALL、RELEASE ALL LIKE 或 RELEASE ALL EXCEPT 时，并不释放公共变量。

LIKE Skeleton | EXCEPT Skeleton

从内存中释放所有与指定梗概相匹配的内存变量和数组，或释放与指定梗概相匹配的内存变量和数组之外的所有内存变量和数组。Skeleton 可以包含通配符 ? 和 *。


请参阅

CLEAR MEMORY，DIMENSION，PRIVATE，PUBLIC，STORE


RELEASE BAR 命令

请参阅

从内存中删除菜单上的指定菜单项或所有菜单项。

语法

RELEASE BAR nMenuItemNumber OF MenuName | ALL OF MenuName

参数

nMenuItemNumber OF MenuName

指定要从内存中删除的用户自定义菜单上的某个菜单项。要从 Visual FoxPro 系统菜单上删除菜单项，应在 nMenuItemNumber 中包含 Visual FoxPro 内部的系统菜单项名称。有关详细内容，请参阅系统菜单名称主题。

ALL OF MenuName

指定从内存中删除用户自定义菜单上的每个菜单项。从 Visual FoxPro 系统菜单上删除菜单项时不能使用 ALL 子句。


请参阅

DEFINE BAR


RELEASE CLASSLIB 命令

请参阅	示例

关闭包含类定义的 .VCX 可视类库。

语法

RELEASE CLASSLIB ClassLibraryName

参数

ClassLibraryName

指定要关闭的可视类库文件名称。

说明

可以使用 SET CLASSLIB 命令打开.VCX 可视类库。一旦打开后，可视类库中的类定义即可在程序和命令窗口中使用。

要关闭所有打开的可视类库，应发出不带任何附加参数的 SET CLASSLIB TO 命令。


* 下面的示例先使用 SET CLASSLIB 命令创建一个名
* 为 myclslib 的可视类库，然后创建一个基于 Visual FoxPro Form
* 基类、命名为 myform 的类，并将该类存储在 myclslib 可视类库中。
* 先使用 SET CLASSLIB 命令打开 myclslib 可视类库，
* 然后再用 RELEASE CLASSLIB 命令关闭可
* 视类库 myclslib。

CREATE CLASSLIB myclslib  	&& 创建一个新的 .VCX 可视类库

CREATE CLASS myform OF myclslib AS "Form"  && 创建新类

SET CLASSLIB TO myclslib ADDITIVE 	 && 打开 MyClsLib.VCX

RELEASE CLASSLIB myclslib


请参阅

ADD CLASS，CREATE CLASS，CREATE CLASSLIB，MODIFY CLASS，REMOVE CLASS，RENAME CLASS，SET CLASSLIB


RELEASE LIBRARY 命令

请参阅

从内存中删除一个外部的 API 库。

语法

RELEASE LIBRARY LibraryName

参数

LibraryName

指定要从内存中删除的 API 库的名称。

说明

发出 SET LIBRARY TO 命令，可以从内存中删除所有 API 库。用 SET LIBRARY 命令可以把某个外部的 API 例程库加载到内存。有关 API 例程库的详细内容，请参阅 SET LIBRARY。


请参阅

SET LIBRARY


RELEASE MENUS 命令

请参阅

从内存中删除用户自定义菜单栏。

语法

RELEASE MENUS [MenuBarNameList [EXTENDED]]

参数

MenuBarNameList

指定要从内存中删除的各个菜单栏，用逗号分隔各菜单栏的名称。

EXTENDED

释放菜单栏及其下属的所有菜单、菜单标题、菜单项和全部相关的 ON SELECTION BAR, ON SELECTION MENU, ON SELECTION PAD, 及 ON SELECTION POPUP 命令。

说明

要从内存中释放一个活动的菜单栏，必须首先用 DEACTIVATE MENU 命令使该菜单栏不活动。

如果发出不带任何附加参数的 RELEASE MENUS 命令，则从内存中删除所有的用户自定义菜单栏。


请参阅

DEFINE MENU


Release 方法

请参阅

从内存中释放表单集或表单。

应用于

表单，表单集，_SCREEN

语法

Object.Release

说明

当用 DO FORM 命令创建表单集或表单，并且不存在可引用该表单集或表单的变量时，Release 方法很有效。

可以使用 Screen 对象的 Forms 集合找到表单集或表单，并调用其 Release 方法。

使用 Release 方法与从表单集或表单中发出 RELEASE 命令的作用相似。


请参阅

DO FORM，RELEASE


RELEASE MODULE 命令

请参阅

从内存中删除一个二进制文件、外部命令或外部函数。

语法

RELEASE MODULE FileName

参数

FileName

指定要从内存中删除的二进制文件、外部命令或外部函数的名称。

说明

不能用于 Visual FoxPro 。

在 FoxPro for Windows 和 FoxPro for MS-DOS 中，使用 LOAD 命令将二进制文件放置到内存中并用 CALL 命令执行它们。一次可以在内存中放置最多 16 个二进制文件。

在 FoxPro for Macintosh 中，使用 SET XCMDFILE 命令和 LOAD 命令将外部命令与外部函数放置到内存中。


请参阅

CALL，LOAD，SET XCMDFILE


RELEASE PAD 命令

请参阅	示例

从内存中删除指定或所有的菜单标题。

语法

RELEASE PAD MenuTitleName OF MenuBarName | ALL OF MenuBarName

参数

MenuTitleName OF MenuBarName

指定要从内存中删除的菜单标题。

可以在 MenuTitleName 中指定 Visual FoxPro 系统菜单栏上的某个菜单标题而删除该菜单标题。例如，RELEASE PAD _MEDIT OF _MSYSMENU 命令将从 Visual FoxPro 系统菜单栏上删除“编辑”菜单标题。

ALL OF MenuBarName

指定从内存中删除用户自定义菜单栏上的每个菜单标题。ALL 子句不能用来从 Visual FoxPro 系统菜单栏上删除菜单标题。


* 下面的示例从系统菜单栏上删除“窗口”
* 菜单标题。

PUSH MENU _MSYSMENU

RELEASE PAD _MSM_WINDO OF _MSYSMENU  && 删除“窗口”菜单标题

WAIT WINDOW 'Press a key to restore the default menu'

POP MENU _MSYSMENU  && 还原默认的 Visual FoxPro 菜单系统


请参阅

DEFINE PAD，系统菜单名称


RELEASE POPUPS 命令

请参阅

从内存中删除指定或所有的菜单。

语法

RELEASE POPUPS [MenuNameList [EXTENDED]]

参数

MenuNameList

指定要从内存中释放的菜单，菜单名之间用逗号分隔。

也可以释放 Visual FoxPro 系统菜单栏上的 Visual FoxPro 系统菜单。要释放 Visual FoxPro系统菜单，应包含系统菜单的内部名称(_MFILE，_MEDIT，_MDATA 等等）。可以用 SET SYSMENU TO DEFAULT 命令还原默认的系统菜单栏及系统菜单。

EXTENDED

释放菜单及其菜单项和所有与 ON SELECTION POPUP 及 ON SELECTION BAR 相关的命令。

说明

要从内存中释放一个活动的菜单，必须首先用 DEACTIVATE POPUP 命令使该菜单不活动。

如果发出不带任何附加参数的 RELEASE POPUPS 命令，则从内存中删除所有用户自定义菜单。


请参阅

DEFINE POPUP，系统菜单名称


RELEASE PROCEDURE 命令

请参阅

关闭用 SET PROCEDURE 命令打开的过程文件。

语法

RELEASE PROCEDURE FileName

参数

FileName

指定要关闭的过程文件名称。

说明

过程文件可以用 SET PROCEDURE 命令打开。一旦打开，过程文件中的过程即可在程序和命令窗口中使用。

要关闭所有打开的过程文件，应发出不带任何附加参数的 SET PROCEDURE TO 命令。


请参阅

SET PROCEDURE


RELEASE WINDOWS 命令

请参阅

从内存中释放用户自定义窗口或 Visual FoxPro 主窗口。

语法

RELEASE WINDOWS [WindowNameList] | SCREEN

参数

WindowNameList

指定要从内存中释放的窗口。WindowNameList 可以同时包含用户自定义窗口和 Visual FoxPro 主窗口。如果 WindowNameList 包括多个窗口，应用逗号分隔窗口名称。

如果没有包含 WindowNameList ，则释放当前活动的用户自定义窗口。

RELEASE WINDOWS 可以用来从 Visual FoxPro 主窗口、父窗口或用户自定义窗口中释放 Visual FoxPro 系统窗口。

下表列出了可以从 Visual FoxPro 主窗口或父窗口释放的系统窗口：

 •	   “命令”窗口

 •	   “调试”窗口

 •	   “跟踪”窗口

 •	   “查看”窗口

若要释放 Visual FoxPro 中的系统窗口或工具栏，应把整个系统窗口或工具栏的名称用引号括起来。例如，要释放 Visual FoxPro 的 “报表控制”工具栏，可使用如下命令：

RELEASE WINDOW Report Controls

要在 Visual FoxPro 主窗口或用户自定义窗口中放入系统窗口，可使用 ACTIVATE WINDOW 命令。

SCREEN

仅用于 FoxPro for Macintosh 。

隐藏 Visual FoxPro 主窗口。若要重新显示 FoxPro 主窗口，可使用 ACTIVATE WINDOW SCREEN 或 SHOW WINDOW SCREEN 命令。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW


ReleaseType 属性

请参阅

返回一个整数，以此确定表单对象如何释放。

应用于

表单，_SCREEN

语法

Object.ReleaseType

设置

 ReleaseType 属性的设置有：

设置	说明
0	变量被释放。
1	关闭框。
2	退出 Visual FoxPro。
说明

设计时不可用，运行时只读。

ReleaseType 属性在调用 QueryUnload 事件之前被设置。


请参阅

QueryUnload 事件，Unload 事件


REMOVE CLASS 命令

请参阅

从 .VCX 可视类库中删除一个类定义。

语法

REMOVE CLASS ClassName OF ClassLibraryName

参数

ClassName

指定要从可视类库中删除的类定义名称。

OF ClassLibraryName

指定包含类定义的 .VCX 可视类库的名称。如果 ClassLibraryName 中没有包含文件扩展名，则假定其扩展名为 .VCX。

说明

删除类定义时请特别小心，因为删除的类定义可能是用以派生出其他类的父类。


请参阅

ADD CLASS，CREATE CLASS，CREATE CLASSLIB，MODIFY CLASS，RELEASE CLASSLIB，RENAME CLASS，SET CLASSLIB


REMOVE TABLE 命令

请参阅	示例

从当前数据库中移去一个表。

语法

REMOVE TABLE TableName | ?
[DELETE]

参数

TableName

指定要从当前数据库中移去的表。

?

显示“移去”对话框，从中可以选择一个要从当前数据库中移去的表。

DELETE

指定从数据库中移去该表，并从磁盘上删除。

注意

任何使用本子句从磁盘上删除的表都不能再恢复。而且使用本子句从磁盘上删除表时，即使 SET SAFETY 设置为 ON 也不会发出警告。

说明

一个表从数据库中移去之后，便变成了自由表，因而可以添加到另一个数据库中。将表添加到数据库中的命令是 ADD TABLE 。

REMOVE TABLE 命令要求以独占方式使用数据库。要以独占方式打开数据库，应在 OPEN DATABASE 命令中包含 EXCLUSIVE 子句。

当执行了 REMOVE TABLE 命令后，所有与被移去的表有关的主索引、默认值和有效性规则也被删除。因此，在用此命令移去一个表时，如果 SET SAFETY 设置为 ON，Visual FoxPro 会询问是否真的想从数据库中删除该表。

重要内容

如果 REMOVE TABLE 命令中删除的表与其他表存在相关的规则或关系，则此命令也会影响当前数据库中的这些表。从数据库中删除表后，这些相关的规则或关系不再有效。


*下面的示例创建两个名称分别为 mydbc1 和 mydbc2 的数据库和
* 一个名为 table1 的表。首先，表在创建时便添加到数据库 mydbc1
* 中。然后，关闭该表，并将它从数据库 mydbc1 中移去。然后再
* 使用 ADD TABLE 命令把该表添加到数据库 mydbc2 中。最后，
* 使用 RENAME TABLE 把表名table1 改为 table2。

CREATE DATABASE mydbc1

CREATE DATABASE mydbc2

SET DATABASE TO mydbc1

CREATE TABLE table1 (cField1 C(10), n N(10))  && 将表添加到 mydbc1

CLOSE TABLES	  && 一个表在从数据库移去之前，必须先关闭

REMOVE TABLE table1

SET DATABASE TO mydbc2

ADD TABLE table1

RENAME TABLE table1 TO table2


请参阅

ADD TABLE，CLOSE DATABASES，CREATE DATABASE，FREE TABLE，OPEN DATABASE


RemoveItem 方法

请参阅

从组合框或列表框中移去一项。

应用于

组合框，列表框

语法

Control.RemoveItem(nIndex)

参数

nIndex

指定一个整数，它对应于被移去项在控制中的显示顺序。对于列表框或组合框中的第一项，nIndex = 1。


请参阅

AddItem 方法，Clear 方法，RemoveListItem 方法


RemoveListItem 方法

请参阅

从组合框或列表框中移去一项。

应用于

组合框，列表框

语法

Control.RemoveListItem(nItemId)

参数

nItemId

指定一个整数，它表示删除项在控制中的唯一标识。


请参阅

AddItem 方法，Clear 方法


RemoveObject 方法

请参阅

运行时从容器对象中删除一个指定的对象。

应用于

列，命令组，容器对象，自定义，数据环境，表单，表单集，表格，选项按钮，页面，页框，_SCREEN，工具栏

语法

Object.RemoveObject(cObjectName)

参数

cObjectName

指定要删除的对象名，如果指定对象不存在，则会出错。

说明

对象删除后，它便从屏幕上消失，并且不能再引用。


请参阅

AddObject 方法，RemoveItem 方法，RemoveListItem 方法


RENAME 命令

请参阅

把文件名称更改为一个新名称。

语法

RENAME FileName1 TO FileName2

参数

FileName1 TO FileName2

指定要重命名的文件名和新文件名。注意文件名中要包括扩展名。如果文件名中不括扩展名，则假定默认的扩展名为 .DBF。如果重命名的表是具有 .FPT 备注文件的自由表，应同时重命名备注文件。当要重命名的文件确实没有扩展名时，应在文件名后加入句点 (.)。

不要使用 RENAME 命令重命名数据库中的表。RENAME 不能用来重命名数据库中的表。要重命名数据库中的表，可使用 RENAME TABLE。

当要重命名的文件不在默认驱动器和目录中时，把路径包括在文件名中。如果 FileName1 和 FileName2 在不同目录中，此命令将把 FileName1 移到 FileName2 所在的目录中。

执行 RENAME 时，FileName2 不能是现有文件，而 FileName1 则必须存在并且没有打开。


请参阅

COPY FILE，COPY TO，RENAME CLASS，RENAME TABLE


RENAME CLASS 方法

请参阅	示例

重命名 .VCX 可视类库中的一个类定义。

语法

RENAME CLASS ClassName1 OF ClassLibraryName TO ClassName2

参数

ClassName1

指定要重命名的类定义名称。

OF ClassLibraryName

指定 .VCX 可视类库的名称，其中包含了要重命名的类。如果在 ClassLibraryName 中没有指定文件扩展名， Visual FoxPro 自动指定扩展名为 .VCX。

TO ClassName2

指定类定义的新名称。

说明

重命名类定义时请小心，重命名类定义后，Visual FoxPro 并不更新可视类库中引用此类定义的其他类定义。


* 下面的示例用 CREATE CLASSLIB 命令创建了一个名为
*  myclslib 的可视类库。然后用 CREATE CLASS 命令创建一个
* 派生于 Visual FoxPro 基类、名为 myform 的类，并将它保存到
* myclslib 可视类库中。最后用 RENAME CLASS 命令将此类的
* 名称由 myform 更改为 yourform 。

CREATE CLASSLIB myclslib  	&& 创建一个新的 .VCX 可视类

CREATE CLASS myform OF myclslib AS "Form"  && 创建一个新类

RENAME CLASS myform OF myclslib TO yourform  && 更改类名


请参阅

ADD CLASS，CREATE CLASS，MODIFY CLASS，RELEASE CLASSLIB，REMOVE CLASS，SET CLASSLIB


RENAME CONNECTION 命令

请参阅	示例

重命名当前数据库中的一个命名连接。

语法

RENAME CONNECTION ConnectionName1 TO ConnectionName2

参数

ConnectionName1

指定要重命名的连接名称。

ConnectionName2

指定连接的新名称。

说明

在为连接重命名时，必须以独占方式打开包含此命名连接的数据库，并且必须是当前数据库。要以独占方式打开数据库，可在 OPEN DATABASE 命令中包括 EXCLUSIVE 子句。


*下面的示例假定名为 MyFoxSQLNT 的 ODBC 数据源可用，
* 并且数据源的用户 ID 是“sa”。首先，打开 testdata 数据库，
* 创建名为 Myconn1 的连接。然后，使用 DISPLAY
* CONNECTIONS 命令显示数据库中这个命名连接。

*然后再使用 RENAME CONNECTION 命令将新创建的连接名称改为
*   Myconn2之后，再使用 DISPLAY CONNECTIONS 命令用连接的新名
* 称显示此连接。最后，用 DELETE CONNECTION 从数据库删除该命
* 名连接。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE CONNECTION Myconn1 DATASOURCE "MyFoxSQLNT" USERID "sa"

CLEAR

DISPLAY CONNECTIONS  && 显示数据库中的一个命名连接

RENAME CONNECTION Myconn1 TO Myconn2

DISPLAY CONNECTIONS  && 用新名称再次显示连接

DELETE CONNECTION Myconn2  && 删除刚改过名的连接


请参阅

DELETE CONNECTION，DBGETPROP( )，DISPLAY CONNECTIONS，LIST CONNECTIONS，MODIFY CONNECTION，OPEN DATABASE


 RENAME TABLE 命令

请参阅	示例

重命名当前数据库中的表。

语法

RENAME TABLE TableName1 TO TableName2

参数

TableName1

指定要重命名的表名称。

TableName2

指定表的新名称。

说明

重命名数据库中的表之前，必须先以独占方式打开包含表的数据库，而且要把该数据库设置为当前数据库。若要以独占方式打开一个数据库，应在 OPEN DATABASE 命令中包括 EXCLUSIVE 子句。

RENAME TABLE 不能用来更改自由表的名称。要更改自由表的名称，可使用 RENAME 命令。


*下面的示例创建两个名为 mydbc1 和 mydbc2 的数据库和一个名为
* table1 的表。在创建 table1 表时便将它添加到数据库 mydbc1 中。
* 然后，关闭该表，并将该表从数据库 mydbc1 中移去。紧接着使用
* ADD TABLE 命令把该表添加到数据库 mydbc2 中。最后，使用
* RENAME TABLE 命令把这个表的名称由 table1 改为 table2。

CLOSE DATABASES

CREATE DATABASE mydbc1

CREATE DATABASE mydbc2

SET DATABASE TO mydbc1

CREATE TABLE table1 (cField1 C(10), n N(10))  && 给 mydbc1 添加表

CLOSE TABLES	  && 一个表从数据库移去之前必须先关闭

REMOVE TABLE table1

SET DATABASE TO mydbc2

ADD TABLE table1

RENAME TABLE table1 TO table2


请参阅

ADD TABLE，CLOSE DATABASES，CREATE DATABASE，COPY FILE，COPY TO，OPEN DATABASE，RENAME


RENAME VIEW 命令

请参阅	示例

重命名当前数据库中的 SQL 视图。

语法

RENAME VIEW ViewName1 TO ViewName2

参数

ViewName1

指定要重命名的 SQL 视图名称。

ViewName2

指定 SQL 视图的新名称。

说明

重命名 SQL 视图之前，必须以独占方式打开包含 SQL 视图的数据库，并将该数据库设置为当前数据库。要以独占方式打开数据库，应在使用 OPEN DATABASE 时包括 EXCLUSIVE 子句。


*下面的示例打开 testdata 数据库，并在使用 SELECT - SQL 语句
* 从 customer 表中选择所有记录时，用 CREATE SQL VIEW命令
* 创建一个本地 SQL 视图 myview 。最后用 RENAME VIEW 命
* 令将 SQL 视图的名称由 myview 改为 yourview。

*为了可以修改重新命名的 SQL 视图，特将“视图设计器”显示
* 出来。当“视图设计器”关闭后，SQL 视图也随之被删除。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

CREATE SQL VIEW myview AS SELECT * FROM customer  && 创建视图

RENAME VIEW myview TO yourview  && 重命名视图名

MODIFY VIEW yourview  && 打开“视图设计器”

DELETE VIEW yourview  && 删除视图


请参阅

CREATE SQL VIEW，DELETE VIEW，DISPLAY VIEWS，LIST VIEWS，MODIFY VIEW，OPEN DATABASE，RENAME VIEW，SELECT - SQL，USE


 REPLACE 命令

请参阅	示例

更新表的记录内容。

语法

REPLACE FieldName1 WITH eExpression1 [ADDITIVE]
[, FieldName2 WITH eExpression2 [ADDITIVE]] ...
[Scope] [FOR lExpression1] [WHILE lExpression2]
[IN nWorkArea | cTableAlias]
[NOOPTIMIZE]

参数

FieldName1 WITH eExpression1 [, FieldName2 WITH eExpression2 ... ]

指定用表达式 eExpression1 的值来代替 FieldName1 字段中的数据；用表达式 eExpression2 的值来代替字段 FieldName2 中的数据，依此类推。

当表达式的值比数值字段的宽度长时，REPLACE 采用以下方法来处理数据：

1.	首先，REPLACE 截短表达式的小数位然后圆整剩余部分。

2.	如果此时字段仍然放不下表达式的值，则 REPLACE 用科学计数法在字段中保存表达式的值。

3.	如果还不行，REPLACE 则用星号代替字段内容。

ADDITIVE

把对备注字段的替代内容追加到备注字段的后面。ADDITIVE 只对替换备注字段有用。如果省略 ADDITIVE，则用表达式的值改写备注字段原有内容。

Scope

指定要替换内容的记录范围。只替换指定范围内记录字段的内容。范围子句有：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句 主题或《开发指南》第二章“语言概述”。

REPLACE 的默认范围是当前记录 ( NEXT 1 )。

FOR lExpression1

只有当指定记录使表达式 lExpression1 求值结果为“真”(.T.) 时，它的字段才会被替换为新的内容。因此，包含 FOR 子句可以使命令有条件地更新记录，而将那些不需要更新的记录筛选掉。

当表达式 lExpression1 是可优化表达式时，Rushmore 将优化 REPLACE 命令。因此，为使系统获得最佳性能，应在 FOR 表达式中使用可优化的表达式。有关这方面的详细内容，请参阅  SET OPTIMIZE 和深入了解 Rushmore 技术主题，或《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个逻辑表达式 lExpression2 作为替换字段内容的条件。只要逻辑表达式 lExpression2 计算为“真”(.T.)，就替换记录中的数据，直至遇到第一个计算结果为“假”(.F.) 为止。

IN nWorkArea

指定要更新记录的表所在的工作区。

IN cTableAlias

指定要更新记录的表的别名。

如果同时省略 nWorkArea 和 cTableAlias，则更新当前选定工作区中表的记录。

NOOPTIMIZE

关闭 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和 深入了解 Rushmore 技术主题，或者《开发指南》第十七章“优化应用程序”。

说明

REPLACE 命令用表达式的值替换字段中的数据。在替换未选定工作区中的字段时，字段前面必须加上表的别名。

附注

如果记录指针已在当前工作区中文件的末端，而指定的字段在另一个工作区中，则不发生任何替换。


*下面的示例创建了一个有 10 个记录的表。然后用 REPLACE 命令
* 往字段中填入随机值。最后用 MIN( ) 和 MAX( ) 函数显示出
* 表中的最大值和最小值。

CLOSE DATABASES

CREATE TABLE Random (cValue N(3))

FOR nItem = 1 TO 10  && 追加 10 个记录

APPEND BLANK

REPLACE cValue WITH 1 + 100 * RAND( )  && 插入随机值

ENDFOR

CLEAR

LIST  && 显示值

gnMaximum = 1  && 初始化最小值

gnMinimum = 100  && 初始化最大值

SCAN

gnMinimum = MIN(gnMinimum, cValue)

gnMaximum = MAX(gnMaximum, cValue)

ENDSCAN

? 'The minimum value is: ', gnMinimum  && 显示最小值

? 'The maximum value is: ', gnMaximum  && 显示最大值


请参阅

GATHER，INSERT - SQL，SCATTER


REPLACE FROM ARRAY 命令

请参阅

使用内存变量数组中的值更新字段内容。

语法

REPLACE FROM ARRAY ArrayName
[FIELDS FieldList]
[Scope]
[FOR lExpression1]
[WHILE lExpression2]
[NOOPTIMIZE]

参数

ArrayName

指定用来替换字段内容的数组名称。

FIELDS FieldList

指定只有 FieldList 中的字段才被数组中的内容替换。当替换非选定工作区的字段时，必须在字段前加上所在表的别名。

Scope

指定一个范围，规定要用数组中的内容替换其字段内容的记录。只有当记录在指定范围内时，才用数组内容替换它的字段值。替换一直进行到范围的末端或数组的末端。

范围子句有：ALL, NEXT nRecords, RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句主题，或《开发指南》第二章“语言概述”。

REPLACE FROM ARRAY 的默认范围是当前记录 (NEXT 1)。

FOR lExpression1

指定只有记录使表达式 lExpression1 计算值为“真”(.T.)时，才替换记录中字段的内容。包含 FOR 子句是为了有条件地替换记录，筛选出不想替换的记录。对于每一个记录，只要它使表达式 lExpression1 的值计算为“真”(.T.)，且数组中有元素，替换就要进行。

如果 lExpression1 是一个可优化表达式，Rushmore 将优化 REPLACE FROM ARRAY 命令。为获得最佳运行性能，应在 FOR 表达式中使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE，或《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个逻辑表达式 lExpression2 作为替换字段内容的条件。只要 lExpression2 计算为“真”，就替换记录中字段的数据，直至遇到使表达式不为“真”(.T.) 的记录为止。

NOOPTIMIZE

关闭 Rushmore 优化。有关详细内容，请参阅的 SET OPTIMIZE，或者《开发指南》第十七章“优化应用程序”。

说明

REPLACE FROM ARRAY 命令不处理备注和通用字段。若要往这些字段中加入数据，应使用 GATHER 和 APPEND GENERAL 命令。

替换从数组中的第一个元素开始，用数组中的元素替换记录中相应字段的内容。数组的第一个元素替换记录的第一个字段，第二个元素替换记录的第二个字段，依此类推。

如果数组的元素比表的字段少，则不替换多余的字段。如果数组的元素比表的字段多，则忽略数组中多余的元素。

附注

如果记录指针在当前工作区中文件的末端，而指定的字段在另一个工作区，则不发生任何替换。


请参阅

APPEND FROM ARRAY，APPEND GENERAL，COPY TO ARRAY，GATHER，REPLACE，SCATTER，SET OPTIMIZE


REPLICATE( ) 函数

请参阅	示例

返回一个字符串，这个字符串是将指定字符表达式重复指定次数后得到的。

语法

REPLICATE(cExpression, nTimes)

参数

cExpression

指定要重复的字符表达式。

nTimes

指定字符表达式的重复次数。

返回值类型

字符型

说明

在 FoxPro for MS-DOS 标准版（ 16 位）中，结果字符串的最大长度不能超过 64,000 个字符。

在 FoxPro for MS-DOS 扩展版（ 32 位）、 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for Macintosh 中，结果字符串的最大长度只受可用内存数量的限制。


CLEAR

? REPLICATE('HELLO ',4) && 显示 “HELLO HELLO HELLO HELLO”


请参阅

SPACE( )


REPORT 命令

请参阅

根据 MODIFY REPORT 或 CREATE REPORT 创建的报表定义文件，显示或打印报表。

语法

REPORT FORM FileName1 | ?
[ENVIRONMENT]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[HEADING cHeadingText]
[NOEJECT]
[NOCONSOLE]
[NOOPTIMIZE]
[PDSETUP]
[PLAIN]
[PREVIEW [NOWAIT]]
[TO PRINTER [PROMPT] | TO FILE FileName2 [ASCII]]
[NAME ObjectName]
[SUMMARY]

参数

FORM FileName1

指定报表定义文件的名称。

?

显示“打开”对话框，从中可选择报表文件。

ENVIRONMENT

包括此子句是为了提供与 2.x 版本报表的向后兼容性。要恢复与 Visual FoxPro 报表相关的数据环境，应把数据环境 AutoOpenTables 属性设置为默认值“真”(.T.)。若要确保在报表打印完后关闭报表环境，应把数据环境 AutoCloseTables 属性设置为默认值“真”(.T.)。

对于从早期 FoxPro 版本转换过来的报表，即便 AutoOpenTables 属性设置为“假”(.F.)，包含 ENVIRONMENT 也会打开并恢复数据环境中的所有表和关系。

当创建或修改报表时，可以用报表定义文件保存当前 Visual FoxPro 数据环境。保存 Visual FoxPro 数据环境，实际上是在报表定义表中添加了一些附加的记录，保存下列信息：所有打开的表和索引文件、索引顺序以及表之间关系。

Scope

指定要包含在报表中的记录范围。只有在指定范围内的记录才包括在报表中。

范围子句有：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句 主题或《开发指南》第二章“语言概述”。

REPORT 的默认范围是所有记录(ALL)。

FOR lExpression1

只有使表达式 lExpression1 的计算值为“真”(.T.) 的记录，才打印其中的数据。包括 FOR 可以筛选出不想打印的记录。

如果 lExpression1 是一个可优化表达式，Rushmore 将优化 REPORT FOR 命令。为获得最佳运行性能，应在 FOR 表达式中使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题，或《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个逻辑表达式 lExpression2 作为打印数据的条件。只要 lExpression2 条件计算为“真” (.T.) ，就打印记录中的数据，直至遇到使表达式不为“真”(.T.) 的记录为止。

HEADING cHeadingText

指定放在报表每页上的附加标题文本。如果既包括 HEADING 又包括了 PLAIN，应把 PLAIN 子句放在前面。

NOEJECT

仅用于 FoxPro for MS-DOS 。

打印报表之前，不向打印机输出换页符。

NOCONSOLE

当打印报表或将报表传输到一个文件时，不在 Visual FoxPro 主窗口或用户自定义窗口中显示有关信息。

NOOPTIMIZE

若要关闭对 REPORT 命令进行的 Rushmore 优化，应包括 NOOPTIMIZE 子句。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题，或者《开发指南》第十七章“优化应用程序”。

PDSETUP

仅用于 FoxPro for MS-DOS 。

在 FoxPro for MS-DOS 中使用 FoxPro 报表设计器创建报表定义时，可以设置打印机驱动程序，该设置决定了报表的外观。当用报表定义文件保存环境时，同时也保存了打印机驱动程序的设置值。如果以后打印报表时使用了 PDSETUP 子句，则恢复打印机驱动程序的设置值，并且用这个设置进行打印。

PLAIN

指定只在报表开始位置出现的页标题。

PREVIEW [NOWAIT]

以页面预览模式显示报表，而不把报表送到打印机中打印。要打印报表，必须发出带 TO PRINTER 子句的 REPORT 命令。

请注意，当命令中包括 PREVIEW 子句时，忽略系统内存变量。

在 Visual FoxPro 中， 可以在命令中包括可选的 NOWAIT 子句。这时，Visual FoxPro 能够在运行程序时不等待关闭页面预览窗口就继续执行程序。也就是说，当页面窗口打开时，Visual FoxPro 继续运行程序。

在已发布的应用程序中，应确保可以得到“查看”菜单。关掉打印预览工具栏时，如果没有“查看”菜单，将无法恢复“打印预览”工具栏。

TO PRINTER [PROMPT]

把报表输送到打印机打印。

在 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for Macintosh 中，命令中可以包括可选的 PROMPT 子句，在打印开始前显示设置打印机的对话框。可调整的打印设置项取决于当前安装的打印机驱动程序。PROMPT 子句应紧跟在 TO PRINTER 子句之后。

在 FoxPro for MS-DOS 中，PROMPT 不起作用。

TO FILE FileName2 [ASCII]

在 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for Macintosh 版本中，指定报表要送往的文本文件。将报表送往文本文件时，使用当前打印机驱动程序。包含 TO FILE 子句创建的文件具有默认扩展名 .TXT。

在 Visual FoxPro 中，可以在命令中包括可选 ASCII 子句，用报表定义文件创建一个 ASCII 文本文件。没有 ASCII 子句时，则按 PostScript 或其他打印机代码格式将报表写到文本文件中。报表定义中任何图象、线条、矩形以及圆角矩形都不出现在 ASCII 文件中。

在 ASCII 文本文件的每一页中列和行的数目由系统内存变量 _ASCIICOLS 和 _ASCIIROWS 的内容确定。_ASCIICOLS 和 _ASCIIROWS 的默认值分别为 80 列和 63 行。这些值对应于标准的纵向页。

NAME ObjectName

给报表的数据环境指定一个对象变量名。数据环境和数据环境中的对象都有一些属性和方法，例如 AddObject，这些属性和方法可在运行时设置或调用。对象变量则提供了存取这些属性和方法的途径。如果不指定 NAME 子句，Visual FoxPro 则使用报表文件的名称作为默认对象变量名，此默认名也可以在事件代码中引用。

SUMMARY

不打印细节行，只打印总计和分类总计信息。

说明

报表定义文件的默认扩展名是 .FRX。如果报表定义文件不在默认目录中，文件名中必须包括文件的路径。


请参阅

_ASCIICOLS，_ASCIIROWS，CREATE REPORT，MODIFY REPORT


Requery 方法

请参阅

重新查询列表框或组合框控制中所基于行源（row source）。

应用于

组合框，列表框

语法

Control.Requery

说明

使用 Requery 方法可以确保控制中包含最新的数据。Requery 方法重新查询 RowSource 属性，并且使用新的值更新列表。


请参阅

RowSource 属性


REQUERY( ) 函数

请参阅

为远程 SQL 视图再次检索数据。

语法

REQUERY([nWorkArea | cTableAlias])

参数

nWorkArea

指定打开远程 SQL 视图的工作区。

cTableAlias

指定远程 SQL 视图的别名。如果省略了 nWorkArea 和 cTableAlias，则检索在当前选定工作区中打开的 SQL 视图的数据。

返回值类型

数值型

说明

如果检索数据成功，REQUERY( ) 返回 1，否则，返回 0。

REQUERY( ) 通常用来在数据源发生变化时刷新 SQL 视图。


请参阅

CREATE SQL VIEW，SELECT - SQL，USE


Reset 方法

请参阅

重置计时器控制，让它从 0 开始。

应用于

计时器

语法

Timer.Reset


请参阅

Interval 属性，Timer 事件


ResetToDefault 方法

请参阅

将属性还原成 Visual FoxPro 默认的设置值。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，临时表，自定义，数据环境，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项安钮，选项组，页面，页框，关系，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

[Form.]Object.ResetToDefault(cPropertyName)

设置

cPropertyName

指定属性，将其重置成 Visual FoxPro 默认设置值。


请参阅

GETPEM( ) 函数


Resizable 属性

请参阅

指定列对象的大小能否在运行时由用户调节。

应用于

列

语法

Column.Resizable[ = lExpr]

设置

lExpr

Resizable 属性的设置有：

设置	说明
“真”(.T.)	列对象可改变大小。对于表单，可以从“控制”菜单中选择“大小”命令改变大小。
“假”(.F.)	（默认值）列对象的大小不能由用户改变。
说明

设计时可用，运行时可读写。


请参阅

Width 属性


Resize 事件

请参阅

当调整对象大小时发生。

应用于

列，容器对象，控制对象，表单，表格，OLE 绑定型控制，OLE 容器控制，页框，工具栏

语法

PROCEDURE Object.Resize
[LPARAMETERS nIndex]

参数

nIndex

唯一标识控制数组中控制。

说明

Resize 事件可以由交互式方式触发，也可以在代码中通过设置 Height 和 Width 属性来触发。对于列，Resize 事件可以通过设置列的 Width 属性来触发。


请参阅

Height 属性，Paint 事件，Width 属性


RESTORE FROM 命令

请参阅	示例

恢复保存在内存变量文件或备注字段中的内存变量和内存变量数组，并把它们放回到内存中。

语法

RESTORE FROM FileName | MEMO MemoFieldName
[ADDITIVE]

参数

FileName

指定保存内存变量和内存变量数组的内存变量文件。内存变量文件指定扩展名 .MEM。

MEMO MemoFieldName

指定保存内存变量和内存变量数组的备注字段。

ADDITIVE

防止删除当前内存中已有的内存变量或内存变量数组。如果使用 ADDITIVE 时，要添加的内存变量或内存变量数组的数目加上已有内存变量的数目超过了系统对内存变量数目的限制，Visual FoxPro 将从内存变量文件或备注字段中恢复尽可能多的内存变量和内存变量数组。

恢复内存变量或内存变量数组时，如果内存变量或内存变量数组与已有内存变量或内存变量数组有相同的名称，则用恢复的内存变量或内存变量数组的值改写原有内存变量或内存变量数组中的值。

说明

当在程序中执行 RESTORE FROM 命令时，所有 PUBIC 和 PRIVATE 内存变量和数组都恢复成 PRIVATE 变量或 PRIVATE 数组，所有 LOCAL 内存变量和数组都恢复成 LOCAL 变量或 LOCAL 数组。如果在命令窗口中执行 RESTORE 命令，则所有 PUBLIC 和 PRIVATE 内存变量和数组都恢复成 PUBLIC 变量或数组，所有 LOCAL 内存变量和数组都恢复成 LOCAL 变量或数组。

如果命令中没有包括 ADDITIVE 关键字，RESTORE FROM 将清除当前内存中的所有内存变量或数组。RESTORE FROM 命令不影响系统内存变量。


*在下面的示例中，创建了两个内存变量。先将它们保存到一个内存变
* 量文件中，然后在没有清除已有内存变量的情况下恢复它们的值。

gnVal1 = 50

gcVal2 = 'Hello'

SAVE TO temp

CLEAR MEMORY

gdVal3 = DATE( )

RESTORE FROM temp ADDITIVE

CLEAR

DISPLAY MEMORY LIKE g*


请参阅

DIMENSION，PUBLIC，PRIVATE，RELEASE，SAVE TO，STORE


RESTORE MACROS 命令

请参阅

把保存在键盘宏文件或备注字段中的键盘宏恢复到内存中。

语法

RESTORE MACROS
[FROM FileName | FROM MEMO MemoFieldName]

参数

FROM FileName

指定保存宏的宏文件。宏文件有 .FKY 扩展名，并且在 FileName 中没有指定扩展名时，用它作为文件的扩展名。如果要指定一个不同的宏文件扩展名，必须在 FileName 中包括扩展名。

FROM MEMO MemoFieldName

指定保存宏的备注字段。

说明

要把键盘宏保存到键盘宏文件或备注字段中，可使用 SAVE MACRO。

默认情况下，从文件或备注字段中恢复宏时采用追加方式，即把要恢复的宏追加到内存中已有宏的集合中。但如果宏文件或备注字段中的宏与内存中已有的宏同名，则用文件或备注字段中的宏改写内存中已有的宏。

如果执行 RESTORE MACROS 命令时没有文件名也没有备注字段名时，RESTORE MACROS 命令将清除内存中所有的宏，并且恢复所有默认宏。默认的宏是从名为 DEFAULT.FKY 的键盘宏文件中恢复的。如果 Visual FoxPro 找不到 DEFAULT.FKY 文件，Visual FoxPro 将 F2 键到 F9 键之间的所有键恢复为标准 Visual FoxPro 启动设置。


请参阅

CLEAR，PLAY MACRO，SAVE MACROS


RESTORE SCREEN 命令

请参阅

恢复先前保存在屏幕缓冲区、内存变量或数组元素中的 Visual FoxPro 主窗口或用户自定义窗口。

语法

RESTORE SCREEN
[FROM MemVarName]

参数

FROM MemVarName

指定内存变量或数组元素的名称，从中恢复屏幕或窗口图象。

说明

endofsyntaxendofsyntax使用 SAVE SCREEN 命令，可以把当前的 Visual FoxPro 主窗口或活动的用户自定义窗口保存到屏幕缓冲区、内存变量或数组元素中。

当使用 DISPLAY 或 LIST MEMORY 命令查看变量或数组元素时，保存屏幕或窗口图象的内存变量或数组元素具有 S 数据类型。也可以用 SAVE TO 命令把保存在内存变量或数组元素中的 Visual FoxPro 主窗口或用户自定义窗口保存到内存变量文件中，并且能用 RESTORE FROM 命令从内存变量文件中恢复它们。

如果执行 RESTORE SCREEN 命令时不带 FROM 子句，则 RESTORE SCREEN 从屏幕缓冲区中恢复 Visual FoxPro 主窗口或用户自定义窗口。


请参阅

RESTORE FROM，SAVE SCREEN，SAVE TO


RESTORE WINDOW 命令

请参阅	示例

将保存在窗口文件或备注字段中的窗口定义和窗口状态恢复到内存中。

语法

RESTORE WINDOW WindowNameList | ALL
FROM FileName | FROM MEMO MemoFieldName

参数

WindowNameList

指定一个或多个要恢复的窗口。窗口的名称之间用逗号隔开。

ALL

恢复窗口文件或备注字段中的所有窗口定义。

FROM FileName

指定要从中恢复窗口的窗口文件。窗口文件具有 .WIN 扩展名。如果保存窗口时给了窗口文件一个不同于 .WIN 的扩展名，必须在 FileName 中加入扩展名。

FROM MEMO MemoFieldName

指定要从中恢复窗口的备注字段。

说明

使用 SAVE WINDOW 命令，可以把窗口定义保存在窗口文件或备注字段中。

内存中任何与要恢复窗口同名的窗口都被改写。窗口在保存时的状态（隐藏的、活动的等等）在恢复时都被恢复出来。


*在下面的示例中，定义了一个名为 wOutput1 的窗口，并把它保存
* 到一个内存变量中。然后清除所有窗口，恢复并激活名为
* wOutput1 的窗口。

CLEAR

DEFINE WINDOW wOutput1 FROM 2,1 TO 13,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

SAVE WINDOW wOutput1 TO temp

CLEAR WINDOWS

RESTORE WINDOW wOutput1 FROM temp

ACTIVATE WINDOW wOutput1

WAIT "The window wOutput1 has been restored" WINDOW

RELEASE WINDOW wOutput1


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，SAVE WINDOWS


RESUME 命令

请参阅

继续执行一个挂起的程序。

语法

RESUME

说明

使用 SUSPEND 可以挂起程序的运行。挂起的程序重新运行时，从原来挂起时正在执行的行开始。

SUSPEND 和 RESUME 是非常有用的调试工具。程序在执行时，可以将它挂起，以便检查 Visual FoxPro 环境的当前状态。这些状态包括内存变量、窗口、菜单栏以及菜单定义等。

重要内容

为防止程序挂起时执行的命令干扰后面的程序输出，应在恢复程序运行前执行 CLEAR 命令，清除 Visual FoxPro 主窗口或活动的用户自定义窗口。


请参阅

CANCEL，CLEAR，RETURN，SUSPEND


RETRY 命令

请参阅

重新执行前面的命令。

语法

RETRY

说明

RETRY 将控制返回给调用程序，并且重新执行调用程序中最后执行过的程序行。RETRY 与 RETURN 相似，所不同的是 RETURN 返回到调用程序后，接着执行的是调用程序的下一行，而不是最后执行过的程序行。

RETRY 最有用的地方是错误处理例程，在锁定记录或文件时，它常用来重复执行一个命令，直到记录或文件锁函数能够成功为止。可以使用 SET REPROCESS 来控制重试记录或文件锁函数。在大多数网络环境中，SET REPROCESS 命令很有用。


请参阅

ON ERROR，RETURN，SET REPROCESS


RETURN 命令

请参阅	示例

将程序控制返回给调用程序。

语法

RETURN [eExpression | TO MASTER | TO ProcedureName]

参数

eExpression

指定返回给调用程序的表达式。如果省略 RETURN 命令或省略返回表达式，则自动将“真”(.T.) 返回给调用程序。

TO MASTER

将控制返回给最高层次的调用程序。

TO ProcedureName

将控制返回给指定过程。

说明

RETURN 终止程序、过程或函数的运行，并将控制返回给调用程序、最高层次调用程序、另一个程序或命令窗口。

当执行 RETURN 命令时， Visual FoxPro 释放 PRIVATE 类型的内存变量。

通常，RETURN 放在程序、过程或函数的未尾，用来将控制返回给高层的程序。但是，如果省略 RETURN 命令，也执行一个隐含的 RETURN 命令。


*在下面的示例中，函数 longdate 从日期返回一个字符串，该
* 字符串适于打印。

SET CENTURY ON

? longdate({02/16/95})  && Displays Thursday, February 16, 1995

FUNCTION longdate

PARAMETER mdate

RETURN CDOW(mdate) + ', ' + MDY(mdate)


请参阅

DO，FUNCTION，LPARAMETERS，PARAMETERS，PARAMETERS( )，PRIVATE，PROCEDURE，PUBLIC


RGB( ) 函数

请参阅	示例

根据一组红、绿、蓝颜色成份返回一个单一的颜色值。

语法

RGB(nRedValue, nGreenValue, nBlueValue)

参数

nRedValue

指定红色成份的强度。nRedValue 的大小范围是 0 到 255。0 是最小的颜色强度，255 是最大的颜色强度。

nGreenValue

指定绿色成份的强度。nGreenValue 的大小范围是 0 到 255。

nBlueValue

指定蓝色成份的强度。nBlueValue 的大小范围是 0 到 255。

说明

RGB( )函数返回的值可以用来设置诸如 BackColor 和 ForeColor 等颜色属性。


RGB*下面的示例使用 RGB( ) 函数把表单背景色颜色改变为蓝色。

goMyForm = CREATEOBJECT('FORM')  &&  创建表单

goMyForm.Show  &&  显示新创建的表单

WAIT WINDOW 'Press a key to change the form color'

goMyForm.BackColor=RGB(0,0,255)  &&  改变表单的背景色

WAIT WINDOW 'Press a key to release the form'

RELEASE goMyForm  && 从内存中释放表单

RGB


请参阅

GETCOLOR( )，RGBSCHEME( )


RGBSCHEME( ) 函数

请参阅	示例

返回指定配色方案中的 RGB 颜色对或 RGB 颜色对列表。

语法

RGBSCHEME(nColorSchemeNumber [, nColorPairPosition])

参数

nColorSchemeNumber

指定欲得到其完整 RGB 颜色列表的配色方案编号。RGBSCHEME( ) 返回10 个 RGB 颜色对。

nColorPairPosition

返回配色方案中的某一个 RGB 颜色对。nColorPairPosition 指定 RGB 颜色对在配色方案中的位置。例如，如果 nColorPairPosition 是 4，则返回第四个颜色对。

返回值类型

字符型

说明

使用 SCHEME( ) 函数可以返回配色方案中传统的颜色对或颜色对列表。在 RGB 颜色对中，使用数值指定颜色。而传统的颜色对则使用字母来指定颜色。


* endofparaendofpara下面的示例显示第四个配色方案中的第三个颜色对。

CLEAR

? RGBSCHEME(4,3)


请参阅

颜色概述，RGB( )，SCHEME( )


RIGHT( ) 函数

请参阅	示例

从一个字符串的最右边开始返回指定数目的字符。

语法

RIGHT(cExpression, nCharacters)

参数

cExpression

指定一个字符表达式，RIGHT( ) 函数从中返回最右边的若干字符。

nCharacters

指定要从字符串中返回的字符数目。如果 nCharacters 大于 cExpression 的长度，RIGHT( ) 函数返回整个字符表达式。如果 nCharaters 为负数或 0 ，RIGHT( ) 函数返回空字符串。

返回值类型

字符型

说明

返回的字符从右边最后一个字符开始，包含指定数目的字符。


CLEAR

? RIGHT('Redmond, WA', 2)  && 显示 “WA”


请参阅

AT( )，LEFT( )，LTRIM( )，RAT( )，RTRIM( )，SUBSTR( )，TRIM( )


RIGHTC( ) 函数

请参阅

从一个字符串中返回最右边指定数目的字符。

语法

RIGHTC(cExpression, nCharacters)

参数

cExpression

指定字符表达式，从中返回最右边的若干字符。

nCharacters

指定要从字符表达式中返回的字符数目。如果 nCharacters 大于 cExpression 的长度，RIGHTC ) 函数返回整个字符表达式。如果 nCharaters 为负数或 0 ，RIGHTC( ) 函数则返回空字符串。

返回值类型

字符型

说明

RIGHTC( ) 从一个字符表达式中返回最右边指定数目的字符。字符表达式可以包含单字节和双字节的任意组合。

返回的字符从右边最后一个字符开始，包含指定数目的字符。


请参阅

AT_C( )，LEFTC( )，RATC( )，RIGHTC( )，SUBSTRC( )


RightClick 事件

请参阅

当用户在控制上按下并释放鼠标右键（鼠标辅键）时此事件发生。

应用于

复选框，组合框，命令按钮，命令组，编辑框，表单，表格，标头，图象，标签，线条，列表框，选项按钮，选项组，页面，页框，形状，微调，文本框

语法

PROCEDURE Control.RightClick
[LPARAMETERS nIndex]

参数

nIndex

唯一标识控制数组中的控制。


请参阅

Click 事件，DblClick 事件，DragDrop 事件，DragOver 事件，DropDown 事件，Enabled 属性，KeyPress 事件，MouseDown 事件，MouseMove 事件，MouseUp 事件，Scrolled 事件，Undock 事件


RLOCK( ) 函数

请参阅	示例

尝试给一个或多个表记录加锁。

语法

RLOCK([nWorkArea | cTableAlias]
| [cRecordNumberList, nWorkArea | cTableAlias])

参数

nWorkArea | cTableAlias

指定表所在的工作区编号或表别名。如果不指定工作区或别名，则 RLOCK ( ) 试图对当前选定工作区中表的当前记录加锁。

cRecordNumberList

指定 RLOCK ( ) 尝试锁定的多个记录。字符表达式 cRecordNumberList 指定一个或多个要 RLOCK( ) 尝试锁定的记录的编号，多个记录的编号之间用逗号隔开。例如，要对表中前四个记录加锁，cRecordNumberList 应该为 “1，2，3，4”。

要锁定多个记录，SET MULTILOCKS 必须设置为 ON，并且必须指定表所在的工作区号（ nWorkArea ）或表的别名（ cTableAlias ）。

要锁定多个记录，可以将记录指针移动到要锁定的记录上，执行 RLOCK( ) 或 LOCK( ) 命令将这个记录锁定，然后多次重复这个过程。

在 Visual FoxPro 中，可以指定 0 作为记录编号。指定 0 表示要锁定表头。

重要内容

锁定表头的时间要尽可能短。因为表头锁定期间，其他用户不能向表中添加记录。

对表头解锁可以用 UNLOCK RECORD 0 或 UNLOCK 或 UNLOCK ALL 等命令。

如果成功地锁定了所有 cRecordNumberList 之中的记录，则 RLOCK( ) 返回“真”(.T.) 。如果 cRecordNumberList 指定的记录有一个或多个不能加锁，则 RLOCK( ) 返回“假”(.F.)，并且对指定的任何记录都不加锁。以上两种情况中，原来已有的记录锁保持不变。多个记录加锁是一个递增过程，即添加新的记录锁时并不释放原有的记录锁。

出于运行效率方面考虑，锁定整个表一般比锁定部分记录（哪怕是很少几个）要快。

返回值类型

逻辑型

说明

RLOCK( ) 等同于 LOCK( )。

如果加锁成功，则 RLOCK( ) 返回“真”(.T.)。此时，锁定的记录对于加锁的用户既可读也可写，而对于网络上的其他用户只读。

执行 RLOCK( ) 并不能保证每次加锁都成功。如果一个记录已由一个用户加锁，则其他用户不能对这个记录加锁；如果一个表已由一个用户加锁，则其他用户不能对这个表中的记录加锁。不管什么理由，只要记录不能加锁，RLOCK( ) 就返回“假”(.F.)。

默认情况下，RLOCK( ) 给记录加锁时只尝试一次。要想在第一次加锁尝试失败后自动重试加锁过程，应使用 SET REPROCESS 命令。SET REPROCESS 可以在加锁不成功的情况下控制尝试加锁的次数或尝试加锁的时间长度。有关 SET REPROCESS 和对表加锁的详细内容，请参阅 SET REPROCESS。

SET MULTILOCKS 命令决定能否锁定表中的多个记录。如果 SET MULTILOCKS 设置为 OFF （默认情况），则只能锁定表中的单个记录。如果 SET MULTILOCKS 设置为 ON，则可以锁定表中的多个记录。有关详细内容，请参阅 SET MULTILOCKS。

已加锁的表记录只能由加锁的用户解锁。执行 UNLOCK 命令、关闭表或退出 Visual FoxPro 都可以对记录解锁。

UNLOCK 命令可以用来解开当前工作区、指定工作区或所有工作区内的记录锁。有关详细内容，请参阅 UNLOCK。

将 SET MULTILOCKS 的设置由 ON 切换为 OFF 或由 OFF 切换为 ON 时，都隐含执行了 UNLOCK ALL 命令，所有工作区内的所有记录锁都被解除。

要关闭表，可以使用 USE、CLEAR ALL 或 CLOSE DATABASES 等命令。

有关记录和文件加锁以及在网络上共享表的详细内容，请参阅《开发指南》第十九章“共享访问程序设计”。


*下面的示例先锁定 customer 和 employee 两表中前四个记录，
* 随后又对它们解锁。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

SET REPROCESS TO 3 AUTOMATIC

STORE '1,2,3,4' TO gcRecList

gcOldExc = SET('EXCLUSIVE')

SET EXCLUSIVE OFF

SELECT 0

USE employee  && 打开 Employee 表

SELECT 0

USE customer  && 打开 Customer 表

? LOCK('1,2,3,4', 'customer')  && 锁定 customer 表中的前四个记录

? RLOCK(gcRecList, 'employee')  && 锁定 employee表中的前四个记录

UNLOCK IN customer

UNLOCK IN employee

SET EXCLUSIVE &gcOldExc


请参阅

CLEAR，CLOSE，FLOCK( )，LOCK( )，SET MULTILOCKS，SET RELATION，SET REPROCESS，UNLOCK，USE


_RMARGIN 系统内存变量

请参阅

包含右页边距。包含此变量是为了提供向后兼容性。可用报表设计器代替。

语法

_RMARGIN = nColumns

参数

nColumns

指定一个数值，由该值决定 ? 命令产生的输出最右边的位置。_RMARGIN 的最小值是 _LMARGIN + 1 与 _LMARGIN + _INDENT +1 中的较大者，最大值是 255 。_LRMARGIN 的初始设置是 80。

只在当 _WRAP 设置为“真”(.T.)时，_RMARGIN 才是活动的。


请参阅

_INDENT 系统内存变量，_LMARGIN 系统内存变量，_PLOFFSET 系统内存变量，SET MARGIN，_WRAP 系统内存变量


ROLLBACK 命令

请参阅	示例

取消当前事务期间所做的任何修改。

语法

ROLLBACK

说明

ROLLBACK 将表、表备注文件和索引文件恢复到事务开始前的状态。

当在事务处理中修改一个数据库中的记录时，网络上的其他用户在结束事务前不能访问（不论是读还是写）这些记录。

当网络上的其他用户要访问事务中修改过的记录时，必须等到事务结束之后。在可以访问记录前，他们会收到“记录不可用...，请稍候”的信息。正因为如此，使事务持续的时间尽可能短或者在其他用户不需访问时再执行事务就特别重要。

ROLLBACK 恢复当前事务期间所做的任何修改。如果事务是嵌套的，则只恢复自前一个 BEGIN TRANSACTION 命令起所做的修改，恢复后，程序继续执行下面的语句。

如果事务处理期间给一个记录或文件加了锁，则这些锁将被解除。


*在下面的示例中，先打开 testdata 数据库中的 customer 表。
* 然后执行 BEGIN TRANSACTION 命令开始一个事务。事务处理期
* 间，先显示出 cust_id 和 company 字段的内容，然后更新
* company 字段的内容，并将新的内容显示出来。接着执行
* ROLLBACK 命令恢复 company 字段原来的内容，并再次把
* cust_id 和 company 字段显示出来，其中的 company 已恢复
* 了原有的内容。

OPEN DATABASE (HOME( ) + 'samples\data\testdata.dbc')

BEGIN TRANSACTION

USE customer  && 只在一个DBC 中支持事务处理

CLEAR

LIST FIELDS cust_id, company NEXT 20

WAIT WINDOW 'Press a key to change the company field'

REPLACE ALL company WITH '***'  && 修改字段内容

CLEAR

GO TOP

LIST FIELDS cust_id, company NEXT 20

WAIT WINDOW 'Press a key to restore the company field'

ROLLBACK  && 恢复字段原来的内容

CLEAR

GO TOP

LIST FIELDS cust_id, company NEXT 20

WAIT WINDOW 'Press a key to exit'

CLEAR

CLOSE ALL


请参阅

BEGIN TRANSACTION，END TRANSACTION，TXNLEVEL( )


ROUND( ) 函数

请参阅	示例

返回圆整到指定小数位数的数值表达式。

语法

ROUND(nExpression, nDecimalPlaces)

参数

nExpression

指定要圆整的数值表达式。

nDecimalPlaces

指定 nExpression 圆整到的小数位数。

如果 nDecimalPlaces 为负数，则 ROUND( ) 返回的结果在小数点左端包含 nDecimalPlaces 个零。例如，如果 nDecimalPlaces 为 -2，那么小数点左端的第一和第二个数字(个位和十位)均为 0。

返回值类型

数值型

说明

ROUND( ) 返回的值有 nDecimalPlaces 个小数位。ROUND( ) 忽略由 SET DECIMALS 指定的小数位。


SET DECIMALS TO 4

SET FIXED ON	  && 固定显示小数位

CLEAR

? ROUND(1234.1962, 3)   && 显示 1234.1960

? ROUND(1234.1962, 2)   && 显示 1234.2000

? ROUND(1234.1962, 0)   && 显示 1234.0000

? ROUND(1234.1962, -1)  && 显示 1230.0000

? ROUND(1234.1962, -2)  && 显示 1200.0000

? ROUND(1234.1962, -3)  && 显示 1000.0000

SET FIXED OFF  && 恢复初始的默认设置

SET DECIMALS TO 2


请参阅

INT( )，SET DECIMALS


ROW( ) 函数

请参阅	示例

返回光标的当前行位置。

语法

ROW( )

返回值类型

数值型

说明

当屏幕输出需要相对光标的当前行位置定位时，ROW( ) 特别有用。

特殊操作符 $ 可以用来代替 ROW ( ) 函数。


CLEAR

@ 5,5 SAY ' '

@ ROW( ) + 6, COL( ) SAY 'Contact person'

@ $ + 6, COL( ) SAY 'Contact person'


请参阅

COL( )，PCOL( )，PROW( )，WCOLS( )，WROWS( )


RowHeight 属性

请参阅

指定表格控制中行的高度。

应用于

表格

语法

Grid.RowHeight[ = nHeight]

设置

nHeight

指定表格控制中所有行的高度。

说明

设计时可用，运行时可读写。

如果 RowHeight 置为  1 （自动），则以 FontSize 属性的设置为标准自动调节行的大小。


请参阅

FontSize 属性


RowSource 属性

请参阅	示例

指定组合框或列表框控制中值的来源。

应用于

组合框，列表框

语法

Control.RowSource[ = cName]

设置

cName

指定值的来源。

说明

设计和运行时可用。

值的来源可以是用逗号分隔的值列表、表、创建表或临时表的 SQL 语句、查询、数组、用逗号分隔的字段列表（可以在字段前加上一个句点和表的别名）、文件梗概（诸如 *.DBF 或 *.TXT）、表的字段名称或菜单。使用 RowSourceType 属性可以设置行源的类型。

在设计时可以使用 RowSource 属性给组合框或列表框控制指定多个列。要指定多个列，RowSourceType 应该设置为 1 （值），然后按如下方式指定各个列（用逗号分隔）

Col1Row1,Col2Row1,Col1Row2,Col2Row2,,Col2Row3

指定的值按行填充控制，每行填充的列数由 ColumnCount 属性指定。上面的示例假设 ColumnCount 的设置为 2。正如上面的示例中表明的那样，在第 3 行第 1 列中将没有值，这是因为在第 3 行第 2 列之前有两个连续的逗号，逗号之间没有值。


*下面的示例创建了一个列表框。出现在列表框中的项源是一个数
* 组。数组的名称由 RowSource 属性指定。RowSourceType 属性的
* 设置是 5 （数组）。它指定列表框中的项源是一个数组。

*列表框的 MultiSelect 属性设置为“真”(.T.)，即允许从列表框中做
* 多项选择。并用 ListCount 将从列表框中所做的选择显示出来。
* 使用 Selected 和 List 属性可以确定列表框中项的数目和选择的项。

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  && 用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

NEXT

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .f.  && 使控制菜单失效

frmMyForm.Move(150,10)  && 移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  && 添加 “Quit”命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  && 添加 ListBox 控制

frmMyForm.lstListBox1.RowSourceType = 5  && 指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' && 包含列表框项的数组

frmMyForm.cmbCommand1.Visible =.T.  && 将 “Quit” 命令按钮设置为可见的

frmMyForm.lstListBox1.Visible =.T.  && 将 ListBox 设置为可见的

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认的取消按钮(Esc)

Left = 125  && 命令按钮所在列

Top = 210  && 命令按钮所在行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

CLEAR  && 清除 Visual FoxPro 主窗口

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  && 创建 ListBox

Left = 10  && 列表框所在列

Top = 10  && 列表框所在行

MultiSelect = .T.  && 允许选择多个项

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 选择了此项吗？

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) && 显示此项

ENDIF

ENDFOR

ENDDEFINE


请参阅

ColumnCount 属性，RecordSource 属性，RowSourceType 属性


RowSourceType 属性

请参阅	示例

指定控制中值的来源类型。

应用于

组合框，列表框

语法

Control.RowSourceType[ = nSource]

设置

nSource

RowSourceType 属性的设置有：

设置	说明
0	（默认值）无。如果使用了默认值，则在运行时使用 AddItem 或 AddListItem 方法填充列。
1	值。使用由逗号分隔的列填充。
2	别名。使用 ColumnCount 属性在表中选择字段。
3	SQL 语句。SQL SELECT 命令创建一个临时表或一个表。
4	查询( .QPR)。指定有 .QPR 扩展名的文件名。
5	数组。设置列属性可以显示多维数组的多个列
6	字段。用逗号分隔的字段列表。字段前可以加上由表别名和句点组成的前缀。
7	文件。用当前目录填充列。这时 RowSource 属性中指定的是文件梗概(诸如 *.DBF 或*.TXT) 或掩码。
8	结构。由 RowSource 指定的表的字段填充列。
9	弹出式菜单。包含此设置是为了提供向后兼容性。
有关使用 RowSourceType 各个设置的详细内容，请参阅《开发指南》第十一章“使用控制”中的“使用列表框和下拉列表框”部分。

说明

设计和运行时可用。


*下面的示例创建了一个列表框。列表框的项源是数组，数组的名称
* 由 RowSource 属性指定。RowSourceType 属性的设置是
* 5 （数组）。它指定列表框的项源是数组。

*列表框的 MultiSelect 属性设置为“真”(.T.)，即允许从列表框中
* 做多项选择。使用 ListCount、Selected 和 List 属性将列表框中
* 所做的选择显示出来，从而可以确定列表框中项的数目和选择的项。

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  && 用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

NEXT

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .f.  && 使控制菜单无效

frmMyForm.Move(150,10)  &&移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  && 添加 “Quit” 命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  && 添加 ListBox 控制

frmMyForm.lstListBox1.RowSourceType = 5  && 指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' && 包含列表项的数组

frmMyForm.cmbCommand1.Visible =.T.  && “Quit” 命令按钮可见

frmMyForm.lstListBox1.Visible =.T.  && 列表框可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮上的标题

Cancel = .T.  && 默认的取消命令按钮(Esc)

Left = 125  && 命令按钮所在的列

Top = 210  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表单

CLEAR  && 清理 Visual FoxPro 主菜单

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  && 创建 ListBox 控制

Left = 10  && LList Box column

Top = 10  && ListBox 控制所在的行

MultiSelect = .T.  && 允许多重选择

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 选择了此项吗 ？

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) && 显示此项

ENDIF

ENDFOR

ENDDEFINE


请参阅

RowSource 属性


RTOD( ) 函数

请参阅	示例

将弧度转化为度。

语法

RTOD(nExpression)

参数

nExpression

指定表示弧度的数值表达式，RTOD( ) 将其转换成度。

返回值类型

数值型

说明

RTOD( ) 将表示弧度的数值表达式值转化表示度的数值。

RTOD( ) 对于使用 Visual FoxPro 三角函数 COS( )、SIN( ) 和 TAN( ) 很有用。

要将度转化为弧度，应使用 DTOR。


CLEAR

? RTOD(ACOS(0))  && 显示 90.00

STORE -1 to gnArcAngle

? RTOD(ACOS(gnArcAngle))  && 显示 180.00

? RTOD(ACOS(SQRT(2)/2))   && 显示 45.00


请参阅

COS( )，DTOR( )，SIN( )，TAN( )


RTRIM( ) 函数

请参阅	示例

删除了字符表达式后续空格后，返回结果字符串。

语法

RTRIM(cExpression)

参数

cExpression

指定要删除后续空格的字符表达式。

返回值类型

字符型

说明

RTRIM( ) 可用来确保删除用户输入到数据中的空格。RTRIM( )与 TRIM( ) 相同。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

? 'The contact for '+ RTRIM(company) + ' is ' + contact


请参阅

ALLTRIM( )，LTRIM( )，TRIM( )


RUN | ! 命令

请参阅

执行外部操作命令或程序。

语法

RUN [/N [K]] MS-DOSCommand | ProgramName
 — 或 者 —
! [/N [K]] MS-DOSCommand | ProgramName

参数

MS-DOSCommand

指定要执行的 MS-DOS 命令。有关 MS-DOS 命令的详细内容，请参阅 MS-DOS 文档。

ProgramName

指定要运行的程序或应用程序。在 FoxPro for MS-DOS 版本中，可以指定基于 MS-DOS 的程序或应用程序。在 Visual FoxPro 和 FoxPro for Windows 版本中，则可以指定基于 Windows 或基于 MS-DOS 的程序或应用程序。

/N [K]

在 FoxPro for MS-DOS 版本中，指定 FoxPro for MS-DOS 分配给运行外部程序的内存数量。N 是以 千字节（K）为单位的字节数，由它指定 RUN 命令可以得到的内存数量。

在 Visual FoxPro 和 FoxPro for Windows 版本中，/N 指定 NOWAIT。包含 N（不是用一个数值表达式代替 N，也不包含 K 选项）可以执行另一个基于 Windows 的应用程序。

说明

只用于 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for MS-DOS。可以在命令窗口或在程序中执行 RUN 命令。

在 FoxPro for Macintosh 版本中，RUN 不起作用。

重要内容

要运行 RUN，操作系统文件 COMMAND.COM 必须在当前目录中，或位于 MS-DOS COMSPEC 参数指定的地方。有关 COMSPEC 的详细内容，请参阅 MS-DOS 文档。

注意

请不要在 Visual FoxPro 内使用 RUN 来运行诸如 CHKDSK 这样的磁盘重组程序。这些程序修改磁盘上内容的方式可能会阻碍 Visual FoxPro 正常运行。

RUN 和 FoxPro for MS-DOS

FoxPro for MS-DOS 提供了一个内存管理实用工具 FoxSwap，可以用来为 RUN 分配更多的可用内存。

RUN 命令选项 /N 和 /NK 指定了 FoxPro for MS-DOS 分配给运行外部程序的内存数量。N 是以 KB 为单位指定 RUN 命令可使用的内存数量的数值，因此在指定可用内存数量时，请不要直接使用字母“N”。

要最大程度地使用 FoxSwap，可指定 N = 0。 此时 FoxPro for MS-DOS 将为 RUN 命令获得尽可能多的内存。

如果指定 N 的值大于 0， FoxPro for MS-DOS 则按如下规则执行：

 •	   将缓冲区中的内容保存至磁盘上。

 •	   如果可以得到 N KB 内存的话，则调用 RUN。如果得不到 N KB 内存， FoxPro for MS-DOS 则调用 FoxSwap。

例如，可以执行下面的命令分配 120 KB 内存来运行外部文本编辑器 MYEDITOR：

RUN /120 MYEDITOR

! /120K MYEDITOR.

虽然使用 FoxSwap 可以运行较大的外部程序，但是运行 FoxSwap 要花费额外的时间。

提示

请预先确定运行外部程序所需的内存数量，最好不要指定超出所需数量的内存。因为如果内存够用，便可以不使用 FoxSwap，这时，RUN 命令可以运行得快一些。

RUN 和 Visual FoxPro、FoxPro for Windows

当使用 RUN 来运行 Visual FoxPro 和 FoxPro for Windows 以外的程序时，它查找程序的方式与 FoxPro for MS-DOS 稍有不同。

如果在 RUN 中指定的程序没有扩展名， Visual FoxPro 和 FoxPro for Windows 首先沿着 MS-DOS 路径查找指定名称的程序信息文件( PIF )。PIF 允许在 Windows 下运行非 Windows 程序，并且可以指定程序的参数：程序是在窗口中运行还是全屏幕运行、分配给程序的内存数量等等。

如果找到了相应的 PIF，则使用 PIF 中指定的参数执行 PIF 中指定的程序。如果找不到 PIF，便在 MS-DOS 路径中按指定的名称搜索可执行程序。

当找不到 PIF 时，便使用安装在 Visual FoxPro 或 FoxPro for Windows 目录中的 PIF 文件 FOXRUN.PIF。FOXRUN.PIF 对程序在 Windows 中的运行做了一些配置。也可以修改 FOXRUN.PIF 来按另一种配置运行程序。

FOXRUN.PIF

FOXRUN.PIF 允许在 Visual FoxPro 和 FoxPro for Windows 中执行基于 MS-DOS 和 Windows 的程序和命令。FOXRUN.PIF 与 Visual FoxPro 中的 VFP.EXE 或与 FoxPro for Windows 中的 FOXPROW.EXE 必须在同一目录下。

在 FoxPro for MS-DOS 中，/N 和 /NK 指定了为运行外部程序而保留的内存数量。在 Visual FoxPro 和 FoxPro for Windows 中，/N 则表示 NOWAIT。在 Visual FoxPro 和 FoxPro for Windows 中， 包含 N（不用数值表达式代替 N，也不要包括 K 选项）可以执行其他基于 Windows 的应用程序。例如，下列语句打开“字符映射表”：

! /N CHARMAP.EXE

下面的示例是打开 Windows 控制面板中的 Windows 颜色选择程序：

! /N CONTROL COLOR

使用 RUN /N 或 ! /N 命令执行的 Windows 应用程序同通过程序管理器或文件管理器打开的应用程序运行的情况完全一样。可以使用 Windows 标准操作，在应用程序和 Visual FoxPro 或 FoxPro for Windows 之间来回切换。

可以在 /N 之后紧跟一个可选的数值，指定 Windows 应用程序的打开方式。注意不要在 /N 和数值之间加入空格。下表列出了有效的数值，同时说明了基于 Windows 的应用程序在每个数值下打开时对应的状态。

值	应用程序属性
1	活动且大小正常
2	活动且最小化
3	活动且最大化
4	不活动且大小正常
7	不活动且最小化
在 Visual FoxPro 和 FoxPro for Windows 中运行 MS-DOS 程序

默认情况下，FOXRUN.PIF 在窗口中运行指定的外部 MS-DOS 程序。当运行 MS-DOS 程序或命令时，窗口的标题是“FoxPro Run Command”。在 FoxPro for Windows 中，当外部程序或命令运行结束后，窗口标题变为 “Inactive FoxPro Run Command”。 FoxPro for Windows 的菜单系统在关闭该窗口以前则一直无效。在 Visual FoxPro 中，当外部程序或命令结束执行时，即关闭“FoxPro Run Command”窗口。

Windows PIF 编辑器可以用来定制 FOXRUN.PIF。通过编辑 PIF 编辑器中的“退出时关闭窗口”复选框可以指定“Inactive FoxPro Run Command”窗口是继续保持打开（ FoxPro for Windows 的默认情况），还是关闭( Visual FoxPro 的默认情况)。还可通过选择 PIF 编辑器中的“全屏幕”复选框，将外部程序放在全屏状态下运行，以及为程序分配内存等。

内存考虑

默认情况下，FOXRUN.PIF 给外部命令或程序的运行分配最小的内存 256K。如果没有 256K 自由常规内存， Visual FoxPro 和 FoxPro for Windows 将会显示错误信息。要修正它，可试用下列一种或两种方法：

 •	   关闭应用程序和文件，释放更多的内存。

 •	   编辑 FOXRUN.PIF，减少“KB 需要值”文本框中所需的内存数量。

如果外部命令需要超过 256K 内存，MS-DOS 便在“FoxPro Run Command”窗口中显示错误信息。要修正此错误，可编辑 FOXRUN.PIF，增加“KB 需要值”文本框中所需的内存数。


请参阅

GETENV( )，RUNSCRIPT，_SHELL


RUNSCRIPT 命令

请参阅

执行一个 AppleScript。

语法

RUNSCRIPT ScriptName [TO MemVarName]

参数

ScriptName

指定要执行的 AppleScript 。

TO MemVarName

指定保存 AppleScript 返回值的内存变量或数组元素。如果指定的内存变量不存在，FoxPro for Macintosh 自动创建它；如果指定的数组元素不存在，FoxPro for Macintosh 则显示相应的错误信息。

说明

仅用于 FoxPro for Macintosh 。

RUNSCRIPT 用在 FoxPro for Macintosh 中执行 AppleScript，即通过 Apple Event Manager 执行已编译的 Apple 事件。如果其他 Macintosh 应用程序产生 FoxPro for Macintosh 支持的 Apple 事件，它们就可以使用 AppleScript 来访问 FoxPro for Macintosh。Apple 事件或 AppleScript 需要 System 7 或更高版本的支持。

如果 RUNSCRIPT 执行的 AppleScript 内有错误， FoxPro for Macintosh 将显示相应的错误信息以及有关 AppleScript 中出错位置的信息。如果 Macintosh 中没有安装 AppleScript 支持软件， FoxPro for Macintosh 将显示相应的错误信息。

有关执行 AppleScript 的详细内容，请参阅《安装指南》。


请参阅

DO


SAVE MACROS 命令

请参阅	示例

把一组键盘宏保存到键盘宏文件或备注字段中。

语法

SAVE MACROS TO FileName | TO MEMO MemoFieldName

参数

TO FileName

指定保存宏的文件。键盘宏文件名最多可以包括八个字符，并且起始字符必须是一个字母或下划线，不能用数字作为文件名的第一个字母。除文件名第一个字符外，键盘宏文件名的其他字符可以为数字、字母和下画线的任意组合。一般应指定键盘文件扩展名为 .FKY 。如果指定的扩展名不是 .FKY ，则在用 RESTORE MACROS 命令恢复键盘宏时，必须包含指定的扩展名。

TO MEMO MemoFieldName

指定保存宏的备注字段。包括备注字段的表必须是打开的。但是，该表不必在选定的工作区中。要将宏保存到另一个工作区内的表中，在指定备注字段时，应加上表的别名。

说明

退出 Visual FoxPro 时，如果没有使用 SAVE MACROS 命令把创建的宏保存到键盘宏文件或备注字段中，就会丢失创建的宏。


* 下面的示例中把当前的一组宏保存到一个名为 MYMACROS.FKY
* 的文件中。

SAVE MACROS TO mymacros


请参阅

CLEAR，PLAY MACRO，RESTORE MACROS


SAVE SCREEN 命令

请参阅

把 Visual FoxPro 主窗口或活动的用户自定义窗口的图象保存到屏幕缓冲区、内存变量或数组元素中。

语法

SAVE SCREEN [TO MemVarName]

参数

TO MemVarName

指定保存屏幕图象的内存变量或数组元素。

说明

使用 RESTORE SCREEN 可以重新显示保存在屏幕缓冲区、内存变量或数组元素中的图像。

当使用 DISPLAY 或 LIST MEMORY 命令查看变量和数组元素时，保存 Visual  FoxPro 主窗口或用户自定义窗口图像的内存变量或数组元素具有 S 数据类型。

不带 TO MemVarName 子句执行此命令时，SAVE SCREEN 把 Visual FoxPro 主窗口或用户自定义窗口保存到屏幕缓冲区中。


请参阅

RESTORE FROM，RESTORE SCREEN，SAVE TO


SAVE TO 命令

请参阅	示例

把当前内存变量和数组保存到内存变量文件或备注字段中。

语法

SAVE TO FileName | MEMO MemoFieldName
[ALL LIKE Skeleton | ALL EXCEPT Skeleton]

参数

FileName

指定保存内存变量和数组的内存变量文件。内存变量文件的默认扩展名是 .MEM。

MEMO MemoFieldName

指定保存内存变量和数组的备注字段。

ALL LIKE Skeleton

指定保存所有满足指定梗概的内存变量和数组。其中的梗概可以包含问号( ? )和星号( * )通配符。

ALL EXCEPT Skeleton

指定保存所有不满足指定梗概的内存变量和数组。其中的梗概可以包含问号( ? )和星号( * )通配符。

说明

使用 RESTORE FROM 命令可从内存变量文件或内存变量备注字段中将内存变量和数组重新放回内存。请注意对象类型变量不能存入内存变量文件或内存变量备注字段中。


*在下面的示例中，先创建两个内存变量，然后把它们保存到一个
* 内存变量文件中，随之又恢复到内存中。所有这些操作并
*  没有清除原来已有的内存变量。

gnVal1 = 50

gcVal2 = 'Hello'

SAVE TO temp

CLEAR MEMORY

gdVal3 = DATE( )

RESTORE FROM temp ADDITIVE

CLEAR

DISPLAY MEMORY LIKE g*


请参阅

PRIVATE，PUBLIC，RELEASE，RESTORE FROM


SAVE WINDOWS 命令

请参阅	示例

把所有窗口定义或指定的窗口定义保存到窗口文件或备注字段中。

语法

SAVE WINDOWS WindowNameList | ALL
TO FileName | TO MEMO MemoFieldName

参数

WindowNameList

指定一个或多个要保存的窗口。窗口名称之间用逗号隔开。

ALL

把所有窗口定义保存到窗口文件或备注字段中。

TO FileName

指定保存窗口定义的窗口文件。

如果命名文件时没有给出扩展名，则指定默认扩展名 .WIN 。如果将窗口定义保存到一个文件时，指定了其他的扩展名，那么将来从文件中恢复窗口定义时，也必须包括该扩展名。

TO MEMO MemoFieldName

指定保存窗口定义的备注字段。包含备注字段的表必须是打开的，但它不必在当前选定工作区中。要把窗口定义保存到另一个工作区内的表中时，应在备注字段前加上表的别名。

说明

使用 RESTORE WINDOW 命令可以从窗口文件或备注字段中恢复窗口定义。保存窗口定义时，也保存各个窗口的状态。例如，如果一个窗口在保存到文件或备注字段中时是隐藏的，那么恢复后它仍然是隐藏的。


*在下面的示例中，创建了一个名为 wOutput1 窗口，并把它的定
* 义保存到文件 TEMP.WIN 中。清除所有窗口后，又从该文件中
* 恢复 wOutput1 窗口，并将它激活。

CLEAR

DEFINE WINDOW wOutput1 FROM 2,1 TO 13,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

ACTIVATE WINDOW wOutput1

@ 1,1 SAY 'This is the contents of the window'

SAVE WINDOWS wOutput1 TO temp

CLEAR WINDOWS

WAIT WINDOW 'The window has been saved - Press a key'

RESTORE WINDOW wOutput1 FROM temp

ACTIVATE WINDOW wOutput1

WAIT WINDOW 'The window has been restored - Press a key'

DEACTIVATE WINDOW wOutput1

RELEASE WINDOW wOutput1

DELETE FILE temp.win


请参阅

DEFINE WINDOW，RESTORE SCREEN，RESTORE WINDOW，SAVE SCREEN


SaveAs 方法

请参阅

把一个对象作为 .SCX 文件保存起来。

应用于

表单，表单集，_SCREEN

语法

Object.SaveAs(cFileName [, oObjectName])

参数

cFileName

指定保存对象的 .SCX 文件。

oObjectName

指定对数据环境对象的引用。

说明

可以在程序中使用 SaveAs 方法创建表单或表单集，并把它保存为一个 .SCX 文件。

在使用 SaveAs 方法的同时，也保存了与对象有关的所有属性、事件和方法。


请参阅

SaveAsClass 方法，SET CLASSLIB


SaveAsClass 方法

请参阅

把对象的实例保存为类库中的类定义。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表单集，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.SaveAsClass.(ClassLibName, ClassName [, Description])

参数

ClassLibName

指定保存类定义的 .VCX 文件名。

ClassName

给类指定一个类名。

Description

对类的描述，是可选项。

说明

当使用 SaveAsClass 方法时，所有与对象有关的属性、事件和方法都作为类定义的一部分保存起来。

附注

只有当该类来源于类库 (.VCX) 时才能使用 SaveAsClass 方法。


请参阅

SaveAs 方法，SET CLASSLIB


ScaleMode 属性

请参阅

使用图形方法或定位控制时，指定对象坐标的度量单位。

应用于

表单，_SCREEN，工具栏

语法

Object.ScaleMode = nMode

设置

nMode

 ScaleMode 属性的设置有：

设置	说明
0	Foxel（Visual FoxPro 术语，相当于当前字体字符的最大高度和平均宽度。）
3	象素（默认为显示器或打印机分辨率的最小单位。）
说明

设计和运行时可用。


请参阅

DrawMode 属性，DrawStyle 属性


SCAN ... ENDSCAN 命令

请参阅	示例

在当前选定的表中移动记录指针，并对每一个满足指定条件的记录执行一组命令。

语法

SCAN [NOOPTIMIZE]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[Commands]
[LOOP]
[EXIT]
ENDSCAN

参数

NOOPTIMIZE

关闭对 SCAN 命令的 Rushmore 优化。有关详细内容，请参阅  SET OPTIMIZE 和深入了解 Rushmore 技术主题，或者《开发指南》第十七章“优化应用程序”。

Scope

指定扫描记录的范围。只有范围之内的记录才可能扫描到。范围子句有 ALL，NEXT nRecords，RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅作用域子句主题或《开发指南》第二章“语言概述”。

SCAN 的默认范围是所有记录（ALL）。

FOR lExpression1

只有使表达式 lExpression1 计算为“真”(.T.)的记录，才对其执行命令。包含 FOR 子句可以筛选出不想扫描的记录。

当表达式 lExpression1 是可优化表达式时，Rushmore 将优化 SCAN ... FOR 命令创建的查询。为使系统获得最佳性能，应在 FOR 子句中使用可优化的表达式。有关详细内容，请参阅  SET OPTIMIZE 和深入了解 Rushmore 技术主题，或《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个逻辑表达式 lExpression2 作为执行命令的条件。只要逻辑表达式计算为“真”，就对记录执行命令，直至遇到使表达式不为“真”(.T.) 的记录为止。

Commands

指定要执行的 Visual FoxPro 命令。

LOOP

把控制权直接返回到 SCAN 命令。LOOP 可以放在 SCAN 到 ENDSCAN 之间的任何地方。

EXIT

把程序的控制权从 SCAN ... ENDSCAN 循环语句中交给 ENDSCAN 下面的命令。EXIT 可以放在 SCAN 到 ENDSCAN 之间的任何地方。

ENDSCAN

标志 SCAN 过程的结束。

说明

SCAN 命令自动将记录指针移到下一条满足指定条件的记录，并执行相应的命令块。

可以在 ENDSCAN 同一行的后面加一些注释。注释在程序编译和执行时不起作用。


*下面的示例中，使用 SCAN ... ENDSCAN 循环来显示瑞典所
*  有的公司。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

SCAN FOR UPPER(country) = 'SWEDEN'

? contact, company, city

ENDSCAN


请参阅

DO CASE ... ENDCASE，DO WHILE ... ENDDO，FOR ... ENDFOR


SCATTER 命令

请参阅	示例

从当前记录中把数据复制到一组内存变量或数组中。

语法

SCATTER
[FIELDS FieldNameList
| FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton] [MEMO]
TO ArrayName | TO ArrayName BLANK | MEMVAR | MEMVAR BLANK
| NAME ObjectName

参数

FIELDS FieldNameList

指定字段，命令将其内容传送到内存变量或数组中。如果省略 FIELDS FieldNameList，则传送所有字段。如果在字段列表后放一个关键字 MEMO ，则字段列表中可以包含备注字段。SCATTER 总是忽略通用和图片字段，即使包括了 MEMO 关键字也是如此。

FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton

通过 LIKE 和 EXCEPT 子句，有选择地把字段中的内容传送到内存变量或数组中。如果包括 LIKE 子句，那么与 Skeleton 相匹配的字段被传送到内存变量或数组中。如果包括 EXCEPT Skeleton，那么除了与 Skeleton 相匹配的字段外，其他所有字段都传送到内存变量或数组中。

Skeleton 支持通配符。例如，如果要把所有以 A 和 P 字母开头的字段传送到内存变量或数组中去，可以使用如下命令:

SCATTER FIELDS LIKE A*,P* TO myarray

可以同时使用 LIKE 和 EXCEPT 子句，如:

SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myarray

MEMO

指定字段列表中包含了备注字段。默认情况下，SCATTER 不处理备注字段。

将很大的备注字段传送到内存变量或数组时，必须有足够的内存。如果缺乏足够的内存，Visual FoxPro 将产生相应的错误信息。如果某一备注字段太大，内存中装不下，那么该字段及字段列表中的其他备注字段的内容都不会传送。如果没有传送备注字段，那么对应的内存变量或数组元素设置为“假”(.F.)。

TO ArrayName

指定接受记录内容的数组。从第一个字段起，SCATTER 按顺序将每个字段的内容复制到数组的每个元素中。

如果指定数组的元素比字段数多，则多余数组元素的内容不发生变化。如果指定数组不存在，或者它的元素个数比字段数少，则系统自动创建一个新数组，数组元素与对应字段具有相同的大小和数据类型。

TO ArrayName BLANK

创建一个数组，它的元素与表中字段具有相同大小和数据类型，但没有内容。

MEMVAR

把数据传送到一组内存变量而不是数组中。SCATTER 为表中每个字段创建一个内存变量，并把当前记录中各个字段的内容复制到对应的内存变量中。新创建的内存变量与对应字段具有相同的名称、大小和数据类型。

如果 SCATTER 命令中包括字段列表，则为字段列表中每个字段都创建一个内存变量。

要引用与当前表中字段有相同名称的内存变量，应在内存变量名前加上限定符 M．。

重要内容

不要在使用 MEMVAR 时加入 TO。如果加入了 TO， Visual FoxPro 创建一个名为 MEMVAR 的数组。

MEMVAR BLANK

创建一组空内存变量，每个内存变量与相应的字段有相同的名称、数据类型以及相同的大小。如果 SCATTER 中包含一字段列表，则为字段列表中的每一个字段创建一个内存变量。

NAME ObjectName

仅用于 Visual FoxPro ，它创建一个对象，对象的属性与表中字段具有相同名称。每个对象属性的值都是表中对应字段的内容。对于表中的备注或通用字段不能创建属性。

要引用与打开的表同名的对象属性，应在对象名前加上限定符 M. 。例如:

USE customer

SCATTER NAME customer

? customer.company    && 返回表的值

? M.customer.company  && 返回对象属性的值

说明

SCATTER 和 COPY TO ARRAY 相似。所不同的是 COPY TO ARRAY 把多个记录复制到一个数组，而 SCATTER 只将一个记录复制到数组或一组内存变量，并且在数组或内存变量不存在时，SCATTER 能自动创建。

使用 GATHER 命令可以将内存变量或数组元素中的内容复制到表记录中。


*下面的示例使用 SCATTER 命令把当前记录中的数据复制到一组内
* 存变量中，然后把数据显示在窗口中并进行编辑，最后，只要不按
* Esc 键，便用 GATHER 命令把数据复制回当前记录中。endofparaendofpara

SET TALK OFF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE employee  && 打开 Employee 表

COPY TO temp

USE temp

SCATTER MEMVAR MEMO	  && 保存旧值

DEFINE WINDOW wEnter FROM 5,10 to 20,70 PANEL

ACTIVATE WINDOW wEnter

@ 1,3   SAY 'First Name:  ' GET m.first_name

@ 3,3   SAY 'Last Name:  ' GET m.last_name

@ 13,13 SAY 'Press Esc to discard changes'

READ

IF LASTKEY( ) != 27

GATHER MEMVAR  && 保存修改

WAIT WINDOW 'Changes saved' NOWAIT

ELSE  && 不保存修改

WAIT WINDOW 'Changes not saved' NOWAIT

ENDIF

DEACTIVATE WINDOW wEnter

BROWSE FIELDS first_name, last_name

USE


请参阅

APPEND FROM ARRAY，COPY TO ARRAY，DECLARE，DIMENSION，GATHER


SCHEME( ) 函数

请参阅	示例

返回指定配色方案中的颜色对列表或单个颜色对。

语法

SCHEME(nSchemeNumber [, nColorPairNumber])

参数

nSchemeNumber

指定需要颜色对列表的配色方案编号。SCHEME( ) 返回十个颜色对。

nColorPairNumber

指定配色方案中一个颜色对的位置。SCHEME( ) 只返回这个颜色对。例如，如果 nColorPairNumber 等于 4，则 SCHEME( ) 返回配色方案中第四个颜色对。

返回值类型

字符型


* 下面的示例返回第四个配色方案中的第三个颜色对：

? SCHEME(4,3)


请参阅

颜色概述


SCOLS( ) 函数

请参阅

返回 Visual FoxPro 主窗口中可用列数。

语法

SCOLS( )

返回值类型

数值型

说明

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，该函数的返回值取决于当前显示模式。显示模式可以使用 SET DISPLAY 命令更改。

在 FoxPro for Macintosh 中，该函数返回值依赖于 MACDESKTOP 的设置和 Visual FoxPro 主窗口的当前字体。如果 MACDESKTOP 设置是 ON ，SCOLS( ) 函数返回 Macintosh 桌面上列的数目；如果 MACDESKTOP 设置为 OFF 时，SCOLS( ) 函数返回当前主窗口列的数目。可以使用 MODIFY WINDOW 来更改 FoxPro 主窗口的字体。


请参阅

COL( )，ROW( )，SET DISPLAY，SET MACDESKTOP，SROWS( )，WCOLS( )，WROWS( )


_SCREEN 系统内存变量

请参阅	属性	方法	示例

指定 Visual FoxPro 主窗口的属性和方法。

语法

_SCREEN.PropertyName [= eValue]
 — 或者 —
_SCREEN.MethodName

参数

PropertyName

为 Visual FoxPro 主窗口指定一个属性。

eValue

指定属性的值。

MethodName 指定 Visual FoxPro 主窗口要执行的方法。

说明

_SCREEN 允许把 Visual FoxPro 主窗口作为一个对象来处理。但不能为 _SCREEN 创建事件过程。

_SCREEN 是一个对象类型的系统内存变量。


属性

ActiveControl

ActiveForm

AlwaysOnTop

AutoCenter

BackColor

BaseClass

BorderStyle

BufferMode

Caption

Class

ClassLibrary

ClipControls

Closable

Comment

ControlBox

ControlCount

Controls

CurrentX

CurrentY

DataSession

DataSessionID

DefOLELCID 属性

Desktop

DrawMode

DrawStyle

DrawWidth

Enabled

FillColor

FillStyle

FontBold

FontItalic

FontName

FontOutline

FontShadow

FontSize

FontStrikeThru

FontUnderline

Forecolor

FormCount

Forms

HalfHeightCaption

Height

HelpContextID

Icon

KeyPreview

Left

LockScreen

MaxButton

MaxHeight

MaxLeft

MaxTop

MaxWidth

MDIForm

MinButton

MinHeight

MinWidth

MousePointer

Movable

Name

ParentClass

Picture

ReleaseType

ScaleMode

ShowTips

TabIndex

TabStop

Tag

Top

Visible

Width

WindowState

WindowType


方法

AddObject	Box	Circle
Cls	Draw	Hide
Line	Move	Point
Print	Pset	Refresh
Release	RemoveObject	SaveAs
SaveAsClass	SetAll	Show
TextHeight	TextWidth	ZOrder


*示例 1 使用 FoxPro 的早期语法创建了一些控制，演示了在
* Visual FoxPro 中使用面向对象程序设计技术的一个方法。

*示例中使用早期 @ ... GET 控制语法在 Visual FoxPro 主窗口中
* 创建了一个文本框。为了使用 Visual FoxPro 的文本属性来操作
* 该文本框，在 @ ... GET 中包含了 NAME 子句。通过使用 _SCREEN
* 来引用在 Visual FoxPro 主窗口中创建的文本框（ Visual
*  FoxPro 控制放在 Visual FoxPro 主窗口第一页框的第一页）。
* 然后使用 GETCOLOR( ) 指定文本框的背景色，并用
* READ 命令激活该文本框。

*示例 2 改变了 Visual FoxPro 主窗口标题栏中的文本。

*示例 1*

CLEAR

@2,2 GET gcFirstName DEFAULT SPACE(10) NAME goFirstName

_SCREEN.PageFrame1.Page1.goFirstName.BackColor = GETCOLOR( )

READ

CLEAR

*示例 2*

_SCREEN.Caption = 'My Application'


请参阅

MODIFY WINDOW，表单对象


SCROLL 命令

请参阅	示例

向上、向下、向左或向右滚动 Visual FoxPro 主窗口或用户自定义窗口的一个区域。

语法

SCROLL nRow1, nColumn1, nRow2, nColumn2, nRowsScrolled
[, nColumnsScrolled]

参数

nRow1, nColumn1, nRow2, nColumn2

指定在 Visual FoxPro 主窗口或用户自定义窗口中滚动的一块长方形区域。nRow1, nColumn1 指定该区域的左上角， nRow2 和 nColumn2 指定该区域的右下角。

nRowsScrolled

指定在长方形区域内向上或向下滚动多少行。如果数值表达式 nRowsScrolled 为正数，则 Visual FoxPro 向上滚动指定行数。如果数值表达式 nRowsScrolled 为负数，则 Visual FoxPro 向下滚动指定行数。如果表达式 nRowsScrolled 等于零并且省略了参数 nColumnsScrolled，Visual FoxPro 清除该区域。

nColumnsScrolled

指定在长方形区域内向左或向右滚动多少列。如果数值表达式 nColumnsScrolled 为正数，则 Visual FoxPro 向右滚动指定列数。如果数值表达式 nColumnsScrolled 为负数，则 Visual FoxPro 向左滚动指定列数。如果同时包含 nRowsScrolled 和 nColumnsScrolled 参数，Visual FoxPro 沿对角线方向滚动该区域。


*  下面命令滚动一个小长方形区域:

CLEAR

@ 4, 1 FILL TO 10, 8 COLOR GR+/B

WAIT WINDOW 'Press key to scroll left top corner'

SCROLL 0, 0, 5, 5, -2, 1


请参阅

MOVE WINDOW


ScrollBars 属性

请参阅

指定控制所具有的滚动条类型。

应用于

编辑框，表格

语法

[Form.]Control.ScrollBars[= nType]

设置

nType

对表格控制，ScrollBars 的设置有：

设置	说明
0	无
1	水平滚动条
2	垂直滚动条
3	（默认值）水平滚动条和垂直滚动条
对编辑框，ScrollBars 的设置有:

设置	说明
0	无
2	垂直滚动条
说明

设计时可用，运行时可读写。

如果启用了此属性，则当表格控制或编辑框显示不下它所包含的内容时自动出现滚动条。


请参阅

DoScroll 方法，Scrolled 事件


Scrolled 事件

请参阅

在表格控制中，单击水平或垂直滚动条，或移动滚动条中的滚动块时，此事件发生。

应用于

表格

语法

PROCEDURE Grid.Scrolled
LPARAMETERS [nIndex], nDirection

参数

nIndex

唯一标识控制数组中的控制。

nDirection

指定用户如何滚动表格控制中的内容。可能的参数有：

参数	说明
0	使用上箭头键
1	使用下箭头键
2	单击垂直滚动条滚动块上面的区域
3	单击垂直滚动条滚动块下面的区域
4	使用左箭头键
5	使用右箭头键
6	单击水平滚动条滚动块左边的区域
7	单击水平滚动条滚动块右边的区域
说明

在程序代码中调用 DoScroll 方法，也发生 Scrolled 事件。


请参阅

ActiveColumn 属性，ActiveRow 属性，DoScroll 方法，RelativeColumn 属性，RelativeRow 属性


SEC( ) 函数

请参阅	示例

返回日期时间型表达式中的秒钟部分。

语法

SEC(tExpression)

参数

tExpression

指定日期时间型表达式， SEC( ) 函数返回该表达式的秒钟部分。 如果 tExpression 包含的只是日期而没有时间， Visual FoxPro 把默认的午夜时间（12: 00: 00 A.M.）加入到 tExpression 中。

返回值类型

数值型


* 下面的示例显示当前时间和指定时间的秒钟部分。

CLEAR

? SEC(DATETIME( ))

? HOUR({10:42:16am})  && 显示 16


请参阅

DATETIME( )，SET SECONDS


SECONDS( ) 函数

请参阅	示例

以秒为单位返回自午夜以来经过的时间。

语法

SECONDS( )

返回值类型

数值型

说明

SECONDS( ) 以十进制格式返回一个数值，精度为 1 毫秒。如果在 Windows NT 上运行，则精度为 10 毫秒。


CLEAR

? SECONDS( )

? SECONDS( )/(60 * 60)


请参阅

SYS(2) - 自午夜开始以秒计的时间，TIME( )


SEEK 命令

请参阅	示例

SEEK 在一个表中搜索首次出现的一个记录，这个记录的索引关键字必须与指定的表达式匹配。

语法

SEEK eExpression
[ORDER nIndexNumber | IDXIndexFileName
| [TAG] TagName [OF CDXFileName]
[ASCENDING | DESCENDING]]
[IN nWorkArea | cTableAlias]

参数

eExpression

指定 SEEK 搜索的索引关键字。eExpression 可以是空字符串。

ORDER nIndexNumber

指定用来搜索关键字的索引文件或索引标识编号。nIndexNumber 指出了索引文件在 USE 和 SET INDEX 命令中列出的编号。首先，按照 USE 或 SET INDEX 中的顺序对打开的 .IDX 文件进行编号。然后，对结构 .CDX 文件（如果存在）中的标识进行编号，其顺序与创建它们的顺序相同。最后，对所有打开的独立 .CDX 文件进行编号，其顺序也与创建的顺序相同。有关索引编号的详细内容，请参阅 SET ORDER。

ORDER IDXIndexFileName

指定一个用来搜索关键字的 .IDX 文件。

ORDER [TAG] TagName [OF CDXFileName]

指定用来搜索索引关键字的 .CDX 文件中的标识。标识名称可能在一个 .CDX 结构文件中，也可以在任何其他打开的独立 .CDX 文件中。

如果在几个打开的独立 .CDX 文件中存在相同标识名称，则应使用 OF CDXFileName 指出包含所用标识的 .CDX 文件。

附注

如果存在相同的 .IDX 文件和标识名称时，.IDX 文件具有优先权。

ASCENDING

指定按升序搜索表。

DESCENDING

指定按降序搜索表。

IN nWorkArea

指定要搜索的表所在的工作区编号。

IN cTableAlias

指定要搜索的表的别名。

如果省略了 IN nWorkArea 和 In cTableAlias，则在当前选定的工作区中搜索。

说明

只能在索引过的表中使用 SEEK 命令，并且只能搜索索引关键字。除非 SET EXACT 的设置为 OFF ，否则匹配指的是完全匹配。

如果 SEEK 找到了与索引关键字相匹配的记录，则 RECNO( ) 返回匹配记录的记录号；FOUND( ) 返回“真”(.T.)；EOF( ) 返回“假”(.F.)。

如果找不到相匹配的关键字，则 RECNO( ) 将表中记录的个数加 1，然后返回；FOUND( ) 返回“假”(.F.)；EOF( ) 返回“真”(.T.)。

如果 SET NEAR 设置为 ON ，则记录指针指向与索引关键字最相匹配的那个记录的后面一个记录。如果 SET NEAR 设置为 OFF，则记录指针指向文件的结尾。在这两种情况下，RECNO(0) 都返回与关键字最匹配的记录号。


* 在下面的示例中，先打开 customer 表，并按 company 字段建立
* 索引。然后，用 SEEK 命令查找与内存变量 gcSeekVal 的值相匹配
* 的索引关键字表达式。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer ORDER company  && 打开 Customer 表

SET EXACT OFF

STORE 'B' TO gcSeekVal

SEEK gcSeekVal

IF FOUND( )

DISPLAY FIELDS company, contact

ENDIF


请参阅

EOF( )，FOUND( )，INDEX，LOCATE，RECNO( )，SEEK( )，SET EXACT，SET NEAR


SEEK( ) 函数

请参阅	示例

在一个已建立索引的表中搜索一个记录的第一次出现位置，该记录的索引关键字与指定表达式相匹配。SEEK( ) 函数返回一个逻辑值，指示搜索是否成功。

语法

SEEK(eExpression [, nWorkArea | cTableAlias
[, nIndexNumber | cIDXIndexFileName | cTagName]])

参数

eExpression

指定 SEEK( ) 函数搜索的索引关键字表达式。

nWorkArea

指定要在其中搜索索引关键字的表所在工作区的编号。

cTableAlias

指定要搜索的表的别名。

如果省略了 nWorkArea 或 cTableAlias ，则在当前工作区中搜索表。

nIndexNumber

指定用来搜索关键字的索引文件或索引标识编号。nIndexNumber 指出了索引文件在 USE 和 SET INDEX 命令中列出的编号。首先，按照 USE 或 SET INDEX 中的顺序对打开的 .IDX 文件进行编号。然后，对结构 .CDX 文件（如果存在）中的标识进行编号，其顺序与创建它们的顺序相同。最后，对所有打开的独立 .CDX 文件进行编号，其顺序也与创建的顺序相同。有关索引编号的详细内容，请参阅 SET ORDER。

cIDXIndexFileName

指定用来搜索索引关键字的 .IDX 文件。

cTagName

指定用来搜索索引关键字的 .CDX 文件的标识。标识名称可以来自结构文件 .CDX ，也可以来自任何打开的独立 .CDX 文件。

附注

如果存在相同的 .IDX 文件和标识名称，优先使用 .IDX 文件。

返回值类型

逻辑型

说明

只能对设置了索引次序的表使用 SEEK( ) 函数，并且只能搜索索引关键字。除非 SET EXACT 的设置为 OFF 时，否则所指的匹配是完全相匹配。

如果找到了匹配的记录，则 SEEK( ) 函数返回“真”(.T.)，记录指针指到找到的记录。如果找不到匹配记录，SEEK( ) 函数返回“假”(.F.)。此时记录指针移到文件的结尾。执行 SEEK( ) 函数同先执行 SEEK 命令然后执行 FOUND( ) 函数的结果一样。

如果省略了 nIndexNumber， IDXIndexFileName 和 cTagName 参数，那么 SEEK( ) 函数使用主控索引或索引标识来搜索索引关键字。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer ORDER cust_id  && 打开 Customer 表

? SEEK('CHOPS')  && 返回 .T., 找到了记录


请参阅

EOF( )，FOUND( )，LOCATE，SEEK，SET ORDER


SELECT 命令

请参阅	示例

激活指定工作区。

语法

SELECT nWorkArea | cTableAlias

参数

nWorkArea

指定要激活的工作区。如果 nWorkArea 为零，则激活尚未使用的工作区中编号最小的那一个。

cTableAlias

指定要激活的、包含打开表的工作区。cTableAlias 是打开表的别名。也可以用从 A 到 J 中的一个字符作为 cTableAlias 来激活前十个工作区中的一个。

说明

默认情况下，启动 Visual FoxPro 时打开编号为 1 的工作区。

说明

在任何工作区中打开的表字段均可以在 Visual FoxPro 的命令和函数中使用。访问非当前工作区中打开表的字段时，应使用如下格式：alias.field 或者 alias -> field。


*下面示例说明了各种选择工作区的方法

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

SELECT 1	  && 工作区 1

USE customer  && 打开 Customer 表

SELECT 2	  && 工作区 2

USE orders  && 打开 Orders 表

SELECT customer	  && 工作区 1

BROWSE

SELECT B	  && 工作区 2

BROWSE


请参阅

ALIAS( )，SELECT( )，USE


SELECT - SQL 命令

请参阅	示例

从一个或多个表中检索数据。

语法

SELECT [ALL | DISTINCT]
[Alias.] Select_Item [AS Column_Name]
[, [Alias.] Select_Item [AS Column_Name] ...]
FROM [DatabaseName!]Table [Local_Alias]
[, [DatabaseName!]Table [Local_Alias] ...]
[[INTO Destination]
| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]
[PREFERENCE PreferenceName]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]]
[GROUP BY GroupColumn [, GroupColumn ...]]
[HAVING FilterCondition]
[UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]

参数

[ALL | DISTINCT]

[Alias.] Select_Item [AS Column_Name]
[, [Alias.] Select_Item [AS Column_Name] ...]

此 SELECT 子句指定要包含在查询结果中的字段、常量和表达式。

默认情况下，查询结果中包含所有行，即使用 ALL。

DISTINCT 排除查询结果中所有重复的行。

附注

每一个 SELECT 子句只能使用一次 DISTINCT。

Alias. 限定匹配项的名称。 Select_Item 指定的每一项在查询结果中都生成一列。如果多个项具有相同的名称，则应在这些项名前加上表的别名和一个句点，以防止出现重复的列。

Select_Item 指定包括在查询结果中的项。一个项可以是：

 •	   FROM 子句所包含的表中的字段名称。

 •	   一个常量，查询结果中每一行都出现这个常量值。

 •	   一个表达式，可以是用户自定义函数名。

SELECT 中的用户自定义函数

在 SELECT 子句中使用用户自定义函数有明显优点，但使用时应考虑以下限制：

 •	   SELECT 子句的运行速度会受用户自定义函数执行速度的影响。因此，如果用户自定义函数的操作量很大，则这些函数的功能最好通过调用 C 语言或汇编语言编写的 API 或用户自定义函数来完成。

 •	   在 SELECT 激活的用户自定义函数中，很难预测 Visual FoxPro 输入/输出（I/O）和表的环境。一般来说，不知道选择的工作区是哪一个，不知道当前表的名称，甚至不知道正在处理的字段名。这些变量的值完全取决于用户自定义函数在优化过程的什么地方激活。

 •	   在 SELECT 子句调用的用户自定义函数中修改 Visual FoxPro I/O 或表的环境是很不安全的。一般来说，这样做的结果难以预料。

 •	   从 SELECT 将值传递给用户自定义函数唯一可靠的方法，是激活用户自定义函数时以参数的形式传递。

 •	   经过实践，有可能发现被认为是违法的操作在某种 FoxPro 版本中运行正确，但这并不保证它在以后的版本中也能正确运行。

抛开这些限制不说，用户自定义函数在 SELECT 语句中还是可接受的。但不要忘记使用 SELECT 可能要降低性能。

下列字段函数可以与选定项一起使用，选定项可以是一个字段或包含字段的表达式：

 •	   AVG(Select_Item)，计算列中数值的平均值。

 •	   COUNT(Select_Item)，计算列中选定项的数目。计算查询输出的行数。

 •	   MIN(Select_Item)，确定列中 Select_Item 的最小值。

 •	   MAX(Select_Item)，确定列中 Select_Item 的最大值。

 •	   SUM(Select_Item)，计算列中数值的和。

字段函数不能嵌套使用。

AS Column_Name

指定查询结果中列的标题。当 Select_Item 是一个表达式或一个字段函数时，如果要给此列取一个有含义的名称，一般可以使用这个子句。Column_Name 可以是一个表达式，但不能包含那些表字段名称中不允许出现的字符（如空格）。

FROM [DatabaseName!]Table [Local_Alias]
[, [DatabaseName!]Table [Local_Alias] ...]

列出所有从中检索数据的表。如果没有打开表， Visual FoxPro 显示“打开”对话框以便指定文件位置。表打开以后，直到查询结束时才关闭。

当包含表的数据库不是当前数据库时，DatabaseName! 指定这个数据库的名称。如果数据库不是当前数据库，就必须指定包含表的数据库名称。应在数据库名称之后表名之前加上感叹号（!）分隔符。

Local_Alias 为 Table 中的表指定一个临时名称。如果指定了本地别名，那么在整个 SELECT 语句中必须都用这个别名代替表名。本地别名不影响 Visual FoxPro 环境。

INTO Destination

指定在何处保存查询结果。如果在同一个查询中同时包括了 INTO 子句和 TO 子句，则 TO 子句不起作用。如果没有包括 INTO 子句，查询结果显示在浏览窗口中。也可以用 TO 将查询结果定向输出到打印机或文件。

Destination 可以是下列子句之一：

 •	   ARRAY ArrayName，将查询结果保存到内存变量数组中。如果查询结果中不包含任何记录，则不创建这个数组。

 •	   CURSOR CursorName，将查询结果保存到临时表中。如果指定了一个已打开表的名称，则 Visual FoxPro 产生错误信息。执行完 SELECT 语句后，临时表仍然保持打开、活动但只读。一旦关闭临时表，则自动删除它。临时表作为 SORTWORK 指定驱动器上的一个临时文件存在。

 •	   DBF TableName | TABLE TableName，将查询结果保存到一个表中。如果指定的表已经打开，并且 SET SAFETY 设置为 OFF ，则 Visual FoxPro 在不给出警告的情况下改写该表。如果没有指定扩展名， Visual FoxPro 指定表的扩展名是 .DBF。SELECT 语句执行结束后，表仍然保持打开并处于活动状态。

TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN

如果命令中包括了 TO 子句，但没有包括 INTO 子句，则查询结果定向输出到名为 FileName 的 ASCII 码文件、打印机或 Visual FoxPro 主窗口。

ADDITIVE 使查询结果追加到 TO FILE FileName 所指定文本文件的内容后面。

TO PRINTER 使查询结果定向输出到打印机。

在 Visual FoxPro 、FoxPro for Windows 和 FoxPro for Macintosh 中， 为了在打印开始前显示对话框，可以包括可选的 PROMPT 子句。在 PROMPT 弹出的对话框中，可以调整打印机设置。能够调整的打印机设置取决于当前安装的打印机驱动程序。PROMPT 子句应直接放在 TO PRINTER 后面。FoxPro for MS-DOS 忽略 PROMPT。

TO SCREEN 使查询结果定向输出到 Visual FoxPro 主窗口或活动的用户自定义窗口中。

创建查询输出时，列的命名遵循如下规则：

 •	   如果选择项是具有唯一名称的字段，则用字段名作为输出列名。

 •	   如果多个选择项具有相同名称。例如，如果名为 Customer 的表有一个 STREET 字段，而名为 Employees 的表也有一个 STREET 字段，则输出列命名为 Extension_A 和 Extension_B （STREET_A 和 STREET_B）。如果选择项名称有 10 字符长，可以将名称截短后再加下划线和字母。例如，DEPARTMENT 变为 DEPARTME_A。

 •	   如果选择项是表达式，它的输出列命名为 EXP_A。其他表达式分别命名为 EXP_B、EXP_C，依此类推。

 •	   如果选择项包含诸如 COUNT( ) 这样的字段函数，则输出列命名为 CNT_A。如果另一个选择项包含 SUM( )，它的输出列命名为 SUM_B。

PREFERENCE PreferenceName

如果查询结果送往浏览窗口，就可以使用 PREFERENCE 保存浏览窗口的属性和选项以备后用。PREFERENCE 把特征属性或参数选项长期保存在 FOXUSER 的资源文件中，任何时侯都可以对它们进行检索。

第一次执行有 PREFERENCE PreferenceName 的 SELECT 命令时创建参数选项。以后执行有相同参数选项名的 SELECT 命令时便将浏览窗口恢复到原来的参数选项状态。当浏览窗口关闭时，更新参数选项。

如果按 CTRL+Q 退出浏览窗口，对浏览窗口所作的更改将不保存到资源文件中。

NOCONSOLE

不显示送到文件、打印机或 Visual FoxPro 主窗口的查询结果。

PLAIN

防止列标题出现在显示的查询结果中。不管有无 TO 子句都可使用 PLAIN 子句。如果 SELECT 语句中包括 INTO 子句，则忽略 PLAIN 子句。

NOWAIT

打开浏览窗口并将查询结果输出到这个窗口后继续程序的执行。程序并不等待关闭浏览窗口，而是立即执行紧接在 SELECT 语句后面的程序行。

SELECT 命令中包括 TO SCREEN 可以把查询结果定向输出到 Visual FoxPro 主窗口或用户自定义窗口。如果显示时 Visual FoxPro 主窗口或用户自定义窗口中写满了一屏，就暂停输出，按任意键可以查看查询结果后面的内容。但是，如果命令中包括了 NOWAIT 子句，显示查询结果时就不会暂停，等待按键，而是在 Visual FoxPro 主窗口或用户自定义窗口中连续滚过所有内容。如果命令中包含有 INTO 子句，忽略 NOWAIT 子句。

WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]

告知 Visual FoxPro 只在查询结果中包含一定的记录。从多表中检索数据时需要用到 WHERE。

JoinCondition 指定一个字段，该字段联接 FROM 子句中的表。如果查询中包括不止一个表，就应该为第一个表后的每一个表指定联接条件。

重要内容

创建联接条件时，请记住如下几点：

 •	   如果在查询中包括两个表，又没有指定联接条件，那么第一个表中每一个记录同第二个表中每一记录之间，只要满足筛选条件，就联接起来。这种查询产生的结果很长。

 •	   在联接条件中使用 DELETED( )，EOF( )，FOUND( )，RECCOUNT( )，和 RECNO( ) 等支持可选别名或工作区的函数时要小心。在这些函数中包括别名或工作区可能导致不可预料的结果。SELECT 不使用工作区，它执行与 USE ... AGAIN 相同的操作。在不带可选别名和工作区的情况下使用这些函数进行单表查询时，可得到正确的结果。但是，使用这些函数进行多表查询时，即使不带可选别名或工作区，也可能得到一些莫明其妙的结果。

 •	   当联接含有空字段（empty field）的表时也要注意。这是因为 Visual FoxPro 匹配空字段。例如，联接 CUSTOMER.ZIP 和 INVOICE.ZIP 两个表。如果CUSTOMER 表中的 100 条记录中没有给出邮政编码，INVOICE 表中也有400 条记录没有给出邮政编码，那么查询结果中将会由于空字段的匹配而出现 40000 条多余的记录。要去除查询结果中的空记录，可以使用 EMPTY( ) 函数。

联接多个查询条件必须使用操作符 AND。每个联接条件都有下面的形式：

FieldName1 Comparison FieldName2

其中 FieldName1 是一个表中的字段名，FieldName2 是另一表中的字段名，Comparison 是下表中列出的某一操作符。

操作符	比较关系
=	相等
==	完全相等
LIKE	SQL LIKE
<>, !=, #	不相等
>	大于
>=	大于等于
<	小于
<=	小于等于
对字符串使用 = 操作符时，所得结果与 SET ANSI 的设置有关。当 SET ANSI 设置为 OFF 时， Visual FoxPro 比较字符串的方式与 XBase 的用户相同。当 SET ANSI 的设置为 ON 时， Visual FoxPro 比较字符串时遵守 ANSI 标准。有关 Visual FoxPro 字符比较方法的详细内容，请参阅 SET ANSI 和 SET EXACT 。

FilterCondition 指定包含在查询结果中的记录必须满足的条件。筛选条件的数目没有限制，只要将它们用 AND 或 OR 操作符连接起来即可。也可以使用操作符 NOT 对逻辑表达式取反，或使用 EMPTY( ) 函数检查字段是否为空等等。FilterCondition 可以是下面示例中的任何一种形式：

示例 1

FieldName1 Comparison FieldName2

customer.cust_id = orders.cust_id

示例 2

FieldName Comparison Expression

payments.amount >= 1000

示例 3

FieldName Comparison ALL (Subquery)

company < ALL ;

(SELECT company FROM customer WHERE country = UK")

当筛选条件包括 ALL 时，只有指定字段满足所有子查询结果后，它所在的记录才能添加到查询结果中。

示例 4

FieldName Comparison ANY | SOME (Subquery)

company < ANY ;

(SELECT company FROM customer WHERE country = UK")

当筛选条件包含 ANY 或 SOME 时，字段必须至少满足一个由子查询产生的值所决定的比较条件。

示例 5

FieldName [NOT] BETWEEN Start_Range AND End_Range

customer.postalcode BETWEEN 90000 AND 99999

上面的示例检查字段中的值是否在指定范围内。

示例 6

[NOT] EXISTS (Subquery)

EXISTS ;

(SELECT * FROM orders WHERE customer.postalcode =

orders.postalcode)

上面的示例检查是否至少有一行满足子查询中的条件。当筛选条件包括 EXISTS 时，只要子查询不为空集，筛选的条件就为“真”(.T.)。

示例 7

FieldName [NOT] IN Value_Set

customer.postalcode NOT IN ("98052,98072,98034")

当筛选条件中包含 IN 时，把字段所在记录添加到查询结果中的条件是字段必须包含值集合的一个元素。

示例 8

FieldName [NOT] IN (Subquery)

customer.cust_id IN ;

(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")

这里，记录包含在查询结果中的条件是：字段必须包含一个子查询的返回值。

示例 9

FieldName [NOT] LIKE cExpression

customer.country NOT LIKE UK

这个筛选条件查找每个与字符串表达式相匹配的字段。在字符串表达式中可以使用百分号 (%) 和下划线 ( _ ) 通配符。下划线表示字符串中一个任意字符。

GROUP BY GroupColumn [, GroupColumn ...]

按列的值对查询结果的行进行分组。GroupColumn 可以是常规的表字段名，也可以是一个包含 SQL 字段函数的字段名，还可以是一个数值表达式，指定查询结果表中的列位置（最左边的列编号为 1 ）。

HAVING FilterCondition

指定包括在查询结果中的组必须满足的筛选条件。HAVING 应该同 GROUP BY 一起使用。它能包含数量不限的筛选条件，筛选条件用 AND 或 OR 连接，还可以使用 NOT 来对逻辑表达式求反。

FilterCondition 不能包括子查询。

使用 HAVING 子句的命令如果没有使用 GROUP BY 子句，则它的作用与 WHERE 子句相同。可以在 HAVING 子句中使用本地别名和字段函数。如果 HAVING 子句不包含字段函数的话，使用 WHERE 子句可以获得较快的速度。

[UNION [ALL] SELECTCommand]

把一个 SELECT 语句的最后查询结果同另一个 SELECT 语句最后查询结果组合起来。默认情况下，UNION 检查组合的结果并排除重复的行。要组合多个 UNION 子句，可使用括号。

ALL 防止 UNION 删除组合结果中重复的行。

UNION 子句遵守下列规则：

 •	   不能使用 UNION 来组合子查询。

 •	   两个 SELECT 命令的查询结果中的列数必须相同。

 •	   两个 SELECT 查询结果中的对应列必须有相同的数据类型和宽度。

 •	   只有最后的 SELECT 中可以包含 ORDER BY 子句，而且必须按编号指出所输出的列。如果包含了一个 ORDER BY 子句，它将影响整个结果。

也可以使用 UNION 子句来模拟外部联接。

当在一个查询中联接两个表时，只有与联接字段相匹配的记录包括在查询结果中。如果父表中的记录在子表中找不到对应记录，则这个记录不包括到查询结果中。外部联接允许把父表中的所有记录以及与父表某个记录相匹配的子表记录一起放到查询结果中。要在 Visual FoxPro 中创建外部联接，需要使用嵌套的 SELECT 命令，如下面的示例：

SELECT customer.company, orders.order_id, orders.emp_id ;

FROM customer, orders ;

WHERE customer.cust_id = orders.cust_id ;

UNION ;

SELECT customer.company, 0, 0 ;

FROM customer ;

WHERE customer.cust_id NOT IN ;

(SELECT orders.cust_id FROM orders)

附注

确保每个分号前包含空格，否则会出错。

UNION 子句之前的命令部分选择出两个表中具有匹配值的记录。不包括没有相关发票的顾客公司。UNION 子句后的命令部分从 customer 表中选择和 orders 表没有匹配记录的记录。

关于命令的第二部分，请注意如下几点：

 •	   首先执行括号里的 SELECT 语句。这条语句从 orders 表中选择了所有顾客的编号。

 •	   WHERE 子句在 customer 表中找出在 orders 表中没有的顾客编号。由于命令的第一部分提供了所有在 orders 表中有顾客编号的公司，因此 customer 表中的所有公司都包含在查询结果中。

 •	   由于包含在 UNION 中的两个表的结构必须一样，因此在第二条 SELECT 语句中有两个占位符，分别表示第一个 SELECT 语句中的 orders.order_id 和 orders.emp_id 。

附注

占位符必须与它所代表的字段有相同的类型。如果字段是日期型，则占位符应该是 { / / }；如果字段是字符字段，则占位符必须是空字符串("")。

ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]

根据列的数据对查询结果进行排序。每个 Order_Item 都必须对应查询结果中的一列。它可以是下列之一：

 •	   FROM 子句中表的字段，同时也是 SELECT 主句（不在子查询中）的一个选择项。

 •	   一个数值表达式，表示查询结果中列的位置（最左边列编号为 1 ）。

ASC 指定查询结果根据排序项以升序排列。它是 ORDER BY 的默认选项。

DESC 指定查询结果以降序排列。

如果不使用 ORDER BY 指定查询结果的排列顺序，则查询结果不排序。

说明

同其他 Visual FoxPro 命令一样，SELECT 是 Visual FoxPro 的一个内部 SQL 命令。当使用 SELECT 进行查询时，Visual FoxPro 先解释查询要求，然后从表中查询并检索指定数据。可以在下列环境内建立 SELECT 查询：

 •	   命令窗口

 •	   一个 Visual FoxPro 程序（与使用其他 Visual FoxPro 命令一样）

 •	   查询设计器

如果执行了 SET TALK ON 命令后再执行 SELECT 命令，则 Visual FoxPro 显示出执行查询所用的时间和查询结果中记录的数目。_TALLY 包含了查询结果中记录的数目。

注意：SELECT 不遵守用 SET FILTER 指定的筛选条件。

附注

上面提到的子查询（subquery）是指 SELECT 内的 SELECT 语句。它必须用括号括起来。在 WHERE 子句中可以有最多两个同级（不是嵌套的）子查询（请参阅参数中相应部分）。子查询可以包括多个联接条件。


*示例 1 显示在 customer 表中所有公司的名称（从一个表中
* 取一个字段）

* 示例 1

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

SELECT customer.company ;

FROM customer

*示例 2 显示两个表中三个字段的内容，并根据 cust_id 字段
* 联接两个表。其中用到了两个表的本地别名。

* 示例 2

SELECT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE a.cust_id = b.cust_id

示例 3 只显示指定字段中具有唯一值的记录。

* 示例 3

SELECT DISTINCT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE  a.cust_id = b.cust_id

*示例 4 以升序显示 country，postalcode，和 company 字段。

* 示例 4

SELECT country, postalcode, company ;

FROM customer ;

ORDER BY country, postalcode, company

*示例 5 把两个表中的字段内容保存到第三个表中。

* 示例 5

SELECT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE a.cust_id = b.cust_id ;

INTO TABLE custship.dbf

BROWSE

* 示例 6 只显示定货日期早于 95 年 2 月 16 日的记录。

* 示例 6

SELECT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE a.cust_id = b.cust_id ;

AND b.order_date < {02/16/95}

*示例 7 显示 customer 表中邮政编码与 orders 表中邮政编码
* 相同的所有公司名称。

* Example 7

SELECT company FROM customer a WHERE ;

EXISTS (SELECT * FROM orders b WHERE a.postalcode = b.postalcode)

*示例 8 显示 customer 表中公司名称以大写 C 开头，长度
* 不定的所有记录。

* Example 8

SELECT * FROM customer a WHERE a.company LIKE "C%"

*示例 9 显示 customer 表中国家名称以大写 U 开头且其后有
* 一个任意字符的所有记录。

* Example 9

SELECT * FROM customer a WHERE a.country LIKE "U_"

*示例 10 以大写方式显示 customer 表中所有城市的名称，并且
* 将输出列命名为 CityList。

* Example 10

SELECT UPPER(city) AS CityList FROM customer


请参阅

CREATE QUERY，CREATE TABLE - SQL，INSERT - SQL，MODIFY QUERY，SET ANSI，SET EXACT，SET PATH，_TALLY


SELECT( ) 函数

请参阅	示例

返回当前工作区编号或未使用工作区的最大编号。

语法

SELECT([ 0 | 1 | cTableAlias ])

参数

0

指定 SELECT ( ) 返回当前工作区的编号。

1

指定 SELECT( ) 返回未使用工作区的最大编号。

cTableAlias

指定表别名， SELECT( ) 返回其所在工作区编号。

返回值类型

数值型

说明

如果 SET COMPATIBLE 设置为 OFF，则 SELECT( ) 返回当前工作区的编号。如果 SET COMPATIBLE 设置为 ON，SELECT( ) 返回未用工作区中编号最大的工作区。

使用 SELECT 可以选择（激活）工作区。


CLOSE DATABASES

SET COMPATIBLE ON

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

SELECT 0  && 未使用的工作区

USE customer  && 打开 Customer 表

SELECT 0  && 未使用的工作区

USE orders  && 打开 Orders 表

CLEAR

? SELECT( )  && 返回 3, 编号最小的可用工作区


请参阅

ALIAS( )，SELECT，SET COMPATIBLE


Selected 属性

请参阅	示例

指定组合框或列表框控制中的一项是否被选中。

应用于

组合框，列表框

语法

[Form.]Control.Selected(nIndex)[= lExpr]

设置

nIndex

指定组合框或列表框中项的索引。

lExpr

Selected 属性的设置有：

设置	说明
“真”(.T.)	选中了该项。
“假”(.F.)	（默认值）没有选中该项。
说明

设计时不可用，运行时可读写。

Selected 属性对于需要多重选择的用户特别有用。从列表中可以快速地确定究竟选择了哪些项，也可以在代码中使用 Selected 属性从列表中选择某项或删除原有的选择。例如，要检查是否选择了列表框中的第三项，可执行下列命令：

IF MyList.Selected(3)

  WAIT WINDOW Its selected!

ELSE

  WAIT WINDOW Its not!

ENDIF


*下面的示例创建了一个列表框。列表框项的数据源是一个数组。
* 数组的名称由 RowSource 属性指定。 RowSourceType 属性的设
* 置是 5 （数组）。它用来指定列表框中各项的数据源是数组。

*列表框的 MultiSelect 属性设置是“真”(.T.) 。因此可以从列表框
* 中做多项选择。然后使用 ListCount、Selected 和 List 属性显示
* 列表框中已选定的项，以便计算出列表框中项的数目和所选择项的数目。

CLEAR

DIMENSION gaMyListArray(10)

FOR gnCount = 1 to 10  && 用字母填充数组

STORE REPLICATE(CHR(gnCount+64),6) TO gaMyListArray(gnCount)

NEXT

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .f.  && 使控制菜单按钮无效

frmMyForm.Move(150,10)  && 移动表单

frmMyForm.AddObject('cmbCommand1','cmdMyCmdBtn')  && 添加 "Quit" 命令按钮

frmMyForm.AddObject('lstListBox1','lstMyListBox')  && 添加列表控制

frmMyForm.lstListBox1.RowSourceType = 5  && 指定一个数组

frmMyForm.lstListBox1.RowSource = 'gaMyListArray' && 包含列表框项的数组

frmMyForm.cmbCommand1.Visible =.T.  && 使 "Quit" 命令按钮可见

frmMyForm.lstListBox1.Visible =.T.  && 使列表框可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮标题

Cancel = .T.  && 默认取消命令按钮(Esc)

Left = 125  && 命令按钮所在的列

Top = 210  && 命令按钮所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 结束事件处理，关闭表

CLEAR  && 清理 Visual FoxPro 主窗口

ENDDEFINE

DEFINE CLASS lstMyListBox AS ListBox  && 创建列表框控制

Left = 10  && 列表框所在的列

Top = 10  && 列表框所在的行

MultiSelect = .T.  && 允许多重选择项

PROCEDURE Click

ACTIVATE SCREEN

CLEAR

? "Selected items:"

? "---------------"

FOR nCnt = 1 TO ThisForm.lstListBox1.ListCount

IF ThisForm.lstListBox1.Selected(nCnt)  && 选中了该项吗 ？

? SPACE(5) + ThisForm.lstListBox1.List(nCnt) && 显示该项

ENDIF

ENDFOR

ENDDEFINE


请参阅

AddItem 方法，Clear 方法，List 属性，ListCount 属性，ListItemID 属性，MultiSelect 属性，NewItemID 属性，RemoveItem 方法，RemoveListItem 方法，SelectedID 属性，TopItemID 属性


SelectedBackColor, SelectedForeColor 属性

请参阅

指定选定文本的前景色和背景色。

应用于

组合框，编辑框，微调，文本框

语法

Control.SelectedBackColor[ = nColor]
 — 或者 —
Control.SelectedBackColor RGB(nRedValue, nGreenValue, nBlueValue)
Control.SelectedForeColor[ = nColor]
 — 或者 —
Control.SelectedForeColor RGB(nRedValue, nGreenValue, nBlueValue)

设置

nColor

指定一个表示颜色的编号。

附注

在属性窗口中，双击任何颜色属性都可以显示“颜色”对话框，在这个对话框中可以选择或定义颜色。在关闭该对话框后，与所选颜色对应的红、绿和蓝的深度成为这些属性的设置。

有关详细内容，请参阅 BackColor, ForeColor 属性 主题中的颜色表。

说明

设计和运行时可用。


请参阅

BackColor, ForeColor 属性，RGB( )，SelectedItemBackColor, SelectedItemForeColor 属性


SelectedID 属性

请参阅

指定组合框或列表框控制中的一个项是否选中。

应用于

组合框，列表框

语法

Control.SelectedID(nItemID)[= lExpr]

设置

nItemID

指定组合框或列表框中一个项的 ID 号。

lExpr

SelectedID 属性的设置有：

设置	说明
“真”(.T.)	选中了该项。
“假”(.T.)	（默认值）没有选中该项。
说明

设计时不可用，运行时可读写。

SelectedID 属性在需要允许用户做多重选择时特别有用。从列表中可以快速地确定选择了列表中的哪一项。也可以在代码中使用 Selected 属性从列表中选择某个项，或删除原有的选择。例如，要检查是否选择了列表框中的第三项，可执行如下命令：

IF MyList.SelectedID(3)

  WAIT WINDOW Its selected!

ELSE

  WAIT WINDOW Its not!

ENDIF


请参阅

AddItem 方法，Clear 方法，List 属性，ListCount 属性，ListItemID 属性，MultiSelect 属性，NewItemID 属性，RemoveItem 方法，RemoveListItem 方法，Selected 属性，TopItemID 属性


SelectedItemBackColor, SelectedItemForeColor 属性
SelectedItemBackColor 属性, SelectedItemForeColor 属性

请参阅

指定组合框或列表框中选定项的前景色或背景色。

应用于

组合框，列表框

语法

Control.SelectedItemBackColor[ = nColor]
 — 或者 —
Control.SelectedItemBackColor RGB(nRedValue, nGreenValue, nBlueValue)
Control.SelectedItemForeColor[ = nColor]
 — 或者 —
Control.SelectedItemForeColor RGB(nRedValue, nGreenValue, nBlueValue)

设置

nColor

指定一个表示颜色的编号。

附注

在属性窗口中，双击任何颜色属性都可以显示“颜色”对话框，在这个对话框中可以选择或定义颜色。在关闭该对话框后，与所选择的颜色对应的红、绿和蓝的深度成为这些属性的设置。

有关这方面的详细内容，请参阅 BackColor, ForeColor 属性 主题中的颜色表。

说明

设计和运行时可用。


请参阅

BackColor, ForeColor 属性，RGB( )，SelectedBackColor, SelectedForeColor 属性


SelectOnEntry 属性

请参阅

指定当用户单击列单元或使用 TAB 键移到列单元时，是否选定这个单元中的内容。

应用于

列

语法

Column.SelectOnEntry[ = lExpr]

设置

SelectOnEntry 属性的设置有：

设置	说明
“真”(.T.)	选定列单元。
“假”(.F.)	（默认值）不选定列单元。
说明

设计和运行时可用。

如果 HighLight 属性的设置为“真”(.T.)，与列的 SelectOnEntry 属性结合起来使用可以确定是否选定整个单元。如果 HighLight 属性的设置为“假”(.F.)，则忽略 SelectOnEntry 属性。


请参阅

Highlight 属性


SelLength 属性

请参阅

返回用户在控制的文本区域中选它的字符数目，或指定要选定的字符数目。

应用于

组合框，编辑框，微调，文本框

语法

[Form.]Control.SelLength[= nLength]

设置

nLength

指定选定字符的数目，并突出显示选定的文本。设置值的有效范围是 0 到控制中字符的总数。把 SelLength 设置为 0 会引起运行错误。

说明

设计时不可用，运行时可读写。

将这个属性同 SelStart 和 SelText 属性结合起来使用可完成以下任务：

 •	   在字符串中设置插入点。

 •	   建立一个插入范围，限制插入点的位置。

 •	   在控制中选择一组指定的字符（子字符串）。

 •	   清除文本。

当使用上述属性时，要注意下列操作：

 •	   把 SelLength 设置为小于 0 的值时会引起运行错误。

 •	   如果将 SelStart 设置为大于文本的长度，则该属性实际设置为已有文本的长度。如果改变 SelStart，则实际上是将原有选择改变为一个插入点，并把 SelLength 设置为 0。

 •	   把 SelText 设置为一个新值时，相当于重置 SelLength 为 0，并用新字符串代替原来选定的文本。


请参阅

SelStart 属性，SelText 属性


SelStart 属性

请参阅

返回控制的文本输入区域中用户选择文本的起始点。当没有选定文本时，指示插入点的位置。另外，它还可以指定控制的文本输入区域中选择的文本起始点。

应用于

组合框，编辑框，微调，文本框

语法

[Form.]Control.SelStart[= nStart]

设置

nStart

指出选定文本的起始点，或在没有选定文本时指定插入点的位置。选定的文本带底纹显示。设置值的有效范围是 0 到控制的编辑区中字符的总数。

说明

设计时不可用，运行时可读写。

把本属性同 SelLength 和 SelText 属性结合起来使用，可完成以下任务：

 •	   在字符串中设置插入点。

 •	   建立一个插入范围，限制插入点的位置。

 •	   在控制中选择一组指定的字符（子字符串）。

 •	   清除文本。

当使用上述属性时，要注意下列操作：

 •	   把 SelLength 设置为小于 0 时会引起运行错误。

 •	   如果将 SelStart 设置为大于文本的长度的值，则实际上是把该属性设置为现有文本的长度。改变 SelStart 则将选择区改变为一个插入点，并把 SelLength 设置为 0。

 •	   将 SelText 设置为新值时，SelLength 会设置为 0 ，并用新字符串代替选择的文本。


请参阅

SelLength 属性，SelText 属性


SelText 属性

请参阅

 •	   返回用户控制的文本区中选定的文本，如果没有选定任何文本，则返回空字符串 ("")。

 •	   指定包含选定文本的字符串。

应用于

组合框，编辑框，微调，文本框

语法

[Form.]Control.SelText[= cString]

设置

cString

指定包含选定文本的字符串。当没有选定文本时，指定空字符串。选定的文本带底纹显示。

说明

设计时该属性不可用，运行时可读写。

把本属性同 SelLength 和 SelText 属性结合起来使用，可完成以下任务：

 •	   在字符串中设置插入点。

 •	   建立一个插入范围，限制插入点的位置。

 •	   在控制中选择一组指定的字符（子字符串）。

 •	   清除文本。

当使用上述属性时，要注意下列操作：

 •	   把 SelLength 设置为小于 0 的值时会引起运行错误。

 •	   如果将 SelStart 设置为大于文本长度的值，则实际上是将该属性设置为现有文本的长度。改变 SelStart 则将选择区改变为一个插入点，并把 SelLength 设置为 0。

 •	   将 SelText 设置为新值时，SelLength 会设置为 0 ，并用新字符串代替选择的文本。


请参阅

SelLength 属性，SelStart 属性


Separator 对象
Separator（分隔符）对象

请参阅	属性	方法

创建一个分隔符对象，用来在工具栏中的控制之间加入空隙。

语法

Separator

说明

如果工具栏中的控制之间不包括 Separator 对象，控制将紧挨着放在工具栏中。Separator 对象是一个特殊的对象，它用来增加控制之间的空间并分隔控制组。

有关创建工具栏和 Separator 的详细内容，请参阅定义工具栏类主题，和《开发指南》第十三章“创建自定义工具栏”。


属性

BaseClass	Class	ClassLibrary
Enabled	HelpContextID	Name
ParentClass


方法

SaveAsClass	ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS，工具栏对象


SET 命令

请参阅

打开查看窗口。

语法

SET

说明

在查看窗口中可以方便地打开表，建立关系，设置或修改 Visual FoxPro 的选项。


请参阅

SET VIEW


SET ALTERNATE 命令

请参阅

将由 ?，??，DISPLAY 和 LIST 命令创建的屏幕或打印输出定向到一个文本文件中。

语法

SET ALTERNATE ON | OFF
 — 或者 —
SET ALTERNATE TO [FileName [ADDITIVE]]

参数

ON

将输出定向到文本文件。

OFF

（默认值）不将输出定向到文本文件。

TO FileName

创建文本文件。如果创建时没有明确指出文件的扩展名，则此文件具有 .TXT 扩展名。

如果不带文件名 FileName 使用 SET ALTERNATE TO 命令，则关闭使用 SET ALTERNATE TO 创建的最后一个文件。

ADDITIVE

在 FileName 指定的文件尾部追加输出内容。如果省略了 ADDITIVE，则覆盖指定文件原有内容。


请参阅

CLOSE，SET PRINTER


SET ANSI 命令

请参阅

确定 Visual FoxPro SQL 命令中如何用操作符 = 对不同长度字符串进行比较。

语法

SET ANSI ON | OFF

参数

ON

在较短的字符串后面加入空格以使它与较长的字符串具有相同的长度。然后，对两个字符串的每个字符进行一个字符与一个字符的比较。比如下面的比较：

'Tommy' = 'Tom'

如果 SET ANSI 设置为 ON，则上述比较结果为“假”(.F.)。这是因为在‘Tom’中加入空格后成了‘Tom  ’，而字符串‘Tom  ’与字符‘Tommy’并不每个对应的字符都相等。

操作符 == 也使用这种方法在 Visual FoxPro SQL 命令中比较字符串。

OFF

指定较短的字符串不要填充空格。两个字符串比较到较短的字符串结束就可以了。比如下面的比较：

'Tommy' = 'Tom'

如果 SET ANSI 设置为 OFF，上述比较结果为“真”(.T.)。这是因为比较完字符串‘Tom’后便不再继续比较了。

说明

SET ANSI 命令决定进行 SQL 字符串比较时是否在两个字符串中较短的一个后面加上空格。SET ANSI 对操作符 == 没有任何影响。当使用操作符 == 时，较短的字符串总是在其后加上空格后再进行比较的。

SET ANSI 的作用域是当前数据工作期。

SET ANSI 命令与查询设计器

当创建查询时，Visual FoxPro 在查询设计器中建立一个 SELECT  -  SQL 命令。当创建连接和筛选条件时，如果选择了 Equal 或 Exactly Like 选项的话，操作符 = 或 == 包括在产生的 SELECT 命令中。SET ANSI 设置会影响在查询设计器中创建和执行的查询结果。

字符串顺序

在 SQL 命令中，两个字符串在比较中左右顺序是没有关系的。把字符串从操作符 = 或 == 的一边移到另一边不影响比较的结果。


请参阅

CREATE QUERY，MODIFY QUERY，SELECT - SQL，SET DATASESSION，SET EXACT


SET APLABOUT 命令

请参阅	示例

对“Apple”菜单中的“About”菜单项进行操作。

语法

SET APLABOUT DISABLE | ENABLE | PROMPT [cMenuItemText]

参数

DISABLE

废止“关于”菜单项。About 菜单项仍保持在 Apple 菜单中，但是变暗并且不能被选择。

ENABLE

启用 SET APLABOUT DISABLE 废止的 About 菜单项。

PROMPT

当没有包括 cMemuItemText 而执行 PROMPT 命令时，恢复 About 菜单项中的默认文本 About Microsoft FoxPro。

cMenuItemText

指定 About 菜单项中显示的文本。

说明

仅用于 FoxPro for Macintosh。

要显示应用程序中创建的对话框，请把 ON APLABOUT 同 SET APLABOUT 一起使用。


*下面的示例应用程序用一个新项替代 About 菜单项中的
* 菜单项。选择这一菜单项时，执行 ON APLABOUT 中的 WAIT
* 命令后显示出一个窗口。

SET APLABOUT PROMPT 'About My Application...'

ON APLABOUT WAIT WINDOW 'This is My Application'


请参阅

ON APLABOUT，ON MACHELP，SET MACHELP


SET AUTOSAVE 命令

请参阅

当退出 READ 命令或返回到命令窗口时，决定 Visual FoxPro 是否把数据缓冲区中的数据保存到磁盘上去。

语法

SET AUTOSAVE ON | OFF

参数

ON

无论什么时侯退出 READ 命令或者返回到命令窗口，指定缓冲区都要保存到磁盘上去。

OFF

只有当退出 READ 命令或返回到命令窗口，并且自上次保存之后五分钟，将缓冲区保存到磁盘上去。

OFF 是 SET AUTOSAVE 的默认设置。

说明

将缓冲区的内容保存到磁盘上可以减少由于计算机突然断电丢失数据的可能性。

SET  AUTOSAVE 的作用域是当前数据工作期。


请参阅

FFLUSH( )，FLUSH，SET DATASESSION


SET BELL 命令

示例

关掉或打开计算机铃声，并设置铃声属性。

语法

SET BELL ON | OFF
 — 或者 —
SET BELL TO [nFrequency, nDuration | cWAVFileName, nDuration]

参数

ON

（默认设置）打开铃声。

OFF

关掉铃声。

TO [nFrequency, nDuration]

仅用于 FoxPro for MS-DOS。调节铃声的音调和响铃时间。

nFrequency 指定铃声的音调，可以是 19 到 10,000 Hz 的任意数。默认的频率为 512 Hz。

nDuration 指定响铃的时间。nDuration 可以为 1 到 19 秒的任意数。默认的响铃时间是 2 秒。

TO cWAVFileName, nDuration

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，可以指定铃声的波形或系统警告声音。

在 Visual FoxPro 和 FoxPro for Windows 中，cWAVFileName 指定铃声的波形。cWAVFileName 可以是一个声音波形文件名或由 WIN.INI 文件中的声音部分的输入项。如果找不到这些声音，则 Visual FoxPro 和 FoxPro for Windows 播放由 WIN.INI 文件中声音部分的 SystemDefault 项指定的默认声音。如果找不到这个默认声音或者没有系统默认输入项，则 Visual FoxPro 和 FoxPro for Windows 不播放声音。

在 FoxPro for Macintosh 中，cWAVFileName 指定响铃播放时的系统警告声音。指定的系统警告声音必须安装在 Macintosh 中。

如果指定了声音波形或系统警告声音，还必须指定 nDuration，如果省略持续时间值，会产生语法错误。忽略指定的持续时间，并播放整个声音波形或系统警告声音。

说明

在编辑期间，当到达一个字段未尾或输入无效数据时，SET BELL 可开始或停止响铃。


*在下面的 Visual FoxPro 和 FoxPro for Windows 的示例中，
* 播放了声波文件 DING.WAV。

SET BELL TO 'C:\WINDOWS\DING.WAV', 0

?? CHR(7)


SET BLINK 命令

请参阅

决定是闪烁还是高密度显示。包含此命令是为了提供向后兼容性。

语法

SET BLINK ON | OFF

参数

ON

（默认设置）使屏幕元素（诸如边框、阴影和文本）闪烁。包括此参数是为了提供向后兼容性。

OFF

加亮背景颜色，使可用颜色数目加倍。

说明

仅用于 FoxPro for MS-DOS。在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，SET BLINK 不起作用。

SET BLINK 只影响使用 EGA 或 VGA 显示器的用户。如果在配置文件中指定 SET BLINK 的值，启动 Visual FoxPro 时装入的颜色集里 SET BLINK 的值会覆盖它。


请参阅

颜色概述


SET BLOCKSIZE 命令

请参阅

指定 Visual FoxPro 如何为保存备注字段分配磁盘空间。

语法

SET BLOCKSIZE TO nBytes

参数

nBytes

指定给备注字段分配磁盘空间的块的大小。如果 nBytes 等于 0，磁盘空间按单个字节（一块 1 字节）分配。如果 nBytes 为 1 到 32 之间的一个整数，分配磁盘空间的块大小为 nBytes 字节乘以 512。如果 nBytes 大于32，分配的磁盘空间块大小为 nBytes 字节。如果指定的块值大于 32，可以显著地节省磁盘空间。

说明

SET BLOCKSIZE 的默认值是 64。要在创建文件后重置块的值，可将 SET BLOCKSIZE 设置为一个新值，然后使用 COPY 命令创建一个新表。新创建的表具有指定的块大小。

SET BLOCKSIZE 的作用域是当前数据工作期。


请参阅

COPY FILE，MODIFY STRUCTURE，PACK，SET DATASESSION


SET BORDER 命令

请参阅

对于使用 @ ... TO 创建的框、使用 DEFINE POPUP 创建的菜单和使用 DEFINE WINDOW 创建的窗口，此命令为它们定义边框。包含此命令是为了提供向后兼容性。

语法

SET BORDER TO [SINGLE | DOUBLE | PANEL | NONE
| nBorderString1 [, nBorderString2]]

参数

SINGLE

（默认设置）指定单线边框。

DOUBLE

指定双线边框。

PANEL

指定宽边框。

NONE

不显示边框。

nBorderString1 [, nBorderString2]

使用这个参数可以创建您自已的边框。nBorderString1 用于菜单、框和当前输出窗口。nBorderString2 指定不在一个窗口输出时这个窗口的边框形式。它允许给不活动的窗口创建不同的外观（区别于活动窗口）。nBorderString2 不影响菜单和框。

边框定义字符串是一组定义 [<1>] [, [<2>] [, [<3>] [, [<4>] [, [<5>] [, [<6>] [, [<7>] [, [<8>]]]]]]]] 的 ASCII 码字符值。边框字符串中的 1 至 8 个字符分别确定边框的顶边、底边、左边、右边、左上角、右上角、左下角和右下角。如果边框字符串定义中只包含一个 ASCII 码值，那么整个边框都使用这个字符。

如果在窗口或者菜单定义之后改变边框定义字符串，原边框定义字符串还保留。若要使用新边框定义字符串，则必须重新创建菜单和窗口。

说明

SET BORDER 不影响使用 @ ... BOX 命令创建的框。

附注

SET BORDER 命令提供了与 FoxBASE+ 菜单的兼容性。启动 Visual FoxPro 时，FoxBASE+ 菜单的默认边框是双线边框。框、窗口以及使用 DEFINE POPUP 创建的菜单的默认边框是单线边框。当发出 SET BORDER TO SINGLE 或 SET DORDER TO DOUBLE 命令后，框、窗口、使用 DEFINE POPUP 命令创建的菜单和 FoxBASE+ 类型菜单的边框分别使用单线或双线。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，DOUBLE 选项给菜单和窗口创建 PANEL 边框，并且忽略 nBorderString1 选项。

如果执行不带任何参数的 SET BORDER TO 命令，将恢复边框的默认设置。


请参阅

@ ... TO，DEFINE POPUP，DEFINE WINDOW


SET BRSTATUS 命令

请参阅

控制浏览窗口中状态栏的显示。包括此命令是为了提供向后兼容性。

语法

SET BRSTATUS ON | OFF

参数

ON

当打开浏览窗口时在屏幕底下显示状态栏。如果打开了多个浏览窗口，状态栏只显示活动浏览窗口的信息。

OFF

（默认设置）指定打开浏览窗口时不显示状态栏。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，如果关掉了状态栏，打开浏览窗口时 FoxPro 显示字符状态栏。

说明

状态栏显示活动的表、记录指针的位置、表中记录的数目和 INSERT，Num Lock 和 Caps Lock 键的状态。如果活动表在数据库中，则同时显示数据库的名称。

如果打开浏览窗口之前已经显示了状态栏，则打开浏览窗口时继续显示。


请参阅

SET STATUS


SET CARRY 命令

请参阅

决定使用 INSERT、APPEND 和 BROWSE 命令创建新记录时，是否将当前记录数据复制到新记录中。

语法

SET CARRY ON | OFF
 — 或者 —
SET CARRY TO [FieldList [ADDITIVE]]

参数

ON

在所有的工作区中创建新记录时，将当前记录的所有字段的内容复制到新记录中。

OFF

（默认设置）防止将任何字段的数据复制到新记录中。

TO [FieldList [ADDITIVE]]

复制由 FieldList 指定的字段的数据。字段名之间用逗号隔开。

ADDITIVE 指定将字段列表中的字段添加到新记录的字段中。

执行 SET CARRY TO 命令隐含执行了 SET CARRY ON 命令。

不带参数 FieldList  执行 SET CARRY TO 可恢复默认设置（复制所有的字段）。

说明

使用 SET CARRY 可以把当前记录中的数据复制到新记录中，也可以不把当前记录中数据复制到新记录中。在编辑期间，那些通常保持不变的字段可以将其复制到每个新记录中，例如，包含当前日期的字段可以复制到每个新记录，这样就不必为每个新记录再输入日期。请注意通用类型字段的数据不能复制到新记录中。

SET CARRY 只影响当前选择的工作区中打开的表。

SET CARRY 的作用域是当前数据工作期。


请参阅

INSERT，SET DATASESSION


SET CENTURY 命令

请参阅

决定是否显示日期表达式中的世纪部分。

语法

SET CENTURY ON | OFF

参数

ON

指定在包含 10 个字符（包括日期分隔符）的日期格式中，用四位数字表示年。

OFF

（默认值）指定在包括八个字符的日期格式中，用两位数字表示年。在进行日期计算时假定它表示的是二十世纪。

说明

使用 SET CENTURY 可以指定日期变量和函数的显示格式。

SET CENTURY 的作用域是当前数据工作期。


请参阅

DATE( )，SET DATASESSION，SET SYSFORMATS，YEAR( )


SET CLASSLIB 命令

请参阅	示例

打开包含类定义的 .VCX 可视类库。

语法

SET CLASSLIB TO ClassLibraryName [ADDITIVE]
[ALIAS AliasName]

参数

TO ClassLibraryName

指定要打开的 .VCX 可视类库的名称。如果 ClassLibraryName 没有包含完整的路径名，Visual FoxPro 首先在默认的 Visual FoxPro 目录中查找可视类库，然后在 Visual FoxPro 路径下各目录中查找。默认的 Visual FoxPro 目录由 SET DEFAULT 指定，Visual FoxPro 查找路径由 SET PATH 指定。

如果不带 ClassLibraryName 执行 SET CLASSLIB TO命令，则 Visual FoxPro 将关闭所有的可视类库。用 RELEASE CLASSLIB 命令也可以关闭一个可视类库。

ADDITIVE

打开 .VCX 可视类库时，不关闭任何当前打开的 .VCX 可视类库。如果省略这一子句，将关闭所有 .VCX 可视类库。

ALIAS AliasName

指定可视类库的别名，可以通过它的别名来引用可视类库。例如，下列命令打开一个名为 MyClass，别名为 MyCntrls 的可视类库，然后创建一个名为 MyButton 的控制。

SET CLASSLIB TO MyClass ALIAS MyCntrls

mMyButton = CREATEOBJ('MyCntrls.MyButton')

说明

当执行 CREATEOBJECT( )，DEFINE CLASS 中的 ADD OBJECT 或 AddObject 方法时，Visual FoxPro 在下列位置按下列顺序查找类定义，这个类定义定义了这些命令中指定的对象。

1.	Visual FoxPro 基类。

2.	按装入顺序查找内存中的类定义。

3.	当前程序中的类定义。

4.	由 SET CLASSLIB 打开的 .VCX 类库中的类定义。

5.	由 SET PROCEDURE 打开的过程文件中的类定义。

6.	在 Visual FoxPro 程序执行链中的类定义。

7.	注册屏幕。

如果找不到包含对象的类定义，则 Visual FoxPro 产生错误信息。


*下面的示例使用 CREATE CLASSLIB 命令创建了一个名为
*  myclslib 的可视类库。它先根据 Visual FoxPro 的 Form 基类创
* 建一个名为 myform 的类，并把它保存在 myclslib 可视
* 类库中。为了能使用它里面的类，应该使用 SET CLASSLIB 命
* 令打开 myclslib 可视类库。

CREATE CLASSLIB myclslib  	&& 创建一个新的 .VCX 可视类库

CREATE CLASS myform OF myclslib AS "Form"  && 创建一个新类

SET CLASSLIB TO myclslib ADDITIVE 	 && 打开 MyClsLib.VCX


请参阅

ADD CLASS，AddObject 方法，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，MODIFY CLASS，RELEASE CLASSLIB，SET PROCEDURE，SET OLEOBJECT


SET CLEAR 命令

请参阅

决定发出 SET FORMAT 命令后是否清理 Visual FoxPro 主窗口。包含此命令是为了提供向后兼容性。

语法

SET CLEAR ON | OFF

参数

ON

（默认值）指定当使用 SET FORMAT 命令打开一个格式文件时，清理 Visual FoxPro 主窗口。

OFF

指定当使用 SET FORMAT 命令打开一个格式文件时不清理 Visual FoxPro 主窗口。

在 FoxPro for MS-DOS 中，如果 SET CLEAR 设置为 OFF，退出 FoxPro for MS-DOS 时，不清理 FoxPro for MS-DOS 主窗口。这样就可以在退出 FoxPro for MS-DOS 后显示一个退出屏幕。


请参阅

CLEAR


SET CLOCK 命令

请参阅

决定 Visual FoxPro 是否显示系统时钟，也可以指定系统时钟在 Visual FoxPro 主窗中的位置。

语法

SET CLOCK ON | OFF | STATUS
 — 或者 —
SET CLOCK TO [nRow, nColumn]

参数

ON

在 Visual FoxPro 主窗口的右上角显示时钟。

OFF

（默认值）从 Visual FoxPro 主窗口中或状态栏中移去时钟。

STATUS

仅用于 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh。

在图形状态栏中显示时钟。执行 SET STATUS BAR ON 命令可显示图形状态栏。

在 FoxPro for MS-DOS 中不起作用。

TO [nRow, nColumn]

使用行和列的坐标，指定时钟在 Visual FoxPro 主窗口中的显示位置。不带坐标参数使用 SET CLOCK TO 时，时钟显示在 Visual FoxPro 主窗中右上角的默认位置上。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，如果使用 SET CLOCK STATUS 命令将时钟设置在图形状态栏上，又使用 TO nRow, nColumn 在 Visual FoxPro 主窗口中给时钟指定一个位置，Visual FoxPro 将时钟放在指定的位置上，而不放在图形状态栏中。


请参阅

SET BRSTATUS，SET HOURS，SET STATUS


SET COLLATE 命令

请参阅

指定在后续索引和排序操作中，字符型字段的排序顺序。

语法

SET COLLATE TO cSequenceName

参数

cSequenceName

指定排序顺序。有效的排序顺序有：

选项	语言
DUTCH	荷兰语
GENERAL	英语、法语、德语、当代西班牙语、葡萄牙语和其他西欧语言
GERMAN	德国电话序列（DIN）
ICELAND	冰岛语
MACHINE	机器语言（早期 FoxPro 版本中排序顺序的默认设置）
NORDAN	挪威语、丹麦语
SPANISH	古典西班牙语
SWEFIN	瑞典语、芬兰语
UNIQWT	唯一重量
附注

当指定 SPANISH 选项时，“ch”是排在“c”和“d”之间的单个字母；“ll”排在“l”和“m”之间。

如果指定的排序序列是原义字符串，应该用引号把选项括起来：

SET COLLATE TO "SWEFIN"

MACHINE 是默认的排序顺序选项，也是 Xbase 用户很熟悉的排序方法。字符是按它们在当前代码页中出现的顺序排序的。

美国和西欧用户可能更喜欢使用 GENERAL。在这个选项中，字符的排序顺序与它们在当前代码页中出现的顺序相同。在 FoxPro 的 2.5 以前的版本中，可以在创建索引时使用 UPPER( ) 或LOWER( ) 来操作字符字段。在 FoxPro 的 2.5 以后的版本中，可以指定 GENERAL 排序顺序选项而省略 UPPER( ) 转换。

请注意：如果指定的排序顺序选项不是 MACHINE，并创建了 .IDX 文件，则创建的 .IDX 文件是压缩的 .IDX 文件。

使用 SET(COLLATE) 可以返回当前的排序顺序。

如果在 Visual FoxPro 的配置文件中加入如下一行，那么启动 Visual FoxPro 时将自动指定一种排序顺序。

COLLATE = cSequenceName

也可以执行如下命令，结果相同。

SET COLLATE TO cSequenceName

说明

SET COLLATE 可以对任何 FoxPro 支持语言中包含重音字符的表进行排序。改变 SET COLLATE 设置不会影响以前打开的索引排序顺序。Visual FoxPro 自动维护已经存在的索引，保持提供创建多种不同类型索引的灵活性，甚至对于同一字段也是如此。

例如，如果在 SET COLLATE 设置为 GENERAL 时创建了一个索引，然后把 SET COLLATE 的设置改变为 SAPANISH，这时，原来创建的索引仍然保持 GENERAL 排序顺序。

SET COLLATE 的作用域是当前数据工作期。

有关代码页和 Visual FoxPro 的国际支持的其他内容，请参阅 Visual FoxPro 支持的代码页，和《开发指南》第二十章“开发国际应用程序”。

有关配置 Visual FoxPro 的详细内容，请参阅《安装指南》的第三章“配置 Visual FoxPro”。


请参阅

IDXCOLLATE( )，SET DATASESSION，排序次序准则，指定排序次序，深入了解排序次序


SET COLOR OF 命令

请参阅

指定用户自定义的菜单和窗口的颜色。包含此命令是为了提供向后兼容性。可用 SET COLOR OF SCHEME 代替。

语法

SET COLOR OF NORMAL | MESSAGES | TITLES | BOX | HIGHLIGHT
| INFORMATION | FIELDS TO [ColorPair]

说明

SET COLOR OF 影响配色方案 1 和配色方案 2 的颜色设置。使用这个命令，可以设置用户自定义菜单和窗口中选定文本的颜色属性。


请参阅

颜色概述，SET COLOR OF SCHEME


SET COLOR OF SCHEME 命令

请参阅

指定配色方案的颜色或把一个配色方案复制到另一个配色方案。

语法

SET COLOR OF SCHEME nScheme1 TO
[SCHEME nScheme2 | ColorPairList]

参数

nScheme1

指定要更改的配色方案的编号。这个值可以是一个 1 到 24 之间的数。

附注

在 Visual FoxPro 中，配色方案 13 到 15 留作内部使用。在 FoxPro for Windows 中，配色方案 13 和配色方案 14 留作内部使用。在 FoxPro for Macintosh 中，配色方案 13 到 16 留作内部使用。请不要使用这些配色方案。

TO [SCHEME nScheme2]

指定改变 nScheme1 后的配色方案的编号。

TO [ColorPairList]

指定配色方案中想改变的颜色对数目，最多为 10 对。如果在某一个颜色对相应的位置上放置一个逗号，则可以指定不更改这个颜色对，这样便可以有选择地改变配色方案中的颜色对。例如，要把配色方案 1 中第三个颜色对改变为亮白色和蓝色，其他的颜色设置不变，可以使用如下命令：

SET COLOR OF SCHEME 1 TO , , W+/B*

颜色对也可以用六个用逗号隔开的 RGB （红、绿和蓝）颜色值来表示。例如，要把配色方案 1 中第三个颜色对改变为亮白色和蓝色，其他的颜色设置不变，可以使用如下命令：

SET COLOR OF SCHEME 1 TO , , RGB(255,255,255,0,0,255)

说明

在 FoxPro for MS-DOS 中，如果执行不包括可选子句的 SET COLOR OF SCHEME nScheme1 TO 命令，则 FoxPro for MS-DOS 从最后一个命名的颜色集合中获得配色方案 nScheme1。搜索的顺序是：最后一个装入或保存的颜色集合、SET COLOR SET 定义的最后一个颜色集合、从 CONFIG.FP 中装入的最后一个颜色集合、FoxPro for MS-DOS 默认的颜色集合开始。如果根本没有命名颜色集合，则恢复硬件的默认值。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，不是所有的界面元素都能由配色方案控制。例如，查看窗口和命令窗口等系统窗口、系统菜单栏等等，它们的颜色由控制面板的颜色设置控制。执行不包括可选子句的 SET COLOR OF SCHEME nScheme1 TO 命令，可从当前配色方案中恢复颜色。

有关颜色设置和配色方案的详细内容，请参阅颜色概述主题。


请参阅

颜色概述，CREATE COLOR SET，SET COLOR SET


SET COLOR SET 命令

请参阅

装入先前已定义的颜色集合。

语法

SET COLOR SET TO [ColorSetName]

参数

ColorSetName

指定要装入的颜色集合。

说明

在 FoxPro for Macintosh 中，不支持颜色集合，因此 SET COLOR SET 命令无效。

可以使用 SET COLOR OF SCHEME 命令创建颜色集合，并用 CREATE COLOR SET 命令将颜色集合保存起来。

在 FoxPro for MS-DOS 中，也可以从“窗口”菜单中选择“颜色”命令来激活“颜色选择器”对话框，并用这个对话框创建颜色集合。创建颜色集合后，请在“颜色选择器”对话框中或使用 CREATE COLOR SET 命令将颜色集合保存起来。

在 FoxPro for MS-DOS 中，如果执行了不带可选子句的 SET COLOR SET 命令，则 FoxPro for MS-DOS 装入按下列顺序找到的命名的颜色集合：最后一个装入或保存的颜色集合、最后一个使用 SET COLOR SET 定义的颜色集合、启动时最后一个从配置文件中装入的颜色集合、FoxPro for MS-DOS 默认的颜色集合。如果根本没有最后的命名颜色集合，便恢复硬件的默认值。

在 Visual FoxPro 和 FoxPro for Windows 中，如果发出不带可选子句的 SET COLOR SET 命令，则仍然使用当前颜色集合。

有关颜色集合的详细内容，请参阅颜色概述主题。


请参阅

颜色概述，CREATE COLOR SET，SET COLOR OF SCHEME


SET COLOR TO 命令

请参阅

指定用户自定义的菜单和窗口的颜色。包含此命令是为了提供向后兼容性。可用SET COLOR OF SCHEME 命令代替。

语法

SET COLOR TO [[ColorPair1] [, [ColorPair2] [, [ColorPair3]]]]

说明

SET COLOR TO 命令影响配色方案 1 和配色方案 2 的多个颜色对。使用 SET COLOR OF SCHEME 可对颜色环境进行最大程度的控制。


请参阅

颜色概述，CREATE COLOR SET，SET COLOR OF SCHEME，SET COLOR SET


SET COMPATIBLE 命令

请参阅

控制与 FoxBASE+ 和其他 Xbase 语言的兼容性。

语法

SET COMPATIBLE FOXPLUS | OFF | DB4 | ON
[PROMPT | NOPROMPT]

参数

FOXPLUS | OFF

（默认值）这两个关键字可以相互交换使用，但每一个都允许 FoxBASE+ 创建的程序不需作任何变化便可以在 Visual FoxPro 环境下运行。

DB4 | ON

包括这两个关键字中的任何一个都会影响一些命令和函数的操作。

PROMPT | NOPROMPT

在打开包含备注字段的 dBASE 表时，这两个选项决定 Visual FoxPro 是否显示一个对话框。

包含 PROMPT 选项可显示“转换备注字段”对话框。如果打开一个包含备注字段的 dBASE 表，默认情况下，Visual FoxPro 显示一个“转换备注字段”对话框。这一对话框可以用来将 dBASE 备注文件转换为 Visual FoxPro 格式。要在 Visual FoxPro 中打开此备注文件，必须先将它转换为 Visual FoxPro 格式。在此之后，可以在 COPY 命令中包含 TYPE FOXPLUS 选项，将备注文件转换为 dBASE 格式。

如果包含 NOPROMPT 选项，打开一个包含备注字段的 dBASE 表时，将不显示“转换备注字段”对话框。在这种情况下，dBASE 备注文件自动转换成 Visual FoxPro 格式。

说明

受 SET COMPATIBLE 影响的命令和函数有 LIKE( )，PLAY MACRO，SELECT( ) 以及 STORE（当 STORE 同数组一起使用时）。

SET COMPATIBLE 不会创建 Visual FoxPro 中不支持的其他 Xbase 命令、函数或特性。例如，它不允许打开其他 Xbase 产品中使用“报表设计器”创建的报表表单。

下表列出了受 SET COMPTIBLE 影响的命令。

命令
带 RANGE 子句的 @ ... GET	带 @ ... GET VALID 子句的READ
带 CHR(7) 的@ ... SAY	嵌套的 READ
@ ... SAY 滚动命令	READ
@ ... SAY当 STATUS 设置为 ON 时。	RUN | !
ACTIVATE SCREEN	SET COLOR TO
ACTIVATE WINDOW	SET BORDER
APPEND MEMO	SET FIELDS
DECLARE	SET MESSAGE
DIMENSION	SET MEMOWIDTH
带 SET TALK ON 的 GO | GOTO	SET PRINTER TO <文件>
FSIZE( )	STORE
INKEY( )	SUM
LASTKEY( )	带数值 PICTURE 子句的TRANSFORM( )
LIKE( )	SELECT( )
菜单命令	SYS(2001, "COLOR")
PLAY MACRO


请参阅

SET KEYCOMP


SET CONFIRM 命令

请参阅

指定是否可以用在文本框中键入最后一个字符的方法退出文本框。

语法

SET CONFIRM ON | OFF

参数

ON

指定在文本框中不能用键入最后一个字符的方法退出文本框。要退出文本框，可以按 Enter，Tab 键或其他任何箭头键，从一个文本框移到另一个控制。

SET CONFIRM ON 也影响使用 DEFINE BAR 和 DEFINE PAD 创建的菜单项和菜单标题。当键入菜单项或菜单标题的第一个字母时，选择了该菜单项和标题，但是并不执行它。要执行已选择了的菜单项或标题，应键入 Enter 键或 spacebar 键。

OFF

指定可以用在文本框中的最后一个字符后再键入一个字符的方法退出文本框。插入点在到达文本框中的最后一个字符时，移到下一个控制上，并且响铃（如果 SET BELL 设置为 ON）。

OFF 是 SET CONFIRM 的默认值。

SET CONFIRM OFF 也影响菜单项和菜单标题。如果 SET CONFIRM 设置为 OFF，可以通过键入与菜单项或菜单标题的第一个字母对应的键来从菜单栏中的菜单或菜单标题中执行一项（当 SET CONFIRM 设置为 ON 时，这种操作只能选择菜单项或标题）。

说明

SET CONFIRM 对菜单项和菜单标题的访问键没有任何影响。如果菜单项和菜单标题创建时带有访问键，就可以通过按对应的访问键来执行菜单项或菜单标题。

可以使用表单设计器创建文本框控制。

SET CONFIRM 在当前数据工作期有效。


请参阅

文本框控制，SET DATASESSION


SET CONSOLE 命令

请参阅

激活或废止从程序中向 Visual FoxPro 主窗口或活动的用户自定义窗口的输出。

语法

SET CONSOLE ON | OFF

参数

ON

（默认值）将所有的结果输出到 Visual FoxPro 主窗口或活动的用户自定义窗口中。

OFF

不将结果输出到 Visual FoxPro 主窗口或活动的用户自定义窗口中。

说明

当交互式使用 Visual FoxPro 时，SET CONSOLE 设置为 ON ，而且不能从命令窗口将设置值更改为 OFF。这时，只能在程序中把设置改为 OFF。

SET CONSOLE 影响一些 Visual FoxPro 交互式对话框。例如，如果 SET CONSOLE 设置为 OFF，却没有表打开时，若发出 BROWSE 命令，则 Visual FoxPro 显示一条错误信息。如果在同样条件下 SET CONSOLE 设置为 ON，Visual FoxPro 会弹出一个“打开”对话框。

SET CONSOLE 不影响 @ ... SAY 的输出。@ ... SAY 的输出由 SET DEVICE 的设置控制。

重要内容

出现错误时，SET CONSOLE 总是被设置为 ON。请在错设发生前使用 SYS(100) 检查 SET CONSOLE 的设置。有关这方面的详细内容，请参阅 SYS(100) - 控制台设置。


请参阅

SYS( )


SET CPCOMPILE 命令

请参阅

指定编译程序的代码页。

语法

SET CPCOMPILE TO [nCodePage]

参数

nCodePage

请使用 nCodePage 指定编译代码页。有关代码页和 Visual FoxPro 国际支持的其他内容，请参阅 Visual FoxPro 支持的代码页，和《开发指南》第二十章“开发国际应用程序”。

要重置编译代码页为当前代码页，请使用不带 nCodePage 的 SET CPCOMPILE TO 命令。使用 CPCURRENT( ) 可以确定当前代码页。

说明

要使用指定代码页编译程序，请使用 SET CPCOMPILE 命令。用 SET CPCOMPLIE 指定的代码页用于 Visual FoxPro 自动编译的程序、从“编译”对话框中编译的程序和使用 COMPILE 命令编译的程序。不过，可以在 COMPILE 命令中使用 AS 子句来忽略由 SET CPCOMPILE 指定的代码页。


请参阅

COMPILE，CPCURRENT( )


SET CPDIALOG 命令

请参阅

指定打开表时是否显示“代码页”对话框。

语法

SET CPDIALOG ON | OFF

参数

ON

当打开一个表时，若下列条件为真，则显示“代码页”对话框：

 •	   表以独占方式打开。

 •	   表没有标明代码页。

OFF

（默认值）打开表时不显示“代码页”对话框。

说明

“代码页”对话框允许为 FoxPro 的早期版本创建的表指定代码页，也可以为创建 Visual FoxPro 表的其他产品指定代码页。如果选定了代码页，则用选定的代码页标记表。

当建立应用程序时，使用 SET CPDIALOG ON 可以确保包含在应用程序中的表使用正确的代码页标记。在最后的应用程序中，要确保 SET CPDIALOG 设置为 OFF。

也可以在“选项”对话框的“数据”选项卡中，应用“提示代码页”复选框交互地指定是否显示“代码页”对话框。要显示“选项”对话框，可从“工具”菜单中选择执行“选项”命令。

有关代码页和 Visual FoxPro 的国际支持的其他内容，请参阅 Visual FoxPro 支持的代码页和《开发指南》第二十章“开发国际应用程序”。


请参阅

CPCURRENT( )，CPCONVERT( )，CPDBF( )，GETCP( )，USE


SET CURRENCY 命令

请参阅	示例

定义货币符号，并且指定货币符号在数值、货币、浮点数和双精度数表达式中的显示位置。

语法

SET CURRENCY TO [cCurrencySymbol]
  或者
SET CURRENCY LEFT | RIGHT

参数

cCurrencySymbol

指定作为货币符号的字符串，最长可以是 9 个字符。使用不带 cCurrencySymbol 的 SET CURRENCY TO 命令可以将货币符号重置为默认的美元符（$）。

LEFT

（默认值）将货币符号放在货币值的左边。

RIGHT

将货币符号放在货币值的右边。

说明

在 FUNCTION 或 PICTURE 子句中包括 $ 代码时，在 @ ... SAY 生成的输出中以及在 @ ... GET 生成的文本框中都要显示货币符号。

SET CURRENCY 在当前数据工作期有效。


*下面的示例中在货币值的两边显示了货币符 DM。如果使用
*  PICTURE 来显示货币，要确保在美元符前面加上 @。

STORE SET('CURRENCY') TO gcCurrPosit

STORE 1234.56 TO gnDollarAmnt

CLEAR

SET CURRENCY TO 'DM'

@ 2,2 SAY gnDollarAmnt PICTURE '@$99,999.99'

IF gcCurrPosit = 'LEFT'

SET CURRENCY RIGHT

ELSE

SET CURRENCY LEFT

ENDIF

@ 4,2 SAY gnDollarAmnt FUNCTION '$99,999.99'


请参阅

SET DATASESSION，SET DECIMALS，SET SEPARATOR，SET SYSFORMATS


SET CURSOR 命令

请参阅

确定在 Visual FoxPro 等待输入时，是否显示插入点。

语法

SET CURSOR ON | OFF

参数

ON

（默认值）在执行 @ ... GET，@ ... EDIT，WAIT 或 INKEY( ) 期间显示插入点。

OFF

在执行 @ ... GET，@ ... EDIT，WAIT 或 INKEY( ) 期间不显示插入点。

说明

SET CURSOR 同 SYS(2002) 相似，能够控制是否显示插入点。


请参阅

INKEY( )，SET( )，SYS(2002) - 打开或关闭插入点，WAIT


SET DATABASE 命令

请参阅	示例

指定当前数据库。

语法

SET DATABASE TO [DatabaseName]

参数

DatabaseName

指定一个打开的数据库的名称，使它成为当前数据库。如果省略 DatabaseName，则打开的数据库都不会成为当前数据库。

说明

同时可以打开多个数据库，但是只有一个可能成为当前数据库。用以操作打开的数据库的命令和函数，例如 ADD 和 DBC( )，只对当前数据库操作。

可以从“常用”工具栏上的数据库下拉列表中，选择一个打开的数据库作为当前数据库。

请注意当执行查询或表单时，Visual FoxPro 可以自动打开数据库。

SET DATABASE 在当前数据工作期有效。


*下面的示例创建了两个名为 mydbc1 和 mydbc2 的数据库和一个名为
* table1 的表。用 SET DATABASE 将 mydbc1 变成
* 当前数据库，并且在创建表时把表加到数据库 mydbc1 中。然后，
* 关掉表并把它从数据库 mydbc1 中移去。用 SET DATABASE 将
*  mydbc2 变成当前数据库，然后用 ADD TABLE 将表添加到 mydbc2
* 中。最后用 RENAME TABLE 命令将表名由 table1 改为 table2。

CREATE DATABASE mydbc1

CREATE DATABASE mydbc2

SET DATABASE TO mydbc1

CREATE TABLE table1 (cField1 C(10), n N(10))  && 将表添加到 mydbc1

CLOSE TABLES	  && 一个表要从数据库中移去时，必须先关闭

REMOVE TABLE table1

SET DATABASE TO mydbc2

ADD TABLE table1

RENAME TABLE table1 TO table2


请参阅

ADD TABLE，CLOSE DATABASES，DBC( )，DBGETPROP( )，DBSETPROP( )，DELETE DATABASE，DISPLAY TABLES，MODIFY DATABASE，OPEN DATABASE，REMOVE TABLE，SET DATASESSION


SET DATASESSION 命令

请参阅

激活指定的表单数据工作期。

语法

SET DATASESSION TO [nDataSessionNumber]

参数

nDataSessionNumber

指定要激活的表单数据工作期。如果省略 nDataSessionNumber，将激活数据工作期 1（全局数据工作期）。

说明

默认情况下，当启动 Visual FoxPro 时，数据工作期 1（全局数据工作期）是活动的。

创建表单时，表单对象的 DataSession 属性决定表单是否有它自已唯一的数据工作期。如果表单的 DataSession 属性置为“真”（.T.），则表单有它自已的数据工作期；否则，不创建表单的数据工作期。可以使用表单的 DataSessionId 只读属性来确定表单数据工作期编号。

在释放了创建数据工作期的表单后，此数据工作期也随之关闭。

SET DATASEESION 一般用于调试表单对象，并且不应该在表单活动时使用。

下列 SET 命令的作用域为当前数据工作期：

SET 命令
SET ANSI	SET AUTOSAVE
SET BLOCKSIZE	SET CARRY
SET CENTURY	SET COLLATE
SET CONFIRM	SET CURRENCY
SET DATABASE	SET DATE
SET DECIMALS	SET DELETED
SET DELIMITERS	SET EXACT
SET EXCLUSIVE	SET FIELDS
SET FIXED	SET LOCK
SET MARK TO	SET MEMOWIDTH
SET MULTILOCKS	SET NEAR
SET NULL	SET PATH
SET POINT	SET REPROCESS
SET SAFETY	SET SEPARATOR
SET SYSFORMATS	SET TALK
SET UNIQUE


请参阅

AUSED( )，CREATE FORM，DataSession 属性，DataSessionId 属性


SET DATE 命令

请参阅

指定日期表达式和日期时间表达式的显示格式。

语法

SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH | GERMAN
| ITALIAN | JAPAN | USA | MDY | DMY | YMD

说明

下表中列出了有效的设置值及其对应的日期格式：

设置	格式
AMERICAN	mm/dd/yy
ANSI	yy.mm.dd
BRITISH/FRENCH	dd/mm/yy
GERMAN	dd.mm.yy
ITALIAN	dd-mm-yy
JAPAN	yy/mm/dd
USA	mm-dd-yy
MDY	mm/dd/yy
DMY	dd/mm/yy
YMD	yy/mm/dd
日期的默认设置是 AMERICAN。

SET DATE 设置也决定日期在日期时间表达式中的格式。

SET DATE 在当前数据工作期有效。


请参阅

DATE( )，DATETIME( )，SET CENTURY，SET DATASESSION，SET MARK TO，SET SYSFORMATS


SET DEBUG 命令

请参阅

决定能否从 Visual FoxPro 的菜单系统中打开调试窗口和跟踪窗口。

语法

SET DEBUG ON | OFF

参数

ON

（默认值）能够从 Visual FoxPro 的菜单系统中打开调试窗口和跟踪窗口。

OFF

不能从 Visual FoxPro 的菜单系统中打开调试窗口和跟踪窗口。不过，当 SET DEBUG 设置为 OFF 时，可以通过 SET ECHO ON 或 ACTIVATE WINDOW DEBUG 打开调试窗口，同样，也可以通过 SET STEP 或 ACTIVATE WINDOW TRACE 打开跟踪窗口。

说明

有关跟踪窗口和调试窗口的详细内容，请参阅使用调试工具和《开发指南》第十六章“测试和调试应用程序”。


请参阅

SET ECHO


SET DECIMALS 命令

请参阅

指定数值表达式中的小数点位数。

语法

SET DECIMALS TO [nDecimalPlaces]

参数

nDecimalPlaces

指定要显示的最少的小数点位数。默认值是 2 位小数。最大为 18 位小数，最少是 0。

说明

SET DECIMALS 指定最少的小数点位数，用来控制除法、乘法、三角函数和金融函数计算结果的显示。

SET DECIMALS 在当前数据工作期有效。


请参阅

SET DATASESSION，SET FIXED，SET SYSFORMATS


SET DEFAULT 命令

请参阅

指定默认的驱动器、目录或文件夹。

语法

SET DEFAULT TO [cPath]

参数

cPath

指定下列参数：

 •	   驱动器指示符。

 •	   含目录名称或文件夹名称的驱动器指示符。

 •	   子目录名称或文件夹名称。

 •	   使用 MS-DOS 速记符号（\ 或 ..）的上述各项。

 •	   在 FoxPro for Macintosh 中，使用 Macintosh 速记符号（: 或 ::）或 MS-DOS 速记符号的上述各项。

附注

FoxPro for Macintosh 不识别包含反斜杠 (\) 字符的文件夹名称。如果文件夹名称中嵌入了反斜杠，Visual FoxPro 会产生出错信息。

FoxPro for Macintosh 支持 MS-DOS 的速记符号，以兼容于在其他 Visual FoxPro 平台上开发的应用程序。有关 MS-DOS 和 Macintosh 速记符号的详细内容，请参阅 SET PATH 命令。可以使用 SYS(2027) 函数将包含 MS-DOS 速记符号的文件夹或路径转换成包含 Macintosh 速记符号的文件夹或路径。

说明

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 中，SET DEFAULT 将默认目录设置为指定的目录。

在 FoxPro for Macintosh 中，SET DEFAULT 将默认文件夹设置为指定的文件夹。

Visual FoxPro 在默认的 Visual FoxPro 目录或文件夹中搜索文件。默认的目录或文件夹就是启动 Visual FoxPro 的目录或文件夹。不过，可以在启动程序或 Visual FoxPro 配置文件中指定一个不同的默认目录或文件夹。如果 Visual FoxPro 不能在默认的目录或文件夹中找到文件，Visual FoxPro 接着搜寻 Visual FoxPro 路径（如果指定的话）。要指定 Visual FoxPro 路径，可使用 SET PATH。

如果创建文件时没有指定保存位置，则该文件会保存到 Visual FoxPro 的默认目录或文件夹中。

退出 FoxPro for MS-DOS 时， Visual FoxPro 会返回到启动 Visual FoxPro 时所在的驱动器。Visual FoxPro 启动时的驱动器就是默认的驱动器，如果 cPath 中指定的最后一个目录在启动的驱动器里，则返回到此目录中。

当退出 Visual FoxPro 时，将返回 Windows 中。当退出 Windows 时，将返回到启动 Windows 时所在的目录下。

退出 FoxPro for Macintosh 时，返回到 FINDER。

提示

SYS(5) 返回默认驱动器。SYS(2003) 返回没有驱动器指示符的默认目录或文件夹，SYS(5)+SYS(2003) 返回默认的驱动器及目录或文件夹。

FoxPro for MS-DOS 和 Visual FoxPro

使用下面命令可以将默认驱动器设置为驱动器 A。

SET DEFAULT TO A

SET DEFAULT TO A:

可以指定一个特定的目录。

SET DEFAULT TO A:\sales

SET DEFAULT TO C:\sales\data

可以指定子目录。如果在驱动器 C 上的根目录是默认的 Visual FoxPro 目录，发出下面命令能够将默认目录设置为 C:\SALES。

SET DEFAULT TO sales

可以使用 MS-DOS 速记符号。如果当前目录是 C:\SALES\DATA，发出下面命令可将根目录设置为默认目录。

SET DEFAULT TO \

也可以使用下面命令将默认目录设置为上一层父目录。

SET DEFAULT TO ..

若想将默认目录恢复成为 Visual FoxPro 启动目录，应不带参数发出 SET DEFAULT 命令。

SET DEFAULT TO

FoxPro for Macintosh

可以使用以下命令将默认驱动器设置成名为 MacHD 的驱动器。请确保在驱动器名称后加上冒号。

SET DEFAULT TO MacHD:

如果卷名或文件夹名中包含空格，请用引号将表达式括起来。

SET DEFAULT TO 'Volume:sales figures'

可以指定一个特定的文件夹。

SET DEFAULT TO MacHD:FoxPro:sales:data

可以指定一个嵌套的文件夹。如果当前的默认文件夹是 FOXPRO，发出下面的命令可将默认文件夹设置为 MacHD:FOXPRO:SALES：

SET DEFAULT TO sales

可以使用下面的命令将默认文件夹设置为上一层文件夹。

SET DEFAULT TO ::

若想将默认文件夹恢复成为 FoxPro for Macintosh 启动时的文件夹，请使用不带参数的 SET DEFAULT 命令：

SET DEFAULT TO


请参阅

CD | CHDIR，MD | MKDIR，RD | RMDIR，SET PATH，SET VOLUME，SYS(5) - 默认驱动器，SYS(2003) - 当前目录


SET DELETED 命令

请参阅

指定 Visual FoxPro 是否处理标有删除标记的记录，以及其他命令是否可以操作它们。

语法

SET DELETED ON | OFF

参数

ON

使用范围子句处理记录（包括在相关表中的记录）的命令忽略标有删除标记的记录。

OFF

（默认值）使用范围子句处理记录（包括在相关表中的记录）的命令可以访问标有删除标记的记录。

说明

如果表索引是根据 DELETED( ) 命令建立的，那么，使用 DELETED( ) 测试记录状态的查询可以用 Rushmore 技术优化。有关优化查询的详细内容，请参阅深入了解 Rushmore 技术，或《开发指南》的第十七章“优化应用程序”。

可以执行 DELETE - SQL 或 DELETE 命令标记要删除的记录，也可以在浏览窗口或编辑窗口中选择“表”菜单中的“删除记录...”命令标记要删除的记录。

可以执行 RECALL 命令恢复记录，也可以在浏览窗口或编辑窗口中选择“表”菜单中的“恢复记录...”命令恢复记录。

重要内容

如果默认的作用域是当前记录或者只含单个记录，SET DELETED 命令被忽略。IDEX 和 REINDEX 命令总是忽略 SET DELETED 命令，并且给表中所有记录建立索引。

SET DELETED 的作用域是当前数据工作期。


请参阅

DELETE，DELETE - SQL，DELETED( )，PACK，RECALL，SET DATASESSION


SET DELIMITERS 命令

请参阅

指定是否分隔文本框。包含此命令是为了提供向后兼容性。

语法

SET DELIMITERS ON | OFF
 — 或者 —
SET DELIMITERS TO cDelimiters | TO DEFAULT

参数

ON

指定在文本框中显示分隔符。默认的分隔字符是冒号 (:)。冒号放在文本框的左边和右边，来指示从什么地方开始输入数据。

OFF

（默认值）指定文本框中不显示分隔符。

TO cDelimiters

指定一到两个分隔符。如果 cDelimiters 只包含一个字符，那么在文本框的两边用同一个字符分隔；如果 cDelimiters 包含二个字符，第一个字符是左分隔符，第二个字符是右分隔符。

TO DEFAULT

将默认分隔符重新设置为冒号。

说明

使用 @ ... GET 命令或文本框控制创建文本框。对于使用文本框控制创建的文本框，只有当 SET DELIMITERS 设置为 ON，并且文本框的 BorderStyle 属性设置为 0 时，才显示分隔符。

SET DELIMITERS 的作用域是当前数据工作期。


请参阅

@ ... GET - 文本框，BorderStyle 属性，控制和对象，SET DATASESSION，文本框控制


SET DEVELOPMENT 命令

请参阅

使 Visual FoxPro 在运行程序时，对目标文件的编译日期时间与程序的创建日期时间进行比较。

语法

SET DEVELOPMENT ON | OFF

参数

ON

（默认值）指定 Visual FoxPro 在执行程序前重编译那些比目标程序更新的源程序。这样就能确保执行程序的最新版本。

OFF

指定 Visual FoxPro 不需比较程序的源版本和编译版本。如果 SET DEVELOPMENT 设置为 OFF，可能无法保证执行的程序总是最新的版本。

说明

不论如何设置 SET DEVELOPMENT，总是执行在由 MODIFY COMMAND 激活的 Visual FoxPro 编辑器中修改过的程序的最新版本。

只有当程序是在 Visual FoxPro 以外修改时，才需要将 SET DEVELOPMENT 设置为 ON。例如，使用 TSR 外部编辑器，执行修改过的程序前可能需要发出 CLEAR PROGRAM 命令。有关详细内容，请参阅 CLEAR PROGRAM。使用 SET DEVELOPMENT OFF 可以优化性能。

当 SET DEVELOPMENT 设置为 ON 时，运行的程序可以在执行 READ 操作时被取消。当 SET DEVLOPMENT 设置为 ON，并且 READ 操作被激活时，可以选择“程序”菜单上的“取消”命令。在执行 READ 命令时选择“取消”命令将取消程序的运行。如果 SET DEVELOPMEMT 设置为 OFF，那么在执行 READ 命令时不能选择“程序”菜单上的“取消”命令。

在 Visual FoxPro 中，SET DEVELOPMENT 的设置也决定了在表单运行发生错误时是否打开跟踪窗口。如果 SET DEVELOPMENT 设置为 ON，打开跟踪窗口，并选中引起错误的程序行。如果 SET DEVELOPMENT 设置为 OFF，当表单中发生错误时不打开跟踪窗口。


请参阅

COMPILE，MODIFY COMMAND，MODIFY FILE


SET DEVICE 命令

请参阅

将 @ ... SAY 的输出结果定向到屏幕、打印机或文件。

语法

SET DEVICE TO SCREEN | TO PRINTER [PROMPT] | TO FILE FileName

参数

TO SCREEN

将 @ ... SAY 的输出结果定向到 Visual FoxPro 主窗口或活动的用户自定义窗口中。

TO PRINTER [PROMPT]

将 @ .. SAY 的输出结果定向到打印机。当 @ ... SAY 命令中指定的页面坐标位置高于前面的 @ ... SAY 命令中指定的页面坐标位置，则发出走纸命令。

在 Visual FoxPro 和 FoxPro for Macintosh 中，包含可选的 PROMPT 子句可以在打印开始之前显示一个对话框。从中可以调整打印机设置，包括打印的副本数目和打印的页码等。当前安装的打印机驱动程序决定了可以调整哪种打印机的设置。 PROMPT 应该紧放在 TO PRINTER 之后。

在 FoxPro for MS-DOS 中，忽略 PROMPT。

TO FILE FileName

指定一个保存 @ ... SAY 输出结果的文件。

说明

可以将 @ ... SAY 的输出结果定向到 Visual FoxPro 主窗口、活动的用户自定义窗口、打印机和文件。


请参阅

SYS(101) - 设备设置


SET DISPLAY 命令

请参阅

允许在支持不同显示方式的显示器上更改当前的显示方式。

语法

SET DISPLAY TO CGA | COLOR | EGA25 | EGA43 | MONO | VGA25 | VGA50

参数

CGA

在 FoxPro for MS-DOS 中，将显示方式设置为 CGA 方式。

在 Visual FoxPro 和 FoxPro for Macintosh 中，将 Visual FoxPro 主窗口中的字体大小设置为 9 磅。

COLOR

在 FoxPro for MS-DOS 中，将显示方式设置为彩色方式。

EGA25

在 FoxPro for MS-DOS 中，将显示方式设置为 EGA 方式，每屏显示 25 行。

在 Visual FoxPro 和 FoxPro for Macintosh 中，将 Visual FoxPro 主窗口中的字体大小设置为 9 磅，将 Visual FoxPro 主窗口的大小设置为 25 行。

EGA43

在 FoxPro for MS-DOS 中，将显示方式设置为 EGA 方式，每屏显示 43 行。

在 Visual FoxPro 中，将 Visual FoxPro 主窗口中的字体大小设置为 7 磅，将 Visual FoxPro 主窗口的大小设置为 50 行。

在 FoxPro for Macintosh 中，将 Visual FoxPro 主窗口中的字体大小设置为 8 磅。

MONO

在 FoxPro for MS-DOS 中，将显示方式设置为单色方式。

VGA25

在 FoxPro for MS-DOS 中，将显示方式设置为 VGA 方式，每屏显示 25 行。

在 Visual FoxPro 和 FoxPro for Macintosh 中，将 Visual FoxPro 主窗口中的字体大小设置为 9 磅，将 Visual FoxPro 主窗口的大小设置为 25 行。

VGA50

在 FoxPro for MS-DOS 中，将显示方式设置为 VGA 方式，每屏显示 50 行。

在 Visual FoxPro 中，将 Visual FoxPro 主窗口中的字体大小设置为 7 磅，将 Visual FoxPro 主窗口的大小设置为 50 行。

在 FoxPro for Macintosh 中，将 Visual FoxPro 主窗口中的字体大小设置为 8 磅。

说明

在 FoxPro for MS-DOS 中，SET DISPLAY 允许在支持不同显示方式的显示器上设置不同的显示方式。

在 Visual FoxPro 和 FoxPro for Macintosh 中，SET DISPLAY 可以改变 Visual FoxPro 主窗口中的字体大小。必要时，可根据指定的选项来增加显示的行数，以此增加 Visual FoxPro 主窗口的大小。如果发出 SET DISPLAY 命令，图形状态栏将被关掉。

如果视频硬件不支持指定的选项，Visual FoxPro 将产生错误信息。

无论什么时侯发出 SET DISPLAY 命令，SET MESSAGE 行都将被重置为 Visual FoxPro 主窗口的最后一行。


请参阅

SET MESSAGE，SYS(2006) - 当前图形适配卡


SET DOHISTORY 命令

请参阅

决定程序中的命令是否放在命令窗口或文本文件中。

语法

SET DOHISTORY ON | OFF | TO [FileName [ADDITIVE]]

参数

ON

将程序中的命令放在命令窗口或文本文件中。

OFF

（默认值）不将程序中的命令放在到命令窗口或文本文件中。

TO FileName

指定存放程序中命令的文本文件的名称。SET DOHISTORY 必须设置为 ON，才能将程序中的命令存放到文本文件中。发出不带文件名的 SET DOHISTORY TO 命令可以关闭文本文件。

如果指定的文件不存在，Visual FoxPro 将自动创建并打开它；如果指定的文件已经存在（并且 SET SAFETY 为 ON，又省略了 ADDITIVE 关键字），将显示一个对话框提示您是否改写已有的文件。

ADDITIVE

将程序中的命令保存在指定文件的尾部。如果省略了 ADDITIVE，程序中的命令改写文本文件中的内容。

说明

包含此命令是为了提供向后兼容性。请使用“跟踪”窗口代替此命令。

可以使用 SET DOHISTORY 在运行程序时将程序中的命令保存在命令窗口或文本文件中。就象直接在命令窗口输入命令一样，可以编辑和重新运行它们。

重要内容

当 SET DOHISTORY 的设置为ON 时，程序运行的速度将减慢很多。由于命令窗口处于一种特殊类型的 Visual FoxPro 编辑器工作期，当程序运行时 DOHISTORY 将建立一个临时文件。这个临时文件能够很快地占满一个很大的磁盘。

只有在解决特殊问题时，才作为调试辅助而使用 SET DOHISTORY。请确保在运行和发布程序前从程序中去掉所有 SET DOHISTORY ON 命令。


请参阅

SET ECHO，SET STEP


SET ECHO 命令

请参阅

为调试程序打开跟踪窗口。

语法

SET ECHO ON | OFF

参数

ON

在跟踪窗口中显示正在执行的程序源代码。突出显示当前正在运行的程序行。

OFF

（默认值）关闭 FoxPro 2.0 以前版本中的跟踪窗口。在程序中使用 DEACTIVATE WINDOW TRACE 命令可以关闭跟踪窗口。

说明

使用跟踪窗口还可以为挂起的运行程序设置断点。有关跟踪窗口的详细内容，请参阅跟踪窗口和《开发指南》的第十六章“测试和调试应用程序”。


请参阅

RESUME，SET STEP，SUSPEND


SET ESCAPE 命令

请参阅

决定是否可以通过按 Esc 键中断程序和命令的运行。

语法

SET ESCAPE ON | OFF

参数

ON

（默认值）当按 Esc 键时中断命令和程序的运行。

若在某命令或程序运行期间按 Esc 键，当插入点在命令窗口中时，将出现下列信息：

*** 中断 ***

如果命令或程序运行期间按 Esc 键，在完成处理当前程序行后，出现有如下三种选项的警告。

 •	   （默认值）选择“取消”立即中止程序的运行并返回到命令窗口。

 •	   选择“挂起”暂停程序的运行并返回到命令窗口。这个选项对调试程序非常有用。从“程序”菜单中选择“继续执行”或在命令窗口中发出 RESUME 命令能够从暂停运行程序行处重新启动程序。

 •	   选择“忽略”能够从暂停行处继续运行程序。

OFF

禁止运行的程序和命令在按 Esc 键后被中断。


请参阅

ON ESCAPE，ON KEY LABEL


SET EXACT 命令

请参阅

指定比较不同长度两个字符串时，Visual FoxPro 使用的规则。

语法

SET EXACT ON | OFF

参数

ON

指定相等的表达式必须是每个字符都相匹配。比较时，忽略表达式结尾的空格。比较两个表达式时，在较短的一个的右边加上空格，以使它与较长表达式的长度相匹配。

OFF

（默认值）指定必须是右端表达式结尾前的每个字符都相匹配，才是相等的表达式。

说明

SET EXACT 设置值对于相等长度的字符串没有任何作用。

字符串比较

Visual FoxPro 有两个测试相等的关系操作符。

操作符 = 在两个相同类型的值之间进行比较。这个操作符适用于比较字符、数值、日期和逻辑数据。

但是，当使用操作符 = 比较两个字符表达式时，比较结果可能与预期的不完全相同。字符表达式比较时是从左到右逐个字符进行比较，一直到两个表达式中的对应字符不相等，或者到达操作符右端表达式的末端 (SET EXACT OFF)，或者到达两个表达式的末端 (SET EXACT ON)。

当需要两个完全相同的字符数据时可以使用操作符 ==。如果两个字符表达式使用操作符 == 进行比较时，操作符两边的表达式必须包含完全一样的字符（包括空格），才认为是相等的。使用操作符 == 进行字符串比较时忽略 SET EXACT 设置。

下表说明选择的操作符和 SET EXACT 设置如何影响比较。（下划线代表空格）。

比较	= EXACT OFF	= EXACT ON	== EXACT ON 或 OFF
abc = abc	匹配	匹配	匹配
ab = abc	不匹配	不匹配	不匹配
abc = ab	匹配	不匹配	不匹配
abc = ab_	不匹配	不匹配	不匹配
ab = ab_	不匹配	匹配	不匹配
ab_ = ab	匹配	匹配	不匹配
= ab	不匹配	不匹配	不匹配
ab =	匹配	不匹配	不匹配
__ =	匹配	匹配	不匹配
= ___	不匹配	匹配	不匹配
TRIM(___) =	匹配	匹配	匹配
= TRIM(___)	匹配	匹配	匹配
SET EXACT 的作用域是当前数据工作期。


请参阅

SET ANSI


SET EXCLUSIVE 命令

请参阅

指定 Visual FoxPro 在网络上以独占方式还是共享方式打开表文件。

语法

SET EXCLUSIVE ON | OFF

参数

ON

（全局数据工作期的默认方式）网络上表的访问权限只给打开表的用户。网络上的其他用户不能存取该表。与 FLOCK( ) 不同，SET EXCLUSIVE ON 还防止所有其他用户以只读方式访问该表。在 USE 命令中加入 EXCLUSIVE 子句使文件在网络上以独占方式打开，在此方式下，不必锁定该表的记录和文件。

以独占方式打开表，能够确保其他用户不能更改文件的内容。有些命令只能处理以独占方式打开的表。这些命令有 INSERT，INSERT BLANK，MODIFY STRUCTURE，PACK，REINDEX 和 ZAP。

OFF

（私有数据工作期的默认方式）允许网络上的任何用户共享和修改网络上打开的表。

有关网络上锁定和共享表记录和文件的详细内容，请参阅《开发指南》第十九章“共享方式程序设计”。

说明

改变 SET EXCLUSIVE 的设置并不改变已经打开表的状态。例如，如果一个表是在 SET EXCLUSIVE 设置为 ON 时打开的，当把 SET EXCLUSIVE 的设置改变为 OFF 时，表仍然保持原来的独占状态。

SET EXCLUSIVE 的作用域是当前数据工作期。


请参阅

FLOCK( )，RLOCK( )，SET DATASESSION，USE


SET FDOW 命令

请参阅	示例

指定一周中的第一天。

语法

SET FDOW TO [nExpression]

参数

nExpression

指定一周中的第一天。下表列出了 nExpression 可以取的值，以及对应的星期几将被设置成一周中的第一天。

nExpression	星期几
1	星期日
2	星期一
3	星期二
4	星期三
5	星期四
6	星期五
7	星期六
如果省略 nExpression，一周中的第一天重新设置为星期天 (1)。

说明

一周中的第一天也可以通过选择“选项”对话框的国际选项卡中的“星期开始于”复选框来设置。


STORE SET('FDOW') TO gnFdow  && 保存当前值

SET FDOW TO 1  && 默认值，将星期天设置为一周的第一天

SET FDOW TO 7  && 将星期六设置为一周的第一天

SET FDOW TO &gnFdow  && 还原初始值


请参阅

CDOW( )，DAY( )，DOW( )，SET FWEEK，SYS( ) 函数概述，WEEK( )


SET FIELDS 命令

请参阅

指定可以访问表中的哪些字段。

语法

SET FIELDS ON | OFF | LOCAL | GLOBAL
 — 或者 —
SET FIELDS TO [[FieldName1 [, FieldName2 ...]]
| ALL [LIKE Skeleton | EXCEPT Skeleton]]

参数

ON

指定只能访问出现在字段列表中的字段。

OFF

（默认值）指定可以访问当前表中的所有字段。

LOCAL

指定只能访问字段列表中当前工作区的字段。

GLOBAL

指定可以访问字段列表中的所有字段，包括在其他工作区中的字段。

SET FIELDS GLOBAL 允许在不发出 SET COMPATIBLE TO DB4 命令时，也可以访问其他工作区中的字段。

TO [FieldName1 [, FieldName2 ...]]

指定当前表中可访问的字段的名称。在下列情况下，必须包括字段名称的别名：

 •	   当字段所在的表不在当前工作区中时。

 •	   当在两个或两个以上表中字段的名称相同时。

在字段名称的前面加上表的别名，可以在字段列表中包括其他工作区中打开的表的字段。但是，这些字段只有在发出了 SET FIELDS GLOBAL 或 SET COMPATIBLE DB4 命令后才能访问。

计算结果字段

字段列表可以包含创建计算结果字段的语句。计算结果字段包含由表达式创建的只读数据。这个表达式可以是任何形式，不过它必须是有效的 Visual FoxPro 表达式。在发出了 SET FIELDS GLOBAL 或 SET COMPATIBLE DB4 命令之后，才能访问计算结果字段。

用于创建计算结果字段的语句格式如下：

<calculated field name> = <expr>

下面的示例创建一个名为 LOCATION 的计算结果字段：

CLOSE DATABASES

USE customer

SET FIELDS TO LOCATION = ALLTRIM(city) + ', ' + state

CITY 和 STATE 都是选定表中的字段名称。

SET FIELDS TO 可以添加字段。带字段列表发出 SET FIELDS TO 命令，可以把指定的字段添加到当前可访问的字段中。

不带任何附加参数发出 SET FIELDS TO 命令隐含地执行了 SET FIELDS OFF 命令。

ALL

允许访问当前表中的所有字段。

ALL LIKE Skeleton | EXCEPT Skeleton

可以单独或组合使用 LIKE 和 EXCEPT 子句，有选择地访问字段。如果使用 LIKE Skeleton，可以访问与 Skeleton 相匹配的字段。如果使用 EXCEPT Skeleton，可以访问不与 Skeleton 相匹配的字段。

Skeleton 支持 * 和 ? 通配符。例如，要访问所有以字母 A 和字母 P 开头的字段，可发出如下命令：

SET FIELDS TO ALL LIKE A*,P*

LIKE 子句可以和 EXCEPT 子句联合起来使用：

SET FIELDS TO ALL LIKE A*,P* EXCEPT PARTNO*

说明

SET FIELDS TO 可以添加字段。发出带字段列表的 SET FIELDS TO 命令，可以使指定的字段也成为当前可访问的字段。

发出 SET FIELDS TO 命令隐含地执行了 SET FIELDS OFF 命令。发出既不包含字段列表也不包含 ALL 的 SET FIELDS TO 命令将从当前表中移去字段列表上的所有字段，使每个字段都不能被访问。

SET FIELDS 的作用域是当前数据工作期。


请参阅

SET FILTER，SET DATASESSION


SET FILTER 命令

请参阅

指定访问当前表中记录时必须满足的条件。

语法

SET FILTER TO [lExpression]

参数

lExpression

指定记录必须满足的条件。

如果当前表在 lExpression 中指定的一个或多个字段上建立了索引，Visual FoxPro Rushmore 技术会优化基于这个或这些字段的查询。

说明

如果使用 SET FILTER 命令，则表中只有满足逻辑表达式 lExpression 指定的条件的记录才可以被访问。所有访问该表的命令都必须遵守 SET FILTER 指定的条件。对于每个打开的表，都可以设置单独的筛选条件。

只有当记录指针在表中移动时，才计算由 SET FILTER 指定的条件。

不带 lExpression 发出 SET FILTER TO 命令将关闭当前表的选择器。

注意：SELECT - SQL 不遵守当前的筛选条件。


请参阅

FILTER( )，SELECT - SQL


SET FIXED 命令

请参阅

指定在显示数值时小数位数是否固定。

语法

SET FIXED ON | OFF

参数

ON

要确定在结果中显示的小数位数，应使用 SET DECIMALS 设置。默认的小数位数是 2。

OFF

（默认值）允许根据数值表达式中特定的常数、变量和操作符来决定显示结果中保留的小数位数。字段中的内容以声明的小数位数显示。

说明

SET FIXED 的作用域是当前数据工作期。


请参阅

SET DECIMALS，SET DATASESSION


SET FORMAT 命令

请参阅

打开格式文件供 APPEND、CHANGE、EDIT 和 INSERT 使用。包括此命令是为了提供向后兼容性。

语法

SET FORMAT TO [FileName | ? ]

参数

FileName

指定要打开的格式文件。格式文件具有 . FMT 或 .PRX 扩展名。

?

显示从中可以选择格式文件的“打开”对话框。

说明

不带任何参数发出 SET FORMAT TO 命令将会关闭当前工作区中的格式文件。

在格式文件中，初始化代码在 @ ... SAY 命令之前，清理代码在 @ ... SAY 命令之后。初始化代码在发出 APPEND，CHANGE，EDIT 或 INSERT 命令后立即执行；而清理代码在执行完 APPEND，CHANGE，EDIT 或 INSERT 命令后执行。


请参阅

CREATE FORM，SYS(7) - 当前格式文件


SET FULLPATH 命令

请参阅

指定 CDX( )，DBF( )，MDX( ) 和 NDX( ) 等函数是否返回文件名的路径。

语法

SET FULLPATH ON | OFF

参数

ON

（默认值）指定 CDX( )，DBF( )，MDX( ) 和 NDX( ) 等函数返回驱动器指示符、路径和文件名。

OFF

指定只返回驱动器指示符和文件名。

说明

仅用于 FoxPro for MS-DOS 和 Visual FoxPro。

应使用 SET FULLPATH 命令来设置在 CDX( )，DBF( )，MDX( ) 和 NDX( ) 等函数返回的文件名中是否包括路径，。

在 FoxPro for Macintosh 中，忽略 SET FULLPATH 设置，返回的文件名中总是包含路径。


请参阅

CDX( )，DBF( )，MDX( )，NDX( )


SET FUNCTION 命令

请参阅

给功能键或组合键分配表达式（键盘宏）。

语法

SET FUNCTION nFunctionKeyNumber | KeyLabelName TO [eExpression]

参数

nFunctionKeyNumber

指定功能键的编号，将向该功能键分配宏。例如，使用 SET FUNCTION 2 命令指定功能键 f2。

KeyLabelName

指定包含功能键的键组合，此函数将向该键组合分配宏。Visual FoxPro 支持包含功能键的组合键。可以把 Ctrl 或 Shift 键同功能键组合起来创建其他可编程键。有关键标记表达式的列表，请参阅 ON KEY LABEL.。

TO [eExpression]

指定保存到功能键或组合键中的系列键击。Visual FoxPro 把表达式中的分号理解为回车键。

可以用 CLEAR MACROS 命令清除功能键的定义。


请参阅

CLEAR MACROS，FKLABEL( )，FKMAX( )，ON KEY LABEL


SET FWEEK 命令

请参阅	示例

指定一年的第一周要满足的条件。

语法

SET FWEEK TO [nExpression]

参数

nExpression

指定一个值，它决定了一年的第一周要满足的条件。下表列出了 nExpression 可以取的值，及其要满足的条件。

nExpression	第一周要满足的条件
1	（默认值）包含一月一日的那一周
2	第一周的大半（含四天）以上在当前年中
3	第一个整周
如果省略了 nExpression，一年的第一周被重新设置为 1（这周包含一月一日）。

说明

一年的第一周可以通过选择“选项”对话框的国际选项卡中的“一年的第一周”复选框来设置。


STORE SET('FWEEK') TO gnFweek  && 保存当前值

SET FWEEK TO 1  && 第一周包含 January 1st

SET FWEEK TO 3  && 第一周有七天

SET FWEEK TO &gnFweek  && 还原初始设置


请参阅

CDOW( )，DAY( )，DOW( )，SET FDOW，SYS( ) 函数概述，WEEK( )


SET HEADINGS 命令

请参阅

指定用 TYPE 显示文件内容时，是否显示字段的列标头，并指定是否包含文件信息。

语法

SET HEADINGS ON | OFF

参数

ON

（默认值）指定显示字段的名称。

如果发出 TYPE 命令来显示文件内容时，Visual FoxPro 在显示的结果的前面插入换页符、文件的路径和名称以及日期。

OFF

指定不显示字段的名称。

如果发出 TYPE 命令来显示文件的内容， Visual FoxPro 不在显示的结果中插入其他信息。

说明

指定字段名是否以列标头的形式显示在 AVERAGE，CALCULATE，DISPLAY，LIST 和 SUM 输出结果中的字段上面。


请参阅

AVERAGE，CALCULATE，DISPLAY，LIST，SUM，TYPE


SET HELP 命令

请参阅

激活或废止 Visual FoxPro 联机帮助或指定的帮助文件。

语法

SET HELP ON | OFF
 — 或者 —
SET HELP TO [FileName]

参数

ON

（默认值）当按下 F1 键或在命令窗口中执行 HELP 命令时，显示帮助窗口。

OFF

使 Visual FoxPro 联机帮助不可用。

TO [FileName]

指定 Visual FoxPro 联机帮助之外的一个帮助文件。

如果执行不包含文件名的 SET HELP TO 命令：

 •	   FoxPro for MS-DOS 寻找名为 FOXHELP.DBF 的帮助文件。

 •	   Visual FoxPro 和 FoxPro for Macintosh 寻找名为 FOXHELP.HLP 的帮助文件。

选择联机帮助的样式

在 Visual FoxPro 和 FoxPro for Macintosh 中，既可以选择图形方式帮助，也可以选择 .DBF 样式帮助。.DBF 样式帮助与 FoxPro for MS-DOS 的帮助系统相似。

在安装 Visual FoxPro 或 FoxPro for Macintosh 时，安装程序会提示选择安装什么类型的帮助，可以同时安装两种类型的帮助。要使用任何一种帮助类型，都必须安装所需的帮助文件。对于图形方式帮助，应安装 FOXHELP.HLP；对于 .DBF 样式帮助，应安装 FOXHELP.DBF 和 FOXHELP.FPT。如果两种帮助都安装，Visual FoxPro 默认使用 FOXHELP.HLP。

更改帮助样式

任何时侯都可以在命令窗口、查看窗口或者用户程序中改变帮助样式。在 Visual FoxPro 的配置文件中可以指定启动时默认的帮助样式。

在命令窗口中指定帮助样式

在命令窗口或从程序中发出下列命令之一改变帮助样式：

 •	   SET HELP TO FOXHELP.HLP（图形方式帮助）

 •	   SET HELP TO FOXHELP.DBF（.DBF 样式帮助）

在选项对话框中指定帮助样式

仅在 Visual FoxPro 中进行此操作。

从“工具”菜单中选择“选项”命令，打开“选项”对话框，选择“文件位置”选项卡，然后在“帮助文件”文本框中指定帮助文件。

在查看窗口中指定帮助样式

仅在 FoxPro for Windows、FoxPro for Macintosh 和 FoxPro for MS-DOS 中进行此操作。

首先，在命令窗口中发出 SET 命令，或选择“窗口”菜单中的“查看”项打开查看窗口。然后选择“文件”按钮，再选择“帮助文件”按钮。

当选择“帮助文件”按钮后，显示“打开”对话框。要指定帮助样式，请做如下选择之一：

 •	   要采用图形方式帮助，可从滚动列表中选择 FOXHELP.HLP 文件。

 •	   要采用 .DBF 样式帮助，可从滚动列表中选择 FOXHELP.DBF 文件。

在配置文件中指定启动时的帮助样式

要指定启动时的默认帮助文件，请在 CONFIG.FPW（ Visual FoxPro ）或CONFIG.FPM( FoxPro for Macintosh ) 配置文件中加入下列某一行：

 •	   HELP = FOXHELP.HLP（指定图形方式帮助）

 •	   HELP = FOXHELP.DBF（指定 .DBF 样式帮助）

对于命令窗口、查看窗口或配置文件中指定的帮助文件，如果放在与当前默认的目录或文件夹不同的目录或文件夹中，请在帮助文件名称前加上路径。

说明

在 Visual FoxPro 或 FoxPro for Macintosh 中使用 SET HELP，可在用户应用程序中提供一种可编程的联机帮助文件，或在不同的帮助文件之间进行切换。

有关 Visual FoxPro 联机帮助的详细内容，请参阅《专业级功能指南》第二部分“创建帮助文件”。


请参阅

HELP，SET HELPFILTER，SET TOPIC


SET HELPFILTER 命令

请参阅

在帮助窗口中，让 Visual FoxPro 显示 .DBF 样式帮助主题的一个子集。

语法

SET HELPFILTER [AUTOMATIC] TO [lExpression]

参数

AUTOMATIC

在关闭帮助窗口后，自动删除使用 SET HELPFILTER 命令指定的条件。在命令中包含 AUTOMATIC 等效于在关闭帮助窗口后紧接着发出 SET HELPFILTER TO 命令。AUTOMATIC 必须直接放在 TO lExpression 前面。

lExpression

指定用于筛选“帮助”主题的逻辑表达式，只显示 lExpression 计算值为“真”(.T.) 的帮助主题。通常，lExpression 是一个字段名。

说明

只能对 .DBF 样式的帮助设置筛选器，对于图形方式帮助不能设置。

在 Visual FoxPro 中，只在专业版中才包含 .DBF 样式帮助。

下表列出了 FOXHELP.DBF 的结构。

字段	字段类型和说明
CONTEXTID	数值型字段。给每个帮助主题提供一个标识。仅用在 Visual FoxPro 中。
TOPIC	字符型字段。在帮助窗口中显示主题列。
DETAILS	备注型字段。在帮助窗口的第二个窗格中，显示帮助主题的详细内容。
CODE	字符型字段。用来给帮助主题分类的代码。在 Visual FoxPro 中不可用。
CODE 字段包含用来给每个记录分类的两个字母缩写，它可用来筛选帮助主题。下表列出了帮助的分类和它们的代码。

帮助类别	代码
通用型字段	General
命令	Command
函数	Function
系统内存变量	Sysmemvar
界面	Interface
字符	ch
兼容性	cm
配置	cf
数据转换	dc
日期和时间	dt
桌面附件	da
对话框	di
在 Visual FoxPro 中的增强方式	ex
环境	en
错误信息	em
错误和调试	er
事件句柄	eh
文件输入/输出	fi
文件管理	fm
通用	ge
索引	ix
界面	in
键盘和鼠标	km
逻辑	lo
低级	ll
内存变量和数组	mv
菜单	me
多用户	mu
数值	nu
打印	pr
程序运行	pe
结构化程序设计	sp
SQL	s
系统菜单名	sn
表（字段、索引、记录、关系）	db
文本合并	tm
新内容	wn
Windows	wi


请参阅

HELP，SET HELP，SET TOPIC


SET HOURS 命令

请参阅

将系统时间设置为 12-小时或 24-小时时间格式。

语法

SET HOURS TO [12 | 24]

说明

使用不带 12 或 24 的 SET HOURS TO 命令，将返回到默认的 12-小时时间格式。

TIME( ) 总是返回 24-小时时间格式的时间值，并且不受 SET HOURS 的影响。DATETIME( ) 函数的返回值格式由当前 SET HOURS 的设置决定。

参数

TO 12

（默认值）指定为 12-小时时间格式。

TO 24

指定为 24-小时时间格式。


请参阅

DATETIME( )，SECONDS( )，SET CLOCK，SET SYSFORMATS，TIME( )


SET INDEX 命令

请参阅

打开一个或多个索引文件，供当前表使用。

语法

SET INDEX TO [IndexFileList | ? ]
[ORDER nIndexNumber | IDXIndexFileName
| [TAG] TagName [OF CDXFileName] [ASCENDING | DESCENDING]]
[ADDITIVE]

参数

IndexFileList

指定要打开的一个或多个索引文件。在索引文件列表中，应使用逗号分隔多个索引文件。索引文件列表中，可包含任意个 .IDX 或 .CDX 索引文件名。除非有相同名字的 .IDX 或 .CDX 文件存在，否则没有必要包括文件扩展名。

索引文件列表中，第一个索引文件将成为主控索引文件，它控制记录的访问和显示。如果第一个索引文件是 .CDX 文件．并且没有发出 SET ORDER TO TAG 命令，则按记录的物理顺序显示和访问记录。

?

显示“打开”对话框，从这个对话框中可以打开单个的 .IDX 文件。

ORDER nIndexNumber

指定一个主控索引文件或标识，数值表达式 nIndexNumber 指定在索引文件列表中出现的索引文件。首先，按索引文件列表中出现的顺序给 .IDX 文件编号；然后，按照创建标识的先后顺序，对结构化的 .CDX 文件（如果存在的话）中的标识进行编号；最后，按照创建文件的顺序，对独立的 .CDX 文件中的标识进行编号。有关对索引文件和标识编号的详细内容，请参阅 SET ORDER。

如果 nIndexNumber 为 0，表中记录以物理顺序显示和访问，而索引文件保持打开状态。以物理顺序访问记录时，ORDER 0 能够更新打开的索引文件。不带参数的 ORDER 命令等价于 ORDER 0。

如果 nIndexNumber 大于 .IDX 文件和 .CDX 文件标识的数目，Visual FoxPro 产生出错信息。

ORDER IDXIndexFileName

指定一个 .IDX 索引文件作为主控索引文件。

ORDER [TAG] TagName [OF CDXFileName]

指定 .CDX 文件中的一个标识 (TagName) 做为主控标识。标识名来自结构化 .CDX 文件或打开的独立 .CDX 文件。

在打开的独立 .CDX 文件中，如果存在相同名称的标识，请使用 OF CDXFileName 指定标识所在的 .CDX 文件。

ASCENDING | DESCENDING

指定显示和访问表记录时，是以升序还是以降序进行。索引文件或索引标识不作任何变化，只改变记录显示和访问的顺序。请将 ASCENDING 或 DESCENDING 关键字紧跟在 ORDER 子句后面。

ADDITIVE

指定前面打开的一个索引文件，除了结构化复合索引，在发出 SET INDEX 命令打开另一个索引文件或表文件时关闭。没有 ADDITIVE 子句，会关闭所有前面打开的文件。

说明

在有索引文件的表中，记录的显示顺序和访问顺序可由某个索引文件来决定。使用 SET INDEX 可以打开单索引 ( .IDX) 和复合索引 ( .CDX) 文件。如果一个表有结构化的 .CDX 文件，打开表时该文件自动打开。

只有一个 .IDX 文件（主控索引文件）或 .CDX 中的标识（主控标识）控制表中记录的显示和访问顺序。某些命令（例如，SEEK）使用主控索引文件或主控索引标识来搜索记录。

执行不带参数的SET INDEX TO 命令，会关闭当前工作区中所有打开的索引文件（结构化 .CDX 文件除外）。


请参阅

CLOSE INDEXES，INDEX，SET ORDER，USE


SET INTENSITY 命令

请参阅

确定 Visual FoxPro 是否使用增强屏幕颜色属性显示字段。包含此命令是为了提供向后兼容性。可使用 SET COLOR OF SCHEME 代替。

语法

SET INTENSITY ON | OFF

参数

ON

（默认值）在 FoxPro for MS-DOS 中，ON 使用增强屏幕属性突出显示字段。

（默认值）在 Visual FoxPro 中，ON 指定用 @ ... GET 创建的编辑框的背景颜色由按钮表面的 Windows 颜色设置来决定。这个颜色可以通过选择 Windows 的控制面板上的“颜色”图标来改变。

OFF

指定显示编辑字段的常规屏幕属性。

说明

在 FoxPro for MS-DOS 中，SET INTENSITY 指定是否以增强屏幕属性显示与 @ ... GET、APPEND、BROWSE、CHANGE 或 EDIT 有关的字段。

在 Visual FoxPro 中，SET INTENSITY 指定是否以 Windows 的颜色设置来显示由 @ ... GET 创建的文本框。

在 FoxPro for Macintosh 中，忽略 SET INTENSITY。


请参阅

SET BLINK


SET KEY 命令

请参阅

根据索引关键字，指定访问记录的范围。

语法

SET KEY TO [eExpression1 | RANGE eExpression2 [, eExpression3]]
[IN cTableAlias | nWorkArea]

参数

eExpression1

允许使用相同的索引关键字访问一组记录。eExpression1 是单个索引关键字的值，所有索引关键字与 eExpression1 相匹配的记录都是可访问的。

RANGE eExpression2 [, eExpression3]

可以访问关键字值在一定范围内的记录。eExpression2 允许访问关键字大于等于 eExpression2 的记录，eExpression3 （前面用逗号分开）允许访问关键字值小于等于 eExpression3 的记录。对于同时包含 eExpression2 和 eExpression3 （用逗号分隔它们）的 SET KEY 命令，其允许访问大于等于 eExpression2 且小于等于 eExpression3 的所有记录。

例如，CUSTOMER 表中有一个包含美国邮政编码的字符字段。如果该表在此字段上建立索引，就可以使用 SET KEY 来指定邮政编码的范围。

这个示例中，只有邮政编码在 43000 到 43999 范围内的记录出现在浏览窗口中。

CLOSE DATABASES

USE customer

SET ORDER TO zip

SET KEY TO '43000', '43999'

IN cTableAlias | nWorkArea

在指定工作区内打开的表中，允许访问一定范围的记录。cTableAlias 指定工作区的别名，nWorkArea 指定工作区的编号。如果没有指定的表别名，Visual FoxPro 产生错误信息；如果省略工作区别名和编号，SET KEY 仅对当前选定工作区中的表进行操作。

说明

使用 SET KEY 限制表中可以访问的记录范围。表必须建立了索引，并且指定的索引关键字值必须与主索引文件或主标识的索引表达式有相同的数据类型。

发出不带任何参数的 SET KEY TO 命令，可以恢复访问表中所有记录。


请参阅

INDEX，KEY( )，SET FILTER


SET KEYCOMP 命令

请参阅

控制 Visual FoxPro 的键击定位。

语法

SET KEYCOMP TO DOS | WINDOWS | MAC

说明

仅用于 Visual FoxPro 和 FoxPro for Macintosh。

SET KEYCOMP 决定用来访问 Visual FoxPro 界面上控制（诸如按钮、列表框、菜单等）的键击和键击组合，SET KEYCOMP 的作用与控制有关。

当想使用自已熟悉的键击时，请使用 SET KEYCOMP。

要使用 MS-DOS 的键击访问 Windows 或 Macintosh 的界面，请发出：

SET KEYCOMP TO DOS

要使用 Windows 的键击访问 Macintosh 的界面，请发出：

SET KEYCOMP TO WINDOWS

在 Visual FoxPro 中，可以指定 DOS 或WINDOWS（默认值）选项。

在 FoxPro for Macintosh 中，可以指定 DOS、WINDOWS 或 MAC（默认值）选项。

可以在 Visual FoxPro 的配置文件 CONFIG.FPW ( Visual FoxPro ) 或CONFIG.FPM ( FoxPro for Macintosh ) 中指定 SET KEYCOMP 启动设置。例如，把下面一行放在配置文件中，与 SET KEYCOMP TO DOS 效果相同。

KEYCOMP = DOS

Visual FoxPro

这部分描述 DOS 和 WINDOWS 选项如何影响 Visual FoxPro。

默认按钮

DOS

对话框中的默认按钮具有焦点，并且它的外观不变化。当按 Ctrl+Enter 时，会选定它。

WINDOWS

当在控制中移动活动焦点时，对话框中的默认按钮外观可能变化：它可能变暗，或拥有焦点（四周是粗体黑边）来指示它是当前默认按钮。按 Enter 键可以选定默认按钮，并且总是执行默认按钮的操作。

为了说明对话框中默认按钮是如何改变外观的，请发出 SET KEYCOMP TO WINDOWS 命令，然后按 Tab 键进入“打开”对话框。

访问键

DOS

控制的访问键是一个单键。如果不在一个有键盘控制的控制（组合框或列表框）中，可以按快捷键来选择它。

WINDOWS

控制的访问键既可以是单键，也可以是一个组合键。如果当前控制有键盘控制（组合框或列表框），可以按 Alt 加上快捷键来选择该控制。要选择其他控制，可以按快捷键或 Alt 加上快捷键。

组合框

DOS

当组合框有焦点时，可以按 Enter 键或 Spacebar 键打开它，在组合框没有打开之前，组合框中的键盘控制不可用。

WINDOWS

当组合框有焦点时，可以通过按 Spacebar、Alt+Up Arrow 或 Alt+Down Arrow 来打开它。当组合框有焦点或已打开时，可以使用组合框的键盘控制。例如，选定的组合框包含一列可用的驱动器。如果驱动器 B 是当前驱动器，且驱动器 A、B 和 C 可以使用，可以在没有打开组合框时，按 C 或 Down Arrow 键来选择驱动器 C。

选项按钮

DOS

当选中了一组选项按钮，想在选项按钮之间移动时，按 Tab 键。

WINDOWS

当选中了一组选项按钮时，想从选项按钮移动到其他控制时，按 Tab 键。要在选项按钮组中移动，按 Up Arrow 和 Down Arrow 键。

浏览窗口

DOS

当输入字段时，不选中字段。

WINDOWS

当输入字段时，自动选中字段。

FoxPro for Macintosh

这部分描述 DOS、WINDOWS 和 MAC 选项如何影响 FoxPro for Macintosh。

默认按钮

DOS

对话框中的默认按钮具有焦点，并且它的外观不变化，当按 Ctrl+Enter 时，选定它。

MAC

对话框中的默认按钮具有焦点，并且它的外观不变化，当按 Enter 时选定它。但是，如果编辑框是活动控制时按下 Enter 键，插入点移到编辑框中的下一行。在编辑框中，按 Ctrl+Enter 选定默认按钮。

WINDOWS

对话框中的默认按钮具有焦点，并且它的外观不变化，当按 Enter 或 Ctrl+Enter 时选定它。但是，如果编辑框是活动控制时按下 Enter 键，插入点移到编辑框中的下一行。在编辑框中，按 Ctrl+Enter 选定默认按钮。

访问键

DOS

访问键有下划线。当按下适当的访问键，将选中对话框中的控制。如果在组合框、列表框、文本框或编辑框中，按对应控制的访问键不能选中控制。

MAC

访问键无下划线。但是，对于对话框中的多数控制，都可使用访问键。(必须发出 SET KEYCOMP TO DOS 或 SET KEYCOMP TO WINDOWS 命令决定访问键。）在列表框、文本框或编辑框中，不能按相应的访问键选定一个控制。

WINDOWS

访问键有下划线。按下适当的访问键时，可选中对话框中的控制。在列表框、文本框或编辑框中，可以按 Alt 键加访问键来选中控制。但是，在组合框中不能使用访问键来选择一个控制或一项菜单。

组合框

DOS

当组合框有焦点时，可以按 Enter 键或 Spacebar 键打开它。在组合框没有打开之前，组合框中的键盘控制不可用。

MAC

组合框不能有焦点。必须单击组合框才能打开它。

WINDOWS

当组合框有焦点时，可以通过按 Spacebar、Alt+Up Arrow 或 Alt+Down Arrow 打开它；当组合框有焦点同时已打开时，可以使用组合框的键盘控制。例如，选定的组合框包含一列可用的驱动器。如果驱动器 B 是当前驱动器，且驱动器 A、B 和 C 可以使用，可以在没有打开组合框时，按 C 或 Down Arrow 键来选择驱动器 C。

选项按钮

DOS

按 Enter 键或 Spacebar 键选中一个有焦点的选项按钮。

MAC

选项按钮不能有焦点，必须单击选项按钮才能选中它。

WINDOWS

按 Spacebar 键选中具有焦点的选项按钮。

复选框

DOS

按 Enter 键或 Spacebar 键，选中具有焦点的复选框。

MAC

复选框不能有焦点，必须单击复选框才能选中它。

WINDOWS

按 Spacebar 键，选中具有焦点的复选框。

焦点

DOS

按下 Tab 或 Shift+Tab，焦点将移到下一个控制或前一个控制上。

MAC

只有列表框和文本框可有焦点。按下 Tab 或 Shift+Tab，焦点将移到下一个或前一个列表框或文本框上。

WINDOWS

按下 Tab 或 Shift+Tab，焦点将移到下一个控制或前一个控制上。

激活系统菜单

DOS

按 F10 或 Alt 激活 Visual FoxPro 系统菜单。

MAC

按 F10 或 [image] +0 激活 Visual FoxPro 系统菜单。

WINDOWS

按 F10 或 Alt 激活 Visual FoxPro 系统菜单。

列表框中的多重选择

DOS

要在列表框中选择多个不连续的项，使用 Spacebar 选择项时请按下 Shift 键；要选择连续的各项时，先选择一项，然后按下 Shift 键，再使用 UP Arrow 和 Down Arrow 来选择。

MAC

要在列表框中选择多个不连续的项，使用 Spacebar 选择项时请按下 Shift 键；要选择连续的各项时，先选择一项，然后按下 Shift 键，再使用 UP Arrow 和 Down Arrow 来选择。

WINDOWS

要从列表框中选择多个不连续的项，使用 Spacebar 选择项时请按下 Ctrl 键；要选择连续的各项时，先选择一项，然后按下 Shift 键，再使用 UP Arrow 和 Down Arrow 来选择。也可以用以下方式选择连续的项：先用 Spacebar 选择一项，然后，按 UP Arrow 和 Down Arrow 键到最后一个要选择的项，再按 Shift+Spacebar。


请参阅

SET COMPATIBLE


SET LIBRARY 命令

请参阅

打开一个外部的 API（应用程序接口）库文件。

语法

SET LIBRARY TO [FileName [ADDITIVE]]

参数

FileName

指定要打开的 API 库文件名或过程文件名。

FoxPro for MS-DOS 中，假定库文件有 .PLB 扩展名。如果库文件有 .PLB 扩展名，就不必在文件名中写入扩展名；如果库文件的扩展名不是 .PLB，就必须在文件名中写上扩展名。

Visual FoxPro 和 FoxPro for Windows 中，假定库文件有 .FLL 扩展名。如果库文件有 .FLL 扩展名，就不必在文件名中写入扩展名；如果库文件的扩展名不是 .FLL，就必须在文件名中写上扩展名。

FoxPro for Macintosh 中，假定库文件有 .MLB 扩展名。如果库文件有 .MLB 扩展名，就不必在文件名中写入扩展名；如果库文件的扩展名不是 .MLB，就必须在文件名中写上扩展名。

重要内容

•	   在一个平台上，不能使用在其他平台上建立的 API 库。例如，为 FoxPro for MS-DOS 建立的库，就不能在 Visual FoxPro 中使用；为 Visual FoxPro 建立的库，则不能在 FoxPro for MS-DOS 中使用。

 •	   在一个版本中，不能使用另一个版本的 API 库。例如，在 Visual FoxPro 中，不能使用 FoxPro for Windows 建立的库，必须用 Visual FoxPro 专业版重新编译并链接。

Visual FoxPro 假定过程文件的扩展名为 .PRG。

当使用 DO ProcedureName 执行一个过程时，Visual FoxPro 以如下顺序在下列文件中查找过程：

1.	在包含 DO ProcedureName 命令的文件中进行查找。

2.	使用 SET PROCEDURE 命令打开的过程文件（如果存在的话）。

3.	在执行链中的程序。Visual FoxPro 从最近执行的程序中开始查找程序文件，一直查到第一个执行程序。

4.	使用 SET LIBRARY 命令打开的过程文件（如果设置过）。

5.	单独的程序文件。如果 Visual FoxPro 找到一个与 DO 指定的文件名相同的程序文件时，执行这个程序；如果找不到匹配的程序文件名，Visual FoxPro 产生出错信息。

ADDITIVE

打开附加的 API 库。ADDITIVE放在 SET LIBRARY 命令中文件名后面。

当使用 SET LIBRARY 打开一个过程文件时，Visual FoxPro 忽略 ADDITIVE 子句。

说明

使用 SET LIBRARY 打开外部应用程序接口 (API) 库或过程文件。

API 例程库可以增强 Visual FoxPro 语言能力和用户界面。如果打开一个外部 API 库，就可以象使用 Visual FoxPro 函数一样使用 API 函数。要显示库中可用的函数，请使用 DISPLAY STATUS 或 LIST STATUS 命令。

在 Visual FoxPro 专业版中，可以使用已有 API 函数，也可以创建自已的 API 库。

要从内存中移去所有 API 函数，请使用不包括 FileName 和 ADDITIVE 的 SET LIBRARY TO 命令；要从内存中移去单个库，请使用 RELEASE LIBRARY LibraryName 命令。

如果指定过程文件，那么所有程序都可使用过程文件中的过程，并且也可以在命令窗口中，以交互方式使用这些过程。

附注

Visual FoxPro 使用 SET LIBRARY 打开过程文件的功能与 dBASE IV 兼容。使用 SET LIBRARY 打开过程文件会关闭所有打开的 API 库。使用 SET LIBRARY 打开 API 库会关闭用 SET LIBRARY 打开的过程文件，请使用 SET PROCEDURE 打开过程文件，防止关闭 API 库。

有关过程文件的详细内容，请参阅 PROCEDURE 和 SET PROCEDURE。


请参阅

CALL，DISPLAY STATUS，LIST，LOAD，RELEASE


SET LOCK 命令

请参阅

激活或废止在某些命令中的自动文件锁定。

语法

SET LOCK ON | OFF

参数

ON

当执行下列命令时，指定具有自动锁定表的功能。这时，网络上的其他用户只能读该表，因此确保您使用的是最新的数据。

OFF

（默认值）使下列命令能以共享方式访问表。如果不必从表中获得最新的信息，请使用 SET LOCK OFF。

说明

在执行需要只读访问表的命令时，Visual FoxPro 不对文件加锁。这些命令如下：

AVERAGE	JOIN (多个文件)
CALCULATE	LIST
COPY TO	LABEL
COPY TO ARRAY	REPORT
COUNT	SORT
DISPLAY（在一定范围内）	SUM
INDEX	TOTAL
当执行这些命令时，不改变表中的内容，并且访问表时，网络上的其他用户也可以访问该表。当使用这些命令时，表可以被其他用户更改。例如，在其他用户改变在报表中的记录前，您可以使用 REPORT 命令打印报表。但是，报表中就包含了过时信息。

SET LOCK 的作用域是当前数据工作期。


请参阅

FLOCK( )，LOCK( )，RLOCK( )，SET DATASESSION，SET MULTILOCKS


SET LOGERRORS 命令

请参阅

决定 Visual FoxPro 是否将编译错误信息送入文本文件。

语法

SET LOGERRORS ON | OFF

参数

ON

（默认值）创建与被编译的程序有相同文件名，扩展名为 .ERR 的编译错误信息日志文件。如果存在相同名称的日志文件，将改写它。

OFF

编译程序时，不创建编译错误信息日志文件。

说明

编译程序时，可使用 SET LOGERRORS 命令将编译错误信息保存到文本文件中。

如果存在与被编译程序相同名称的日志文件，并且程序编译没有错误，删除日志文件。


请参阅

COMPILE


SET MACDESKTOP 命令

请参阅

在 FoxPro for Macintosh 中，为 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中创建的应用程序提供窗口兼容性。

语法

SET MACDESKTOP ON | OFF

参数

ON

（默认值）指定窗口驻留在 Macintosh 桌面上，窗口与 FoxPro for Macintosh 主窗口驻留在同一级上。这种窗口可以移到 FoxPro for Macintosh 主窗口的外面，还可以用 FoxPro for Macintosh 主窗口把它隐藏起来。

OFF

指定窗口驻留在 Macintosh 窗口上，窗口不可移到 FoxPro for Macintosh 主窗口的外面。当 SET MACDESKTOP 设置为 OFF 时，窗口的操作与在 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for MS-DOS 中的操作一样。因此，当运行在 Visual FoxPro、FoxPro for Windows、FoxPro for MS-DOS 或 FoxPro for Macintosh 中创建的应用程序时，请确保 SET MACDESKTOP 的设置为 OFF。这样，应用程序中窗口的操作才会同它们在 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for MS-DOS 中一样。

说明

仅用于 FoxPro for Macintosh。

SET MACDESKTOP 确保在 Visual FoxPro、FoxPro for Windows、和 FoxPro for MS-DOS 中创建的应用程序窗口在 FoxPro for Macintosh 中能够正确地运行。

SET MACDESKTOP 指定 FoxPro 系统窗口和用户自定义窗口是否放在 FoxPro主窗口或者Macintosh 桌面上。系统窗口的示例有查看窗口、浏览窗口和表单设计器窗口，用户自定义窗口由 DEFINE WINDOW 创建。

附注

默认情况下，命令窗口放在 Macintosh 的桌面上，且忽略 SET MACDESKTOP 设置。要将命令窗口放在 FoxPro for Macintosh 主窗口中，请发出 ACTIVATE WINDOW COMMAND IN SCREEN 命令。

SET MACDESKTOP 确定窗口操作，该窗口不是用 IN SCREEN、IN DESKTOP 或 IN MACDESKTOP 这些子句定义、激活或打开的。如果包括它们，IN SCREEN、IN DESKTOP 或 IN MACDESKTOP 这些子句确定窗口操作。例如，如果发出 SET MACDESKTOP ON 后，再发出 ACTIVATE WINDOW PUZZLE IN SCREEN，那么在 FoxPro 主窗口上激活拼图板 (PUZZLE)。这里，IN SCREEN 子句改写 SET MACDESKTO 的设置。

IN SCREEN 将一个窗口放在 Visual FoxPro 主窗口中；IN MACDESKTOP 将一个窗口放在 Macintosh 桌面上，同时 Visual FoxPro 主窗口隐藏此窗口。IN DESKTOP（只有在 DEFINE WINDOW 命令中用到）将一个用户自定义窗口放在 Visual FoxPro 主窗口中，同时 Visual FoxPro 主窗口不能隐藏此窗口。

下表列出了支持 IN SCREEN 和IN MACDESKTOP 子句的命令。

ACTIVATE WINDOW	HIDE WINDOW
BROWSE	MODIFY COMMAND
CHANGE	MODIFY FILE
CREATE LABEL	MODIFY GENERAL
CREATE MENU	MODIFY LABEL
CREATE PROJECT	MODIFY MEMO
CREATE REPORT	MODIFY MENU
CREATE FORM	MODIFY PROJECT
DEFINE WINDOW	MODIFY REPORT
EDIT	MODIFY SCREEN
HELP*	SHOW WINDOW
* 仅用于 .DBF - 样式帮助中


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，MODIFY WINDOW


SET MACHELP 命令

请参阅	示例

对帮助菜单中的“Microsoft FoxPro 帮助”菜单项进行操作。

语法

SET MACHELP DISABLE | ENABLE | PROMPT [cMenuItemText]

参数

DISABLE

废止“Microsoft FoxPro 帮助”菜单项。废止后，“Microsoft FoxPro 帮助”菜单项仍保留在帮助菜单中，但是变暗不能选择。

ENABLE

当“Microsoft FoxPro 帮助”菜单项被 SET MACHELP DISABLE 命令废止时，可以用此参数启用它。

PROMPT

未指定参数 cMenuItemText 时，对帮助菜单项使用默认文本“Microsoft FoxPro 帮助”。

cMenuItemText

指定相对于“Microsoft FoxPro 帮助”菜单项的用户自定义文本。

说明

仅用于 FoxPro for Macintosh。

要在应用程序中使用自定义的帮助系统，请与 ON MACHELP 一起使用 SET MACHELP 命令。


* 这个示例用自定义的帮助菜单项代替了帮助菜单中的
*  “Microsoft FoxPro 帮助”菜单项。选择该菜单项时，执行
*  ON MACHELP中的 WAIT 命令，并弹出一窗口。
*

SET MACHELP PROMPT 'My Application Help...'

ON MACHELP WAIT WINDOW "This is My Application's Help"


请参阅

ON APLABOUT，ON MACHELP，SET APLABOUT，SET HELP


SET MACKEY 命令

请参阅

指定显示“宏键定义”对话框的单个键或组合键。

语法

SET MACKEY TO [KeyLabelName]

参数

KeyLabelName

指定显示“宏键定义”对话框的单个键或组合键。有关如何使用键标记的详细内容，请参阅 ON KEY LABEL。

说明

用 SET MACKEY 可改变显示“宏键定义”对话框的默认组合键。默认情况下，按 SHIFT+F10 显示“宏键定义”对话框。在 FoxPro for Macintosh 中，按 SHIFT+ [image] +0（数值键盘上的 0）可以显示该对话框。

如果使用了 SET MACKEY TO 命令，而且没有指定单个键名或组合键，则不能通过按单个键或按组合键来激活“宏键定义”对话框。


请参阅

CLEAR，ON KEY LABEL，PLAY MACRO，RESTORE MACROS，SAVE MACROS


SET MARGIN 命令

请参阅

设置打印的左页边距，对所有定向到打印机的输出结果都起作用。

语法

SET MARGIN TO nColumns

参数

nColumns

以列为单位指定左页边距。默认的左页边距为 0 列，最大的左页边距为 256 列。

说明

如果使用 SET MARGIN 调节左页边距，那么由 SET MARGIN 指定的值将存入系统内存变量 _PLOFFSET 中。也可以直接给 _ PLOFFSET 变量赋值，来设置左页边距的大小。

系统内存变量 _LMARGIN 的值同样影响左页边距的设置。

重要内容

对于报表设计器创建，用 REPORT 命令运行的报表，由 SET MARGIN 指定的左页边距对其不产生影响。尽管系统内存变量 _PLOFFSET 的值在报表（由报表设计器创建的报表）运行期间可以调整，但是当报表运行结束后，该变量将重置为原来的值。在报表设计器的“页面设置”对话框中，有一个“左页边距”设置项，这一设置将决定打印时纸左边的空白大小。可以在使用报表设计器时，从“文件”菜单中选择“页面设置”菜单项显示“页面设置”对话框。


请参阅

_LMARGIN，_PLOFFSET


SET MARK OF 命令

请参阅

为菜单标题或菜单项指定标记字符，或者指定显示还是清除该标记字符。

语法

SET MARK OF MENU MenuBarName1
TO cMarkCharacter1 | TO lExpression1
 — 或者 —
SET MARK OF PAD MenuTitleName OF MenuBarName2
TO cMarkCharacter2 | TO lExpression2
 — 或者 —
SET MARK OF POPUP MenuName1
TO cMarkCharacter3 | TO lExpression3
 — 或者 —
SET MARK OF BAR nMenuItemNumber OF MenuName2
TO cMarkCharacter4 | TO lExpression4

参数

MENU MenuBarName1

菜单栏名称，此函数为之指定、显示或者清除标记字符。

TO cMarkCharacter1

仅用于 FoxPro for MS-DOS。

指定 MenuBarName1 菜单栏中所有菜单标题的标记字符。如果 cMarkCharacter1 中包含多个字符，则其中的第一个字符作为标记字符。

TO lExpression1

显示或清除菜单栏中每个菜单标题的标记字符。如果逻辑表达式 lExpression1 的值为真 (.T.)，那么标记字符在每个菜单标题的旁边显示；如果逻辑表达式 lExpression1 的值为假 (.F.)，则从每个菜单标题的旁边清除标记字符。

PAD MenuTitleName OF MenuBarName2

仅用于 FoxPro for MS-DOS。指定菜单标题名字（以及包含该菜单标题的菜单栏名字），为此菜单栏指定、显示或者清除标记字符。

TO cMarkCharacter2

指定菜单标题的标记字符。

TO lExpression2

显示或清除菜单标题的标记字符。如果逻辑表达式 lExpression2 的值为真 (.T.)，则显示标记字符；如果逻辑表达式 lExpression2 的值为假 (.F.)，则清除标记字符。

POPUP MenuName1

指定菜单名字，为此菜单栏指定、显示或者清除标记字符。

TO cMarkCharacter3

仅用于 FoxPro for MS-DOS。

为 MenuName1 菜单中的所有菜单项指定标记字符。如果 cMarkCharacter3 中包含多个字符，则第一个字符用作标记字符。

TO lExpression3

显示或清除所有菜单项的标记字符。如果逻辑表达式 lExpression3 的值为真 (.T.)，则显示标记字符；如果逻辑表达式 lExpression3 的值为假 (.F.)，则清除标记字符。

BAR nMenuItemNumber OF MenuName2

指定菜单项编号（以及包含该菜单项的菜单名），为此菜单栏指定、显示或者清除标记字符。

TO cMarkCharacter4

仅用于 FoxPro for MS-DOS。

指定用于菜单项的标记字符。

TO lExpression4

显示或清除菜单项的标记字符。如果逻辑表达式 lExpression4 的值为真 (.T.)，显示标记字符；如果逻辑表达式 lExpression4 的值为假 (.F.)，清除标记字符。

说明

在 Visual FoxPro 和 FoxPro for Macintosh 中，不能指定菜单标题或者菜单项的标记字符，它们的标记字符只能是复选标记 ( [image])。不过，可以使用 SET MARK OF 来显示或清除菜单标题和菜单项的标记。

在 FoxPro for MS-DOS 中，既可以指定显示或清除标记字符，也可以指定采用何种标记字符。

使用 DEFINE POPUP PROMPT 子句( FIELD，FILES，或 STRUCTURE) 创建的菜单项都不能标记。

使用 MRKPAD( ) 可确定菜单标题是否有一个显示的标记字符；使用 MRKBAR( ) 可确定菜单项是否有一个显示的标记字符。

有关使用 SET MARK OF 的例子，请参阅 CNTBAR( )。


请参阅

CNTBAR( )，CNTPAD( )，DEFINE BAR，DEFINE MENU，DEFINE PAD，DEFINE POPUP，MRKBAR( )，MRKPAD( )


SET MARK TO 命令

请参阅

指定显示日期表达式时所使用的分隔符。

语法

SET MARK TO [cDelimiter]

参数

cDelimiter

指定想使用的日期分隔字符。

说明

SET MARK TO 用来分隔显示日期中的年、月、日的字符。

不带 cDelimiter 参数使用 SET MARK TO 时，可将分隔符重置为默认的正斜杠符( / )。

SET MARK TO 的作用范围是当前数据工作期。


请参阅

SET DATASESSION，SET DATE，SET SYSFORMATS


SET MEMOWIDTH 命令

请参阅

指定备注字段和字符表达式的显示宽度。

语法

SET MEMOWIDTH TO nColumns

参数

nColumns

指定宽度值，范围在 8 到 1024 列之间，默认的输出宽度是 50 列。如果执行 SET COMPATIBLE ON 或者 SET COMPATIBLE DB4 命令，默认的宽度改为 80 列。如果指定的 nColumns 大于 1024，则宽度将设置为 1024。

说明

SET MEMOWIDTH 指定 ? | ??、DISPLAY 或 LIST 等命令在 Visual FoxPro 主窗口或用户自定义窗口中的输出宽度。它影响长度大于 1024 个字符的备注字段和字符表达式的输出，还影响 ATCLINE( )、ATLINE( )、MEMLINE( ) 和 MLINE( ) 等函数的返回值。

注意：? 和 ?? 的显示宽度不能超过 256 个字符。

在 Visual FoxPro 和 FoxPro for Macintosh 中，如果输出定向到 Visual FoxPro 主窗口，输出的宽度由 Visual FoxPro 主窗口的字体决定；如果输出定向到用户自定义窗口，输出的宽度由用户自定义窗口的字体决定。

SET MEMOWIDTH 的作用范围是当前工数据作期。


请参阅

ATCLINE( )，ATLINE( )，MEMLINES( )，MLINE( )，SET DATASESSION


SET MESSAGE 命令

请参阅

定义在 Visual FoxPro 主窗口或图形状态栏中显示的信息，或者指定有关用户自定义菜单栏和菜单命令的信息位置。

语法

SET MESSAGE TO [cMessageText]
 — 或者 —
SET MESSAGE TO [nRow [LEFT | CENTER | RIGHT]]
 — 或者 —
SET MESSAGE WINDOW [WindowName]

参数

TO [cMessageText]

指定要显示的信息。

TO [nRow [LEFT | CENTER | RIGHT]]

指定信息在 Visual FoxPro 主窗口中的位置。nRow 表示信息所在的行。如果 nRow 为 0，则不显示信息。

LEFT、CENTER 和 RIGHT 指定信息在屏幕水平方向上的位置。

对于 Visual FoxPro 和 FoxPro for Macintosh，当图形状态栏处于活动状态（已显示出来）时，SET MESSAGE 指定的信息位置将被忽略。

WINDOW [WindowName]

指定显示信息的窗口。要从窗口中除去信息，同时在屏幕上显示信息，可发出 SET MESSAGE WINDOW 命令。

说明

可用 SET MESSAGE 建立提示信息，也可用它为一些命令指定显示信息的位置，如 DEFINE BAR、DEFINE MENU、DEFINE PAD 以及 DEFINE POPUP。

对于 FoxPro for MS-DOS，默认情况下信息显示在 FoxPro 主窗口的最后一行。

在 Visual FoxPro 和 FoxPro for Macintosh 中，如果显示的状态栏是基于字符的，信息默认显示在 Visual FoxPro 主窗口的最后一行；如果显示的状态栏是图形状态栏，那么信息显示在该状态栏中。

一旦发出 SET DISPLAY 命令，SET MESSAGE 行将重置为 Visual FoxPro 主窗口的最后一行。

在 Visual FoxPro 和 FoxPro for Macintosh 中，不带任何参数的 SET MESSAGE TO 命令把信息显示在图形状态栏中。


请参阅

SET DISPLAY，SET STATUS，SET STATUS BAR


SET MOUSE 命令

请参阅

设置鼠标能否使用，并控制鼠标的灵敏度。

语法

SET MOUSE ON | OFF
 — 或者 —
SET MOUSE TO [nSensitivity]

参数

ON

启用鼠标。

OFF

废止鼠标。

TO [nSensitivity]

控制鼠标的灵敏度。nSensitivity 的值可控制鼠标指针响应鼠标移动的快慢。nSensitivity 值的范围是 1 到 10，1 最迟钝，10 最灵敏，nSensitivity 的默认值是 5。

说明

仅用于 FoxPro for MS-DOS。

在 Visual FoxPro 和 FoxPro for Macintosh 中，忽略 SET MOUSE 命令。对于 Visual FoxPro，可以使用 Windows 的控制面板调整鼠标；对于 FoxPro for Macintosh，可以使用“鼠标控制面板”调整鼠标。


请参阅

_DBLCLICK


SET MULTILOCKS 命令

请参阅

决定能否使用 LOCK ( )或 RLOCK ( ) 锁定多个记录。

语法

SET MULTILOCKS ON | OFF

参数

ON

允许尝试锁定一组记录。如果在 LOCK ( ) 或 RLOCK ( ) 中包含一组记录号，就可以来锁定多个记录。

OFF

（默认情况）允许尝试用 LOCK ( ) 或 RLOCK ( ) 来锁定单个记录。

说明

在网络上以共享方式打开一个表时，可以来锁定该表中的多个记录，SET MULTILOCKS 的设置决定锁定单个记录还是多个记录。可以用函数 LOCK( ) 或 RLOCK( ) 锁定记录。

附注

SET MULTILOCKS的设置由 ON 切换到 OFF，或由 OFF 切换到 ON，都隐含执行了 UNLOCK ALL 命令，即对所有工作区内的所有记录解除锁定。

SET MULTILOCKS 的作用范围是当前数据工作期。

对于 Visual FoxPro，在使用 CURSORSETPROP( ) 启用行缓冲或表缓冲以前，MULTILOCKS 必须是 ON。有关行缓冲和表缓冲的详细内容，请参阅 CURSORSETPROP( )。

如果选定了“工作区属性”对话框中的“允许数据缓冲”复选框（选择查看窗口中的“属性”按钮时，显示“工作区属性”对话框），那么当前数据工作期的 MULTILOCKS 将自动设置为 ON。但是，如果清除“允许数据缓冲”复选框，却不会对当前数据工作期的 MULTILOCKS 设置为 OFF。

有关网络上记录和文件的锁定以及共享表的详细内容，请参阅 LOCK( ) 和 RLOCK( ) 函数和《开发指南》第十九章“共享访问程序设计”。


请参阅

CURSORSETPROP( )，LOCK( )，RLOCK( )，SET DATASESSION


SET NEAR 命令

请参阅

FIND 或 SEEK 查找记录不成功时，确定记录指针停留的位置。

语法

SET NEAR ON | OFF

参数

ON

当使用 FIND 或 SEEK 查找记录不成功时，将记录指针放在最相近的记录上。使用此设置时，RECNO( ) 将返回最邻近的记录号，FOUND( ) 返回“假”(.F.)，EOF( ) 也返回“假”。

OFF

（默认值）当使用 FIND 或 SEEK 查找记录不成功时，将记录指针放在表的尾部。使用此设置时，RECNO( ) 将表中记录的数目加 1 再返回，FOUND( ) 返回“假”(.F.)，EOF( )返回“真”(.T.)。

说明

当没有记录满足查找条件时，查找不成功。

如果查找不成功，则不论 SET NEAR 的设置如何，使用 0 作为参数的 RECNO ( ) 命令都将返回最邻近记录的记录号。

SET NEAR 的作用范围为当前数据工作期。


请参阅

EOF( )，FIND，FOUND( )，RECNO( )，SEEK，SET DATASESSION


SET NOCPTRANS 命令

请参阅

防止把已打开表中的选定字段转换到另一个代码页。

语法

SET NOCPTRANS TO [FieldName1 [, FieldName2 ...]]

参数

TO [FieldName1 [, FieldName2 ...]]

指定不能转换到其他代码页的字段。

如果发出 SET NOCPTRANS TO 命令时未指定字段名系列，就将把表中所有字符字段和备注字段返回到默认的代码页转化方式（由 CODEPAGE 配置项建立）。使用 SET (“NOCPTRANS”) 可以返回最近一次发出的 SET NOCPTRANS 命令所指定的字段。使用 CHR( ) 函数可确保单个字符不被转化。

说明

可以设置 Visual FoxPro，使其将字符字段和备注字段自动转化到其他代码页，因此可以使用 SET NOCPTRANS 来防止自动转化包含二进制数据的字段。例如，一个备注字段可能包含 Microsoft Word 文档。当您访问这个文档时，希望文档以它原来的、没有转化的形式存在，这时可使用 SET NOCPTRANS 指定不能转化的备注字段。

如果字符或备注字段中包含的二进制数据没有转化，就没有必要在访问这些数据之前使用 SET NOCPTRANS 命令。在 Visual FoxPro 配置文件中，省略 CODEPAGE 配置项可以确保字符字段和备注字段不被转化。

有关代码页和 Visual FoxPro 国际支持的详细内容，请参阅 Visual FoxPro 支持的代码页，和《开发指南》第二十章“开发国际应用程序”。


请参阅

CPCONVERT( )，CPCURRENT( )，CPDBF( )，MODIFY COMMAND，MODIFY FILE


SET NOTIFY 命令

请参阅

确定是否显示某种系统信息。

语法

SET NOTIFY ON | OFF

参数

ON

（默认值）启用某些系统信息的显示。

OFF

废止某些系统信息的显示。

说明

SET NOTIFY 影响的系统信息例子有：

 •	   “表达式生成器”对话框中的“表达式有效”。

 •	   当取消程序运行时出现的“执行已取消”。

在 FoxPro for MS-DOS 中，系统信息显示在 Visual FoxPro 主窗口右上角的一个窗口中。

在 Visual FoxPro 和 FoxPro for Macintosh 中，系统信息显示在 Visual FoxPro 主窗口底边的图形（不基于字符）状态栏中。


请参阅

SET MESSAGE，WAIT


SET NULL 命令

请参阅	示例

确定 ATLTER TABLE、CREATE TABLE 和 INSERT - SQL 命令如何处理 null 值。

语法

SET NULL ON | OFF

参数

ON

指定由 ALTER TABLE 和 CREATE TABLE 所创建表的所有列都允许 null 值。在列定义中加入 NOT NULL 子句使该列不接受 null 值。

另外，参数 ON 还指定 INSERT - SQL 语句把 null 值加入到 INSERT - SQL VALUE 子句中没有包括的列中。INSERT - SQL 只将 null 值插入到允许 null 值的列中。

OFF

（默认值）指定由 ALTER TABLE 和 CREATE TABLE 所创建表的所有列都不允许 null 值。在列定义时可以在 ALTER TABLE 和CREATE TABLE 中加入 NULL 子句使列接受 null 值。

另外，参数 OFF 还指定 INSERT - SQL 语句把空值加入到 INSERT - SQL VALUE 子句没有包括的列中。

说明

SET NULL 只影响 ALTER TABLE、CREATE TABLE 和 INSERT - SQL 语句是否支持 null 值。其他命令不受 SET NULL 的影响。

SET NULL 的作用范围是当前数据工作期。


* 下面的示例说明了 SET NULL 如何影响 null 值。
*  第一个表 employee 在 SET NULL ON 时创建，因此
*  该表的各个字段支持 null 值。用 REPLACE 在 cLastName
*  字段中加入  null  值。第二个表 staff 在 SET NULL OFF
*  时创建，因此它的各字段不支持  null  值。用 REPLACE
*  在 cLastName 字段中加入 0 值。

CLOSE DATABASES

SET NULL ON  && 字段支持 null 值

CREATE TABLE employee (cLastName C(20), ySalary Y(12,2))

APPEND BLANK  && 添加一个新的空记录

REPLACE cLastName WITH .NULL.  && cLastName 支持 null 值

SET NULL OFF  && 字段不支持 null 值

CREATE TABLE staff (cLastName C(20), ySalary Y(12,2))

APPEND BLANK  && 添加一个新的空记录

REPLACE cLastName WITH 0  && 不支持 null 值


请参阅

ALTER TABLE，CREATE TABLE，INSERT - SQL，ISNULL( )，NVL( )，SET DATASESSION


SET ODOMETER 命令

请参阅

对处理记录的各命令指定记录计数器的报告间隔。

语法

SET ODOMETER TO [nRecords]

参数

TO [nRecords]

以记录数为单位指定汇报间隔。nRecords 的值范围为 1 到 32767 个记录。nRecords 的默认值为 100 个记录。

说明

Visual FoxPro 可以每隔一段时间显示已处理记录数的信息，SET ODOMETER 用来改变这个汇报信息的间隔。

例如，在执行 COPY TO 命令时会显示拷入到新文件中的记录数。可以通过发出 SET TALK OFF 命令来关闭记录记数器。


请参阅

SET TALK，_TALLY


SET OLEOBJECT 命令

请参阅

Visual FoxPro 找不到对象时，指定是否在 Windows Registry 中查找。

语法

SET OLEOBJECT ON | OFF

参数

ON

（默认值） 指定 Visual FoxPro 找不到对象时，在 Windows Registry 中查找。

OFF

指定 Visual FoxPro 找不到对象时，不在 Windows Registry 中查找。

说明

仅用于 Visual FoxPro。

当对象是由 CREATEOBJECT ( ) 命令或 GETOBJECT ( ) 命令创建时，Visual FoxPro 在下列地点以下面的顺序查找对象：

1.	Visual FoxPro 基类。

2.	在内存中的类定义，按其装入顺序查找。

3.	当前程序中的类定义。

4.	用 SET CLASSLIB 打开的 .VCX 类库中的类定义。

5.	用 SET PROCEDURE 打开的过程文件中的类定义。

6.	Visual FoxPro 程序执行链中的类定义。

7.	Windows Registry。

Visual FoxPro 最后在 Windows Registry 中查找对象。在对 Windows Registry 进行查找之前需要装入 OLE 支持模块。这样，Visual FoxPro 所需的内存数量将增加，其他应用程序可得的内存数量相应减少。

如果开发的应用程序不需要 OLE 支持，可发出 SET OLEOBJECT OFF 命令来阻止 Visual FoxPro 在找不到对象时搜索 Windows Registry。

SET OLEOBJECT 不影响表单和通用字段中的 OLE 对象。当打开包含 OLE 对象的表单进行修改或运行该表单时，或者打开一个带有通用字段的表时，Visual FoxPro 总是装入 OLE 支持模块。

由于 GETOBJECT( ) 命令会激活 OLE 对象，所以如果在 SET OLEOBJECT 设置为 OFF 时发出 GETOBJECT( ) 命令，Visual FoxPro 会产生错误信息。


请参阅

CREATEOBJECT( )，GETOBJECT( )


SET OPTIMIZE 命令

请参阅

启用或废止 Rushmore 优化。

语法

SET OPTIMIZE ON | OFF

参数

ON

（默认值）启用 Rushmore 优化。

OFF

废止 Rushmore 优化。

说明

Visual FoxPro 使用一种叫 Rushmore 的技术来优化数据的检索。支持 FOR 子句的表命令可以使用 Rushmore 技术提高性能。当发出一条可优化命令时，Rushmore 决定哪些记录与 FOR 条件相匹配。发出的命令是在表中与 Rushmore 记录集相匹配的记录上执行的。

很少有情况需要废止 Rushmore 优化。如果一条可从 Rushmore 优化中受益的命令修改了查询索引关键字时，Rushmore 记录集可能变得过时。这时，为确保从表中得到最新的信息，应废止 Rushmore 优化。

可用 SET OPTIMIZE 在全局范围内启用或废止 Rushmore 技术。每条使用 Rushmore 的命令都有一个 NOOPTIMIZE 子句，可以用它来废止 Rushmore 优化开关。有关详细信息，请参阅深入了解 Rushmore 技术或《开发指南》第十七章“优化应用程序”。

下面的命令可用 Rushmore 来优化其运行性能：

AVERAGE	INDEX
BROWSE	LABEL
CALCULATE	LIST
CHANGE	LOCATE
COPY TO	RECALL
COPY TO ARRAY	REPLACE
COUNT	REPORT
DELETE	SCAN
DISPLAY	SORT
EDIT	SUM
EXPORT	TOTAL


请参阅

INDEX，SET ORDER


SET ORDER 命令

请参阅

指定表的主控索引文件或标识。

语法

SET ORDER TO
[nIndexNumber | IDXIndexFileName | [TAG] TagName [OF CDXFileName]
[IN nWorkArea | cTableAlias]
[ASCENDING | DESCENDING]]

参数

nIndexNumber

指定主控索引文件或标识的编号。nIndexNumber 指的是在 USE 或 SET INDEX 中列出索引文件的顺序号。首先按它们在 USE 或 SET INDEX 中出现的顺序为打开的 .IDX 文件编号。随后，按创建顺序为结构 .CDX 文件中的索引标识（如果存在的话）编号。最后，按创建顺序为所有打开的独立的 .CDX 文件中的索引标识编号。

下面示例说明了不同索引文件类型和标识的编号方式（文件名只是为了说明问题，并不需要真正存在）。表 video.dbf 打开时带有三个索引 (title.idx, costs.cdx 和 rating.idx)，使用下面命令将其在第一个工作区中打开：

USE video INDEX title.idx, costs.cdx, rating.idx IN 1

video 表有一个结构复合索引文件(video.cdx)，其中有两个索引标识(NUMBERSOLD 和 YEARSOLD)。打开 video 时，此结构 .CDX 文件自动打开。

由于 .IDX 文件首先被编号，因此发出命令 SET ORDER TO 1 将使 title.idx 成为主控索引，而发出 SET ORDER TO 2 则使 rating.idx 成为主控索引。

SET ORDER TO 1

Controlling index: C:\FOX30\TITLE.IDX

SET ORDER TO 2

Controlling index: C:\FOX30\RATING.IDX

其次对 video.cdx 中的索引标识进行编号：

SET ORDER TO 3

Controlling index: C:\FOX30\VIDEO.CDX  Tag: NUMBERSOLD

SET ORDER TO 4

Controlling index: C:\FOX30\VIDEO.CDX  Tag: YEARSOLD

独立文件 costs.cdx 中的索引标识最后被编号：

SET ORDER TO 5

Controlling index: C:\FOX30\COSTS.CDX  Tag: RENTALCOST

SET ORDER TO 6

Controlling index: C:\FOX30\COSTS.CDX  Tag: BUYCOST

nIndexNumber 也可以是 0。如果发出 SET ORDER TO 0 命令，则所有索引文件仍保持打开，并且在增加、删除或修改记录时更新。但是，表中所有记录的显示和访问顺序是记录编号顺序而不是索引顺序。不带其他参数的 SET ORDER TO 命令与 SET ORDER TO 0 命令完全一样。

如果 nIndexNumber 大于 .IDX 文件和 .CDX 文件的索引标识数，则 Visual FoxPro 产生错误信息。

IDXIndexFileName

指定作为主控索引文件的 .IDX 文件。

[TAG] TagName [OF CDXFileName]

指定 .CDX 文件中的一个标识作为主控索引标识。标识名可以来自结构 .CDX 文件或任何打开的独立 .CDX 文件。

如果在各打开的独立 .CDX 文件中存在相同的标识名，应使用 OF CDXFileName 来指定包含此标识的 .CDX 文件。

附注

如果 .IDX 文件和标识名重复，.IDX 文件优先。

IN nWorkArea | cTableAlias

为在非当前选定工作区中打开的表指定主控索引文件或索引标识。nWorkArea 指定工作区编号，cTableAlias 指定表的别名。

ASCENDING | DESCENDING

以升序或降序显示或访问表记录。使用 ASCENDING 或 DESCENDING 不会改变索引文件或索引标识。

说明

一个表可以同时打开多个索引文件。但是，只有一个单索引 (.IDX) 文件（主控索引文件）或一个来自复合索引 (.CDX) 文件的索引标识（主控标识）决定表中记录的显示和访问顺序。可用 SET ORDER 来指定主控索引文件或标识。有些命令（例如 SEEK）使用主控索引或标识来查找记录。

可以在 USE 命令中包含 INDEX 子句随表打开索引文件。如果一个表有相关的结构 .CDX 文件，这个文件会随着表的打开而自动打开。在一个表被打开以后，可以使用 SET INDEX 命令为这个表打开或关闭索引文件。

默认情况下，SET ORDER 为当前工作区中打开的表指定主控索引或主控标识。


请参阅

INDEX，ORDER( )，SET INDEX


SET PALETTE 命令

请参阅

指定是否使用默认的调色板。

语法

SET PALETTE ON | OFF

参数

ON

（默认值）恢复默认的 Visual FoxPro 调色板。

OFF

用来自 .BMP 图形和 OLE 对象的调色板替代 Visual FoxPro 的默认调色板。

说明

仅用于 Visual FoxPro 和 FoxPro for Windows。

在 Visual FoxPro 和 FoxPro for Windows 中，可以显示和操作位图 (.BMP)图形和 OLE 对象。.BMP 图形和 OLE 对象可以包含调色板，决定图形和对象的显示方式。第一个图形或对象的调色板将用于所有后续的图形或对象。由于所有图形和对象都使用单一的调色板，因此一些图形和对象可能发生无法预料的变化。

默认的 Visual FoxPro 调色板能够确保多个 .BMP 图形和 OLE 对象正确地显示。


请参阅

@ ... SAY，MODIFY GENERAL


SET PATH 命令

请参阅

指定查找文件的路径。

语法

SET PATH TO [Path]

参数

TO [Path]

在 FoxPro for MS-DOS 和 Visual FoxPro 中，用于指定查找文件的目录。用逗号或分号隔开不同的目录。

在 FoxPro for Macintosh 中，指定 Visual FoxPro 查找文件的文件夹。既可以使用 MS-DOS 路径命名习惯也可以使用 Macintosh 路径命名习惯。有关 MS-DOS 路径命名习惯的详细内容，请参阅 MS-DOS 手册。

注意以下有关 FoxPro for Macintosh 中 Macintosh 路径命名习惯：

 •	   路径可以加完整的限定符：

SET PATH TO Volume:Folder1:Folder2:File

 •	   以冒号开头的路径被认为是相对路径：

SET PATH TO :Folder1:File

 •	   路径能够以卷名开头。但是在卷名后必须紧跟一个冒号：

SET PATH TO Volume:

 •	   路径中的卷名或文件夹名包含空格时，必须用引号将路径括起来：

SET PATH TO 'Volume:Sales Figures'

 •	   路径中不区分大小写，下面的命令是等效的：

SET PATH TO 'Volume:Sales Figures'

SET PATH TO 'VOLUME:SALES FIGURES'

 •	   可以使用双冒号来从一个文件夹移到该文件夹结构的根部：

SET PATH TO ::

由于其他 Visual FoxPro 平台不支持冒号分隔符，因此如果计划把 FoxPro for Macintosh 应用程序移植到其他 Visual FoxPro 平台时，应使用 MS-DOS 的路径命名习惯。在 FoxPro for Macintosh 中，可使用 SYS(2027) 将包含 MS-DOS 简明记法的路径转化为使用 Macintosh 简明记法的路径。

在所有 FoxPro 平台上，所有返回路径信息的函数，如 CURDIR( )、DBF( ) 和 SYS(2003) 等在其返回值中都使用 MS-DOS 路径命令习惯。

说明

在 FoxPro for MS-DOS 和 Visual FoxPro 中，SET PATH 用来指定一组目录，供 Visual FoxPro 不能在当前默认目录中找到文件的情况下查找文件。

在 FoxPro for Macintosh 中，SET PATH 用来指定一组文件夹，供 Visual FoxPro 不能在当前默认文件夹中找到文件的情况下查找文件。

不带参数 Path 的 SET PATH TO 命令把路径恢复为默认目录或默认文件夹。SET DEFAULT 可以指定默认目录或文件夹，CURDIR( ) 函数可以返回当前默认的目录或文件夹。

SET PATH 的作用范围为当前数据工作期。


请参阅

CD | CHDIR，GETFILE( )，LOCFILE( )，MD | MKDIR，RD | RMDIR，SET DEFAULT，SET DATASESSION


SET PDSETUP 命令

请参阅

装入一个打印机驱动程序设置或清除当前打印机驱动程序设置。

语法

SET PDSETUP TO [[cPrinterDriverSetup [, Parameter1[, Parameter2 ...]]]
[WITH Parameter3 [, Parameter4 ...]]]

参数

cPrinterDriverSetup

指定要装入的打印驱动程序设置名称。

当装入打印机驱动程序设置时，设置的名称保存在 _PDSETUP 系统内存变量中，同时可以创建相应的特殊内存变量数组 _PDPARMS。（_PDPARMS 的详细讨论在本主题中 WITH 子句下。）

如果 cPrinterDriverSetup 指定的打印机驱动程序设置名称在资源文件中不存在，就执行当前打印机驱动程序的设置应用程序以便能创建具有该名称的设置。如果当前打印机驱动程序的设置应用程序是 GENPD.APP，那么将显示“打印设置编辑”对话框，从中可以创建打印设置。

如果设置名称以短划线 (-) 开头，那么不会执行 _GENPD 程序，但把短划线之后的名称存入 _PDSETUP 中。

如果不带 cPrinterDriverSetup 参数发出 SET PDSETUP TO 命令，将清除当前打印机设置，并将空字符串保存在 _PDSETUP 中，同时还从内存中清除 _PDPARMS 数组。

在配置文件 (CONFIG.FP) 中加入如下一行，可以在启动 FoxPro for MS-DOS 时装入默认的打印机驱动程序设置：

PDSETUP = 'SetupName' WITH ParameterList

SetupName 是启动 FoxPro for MS-DOS 时要装入的设置名称。确保用引号把设置名称括起来。配置文件 CONFIG.FP 中指定的默认打印机驱动程序设置优先于“打印机驱动程序设置”对话框中指定的默认打印机驱动程序设置。

Parameter1 [, Parameter2 ...]

指定任意数目的可选参数。这些参数传给打印机设置接口应用程序，可为任意类型（字符型、数值型、逻辑型等等）。打印机设置接口应用程序中的第一行必须是 LPARAMETERS 或 PARAMETERS 语句，以接受 SET PDSETUP 传递过来的参数。

如果使用 GENPD.APP，不要包括这些可选参数。GENPD.APP 不接受由 SET PDSETUP 传递来的参数，所以包括这些参数将产生错误。

WITH Parameter3 [, Parameter4 ...]

创建特殊的 _PDPARMS 打印机数组。由 Parameter3、Parameter4 等指定的每一个参数都成为 _PDPARMS 中的一个元素。第一个参数( Parameter3) 保存在 _PDPARMS 的第一个元素中，第二个参数( Parameter4 )保存在 _PDPARMS 的第二个元素中，等等。这些参数的类型可为任意类型（字符型、数值型、逻辑型等等）。

如果使用 GENPD.APP，这个应用程序将改写您指定的所有参数。

说明

对于 Visual FoxPro 、FoxPro for Windows 和 FoxPro for Macintosh ，在打印由 FoxPro for MS-DOS 创建的基于字符的报表时需要用到打印机驱动程序设置。

打印机驱动程序设置由许多设置组合而成。它包括打印机驱动程序和诸如页面方向、默认字体大小和字体类型、页边距等信息。打印机驱动程序设置保存在 FoxPro for MS-DOS 的资源文件 FOXUSER.DBF 中，可以在“打印设置编辑”对话框中以交互方式创建打印机驱动程序设置并给它指定名称。

也可以使用 _PDSETUP 系统内存变量装入或清除打印机驱动程序设置。

发出 SET PDSETUP 命令时，执行当前的打印机设置接口应用程序。SET PDSETUP 中包含的打印机驱动程序设置将被传递给接口应用程序。接口应用程序也可以由 _GENPD 系统内存变量指定。默认的接口应用程序是 GENPD.APP，即包括在 FoxPro for MS-DOS 中的打印机设置接口应用程序。


请参阅

_GENPD，_PDRIVER，_PDSETUP，SET PRINTER


SET POINT 命令

请参阅	示例

显示数值表达式或货币表达式时，确定所用小数点字符。

语法

SET POINT TO [cDecimalPointCharacter]

参数

cDecimalPointCharacter

指定小数点字符。

说明

SET POINT 可用来改变默认的小数点（句点 .）。不带 cDecimalPointCharater 参数的 SET POINT TO 命令恢复小数点为句点符。尽管可以你把显示的小数点设置为不同的字符，但在计算中必须使用句点作为小数点。

SET POINT 的作用范围为当前数据工作期。


gnX = 1.25

gcNewPoint = '_'

SET POINT TO gcNewPoint

? gnX

SET POINT TO	&& 重新设置小数点为句点(.)

? gnX


请参阅

SET DATASESSION，SET DECIMALS，SET FIXED，SET SYSFORMATS


SET PRINTER 命令

请参阅

启用或废止输出到打印机，或将结果输出到文件、端口或网络打印机。

语法

SET PRINTER ON [PROMPT] | OFF
 — 或者 —
SET PRINTER FONT cFontName [, cFontSize]
[STYLE cFontStyle]
— 或者 —
SET PRINTER TO [FileName [ADDITIVE] | PortName]
— 或者 —
SET PRINTER TO [DEFAULT | NAME WindowsPrinterName]
— 或者 —
SET PRINTER TO [NAME \\ServerName\PrinterName]
— 或者 —
SET PRINTER TO [\\SPOOLER [\N] [\F=nFormNumber]
[\B=cBannerText] [\C=nCopies][\P=nPrinterNumber]
[\S=ServerName] [\Q=QueueName]]

参数

ON [PROMPT]

允许输出到打印机。当 SET PRINTER 设置为 ON 时，@ ... SAY 的格式化输出结果并不立即发送到打印机。要使 @ ... SAY 直接输出到打印机，应使用 SET DEVICE TO PRINTER。

在 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for Macintosh 中，可以包含 PROMPT 以便在打印前显示一个对话框。在这个对话框中可以调整打印机设置。当前已安装的打印机驱动程序决定可以调节哪些打印机设置。

FoxPro for MS-DOS 忽略 PROMPT 子句。

OFF

（默认值）不允许输出结果发送到打印机。

FONT cFontName [, cFontSize]

仅用于 Visual FoxPro 和 FoxPro for Windows。

指定打印机输出的默认字体。cFontName 用以指定字体的名称，cFontSize 指定磅值大小。例如，下面命令指定打印机的默认字体为 16 磅的 Courier 字体。

SET PRINTER FONT 'Courier', 16

如果指定的字体不可用，FoxPro 将用具有相似字体特征的字体代替。

STYLE cFontStyle

仅用于 Visual FoxPro 和 FoxPro for Windows。

指定打印机输出的默认字形。如果省略 STYLE 子句，将使用常规字形。

如果指定的字形不可用，FoxPro 将用具有相似字体特征的字形代替。

可由 cFontStyle 指定的字形如下：

字符	字形
B	粗体
I	斜体
N	常规体
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro ）
T	透明
U	下划线
可以在命令中包括多个字符指定组合字形。例如，下面的命令指定 16 磅的 Courier 斜黑体：

SET PRINTER FONT 'Courier', 16 STYLE 'BI'

TO [FileName [ADDITIVE] | PortName]

指定定向输出到的文件或端口。

在 Visual FoxPro 中，可使用 SET PRINTER TO NAME 来指定打印机。

FileName 指定接受输出结果的文件名称。如果包括 ADDITIVE，那么输出结果将追加到文件已有内容的后面。如果省略 ADDITIVE，将改写文件已有的内容。

PortName 把输出结果发送给本地另一台打印机。在 FoxPro for MS-DOS 中，可以指定三个并口（LPT1、LPT2 或 LPT3）中的某一个或两个串口（COM1 或 COM2）中的某一个。

在 FoxPro for Macintosh 中，可使用 COM1 来指定调制解调器端口或 COM2 来指定打印机端口。还可以用以下六个参数来指定端口的设置。

参数	值
波特率	300, 600, 1200, 1800, 2400, 3600, 4800, 7200, 9600, 19200, 57600
奇偶校验位	N（无），O（奇），E（偶）
数据位	5, 6, 7, 8
停止位	1, 1.5, 2
握手	H（硬件 CTS）， S（软件 Xon/Xoff）， N（无）
结束行	R（回车）, L（换行） 总数可多达四个。例如，RLRL。
默认设置是9600 波特率、无奇偶校验位、8个数据位、1个停止位、硬件握手和结束行是一个回车换行。

下面的命令恢复 COM1 调制解调器端口的默认设置。

SET PRINTER TO COM1, 9600, N, 8, 1, H, RL

TO [DEFAULT | NAME WindowsPrinterName]

仅用于 Visual FoxPro。

把打印机输出传送到默认的 Windows 打印机或指定的 Windows 打印机。Windows 打印机的名称保存在 WIN.INI 中。

可用 GETPRINTER( ) 或 APRINTERS( ) 确定当前已安装的打印机名称。例如，下面命令显示 Windows 的“打印设置”对话框并将选定的打印机作为接受输出结果的打印机。

SET PRINTER TO NAME GETPRINTER( )

TO [NAME \\ServerName\PrinterName]

仅用于 Windows NT。将脱机打印输出到网络打印机。

ServerName 是打印服务器的网络名称。这一名称由网络管理员指定，并且必须是唯一的。

PrinterName 指定打印机的名称。这一名称也是由网络管理员指定的。

TO [\\SPOOLER [\N] [\F=nFormNumber] [\B=cBannerText] [\C=nCopies]
 [\P=nPrinterNumber] [\S=ServerName] [\Q=QueueName]]

仅用于 FoxPro for MS-DOS。

将输出结果发送到网络打印机。专为 Novell Advanced Netware 2.00 版及其后续版本的打印而设计。

为了兼容，必须包括\\SPOOLER。当使用后面选项时，不要在子句间加入任何空格。

\N 禁止打印标志页（没有标志）。

\F=nFormNumber 指定打印输出的纸张编号（编号 0 到 255）。这个选项对于产生不同类型的打印结果非常有用，例如支票、发票和信件等。

\B=cBannerText 指定打印在标志页上的标题。cBannerText 包含的字符可多达 12 个字符。默认标题是网络用户的名称。

\C=nCopies 指定放置到网络打印机队列中的打印份数（1 到 255份）。默认值为 1。

\P=nPrinterNumber 指定接收输出结果的网络打印机。nPrinterNumber 是由网络指定给打印机的编号，默认值为 0。

\S=ServerName 指定打印机所连接的网络服务器。ServerName 不应是一个字符串（也就是说，它不应用引号括起来）。

\Q=QueueName 指定接收输出结果的打印机的队列名。QueueName 不应是字符串（也就是说，它不应用引号括起来）。

说明

可使用 SET PRINTER TO 并指定不同参数将输出分别定向到文件、本地的不同打印机端口和网络打印机。

在 Visual FoxPro 和 FoxPro for MS-DOS 中，不带参数的 SET PRINTER TO 命令重置输出为默认的 MS-DOS PRN 打印设备。

当定向输出到网络打印机时，输出结果将打印或收集在打印池中，直到发出一个新的 SET PRINTER 命令为止。有关在网络中打印的详细内容，请参阅您的网络文档。


请参阅

APRINTERS( )，GETPRINTER( )，PRINTSTATUS( )，SET DEVICE


SET PROCEDURE 命令

请参阅

打开过程文件。

语法

SET PROCEDURE TO [FileName1 [, FileName2, ...]]
[ADDITIVE]

参数

FileName1 [, FileName2, ...]

指定打开文件的顺序。SET PROCEDURE 可带有多个文件名，即可以立刻打开多个过程文件。也就是说允许您创建多个独立的函数库并分别打开它们。

ADDITIVE

在不关闭当前已打开的过程文件的情况下打开其他过程文件。

说明

不带任何文件名的SET PROCEDURE TO 的命令关闭所有打开的过程文件。RELEASE PROCEDURE 可用来关闭单个文件。

当执行一个过程时，如果在当前执行程序中找不到该过程，就将查找过程文件。

有关过程文件的详细内容，请参阅 PROCEDURE。


请参阅

PROCEDURE，RELEASE PROCEDURE


SET READBORDER 命令

请参阅	示例

确定是否在 @ ... GET 创建的文本框周围放上边框。

语法

SET READBORDER ON | OFF

参数

ON

在由 @ ... GET 创建的所有文本框四周画一单线边框。如果创建第一个文本框时，SET READBORDER 设置为 ON，那么所有后续的在同一级 READ 命令中创建的文本框也有边框。

OFF

（默认值）指定在由 @ ... GET 创建的文本框四周不画边框。如果创建第一个文本框时，SET READBORDER 设置为 OFF，那么所有后续的在同一级 READ 命令中创建的文本框都没有边框。

说明

在 Visual FoxPro 、 FoxPro for Windows 和 FoxPro for Macintosh 中，SET READBORDER 指定是否在由 @ ... GET 创建的文本框四周画边框。

FoxPro for MS-DOS 忽略 SET READBORDER 命令。


* 在下面的示例中，@ ... GET 创建的前三个文本框
*  有边框。虽然在创建第三个文本框之前
*  SET READBORDER 设置为 OFF，但是它仍有边框。第四个
*  文本框没有边框。这是因为 READBORDER 已设置为 OFF，并且
*  它在与前三个文本框不同的 READ 命令范围中。

SET READBORDER ON

@ 2,2 GET gnW DEFAULT 1	&& 1st READ

@ 4,2 GET gnX DEFAULT 1	&& 1st READ

SET READBORDER OFF

@ 6,2 GET gnY DEFAULT 1	&& 1st READ

READ

@ 8,2 GET gnZ DEFAULT 2	&& 2nd READ

READ


请参阅

READ


SET REFRESH 命令

请参阅

当网络上的其他用户修改记录时，确定是否更新浏览窗口或确定更新浏览窗口的频度。

语法

SET REFRESH TO nSeconds1 [, nSeconds2]

参数

TO nSeconds1 [, nSeconds2]

指定是否更新或更新的频度。 nSeconds1 指定两次更新浏览窗口或备注编辑窗口之间的时间间隔，以秒为单位。nSeconds1 的值可以从 0 到 3600。默认值为 0 秒。当 nSeconds1 为非零值且其他用户改变了您正在浏览的记录时，这些记录每隔指定的刷新时间间隔便更新一次。如果 nSeconds1 为零，则不更新正浏览的记录。

Visual FoxPro 在本地工作站上的内存中缓冲部分表。nSeconds2 指定使用网络上当前数据更新这些本地数据缓冲区的频度。nSeconds2 是两次更新数据缓冲区的时间间隔，以秒为单位。nSeconds2 值可以从 0 到 3600。它的默认值为 5。如果 nSeconds2 设置为 0，缓冲区永不刷新。

如果为 nSeconds1 指定了一个非零值但是没有指定 nSeconds2，那么 nSeconds2 设置为与 nSeconds1 一样的值。但是如果 nSeconds1 设置为 0 且不指定 nSeconds2，那么 nSeconds2 设置为5。

增加 nSeconds2 的值可以提高程序的运行性能。

说明

在网络上能够以共享方式打开表。因此正在浏览窗口中查看的记录很可能会被网络上的其他用户编辑。

SET REFRESH 影响由 BROWSE、CHANGE 或 EDIT 命令打开的浏览窗口中的记录。在浏览窗口中为进行编辑而打开的备注字段也将被更新。

SET REFRESH 还可以指定本地工作站上缓冲数据的更新频度。


请参阅

BROWSE，CHANGE，EDIT，MODIFY MEMO，SET DATASESSION


SET RELATION 命令

请参阅

在两个打开的表之间建立关系。

语法

SET RELATION TO
[eExpression1 INTO nWorkArea1 | cTableAlias1
[, eExpression2 INTO nWorkArea2 | cTableAlias2 ...]
[IN nWorkArea | cTableAlias]
[ADDITIVE]]

参数

eExpression1

指定用来在父表和子表之间建立关系的关系表达式。关系表达式通常是子表主控索引的索引表达式。

子表的索引可以是单项索引 (.IDX)、多项结构复合索引 (.CDX) 或独立复合索引。如果是复合索引，应指定适当的索引标识来排序子表。SET ORDER 可用来指定排序子表的索引标识。

例如，考虑“说明”部分描述的 customer 和 orders 两表。假定子表 orders 已经建立索引，并且使用如下命令用顾客编号进行排序：

SET ORDER TO TAG cust_id

要在 customer 和 orders 两表的顾客编号上建立关系，应选择包含父表 customer 的工作区或使用 IN 子句来指定父表的工作区或别名。然后，发出 SET RELATION 命令，用如下关系表达式指定索引表达式：

SET RELATION TO cust_id INTO orders

除非关系表达式是数值型的，否则子表必须建立索引。如果发出包含非数值关系表达式的 SET RELATION 命令时，子表没有使用索引进行排序， Visual FoxPro 显示错误信息。

如果 eExpression1 是数值型表达式，那么当记录指针在父表中移动时，将计算此表达式。然后，子表的记录指针移到记录编号为 eExpression1 的记录上。

INTO nWorkArea1 | cTableAlias1

指定子表的工作区编号 (nWorkArea1) 或子表的表别名 (cTableAlias1)。

eExpression2 INTO nWorkArea2 | cTableAlias2 ...

指定其他关系表达式 (eExpression2) 和子表，建立另一个父表和子表之间的关系。在一条 SET RELATION 命令中可以创建单个父表与多个子表之间的关系，但是各个关系之间要用逗号隔开。

nWorkArea2 指定工作区编号，cTableAlias2 指定子表的别名。

IN nWorkArea

指定父表的工作区。

IN cTableAlias

指定父表的别名。

IN 子句允许创建关系时不必首先选择父表工作区。如果 SET RELATION 命令中省略了 nWorkArea 和 cTableAlias，父表必须在当前选定的工作区中打开。

ADDITIVE

保留当前工作区中所有已存在的关系并创建指定的新关系。如果命令中不包括 ADDITIVE 子句，将断开当前工作区中的所有关系，然后再创建指定的关系。

说明

在建立关系之前，必须打开一个表（父表），而且还必须在另一个工作区内打开其他表（子表）。

相关的各表通常有一个相同的字段。例如，假定表 customer 包含顾客信息，有顾客姓名、地址和唯一的顾客编号等字段。表 orders 包含订货信息，也有顾客编号字段，同时还有日期和发货信息等字段。SET RELATION 通过相同的字段，即顾客编号字段来联系两个表。要建立这种关系，子表必须在公共字段上建立索引。建立关系后，不论何时在父表 customer 中移动记录指针到指定顾客编号的记录上时，子表 orders 中的记录指针也将同时移到相同顾客编号的记录上。如果子表中找不到相匹配的记录，子表中的记录指针将停在表尾。

不带任何参数的 SET RELATION TO 命令将移去当前选定工作区中的所有关系。可用 SET RELATION OFF 移去指定的父子关系。


请参阅

INDEX，RELATION( )，SET ORDER，SET RELATION OFF，SET SKIP，TARGET( )


SET RELATION OFF 命令

请参阅

解除当前选定工作区中父表与相关子表之间已建立的关系。

语法

SET RELATION OFF INTO nWorkArea | cTableAlias

参数

INTO nWorkArea | cTableAlias

指定子表工作区编号或表别名。


请参阅

RELATION( )，SELECT，SET RELATION，SET SKIP，TARGET( )


SET REPROCESS 命令

请参阅

指定一次锁定尝试不成功后，Visual FoxPro 对文件或记录再次尝试加锁的次数或时间。

语法

SET REPROCESS TO nAttempts [SECONDS] | TO AUTOMATIC

参数

TO nAttempts [SECONDS]

指定初始加锁不成功后 Visual FoxPro 对文件或记录再次尝试加锁的次数。默认值为 0，最大值为 32,000。

SECONDS 指定 Visual FoxPro 对文件或记录尝试加锁的时间为 nAttempts 秒。只有当 nAttempts 大于 0 时此设置才可用。

例如，如果 nAttempts 为 30，Visual FoxPro 对记录或文件的尝试加锁次数为 30 次。如果还包括 SECONDS (SET REPROCESS TO 30 SECONDS)，则Visual FoxPro 持续地对文件或记录尝试加锁的时间是 30 秒。

如果 SET STATUS 设置为 ON ，则出现系统信息（“等待锁定 ... ”）。

如果 ON ERROR 例程有效，并且一条命令对文件或记录加锁的尝试不成功，那么将执行 ON ERROR 例程。但如果是一个函数尝试加锁，那么将不执行 ON ERROR 例程且该函数返回“假”(.F.)。

如果 ON ERROR 无效，且命令试图对文件或记录加锁，但未成功时，将出现相应的警告信息（例如，“其他用户正在使用该记录”）。如果函数的加锁尝试不成功，则不显示警告信息，而是由函数返回“假”(.F.)。

如果在 nAttempts 为 0（默认值）时，发出命令或使用函数来尝试锁定记录或文件，那么 Visual FoxPro 将无限制地尝试锁定记录或文件。在尝试锁定记录或文件时，Visual FoxPro 显示系统信息“尝试锁定 ...按 ESC 键取消”。等待过程中，如果记录或文件可以加锁时，则锁定该记录或文件并清除显示的系统信息。一个函数尝试加锁成功时，该函数返回“真”(.T.)。

如果按 ESC 键响应系统信息，则出现相应的警告信息（例如，“记录正被其他用户使用”）。如果是一个函数尝试加锁，则不出现此类信息，而由函数返回“假”(.F.)。

如果 ON ERROR 例程有效且一条命令正在对文件或记录尝试加锁，则 ON ERROR 优先于对记录或文件再次的加锁尝试。这种情况下，ON ERROR 例程立即执行。Visual FoxPro 不再尝试对文件或记录进行加锁，也不显示系统信息。

如果 nAttempts 为 1，Visual FoxPro 将无限制地尝试锁定记录或文件。这时即使按 ESC 键也不能取消加锁尝试，并且不执行 ON ERROR 例程。

只有当 SET STATUS 设置为 ON 时，Visual FoxPro 才显示“等待锁定 ... ”。

如果尝试锁定的记录或文件已被其他用户加锁，那么只有等到该用户解锁后才能加锁。

TO AUTOMATIC

指定 Visual FoxPro 无限制地尝试锁定记录或文件。（SET REPROCESS TO 2 与此命令等价。）

Visual FoxPro 在尝试锁定记录或文件时显示系统信息“尝试锁定 ...按 ESC 键取消”。如果要加锁的记录或文件可用，就加上锁并清除显示的系统信息。如果使用函数来加锁，函数返回“真”(.T.)。

如果 ON ERROR 例程无效且按 ESC 键来响应系统信息，则出现相应的警告信息（例如，“其他用户正在使用该记录”）。这种情况下如果函数尝试加锁不成功，将不显示警告信息，而由函数返回“假”(.F.)。

如果 ON ERROR 例程有效且按下了 ESC 键，则执行 ON ERROR 例程。如果是函数尝试加锁，则不执行 ON ERROR 例程，而且函数返回“假”(.F.)。

有关在网络上对记录和文件加锁以及共享表的详细内容，请参阅《开发指南》第十九章“共享访问程序设计”。

说明

第一次对记录或文件尝试加锁不会总是成功的。在网络上，记录或文件经常被其他用户锁定。SET REPROCESS 确定初始加锁尝试不成功时 Visual FoxPro 是否继续尝试锁定记录或文件。既可指定继续尝试加锁的次数，也可指定继续尝试加锁的时间限制。ON ERROR 例程影响如何处理不成功的加锁尝试。

SET REPROCESS 的作用范围是当前数据工作期。


请参阅

FLOCK( )，SET DATASESSION


SET RESOURCE 命令

请参阅

更新资源文件或指定资源文件。

语法

SET RESOURCE ON | OFF
 — 或者 —
SET RESOURCE TO [FileName]

参数

ON

（默认值）指定对 Visual FoxPro 环境所作的更改保存在资源文件中。

OFF

指定对 Visual FoxPro 环境所作的变化不保存在资源文件中。

TO [FileName]

指定对 Visual FoxPro 环境所作的变化保存在资源文件 FileName 中，而不是保存在默认的 FOXUSER.DBF 资源文件中。

不带资源文件名的 SET RESOURCE TO 命令打开默认的 FOXUSER.DBF 资源文件。发出 SET RESOURCE TO 命令隐含执行 SET RESOURCE ON 命令。

说明

资源文件是一个包含诸如键盘宏、预选参数、系统窗口的位置和大小、日记入口等系统和用户自定义资源的 Visual FoxPro 表。


请参阅

SYS(2005) - 当前资源文件


SET SAFETY 命令

请参阅

决定改写已有文件之前是否显示对话框，或者决定当用表设计器或用 ALTER TABLE 命令对表结构进行修改后，是否重新计算表或字段规则、默认值以及错误信息。

语法

SET SAFETY ON | OFF

参数

ON

（默认值）指定改写已有文件之前显示一个对话框。该对话框将提供选项使您决定是否改写已有文件。

对于表设计器，指定表结构被修改后重新计算表规则或字段规则、默认值以及错误信息等。保存表结构所做的修改之后，将使用新的或修改后的数据有效性规则进行数据有效性检查。如果有效性规则包含 UDF （用户自定义函数），将不计算 UDF 并且忽略有效性规则。

对于 ALTER TABLE 命令，指定表结构被修改后重新计算表规则或字段规则、默认值以及错误信息等。保存表结构所做的修改之后，将使用新的或修改后的数据有效性规则进行数据有效性检查。如果有效性规则包含 UDF （用户自定义函数），将不计算 UDF 并且忽略有效性规则。

OFF

指定在改写已有文件时不显示对话框。

对于表设计器，指定表结构被修改后不重新计算表规则或字段规则、默认值以及错误信息等。但是，保存表结构所做的修改之后，将使用新的或修改后的数据有效性规则进行数据有效性检查。

对于 ALTER TABLE 命令，指定表结构被修改后不重新计算表规则或字段规则、默认值以及错误信息等。保存表结构所做的修改之后，也不使用新的或修改后的数据有效性规则进行数据有效性检查。

说明

SET SAFETY 的作用范围是当前数据工作期。


请参阅

ALTER TABLE - SQL，MODIFY STRUCTURE，SET DATASESSION，SET TALK


SET SCOREBOARD 命令

请参阅

指定 Visual FoxPro 在何处显示 Num Lock、Caps Lock 和 Insert 等键的状态。仅用于 FoxPro for MS-DOS。包含此命令是为了提供向后兼容性。

语法

SET SCOREBOARD ON | OFF

参数

ON

指定不显示状态栏时， Num Lock, Caps Lock, 和 Insert 键的状态显示在第 0 行上。由于 Visual FoxPro 系统菜单栏显示在第 0 行上，因此要看见这些键的状态必须按 Shift+Ctrl+Alt 来隐藏菜单栏。

如果显示了状态栏， Num Lock、 Caps Lock 和 Insert 键状态就显示在状态栏中。

OFF

（默认值）指定不显示状态栏时， Num Lock, Caps Lock, 和 Insert 键的状态也不显示。SET SCOREBOARD OFF 命令还可以清除 Visual FoxPro 主窗口。

说明

在 Visual FoxPro 和 FoxPro for Macintosh 中，SET SCOREBOARD 命令被忽略。


请参阅

SET BRSTATUS


SET SECONDS 命令

请参阅	示例

当显示日期时间值时，指定是否显示时间部分的秒。

语法

SET SECONDS ON | OFF

参数

ON

（默认值）指定在日期时间值中显示秒。

OFF

指定在日期时间值中不显示秒。


* 下面的示例说明了 SET SECONDS 设置对 DATATIME( ) 函数
*  返回值的影响。当 SET SECONDS 设置为 ON 时，显示的值
*  有秒部分。当 SET SECONDS 设置为 OFF 时，显示的值
*  没有秒部分。

SET SECONDS ON

CLEAR

? DATETIME( )  && Displays time value with the seconds portion

SET SECONDS OFF  && Displays time value without the seconds portion

? DATETIME( )


请参阅

CTOT( )，DATE( )，DATETIME( )，DTOT( )，HOUR( )，MINUTE( )，SEC( )，SECONDS( )，SET SECONDS，TIME( )


SET SEPARATOR 命令

请参阅	示例

指定小数点左边每三个数字一组进行分隔的字符。

语法

SET SEPARATOR TO [cSeparatorCharacter]

参数

TO cSeparatorCharacter

指定用作分隔符的字符。

不带 cSeparatorCharacter 参数的SET SEPARATOR TO 的命令可以把分隔符重置为默认分隔符。

说明

SET SEPARATOR 可以把 @ ... SAY 和 @ ... GET PICTURE 子句中的数值位分隔符改变为其他字符。

默认的分隔符是逗号( , )。

SET SEPARATOR 的作用范围是当前数据工作期。


SET SEPARATOR TO '#'

gnX = 1000

@ 2,2 GET gnX PICTURE '9,999.99'

READ

SET SEPARATOR TO 	&& Reset the separator to a comma (,)


请参阅

SET DATASESSION，SET DECIMALS，SET SYSFORMATS


SET SHADOWS 命令

请参阅

给用户自定义窗口、系统窗口、菜单、对话框和警告信息放上阴影，或者去掉其阴影。

语法

SET SHADOWS ON | OFF

参数

ON

（默认值）显示阴影。

OFF

移去阴影。

说明

仅用于 FoxPro for MS-DOS。

在 Visual FoxPro 和 FoxPro for Macintosh 中，SET SHADOWS 命令被忽略。

用 DEFINE WINDOW 创建的窗口不受 SET SHADOWS 的影响，除非该窗口创建时使用了 SHADOW 子句。

如果在 Visual FoxPro 配置文件中包括了 SHADOW 配置项时，那么启动 Visual FoxPro 时装入颜色集中的 SHADOW 设置值将改写配置文件中的 SHADOW 默认设置。


请参阅

DEFINE WINDOW


SET SKIP 命令

请参阅	示例

创建表与表之间的一对多关系。

语法

SET SKIP TO [TableAlias1 [, TableAlias2] ...]

参数

TO TableAlias1 [, TableAlias2] ...

指定多个子表的别名。这些子表用来与父表创建一对多关系。表别名之间用逗号分隔。在支持范围的命令（ DISPLAY、LIST 等）中，对于子表中每一个对应记录都重复父表的记录。

不带参数的 SET SKIP TO 命令从当前选定工作区的已打开父表中删除该一对多关系，而任何一对一关系仍然有效。一对一关系可以用 SET RELATION TO 删除。

说明

使用 SET RELATION 可以在不同工作区中打开的表之间建立关系。当记录指针在父表中移动时，子表中的记录指针也移动到第一个对应的记录上。SET RELATION 中的关系表达式决定子表中的记录指针移到何处。如果对于父表中每一个记录都建立了一对一的关系，记录指针将移到子表中第一个相匹配的记录上。如果在子表中找不到相匹配的记录，则记录指针移到表尾。

很多情况下，父表中的一个记录通常在子表中有多个记录与之对应。SET SKIP 允许在父表的一个记录与子表的多个记录之间建立一对多关系。当浏览父表时，父表的记录指针将一直保持不动，直到记录指针移过子表中所有相关的记录为止。

要建立一对多关系，首先使用 SET RELATION 在父表与子表之间建立关系。然后发出 SET SKIP 命令创建一对多关系。


* 下面示例在三个表中查找第一个字段内容相同的记录。
*  首先使用 SCAN 扫描第一个表。这个表与第二
*  个表有关系，而第二个表与第三个表有关系。然后
*  第一个表为其他两表发出 SET SKIP 命令。请注意
*  SET SKIP 对第二个表没有影响。它只影响被扫描
*  （替代，等等）的表。在这个示例中，查到了八条记录。

CLOSE DATABASES

CREATE TABLE Parent FREE (Name C(1), Val C(10))	&& 父表有一个a 和 b.

INSERT INTO Parent VALUES ('a', 'Parent.a1')

INSERT INTO Parent VALUES ('b', 'Parent.b1')

SELECT 0	  && Child1 有两个 a 和 b

CREATE TABLE Child1 FREE (Name1 C(1), Val C(10))

INSERT INTO Child1 VALUES ('a', 'Child1.a1')

INSERT INTO Child1 VALUES ('b', 'Child1.b1')

INSERT INTO Child1 VALUES ('b', 'Child1.b2')

INSERT INTO Child1 VALUES ('a', 'Child1.a2')

INDEX ON Name1 TAG tagName	  && 标识名是无关紧要的

SELECT 0	  && Child2 有两个 a 和 b

CREATE TABLE Child2 FREE (Name2 C(1), Val C(10))

INSERT INTO Child2 VALUES ('b', 'Child1.b1')

INSERT INTO Child2 VALUES ('b', 'Child1.b2')

INSERT INTO Child2 VALUES ('a', 'Child1.a1')

INSERT INTO Child2 VALUES ('a', 'Child1.a2')

INDEX ON Name2 TAG tagName	  && 标识名是无关紧要的

SELECT Child1

SET RELATION TO Name1 INTO Child2

SELECT Parent

SET RELATION TO Name INTO Child1

SET SKIP TO Child1, Child2	  && 注意对两个子表都设置 SKIP.

  && 否则，只有四条记录列出.

SCAN ALL  && 有八种情况: 四个 a 和四个 b

? Parent.Val, Child1.Val, Child2.Val

ENDSCAN


请参阅

RELATION( )，SET RELATION，SKIP


SET SKIP OF 命令

请参阅

启用或废止用户自定义菜单或 Visual FoxPro 系统菜单的菜单、菜单栏、菜单标题或菜单项。

语法

SET SKIP OF MENU MenuBarName1 lExpression1
 — 或者 —
SET SKIP OF PAD MenuTitleName OF MenuBarName2 lExpression2
 — 或者 —
SET SKIP OF POPUP MenuName1 lExpression3
 — 或者 —
SET SKIP OF BAR nMenuItemNumber | SystemItemName
OF MenuName2 lExpression4

参数

MENU MenuBarName1 lExpression1

启用或废止由 DEFINE MENU 创建的 Visual FoxPro 系统菜单栏或用户自定义菜单栏。例如，可以用如下命令废止 Visual FoxPro 系统菜单栏 _MSYSMENU：

SET SKIP OF MENU _MSYSMENU .T.

可以用如下命令激活：

SET SKIP OF MENU _MSYSMENU .F.

PAD MenuTitleName OF MenuBarName2 lExpression2

启用或废止由 DEFINE PAD 创建的 Visual FoxPro 系统菜单标题或用户自定义菜单标题。例如，可以用如下命令废止 Visual FoxPro 的“编辑”菜单标题：

SET SKIP OF PAD _MSM_EDIT OF _MSYSMENU .T.

可以用如下命令激活：

SET SKIP OF PAD _MSM_EDIT OF _MSYSMENU .F.

POPUP MenuName1 lExpression3

启用或废止由 DEFINE POPUP 创建的 Visual FoxPro 系统菜单或用户自定义菜单。例如，可以用如下命令废止 Visual FoxPro “编辑”菜单：

SET SKIP OF POPUP _MEDIT .T.

可以用如下命令激活：

SET SKIP OF POPUP _MEDIT .F.

BAR nMenuItemNumber | SystemItemName OF MenuName2 lExpression4

启用或废止由 DEFINE BAR 创建的 Visual FoxPro 系统菜单上的菜单项或用户自定义菜单项。例如，可以用如下命令废止 Visual FoxPro “文件”菜单上的“新建”命令：

SET SKIP OF BAR _MFI_NEW OF _MFILE .T.

这里，SystemItemName 指定菜单命令 _MFI_NEW，MenuName2 指定菜单 _MFILE，lExpression4 指定逻辑表达式 .T.。此菜单命令可以用如下命令激活：

SET SKIP OF BAR _MFI_NEW OF _MFILE .F.

使用 nMenuItemNumber 可指定用 DEFINE BAR 创建的菜单项。

说明

有关 Visual FoxPro 系统菜单各部分内部名称的完整列表，请参阅系统菜单名称。也可使用 SYS(2013) 来返回系统菜单的内部名称。

如果逻辑表达式 lExpression 的计算值为“真”(.T.)，则 SET SKIP OF 命令中的菜单、菜单栏、菜单名或菜单项被废止。废止的项以灰色显示且不能选择。如果逻辑表达式 lExpression 的计算值为“假”(.F.)，则激活相应的菜单、菜单栏、菜单名或菜单项，可以选择。


请参阅

CREATE MENU，DEFINE BAR，DEFINE MENU，DEFINE PAD，DEFINE POPUP，系统菜单名称概述，SKPBAR( )


SET SPACE 命令

请参阅	示例

使用 ? 或 ?? 命令时，确定字段或表达式之间是否显示空格。

语法

SET SPACE ON | OFF

参数

ON

（默认值）在字段或表达式之间插入空格。

OFF

移去字段或表达式之间的空格并且将它们连接在一起输出。


gcX = 'John'

gcY = 'Smith'

SET SPACE OFF

? gcX,gcY

SET SPACE ON

? gcX,gcY


请参阅

? | ??


SET STATUS 命令

请参阅

显示或移去基于字符的状态栏。包含此命令是为了提供向后兼容性。

语法

SET STATUS ON | OFF | TIMEOUT TO [nSeconds]

参数

ON

显示基于字符的状态栏。

OFF

（默认值）移去基于字符的状态栏。

TIMEOUT TO [nSeconds]

在 Visual FoxPro 和 FoxPro for Macintosh 中，指定信息在图形状态栏中的显示时间。

在 FoxPro for MS-DOS 中，TIMEOUT 子句被忽略。

数值表达式 nSeconds 指定信息在图形状态栏中的显示时间，以秒为单位。例如，如果 nSeconds 为 10，那么信息显示 10 秒后清除。如果 nSeconds 为 0，信息将一直显示在状态栏中直到按某一键为止。

默认情况下，信息显示在图形状态栏中的时间是 5 秒。要恢复默认设置，应发出不带数值表达式 nSeconds 的TIMEOUT 子句：

SET STATUS TIMEOUT TO

说明

SET STATUS 可以在 Visual FoxPro 主窗口中显示或移去基于字符的状态栏。

当您选择一个菜单或菜单项时，有关该菜单或菜单项的信息显示在状态栏中。显示在状态栏中的其他信息还有：

 •	   正在执行的程序的名称（如果存在的话）

 •	   活动的表的别名

 •	   当前记录号

 •	   表中记录的数目

 •	   Insert, Num Lock, 和 Caps Lock 键的状态

当以共享方式打开表时，记录或文件的锁定状态也显示在状态栏中。每当执行一条命令改变了状态信息时就更新状态栏。

当显示基于字符的状态栏时，支持信息的命令（DEFINE MENU、DEFINE POPUP、DEFINE BAR 等）所产生的信息将出现在状态栏下面。可以使用 SET MESSAGE 指定在另外的位置显示信息。

在 Visual FoxPro 和 FoxPro for Macintosh 中，可以使用 SET STATUS 设置信息在图形状态栏中的显示时间。

要在 Visual FoxPro 和 FoxPro for Macintosh 中显示图形状态栏，请参阅 SET STATUS BAR。


请参阅

SET BRSTATUS，SET MESSAGE，SET SCOREBOARD，SET STATUS BAR


SET STATUS BAR 命令

请参阅

显示或删除图形状态栏。包含此命令是为了提供向后兼容性。

语法

SET STATUS BAR ON | OFF

参数

ON

显示图形状态栏。

OFF

移去图形状态栏。

说明

仅用于 Visual FoxPro 和 FoxPro for Macintosh。

图形状态栏显示在 Visual FoxPro 主窗口的底边上。当选择菜单或菜单项时，有关该菜单或菜单项的信息显示在状态栏中。显示在状态栏中的其他信息包括：

 •	   正在执行的程序名（如果存在的话）

 •	   活动的表的别名

 •	   当前记录号

 •	   表中的记录数目

 •	   Insert、 Num Lock 和 Caps Lock 键的状态。

当以共享方式打开表时，记录或文件的锁定状态也显示在状态栏中。每当执行一条命令改变了状态信息时，就更新状态栏。使用 SET CLOCK STATUS 命令可以在图形状态栏中放入时钟。

当显示图形状态栏时，支持信息的命令（DEFINE MENU、DEFINE POPUP、DEFINE BAR 等）产生的信息总是出现在状态栏中。图形状态栏显示时，忽略 SET MESSAGE 指定的信息显示位置。

默认情况下显示图形状态栏。要在启动 Visual FoxPro 或 FoxPro for Macintosh 时不显示图形状态栏，应在 Visual FoxPro 配置文件中加入如下命令：

STATUS BAR = OFF

要显示基于字符的状态栏，请参阅 SET STATUS。


请参阅

SET BRSTATUS，SET MESSAGE，SET SCOREBOARD，SET STATUS


SET STEP 命令

请参阅

为程序调试打开跟踪窗口并挂起程序。

语法

SET STEP ON

参数

ON

打开跟踪窗口并挂起程序。

说明

SET STEP 用于调试程序。可在程序中需要逐条执行命令的地方插入 SET STEP ON 命令。

有关跟踪窗口的详细内容，请参阅跟踪窗口主题和《开发指南》第十六章“测试和调试应用程序”。

可以通过如下步骤来把参数传给程序并跟踪它的运行：

1.	打开跟踪窗口。

2.	从跟踪窗口的“程序”菜单中选择“打开”命令选择要跟踪的程序。

3.	在程序的第一个可执行行上设置断点。

4.	在“命令”窗口中，带参数运行程序（DO ... WITH... ）。


请参阅

SET ECHO


SET STICKY 命令

请参阅

指定在选择一个菜单项、按 Esc 键或在菜单区域外单击鼠标之前菜单保持拉下状态。

语法

SET STICKY ON | OFF

参数

ON

（默认值）启用 SET STICKY。

OFF

废止 SET STICKY。

说明

仅用于 FoxPro for MS-DOS 和 FoxPro for Macintosh。

Visual FoxPro 忽略 SET STICKY 命令。

在 FoxPro for MS-DOS 中，SET STICKY 命令控制 Visual FoxPro 系统菜单的显示。

在 FoxPro for Macintosh 中，SET STICKY 命令控制由 DEFINE POPUP 创建的用户自定义菜单和“跟踪”窗口中菜单的显示。 Visual FoxPro 系统菜单和菜单设计器创建的菜单不受 SET STICKY 命令的影响。

SET STICKY 命令只影响用鼠标作出的菜单选择。


请参阅

SET SYSMENU


SET SYSFORMATS 命令

请参阅

指定是否用当前 Windows 系统设置值更新 Visual FoxPro 系统设置。

语法

SET SYSFORMATS ON | OFF

参数

ON

指定当 Windows 系统设置改变时更新 Visual FoxPro 系统设置。SET SYSFOMAT ON 与选择“选项”对话框中“国际”选项卡上的“使用系统设置”复选框效果一样。

OFF

（默认值）指定当 Windows 系统设置改变时不更新 Visual FoxPro 系统设置。

说明

仅用于 Visual FoxPro。

Windows 系统设置可以在 Windows “控制面板”中的“区域设置”选项中指定。

当 SET SYSFORMATS 为 ON 时，可以用下面的 SET 命令来改写当前系统设置。但是，当 SET SYSFORMATS 为 ON 时修改 Windows 系统设置也将改写这些 SET 命令。

Visual FoxPro 启动时的系统设置是这些 SET 命令的默认设置。要在启动 Visual FoxPro 时使用 Windows 系统设置，应在 Visual FoxPro 配置文件 CONFIG.FPW 中加入如下命令：

SYSFORMATS = ON

 •	   SET CENTURY

 •	   SET CURRENCY

 •	   SET DATE

 •	   SET DECIMALS

 •	   SET HOURS

 •	   SET MARK TO

 •	   SET POINT

 •	   SET SEPARATOR

SET SYSFORMATS 的作用范围是当前数据工作期。


请参阅

SET CENTURY，SET CURRENCY，SET DATASESSION，SET DATE，SET DECIMALS，SET HOURS，SET MARK TO，SET POINT，SET SEPARATOR


SET SYSMENU 命令

请参阅

在程序运行期间，启用或废止 Visual FoxPro 系统菜单栏，并对其重新配置。

语法

SET SYSMENU ON | OFF | AUTOMATIC
| TO [MenuList]
| TO [MenuTitleList]
| TO [DEFAULT] | SAVE | NOSAVE

参数

ON

在程序执行期间，当 Visual FoxPro 等待诸如 BROWSE、READ 和 MODIFY COMMAND 等命令的键盘输入时，启用 Visual FoxPro 主菜栏。

在 FoxPro for MS-DOS 中，不显示 Visual FoxPro 主菜单栏，但是可以通过按 Alt 或 F10 键或双击鼠标右键来显示它。

在 FoxPro for MS-DOS 和 FoxPro for Macintosh 中，默认设置值是ON 。

OFF

在程序执行期间废止 Visual FoxPro 主菜单栏。

AUTOMATIC

使 Visual FoxPro 主菜单栏在程序执行期间可见。可以访问菜单栏，但菜单项是启用还是废止则取决于不同的命令。

在 Visual FoxPro 中，默认设置是 AUTOMATIC。

TO [MenuList]
TO [MenuTitleList]

指定 Visual FoxPro 主菜单栏中菜单或菜单标题的子集。这些菜单或菜单标题可以是主菜单中的菜单或菜单标题的任意组合，相互之间用逗号隔开。菜单和菜单标题的内部名称列在系统菜单名称 中。

例如，下面的命令从 Visual FoxPro 主菜单栏中移去除“文件”和“窗口”菜单外的所有菜单：

SET SYSMENU TO _MFILE, _MWINDOW

使用 RELEASE BAR 可指定菜单中的可用菜单项。

TO [DEFAULT]

将主菜单栏恢复为默认设置。如果对主菜单栏或它的菜单做过修改，可发出 SET SYSMENU TO DEFAULT 命令恢复。使用 SET SYSMENU SAVE 可以指定默认设置。

SAVE

使当前菜单系统成为默认设置。如果在发出 SET SYSMENU SAVE 命令之后修改了菜单系统，可以通过发出 SET SYSMENU TO DEFAULT 命令来恢复前面的设置。

NOSAVE

重置菜单系统为默认的 Visual FoxPro 系统菜单。但是，只有当发出 SET SYSMENU TO DEFAULT 命令之后才显示默认的 Visual FoxPro 系统菜单。

说明

SET SYSMENU 控制程序运行期间的 Visual FoxPro 主菜单栏。它允许有选择地移去 Visual FoxPro 主菜单系统中的菜单标题和菜单，并可以将其恢复。

不带其他参数的 SET SYSMENU TO 命令废止 Visual FoxPro 主菜单栏。


请参阅

系统菜单名称，POP MENU，PUSH MENU，RELEASE，SET STICKY，SYS(2013) - 系统菜单名称字符串


SET TALK 命令

请参阅

决定 Visual FoxPro 是否显示命令结果。

语法

SET TALK ON | OFF | WINDOW [WindowName] | NOWINDOW

参数

ON

（默认值）允许把对话结果发送到 Visual FoxPro 主窗口、系统信息窗口、图形状态栏、或用户自定义窗口中。如果 SET TALK 设置为 OFF 后再改为 ON，那么对话结果将传送到发出 SET TALK OFF 命令之前的输出位置。

OFF

阻止对话结果传送到 Visual FoxPro 主窗口、系统信息窗口、图形状态栏、或用户自定义窗口中。

WINDOW [WindowName]

在 FoxPro for MS-DOS 中，指定当 SET NOTIFY 设置为 ON 时，对话结果显示在系统信息窗口中。当按任意键或移动鼠标时移去系统信息窗口。

WindowName 指定接收对话结果的用户自定义窗口。接收对话结果的用户自定义窗口必须在传送对话结果之前创建。如果指定的窗口不存在，对话结果将发送到 Visual FoxPro 系统窗口中

NOWINDOW

将对话结果直接传送到 Visual FoxPro 主窗口中。

说明

有些表处理命令返回有关运行状态的信息（或“对话结果”）。这些命令有：

APPEND FROM	PACK
AVERAGE	REINDEX
CALCULATE	REPLACE
COPY TO	SELECT - SQL
COUNT	SORT
DELETE	SUM
INDEX	TOTAL
在 FoxPro for MS-DOS 中，对话结果直接传送到 Visual FoxPro 主窗口、系统信息窗口或用户自定义窗口中。对话也可以被关掉。

在 Visual FoxPro 和 FoxPro for Macintosh 中，对话结果直接传送到 Visual FoxPro 主窗口、图形状态栏或用户自定义窗口中。对话也可以被关掉。

SET TALK 的汇报时间间隔可以用 SET ODOMETER 命令指定。SET ODOMETER 的默认设置是 100。请注意当 SET TALK 设置为 ON 时，程序的运行速度会降低。这是因为 Visual FoxPro 主窗口或用户自定义必须经常更新的缘故。如果只需知道某一命令处理记录的总数，就可以在程序执行完后就发出 SET TALK OFF 命令并显示 _TALLY 系统内存变量。

SET TALK 的作用范围是当前数据工作期。


请参阅

DEFINE WINDOW，SET DATASESSION，SET NOTIFY，SET ODOMETER，SYS(103) - 对话设置，_TALLY


SET TEXTMERGE 命令

请参阅

指定是否对文本合并分隔符括起的字段、内存变量、数组元素、函数或表达式进行计算，并允许指定文本合并输出。

语法

SET TEXTMERGE
[ON | OFF]
[TO [FileName] [ADDITIVE]]
[WINDOW WindowName]
[SHOW | NOSHOW]

参数

ON

指定对文本合并分隔符括起的字段、内存变量、数组元素、函数或表达式进行计算。而且当它们放在 \ 或 \\ 之后或 TEXT 和 ENDTEXT 之间时将其输出。

下面的短程序示例说明了当 SET TEXTMERGE 设置为 ON 时如何计算变量 gcTodayDate 和函数 DATE( ) 和 TIME( ) 的值。之所以对变量 gcTodayDate、DATE( ) 和 TIME( ) 进行计算是因为它们用文本合并分隔符括了起来并且 SET TEXTMERGE 的设置为 ON。

CLEAR

SET TALK OFF

STORE 'Today is: ' TO gcTodayDate

SET TEXTMERGE ON

\<<gcTodayDate>>

\\<<DATE( )>>

\The time is:

\\ <<TIME( )>>

下面是上述程序在一月一日运行的结果：

Today is: 01/01/95

The time is: 10:55:19

OFF

（默认值）指定对文本合并分隔符括起的字段、内存变量、数组元素、函数或表达式同括起它们的文本合并分隔符一起不作变化地输出。请注意在 SET TEXTMERGE 设置为 OFF 时与前面示例的输出结果有何不同。

CLEAR

SET TALK OFF

STORE 'Today is: ' TO gcTodayDate

SET TEXTMERGE OFF

\<<gcTodayDate>>

\\<<DATE( )>>

\The time is:

\\ <<TIME( )>>

程序的输出结果为：

<<gcTodayDate>><<DATE( )>>

The time is: <<TIME( )>>

TO [FileName]

指定 \、\\ 和 TEXT ... ENDTEXT 产生的结果不输出到默认的 Visual FoxPro 主窗口中，而是直接输出到文本文件中。可以指定 FileName 把结果输出到某一文本文件中。如果指定的文件不存在，则创建新文件。如果指定的文件已经存在且 SET SAFETY 设置为 ON 时，可以选择改写已有文件。

以低级方式打开文本文件，文件句柄保存在 _TEXT 系统内存变量中。可以用不带参数的 SET TEXTMERGE TO 命令来关闭该文件。如果另一个文件的句柄先前已保存在 _TEXT 中，则关闭此文件。

ADDITIVE

指定 \、\\ 和 TEXT ... ENDTEXT 产生的输出追加在已有文件的后面。

有关将文本合并输出到文件的详细内容，请参阅 _TEXT。

WINDOW WindowName

指定 \、\\ 和 TEXT ... ENDTEXT 产生的结果不输出到默认的 Visual FoxPro 主窗口中，而是直接输出到用户自定义窗口中。WindowName 指定接收输出结果的窗口名。这一窗口必须在接收输出结果前用 DEFINE WINDOW 创建，可以不是活动窗口或可见窗口。

SHOW | NOSHOW

（默认值） SHOW 显示文本合并结果。

NOSHOW 不显示文本合并结果。

默认情况下， 由 \、\\ 和 TEXT ... ENDTEXT 产生的输出结果发送到 Visual FoxPro 主窗口或活动的用户自定义窗口。

说明

\、\\ 和 TEXT ... ENDTEXT 命令用表、内存变量、数组元素、以及函数和表达式的计算结果替换文本中的内容。如果字段、内存变量、数组元素、函数或表达式用文本合并分隔符（默认为 << 和 >>）括起来了，可以计算它们的值然后以文本形式替换其内容。这一文本合并功能可以用于产生信件、程序和创建程序的模板。

SET TEXTMERGE 确定用文本合并分隔符括起来的字段、内存变量、数组元素、函数或表达式的计算方式。它还可以直接将替换的结果输出到 Visual FoxPro 主窗口、用户自定义窗口或文件中。

附注

可以用备注字段嵌套被替换文本。如果备注字段中包含有当前文本合并分隔符括起来的字段名、内存变量、数组元素、函数或表达式，则计算它们的值，并随备注字段的内容一起输出。备注字段的名称也必须用文本合并分隔符括起来。


请参阅

\ | \\，_PRETEXT，SET TEXTMERGE DELIMITERS，_TEXT


SET TEXTMERGE DELIMITERS 命令

请参阅

指定文本合并分隔符。

语法

SET TEXTMERGE DELIMITERS
[TO cLeftDelimiter [, cRightDelimiter]]

参数

TO cLeftDelimiter [, cRightDelimiter]

指定分隔符。如果只使用 cLeftDelimiter 指定一个分隔符，那么左边和右边的分隔符都设置为 cLeftDelimiter。如果指定两个分隔符 cLeftDelimiter 和 cRightDelimiter，则左边的分隔符设置为 cLeftDelimiter，右边的分隔符设置为 cRightDelimiter。

说明

使用 SET TEXTMERGE DELIMITERS 可以指定不同于默认分隔符的一套文本合并分隔符。默认的文本合并分隔符为双尖括号符（<< 和 >>）。可用 DISPLAY STATUS 来显示当前的分隔符。

如果发出不带参数的 SET TEXTMERGE DELIMITERS 命令，文本合并分隔符将恢复为默认设置值。

有关文本合并分隔符的详细内容，请参阅 SET TEXTMERGE。


请参阅

\ | \\，_PRETEXT，SET TEXTMERGE，_TEXT


SET TOPIC 命令

请参阅

指定激活 Visual FoxPro 帮助系统时，要打开的帮助主题。

语法

SET TOPIC TO [cHelpTopicName | lExpression]
 — 或者 —
SET TOPIC ID TO [nContextID]

参数

SET TOPIC TO cHelpTopicName

指定要显示的帮助主题名称。

SET TOPIC TO lExpression

指定根据逻辑表达式 lExpression 打开的帮助主题。

SET TOPIC ID TO nContextID

仅用于 Visual FoxPro。

根据数值形式的上下文 I.D. 指定要显示的帮助主题。

当使用 .DBF 样式的帮助时，nContextID 是帮助表中 Contextid 字段中的值。Contextid 字段必须是帮助表中的第一个字段。

当使用图形样式的帮助时，nContextID 是帮助项目文件 MAP 部分中的上下文编号。

说明

当激活 Visual FoxPro 帮助系统时，发出 SET TOPIC TO 或 SET TOPIC ID TO 显示所有的帮助主题。

有关定制帮助系统的详细内容，请参阅 Visual FoxPro 专业版的《专业级功能指南》第五章“创建 .DBF 样式帮助”和第六章“创建图形样式帮助”。


请参阅

HELP，SET HELP，SET HELPFILTER


SET TOPIC ID 命令

请参阅

指定激活 Visual FoxPro 帮助系统时要显示的帮助主题。帮助主题根据主题的上下文 ID 确定。

语法

SET TOPIC ID TO nHelpContextID

参数

nHelpContextID

指定要显示的帮助主题的上下文 ID。


请参阅

HELP，SET HELP，SET TOPIC


SET TRBETWEEN 命令

请参阅

在跟踪窗口的断点之间启用或废止跟踪。

语法

SET TRBETWEEN ON | OFF

参数

ON

（默认值）执行程序，在跟踪窗口中突出显示每行代码，使用 SET TRBETWEEN ON 命令和跟踪窗口的“程序”菜单中激活“在两个断点之间跟踪”命令一样。

OFF

在跟踪窗口中，只突出显示程序运行暂停时的最后一行。使用 SET TRBETWEEN OFF 命令与废止“在两个断点之间跟踪”命令一样。

说明

在程序执行时，跟踪窗口显示程序的源代码，突出显示正在执行的程序行。当打开跟踪窗口时，可以设置终止程序的断点。

也可以用 ACTIVATE WINDOW TRACE、SET ECHO ON 或 SET STEP ON 打开跟踪窗口。


请参阅

ACTIVATE WINDOW，SET ECHO，SET STEP


SET TYPEAHEAD 命令

请参阅

指定键盘缓冲区中可以存储的最大字符数。

语法

SET TYPEAHEAD TO nCharacters

参数

nCharacters

指定键盘缓冲区中可以存储的最大字符数。

如果使用 SET TYPEAHEAD TO 0，则键盘缓冲区中不保存任何字符，这条语句使 INKEY( ) 和 ON KEY 均无效。

说明

在进行字符处理之前，键盘缓冲区可存储多达 32,000 个字符，SET TYPEAHEAD 的默认值是 20。


请参阅

INKEY( )，ON KEY


SET UDFPARMS 命令

请参阅	示例

Visual FoxPro 在向用户自定义函数 (UDF) 传递参数时，指定为按值传递还是通过引用传递。

语法

SET UDFPARMS TO VALUE | REFERENCE

参数

TO VALUE

向一个用户自定义函数按值传递一个变量。当按值传递变量时，在用户自定义函数中可以更改变量的值，但调用程序中变量的原值不变。

TO REFERENCE

向一个用户自定义函数通过引用传递一个变量。当通过引用传递变量时，如果在用户自定义函数中更改了变量的值，则调用程序中变量的原值也随之更改。

说明

默认情况下，变量以值传递方式传递给用户自定义函数（用 DO ... WITH 传递给过程的变量为通过引用传递）。

不管 SET UDFPARMS 如何设置，可以强制设定以值传递方式或引用传递方式向一个 UDF 传递参数：如果用括号括起一个变量，则设定按值传递；在一个变量前加 ＠ 符号，可以设定以引用传递方式传递。

提示

可以把整个数组传递给一个过程或用户自定义函数。如果使用 SET UDFPARMS TO REFERENCE 命令，或者在数组名前加 ＠，就可以传递整个数组；如果使用 SET UDFPARMS TO VALUE 命令，或者用括号把数组名括起来，可以按值传递数组的第一个元素。数组元素总是按值传递。


* 下面的示例展示了按值传递和引用传递变量的区别。
*

*** 按值传递内存变量***

CLEAR

SET TALK OFF

WAIT 'Press a key to pass by value' WINDOW

SET UDFPARMS TO VALUE

STORE 1 TO gnX

*** gnX 的值没有更改***

@ 2,2 SAY 'UDF value: ' + STR(plusone(gnX))

@ 4,2 SAY 'Value of gnX: ' + STR(gnX)

*** 通过引用传递内存变量***

WAIT 'Press a key to pass by reference' WINDOW

CLEAR

SET UDFPARMS TO REFERENCE

STORE 1 TO gnX

*** gnX 的值改变了***

@ 2,2 SAY 'UDF value: ' + STR(plusone(gnX))

@ 4,2 SAY 'Value of X: ' + STR(gnX)

SET UDFPARMS TO VALUE

***这个 UDF 给一个数加1 ***

FUNCTION plusone

PARAMETER gnZ

gnZ = gnZ + 1

RETURN gnZ

*** UDF 结束 ***

下面的示例和上面的一样，只是分别用括号和 ＠ 来表示按值和通过引用传递变量：

*** 按值传递内存变量***

CLEAR

SET TALK OFF

WAIT 'Press a key to pass by value' WINDOW

STORE 1 TO gnX

@ 2,2 SAY 'UDF value: ' + STR(plusone((gnX)))

@ 4,2 SAY 'Value of gnX: ' + STR(gnX)

*** 通过引用传递内存变量 ***

WAIT 'Press a key to pass by reference' WINDOW

CLEAR

STORE 1 TO gnX

@ 2,2 SAY 'UDF value: ' + STR(plusone(@gnX))

@ 4,2 SAY 'Value of gnX: ' + STR(gnX)

*** 这个 UDF 给一个数加 1***

FUNCTION plusone

PARAMETER gnZ

gnZ = gnZ + 1

RETURN gnZ

*** 结束***


请参阅

DO，LPARAMETERS，PARAMETERS( )，PROCEDURE，使用过程和用户自定义函数


SET UNIQUE 命令

请参阅

指定具有重复索引关键字的记录是否保留在索引文件中。

语法

SET UNIQUE ON | OFF

参数

ON

指定全部具有重复索引关键字的记录都不保留在索引文件中，只保留具有原始索引关键字值的第一个记录。

OFF

（默认值）把具有重复索引关键字的记录保留到索引文件中。

说明

当使用 REINDEX 命令时，索引文件保留它的 SET UNIQUE 设置，有关详细内容，请参阅 INDEX 和 REINDEX。

SET UNIQUE 作用范围是当前数据工作期。


请参阅

INDEX，REINDEX，SET DATASESSION


SET VIEW 命令

请参阅

打开或关闭查看窗口，或者从一个视图文件中恢复 Visual FoxPro 环境。

语法

SET VIEW ON | OFF
 — 或者  —
SET VIEW TO FileName | ?

参数

ON

打开查看窗口。

OFF

（默认值）关闭查看窗口。

TO FileName

把 Visual FoxPro 环境还原成视图文件创建时的状态。其中用 FileName 指定视图文件，用 CREATE VIEW 命令创建视图文件。

?

显示“打开”对话框，从对话框中打开一个视图文件。

说明

有关视图文件的详细内容，请参阅 CREATE VIEW。


请参阅

CREATE VIEW，SET


SET VOLUME 命令

请参阅

将 MS-DOS 的驱动器指示符 (A:，B:，C:，等等) 映象成 FoxPro for Macintosh 中的卷或文件夹。

语法

SET VOLUME cMS-DOSDrive TO [cMacintoshPath]

参数

cMS-DOSDrive

指定一个 MS-DOS 驱动器指示符，可以是 A 到 Z 的任何字母。驱动器分隔符 — 冒号（例如 A: 或 C）是可选的:。

cMacintoshPath

指定卷名、带文件夹名的卷名、嵌套的文件夹 或 Macintosh 速记符号（ : 或 ::）或 MS-DOS 速记符号（\ 或 ..）。

如果 cMacintoshPath 包含的卷名或文件夹名有一个空格，则 cMacintoshPath 必须放在括号里；如果 cMacintoshPath 中包含一个不完整的路径，则路径相对于当前默认文件夹。

附注

FoxPro for Macintosh 并不能识别嵌入反斜杠( \ )的文件夹名。如果文件夹名包含一个嵌入的反斜杠，Visual FoxPro 将产生错误信息。

说明

仅用于 FoxPro for Macintosh。

可以用 SET VOLUME 把在 FoxPro for MS-DOS 和 Visual FoxPro 中创建的应用程序转移到 FoxPro for Macintosh 中。对于每一个 MS-DOS 驱动器指示符，FoxPro for Macintosh 在内部使用 Macintosh 的卷或文件夹替换。

当启动 FoxPro for Macintosh 时，没有默认的卷或文件夹的指示符。但是，可以在 Visual Foxpro 的配置文件中用 VOLUME 配置项指定一个默认的卷或文件夹。

可以用 DISPLAY STATUS 显示当前卷或文件夹映象。

下面命令把每次出现的 MS-DOS C 驱动器映象成为名为 MacHD 或 Mac HD 的 Macintosh 卷名：

SET VOLUME C: TO MacHD:

SET VOLUME C: TO 'Mac HD:'

SET VOLUME C TO 'Mac HD:'

也可以指定带 Macintosh 卷的文件夹：

SET VOLUME C: TO MacHD:FolderOne

SET VOLUME C TO 'MacHD:Folder One'

也可以使用 MS-DOS 和 Macintosh 速记符号。要把每次出现的 MS-DOS C 驱动器映象成为当前的 Macintosh 卷，使用下列命令：

SET VOLUME C TO \

要把每次出现的 MS-DOS C 驱动器映象成为 FoxPro for Macintosh 启动卷，在使用 SET VOLUME 时可以不带 cMacintoshPath 参数：

SET VOLUME C TO


请参阅

SYS(5) - 默认驱动器，SYS(2003) - 当前目录


SET WINDOW OF MEMO 命令

请参阅

指定可以编辑备注字段的一个窗口。包含此命令是为了提供向后兼容性。

语法

SET WINDOW OF MEMO TO WindowName

参数

WindowName

指定编辑备注字段的窗口。

说明

可以使用 SET WINDOW 在一个用户自定义的窗口中编辑备注字段。当执行 @ ... GET, APPEND、BROWSE、CHANGE、EDIT 或 MODIFY MEMO 等命令时，备注在指定窗口中出现。必须在发出 SET WINDOW OF MEMO 命令之前，定义这个用户自定义窗口。

在 FoxPro for MS-DOS 和 Visual FoxPro 中，要在指定窗口中编辑一个备注字段，可把光标移动到备注字段，并按下 Ctrl+Home, Ctrl+Page Up, Ctrl+Page Down ，或者双击备注字段。在 FoxPro for Macintosh 中，用 [image] 代替 Ctrl 键。


请参阅

@ ... EDIT，MODIFY MEMO


SET XCMDFILE 命令

请参阅

打开包含外部命令 (XCMD) 和函数 (XFCN) 的 Macintosh 资源文件。

语法

SET XCMDFILE TO [FileName]

参数

TO FileName

想要打开的外部命令资源文件。

使用 SET XCMDFILE TO 时，不带 FileName 参数可以关闭所有已打开的外部命令资源文件。想要从内存中移走某个的外部命令或函数，可以使用 RELEASE MODULE 命令。

说明

仅用于 FoxPro for Macintosh。

打开一个资源文件后，可使用 LOAD 命令将一个外部命令或函数加载进内存，然后使用 CALL 命令执行。

一次最多可以加载 16 个外部命令或函数。外部命令资源文件可以扩展 FoxPro for Macintosh 的功能。

使用 DISPLAY STATUS 可以显示已打开的外部命令资源文件，也可以显示用 LOAD 命令加载到内存的外部命令和函数。


请参阅

CALL，DISPLAY STATUS，LIST，LOAD，RELEASE


SET( ) 函数

请参阅

返回各种 SET 命令的状态。

语法

SET(cSETCommand [, 1 | 2])

参数

cSETCommand

一个字符表达式，指定要返回当前状态信息的 SET 命令。指定命令的当前设置作为一个字符串或数值串返回。

1 | 2

返回一个 SET 命令的附加信息。包含这个参数并不意味着对所有 SET 命令都返回附加信息，它只是返回下表所列的标有 1 和 2 的命令附加信息。

SET 命令	返回值
ALTERNATE	ON 或 OFF
ALTERNATE, 1	FileName
APLABOUT	ENABLED 或 DISABLED
APLABOUT, 1	cMenuItemText
CLOCK	ON 或 OFF
CLOCK, 1	nRow 和 nColumn
COMPATIBLE	ON 或 OFF
COMPATIBLE, 1	PROMPT 或 NOPROMPT
CURRENCY	LEFT 或 RIGHT
CURRENCY, 1	cCurrencySymbol
DELIMITERS	ON 或 OFF
DELIMITERS, 1	cDelimiters
FIELDS	ON 或 OFF
FIELDS, 1	FieldName1, FieldName2, ...
FIELDS, 2	LOCAL 或 GLOBAL
HELP	ON 或 OFF
HELP, 1	FileName
MACHELP	ENABLED 或 DISABLED
MACHELP,1	cMenuItemText
MESSAGE	nRow
MESSAGE, 1	cMessageText
MOUSE	ON 或 OFF
MOUSE, 1	nSensitivity
PRINTER	ON 或 OFF
PRINTER, 1	FileName 或 PortName
RESOURCE	ON 或 OFF
RESOURCE, 1	FileName
TALK	ON 或 OFF
TALK, 1	WINDOW, NOWINDOW 或 WindowName
TEXTMERGE	ON 或 OFF
TEXTMERGE, 1	cLeftDelimiter 和 cRightDelimiter
TOPIC	cHelpTopicName | lExpression
TOPIC, 1	nContextID
返回值类型

字符型，数值型

说明

不能用 SET( ) 函数指定所有 SET 命令，可以指定的命令列在上面参数部分的表中。

SET ( ) 可以识别所有 Visual FoxPro 中 SET 关键字的四字符缩写形式。例如，STAT 和 PRIN 可以分别用来代替 SET STATUS 和 SET PRINTER。

SET( ) 函数与 SYS(2001) 的作用一样。


请参阅

DISPLAY STATUS，LIST，SET，SYS(2001) - SET ... 命令状态


SetAll 方法

请参阅	示例

为容器对象中的所有控制或某类控制指定一个属性设置。

应用于

列，命令组，容器对象，表单，表单集，表格，选项组，页面，页框，_SCREEN，工具栏

语法

Container.SetAll(cProperty, Value [, cClass])

参数

cProperty

要设置的属性。

Value

属性的新值，Value 的数据类型取决于要设置的属性。

cClass

指定类名，该类为对象的基类，不能是 Visual FoxPro 基类。

说明

使用 Set All 方法可为容器中的所有控制或某类控制设置一个属性。例如，为了把表格控制中列对象的 BackColor 属性设置为红色，可以使用下列命令：

Form1.Grid1.SetAll(BackColor, RGB(255, 0, 0), Column)

也可以设置容器中其他对象包含的对象属性。要把表格控制中每个列对象包含的标头的 ForeColor 属性设置为绿色，可以使用下列命令：

Form1.Grid1.SetAll('ForeColor', RGB(0, 255, 0), 'Header')


* 下面的示例用 Set All 方法和 DynamicBackColor 属性为一个
*  表格控制中的记录指定背景颜色。如果表格中显示的记录编号是
*  偶数，则记录的 DynamicBackColor 为白色，否则它的颜色
*  为绿色。
*

* 在示例中，表格控制放在一个表单内，customer 表是打开的，而
* 且内容用表格控制显示。Caption 属性用来为 CUST_ID 字段
* 指定一个标头标题 (Customer ID)。表单中放有一个
*  命令按钮，用来关闭表单。

CLOSE ALL  && 关闭表和数据库

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  IN 0  && 打开 Customer 表

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .f.  && 废止控制菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmdBtn')  && 添加命令按钮

frmMyForm.AddObject('grdGrid1','Grid')  && 添加表格控制

frmMyForm.grdGrid1.Left = 25    && 调整表格位置

frmMyForm.grdGrid1.SetAll("DynamicBackColor", ;

"IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) ;

, RGB(0,255,0))", "Column")  && 动态设置白和绿记录

frmMyForm.grdGrid1.Visible = .T.  && 使表格控制可见

frmMyForm.cmdCommand1.Visible =.T.  && 使“Quit”命令按钮可视

frmMyForm.grdGrid1.Column1.Header1.Caption = 'Customer ID'

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件循环

DEFINE CLASS cmdMyCmdBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 为命令按钮加标题

Cancel = .T.  &&  默认的取消命令按钮(Esc)

Left = 125  && 命令按钮起始点所在的列

Top = 210  && 命令按钮起始点所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件循环，关闭表单

CLOSE ALL  && 关闭表和数据库

ENDDEFINE


请参阅

SaveAs 方法，SaveAsClass 方法


SETFLDSTATE( ) 函数

请参阅	示例

为表或临时表中的字段或记录指定字段状态值或删除状态值。

语法

SETFLDSTATE(cFieldName | nFieldNumber, nFieldState
[, cTableAlias | nWorkArea])

参数

cFieldName | nFieldNumber

指定字段名或字段编号，对此字段指定编辑或删除状态，字段编号 nFieldNumber 为字段在表或临时表结构中的位置。DISPLAY STRUCTURE 或 FIELD( ) 可以用来确定一个字段的编号。

要给记录设置删除状态，把字段编号设置为 0。

nFieldState

为字段状态或删除状态指定一个值。下表列出字段状态值或删除状态值以及相应的编辑或删除状态。

nFieldState	编辑或删除状态
1	字段没有被编辑或删除状态没有改变。
2	字段已被编辑或删除状态已改变。
3	追加记录的字段没有被编辑或追加记录的删除状态没有改变。
4	追加记录的字段已被编辑或追加记录的删除状态已改变。
cTableAlias

表或临时表的别名，在其中指定编辑状态或删除状态。

nWorkArea

表或临时表的工作区。使用 SETFLDSTATE( ) 时，如果不带可选的 cTableAlias 或 nWorkArea 参数，则为当前选定工作区中打开的表或临时表指定字段状态值或删除状态值。

返回值类型

逻辑型

说明

Visual FoxPro 用字段状态值确定表或临时表的哪个字段被更新。SETFLDSTATE( ) 允许您控制 Visual FoxPro 的字段状态，而不管表或临时表中哪个字段进行了编辑。


* 下面示例演示如何用 SETFLDSTATE( ) 改变字段状态。将
*  MULTILOCKS 设置为 ON 是表缓冲的要求，然后打开
*  testdata 数据库中的 customer 表，并用
*  CURSORSETPROP( ) 把缓冲方式设置成开放式表缓冲 (5)。
*

* GETFLDSTATE( ) 用来获取字段状态，这时显示一个值 (1)，
* 表明 cust_id 字段未修改。在 cust_id 字段用 REPLACE
* 修改之后，再次使用 GETFLDSTATE( )，这时显示一个值 (2)，
* 它表明 cust_id 字段已修改。
*

* SETFLDSTATE( ) 用来把 cust_id 字段的状态改回 1 (未修改)。
*  调用 GETFLDSTATE( ) 后，显示值为 1，这与用
*  SETFLDSTATE( ) 指定的 cust_id 字段状态相对应。
* TABLEREVERT( ) 用来恢复表的原始状态。
*

CLOSE DATABASES

SET MULTILOCKS ON  && 为表缓冲必须设置为 ON

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置数据库的路径

OPEN DATABASE testdata  && 打开 testdata 数据库

USE Customer	  && 打开 Customer 表

= CURSORSETPROP('Buffering', 5, 'customer')  && 启用表缓冲

CLEAR

? GETFLDSTATE('cust_id')  && 显示 1，未修改

REPLACE cust_id 	WITH '***'  && 更改字段内容

? GETFLDSTATE('cust_id')  && 返回 2，字段已修改

= SETFLDSTATE('cust_id', 1)  && 更改字段状态

? GETFLDSTATE('cust_id')  && 显示 1，未修改

= TABLEREVERT(.T.)  && 放弃所有对表的修改


请参阅

DELETED( )，DISPLAY STRUCTURE，FIELD( )，GETFLDSTATE( )


SetFocus 方法

请参阅

为一个控制指定焦点。

应用于

复选框，列，组合框，命令按钮，容器对象，控制对象，编辑框，表格，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，微调，文本框

语法

Control.SetFocus

说明

如果控制的 Enabled 或 Visible 属性设置为“假”(.F.)，或者控制的 When 事件返回“假”(.F.)，则不能给一个控制指定焦点；如果 Enabled 或 Visible 属性已设置为“假”(.F.)，则控制在使用 SetFocus 方法接受焦点之前，必须首先把它们设置为“真”(.T.)。

一旦控制获得了焦点，用户的任何输入都针对这个控制。


请参阅

Enabled 属性，GotFocus 事件，LostFocus 事件，Visible 属性


Shape 控制
Shape（形状）控制

请参阅	属性	事件	方法	示例

创建一个可以显示矩形、圆或椭圆的形状控制。

语法

Shape

说明

形状控制是可以显示矩形、圆或椭圆的图形控制，这些图形不能直接修改。但是，因为形状控制包括很多其他控制具有的属性、事件和方法，所以形状控制能响应事件，并且在运行时可动态地修改。

Curvature 属性决定显示什么样的图形，它的变化范围是 0 到 99。0 表示无曲率，用来创建矩形；99 表示最大曲率，创建圆和椭圆。

有关创建形状控制的详细内容，请参阅表单设计器主题和《开发指南》第十一章“使用控制”。


 属性

BackColor	BackStyle	BaseClass
BorderColor	BorderStyle	BorderWidth
Class	ClassLibrary	ColorScheme
ColorSource	Comment	Curvature
DragIcon	DragMode	DrawMode
Enabled	FillColor	FillStyle
Height	HelpContextID	Left
MousePointer	Name	Parent
ParentClass	ReadObject	SpecialEffect
Tag	ToolTipText	Top
Visible	Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
Init	MouseDown	MouseMove
MouseUp	RightClick	UIEnable


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	SaveAsClass
WriteExpression	WriteMethod	ZOrder


*下面示例演示了如何在表单中用形状控制显示圆、椭圆或矩形。
*

* 示例中，首先创建一个表单，并且在表单上添加了一组选项
*  按钮和一个命令按钮。当单击一个选项按钮时，相应的形状就
*  显示在表单中。要显示一个形状控制，需设置 Visible 属性
*  为“真”(.T.)；为显示另一个形状控制，原来的形状控制需
*  设置为“假”(.F.)，每个形状控制的 Height、Width 和
*  Curvature 属性决定了所创建的形状（圆、椭圆或矩形）。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止控制菜单框

frmMyForm.AddObject('cmdCommand1','cmdMyCmndBtn')  && 添加命令按钮

frmMyForm.AddObject('opgOptionGroup1','opgMyOptGrp') && 添加选项组

frmMyForm.AddObject('shpCircle1','shpMyCircle')  && Add 添加圆形

frmMyForm.AddObject('shpEllipse1','shpMyEllipse')  && 添加椭圆

frmMyForm.AddObject('shpSquare','shpMySquare')  && 添加矩形

frmMyForm.cmdCommand1.Visible =.T.  && "Quit" 命令按钮可见

frmMyForm.opgOptionGroup1.Buttons(1).Caption = "\<Circle"

frmMyForm.opgOptionGroup1.Buttons(2).Caption = "\<Ellipse"

frmMyForm.opgOptionGroup1.Buttons(3).Caption = "\<Square"

frmMyForm.opgOptionGroup1.SetAll("Width", 100) && 设置选项组宽度

frmMyForm.opgOptionGroup1.Visible = .T.  &&选项组可见

frmMyForm.opgOptionGroup1.Click  && 显示圆

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 开始事件过程

DEFINE CLASS opgMyOptGrp AS OptionGroup  && 创建一个选项组

ButtonCount = 3  && 3 个选项按钮

Top = 10

Left = 10

Height = 75

Width = 100

PROCEDURE Click

ThisForm.shpCircle1.Visible = .F.  && 隐藏圆

ThisForm.shpEllipse1.Visible = .F.  && 隐藏椭圆

ThisForm.shpSquare.Visible = .F.  && 隐藏矩形

DO CASE

CASE ThisForm.opgOptionGroup1.Value = 1

ThisForm.shpCircle1.Visible = .T. && 显示圆

CASE ThisForm.opgOptionGroup1.Value = 2

ThisForm.shpEllipse1.Visible = .T.  && 显示椭圆

CASE ThisForm.opgOptionGroup1.Value = 3

ThisForm.shpSquare.Visible = .T.  && 显示矩形

ENDCASE

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标题

Cancel = .T.  && 默认的撤消命令按钮(ESC)

Left = 125  && 命令按钮起始点所在的列

Top = 210  && 命令按钮起始点所在的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  && 终止事件过程，关闭表单

ENDDEFINE

DEFINE CLASS shpMyCircle AS Shape  && 创建一个圆

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 99

BackColor = RGB(255,0,0)  && 红色

ENDDEFINE

DEFINE CLASS shpMyEllipse AS Shape  && 创建一个椭圆

Top = 35

Left = 200

Width = 100

Height = 50

Curvature = 99

BackColor = RGB(0,128,0)  && 绿色

ENDDEFINE

DEFINE CLASS shpMySquare AS Shape  && 创建一个矩形

Top = 10

Left = 200

Width = 100

Height = 100

Curvature = 0

BackColor = RGB(0,0,255)  && 蓝色

ENDDEFINE


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


_SHELL 系统内存变量

请参阅

指定一个程序外壳。

语法

_SHELL = cCommand

说明

在 Visual FoxPro 正执行程序时，_SHELL 系统内存变量阻止访问命令窗口。带有要执行程序名的 DO 命令通常存储于 _SHELL 中。

把 SHELL 配置项放进 Visual FoxPro 配置文件中，可以在启动 Visual FoxPro 时指定执行的命令。

下面的示例演示了 _SHELL 的典型用法。

1.	一个名为 MYSTAR.PRG 的启动程序用来启动另一个程序 MYAPP.PRG。MYSTART.PRG 把运行 MYAPP.PRG 的命令存储于 _SHELL。Visual FoxPro 显示命令窗口之前，在 _SHELL 中搜索命令。如果 _SHELL 包含一条命令，就执行它，然后 Visual FoxPro 把空串存储于 _SHELL 中。

2.	当成功执行 MYAPP.PRG 中的初始化代码后，启动 MYAPP.PRG 的命令再次存入 _SHELL。Visual FoxPro 并不执行该命令，也不把空串存储于 _SHELL，而且任何对命令窗口的访问都被阻止（当 _SHELL 包含除空串之外的任何命令时，命令窗口的访问都被禁止）。

3.	MYAPP.PRG 在结束执行之前，把空串存入 _SHELL 以便恢复对命令窗口的访问。

*** MYSTART.PRG ***

...

_SHELL = "DO MYAPP.PRG"

*** MYAPP.PRG ***

*** 初始化代码***

...

*** 初始化代码成功执完了吗?***

_SHELL = "DO MYAPP.PRG" && 阻止访问命令窗口

...

*** 清除代码***

_SHELL = ""


请参阅

DO 命令，RUN | !，_STARTUP 系统内存变量


SHOW GET 命令

请参阅

重新显示指定到内存变量、数组元素或字段的控制。包含此命令是为了提供向后兼容性，可用 Refresh 方法 代替。

语法

SHOW GET MemVarName
[, nButtonNumber [PROMPT cCaptionText]]
[ENABLE | DISABLE]
[LEVEL nREADLevel]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

MemVarName

指定给控制的内存变量、数组元素或字段。

在下面示例中，创建了三个标题为 Apples、Oranges 和 Lemons 的选项按钮。MemVarName 是名为 gnFruit 的内存变量，它初始化选项按钮（因为 gnFruit 等于 2，所以第二个按钮先被选定）。当选定一个按钮时，按钮编号就存入 gnFruit。

CLEAR

STORE 2 TO gnFruit

@ 4,2 GET gnFruit PICTURE '@*R Apples;Oranges;Lemons'

READ CYCLE

nButtonNumber

在一组透明按钮、选项按钮或命令按钮中指定重新显示按钮的编号，按钮编号是由按钮标题的创建顺序决定的。在示例中，先创建 Apples，所以它的按钮编号为 1；Oranges 第二个被创建，按钮编号为 2；最后一个按钮 Lemons 的按钮编号为 3。

下面的示例创建了与前例相同的按钮。不同的是，当选择一个按钮时，执行 noorange VALID 例程，这个例程用 SHOW GET 和 DISABLE 废止 Oranges 按钮。

CLEAR

STORE 2 TO gnFruit

@ 4,2 GET gnFruit PICTURE '@*R Apples;Oranges;Lemons' ;

VALID noorange( )

READ CYCLE

FUNCTION noorange

SHOW GET gnFruit,2 DISABLE  && 废止第二个按钮

_CUROBJ = 1

RETURN .T.

PROMPT cCaptionText

为单个选项按钮、命令按钮或复选框指定代替原标题的标题。cCaptionText 指定标题的文本。cCaptionText 中，指定合适的特殊字符可以更改按钮或复选框的属性（即决定控制是否废止、哪个键为访问键、是否为默认控制、是否支持 Esc 选择等）。

SHOW GET 通常放在复选框、选项按钮或命令按钮的 VALID 例程中。

在下面示例中，创建了一个复选框。当选择复选框时，就执行 VALID 子句的 newprompt 例程。例程更改复选框标题和访问键。

CLEAR

STORE 1 TO gnCheck

@ 4,2 GET gnCheck FUNCTION '*C \<Checked' SIZE 1,13 VALID NEWPROMPT( )

READ CYCLE

FUNCTION newprompt

IF check = 0

SHOW GET gnCheck,1 PROMPT '\<Unchecked'

ELSE

SHOW GET gnCheck,1 PROMPT '\<Checked'

ENDIF

RETURN .T.

在 Visual FoxPro 和 FoxPro for Macintosh 中，当控制被启用、选定或废止时，可以用 PROMPT 指定图形文件，将图形显示在图形复选框、选项按钮或命令按钮中。

如果在 FoxPro for MS-DOS 中用 PROMPT 指定一个图形文件，此子句被忽略。

在 Visual FoxPro 中，图形文件是位图文件（有 .BMP 扩展名）。在 FoxPro for Macintosh 中，图形文件可以是 PICT 类型文件，也可以是 .BMP 文件。

cCaptionText 可以包含一组多达 3 个用逗号分隔的图形文件。当启用图形复选框、选项按钮或命令按钮时，显示第一个图形；当图形复选框、选项按钮或命令按钮被选定时，显示第二个图形；当图形复选框、选项按钮或命令按钮被废止时，显示第三个图形。

ENABLE

指定的控制被选定。

DISABLE

控制不被选定并使它变暗。

LEVEL nREADLevel

在某个 READ 级（而不是当前级）上重新显示一个控制，数值表达式 nREADLevel 可以取值为 1，2，3，4 或 5，和重新显示控制的 READ 级相对应。如果省略 LEVEL 子句，SHOW GET 默认使用当前 READ 级。

用 RDLEVEL( ) 决定当前 READ 级。

COLOR SCHEME nSchemeNumber | COLOR ColorPairList]

按指定的颜色重新显示控制，可以指定一个配色方案或一个颜色对列表。有关控制颜色的详细内容，请参阅控制和对象。

说明

包含此命令是为了提供向后兼容性。在 Visual FoxPro 中，更改控制的属性之后，可用 Refresh 方法重新显示控制。

SHOW GET 重新显示单个的控制（文本框、复选框或类似控制）。当重新显示一个控制时，它可以处于启用状态，也可以处于废止状态，SHOW GET 也可用来在一组透明按钮、选项按钮或命令按钮中重新显示单个的按钮，或者更改按钮和复选框的标题。


请参阅

控制和对象，CREATE FORM，Refresh 方法


SHOW GETS 命令

请参阅

重新显示所有控制。包含此命令是为了提供向后兼容性，可用 Refresh 方法 代替。

语法

SHOW GETS
[ENABLE | DISABLE]
[LEVEL nREADLevel]
[OFF | ONLY]
[WINDOW WindowName]
[LOCK]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

ENABLE

所有控制被选定。

DISABLE

所有控制不被选定，并使它们变暗。

LEVEL nREADLevel

在某个 READ 级而不是当前级上重新显示控制。数值表达式 nREADLevel 可以取值为 1，2，3，4 或 5，和重新显示控制的 READ 级相对应。如果不含 LEVEL 子句，SHOW GETS 默认使用当前 READ 级。

可用 RDLEVEL( ) 确定当前的 READ 级。

附注

在一个活动 READ 语句调用的例程中使用 READ 命令，可以嵌套 READ 命令，READ 命令最多可以嵌套 5 层。

OFF

指定执行 READ SHOW 例程，但不刷新任何控制。

ONLY

指定刷新控制，但不执行 READ SHOW 例程。

WINDOW WindowName

指定重新显示控制的窗口名。该参数允许在特定窗口中重新显示控制，而不是在所有窗口中重新显示控制。控制可以放在不同的窗口中，并且可以用单个的 READ 语句激活。

使用 SHOW GETS 时，如果带有 WINDOW 子句，SYS(2016) 返回该窗口名；使用 SHOW GETS 时，如果不带 WINDOW 子句，SYS(2016) 返回一个星号 (*)。

LOCK

该选项使 SHOW GETS 总是尝试锁定 READ 中涉及的记录。SHOW GETS LOCK 命令允许忽略 READ NOLOCK 命令。

在 READ 过程中，常规的锁定动作如下：如果使用 READ 或 READ LOCK 命令，并且以共享方式在网络上打开一个表时，Visual FoxPro 将尝试锁定 READ 涉及的所有记录；如果使用的是 READ NOLOCK 命令，Visual FoxPro 将不尝试锁定记录，并且使 READ 涉及的所有字段只读。

SHOW CETS 命令采用 READ 的记录锁定动作。如果使用 READ 或 READ LOCK 命令，SHOW CETS 命令尝试锁定 READ 涉及的记录；如果使用 READ NOLOCK 命令，SHOW CETS 命令不尝试锁定记录，并使 READ 涉及的所有字段只读。

有关在 READ 过程中如何尝试锁定记录的详细内容，请参阅 READ。

COLOR SCHEME [nSchemeNumber | COLOR ColorPairList]

按指定的颜色重新显示控制，配色方案或颜色对列表可由您指定。有关控制颜色的详细内容，请参阅控制和对象。

说明

包含此命令是为了提供向后兼容性。对于 Visual FoxPro，在更改表单或表单集中控制属性之后，可使用 Refresh 方法重新显示所有控制。

SHOW GETS 重新显示所有控制（文本框、复选框等等）。在重新显示控制时，它们可以处于启用状态或废止状态。

SHOW CETS 命令重新设置 UPDATED( ) 为“假”(.F.)。


请参阅

控制和对象，CREATE FORM，Refresh 方法


SHOW MENU 命令

请参阅	示例

显示一个或多个用户自定义菜单栏，但不激活它们。

语法

SHOW MENU MenuBarName1 [, MenuBarName2 ...] | ALL
[PAD MenuTitleName]
[SAVE]

参数

MenuBarName1 [, MenuBarName2 ...]

指定要显示的一个或多个菜单栏的名称。

ALL

显示所有当前定义的菜单栏。

PAD MenuTitleName

指定在菜单栏中突出显示的菜单标题。

SAVE

保留指定菜单栏的图象，但不激活它们，可以用 CLEAR 命令清除菜单栏的图象。

说明

此命令显示菜单栏，但不能使用。显示之前，必须首先用 DEFINE MENU 创建菜单栏。


CLEAR

DEFINE MENU mnuExample BAR AT LINE 2

DEFINE PAD padConv OF mnuExample PROMPT '\<Conversions' COLOR SCHEME 3 ;

KEY ALT+C, ''

DEFINE PAD padCard OF mnuExample PROMPT 'Card \<Info' COLOR SCHEME 3 ;

KEY ALT+I, ''

SHOW MENU mnuExample


请参阅

ACTIVATE MENU，CREATE MENU，DEFINE MENU


Show 方法

请参阅

显示一个表单，并且确定是模式表单还是无模式表单。

应用于

表单，表单集，_SCREEN，工具栏

语法

[FormSet.]Object.Show([nStyle])

参数

nStyle

确定如何显示表单。下列值有效：

值	说明
1	模式表单。只有隐藏或释放模式表单之后，用户的输入（键盘或鼠标）才能被其他表单或菜单接收。在接收其他用户输入之前，程序必须隐藏或释放模式表单（通常是响应某些用户动作）。当应用程序中的模式表单显示时，虽然其他表单被废止，但是其他应用程序并不被废止。
2	（默认值）无模式表单。遇到 Show 方法之后出现的代码时，就执行它们。
如果 nStyle 省略，表单按 WindowType 属性指定的样式显示。

说明

Show 方法把表单或表单集的 Visible 属性设置为“真”(.T.)，并使表单成为活动的对象。如果表单的 Visible 属性已经设置为“真”(.T.)，则 Show 方法使它成为活动对象。

如果激活的是表单集，则表单集中最近一个活动表单成为活动表单；如果没有活动表单，则第一个添加到表单集类定义中的表单成为活动表单。

表单集中包含的表单保留 Visible 属性设置。如果表单的 Visible 属性设置为“假”(.F.），表单集的 Show 方法不显示这个表单。

所有表单集中的表单采取表单集的形式。例如，如果表单集为模式表单集，则所有的表单都为模式表单。


请参阅

Activate 事件，Hide 方法，Visible 属性，WindowType 属性


SHOW OBJECT 命令

请参阅

重新显示指定控制。包含此命令是为了提供向后兼容性，可用 Refresh 方法 代替。

语法

SHOW OBJECT nControlNumber
[ENABLE | DISABLE]
[LEVEL nReadLevel]
[PROMPT cCaptionText]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

参数

nControlNumber

控制编号，编号是由控制的创建顺序决定的。一组命令按钮、选项按钮和透明按钮中的每个按钮都被看作是一个单独控制，每个文本框、复选框、组合框、列表、微调控制或编辑框都是一个单独控制。

ENABLE

选定控制。

DISABLE

不能选定控制。

LEVEL nReadLevel

在某一 READ 级（而不是当前 READ 级）上，重新显示一个控制。数值表达式 nReadlevel 可取值为 1，2，3，4 或 5，和重新显示控制的 READ 级相对应。如果省略 LEVEL 子句，SHOW OBJECT 默认使用当前 READ 级。

可用 RDLEVEL( ) 函数确定当前 READ 级。

附注

在活动的 READ 调用的例程中使用 READ 命令，可以嵌套 READ 命令。READ 命令最多可以嵌套 5 层。

PROMPT cCaptionText

为单个的命令按钮、选项按钮或复选框指定一个代替原标题的标题，cCaptionText 指定了标题的文本。如果用 cCaptionText 指定合适的特殊字符，可以更改按钮或复选框的属性（决定控制是否被废止、哪个键作为访问键、是否为默认控制、支持 Esc 选择）。

COLOR SCHEME nSchemeNumber | COLOR ColorPairList

按指定的颜色重新显示控制。有关控制颜色的详细内容，请参阅控制和对象。

说明

包含此命令是为了提供向后兼容性，对于 Visual FoxPro，在更改控制的属性之后，可用 Refresh 方法重新显示这个控制。

SHOW OBJECT 重新显示单个的控制，并且更新在控制中的显示值。当重新显示一个控制时，它可处于启用状态，也可处于废止状态。有关控制的详细内容，请参阅控制和对象。


请参阅

控制和对象，CREATE FORM，Refresh 方法


SHOW POPUP 命令

请参阅

显示一个或多个用 DEFINE POPUP 定义的菜单，但不激活它们。

语法

SHOW POPUP MenuName1 [, MenuName2 ...] | ALL
[SAVE]

参数

MenuName1 [, MenuName2 ...]

要显示的一个或多个菜单。

ALL

显示所有当前定义的菜单。

SAVE

保留指定菜单的图象，但不激活它们。可以用 CLEAR 命令清除菜单的图象。

说明

此命令显示菜单，但不能用菜单。在显示之前，必须首先用 DEFINE POPUP 创建菜单。


请参阅

ACTIVATE POPUP，DEFINE POPUP


SHOW WINDOW 命令

请参阅	示例

显示一个或多个用户自定义窗口或 Visual FoxPro 系统窗口，但不激活它们。

语法

SHOW WINDOW WindowName1 [, WindowName2 ...] | ALL | SCREEN
[IN [WINDOW] WindowName3 | IN SCREEN | IN MACDESKTOP]
[REFRESH]
[TOP | BOTTOM | SAME]
[SAVE]

参数

WindowName1 [, WindowName2 ...]

要显示的一个或多个窗口名。

ALL

显示所有用户自定义窗口。

SCREEN

仅用于 FoxPro for Macintosh。

当隐藏 FoxPro for Macintosh 主窗口时，此子句用来显示主窗口。也可以从“窗口”菜单中选择“屏幕”命令显示 FoxPro for Macintosh 主窗口。

单击 FoxPro for Macintosh 主窗口的关闭框，或者使用下列命令：DEACTIVATE WINDOW SCREEN、HIDE WINDOW SCREEN 或 RELEASE WINDOW SCREEN 可以隐藏它。

IN [WINDOW] WindowName3

在 WindowName3 指定的父窗口中显示一个窗口。这个窗口不具有父窗口的特性，父窗口中显示的窗口不能移出父窗口。如果父窗口移动了，子窗口也随之移动。

必须首先用 DEFINE WINDOW 命令创建 WindowName3 指定的父窗口。

IN SCREEN

明确指明在 Visual FoxPro 主窗口（而不是其他窗口）中显示一个窗口。默认情况下，窗口都放在 Visual FoxPro 主窗口中。

IN MACDESKTOP

仅用于 FoxPro for Macintosh。

把一个窗口放在 Macintosh 桌面上，此窗口与 FoxPro for Macintosh 主窗口处于同一级上，可以移出 FoxPro for Macintosh 主窗口，也可以被 FoxPro for Macintosh 主窗口遮盖。

包含 MACDESKTOP 子句会忽略 SET MACDESKTOP 设置。不包含 SCREEN 或 MACDESKTOP 子句时，SET MACDESKTOP 决定窗口是放在 Visual FoxPro 主窗口中还是 Macintosh 桌面上。

有关把窗口放进 FoxPro for Macintosh 主窗口或 Macintosh 桌面的详细内容，请参阅 SET MACDESKTOP。

REFRESH

重画一个浏览窗口，这有助于保证在网络上浏览的表是最新版本的表。浏览窗口中表的工作区是选定的。

当网络上其他用户更改了备注字段时，就会刷新备注编辑窗口。SET REFRESH 命令决定备注编辑窗口刷新的间隔时间。有关在网络共享的已打开表中如何刷新数据的详细内容，请参阅 SET REFRESH 命令。

TOP

把指定窗口放在其他窗口之前。

BOTTOM

把指定窗口放在其他窗口之后。

SAME

把指定窗口放回一系列窗口间的原来位置，此位置是该窗口被废止之前所占据的位置。SAME 只影响先前显示或激活、然后用 DEACTIVATE WINDOW 命令从 Visual FoxPro 主窗口中清除的窗口。

SAVE

释放窗口之后，在 FoxPro 主窗口中或另一窗口中保留窗口的图象。通常，在释放窗口之后，就把它们从 FoxPro 主窗口移去。可以用 CLEAR 命令从 FoxPro 主窗口或另一个窗口中清除窗口图象。

说明

SHOW WINDOW 命令控制在窗口中的显示和从前向后的屏幕放置位置。如果是隐藏窗口或非激活窗口，SHOW WINDOW 命令显示窗口但不激活它；如果正在显示一个或多个窗口，SHOW WINDOW 命令用来更改窗口从前向后的顺序。

也可以显示系统窗口，例如命令窗口。

在 Visual FoxPro 中，可以用 SHOW WINDOW 命令显示 Visual FoxPro 的工具栏，用 HIDE WINDOW 命令从 FoxPro 窗口中移去工具栏。在显示工具栏之前它们必须是活动的。下面的表中列出了 SHOW WINDOW 和 HIDE WINDOW 使用的 Visual FoxPro 工具栏名称。使用时应把工具栏名称用括号括起来。

工具栏名称
调色板	布局	报表设计器
数据库设计器	打印预览	常用
表单控制	查询设计器	视图设计器
表单设计器	报表控制
要显示系统窗口，可把整个系统窗口名放进引号中。

不能用 SHOW WINDOW 命令把输出定向到用户自定义窗口，可以用 ACTIVATE WINDOW 命令把输出定向到用 DEFINE WINDOW 命令创建的用户自定义窗口。


* 下面的示例创建并显示一个名为 wOutputl 的窗口。
*  由于 SHOW WINDOW 命令用来显示窗口，因此只有
* 激活该窗口之后，才能把输出定向到窗口中。

CLEAR

DEFINE WINDOW wOutput1 FROM 2,1 TO 13,75 TITLE 'Output' ;

CLOSE FLOAT GROW SHADOW ZOOM

SHOW WINDOW wOutput1


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，SET MACDESKTOP


ShowTips 属性

请参阅

对于指定的表单对象或指定的工具栏对象，确定是否显示“工具提示”。

应用于

表单，_SCREEN，工具栏

语法

Object.ShowTips = lExpr

设置

lExpr

决定是否为指定控制显示“工具提示”，ShowTips 属性的设置有：

属性	说明
“真”(.T.)	（对工具栏对象是默认值）当用户把鼠标放在控制上时显示“工具提示”。
“假”(.F.)	（对表单对象是默认值）当用户把鼠标放在控制上时不显示“工具提示”。
说明

设计时和运行时可用。

可以用 ToolTipText 属性指定在每个“工具提示”中显示的文本。


请参阅

ToolTipText 属性


SIGN( ) 函数

请参阅	示例

当指定数值表达式的值为正、负或 0 时，分别返回 1、-1 或 0。

语法

SIGN(nExpression)

参数

nExpression

指定用 SIGN( ) 函数进行求值的数值表达式。如果求出值是正数，则 SIGN( ) 函数返回 1；如果求出值是负数，返回 -1；如果求出值为 0，则返回 0。

返回值类型

数值型


STORE 10 TO gnNum1

STORE -10 TO gnNum2

STORE 0 TO gnZero

CLEAR

? SIGN(gnNum1)  &&显示 1

? SIGN(gnNum2)  &&显示 -1

? SIGN(gnZero)  &&显示 0


请参阅

ABS( )


SIN( ) 函数

请参阅	示例

返回一个角度的正弦值。

语法

SIN(nExpression)

参数

nExpression

要用 SIN( ) 函数返回正弦值的角度。nExpression 可以取任何值，并且函数的返回值在 -1 和 1 之间。

附注

nExpression 以弧度为单位，用 DTOR( ) 函数可以从角度转换为弧度。SIN( ) 函数的小数点显示位数可以用 SET DECIMALS 命令指定。

返回值类型

数值型


CLEAR

? SIN(0)  &&显示0.00

? SIN(PI( )/2)  &&显示1.00

? SIN(DTOR(90))  &&显示1.00


请参阅

ACOS( )，COS( )，DTOR( )，RTOD( )，SET DECIMALS


Sizable 属性

请参阅

指定对象的大小是否可以改变。

应用于

OLE 绑定型控制，OLE 容器控制，工具栏

语法

Object.Sizable = lExpr

设置

lExpr

Sizable 属性的设置有：

设置	说明
“真”(.T.)	（默认值）可以调整对象。
“假”(.F.)	不可以调整对象。
说明

设计时可用，运行时可读写。

对于绑定型和非绑定型 OLE 控制，Sizable 属性只影响控制包含的 OLE 对象。如果 Sizable 属性设置为“真”(.T.)，并且激活 OLE 对象，就可以调整 OLE 对象的大小；如果 Autosize 属性设置为“真”(.T.)，而 OLE 对象不活动时，OLE 控制自动调整大小，以适应 OLE 对象新的大小。

附注

要使表单大小可以调整，需要把 BorderStyle 属性设置为 3。


请参阅

AutoSize 属性，BorderStyle 属性


SizeBox 属性

指定表单是否包含“大小”对话框，本属性为以后使用而保留。


SIZE POPUP 命令

请参阅	示例

更改用 DEFINE POPUP 命令创建的菜单大小。

语法

SIZE POPUP MenuName TO nRow1, nColumn1 | BY nRow2, nColumn2

参数

MenuName

需要更改大小的菜单名。

TO nRow1, nColumn1

把菜单更改为指定大小，nRow1 和 nColumn1 分别指定了菜单右下角的新行和新列的坐标。

BY nRow2, nColumn2

相对于当前菜单尺寸更改大小，nRow2 和 nColumn2 指定菜单的行和列的改变值，它们相对于菜单右下角的当前行和当前列坐标。

说明

如果创建了用户自定义菜单，就可以更改它的大小，菜单不必是活动或可见的。


*这个示例创建了一个菜单，包含扩展名为 .PRG 的文件，并且在
* 关闭菜单之前移动、放大、缩小它。

CLEAR

DEFINE POPUP popMovIn FROM 2,2 TO 7, 14 PROMPT FILES LIKE *.PRG ;

TITLE 'Programs'

ACTIVATE POPUP popMovIn NOWAIT

=CHRSAW(2)

MOVE POPUP popMovIn BY 5,5  &&把菜单向下移动

=CHRSAW(2)

SIZE POPUP popMovIn BY 5,5  &&放大菜单

=CHRSAW(2)

SIZE POPUP popMovIn BY -5,-5  &&缩小菜单

=CHRSAW(2)

MOVE POPUP popMovIn BY -5,-5  &&把菜单向上移动

=CHRSAW(2)

DEACTIVATE POPUP popMovIn

RELEASE POPUP popMovIn


请参阅

ACTIVATE POPUP


SIZE WINDOW 命令

请参阅

更改用 DEFINE WINDOW 命令创建的窗口大小，或者更改 Visual FoxPro 系统窗口的大小。

语法

SIZE WINDOW WindowName TO nRow1, nColumn1 | BY nRow2, nColumn2

参数

WindowName

需要更改窗口大小的窗口名称。

为了更改系统窗口的大小，需要把整个系统窗口名放在括号里。例如，若想把命令窗口的大小增加一行和一列，使用下列命令：

SIZE WINDOW 'Command Window' BY 1,1

注意，只能更改命令窗口、调试窗口和跟踪窗口的大小。

TO nRow1, nColumn1

把窗口更改为指定大小。nRow1 和 nColumn1 分别指定窗口右下角相对于窗口左上角的新行和新列坐标。

BY nRow2, nColumn2

相对当前窗口尺寸更改窗口的大小。nRow2 和 nColumn2 指定窗口的行和列的改变值，它们相对于窗口右下角的当前行坐标和列坐标。

说明

如果创建一个用户自定义窗口，就可以更改它的大小，窗口不必是活动或可见。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，ZOOM WINDOW


SKIP 命令

请参阅	示例

使记录指针在表中向前移动或向后移动。

语法

SKIP
[nRecords]
[IN nWorkArea | cTableAlias]

参数

nRecords

指定记录指针需要移动的记录数。

使用不带 nRecords 参数的 SKIP 命令将使记录指针走到下一个记录。如果 nRecords 为正数，记录指针向文件尾移动 nRecords 个记录；如果 nRecords 为负数，记录指针将向文件头移动 nRecords 个记录。

如果记录指针指向表的最后一个记录，并且执行不带参数的 SKIP 命令时，RECNO( ) 函数返回值比表中记录总数大 1，EOF( ) 函数返回“真”(.T.)；如果记录指针指向表的第一个记录，并且执行 SKIP 1 命令，则 RECNO( ) 函数返回 1，BOF( ) 函数返回“真”(.T.)。

IN nWorkArea | cTableAlias

在指定工作区的表中移动记录指针。nWorkArea 指定工作区编号，cTableAlias 指定一个表或工作区的别名。

说明

如果表有一个主控索引名或索引文件，使用 SKIP 命令将使记录指针移动到索引序列决定的记录上。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  &&打开 Custormer 表

CLEAR

SKIP 4 IN 'customer'

? RECNO('customer')  &&显示 5

GO BOTTOM

SKIP -5

? RECNO( )


请参阅

GO | GOTO，SET SKIP


SKPBAR( ) 函数

请参阅

确定是否可以用 SET SKIP OF 命令启用或废止一个菜单项。

语法

SKPBAR(cMenuName, MenuItemNumber)

参数

cMenuName

包含此这个菜单项的菜单名。

MenuItemNumber

要 SKPBAR( ) 函数返回菜单项状态 (启用或废止) 的菜单项编号。当用 DEFINE BAR 命令创建菜单项时，就已经指定了菜单项编号。

返回值类型

逻辑型

说明

如果菜单项是废止的，SKPBAR( ) 函数返回“真”(.T.)；如果菜单项是启用的，则返回“假”(.F.)。


请参阅

DEFINE BAR，SET SKIP OF，SKPPAD( )


SKPPAD( ) 函数

请参阅

确定是否可以用 SET SKIP OF 命令启用或废止一个菜单标题。

语法

SKPPAD(cMenuBarName, cMenuTitleName)

参数

cMenuBarName

包含此菜单标题的菜单栏名。

cMenuTitleName

要 SKPPAD( ) 函数返回菜单标题状态 (启用或废止) 的菜单标题名称。

返回值类型

逻辑型

说明

如果菜单标题是废止的，则 SKPPAD( ) 函数返回“真”(.T.)；如果菜单标题是启用的，则返回“假”(.F.)


请参阅

DEFINE BAR，SET SKIP OF，SKPBAR( )


SORT 命令

请参阅

对当前选定表进行排序，并将排过序的记录输出到新表中。

语法

SORT TO TableName ON FieldName1 [/A | /D] [/C]
[, FieldName2 [/A | /D] [/C] ...]
[ASCENDING | DESCENDING]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FIELDS FieldNameList
| FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton]
[NOOPTIMIZE]

参数

TableName

存放排序后记录的新表名，Visual FoxPro 为表取 .DBF 文件扩展名。如果文件不包含扩展名，则自动为它指定 .DBF 扩展名。

ON FieldName1

在当前选定的、要排序的表中指定字段，字段的内容和数据类型决定了记录在新表中的顺序。默认情况是按升序排序，不能对备注或通用字段排序。

要进一步排序新表，可以包含附加字段名 (FieldName2，FieldName3)。第一个字段 FieldName1 是主排序字段，第二个字段 FieldName2 是第二级排序字段 … 依此类推。

下面示例按三个字段对表进行排序。先将 Customer 表打开并排序，同时创建了一个名为 temp 的新表，temp 中的记录按 cust_id 字段排序。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 customer 表

CLEAR

LIST FIELDS company, cust_id NEXT 3

SORT TO temp ON cust_id

USE temp

LIST FIELDS company, cust_id NEXT 3

WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT

[/A | /D] [/C]

对于排序中包含的每个字段，可以指定排序顺序（升序或降序）。/A 为字段指定了升序。/D 指定了降序，/A 或 /D 可以作用于任何类型的字段。

默认情况下，字符型字段的排序顺序区分大小写。如果在字符型字段名后包含 /C，则忽略大小写。可以把 /C 选项同 /A 或 /D 选项组合起来，例如 /AC 或 /DC。

在下面的示例中，创建了一个名为 client 的新表，orders 表在 order_date 字段上按升序排序，在 freight 字段上按降序排序。

USE orders

SORT TO clients ON order_date/A,freight/D

ASCENDING

将所有不带 /D 的字段指定为升序排列。

DESCENDING

将所有不带 /A 的字段指定为降序排列。

如果省略 ASCENDING 或 DESCENDING 参数，则排序顺序默认为升序。

Scope

指定需要排序的记录范围。范围子句包括：ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句主题，或《开发指南》的第二章“语言概述”。

SORT 命令的默认范围是 ALL，即所有记录。

FOR lExpression1

在当前表中，指定排序中只包含逻辑条件 lExpression1 为“真”(.T.) 的记录。FOR 子句可以有条件地排序记录，筛掉不满足条件的记录。

如果 lExpression1 是可优化表达式，Rushmore 会优化这个 SORT ... FOR 命令。为达到最优性能，应在 FOR 字句中使用可优化表达式。有关 Rushmore 可优化表达式的内容，请参阅《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，在当前表中，只要逻辑表达式 lExpression2 的计算值为“真”，则依据此条件，排序中包含这个记录。

FIELDS FieldNameList

指定用 SORT 命令创建的新表中要包含的原表中的字段。如果省略 FIELDS 字句，新表中将包括原表中所有字段。

FIELDS LIKE Skeleton

在新表中包含那些与字段梗概 Skeleton 相匹配的原表字段，新表用 SORT 命令创建。

FIELDS EXCEPT Skeleton

在新表中包含那些不与字段梗概 Skeleton 相匹配的原表字段。

字段梗概 Skeleton 支持通配符。例如，如果想在新表中包含所有以 A 和 P 开头的字段，可以使用下面的命令：

SORT TO mytable ON myfield FIELDS LIKE A*,P*

可以将 LIKE 子句同 EXCEPT 子句组合使用：

SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*

NOOPTIMIZE

关闭 SORT 命令的 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题，或《开发指南》的第十七章“优化应用程序”。

说明

当前表中的一个或多个指定字段决定了记录在新表中出现的顺序。

重要内容

要确保有足够的磁盘空间保存新表，以及存储在排序过程中创建的临时工作文件，排序所需的磁盘空间可能是原表的三倍。可以用 DISKSPACE( ) 和 SYS(2020) 函数确定可用磁盘空间大小。如果在排序过程中，磁盘空间不足，Visual FoxPro 会显示错误信息，并删除临时工作文件。

包含数字和空格的字符型字段可能不会按照所希望的那样排序。这是因为数值型字段从右向左填充，空格位于左边；而字符型字段是从左向右填充，空格位于右边。

例如，表的两个记录包含字符型字段：一个是 1724，另一个是 18，而表按该字段以升序排序，则包含 1724 的记录会出现在包含 18 的记录的前面。这是因为 Visual FoxPro 从左向右读取字符型字段中的字符，由于 17（1724）比 18（18）小，则 1724 出现在前面。为避免这类问题，应在位数较小的数字前加零（0018），或者使用数值型字段。


请参阅

COPY FILE，DISKSPACE( )，INDEX，SYS(2020) - 默认磁盘空间


Sorted 属性

请参阅

在组合框和列表框中，指定列表部分的各项是否按字母顺序排序。

应用于

组合框，列表框

语法

[Form.]Control.Sorted[= lExpr]

设置

lExpr

Sorted 属性的设置有：

设置	说明
“真”(.T.)	列表项按字母顺序排序（区分大小写）。为保持字母顺序，Visual FoxPro 进行几乎所有必要的字符串处理，包括从列表中添加项或移去项时对索引号做必要的更改。
“假”(.F.)	（默认）列表项不按字母顺序排序。
说明

设计和运行时可用。

只有 RowSourceType 属性设置为零时，Sorted 属性才可用。


请参阅

AddItem 方法，List 属性，ListCount 属性，ListItemID 属性，RemoveItem 方法，RowSource 属性，RowSourceType 属性


SOUNDEX( ) 函数

请参阅	示例

返回指定的字符表达式的语音表示。

语法

SOUNDEX(cExpression)

参数

cExpression

要使用 SOUNDEX( ) 函数求值的字符表达式。

返回值类型

字符型

说明

SOUNDEX( ) 函数返回一个四字符的字符串。它通过比较两个字符表达式的返回值，可以确定两个字符表达式是否语音相近，即发音相似。在表中搜索重复记录时，可能会用到这个函数。

SOUNDEX( ) 函数不区分大小写，并且一般不考虑元音。


CLEAR

? SOUNDEX('Smith') = SOUNDEX('Smyth')  &&显示.T.

? SOUNDEX('Computer')  &&显示 C513


请参阅

DIFFERENCE( )


SPACE( ) 函数

请参阅

返回由指定数目的空格构成的字符串。

语法

SPACE(nSpaces)

参数

nSpaces

SPACE( ) 函数返回的空格数目。在 FoxPro for MS-DOS 的标准版 (16位) 中，nSpaces 的最大值是 65,504；在 FoxPro for MS-DOS 的扩展版、Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中，nSpaces 最大值的唯一限制是内存容量。

返回值类型

字符型


请参阅

PADC( ) | PADL( ) | PADR( )，REPLICATE( )


Sparse 属性

请参阅

指定 CurrentControl 属性是影响列对象中的全部单元，还是仅影响列对象中的活动单元。

应用于

列

语法

Column.Sparse [= lExpr]

设置

lExpr

Sparse 属性的设置是：

设置	说明
真(.T.)	（默认值）只有列对象的活动单元使用 CurrentControl 属性设置接收和显示数据，其他的单元使用默认的文本框。
假(.F.)	列对象的所有单元使用 CurrentControl 属性显示数据，活动单元使用 CurrentControl 属性接收数据，
说明

设计时可用，运行时可读写。


请参阅

Bound 属性，CurrentControl 属性，DynamicCurrentControl 属性


SpecialEffect 属性

请参阅

指定控制的不同样式选项。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，列表框，选项按钮，选项组，页框，形状，微调，文本框

语法

[Form.]Control.SpecialEffect = Expr

设置

Expr

对于页框控制，SpecialEffect 属性设置有：

设置	说明
0	凸起（除容器对象之外所有控制和对象的默认值）
1	凹下
2	平面（仅是容器对象的默认值）
附注

对于页框控制来说，只有 Tabs 属性为假 (.F.) 时，SpecialEffect 属性才可用。同样，只有当 Expr 设置成 2 (平面) 时，页框控制的 BorderColor 属性才可用。

对于所有其他的控制，SpecialEffect 属性设置是：

设置	说明
0	三维
1	平面
附注

如果 Height 属性设置值太小，那么“三维”设置不起作用。对于Visual FoxPro for Windows，命令按钮忽略 SpecialEffect。

说明

设计和运行时可用。


请参阅

BackColor, ForeColor 属性，SelectedItemBackColor, SelectedItemForeColor 属性


_SPELLCHK 系统内存变量

请参阅

为 Visual FoxPro 文本编辑器指定一个拼写检查程序。

语法

_SPELLCHK = ProgramName

参数

ProgramName

指定拼写检查程序。如果该拼写检查程序不在当前默认目录下，那么程序名中应包含路径。

也可以在 Visual FoxPro 配置文件中指定拼写检查器程序，只需加入下面一行：

_SPELLCHK = ProgramName

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。

默认情况下，_SPELLCHK 使用 SPELLCHK.APP 作为拼写检查程序。如果将 SPELLCK.APP 改名或移动到另一个目录下，则在 _SPELLCHK 中存入新的拼写检查程序名称和路径。


请参阅

MODIFY COMMAND，MODIFY FILE，MODIFY MEMO


Spinner 控制
Spinner（微调）控制

请参阅	属性	事件	方法

创建一个微调控制。

语法

Spinner

说明

通过单击微调控制的上箭头或下箭头，或者在微调框内键入一个数值，可以实现微调控制在一个数值范围内进行选择。

KeyBoardHighValue 属性指定从键盘输入微调框的最大值，SpinnerHighValue 属性指定通过单击微调按钮输入的最大值。

KeyBoardLowValue 属性指定从键盘输入微调框的最小值，SpinnerLowValue 属性指定通过单击微调按钮输入的最小值。

有关创建微调控制的详细内容，请参见表单设计器 主题和《开发指南》的第十一章“使用控制”。


 属性

Alignment	BackColor	BaseClass
Class	ClassLibrary	ColorScheme
ColorSource	Comment	ControlSource
DisabledBackColor	DisabledForeColor	DragIcon
DragMode	Enabled	FontBold
FontItalic	FontName	FontOutline
FontShadow	FontSize	FontStrikeThru
FontUnderline	ForeColor	Format
Height	HelpContextID	HideSelection
Increment	InputMask	KeyboardHighValue
KeyboardLowValue	Left	Margin
MousePointer	Name	Parent
ParentClass	ReadObject	ReadOnly
SelectedBackColor	SelectedForeColor	SelLength
SelStart	SelText	SpecialEffect
SpinnerHighValue	SpinnerLowValue	StatusBarText
TabIndex	TabStop	Tag
TerminateRead	ToolTipText	Top
Value	Visible	Width


 事件

Click	DblClick	Destroy
DownClick	DragDrop	DragOver
Error	ErrorMessage	GotFocus
Init	InteractiveChange	KeyPress
LostFocus	Message	MouseDown
MouseMove	MouseUp	ProgrammaticChange
RangeHigh	RangeLow	RightClick
UIEnable	UpClick	Valid
When


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	Refresh
SaveAsClass	SetFocus	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


SpinnerHighValue, SpinnerLowValue 属性

请参阅

指定单击上箭头和下箭头时，微调控制所允许的最大值或最小值。

应用于

微调

语法

Spinner.SpinnerHighValue[ = nHigh]
Spinner.SpinnerLowValue[ = nLow]

设置

nHigh

在微调控制中，用上箭头所能输入的最大值。

nLow

在微调控制中，用下箭头所能输入的最小值。

说明

设计和运行时可用。


请参阅

KeyboardHighValue 和 KeyboardLowValue 属性


SQL 命令概述

请参阅

Visual FoxPro 支持结构化查询语言 (SQL) 命令。Visual FoxPro 的 SQL 命令使用 Rushmore 技术来优化性能，并且一个 SQL 命令可以代替多个 Visual FoxPro 命令。

Visual FoxPro 支持如下 SQL 命令：

SELECT - SQL

指定查询条件并执行查询命令，Visual FoxPro 解释该查询，并且从表中检索指定的数据。和其他 Visual FoxPro 命令一样，SELECT 命令建立在 Visual FoxPro 内部，可以在下面区域中创建 SELECT 命令：

 •	   在命令窗口中。

 •	   在 Visual FoxPro 程序中 (象其他 Visual FoxPro 命令一样)。

 •	   在查询设计器中。

ALTER TABLE - SQL

修改一个已存在的表。可以修改表中每个字段的名称、类型、精度、比例、是否支持 NULL 值和参照完整性规则。

CREATE CURSOR - SQL

创建一个临时表。临时表中的每个字段由名称、类型、精度、比例、是否支持 NULL 值和参照完整性规则定义，这些定义可从命令自身或数组中获得。

CREATE TABLE -SQL

创建一个表。新表的每个字段由名称、类型、精度、比例、是否支持 NULL 值和参照完整性规则来定义，可从命令本身或数组中获得这些定义。

DELETE - SQL

使用 SQL 语法将表中的记录加上删除标记。

INSERT - SQL

在已存在表的末尾追加一条新记录，新记录包含的数据列在 INSERT 命令中，或者来自数组。

UPDATE - SQL

更新表中的记录，可以基于 SELECT - SQL 语句结果更新记录。


请参阅

CREATE CURSOR - SQL，CREATE QUERY，CREATE TABLE - SQL，DELETE - SQL，INSERT - SQL，MODIFY QUERY，SELECT - SQL，UPDATE - SQL


SQLCANCEL( ) 函数

请参阅	示例

请求取消一条正在执行的 SQL 语句。

语法

SQLCANCEL(nConnectionHandle)

参数

nConnectionHandle

指定活动的连接句柄，该连接句柄的 SQL 语句将被取消。

返回值类型

数值型

说明

如果成功取消了 SQL 语句，SQLCANCEL( ) 函数返回 1；如果发生连接级错误，返回 -1；如果发生环境级错误，返回 -2。

在异步方式下，SQLCANCEL( ) 取消执行 SQLCOLUMNS( )、SQLEXEC( )、SQLMORERESULTS( ) 和 SQLTABLES( ) 命令。可使用 SQLSETPROP( ) 来建立异步方式。


* 下面的示例假定已经成功发出 SQLCONNECT( )，并且返回值
* 存入名为 gnConnHandle 的内存变量。
*

* SQLEXEC( ) 将 SQL 语句送入数据源，并且将返回结果送入
* 临时表，最后调用 SQLCANCEL( ) 函数来终止查询。

= SQLSETPROP(gnConnHandle, 'asynchronous', .T.) &&停止 SQLEXEC( )

= SQLEXEC(gnConnHandle, 'SELECT * FROM authors')

= SQLCANCEL(gnConnHandle) &&错误的 SELECT 语句，取消


请参阅

AERROR( )，SQLCOLUMNS( )，SQLEXEC( )，SQLMORERESULTS( )，SQLSETPROP( )，SQLTABLES( )


SQLCOLUMNS( ) 函数

请参阅	示例

把指定数据源表的列名和关于每列的信息存储到一个 Visual FoxPro 临时表中。

语法

SQLCOLUMNS(nConnectionHandle, TableName
 [, FOXPRO | NATIVE] [, CursorName])

参数

nConnectionHandle

活动的连接句柄。

TableName

指定远程表的名称，从该远程表中返回列名。

FOXPRO | NATIVE

指定在结果集合中列内容的格式，一定要用引号括起 FOXPRO 或 NATIVE。NATIVE 格式选项使用数据源格式存储表的列内容，FOXPRO 格式选项使用 Visual FoxPro 的表或临时表格式存储列内容，这些表或临时表在将数据源表导入 Visual FoxPro 时创建。如果省略 FOXPRO 或 NATIVE 参数，格式选项的缺省值是 FOXPRO。

下表显示了结果集合中的 FOXPRO 的列格式：

列名	说明
Field_name	列名
Field_type	列数据类型
Field_len	列长度
Field_dec	小数位数
下表显示结果集合中具有 NATIVE 格式的列。在 NATIVE 格式中，根据数据源的不同，下表中没有列出的一些附加列可能会包含在结果集合中。

列名	说明
Table_qualifier	表限定符标识
Table_owner	表拥有者标识
Table_name	表标识
Column_name	列标识
Data_type	列数据类型
Type_name	列数据类型名
Precision	列的精度
Length	数据的传送大小
Scale	列的大小
Radix	数值类型的基准
Nullable	是否支持 null 值
Remarks	列的说明
如果 TableName 指定的表不存在，同时格式设置成 NATIVE，SQLCOLUMNS( )返回真 (.T.)，并创建一个空的表或临时表；如果 TableName 指定的表不存在，并且格式设置成 FOXPRO，SQLCOLUMNS( ) 返回假 (.F.)。

CursorName

为结果集合指定 Visual FoxPro 临时表的名称。如果不指定临时表名，Visual FoxPro 使用默认名 SQLRESULT。

返回值类型

数值型

说明

如果成功创建了临时表，SQLCOLUMNS( ) 返回 1；如果 SQLCOLUMNS( ) 仍在执行，返回 0；如果发生连接级错误，返回 -1；如果发生环境级错误，返回 -2。

SQLCOLUMNS( ) 是四个既可同步执行也可异步执行的函数之一，SQLSETPROP( ) 的异步设置决定这些函数是同步执行还是异步执行。异步方式下，必须重复调用 SQLCOLUMNS( )，直到返回一个非“假” (.F.) (仍在执行中) 值为止。


* 下面的示例假定已经成功地发出 SQLCONNECT( )，并且其返
* 回值存入名为 gnConnHandle 的内存变量中。SQLCOLUMNS( )
* 用来创建一个名为 MyCursor 的临时表，该临时表包含
*  authors 表中列出的内容。

= SQLCOLUMNS(gnConnHandle, 'authors', 'FOXPRO', 'MyCursor')


请参阅

AERROR( )，SQLGETPROP( )，SQLSETPROP( )，SQLTABLES( )


SQLCOMMIT( ) 函数

请参阅	示例

提交一个事务。

语法

SQLCOMMIT(nConnectionHandle)

参数

nConnectionHandle

SQLCONNECT( ) 函数返回的、指向数据源的连接句柄。

返回值类型

数值型

说明

可使用 SQLCOMMIT( ) 提交一个事务。如果成功提交了事务，SQLCOMMIT( ) 返回 1；否则，返回 -1。如果 SQLCOMMIT( ) 返回 -1，可使用 AERROR( ) 函数确定该事务为什么不能提交。

如果人工事务有效 (用 SQLSETPROP( ) 将 Transactions 属性设置成“人工”)，就可以将多个更新送入远程表，并由 SQLCOMMIT( ) 提交所有的更新。

更新可以由 SQLROLLBACK( ) 函数回滚。


* 下面的示例假定已经成功发出了 SQLCONNECT( )，并且其返回
* 值存入名为 gnConnHandle 的内存变量中。示例中，用
*  SQLSETPROP( ) 将 Transactions 属性设置成 2 (人工)，以
* 允许使用 SQLCOMMIT( )和SQLROLLBACK( )。

* authors 表由 SQLEXEC( ) 修改，对表的更改由
*  SQLCOMMIT( ) 提交。

= SQLSETPROP(gnConnHandle, 'Transactions', 2)  &&人工事务

= SQLEXEC(gnConnHandle, "INSERT INTO authors (au_id, au_lname);

VALUES ('aupoe', 'Poe')")  &&修改 authors 表

= SQLCOMMIT(gnConnHandle)  &&提交更改


请参阅

AERROR( )，SQLCONNECT( )，SQLROLLBACK( )，SQLSETPROP( )


SQLCONNECT( ) 函数

请参阅	示例

建立一个指向数据源的连接。

语法

SQLCONNECT([DataSourceName, cUserID, cPassword | cConnectionName])

参数

DataSourceName

数据源的名称，该名称和 ODBC.INI 文件中的定义相同。

cUserID

向数据源注册的用户标识。

cPassword

数据源的口令。

cConnectionName

用 CREATE CONNECTION 创建的命名连接。

返回值类型

数值型

说明

如果成功地连接到数据源上，SQLCONNECT( ) 函数返回一个正的、非零的句柄。应该将这个句柄存入内存变量中，在随后需要连接句柄的函数调用中，就能使用该内存变量。如果不能连接，SQLCONNECT( ) 返回 -2。

如果不带任何附加参数发出 SQLCONNECT( )，那么将显示选择连接或数据源对话框，供您选择数据源。


* 下面的示列假定一个名为 MyFoxSQLNT 的 ODBC 数据源可用，该数据
* 源的用户标识是“sa”。发出 SQLCONNECT( )，其返回值存入名为
*  gnConnHandle 的内存变量。

*如果成功地连接到数据源上，SQLCONNECT( ) 返回一个正数，并显示
* 一个对话框，再发出 SQLCONNECT( ) 解除和数据源的连接。

*如果不能连接到数据源上，SQLCONNECT( ) 返回一个负数并显示一条
* 信息。

STORE SQLCONNECT('MyFoxSQLNT', 'sa') TO gnConnHandle

IF gnConnHandle <= 0

= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')

ELSE

= MESSAGEBOX('Connection made', 48, 'SQL Connect Message)

= SQLDISCONNECT(gnConnHandle)

ENDIF


请参阅

AERROR( )，CREATE CONNECTION，SQLDISCONNECT( )，SQLGETPROP( )，SQLEXEC( )，SQLSETPROP( )，SQLSTRINGCONNECT( )


SQLDISCONNECT( ) 函数

请参阅	示例

终止与数据源的连接。

语法

SQLDISCONNECT(nConnectionHandle)

参数

nConnectionHandle

由 SQLCONNECT( ) 返回、并指向数据源的连接句柄。nConnectionHandle 为 0 将终止所有活动的连接。

返回值类型

数值型

说明

如果成功终止了连接，SQLDISCONNECT( ) 返回 1；如果发生连接级错误，返回 -1；如果发生环境级错误，返回 -2。

SQLDISCONNECT( ) 终止一个指向数据源的连接，在建立连接时，必须提供 SQLCONNECT( ) 返回的连接句柄。

附注

在异步函数序列中或事务处理期间，如果执行 SQLDISCONNECT( ) 函数，SQLDISCONNECT( ) 将产生错误。


*下面的示例假定一个名为 MyFoxSQLNT 的 ODBC 数据可用，该数据
* 源的用户标识是“sa”，发出 SQLCONNECT( )，其返回值存入名为
*  gnConnHandle 的内存变量。

*如果成功地连接到数据源上，SQLCONNECT( ) 返回一个正数，并显示
* 一个对话框，再发出SQLDISCONNECT( ) 解除和数据库的连接。

*如果不能连接到数据源上，SQLCONNECT( ) 返回一个负数，并显示一条
* 信息。

STORE SQLCONNECT('MyFoxSQLNT', 'sa') TO gnConnHandle

IF gnConnHandle <= 0

= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')

ELSE

= MESSAGEBOX('Connection made', 48, 'SQL Connect Message)

= SQLDISCONNECT(gnConnHandle)

ENDIF


请参阅

AERROR( )，SQLCONNECT( )，SQLSTRINGCONNECT( )


SQLEXEC( ) 函数

请参阅	示例

将一条 SQL 语句送入数据源中处理。

语法

SQLEXEC(nConnectionHandle, cSQLCommand, [CursorName])

参数

nConnectionHandle

由 SQLCONNECT( ) 返回的、指向数据源的连接句柄。

cSQLCommand

送入数据源的 SQL 语句。

SQL 语句中可以包含一个参数化的 WHERE 子句，该子句创建一个参数化的视图。所有 WHERE 子句中的参数必须在发出 SQLEXEC( ) 之前定义。例如，如果参数是内存变量，那么该内存变量必须在 SQLEXEC( ) 发出之前创建并初始化。有关创建参数化视图的详细内容，请参阅《开发指南》第八章“创建多表视图”。

CursorName

Visual FoxPro 临时表的名称，结果集合将送入该临时表中。如果不包含临时表名，Visual FoxPro 使用默认名 SQLRESULT。

对于多个结果集合，通过在第一个临时表的名称后追加一个递增的数值构成新临时表名。

返回值类型

数值型

说明

如果存在多个结果集合，SQLEXEC( ) 返回结果集合的数目。如果 SQLEXEC( ) 仍在执行，SQLEXEC( ) 返回 0；当 SQLEXEC( ) 结束时，返回 1；如果发生连接级错误，SQLEXEC( ) 返回 -1。

如果 SQL 语句产生一个结果集合，那么 SQLEXEC( ) 将该结果集合存入指定的 Visual FoxPro 临时表中；如果 SQL 语句产生两个或多个结果集合，同时 SQLSETPROP( ) 设置为 1 (批处理方式)，可以通过 SQLSETPROP( ) 设置 BatchMode 选项为 0，并且在每次调用 SQLMORERESULTS( ) 时更改临时表的名称来命名每个结果集合。

SQLEXEC( ) 是既能同步执行又能异步执行的四个函数之一。SQLSETPROP( ) 异步设置决定它们是同步执行还是异步执行。在异步方式下，必须重复调用 SQLEXEC( ) 直到返回一个非零值 ( 0 表示仍在执行)。


* 下面的示例假定已经成功地发出 SQLCONNECT( ) 并且其返回值存入
* 名为 gnConnHandle 的内存变量。

*  SQLEXEC( ) 用来执行一个查询，该查询将 authors 表中的全部内容
* 返回到名为 MyCursor 的临时表中。

= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)

= SQLEXEC(gnConnHandle, 'SELECT * FROM authors', 'MyCursor')


请参阅

AERROR( )，SQLCANCEL( )，SQLGETPROP( )，SQLMORERESULTS( )，SQLSETPROP( )


SQLGETPROP( ) 函数

请参阅	示例

返回一个活动连接的当前设置或默认设置。

语法

SQLGETPROP(nConnectionHandle, cSetting)

参数

nConnectionHandle

由 SQLCONNECT( ) 返回的、指向数据源的连接句柄。如果 nConnectionHandle 为 0，SQLGETPROP( ) 返回环境设置。

cSetting

指定具体的设置，有关各设置的详细内容，请参阅 SQLSETPROP( )。

返回值类型

字符型、数值型或逻辑型

说明

如果发生连接级的错误，返回 -1；如果发生环境级的错误，返回 -2。


* 下面的示例假定已经成功执行了 SQLCONNECT( )，
* 并把返回值存储在名为 gnConnHandle 的内存变量中。

*  SQLSETPROP( ) 可以将 Asynchronous 属性改为“真”(.T.)
* 和“假”(.F.)，SQLGETPROP( ) 显示新的 Asynchronous
* 属性值。

CLEAR

= SQLSETPROP(gnConnHandle, 'asynchronous', .T.)

? SQLGETPROP(gnConnHandle, 'asynchronous')  && 显示“.T.”

= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)

? SQLGETPROP(gnConnHandle, 'asynchronous')  && 显示“.F.”


请参阅

AERROR( )，SQLCONNECT( )，SQLSETPROP( )


SQLMORERESULTS( ) 函数

请参阅	示例

如果存在多个结果集合，则将另一个结果集合复制到 Visual FoxPro 临时表中。

语法

SQLMORERESULTS(nConnectionHandle)

参数

nConnectionHandle

由 SQLCONNECT( ) 返回的、指向数据源的连接句柄。

返回值类型

数值型

说明

在非批处理方式下，SQLMORERESULTS( ) 决定 SQLEXEC( ) 执行语句是否产生多个可用的结果集合。如果有多个结果集合可用，将依次将集合复制到 Visual FoxPro 临时表中。

如果仍在执行 SQL 语句，SQLMORERESULTS( ) 返回 0；如果终止执行 SQL 语句，返回 1；如果没有找到更多数据，返回 2。在非批处理方式下，应该在每次成功调用 SQLEXEC( ) 之后调用 SQLMORERESULTS( )，直到 SQLMORERESULTS( ) 返回 2 (没有找到更多的数据)。SQLSETPROP( ) 批处理设置决定 SQLEXEC( ) 以批处理方式或以非批处理方式执行 SQL 语句。

如果发生连接级的错误，SQLMORERESULTS( ) 返回 -1；如果发生环境级的错误，返回 -2。

SQLMORERESULTS( ) 函数是既可同步执行也可异步执行的四个函数之一，SQLSETPROP( ) 的异步设置决定这些函数以同步方式执行还是以异步方式执行。在异步方式下，必须重复调用 SQLMORERESULTS( )，直到返回一个非零值 (0 表示仍在执行中)。


* 下面的示例假定已经成功执行了 SQLCONNECT( )，并且将返
* 回值存入名为 gnConnHandle 的内存变量中。SQLSETPROP( )
*  将 BatchMode 属性设置为“假”(.F.)，这样就可以检索
* 单个的结果集合。

*  SQLMORERESULTS( ) 执行了两次，创建两个包含 SQLEXEC( )
*  查询结果的临时表。SET 可用来显示查看窗口，并查看
*  SQLEXEC( ) 创建的临时表。

= SQLSETPROP(gnConnHandle, 'BatchMode', .F.)  && 单个的结果集合

= SQLEXEC(gnConnHandle, 'SELECT * FROM authors;

SELECT * FROM titles')

= SQLMORERES(gnConnHandle)  && 第一个结果集合

= SQLMORERES(gnConnHandle)  && 第二个结果集合


请参阅

AERROR( )，SQLCANCEL( )，SQLCONNECT( )，SQLEXEC( )，SQLGETPROP( )，SQLSETPROP( )


SQLROLLBACK( ) 函数

请参阅	示例

取消当前事务处理期间所做的任何更改。

语法

SQLROLLBACK(nConnectionHandle)

参数

nConnectionHandle

由 SQLCONNECT( ) 返回的、指向数据源的连接句柄。

返回值类型

数值型

说明

如果事务回滚成功，SQLROLLBACK( ) 返回 1；否则，返回 -1。如果 SQLROLLBACK( ) 返回 -1，可以使用 AERROR( ) 确定该事务不能回滚的原因。

如果人工事务处理有效 (SQLSETPROP( ) 的 Transactions 属性设置成“人工”)，就可以将多个更新发送到远程表中，这些更新可以用 SQLROLLBACK( ) 全部回滚。

可以用 SQLCOMMIT( ) 提交更新。


* 下面的示例假定已经成功发出 SQLCONNECT( )，并且
* 其返回值存入一个名为 gnConnHandle 的内存变量。
*  SQLSETPROP( ) 将 Transactions 属性设置成 2 (人工)，
* 以允许使用 SQLCOMMIT( ) 和 SQLROLLBACK( )。

* 示例中用 SQLEXEC( ) 修改了表 authors，并用
* SQLROLLBACK( ) 取消对该表的更改。

= SQLSETPROP(gnConnHandle, 'Transactions', 2)  && 人工

= SQLEXEC(gnConnHandle, "INSERT INTO authors (au_id, au_lname);

VALUES ('aupoe', 'Poe')")

= SQLROLLBACK(gnConnHandle)


请参阅

AERROR( )，SQLCOMMIT( )，SQLCONNECT( )，SQLSETPROP( )


SQLSETPROP( ) 函数

请参阅	示例

指定一个活动连接的设置。

语法

SQLSETPROP(nConnectionHandle, cSetting [, eExpression])

参数

nConnectionHandle

由 SQLCONNECT( ) 返回的、指向数据源的连接句柄。

cSetting

指定设置，下表列出了 cSetting 的值：

设置	说明
Asynchronous	指定结果集合是同步返回 (默认值为“假”(.F.))，还是异步返回(“真”(.T.))。可读写。
BatchMode	指定 SQLEXEC( ) 是一次返回全部结果集合 (默认值为“真”(.T.))，还是用 SQLMORERESULTS( ) 单个返回结果集合(“假”(.F.))。可读写。
ConnectBusy	如果共享连接繁忙，为“真”(.T.)；否则为“假”(.F.)。只读。
ConnectString	注册的连接字符串。只读。
ConnectTimeOut	指定返回一个连接超时错误之前的等待时间 (以秒计算)。如果指定为 0 (默认值)，将无限期等待,而不会返回超时错误。ConnectTimeOut 可以从 0 到 600。可读写。
DataSource	和 ODBC.INI 文件中相同的数据源文件名。可读写。
DispLogin	包含一个数值，决定什么时候显示“ODBC 注册”对话框。DispLogin 可以设定为下列值： 1 或 DB_COMPLETE（在 FOXPRO.H 中定义）。 1 是默认值。 2 或 DB_PROMPT（在 FOXPRO.H 中定义）。 3 或 DB_NOPROMPT（在 FOXPRO.H 中定义）。 如果指定为 1 或 DB_COMPLETE，则当需要的信息未得到时，总是显示“ODBC 注册”对话框。 如果指定为 2 或 DB_PROMPT，则总是显示“ODBC 注册”对话框，允许连接前更改设置。 如果指定为 3 或 DB_NOPROMPT，则不显示“ODBC 注册”对话框并且当所需要的注册内容不可用时，Visual FoxPro 产生一个错误。可读写。
DispWarnings	DispWarnings 指定要显示一个错误信息 (“真”(.T.))，还是不显示一个错误信息 (“假”(.F.)，默认值)。可读写。
IdleTimeout	以秒计算的空闲超时间隔。在指定的时间间隔之后，活动的连接成为不活动的，默认值是 0 (无限期等待)。可读写。
ODBChdbc	内部 ODBC 连接句柄，外部库文件 (FLL文件) 在调用 ODBC 时使用该句柄。只读。
ODBChstmt	内部 ODBC 语句句柄，外部库文件 (FLL文件) 在调用 ODBC 时使用该句柄。只读。
PacketSize	连接所用的网络包的大小，调整该值可以改善性能。默认值是 4096 字节 (4K)。可读写。
Password	连接口令。只读。
QueryTimeOut	指定在返回一般超时错误之前等待的时间 (以秒计算)。如果指定为 0，将无限期等待而不会返回超时错误。QueryTimeOut 可以是 0 到 600，默认值是 15。可读写。
Transactions	包含一个数值，该数值决定连接如何管理远程表上的事务处理。Transactions 可以设定为下列值： 1 或 DB_TRANSAUTO（在 FOXPRO.H 中定义）。 1 是默认值，自动处理远程表的事务。 2 或 DB_TRANSMANUL（在 FOXPRO.H 中定义）。通过 SQLCOMMIT( ) 和 SQLROLLBACK( ) 人工处理事务。可读写。
UserId	用户标识。只读。
WaitTime	在 Visual FoxPro 检查 SQL 语句是否结束执行之前延迟的以毫秒计的时间值。默认值是 100 毫秒。可读写。
eExpression

对 cSetting 标明的设置指定值。如果省略了 eExpression 参数，则还原成设置的默认值。

返回值类型

数值型

说明

如果调用成功，SQLSETPROP( ) 返回 1；否则，如果发生连接级错误则返回 -1，发生环境级错误则返回 -2。

使用 SQLSETPROP( ) 在连接级上指定设置。若要在环境级指定 Visual FoxPro 默认设置，用 0 作为连接句柄。

ConnectTimeOut 选项只能在 Visual FoxPro 级上设置，而不能在连接级上使用。所有其他选项既可在连接级，也可在 Visual FoxPro 级上进行设置，每个在 Visual FoxPro 级的设置作为随后连接的默认值。

可用 SQLGETPROP( ) 返回指定设置的当前值。


* 下面的示例假定已经成功执行了 SQLCONNECT( )，并且
* 其返回值存入名为 gnConnHandle 的内存变量。

*  SQLSETPROP( ) 将 BatchMode 属性设置成“假”(.F.)，
* 这样可以检索单个的结果集合。然后执行两次
*  SQLMORERESULTS( )，创建两个临时表，包含 SQLEXEC( )
* 的查询结果。可用 SET 显示查看窗口，并查看
*  SQLEXEC( ) 创建的临时表。

= SQLSETPROP(gnConnHandle, 'BatchMode', .F.)  && 单个的结果集合

= SQLEXEC(gnConnHandle, 'SELECT * FROM authors;

SELECT * FROM titles')  &&

= SQLMORERES(gnConnHandle)  && 第一个结果集合

= SQLMORERES(gnConnHandle)  && 第二个结果集合


请参阅

AERROR( )，SQLGETPROP( )


SQLSTRINGCONNECT( ) 函数

请参阅	示例

使用一个连接字符串建立和数据源的连接。

语法

SQLSTRINGCONNECT([cConnectString])

参数

cConnectString

指定一些 ODBC 驱动程序需要的数据源连接字符串，Visual FoxPro 将该连接字符串传递给 ODBC 驱动程序。有关数据源连接字符串的详细内容，请参阅 ODBC 驱动程序的文档。

如果不带 cConnectString 发出 SQLSTRINGCONNECT( )，则显示“SQL DATA RESOURCE”（SQL 数据源）对话框，允许您选择一个数据源。

返回值类型

数值型

说明

如果成功连接到数据源上，SQLSTRINGCONNECT( ) 返回一个正的、非零句柄，应该将这个句柄存入一个内存变量，在随后需要连接句柄的函数调用中使用该变量。


* 下面的示例假定一个名为“MyFoxSQLNT”的 ODBC 数据源
* 可用，并且该数据源的用户标识是“sa”，口令是“FOXPRO”。
* 发出 SQLSTRINGCONNECT( )，返回值存入一个名
* 为 gnConnHandle 的内存变量。

* 如果成功连接到数据源上，SQLSTRINGCONNECT( )
* 返回一个正数，然后显示一个对话框，并发出
* SQLSTRINGCONNECT( )，解除与数据源的连接。

* 如果不能连接到数据源上，SQLSTRINGCONNECT( ) 返回
* 一个负数，并显示一条信息。

STORE SQLSTRINGCONNECT('dsn=MyFoxSQLNT;uid=sa;pwd=FOXPRO');

TO gnConnHandle

IF gnConnHandle < 0

= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')

ELSE

= MESSAGEBOX('Connection made', 48, 'SQL Connect Message')

= SQLDISCONNECT(gnConnHandle)

ENDIF


请参阅

AERROR( )，SQLCONNECT( )，SQLDISCONNECT( )


SQLTABLES( ) 函数

请参阅	示例

把数据源中的表名存储到 Visual FoxPro 临时表中。

语法

SQLTABLES(nConnectionHandle [, cTableTypes] [, cCursorName])

参数

nConnectionHandle

由 SQLCONNECT( ) 返回的、指向数据源的连接句柄。

cTableTypes

指定一个或多个表类型。有效的表类型有：“TABLE”、“VIEW”、“SYSTEM TABLE”或任何有效的数据源特定表类型标识。cTableTypes 必须大写。如果要包含多个表类型列表，请用逗号分隔。

如果省略 cTableTypes 参数，或者 cTableTypes 是空字符串，则选定数据源中所有表名。

指定的表类型必须用单引号括起来。下面的示例演示了如何指定“VIEW”和“SYSTEM TABLE”表类型。

? SQLTABLES(handle, "'VIEW', 'SYSTEM TABLE'", "mydbresult")

cCursorName

指定 Visual FoxPro 临时表的名称，结果集合发送到该临时表。如果不包含临时表名，Visual FoxPro 将使用默认名“SQLRESULT”。

下表显示临时表中的列：

列名	说明
TABLE_QUALIFIER	表限定符标识
TABLE_OWNER	表拥有者标识
TABLE_NAME	数据字典中的表名。
TABLE_TYPE	数据字典中的表类型
REMARKS	表的说明
返回值类型

数值型

说明

如果成功创建临时表，SQLTABLES( ) 返回 1；如果仍在执行中，则返回 0。如果发生连接级的错误，返回 -1；发生环境级的错误，返回 -2。

SQLTABLES( ) 是既可以同步执行又可以异步执行的四个函数之一。SQLSETPROP( ) 的异步选项设置决定这些函数是同步执行还是异步执行。异步方式下，必须重复调用 SQLTABLES( )，直到返回一个非“假”(.F.)值，“假”(.F.)值表示函数仍在执行。


* 下面的示例假定名为“MyFoxSQLNT”的数据源可用，并且
* 该数据源的用户标识是“sa”。发出 SQLCONNECT( )，
* 并且返回值存入名为 gnConnHandle 内存变量。
*

* 如果不能连接到数据源上，SQLCONNECT( ) 返回一个负数，
* 并且显示一条信息。

* 如果成功地连接到数据源上，SQLCONNECT( )返回一个正数
* 并且显示一个对话框。SQLTABLES( ) 用来创建
* 一个名为 mycursor  的临时文件，该临时文件包含有关数据源
* 中表的信息，用 LIST 显示与表有关的信息。

STORE SQLCONNECT('MyFoxSQLNT', 'sa') TO gnConnHandle

IF gnConnHandle < 0

= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')

ELSE

= MESSAGEBOX('Connection made', 48, 'SQL Connect Message)

STORE SQLTABLES(gnConnHandle, 'TABLES', 'mycursor') TO nTables

IF nTables = 1

SELECT Mycursor

LIST

ENDIF

ENDIF


请参阅

AERROR( )，SQLCOLUMNS( )，SQLCONNECT( )，SQLGETPROP( )，SQLSETPROP( )


SQRT( ) 函数

请参阅	示例

返回指定数值表达式的平方根。

语法

SQRT(nExpression)

参数

nExpression

SQRT( ) 计算的数值表达式，nExpression 不能是负值。

返回值类型

数值型

说明

SQRT( ) 返回值中的小数位数是当前小数位数设置和 nExpression 中小数位数中的较大者，当前小数位数设置用 SET DECIMALS 指定。


CLEAR

? SQRT(4)  && 显示2.00

? SQRT(2*SQRT(2))  && 显示1.68


请参阅

SET DECIMALS


SROWS( ) 函数

请参阅	示例

返回 Visual FoxPro 主窗口中可用的行数。

语法

SROWS( )

返回值类型

数值型

说明

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，SROWS( ) 返回值依赖于当前显示方式，显示方式可以用 SET DISPLAY 更改。

在 FoxPro for Macintosh 中，SROWS( ) 的返回值依赖于 MACDESKTOP 设置和当前屏幕字体。如果 MACDESKTOP 设置成 ON，SROWS( ) 返回 Macintosh 桌面的行数；如果 MACDESKTOP 设置成 OFF，SROWS( ) 返回 FoxPro for Macintosh 桌面的行数。屏幕字体可用 MODIFY WINDOW 命令或者在“字体”对话框中更改。若要显示“字体”对话框，按下 Shift 键并且从“格式”菜单中选择“屏幕字体”。


CLEAR

? SROWS( )


请参阅

COL( )，ROW( )，SCOLS( )，SET DISPLAY，SET MACDESKTOP，WCOLS( )，WROWS( )


_STARTUP 系统内存变量

指定启动 Visual FoxPro 时运行的应用程序名，包含该系统内存变量是为了提供向后兼容性。

语法

_STARTUP = ProgramName

参数

ProgramName

启动 Visual FoxPro 时要运行的应用程序。必须在 Visual FoxPro 的配置文件中包含 _STARTUP。

也可以在配置文件中包含下列命令行之一，指定 Visual FoxPro 启动时运行的命令或程序：

COMMAND = cVisual FoxProCommand

 — 或者 —

COMMAND = DO ProgramName

_STARTUP 指定的启动程序总是比配置文件中 COMMAND 指定的命令或程序先运行。

说明

在早期的 FoxPro 版本中，_STARTUP 默认时包含 FOXSTART.APP。如果 FOXSTART.APP 不在 FoxPro 可执行文件所处的目录中，则 _STARTUP 包含一个空串。


StatusBarText 属性

请参阅

指定控制获得焦点时在状态栏中显示的文本。

应用于

复选框，组合框，命令按钮，编辑框，表格，列表框，选项按钮，微调，文本框

语法

[Form.]Control.StatusBarText[= cText]

设置

cText

指定文本，用该文本对获得焦点的控制加以说明。

说明

设计和运行时可用。


请参阅

Caption 属性


STORE 命令

请参阅	示例

将数据存入内存变量、数组或数组元素中。

语法

STORE eExpression TO MemVarNameList | ArrayNameList
 — 或者 —
MemVarName | ArrayName = eExpression

参数

eExpression

指定一个表达式，该表达式的值将存入内存变量、数组或数组元素中。如果指定内存变量不存在，则创建该内存变量，并且将其初始化为 eExpression。数组必须先用 DIMENSION 命令定义。STORE 命令用新值替换现有的内存变量、数组或数组元素中的值。

MemVarNameList

指定内存变量或数组元素的列表，将 eExpression 存入这些内存变量或数组元素中。内存变量名或数组元素之间用逗号分隔。

ArrayNameList

指定 eExpression 所要存入的、已存在的数组名，数组名之间用逗号分隔。

如果 SET COMPATIBLE 为 OFF，那么 STORE 命令用指定值初始化数组中的每一个元素；如果 SET COMPATIBLE 为 ON，STORE 命令将指定值存入指定名称的内存变量中，并改写任何已存在的同名数组。

说明

等号 (=) 赋值操作符可代替 STORE 命令。内存变量、数组或数组元素必须位于等号的左边，其值位于等号的右边。

使用花括号可以将日期直接存入内存变量、数组或数组元素：

STORE {12/25/95} TO gdXMas

可以创建的内存变量和数组的最大数目列在“帮助”的“系统容量”表中，可在配置文件中增加或减少此项限制。有关配置 Visual FoxPro 的详细内容，请参阅《安装指南》第三章“配置 Visual FoxPro”。


STORE DATE( ) TO gdDate

STORE 50 TO gnNumeric

STORE 'Hello' TO gcCharacter

STORE .T. TO glLogical

STORE $19.99 TO gyCurrency

DIMENSION gaMyArray(2,2)

SET COMPATIBLE OFF

STORE 2 TO gaMyArray

CLEAR

DISPLAY MEMORY LIKE g*


请参阅

DIMENSION，SET COMPATIBLE


STR( ) 函数

请参阅

返回与指定数值表达式对应的字符。

语法

STR(nExpression [, nLength [, nDecimalPlaces]])

参数

nExpression

STR( ) 要计算的数值表达式。

nLength

STR( ) 返回的字符串长度。该长度包括小数点所占的字符和小数点右边每个数字所占的字符。

如果指定长度大于小数点左边数字位数，STR( ) 用前导空格填充返回的字符串；如果指定长度小于小数点左边的数字位数，STR( ) 返回一串星号，表示数值溢出。

nDecimalPlaces

由 STR( ) 返回的字符串中的小数位数。若要指定小数位数，必须同时包含 nLength。

如果指定的小数位数小于 nExpression 中的小数位数，则截断多余的数字。

返回值类型

字符型


请参阅

VAL( )


 STRCONV( ) 函数

请参阅

将字符表达式转换成另一种形式。

语法

STRCONV(cExpression, nConversionSetting)

参数

cExpression

要 STRCONV( ) 转换的字符表达式。

nConversionSetting

转换类型。下表列出 nConversionSetting 值和可执行的转换类型。

nConversionSetting	转换
1	将 cExpression 中的单字节转换为双字节
2	将 cExpression 中的双字节转换为单字节
3	将 cExpression 中的双字节 Hiragana  字符转换为双字节的 Katakana 字符
4	将 cExpression 中的双字节 Katakana 字符转换为双字节 Hiragana 字符.
5	将双字节转换为 UNICODE（宽字符）
6	将 UNICODE（宽字符）转换为双字节
7	转换为与地区相关的小写形式
8	转换为与地区相关的大写形式
返回值类型

字符型


请参阅

IMESTATUS( )，ISLEADBYTE( )


Stretch 属性

请参阅

在一个控制内部，指定如何调整一幅图象以适应控制大小。

应用于

图象，OLE 绑定型控制，OLE 容器控制

语法

[Form.]Control.Stretch[= nType]

设置

nType

Stretch 属性的设置是：

设置	说明
0	（默认值）剪裁。剪裁图象以适合控制。
1	等比填充。调整图象大小以适合控制，同时保持图象的原始比例。
2	变比填充。调整图象大小以适合控制，但是不保持图象的原始比例。
说明

设计和运行时可用。


请参阅

Autosize 属性，Sizable 属性


STRTRAN( ) 函数

请参阅	示例

在第一个字符表达式或备注字段中，搜索第二个字符表达式或备注字段，并用第三个字符表达式或备注字段替换每次出现的第二个字符表达式或备注字段。

语法

STRTRAN(cSearched, cSearchFor [, cReplacement]
[, nStartOccurrence] [, nNumberOfOccurrences])

参数

cSearched

指定要在其中进行搜索的字符表达式，cSearched 参数可以是一个备注字段。

cSearchFor

在 cSearched 中要搜索的字符表达式，搜索过程区分大小写。cSearchFor 参数可以是一个备注字段。

cReplacement

用来替换在 cSearched 中每次出现的 cSearchFor 的字符表达式。如果省略 cReplacement 参数，则用空字符串替换每次出现的 cSearchFor。

nStartOccurrence

指定哪次出现的 cSearchFor 首先替换。例如，如果 nStartOccurrence 是 4，则替换 cSearched 中第 4 次出现的 cSearchFor，而前面三次出现的 cSearchFor 保持不变；如果省略 nStartOccurrence 参数，替换开始的位置默认为第一次出现位置。

nNumberOfOccurrences

指定要替换的 cSearchFor 数目。如果省略了 nNumberOfOccurrences 参数，则从用 nStartOccurrence 指定的位置开始，替换所有出现的 cSearchFor。

返回值类型

字符型

说明

可以指定替换开始的位置和需要替换多少个，STRTRAN( ) 函数返回结果字符串。


STORE 'abracadabra' TO gcString

? STRTRAN(gcString, 'a', 'z')  && 显示“zbrzczdzbrz”

? STRTRAN(gcString, 'a', 'q', 2, 3)  && 显示“abrqcqdqbra”


请参阅

STUFF( )


STUFF( ) 函数

请参阅	示例

返回一个字符串，此字符串是通过用另一个字符表达式替换现有字符表达式中指定数目的字符得到的。

语法

STUFF(cExpression, nStartReplacement, nCharactersReplaced, cReplacement)

参数

cExpression

指定要在其中进行替换的字符表达式。

nStartReplacement

在 cExpression 中开始替换的位置。

nCharactersReplaced

要替换的字符数目。如果 nCharactersReplaced 是 0，则替换字符串 cReplacement 插入到 cExpression 中。

cReplacement

用以替换的字符表达式。如果 cReplacement 是空字符串，则从 cExpression 中删除用 nCharactersReplaced 指定的字符数目。

返回值类型

字符型


STORE 'abcdefghijklm' TO gcString1

STORE '12345' TO gcString2

CLEAR

? STUFF(gcString1, 4, 0, gcString2)	  && 插入

? STUFF(gcString1, 4, 3, gcString2)  	&& 替换

? STUFF(gcString1, 4, 6, '')	  && 删除

? STUFF(gcString1, 4, 1, gcString2)  	&& 替换和插入

? STUFF(gcString1, 4, 4, gcString2)	  && 替换和删除

? STUFF(gcString1, 4, LEN(gcString1), gcString2)	&& 替换，删除其他


请参阅

LEFT( )，PADC( ) | PADL( ) | PADR( )，RIGHT( )，STRTRAN( )，SUBSTR( )


STUFFC( ) 函数

请参阅

返回一个字符串，此字符串是通过用另一个字符表达式替换现有字符表达式中指定数目的字符得到的。

语法

STUFFC(cExpression, nStartReplacement, nCharactersReplaced, cReplacement)

参数

cExpression

指定要在其中进行替换的字符表达式。

nStartReplacement

指定 cExpression 中开始替换的位置。

nCharactersReplaced

指定要替换的字符数目。如果 nCharactersReplaced 是 0，则替换字符串 cReplacement 插入到 cExpression 中。

cReplacement

指定替换字符表达式。如果 cReplacement 是空字符串，则从 cExpression 中删除 nCharactersReplaced 指定的字符数目。

返回值类型

字符型

说明

STUFFC( ) 返回一个字符串，该字符串通过用另一个字符表达式替换现有字符表达式中指定数目的字符而得到。字符表达式可包含单字节和双字节字符的任意组合。


请参阅

LEFTC( )，RIGHTC( )，STUFF( )，SUBSTRC( )


Style 属性

请参阅

指定控制的样式。

应用于

复选框，组合框，命令按钮，选项按钮，文本框

语法

[Form.]Control.Style[= nType]

设置

nType

对于组合框控制，Style 属性的设置有：

设置	说明
0	下拉组合框，包括一个下拉列表和一个编辑区。用户可以从列表中选择或在编辑区中输入字符。
2	下拉列表。用户必须从下拉列表中选择。
以下是选择哪种设置的准则：

 •	   将 Style 设置为 0 (下拉组合框) 可以给用户提供一个选择列表，同时也允许用户在编辑区中输入选择项。因为用户选择后将关闭列表部分，所以 Style 为 0 可以节省表单的空间。

 •	   将 Style 设置为 2 (下拉列表) 可以显示一个固定的选择列表，用户能够从中选择一项。当用户选择了一项后，将关闭列表部分。

对于复选框控制和选项按钮控制，Style 属性的设置有：

设置	说明
0	标准方式。
1	图形方式。按钮看起来象一个命令按钮，可以包含图形和文本。当按钮两者都包含时，文本总是在按钮底部居中对齐的。
对于命令按钮控制，Style 属性的设置有：

设置	说明
0	标准方式。
1	不可见方式。
对于文本框控制，Style 属性的设置有：

设置	说明
0	（默认值）正常方式。
1	包含该设置是为了提供和 FoxPro 2.x 版本的 @…SAY 命令的向后兼容性。文本框是只读的并且不能接受焦点。
说明

设计和运行时可用。


请参阅

Click 事件，DblClick 事件


SUBSTR( ) 函数

请参阅	示例

从给定的字符表达式或备注字段中返回字符串。

语法

SUBSTR(cExpression, nStartPosition [, nCharactersReturned])

参数

cExpression

指定要从其中返回字符串的字符表达式或备注字段。

StartPosition

指定返回的字符串在字符表达式或备注字段 cExpression 中的位置，cExpression 的第一个字符是位置 1。

注意：如果 TALK 设置为 ON，并且 nStartPosition 大于 cExpression 中的字符数目，那么 Visual FoxPro 产生错误信息；如果 TALK 设置为 OFF，那么返回一个空字符串。

nCharactersReturned

从 cExpression 中返回的字符数目。如果省略了 nCharactersReturned 参数，那么返回字符表达式结束前的全部字符。

返回值类型

字符型

说明

SUBSTR( ) 从一个字符表达式或备注字段中返回一个字符串。该字符串起始于字符表达式或备注字段的指定位置，到指定数目字符结束。

当在调试窗口中发出 SUBSTR( ) 函数时，对于备注字段，SUBSTR( ) 不会返回值。要在调试窗口中返回值，可在 ALLTRIM( ) 函数中放入备注字段名，并且将 ALLTRIM( ) 函数放入 SUBSTR( ) 函数中。


STORE 'abcdefghijklm' TO mystring

CLEAR

? SUBSTR(mystring, 1, 5)  && 显示“abcde”。

? SUBSTR(mystring, 6)  && 显示“fghijklm”。


请参阅

AT( )，LEFT( )，RIGHT( )，STRTRAN( )，STUFF( )


SUBSTRC( ) 函数

请参阅

从给定的字符表达式或者备注字段返回字符串。

语法

SUBSTRC(cExpression, nStartPosition [, nCharactersReturned])

参数

cExpression

指定要从中返回字符串的字符表达式或备注字段。

nStartPosition

指定在字符表达式或备注字段 cExpression 中的位置，从该位置开始返回字符串。cExpression 第一个字符的位置是 1。

注意：如果 TALK 设置为 ON，并且 nStartPosition 字符数比 cExpression 字符数大，Visual FoxPro 会产生错误信息；如果 TALK 设置为 OFF，则返回空字符串。

nCharactersReturned

指定从 cExpression 返回的字符数。如果省略 nCharactersReturned，那么返回字符表达式的全部字符。

返回值类型

字符型

说明

SUBSTRC( ) 从给定的字符表达式或备注字段中返回字符串。字符表达式或备注字段可以包含单字节和双字节字符的任何组合。

在调试窗口使用 SUBSTRC( ) 时，SUBSTRC( ) 不能从备注字段返回值。若想在调试窗口返回一个值，需把备注字段放在 ALLTRIM( ) 函数中，再把 ALLTRIM( ) 放在 SUBSTRC( ) 函数中。


请参阅

AT_C( )，LEFTC( )，RIGHTC( )，STUFFC( )，SUBSTR( )


SUM 命令

请参阅	示例

对当前选定表的指定数值字段或全部数值字段进行求和。

语法

SUM [eExpressionList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO MemVarNameList | TO ARRAY ArrayName]
[NOOPTIMIZE]

参数

eExpressionList

指定要总计的一个或多个字段或者字段表达式。如果省略字段表达式列表，则总计所有数值型字段。

Scope

指定要总计的记录范围。范围子句有：ALL、NEXT nRecords、RECORD nRecordnumber 和 REST。关于作用域子句的详细内容，请参阅 Scope 子句主题或《开发指南》的第二章“语言概述”。

SUM 默认的范围是所有记录 (ALL)。

FOR lExpression1

指定对逻辑条件 lExpression1 值为“真”(.T.) 的记录才进行总计。包含 FOR 子句可以有条件地总计记录，筛选出不想要的记录。

如果 lExpression1 是一个可优化表达式，那么 Rushmore 可以优化 SUM ... FOR 命令。为了获得最佳性能，请在 FOR 子句中使用可优化表达式。关于 Rushmore 优化的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题或者《开发指南》的第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，在当前表中只对逻辑表达式 lExpression2 为“真” (.T.) 的记录进行总计。

TO MemVarNameList

将每个总计值存入一个内存变量。如果 MemVarNameList 中指定的内存变量不存在，则 Visual FoxPro 自动创建，列表中的内存变量名用逗号分隔。

TO ARRAY ArrayName

将总计值存入内存变量数组中，如果在 SUM 命令中指定的数组不存在，则 Visual FoxPro 自动创建；如果数组存在但太小，不能包含所有的总计值，那么自动增加数组的大小以存放总计值。

NOOPTIMIZE

关于关闭 Rushmore 优化的详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题或者《开发指南》的第十七章“优化应用程序”。


* 下面的示例显示 products 表中的 in_stock 字段和 on_order
* 字段的总计，以及这两个总计的和。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE products  && 打开“Products”表

SUM in_stock, on_order, in_stock+on_order ;

TO gnInStock, gnOnOrder, gnUnits

CLEAR

?

? 'Total in stock : ', gnInStock  && 显示3119.00

? 'Total on order:  ', gnOnOrder  && 显示780.00

? 'Total # units :  ', gnUnits  && 显示3899.00


请参阅

AVERAGE，CALCULATE，COUNT


SUSPEND 命令

请参阅

使用 SUSPEND 可暂停程序的执行，并返回到 Visual FoxPro 的交互状态。

语法

SUSPEND

说明

当程序暂停时，可以执行诸如检查内存变量值、打开跟踪窗口和调试窗口等命令。

当程序暂停时，创建的所有内存变量都是 PRIVATE 变量。

可使用 RESUME 命令重新开始执行一个挂起的程序。程序从使用 SUSPEND 程序行的下一行开始执行。


请参阅

CANCEL，RESUME


SYS( ) 函数
SYS( ) 函数概述

返回 Visual FoxPro 系统信息。

语法

SYS( )

返回值类型

字符型

说明

Visual FoxPro 的 SYS( ) 函数返回字符值，该字符值包含有用的系统信息。下表显示了每个 SYS( ) 函数返回的信息。

函数	返回信息
SYS(0)	网络机器信息
SYS(1)	儒略 (Julian) 系统日期
SYS(2)	自午夜起计算的秒数
SYS(3)	合法的文件名
SYS(5)	默认驱动器
SYS(6)	当前打印机设备
SYS(7)	当前格式文件
SYS(9)	Visual FoxPro 系列号
SYS(10)	来自儒略 (Julian) 日期的字符串
SYS(11)	儒略 (Julian) 日期
SYS(12)	可用内存字节数
SYS(13)	打印机状态
SYS(14)	索引表达式
SYS(15)	字符转换
SYS(16)	执行程序文件名
SYS(17)	正在使用的处理器
SYS(18)	当前控制
SYS(20)	转换德文文本
SYS(21)	控制索引编号
SYS(22)	控制标识名或索引名
SYS(23)	Visual FoxPro 的 EMS 内存用法
SYS(24)	EMS 内存限制
SYS(100)	控制台设置
SYS(101)	设备设置
SYS(102)	打印机设置
SYS(103)	对话设置
SYS(1001)	Visual FoxPro 内存
SYS(1016)	用户对象的内存使用
SYS(1023)	启用诊断帮助模式
SYS(1024)	终止诊断帮助模式
SYS(1037)	“页面设置”对话框
SYS(1269)	属性信息
SYS(1270)	对象位置
SYS(1271)	对象的 .SCX 文件
SYS(1272)	对象层次
SYS(2000)	文件名通配符匹配
SYS(2001)	SET 命令状态
SYS(2002)	打开或关闭插入点
SYS(2003)	当前目录或文件夹
SYS(2004)	Visual FoxPro 启动目录或文件夹
SYS(2005)	当前资源文件
SYS(2006)	当前图形适配卡
SYS(2007)	检查求和值
SYS(2008)	插入点形状
SYS(2009)	切换插入点形状
SYS(2010)	CONFIG.SYS 文件设置
SYS(2011)	当前锁状态
SYS(2012)	备注字段块大小
SYS(2013)	系统菜单名字符串
SYS(2014)	最小路径
SYS(2015)	唯一的过程名
SYS(2016)	SHOW GETS WINDOW 名称
SYS(2017)	显示启动屏幕
SYS(2018)	错误信息参数
SYS(2019)	配置文件的名称和位置
SYS(2020)	默认磁盘大小
SYS(2021)	筛选索引表达式
SYS(2022)	磁盘簇 (块) 大小
SYS(2023)	临时文件驱动器
SYS(2027)	平台的指定路径转换
SYS(2029)	表类型
SYS(3004)	返回本地 ID
SYS(3005)	设置本地 ID
SYS(3006)	设置语言和本地 ID
SYS(3050)	设置缓冲内存大小
SYS(3051)	设置锁定重试间隔
SYS(3052)	忽略 SET REPROCESS 锁定
SYS(3053)	ODBC 环境句柄


SYS(0) - 网络机器信息

请参阅

当在网络环境中使用 Visual FoxPro 时，SYS(0) 返回网络机器信息。

语法

SYS(0)

返回值类型

字符型

说明

必须用网络软件指定机器信息，并且必须加载网络外壳程序。

如果没有指定机器信息，或者没有加载网络外壳程序，SYS(0) 返回一个字符串。该字符串包括 15 个空格，一个数字符号 (#)，后接另一个空格，最后是 0。关于定义机器信息的详细内容，请参考您的网络文档。

在独立环境下使用 Visual FoxPro 时，SYS(0) 返回 1。

在 Visual FoxPro、FoxPro for Macintosh 中，SYS(0) 返回机器名称和用户名称。

在 FoxPro for Windows 和 FoxPro for MS-DOS 中，SYS(0) 返回机器名称和机器编号。


请参阅

SYS( ) 函数概述


SYS(1) - 儒略(Julian)系统日期

请参阅	示例

以儒略 (Julian) 日期数字字符串的形式返回当前系统日期。

语法

SYS(1)

返回值类型

字符型

说明

SYS(1) 的返回值在美国有效。在 Visual FoxPro 版本中，可表示的日期范围是 1752 年 9 月 14 日 — 9999 年 12 月 31 日。


? SYS(1)

? SYS(10,VAL(SYS(1)))


请参阅

CDOW( )，CTOD( )，DATE( )，DATETIME( )，DAY( )，DOW( )，DTOC( )，SYS( ) 函数概述，SYS(10) - 来自儒略 (Julian)日期的字符串，SYS(11) - 儒略 (Julian)日期


SYS(2) - 自午夜开始以秒计的时间

请参阅	示例

返回自午夜零点开始以来的时间，按秒计算。

语法

SYS(2)

返回值类型

字符型


? TIME( )

? SYS(2)


请参阅

DATETIME( )，SECONDS( )，SYS( ) 函数概述，TIME( )


SYS(3) - 合法的文件名

请参阅

返回一个合法文件名，可用来创建临时文件。

语法

SYS(3)

返回值类型

字符型

说明

在一台速度很快的计算机上，当成功地发出 SYS(3) 时，可能返回一个不唯一的名字。使用 SUBSTR(SYS(2015), 3, 10) 可以创建唯一的、合法的、 8 个字符的文件名。


请参阅

FILE( )，SYS( ) 函数概述，SYS(2015) - 唯一的过程名


SYS(5) - 默认驱动器

请参阅	示例

返回当前 Visual FoxPro 的默认驱动器。

语法

SYS(5)

返回值类型

字符型

说明

这个函数返回当前 Visual FoxPro 的默认驱动器，使用 SET DEFAULT 来指定一个默认驱动器。

在 FoxPro for Macintosh 中，对于出现的 MS-DOS 驱动器指示符 (A：B：C：等等)，可以使用 SET VOLUME 把它们映象为 Macintosh 卷或文件夹。如果已经使用 SET VOLUME 把 MS-DOS 驱动器指示符映象到默认的 Macintosh 卷上，SYS(5) 返回 MS-DOS 驱动器指示符。


IF _DOS OR _WINDOWS

SET DEFAULT TO C:

ENDIF

? SYS(5)


请参阅

SET DEFAULT，SET VOLUME，SYS( ) 函数概述


SYS(6) - 当前打印机设备
SYS(6) - 当前打印设备

请参阅	示例

返回当前打印设备。

语法

SYS(6)

返回值类型

字符型

说明

这个函数返回当前的 SET PRINTER TO 设置值。


? SYS(6)

SET PRINTER TO output.txt

? SYS(6)


请参阅

SET PRINTERs，SYS( ) 函数概述


SYS(7) - 当前格式文件

请参阅

返回当前格式文件的名称。

语法

SYS(7 [, nWorkArea])

返回值类型

字符型

参数

nWorkArea

指定 SYS(7) 要返回的格式文件名称的工作区编号。如果省略 nWorkArea 参数，则返回当前工作区的格式文件名称。

说明

用 SET FORMAT 打开格式文件。在指定的工作区中，如果没有打开的格式文件，SYS(7) 返回一个空串。


请参阅

SET FORMAT，SYS( ) 函数概述


SYS(9) - Visual FoxPro 系列号

请参阅

返回 Visual FoxPro 的系列号。

语法

SYS(9)

返回值类型

字符型


请参阅

SYS( ) 函数概述，VERSION( )


SYS(10) - 来自儒略日期的字符串
SYS(10) - 来自儒略(Julian)日期的字符串

请参阅	示例

将儒略 (Julian) 日期转换成一个字符串。

语法

SYS(10, nJulianDayNumber)

返回值类型

字符型

说明

SYS(10) 从 Julian 日期 nJulianDayNumber 中返回一个字符型日期。


? SYS(1)

? SYS(10,VAL(SYS(1)))


请参阅

CDOW( )，CTOD( )，DATE( )，DATETIME( )，DAY( )，DOW( )，DTOC( )，SYS( ) 函数概述，SYS(1) - 儒略系统日期，SYS(11) - 儒略 (Julian)日期


SYS(11) - 儒略日期
SYS(11) - 儒略(Julian)日期

请参阅	示例

将日期格式表示的日期表达式或字符串转换成儒略 (Julian) 日期。

语法

SYS(11, dExpression | tExpression | cExpression)

返回值类型

字符型

说明

从日期表达式 dExpression、日期时间表达式 tExpression 或日期格式的字符串 cExpression 中，SYS(11) 返回儒略(Julian)日期，该日期号作为字符串返回。


? SYS(11, {10/31/95})

? SYS(11,'10/31/95')


请参阅

CDOW( )，CTOD( )，DATE( )，DATETIME( )，DAY( )，DOW( )，DTOC( )，SYS( ) 函数概述，SYS(10) - 来自儒略 (Julian)日期的字符串


SYS(12) - 可用内存的字节数

请参阅

返回 640K 以下、可用于执行外部程序的内存数量。

语法

SYS(12)

返回值类型

字符型

说明

在 FoxPro for MS-DOS 中，SYS(12) 返回 640K 以下、可用于执行外部程序的内存数量，该外部程序可用 RUN 命令来运行。任何可用的扩充内存不包含在这个函数的返回值中。在 FoxPro for MS-DOS 工作期内，可用内存数量可能会变化。

在 Visual FoxPro、FoxPro for Window 和 FoxPro for Macintosh 中，SYS(12) 总是返回 655,360。

SYS(12) 与 MEMORY( ) 相似，但有两点不同：

 •	   SYS(12) 以字节为单位返回可用内存的数量，MEMORY( ) 以千字节 (KB) 为单位返回可用内存数量。

 •	   SYS(12) 返回一个字符串，而 MEMORY( ) 返回一个数值。


请参阅

MEMORY( )，RUN | !，SYS( ) 函数概述，SYS(23) - Visual FoxPro EMS 内存用法，SYS(24) -  EMS 内存限制，SYS(1001) - Visual FoxPro 内存，SYS(1016) - 用户对象内存使用


SYS(13) - 打印机状态

请参阅	示例

返回打印机的状态。

语法

SYS(13)

返回值类型

字符型

说明

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，如果打印机没有准备就绪，SYS(13) 返回 OFFLINE；如果打印机准备就绪，SYS(13) 返回 READY。

在 FoxPro for Macintosh 中，SYS(13) 总是返回 READY。

如果打印机连接到一个串行通信端口，当打印机返回“Clear To Send Data”或“Data Set Ready”时，SYS(13) 返回 READY。

如果打印机连接到一个并行端口上，当打印机返回“Out of Paper”、“I/O Error”、“TImeOut”、“Printer Busy”或“Printer Not Selected”时，SYS(13) 返回 OFFLINE。


IF SYS(13) = 'OFFLINE'

WAIT WINDOW 'Printer is offline'

ENDIF


请参阅

PRINTSTATUS( )，SET PRINTER，SYS( ) 函数概述


SYS(14) - 索引表达式

请参阅

返回一个打开的、单项索引文件的索引表达式，或者返回复合索引文件中索引标识的索引表达式。

语法

SYS(14, nIndexNumber [, nWorkArea | cTableAlias])

返回值类型

字符型

参数

nIndexNumber

从打开的索引文件或标识中，指定返回哪一个索引表达式。当 nIndexNumber 从 1 递增到打开的单项索引文件标识、结构复合索引标识、独立复合索引标识的总和时，SYS(14) 以下面的顺序从打开的索引文件和标识中返回索引表达式：

1.	首先从单项索引文件（如果都是打开的话）中返回索引表达式。包含在 USE 或 SET INDEX 中的单项索引文件的顺序决定索引表达式返回的顺序。

2.	接着返回结构复合索引（如果存在的话）中每个标识的索引表达式。以标识在结构索引中的创建顺序返回索引表达式。

3.	最后返回打开的独立复合索引中每个标识的索引表达式。以标识在独立复合索引中的创建顺序返回索引表达式。

如果 nIndexNumber 大于打开的单项索引文件、结构复合索引标识、独立复合索引标识的总和时，SYS(14) 返回一个空串。

nWorkArea | cTableAlias

指定工作区编号或工作区别名。如果省略了 nWorkArea 和 cTableAlias 参数，那么从当前工作区内打开的索引文件中返回索引表达式；如果表没有指定的别名，Visual FoxPro 将产生错误信息。

说明

当用 INDEX 创建索引文件或标识时，已经指定了一个索引表达式。当用索引文件或标识对表进行排序时，索引表达式决定如何显示和访问表。

有关索引表达式和创建索引文件和标识的详细内容，请参阅 INDEX。SYS(14) 与 KEY( ) 函数相似。

USE 和 SET INDEX 命令都支持索引文件名列表，该列表可以为一个表打开索引文件。单项索引文件、结构复合索引文件或独立的复合索引文件名的任意组合都可以包含到索引文件列表中。


请参阅

CDX( )，KEY( )，INDEX，MDX( )，NDX( )，REINDEX，SET INDEX，SET ORDER，SYS( ) 函数概述，TAG( )


SYS(15) - 字符变换

请参阅

从第一个字符串中变换出第二个字符串，包含此函数是为了提供向后兼容性。可使用 SET COLLATE 来代替。

语法

SYS(15, cTranslationExpression, cTranslated)

返回值类型

字符型

参数

cTranslationExpression

指定字符表达式，SYS(15) 用它变换 cTranslated。

cTranslated

指定被变换的字符表达式。SYS(15) 取 cTranslated 中的第一个字符，并确定该字符的 ASCⅡ 值，然后返回 cTranslationExpression 中位置号等于该 ASCⅡ 值的字符。对于 cTransLated 中的其余字符，重复这种处理。在 cTranslationExpression 中，如果没有字符和 cTranslated 中的字符相对应，那么不变换该字符。

在 Visual FoxPro 中，有一个名为 EUROPEAN.MEM 的内存变量文件，该文件包含变换字符的示例。在 FoxPro for MS-DOS 和 Visual FoxPro 中，EUROPEAN.MEM 文件位于已安装的 Visual FoxPro 的目录下；在 FoxPro for Macintosh 中，EUROPEAN.MEM 文件位于“Goodies:Misc”文件夹下。

在 EUROPEAN.MEM 文件中，存贮了一个名为 EUROPEAN 的字符型内存变量，在 FoxPro for MS-DOS 中它和 SYS(15) 一起使用；另一个字符型内存变量是 EUROANSI，在 Visual FoxPro 和 FoxPro for Macintosh 中和 SYS(15) 一起使用。这些变量可以和 SYS(15) 一起使用，将重音字符变换成相应没有重音的字符。

作为一个示例，下面的命令可在 FoxPro for MS-DOS 中，以正常的字母顺序在包含重音字符的字段上索引表。

INDEX ON SYS(15, european, field) TO european

说明

这个函数主要是方便必须使用重音字符的欧洲用户。因为多数元音有许多不同版本，在包含重音字符的字段上索引时，并不能按照所期望的字母顺序进行。因此提供此命令。


请参阅

SET COLLATE，SYS( ) 函数概述，SYS(20) - 转换德文文本


SYS(16) - 执行程序文件名

请参阅	示例

返回正在执行的程序文件名。

语法

SYS(16 [, nProgramLevel])

返回值类型

字符型

参数

nProgramLevel

指示从第几层嵌套中获取程序名。该值范围可以 1 变化到程序嵌套的层数。

如果 nProgramLevel 是 0 或 1，SYS(16) 返回主程序名（第一个执行的程序）；如果省略了 nProgramlevel 参数，那么返回当前正在执行的程序名；如果 nProgramlevel 参数大于程序嵌套深度，则返回一个空串。

说明

如果要从错误中恢复过来，该函数很有用。SYS(16) 与 PROGRAM( ) 相似，然而，SYS(16) 返回带路径的程序名，而 PROGRAM( ) 只返回程序名。

如果正在执行一个过程或函数，SYS(16) 在过程或函数名之后返回包含该过程或函数的文件名。

当正在执行的程序是应用程序 (.APP) 的一部分，那么 SYS(16) 只返回程序名（路径不和程序名一起返回）。


*在下面的小程序示例中返回程序嵌套数目：

STORE 1 TO gnX

DO WHILE LEN(SYS(16,gnX)) != 0

? SYS(16,gnX)

STORE gnX+1 TO gnX

ENDDO


请参阅

LINENO( )，ON ERROR，PROGRAM( )，SYS( ) 函数概述


SYS(17) - 正在使用的处理器

请参阅	示例

返回正在使用的中央处理器（CPU）。

语法

SYS(17)

返回值类型

字符型

说明

该函数返回正在使用的中央处理单元类型：80386，80486，68030，68040 … 等等。


? 'Processor in use: ', SYS(17)


请参阅

SYS( ) 函数概述


SYS(18) - 当前控制

请参阅

以大写字母形式返回用于创建当前控制的内存变量、数组元素或字段的名称。包含该函数是为了提供向后兼容性，可使用 ActiveControl 属性代替。

语法

SYS(18)

返回值类型

字符型

说明

有关控制的内容，请参阅控制和对象。如果浏览窗口或编辑窗口是活动的，则返回当前字段的名称。

SYS(18) 与 VARREAD( ) 相同，两者都可将当前控制的名称传递给一个过程。


请参阅

ActiveControl 属性，SYS( ) 函数概述


SYS(20) - 转换德文文本

请参阅

将包含德文文本的字符表达式转换成一个字符串。包含该函数是为了提供向后兼容性。可使用 SET COLLATE 代替。

语法

SYS(20, cExpressionTransformed, nCharacters)

返回值类型

字符型

参数

cExpressionTransformed

指定 SYS(20) 要转换的字符表达式。

nCharacters

指定 cExpressionTransformed 中要转换的字符数目。以 cExpressionTransformed 中的第一个字符为起始，任何 nCharacters 指定位置之后的附加字符都忽略。SYS(20) 返回的字符串长度是2 * nCharacters + 10 个字符，最大长度是 254 个字符。

说明

SYS(20) 对包含德文单词和名称的字段进行排序，该字段排序的顺序和德国电话薄顺序相似（大小写混合），“”在双“s”之后排序，具有变音的字符以对应元音加上字母 e 的组合方式进行排序。

SYS(15) 也可以索引和排序包含重音字符的字段。


请参阅

CHRTRAN( )，SET COLLATE，STRTRAN( )，SYS( ) 函数概述


SYS(21) - 控制索引号

请参阅

对于当前所选工作区中的主控制 .CDX 复合索引标识或 .IDX 单项索引文件，以字符串形式返回其索引位置编号。

语法

SYS(21)

返回值类型

字符型

说明

索引位置编号由 USE 和 SET INDEX 命令指定的 .IDX 单项索引文件和 .CDX 复合索引标识的顺序来决定。

可以使用 SET INDEX、SET ORDER 和 USE 命令指定哪一个 .IDX 单项索引文件或 .CDX 复合索引标识是主控制索引文件或标识。有关指定主控制索引或标识的详细内容，请参阅 SET INDEX 和 USE。

如果没有主控制 .CDX 复合索引标识或 .IDX 索引文件（例如，发出 SET ORDER TO 命令以记录的自然顺序显示和访问表），那么 SYS(21) 返回“0”。


请参阅

CDX( )，KEY( )，INDEX，MDX( )，NDX( )，REINDEX，SET INDEX，SET ORDER，SYS( ) 函数概述，SYS(22) - 控制标识或索引名，TAG( )，USE


SYS(22) - 控制标识或索引名

请参阅

返回表的主控制 .CDX 复合索引标识或 .IDX 单项索引文件的名称。

语法

SYS(22 [, nWorkArea])

返回值类型

字符型

说明

可以使用 SET INDEX、SET ORDER 和 USE 命令来指定哪一个 .IDX 单项索引文件或 .CDX 复合索引标识是主控制索引文件或标识。有关指定主控制索引或标识的详细内容，请参阅 SET INDEX、SET ORDER 和 USE。

如果没有主控 .CDX 复合索引标识或 .IDX 索引文件（例如，发出 SET ORDER TO 命令，以记录的自然顺序显示和访问表），那么 SYS(22) 返回一个空串。

nWorkArea

表的工作区编号。SYS(22) 返回该表的主控 .CDX 复合索引标识或 .IDX 单项索引文件的名称。


请参阅

CDX( )，KEY( )，INDEX，MDX( )，NDX( )，REINDEX，SET INDEX，SET ORDER，SYS( ) 函数概述，SYS(21) - 控制索引号，TAG( )


SYS(23) - Visual FoxPro 的 EMS 内存用法

请参阅

返回 FoxPro for MS-DOS 标准版当前正在使用的 EMS 内存数量（以 16K 段形式）。

语法

SYS(23)

返回值类型

字符型

说明

如果没有使用 EMS 内存，SYS(23) 返回 0。

在 FoxPro for MS-DOS、Visual FoxPro、FoxPro for Windows 和 FoxPro for Mointosh 扩展版（32位）中，SYS(23) 总是返回 0。


请参阅

SYS( ) 函数概述，SYS(12) - 可用内存的字节数，SYS(24) - EMS 内存限制，SYS(1001) - Visual FoxPro 内存，SYS(1016) - 用户对象内存使用


SYS(24) - Visual FoxPro EMS 内存限制
SYS(24) - EMS 内存限制

请参阅

返回 FoxPro for MS-DOS 配置文件中关于 EMS 限制的设置值。

语法

SYS(24)

返回值类型

字符型

说明

在 FoxPro for MS-DOS 标准版的配置文件中，如果不包含 EMS 限制，那么 SYS(24) 返回 0。

在 FoxPro for MS-DOS、Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 扩展版（32位）中，SYS(24) 总是返回 0。

有关这些配置设置的完整内容，请参阅《安装指南》的第三章“配置 Visual FoxPro”。


请参阅

SYS( ) 函数概述，SYS(12) - 可用内存的字节数，SYS(23) - Visual FoxPro EMS 内存用法，SYS(1001) - Visual FoxPro 内存，SYS(1016) - 用户对象内存使用


SYS(100) - 控制台设置

请参阅	示例

返回当前 SET CONSOLE 的设置。

语法

SYS(100)

返回值类型

字符型


IF SYS(100) != 'ON'

SET CONSOLE ON

ENDIF


请参阅

SET CONSOLE，SYS( ) 函数概述


SYS(101) - 设备设置

请参阅	示例

返回当前 SET DEVICE 的设置。

语法

SYS(101)

返回值类型

字符型


IF SYS(101) != 'SCREEN'

SET DEVICE TO SCREEN

ENDIF


请参阅

SET DEVICE，SYS( ) 函数概述


SYS(102) - 打印机设置

请参阅	示例

返回当前 SET PRINTER 的设置。

语法

SYS(102)

返回值类型

字符型


IF SYS(102) != 'OFF'

SET PRINTER OFF

ENDIF


请参阅

SET PRINTER，SYS( ) 函数概述


SYS(103) - 对话设置

请参阅	示例

返回当前 SET TALK 的设置。

语法

SYS(103)

返回值类型

字符型


IF SYS(103) != 'ON'

SET TALK ON

ENDIF


请参阅

SET TALK，SYS( ) 函数概述


SYS(1001) - Visual FoxPro 内存

请参阅

返回 Visual FoxPro 内存管理器可用的内存总数。

语法

SYS(1001)

返回值类型

字符型

说明

在 Visual FoxPro 中，SYS(1001) 返回虚拟内存池的大小，该大小约是物理内存数量的四倍。

在 FoxPro for MS-DOS 中，如果有 64K LIM4.0 兼容的可用扩充内存，那么该扩充内存也包含在 SYS(1001) 的返回值内。在 640K 和 1MB 之间的可用于 MS-DOS 的高端地址内存也包含在 SYS(1001) 的返回值内。

当用 RUN 命令 在 FoxPro for MS-DOS 中执行一个外部程序时，使用 SYS(12) 和 MEMORY( ) 可以返回 640K 以下的可用内存数量。


请参阅

SYS( ) 函数概述，SYS(12) - 可用内存的字节数，SYS(23) - Visual FoxPro EMS 内存用法，SYS(24) - EMS 内存限制，SYS(1016) - 用户对象内存使用


SYS(1016) - 用户对象内存使用

请参阅

返回用户自定义对象所使用的内存数量。

语法

SYS(1016)

返回值类型

字符型

说明

用户自定义对象包括：用户自定义的窗口、菜单栏、菜单、内存变量、数组、打开的表、用低级文件函数打开的文件等等。


请参阅

SYS( ) 函数概述，SYS(12) - 可用内存的字节数，SYS(23) - Visual FoxPro EMS 内存用法，SYS(24) - EMS 内存限制，SYS(1001) - Visual FoxPro 内存


SYS(1023) - 启用诊断帮助模式

请参阅

启用诊断帮助模式，能够俘获传递给 Visual FoxPro 帮助系统的 HelpContextID 值。

语法

SYS(1023)

返回值类型

字符型

说明

对于调试应用程序的自定义帮助系统，SYS(1023) 很有用，它返回空字符串。

当用 SYS(1023) 启用诊断模式之后，无论在什么时候按 F1 键或发出 HELP 命令，都会显示一个对话框。该对话框显示出要传递给 Visual FoxPro 帮助系统的 HelpContextID 值，并且给出选项，确定是否将 HelpContextID 传递给 Visual FoxPro 帮助系统。如果选择“是”，则将 HelpContextID 传递给 Visual FoxPro 帮助系统，并且显示相应的帮助主题（如果 HelpContextID 可用的话）；如果选择了“否”，则不将 HelpContextID 传递给 Visual FoxPro 帮助系统，也就不会显示相应的帮助主题。

用 SYS(1024) 终止诊断帮助模式，并且恢复默认的 Visual FoxPro 帮助系统处理方式。


请参阅

HELP，HelpContextID 属性，SET HELP，SYS(1024) - 终止诊断帮助模式


SYS(1024) - 终止诊断帮助模式

请参阅

终止 SYS(1023) 所启用的诊断帮助模式。

语法

SYS(1024)

返回值类型

字符型

说明

使用 SYS(1024) 可以终止 SYS(1023) 启用的诊断帮助模式，并且还原成默认的 Visual FoxPro 帮助系统处理方式。SYS(1023) 可用来调试应用程序的自定义帮助系统。

SYS(1024) 返回空字符串。


请参阅

HELP，HelpContextID 属性，SET HELP，SYS(1023) - 启用诊断帮助模式


SYS(1037) - 页面设置对话框

请参阅

显示页面设置对话框。

语法

SYS(1037)

返回值类型

字符型

说明

仅用于 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。在 FoxPro for MS-DOS 中，忽略 SYS(1037)。

SYS(1037) 显示“页面设置”对话框，允许用户调整打印机设置（诸如打印纸张大小和走纸方向）。在该对话框中可以调整的设置依赖于所安装的打印机。

SYS(1037) 总是返回空串。


请参阅

GETPRINTER( )，PRINTSTATUS( )，SET DEVICE，SET PRINTER


SYS(1269) - 属性信息

请参阅

返回一个逻辑值，该值代表属性的默认值是否更改或属性是否为只读。

语法

SYS(1269, oObjectName, cProperty, nPropertyAttribute)

返回值类型

逻辑值

参数

oObjectName

指定一个对象，其属性信息被返回。

cProperty

指定一个属性，SYS(1269) 返回其信息。

nPropertyAttribute

指定属性状态。

当 nPropertyAttribute 是 0 时，若属性默认值被更改，则 SYS(1269) 返回“真”(.T.)；否则，返回“假”(.F.)。

当 nPropertyAttribute 是 1 时，若属性是只读的，则 SYS(1269) 返回“真”(.T.)；若属性是读写的，返回“假”(.F.)。

说明

程序中在设置属性之前，SYS(1269) 确定是否属性默认值已被更改，或者属性是否为只读。


请参阅

CREATE FORM，GETPEM( )，PEMSTATUS( )，SYS(1270) - 对象位置，SYS(1271) - 对象的 .SCX 文件，SYS(1272) - 对象层次


SYS(1270) - 对象位置

请参阅

返回对指定位置对象的引用。

语法

SYS(1270 [, nXCoord, nYCoord])

返回值类型

对象型，逻辑型

参数

nXCoord

指定水平坐标。

nYCoord

指定垂直坐标。

说明

如果省略坐标 nXCoord 和 nYCoord，将返回对当前鼠标指针下对象的引用；如果包含坐标 nXCoord 和 nYCoord，将返回对指定位置对象的引用。

如果在当前鼠标指针下没有对象，或者在 nXCoord 和 nYCoord 指定的位置没有对象，则返回“假”(.F.)。


请参阅

CREATE FORM，GETPEM( )，PEMSTATUS( )，SYS(1269) - 属性信息，SYS(1271) - 对象的 .SCX 文件，SYS(1272) - 对象层次


SYS(1271) - 对象的 .SCX 文件

请参阅

返回 .SCX 文件名，该文件存储指定的实例对象。

语法

SYS(1271, oObjectName)

返回值类型

字符型，逻辑型

参数

oObjectName

指定对象名，此函数将返回存储它的 .SCX 文件名。

说明

SYS(1271) 返回 .SCX 文件名，该文件存储指定实例对象。

如果在 .SCX 文件中找不到指定的对象，则 SYS(1271) 返回逻辑值“假”（.F.）例如，在命令窗口中创建对象。


请参阅

CREATE FORM，GETPEM( )，PEMSTATUS( )，SYS(1269) - 属性信息，SYS(1270) - 对象位置，SYS(1272) - 对象层次


SYS(1272) - 对象层次

请参阅

返回指定对象的对象层次。

语法

SYS(1272, oObjectName)

返回值类型

字符型

参数

oObjectName

指定对象名，并返回该对象的层次。

说明

在设计时不可用。


请参阅

CREATE FORM，GETPEM( )，PEMSTATUS( )，SYS(1269) - 属性信息，SYS(1270) - 对象位置，SYS(1271) - 对象的 .SCX 文件


SYS(2000) - 文件名通配符匹配

请参阅	示例

返回与文件名梗概匹配的第一个文件名。

语法

SYS(2000, Skeleton [, 1])

返回值类型

字符型

说明

如果找不到匹配文件，SYS(2000) 返回空串。

Skeleton

指定文件名梗概。文件名梗概可以包含通配符“?”和“*”。

1

返回下一个匹配文件的文件名。


? SYS(2000,'FOX.*')

? SYS(2000,'FOX.*',1)


请参阅

LOCFILE( )，SYS( ) 函数概述


SYS(2001) - SET ... 命令状态

请参阅	示例

返回指定的 SET 命令的状态。

语法

SYS(2001, cSETCommand [, 1 | 2])

返回值类型

字符型

参数

cSETCommand

指定 SET 命令，SYS(2001) 返回该 SET 命令的状态。

1 | 2

一些 SET 命令有两个或两个以上的设置。例如，SET PRINTER ON，SET PRINTER OFF 和 SET PRINTER TO FileName。不带 1 或 2 参数使 SYS(2001 )返回 ON 或 OFF 设置，带 1 或 2 参数使 SYS(2001) 返回这些命令的附加的设置。请参阅 SET( ) 函数中的 SET 命令列表。

说明

SYS(2001) 等同于 SET( ) 函数。


? SYS(2001,'PRINTER')

? SYS(2001,'PRINTER',1)


请参阅

SET( )，SYS( ) 函数概述


SYS(2002) - 打开或关闭插入点

请参阅

打开或关闭插入点。

语法

SYS(2002 [, 1])

返回值类型

无

说明

SYS(2002) 关闭插入点，SYS(2002，1) 打开插入点。有关打开或关闭插入点的详细内容，请参阅 SET CURSOR。


请参阅

INKEY( )，SET CURSOR，SYS( ) 函数概述


SYS(2003) - 当前目录或文件夹

请参阅

返回默认驱动器或卷上的当前目录或文件夹的名称。

语法

SYS(2003)

返回值类型

字符型

说明

可以使用 SYS(5) 来确认当前驱动器或卷。

在 FoxPro for Macintosh 中，SYS(2003) 返回的文件夹名称使用 MS-DOS 路径速记符号。在 FoxPro for Macintosh 中支持 MS-DOS 路径速记符号，这是为了提供和在其他 FoxPro 平台上创建的应用程序的兼容性。有关 MS-DOS 和 Macintosh 路径速记符号的详细内容，请参阅 SET PATH。

使用 SYS(2027) 可以将包含 MS-DOS 路径速记符号的文件夹或路径转换成使用 Macintosh 路径速记符号的文件夹或路径。


请参阅

CURDIR( )，SET DEFAULT，SET PATH，SYS( ) 函数概述，SYS(5) - 默认驱动器，SYS(2027) - 平台—特殊路径转换


SYS(2004) - Visual FoxPro 启动目录或文件夹

请参阅	示例

返回启动 Visual FoxPro 的目录或文件夹名称。

语法

SYS(2004)

返回值类型

字符型

说明

在 FoxPro for macintosh 中，SYS(2004) 返回的文件夹名称使用 MS-DOS 速记符号。在 FoxPro for Macintosh 中支持 MS-DOS 路径速记符号，这是为了提供和在其他 FoxPro 平台上创建的应用程序的兼容性。有关 MS-DOS 和 Macintosh 路径速记符号的详细内容，请参阅 SET PATH。

使用 SYS(2027) 可以将包含 MS-DOS 路径速记符号的文件夹或路径转换成使用 Macintosh 路径速记符号的文件夹或路径。

在分布式运行时，SYS(2004) 返回 ESL 文件的位置，该文件是使用 Visual FoxPro 专业级版本创建的 Visual FoxPro 应用程序。


IF _MAC

? 'Visual FoxPro launch folder: ', SYS(2004)

ELSE

? 'Visual FoxPro launch directory: ', SYS(2004)

ENDIF


请参阅

HOME( )，SET PATH，SYS( ) 函数概述，SYS(2027) - 平台—特殊路径转换


SYS(2005) - 当前资源文件

请参阅	示例

返回当前 Visual FoxPro 资源文件的名称。

语法

SYS(2005)

返回值类型

字符型

说明

Visual FoxPro 资源文件是一个包含有关系统和用户自定义资源信息的 Visual FoxPro 表，这些信息包括键盘宏、参数选择、系统窗口的位置和大小、日记输入等等。

Visual FoxPro 资源文件默认名是 FOXUSER.DBR，可使用 SET RESOURCE 命令指定一个不同的 Visual FoxPro 资源文件。


? 'Current resource file: ', SYS(2005)


请参阅

SET RESOURCE，SYS( ) 函数概述


SYS(2006) - 当前图形适配卡

请参阅	示例

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，返回所使用的图形适配卡和显示器的类型。

在 FoxPro for Macintosh 中，返回图形支持的类型（例如，32 位的彩色 Quick Draw）。

语法

SYS(2006)

返回值类型

字符型


? 'Current graphics card/monitor: ', SYS(2006)


请参阅

ISCOLOR( )，SET DISPLAY，SYS( ) 函数概述


SYS(2007) - 检查求和值

请参阅

返回一个字符表达式的检查求和值。

语法

SYS(2007, cExpression)

返回值类型

字符型

说明

一个检查求和值可用来测试数据的合法性或比较两个字符串。

cExpression

指定字符表达式，SYS(2007) 返回该表达式的检查求和值。


请参阅

SET RESOURCE, SYS( ) 函数概述


SYS(2008) - 插入点形状

请参阅	示例

指定插入方式和改写方式的插入点形状。

语法

SYS(2008 [, cInsertionPoint [, nShape]])

返回值类型

无

参数

cInsertionPoint

指定要改变的插入点形状。字母“I”改变插入方式下的插入点，字母“O”改变改写方式下的插入点。

nShape

指定插入点形状。“0”代表下划线，“1”代表实心块光标，“2”代表半高的实心块光标。

如果省略 nShape 参数而包含 cInsertionPoint 参数，插入方式和改写方式的插入点重置成默认的设置。

说明

仅用于 FoxPro for MS-DOS。在 Visual FoxPro，FoxPro for Windows 和 foxPro for Macintosh 中，忽略 SYS(2008)。

插入方式下，插入点的默认设置是下划线；改写方式下，插入点的默认设置是实心块。


*下面的示例只运行在 FoxPro for MS-DOS 中。

* 在第一个示例中，插入方式下的插入点设置成半高的实心块光标；
* 在第二个示例中，插入方式下的插入点设置成其默认形状下划线；
* 在第三个示例中，插入方式和改写方式下的插入点都重置成
* 它们的默认值。

=SYS(2008, 'I', 2)

=SYS(2008, 'I')

=SYS(2008)


请参阅

INSMODE( ), SET CURSOR, SYS( ) 函数概述, SYS(2009) - 切换插入点形状


SYS(2009) - 切换插入点形状

请参阅

切换插入方式和改写方式插入点的形状。

语法

SYS(2009)

返回值类型

无

说明

仅用于 FoxPro for MS-DOS。在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，忽略 SYS(2009)。

例如，如果插入方式下的插入点是实心块，而改写方式下的插入点是下划线，发出 SYS(2009 ) 能将插入方式下的插入点变为下划线，将改写方式下的插入点变成实心块。

插入方式下和改写方式下的插入点形状可用 SYS(2008) 设置。


请参阅

INSMODE( ), SYS(2008) - 插入点形状


SYS(2010) - CONFIG.SYS 文件设置

请参阅

返回 CONFIG.SYS 文件中的设置。

语法

SYS(2010)

返回值类型

字符型

说明

在 FoxPro for MS-DOS 中，SYS(2010) 将 CONFIG.SYS 配置文件中的文件设置项作为字符串返回。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，SYS(2010) 总是返回 255。

大多数的 CONFIG.SYS 文件都包含一行语句，指定在 MS-DOS 下可同时打开的最大文件数目。这一行通常为 FILES=NNN，这里 NNN 是一个数，SYS(2010) 返回这个数。

CONFIG.SYS 配置文件中可以没有文件设置项，也可以没有 CONFIG.SYS 文件，对以上两种情况，SYS(2010) 返回默认的 MS-DOS 文件设置值。

SYS(2010) 返回的数目并不是用户在 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 中可以打开的文件数目。MS-DOS 为了满足自身的使用而打开文件，Visual FoxPro 和 FoxPro for Windows 也为其自己内部的使用而打开文件，这些打开文件的数目可能在 FoxPro 的工作期内变化。在 CONFIG.SYS 文件中，文件配置必须略大于要在 Visual FoxPro 中打开的文件数目。

有关 CONFIG.SYS 配置文件的详细内容，请参阅 MS-DOS 用户手册。


请参阅

SYS( ) 函数概述


SYS(2011) - 当前锁定状态

请参阅

返回当前工作区中记录锁定或表锁定的状态。

语法

SYS(2011)

返回值类型

字符型

说明

与 FLOCK( )，LOCK( ) 和 RLOCK( ) 函数不同的是，SYS(2011) 不会试图锁定表或记录。

SYS(2011) 返回的字符串与状态栏中显示的信息（“独占”，“记录未锁定”，“记录锁定”…）相同。

只有在以独占方式打开表的工作站上，SYS(2011) 才返回“独占”；在使用记录锁的工作站上，SYS(2011) 返回“记录锁定”。


请参阅

FLOCK( ), LOCK( ), RLOCK( ), SYS( ) 函数概述


SYS(2012) - 备注字段块大小

请参阅

返回表的备注字段块大小。

语法

SYS(2012 [, nWorkArea | cTableAlias])

返回值类型

字符型

参数

nWorkArea | cTableAlias

指定表的工作区编号或表的别名，SYS(2012) 返回该表的备注字段块大小。nWorkArea 指定工作区编号，cTableAlias 指定表的别名。如果不指定工作区或别名，SYS(2012) 返回在当前所选工作区中打开的表的备注字段块大小。

如果在指定的工作区中没有打开表或表没有备注字段，那么 SYS(2012) 返回 0。

说明

关于指定表备注字段块大小的详细内容，请参阅 SET BLOCKSIZE。


请参阅

SET BLOCKSIZE


SYS(2013) - 系统菜单名称字符串

请参阅

返回以空格分隔的字符串，该字符串包含 Visual FoxPro 菜单系统的内部名称。

语法

SYS(2013)

返回值类型

字符型

说明

SYS(2013) 方便了使用 Visual FoxPro 系统菜单栏和系统菜单的工作。所返回的字符串包含系统菜单栏的名称、菜单标题和菜单内每项的名称。

SYS(2013) 可以返回所有 FoxPro 平台的菜单标题名称和菜单项名称。对于特殊的 FoxPro 平台的菜单标题和菜单项列表，请参阅系统菜单名称。


请参阅

DEFINE BAR, DEFINE MENU, DEFINE POPUP, SYS( ) 函数概述, 系统菜单名称


SYS(2014) - 最小化路径

请参阅

返回指定文件相对于当前目录、指定目录或文件夹的最小化路径。

语法

SYS(2014, cFileName [, Path])

返回值类型

字符型

参数

cFileName

指定文件名，SYS(2014) 返回该文件的最小化路径。如果省略 Path 参数，则 SYS(2014) 返回该文件与当前目录或文件夹之间的最小路径。可以使用 SET DEFAULT 改变当前目录或文件夹。

Path

指定一个目录或文件夹，SYS(2014) 返回该指定目录或文件夹与 cFileName 指定的文件之间的最小化路径。

说明

SYS(2014) 和 FULL PATH( ) 一起使用，使应用程序成为便携式。也就是说，当给定当前程序的位置和该程序所使用的其他文件位置之后，FULLPATH( ) 和 SYS(2014) 就可获得这些文件的正确路径。一旦文件的路径确定了，应用程序就可以访问这些文件。

在 FoxPro for Macintosh 中，SYS(2014) 返回的路径使用 MS-DOS 速记符号。在 FoxPro for Macintosh 中支持 MS-DOS 速记符号，提供与其他 FoxPro 平台上创建的应用程序的兼容性。有关 MS-DOS 和 Macintosh 路径速记符号的详细内容，请参见 SET PATH。

使用 SYS(2027) 可将包含 MS-DOS 路径速记符号的文件夹或路径转换成使用 Macintosh 路径速记符号的文件夹或路径。


请参阅

FULLPATH( ), SET DEFAULT, SET PATH, SYS( ) 函数概述


SYS(2015) - 唯一的过程名

请参阅

返回一个 10 个字符的唯一过程名，该过程名以下划线开头，后接字母和数字的组合。

语法

SYS(2015)

返回值类型

字符型

说明

SYS(2015) 可用于创建唯一的过程名或函数名。

SYS(2015) 返回的名称以系统日期和系统时间来创建。在同一个毫秒间隔中多次调用 SYS(2015) 将返回唯一的字符串。


请参阅

SYS( ) 函数概述, SYS(3) - 合法的文件名


SYS(2016) - 返回 SHOW GETS WINDOW 中的窗口名称

请参阅

返回最近的 SHOW GETS WINDOW 命令中的窗口名称。包含该函数是为了提供向后兼容性。可用 Refresh 方法来代替。

语法

SYS(2016)

返回值类型

字符型

说明

SHOW GETS 支持可选的 WINDOW 子句，该子句可以在指定的窗口中刷新控制（文本框、复选框等）。

如果发出不带 WINDOW 子句的 SHOW GETS 命令（刷新所有窗口中的全部控制），SYS(2016) 返回一个星号 (*)，使用 SHOW GETS WINDOW "" 只刷新在 Visual FoxPro 主窗口中的控制。当刷新 Visual FoxPro 主窗口中的控制时，SYS(2016) 返回一个空串。

在一个 READ SHOW 例程中，SYS(2016) 只返回一个数值。


请参阅

Refresh 方法, SHOW GETS, SYS( ) 函数概述


SYS(2017) - 显示启动屏幕

请参阅

在 FoxPro 的早期版本中，该函数清除 FoxPro 主窗口，并显示 FoxPro 启动屏幕。包含该函数是为了提供向后兼容性。

语法

SYS(2017)

返回值类型

字符型

说明

在 Visual FoxPro 中，忽略 SYS(2017)。

启动屏幕显示您的 FoxPro 系列号和版本号。下面的命令将显示启动屏幕：

=SYS(2017)

? SYS(2017)


请参阅

SYS( ) 函数概述


SYS(2018) - 错误信息参数

请参阅

返回最近错误的错误信息参数。

语法

SYS(2018)

返回值类型

字符型

说明

某错误信息返回关于错误原因的附加内容。例如，如果引用一个不存在的内存变量，该内存变量的名称就包含在错误信息中，SYS(2018) 返回这一称作错误信息参数的附加内容。内存变量名和文件名是错误信息参数的一般类型。

假设要运行一个名为 REPORTS 的程序，但是该程序并不存在，那么错误信息的文本显示为：

REPORTS 文件不存在。

REPORTS 就是错误信息参数，它可由 SYS(2018) 返回。

? SYS(2018)


请参阅

ERROR( ), MESSAGE( ), ON ERROR, SYS( ) 函数概述


SYS(2019) - 配置文件的名称和位置

请参阅

返回 Visual FoxPro 配置文件的文件名和位置。

语法

SYS(2019)

返回值类型

字符型

说明

在 Visual FoxPro 和 FoxPro for Windows 中，配置文件为 CONFIG.FPW；在 FoxPro for MS-DOS 中，配置文件为 CONFIG.FP；在 FoxPro for Macintosh 中，配置文件为 CONFIG.FPM。

如果不能定位配置文件，SYS(2019) 返回一个空串。

Visual FoxPro 配置文件一般位于 Visual FoxPro 启动的目录中，但是也可以放到别的地方。Visual FoxPro 首先在启动目录中寻找该文件。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 中，如果配置文件不在启动目录中，则接着搜索 MS-DOS 的路径。

有两种方法可以告诉 FoxPro 配置文件的位置及其名称。

 •	   在 Visual FoxPro 和 FoxPro for Windows 中，可以用 MS-DOS 的 SET 命令创建一个名为 FOXPROWCFG 的 MS-DOS 环境变量，然后将配置文件的位置和文件名存入 FOXPROWCFG 中。在 FoxPro for MS-DOS 中，MS-DOS 环境变量名为 FOXPROCFG。

 •	   也可在启动 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 时，使用- -C 开关来指定一个配置文件。在 -C 后立即加上配置文件的位置及文件名。

关于 Visual FoxPro 配置文件的详细内容，请参阅《安装指南》的第三章“配置 Visual FoxPro”。


请参阅

SYS( ) 函数概述


SYS(2020) - 默认磁盘空间

请参阅

以字节数返回默认磁盘空间。

语法

SYS(2020)

返回值类型

字符型

说明

可以用 SET DEFAULT 命令指定默认磁盘。


请参阅

DISKSPACE( )，SET DEFAULT，SYS( ) 函数概述


SYS(2021) - 已筛选的索引表达式

请参阅

返回打开的单项索引文件 (.IDX) 的筛选表达式或复合索引文件 (.CDX) 中标识的筛选表达式。

语法

SYS(2021, nIndexNumber [, nWorkArea | cTableAlias])

返回值类型

字符型

参数

nIndexNumber

数值表达式 nIndexNumber 指定从打开的索引文件中返回哪一个筛选表达式。当 nIndexNumber 从 1 增加到打开的单项索引文件、结构复合索引以及独立的复合索引标识的总数时，SYS(2021) 以下面的顺序从打开的索引文件中返回筛选表达式：

1.	最先从单项索引文件中（如果打开）返回筛选表达式。包含在 USE 或 SET INDEX 命令中单项索引文件的顺序决定返回筛选表达式的顺序。

2.	其次返回在结构复合索引文件（如果存在）中每个标识的筛选表达式。筛选表达式以结构复合索引中标识的创建顺序从标识中返回。

3.	最后返回在任何独立的复合索引文件中每个标识的筛选表达式。筛选表达式以独立的复合索引中标识的创建顺序从标识中返回。

如果 nIndexNumber 大于打开的单项索引文件、结构索引文件标识以及独立的复合索引文件标识的总数时，返回一个空串。

nWorkArea

为另一个工作区中打开的表指定工作区编号。

cTableAlias

为另一个工作区中打开的表指定一个别名。如果表没有指定的别名，Visual FoxPro 将显示一条错误信息。

说明

可以在 Visual FoxPro 中创建已筛选的索引。如果在 INDEX 中包含可选的 FOR 子句，那么索引文件作为一个筛选条件作用在表上。在 FOR 子句只有满足筛选表达式 lexpression 的记录可以显示和访问。在索引文件中，为那些满足筛选表达式的记录创建索引关键字。

如果没有用 FOR 子句创建索引或索引标识，则返回一个空串。

USE 和 SET INDEX 命令都支持索引文件名列表，该列表可以为一个表打开多个索引文件。在索引文件名列表中可以包含任何单项索引文件名、结构复合索引文件和独立的复合索引文件名的组合。

除非指定特殊的工作区或别名，否则 SYS(2021) 从在当前工作区中打开的索引文件中返回筛选表达式。


请参阅

CDX( )，KEY( )，INDEX，MDX( )，NDX( )，REINDEX，SET INDEX，SET ORDER，SYS( ) 函数概述，TAG( )


SYS(2022) - 磁盘簇（块）大小

请参阅

以字节为单位返回指定磁盘簇（块）的大小。

语法

SYS(2022 [, cDriveLetter])

返回值类型

字符型

参数

cDriveLetter

指定磁盘驱动器字母 (A，B，C…)，而不是当前默认磁盘。

说明

在 FoxPro for Macintosh 中，簇称为块。


请参阅

SET DEFAULT，SYS( ) 函数概述


SYS(2023) - 临时文件驱动器

请参阅

返回 Visual FoxPro 存贮临时文件的驱动器和目录。

语法

SYS(2023)

返回值类型

字符型

说明

可以在 Visual FoxPro 配置文件中包含特殊的 TMPFILES 配置项，指定存贮临时文件的驱动器和目录。

有关特殊的 TMPFILES 配置项的更多内容，请参阅《安装指南》的第三章“配置 Visual FoxPro”。


请参阅

SYS( ) 函数概述


SYS(2027) - 平台—特殊路径转换

请参阅

返回具有 Macintosh 路径符号的 MS-DOS 路径。

语法

SYS(2027, cPath)

返回值类型

字符型

说明

在 FoxPro for Macintosh 中，象 CURDIR( ) 和 DBF( ) 这些返回路径的函数使用 MS-DOS 路径符号保持与 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 的兼容性。可以将 SYS(2027) 与这些函数一起使用，返回使用 Macintosh 路径符号的结果。

关于平台 — 特殊路径符号的详细内容，请参阅 SET PATH。

cPath

指定路径，SYS(2027) 将该路径转换成具有 Macintosh 路径符号的路径并返回。

? CURDIR( )

? SYS(2027,CURDIR( ))


请参阅

SET PATH，SET VOLUME


SYS(2029) - 表类型

请参阅	示例

返回与表类型对应的值。

语法

SYS(2029 [, nWorkArea | cTableAlias])

参数

nWorkArea

指定打开表的工作区。

cTableAlias

指定表的别名。如果省略 nWorkArea 和 cTableAlias 参数，SYS(2029) 将返回在当前工作区中打开表的类型值。

返回值类型

字符型

说明

下表列出了 SYS(2029) 的返回值及其对应的表类型。

返回值	表类型
0	没有表打开
3	早期的 FoxPro，FoxBASE+，dBASEⅢ PLUS 和 dBASE IV 版本，没有备注字段。
48	有或没有备注字段的 Visual FoxPro 表
67	没有备注字段的 dBASE IV SQL 表
99	具有备注字段的 dBASE IV 系统表
131	具有备注字段的 FoxBASE+ 和 dBASEⅢPLUS 表
139	具有备注字段的 dBASE IV  表
203	具有备注字段的 dBASE IV SQL 表
245	具有备注字段的早期 FoxPro 版本


*下面的示例打开 testdata 数据库中的 testdata 表。

CLOSE DATABASES

OPEN DATABASE (SYS(2004) + 'samples\data\testdata')

USE Customer	  && 打开“customer”表

CLEAR

DO CASE

CASE SYS(2029) = '3'

? 'Previous versions of FoxPro'

CASE SYS(2029) = '48'

? 'Visual FoxPro Table'

CASE SYS(2029) = '67'

? 'dBASE IV SQL table, no memo fields'

CASE SYS(2029) = '99'

? 'dBASE IV SQL System table with a memo field'

CASE SYS(2029) = '131'

? 'FoxBASE+ table with a memo field'

CASE SYS(2029) = '139'

? 'dBASE IV table with a memo field'

CASE SYS(2029) = '203'

? 'dBASE IV SQL table with a memo field'

CASE SYS(2029) = '245'

? 'Previous versions of FoxPro with a memo field'

ENDCASE


请参阅

ALTER TABLE - SQL，CREATE，CREATE TABLE - SQL，USE


SYS(3004) - 返回环境 ID 值

请参阅

返回 OLE 自动化和 OLE 控制使用的环境 ID 值。

语法

SYS(3004)

返回值类型

字符型

说明

SYS(3004) 返回当前 Visual FoxPro 的环境 ID 值 (LCID)，该环境 ID 值由 Visual FoxPro 语言 ID 值 (LangID) 和排序 ID 值决定。

环境 ID 值决定 OLE 自动化和 OLE 控制交换信息时所用的语言。默认的 Visual FoxPro 环境 ID 值是 1033 — 使用英语。

例如，假设已经安装了 Microsoft Excel 5.0 的德语版本，该版本支持英语和德语。在这样的情况下，下面的示例可以启动和关闭 Microsoft Excel 5.0 的德语版本。

oleExcel1 = CREATEOBJECT('Excel.Application')  && 启动 Excel

? SYS(3005, 1033)  && 英语环境 ID 值

oleExcel.Quit  && 用英语命令关闭 Excel

oleExcel2 = CREATEOBJECT('Excel.Application')  && 启动 xcel

? SYS(3005, 1031)  && 德国环境 ID 值

oleExcel.Beenden  && 用德语命令关闭 Excel

关于 Visual FoxPro 环境 ID 值的列表，请参阅 SYS(3005) - 设置环境 ID 值。关于地区、语言和排序 ID 值的附加内容，请参阅《Microsoft Windows Software Development Kit》。


请参阅

DefOLELCID 属性，OLELCID 属性，SYS(3005) - 设置环境 ID 值，SYS(3006) - 设置语言和环境 ID 值


SYS(3005) - 设置环境 ID 值

请参阅

设置 OLE 自动化和 OLE 控制使用的环境 ID 值。

语法

SYS(3005, nLocaleID)

参数

nLocaleID

指定环境 ID 值，下表包含了 Visual FoxPro 支持的环境 ID 值：

nLocaleID	语言
1029	捷克语
1031	德语
1033	英语（默认）
1034	西班牙语
1036	法语
1040	意大利语
1045	波兰语
1046	葡萄牙语（巴西）
2070	葡萄牙语（标准）
返回值类型

字符型

说明

SYS(3005) 设置全球的环境 ID 值。环境 ID 值决定 OLE 自动化和 OLE 控制交换信息时所使用的语言。默认的 Visual FoxPro 环境 ID 值是 1033 — 使用英语。

附注  设置表单或 Visual FoxPro 主窗口的环境 ID 值最适当的方法是使用 DefOLELCID 属性。OLE 自动化命令语言仅受由 SYS(3005) 设置的全球环境 ID 值的影响。DefOLELCID 属性和 OLELCID 属性仅影响显示 OLE 控制的用户接口语言，而不是OLE 自动化命令语言。

例如，假设已经安装了 Microsoft Excel 5.0 的德语版本（该版本支持英语和德语），在这样的情况下，下面的示例可以启动和关闭 Microsoft Excel 5.0 的德语版本。

oleExcel1 = CREATEOBJECT('Excel.Application')  && 启动 Excel

? SYS(3005, 1033)  && 英国环境 ID 值

oleExcel.Quit  && 用英语命令关闭 Excel

oleExcel2 = CREATEOBJECT('Excel.Application')  && 启动 Excel

? SYS(3005, 1031)  &&  德国环境 ID 值

oleExcel.Beenden  && 用德语命令关闭 Excel

关于环境 ID 值附加内容，请参阅《Microsoft Windows Software Development Kit》。


请参阅

DefOLELCID 属性，OLELCID 属性，SYS(3004) - 返回环境 ID 值，SYS(3006) - 设置语言和环境 ID 值


SYS(3006) - 设置语言和环境 ID 值

请参阅

设置语言 ID 值和环境 ID 值。

语法

SYS(3006, nLanguageID)

参数

nLanguageID

指定语言 ID 值。

返回值类型

字符型

说明

SYS(3006) 设置 Visual FoxPro 语言 ID 值 (LangID)，在语言 ID 值和当前排序 ID 值的基础上设置环境 ID 值。

附注  设置表单或 Visual FoxPro 主窗口的环境 ID 值最适当的方法是使用 DefOLELCID 属性。

关于语言，地区和排序标识的附加内容，请参阅《Microsoft Windows Software Development Kit》。


请参阅

DefOLELCID 属性，OLELCID 属性，SYS(3004) - 返回环境 ID 值，SYS(3005) - 设置环境 ID 值


SYS(3050) - 设置缓冲内存大小

请参阅

设置前台或后台缓冲内存大小。

语法

SYS(3050, nType, [nBuffMemSize])

参数

nType

指定缓冲区，下表列出了 nType 的值及其对应的缓冲区。

nType	缓冲区
1	前台缓冲区
2	后台缓冲区
nBuffMemSize

指定以字节计算的最大缓冲内存的大小。如果指定了一个小于 256 K 字节的 nBuffMemSize 值，Visual FoxPro 将设置缓冲内存大小为 256 K 字节。

将 nBuffMemSize 设为 0，可以把缓冲内存大小重置为 Visual FoxPro 启动时的数值，该数值依赖于所用的计算机内存的大小。如果省略 nBuffMemSize 参数，SYS(3050) 返回用 nType 指定缓冲区的缓冲内存大小。

返回值类型

字符型

说明

通过调整 Visual FoxPro 分配给前台和后台缓冲区的内存大小，SYS(3050) 可以优化 Visual ToxPro 的性能。前台内存缓冲区是当 Visual FoxPro 在前台执行当前活动应用程序时的可用内存，后台内存缓冲区是 Visual FoxPro 在后台执行另一个后台应用程序时的可用内存。

SYS(3050) 将一个数值作为字符串返回，该字符串表示 Visual FoxPro 分配给前台或后台缓冲区的最大内存。在 FoxPro for Windows 和 FoxPro for Macintosh 中，MEMLIMIT 配置项指定分配给其使用的最大内存。在 Visual FoxPro 中忽略 MEMLIMIT。


请参阅

SYS(1001) - Visual FoxPro 内存


SYS(3051) - 设置锁定重试间隔

请参阅

指定在一次锁定尝试失败之后，再次尝试锁定记录表、备注或索引文件之前，Visual FoxPro 等待的毫秒时间值。

语法

SYS(3051, [nWaitMilliseconds])

参数

nWaitMilliseconds

指定以毫秒为单位的等待时间，可以是一个从 100 到 1000 毫秒之间的值。

指定 nWaitMilliseconds 为 0，可以返回 Visual FoxPro 启动时默认的锁定尝试时间间隔数值（333毫秒）。如果省略了 nWaitMilliseconds 参数，SYS(3051) 返回当前的锁定尝试时间间隔。

返回值类型

字符型

说明

SYS(3051) 将一个数值作为字符串返回，该字符串表示锁定尝试时间间隔。


请参阅

SET REPROCESS，SYS(3052) - 忽略 SET REPROCESS 锁定


SYS(3052) - 忽略 SET REPROCESS 锁定

请参阅

指定当尝试锁定一个索引或备注文件时，Visual FoxPro 是否使用 SET REPROCESS 设置。

语法

SYS(3052, nFileType, [lHonorReprocess])

参数

nFileType

指定文件类型，下表列出了 nType 的值及其对应的文件类型：

nFileType	文件类型
1	索引文件
2	备注文件
lHonorReprocess

指定当对索引或备注文件的锁定尝试失败时，Visual FoxPro 是否使用 SET REPROCESS 设置。

当 Visual FoxPro 尝试锁定用 nFileType 指定的文件时，指定 lHonorReprocess 为“真”(.T.)，将使用 SET REPROCESS 设置；指定 lHonorReprocess为“假”(.F.)（默认值），将忽略 SET REPROCESS 设置。当设置为假时，Visual FoxPro 将无限期等待锁定指定文件，这和 FoxPro 早期版本中的锁定操作相同。

如果省略了 lHonorReprocess 参数，SYS(3052) 返回用 nFileType 指定的文件类型的当前设置。

返回值类型

字符型

说明

在 Visual FoxPro 时，SYS(3052) 提供文件锁定上的附加控制。如果您的应用程序使用事务处理，那么最好将 lHonorReprocess 设置为“真”(.T.)，以减少文件锁定冲突的危险。

SYS(3052) 将数值 0 — “假”(.F.) 或 1 — “真”(.T.)作为一个字符串返回。如果 SYS(3052) 中包含 lHonorReprocess 参数，返回值与 lHonorReprocess 指定的逻辑值相同。如果省略了 lHonorReprocess 参数，返回值是用 nType 指定的文件类型的当前设置。


请参阅

SET REPROCESS，SYS(3051) - 设置锁定重试间隔


SYS(3053) - ODBC 环境句柄

请参阅

返回 ODBC 环境句柄。

语法

SYS(3053)

返回值类型

字符型

说明

如果没有加载 ODBC，SYS(3053) 就加载 ODBC 并返回 ODBC 环境句柄。

SYS(3053) 返回的环境句柄通过调用 ODBC API 提供对 ODBC 的访问。在 Visual FoxPro 中，通过 DECLARE.DLL 和在 Visual FoxPro 专业版中创建的外部 Visual FoxPro API 库例程可以访问 ODBC API。

注意，某一时刻只能使用一个 ODBC 环境句柄，所以使用 ODBC 调用的 Visual FoxPro 应用程序应该使用 SYS(3053) 获得 ODBC 环境句柄，而不是通过 ODBC API 调用来再分配或释放 ODBC 环境句柄。操作 ODBC 环境句柄时应当谨慎。关于 ODBC API 的更深入的内容，请参阅 Microsoft ODBC SDK 文档。


请参阅

DECLARE - DLL，SET LIBRARY


SYSMETRIC( ) 函数

请参阅

返回操作系统屏幕元素的大小。

语法

SYSMETRIC(nScreenElement)

参数

nScreenElement

指定屏幕元素。下表显示了 nScreenElement 的值及其对应的屏幕元素：

nScreenElement	屏幕元素
1	屏幕宽度
2	屏幕高度，Macintosh 屏幕高度不包括菜单栏的高度。
3	可调整窗口的边框宽度
4	可调整窗口的边框高度
5	垂直滚动栏上滚动箭头的宽度
6	垂直滚动栏上滚动箭头的高度
7	水平滚动栏上滚动箭头的宽度
8	水平滚动栏上滚动箭头的高度
9	窗口标题的高度
10	不可调整的窗口边框的宽度
11	不可调整的窗口边框的高度
12	DOUBLE 或 PANEL 窗口边框的宽度
13	DOUBLE 或 PANEL 窗口边框的高度
14	文本编辑窗口中水平滚动栏上滚动框的宽度
15	文本编辑窗口中水平滚动栏上滚动框的高度
16	最小化窗口图标的宽度*
17	最小化窗口图标的高度*
18	最大化插入点宽度
19	最大化插入点高度
20	单线菜单栏高度
21	最大化窗口宽度
22	最大化窗口高度
23	"Kanji" 窗口高度
24	最小化可调整窗口的宽度
25	最小化可调整窗口的高度
26	最小化窗口宽度
27	最小化窗口高度
28	窗口控制的宽度
29	窗口控制的高度
30	如果有鼠标，为 1；否则为 0。FoxPro for Macintosh 总返回 1。
31	对于Microsofte Windows 测试版本为 1，否则为 0*
32	如果交换鼠标按钮，为 1；否则为 0*
* 这些屏幕元素不适用于 FoxPro for Macintosh，并且总返回 0。
返回值类型

数值型

说明

仅用于 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh。

SYSMETRI( ) 返回屏幕元素的大小。屏幕元素包括菜单、窗口、窗口控制和插入点。除非另行注明，否则以象素为单位返回一个数值。该返回值可能随不同的显示器、显示驱动程序和视频硬件而变化。有关 Microsoft Windows 屏幕元素更深入的内容，请参阅《Microsoft Windows 程序员参考》中的 GetSystemMetrics 函数。

SYSMETRIC( ) 在 Visual FoxPro 和 FoxPro for Macintosh 中，可以确定创建的菜单、窗口和窗口控制的大小。用 DEFINE WINDOWS 和 DEFINE MENU 创建的窗口、菜单使用与操作系统的窗口、菜单相同的屏幕元素尺寸。


请参阅

FONTMETRIC( )，GETFONT( )，TXTWIDTH( )，WFONT( )


系统内存变量概述

请参阅

系统内存变量是 Visual FoxPro 自动创建并维护的内置内存变量。默认情况下，它们的属性是 PUBLIC，也可以声明成 PRIVATE 属性。

重要内容

在 Visual FoxPro 中，许多原有的系统内存变量功能已经被新的功能代替。有关的详细内容，请参阅每个系统内存变量的说明。

下表列出了五种 Visual FoxPro 系统内存变量以及它们在表达式中的指示符：

变量类型	说明	表达式
C	字符型	cExpression
D	日期型	dExpression
L	逻辑型	lExpression
N	数值型	nExpression
O	对象型	oExpression
下表列出了全部系统内存变量的类型和默认值：

变量	类型	默认值
_ALIGNMENT	C	LEFT
_ASCIICOLS	N	80
_ASCIIROWS	N	63
_ASSIST	C	在 Visual FoxPro 中是空串，否则是 CATALOG.APP
_BEAUTIFY	C	在 Visual FoxPro 中是空串，否则是 BEAUTIFY.APP
_BOX	L	.T.
_BROWSER	C	BROWSER.APP
_BUILDER	C	BUILDER.APP
_CALCMEM	N	0.0
_CALCVALUE	N	0.0
_CLIPTEXT	C	空串
_CONVERTER	C	CONVERT.APP
_CUROBJ	N	-1
_DBLCLICK	N	0.5
_DIARYDATE	D	当前日期
_DOS	L	在 FoxPro for MS-DOS 中为“真” (.T.)
_FOXDOC	C	在 Visual FoxPro 中是空串，否则是 FOXDOC.EXE
_FOXGRAPH	C	在 Visual FoxPro 中是空串，否则是 FOXGRAPH.EXE
_GENGRAPH	C	在 Visual FoxPro 中是空串，否则是 GENGRAPH.PRG
_GENMENU	C	GENMENU.PRG
_GENPD	C	在 Visual FoxPro 中是空串，否则是 GENPD.APP
_GENSCRN	C	GENSCRN.PRG
_GENXTAB	C	在 Visual FoxPro 中是空串，否则是 GENXTAB.PRG
_INDENT	N	0
_LMARGIN	N	0
_MAC	L	在 FoxPro for Macintosh 中为“真” (.T.)
_MLINE	N	0
_PADVANCE	C	FORMFEED
_PAGENO	N	1
_PBPAGE	N	1
_PCOLNO	N	当前列
_PCOPIES	N	1
_PDRIVER	C	空串
_PDSETUP	C	空串
_PECODE	C	空串
_PEJECT	C	NONE
_PEPAGE	N	32767
_PLENGTH	N	66
_PLINENO	N	0
_PLOFFSET	N	0
_PPITCH	C	DEFAULT
_PQUALITY	L	.F.
_PRETEXT	C	空串
_PSCODE	C	空串
_PSPACING	N	1
_PWAIT	L	.F.
_RMARGIN	N	80
_SCREEN	O	FORM
_SHELL	C	空串
_SPELLCHK	C	SPELLCHK.APP
_STARTUP	C	在 Visual FoxPro 中是空串，否则是 STARTUP.APP
_TABS	C	空串
_TALLY	N	0
_TEXT	C	1
_THROTTLE	N	0
_TRANSPORT	C	在 Visual FoxPro 中是空串，否则是 TRANSPORT.PRG
_TRIGGERLEVEL	N	0
_UNIX	L	在 FoxPro for UNIX 中为“真”(.T.)
_WINDOWS	L	在 Visul FoxPro 和 FoxPro for Windows 中为“真”(.T.)
_WIZARD	C	WIZARD.APP
_WRAP	L	(.F.)


请参阅

PUBLIC，PRIVATE，STORE


系统菜单名称

请参阅

下面列出了 Visual FoxPro 系统菜单栏标题、菜单和菜单项的内部名称以及用户界面名称，这些名称能够让您利用 Visual FoxPro 系统菜单栏创建自己应用程序的菜单系统。SYS(2013) 函数返回包含这些名称以空格分隔的字符串，也可以通过使用菜单设计器查看内部的系统菜单名称来创建一个快速菜单。

在 Visual FoxPro 的系统菜单名称表之后，是其他 FoxPro 产品的系统菜单名称表。

有关系统菜单栏的详细内容，请参阅《开发指南》的第十二章“设计菜单”。

Visual FoxPro 中的系统菜单名

在 Visual FoxPro 中，系统菜单栏的内部名称是 _MSYSMENU。

系统菜单 — Visual FoxPro

菜单标题	内部名称
文件	_MSM_FILE
编辑	_MSM_EDIT
查看	_MSM_VIEW
工具	_MSM_TOOLS
程序	_MSM_PROG
格式	_MSM_TEXT
窗口	_MSM_WINDO
帮助	_MSM_SYSTM
文件菜单 — Visual FoxPro

菜单和菜单项	内部名称
文件菜单	_MFILE
新建...	_MFI_NEW
打开...	_MFI_OPEN
关闭	_MFI_CLOSE
全部关闭	_MFI_CLALL
第一个分隔线	_MFI_SP100
保存	_MFI_SAVE
另存为...	_MFI_SAVAS
还原	_MFI_REVRT
第二个分隔线	_MFI_SP200
导入	_MFI_IMPORT
导出	_MFI_EXPORT
第三个分隔线	_MFI_SP300
页面设置...	_MFI_SETUP
打印预览	_MFI_PREVU
打印...	_MFI_PRINT
第四个分隔线	_MFI_SP400
退出	_MFI_QUIT
编辑菜单 — Visual FoxPro

菜单和菜单项	内部名称
编辑菜单	_MEDIT
撤消	_MED_UNDO
重作	_MED_REDO
第一个分隔线	_MED_SP100
剪切	_MED_CUT
复制	_MED_COPY
粘贴	_MED_PASTE
选择性粘贴	_MED_PSTLK
第二个分隔线	_MED_SP200
全部选定	_MED_SLCTA
第三个分隔线	_MED_SP300
查找...	_MED_FIND
替换...	_MED_REPL
转到行...	_MED_GOTO
第四个分隔线	_MED_SP400
插入对象...	_MED_INSOB
对象...	_MED_OBJ
链接...	_MED_LINK
转为静态	_MED_CVTST
查看菜单 — Visual FoxPro

菜单和菜单项	内部名称
查看菜单	_MVIEW
工具栏...	_MVI_TOOLB
工具菜单 — Visual FoxPro

菜单和菜单项	内部名称
工具菜单	_MTOOLS
向导	_MTL_WZRDS
第一个分隔线	_MTL_SP100
拼写检查...	_MTL_SPELL
宏...	_MST_MACRO
第二个分隔线	_MTL_SP200
跟踪窗口	_MWI_TRACE
调试窗口	_MWI_DEBUG
第三个分隔线	_MTL_SP300
选项...	_MTL_OPTNS
程序菜单 — Visual FoxPro

菜单和菜单项	内部名称
程序菜单	_MPROG
执行...	_MPR_DO
取消	_MPR_CANCL
继续执行	_MPR_RESUM
挂起	_MPR_SUSPEND
第一个分隔线	_MPR_SP100
编译...	_MPR_COMPL
窗口菜单 — Visual FoxPro

菜单和菜单项	内部名称
窗口菜单	_MWINDOW
全部重排	_MWI_ARRAN
第一个分隔线	_MWI_SP100
隐藏	_MWI_HIDE
清除	_MWI_CLEAR
循环	_MWI_ROTAT
第二个分隔线	_MWI_SP200
命令窗口	_MWI_CMD
查看窗口	_MWI_VIEW
帮助菜单 — Visual FoxPro

菜单和菜单项	内部名称
帮助菜单	_MSYSTEM
目录	_MST_HELP
搜索有关...的帮助	_MST_HPSCH
第一个分隔线	_MST_SP100
技术支持	_MST_TECHS
第二个分隔线	_MST_SP200
关于 Microsoft Visual FoxPro...	_MST_ABOUT
在FoxPro for Windows 和 FoxPro for Macintosh 中的系统菜单名称

FoxPro for Windows 和 FoxPro for macintosh 的菜单栏、菜单和菜单项使用相同的用户界面名称和相同的内部名称，但是 FoxPro for Macintosh 中的 Help 菜单除外。

附注

在 FoxPro for Macintosh 中，使用 SET MACHELP 和 ONMACHELP 对 Help 菜单中的 FoxPro Help 进行处理。

在 FoxPro for Windows 或 FoxPro for Macintosh 中，系统菜单栏自己的内部名称是 _MSYSMENU。

系统菜单 —  FoxPro for Windows 和 FoxPro for Macintosh

菜单标题	内部名称
File	_MSM_FILE
Edit	_MSM_EDIT
Database	_MSM_DATA
Record	_MSM_RECRD
Program	_MSM_PROG
Text	_MSM_TEXT
Window	_MSM_WINDO
Help*	_MSM_SYSTM
*仅用于 FoxPro for Windows
文件菜单 — FoxPro for Windows 和 FoxPro for Macintosh

菜单和菜单项	内部名称
File menu	_MFILE
New...	_MFI_NEW
Open...	_MFI_OPEN
Close	_MFI_CLOSE
Close All	_MFI_CLALL
1st Separator	_MFI_SP100
Save	_MFI_SAVE
Save As...	_MFI_SAVAS
Revert	_MFI_REVRT
2st Separator	_MFI_SP200
Print Setup...	_MFI_SETUP
Print...	_MFI_PRINT
3rd Separator	_MFI_SP300
Exit	_MFI_QUIT
编辑菜单 — FoxPro for Windows 和 FoxPro for Macintosh

菜单和菜单项	内部名称
Edit menu	_MEDIT
Undo	_MED_UNDO
Redo	_MED_REDO
1st Separator	_MED_SP100
Cut	_MED_CUT
Copy	_MED_COPY
Paste	_MED_PASTE
Paste Special	_MED_PSTLK
Clear	_MED_CLEAR
2nd Separator	_MED_SP200
Insert Object...	_MED_INSOB
Object...	_MED_OBJ
Change Link...	_MED_LINK
Convert to Static	_MED_CVTST
3rd Separator	_MED_SP300
Select All	_MED_SLCTA
4th Separator	_MED_SP400
Go To Line...	_MED_GOTO
Find...	_MED_FIND
Find Again	_MED_FINDA
Replace and Find Again	_MED_REPL
Replace All	_MED_REPLA
5th Separator	_MED_SP500
Preferences...	_MED_PREF
数据库菜单 — FoxPro for Windows 和 FoxPro for Macintosh

菜单和菜单项	内部名称
Database menu	_MDATA
Setup..	_MDA_SETUP
Browse	_MDA_BROW
1st Separator	_MDA_SP100
Append From...	_MDA_APPND
Copy To...	_MDA_COPY
Sort...	_MDA_SORT
Total...	_MDA_TOTAL
2nd Separator	_MDA_SP200
Average...	_MDA_AVG
Count...	_MDA_COUNT
Sum...	_MDA_SUM
Calculate...	_MDA_CALC
Report...	_MDA_REPRT
Label...	_MDA_LABEL
3rd Separator	_MDA_SP300
Pack	_MDA_PACK
Reindex	_MDA_RINDX
记录菜单 — FoxPro for Windows 和 FoxPro for Macintosh

菜单和菜单项	内部名称
Record menu	_MRECORD
Append	_MRC_APPND
Change	_MRC_CHNGE
1st Separator	_MRC_SP100
Go To...	_MRC_GOTO
Locate...	_MRC_LOCAT
Continue	_MRC_CONT
Seek...	_MRC_SEEK
2nd Separator	_MRC_SP200
Replace...	_MRC_REPL
Delete...	_MRC_DELET
Recall...	_MRC_RECAL
程序菜单 — FoxPro for Windows 和 FoxPro for Macintosh

菜单和菜单项	内部名称
Program item	_MPROG
Do...	_MPR_DO
Cancel	_MPR_CANCL
Resume	_MPR_RESUM
1st Separator	_MPR_SP100
Debug	_MWI_DEBUG
Trace	_MWI_TRACE
2nd Separator	_MPR_SP200
Compile...	_MPR_COMPL
Generate...	_MPR_GENER
Macros...	_MST_MACRO
3rd Separator	_MPR_SP300
Beautify...	_MPR_BEAUT
FoxDoc	_MPR_DOCUM
窗口菜单 — FoxPro for Windows 和 FoxPro for Macintosh

菜单和菜单项	内部名称
Window menu	_MWINDOW
Hide	_MWI_HIDE
Hide All	_MWI_HIDEA
Show All	_MWI_SHOWA
Clear	_MWI_CLEAR
Cycle	_MWI_ROTAT
1st Separator	_MWI_SP100
Command	_MWI_CMD
View	_MWI_VIEW
帮助菜单 — FoxPro for Windows

菜单和菜单项	内部名称
Help menu	_MSYSTEM
Contents	_MST_HELP
Search For Help On...	_MST_HPSCH
How to Use Help	_MST_HPHOW
1st Separator	_MST_SP100
About FoxPro....	_MST_ABOUT
2nd Separator	_MST_SP200
Calculator	_MST_CALCU
Calendar/Diary	_MST_DIARY
Filer	_MST_FILER
Puzzle	_MST_PUZZL
在 MS-DOS 中的系统菜单名称

FoxPro for MS-DOS 的系统菜单栏内部名称是 _MSYSMENU。

系统菜单 — FoxPro for MS-DOS

菜单标题	内部名称
System	_MSM_SYSTM
File	_MSM_FILE
Edit	_MSM_EDIT
Database	_MSM_DATA
Record	_MSM_RECRD
Program	_MSM_PROG
Window	_MSM_WINDO
系统菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
System menu	_MSYSTEM
About FoxPro...	_MST_ABOUT
Help...	_MST_HELP
Macros...	_MST_MACRO
1st Separator	_MST_SP100
Filer	_MST_FILER
Calculator	_MST_CALCU
Calendar/Diary	_MST_DIARY
Special Characters	_MST_SPECL
ASCII Chart	_MST_ASCII
Capture	_MST_CAPTR
Puzzle	_MST_PUZZL
文件菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
File menu	_MFILE
New...	_MFI_NEW
Open...	_MFI_OPEN
Close	_MFI_CLOSE
Close All	_MFI_CLALL
1st Separator	_MFI_SP100
Save	_MFI_SAVE
Save As...	_MFI_SAVAS
Revert	_MFI_REVRT
2nd Separator	_MFI_SP200
Printer Setup...	_MFI_SETUP
Print...	_MFI_PRINT
3rd Separator	_MFI_SP300
Quit	_MFI_QUIT
编辑菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
Edit menu	_MEDIT
Undo	_MED_UNDO
Redo	_MED_REDO
1st Separator	_MED_SP100
Cut	_MED_CUT
Copy	_MED_COPY
Paste	_MED_PASTE
Clear	_MED_CLEAR
2nd Separator	_MED_SP200
Select All	_MED_SLCTA
3rd Separator	_MED_SP300
Go To Line...	_MED_GOTO
Find...	_MED_FIND
Find Again	_MED_FINDA
Replace and Find Again	_MED_REPL
Replace All	_MED_REPLA
4th Separator	_MED_SP400
Preferences...	_MED_PREF
数据库菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
Database menu	_MDATA
Setup...	_MDA_SETUP
Browse	_MDA_BROW
1st Separator	_MDA_SP100
Append From...	_MDA_APPND
Copy To..	_MDA_COPY
Sort...	_MDA_SORT
Total..	_MDA_TOTAL
2nd Separator	_MDA_SP200
Average...	_MDA_AVG
Count...	_MDA_COUNT
Sum...	_MDA_SUM
Calculate...	_MDA_CALC
Report...	_MDA_REPRT
Label...	_MDA_LABEL
3rd Separator	_MDA_SP300
Pack	_MDA_PACK
Reindex	_MDA_RINDX
记录菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
Record menu	_MRECORD
Append	_MRC_APPND
Change	_MRC_CHNGE
1st Separator	_MRC_SP100
Go To...	_MRC_GOTO
Locate...	_MRC_LOCAT
Continue	_MRC_CONT
Seek...	_MRC_SEEK
2nd Separator	_MRC_SP200
Replace...	_MRC_REPL
Delete...	_MRC_DELET
Recall...	_MRC_RECAL
程序菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
Program menu	_MPROG
Do...	_MPR_DO
1st Separator	_MPR_SP100
Cancel	_MPR_CANCL
Resume	_MPR_RESUM
2nd Separator	_MPR_SP200
Compile...	_MPR_COMPL
Generate...	_MPR_GENER
FoxDoc	_MPR_DOCUM
FoxGraph...	_MPR_GRAPH
窗口菜单 — FoxPro for MS-DOS

菜单和菜单项	内部名称
Window menu	_MWINDOW
Hide	_MWI_HIDE
Hide All	_MWI_HIDEA
Show All	_MWI_SHOWA
Clear	_MWI_CLEAR
1st Separator	_MWI_SP100
Move	_MWI_MOVE
Size	_MWI_SIZE
Zoom	_MWI_ZOOM
Minimize	_MWI_MIN
Cycle	_MWI_ROTAT
Color...	_MWI_COLOR
2nd Separator	_MWI_SP200
Command	_MWI_CMD
Debug	_MWI_DEBUG
Trace	_MWI_TRACE
View	_MWI_VIEW


请参阅

SYS(2013)


TabIndex 属性

请参阅

指定页面上控制的 Tab 键次序，以及表单集中表单对象的 Tab 键次序。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，标签，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，微调，文本框

语法

[Object.]Control.TabIndex[ = nOrder]

设置

nOrder

指定控制的 Tab 键次序。

说明

设计和运行时可用。

对表单中的控制来说，按照控制添加的次序指定 Tab 键次序，每个新建控制都位于 Tab 键次序的末尾。

对于表单集中的一个表单，按照表单添加的次序指定 Tab 键次序。在表单集中，nOrder 为 1 的表单就是第一个被激活的表单。当用户在表单的最后一个控制上按下 Tab 键，焦点就移到下个表单中 Tab 键次序为 1 的控制上。如果表单不在表单集中，则忽略 TabIndex 属性。

可以在设计时使用属性窗口或在运行时使用代码改变此属性。然而，如果要改变一个控制或表单的设置，必须改变页面中所有控制和表单集中所有表单的设置值。如果没有指明所有控制或表单对象的 Tab 键次序，对于剩下的控制和表单对象，Visual FoxPro 将把它们运行时添加、改变的次序作为 Tab 键次序，这可能产生意料不到的结果。

若要忽略一个控制或表单的 Tab 键次序，可将 TabStop 属性设置为“假”(.F.)。


请参阅

TabStop 属性


TABLEREVERT( ) 函数

请参阅	示例

放弃对缓冲行、缓冲表或临时表的修改，并且恢复远程临时表的 OLDVAL( ) 数据以及本地表和临时表的当前磁盘数值。

语法

TABLEREVERT([lAllRows] [, cTableAlias | nWorkArea])

参数

lAllRows

决定是否放弃表或临时表的所有更改。如果 lAllRows 是“真”(.T.)，并且启用表缓冲，则放弃表或临时表中对所有记录所做的修改；如果 lAllRows 是“假”(.F.)，并且启用表缓冲，则只放弃对表或临时表中当前记录所做的修改。

如果启用行缓冲，则忽略 lAllRows 的值，并且放弃对表或临时表中当前记录所做的修改。

lAllRows 的默认值是“假”(.F.)。

cTableAlias

指定要放弃修改的表或临时表的别名。

nWorkArea

指定要放弃修改的表或临时表所在的工作区。

返回值类型

数值型

说明

TABLEREVERT( ) 函数返回放弃修改的记录数目。

附注

在网络上，当前存贮在磁盘上的数据可能和打开表或创建临时表时磁盘上的数据不同。这是因为在打开表或创建临时表之后，其他网络用户可能改变了数据。

对于没有启用行缓冲或表缓冲的表或临时表，TABLEREVERT( ) 函数不能放弃对它们的修改。如果不启用行缓冲或表缓冲而调用 TABLEREVERT( ) 函数，Visual FoxPro 将产生错误信息。

如果不用可选参数 cTableAlias 或 nWorkArea 调用 TABLEREVERT( ) 函数，则只放弃对当前工作区中打开表或临时表所做的修改。


*下面的示例显示了如何使用 TABLEREVERT( ) 函数
* 放弃对缓冲表的修改。首先把 MULTILOCKS
* 设置成 ON 以请求表缓冲；然后打开 testdata 数据库中
* 的 customer 表，用 CURSORETPROP( ) 函数
* 把缓冲方式设置为开放式表缓冲 (5)。

*首先显示 cust_id 字段值，再用 REPLACE 命令修改 cust_id 字段，
* 显示新的 cust_id 字段值，最后使用 TABLEREVERT( ) 函数
* 把表恢复成原来状态（可以用 TABLEUPDATE( ) 函数
*实施此更改），显示恢复的 cust_id 字段值。

CLOSE DATABASES

SET MULTILOCKS ON  && 对于表缓冲必须为 ON

SET PATH TO (HOME( ) + 'samples\data\')  	&& 设置数据库路径

OPEN DATABASE testdata  &&  打开“testdata”数据库

USE Customer	  &&  打开“customer”表

= CURSORSETPROP('Buffering', 5, 'customer')  &&  启用表缓冲

CLEAR

? 'Original cust_id value: '

?? cust_id  && 显示当前“cust_id”的值

REPLACE cust_id 	WITH '***'  && 改变字段的内容

? 'New cust_id value: '

?? cust_id  && 显示新的“cust_id”值

= TABLEREVERT(.T.)  && 放弃所有表的更改

? 'Reverted cust_id value: '

?? cust_id  && 显示恢复的“cust_id”的值


请参阅

CURSORSETPROP( )，CURVAL( )，OLDVAL( )，TABLEUPDATE( )


TABLEUPDATE( ) 函数

请参阅	示例

执行对缓冲行、缓冲表或临时表的修改。

语法

TABLEUPDATE([lAllRows] [, lForce]] [, cTableAlias | nWorkArea])

参数

lAllRows

确定是否实施所有对表或临时表的更改。如果 lAllRows 是“真”(.T.)，并且启用表缓冲，则实施对表或临时表中所有记录的更改；如果 lAllRows 是“真”，并且启用行缓冲，那么只实施对表或临时表中当前记录的更改。

如果 lAllRows 是“假”(.F.)，并且启用行缓冲或表缓冲，那么只实施对表或临时表中当前记录所做的更改。

lAllRows 的默认值是“假”(.F.)。

lForce

决定是否覆盖网络上的其他用户对表或临时表的修改。如果 lForce 是“真”(.T.)，那么网络上其他用户表或临时表的任何更改都被覆盖。

如果 lForce 是“假”(.F.)，Visual FoxPro 从表或临时表的第一个记录开始，对记录逐条实施更改，直到表或临时表的结束。如果遇到某个记录被网络上别的用户修改过，Visual FoxPro 将产生错误。

当 Visual FoxPro 产生该错误时，可以用 ON ERROR 例程来处理。ON ERROR 例程调用 TABLEUPDATE( ) 函数，并把 lForce 设置成“真” (.T.)，从而实施对记录的更改。或者，如果正处理一个事务，那么 ON ERROR 例程可以处理发生的错误，并且调用 ROLLBACK 命令，把表或临时表恢复成原来的状态。

lForce 的默认值是“假”(.F.)。

cTableAlias

指定要实施更改的表或临时表的别名。

nWorkArea

指定要实施更改的表或临时表所在的工作区。

返回值类型

逻辑型

说明

如果实施了对所有记录所做的更改，则 TABLEUPDATE( ) 函数返回“真”(.T.)；否则，TABLEUPDATE( ) 函数返回“假”(.F.)，记录指针指向不能实施更改的记录。可以发出 AERROR( ) 函数确定对此记录所做更改不能实施的原因。

对于没有启用行缓冲的表或没有启用表缓冲的临时表，TABLEUPDATE( ) 函数不能实施对它们的更改。如果在没有启用行或表缓冲的情况下，调用 TABLEUPDATE( ) 函数， Visual FoxPro 将产生错误信息。然而，TABLEUPDATE( ) 函数仍然可以对具有有效性规则的表或临时表实施更改。使用函数 CURSORSETPROP( ) 可以启用或废止行或表缓冲。

如果不带可选参数 cTableAlias 或 nWorkArea 调用 TABLEUPDATE( ) 函数，那么只对当前所选工作区中打开的表或临时表实施更改。


*下面的示例演示了如何使用 TABLEUPDATE( ) 函数
* 实施对缓冲表的更改。先创建一个名为 employees 的表单，
* 然后用 INSERT - SQL 把“Smith”插入
* 到 cLastName 字段中，

* MULTILOCKS 设置为 ON，请求表缓冲。
* 使用函数 CURSORSETPROP( ) 设置。
* 缓冲方式为开放式表缓冲 (5)。

*先显示 cLastName 字段的初始值 (Smith)，接着用
* REPLACE 命令修改 cLastName 字段，然后显示
*  cLastName 字段的新值 (Jones)，最后用 TABLEUPDATE( )
*  实施对该表的更改（也可使用TABLEREVERT( ) 函数实
* 施更改），最后显示 cLastName 字段值 (Jones)。

CLOSE DATABASES

CREATE TABLE employee (cLastName C(10))

SET MULTILOCKS ON  &&  必须打开表缓冲

= CURSORSETPROP('Buffering', 5, 'employee' )  && 启用表缓冲

INSERT INTO employee (cLastName) VALUES ('Smith')

CLEAR

? 'Original cLastName value: '

?? cLastName  && 显示 cLastName 字段当前值(Smith)

REPLACE cLastName WITH 'Jones'

? 'New cLastName value: '

?? cLastName  &&  显示 cLastName 新值(Jones)

= TABLEUPDATE(.T.)  && 实施更改

? 'Updated cLastName value: '

?? cLastName  &&  显示当前 cLastName  的值(Jones)


请参阅

CURSORSETPROP( )，CURVAL( )，OLDVAL( )，TABLEREVERT( )


Tabs 属性

请参阅

指定页框控制中是否有选项卡。

应用于

页框

语法

PageFrame.Tabs[ = lExpr]

设置

lExpr

Tabs 属性的设置有：

设置	说明
“真”(.T.)	(默认值)页框有选项卡
“假”(.F.)	页框没有选项卡
说明

设计和运行时可用。

通过设置页面的 Caption 属性，指定选项卡文本内容和宽度。


请参阅

Caption 属性


_TABS 系统内存变量

请参阅

包含制表符设置。包含此变量是为了提供向后兼容性，可使用报表设计器代替。

语法

_TABS = cTabStops

参数

cTabStops

指定一个字符值，该字符值决定在打印输出时制表符停在哪里。cTabStops 代表一个制表符列表，该列表包含一系列逗号分隔开的、升序排列的数字。默认时，_TABS 包含空字符串，即把 _TABS 设置为八个字符间隔（8，16，24，32，40，依此类推）。

当 _WRAP 设置成“真” (.T.)时，Visual FoxPro 忽略任何大于或等于 _RMARGIN 值的 _TABS 值。可以包含在配置文件中的 TABS 项，这等同于 _TABS。指定一个 TABS 值将自动设置 _TABS 的值。


请参阅

_INDENT 系统内存变量，_WRAP 系统内存变量


TabStop 属性

请参阅

指定用户是否可以使用 TAB 键把焦点移动到对象上。

应用于

复选框，组合框，命令按钮，容器对象，Control 对象，编辑框，表单，表格，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，页面，页框，_SCREEN，微调，文本框

语法

[Object.]Control.TabStop[ = lExpr]

设置

lExpr

指定一个对象是否包含在 Tab 键次序中，TabStop 属性的设置有：

设置	说明
“真”(.T.)	（默认值）控制或表单包含在 Tab 键次序中，Tab 键次序由 TabIndex 属性决定。
“假”(.F.)	在 Tab 键次序中忽略该对象。对于一个控制来说，当用户按了 TAB 键，焦点将跳过属性设置为“假”(.F.) 的控制；对于表单，当用户在表单的最后一个控制处按下TAB键，而 Tab 键次序中下一个表单属性设置为“假”(.F.) 时，焦点将移到这个表单的第一个控制处，而不是移到 Tab 键次序中的下一个表单上。
说明

设计和运行时可用。

如果一个控制或表单的 TabStop 属性设置为“假”(.F.)，那么当按下 TAB 键在控制或表单中移动焦点时，将跳过这个控制或表单。但是当使用鼠标时，该控制或表单仍然可以接受焦点。

附注

当用于包含在“列”对象中的控制时，TabStop 属性只读。


请参阅

TabIndex 属性


TabStretch 属性

请参阅

指定当选项卡在页框控制中容纳不下时页框的动作。

应用于

页框

语法

PageFrame.TabStretch[ = nSetting]

设置

nSetting

TabStretch 属性的设置有：

设置	说明
0	堆积。创建第二行选项卡。
1	（默认值）剪裁。按需要裁剪选项卡。
说明

设计和运行时可用。仅当 Tabs 设置为“真”(.T.) 时，才可使用 TabStretch 属性。


请参阅

Tabs 属性


Tag 属性

请参阅

存储用户程序所需的任何其他数据。

应用于

复选框，组合框，命令按钮，命令组，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，_SCREEN，形状，微调，文本框，计时器

语法

Object.Tag[ = Expr]

设置

Expr

指定任何字符串。

说明

设计和运行时可用。

默认情况下，Tag 属性设置为一个空字符串 ( )。

使用这个属性，可以在不产生任何影响的情况下，把任何字符串赋给一个对象。

与其他属性不同的是，Visual FoxPro 并不使用 Tag 属性的值。


请参阅

Comment 属性


TAG( ) 函数

请参阅	示例

返回打开的 .CDX 多项复合索引文件的标识名，或者返回打开的 .IDX 单项索引文件的文件名。

语法

TAG([CDXFileName,] nTagNumber [, nWorkArea | cTableAlias])

参数

CDXFileName

指定多项复合索引文件 .CDX 的文件名，TAG( ) 函数将返回该文件的一个标识名。

nTagNumber

指定一个数值，此数值对应于复合索引文件中标识的创建顺序。例如，如果 nTagNumber 是 1，TAG( ) 函数将返回复合索引文件中创建的第一个标识名；如果 nTagNumber 是 2，TAG( ) 函数将返回所创建的第二个标识名，依此类推。当 nTagNumber 超过标识总数时，TAG( ) 函数将返回一个空字符串。

如果省略了 CDXFileName 参数，TAG( ) 函数将按以下特定顺序返回复合索引文件的标识名和单项索引文件的文件名：

1.	依据它们在 SET INDEX 或 USE 的 INDEX 子句中出现的次序，返回单项索引文件的文件名。

2.	返回结构复合索引文件（如果该表存在这样的文件）标识名。

3.	返回其他打开的复合索引文件中的标识名。同样是按标识在复合索引文件中的创建次序和复合索引文件在 SET INDEX 或 USE 的 INDEX 子句中的指定顺序返回。

nWorkArea | cTableAlias

从其他工作区中打开的文件中返回标识名或索引文件名。nWorkArea 指定工作区号，cTableAlias 指定表别名。默认情况下，返回当前工作区中文件的标识名和索引文件名。

返回值类型

字符型

说明

标识是多项复合索引 .CDX 文件的索引项。可以用 INDEX 语句创建多项复合索引 .CDX 文件。

附注

用 SET INDEX 或 USE 语句中的 INDEX 子句，可以为一个表打开多项复合索引文件 (.CDX) 和单项索引文件 (.IDX)。结构复合索引文件随表的打开而自动打开。


*下面的示例打开 testdata 数据库中的 customer 表。
* 使用 FOR ... ENDFOR 语句创建一个循环，
* 在循环内使用 CDX( ) 函数显示每个结构索引的名称。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开“customer”表

CLEAR

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  &&  检查索引中的标识。

? CDX(nCount)	  && 显示 .CDX 名称

ELSE

EXIT  &&  当找不到标识时，退出循环

ENDIF

ENDFOR


请参阅

CDX( )，INDEX，MDX( )，NDX( )，SET INDEX，SYS(14) - 索引表达式，USE


TAGCOUNT( ) 函数

请参阅	示例

返回复合索引文件 (.CDX) 标识以及打开的单项索引文件 (.IDX) 的数目。包含此函数是为了提供与 dBASE 的兼容性。

语法

TAGCOUNT([CDXFileName [, nWorkArea | cTableAlias]])

参数

CDXFileName

指定复合索引文件的文件名，TAGCOUNT( ) 函数返回其标识数目。如果省略了 CDXFileName 参数，TAGCOUNT( ) 函数将返回所有复合索引文件 (.CDX) 的标识数目，以及当前选定工作区中打开的单项单索引文件（.IDX）总数。

nWorkArea

指定表所在的工作区，TAGCOUNT( ) 函数返回该表的复合索引文件 (.CDX) 的标识数目。

cTableAlias

指定表的别名，TAGCOUNT( ) 函数返回该表的复合索引文件 (.CDX) 的标识数目。

返回值类型

数值型


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

CLEAR

? TAGCOUNT('customer')  && 显示 4


请参阅

CDX( )，INDEX，MDX( )，NDX( )，SYS(14) 函数 - 索引表达式，TAG( )


TAGNO( ) 函数

请参阅

返回复合索引文件 (.CDX) 标识以及打开的单项索引 (.IDX) 文件的索引位置。包含此函数是为了提供与 dBASE 的兼容性。

语法

TAGNO([IndexName [, CDXFileName [, nWorkArea | cTableAlias]]])

参数

IndexName

指定复合索引文件 (.CDX) 标识名称或打开的单项索引文件 (.IDX) 的文件名，TAGNO( ) 函数返回该索引文件的索引位置。

CDXFileName

指定复合索引文件 (.CDX) 的文件名，该文件包含 IndexName 变量中指定的标识名。

nWorkArea

指定表的工作区，TAGNO( ) 函数返回该表的 .CDX 复合索引文件标识和 .IDX 单项索引文件的索引位置。

cTableAlias

指定表的别名，TAGNO( ) 函数返回该表的 .CDX 复合索引文件标识和 .IDX 单项索引文件的索引位置。

返回值类型

数值型

说明

如果没有设置主控索引（该表以物理记录号顺序排列），并且省略了可选参数，TAGNO( ) 函数将返回 0。


请参阅

CDX( )，INDEX，MDX( )，NDX( )，SET INDEX，SYS(14) 函数 - 索引表达式，TAG( )，TAGCOUNT( )，USE


_TALLY 系统内存变量

请参阅	示例

包含最近执行的表命令处理过的记录数目。

语法

_TALLY = nRecords

参数

nRecords

包含一个数值，该数值代表最近执行的表命令所处理的记录数目。

说明

某些表处理命令，在执行时将返回有关的状态信息(“对话”)。当这样的命令结束时，将显示所处理的记录数（如果 SET TALK 为 ON），并将这个数字存入 _TALLY 系统内存变量中。

下列命令返回状态信息：

APPEND FROM	AVERAGE
CALCULATE	COPY TO
COUNT	DELETE
INDEX	JOIN
PACK	REINDEX
REPLACE	SELECT - SQL
SORT	SUM
TOTAL	UPDATE
当启动 Visual FoxPro 时，_TALLY 设置为 0。执行以上的一个命令之后，_TALLY 值就变为该命令所处理的记录数目。


*下面的示例使用 SELECT 语句返回美国顾客数目。结果自动存入 _TALLY
* 系统变量中，然后显示 _TALLY 的值。

SELECT * FROM customer ;

WHERE country = 'USA' ;

INTO CURSOR temp

? _TALLY


请参阅

SET ODOMETER，SET TALK


TAN( ) 函数

请参阅	示例

此函数返回角度的正切值。

语法

TAN(nExpression)

参数

nExpression

以弧度为单位指定一个角度，TAN( ) 函数返回该角度的正切值。若要把角度由度转换成弧度，可使用 DTOR( ) 函数。可以用 SET DECIMALS 语句指定 TAN( ) 函数返回数值的小数位数。

返回值类型

数值型


CLEAR

? TAN(0)  && 显示 0.00

? TAN(PI( )/4)  && 显示 1.00

? TAN(PI( )*3/4)  && 显示 -1.00


请参阅

COS( )，DTOR( )，RTOD( )，SET DECIMALS，SIN( )


TARGET( ) 函数

请参阅	示例

返回一个表的别名，该表是 SET RELATION 命令的 INTO 子句所指定关系的目标。

语法

TARGET(nRelationshipNumber [, nWorkArea | cTableAlias])

参数

nRelationshipNumber

指定一个关系的编号，范围是从 1 到指定工作区与外部关系的总数目。当 nRelationshipNumber 不大于关系总数目时，返回目标数据库的别名。当 nRelationshipNumber 大于关系总数目时，返回一个空串。

nWorkArea | cTableAlias

返回另一个工作区中目标表的别名。nWorkArea 指定工作区号，cTableAlias 指定表的别名。默认情况下，如果不指定工作区或别名，将返回当前工作区中目标表的别名。

返回值类型

字符型


* 在下面的示例中，在 order_id 字段上设置
* 从表 orders 到表 customer 的关系，然后用
*  TARGET( ) 函数返回目标表的别名。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE orders IN 0 ORDER order_id

USE customer IN 0 ORDER cust_id

SELECT orders

SET RELATION TO cust_id INTO customer

? TARGET(1)  && 显示“customer”

? TARGET(2)  && 显示空串“”


请参阅

RELATION( )，SET RELATION


TerminateRead 属性

请参阅

此属性决定当单击控制时，是否使表单或表单集对象不活动。包含此属性是为了提供与 READ 命令的向后兼容性。

应用于

复选框，组合框，命令按钮，命令组，编辑框，列表框，选项按钮，选项组，微调，文本框

语法

[Form.]Control.TerminateRead[ = lExpr]

设置

lExpr

指定当某个控制接收到焦点时，READ 命令是否终止。TerminateRead 属性的设置有：

设置	说明
“真”(.T.)	当控制接收到焦点时终止 READ 命令
“假”(.F.)	（.默认值）当控制接收到焦点时不终止 READ 命令
说明

设计和运行时可用。只有在表单集中的表单包含控制，并且表单集的 WindowType 属性设置为 2（读）或 3（读模式）时，此属性才可用。


请参阅

WindowType 属性


TEXT ... ENDTEXT 命令

请参阅	示例

输出文本行、表达式和函数的结果及内存变量的内容。

语法

TEXT
TextLines
ENDTEXT

参数

TextLines

指定送到当前输出设备上的文本。TextLines 可以是文本、内存变量、数组元素、表达式、函数或者它们的任何组合。

只有在 SET TEXTMERGE 设置为 ON，并且表达式、函数、内存变量和数组元素中包含 SET TEXTMERGE DELIMITERS 指定的分隔符时，才计算 TextLines 所指定的值；若 SET TEXTMERGE 设置为 OFF，则输出表达式、函数、内存变量和数组元素，以及它们之间分隔符的原义字符串。

例如，如果 SET TEXTMERGE 为 ON，并且文本行中包含 <<DATE( )>>，则输出当天的日期；如果 SET TEXTMERGE 为 OFF，则 <<DATE( )>> 原样输出。

如果在 TEXT 和 ENDTEXT 中或在“\”、“\\”之后放置注释，则该注释也一起输出。

说明

这个结构化的编程命令把 TEXT 和 ENDTEXT 语句之间的文本行送到 Visual FoxPro 的主窗口、用户自定义窗口、打印机、文本文件或低级文件中。

TEXT 命令把文本行送入当前输出设备，直至遇到 ENDTEXT 语句或程序结束。

默认情况下，TEXT ... ENDTEXT 的输出送到 Visual FoxPro 的主窗口或活动窗口。使用 SET CONSOLE OFF 命令可禁止输出到 Visual FoxPro 主窗口或活动窗口。使用 SET PRINTER 命令可以输出到打印机或文本文件。

TEXT ... ENDTEXT 的输出也可以送到由 FCREATE( ) 或 FOPEN( ) 函数创建或打开的低级文件中。如果把 FCREATE( ) 或 FOPEN( ) 函数返回的文件句柄存贮到 _TEXT 系统内存变量中，那么将直接输出到相应的低级文件中。


*下面的示例演示了如何使用 SET TEXTMERGE，
*  SET TEXTMERGE DELIMITERS，TEXT…END TEXT
*  和 _TEXT 系统内存变量。

*首先创建一个名为 NAMES.TXT 的低级文件，
* 将其句柄存入 _TEXT 系统内存变量中。如果不能创建文件
*  NAMES.TXT，程序将退出。然后打开 customer 表，
* 把最前面的 10 个客户名输出到 NAMES.TXT 文件中，
* 文本和函数的结果也输出到文本文件中。

*用 MODIFY FILE 命令打开包含客户姓名的文本文件。

CLEAR

CLOSE DATABASES

SET TALK OFF

SET TEXTMERGE ON	  && 允许嵌入表达式和函数

STORE FCREATE('names.txt') TO _TEXT	  &&创建低级文件

IF _TEXT = -1  &&若不能创建低级文件，则退出程序

WAIT WINDOW 'Cannot create an output file; press a key to exit'

CANCEL

ENDIF

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开“Customer”表

TEXT

CONTACT NAMES

<<DATE( )>>        <<TIME( )>>

ENDTEXT

WAIT WINDOW 'Press a key to generate the first ten names'

SCAN NEXT 10

TEXT

<<contact>>

ENDTEXT

ENDSCAN

CLOSE ALL  &&  关闭文本文件和表

MODIFY FILE names.txt

ERASE names.txt


请参阅

FOPEN( )，_PRETEXT，SET TEXTMERGE，SET TEXTMERGE DELIMITERS，_TEXT


_TEXT 系统内存变量

请参阅	示例

把“\｜\\”和 TEXT ... ENDTEXT 文本合并命令的结果输出到低级文件中。

语法

_TEXT = nFileHandle

参数

nFileHandle

指定一个数值，该数值确定输出的低级文件。

说明

\｜\\ 和 TEXT ... ENDTEXT 能很容易地把表的内容、内存变量以及函数和表达式的结果合并到文本中。由这些文本合并命令所产生的结果可以输出到屏幕或窗口或低级文件中，_TEXT 系统内存变量可以把文本合并命令的结果输出到低级文件中。

要把“\｜\\”和 TEXT ... ENDTEXT 文本合并命令的结果输出到低级文件中，需要在 SET TEXTMERGE 命令中加入 TO fileName 子句，FileName 的文件句柄保存在 _TEXT 变量中。如果在 _TEXT 中已存有另一个低级文件的句柄，则关闭该低级文件。

用 FCREATE( ) 函数创建并打开低级文件，用 FOPEN( ) 函数打开已存在的低级文件。当文件成功地创建或打开时，这两个函数返回一个正的文件句柄。把该文件句柄保存在 _TEXT 中，将把“\｜\\”和 TEXT ... ENDTEXT 文本合并命令的任意结果连续输出到该文件中。使用 STORE 或 = 可以把文件句柄存入 _TEXT 中。打开的低级文件必须具有写特权，以便接收文本合并命令的输出。

可以使用 FCLOSE( ) 或 CLOSE ALL 关闭低级文件，也可以用 SET TEXTMERGE TO 命令而不加文件名来关闭低级文件，该文件的句柄保存在 _TEXT 中。

_TEXT 的初始默认值是 -1。如果您正将文本合并输出到文件中，该文件的句柄存在 _TEXT 中，那么您可以把 -1 存入 _TEXT 中，这样可以关闭对该文件的输出而不关闭该文件。通过向 _TEXT 中保存入不同的文件句柄和 -1，可以把文本合并输出到不同的文件中。


*下面的示例演示了如何把文本合并输出到不同
* 的文件中。

SET TALK OFF

SET TEXTMERGE ON NOSHOW	&& 启用文本合并，不输出到屏幕上。

SET TEXTMERGE DELIMITERS TO	&& 默认的文本合并分隔符 <<,>>

SET TEXTMERGE TO date.txt	&& 创建并输出到 date.txt 文件中

STORE _TEXT TO gcDateHandle	&& 保存 date.txt 的文件句柄

STORE -1 TO _TEXT	&& 关闭对 date.txt 文件的输出，但保持 date.txt 文件打开

SET TEXTMERGE TO time.txt	&& 创建并输出到 time.txt 文件中

STORE _TEXT TO gcTimeHandle	&& 存贮 time.txt 的文件句柄

*** 向 time.txt 传送下列文本***

\The time is:

STORE gcDateHandle TO _TEXT 	&& 现在把文本输出到 date.txt 文件

*** 向 date.txt 传送下列文本***

\Today's date is:

STORE gcTimeHandle TO _TEXT	&& 现在把文本输出到 time.txt 文件

*** 把时间输出在同一行上***

\\ <<TIME( )>>

STORE gcDateHandle TO _TEXT	&& 现在把文本输出到 time.txt 文件

*** 把日期输出在同一行上***

\\ <<DATE( )>>

CLOSE ALL  && 关闭所有文件

TYPE date.txt  && 查看 date.txt 文件的内容...

WAIT WINDOW  && 暂停

TYPE time.txt  && ...以及 time.txt 文件的内容

ERASE date.txt

ERASE time.txt


请参阅

\ | \\，FOPEN( )，FCLOSE( )，FCREATE( )，_PRETEXT，SET TEXTMERGE，SET TEXTMERGE DELIMITERS


TextBox（文本框）控制

请参阅	属性	事件	方法

创建一个文本框。

语法

TextBox

说明

创建一个文本框，从中可以编辑内存变量、数组元素或字段的内容。所有标准的 Visual FoxPro 编辑功能，例如剪切、复制和粘贴在文本框中都可用。

使用输入掩码和 Format 属性，可以指定在文本框中如何输入和显示数值。

有关创建文本框的详细内容，请参阅表单设计器主题和《开发指南》的第十一章“使用控制”。


 属性

Alignment	BackColor	BackStyle
BaseClass	BorderStyle	Class
ClassLibrary	ColorScheme	ColorSource
Comment	ControlSource	DisabledBackColor
DisabledForeColor	DragIcon	DragMode
Enabled	FontBold	FontItalic
FontName	FontOutline	FontShadow
FontSize	FontStrikeThru	FontUnderline
ForeColor	Format	Height
HelpContextID	HideSelection	InputMask
Left	Margin	MemoWindow
MousePointer	Name	OpenWindow
Parent	ParentClass	PasswordChar
ReadObject	ReadOnly	SelectedBackColor
SelectedForeColor	SelLength	SelStart
SelText	SpecialEffect	StatusBarText
Style	TabIndex	TabStop
Tag	TerminateRead	ToolTipText
Top	Value	Visible
Width


 事件

Click	DblClick	Destroy
DragDrop	DragOver	Error
ErrorMessage	GotFocus	Init
InteractiveChange	KeyPress	LostFocus
Message	MouseDown	MouseMove
MouseUp	ProgrammaticChange	RangeHigh
RangeLow	RightClick	UIEnable
Valid	When


 方法

CloneObject	Drag	Move
ReadExpression	ReadMethod	Refresh
SaveAsClass	SetFocus	WriteExpression
WriteMethod	ZOrder


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS


TextHeight 方法

请参阅

返回以当前字体显示的文本字符串高度。

应用于

表单，_SCREEN

语法

[nHeight =] [FormSet.]Object.TextHeight (cText)

参数

nHeight

返回一个数值，该数值指定文本字符串的高度。

cText

指定要确定高度的字符串。高度的度量单位由表单的 ScaleMode 属性指定。

说明

TextHeight 方法确定显示 cText 所需要的垂直空间。所返回的高度包括字符串上下的前导空间，因此可以使用返回的高度来计算和放置表单上的多个文本行。如果 cText 中包含嵌入的回车符，那么 TextHeight 方法将返回文本行的累计高度，包括每行上下的前导空间。


请参阅

FontSize 属性，ScaleMode 属性，TextWidth 方法


TextWidth 方法

请参阅

返回以当前字体显示的文本字符串宽度。

应用于

表单，_SCREEN

语法

[nWidth =] [FormSet.]Object.TextWidth (cText)

参数

nWidth

返回一个数值，该数值指定文本字符串的宽度。

cText

指定要确定高度的字符串。宽度的度量单位由表单的 ScaleMode 属性指定。

说明

TextWidth 方法用来确定显示 cText 所需要的水平空间。


请参阅

FontSize 属性，ScaleMode 属性，TextHeight 方法


THIS 对象引用

请参阅	示例

在创建对象之前，提供对它的引用。

语法

THIS.PropertyName | ObjectName

参数

PropertyName

指定类的属性。

ObjectName

指定类中的对象。

说明

THIS 允许在一个类定义中引用属性或对象。类定义块中的方法可以使用 THIS 来指定类创建时存在的属性或对象。

因为对象的多个实例共享同样的方法代码，因此 THIS 总是指代码正在执行的实例。如果存在一个对象的多个实例，并且调用了对象的方法，THIS 会引用正确的对象。


*在下面的示例中，基于 Form 类创建了一个子类 MyForm。
* 创建了名为 ChangeBackColor 的方法。
* ChangeBackColor 使用 THIS 引用 MyForm。

DEFINE CLASS MyForm AS FORM

CAPTION = This Form

HEIGHT = 15

WIDTH = 20

PROCEDURE ChangeBackColor

PARAMETER NewColor

THIS.BACKCOLOR = NewColor

ENDPROC

ENDDEFINE


请参阅

THISFORM，THISFORMSET


THISFORM 对象引用

请参阅

在一个表单创建之前，提供对它的引用。

语法

THISFORM.PropertyName | ObjectName

参数

PropertyName

指定表单的属性。

ObjectName

指定表单中的对象。

说明

THISFORM 提供了在方法中对对象所在表单或表单属性的引用。THISFORM 允许引用表单上的对象或表单的属性，而不需要使用多个 Parent 属性。


请参阅

THIS，THISFORMSET


THISFORMSET 对象引用

请参阅

在一个表单集创建之前，提供对它的引用。

语法

THISFORMSET.PropertyName | ObjectName

参数

PropertyName

指定表单集的属性。

ObjectName

指定表单集中的对象。

说明

THISFORMSET 提供了在方法中对对象所在表单集或表单集属性的引用。THISFORMSET 允许引用表单集上的对象或表单集的属性，而不需要使用多个 Parent 属性。


请参阅

THIS，THISFORM


_THROTTLE 系统内存变量

请参阅

当跟踪窗口打开时，指定程序的执行速度。

语法

_THROTTLE = nSeconds

参数

nSeconds

指定执行每个程序行所间隔的秒数。初始默认值是 0，程序行的执行没有停顿。nSeconds 可以从 0 到 5.5 秒。例如，如果 nSeconds 是 0.5 秒，那么每执行一行程序行后都要延迟 1/2 秒。

说明

跟踪窗口是 Visual FoxPro 中的调试工具，它在执行时显示程序的源代码。跟踪窗口突出显示每一正在执行的程序行。THROTTLE 的数值决定程序行之间的执行间隔。

附注

要想延迟程序的执行，跟踪窗口“程序”菜单的“断续跟踪”选项必须为打开。


请参阅

SET DEBUG，SET STEP


TIME( ) 函数

请参阅

以 24 小时制、8 位字符串（时：分：秒）格式返回当前系统时间。

语法

TIME([nExpression])

参数

nExpression

如果含有 nExpression 变量，可以返回包括百分之一秒的时间。数值表达式 nExpression 可以是任何值，然而，实际的最大精度值是 1/18 秒。使用 SECONDS( ) 函数可获得更高的精度。

返回值类型

字符型


请参阅

CTOT( )，DATE( )，DATETIME( )，DTOT( )，HOUR( )，SEC( )，SECONDS( )，SET SECONDS，SYS(2) - 自午夜开始以秒计的时间


Timer（计时器）控制

请参阅	属性	事件	方法

创建以一定时间间隔执行代码的计时器。

语法

Timer

说明

计时器控制对用户是不可见的，它对于后台处理很有用。计时器的典型应用是检查系统时钟，决定是否到了某个程序或应用程序运行的时间。

有关创建计时器的详细内容，请参阅初始化计时器控制主题和《开发指南》的第十一章“使用控制”。


 属性

BaseClass	Class	ClassLibrary
Comment	Enabled	Height
Interval	Left	Name
Parent	ParentClass	ReadObject
Tag	Top	Width


 事件

Destroy	Error	Init
Timer


 方法

CloneObject	ReadExpression	ReadMethod
Reset	SaveAsClass	WriteExpression
WriteMethod


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS，表单设计器


Timer 事件

请参阅

当经过 Interval 属性中指定的毫秒数时，此事件发生。

应用于

计时器

语法

PROCEDURE Timer.Timer
[LPARAMETERS nIndex]

参数

nIndex

唯一标识控制数组中的一个控制。


请参阅

Interval 属性，Reset 方法


ToolBar（工具栏）对象

请参阅	属性	事件	方法	示例

创建自定义工具栏。

语法

ToolBar

说明

使用工具栏对象可以为应用程序创建工具栏。

下表列举了自定义工具栏的属性：

 •	   工具栏总是位于顶部。

 •	   当被移动到任何 Visual FoxPro 主窗口边界时，工具栏可以自动停放。

 •	   当改变工具栏的尺寸时，控制也相应做调整。

 •	   在工具栏任何没有控制的区域单击、拖动可以移动工具栏。

 •	   工具栏中的多数控制在被选中时，不能接受焦点。

 •	   工具栏中控制的访问键是无效的。

虽然工具栏中可以放入任何控制，但是象列表框这样的控制可能太大，以致不能合适地安放在已停放的工具栏中。可以编程方式在停放工具栏时将这些控制移去，并用同样较小的控制或者不同的控制来代替。

有关创建工具栏的详细内容，请参阅定义工具栏类主题和《开发指南》的第十三章“创建自定义工具栏”。


 属性

ActiveControl	BackColor	BaseClass
Caption	Class	ClassLibrary
Comment	ControlBox	ControlCount
Controls	DataSession	DataSessionID
Docked	DockPosition	Enabled
ForeColor	Height	HelpContextID
KeyPreview	Left	MousePointer
Movable	Name	Parent
ParentClass	ReadObject	ScaleMode
ShowTips	Sizable	Top
Visible	Width


 事件

Activate	AfterDock	BeforeDock
Click	DblClick	Deactivate
Destroy	DragDrop	DragOver
Error	Init	MouseDown
MouseMove	MouseUp	Moved
Paint	Resize	UnDock


 方法

AddObject	CloneObject	Dock
Hide	Move	Refresh
RemoveObject	SaveAsClass	SetAll
Show	ZOrder


*下面的示例演示了如何从工具栏类中创建一个工具栏。

*当调整工具栏的大小时，Visual FoxPro 会重新
* 安排按钮。当创建一个 TodBar 对象时，
*  Visual FoxPro 自动按添加进类定义中的次序放置这些控制，
* 而忽略控制的 Top 和 Left 属性。

PUBLIC tbrDesktop

tbrDesktop = CREATEOBJ('mytoolbar')

tbrDesktop.SHOW

DEFINE CLASS myToolBar    AS Toolbar

ADD OBJECT btnBold    AS CommandButton

ADD OBJECT sep1	       AS Separator

ADD OBJECT btnItalics AS CommandButton

btnBold.HEIGHT = 20

btnBold.WIDTH = 50

btnBold.Caption = "Bold"

btnItalics.HEIGHT = 20

btnItalics.WIDTH = 50

btnItalics.Caption = "Italic"

btnItalics.FontBold = .F.

LEFT	= 1

TOP = 1

WIDTH = 25

CAPTION = "Desktop Attributes"

PROCEDURE Activate

this.btnBold.FontBold = _SCREEN.FONTBOLD

this.btnItalics.FontItalic = _SCREEN.FONTITALIC

ENDPROC

PROCEDURE btnBold.CLICK

_SCREEN.FONTBOLD = !_SCREEN.FONTBOLD

This.FontBold =_SCREEN.FONTBOLD

ENDPROC

PROCEDURE btnItalics.CLICK

_SCREEN.FONTITALIC = !_SCREEN.FONTITALIC

This.FontItalic = _SCREEN.FONTITALIC

ENDPROC

ENDDEFINE


请参阅

CREATE CLASS，CREATE FORM，DEFINE CLASS，分隔符对象


ToolTipText 属性

请参阅

为一个控制指定作为“工具提示”出现的文本。

应用于

复选框，组合框，命令按钮，编辑框，表格，列表框，选项按钮，形状，微调，文本框

语法

Control.ToolTipText = cText

设置

cText

指定“工具提示”所使用的文本。

说明

设计和运行时可用。

只有当包含控制的表单或工具栏的 ShowTips 属性设置为“真”(.T.) 时，才可以设置 ToolTipText 属性。


请参阅

ShowTips 属性


Top 属性

请参阅	示例

对于控制，指定相对其父对象最顶端的边缘所在位置；对于表单对象，确定表单顶端边缘与 Visual FoxPro 主窗口的距离。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

Object.Top[ = nValue]

设置

nValue

对于控制，指定对象的上边缘和父对象的上边缘之间的距离。

对于表单对象，确定表单的上边缘和 Visual FoxPro 主窗口之间的距离。

说明

设计和运行时可用。

可以使用 Left，Top，Height 和 Width 属性改变对象的外部特征，例如移动对象和调整对象大小。

附注

当用于一个列对象中的控制时，Top 属性是只读的。

Top 属性的度量单位由控制的 ScaleMode 属性设置值决定。


*下面的示例演示了如何使用 Top 属性在表单中
* 放置控制。用 Add Object 方法向表单中加入一个
* 线条控制和三个命令按钮，
* Top 属性指定表单中每个控制的垂直位置。

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  &&  废止控制菜单框

frmMyForm.AddObject('shpLine','Line')  && 向表单中加入一个线条控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && “Up”命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  &&  “Down”命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && “Quit”命令按钮

frmMyForm.shpLine.Visible = .T.  &&  使线条控制可见

frmMyForm.shpLine.Top = 20  && 指定线条控制行

frmMyForm.shpLine.Left = 125  &&  指定线条控制列

frmMyForm.cmdCmndBtn1.Visible =.T.  && “Up”命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && “Down”命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && “Quit”命令按钮可见

frmMyForm.SHOW  &&  显示表单

READ EVENTS  && 开始事件处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  &&  创建命令按钮

Caption = 'Slant \<Up'  &&  命令按钮的标题

Left = 50  &&  命令按钮的列

Top = 100  && 命令按钮的行

Height = 25  &&  命令按钮的高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  &&  隐藏线条控制

ThisForm.shpLine.LineSlant ='/'  && 向上倾斜

ThisForm.shpLine.Visible = .T.  &&  显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮上的标题

Left = 200  &&  命令按钮的列

Top = 100  && 命令按钮的行

Height = 25  && 命令按钮的高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='\'  && 向下倾斜

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  &&  命令按钮的标题

Cancel = .T.  &&  默认的取消命令按钮(ESC)

Left = 125  && 命令按钮的列

Top = 150  && 命令按钮的行

Height = 25  &&  命令按钮的高度

PROCEDURE Click

CLEAR EVENTS  &&  停止事件处理，关闭表单

ENDDEFINE


请参阅

Left 属性，Height 属性，Move 方法，ScaleMode 属性，Width 属性


TopIndex 属性

请参阅

指定出现在列表最顶端位置的列表项。

应用于

组合框，列表框

语法

Control.TopIndex[ = nIndex]

设置

nIndex

指定出现在列表最上部的数据项的索引。

说明

设计时不可用，运行时可读写。

数据项的索引反映了它在列表中的位置。该索引相对于列表中的其他数据项，并且可以更改。


请参阅

AddItem 方法，Clear 方法，List 属性，ListCount 属性，MultiSelect 属性，NewItemID 属性，RemoveItem 方法，Selected 属性，TopItemID 属性


TopItemID 属性

请参阅

指定出现在列表最上部的数据项标识。

应用于

组合框，列表框

语法

Control.TopIItemID[ = nItemID]

设置

nItemID

指定出现在列表最上部的数据项标识。

说明

设计时不可用，运行时可读写。

默认的 TopItemID 属性设置值为 1，即列表中的第一项。


请参阅

AddItem 方法，Clear 方法，List 属性，ListCount 属性，MultiSelect 属性，NewItemID 属性，RemoveItem 方法，Selected 属性，TopIndex 属性


TOTAL 命令

请参阅

计算当前选定表中数值字段的总和。

语法

TOTAL TO TableName ON FieldName
[FIELDS FieldNameList]
[Scope]
[FOR lExpression1]
[WHILE lExpression2]
[NOOPTIMIZE]

参数

TableName

指定存放计算结果的表的名称。如果指定的表不存在，Visual FoxPro 将创建它；如果表存在，并且 SET SAFETY 为 ON，则 Visual FoxPro 将询问是否要改写这个已存在的表。如果 SET SAFETY 为 OFF，则不做任何提示直接改写输出表。

FieldName

指定总计时作为分组依据的字段。表必须以该字段排序，或者打开的索引或索引标识必须以该字段作为其关键字表达式。

FIELDS FieldNameList

指定要总计的字段。列表中的字段名用逗号分隔。如果省略了 FIELDS 子句，默认合计所有的数值型字段。

Scope

指定要合计的记录范围。范围子句有：ALL，NEXT nRecords，Record nRecordNumber 和 REST。有关范围子句的详细内容，请参阅 Scope 子句主题或者《开发指南》的第二章“语言概述”。

TOTAL 命令默认的范围是全部 (ALL) 记录。

FOR lExpression1

指定一个条件，只有满足该逻辑条件 lExpression1 的记录包含在总计中。

如果 lExpression1 是可优化表达式，那么 Rushmore 可以优化 TOTAL ... FOR 创建的查询。为了达到更好的性能，请在 FOR 子句中使用可优化表达式。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题或者《开发指南》第十七章“优化应用程序”。

WHILE lExpression2

指定一个条件，只要逻辑表达式 lExpression2 计算为“真”(.T.) 时，当前表中的记录就包含在总计中。

NOOPTIMIZE

关闭 TOTAL 的 Rushmore 优化。有关详细内容，请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题或者《开发指南》的第十七章“优化应用程序”。

说明

要使用此命令，当前工作区中的表必须经过排序或索引。对于具有相同字段值或索引关键字值的各组记录，将分别计算其总计值。总计结果放入另一个表的记录中，同时在此表中还将对这些字段值或索引关键字值创建一条记录。

如果第二个表中数值字段的宽度不足以放置总计值，将会发生数值溢出错误。当发生数值溢出错误时，Visual FoxPro 保存总计值最主要的部分：

 •	   小数位被截断，即对总计值余下小数位进行圆整。

 •	   如果总计值仍然不能放下，例如包含七位以上的数字，这时将采用科学计数法表示。

 •	   最后，用星号代替字段的内容。


请参阅

AVERAGE，CALCULATE，INDEX，SORT，SUM


TRANSFORM( ) 函数

请参阅	示例

由字符表达式或数值表达式返回字符串，其格式由 @ ... SAY 可以使用的 PICTURE 或 FUNCTION 代码确定。

语法

TRANSFORM(eExpression, cFormatCodes)

参数

eExpression

指定要进行格式编排的数值或字符表达式。

cFormatCodes

指定一个或多个 PICTURE 或 FUNCTION 代码，决定如何对表达式进行格式编排。有关可用的 PICTURE 和 FUNCTION 代码的详细内容，请参阅 @ ... GET - 文本框 和 @ ... SAY 主题。

返回值类型

字符型


STORE 12.34 TO gnPrice

CLEAR

? TRANSFORM(gnPrice, '$$$$.99')  && 显示 $12.34


请参阅

@ ... GET - 文本框，@ ... SAY


_TRANSPORT 系统内存变量

请参阅

在不同的 FoxPro 平台和版本之间转换表单、标签和报表时，指定需要运行的程序。包含该变量是为了提供向后兼容性，可使用 Visual FoxPro 转换器代替。

语法

_TRANSPORT = ProgramName

参数

ProgramName

指定一个转换程序。如果该程序不在当前默认的目录下，必须在程序名中加入路径。当试图打开在早期 FoxPro 版本或不同的 FoxPro 平台上创建的表单标签或报表时，就需要运行 _TRANSPORT 变量指定的程序。

也可以在 Visual FoxPro 配置文件中指定一个转换程序，需要加入下面一行命令：

_TRANSPORT = ProgramName

如果编写自己的转换程序，则该程序必须接受一个参数  要转换的报表、标签或表单的名称。转换程序必须返回一个参数，该参数可以是下列值：

返回代码	意义
1	转换成功
2	打开但没有转换
3	取消转换
有关转换表单、标签和报表的详细内容，请参阅《安装指南》第五章“Microsoft 支持服务”。

说明

在 FoxPro 的早期版本中，默认情况下，_TRANSPORT 包含 TRANSPORT.PRG 文件。您可以用自己的转换文件代替 TRANSPRT.PRG。如果将 TRANSPRT.PRG 改名或者将其移到另一个目录上，那么必须在 _TRANSPORT 中存入新文件名和/或该文件的目录。


请参阅

CREATE LABEL，CREATE REPORT，CREATE SCREEN


_TRIGGERLEVEL 系统内存变量

请参阅

包含一个表示当前触发器过程嵌套数目的只读数字值。

语法

_TRIGGERLEVEL = nExpression

参数

nExpression

包含当前触发器过程嵌套数目，当初始的触发器过程执行时，_TRIGGERLEVEL 为 1；如果一个触发器过程引发了另一个触发器过程，_TRLGGERLEVEL 就增加 1；如果没有执行触发器过程，_TRIGGERLEVEL 为 0。

说明

使用 CREATE TRIGGER 可以创建一个表的“删除”、“插入”或“更新”触发器。可以使用 APPEND PROCEDURES 和 MODIFY PROCEDURES 建立每个触发器的存储程序，当触发“删除”、“插入”或“更新”触发器时执行。

_TRIGGERLEVEL 所包含的数字值是只读的。忽略用 STORE 或“=”命令给 _TRIGGERLEVEL 所赋的值。


请参阅

APPEND PROCEDURES，CREATE TRIGGER，MODIFY PROCEDURE


TRIM( ) 函数

请参阅	示例

返回删除全部后缀空格后的指定字符表达式。

语法

TRIM(cExpression)

参数

cExpression

指定字符表达式，TRIM( ) 函数删除此字符表达式中的全部后缀空格。

返回值类型

字符型

说明

TRIM( ) 函数等同于 RTRIM( ) 函数。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  &&  打开“Customer”表

CLEAR

? 'The contact for '+ TRIM(company) + ' is ' + contact


请参阅

ALLTRIM( )，LTRIM( )，RTRIM( )


TTOC( ) 函数

请参阅	示例

从日期时间表达式中返回一个字符值。

语法

TTOC(tExpression [, 1])

参数

tExpression

指定一个日期时间表达式，TTOC( ) 函数从该表达式中返回一个字符值。tExpression 必须是一个合法的日期时间值。如果 tExpression 中只包含时间，Visual FoxPro 把默认的日期“12/30/1899”添加到 tExpression 中；如果 tExpression 中只包含日期，Visual FoxPro 将默认的午夜时间“12:00:00A.M.”添加到 tExpression 中。

1

指定 TTOC( ) 函数按适合于进行索引的格式返回一个字符串。该字符串有 14 个字符，格式为“yyyy:mm:dd:hh:mm:ss”，此格式不受 SET CENTURY 或 SET SECONDS 中当前设置的影响。

返回值类型

字符型


*下面的示例创建了一个名为 gtDtime 的日期时间型内存变量。
*  TYPE( ) 函数显示“T”，表示该内存变量是日期时间型。
* 。用TTOC( ) 函数把该内存变量转换成字符型，
* 现在 TYPE( ) 函数显示“C”，
* 表示转换后该内存变量是字符型。

STORE DATETIME( ) TO gtDtime  && 创建一个“日期时间”类型的内存变量

CLEAR

? "gtDtime is type: "

?? TYPE('gtDtime')  && 显示“T”，“日期时间”类型值

gtDtime = TTOC(gtDtime)	  &&  将“gtDtime”转换为字符值

? "gtDtime is now type: "

?? TYPE('gtDtime')  && 此显示“C”，字符类型值


请参阅

DATE( )，DATETIME( )，HOUR( )，MINUTE( )，SEC( )，SECONDS( )，SET CENTURY，SET SECONDS，TIME( )，TTOD( )


TTOD( ) 函数

请参阅	示例

从日期时间表达式中返回一个日期值。

语法

TTOD(tExpression)

参数

tExpression

指定一个日期时间表达式，TTOD( ) 函数从该表达式中返回一个日期。tExpression 必须是一个合法的日期时间值。如果 tExpression 只包含时间，Visual FoxPro 将默认的日期“12/30/1899”添加到 tExpression 中，并返回这个默认的日期。

返回值类型

日期型


*下面的示例创建了一个名为 gtDtime 的日期时间型内存变量，
*  TYPE( ) 函数显示“T”，表示该内存变量是日期时间型。
* 用 TTOD( ) 函数把该内存变量转换成日期型，
* 现在 TYPE( ) 函数显示“D”，
* 表示转换后该内存变量是日期型。

STORE DATETIME( ) TO gtDtime  && 创建一个“日期时间”类型的内存变量

CLEAR

? "gtDtime is type: "

?? TYPE('gtDtime')  && 显示“T”， 日期时间 类型值

gtDtime = TTOD(gtDtime)	  && 将“gtDtime”转换成日期值

? "gtDtime is now type: "

?? TYPE('gtDtime')  &&  显示“D”，日期类型值。


请参阅

DATE( )，DATETIME( )，HOUR( )，MINUTE( )，SEC( )，SECONDS( )，SET CENTURY，SET SECONDS，TIME( )，TTOC( )


TXNLEVEL( ) 函数

请参阅	示例

返回一个表明当前事务级别的数值。

语法

TXNLEVEL( )

返回值类型

数值型

说明

使用 BEGIN TRANSACTION 可以创建一个事务。如果在进程中有另一个事务同时使用 BEGIN TRANSACTION 命令，将产生事务的嵌套。事务可按这种方式嵌套 5 层，使用 TXNLEVEL( ) 函数可确定当前事务的层次。

TXNLEVEL( ) 函数返回 0 到 5 之间的一个值。如果进程中没有事务，TXNLEVEL( ) 返回 0。


*在下面的示例中，首先打开 testdata 数据库中的 customer 表，
* 使用 BEGIN TRANSACTION 开始一个事务处理，
* 调用 TXNLEVEL( ) 函数来显示事务处理层次 (1)。
* 然后，再使用 BEGIN TRANSACTION 开始一个嵌套事务处理，
* 此时 TXNLEVEL( ) 函数显示当前事务处理层次为 2。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开“Ｃustomer”表

CLEAR

BEGIN TRANSACTION

? 'Transaction level '

?? TXNLEVEL( )

BEGIN TRANSACTION

? 'Transaction level '

?? TXNLEVEL( )

END TRANSACTION

END TRANSACTION


请参阅

BEGIN TRANSACTION，END TRANSACTION，ROLLBACK


TXTWIDTH( ) 函数

请参阅

按照字体平均字符宽度返回字符表达式的长度。

语法

TXTWIDTH(cExpression [, cFontName, nFontSize [, cFontStyle]])

参数

cExpression

指定需要 TXTWIDTH( ) 函数返回其长度的字符表达式。如果只有 cExpression 参数，则按 Visual FoxPro 主窗口或活动输出窗口中的当前字体返回字符表达式长度。使用非比例字体总是返回与 cExpression 参数中字符数目相等的一个数值。

在 FoxPro for MS-DOS 中，仅有一种字体可用，TXTWIDTH( ) 函数总是返回 cExpression 中的字符数目。

包含可选参数 cFontName、nFontSize 和 cFontStyle，可以确定具有特殊的字体、磅值和字形的字符表达式长度，在 FoxPro for MS-DOS 中将忽略这些选项。

cFontName

指定字体的名称。包含 cFontName 参数可以返回特殊字体的字符表达式长度。

nFontSize

指定一个对应于字体磅值的数值。包含 nFontSize 参数可以返回具有特殊磅值的字符表达式长度。

cFontStyle

指定字符表达式的特定字形。cFontStyle 是由一个字符或一组字符指定的字形代码。如果不包含 cFontStyle 参数，则使用常规字形。下面是每种字形的字符代码：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro）
T	透明
U	下划线
可以使用多个字符指定字形的组合。例如，“BI”指定粗斜体。

下面的命令用“Courier”普通 24 点阵字体，在 Visual FoxPro 主窗口水平居中地显示一段信息。

@ 25,(WCOLS( )-TXTWIDTH('Hello!','Courier ',24)* ;

FONTMETRIC(6,'Courier ',24)/FONTMETRIC(6))/2  ;

SAY 'Hello!' FONT 'Courier ',24

返回值类型

数值型

说明

TXTWIDTH( ) 函数按照指定字体的平均字符宽度（字体的平均字符宽度称为“foxel”），返回字符表达式 cExpression 中包含的字符数目。使用 FONTMETRIC(6) 可确定字体平均字符宽度。

如果在 TXTWIDTH( ) 中不包含字体参数，并且在调用 TXTWIDTH( ) 函数时 Visual FoxPro 主窗口是输出窗口，TXTWIDTH( ) 函数的返回值就由 Visual FoxPro 主窗口中的当前字体决定。如果输出到用户自定义窗口中，返回值就由用户自定义窗口的当前字体决定。


请参阅

FONTMETRIC( )，GETFONT( )，LEN( )，SYSMETRIC( )，WFONT( )


TYPE 命令

请参阅

显示文件的内容。

语法

TYPE FileName1
[AUTO]
[WRAP]
[TO PRINTER [PROMPT] | TO FILE FileName2]
[NUMBER]

参数

FileName1

指定文件的名称，该文件名必须包含扩展名。

AUTO

自动缩进。当包含 WRAP 时，对于每个段落中换行的文本，TYPE 自动缩进与段落第一行相等的距离。例如，

 •	   当段落以一个制表位开始，换行的文本与该制表位的位置对齐。

 •	   当段落以数字（或其他文本）开始，其后接制表位和文本时，换行的文本与该制表位的位置对齐。

 •	   当段落的第一行以空格缩进时，每一换行的文本都缩进与第一行缩进相同的距离。

WRAP

允许自动换行，这样，不能放在行末尾的太长的单词将自动移到下一行。

TO PRINTER [PROMPT]

输出到打印机。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，可以加入可选的 PROMPT 子句，在开始打印时显示一个打印对话框。PROMPT 关键字应该直接放在 TO PRINTER 后面。

在 FoxPro for MS-DOS 中，忽略 PROMPT 参数。

TO FILE FileName2

输出到文件 FileName2 中。

NUMBER

在输出中的每行开始加一个行号。

说明

TYPE 命令显示文件的内容。这些显示内容可以输出到 Visual FoxPro 主窗口、活动的用户自定义窗口、打印机或另一个文件中。

当 SET HEADINGS 为 ON 时，Visual FoxPro 在 TYPE 命令输出的开头插入一个换页符、文件的路径名称以及日期；如果 SET HEADINGS 为 OFF，则不包含以上内容。

在 FoxPro for MS-DOS 中，如果已加载了打印机驱动程序，并且 TYPE 命令的内容输出到文件或打印机中，那么 TYPE 命令使用打印机驱动程序的设置来显示文件内容。


请参阅

SET HEADINGS


TYPE( ) 函数

请参阅	示例

计算字符表达式，并返回其内容的数据类型。

语法

TYPE(cExpression)

参数

cExpression

指定备注型字段的名称或字符表达式，TYPE( ) 函数将对其中内容求值，并返回适当的数据类型。

返回值类型

字符型

说明

下表列出了 TYPE( ) 函数所返回的字符值及其对应的数据类型：

数据类型	返回的字符
字符型	C
数值型(或者整数、单精度浮点数和双精度浮点数)	N
货币型	Y
日期型	D
日期时间型	T
逻辑型	L
备注型	M
对象型	O
通用型	G
未定义的表达式类型	U


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  &&打开“Customer”表

CLEAR

? TYPE('customer.contact')  &&显示“C”

? TYPE('(12 * 3) + 4')  &&显示“N”

? TYPE('DATE( )')  && 显示“D”

? TYPE('.F. OR .T.')  && 显示“L”

? TYPE('ANSWER=42')  && 显示“U”

? TYPE('$19.99')  && 显示“Y”


请参阅

EVALUATE( )


UIEnable 事件

请参阅

无论页面是否激活，包含在该页面内的所有对象都能发生 UIEnable 事件。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项组，页框，形状，微调，文本框

语法

PROCEDURE Object.UIEnable
[LPARAMETERS nIndex, lEnabled]
 — 或者 —
PROCEDURE Object.UIEnable
LPARAMETERS lEnabled

参数

nIndex

存放一个编号，该编号标识控制数组中的一个控制。只有当一个控制在一个控制数组中时才传递 nIndex 参数。

lEnabled

存放一个逻辑值，该逻辑值指定包含对象的页面是否激活。如果 lEnabled 是“真”(.T.)，则包含对象的页面是激活的（成为活动页面），如果 lEnabled 是“假”(.F.)，该页面是非激活的（成为非活动的页面）。

说明

使用 UIEnable 事件可以指定在激活页面或使页面不活动时，包含在页面中的对象或控制发生的行为。

当表单初始激活时，页面对象的 UIEnable 事件并不发生。只有当页面是以编程方式或交互方式激活或变成不活动时，才能发生 UIEnable 事件。


请参阅

Activate 事件，Deactivate 事件


UnDock 事件

请参阅

从停放位置拖动工具栏时发生。

应用于

工具栏

语法

PROCEDURE ToolBar.Undock
[LPARAMETERS nIndex]

参数

nIndex

用以唯一标识控制数组中的一个控制。


请参阅

AfterDock 事件，BeforeDock 事件，Dock 方法


UNIQUE( ) 函数

请参阅	示例

当指定的索引标识或索引文件是用 UNIQUE 关键字或 SET UNIQUE ON 命令创建时，返回“真”(.T.)；否则，返回“假”(.F.)。

语法

UNIQUE([CDXFileName,] nIndexNumber [, nWorkArea | cTableAlias])

参数

CDXFileName

指定复合索引文件名，UNIQUE( ) 函数返回该文件的 UNIQUE 状态。

nIndexNumber

指定 .CDX 复合索引文件标识或打开的 .IDX 单项索引文件的索引位置，UNIQUE( ) 函数返回以上两种文件的 UNIQUE 状态。

nWorkArea

指定表的工作区，UNIQUE( ) 函数返回该表的 .CDX 复合索引文件标识或打开的 .IDX 单项索引文件的 UNIQUE 状态。

cTableAlias

指定表的别名，UNIQUE( ) 函数返回该表的 .CDX 复合索引文件标识或打开的 .IDX 单项索引文件的 UNIQUE 状态。

返回值类型

逻辑型

说明

包含此函数是为了提供与 dBASE 的兼容性。

如果省略了可选择的参数，UNIQUE( ) 函数将返回主控索引标识或主控索引文件的 UNIQUE 状态。如果主控索引标识或主控索引文件无效（表以自然记录序号排列），UNIQUE( ) 函数将返回“假”(.F.)。


*下面的示例打开 testdata 数据库中的 customer 表。使用
* FOR ... ENDFOR 创建一个循环，在该循环内部显示每个
* 标识名的 UNIQUE 状态。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开 customer 表

CLEAR

FOR nCount = 1 TO 254

IF !EMPTY(TAG(nCount))  && 检查索引中的标识

? UNIQUE(nCount)	  && UNIQUE 状态

ELSE

EXIT  && 显示完所有的标识后退出循环

ENDIF

ENDFOR


请参阅

INDEX，SET UNIQUE


_UNIX 系统内存变量

请参阅

在使用 FoxPro for UNIX 时为“真”(.T.)。

语法

_UNIX = lExpression

说明

如果正在使用 FoxPro for UNIX，_UNIX 系统内存变量为“真”(.T.)。如果使用的不是 FoxPro for UNIX 版本（Visual FoxPro，FoxPro For Windows，FoxPro for Macintosh 或 FoxPro for MS-DOS），_UNIX 变量为“假” (.F.)。

包含在 _UNIX 变量中的值不能用 STORE 或 = 命令改变。


请参阅

_DOS，_MAC，VERSION( )，_WINDOWS


Unload 事件

请参阅

在对象被释放时发生。

应用于

表单，表单集

语法

PROCEDURE Object.Unload
[LPARAMETERS nIndex]

参数

nIndex

用以唯一标识控制数组中的一个控制。

说明

Unload 事件是在释放表单集或表单之前发生的最后一个事件。Unload 事件发生在 Destroy 事件和所有包含的对象被释放之后。

这一事件的发生取决于对象的类型。

 •	   当释放引用表单的对象变量或该表单的表单集时，表单对象以代码形式释放。

 •	   当释放引用表单集的对象变量时，表单集对象以代码形式释放。

如果一个容器对象，例如表单集，包含多个对象，则该容器对象的 Unload 事件发生在其所包含的对象的 Unload 事件之后。例如，一个表单集中包含一个表单，该表单中包含一个控制（一个命令按钮），释放的顺序如下：

1.	表单集的 Destroy 事件

2.	表单的 Destroy 事件

3.	命令按钮的 Destroy 事件

4.	表单的 Unload 事件

5.	表单集的 Unload 事件


请参阅

Destroy 事件


UNLOCK 命令

请参阅	示例

对一个表中的单条记录、多条记录或者文件解锁，或者对所有打开的表解除所有记录锁和文件锁。

语法

UNLOCK
[RECORD nRecordNumber]
[IN nWorkArea | cTableAlias]
[ALL]

参数

RECORD nRecordNumber

解除第 nRecordNumber 个记录上的记录锁。可以令 nRecordNumber 为 0，来解除 LOCK(0) 或 RLOCK(0) 锁定的表头。

对具有文件锁的表执行 UNLOCK RECORD nRecorNumber 命令，来试图解除单条记录的锁定，将解除该文件锁。

IN nWorkArea | cTableAlias

从指定工作区内的表中解除记录锁或文件锁。nWorkArea 指定工作区号，而 cTableAlias 指定表的别名。如果不包含 nWorkArea 或 cTableAlias 参数，则 UNLOCK 从当前工作区内的表中解除记录锁或文件锁。

ALL

解除所有工作区中的全部记录锁和文件锁。

有关记录锁和文件锁，以及在网络上共享表的详细内容，请参阅《开发指南》的第十九章“共享访问程序设计”。

说明

记录锁和文件锁只能由加锁的用户从表中删除。UNLOCK 命令不能解除独占使用的表的锁定。

如果执行不带参数的 UNLOCK 命令，则解除当前工作区中表的记录锁或文件锁。

当两个表之间建立了关系时，从其中一个表解除记录锁或文件锁不会解除关联记录或文件的锁定。必须明确解除每个相关文件中的记录锁或文件锁，也可以用 UNLOCK ALL 命令解除任何相关表中的所有锁（当然也解除相关文件的锁定）。


CLOSE DATABASES

SET REPROCESS TO 3 AUTOMATIC

STORE '1,2,3,4' TO gcRecList	  && 锁定记录 1 到记录 4

gcOldExc = SET('EXCLUSIVE')	  && 保存 EXCLUSIVE 设置

SET EXCLUSIVE OFF  && 允许共享表

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

SELECT 0

USE employee  && 打开 Employee 表

? LOCK('1,2,3,4', 'customer')  && 锁定 Customer 表中的前 4 个记录

? RLOCK(gcRecList, 'employee') && 锁定 Employee 表中的前 4 个记录

UNLOCK IN customer

UNLOCK IN employee

SET EXCLUSIVE &gcOldExc  && 恢复原有的 EXCLUSIVE 设置。


请参阅

FLOCK( )，LOCK( )，RLOCK( )


UpClick 事件

请参阅

在用户单击控制的向上滚动箭头时发生。

应用于

组合框，列表框，微调

语法

PROCEDURE Control.UpClick
[LPARAMETERS nIndex]

参数

nIndex

用以唯一标识控制数组中的控制。


请参阅

DownClick 事件


UPDATE - SQL 命令

请参阅	示例

以新值更新表中的记录。

语法

UPDATE [DatabaseName1!]TableName1
SET Column_Name1 = eExpression1
[, Column_Name2 = eExpression2 ...]
WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

参数

UPDATE [DatabaseName1!]TableName1

TableName1 指定要更新记录的表。

DatabaseName1 指定包含表的非当前数据库名。如果包含表的数据库不是当前数据库，则应包含这个数据库名。在数据库名称与表名之间有一个感叹号 (!)。

SET Column_Name1 = eExpression1
[, Column_Name2 = eExpression2

指定要更新的列以及这些列的新值。如果省略了 WHERE 子句，在列中的每一行都用相同的值更新。

WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

指定要更新的记录。

FilterCondition 指定要更新的记录所符合的条件。可以根据需要加入多个筛选条件，条件之间用 AND 或 OR 操作符连接。也可以用 NOT 操作符对逻辑表达式的值取反，或者使用 EMPTY( ) 函数检查字段是否为空。

说明

UPDATE-SQL 命令只能用来更新单个表中的记录。

与 REPLACE 命令不同的是，在更新可共享访问的表中的多个记录时，UPDATE-SQL 命令使用了记录锁。在多用户的情况下，使用记录锁能减少记录竞争，但是可能会降低使用性能。为了达到最好的性能，请以独占使用方式打开表或用 FLOCK( ) 函数锁定表。


*下面的示例打开 testdata 中的 customer 表。首先用
* UPDATE-SQL 命令将 maxordamt 字段的值设为 0。当该字段中
* 的值大于 100 时，用 UPDATE-SQL 命令将该字段中的值减去 10。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer	  && 打开“customer”表

UPDATE customer SET maxordamt = 0

UPDATE customer;

SET maxordamt = maxordamt - 10;

WHERE maxordamt > 100


请参阅

DELETE - SQL，GATHER，INSERT - SQL，REPLACE，SCATTER


UPDATE 命令

请参阅

用其他表的数据更新当前选定工作区中打开的表。包含此命令是为了提供向后兼容性。可用 UPDATE - SQL 命令代替。

语法

UPDATE ON FieldName1 FROM FileName
REPLACE FieldName2 WITH eExpression1
[, FieldName3 WITH eExpression2 ...]
[RANDOM]

参数

ON FieldName1

指定控制更新的公共字段。若要使用 UPDATE 命令，当前表和作为更新数据来源的表必须有公共字段，当前表必须按公共字段的升序进行索引或排列。如果数据来源表也已经排序或索引，则可以提高更新速度。

FROM FileName

指定在别的工作区打开的表名，该表中包含更新数据。在当前工作区中打开的表将被 FileName 指定的表中的数据更新。

REPLACE FieldName2 WITH eExpression1 ...

用一个更新表达式 (eExpression1) 替换当前选定表的字段 (FieldName2)。可以包含一个字段列表（ FieldName2，FieldName3 等等）和相关的更新表达式（eExpression1，eExpression2 等等）来更新当前表中的多个字段。

更新表达式通常是更新表中的字段名。也可以是一般的表达式或常量。

注意：对于当前表中的每一个记录，可能在更新表中有多个匹配记录。如果有多个匹配记录，那么当前表中的记录要用每一个匹配记录更新。如果当前表中包含有多个匹配字段记录，则只更新第一个匹配记录。

RANDOM

如果更新表没有按升序索引或排序，就必须包含 RANDOM 关键字。

重要内容

如果更新表没有按升序索引或排序，并且在 UPDATE 命令中没有包含 RANDOM，那么可能会更新一个不想更新的记录。


请参阅

INDEX，SORT，UPDATE - SQL


UPDATED( ) 函数

请参阅

如果在当前 READ 期间交互地更改了数据，则该函数返回“真”(.T.)。包含此函数是为了提供向后兼容性。可用 InteractiveChange 或 ProgrammaticChange 事件代替。

语法

UPDATED( )

返回值类型

逻辑型

说明

如果改变了文本框、微调控制或编辑框中的数据，或者在复选框、透明按钮、命令按钮、选项按钮、列表或组合框中作了选择，则 UPDATE( ) 函数返回“真”(.T.)。

如果数据在程序内部更改（例如，使用 REPLACE 或 SHOW GETS），则 UPDATE( ) 函数返回“假”(.F.)。


请参阅

控制和对象，INKEY( )，InteractiveChange，ProgrammaticChange


UPPER( ) 函数

请参阅	示例

用大写字母返回指定的字符表达式。

语法

UPPER(cExpression)

参数

cExpression

指定字符表达式，UPPER( ) 函数将它转换成大写字母。

返回值类型

字符型

说明

在字符表达式中的每一个小写字母 (a-z) 在返回串中都将转换成大写字母，其他字符保持不变。


CLEAR

? UPPER('abcdefgh')  &&显示“ABCDEFGH”


请参阅

ISLOWER( )，ISUPPER( )，LOWER( )


USE 命令

请参阅	示例

打开一个表及其相关索引文件，或打开一个 SQL 视图。

语法

USE [TableName | SQLViewName | ?]
[IN nWorkArea | cTableAlias]
[AGAIN]
[NOREQUERY [nDataSessionNumber]]
[NODATA]
[INDEX IndexFileList | ?
[ORDER [nIndexNumber | IDXFileName
| [TAG] TagName [OF CDXFileName]
[ASCENDING | DESCENDING]]]]
[ALIAS cTableAlias]
[EXCLUSIVE]
[SHARED]
[NOUPDATE]

参数

TableName

指定要打开的表的名称。尽管在 Windows 95 和 Windows NT 中，文件名内的空格是有意义的，但要避免在 Visual FoxPro 中的 TableName 内使用空格符。

SQLViewName

指定位于当前数据库内要打开的 SQL 视图的名称。SQL 视图可以用 CREATE SQL VIEW 命令创建。

?

显示“使用”对话框，可以从对话框中选择要打开的表。

IN nWorkArea

指定要打开表所在的工作区。带有 IN 子句和工作区编号的 USE 命令，可以关闭指定工作区中的表。

在 IN 子句中 0 可作为工作区号，指定 0 可以在最低可用的工作区中打开表。例如，如果工作区 1 至工作区 10 中都有表打开，那么下面的命令将在工作区 11 中打开 customer 表：

USE customer IN 0

IN cTableAlias

指定在当前已打开表的工作区中打开表。打开表的别名用 cTableAlias 指定。

如果省略 nWorkArea 和 cTableAlias 参数，则在当前工作区中打开表。

AGAIN

若要同时在多个工作区中打开一个表，可以按以下方法操作：

 •	   选择另一个工作区，并且执行带有表名和 AGAIN 子句的 USE 命令。

 •	   执行带有表名和 AGAIN 子句的 USE 命令，并且用 IN 子句指定一个不同的工作区。

当在另一个工作区中再次打开一个表时，在新工作区中的表继承了原工作区中的表的属性。例如，如果一个表以只读或独占访问方式打开，然后又在另一个工作区中打开，那么在新的工作区中该表也以只读或独占访问方式打开。

当再次打开表时，如果没有打开索引，则使用为原表打开的索引文件。在再次打开该表的工作区中，设置索引序号为 0。

即使初始表没有打开索引，也可以在再次打开该表时打开索引。这将把初始表的索引序号设置成 0。

再次打开的表被赋予工作区的默认别名。在多个工作区中打开一个表时，每次可以包含一个别名，只要这些别名不重复就可以。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for MS-DOS 中，在另一个工作区中再次打开某个表并不占用额外的文件句柄。

NOREQUERY [nDataSessionNumber]

指定从远程 SQL 视图的数据不再下载。NOREQUERY 仅用于 SQL 视图，并且主要用在以 AGAIN 子句再次打开一个 SQL 视图的时候。包含 NOREQUERY 子句可以增加大型数据集合的操作性能，因为数据不需要再次下载。

nDataSessionNumber 可以指定在某一数据工作期中的远程 SQL 视图内的数据不被再次下载。如果省略了 nDataSessionNumber，则不下载在当前数据工作期中打开的视图。

有关 NOREQUERY 子句的详细内容，请参阅《开发指南》第八章“创建多表视图”。

NODATA

指定仅下载 SQL 视图的结构，不下载 SQL 视图的数据。NODATA 提供了确定 SQL 视图结构的最快捷方法。有关 NODATA 子句的详细内容，请参阅《开发指南》第八章“创建多表视图”。

INDEX IndexFileList

指定一组和表一起打开的索引。如果表具有结构复合索引文件，该索引文件自动与表一起打开。

IndexFileList 可以包含任何 .IDX 单项索引文件和 .CDX 复合索引文件的文件名。除非在索引文件列表中的 .IDX 和 .CDX 索引文件具有相同的文件名，否则无须为索引文件加扩展名。

在索引文件列表中的第一个索引文件是主控索引文件，该文件控制表中的记录如何访问和显示。然而，如果第一个索引文件是一个 .CDX 复合索引文件，则表中的记录按记录的物理顺序显示和访问。

INDEX ?

显示“打开”对话框，列出所有可供选择的索引文件。

ORDER [nIndexNumber]

指定一个主控的 .IDX 单项索引文件或 .CDX 复合索引文件标识，而不是使用在 IndexFileList 中指定的第一个索引文件或索引标识作为主控索引。

索引编号按如下方式：首先，编号 .IDX 索引文件，编号顺序是其出现在索引文件列表中的顺序；然后，对结构复合索引文件（如果存在）中的标识按其创建顺序编号；最后，对任何独立的复合索引文件的标识按其创建顺序编号。也可以使用 SET ORDER 来指定主控索引文件或标识。有关索引文件和标识编号的详细内容，请参阅 SET ORDER 主题。

如果 nIndexNumber 为 0，表中的记录将按物理记录顺序显示和访问，且各索引继续保持打开状态。尽管包含 ORDER 0 将以记录号顺序展现文件，但仍允许对已打开索引文件的更新。不加 nIndexNumber 的 ORDER 子句与 ORDER 0 意义相同。

ORDER [IDXFileName]

指定一个 .IDX 单项索引文件作为主控索引文件。

ORDER [TAG TagName] [OF CDXFileName]

指定 .CDX 复合索引文件中的主控标识。标识名可以是来自结构复合索引文件或任何其他打开的复合索引文件。如果在已打开的各复合索引文件中存在相同的标识名，则应包含 OF CDXFileName，并且指定含有所期望的标识的复合索引文件名。

ASCENDING

指定表中的记录按升序访问和显示。

DESCENDING

指定表中的记录按降序访问和显示。

包含 ASCENDING 或 DESCENDING 子句并不改变索引文件或标识，而仅仅改变记录显示和访问的顺序。

ALIAS cTableAlias

创建表的别名。可以在需要或支持别名的命令和函数中用别名来引用表。

打开表时，系统自动给它指定一个别名。如果不含 ALIAS 子句，那么就用该表的名称作为表的别名，但也可以包含 ALIAS 子句和一个新别名来为表创建一个不同的别名。在 Visual FoxPro 中，别名可以包含多达 254 个字母、数字或下划线，并且必须以字母或下划线开头。在其他 FoxPro 版本中，别名最多可包含 10 个字母、数字或下划线，并且必须以字母或下划线开头。

如果使用 AGAIN 子句在多个工作区中同时打开一个表，并且在每个工作区中打开该表时不指定别名，那么每次将自动赋给该表一个默认的别名。

指定的别名发生冲突时，也赋给该表一个默认的别名，例如，

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

ACTIVATE WINDOW View	  && 打开查看窗口

USE customer ALIAS orders IN 1  	&& 别名是 ORDERS

USE orders IN 3	  && 冲突，别名是 C

EXCLUSIVE

在网络上以独占使用方式打开表。有关表的独占使用的详细内容，请参阅 SET EXCLUSIVE 主题。

SHARED

在网络上以共享使用方式打开表。用 SHARED 子句打开一个表时，即使 EXCLUSIVE 设置成 ON ，此表也将以共享方式使用。

NOUPDATE

禁止更改表及其结构。

说明

如果不加表名执行 USE 命令，并且在当前工作区中已经打开了一个表文件，则关闭这个表。同样，在一个工作区中打开另一个表时，原来在该工作区中打开的表自动关闭。不能在同一个工作区中同时打开多个表。


*下面的示例在三个不同的工作区中打开三个表。然后打开查看
* 窗口查看打开表的具体位置，并显示每个表的别名。

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

ACTIVATE WINDOW View

USE customer IN 0  && 打开 customer 表

USE employee IN 0  && 打开 Employee 表

USE products IN 0  && 打开 Products 表


请参阅

CREATE，CREATE SQL VIEW，CREATE TABLE - SQL，DBF( )，INDEX，USED( )


USED( ) 函数

请参阅	示例

确定是否在指定工作区中打开了一个表。

语法

USED([nWorkArea | cTableAlias])

参数

nWorkArea | cTableAlias

指定表的工作区。nWorkArea 指定工作区编号，cTableAlias 指定表的别名。如果不包含 nWorkArea 或 cTableAlias，则检查当前选定工作区中是否有一个打开的表。

如果包含一个表别名，那么当该别名指定的表已在一个工作区中打开时，USED( ) 函数返回“真”(.T.)。

返回值类型

逻辑型

说明

如果在指定的工作区中打开了一个表，USED( ) 函数就返回“真”(.T.)；否则，USED( ) 函数返回“假” (.F.)。


CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

SELECT A

USE customer  && 打开“Customer”表

SELECT B

USE orders  && 打开 Order 表

SELECT C

USE employee  && 打开 Employee 表

? USED('A')  && 显示 .T.

? USED('B')  && 显示 .T.

? USED(4)  && 显示“.F.”


请参阅

ALIAS( )，SELECT( )


VAL( ) 函数

请参阅	示例

由数字组成的字符表达式返回数字值。

语法

VAL(cExpression)

参数

cExpression

指定字符表达式，该表达式最多由 16 位数字组成，若超过 16 位，则对其圆整。

返回值类型

数值型

说明

VAL( ) 函数从左到右返回字符表达式中的数字，直至遇到非数值型字符（忽略前面的空格）时为止。若字符表达式的第一个字符不是数字，也不是加、减号，则 VAL( ) 函数返回 0。

VAL( )函数可以将 Visual FoxPro 的 SYS( ) 函数返回的字符串转换为数值。


CLEAR

STORE '12' TO A

STORE '13' TO B

? VAL(A) + VAL(B)  && 显示 25.00

STORE '1.25E3' TO C

? 2 * VAL(C)  && 显示 2500.00


请参阅

SET DECIMALS，STR( )


Valid 事件

请参阅

在控制失去焦点之前发生。

应用于

复选框，组合框，命令按钮，命令组，编辑框，表格，列表框，选项按钮，选项组，微调，文本框

语法

PROCEDURE Control.Valid
[LPARAMETERS nIndex]

参数

nIndex

在控制数组中标识单个控制。

说明

若 Valid 事件返回“真” (.T.)，表明控制失去了焦点；若返回“假” (.F.)，则说明控制没有失去焦点。

Valid 事件也可以返回数值，对应于以下情况：

 •	   若返回 0，则控制没有失去焦点。

 •	   若返回正值，则该值指定焦点向前移动的控制数。例如，若 Valid 事件返回 1，则焦点由下一个控制得到。

 •	   若返回负值，则该值指定焦点向后移动的控制数。例如，若 Valid 事件返回 -1，则焦点由上一个控制得到。


请参阅

LostFocus 事件，When 事件


VALIDATE DATABASE 命令

请参阅	示例

保证当前数据库中表和索引位置的正确性。

语法

VALIDATE DATABASE
[RECOVER]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]

参数

RECOVER

显示一个对话框，该对话框允许您定位表和索引，这些表和索引不在被检查的数据库中。必须在命令窗口中发出 VALIDATE DATABASE RECOVER 命令，在程序中发布该命令会产生错误信息。

NOCONSOLE

不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出错误信息。

TO PRINTER [PROMPT]

将 VALIDATE DATABASE 命令的错误信息定向输出到打印机。

PROMPT 在打印前显示“打印”对话框，该关键字应紧跟在 TO PRINTER 之后。

TO FILE FileName

将错误信息定向输出到由 FileName 参数指定的文件，如果该文件已经存在，并且 SET SAFETY 值为 ON，系统会询问是否要覆盖该文件。

说明

VALIDATE DATABASE 命令确保数据库包含的表和索引处于正确位置，确保数据库中的表包含正确的字段，以及确定数据库中索引标识是否存在。

VALIDATE DATABASE 命令在当前数据库上操作。在发布 OPEN DATABASE 命令打开此数据库时，必须包含 EXCLUSIVE 关键字，以独占方式打开。


* 下面的示例打开 testdata 数据库并使用
* VALIDATE DATABASE 命令，以确定表和索引的位置
* 在数据库中是正确的。

CLOSE DATABASES

SET PATH TO (SYS(2004) + 'samples\data\')	  && 设置数据库路径

OPEN DATABASE testdata  && 打开 testdata 数据库

VALIDATE DATABASE


请参阅

CREATE DATABASE，MODIFY DATABASE，OPEN DATABASE，USE


Value 属性

请参阅

指定控制的当前状态。

应用于

复选框，组合框，命令组，编辑框，表格，列表框，选项按钮，选项组，微调，文本框

语法

[Form.]Control.Value[ = nSetting]

设置

nSetting

对于复选框控制，Value 属性的设置有：

设置	说明
0	（默认值）未选定。
1	选定。
2	灰色，该设置只在代码中可用。
对于命令组、组合框、编辑框、列表框、选项组和微调控制，Value 属性的设置为当前所选的字符或数值。

对于选项按钮控制，Value 属性的设置有：

设置	说明
真 (.T.)	表明选中按钮。
假 (.F.)	（默认值）表明没有选中按钮。
对于文本框控制，Value 属性可以是当前选定的字符串、数值型值、日期型值、日期时间型值、货币型值或逻辑型值，默认设置为字符串。

说明

设计和运行时可用。对于组合框和列表框控制，此属性只读。

对于表格控制，Value 属性只在表格有焦点时可用。

命令组或选项组控制的 Value 属性可用来确定组中引起事件的按钮。它被设置为整数，以表明组中引起事件的按钮。

当为控制设置了控制源时，Value 属性的行为将有所改变。在设置控制源时，ControlSource 属性用以指定变量或字段，而 Value 属性则设置该变量或字段的数据类型。如果此数据类型对给定的控制无效，则 Visual FoxPro 会产生错误。

以下为有效数据类型的列表：

控制	所允许的数据类型
复选框	整型、逻辑型、数值型
组合框	字符型、整型、数值型
命令组	字符型、整型、数值型
编辑框	字符型、备注型
表格	字符型、数值型
列表框	字符型、整型、数值型
选项按钮	整型、逻辑型、数值型
选项组	字符型、整型、数值型
微调	货币、整型、数值型
文本框	任何数据类型


请参阅

Bound 属性，ListIndex 属性


VARREAD( ) 函数

请参阅

以大写字母返回用来创建当前控制的内存变量、数组元素或字段的名称。包含此函数是为了提供向后兼容性。可用 ControlSource 或 Name 属性代替。

语法

VARREAD( )

返回值类型

字符型

说明

如果浏览窗口或编辑窗口为活动窗口，则返回首字母大写的当前字段名。

VARREAD( ) 等同于 SYS(18)，两者都可用来将当前字段名或控制名传递给一个过程，然后提供上下文相关的帮助。


请参阅

控制和对象，ControlSource，Name，SYS(18) - 当前控制


VERSION( ) 函数

请参阅	示例

返回一个字符串，该字符串包含了正在使用的 Visual FoxPro 版本号。

语法

VERSION(nExpression)

参数

nExpression

仅用于 Visual FoxPro。

指定 VERSION( ) 函数返回有关 Visual FoxPro 的附加信息。若省略 nExpression 参数，则 VERSION( ) 函数返回 Visual FoxPro 的版本号。

下表列出了 nExpression 参数及返回的有关 Visual FoxPro 的附加信息。

nExpression	返回的有关 Visual FoxPro 的附加信息
1	Visual FoxPro  的日期及系列号。
2	Visual FoxPro 的版本类型： 0 -运行版 1 -标准版 2 -专业版
3	指出 Visual FoxPro 使用的语言，以下两个字符值表明 Visual FoxPro 所使用的语言： 00 -英语 33 -法语 34 -西班牙语 39 -意大利语 42 -捷克语 48 -波兰语 49 -德语 55 -葡萄牙语
返回值类型

字符型

说明

可使用 VERSION( ) 函数有条件地执行与特定版本相关的代码。


CLEAR

? VERSION( )


请参阅

GETCP( )，GETENV( )，OS( )


View 属性

请参阅

指定表格控制的查看方式。

应用于

表格

语法

Grid.View[ = nType]

设置

nType

若没有拆分窗格（即 Partition 属性设置为 0），则 View 属性的设置有：

设置	说明
0	浏览
1	编辑
若窗格已拆分，则 View 属性的设置为：

设置	说明
0	浏览（左窗格），浏览（右窗格）
1	浏览（左窗格），编辑（右窗格）
2	编辑（左窗格），浏览（右窗格）
3	更改（左窗格），更改（右窗格）
说明

设计时可用，运行时可读写。


请参阅

Panel 属性，PanelLink 属性，Partition 属性


Visible 属性

请参阅	示例

指定对象是可见还是隐藏。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表单集，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，工具栏

语法

Object.Visible[ = lExpr]

设置

lExpr

Visible 属性的设置为：

设置	说明
“真” (.T.)	在表单设计器中为默认值。对象可见。
“假” (.F.)	在程序代码中为默认值。对象隐藏。
说明

设计和运行时可用。

即使对象隐藏，在代码中也可以访问该属性。

为了在启动时隐藏对象，请在设计时设置 Visible 属性为“假”（.F.）。如果在代码中设置了 Visible 属性，您可以隐藏对象，并在运行时，响应一个特定的事件而显示它。

当表单的 Visible 属性设置为“假”（.F.）时，表单就隐藏起来，而最近活动的表单集、表单或其他对象则变为活动的。当表单的 Visible 属性设置为“真”（.T.）时，表单变为可见的。将表单的 Visible 属性设置为“真”（.T.）并不影响表单的 Order 属性设置。在表单的 Visible 属性设置为“真”（.T.）时，它并不变为活动的，可使用 Show 方法来激活表单并同时使之可见。

附注

如果表单对象的 Visible 属性设置为“假”（.F.），则不显示该表单，即使表单集对象的 Visible 属性设置为“真”（.T.）。然而，如果表单集对象的 Visible 属性设置为“假”（.F.），则所有包含在该表单集中的表单对象都不可见。


*下面的示例演示了 Visible 属性在用 AddObject 方法加到表单之后，
* 是如何用来显示控制的。
*

* 用 AddObject 方法可向表单中添加一个“线条”控制和三个命令按
* 钮。将这些控制和按钮的 Visible 属性设置为“真”（.T.），以便在表单中显示。
* Visible 属性也用来在“线条”控制的倾斜方向改变之前隐藏它，
* 并在其倾斜方向改变之后显示它。
*

frmMyForm = CREATEOBJECT('Form')  && 创建一个表单

frmMyForm.Closable = .F.  && 废止控制菜单框

frmMyForm.AddObject('shpLine','Line')  && 在表单上添加线条控制

frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1')  && 向上命令按钮

frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2')  && 向下命令按钮

frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3')  && 退出命令按钮

frmMyForm.shpLine.Visible = .T.  && 使线条控制可见

frmMyForm.shpLine.Top = 20  && 指定线条控制起始点所在的行

frmMyForm.shpLine.Left = 125  && 指定线条控制起始点所在的列

frmMyForm.cmdCmndBtn1.Visible =.T.  && 向上命令按钮可见

frmMyForm.cmdCmndBtn2.Visible =.T.  && 向下命令按钮可见

frmMyForm.cmdCmndBtn3.Visible =.T.  && 退出命令按钮可见

frmMyForm.SHOW  && 显示表单

READ EVENTS  && 进入事件循环

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON  && 创建命令按钮

Caption = 'Slant \<Up'  && 命令按钮的标题

Left = 50  && 命令按钮起始点所在的列

Top = 100  && 命令按钮起始点所在的行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='/'  && 向上倾斜

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton  && 创建命令按钮

Caption = 'Slant \<Down'  && 命令按钮的标题

Left = 200  && 命令按钮起始点所在的列

Top = 100  && 命令按钮起始点所在的行

Height = 25  && 命令按钮高度

PROCEDURE Click

ThisForm.shpLine.Visible = .F.  && 隐藏线条控制

ThisForm.shpLine.LineSlant ='\'  && 向下倾斜

ThisForm.shpLine.Visible = .T.  && 显示线条控制

ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton  && 创建命令按钮

Caption = '\<Quit'  && 命令按钮的标题

Cancel = .T.  && 默认取消按钮(Esc)

Left = 125  && 命令按钮起始点所在的列

Top = 150  && 命令按钮起始点所在的行

Height = 25  && 命令按钮高度

PROCEDURE Click

CLEAR EVENTS  && 中止事件循环，关闭表单

ENDDEFINE


请参阅

Show 方法，ZOrder 方法


WAIT 命令

请参阅

显示信息并暂停 Visual FoxPro 的执行，按某个键或单击鼠标后继续执行。

语法

WAIT
[cMessageText]
[TO MemVarName]
[WINDOW [AT nRow, nColumn]]
[NOWAIT]
[CLEAR | NOCLEAR]
[TIMEOUT nSeconds]

参数

cMessageText

指定要显示的自定义信息。若省略 cMessageText 参数，则 Visual FoxPro 显示默认的信息。如果 cMessageText 参数为空字符串 ( )，则不显示信息，直到按某个键，Visual FoxPro 才结束等待，继续执行程序。

TO MemVarName

将按下的键保存到内存变量或数组元素中。如果用 MemVarName 参数指定的内存变量或数组元素不存在，则创建一个。若按 Enter、不可打印的键或组合键、或者单击鼠标，那么在 MemVarName 参数中就存储空字符串。

WINDOW

在 Visual FoxPro 主窗口右上角的系统信息窗口中，显示信息。按 Ctrl 键或 Shift 键可以暂时隐藏该窗口。

在 FoxPro for MS-DOS 中，可以用鼠标拖动窗口（或按 Ctrl+F7 组合键），使窗口移动到 Visual FoxPro 主窗口的不同位置。

在 FoxPro 2.5 及其后期版本中，WAIT WINDOW 支持多行信息，可以在 cMessageText 参数中用回车（CHR(13)）将部分信息移动到下一行，该信息窗口会自动扩充，以容纳附加行。例如，下面的命令创建包含两行信息的窗口。

WAIT WINDOW "This is the 1st line" + CHR(13) + ;

    "This is the 2nd line"

信息窗口的宽度调整到恰好容纳信息中最长的一行，所有信息行都按信息窗口的左边对齐，忽略跟在 CHR(13) 后面的换行符（CHR(10)）。

AT nRow, nColumn

在 Visual FoxPro 中，指定信息窗口在屏幕上的位置。

NOWAIT

在显示信息后，立即继续执行程序。程序并不等待信息从 Visual FoxPro 主窗口中删除，而是从包含 WAIT NOWAIT 的程序行之后紧接的一行开始立即继续执行。如果省略了 NOWAIT 参数，程序直到信息从 Visual FoxPro 主窗口中删除，才开始执行。删除信息可按某一键或单击鼠标。

CLEAR

在程序中，从 Visual FoxPro 主窗口中删除 Visual FoxPro 的系统窗口或 WAIT 信息窗口。例如，如果发出 SET TALK WINDOW 命令，则索引、排序等过程中的对话都指向 Visual FoxPro 系统窗口，若按某一键或单击鼠标，可以删除该窗口。发布 WAIT CLEAR 命令可以在程序中删除窗口。

NOCLEAR

指定 WAIT 信息窗口保留在 Visual FoxPro 主窗口中，直到发布 WAIT CLEAR 或另一条命令 WAIT WINDOW，或者直到显示 Visual FoxPro 系统信息。

TIMEOUT nSeconds

指定在中断 WAIT 命令之前，等待键盘或鼠标输入的秒数，nSeconds 参数指定经过的秒数（允许有分秒（fractional seconds））。如果 TIMEOUT 不是 WAIT 命令的最后一个子句，则 Visual FoxPro 产生语法错误信息。


请参阅

ACCEPT


WBORDER( ) 函数

请参阅

确定活动窗口或指定窗口是否有边框。

语法

WBORDER([WindowName])

参数

WindowName

指定需要 WBORDER( ) 返回其信息的窗口名。

如果省略窗口名，WBORDER( ) 返回一个逻辑值，指明活动输出窗口是否有边框。

返回值类型

逻辑型

说明

如果指定窗口有边框，WBORDER( ) 返回“真”（.T.），否则返回“假”（.F.）。默认情况下，窗口有边框。在 DEFINE WINDOW 中包括 NONE 子句，可以创建没有边框的窗口。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW


WCHILD( ) 函数

请参阅

返回父窗口中子窗口的数目，或者按照子窗口在父窗口中排放的顺序返回子窗口的名称。

语法

WCHILD([WindowName] [nChildWindow])

参数

WindowName

指定一个非活动输出窗口，WCHILD( ) 函数返回它的子窗口的数目。如果只包含窗口名，则返回指定窗口中子窗口的数目。

如果既包含了 WindowName，又包含了 nChildWindow，则 WCHILD( ) 函数返回指定窗口中子窗口的名称。这时需用逗号将两个参数分隔开。

也可以在 WindowName 中包括空字符串，指定 Visual FoxPro 的主窗口。

nChildWindow

指定一个数值表达式，在省略 WindowName 参数时，返回活动输出窗口中的子窗口名称。

数值表达式 nChildWindow 可以是 0 或任一正值。如果 nChildWindow 为 0，则活动输出窗口中排放在最底部的子窗口的名称被返回。

若 nChildWindow 为某一正数，WCHILD( ) 函数返回子窗口序列中下一个子窗口的名称。如果重新发出带有正数的 WCHILD( ) 函数，就可返回子窗口序列中下一个子窗口名称。如果调用 WCHILD( ) 函数的次数多于父窗口中子窗口的数目，则返回空字符串。有关窗口序列更多的内容，请参阅 ACTIVATE WINDOW。

附注

在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中，若激活 FoxPro 主窗口，则所有窗口都成为主窗口的子窗口。在 Visual FoxPro 中，不在 Visual FoxPro 主窗口的边界上停放的工具栏也是主窗口的子窗口。发出带有正数参数的一系列 WCHILD( ) 函数，就会返回活动窗口和工具栏的名字。在 FoxPro for Macintosh 中，只有在 DEFINE WINDOW 或 ACTIVATE WINDOW 中包含 IN SCREEN 子句时，各窗口才成为主窗口的子窗口。

如果既包含 WindowName，又包含了 nChildWindow，这时需用逗号将两个参数分隔开来。

返回值类型

字符型或数值型

说明

可以创建一个窗口（父窗口），并将其他窗口（子窗口）放置在其中。在 DEFINE WINDOW 中包含 IN 或 IN WINDOW 子句，可在父窗口中创建子窗口。在父窗口中创建并激活的子窗口不能移出父窗口之外。如果父窗口移动，子窗口也随之移动。

如果 WCHILD( ) 函数不带任何参数，则返回活动输出窗口中子窗口的数目。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WPARENT( )


WCOLS( ) 函数

请参阅	示例

返回活动窗口或指定窗口中的列数。

语法

WCOLS([WindowName])

参数

WindowName

指定要 WCOLS( ) 函数返回其列数的窗口。在 Visual FoxPro 中，可以指定工具栏的名字。如果不指定窗口，则返回活动输出窗口的列数。如果没有活动窗口，WCOLS( ) 返回 Visual FoxPro 主窗口的列数。

如果系统窗口激活并且可见或隐藏，则可以在 WCOLS( ) 函数中指定系统窗口名（例如命令窗口（Command）、查看窗口（View）、浏览窗口（Browse）等）。在 Visual FoxPro 中，如果工具栏激活并可见或隐藏，则可以在 WCOLS( ) 函数中指定工具栏名称（例如常用工具栏、调色板工具栏等）。如果指定尚未激活的系统窗口或工具栏的名称，Visual FoxPro 产生错误信息。但调试窗口（Debug）例外，只要打开调试窗口，不论它可见、隐藏或关闭，都可以在 WCOLS( ) 中包含其名称。

也可以包含空字符串作为窗口名称，从而返回 Visual FoxPro 主窗口的列数。

注意，可以在返回窗口位置或大小的函数 WLCOL( ), WLROW( ), 和 WROWS( ) 中，使用空字符串指定 Visual FoxPro 主窗口。

返回值类型

数值型

说明

在 Visual FoxPro , FoxPro for Windows 和 FoxPro for Macintosh 中，WCOLS( ) 函数的返回值取决于指定窗口的字体，许多字体可以用一系列大小显示，有些能够按比例保持间距。列对应于当前字体中字母的平均宽度。有关详细内容，请参阅字体概述主题。


*下面的示例在未知尺寸的窗口的最后一行，将输出
* 信息居中对齐。

CLEAR

DO SendMesg WITH 'Message', WCOLS( ), WROWS( ) -1

*** SendMesg 过程 ***

PROCEDURE SendMesg

PARAMETERS gcMsg, gnCol, gnRow

STORE (gnCol - LEN(gcMsg))/2 TO gnCol

@ gnRow, gnCol SAY gcMsg

RETURN


请参阅

SCOLS( )，SROWS( )，WLCOL( )，WLROW( )，WROWS( )


WEEK( ) 函数

请参阅	示例

从日期表达式或日期时间表达式中返回代表一年中第几周的数值。

语法

WEEK(dExpression | tExpression [, nFirstWeek] [, nFirstDayOfWeek])

参数

dExpression | tExpression

指定日期或日期时间表达式，WEEK( )函数从这个表达式中返回一年中的周的序号。

如果省略可选参数 nFirstWeek 和 nFirstDayOfWeek，则 WEEK( ) 函数把“星期日”作为每周的第一天。

nFirstWeek

指定一年中的第一周，nFirstWeek 可取以下值。

nFirstWeek	说明
0	WEEK( )函数返回当前选定的周，选定值在“选项”对话框中“国际”选项卡中的“一年的第一周”列表中。
1	第一周包含 1 月 1 日，省略 nFirstWeek 时为默认值。
2	第一周后半部分（四天）在当前年内。
3	第一周有 7 天。
nFirstDayOfWeek

指定每周的第一天。nFirstDayOfWeek 可取以下值。

nFirstDayOfWeek	说明
0	WEEK( ) 函数返回当前选定的日，选定值在“选项”对话框中“国际”选项卡内“星期开始于”列表内。
1	星期日。省略 nFirstDayOfWeek 时的默认值，并且是早期 FoxPro 版本中每周的第一天。
2	星期一
3	星期二
4	星期三
5	星期四
6	星期五
7	星期六
返回值类型

数值型

说明

WEEK( ) 函数返回 1 到 53 之间的一个数，该数代表一年中周的序号。例如，WEEK( ) 返回 1，表明是一年中的第一周；返回 2，为一年中的第二周，依此类推。注意，一周可以分在两年之中  一年的第一周可以在当前年和前一年之中。


* 下面的示例显示了今天和指定日所在周的序号。

CLEAR

? WEEK(DATE( ))

? WEEK({2/16/1995})


请参阅

CDOW( )，DAY( )，DOW( )，SET FDOW，SET FWEEK，SYS( ) 函数概述


WEXIST( ) 函数

请参阅	示例

确定所指定的用户自定义窗口是否存在。

语法

WEXIST(WindowName)

参数

WindowName

指定用户自定义窗口的名称。

也可以指定 Visual FoxPro 系统窗口的名称（如命令窗口、查看窗口、浏览窗口等）；在 Visual FoxPro 中，还可以指定工具栏的名称。如果所指定的系统窗口或工具栏可见或隐藏，则 WEXIST( ) 函数返回“真”(.T.)。如果所指定的系统窗口或工具栏已关闭，则返回“假”(.F.)。

命令窗口和调试窗口是两个例外。在 WEXIST( ) 中包含命令窗口名时，总是返回“真”(.T.)。如果曾经打开过调试窗口，即使已经关闭，WEXIST( ) 函数仍返回“真”(.T.)。

返回值类型

逻辑型

说明

如果所指定的用户自定义窗口是用 DEFINE WINDOW 命令创建的，则 WEXIST( ) 函数返回“真”(.T.)，窗口不一定活动或可见，但必须存在。


DEFINE WINDOW wScreen1 FROM 10,10 TO 20,69

DEFINE WINDOW wScreen2 FROM 1,0 TO 19,79

CLEAR

? WEXIST('wScreen1')  && 显示 .T.

STORE 'wScreen2' TO gcWinName

? WEXIST('win_name')  && 显示 .F.

? WEXIST(gcWinName)  && 显示 .T.

RELEASE WINDOWS wScreen1, wScreen2


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WONTOP( )，WOUTPUT( )，WVISIBLE( )


WFONT( ) 函数

请参阅	示例

返回 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中窗口当前字体的名称、大小或字形。

语法

WFONT(nFontAttribute [, WindowName])

参数

nFontAttribute

指定要返回的字体属性。

如果 nFontAttribute 是 1，WFONT( ) 函数返回活动窗口或指定窗口的当前字体名。在 FoxPro for MS-DOS 中，WFONT( ) 函数总是返回 FoxFont。

如果 nFontAttribute 是 2，WFONT( ) 函数返回字体大小。在 FoxPro for MS-DOS 中，WFONT( ) 总是返回 1。

如果 nFontAttribute 是 3，WFONT( ) 返回标识字形的代码。在 FoxPro for MS-DOS 中，WFONT( ) 总是返回“N”。

字形代码代表当前字形的单个字符或一组字符。例如，若 WFONT(3) 返回 BI，则当前字形就是粗斜体。

下表列出了每种字形的代码：

字符	字形
B	粗体
C	Condense（仅用于 FoxPro for Macintosh）
E	Extend（仅用于 FoxPro for Macintosh）
I	斜体
N	常规
O	轮廓
Q	不透明
S	阴影
-	删除线（仅用于 Visual FoxPro 和 FoxPro for Windows）
T	透明
U	下划线
WindowName

指定要确定当前字体大小或字形的窗口的名称。在 Visual FoxPro 中，也可以指定工具栏的名称。若包含的是空字符串，则返回 Visual FoxPro 主窗口的当前字体的名称、大小或字形。

WindowName 可以是 DEFINE WINDOW 命令创建的用户自定义窗口名，或者文本编辑与备注编辑窗口名。

也可以包含系统窗口的名称（如查看、跟踪、调试等窗口）。WFONT( ) 函数只能为打开的且当前可见或隐藏的系统窗口返回字体属性。如果指定的系统窗口关闭，则 Visual FoxPro 显示错误信息。

如果省略参数 WindowName，WFONT( ) 函数返回活动输出窗口的当前字体、字体大小或字形。

返回值类型

字符型和数值型

说明

仅用于 Viual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh。在 FoxPro for MS-DOS 中，WFON( )函数返回常值。


* 下面的示例创建名为 wFontChar 的用户自定义窗口，
* 激活该窗口后，在窗口中显示其字体特征，
* 然后显示 Visual FoxPro 主窗口的字体特征。

CLEAR

DEFINE WINDOW wFontChar ;

FROM 1,1 TO 3,35 ;

FONT 'MS SANS SERIF',8 ;

STYLE 'BI'  && 定义具有字体和字形的窗口

ACTIVATE WINDOW wFontChar

? WFONT(1), WFONT(2), WFONT(3)  && wFontChar 窗口

ACTIVATE SCREEN

?

?

?

? 'Font characteristics for the window wFontChar'

?

?

? WFONT(1,''), WFONT(2,''), WFONT(3,'')  && Visual FoxPro 主窗口

?

? 'Font characteristics for the main Visual FoxPro window'

WAIT WINDOW

RELEASE WINDOW wFontChar

CLEAR


请参阅

FONTMETRIC( )，GETFONT( )，SYSMETRIC( )，TXTWIDTH( )


When 事件

请参阅

在控制接收焦点之前此事件发生。

应用于

复选框，组合框，命令按钮，命令组，编辑框，表格，列表框，选项按钮，选项组，微调，文本框

语法

PROCEDURE Control.When
[LPARAMETERS nIndex]

参数

nIndex

唯一地标识控制数组中的控制。

说明

如果 When 事件返回“真”(.T.)，默认控制接收到焦点；如果返回“假”(.F.)，控制未接收到焦点。在控制获得焦点时，事件顺序为：

1.	When 事件

2.	GotFocus 事件

对于列表框控制，每当用户单击列表中的项或用箭头键移动，使焦点在项之间移动时，When 事件发生。

对所有其他控制，当试图把焦点移动到控制上时，When 事件发生。


请参阅

GotFocus 事件，Valid 事件


Width 属性

请参阅

指定对象的宽度。

应用于

复选框，列，组合框，命令按钮，命令组，容器对象，控制对象，自定义，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页框，_SCREEN，形状，微调，文本框，计时器，工具栏

语法

[Object.]Width[ = nWidth]

设置

nWidth

指定对象的宽度。

说明

设计和运行时可用。

对对象的整个区域进行操作或计算（例如，调整对象大小或移动对象）时，可使用 Height、Width、Left 和 Top 属性。

对表单对象和控制，此属性的值随用户或代码所定义的大小而改变。所有对象的 Width 属性的最大值取决于系统。

对表单对象，Width 属性指定表单对象的外部宽度，但不包括边框。

对于控制，Width 属性从控制边框的中心计算，以使不同边框的控制能够正确地对齐。

附注

当应用于列对象中包含的控制时，Width 属性只读。

Width 属性的度量单位由 ScaleMode 属性的设置值决定。


请参阅

Height 属性，Left 属性，Move 方法，ScaleMode 属性，Top 属性


WindowList 属性

请参阅

指定能够加入到当前表单对象的 READ 中的表单对象列表。包含此属性是为了提供与 READ 的向后兼容性。

应用于

表单集

语法

FormSet.WindowList[ = cList]

设置

cList

指定表单对象的列表，这些对象可以加入到表单对象的 READ 命令中。

说明

设计和运行时可用。仅当表单集对象的 WindowType 属性设置为 2 （读） 或 3 （读模式）时此属性可用。

WindowList 属性与 READ 命令 With 子句的行为相似。


请参阅

READ，WindowType 属性


WindowState 属性

请参阅

指定表单窗口在运行时是否可以最大化或最小化。

应用于

表单，_SCREEN

语法

[Object.]WindowState[ = nState]

设置

nState

WindowState 属性的设置有：

设置	说明
0	正常
1	最小化（最小为一个图标）
2	最大化（扩大到填满屏幕）
说明

设计和运行时可用。


请参阅

Height 属性，Left 属性，Top 属性，Width 属性


_WINDOWS 系统内存变量

请参阅

如果正在使用 Visual FoxPro 或者 FoxPro for Windows，则包含“真”(.T.)。

语法

_WINDOWS = lExpression

说明

如果正在使用的是 Visual FoxPro 或者 FoxPro for Windows，_WINDOWS 系统内存变量包含“真”(.T.)；如果正在使用的是 FoxPro 的其他平台版本（如 FoxPro for MS-DOS、FoxPro for Macintosh 或 FoxPro for UNIX），则 _WINDOWS 变量包含“假”(.F.)。

_WINDOWS 所包含的值不能用 STORE 命令或赋值号（=）来更改。


请参阅

_DOS，_MAC，_UNIX，VERSION( )


WindowType 属性

请参阅

在执行 DO FORM 命令时，指定表单集或表单对象的动作。

应用于

表单，表单集，_SCREEN

语法

Object.WindowType[ = nType]

设置

nType

对于表单集对象，WindowType 属性的设置有：

设置	说明
0	无模式。
1	模式。其他表单对象不能成为活动的，菜单也为非活动的。表单集中所有的表单对象都活动。
2	读。表单集的行为象是被 READ 命令激活一样。程序执行到 Show 方法或 DO FORM 命令时停止。当表单不活动时，程序继续执行（包含此属性是为了提供向后兼容性）。仅用于从当前版本的 FoxPro 中转换的表单。
3	读模式。表单集的行为象是被 READ 命令的 MODAL 子句激活一样，程序执行到 Show 方法或 DO FORM 命令时停止。在 WindowList 属性中指定的任何表单对象都可用，但是其他表单对象和菜单不可用（包含此属性是为了提供向后兼容性）。仅用于从当前版本的 FoxPro 中转换的表单。
对于表单对象，WindowType 属性的设置有：

设置	说明
0	无模式。
1	模式。其他表单对象不能成为活动的，菜单也不活动。而表单集中的所有表单对象则是活动的。
说明

设计和运行时可用。一旦显示了窗口，则不能更改 WindowType 设置。

Show 方法带有能够忽略 WindowType 设置的参数。

附注

表单集的 WindowType 设置忽略它所包含的表单对象各自的 WindowType 设置。例如，若表单集的 WindowType 属性设置为 0，则它包含的所有表单对象则都成为无模式的，不管单个表单的 WindowType 属性的设置情况。


请参阅

DO FORM，READ，Show 方法，WindowList 属性


WITH ... ENDWITH 命令

请参阅	示例

指定对象的多个属性。

语法

WITH ObjectName
[.cStatements]
ENDWITH

参数

ObjectName

指定对象名。ObjectName 可以是对象名或者对象引用。

.cStatements

该参数可以由大量的 Visual FoxPro 命令组成，这些命令用来指定 ObjectName 的属性。在 cStatement 之前加一个点号，表明它为 ObjectName 的属性。

说明

WITH ... ENDWITH 提供了给单个对象指定多个属性的方便途径。注意，也可以在 WITH ... ENDWITH 结构中执行方法。


*下面的示例创建了名为 Employee 的自定义类，
* 在用 CREATEOBJECT( ) 创建了 Employee 类以后，
* 可以用 WITH ... ENDWITH 为类设置多个属性，
* 然后显示属性值。

moemployee = CREATEOBJECT('employee')

WITH moemployee

.First_Name = 'John'

.Last_Name = 'Smith'

.Address = '16 Maple Lane'

.HireDate = {02/16/95}

ENDWITH

CLEAR

? moemployee.First_Name + ' '

?? moemployee.Last_Name

? moemployee.Address

? moemployee.HireDate

DEFINE CLASS employee AS CUSTOM

First_Name = SPACE(20)

Last_Name = SPACE(20)

Address = SPACE(30)

HireDate = {  \  \  }

ENDDEFINE


请参阅

:: 作用域操作符，ADD CLASS，CREATE CLASS，CREATE CLASSLIB，CREATEOBJECT( )，GETOBJECT( )，MODIFY CLASS，RELEASE CLASSLIB，SET CLASSLIB


_WIZARD 系统内存变量

请参阅

包含 Visual FoxPro 向导应用程序的名称。

语法

_WIZARD = cProgramName

参数

cProgramName

指定向导应用程序。如果向导应用程序不在当前 Visual FoxPro 默认目录下，可在应用程序名中包括路径。

也可以使用以下语法，在 Visual FoxPro 配置文件中指定向导应用程序：

_WIZARD = cProgramName

说明

当选定了要运行的向导时，Visual FoxPro 将向导的名称存放在 _WIZARD 系统内存变量之中。在默认情况下，_WIZARD 包含 WIZARD.APP，安装在 Visual FoxPro 目录下，可以为向导应用程序指定不同的名字。


请参阅

系统内存变量概述


WLAST( ) 函数

请参阅

返回在当前窗口之前活动的窗口的名称，或者确定指定窗口在当前窗口之前是否是活动的。

语法

WLAST([WindowName])

参数

WindowName

指定 WLAST( ) 要处理的窗口。在 Visual FoxPro 中，也可以指定工具栏名。如果指定的窗口在当前窗口之前活动，则 WLAST( ) 返回“真”(.T.)，否则返回“假”(.F.)。如果所指定的窗口不存在，也返回“假”(.F.)。

若省略 WindowName，则返回在当前窗口之前活动的窗口的名称。

返回值类型

字符型或逻辑型

说明

如果在当前窗口之前活动的窗口为调试窗口、跟踪窗口或命令窗口，则 WLAST( ) 返回空字符串。当调试一个使用 WLAST( ) 函数的程序时，使这些窗口活动并不影响程序的执行。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WEXIST( )，WONTOP( )，WOUTPUT( )，WVISIBLE( )


WLCOL( ) 函数

请参阅

返回活动窗口或指定窗口左上角的列坐标。

语法

WLCOL([WindowName])

参数

WindowName

指定由 WLCOL( ) 返回列坐标的窗口。在 Visual FoxPro 中，也可以指定工具栏名。如果省略 WindowName，WLCOL( ) 返回活动输出窗口的列坐标。也可以令 WindowName 参数为空字符串，以指定 Visual FoxPro 主窗口。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，如果没有活动窗口，WLCOL( ) 返回相对于 Windows 桌面或 Macintosh 桌面的 FoxPro 主窗口的列坐标。在 FoxPro fro MS-DOS 中，如果没有活动窗口，WLCOL( ) 总是返回 0。如果窗口名是空字符串，也返回 Visual FoxPro 主窗口的列坐标。

如果打开了系统窗口（如命令窗口、查看窗口、浏览窗口等），并且该窗口是可见的或隐藏的（其名称出现在“窗口”菜单内），则可以在 WLCOL( ) 中包括它的名称。如果所指定的系统窗口已经关闭，FoxPro 会产生错误信息，但调试窗口例外。如果打开了调试窗口，不论是否可见或关闭，都可以在 WLCOL( ) 中包含它的名称。

返回值类型

数值型

说明

由 WLCOL( ) 返回的值取决于当前视频显示方式，且相对于 Visual FoxPro 主窗口。显示方式可以用 SET DISPLAY 来更改。

窗口可以放置在 Visual FoxPro 主窗口以外。如果指定窗口在 Visual FoxPro 主窗口左侧，WLCOL( ) 返回负值。指定窗口的左边框在 Visual FoxPro 主窗口右侧时，则返回大于 Visual FoxPro 主窗口宽度的正值。


请参阅

SET DISPLAY，WCOLS( )，WLROW( )，WROWS( )


WLROW( ) 函数

请参阅

返回活动窗口或指定窗口左上角的行坐标。

语法

WLROW([WindowName])

参数

WindowName

指定由 WLROW( ) 返回行坐标的窗口，在 Visual FoxPro 中，也可以指定工具栏名。如果省略 WindowName，WLROW( ) 返回活动输出窗口的行坐标。也可以令 WindowName 为空字符串，以指定 Visual FoxPro 主窗口。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，如果没有活动窗口，WLROW( ) 返回相对于 Windows 或 Macintosh 桌面的 Visual FoxPro 主窗口的行坐标。在 FoxPro for MS-DOS，如果没有活动窗口，WLROW( ) 总是返回 0。

如果打开了系统窗口（如命令窗口、查看窗口、浏览窗口等），并且该窗口可见或隐藏（名称出现在“窗口”菜单内），则可以在 WLROW( ) 中包含它的名称。如果所指定的系统窗口已经关闭，FoxPro 会产生错误，但调试窗口例外，如果已打开此窗口，不论是否可见或者关闭，都可以在 WLROW( ) 中包含它的名称。

返回值类型

数值型

说明

由 WLROW( ) 返回的值取决于当前视频显示方式，且行坐标相对于 Visual FoxPro 主窗口。显示模式可以由 SET DISPLAY 更改。

窗口可以位于 Visual FoxPro 的主窗口以外。如果窗口顶部在 Visual FoxPro 主窗口以上，WLROW( ) 返回负值。如果窗口的顶部在主窗口以下，则返回大于 Visual FoxPro 主窗口高度的正值。


请参阅

SET DISPLAY，WCOLS( )，WLCOL( )，WROWS( )


WMAXIMUM( ) 函数

请参阅

确定活动窗口或指定窗口是否最大化。

语法

WMAXIMUM([WindowName])

参数

WindowName

指定 WMAXIMUM( ) 要处理的窗口名。可以指定 Visual FoxPro 系统窗口名(如 Command（命令窗口）、View（查看窗口）、Browse（浏览窗口）等)。

如果省略 WindowName，WMAXIMUM( ) 函数返回活动窗口是否最大化的逻辑值。可以令 WindowName 为空字符串，来指定 Visual FoxPro 主窗口。

说明

窗口可以扩大到充满 Visual FoxPro 主窗口。

用 DEFINE WINDOW 创建的用户自定义窗口可以最大化，但须在其定义中包括 ZOOM 关键字。

如果当前窗口或指定窗口已最大化，则 WMAXIMUM( ) 返回“真”(.T.)，否则返回“假”(.F.)。在 Visual FoxPro 中，也可以包括工具栏名，由于工具栏不能最大化，所以包括工具栏名时 WMAXIMUM( ) 总是返回“假”(.F.)。


请参阅

DEFINE WINDOW，WMINIMUM( )，ZOOM WINDOW


WMINIMUM( ) 函数

请参阅

确定活动窗口或指定窗口是否最小化。

语法

WMINIMUM([WindowName])

参数

WindowName

指定 WMINIMUM( ) 要处理的窗口名。可以指定 Visual FoxPro 系统窗口名(如 Command（命令窗口）、View（查看窗口）、Browse（浏览窗口）等)。

如果省略 WindowName，WMINIMUM( ) 返回指定活动窗口状态的逻辑值。也可以令 WindowName 为空字符串，来指定 Visual FoxPro 主窗口。

返回值类型

逻辑型

说明

在 FoxPro for MS-DOS 中，窗口可以缩小到最小尺寸。

在 Visual FoxPro 和 FoxPro for Windows 中，窗口可以缩为一个图标。

在 FoxPro for Macintosh 中，窗口不能最小化，WMINIMUM( ) 总是返回“假”(.F.)。

对于 DEFINE WINDOW 创建的用户自定义窗口，只有在窗口定义中包含了 MINIMIZE 关键字时才可以最小化。

如果当前窗口或指定窗口已最小化，WMINIMUM( ) 返回“真”(.T.)，否则返回“假”(.F.)，在 Visual FoxPro 中，也可以包含工具栏名。然而由于工具栏不能最小化，当包含工具栏名时 WMINIMUM( ) 总是返回“假”(.F.)。


请参阅

DEFINE WINDOW，WMAXIMUM( )，ZOOM WINDOW


WONTOP( ) 函数

请参阅	示例

确定活动窗口或指定窗口是否在所有其他窗口之前。

语法

WONTOP([WindowName])

参数

WindowName

指定 WONTOP( ) 要处理的窗口的名称。可以指定用 DEFINE WINDOW 创建的用户自定义窗口或系统窗口(如 Command（命令窗口）、View（查看窗口）、Browse（浏览窗口）等)。如果省略 WindowName，WONTOP( ) 返回最前面的窗口名。也可以令 WindowName 为空字符串，来指定 Visual FoxPro 主窗口。

如果调试、跟踪或命令窗口在最前面，而且没有指定窗口名，则 WONTOP( ) 返回空字符串。当调试一个使用了 WONTOP( ) 函数程序时，将这些窗口放到前面并不影响程序的执行。

返回值类型

字符型或逻辑型

说明

如果指定的窗口在最前面，WONTOP( ) 返回“真”(.T.)，如果不在最前面或者不存在，则返回“假”(.F.)。


* 下面的示例使用 WONTOP( ) 来显示最前面的窗口名。
* 在运行此程序之前，先打开一些窗口（浏览窗口、
* 查看窗口等)，然后再运行此例程。

IF NOT EMPTY(WONTOP( ))

WAIT WINDOW 'Frontmost window: ' + WONTOP( )

ELSE

WAIT WINDOW 'No windows are open'

ENDIF


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WEXIST( )，WOUTPUT( )，WVISIBLE( )


WordWrap 属性

请参阅

在调整 AutoSize 属性为 真(.T.) 的标签控制大小时，指定是否在垂直方向或水平方向放大该控制，以容纳 Caption 属性指定的文本。

应用于

标签

语法

[Form.]Label.WordWrap[ = lExpr]

设置

lExpr

WordWrap 属性设置为：

设置	描述
“真”(.T.)	文本自动换行，标签在垂直方向缩放到恰好容纳文本和字体大小，而水平方向的尺寸不更改。
“假”(.F.)	（默认值）文本不自动换行，标签在水平方向上缩放到恰好容纳文本长度，且在竖直方向缩放到恰好容纳字体大小和行数。竖直方向的尺寸不更改。
说明

设计和运行时可用。

可以用这个属性来确定标签如何显示其内容。例如，动态变化的图象或许有标签，该标签同时包含内容可变的文本，为了保持标签在水平方向上大小不变，并同时允许增减文本，则须设置 WordWrap 属性为“真”(.T.)。

如果要让标签只在水平方向扩大，可设置 WordWrap 为“假”(.F.)。如果不想更改标签大小，可将 AutoSize 设置为“假”(.F.)。

附注

如果设置 WordWrap 属性为“真”(.T.)，则忽略 AutoSize 属性。


请参阅

AutoSize 属性，Caption 属性


WOUTPUT( ) 函数

请参阅	示例

确定输出是否定向到活动窗口或指定窗口。

语法

WOUTPUT([WindowName])

参数

WindowName

指定 WOUTPUT( ) 要处理的输出窗口。输出不能定向到系统窗口或工具栏中。如果省略 WindowName,，WOUTPUT( ) 返回当前输出窗口名；也可以在 WindowName 中包含空字符串，指定 Visual FoxPro 主窗口为输出窗口。

WOUTPUT( ) 在输出定向到 Visual FoxPro 主窗口时返回空字符串。

返回值类型

逻辑型和字符型

说明

如果所指定的用户自定义窗口为活动输出窗口，则 WOUTPUT( ) 返回“真”(.T.)，如果所指定的窗口未定义或者是系统窗口，则该函数返回“假”(.F.)。用 ACTIVATE WINDOW 命令激活的最近的用户自定义窗口为活动输出窗口。


*在下面的示例中，激活所创建的窗口，
* 使用 WOUTPUT( ) 函数显示此活动输出窗口的名称，
* 然后，关闭该窗口，并且从内存中删除。如果激活了另一个窗口，
* 其名称则显示出来。如果没有激活另一个窗口，则显示信息，
* 表明输出定向到 Visual FoxPro 主窗口。

DEFINE WINDOW wOutput1 FROM 2,2 TO 12,32 TITLE 'Output Window'

ACTIVATE WINDOW wOutput1

WAIT WINDOW 'wOutput1 window: ' + WOUTPUT( )

RELEASE WINDOW wOutput1

IF EMPTY(WOUTPUT( ))

WAIT WINDOW 'Output being directed to the main Visual FoxPro window'

ELSE

WAIT WINDOW 'Output window: ' + WOUTPUT( )

ENDIF


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WEXIST( )，WONTOP( )，WVISIBLE( )


WPARENT( ) 函数

请参阅	示例

返回活动窗口或指定窗口的父窗口名。

语法

WPARENT([WindowName])

参数

WindowName

指定一个窗口，由 WPARENT( ) 返回其父窗口名。如果指定窗口没有父窗口，则 WPARENT( ) 返回空字符串。如果省略 WindowName，则该函数返回活动输出窗口的父窗口名。如果活动输出窗口没有父窗口，WPARENT( ) 返回空字符串。

返回值类型

字符型

说明

可以用 DEFINE WINDOW 命令创建窗口，并将其放置在父窗口之内，该子窗口和父窗口结合在一起。例如，在父窗口中创建并激活的子窗口不能移出父窗口，如果父窗口移动，子窗口也随着移动。


*下面的示例定义父窗口和子窗口，
* 然后用 WPARENT( ) 标识父窗口。

CLEAR ALL

CLEAR

DEFINE WINDOW wParent ;

FROM 1,1 TO 20,20 ;

TITLE 'wParent'	  && 父窗口

ACTIVATE WINDOW wParent

DEFINE WINDOW wChild ;

FROM 1,1 TO 10,10 ;

TITLE 'wChild' ;

IN WINDOW wParent  && 子窗口

ACTIVATE WINDOW wChild

WAIT WINDOW 'The parent window is ' + WPARENT( )

RELEASE WINDOW wParent, wChild


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WCHILD( )


_WRAP 系统内存变量

请参阅

指定是否自动换行。包含此内存变量是为了提供向后兼容性，可用报表设计器代替。

语法

_WRAP = lExpression

参数

lExpression

指定一个逻辑值，该值确定所打印的输出是否要自动换行。在默认情况下，_WRAP 设置为“假”(.F.)。

当_WRAP设置为“真”(.T.)时，? 命令输出的超出右空白区 (_RMARGIN)的部分自动换行到左空白区 (_LMARGIN)。只有 _WRAP 设置为“真”(.T.) 时，_ALIGNMENT，_INDENT，_LMARGIN 和 _RMARGIN 等系统内存变量才能对输出产生影响。


请参阅

_ALIGNMENT，_INDENT，_LMARGIN，_RMARGIN


WREAD( ) 函数

请参阅

确定活动窗口或指定窗口是否在当前 READ 调用过。包含此函数是为了提供向后兼容性。

语法

WREAD([WindowName])

参数

WindowName

指定 WREAD( ) 要处理的窗口。如果省略 WindowName，WREAD( ) 从当前最前面的窗口返回逻辑值，WONTOP( ) 返回该窗口的名称。

返回值类型

逻辑型

说明

如果指定的窗口在当前 READ 命令中，READ( ) 返回“真”(.T.)，如果指定窗口未包括在当前 READ 命令中，或者不存在，则返回“假”(.F.)。

可以通过以下方式使窗口包括在 READ 命令中：

 •	   在 READ WITH 子句中包括窗口标题。对于未曾包括在 READ 命令中的窗口，可以用这种方式包括进来。浏览窗口、备注窗口、文本编辑窗口和 Visual FoxPro 系统窗口等都可以包括在 READ 命令中。

 •	   在窗口中创建控制。如果在多个窗口中创建了控制，并随后发出了 READ 命令，则 READ 可以包含多个窗口。


请参阅

RDLEVEL( )，READ，READKEY( )，WONTOP( )


WriteExpression 方法

请参阅

把表达式写到属性中。

应用于

复选框，列，组合框，命令按钮，命令组，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，计时器，工具栏

语法

Object.WriteExpression[cPropertyName, cExpression]

参数

cPropertyName

指定要写表达式的属性名。

cExpression

指定字符串，将其作为表达式写入属性。

说明

只在设计时可用。


请参阅

ReadExpression 方法


WriteMethod 方法

请参阅

把指定的文本写到指定的方法中。

应用于

复选框，列，组合框，命令按钮，命令组，自定义，编辑框，表单，表单集，表格，标头，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，形状，微调，文本框，计时器，工具栏

语法

Control.WriteMethod(MethodName, MethodText)

参数

MethodName

指定要写入文本的方法名。

MethodText

指定要写入的文本。

说明

只在设计时可用。

该方法仅为已有的方法设置方法文本。如果对象中没有包含所指定的方法，Visual FoxPro 会产生错误。


请参阅

ReadExpression 方法，ReadMethod 方法，WriteExpression 方法


WROWS( ) 函数

请参阅

返回活动窗口或指定窗口中的行数。

语法

WROWS([WindowName])

参数

WindowName

指定要 WROWS( ) 返回行数的窗口。在 Visual FoxPro 中，也可以指定工具栏的名称。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，由 WROWS( ) 返回的值取决于为窗口所指定的字体。大多数字体可以按各种不同的大小显示，一些字体是按比例分隔的，行对应于当前字体的高度。有关的详细内容，请参阅字体概述主题。

如果系统窗口已经打开，且可见或隐藏，则可以在 WROWS( ) 函数中指定系统窗口（如命令窗口（Command）、查看窗口（View）、浏览窗口（Trace）等）的名称。如果所指定的系统窗口已经关闭，FoxPro 会产生错误信息，但调试窗口例外。如果打开了调试窗口，不论是否可见、隐藏或已经关闭，都可以在 WROWS( ) 中包含它的名称。

也可以在 WindowName 中包括空字符串，以返回 Visual FoxPro 主窗口的行数。

注意，可以用空字符串在以下返回窗口位置与大小的函数中指定 Visual FoxPro 主窗口：WLCOL( )，WLROW( ) 和 WCOLS( ) 等。

返回值类型

数值型

说明

如果不指定窗口名，则函数返回活动输出窗口中的行数；若没有活动窗口，则返回 Visual FoxPro 主窗口的行数。


请参阅

SCOLS( )，SROWS( )，WCOLS( )，WLCOL( )，WLROW( )


WTITLE( ) 函数

请参阅

返回活动窗口或指定窗口的标题。

语法

WTITLE([WindowName])

参数

WindowName

指定用 WTITLE( ) 返回标题的窗口。如果包含了由 DEFINE WINDOW 命令创建的用户自定义的窗口名，则返回用 TITLE 子句指定给窗口的标题。

当发出 BROWSE WINDOW 命令，在一个用户自定义窗口中打开浏览窗口时，如果浏览窗口没有标题，WTITLE( ) 返回用户自定义窗口的标题；如果浏览窗口有标题，WTITLE( ) 返回其标题。

也可以在 WindowName 中使用空字符串，指定 Visual FoxPro 主窗口。

返回值类型

字符型

窗口名及标题

用户自定义窗口、系统窗口、浏览窗口和 Visual FoxPro 的工具栏以如下方式命名：

当使用 DEFINE WINDOW 命令创建用户自定义窗口时，可以为它指定名称。用户自定义窗口名和标题是不同的。默认情况下，用户自定义窗口没有标题。在创建窗口时若包括了 TITLE 子句，所指定的标题显示在窗口的标题栏，但这不是窗口名。

默认情况下，系统窗口是 Visual FoxPro 界面的一部分，它的名称与窗口标题相同。例如，系统窗口包括命令窗口（Command）、查看窗口（View）和跟踪窗口（Trace）等。在 Visual FoxPro 中，每个工具栏的名称都与其标题相同。

程序窗口、编辑窗口、标签设计器与报表设计器窗口的名称与其所创建或修改的文件名相同。

浏览窗口的名称与其窗口标题相同，该窗口名及标题按以下三种方式之一指定：第一种是给表别名指定的默认标题，第二种是窗口标题（如果存在），第三种是“浏览”标题（如果存在）。

在默认情况下，浏览窗口名为表别名。

为了在命令和函数中指定系统窗口和工具栏的名称，可用引号将整个系统窗口或工具栏的名称括起来。例如，要在 Visual FoxPro 中隐藏“报表控制”工具栏，可发出以下命令：

HIDE WINDOW 报表控制

窗口名的附加注释

如果您记不得指定给窗口的名称，可检查“窗口”菜单，所有窗口名都列在“窗口”菜单的底部。

如果发出 BROWSE WINDOW WindowName 命令，会出现两个窗口，其中浏览窗口是一个单独的窗口，并且呈现出所指定的用户自定义窗口的属性。如果发出 BROWSE 命令，但没有包括 WINDOW 子句，而这时有活动的窗口，则浏览窗口具有该活动窗口的属性。可以在 BROWSE 命令中包括 NORMAL 来改变这种行为。

可以在接受窗口名的命令和函数中包括带有空格的窗口名。例如 MOVE WINDOW，DEACTIVATE WINDOW 和 WONTOP( )。包括的窗口名从第一个非空格字符开始，并一直指定到最后一个非空格字符为止。

例如，名为 Invoice Entry 的浏览窗口可以用此命令移动：

MOVE WINDOW invoice BY 1,1

用户自定义窗口名不能包含有空格，但浏览窗口和系统窗口名可以包含空格。

说明

可以用 WTITLE( ) 返回窗口标题，并在窗口上边显示该标题。如果省略 WindowName，则返回活动窗口的标题。如果调试窗口、跟踪窗口或命令窗口为活动窗口，或者输出定向到 Visual FoxPro 主窗口，则 WTITLE( ) 返回空字符串。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WEXIST( )，WLAST( )，WONTOP( )，WOUTPUT( )，WREAD( )


WVISIBLE( ) 函数

请参阅

确定指定窗口是否激活并且没有隐藏。

语法

WVISIBLE(WindowName)

参数

WindowName

指定 WVISIBLE( ) 要处理的窗口的名称。在 Visual FoxPro 中，也可以指定工具栏的名称。还可以在 WindowName 中包括空字符串，来指定 Visual FoxPro 主窗口。

返回值类型

逻辑型

说明

如果已经显示或激活指定窗口，并且没有隐藏，则 WVISIBLE( ) 返回“真”(.T.)。可使用 SHOW WINDOW 和 ACTIVATE WINDOW 两条命令显示和激活窗口。

如果没有激活窗口，或用 HIDE WINDOW 命令隐藏了窗口，或用 DEACTIVATE WINDOW 命令使窗口不活动，或者窗口不存在，则 WVISIBLE( ) 返回“假”(.F.)。


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，WEXIST( )，WONTOP( )，WOUTPUT( )


YEAR( ) 函数

请参阅	示例

从指定的日期表达式或日期时间表达式中返回年份。

语法

YEAR(dExpression | tExpression)

参数

dExpression

指定日期表达式，YEAR( ) 从该表达式返回年份。参数 dExpression 可以是返回值为日期或日期型内存变量、数组元素或字段的函数；也可以是日期字符串，例如 {06/06/95}。

tExpression

指定日期时间表达式。YEAR( ) 从该表达式返回年份。

返回值类型

数值型

说明

YEAR( ) 总是返回带世纪数的年份，CENTURY 的设置（ON 或 OFF）并不影响此返回值。


CLEAR

? YEAR(DATE( ))


请参阅

DATE( )，DATETIME( )，DOW( )，SET CENTURY


ZAP 命令

请参阅

从表中删除所有记录，只留下表的结构。

语法

ZAP
[IN nWorkArea | cTableAlias]

参数

IN nWorkArea

指定要删除所有记录的表所在的工作区。

IN cTableAlias

指定要删除所有记录的表别名。

如果省略 nWorkArea 和 cTableAlias，则删除当前所选的工作区中表的所有记录。

说明

ZAP 命令等价于 DELETE ALL 和 PACK 联用，但 ZAP 速度更快。

如果 SET SAFETY 为 ON，Visual FoxPro 会提示是否要从当前表中删除记录。

发出 ZAP 命令，不会引发 DELETE 触发器。有关为表创建触发器的详细内容，请参阅 CREATE TRIGGER 。

注意

用 ZAP 命令从当前表中删除的记录不可恢复。


请参阅

CREATE TRIGGER，DELETE，PACK


ZoomBox 属性

指定表单是否有缩放框。此属性保留供将来使用。


ZOOM WINDOW 命令

请参阅	示例

更改用户自定义窗口或 Visual FoxPro 系统窗口的大小与位置。

语法

ZOOM WINDOW WindowName MIN [AUTO] | MAX | NORM
[AT nRow1, nColumn1 | FROM AT nRow1, nColumn1
[SIZE AT nRow2, nColumn2 | TO nRow2, nColumn2]]

参数

WindowName

指定要更改大小的窗口的名称。

MIN

将窗口缩小到最小尺寸。

在 FoxPro for MS-DOS 中，只保留窗口名或窗口标题。

在 Visual FoxPro 和 FoxPro for Windows 中，窗口缩为一个图标。

在 FoxPro for Macintosh 中，窗口不能最小化，即忽略 ZOOM WINDOW MIN 命令。

所有系统窗口可以缩小到最小尺寸。Visual FoxPro 系统窗口在最小化之前，必须先在 Visual FoxPro 主窗口或用户自定义窗口中打开它。

用户自定义窗口在定义之后可以最小化，且在更改大小之前不必激活它。

MIN AUTO

仅用于 FoxPro for MS-DOS。

使窗口最小化并停放在 Visual FoxPro 主窗口的右下角。

在 Visual FoxPro，FoxPro for Windows 和 FoxPro for Macintosh 中，忽略 AUTO。

MAX

使窗口扩大到充满整个 Visual FoxPro 主窗口、Windows 桌面、Macintosh 桌面或用户自定义窗口。如果子窗口放置在父窗口之中，当子窗口最大化时，将充满父窗口。如果有任何同 MAX 在一起使用的附加 ZOOM WINDOW 子句（如 AT，SIZE，TO 或 FROM 等），则忽略 MAX。

只有用 ZOOM 命令定义的用户自定义窗口可以扩大到最大尺寸。

NORM

在窗口最小化或最大化之后，将窗口返回到其原来大小。也可以用 NORM 移动窗口，而不更改其大小。可以用不带有其他附加子句的 ZOOM WINDOW NORM 命令，将最大化或最小化的窗口还原成原来的大小和位置。

AT nRow1, nColumn1 | FROM nRow2, nColumn2

可以包含 AT 或 FROM 子句，来指定窗口的位置。

ZOOM WINDOW WindowName NORM AT nRow1, nColumn1 命令将最大化或最小化的窗口恢复到其原来的大小，并放置在指定的位置上。窗口左上角的位置由坐标 AT nRow1, nColumn1 指定。使用 MOVE WINDOW 可以更改窗口位置。

在 FoxPro for MS-DOS 中，如果包含了 NORM 或 MIN，则窗口放置在 Visual FoxPro 主窗口中。该窗口左上角位置由 AT nRow1, nColumn1 指定。若包含了 MAX，则忽略 AT 和 FROM 子句。

在 Visual FoxPro 和 FoxPro for Windows 中，若包含了 NORM 子句，窗口左上角则放置在由 AT nRow1, nColumn1 指定的位置，该位置是在 Visual FoxPro 主窗口或 FoxPro for Windows 窗口中。如果包含了 MIN，则忽略 AT 和 FROM，且窗口显示为一个图标，该图标位于 Visual FoxPro 主窗口或 FoxPro for Windows 窗口中的下部。如果包含了 MAX，则忽略 AT 和 FROM，且将窗口扩大到充满 Visual FoxPro 主窗口或 FoxPro for Windows 窗口。

在 Visual FoxPro 和 FoxPro for Windows 中，如果用 IN DESKTOP 子句创建窗口，则窗口的左上角放在由 AT nRow1, nColumn1 指定的位置，该位置是在 Windows 桌面上。如果包含了 MIN，则忽略 AT 和 FROM，且窗口显示为 Windows 桌面下部的一个图标。如果包含了 MAX，则忽略 AT 和 FROM，且将窗口扩大到充满 Windows 桌面。

在 FoxPro for Macintosh 中，若包含了 NORM，窗口左上角则放置在由 AT nRow1, nColumn1 指定的位置，该位置是在 FoxPro for Macintosh 主窗口中。若包含了 MIN，则忽略 AT 和 FROM；若包含了 MAX，则忽略 AT 和 FROM，并且将窗口扩大到充满 FoxPro for Macintosh 主窗口。

在 FoxPro for Macintosh 中，若窗口是 IN MACDESKTOP 子句创建的，则窗口左上角的坐标由 AT nRow1, nColumn1 指定，该位置是在 Macintosh 桌面上。如果包含了 MIN，则忽略 AT 和 FROM；如果包含了 MAX，则忽略 AT 和 FROM，并将窗口扩大到充满 Macintosh 桌面。

SIZE AT nRow2, nColumn2 | TO nRow2, nColumn2

也可以包括 SIZE 或 TO 子句来指定窗口的大小。如果包含 SIZE，窗口大小即高为 nRow2 行，宽为 nColumn2 列。如果包含了 TO，窗口左上角保持在当前位置，窗口右下角放置在由 nRow2, nColumn2 指定的位置。

说明

可以将窗口缩小到最小尺寸，或者扩大窗口充满整个 Visual FoxPro 主窗口，或者将窗口缩放到其间任一大小。在 Visual FoxPro 和 FoxPro for Windows 中，如果使用 DEFINE WINDOW 和 IN DESKTOP 命令创建用户自定义窗口，则所创建的窗口可以扩大到充满整个 Windows 桌面。

窗口可以由最小直接放到最大，或者相反。还可以指定已调整的窗口在 Visual FoxPro 主窗口或用户自定义窗口中的位置。

为了缩放系统窗口，可以用引号将整个系统窗口名引起来，例如，要使“命令”窗口最小化，可发布以下命令：

ZOOM WINDOW 'Command Window' MIN

除“文件管理器”、“计算器”和“拼图板”以外，其余所有系统窗口都可以用 ZOOM WINDOW 命令来调整大小。


*在下面的示例中，为 Customer 表打开“浏览”窗口。
* 在 Visual FoxPro，FoxPro for Windows，和 FoxPro for MS-DOS 中，
* 将“浏览”窗口最小化，然后恢复到原来大小，
* 接着在指定位置再一次最小化，最后，将“浏览”窗口
* 扩大到指定大小和最小尺寸。

CLEAR ALL

CLEAR

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer  && 打开 Customer 表

BROWSE NORMAL NOWAIT

IF _DOS OR _WINDOWS

ZOOM WINDOW customer MIN

WAIT WINDOW TIMEOUT 3 ;

'MIN clause - This window will timeout. Please wait.'

ENDIF

ZOOM WINDOW customer NORM

WAIT WINDOW TIMEOUT 3 ;

'NORM clause - This window will timeout. Please wait.'

IF _DOS OR _WINDOWS

ZOOM WINDOW customer MIN AT 10,10

WAIT WINDOW TIMEOUT 3 ;

'MIN AT 10,10 clause - This window will timeout. Please wait.'

ENDIF

ZOOM WINDOW customer NORM AT 1,1 SIZE 22,25

WAIT WINDOW TIMEOUT 3 ;
'NORM & SIZE clauses - This window will timeout. Please wait.'

ZOOM WINDOW customer NORM FROM 10,10 TO 22,70

WAIT WINDOW TIMEOUT 3 ;

'NORM & TO clauses - This window will timeout. Please wait.'

ZOOM WINDOW customer MAX

WAIT WINDOW TIMEOUT 3 ;

'MAX clause - This window will timeout. Please wait.'

CLEAR ALL


请参阅

ACTIVATE WINDOW，DEFINE WINDOW，SIZE WINDOW


ZOrder 方法

请参阅

把指定的表单对象或控制放在其图形层内 z-order 的前面或后面；对于包含在工具栏对象中的控制，则将其放置在控制数组的前面或后面，该数组确定控制在工具栏中出现的顺序。

应用于

复选框，组合框，命令按钮，命令组，容器对象，控制对象，编辑框，表单，表格，图象，标签，线条，列表框，OLE 绑定型控制，OLE 容器控制，选项按钮，选项组，页面，页框，_SCREEN，形状，微调，文本框，工具栏

语法

[Object.]ZOrder([nOrder])

设置

nOrder

指定一个整数，表明某个对象相对于其他对象的位置。如果省略 nOrder，该设置为 0。

设置	描述
0	（默认值）对象放置在 z-order 前面。
1	对象放置在 z-order 后面。
说明

和对象相联系的图形层有两个，后层为图空间，图形方法的结果在其上显示；前层为对象层，前层中的内容覆盖其下层的内容。ZOrder 方法只在对象出现的层内安排对象。

附注

对于页面对象，ZOrder 方法并不影响 PageOrder 属性设置，ZOrder 只确定最顶部的活动页面对象。

有关使用控制的详细内容，请参阅《开发指南》的第十一章“使用控制”。


请参阅

PageOrder 属性


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  升迁数据库

  SQL 传递技术

  数据类型转换

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  升迁数据库

升迁向导

强制时间戳列的 SQL Server 数据类型

数据类型映象

从 Visual FoxPro 到 SQL Server 的表达式映象

从 Visual FoxPro 到 SQL Server 直接映象的表达式

索引类型映象

对象映象

参照完整性和规则映象

  SQL 传递技术

  数据类型转换

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  升迁数据库

  SQL 传递技术

VIsual FoxPro SQL 传递函数

Connection 属性

远程数据的 Cursor 属性

更新错误信息

使用服务器存储过程

使用远程数据创建外部联接

  数据类型转换

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  升迁数据库

  SQL 传递技术

  数据类型转换

下载和上载远程视图数据

当下载远程视图时更改默认数据类型

将 Visual FoxPro 参数转换成远程视图数据类型

在升迁向导中的数据类型映象

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  帮助参考

编码帮助主题文件

帮助源文件

指定帮助项目选项

帮助项目部分

定义帮助窗口属性

帮助宏的分类

  帮助宏命令参考

虚拟键代码

帮助错误信息的分类

  帮助编译错误的分类

  帮助编译错误的编号

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  帮助参考

  发布应用程序

浏览类

定制文档向导

发布 OLE 应用程序

可发布的文件

受限制的文件

  API 库结构

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  帮助参考

  发布应用程序

  API 库结构

  外部例程的分类

  外部例程 A-Z

  错误信息 A-Z

  错误信息的编号

Visual FoxPro 系统事件

Visual FoxPro 键代码

  OLE 控制

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户—服务器应用程序

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

OLE 控制概述

Communication 控制

MAPI 控制概述

MAPI Session 控制

MAPI Message 控制

Outline 控制

Outline 控制属性对话框

Picture Clip 控制

PicClip 控制属性对话框

  工具和示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

BUILDAPP

类浏览器

图象编辑器

OLE 控制示例

  向导


专业级参考
开发和发布客户/服务器应用程序的专业工具

  客户/服务器应用程序

  帮助参考

  发布应用程序

  API 库结构

  OLE 控制

  工具和示例

  向导

文档向导

安装向导

升迁向导


专业级参考开发和发布客户/服务器应用程序的专业工具
外部例程的分类

用于调试的例程

处理环境的例程

错误处理例程

事件处理例程

处理文件的输入和输出的例程

内存管理例程

处理内存变量和数组的例程

处理备注字段的输入和输出的例程

处理菜单的例程

向 Visual FoxPro 返回结果的例程

处理语句和表达式的例程

处理字符串的例程

处理表的输入和输出的例程

处理文本编辑器和剪贴板的例程

处理窗口的例程


专业级参考开发和发布客户/服务器应用程序的专业工具
外部例程 A-Z

A

_ActivateHandler( )

_ActivateIdle( )

_ActivateMenu( )

_ALen( )

_Alloca( )

_AllocHand( )

_AllocMemo( )

B

_BreakPoint( )

C

_CountItems( )

D

_DBAppend( )

_DBLock( )

_DBRead( )

_DBRecCount( )

_DBRecNo( )

_DBReplace( )

_DBRewind( )

_DBSeek( )

_DBSkip( )

_DBStatus( )

_DBUnlock( )

_DBUnwind( )

_DBWrite( )

_DeActivateHandler( )

_DeActivateIdle( )

_DeActivateMenu( )

_DefaultProcess( )

_Dialog( )

_DisposeItem( )

_DisposeMenu( )

E

_EdActive( )

_EdCloseFile( )

_EdCopy( )

_EdCut( )

_EdDelete( )

_EdGetChar( )

_EdGetEnv( )

_EdGetLineNum( )

_EdGetLinePos( )

_EdGetPos( )

_EdGetStr( )

_EdIndent( )

_EdInsert( )

_EdLastError( )

_EdOpenFile( )

_EdPaste( )

_EdPosInView( )

_EdRedo( )

_EdRevert( )

_EdSave( )

_EdScrollToPos( )

_EdScrollToSel( )

_EdSelect( )

_EdSendKey( )

_EdSetEnv( )

_EdSetPos( )

_EdSkipLines( )

_EdUndo( )

_EdUndoOn( )

_Error( )

_ErrorInfo( )

_Evaluate( )

_Execute( )

F

_FCHSize( )

_FClose( )

_FCopy( )

_FCreate( )

_FEOF( )

_FError( )

_FFlush( )

_FGets( )

_FindMemo( )

_FindVar( )

_FindWindow( )

_FindWindowP( )

_FOpen( )

_FPuts( )

_FRead( )

_FreeHand( )

_FSeek( )

_FWrite( )

G

_GetAPIHandle( )

_GetHandSize( )

_GetItemCmdKey( )

_GetItemId( )

_GetItemSubMenu( )

_GetItemText( )

_GetNewItemId( )

_GetNewMenuId( )

_GetNextEvent( )

_GlobalToLocal( )

_GlobalToLocalP( )

H

_HandToPtr( )

_HLock( )

_HUnLock( )

I

_InKey( )

J

K

L

_Load( )

M

_MemAvail( )

_MemCmp( )

_MemFill( )

_MemMove( )

_MemoChan( )

_MemoSize( )

_MenuId( )

_MenuInteract( )

_MousePos( )

_MousePosP( )

N

_NameTableIndex( )

_NewItem( )

_NewMenu( )

_NewVar( )

O

_OnSelection( )

P

_PutChr( )

_PutStr( )

_PutValue( )

Q

R

_RefreshDisplay( )

_RefreshVideo( )

_Release( )

_RetChar( )

_RetCurrency( )

_RetDateStr( )

_RetDateTimeStr( )

_RetFloat( )

_RetInt( )

_RetLogical( )

_RetVal( )

S

_SetHandSize( )

_SetItemCmdKey( )

_SetItemColor( )

_SetItemSubMenu( )

_SetItemText( )

_SetMenuColor( )

_SetMenuPoint( )

_SetMenuPointP( )

_Store( )

_StrCmp( )

_StrCpy( )

_StrLen( )

T

U

_UserError( )

V

W

_WAttr( )

_WBottom( )

_WBottomP( )

_WClear( )

_WClearRect( )

_WClearRectP( )

_WClose( )

_WFindTitle( )

_WFooter( )

_WGetCursor( )

_WGetCursorP( )

_WGetPort( )

_WHeight( )

_WHeightP( )

_WHide( )

_WhToHwnd( )

_WhToHwnd( ) [Macintosh]

_WLeft( )

_WLeftP( )

_WMainWindow( )

_WMove( )

_WMoveP( )

_WOnTop( )

_WOpen( )

_WOpenP( )

_WPosCursor( )

_WPosCursorP( )

_WPutChr( )

_WPutStr( )

_WRight( )

_WRightP( )

_WScroll( )

_WScrollP( )

_WSelect( )

_WSendBehind( )

_WSetAttr( )

_WSetFooter( )

_WSetPort( )

_WSetTitle( )

_WShow( )

_WSize( )

_WSizeP( )

_WTitle( )

_WTop( )

_WTopP( )

_WWidth( )

_WWidthP( )

_WZoom( )

X

Y

Z


专业级参考开发和发布客户/服务器应用程序的专业工具
处理环境的例程

以下 API 例程可以返回与 Visual FoxPro 环境有关的信息

_GetAPIHandle( )

返回当前 FLL 的句柄


专业级参考开发和发布客户/服务器应用程序的专业工具
处理字符串的例程

以下 API 例程可以处理字符串

_StrCmp( )

比较二个以 null 结尾的字符串

_StrCpy( )

将以 null 结尾的字符串从 src 复制到 dest

_StrLen( )

以字节为单位返回以 null 结尾的字符串的长度


专业级参考开发和发布客户/服务器应用程序的专业工具
处理文本编辑器和剪贴板的例程

这些例程允许您处理 Visual FoxPro 文本编辑器、文本编辑器中打开的文件和剪贴板。

_EdActive( )

隐藏或显示指定窗口中的选定范围或插入点的位置。

_EdCloseFile( )

在不提示直接保存，提示后保存或保存为其他文件之前关闭指定的文件。

_EdCopy( )

将选定区域的内容复制到剪贴板上。

_EdCut( )

将选定区域的内容复制到剪贴板上，并从编辑器中删除此内容。

_EdDelete( )

删除选定区域的内容。如果没有选定内容则删除当前位置上的字符。

_EdGetChar( )

返回 EDPOS 位置上的字符。

_EdGetEnv( )

读取编多种辑器的设置。

_EdGetLineNum( )

返回 EDPOS 位置对应的文件行号。

_EdGetLinePos( )

返回 EDLINE 行上第一个字符的EDPOS 。

_EdGetPos( )

返回当前编辑器的 POS ，如果没有选定位置，返回插入点的当前位置。

_EdGetStr( )

读取 EDPOS 和 EDPOS 之间全部的文本，并放置在 TEXT 中。

_EdIndent( )

将指定编辑窗口中的选定的文件文本缩进 int 个制表符。 int 可以是负数从而造成悬挂的效果。

_EdInsert( )

插入 BYTES字节的 TEXT。

_EdLastError( )

返回与指定编辑窗口相关的最近一次编辑器错误的错误编号。

_EdOpenFile( )

为此文件开始一个编辑工作期。

_EdPaste( )

把剪贴板的内容复制到指定编辑窗口的当前位置上。

_EdPosInView( )

如果编辑窗口中指定位置是可见的，则返回 TRUE （“真”）。

_EdRedo( )

重新执行最后撤消的一次修改。

_EdRevert( )

放弃从最近一次使用 _EdSave( ) 保存指定编辑窗口中显示的文件以来对该文件的所有修改。

_EdSave( )

在不关闭编辑窗口情况下保存文件。

_EdScrollToPos( )

确保传递的 EDPOS 在屏幕中可见，但不移动插入点。BOOL 表示在垂直方向居中对齐 EDPOS。

_EdScrollToSel( )

确保插入点在屏幕中。BOOL 表示在垂直方向居中对齐 EDPOS。

_EdSelect( )

选定 EDPOS 和 EDPOS 之间全部的文本。要移动插入点，把两个 EDPOS 设置为相同的值。

_EdSendKey( )

模拟按键，此键由 int 指定。

_EdSetEnv( )

设置编辑器的各种设置值。

_EdSetPos( )

移动插入点，并放弃对已选定文本的选择。

_EdSkipLines( )

将插入点从 EDPOS 移动到 int 行的行首位置上。

_EdUndo( )

撤销对指定窗口中文件所做的最近修改。

_EdUndoOn( )

把发出 _EdUndo( ) 之后直到再次发出 _EdUndo( ) 之间执行的操作作为将来撤消操作的单个动作。


专业级参考开发和发布客户/服务器应用程序的专业工具
向 Visual FoxPro 返回结果的例程

这些例程允许您用一定格式把数据返回到 Visual FoxPro。

_RetChar( )

将函数的返回值设置为以 NULL 结尾的字符串。

_RetCurrency( )

将函数的返回值设置为货币值。

_RetDateStr( )

将函数的返回值设置为日期型。日期以月/日/年 (mm/dd/year) 的格式指定，其中年份可以是两位数或四位数。

_RetDateTimeStr( )

将函数的返回值设置为日期时间。

_RetFloat( )

将函数的返回值设置为浮点型值。

_RetInt( )

将函数的返回值设置为数值型值。

_RetLogical( )

将函数的返回值设置为逻辑型值。把零值当作“假”，把任何其他非零值当作“真”。

_RetVal( )

传递一个完整的 Visual FoxPro Value 结构，从而可以返回任何除“备注”之外的 Visual FoxPro 数据类型。若要返回包含空字符的字符串，必须调用 _RetVal( )。


专业级参考开发和发布客户/服务器应用程序的专业工具
内存管理例程

这些 API 例程允许您为函数处理和分配内存。

_Alloca( )

为调用例程分配一块堆栈空间。当例程结束时，_Alloca( ) 函数自动释放内存

_AllocHand( )

返回 hsize 大小的新建 MHANDLE。没有足够的内存满足要求时，_AllocHand( ) 函数返回 0。由 _AllocHand( ) 函数分配的内存不进行初始化。

_FreeHand( )

释放先前采用 _ALLocHand( ) 等方式分配的内存句柄 hand。

_GetHandSize( )

返回与指定的内存块句柄 hand 相关联的可用字节数。

_HandToPtr( )

将内存句柄转换为 FAR（32 位）指针，指向为此句柄分配的内存。

_HLock( )

锁定内存句柄，在 Visual FoxPro 要求内存重组时，可以防止该句柄移动。

_HUnLock( )

解除对内存句柄的锁定，使得在内存重组期间 Visual FoxPro 可访问该句柄。

_MemAvail( )

如果有足够的内存来分配一个 size 字节的内存句柄，则该函数返回 True（“真”），否则返回 False （“假”） 。

_MemCmp( )

比较两个 length 字节的内存区域。

_MemFill( )

把 character 中 length 个字节的复本填充到内存区中，填充位置从 ptr 所指向的位置开始。

_MemMove( )

把从 src 开始的 length 个字节复制到 dest 处。

_SetHandSize( )

更改分配给内存块句柄 hand 的内存数量。如果内存重新分配成功，则 _SetHandSize( ) 返回“真”，否则返回“假”。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理内存变量和数组的例程

这些 API 例程允许您处理内存变量和内存变量数组。

_ALen( )

返回数组大小的信息，这个数组在名表中的索引是 nti。

_FindVar( )

提供一种初始化定位器的途径，使您可以使用 _Store( ) 将数据放置在已存在的内存变量或字段中。

_Load( )

把 loc 指定的内存变量或当前记录字段的值放入 val 中。

_NameTableIndex( )

返回与给定变量名 name 相对应的名表索引值。如果 name 不在名表内，则返回 -1。

_NewVar( )

创建一个变量或数组。

_Release( )

从内存中释放指定的内存变量或数组。

_Store( )

以值 val 代替 loc 所指定的内存变量。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理文件的输入和输出的例程

这些 API 例程允许您直接创建和处理文件。

_FCHSize( )

把指定文件在磁盘上的大小设置为指定长度 length。所指定的长度可能使文件扩展或截断。

_FClose( )

终止对文件的访问。凡在打开以后进行过更改的缓冲区将自动地刷新磁盘。

_FCopy( )

尝试将源文件 sc 中偏移位置 spos 开始的 len 个字节的内容复制目标文件 dc 中偏移位置 dpos 处。

_FCreate( )

为新建文件指定一个 Visual FoxPro 通道。

_FEOF( )

如果指定文件的文件指针指向文件尾，_FEOF( ) 返回“真”；否则返回“假”(0)。

_FError( )

返回记录的任何文件通道最近的文件操作错误编号。

_FFlush( )

把内存中指定文件所有已做修改的缓冲区内容刷新到磁盘上。

_FGets( )

从文件中读区以回车符分隔的长度为 maxlen 的一行。

_FOpen( )

为一个已存在的文件指定文件通道。

_FPuts( )

向文件中写入指定的以 null 结束，并后跟一个回车符/换行符对的字符串。

_FRead( )

从文件中把恰好 length 个字节的内容复制到缓冲区 buffer 中。

_FSeek( )

将文件指针移动到由 position 和 mode 指定的新位置上。

_FWrite( )

把缓冲区 buffer 中恰好 length 个字节的内容写入文件中。不向文件中添加终结符。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理表的输入和输出的例程

这些 API 例程允许您处理 Visual FoxPro 表。

_DBAppend( )

尝试向 workarea 指定的工作区中打开的表追加一个新记录。

_DBLock( )

尝试锁定当前表记录或在由 workarea 指定的工作区中的文件。

_DBRead( )

在指定 workarea 中将记录指针从当前记录移到指定记录。

_DBRecCount( )

返回指定 workarea 中打开的表的记录数。

_DBRecNo( )

返回指定 workarea 中打开表的当前记录编号。

_DBReplace( )

用一个新值替换一个字段中的原有值。

_DBRewind( )

在指定 workarea 中执行 GO TOP 命令，并返回当前记录的编号。

_DBSeek( )

在当前工作区的索引表中搜索索引关键字与值 val 匹配的第一个记录。

_DBSkip( )

在指定 workarea 中移动记录指针使之跳过一定数目的记录。

_DBStatus( )

返回指定 workarea 的状态标志。

_DBUnlock( )

释放用户对 workarea 指定的工作区中文件或记录设置的所有锁定。

_DBUnwind( )

在指定的 workarea 中执行 GO BOTTOM 命令，并返回当前记录的编号。

_DBWrite( )

将指定 workarea 中当前记录写入磁盘，并更新所有相关的索引。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理备注字段的输入和输出的例程

这些 API 例程允许您处理 Visual FoxPro 表中的备注字段。

_AllocMemo( )

在备注文件中为某个字段分配 size 个字节的空间，并在数据库的相关记录中插入新建块的编号。

_FindMemo( )

返回一个备注字段在备注文件中的位置，利用此位置可以直接读取该字段。

_MemoChan( )

返回与指定的 workarea 相关联的备注文件的文件通道。

_MemoSize( )

返回备注文件中当前记录备注字段的长度。


专业级参考开发和发布客户/服务器应用程序的专业工具
事件处理例程

这些 API r例程允许您创建事件处理程序并执行 Visual FoxPro 事件。

_ActivateHandler( )

在事件处理函数列表的末尾添加一个事件处理函数。

_ActivateIdle( )

在 Visual FoxPro 等待用户输入或等待一个可能超时的事件时，在被调用的事件处理程序列表的末尾添加一个例程。

_DeActivateHandler( )

从事件处理程序列表中删除指定的处理程序。

_DeActivateIdle( )

在空闲循环中删除指定的例程。

_DefaultProcess( )

当 _GetNextEvent( ) 的返回事件不需要特殊处理时，为该事件提供默认的事件处理。

_GetNextEvent( )

将下一个事件读入 EventRec 并返回事件类型。

_InKey( )

返回 timeout 期间内键入的第一个键。timeout 是指 MS-DOS 记时器信号数。

_MousePos( )

把鼠标指针的当前位置填入 pt。

_MousePosP( )

以象素为单位，把鼠标指针的当前位置填入 pt。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理窗口的例程

这些 API 例程允许创建、处理或释放窗口并处理Visual FoxPro 窗口。

_Dialog( )

在屏幕上显示具有指定配色方案的对话框，对话框中包含有指定的主体文本及按钮文本。

_FindWindow( )

把屏幕上的点 pt 所在窗口的 WHANDLE 放置在 wh 中。

_FindWindowP( )

将屏幕上点 pt 所在窗口的句柄放置在 wh 中。

_GlobalToLocal( )

将点的屏幕坐标转换为窗口坐标。

_GlobalToLocalP( )

将点的屏幕象素坐标转换为窗口象素坐标。

_PutChr( )

在当前输出窗口的当前输出位置以常规属性（颜色 0）显示字符 char。

_PutStr( )

在当前输出窗口的当前输出位置以常规属性（颜色 0）显示以 NULL 结尾的字符串。

_PutValue( )

在当前输出窗口的当前输出位置写一个值 val。

_RefreshDisplay( )

重画整个屏幕，包括所有窗口。

_RefreshVideo( )

使 Visual FoxPro 读取当前视频环境。

_WAttr( )

返回一颜色索引的属性字节，此索引是指定窗口配色方案中的指定颜色索引。

_WBottom( )

返回指定窗口底端在屏幕上所在的行。

_WBottomP( )

以象素为单位返回指定窗口底端在屏幕上的位置。

_WClear( )

通过把窗口内容区域更改为默认背景色，清除指定窗口的内容。

_WClearRect( )

通过把指定窗口的指定矩形区域更改为默认背景色，清除该矩形区。

_WClearRectP( )

把窗口的指定矩形区改为默认背景色，删除此矩形区中的内容。

_WClose( )

关闭指定窗口，并释放与此窗口相关联的所有内存。

_WFindTitle( )

传递窗口的标题，并返回窗口的 WHANDLE 。

_WFooter( )

输出窗口的以 NULL 结尾的注脚 footer ，窗口由 footer 中的 wh 指定。

_WGetCursor( )

返回指定窗口中当前逻辑光标的位置。

_WGetCursorP( )

以象素为单位返回指定窗口的当前输出位置。

_WGetPort( )

返回窗口的 WHANDLE，该窗口是当前为用户输出所选定的窗口。

_WHeight( )

返回指定窗口中内容区的行数。

_WHeightP( )

以象素为单位返回指定窗口中内容区的高度。

_WHide( )

从屏幕上删除一个窗口，但保持对其内容的追踪，以便可以重新显示。

_WLeft( )

返回指定窗口左边缘在屏幕上所处的列。

_WLeftP( )

以象素为单位返回指定窗口左边缘在屏幕上所处的位置。

_WMainWindow( )

返回 Visual FoxPro 主窗口的 WHANDLE。

_WMove( )

把指定窗口移动到 pt 所指定的新位置上。

_WMoveP( )

把指定窗口移动到 pt 所指定的新位置。

_WhToHwnd( )

传递 WHANDLE 参数，然后返回 Windows HWND。

_WOnTop( )

返回最前面窗口的 WHANDLE 。

_WOpen( )

创建一个新窗口，其座标由 top, left, bottom 和 right 参数指定。

_WOpenP( )

在 top, left, bottom 和 right 参数指定的位置创建一个新窗口。

_WPosCursor( )

把逻辑光标定位在指定窗口中由 pt 指定的位置。

_WPosCursorP( )

把指定窗口的逻辑光标定位在以象素为单位由 pt 指定的位置。

_WPutChr( )

在指定窗口的输出位置用当前颜色显示一个字符 char 。

_WPutStr( )

在指定窗口的输出位置用当前色显示一个以 NULL 结尾的字符串。

_WRight( )

返回指定窗口右边缘在屏幕上所处的列。

_WRightP( )

以象素为单位返回指定窗口右边缘在屏幕上的位置。

_WScroll( )

上下、左右滚动窗口中的部分内容。

_WScrollP( )

上下、左右滚动窗口中的部分内容。

_WSetAttr( )

把指定窗口配色方案中指定配色方案索引的属性改为新属性 attr 。

_WSelect( )

把指定窗口显示在屏幕的最前面。

_WSendBehind( )

把指定窗口送到屏幕的最后面。

_WSetFooter( )

更改指定窗口的注脚 footer。

_WSetPort( )

把用户输出窗口更改为指定的窗口。

_WSetTitle( )

更改指定窗口的标题。

_WShow( )

在屏幕上把隐藏的窗口显示出来。

_WSize( )

把指定窗口的新尺寸设置为 pt 参数中 h 和 v 所指定的高度和宽度。

_WSizeP( )

把指定窗口的新尺寸设置为 pt 参数中以象素为单位由 h 和 v 指定的高度和宽度。

_WTitle( )

把窗口 wh 以 NULL 结尾的标题放入 title 中。

_WTop( )

返回窗口顶端在屏幕上所处的行。

_WTopP( )

以象素为单位返回窗口顶端在屏幕上所处的位置。

_WWidth( )

返回指定窗口中内容区的列数。

_WWidthP( )

以象素为单位返回指定窗口中内容区的宽度。

_WZoom( )

把窗口缩放到一个新状态。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理菜单的例程

这些 API 例程允许您创建、处理和释放菜单。

_ActivateMenu( )

在屏幕上显示指定的菜单并立刻将控制返回给调用例程。

_CountItems( )

返回指定菜单上菜单标题或菜单栏的数目。

_DeActivateMenu( )

从屏幕上移去一个菜单。

_DisposeItem( )

从内存中释放指定的菜单项，并释放与此菜单项相关的所有内存。

_DisposeMenu( )

释放指定的菜单及其所有的菜单项，并释放与此菜单相关的所有内存。

_GetItemCmdKey( )

把指定菜单项上显示的键盘快捷键字符串复制到由参数 text 指向的缓冲区中。

_GetItemId( )

返回指定菜单上指定项的菜单项标识符。

_GetItemSubMenu( )

返回指定给菜单项的子菜单或菜单项标识符。

_GetItemText( )

把菜单栏文本或菜单标题文本复制到 text 指向的缓冲区中。

_GetNewItemId( )

返回一个标识符，该标识符当前可用作指定菜单上某一菜单项的标识符。

_GetNewMenuId( )

返回可以使用的菜单标识符。

_MenuId( )

返回与系统定义的系统菜单或菜单标题的原义相对应的菜单标识符。

_MenuInteract( )

设置 itemid 和menuid，以指明选择了哪个菜单项，如果有的话。

_NewItem( )

把具有指定标识 itemid 的菜单项添加到 menuid 所指定的菜单中。

_NewMenu( )

创建一个指定类型的新菜单。

_OnSelection( )

指定当用户选择特定的菜单和菜单项时，要执行的例程。

_SetItemCmdKey( )

为指定菜单项设置键盘快捷键，并为键盘快捷键设置显示的文本。

_SetItemColor( )

如果不想让菜单项使用 _SetMenuColor( ) 指定的配色方案，单独定义一个菜单项的配色方案。

_SetItemSubMenu( )

为给定菜单项指定一个子菜单。可以用 _SetItemSubMenu( ) 把菜单附加到菜单标题，或把子菜单附加到菜单项上。

_SetItemText( )

更改指定菜单项的显示文本。菜单项可以是菜单标题或菜单栏。

_SetMenuColor( )

为指定的整个菜单和没有设置特殊配色方案的菜单项定义配色方案。

_SetMenuPoint( )

指定一个菜单的左上角在屏幕上的位置 loc。

_SetMenuPointP( )

以象素为单位，指定菜单左上角的屏幕位置 loc。


专业级参考开发和发布客户/服务器应用程序的专业工具
处理语句和表达式的例程

这些 API 例程允许编译并执行 Visual FoxPro 命令。

_Evaluate( )

编译并执行由 expr 指定的 Visual FoxPro 表达式，其结果放置在 res 中。

_Execute( )

编译并执行在 stmt 中指定的以 Null 结尾的语句。


专业级参考开发和发布客户/服务器应用程序的专业工具
错误处理例程

这些 API 例程允许决定错误的原因和类型。

_Error( )

在运行时根据 code 的值指定的错误向 Visual FoxPro 发出信号。

_ErrorInfo( )

返回与 code 指定的 Visual FoxPro 内部错误编号相对应的外部错误编号。

_UserError( )

用 message 中指定的以 NULL 结尾的文本报告一个错误。


专业级参考开发和发布客户/服务器应用程序的专业工具
用于调试的例程

这些 API 例程允许调试您的 API 库。

_BreakPoint( )

一个生成调试器断点指令 INT 3 的宏。此函数可能有助于调试外部例程。


 错误信息 A-Z

内部	外部	错误信息
815	1815	必须使用 SELECT ... INTO TABLE 创建"<临时表>"
832	1832	"<字段> | <变量>"不唯一，必须有效。
165	1165	"<字段>"不与当前工作区相关。
196	1196	"<文件>"不是 Visual FoxPro .EXE 文件。
309	1309	"<文件>"不是对象文件。
298	1298	"<名称>"带宽太大，在页面上不合适。
929	1929	"<名称>"只能在方法中使用。
932	1932	"<名称>"当挂起时不能关闭。
462	1462	"<名称>"内部一致性错误。
737	1737	"<名称>"是一个方法、事件或对象。
740	1740	"<名称>"是只读属性。
175	226	"<名称>"不是文件变量。
174	225	"<名称>"不是内存变量。
176	232	"<名称>"不是数组。
924	1924	"<名称>"不是对象。
983	1983	"<名称>"对象不能返回值。
429	1429	"<名称>".
130	1130	'字段'片语未找到。
904	78	** 或 ^ 作用域错误。
***	***	*无效日期*
***	***	*中断*
550	1550	.DBC 内部一致性错误。
663	115	.DIF 文件头无效。
664	117	.DIF 类型指示符无效。
665	116	.DIF 向量无效 - .DBF 字段不匹配。
668	120	.SYLK 文件大小范围无效。
667	121	.SYLK 文件格式无效。
666	119	.SYLK 文件头无效。
A

727	1727	需要.DBF-格式的帮助文件。
771	1771	与此同名的成员对象已存在。
538	1538	正在执行一个存储过程。
961	1961	"<名称>" 子目录或文件已存在。
889	1889	在多关系中的表只能有一个子记录。
137, 177	13	未找到别名。
601	24	别名已在使用。
210	103	超过了允许的DO 嵌套层次。
870	1870	ALTER TABLE 操作中断。
781	1781	对象的控制源不能设置给它的 Value 属性。
98	1098	调用了 API 函数_UserError( )。
726	1726	未找到 API 库。
711	1711	API 库修订不匹配。请重新生成库。
178	1178	应用程序 "<文件>" 未关闭。
972	1972	"<名称>" 正在被使用。
631	230	数组维数无效。
764	1764	数组不是父对象的成员。
974	1974	数组不能被指定给数组元素。
B

542	1542	基表的字段已被更改，并与视图字段不匹配。无法设置视图字段的属性。
590	1590	BEGIN TRANSACTION 命令失败。嵌套层次太多。
136	38	到了文件开始。
650	227	框的尺寸无效。
164	1164	浏览结构已更改。
163	1163	关闭浏览表。
C

651	1651	不允许 CANCEL 或 SUSPEND 命令。
303	62	无法访问超出字符串的字符。
106	1106	无法访问文件；事务正在进行。
152	1152	无法访问选定的表。
421	1421	无法激活 OLE 服务器。
741	1741	无法添加 "<名称>"。类定义循环。
755	1755	无法向这个类添加对象。
769	1769	无法向列添加这个对象。
768	1768	无法向表格添加这个对象。
***	***	无法分配屏幕映象。
672	1672	无法从有密码保护的文件中追加。
795	1795	无法整理不透明的表单。
689	1689	没有主程序无法生成 .APP 或 .EXE 文件。
758	1758	在SetAll 方法中无法更改 "<name>" 属性。
770	1770	无法清除正在使用的类。
614	176	无法清除正在使用的菜单。
615	177	不能清除正在使用的弹出式菜单。
951	1951	无法清除正在使用的对象。
546	1546	在执行与表相联系的表达式时不能关闭表。
535	1535	此数据库正由一个项目使用，不能关闭。
971	1971	在当前的 COMPILE 命令完成之后才能进行下一编译。
172	102	不能创建文件 "<文件>"。
102	1102	不能创建文件。
***	***	不能建立程序工作空间。
623	169	不能定义菜单项。
307	1307	不能被 0 除。
871	1871	不能去除所有列。
754	1754	在 DLL 中找不到入口点 "<名称>"。
562	1562	在数据库中找不到对象 "<名称>"。
***	***	找不到拼写检查程序。
944	1944	找不到生成器程序。
798	1798	找不到转换程序。
693	1693	找不到菜单生成程序。
563	1563	在当前数据库中找不到视图 "<名称>"。
846	1846	不能按合计字段分组。
671	1671	不能导入有口令保护的文件。
547	1547	不能从视图中插入一个空行到其基表。
566	1566	当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令。
720	1720	在 READ 命令对含格式文件进行操作时，不能发出 SET FORMAT 命令
753	1753	不能加载 32 位 DLL "<名称>"。
527	1527	找不到 ODBC 库 — ODBC32.DLL。
412	1412	找不到 COMSPEC 环境变量。
731	1731	不能修改基类。
948	1948	不能修改正在使用的类。
777	1777	不能修改视图临时表的结构。
844	1844	不能嵌套合计函数。
926	1926	不能嵌套类定义。
254	1254	不能嵌套键标记。
337	1337	不能嵌套 PRINTJOB 命令。
***	***	不能打开配置文件。
171	101	打不开文件。
930	1930	不能重定义 "<名称>"。
617	175	不能重定义正在使用的弹出式菜单。
616	174	不能重定义正在使用的菜单。
622	170	不能释放菜单项。
253	1253	不能重命名当前目录
153	1153	不能重命名文件到另一个设备。
970	1970	不能重新打开项目文件 "<名称>"。
976	1976	不能解决后链。
***	***	不能在 MS-DOS 3.0 以前版本运行。
706	1706	不能按降序对 .IDX 文件排序。
157	1157	不能更新文件。
292	292	不能使用 0 或负数作为 LOG10( ) 参数。
979	1979	不能以可视方式修改派生自非可视类的类。
978	1978	不能以可视方式修改此种类型的类
146	111	不能更新临时表。
502	1502	记录正在使用，不能写入。
1761	1761	类 "<名称>" 已经存在。
434	1434	类 "<名称>" 未注册。
776	1776	类 "<名称>" 正在使用。
576	1576	在类库中找不到类 "<名称>"。
762	1762	找不到类 "<名称>"。
313	1313	取消创建类。
733	1733	找不到类定义 "<名称>"。
950	1950	类定义 "<名称>" 出现递归。
747	1747	类文件 "<名称>" 无效。
746	1746	"<名称>" 的类文件名无效。
751	1751	类文件版本高于当前版本
752	1752	MODIFY CLASS 正在使用类。
993	1993	找不到类库文件 "<名称>"。
949	1949	类名无效。
914	1914	代码页编号无效。
915	1915	找不到排序序列 "<名称>"。
728	1728	配色方案已保存。
642	1642	找不到颜色集资源。
656	223	列号必须在 0 到 255 之间
657	1657	列号必须在 0 到右页边距之间
695	1695	COLUMN | FORM | ALIAS | NOOVERWRITE | WIDTH 只允许与 FROM 子句联用。
698	1698	COLUMN | ROW | ALIAS | NOOVERWRITE | SIZE | SCREEN 只允许与 FROM 子句联用。
579	1579	对于临时表处于表缓冲方式下的表，不能发布此命令。
593	1593	在事务处理期间不能发布此命令。
220	1220	命令中包含无效字符。
219	36	命令中包含无法识别的片语或关键字。
297	1297	只有在相关模式下才允许使用该命令
221	1221	命令中缺少所需要的子句
981	1981	在"<名称>"文件中出现编译错误
252	1252	该行的编译代码太长
541	1541	连接 "<名称>" 忙。
466	1466	连接句柄无效。
497	1497	连接名称无效
526	1526	"<名称>"连接错误
522	1522	内部连接一致性错误。
725	1725	已经用 #DEFINE 建立了常数
799	1799	转换被取消
509	1509	转换被取消，请增加备注字段块的大小
168	1168	不能向执行文件中添加图标
988	1988	当前值超出范围。
166	1166	光标被毁坏或者格式错误
142	44	循环关联
D

966	1966	数据环境已经加载。
967	1967	数据环境已经卸载
549	1549	当事务打开时，不能释放#<号>数据段
599	1599	数据工作期 #<编号> 被强制回滚所有事务以避免死锁。
732	1732	此属性的数据类型无效
302	9	数据类型不匹配。
534	1534	"<别名>"数据库不能打开
569	1569	"<名称>"数据库: 文件访问失败
561	1561	数据库无效，请使之生效
570	1570	数据库只读
773	1773	数据库对象类型无效
544	1544	"<名称>"字段的 DataType 属性无效
232	1232	DIMENSION 包含没有下标参数的变量声明
963	1963	没有找到目录
633	216	不能使用显示模式
907	1907	驱动器符号非法
156	1156	字段名称重复
E

211	1211	缺少 IF | ELSE | ENDIF 语句声明
135	4	已到文件尾。
591	1591	当没有相应的BEGIN TRANSACTION命令时，不能执行END TRANSACTION命令
214	1214	ENDTEXT没有对应的TEXT声明
473	1473	环境级的属性设置无效
957	1957	打印机的假脱机访问发生错误
779	1779	向对象中添加"<名称>"时发生错误。成员/属性名称重复
112	1112	关闭文件时发生错误。
424	1424	在向剪贴板上复制 OLE 对象时发生错误。
973	1973	在建立"<名称>"的表时发生错误。
423	1423	在建立OLE 对象时发生错误。
735	1735	在类定义中发生错误。
258	1258	PICTURE 子句中发生错误。
508	1508	初始化 OLE 时发生错误。
554	1554	临时表实例化时发生错误。"<别名>"表不能打开。对象将被忽略。
736	1736	对象实例化时发生错误。
958	1958	载入打印机驱动程序时发生错误。
995	1995	在装载数据环境时发生错误。表正在使用
881	1881	在导入"<错误>"时发生错误。
797	1797	在转换中发生错误
584	1584	从数据库中读取属性时发生错误，该属性被忽略
104	1104	文件读取错误
296	1296	资源读取错误
422	1422	保存 OLE 对象时发生错误
105	1105	写文件发生错误
977	1977	更新文件时需要独占打开文件，请重新打开文件
523	1523	用户取消该操作
305	46	表达式操作的数值非法
902	67	表达式操作失败
148	1148	当条件执行时，表达式重新进入
759	1759	表达式非法，请对 "<名称>" 属性使用合法的表达式
940	1940	在WITH/ENDWITH范围之外，表达式无效
947	1947	表达式过于复杂
293	293	使用ACOS( )函数的表达式超出范围
291	291	使用ASIN( )函数的表达式超出范围
F

***	***	<expN>致命的错误，报告<expN>错误
1	1001	特性无效
580	1580	对于非.DBC的表特性不支持
953	1953	只有在设计时才能使用特性
530	1530	取操作被取消；远程表已经关闭
581	1581	"<名称>"字段不能为空
582	1582	"<名称>"字段的有效性规则被破坏
647	1647	字段表达式包含非法的数据类型
913	1913	字段必须为通用型字段
638	350	字段必须为备注型字段
712	1712	字段名称重复或者无效
713	1713	字段宽度或者小数位数非法
529	1529	"<名称>"文件已经作为数据库的一部分存在
553	1553	文件 <名称> 是一个数据库
551	1551	文件 <名称> 是一个无效的数据库
552	1552	文件 <名称> 不是一个数据库
558	1558	文件 <名称> 不是数据库的一部分
565	1565	文件 <名称> 是数据库的一部分
933	1933	文件 <名称> 没有关闭
705	1705	访问文件的操作无效
121	7	文件已经存在
503	1503	文件不能锁定
120, 173	1	文件不存在
702	108	文件被其他用户使用
132	3	文件被使用
113	1113	文件没有打开
708	1708	文件在另外一个工作区被打开
718	1718	文件只读
338	1338	文件的版本错误
637	1637	文件必须独占方式打开来转换备注文件
701	110	文件必须独占方式打开
918	1918	文件名称过长
750	1750	Visual FoxPro 文件版本比当前版本新
180	91	文件没有使用LOAD命令放在内存中
140	1140	FILTER表达式超过了允许的大小
749	1749	表单 (.SCX) 文件至少包含一个表单
991	1991	表单 <名称> 文件为以前的FoxPro版本，在执行之前请进行转换
686	1686	表单文件 <名称> 无效
294	1294	FOXUSER.DBF 文件无效
901	11	函数的参数值，类型或者数目无效
999	1999	函数不能完成任务
536	1536	函数在本地表上不支持
525	1525	函数在远程表上不支持
300	1300	函数名称缺少 )
304	1304	函数名称缺少 (
586	1586	函数需要行缓冲方式或表缓冲方式
G - H

986	1986	GDI 内存太少，关闭一个或者多个窗口，重新进行操作
489	1489	不能在更新状态在WHERE 条件中使用通用字段。改变视图的WhereType 属性
I

167	1167	图标已毁坏或者格式错误
587	1587	OLDVAL( ) 或者 CURVAL( ) 非法嵌套
910	1910	非法的打印驱动程序循环
887	1887	在计算规则中非法循环
960	1960	对<名称>变量的非法重新定义
594	1594	在将前面的记录锁定之后，在事务中锁定文件将是非法的
679	1679	只能导入 Lotus 1-2-3 3.0版本文件的工作表
241	1241	在组表达式中数据类型不正确
994	1994	包含文件 <名称>没有找到
471	1471	不正确的列格式
470	1470	属性名称不正确
886	1886	索引不能接受 null 值
133	114	索引文件和表不匹配请删除索引文件，重新建立索引
125	23	索引表达式超过最大限制
118	19	索引文件和表不匹配
683	1683	索引标识没有找到
684	1684	必须指定索引选项卡或者文件名称
2	1002	输入/输出操作失败
588	1588	在行或表缓冲激活时，或者正在使用集成限制时，不能执行 INSERT 操作
308	1308	栈空间不足
243	1243	内部错误：报表中的字符太多
407	231	SET 函数中使用非法参数
477	1477	在执行 SQLCOLUMNS( ) 序列时，发生非法的调用
474	1474	在执行SQLEXEC( ) 序列时，发生非法的调用
475	1475	在执行SQLMORERESULTS( ) 序列时，发生非法的调用
476	1476	在执行SQLTABLES( ) 序列时，发生非法的调用
783	1783	对于 @...Class 命令指定的类无效
***	***	无效的压缩 EXE 文件，重建 EXE
578	1578	无效的数据库表名
245	1245	在标签定义文件中的无效表达式
111	1111	无效的文件说明
510	1510	无效的文件格式。如果是dBASE 文件,必须首先进行转换。要转换它，键入 MODIFY LABEL <标签文件名称>.
107	112	无效的关键字长度
115	1115	对临时表对象的无效操作
***	***	无效的或缺失的 EXE 文件
295	202	无效的路径或文件名
103	1103	无效的查询偏移
224	31	无效的下标引用
479	1479	无效的更新列名 <名称>
652	1652	Visual FoxPro 函数作为数组非法使用
223	1223	无效的变量引用
J - K

124	1124	关键字超过允许的范围
117	1117	关键字字段长度不匹配
255	1255	键标记 <标记名> 无效
257	1257	键字符串过长
639	356	键盘宏文件格式无效
L

215	54	标签文件无效
653	1653	标签嵌套错误
654	221	缩进的左边界必须小于右边界
204	21	内存变量字符串的长度超出
908	1908	长度或小数位数参数无效
691	1691	库文件 <名称> 无效
209	18	行过长
655	222	行号必须小于页长度范围
194	1194	链接命令失败
911	1911	环境需要本地化产品
905	58	LOG( ): 不能用 0 或者负数作为自然对数的参数
***	***	要求逻辑表达式
662	1662	Lotus 1-2-3 版本 1.0 的文件格式无效
660	297	Lotus 1-2-3 版本 2.0 的文件格式无效
678	1678	Lotus 1-2-3 版本 3.0 的文件格式无效
M

641	355	没有定义宏
609	1609	超过菜单项的最大限制
607	1607	超出包含在菜单中的菜单项最大数目
608	1608	超出菜单定义中的菜单最大号（25）
431	1431	OLE 指定的参数超过 Visual FoxPro 的限制
669	392	要导入的文件中包含超过长度的字段
943	1943	成员<名称>不能求值成对象
760	1760	成员<名称>是一个类成员
975	1975	成员对象<名称> 没有实例化
603	41	备注文件 <名称>缺少或者无效
237	55	内存变量文件无效
687	1687	菜单文件无效
627	178	菜单没有用 ACTIVATE MENU 激活
619	179	菜单没有用 ACTIVATE POPUP 命令激活
618	168	菜单没有用 DEFINE MENU 定义
625	165	菜单没有用 DEFINE POPUP 定义
613	167	菜单项位置必须是正值
611	1611	菜单项和标题必须是字符型
626	287	菜单尺寸太小
629	181	ACTIVATE MENU 命令中指定的菜单正在使用
630	182	ACTIVATE POPUP 命令中指定的菜单正在使用
624	164	未使用 DEFINE PAD 命令定义菜单标题
628	279	未点中菜单
765	1765	方法包含语法错误。未保存方法
661	1661	Microsoft Excel 文件格式非法
723	1723	不匹配的 #IF/#ELSIF/#ELSE/#ENDIF 语句
256	1256	键标记中大括号不匹配
724	1724	缺少 #ENDIF 语句
193	1193	缺少 .RTT 部分
306	1306	缺少逗号 (,)
227	152	缺少表达式
231	1231	缺少操作数
670	1670	Multiplan 4.0 版文件格式无效
710	1710	PROMPT 样式的菜单不支持 MULTISELECT 或 MOVER 子句
145	1145	必须是字符或数值类型的关键字段
226	1226	必须是一个文件变量
225	1225	必须是内存变量或数组变量
239	94	必须指定附加参数
N

205	96	嵌套错误
520	1520	没有数据库打开或设置为当前数据库
878	1878	DROP 没有默认值
158	47	在处理中没有找到字段
143	138	没有找到要复制的字段
492	1492	对<名称>更新的表没有指定关键列，使用临时表中的KeyFieldList 属性
605	1605	没有定义菜单
604	1604	没有定义菜单项
620	166	此菜单中没有定义菜单项
621	1621	此菜单中没有定义菜单标题
964	1964	在WindowType 属性设置为READ 或者READ MODAL的表单、表单集中，没找到页框或页面
238	1238	没有找到 PARAMETER 语句
649	1649	此命令之前没有 PRINTJOB 命令与之对应
879	1879	没有主关键字
796	1796	当前平台没有发现记录
877	1877	DROP 中无规则
774	1774	没有找到工作表
612	1612	没有定义这样的菜单或菜单项
119	52	没有表打开
491	1491	没有指定更新的表。使用临时表的Tables 属性
240	45	不是字符表达式
128	27	不是数值表达式
123	15	不是一个表
682	1682	不是用户自定义窗口
676	256	不是一个合法的Framework II 数据库/工作表
675	255	不是一个有效的RapidFile 数据库
114	56	没有足够的磁盘空间给<文件名称>
149	1149	没有足够的缓冲内存空间
150	1150	没有足够的内存空间给文件映象
151	1151	没有足够的内存空间保存文件名称
600	1600	没有足够的内存空间用 USE 命令 打开表
696	1696	FROM 语句中不允许 OWAIT/SAVE/NOENVIRONMENT/IN/WINDOW 子句
159	39	数值溢出。数据丢失
O

766	1766	对象<名称>没找到
923	1923	对象<名称>没找到
985	1985	对象已有数据环境，不能使用 SaveAs 方法使用另一个环境
744	1744	对象类对此容器非法
195	1195	对象文件 <文件>在以前的 FoxPro 版本中编译
719	1719	对象文件 <名称>正在使用，不能从内存中清除
938	1938	对象没有包含在<名称>中
575	1575	对象名称非法
942	1942	不能将对象指定给数组
987	1987	不能以编程方式向表单设计器中添加对象
989	1989	不能以编程方式删除表单设计器中的对象
528	1528	ODBC 入口点<名称>未找到
426	1426	OLE 错误代码 0x <名称>
427	1427	OLE 非正常的代码号<名称>
428	1428	OLE从<名称>返回非正常的代码号<名称>
420	1420	OLE 对象无效或毁坏
965	1965	表单或表单集的一个成员基于非可视类，不能写入 . VCX 文件
968	1968	表单或表单集的一个成员基于非可视类，不能写入 .SCX 文件
436	1436	通用字段中只允许有可插入的对象
885	1885	只有结构化标识可以定义为候选关键字
912	1912	对于通用字段操作非法
602	34	对备注、通用或图片型字段操作非法
301	107	操作符/操作数类型不匹配
P

688	1688	Paradox 文件格式无效
767	1767	父对象不允许<名称>的属性设置
217	1217	语句中发生 Picture 子句错误
108	1108	图形太大，毁坏或者格式错误
***	***	弹出式菜单太大，显示第一个<expN>入口
722	1722	预处理表达式非法
681	1681	不允许与 PREVIEW 子句一起使用 OFF/NOCONSOLE 或者 TO PRINT/FILE 语句
883	1883	已经存在主关键字
956	1956	不能访问打印机
643	1643	打印机驱动程序毁坏
644	1644	没有找到打印机驱动程序
406	125	打印机未准备就绪
704	124	打印机重定向无效
162	1162	过程 <名称>没有找到
937	1937	过程文件 <名称>没有找到
***	***	产品没有正确地安装
202	1202	程序太大
946	1946	项目文件版本错误
685	1685	项目文件非法
169	1169	项目文件只读
763	1763	属性<名称>已经存在
738	1738	属性 <名称>不是方法或者事件
734	1734	属性 <名称>没有找到
757	1757	属性 <名称>被保护
743	1743	属性 <名称>只读
468	1468	属性对于表的临时表无效
467	1467	对本地的临时表，属性非法
559	1559	没有找到属性
739	1739	在重新载入数据环境之后，属性设置才生效
560	1560	属性值无效
469	1469	属性值超出范围
Q

716	1716	队列没有找到
R

700	109	记录被其他用户使用
110	20	记录没有索引
703	130	记录没有锁定
109	5	记录超出范围
126	1126	记录过长
583	1583	破坏记录的有效性规则
206	1206	宏定义重复
880	1880	在当前数据库中找不到相关的表
882	1882	相关的标识没有找到，或者不存在主标识或候选标识
645	1645	报表嵌套中包含错误
216	50	报表文件无效
592	1592	没有相应的 BEGIN TRANSACTION 命令不能执行 ROLLBACK 命令
312	30	行或列位置超出屏幕的范围
598	1598	规则和触发器代码必须均衡使用事务
405	1405	RUN|! 命令运行失败
411	1411	RUN|! 命令的字符串太长
S

490	1490	不支持将可转换的表单作为对象保存
507	1507	屏幕代码对于可用的内存空间来说太大
851	1851	SELECTs 是 UNION 不可兼容的
715	1715	找不到指定的服务器
540	1540	工作期号码无效
***	***	没有找到源代码
***	***	源代码过期
845	1845	SQL 表达式过于复杂
499	1499	SQL 参数<名称> 无效
493	1493	缺少 SQL 参数
465	1465	内部 SQL 传递一致性错误
498	1498	SQL SELECT 语句非法
811	1811	SQL：在非数值表达式上进行合计 操作
802	1802	SQL：找不到表
806	1806	SQL：列<字段> | <变量 >没有发现
819	1819	SQL：DISTINCT 语句非法
831	1831	SQL：在建立临时索引时发生错误
801	1801	SQL：关联字段发生错误
818	1818	SQL：需要 FROM 语句
807	1807	SQL：GROUP BY 子句非法
803	1803	SQL：HAVING 子句非法
828	1828	SQL：在子查询中 GROUP BY 语句非法
830	1830	SQL：没有找到索引
800	1800	SQL：内部错误
822	1822	SQL：无效的合计字段
865	1865	SQL：UPDATE 中无效的 SET 表达式
810	1810	SQL：子查询使用无效
839	1839	SQL：操作被取消
808	1808	SQL：ORDER BY 子句无效
809	1809	SQL：内存溢出
814	1814	SQL：不支持此类型的查询
820	1820	SQL：SELECT 包含了无效的 *
826	1826	SQL：SELECT 语句无效
804	1804	SQL：语句无效
812	1812	SQL：语句过长
825	1825	SQL：子查询非法
842	1842	SQL：子查询嵌套过多
841	1841	SQL：引用的列过多
864	1864	SQL：UPDATE 中使用的字段过多
805	1805	SQL：子查询过多
834	1834	SQL：UNION 过多
813	1813	SQL：在子查询中非法使用 UNION
833	1833	SQL：WHERE 子句无效
906	61	SQRT 参数不能为负
233	95	不允许在对话模式下使用语句
931	1931	语句不在过程中
927	1927	类定义中的语句无效
928	1928	语句仅在类定义中有效
934	1934	语句仅在方法内有效
903	1903	字符串过长
707	1707	没有找到结构 .CDX 文件
235	1235	结构非法
212	1212	嵌套结构太深
860	1860	子查询返回不止一个记录
234	1234	下标超出定义范围
236	1236	在使用 RESUME 之前挂起程序
673	1673	Symphony 1.0 版本文件格式无效
674	1674	Symphony 1.1 版本文件格式无效
242	1242	字段表达式中出现语法错误
200	10	语法错误.
T

648	228	Tab 停止键必须按升序排列
548	1548	<别名>表包含一个或者多个打开的非结构化索引，请关闭它们并再使用 Begin Transaction
564	1564	数据库中表<名称>已经存在
577	1577	在关系中引用了表<名称>
545	1545	<名称>别名的表缓冲包含不能提交的更改
596	1596	没有启用表缓冲
122	26	表没有设置索引次序
228	17	表的编号无效
690	1690	在索引期间非法操作表
589	1589	表缓冲或行缓冲需要 SET MULTILOCKS 设置为 ON
888	1888	标识名称过长
147	1147	在关系中已经使用了目标表
954	1954	生成器程序已运行
478	1478	数据环境中关系对象的 ChildOrder 属性不再有效。此关系即将被取消
969	1969	剪贴板包含了一个或者多个对象，这些对象不能添加到容器中，它们不能粘贴
935	1935	当前对象没有从<名称>类中继承
945	1945	当前的对象已经释放
742	1742	对象的数据源必须是变量引用
557	1557	数据库必须以独占方式打开
997	1997	<名称>字段的默认值不能得到该字段的正确类型
962	1962	目录非空
984	1984	<名称>表的字段不与数据库入口匹配
131	1131	FROM 子句中指定的文件为空
998	1998	<名称> 的索引表达式中包含对备注字段、通用字段或者图片字段的非法引用
144	42	必须在 CONTINUE 命令之前执行 LOCATE 命令
571	1571	名称 <名称>已经被其他对象使用，请选择不同的名称命令
***	***	远程视图向导不能获得此远程表的列信息。可能是 ODBC 错误，也可能是因为当前用户不能使用该远程表
524	1524	选用的打印驱动程序不支持直接访问
531	1531	因为<名称>的索引或者条件表达式非法，不能执行更新表的操作
659	1659	在只读方式打开时，带有备注字段的表不能进行转换
778	1778	在添加记录之前必须转换表
982	1982	TO 子句只能对模式表单或表单集使用
996	1996	字段 <名称>合法性规则不能得出逻辑型或者 NULL 型
213	1213	在 FOR ... ENDFOR 或者 CASE ... ENDCASE 命令中缺少关键字
182, 282	43	没有足够的内存完成该操作
780	1780	数组元素被定义为对象，不能在类定义中重新定义
782	1782	该 OLE 属性不能为一个表达式
521	1521	对类成员对象不支持此操作
533	1533	属性为只读
916	1916	为了使用该功能，在 CONFIG.FPW 文件中设置 CODEPAGE=AUTO 并重新起动 Visual FoxPro
229	1229	参数太少
230	1230	参数太多
310	1310	PICTURE 子句中使用的字符太多
872	1872	列太多
694	1694	指定的扩展名太多
100	6	打开的文件太多
203	22	内存变量太多
201	1201	使用的名称太多
875	1875	定义太多的更改关键字
250	1250	使用太多的 PROCEDURE 命令
249	1249	使用太多的 READ 命令
161	1161	演示版中包含太多要浏览或编辑的记录
646	1646	总计字段类型必须是日期或者数值型
246	1246	标签的全部宽度超过允许大小
539	1539	触发器失效
532	1532	不支持类型转换
543	1543	"<名称>"字段的 DataType 属性要求的类型转换非法
U

410	1410	不能建立临时工作文件
717	1717	不能生成一个打印驱动程序
***	***	不能找到需要的 Visual FoxPro 版本
***	***	不能处理错误
884	1884	索引<名称>唯一性被破坏
***	***	不能识别的错误代码
247	104	不能识别功能键
925	1925	<名称>成员不能识别
222	16	不能识别命令动词
141	1141	不能识别的索引文件版本，请重建索引
692	1692	不能解决的本地名称冲突
595	1595	发生更新冲突。在当前行缓冲中的一些改变被提交。请使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用手工事务回滚更新操作
585	1585	发生更新冲突。使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用 TABLEREVERT( ) 回滚更新操作
V

129, 170	12	“变量”变量没有找到
134	1134	变量必须在选定的表中
494	1494	视图定义已经更改
568	1568	视图字段已经改变，更新和关键字段属性被重设置为默认值
606	127	视图文件非法
597	1597	视图中需要 DB_BUFOPTROW 或 DB_BUFOPTTABLE
922	1922	卷标不存在
W

485	1485	警告: 在<号>记录开始出现非法的数据转换
486	1486	警告:  Invalid memo 在<号>记录开始出现非法的备注字段转换
496	1496	警告: 在检查远程更新冲突时没有足够的信息
483	1483	警告: 不能设置连接包大小
480	1480	警告:  不能设置连接同步/异步方式
481	1481	警告:  不能设置连接超时
487	1487	警告:  不能设置连接事务模式
495	1495	警告: “别名”表 KeyField 属性定义的关键字不唯一
484	1484	警告: 下一个更改的字符串已经被远程修改
482	1482	警告: 不能设置查询超时
955	1955	WIN.INI 注册被破坏
714 636	214	没有用 DEFINE WINDOW 定义窗口
632	1632	窗口文件格式无效
634	215	窗口没有用 ACTIVATE WINDOW 激活
635	332	DEFINE WINDOW 中指定窗口的坐标非法
939	1939	WITH/ENDWITH 不匹配
775	1775	没有找到 <名称>的工作表
680	1680	Lotus 1-2-3的3.0 版本工作表被隐藏
X - Z

127	1127	FOR 或 WHILE 语句中必须使用逻辑表达式
139	37	在 FILTER 中必须使用逻辑表达式


 按编号的错误信息

使用 _ErrorInfo( ) 可以确定与特定外部错误编号相联系的错误信息。

内部	外部	错误信息
***	***	*日期表达错误*
***	***	不能分配屏幕映象
***	***	不能建立程序工作空间
***	***	找不到拼写检查程序
***	***	不能打开配置文件
***	***	不能在 MS-DOS 3.0 以前版本运行
***	***	致命的错误，报告<expN>错误
***	***	*中断*
***	***	无效的压缩 EXE 文件，重建 EXE
***	***	无效的或缺失的 EXE 文件
***	***	要求逻辑表达式
***	***	弹出式菜单太大，显示第一个<expN>入口
***	***	产品没有正确地安装
***	***	没有找到源代码
***	***	源代码过期
***	***	远程视图向导不能获得此远程表的列信息。可能是 ODBC 错误，也可能是因为当前用户不能使用该远程表
***	***	不能找到需要的 Visual FoxPro 版本
***	***	不能处理错误
***	***	不能识别的错误代码
0001

120, 173	1	文件不存在
132	3	文件被使用
135	4	已到文件尾
109	5	记录超出范围
100	6	打开的文件太多
121	7	文件已经存在
302	9	数据类型不匹配
200	10	语法错误.
901	11	函数的参数值，类型或者数目无效
129, 170	12	“变量”变量没有找到
137, 177	13	找不到别名
123	15	不是一个表
222	16	不能识别命令动词
228	17	表的编号无效
209	18	行过长
118	19	索引文件和表不匹配
110	20	记录没有索引
204	21	内存变量字符串的长度超出
203	22	内存变量太多
125	23	索引表达式超过最大限制
601	24	别名已被使用
122	26	表没有设置索引次序
128	27	不是数值表达式
312	30	行或列位置超出屏幕的范围
224	31	无效的下标引用
602	34	对备注、通用或图片型字段操作非法
219	36	命令中包含了不可识别的词/关键字
139	37	在 FILTER 中必须使用逻辑表达式
136	38	已到文件头
159	39	数值溢出。数据丢失
603	41	备注文件 <名称>缺少或者无效
144	42	必须在 CONTINUE 命令之前执行 LOCATE 命令
182, 282	43	没有足够的内存完成该操作
142	44	循环关联
240	45	不是字符表达式
305	46	表达式的结果非法
158	47	在处理中没有找到字段
216	50	报表文件无效
119	52	没有表打开
215	54	标签文件无效
237	55	内存变量文件无效
114	56	没有足够的磁盘空间给<文件名称>
905	58	LOG( ): 不能用 0 或者负数作为自然对数的参数
906	61	SQRT 参数不能为负
303	62	对超出字符串的字符不能访问
902	67	表达式操作失败
904	78	** 或者 ^ 定义域错误
180	91	文件没有使用LOAD命令放在内存中
239	94	必须指定附加参数
233	95	不允许在对话模式下使用语句
205	96	嵌套错误
0100

171	101	打不开文件
172	102	不能创建文件 <文件>
210	103	超出允许的 DO 嵌套层次
247	104	不能识别功能键
301	107	操作符/操作数类型不匹配
702	108	文件被其他用户使用
700	109	记录被其他用户使用
701	110	文件必须独占方式打开
146	111	不能更新临时表
107	112	无效的关键字长度
133	114	索引文件和表不匹配请删除索引文件，重新建立索引
663	115	.DIF 文件头无效
665	116	.DIF 矢量无效 — .DBF 字段不匹配
664	117	.DIF 类型指示符无效
666	119	.SYLK 文件头无效
668	120	.SYLK 文件的大小边界无效
667	121	.SYLK 文件格式无效
704	124	打印机重定向无效
406	125	打印机未准备就绪
606	127	视图文件非法
703	130	记录没有锁定
143	138	没有找到要复制的字段
227	152	缺少表达式
624	164	未使用 DEFINE PAD 命令定义菜单标题
625	165	菜单没有用 DEFINE POPUP 定义
620	166	此菜单中没有定义菜单项
613	167	菜单项位置必须是正值
618	168	菜单没有用 DEFINE MENU 定义
623	169	不能定义菜单项
622	170	不能释放菜单项
616	174	不能重定义正在使用的菜单
617	175	不能重定义正在使用的弹出式菜单
614	176	不能清除正在使用的菜单
615	177	不能清除正在使用的弹出式菜单
627	178	菜单没有用 ACTIVATE MENU 激活
619	179	菜单没有用 ACTIVATE POPUP 命令激活
629	181	ACTIVATE MENU 命令中指定的菜单正在使用
630	182	ACTIVATE POPUP 命令中指定的菜单正在使用
0200

295	202	无效的路径或文件名
714 636	214	没有用 DEFINE WINDOW 定义窗口
634	215	窗口没有用 ACTIVATE WINDOW 激活
633	216	显示模式不可用
654	221	缩进的左边界必须小于右边界
655	222	行号必须小于页长度范围
656	223	列号必须在 0 到 255 之间
174	225	<名称> 不是一个内存变量
175	226	<名称> 不是一个文件变量
650	227	框大小定义无效
648	228	Tab 停止键必须按升序排列
631	230	数组维数无效
407	231	SET 函数中使用非法参数
176	232	<名称> 不是一个数组
675	255	不是一个有效的RapidFile 数据库
676	256	不是一个合法的Framework II 数据库/工作表
628	279	未点中菜单
626	287	菜单尺寸太小
291	291	使用ASIN( ) 函数的表达式超出范围
292	292	不能使用 0 或负数作为 LOG10( ) 参数
293	293	使用 ACOS( ) 函数的表达式超出范围
660	297	Lotus 1-2-3 版本 2.0 的文件格式无效
0300

635	332	DEFINE WINDOW 中指定窗口的坐标非法
638	350	字段必须为备注型
641	355	没有定义宏
639	356	键盘宏文件格式无效
669	392	要导入的文件中包含超过长度的字段
1000

1	1001	特性无效
2	1002	输入/输出操作失败
98	1098	API 函数 _UserError( ) 被调用
1100

102	1102	不能创建文件
103	1103	无效的查询偏移
104	1104	文件读取错误
105	1105	写文件发生错误
106	1106	不能存取文件；正在进行事务处理
108	1108	图形太大，毁坏或者格式错误
111	1111	无效的文件说明
112	1112	关闭文件时发生错误
113	1113	文件没有打开
115	1115	对临时表对象的无效操作
117	1117	关键字字段长度不匹配
124	1124	关键字超过允许的范围
126	1126	记录过长
127	1127	FOR 或 WHILE 语句中必须使用逻辑表达式
130	1130	字段 语句没找到
131	1131	FROM 子句中指定的文件为空
134	1134	变量必须在选定的表中
140	1140	FILTER表达式超过了允许的大小
141	1141	不能识别的索引文件版本，请重建索引
145	1145	必须是字符或数值类型的关键字段
147	1147	在关系中已经使用了目标表
148	1148	当条件执行时，表达式重新进入
149	1149	没有足够的缓冲内存空间
150	1150	没有足够的内存空间给文件映象
151	1151	没有足够的内存空间保存文件名称
152	1152	不能访问选定表
153	1153	不能重命名文件到另一个设备
156	1156	字段名称重复
157	1157	不能更新文件
161	1161	演示版中包含太多要浏览或编辑的记录
162	1162	过程 <名称>没有找到
163	1163	浏览表已关闭
164	1164	浏览结构已更改
165	1165	<field> 和当前工作区无关
166	1166	临时表被毁坏或者格式错误
167	1167	图标已毁坏或者格式错误
168	1168	临时表被毁坏或者格式错误
169	1169	项目文件只读
178	1178	应用程序文件 <文件> 没有关闭
193	1193	缺少 .RTT 部分
194	1194	链接命令失败
195	1195	对象文件 <文件>在以前的 FoxPro 版本中编译
196	1196	<文件> 不是 Visual FoxPro .EXE 文件
1200

201	1201	使用的名称太多
202	1202	程序太大
206	1206	宏定义重复
211	1211	缺少IF | ELSE | ENDIF语句声明
212	1212	嵌套结构太深
213	1213	在 FOR ... ENDFOR 或者 CASE ... ENDCASE 命令中缺少关键字
214	1214	ENDTEXT 没有对应的 TEXT 声明
217	1217	语句中发生 Picture 子句错误
220	1220	命令包含了无效字符
221	1221	命令中缺少所需要的子句
223	1223	无效的变量引用
225	1225	必须是内存变量或数组变量
226	1226	必须是一个文件变量
229	1229	参数太少
230	1230	参数太多
231	1231	缺少操作数
232	1232	DIMENSION 包含没有下标参数的变量声明
234	1234	下标超出定义范围
235	1235	结构非法
236	1236	在使用 RESUME 之前挂起程序
238	1238	没有找到 PARAMETER 语句
241	1241	在组表达式中数据类型不正确
242	1242	字段表达式中出现语法错误
243	1243	内部错误：报表中的字符太多
245	1245	在标签定义文件中的无效表达式
246	1246	标签的全部宽度超过允许大小
249	1249	使用太多的 READ 命令
250	1250	使用太多的 PROCEDURE 命令
252	1252	该行的编译代码太长
253	1253	不能重命名当前目录
254	1254	不能嵌套键标记
255	1255	键标记 <标记名> 无效
256	1256	键标记中大括号不匹配
257	1257	键字符串过长
258	1258	PICTURE 子句中发生错误
294	1294	FOXUSER.DBF 文件无效
296	1296	资源读取错误
297	1297	只有在相关模式下才允许使用该命令
298	1298	<名称> 带区相对于所在页太大
1300

300	1300	函数名称缺少 )
304	1304	函数名称缺少 (
306	1306	缺少逗号 (,)
307	1307	不能被 0 除
308	1308	栈空间不足
309	1309	<文件> 不是一个目标文件
310	1310	PICTURE 子句中使用的字符太多
313	1313	取消创建类
337	1337	不能嵌套 PRINTJOB 命令
338	1338	文件的版本错误
1400

405	1405	RUN|! 命令运行失败
410	1410	不能建立临时工作文件
411	1411	RUN|! 命令的字符串太长
412	1412	找不到 COMSPEC 环境变量
420	1420	OLE 对象无效或毁坏
421	1421	不能激活 OLE 服务器
422	1422	保存 OLE 对象时发生错误
423	1423	在建立OLE 对象时发生错误
424	1424	在向剪贴板上复制OLE 对象时发生错误
426	1426	OLE 错误代码 0x <名称>
427	1427	OLE 非正常的代码号<名称>
428	1428	OLE从<名称>返回非正常的代码号<名称>
429	1429	"<名称>".
431	1431	OLE 指定的参数超过 Visual FoxPro 的限制
434	1434	类 <名称> 未注册
436	1436	通用字段中只允许有可插入的对象
462	1462	<名称> 内部一致性错误
465	1465	内部 SQL 传递一致性错误
466	1466	连接句柄无效
467	1467	对本地的临时表，属性非法
468	1468	属性对于表的临时表无效
469	1469	属性值超出范围
470	1470	属性名称不正确
471	1471	不正确的列格式
473	1473	环境级的属性设置无效
474	1474	在执行SQLEXEC( ) 序列时，发生非法的调用
475	1475	在执行SQLMORERESULTS( ) 序列时，发生非法的调用
476	1476	在执行SQLTABLES( ) 序列时，发生非法的调用
477	1477	在执行 SQLCOLUMNS( ) 序列时，发生非法的调用
478	1478	数据环境中关系对象的 ChildOrder 属性不再有效。此关系即将被取消
479	1479	无效的更新列名 <名称>
480	1480	警告:  不能设置连接同步/异步方式
481	1481	警告:  不能设置连接超时
482	1482	警告: 不能设置查询超时
483	1483	警告: 不能设置连接包大小
484	1484	警告: 下一个更改的字符串已经被远程修改
485	1485	警告: 在<号>记录开始出现非法的数据转换
486	1486	警告:  Invalid memo 在<号>记录开始出现非法的备注字段转换
487	1487	警告:  不能设置连接事务模式
489	1489	不能在更新状态在WHERE 条件中使用通用字段。改变视图的WhereType 属性
490	1490	不支持将可转换的表单作为对象保存
491	1491	没有指定更新的表。使用临时表的Tables 属性
492	1492	对<名称>更新的表没有指定关键列，使用临时表中的KeyFieldList 属性
493	1493	缺少 SQL 参数
494	1494	视图定义已经更改
495	1495	警告: “别名”表 KeyField 属性定义的关键字不唯一
496	1496	警告: 在检查远程更新冲突时没有足够的信息
497	1497	连接名称无效
498	1498	SQL SELECT 语句非法
499	1499	SQL 参数<名称> 无效
1500

502	1502	记录正在使用，不能写入
503	1503	文件不能锁定
507	1507	屏幕代码对于可用的内存空间来说太大
508	1508	初始化 OLE 时发生错误
509	1509	转换被取消，请增加备注字段块的大小
510	1510	无效的文件格式。如果是dBASE 文件,必须首先进行转换。要转换它，键入 MODIFY LABEL <标签文件名称>.
520	1520	没有数据库打开或设置为当前数据库
521	1521	对类成员对象不支持此操作
522	1522	内部连接一致性错误
523	1523	用户取消该操作
524	1524	选用的打印驱动程序不支持直接访问
525	1525	函数在远程表上不支持
526	1526	<名称>连接错误
527	1527	找不到 ODBC 库 — ODBC32.DLL
528	1528	ODBC 入口点<名称>未找到
529	1529	<名称>文件已经作为数据库的一部分存在
530	1530	取操作被取消；远程表已经关闭
531	1531	因为<名称>的索引或者条件表达式非法，不能执行更新表的操作
532	1532	不支持类型转换
533	1533	属性为只读
534	1534	<别名>数据库不能打开
535	1535	此数据库正由一个项目使用，不能关闭
536	1536	函数在本地表上不支持
538	1538	存储过程正在执行
539	1539	触发器失效
540	1540	工作期号码无效
541	1541	连接 <名称> 忙
542	1542	基表字段已被更改，不再匹配视图字段，因此不能设置视图字段属性
543	1543	"<名称>"字段的 DataType 属性要求的类型转换非法
544	1544	"<名称>"字段的DataType 属性无效
545	1545	<名称>别名的表缓冲包含不能提交的更改
546	1546	在执行与表相联系的表达式时不能关闭表
547	1547	不能从视图中插入一个空行到其基表
548	1548	<别名>表包含一个或者多个打开的非结构化索引，请关闭它们并再使用 Begin Transaction
549	1549	当事务打开时，不能释放#<号>数据段
550	1550	.DBC 内部一致性错误
551	1551	文件 <名称> 是一个无效的数据库
552	1552	文件 <名称> 不是一个数据库
553	1553	文件 <名称> 是一个数据库
554	1554	临时表实例化时发生错误。<别名>表不能打开。对象将被忽略
557	1557	数据库必须以独占方式打开
558	1558	文件 <名称> 不是数据库的一部分
559	1559	没有找到属性
560	1560	属性值无效
561	1561	数据库无效，请使之生效
562	1562	在数据库中找不到对象 <名称>
563	1563	在当前数据库中找不到视图 <名称>
564	1564	数据库中表<名称>已经存在
565	1565	文件 <名称> 是数据库的一部分
566	1566	当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令当数据库对象包含打开的临时表时，该数据库不能执行 PACK 命令
568	1568	视图字段已经改变，更新和关键字段属性被重设置为默认值
569	1569	<名称>数据库: 文件访问失败
570	1570	数据库只读
571	1571	名称 <名称>已经被其他对象使用，请选择不同的名称命令
575	1575	对象名称非法
576	1576	在类库中找不到类 <名称>
577	1577	在关系中引用了表<名称>
578	1578	无效的数据库表名
579	1579	对于临时表处于表缓冲方式下的表，不能发布此命令
580	1580	对于非.DBC 的表特性不支持
581	1581	<名称>字段不能为空
582	1582	<名称>字段的有效性规则被破坏
583	1583	破坏记录的有效性规则
584	1584	从数据库中读取属性时发生错误，该属性被忽略
585	1585	发生更新冲突。使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用 TABLEREVERT( ) 回滚更新操作
586	1586	函数需要行缓冲方式或表缓冲方式
587	1587	OLDVAL( ) 或者 CURVAL( ) 非法嵌套
588	1588	在行或表缓冲激活时，或者正在使用集成限制时，不能执行 INSERT 操作
589	1589	表缓冲或行缓冲需要 SET MULTILOCKS 设置为 ON
590	1590	BEGIN TRANSACTION 命令失败。嵌套层次太多
591	1591	当没有相应的BEGIN TRANSACTION命令时，不能执行END TRANSACTION命令
592	1592	没有相应的 BEGIN TRANSACTION 命令不能执行 ROLLBACK 命令
593	1593	在事务处理期间不能发布此命令
594	1594	在将前面的记录锁定之后，在事务中锁定文件将是非法的
595	1595	发生更新冲突。在当前行缓冲中的一些改变被提交。请使用带 lForce 参数的 TABLEUPDATE( ) 函数提交该更新，或使用手工事务回滚更新操作
596	1596	没有启用表缓冲
597	1597	视图中需要 DB_BUFOPTROW 或 DB_BUFOPTTABLE
598	1598	规则和触发器代码必须均衡使用事务
599	1599	数据工作期 #<编号> 被强制回滚所有事务以避免死锁
1600

600	1600	没有足够的内存空间用 USE 命令 打开表
604	1604	No menu bar is defined.
605	1605	没有定义菜单
607	1607	超出包含在菜单中的菜单项最大数目
608	1608	超出菜单定义中的菜单最大号（25）
609	1609	超过菜单项的最大限制
611	1611	菜单项和标题必须是字符型
612	1612	没有定义这样的菜单或菜单项
621	1621	此菜单中没有定义菜单标题
632	1632	窗口文件格式无效
637	1637	文件必须独占方式打开来转换备注文件
642	1642	找不到颜色集资源
643	1643	打印机驱动程序毁坏
644	1644	没有找到打印机驱动程序
645	1645	报表嵌套中包含错误
646	1646	总计字段类型必须是日期或者数值型
647	1647	字段表达式包含非法的数据类型
649	1649	此命令之前没有 PRINTJOB 命令与之对应
651	1651	CANCEL or SUSPEND is not allowed.
652	1652	Visual FoxPro 函数作为数组非法使用
653	1653	标签嵌套错误
657	1657	列号必须在 0 到右页边距之间
659	1659	在只读方式打开时，带有备注字段的表不能进行转换
661	1661	Microsoft Excel 文件格式非法
662	1662	Lotus 1-2-3 版本 1.0 的文件格式无效
670	1670	Multiplan 4.0 版文件格式无效
671	1671	不能导入有口令保护的文件
672	1672	不能追加有口令保护的文件
673	1673	Symphony 1.0 版本文件格式无效
674	1674	Symphony 1.1 版本文件格式无效
678	1678	Lotus 1-2-3 版本 3.0 的文件格式无效
679	1679	只能导入 Lotus 1-2-3 3.0版本文件的工作表
680	1680	Lotus 1-2-3的3.0 版本工作表被隐藏
681	1681	不允许与 PREVIEW 子句一起使用 OFF/NOCONSOLE 或者 TO PRINT/FILE 语句
682	1682	不是用户自定义窗口
683	1683	索引标识没有找到
684	1684	必须指定索引选项卡或者文件名称
685	1685	项目文件非法
686	1686	表单文件 <名称> 无效
687	1687	菜单文件无效
688	1688	Paradox 文件格式无效
689	1689	没有主程序不能连编 .APP 或 .EXE 文件
690	1690	在索引期间非法操作表
691	1691	库文件 <名称> 无效
692	1692	不能解决的本地名称冲突
693	1693	找不到菜单生成程序
694	1694	指定的扩展名太多
695	1695	COLUMN | FORM | ALIAS | NOOVERWRITE | WIDTH 只允许与 FROM 子句联用
696	1696	FROM 语句中不允许OWAIT/SAVE/NOENVIRONMENT/IN/WINDOW 子句
698	1698	COLUMN | ROW | ALIAS | NOOVERWRITE | SIZE | SCREEN 只允许与 FROM 子句联用
1700

705	1705	访问文件的操作无效
706	1706	不能按降序对 .IDX 文件排序
707	1707	没有找到结构 .CDX 文件
708	1708	文件在另外一个工作区被打开
710	1710	PROMPT 样式的菜单不支持 MULTISELECT 或 MOVER 子句
711	1711	使用的 API 库版本和 Visual FoxPro 版本不匹配。重建库
712	1712	字段名称重复或者无效
713	1713	字段宽度或者小数位数非法
715	1715	找不到指定的服务器
716	1716	队列没有找到
717	1717	不能生成一个打印驱动程序
718	1718	文件只读
719	1719	对象文件 <名称>正在使用，不能从内存中清除
720	1720	在 READ 命令对含格式文件进行操作时，不能发出 SET FORMAT 命令
722	1722	预处理表达式非法
723	1723	不匹配的 #IF/#ELSIF/#ELSE/#ENDIF 语句
724	1724	缺少 #ENDIF 语句
725	1725	已经用 #DEFINE 建立了常数
726	1726	找不到 API 库
727	1727	需要 .DBF 样式的帮助文件
728	1728	配色方案已保存
731	1731	不能修改基类
732	1732	此属性的数据类型无效
733	1733	找不到类定义 <名称>
734	1734	属性 <名称>没有找到
735	1735	在类定义中发生错误
736	1736	对象实例化时发生错误
737	1737	<名称> 是一个方法，事件或者对象
738	1738	属性 <名称>不是方法或者事件
739	1739	在重新载入数据环境之后，属性设置才生效
740	1740	<名称>是一个只读属性
741	1741	不能添加 <名称>。类定义循环
742	1742	对象的数据源必须是变量引用
743	1743	属性 <名称>只读
744	1744	对象类对此容器非法
746	1746	<名称> 的类文件名无效
747	1747	类文件 <名称> 无效
749	1749	表单 (.SCX) 文件至少包含一个表单
750	1750	Visual FoxPro 文件版本比当前版本新
751	1751	类文件版本高于当前版本
752	1752	MODIFY CLASS 正在使用类
753	1753	不能加载 32 位 DLL <名称>
754	1754	在 DLL 中找不到入口点 <名称>
755	1755	不能在此类中添加对象
757	1757	属性 <名称>被保护
758	1758	不能在 SetAll 方法中更改 <名称> 属性
759	1759	表达式非法，请对<名称>属性使用合法的表达式
760	1760	成员<名称>是一个类成员
1761	1761	类 <名称> 已经存在
762	1762	找不到类 <名称>
763	1763	属性<名称>已经存在
764	1764	数组不是父对象的成员
765	1765	方法包含语法错误。未保存方法
766	1766	对象<名称>没找到
767	1767	父对象不允许<名称>的属性设置
768	1768	不能在表格控制中添加此对象
769	1769	不能在列中添加此对象
770	1770	不能清除正在使用的类
771	1771	同名的成员对象已经存在
773	1773	数据库对象类型无效
774	1774	没有找到工作表
775	1775	没有找到 <名称>的工作表
776	1776	类 <名称> 正在使用
777	1777	不能修改视图临时表的结构
778	1778	在添加记录之前必须转换表
779	1779	向对象中添加<名称>时发生错误。成员/属性名称重复
780	1780	数组元素被定义为对象，不能在类定义中重新定义
781	1781	对象的控制源不能设置为它的 Value 属性
782	1782	该 OLE 属性不能为一个表达式
783	1783	对于 @...Class 命令指定的类无效
795	1795	不能安排未经输送的表单
796	1796	当前平台没有发现记录
797	1797	在转换中发生错误
798	1798	找不到转换程序
799	1799	转换被取消
1800

800	1800	SQL：内部错误
801	1801	SQL：关联字段发生错误
802	1802	SQL：找不到表
803	1803	SQL：HAVING 子句非法
804	1804	SQL：语句无效
805	1805	SQL：子查询过多
806	1806	SQL：列<字段> | <变量 >没有发现
807	1807	SQL：GROUP BY 子句非法
808	1808	SQL：ORDER BY 子句无效
809	1809	SQL：内存溢出
810	1810	SQL：子查询使用无效
811	1811	SQL：在非数值表达式上进行合计 操作
812	1812	SQL：语句过长
813	1813	SQL：在子查询中非法使用 UNION
814	1814	SQL：不支持此类型的查询
815	1815	<临时表>必须用 SELECT ... INTO TABLE 语句创建
818	1818	SQL：需要 FROM 语句
819	1819	SQL：DISTINCT 语句非法
820	1820	SQL：SELECT 包含了无效的 *
822	1822	SQL：无效的合计字段
825	1825	SQL：子查询非法
826	1826	SQL：SELECT 语句无效
828	1828	SQL：在子查询中 GROUP BY 语句非法
830	1830	SQL：没有找到索引
831	1831	SQL：在建立临时索引时发生错误
832	1832	在 SQL SELECT 命令中的 <字段> | <变量> 不唯一，必须保持一致
833	1833	SQL：WHERE 子句无效
834	1834	SQL：UNION 过多
839	1839	SQL：操作被取消
841	1841	SQL：引用的列过多
842	1842	SQL：子查询嵌套过多
844	1844	不能嵌套合计函数
845	1845	SQL 表达式过于复杂
846	1846	不能按合计字段分组
851	1851	SELECTs 是 UNION 不可兼容的
860	1860	子查询返回不止一个记录
864	1864	SQL：UPDATE 中使用的字段过多
865	1865	SQL：UPDATE 中无效的 SET 表达式
870	1870	ALTER TABLE 操作被中断
871	1871	不能 DROP 全部已有列
872	1872	列太多
875	1875	定义太多的更改关键字
877	1877	DROP 中无规则
878	1878	DROP 没有默认值
879	1879	没有主关键字
880	1880	在当前数据库中找不到相关的表
881	1881	在导入<错误>时发生错误
882	1882	相关的标识没有找到，或者不存在主标识或候选标识
883	1883	已经存在主关键字
884	1884	索引<名称>唯一性被破坏
885	1885	只有结构化标识可以定义为候选关键字
886	1886	索引不能接受 null 值
887	1887	在计算规则中非法循环
888	1888	标识名称过长
889	1889	在多个关系的表中只能有一个子排序
1900

903	1903	字符串过长
907	1907	驱动器符号非法
908	1908	长度或小数位数参数无效
910	1910	非法的打印驱动程序循环
911	1911	环境需要本地化产品
912	1912	对于通用字段操作非法
913	1913	字段必须为通用型
914	1914	代码页编号无效
915	1915	找不到排序序列 <名称>
916	1916	为了使用该功能，在 CONFIG.FPW 文件中设置 CODEPAGE=AUTO 并重新起动 Visual FoxPro
918	1918	文件名称过长
922	1922	卷标不存在
923	1923	对象<名称>没找到
924	1924	<名称> 不是一个对象
925	1925	<名称>成员不能识别
926	1926	不能嵌套类定义
927	1927	类定义中的语句无效
928	1928	语句仅在类定义中有效
929	1929	<名称>只能用在一个方法中
930	1930	不能重定义 <名称>
931	1931	语句不在过程中
932	1932	<名称> 在挂起时不能关闭
933	1933	文件 <名称> 没有关闭
934	1934	语句仅在方法内有效
935	1935	当前对象没有从<名称>类中继承
937	1937	过程文件 <名称>没有找到
938	1938	对象没有包含在<名称>中
939	1939	WITH/ENDWITH 不匹配
940	1940	在 WITH/ENDWITH 范围之外，表达式无效
942	1942	不能将对象指定给数组
943	1943	成员<名称>不能求值成对象
944	1944	找不到生成器程序
945	1945	当前的对象已经释放
946	1946	项目文件版本错误
947	1947	表达式过于复杂
948	1948	不能修改正在使用的类
949	1949	类名无效
950	1950	类定义 <名称> 出现递归
951	1951	不能清除正在使用的对象
953	1953	只有在设计时才能使用特性
954	1954	生成器程序已运行
955	1955	WIN.INI 注册被破坏
956	1956	不能访问打印机
957	1957	打印机的假脱机访问发生错误
958	1958	载入打印机驱动程序时发生错误
960	1960	对<名称>变量的非法重新定义
961	1961	子目录或文件<名称>已经存在
962	1962	目录非空
963	1963	没有找到目录
964	1964	在WindowType 属性设置为READ 或者READ MODAL的表单、表单集中，没找到页框或页面
965	1965	表单或表单集的一个成员基于非可视类，不能写入 . VCX 文件
966	1966	数据环境已经加载
967	1967	数据环境已经卸载
968	1968	表单或表单集的一个成员基于非可视类，不能写入 .SCX 文件
969	1969	剪贴板包含了一个或者多个对象，这些对象不能添加到容器中，它们不能粘贴
970	1970	不能重新打开项目文件 <名称>
971	1971	在当前的 COMPILE 命令完成之后才能进行下一编译
972	1972	数组 <名称> 正在使用
973	1973	在建立<名称>表时发生错误
974	1974	数组不能赋给数组元素
975	1975	成员对象<名称> 没有实例化
976	1976	不能解决后链
977	1977	更新文件时需要独占打开文件，请重新打开文件
978	1978	不能以可视方式修改此种类型的类
979	1979	不能以可视方式修改派生自非可视类的类
981	1981	在<名称>文件中出现编译错误
982	1982	TO 子句只能对模式表单或表单集使用
983	1983	<名称> 对象不能返回一个值
984	1984	"<名称>"表的字段不与数据库入口匹配
985	1985	对象已有数据环境，不能使用 SaveAs 方法使用另一个环境
986	1986	GDI 内存太少，关闭一个或者多个窗口，重新进行操作
987	1987	不能以编程方式向表单设计器中添加对象
988	1988	当前值超出范围
989	1989	不能以编程方式删除表单设计器中的对象
991	1991	表单 <名称> 文件为以前的FoxPro版本，在执行之前请进行转换
993	1993	找不到类库文件 <名称>
994	1994	包含文件 <名称>没有找到
995	1995	在装载数据环境时发生错误。表正在使用
996	1996	字段 <名称>合法性规则不能得出逻辑型或者 NULL 型
997	1997	<名称>字段的默认值不能得到该字段的正确类型
998	1998	<名称> 的索引表达式中包含对备注字段、通用字段或者图片字段的非法引用
999	1999	函数不能完成任务


在升迁向导中设置时间戳列的 SQL Server 数据类型
在升迁向导中使用时间戳列的 SQL Server 数据类型

请参阅

如果您选择了“添加时间戳字段”，并且要创建的 SQL Server 表具有如下的数据类型，则升迁向导将添加一个具有时间戳数据类型的新列。

binary	varbinary	float
real	image	text


请参阅

控制如何检测更新冲突

DBGETPROP( ) 函数

升迁向导


在升迁向导中的对象映象
升迁向导中的对象映射关系

请参阅

下表总结了 Visual FoxPro 与 SQL Server 之间的对象映射关系：

Visual FoxPro 对象	SQL Server 对象
数据库	数据库
表	表
索引	索引
字段	字段
默认值	默认值
表的有效性规则	SQL Server 存储过程，由 UPDATE 和 INSERT 触发器调用
字段有效性规则	SQL Server 存储过程，由 UPDATE 和 INSERT 触发器调用
永久性关系（用于参照完整性约束）	更新、插入和删除触发器


请参阅

升迁向导中的参照完整性和规则映射

升迁向导中的索引类型映射


在升迁向导中的数据类型映象
升迁向导中的数据类型映射

请参阅

由升迁向导导出 Visual FoxPro 表时，字段名和数据类型自动翻译为 SQL Server 的相应字段。

Visual FoxPro 数据类型 与 SQL Server 数据类型的映射关系如下：

缩写	Visual FoxPro 数据类型	SQL Server 数据类型
C	字符型	char
Y	货币型	money
D	日期型	datetime
T	日期时间型	datetime
B	双精度型	float
F	浮点型	float
G	通用型	image
I	整型	int
L	逻辑型	bit
M	备注型	text
N	数值型	float
P	图片	image


请参阅

下载远程视图时更改默认数据类型

字符数据类型

货币数据类型

数据和字段类型

日期数据类型

日期时间数据类型

双精度字段类型

下载和上载远程视图数据

浮点字段类型

通用字段类型

整型字段类型

逻辑数据类型

备注字段类型

数值数据类型


在升迁向导中的索引类型映象
升迁向导中的索引类型映射

请参阅

SQL Server 的索引和 Visual FoxPro 的索引非常类似。下表显示了 Visual FoxPro 索引类型如何转换为 SQL Server 索引类型：

Visual FoxPro 索引类型	SQL Server 4.x 索引类型
主索引	聚集唯一索引
候选索引	唯一索引
唯一索引，普通索引	非唯一索引
升迁向导将 Visual FoxPro 索引标识名作为 SQL Server 的索引名。如果标识名是服务器上的保留字，则向导在此标识名中添加 _ 字符。

附注

SQL Server 不支持升序或降序索引，不允许在服务器索引中出现表达式。升迁向导在升迁索引时将 Visual FoxPro 表达式从索引表达式中移去，而只将字段名送入服务器。


请参阅

选择索引类型

使用索引


在升迁向导中的参照完整性和规则映象
升迁向导中的参照完整性和规则映射

请参阅

下表说明了由升迁向导创建的触发器。任何触发器都可能包含一些代码，模仿下面所列出的 Visual FoxPro 的部分或全部功能。

触发器	模仿的 Visual FoxPro 功能
UPDATE	有效性规则（字段级和记录级有效性） 参照完整性
INSERT	有效性规则（字段级和记录级有效性） 参照完整性（只用于子表触发器）
DELETE （只用于父表）	参照完整性


请参阅

在字段中限制值

参照完整性生成器

检查记录级值

当施加约束时


在升迁向导中从 Visual FoxPro 到 SQL Server 的表达式映象
在升迁向导中从 Visual FoxPro 到 SQL Server 的表达式映射

请参阅

尽管 Visual FoxPro 和 Transact-SQL 的某些函数相同，但是大多数 Visual FoxPro 函数不被 SQL Server 所支持。升迁向导使用下面的表达式映射关系，尝试将字段级和记录级有效性规则以及默认值中的 Visual FoxPro 表达式转换为 Transact-SQL。

Visual FoxPro 表达式	SQL Server 表达式
True (.T.)	1
False (.F.)	0
#	<>
.AND.	AND
.NOT.	NOT
.NULL.	NULL
.OR.	OR
=<	<=
=>	>=
ASC( )	ASCII( )
AT( )	CHARINDEX( )
CDOW( )	DATENAME(dw, ...)
CHR( )	CHAR( )
CMONTH( )	DATENAME(mm, ...)
CTOD( )	CONVERT(datetime, ...)
CTOT( )	CONVERT(datetime, ...)
DATE( )	GETDATE( )
DATETIME( )	GETDATE( )
DAY( )	DATEPART(dd, ...)
DOW( )	DATEPART(dw, ...)
DTOC( )	CONVERT(varchar, ...)
DTOR( )	RADIANS( )
DTOT( )	CONVERT(datetime, ...)
HOUR( )	DATEPART(hh, ...)
LIKE( )	PATINDEX( )
MINUTE( )	DATEPART(mi, ...)
MONTH( )	DATEPART(mm, ...)
MTON( )	CONVERT(money, ...)
NTOM( )	CONVERT(float, ...)
RTOD( )	DEGREES( )
SUBSTR( )	SUBSTRING( )
TTOC( )	CONVERT(char, ...)
TTOD( )	CONVERT(datetime, ...)
YEAR( )	DATEPART(yy, ...)


请参阅

ASC( ) 函数

AT( ) 函数

CDOW( ) 函数

CHR( ) 函数

CMONTH( ) 函数

CTOD( ) 函数

CTOT( ) 函数

DATE( ) 函数

DATETIME( ) 函数

DAY( ) 函数

DOW( ) 函数

DTOC( ) 函数

DTOR( ) 函数

DTOT( ) 函数

在升迁向导中从 Visual FoxPro 直接映射到 SQL Server 上的表达式

HOUR( ) 函数

LIKE( ) 函数

限制字段中的值

MINUTE( ) 函数

MONTH( ) 函数

MTON( ) 函数

NTOM( ) 函数

参照完整性生成器

RTOD( ) 函数

SUBSTR( ) 函数

TTOC( ) 函数

TTOD( ) 函数

检查记录级值

YEAR( ) 函数


在升迁向导中直接从 Visual FoxPro 映象到 SQL Server 的表达式
在升迁向导中从 Visual FoxPro 直接映射到 SQL Server 上的表达式

请参阅

下面的表达式在 Visual FoxPro 和 SQL Server 中是一样的。

CEILING( )	LOG( )	STR( )


请参阅

CEILING( ) 函数

在升迁向导中从 Visual FoxPro 到 SQL Server 的表达式映射

LEN( ) 函数

LOG( ) 函数

MAX( ) 函数

MIN( ) 函数

PADL( ) 函数

PADR( ) 函数

PROPER( ) 函数

STR( ) 函数


Visual FoxPro SQL 传递函数

请参阅

下表给出了 Visual FoxPro 中与远程数据源协同工作的 SQL 函数，并按所完成的任务对其分组。

任务	函数	目的
连接管理	SQLCONNECT( )	为 SQL 传递操作连接一个数据源，。
	SQLSTRINGCONNECT( )	使用 ODBC 连接字符串语法连接数据源。
	SQLDISCONNECT( )	断开一个对 ODBC 数据源的连接，使指定的连接句柄失效。
SQL 语句的执行和控制	SQLCANCEL( )	在一个活动连接上，取消异步执行的 SQL 查询。
	SQLEXEC( )	在一个活动连接上执行 SQL 传递查询；或者返回已生成的结果集合的数目，如果 SQLEXEC( ) 仍在执行(异步处理)，则返回 0 值。
	SQLMORERESULTS( )	把另一个结果集合放到临时表中。如果创建结果集合的语句仍在执行，则返回 0 值。
	SQLCOMMIT( )	申请提交一个事务。
	SQLROLLBACK( )	申请回滚一个事务。
数据源信息	SQLCOLUMNS( )	将列名以及每列的信息存入一个临时表。如果成功，则返回 1；如果仍在执行，则返回 0。
	SQLTABLES( )	将数据源中的表名存入一个临时表。如果成功，则返回 1。如果仍在执行，则返回 0。
其他控制	SQLGETPROP( )	获得活动连接的属性。
	SQLSETPROP( )	设置活动连接的属性。


请参阅

控制连接和视图对象

SQLCANCEL( ) 函数

SQLCOLUMNS( ) 函数

SQLCOMMIT( ) 函数

SQLCONNECT( ) 函数

SQLEXEC( ) 函数

SQLDISCONNECT( ) 函数

SQLGETPROP( ) 函数

SQLMORERESULTS( ) 函数

SQLROLLBACK( ) 函数

SQLSETPROP( ) 函数

SQLSTRINGCONNECT( ) 函数

SQLTABLES( ) 函数


设置连接属性
连接属性

请参阅

可使用 SQLGETPROP( ) 函数以及相应的连接句柄来查看一个连接的当前属性设置。下表列出了可用 SQLGETPROP( ) 函数访问的连接属性。

若要	使用此属性	用途
显示用于创建活动连接的信息	ConnectName	供临时表使用的连接名。
	ConnectString	连接注册字符串。
	DataSource	由 ODBC 定义的数据源的名称。
	Password	连接口令。
	UserID	用户标识。
在共享连接上工作	ConnectBusy	一个共享连接忙时为“真”(.T.)，否则为“假”(.F.)。
控制界面显示	DispLogin	控制何时显示 ODBC 注册对话框。
	DispWarnings	控制是否显示错误信息。
控制时间间隔	ConnectTimeout	指定在返回一个连接超时错误之前的等待时间（以秒为单位）。
	IdleTimeout	指定空闲超时时间设定（以秒为单位）。限制活动连接在指定的时间间隔之后变成不活动的。
	WaitTime	控制以毫秒计的时间量，在经过这段时间之后， Visual FoxPro 检查 SQL 语句是否已执行完毕。
	QueryTimeout	控制返回一个一般超时错误之前的等待时间（以秒为单位）。
管理事务	Transactions	决定连接如何管理远程表上的事务。
控制结果集合如何放入到视图的临时表	Asynchronous	指定结果集合是同步返回(默认值)还是异步返回。
	BatchMode	指定 SQLEXEC( ) 是一次返回所有结果集(默认值)，还是由 SQLMORERESULTS( ) 逐个返回。
	PacketSize	指定连接使用的网络包的大小
显示内部 ODBC 句柄	ODBChdbc2	内部 ODBC 连接句柄，可被外部库文件（.FLL文件）用来调用 ODBC API 函数。
	ODBChstmt2	内部 ODBC 语句句柄，可被外部库文件（.FLL文件）用来调用 ODBC API 函数
1 在人工事务处理模式，连接将保持活动状态。 2 如果连接不活动，ODBChdbc 和 ODBChstmt 的值不再有效。


请参阅

控制连接和视图对象

SQLGETPROP( ) 函数

SQLSETPROP( ) 函数


设置远程数据的临时表属性
远程数据的临时表属性

请参阅

下表列出 Visual FoxPro 临时表的属性，这些属性适用于视图和连接的结果集合，并按任务类型分组。

任务	属性	用途
视图临时表定义	SQL	存放用以生成临时表的 SQL 语句
	ParameterList	指定视图的 SQL WHERE 子句中每一个参数的名称和数据类型。
控制 Visual FoxPro 和 ODBC 之间的相互作用	ConnectHandle	临时表所使用的远程连接的句柄
	ConnectName	临时表所使用的连接名。
	FetchMemo	指定备注和通用字段是随结果集合一起自动获取，还是在备注和通用字段打开时，根据要求来获取。
	UseMemoSize	将结果返回到备注字段的列的最小宽度（1 到 255）。
	FetchSize	指定每次从远程表中所取得的记录数。
	MaxRecords	返回结果集合时获取的最大行数。
更新数据	SendUpdates1	指定对临时表的更新是否发送到临时表所基于的表中。
	Tables1	以逗号分隔的数据源上的表名列表；用于定义 UpdateNameList 和 UpdatableFieldsList 属性的范围。
	KeyFieldList1	以逗号分隔的 Visual FoxPro 字段的列表，字段中包括用于更新的结果集合的主关键字。
	UpdateNameList1	以逗号分隔的、与临时表中的 Visual FoxPro 字段相对应的、接收更新的表名及列名。
	UpdatableFieldList1	以逗号分隔的、要更新的 Visual FoxPro 字段的列表。
	Buffering	指定在临时表上使用的缓冲类型。
	UpdateType	指定是使用 UPDATE 命令还是联合使用 DELETE 和 INSERT 命令进行更新。
	WhereType	指定在对表数据进行更新时，应该在 WHERE 子句中包含什么内容。
1 必须在更新数据之前设置的属性。


请参阅

控制连接和视图对象

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数


更新错误信息

请参阅

下表列出对于远程更新的 Visual FoxPro 和 ODBC 错误信息。“动作”栏包含要解除错误条件所应采取的动作。

错误信息	意义	动作
没有更新指定的表。使用临时表的 Tables 属性.	临时表的 Tables 属性没有包含远程表名。要能对远程服务器进行更新，最少需要一个表。	使用 Tables 属性为该临时表指定最少一个表。
没有指定更新表 table_name 的关键字的列(有可能是多个列)。使用临时表的 Key FieldList 属性。	在错误信息中指出的远程表的主关键字没有包括到临时表的 KeyFieldList 属性中，每个更新的表都需要一个主关键字。	用 KeyFieldList 属性指定远程表的主关键字。
列“column_name”中没有指定合法的更新表。使用临时表的 UpdateNameList 和 Tables 属性。	列“column_name”中的 UpdateName 属性包含一个非法的表名。	用 UpdateNameList 属性设置表名，或把表名添加到 Tables 属性设置中，或者两者都做。.
临时表的 KeyFieldList 属性没有定义一个唯一的关键字	多个远程记录具有相同的关键字	用 KeyFieldList 属性为远程表定义一个唯一的关键字
从 ODBC：ODBC 非法对象。.	ODBC 不能找到远程表或者列，因为指定名称的表或列并不存在。Visual FoxPro 字段名由 Visual FoxPro 检查，远程表和列名只由远程服务器检查。	检查对象的名称。


请参阅

CURSORGETPROP( ) 函数

CURSORSETPROP( ) 函数

在视图中更新数据


下载和上载远程视图数据

请参阅

从一个远程 ODBC 数据源检索数据时，Visual FoxPro 把每个 ODBC 字段的数据类型转换成结果集合临时表中等价的 Visual FoxPro 数据类型。下表列出 ODBC 数据源上提供的数据类型，以及对应的 Visual FoxPro 的数据类型。

远程字段的 ODBC 数据类型	Visual FoxPro 临时表中字段数据类型
SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR	字符型或备注型1
SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY	备注型
SQL_DECIMAL SQL_NUMERIC	数值型或货币型2
SQL_BIT	逻辑型
SQL_TINYINT SQL_SMALLINT SQL_INTEGER	整型
SQL_BIGINT	字符型
SQL_REAL SQL_FLOAT SQL_DOUBLE	双精度型；小数位数由 Visual FoxPro 中 SET DECIMAL 的值决定。
SQL_DATE	日期型
SQL_TIME	日期时间型3
SQL_TIMESTAMP	日期时间型4
1 如果 ODBC 字段宽度小于临时表属性 UseMemoSize 的值，在 Visual FoxPro 临时表中它将变成一个字符型字段；否则，它成为一个备注型字段。 2 如果服务器字段为 money 数据类型，则在 Visual FoxPro 中它变成货币数据类型。 3 日期默认为1/1/1900。 4 如果 SQL_TIMESTAMP 字段的值包含秒的小数部分，则在转换为 Visual FoxPro 的日期时间型数据时，该小数被截断。
可用 DataType 属性更改一个视图字段的 Visual FoxPro 数据类型。有关详细内容，请参阅当下载远程视图时更改默认数据类型.


请参阅

当下载远程视图时更改默认数据类型

把 Visual FoxPro 参数转换为远程视图数据类型

CURSORGETPROP( ) 函数

DBGETPROP( ) 函数


把 Visual FoxPro 参数转换为远程视图数据类型

请参阅

如果存于临时表中的 Visual FoxPro 数据来源于远程数据，当这些数据发送给远程服务器时，会转换成它们原来的 ODBC 类型。如果通过 SQL 传递把来源于 Visual FoxPro 的数据发送给远程服务器，将进行下面的转换。

Visual FoxPro 数据类型	ODBC 数据类型
字符型	SQL_CHAR 或 SQL_LONGVARCHAR1
货币型	SQL_DECIMAL
日期型	SQL_DATE 或 SQL_TIMESTAMP2
日期时间型	SQL_TIMESTAMP
双精度型	SQL_DOUBLE
整型	SQL_INTEGER
通用型	SQL_LONGVARBINARY
逻辑型	SQL_BIT
备注型	SQL_LONGVARCHAR
数值型	SQL_DOUBLE
1 如果映射为一个参数的 Visual FoxPro 内存变量创建了一个宽度小于 255 的表达式，那么在 ODBC 数据源中它成为 SQL_CHAR 类型；否则，成为 SQL_LONGVARCHAR 类型。 2 对于除 SQL Server 以外的所有其他 ODBC 数据源，Visual FoxPro 日期型数据都被转换为 SQL_DATE 类型，对于 SQL Server，它被转换为 SQL_TIMESTAMP 类型。


请参阅

字符数据类型

货币数据类型

CURSORGETPROP( ) 函数

数据类型和字段类型

日期数据类型

日期时间数据类型

DBGETPROP( )

双精度字段类型

下载和上载远程视图数据

通用字段类型

整数字段类型

逻辑数据类型

备注字段类型

数值数据类型


使用服务器存储的过程
使用服务器存储过程

请参阅

可以使用 Visual FoxPro 的 SQL 传递技术来创建和执行远程服务器上的存储过程。存储过程可以在很大程度上增强 SQL 的功能、效率和灵活性，从而极大地提高 SQL 语句和批处理的运行性能。许多服务器提供存储过程来定义和操纵服务器数据库对象，并进行系统管理和用户管理。

� 若要调用服务器的存储过程

 •	   在 SQLEXEC( ) 函数中给出存储过程名。

例如，下面的代码利用活动连接 sqlremote，与数据源相连，并执行 SQL Server 上的存储过程 sp_who ，然后浏览结果。

nConnectionHandle = SQLCONNECT('sqlremote')

? SQLEXEC(nConnectionHandle, 'use pubs')

? SQLEXEC(nConnectionHandle, 'sp_who')

BROWSE

有关创建和执行服务器存储过程的详细内容，请参阅相关服务器的文档。有关创建 Visual FoxPro 存储过程的详细内容，请参阅创建存储过程。

返回多个结果集合

如果执行的存储过程中包含符合当地服务器语法的 SELECT 语句，则每一结果集合都返回给不同的 Visual FoxPro 临时表。可以利用这些临时表把值或参数从服务器存储过程返回给 Visual FoxPro 客户。

� 若要返回多个结果集合

 •	   使用 SQLEXEC( ) 函数。

例如，下列代码创建并执行 SQL 服务器存储过程 my_procedure。该过程返回三个 Visual FoxPro 临时表： sqlresult, sqlresult1 和  sqlresult2。

=SQLEXEC(nConnectionHandle,'create procedure my_procedure as

select * from sales; select * from authors;

select * from titles')

=SQLEXEC(nConnectionHandle,'execute my_procedure')

服务器如何处理结果集合和错误

由于服务器在创建每个存储过程时就对其进行编译，因此在创建时就能得到所有的服务器语法错误。在执行存储过程时，服务器顺序执行编译的 SQL 语句(象在 Visual FoxPro 程序中一样)，Visual FoxPro 按照执行的顺序分别取得存储过程内每个 SQL 语句的结果集合。

结果集合和错误按发生的顺序返回，而且在遇到错误时处理过程停止。例如，如果执行一个拥有四条语句的存储过程时，服务器在第三条语句遇到运行错误，这时将得到前两个结果集合，然后得到处理第三个结果集合时所发生的错误信息。错误返回后处理过程停止，即不检索第四个结果集合。

附注

只能利用 Visual FoxPro SQL 传递函数 才能执行服务器的存储过程。视图不支持服务器存储过程，因为每一视图在其 SQL 定义中都包括一条明确的 SQL SELECT 语句。


请参阅

创建存储过程

SQLEXEC( ) 函数

Visual FoxPro SQL 传递函数


当下载远程视图时更改默认数据类型

请参阅

在创建一个视图时，视图中所有字段的 DataType 属性都设置为默认值。此值对固定长度的数据类型为代表数据类型的字母 (D, G, I, L, M, P, T, Y)，对变长数据类型则在字母后的括号中标有精度参数 (B(d), C(n), N(n,d))。对本地视图此属性只读。有关默认数据类型的列表，请参阅下载和上载远程视图数据。

对于远程视图，可使用下表所示的 DBSETPROP( ) 函数来修改字段的数据类型设置。

远程字段的 ODBC 数据类型	Visual FoxPro 临时表中可能的数据类型
SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR	字符型或备注型1（默认值）；也可以是通用型或图片
SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY	备注型（默认值）；也可以是字符型，通用型，或图片
SQL_DECIMAL SQL_NUMERIC	数值型或货币型2 （默认值）；也可以是字符型，整型，或双精度型
SQL_BIT	逻辑型（默认值）；也可以是字符型
SQL_TINYINT SQL_SMALLINT SQL_INTEGER	整型（默认值）；也可以是字符型，数值型，双精度型，或货币型
SQL_BIGINT	字符型（默认值）；也可以是整型，数值型，双精度型，或货币型
SQL_REAL SQL_FLOAT SQL_DOUBLE	双精度型（默认值）；小数位数是 Visual FoxPro SET DECIMALS 中指定的值；也可以是字符型，整型，数值型，或货币型
SQL_DATE	日期（默认值）；也可以是字符型或日期时间型
SQL_TIME	日期时间型3（默认值）；也可以是字符型
SQL_TIMESTAMP	日期时间型4（默认值）；也可以是字符型或日期型
1 如果 ODBC 字段的宽度比临时文件属性 UseMemoSize 的值小, 它就变成 Visual FoxPro 临时文件中的字符型字段，否则变成备注型字段。 2 如果服务器字段为货币数据类型，它就变成 Visual FoxPro 中的货币型数据类型。 3 日期的默认值为 1/1/1900. 4 如果 SQL_TIMESTAMP 字段中的值包含了秒的分数部分，当它被转化成 Visual FoxPro 日期时间型数据时，将截掉分数部分。
使用 DataType 属性

可使用 DataType 属性来选择不同于默认值的数据类型。例如，您可能要下载一个服务器时间戳字段到 Visual FoxPro，但映射到 Visual FoxPro 的 日期时间型字段会截去服务器时间戳中秒的分数部分。这时，您可使用 DataType 属性将远程时间戳字段映射为 Visual FoxPro 的字符型字段，从而保留秒的分数部分。


请参阅

字符数据类型

货币数据类型

数据类型和字段类型

日期数据类型

日期时间数据类型

DBGETPROP( ) 函数

DBSETPROP( ) 函数

双精度字段类型

下载和上载远程视图数据

通用字段类型

整数字段类型

逻辑数据类型

备注字段类型

数值数据类型

SET DECIMALS 命令


创建与远程数据的外部连接
对远程数据进行外部联接操作

请参阅

如果服务器支持外部联接操作，那么可以通过 SQL 传递技术使用当地服务器语法对远程数据进行外部联接。外部联接将一个或多个表中的信息组合起来，不管它们是否存在匹配的行。

� 若要在某一服务器上执行外部联接操作

 •	   根据服务器的外部联接语法使用 SQLEXEC( ) 函数。

例如，下面的代码使用 Visual FoxPro SQL 传递函数 SQLEXEC( ) 显示 SQL Server 上一个外部联接的结果，代码中使用了活动的命名连接 sqlremote ：

? SQLEXEC(sqlremote, select au_fname, au_lname, pub_name ;

from authors, publishers ;

where authors.city *= publishers.city)

BROWSE

有关外部联接的语法及类型的详细内容，请参阅您的服务器的有关文档。有关创建命名连接的详细内容，请参阅定义连接。

附注

Visual FoxPro 不支持对当地 Visual FoxPro 数据的外部联接操作。


请参阅

定义连接

SQLEXEC( ) 函数

Visual FoxPro SQL 传递函数


帮助源文件

请参阅

下表列出的是可用于创建帮助系统的各种源文件。对一个帮助系统来说，只有前面两种源文件是必要的。

源文件类型	扩展名	说明
主题	.RTF	存放帮助系统的各种文本和用于链接主题的代码，以及图形及用于包含图形的代码。主题文件中的文本必须为 RTF 格式(rich text format)。
项目	.HPJ	存放帮助系统所使用的各种文本文件和图形文件的列表。此外，还存放宏和辅助窗口的定义，以及用于帮助编译器控制编译过程的指令。在“帮助”项目文件中的文本必须为 ASCII 格式。
位图	.BMP	以位图格式存放的一个图形。在帮助文件中可以包含一个到多个位图文件。位图文件是可选的。
元文件	.WMF	仅用于 Windows。是以 Windows 元文件格式存放的一个图形。在帮助文件中可用一个到多个元文件。元文件是可选的。
PICT 图形	.PCT	仅用于 Macintosh。是以 PICT 格式存放的一个图形。在帮助文件中可用一个到多个 PICT 文件，PICT 文件是可选的。
超图形	.SHG	存放由 SHED.EXE 创建的位图图形，并含有一个到多个热点。在帮助文件中可用一个到多个超图形。超图形是可选的
多分辨率位图	.MRB	存放一个位图的多个版本，将不同屏幕分辨率的位图集成到一个文件中。多分辨率位图必须由 MRBC.EXE 创建。在帮助文件中可用一个到多个多分辨率位图。多分辨率位图是可选的。


请参阅

选择帮助编译器的版本

编码帮助主题文件


编码帮助主题文件

请参阅

上下文字符串、标题、关键字、浏览顺序编号以及连编标识都作为脚注进行编码。其他帮助元素则通过设置格式来实现。

� 若要插入脚注

1.	把插入点放在主题标题的左边。

2.	插入合适的脚注引用标记(#、$、K、+ 或 *)。

3.	键入脚注的内容。

注意在脚注和它的内容之间只允许一个空格。

格式	名称	目的
磅符号 (#) 脚注	上下文字符串	定义上下文字符串，用以唯一标识一个主题。不带上下文字符串的主题只能用关键字或浏览顺序进行显示。
美元符号 ($) 脚注	标题	定义主题的标题。在使用搜索功能时，标题显示在一个列表框中。标题是可选的，但若使用了关键字则建议使用标题。
字母 K 脚注	关键字	定义一个供用户用来搜索主题的关键字。关键字是可选的。.
加号 (+) 脚注	浏览顺序编号	定义一个顺序，确定了用户在主题之间浏览的顺序。浏览顺序是可选的。
星号 (*) 脚注	连编标识	定义一个标识，指定帮助编译器根据条件将主题加入到帮助系统中。
双下划线或删除线文本	跳转文本	指定用户选择后跳转到其他主题的文本。
下划线文本	弹出式文本	指定用户选择后显示一个弹出式窗口的文本。
隐藏文本	上下文字符串或帮助宏	指定目标主题的上下文字符串或一个帮助宏


请参阅

选择帮助编译器的版本

帮助源文件


帮助宏快速参考

请参阅

帮助编译器和 Windows Help 支持所有帮助宏。但是，Macintosh Help 并不支持所有宏。如果在 Macintosh Help 中查看一个帮助文件，那些不支持的宏都将被忽略。

下面各表列出所有帮助宏及其简单说明。“Mac”列指出该宏是否被 Macintosh Help 所支持。

按钮宏

帮助宏命令参考

菜单宏

链接宏

窗口宏

键盘宏

辅助宏

文本标记宏


请参阅

辅助宏

按钮宏

帮助宏命令参考

键盘宏

链接宏

菜单宏

文本标记宏

窗口宏


按钮宏

请参阅

使用下列宏来访问标准“帮助”按钮，创建新按钮，或者修改按钮的功能。

宏	Mac	说明
Back	是	显示“后退”列表中前一个主题。
BrowseButtons	是	在“帮助”按钮栏中添加“浏览”按钮。
ChangeButtonBinding	否	更改“帮助”按钮的指定功能。
Contents	否	显示当前帮助文件的“目录”主题。
CreateButton	是	创建一个新按钮并添加到按钮栏中。
DestroyButton	是	从按钮栏删除一个按钮。
DisableButton	否	废止按钮栏中的一个按钮。
EnableButton	否	启用一个被废止的按钮。
History	是	显示“历史”列表。
Next	否	显示浏览顺序中的下一个主题。
Prev	否	显示浏览顺序中的上一个主题。.
Search	是	显示“搜索”对话框。
SetContents	否	指示一个特定主题作为“目录”主题。


请参阅

Back

BrowseButtons

ChangeButtonBinding

Contents

CreateButton

DestroyButton

DisableButton

EnableButton

History

Next

Prev

Search

SetContents


菜单宏

请参阅

使用下列宏来访问标准“帮助”菜单项，创建新菜单和菜单项，或者修改菜单和菜单项。

宏	Mac	说明
About	是	显示“关于”对话框。
Annotate	否	显示“批注”对话框。
AppendItem	否	追加一个菜单项到一个自定义菜单的后面。
BookmarkDefine	否	显示“书签定义”对话框。
BookmarkMore	否	显示“书签”对话框。
ChangeItemBinding	否	更改一个菜单项的指定功能。
CopyDialog	是	显示“复制”对话框。
CopyTopic	否	将当前主题复制到剪贴板。
DeleteItem	否	从菜单中删除一个菜单项。
DisableItem	否	废止一个菜单项。
EnableItem	否	启用一个废止的菜单项。
Exit	是	退出 Windows Help 应用程序。
FileOpen	否	显示“打开”对话框。
HelpOn	否	显示“如何使用帮助”文件。
InsertItem	否	在菜单的给定位置插入一个菜单项。.
InsertMenu	否	将一个新菜单添加到“帮助”菜单栏中。
Print	是	把当前主题发送给打印机。
PrinterSetup	否	显示“打印设置”对话框。
SetHelpOnFile	否	指定一个自定义的“如何使用帮助”文件。


请参阅

About

Annotate

AppendItem

BookmarkDefine

BookmarkMore

ChangeItemBinding

CopyDialog

CopyTopic

DeleteItem

DisableItem

EnableItem

Exit

FileOpen

HelpOn

InsertItem

InsertMenu

Print

PrinterSetup

SetHelpOnFile


链接宏

请参阅

使用下列宏来创建与指定“帮助”主题的超文本链接。

宏	Mac	说明
JumpContents	否	跳转到一个指定的“帮助”文件的“目录”主题。.
JumpContext	否	跳转到具有一个指定上下文编号的主题。.
JumpHelpOn	否	跳转到“如何使用帮助”文件的“目录”。
JumpId	是	跳转到具有一个指定上下文字符串的主题。
JumpKeyword	否	跳转到包含指定关键字的第一个主题。
PopupContext	否	在一个弹出式窗口中显示具有指定上下文编号的主题。
PopupId	是	在一个弹出式窗口中显示具有指定上下文字符串的主题。


请参阅

JumpContents

JumpContext

JumpHelpOn

JumpId

JumpKeyword

PopupContext

PopupId


窗口宏

请参阅

使用下列宏来控制或修改主帮助窗口或二级帮助窗口的动作。

宏	Mac	说明
CloseWindow	否	关闭主帮助窗口或二级帮助窗口。
FocusWindow	否	把焦点转移到一个指定帮助窗口。
PositionWindow	是	设置帮助窗口的大小和位置。


请参阅

CloseWindow

FocusWindow

PositionWindow


键盘宏

请参阅

使用下列宏来给一个帮助宏提供键盘访问方式。

宏	Mac	说明
AddAccelerator	否	给帮助宏指定一个加速键。


请参阅

AddAccelerator


辅助宏

请参阅

使用下列宏来访问应用程序和 Windows Help 中没有的功能。

宏	Mac	说明
ExecProgram	否	启动一个应用程序。
RegisterRoutine	否	把 DLL 中的一个函数注册为一个帮助宏。.


请参阅

ExecProgram

RegisterRoutine


文本标记宏

请参阅

使用下列宏来创建和处理文本标记。

宏	Mac	说明
DeleteMark	否	删除一个由 SaveMark 添加的标记。
GotoMark	否	执行一个跳转到一个由S aveMark设置的标记。
IfThen	否	如果给定的标记存在，则执行一个帮助宏。
IfThenElse	否	如果给定的标记存在，则执行两个宏中的一个。
IsMark	否	测试一个由 SaveMark 设置的标记是否存在。
Not	否	对 IsMark 返回的结果取反。
SaveMark	否	为当前主题和帮助文件保存一个标记。


请参阅

DeleteMark

GotoMark

IfThen

IfThenElse

IsMark

Not

SaveMark


帮助项目的各组成部分

请参阅

下表对帮助项目文件中要创建的各节做了详细说明。在帮助项目文件中，各节的顺序并不重要，但是下列情况除外：

 •	   若使用［OPTIONS］节，则必须将其作为第一节。

 •	   若使用［ALIAS］节，则必须将其放在［MAP］节之前。

部分	说明
[OPTIONS]	指定控制连编处理过程的选项。本节是可选的。
[FILES]	指定要包含在一个连编操作中的主题文件。本节是必需的。
[BUILDTAGS]	指定有效的连编标识。本节是可选的。
[CONFIG]	指定帮助文件中使用的自定义菜单和按钮，注册动态连接库(DLLs)和在帮助文件中用做宏的 DLL 函数。若在帮助文件中使用了任何这些特性，则需要包含本节。
[BITMAPS]	指定要在连编操作中包含的位图文件。如果帮助项目文件在［OPTIONS］节中已用 BMROOT 或 ROOT 选项列出了位图文件的路径，则不需要本节。有关详细内容，请参阅本章稍后的“指定帮助项目选项”。
[ALIAS]	为同一主题指定一到多个上下文字符串。本节是可选的。
[MAP]	将上下文字符串与上下文编号相关联。本节是可选的。
[WINDOWS]	定义主帮助窗口的特征和帮助文件中使用的二级窗口类型。若帮助文件使用了二级窗口，则必须有本节。
[BAGGAGE]	列出在帮助中的 .HLP 文件（包括它自己的文件系统）中放置的文件。本节是可选的。


请参阅

指定帮助项目选项

定义帮助窗口属性


指定帮助项目选项

请参阅

［OPTIONS］节中包含的选项用来控制一个帮助文件如何连编，并且在连编处理过程中要显示什么反馈信息。本节是可选的。但是，如果在帮助项目文件中包含了本节，那么它必须是列出来的第一节，以便这些选项在整个连编处理过程中都能起作用。本节可以包含下列选项［OPTIONS］。

选项	说明
BMROOT	指定帮助编译器用到的位图文件所在的目录，这些位图文件在帮助主题文件中的bmc、bml、bmr引用中使用。
BUILD	确定在连编过程中包含或不包含哪些主题
COMPRESS	确定在连编过程中进行何种类型的压缩。
CONTENTS	指定帮助文件中目录主题的上下文字符串。
COPYRIGHT	为该帮助文件在“关于”对话框中添加的版权信息。
ERRORLOG	在连编过程中把编译错误信息放到一个文件中。
FORCEFONT	强制所有在 .RTF 主题文件中的编辑字体在帮助文件中以一种字体显示。
ICON	指定在帮助文件最小化时要显示的图标文件。
LANGUAGE	为用斯堪的纳维亚（Scandinavian）语言编辑的帮助文件指定另一种排序顺序。
MAPFONTSIZE	把 .RTF 文件中的一种字体大小映射为编译后的帮助文件中的另一种字体大小。
OLDKEYPHRASE	指定帮助编译器在压缩连编时，是否应该使用原来的关键词组表，还是创建一个新的表。
REPORT	控制在连编处理过程中信息的显示。
ROOT	指定在帮助项目文件中列出的主题和数据文件所在的目录。
TITLE	当帮助文件打开时，在帮助窗口标题栏中显示的文本。
WARNING	指定连编过程中帮助编译器显示的错误信息报告的级别。


请参阅

BMROOT 选项

BUILD 选项

COMPRESS 选项

CONTENTS 选项

COPYRIGHT 选项

ERRORLOG 选项

FORCEFONT 选项

ICON 选项

LANGUAGE 选项

MAPFONTSIZE 选项

OLDKEYPHRASE 选项

REPORT 选项

ROOT 选项

TITLE 选项

WARNING 选项


 BMROOT 选项

请参阅

BMROOT 选项指定 Help 应用程序寻找图形文件的目录。使用本选项的语法为：

BMROOT = pathname[, pathname]

每个 pathname 可以指定一个驱动器和完整路径。如果帮助项目文件有 BMROOT 选项，则不必在［BITMAPS］节中列出位图文件。

如果帮助项目文件没有 BMROOT 选项，Microsoft Help 在 ROOT 选项 指定的目录里寻找位图。若帮助项目文件没有 ROOT 选项，或者 ROOT 选项没有指定包含位图文件的目录，则必须在帮助项目文件的［BITMAPS］节中列出每个位图的文件名。

例如，下列条目指明位图位于驱动器 C 的 \HELP\BMP 目录和驱动器 D 的 \GRAPHICS\ART 目录中。

[OPTIONS]

BMROOT = C:\HELP\BMP, D:\GRAPHICS\ART


请参阅

ROOT 选项

指定帮助项目选项


BUILD 选项

请参阅

BUILD 选项指明包含连编标识的主题是要包含还是排除在一个连编操作之外。只有在 .RTF主题文件具有连编标识时，才能使用这个选项。

BUILD 选项的语法如下：:

BUILD = expression

expression 是一条逻辑语句，指明在一个连编操作中要包含或排除哪个主题。在一个表达式中使用的逻辑符号根据重要性的大小列在下面的表中。

符号	说明
( )	括号
&	AND 操作符
|	OR 操作符
~	NOT 操作符
tag	连编标识
帮助编译器使用下列优先级规则从左到右对所有连编表达式进行求值：

 •	   括号中的表达式最先求值。

 •	   下一步对带逻辑 NOT( ~) 的表达式求值。

 •	   再下一步对带逻辑 AND(& ) 的表达式求值。

 •	   最后对带逻辑 OR( |) 的表达式求值。

例如，在主题文件中设置了 DEMO、MASTER 和 TEST_BUILD 连编标识，那么可以在［OPTIONS］节包含这样一个的连编表达式：:

BUILD = (DEMO | MASTER) & TEST_BUILD


请参阅

指定帮助项目选项


COMPRESS 选项

请参阅

COMPRESS 选项指定连编的压缩级别：无压缩、中级压缩(大约40%)，或者高级压缩(大约50%)。根据压缩程度的不同，连编操作分别使用“块压缩”或“块和关键词组压缩”技术。

 •	   块压缩把主题数据压缩成已预先定义好的单元，也就是“块”。

 •	   关键词组压缩 组合了在源文件中发现的重复词组。如果帮助编译器找不到一个以 .PH 为扩展名的词组表文件，就创建一个这样的文件。若找到了一个 .PH 扩展名的文件，则在当前的编译中使用这个文件。由于当文本在上次编译之后并无重大更改时，.PH 文件可以加速压缩处理过程，因此在多次用压缩方式编译同一个帮助文件时，可以保存该词组文件。不过，如果在［OPTIONS］节中包含了 OLDKEYPHRASE = FALSE 时，将会获得最大压缩率。

下列形式的选项表明无压缩：

COMPRESS = NO

COMPRESS = FALSE

COMPRESS = 0

下列形式的选项表明中级压缩：

COMPRESS = MEDIUM

下列形式的选项表明高级压缩（块和关键词组）：

COMPRESS = YES

COMPRESS = TRUE

COMPRESS = 1

COMPRESS = HIGH


请参阅

指定帮助项目选项


CONTENTS 选项

请参阅

CONTENTS选项标识了最高层主题或叫“根”主题的上下文字符串。用户可通过选择“目录”按钮来访问该主题。

若［OPTIONS］节不含 CONTENTS 选项，帮助编译器会把帮助项目文件的［FILES］节中列出的第一个主题文件中的第一个主题作为该目录主题。

CONTENTS选项使用下列语法：

CONTENTS = contextstring


请参阅

指定帮助项目选项


COPYRIGHT 选项

请参阅

COPYRIGHT 选项把自定义文本放在Microsoft Help 的“关于”对话框中。本选项具有下列语法：

COPYRIGHT = copyrightnotice

占位符 copyrightnotice 通常包含希望显示给帮助文件的用户的版权信息，但也可把本选项用来显示版本号或将其他信息放在“关于”对话框中，该通告紧跟在 Microsoft Help 版权通告的后面，可包含 35 到 70 个字符。


请参阅

指定帮助项目选项


ERRORLOG 选项

请参阅

ERRORLOG 选项把错误信息写到一个文件中。本选项的语法如下：

ERRORLOG = errorfilename

errorfilename 可以是绝对路径，也可以是相对路径。


请参阅

指定帮助项目选项


FORCEFONT 选项

请参阅

用 FORCEFONT 选项创建的帮助文件将只有一种字体。如果必须编译一个帮助文件，而它的主题文件中又包含有用户系统所不能支持的字体，则本选项很有用。

FORCEFONT 选项的语法如下：

FORCEFONT = fontname

字体名必须与 Microsoft Windows 控制面板 的“字体”对话框中所显示的字体名拼法一致。这些字体名不能超过 20 个字符。如果希望用 Geneva 字体显示帮助文件，则用 GENEVA (全用大写字母)作为 fontname。


请参阅

指定帮助项目选项


ICON 选项

请参阅

ICON 选项标识了用户最小化 Help 应用程序时，要显示的图标文件。本选项的语法如下：

ICON = iconfile

iconfile 是 .ICO 位图文件的文件名。


请参阅

指定帮助项目选项


LANGUAGE 选项

请参阅

LANGUAGE 选项改变了搜索关键字列表框中的排序顺序，改变为与英语字母顺序不同的顺序。

本选项具有下列语法：:

LANGUAGE = languagename

因为Microsoft Help 3.5 只支持一种非英语的语言排序顺序，因此，若使用本选项，languagename 参数只能为“Scandinavian”。


请参阅

指定帮助项目选项


MAPFONTSIZE 选项

请参阅

MAPFONTSIZE 选项把在主题文件中指定的字体大小在显示到帮助窗口时，映射为不同的大小。这意味着可以在主题文件中使用一种字体大小，而真正显示帮助文件时，让帮助编译器把它更改为另一种合适的大小。

假如在您创作时使用的显示器和最终要显示的显示器之间存在明显的大小差别时，则本选项尤为有用。

MAPFONTSIZE 选项使用下列语法。

MAPFONTSIZE = m[-n]:p

m 参数是源字体的大小，p 参数是帮助文件想要的字体大小。主题文件中所有大小为 m 的字体都更改为大小 p。可选参数 n 允许指定要映射的一个字体大小范围。主题文件中所有大小在 m 与 n 之间(包括 m 和 n )的字体，都更改为大小 p。

下面的示例说明了 MAPFONTSIZE 选项的用法：

MAPFONTSIZE = 8:12	; 所有 8 磅字体映射为 12 磅

MAPFONTSIZE = 12-24:16	; 所有 12-24 磅字体映射为 16 磅

在帮助项目文件的［OPTIONS］节中，最多可指定五个字体范围；而且，每条 MAPFONTSIZE 语句只能映射一种字体大小或范围。


请参阅

指定帮助项目选项


OLDKEYPHRASE 选项

请参阅

OLDKEYPHRASE 选项指明帮助编译器在压缩连编时，是使用原来的关键词组表，还是创建一个新表。

下面选项表示不使用原来的关键词组：

OLDKEYPHRASE = OFF


请参阅

指定帮助项目选项


REPORT 选项

请参阅

REPORT 选项在连编过程中把信息显示在屏幕上。这些信息可用以指明帮助编译器执行连编的各个阶段，包括编译文件、分析跳转以及查阅浏览顺序等。

下面选项打开信息显示：

REPORT = ON


请参阅

指定帮助项目选项


ROOT 选项

请参阅

ROOT 选项指定了帮助编译器在哪个目录中寻找帮助项目文件中列出的文件。

本选项的语法如下：

ROOT = pathname[, pathname]

每个 pathname 可以指定一个驱动器和完整路径，也可以指定一个项目目录的相对路径。若帮助项目文件中有一个 ROOT 选项，则帮助项目文件中的所有相对路径都引用这些路径。若帮助项目文件不含 ROOT 选项，所有路径都相对于包含帮助项目文件的那个目录。

若帮助项目文件不含 BMROOT 选项，帮助编译器会在 ROOT 选项指出的目录中寻找包含在引用中的所有位图文件。若 ROOT 选项指出的目录中不含这些位图，则位图文件名必须在帮助项目文件的［BITMAPS］节中列出来。


请参阅

BMROOT 选项

指定帮助项目选项


TITLE 选项

请参阅

TITLE 选项为帮助文件指定一个标题，标题最多可有 50 个字符。本选项的语法如下：

TITLE = titlename

titlename 在 Microsoft 帮助系统的标题栏中显示。若不用 TITLE 选项给定一个标题，标题栏会显示“Microsoft 帮助”。


请参阅

指定帮助项目选项


WARNING 选项

请参阅

WARNING 选项指定帮助编译器对调试信息的报告数量。

本选项的语法如下：

WARNING = level

可以把警告设定为下列某一种级别。

级别	帮助编译器报告
1	只有最严重的错误才报告
2	中等数目的错误报告
3	所有错误及警告都报告


请参阅

指定帮助项目选项


定义帮助窗口属性

请参阅

帮助项目文件中的［WINDOWS］节用来定义主帮助窗口和在帮助文件中使用的所有二级窗口类型的大小、位置和颜色。

窗口特性用下列语法来定义：

typename = caption, (horizposition, vertposition, width, height), sizing,
 	(clientRGB), (nonscrollingRGB), topmost

参数	说明
typename	指定使用已定义属性的窗口类型。对于主帮助窗口，该参数为 main。对于一个二级窗口，此参数必须具有唯一的名称，最多可有八个字符，不能为 main。任何在一个二级窗口中显示一个主题的跳转，都必须给出这个唯一类型名作为跳转的一部分。
caption	显示在标题栏中的标题。对于主帮助窗口，此标题在帮助项目文件［OPTIONS］节的 TITLE 选项中给出。
horizposition, vertposition	分别为窗口左上角的水平和垂直位置。帮助系统内部使用一个1024×1024坐标系，并把这个坐标系映射成显示该帮助文件的视频卡的分辨率。若一个视频卡具有 hres 乘 vres 象素的分辨率，并且水平和垂直位置为 orizposition 和 vertposition, 那么窗口左上角的 x 坐标为 horizposition * (hres/1024)，y 坐标为 vertposition * (vres/1024)。
width, height	给定一个二级窗口的默认宽度和高度。宽度和高度与 x 和 y 位置一样，都基于视频适配器的分辨率（参阅上面所描述的 horizposition 和 vertposition 参数。）
sizing	指定当帮助系统初次打开一个二级窗口时该窗口的大小。参数为 0 表示正常大小，为 1 表示最大化。若值为 1，帮助系统会忽略类型定义中的 horizposition, vertposition, width, 和 height 参数。
clientRGB, nonscrollingRGB	三位数字的值，给定窗口和窗口非滚动区域（如果存在）的背景颜色。三位数字代表颜色的红、绿和蓝 (RGB) 成份。若不给定这些颜色，那么滚动和非滚动区域的背景显示成一般的背景系统颜色。
topmost	指明一个二级窗口是否总保留在其他窗口之上。本参数是可选的。若不指明，二级窗口按正常方式交换位置。若值为 1，帮助系统把该二级窗口保留在其他窗口之上。这个特性只有当 Help 3.5 运行在 Windows3.1 版时，才能起作用。


请参阅

指定帮助项目选项


选择帮助编译器的版本

请参阅

Visual FoxPro 专业版包含两个版本的帮助编译器  3.1 版本和3.5 版本。请根据需要选择最合适的版本。下表说明了帮助编译器的两个版本的差别。

帮助编译器 3.1 版	帮助编译器 3.5 版
支持二级窗口	不支持二级窗口
支持 Word for Windows 2.0 和 6.0 版的 .RTF 文件。	只支持 Word for Windows 2.0 版的 .RTF 文件。
不支持帮助项目文件的PLATFORM选项。	支持 PLATFORM 选项，可在 Macintosh上正确显示图形。


请参阅

帮助源文件


帮助错误信息分类

请参阅

连编错误可有八类。错误信息编号有四位数字。编号的前一位或前两位数字表示信息分类。这些信息编号前缀以及它们所表示的错误类别在下表中列出。

信息前缀	错误分类
1	用来连编帮助文件的文件出错。
2	.HPJ 文件出错。
3031	连编标识或连编标识表达式出错。
3536	帮助宏出错。
4041	上下文字符串出错。
4245	脚注出错
4647	.RTF 文件出错。
5	其他错误。


请参阅

帮助编译错误信息分类


编译错误分类信息帮助
帮助编译器分类错误信息

文件错误

项目文件错误

宏错误

字符串错误

脚注错误

主题文件错误

其它各类错误


编译错误信息按编号帮助

1000	无法解释错误

1019	项目文件扩展名不能是 .HLP 或 .PH

1030	文件名称长度超过 259 个字符

1079	文件句柄数目超出

1100	打不开文件文件名:不允许访问

1150	不能改写文件文件名

1170	文件文件名是一个目录

1190	不能使用保留的 MS-DOS 文件文件名

1230	文件文件名未找到

1292	文件文件名不是一个有效的位图文件

1319	磁盘空间已满

1513	位图文件文件名重复

1536	无足够的内存空间检查和压缩位图文件名

2010	Include 语句嵌套多于 5 层

2030	文件文件名中第行号行开始的注释，在文件结尾没有封闭

2050	#include 语法无效

2091	在部分标题[sectionname]中缺少括号

2111	缺少必须的部分标题

2131	无效的 OPTIONS 语法：需要‘选项=值’

2141	无效的 ALIAS 语法：需要‘内容=内容’

2151	[sectionname] 部分的行不完整

2171	不可辨识文本

2191	部分标题 [sectionname] 不可辨识

2214	在 .HPJ 文件中一行的长度超过 2047 字符

2273	[OPTIONS] 选项应该先于 [FILES] 和 [BITMAPS] 选项生效

2305	在 [FILES] 部分中不存在有效的文件

2322	上下文字符串 context_name 不能用作别名字符串

2331	上下文编号已经在 [MAP] 部分使用

2341	缺少上下文字符串或上下文字符串无效

2351	无效的上下文标识编号

2362	已为上下文字符串 context_name 分配了别名

2372	别名字符串已经使用

2391	超出窗口定义数目的限制

2401	窗口最大化状态值必须为 0 或 1

2411	窗口颜色语法无效

2421	窗口位置无效

2431	缺少窗口标题说明

2441	窗口名称窗口名称太长

2451	窗口位置数值超过 01023

2461	缺少窗口名称

2471	[WINDOWS] 部分出现语法错误

2481	需要二级窗口的位置

2491	窗口名称窗口名称重复

2501	窗口标题窗口标题长度超过 50 个字符

2511	在[OPTIONS]部分出现不可辨识选项选项名

2532	选项选项名已定义

2550	选项选项名中路径路径名称无效

2570	选项选项名中路径名称超过指定字符数目

2591	MAPFONTSIZE 选项无效

2612	字体范围数目超出

2632	当前字体范围与以前定义的字体范围重叠

2651	字体名称超过 20 字符

2672	FORCEFONT 选项中存在不可辨识字体字体名

2771	REPORT 选项必须为 ON 或 OFF

2811	OLDKEYPHRASE 选项必须为 ON 或 OFF

2832	COMPRESS 选项必须为 OFF 或 MEDIUM

2852	TITLE 选项无效

2872	LANGUAGE 选项无效

2893	Warning 选项必须为 1, 2, 或 3

2911	图标文件文件名称无效

2932	版权字符串长度超过 50 个字符

2000	无法解释错误。

3011	超过 32 个标识

3031	连编标识长度超过 32 个字符

3051	连编标识标识名称包含无效字符

3076	缺少[BUILDTAGS] 部分

3096	连编表达式过于复杂

3116	无效的连编表达式

3133	[BUILDTAGS] 部分中连编标识重复定义

3152	连编标识标识名称未在 [BUILDTAGS] 部分定义

3178	项目文件中缺少连编表达式

3511	宏字符串的长度超过 254 个字符

3532	在宏宏名称中存在未定义的函数

3552	宏宏名称中存在未定义的变量

3571	宏宏名称中函数的参数数目错误

3591	宏宏名称中有语法错误

3611	宏宏名称中函数参数类型不匹配

3631	宏原形错误

3652	空宏字符串

3000	无法解释错误

4011	上下文字符串上下文名称已经被使用

4031	无效的上下文字符串

4056	在 CONTENTS 选项中定义了不能定位的上下文字符串

4072	上下文字符串的长度超过 255 个字符的限制

4098	[MAP] 部分的上下文字符串没有在任何主题中定义

4113	不能定位的跳转或弹出上下文字符串

4131	上下文名称与上下文名称之间冲突

4151	二级窗口名称无效

4171	二级窗口不能使用弹出窗口

4196	没有校验跳转和查找

4211	脚注文本长度超过 1023 个字符

4231	缺少脚注文本

4251	浏览顺序不在第一段落中

4272	浏览顺序字符串为空

4292	缺少顺序号

4312	浏览顺序已经定义

4331	标题不在第一段落中

4352	标题字符串为空

4372	标题定义重复

4393	标题长度超过 128 字符

4412	关键字字符串超过 255 字符

4433	关键字字符串为空

4452	关键字定义缺少标题

4471	连编标识脚注未在主题开头

4492	连编标识超过 32 个字符

4616	文件不是一个有效的 RTF 格式文件

4639	文件文件名在字节偏移 0x%lX 处发生错误

4649	文件文件名称中包括了多于 32767 个主题

4652	表格式过于复杂

4662	不支持并列段落格式

4671	表的列数超过 32 列

4680	文件文件名中所用的字体字体名称不在 RTF 字体表中

4692	无效的图形格式

4733	分页符被隐藏

4753	段落符被隐藏

4763	回车符被隐藏

4774	段落长度超过64K

4792	在滚动区后定义了非滚动区

4813	非滚动区跨过页边界

4000	无法解释错误

5035	文件文件名没有被创建

5059	内存不足，无法连编帮助文件

5075	帮助文件失效。请重新安装 HC35.EXE文件

5098	使用的是旧的键-码表

5115	写失败

5000	无法解释错误


文件错误

下面的信息是在连编帮助文件时，所使用文件中的问题导致的。

1000	无法解释错误 请与 Microsoft Product Support Services 联系。
1019	项目文件的扩展名不能是 .HLP 或 .PH
	不能用.HLP 或 .PH 为扩展名来定义一个项目文件。 项目文件必须用 .HPJ 扩展名。
	重命名帮助项目文件并重新编译。
1030	文件名称长度超过 259 个字符
	路径名称加上文件名称的长度超过了 MS-DOS 规定的 259 个字符的限制
	缩短路径名称并重新编译
1079	文件句柄数目超出
	帮助编译器没有足够的可用文件句柄继续连编过程
1100	不能打开文件文件名:不允许访问
	对于所需要的文件无足够的权限进行操作
1150	不能改写文件文件名
	由于某个文件包含只读的属性，联机帮助文件不能改写它
	重命名联机帮助项目文件或者改变文件的只读属性
1170	文件文件名是一个目录
	在根目录中存在和所需帮助文件同名的子目录。这是 MS-DOS 文件错误
	移动或者重新命名该子目录，然后重新编译。
1190	不能使用保留的 MS-DOS 文件文件名
	试图用 MS-DOS 保留的名称如 COM1, LPT2, 或 PRN 来引用文件。 这是 MS-DOS 文件错误。
	重新命名该文件，然后重新编译。
1230	文件文件名未找到
	找不到指定的文件或者文件不可读。这是 MS-DOS 文件错误或者处于内存溢出状态
	检查是否文件存在，同时查看是否有足够的内存空间。
1292	文件文件名不是一个有效的位图文件
	找不到指定的位图文件或者位图文件的格式不正确。这是 MS-DOS 文件错误或者处于内存溢出状态。
	检查文件是否存在，同时检查其格式的正确性。如果需要，在绘图程序中重新存储文件，然后重新编译。
1319	磁盘空间己满
	帮助文件不能写到磁盘上
	在目标盘上创建更多的磁盘空间，重新编译。
1513	位图名称文件名重复
	[BITMAPS] 部分包括重复的位图名称。帮助编译器采用第一次出现的名称
	重新定义重复的位图文件名称，重新编译。
1536	无足够的内存空间检查和压缩位图文件名
	由于内存空间有限，指定的位图文件不能被压缩。如果任一指定的位图是分段的超图形，连编过程中不检查存储在其中的字符串的有效性


项目文件错误

下面的信息是在连编帮助文件时，所使用 .HPJ 文件中的错误导致的。

2010	Include 语句嵌套多于 5 层
	在指定的行中的 #include 语句超过了最大 5 层的嵌套限制 #include 语句嵌套不能多于 5 层
语法错误

下面的信息是由帮助项目文件中的语法错误导致的。

2030	文件文件名中第行号行开始的注释，在文件结尾没有封闭
	帮助编译器意外的指向联机帮助项目文件的结尾。可能在 .HPJ 文件中或者在包含文件中存在非法注释。
2050	#include 语法无效
	正确的 #include 是:
	#include <文件名称>
	改正语法错误然后重新编译。
2091	在部分标题[sectionname]中缺少括号
	在指定的部分标题中缺少右括号（]）。
	插入右括号（]）再重新编译。
2111	缺少必须的部分标题
	指定的行上的节标头不完全。如果在联机帮助项目文件的初始输入项处不是部分标题，编译器也将给出错误信息。
2131	无效的 OPTIONS 语法：需要‘选项=值’
	检查[OPTIONS] 部分选择项的语法
2141	无效的 ALIAS 语法：需要‘内容=内容’
	检查 [ALIAS] 部分输入的语法
2151	[sectionname] 部分的行不完整
	在指定行上的输入项不完全
	联机帮助编译器将跳过此行
2171	不可辨识文本
	在有效文本的后面是不可辨识的文本信息。
	联机帮助编译器将跳过此行。
2191	部分标题 [sectionname] 不可辨识
	联机帮助编译器不支持此节标头
	联机帮助编译器将跳过此行
2214	在 .HPJ 文件中一行的长度超过 2047 字符
	在 .HPJ 文件中某一行的长度超过 2047 字符。
各部分的常规错误

下面的信息是由帮助项目文件不同部分的常规错误导致的。

2273	[OPTIONS] 选项应该先于 [FILES] 和 [BITMAPS] 选项生效
	在 .HPJ 文件中建议把 [OPTIONS] 部分放在第一部分，这样首先使所有选项起作用。同时，当使用 ERRORLOG 选项时，应把它放在 [OPTIONS] 部分的第一行。
2291	sectionname 部分在前面已定义
	在帮助项目文件中重复定义了某一部分
	联机帮助编译器忽略重复部分下的行，在下面有效的部分标题继续进行
2305	在 [FILES] 部分中不存在有效的文件
	文件部分要么为空，要么只包含无效的文件
2322	上下文字符串 context_name 不能用作别名字符串
	具有指定别名的上下文字符串不能用作其他上下文字符串的别名。例如在 [ALIAS]部分中，当存在 a = b 时，不能再 c = a。
	帮助编译器忽略此行上重复使用的别名。
2331	上下文编号已经在 [MAP] 部分使用
	帮助项目文件中指定行的上下文编号已经被其他上下文字符串使用
	联机帮助编译器将忽略此行。
Alias 及 Map 部分错误

下面的信息是由帮助项目文件中的[ALIAS] 或 [MAP]部分的错误导致的

2341	缺少上下文字符串或上下文字符串无效
	指定的行中等号之前缺少上下文字符串。
2351	无效的上下文标识编号
	指定行的上下文编号为空或者包含非法字符
2362	已为上下文字符串 context_name 分配了别名
	一个上下文字符串只能有一个别名。即：在 [ALIAS] 部分，当 a = b 时，就不能再使 a = c 。已经在 [ALIAS] 部分中为指定的上下文字符串分配了一个别名。
	帮助编译器将忽略企图重新分配别名的行。
2372	别名字符串已经使用
	不能给别名再定义别名。反过来，一个别名字符串不能再分配给另外一个别名。这就是说，当有 a = b 时，在 [ALIAS] 部分里不能出现 b = c 这种情况。
	联机帮助编译器将忽略企图重新分配别名的语句。
Windows 部分错误

下面的信息是在帮助项目文件 [WINDOWS] 部分中定义二级窗口类型时发生的错误。

2391	超出窗口定义数目的限制
	最大的窗口定义数是一个主窗口和五个二级子窗口
2401	窗口最大化状态值必须为 0 或 1
	在 .HPJ 文件中的窗口属性指定中 fMax 变量值必须为 0 或 1
	改正该输入值并重新编译
2411	窗口颜色语法无效
	正确的文本和背景颜色的语法是: .mono (rrr, ggg, bbb).endmono.
	修改语法并重新编译。有关窗口颜色的信息，请参阅第十章的 定义窗口属性和 创建联机帮助文件
2421	窗口位置无效
	预定义窗口位置的正确语法是: mono (x, y, DX, dy).endmono.
	帮助编译器将忽略此行，因此该窗口无预定义位置。有关详细信息，请参阅第十章的 定义窗口属性和 创建联机帮助文件
2431	缺少窗口标题说明
	在 .HPJ 文件中的窗口属性里窗口标题的值没有括在括号中
	修改语法并重新编译
2441	窗口名称窗口名称太长
	窗口名称的字符串超过 8 个字符
2451	窗口位置数值超过 01023
	窗口位置的坐标（X, Y, X + dX, 或者 [Y+dY]）超过最大的位置值 1023。
2461	缺少窗口名称
	在 .HPJ 文件的窗口说明中缺少窗口名称.
2471	[WINDOWS] 部分出现语法错误
	主窗口或者二级窗口的输入项错误
	帮助编译器将忽略此窗口输入项
	检查该窗口输入项语法并重新编译
2481	需要二级窗口的位置
	在 .HPJ 文件中必须指定二级窗口定义 X, Y, dX, 和 dY 输入项。
2491	窗口名称窗口名称重复
	在 .HPJ 文件中窗口名称定义重复
	检查每个名字的唯一性并重新编译
2501	窗口标题窗口标题长度超过 50 个字符
	窗口标题名称的字符串超过50个字符
Options 部分错误

下面的信息是在帮助项目文件中 [OPTIONS] 部分发生的错误。

2511	在[OPTIONS]部分出现不可辨识选项选项名
	使用了编译器不支持的选项
	帮助编译器将忽略这一行
2532	选项选项名已定义
	该选项已经在前面说明过。
	联机帮助编译器将忽略这行里重新定义的部分
ROOT 选项错误

下面的信息是在帮助项目文件中 [OPTIONS] 部分 ROOT 选项发生的错误。

2550	选项选项名中路径路径名称无效
	帮助编译器在 ROOT 选项中找不到指定的路径
	帮助编译器采用当前的工作路径
2570	选项选项名中路径名称超过指定字符数目
	在 ROOT 选项中指定的路径长度超过 MS-DOS 的最大限制
	帮助编译器将忽略该路径并采用当前的工作路径
Font Range 选项错误

下面的信息是在帮助项目文件中 [OPTIONS] 部分 MAPFONTSIZE 选项发生的错误

2591	MAPFONTSIZE 选项无效
	字体大小范围无效
	正确的语法是 m[-n]:p。
2612	字体范围数目超出
	能够指定字体范围的最大数目是 5
	帮助编译器将忽略超出部分
2632	当前字体范围与以前定义的字体范围重叠
	当前字体大小范围与以前定义的字体范围重叠
	帮助编译器将忽略第二个映象
	调整一个或者两个范围使之不发生重叠
FORCEFONT 选项错误

下面的信息是在帮助项目文件 [OPTIONS] 部分 FORCEFONT 选项发生的错误

2651	字体名称超过 20 字符
	字体名字不能超过 20 字符
	帮助编译器将忽略这一行
2672	FORCEFONT 选项中存在不可辨识字体字体名
	帮助编译器遇到了不支持的字体名称
	帮助编译器将忽略该字体并采用默认的字体 Helvetica 。
其它选项错误

下面的信息是在帮助项目文件中 [OPTIONS] 部分其它选项发生的错误

2771	REPORT 选项必须为 ON 或 OFF
	REPORT 选项必须为以下几种： True, 1, ON, YES, False, 0, OFF 或 NO
	改正该输入并重新编译
2811	OLDKEYPHRASE 选项必须为 ON 或 OFF
	OLDKEYPHRASE 选项必须为以下几种：True, 1, ON, YES, False, 0, OFF 或 NO
	改正该输入并重新编译
2832	COMPRESS 选项必须为 OFF 或 MEDIUM
	COMPRESS 选项必须为以下几种：1, YES, ON, True, HIGH, MEDIUM, 0, NO, OFF 或 False
	改正该输入并重新编译
2852	TITLE 选项无效
	TITLE 选项定义了一个空字符串或者字符串长度超过 32个字符
	帮助编译器将截断标题
2872	LANGUAGE 选项无效
	定义了一个联机帮助编译器不支持的排序
	帮助编译器将采用默认的 U.S.标准排序
2893	Warning 选项必须为 1, 2, 或 3
	Warning 报告水平选项必须为1, 2, 或 3
	帮助编译器将采用默认的报告水平 ( 3 级)。
2911	图标文件文件名称无效
	帮助编译器找不到 ICON 选项中指定的图标文件，或者该图标文件无效
2932	版权字符串长度超过 50 个字符
	版权字符串长度超过最大值： 50 个字符
	帮助编译器将截断多余的字符
2000	无法解释错误。 请与 Microsoft Product Support Services 联系
BUILDTAG 部分 Footnote 和 Expression 错误

下面的信息是在帮助项目文件中 [BUILDTAGS] 部分连编脚注和连编表达式中发生的错误

3011	超过 32 个标识
	最大可以创建的标识数目为 32
	帮助编译器将忽略多余的标识
3031	连编标识长度超过 32 个字符
	指定行上的连编标识标识长度超过 32 个字符
	帮助编译器将跳过该输入项
3051	连编标识标识名称包含无效字符
	连编标识只能包字母或者下划线(_) 字符。
	帮助编译器将跳过该行
3076	缺少[BUILDTAGS] 部分
	在帮助项目文件中没有[BUILDTAGS] 选项时，BUILD 选项声明了一个条件连编。
	帮助编译器在连编时包含所有的主题
3096	连编表达式过于复杂
	连编表达式包括过多的表达式如(~, |, 或者 &) 或者嵌套过多
3116	无效的连编表达式
	指定行中使用的连编表达式包含一个或者多个语法或逻辑错误
3133	[BUILDTAGS] 部分中连编标识重复定义
	在 [BUILDTAGS] 部分中连编标识定义重复
3152	连编标识标识名称未在 [BUILDTAGS] 部分定义
	指定的标识符已经分配给某一主题，但未在帮助项目文件中声明。
	帮助编译器将忽略该主题的标识符。
3178	项目文件中缺少连编表达式
	主题已经有连编标识，但是在 .HPJ 文件中缺少 BUILD = 表达式。
	帮助编译器在连编时包含所有的主题。


宏错误

下面的信息是在帮助项目文件中的脚注、热点和 [CONFIG] 部分使用宏时发生的错误

3511	宏字符串的长度超过 254 个字符
	宏字符串的长度超过最大限制： 254 个字符。
3532	在宏宏名称中存在未定义的函数
	帮助编译器不支持该宏，同时也没有在 RegisterRoutine()中指定。
	帮助编译器最终将把宏传递给 .HLP 文件。
3552	宏宏名称中存在未定义的变量
	宏中包含有编译器不能识别的变量
3571	宏宏名称中函数的参数数目错误
	宏中参数过多或者过少。
3591	宏宏名称中有语法错误
	在宏中有语法错误。
3611	宏宏名称中函数参数类型不匹配
	在函数调用时出现参数类型不匹配（数字或者字符）。
3631	宏原形错误
	传递给 RegisterRoutine 的原形字符串非法。
3652	空宏字符串
	带有 ! 号的脚注或者以 ! 开始的隐含文字没有包含宏。
3000	无法解释错误 请与 Microsoft Product Support Services 联系。


字符串错误
上下文字符串错误

下面的信息由上下文字符串脚注或帮助项目文件选项或跳转中指定的上下文字符串发生的错误引起的。

4011	上下文字符串上下文名称已经被使用
	该上下文字符串已经被另一个主题使用。
	帮助编译器将忽略此上下文字符串，因此该主题没有标识符。
4031	无效的上下文字符串
	上下文字符串脚注包含不是字母的字符，或者脚注字符串为空。
	帮助编译器不为该主题分配标识符。
4056	在 CONTENTS 选项中定义了不能定位的上下文字符串
	找不到帮助项目文件中定义的目录主题。
	帮助编译器默认用连编中第一个主题作为目录主题。
4072	上下文字符串的长度超过 255 个字符的限制
	上下文字符串的长度超过 255 个字符。
	帮助编译器将忽略此字符串。
4098	[MAP] 部分的上下文字符串没有在任何主题中定义
	连编过程中联机帮助编译器在所有主题中都找不到 [MAP] 部分列出的上下文字符串。
	帮助编译器将忽略该输入项。
4113	不能定位的跳转或弹出上下文字符串
	该主题包含的上下文字符串标识的主题不存在。
	检查上下文字符串中主题的拼写错误，同时检查所需要的主题是否已经包含在连编过程中。
4131	上下文名称与上下文名称之间冲突
	混乱的操作过程为列出的两个上下文字符串生成了同样的值。
	更改任一个上下文字符串并重新编译。
4151	二级窗口名称无效
	二级窗口名称为 main 或者是其它不允许的成员名称。
4171	二级窗口不能使用弹出窗口
	指定弹出窗口标识符的隐含文本中包含了二级窗口的名称。
4196	没有校验跳转和查找
	由于内存不足，连编在没有对跳转和关键字进行有效性检查的情况下继续运行。


脚注错误

下面的信息是在主题文件中使用脚注时发生的错误。

4211	脚注文本长度超过 1023 个字符
	脚注内容长度不能超过最大限制 1023 个字符。
	帮助编译器将忽略该脚注。
4231	缺少脚注文本
	主题包含了一个没有字符的脚注。
4251	浏览顺序不在第一段落中
	浏览顺序不在主题的第一段落中。
	帮助编译器将忽略该流览顺序。
4272	浏览顺序字符串为空
	指定主题的流览顺序脚注未包含顺序字符。
4292	缺少顺序号
	指定主题的流览顺序号以冒号（:）结尾。
	移去冒号（:）,或者键入“minor”顺序号再重新编译。
4312	浏览顺序已经定义
	已经存在指定主题的流览顺序脚注。
	帮助编译器将忽略该流览顺序。
主题标题错误

4331	标题不在第一段落中
	标题脚注（$）不在第一段落中。
	该主题将不能得到一个标题字符串。
4352	标题字符串为空
	指定主题的标题脚注没有包含字符。
	帮助编译器将不会为该主题分配标题。
4372	标题定义重复
	指定主题的标题脚注不止一个。
	帮助编译器将采用第一个标题字符串。
4393	标题长度超过 128 字符
	指定主题的标题超过 128 字符。
	帮助编译器将忽略多余的字符。
关键字错误

4412	关键字字符串超过 255 字符
	关键字字符串超过了 255 个字符的最大限制。
4433	关键字字符串为空
	在关键字脚注中没有字符。
4452	关键字定义缺少标题
	主题有自己的关键字，但是没有标题。
	在历史窗口和关键字查询对话框中，主题将会显示为“>>Untitled Topic<<”。
连编标识错误

4471	连编标识脚注未在主题开头
	如果使用连编标识，连编标识脚注符必须是主题的第一个字符。
4492	连编标识超过 32 个字符
	指定主题的连编标识长度超过 32 个字符的最大限制。
	帮助编译器将忽略该主题的连编标识。
引入宏错误

4551	宏的引入符没有在第一段中
	! 脚注（运行宏）不在该主题的第一段中。
	帮助编译器将忽略该宏。


主题文件错误

下面的信息是在一个或者几个主题文件中使用 Word for Windows 格式时发生的错误。

4616	文件不是一个有效的 RTF 格式文件
	该文件不是一个有效的 RTF 格式文件。
	在文字编辑器中检查主题文件是否以 RTF 格式文件保存。
4639	文件文件名在字节偏移 0x%lX 处发生错误
	在此字节偏移处，该文件包含一个不可识别的 RTF 格式。
	如果采用如下文字编辑器将不会出现这条信息：Microsoft Word for Windows, Microsoft Word for MS-DOS 或者 Microsoft Word for the Macintosh。
	检查 RTF 的语法并重新编译。如果采用 Microsoft Word for the Macintosh, 把文件重新转换成PC 机版本, 再重新编译。
4649	文件文件名称中包括了多于 32767 个主题
	一个 RTF 文件中最多允许包含 32767 个主题。
4652	表格式过于复杂
	帮助编译器遇到带有边框、阴影、或者右对齐的表格。
	移走不支持的表格格式并重新编译。
4662	不支持并列段落格式
	Windows 3.1 中的 WinHelp 不支持并列段落格式。
	帮助编译器将忽略并列段落格式。
	如果使用的是 Windows 3.1 中的 WinHelp,请用它提供的表特性。
4671	表的列数超过 32 列
	在一个表中最多可有 32 列。一些文字处理器对该项可能有不同的限制。
4680	文件文件名中所用的字体字体名称不在 RTF 字体表中
	主题使用了 RTF 头文件中没有定义的字体。
	帮助编译器将采用系统默认的字体。
4692	无效的图形格式
	帮助编译器只支持 Windows 位图文件格式和元文件格式。
	帮助编译器将忽略无效的图形格式。
	必须确保没有使用 Macintosh 图形格式。
4733	分页符被隐藏
	分页符作为隐藏文本的一部分。隐藏的分页符不能分开两个主题。
4753	段落符被隐藏
	段落符作为隐藏文本的一部分。
	帮助编译器将忽略隐藏的段落符。
4763	回车符被隐藏
	回车符作为隐藏文本的一部分。
	帮助编译器将忽略隐藏的回车符。
4774	段落长度超过64K
	单一的段落包含超过 64K 的文本或者图形。
4792	在滚动区后定义了非滚动区
	被设置为 keep with next 的段落不是主题文件的第一段。
	帮助编译器将忽略 keep with next 属性，同时把该段落当作普通的段落进行处理，并使之成为普通主题文件的一部分。
4813	非滚动区跨过页边界
	“keep with next”段落格式跨过页边界。
4000	无法解释错误 请与 Microsoft Product Support Services 联系。


其它各类错误

下面的信息由 MS-DOS 文件错误及内存溢出等错误引起的。

5035	文件文件名没有被创建
	没有要编译的主题，或者所有的主题的连编表达式均为False。
	帮助编译器不会创建帮助文件。
5059	内存不足，无法连编帮助文件
	需要释放内存, 从内存中卸载任何不必要的应用程序、驱动程序以及常驻内存程序。
5075	帮助文件失效。请重新安装 HC35.EXE文件。
	机器监督系统检查出帮助编译器内部问题，系统已经挂起。
	请用源盘重新安装帮助编译器。
5098	使用的是旧的键-码表
	通过把 OLDKEYPHRASE 选项设置为 0，或者在重新编译每一帮助主题之前删除 .PH 文件，可以进行最大限度的压缩。
5115	写失败
	写磁盘操作失败。
	请与 Microsoft Product Support Services 联系。
5000	无法解释错误 请与 Microsoft Product Support Services 联系。


帮助宏命令参考

About

AddAccelerator (AA)

Annotate

AppendItem

Back

BookmarkDefine

BookmarkMore

BrowseButtons

ChangeButtonBinding (CBB)

ChangeItemBinding (CIB)

CloseWindow

Contents

CopyDialog

CopyTopic

CreateButton (CB)

DeleteItem

DeleteMark

DestroyButton

DisableButton (DB)

DisableItem (DI)

EnableButton (EB)

EnableItem (EI)

ExecProgram (EP)

Exit

FileOpen

FocusWindow

GoToMark

HelpOn

History

IfThen

IfThenElse

InsertItem

InsertMenu

IsMark

JumpContents

JumpContext (JC)

JumpHelpOn

JumpId (JI)

JumpKeyword (JK)

Next

Not

PopupContext (PC)

PopupId (PI)

PositionWindow (PW)

Prev

Print

PrinterSetup

RegisterRoutine (RR)

SaveMark

Search

SetContents

SetHelpOnFile

Virtual-Key Codes


About 帮助宏

此宏显示“关于”对话框（与“帮助”菜单上的“关于”命令等价）。

语法

About( )

参数

无

注释

不建议在二级窗口中使用这个宏。


AddAccelerator(AA) 帮助宏

此宏为快捷键（或键组合）指定帮助宏，当按下快捷键时，运行指定的宏。

语法

AddAccelerator(key, shiftstate, macro)

参数	参数
key	Windows的虚拟键值。有关这些键的列表，请参阅Virtual-Key Codes。
shiftstate	指定与快捷键同时使用的 ALT、SHIFT 与 CTRL 键组合的代表数字：0 (无)、1 (SHIFT)、2 (CTRL)、3 (SHIFT+CTRL)、4 (ALT)、5 (ALT+SHIFT)、6 (ALT+CTRL) 或 7 (ALT+SHIFT+CTRL).
macro	用户按快捷键时运行的帮助宏或宏串。宏必须出现在引号之中。串的各个宏之间用分号(；)分隔。
当用户按 ALT+SHIFT+CTRL+F4 键时，下面的宏启动 Windows 的 Clock 程序（Windows3.1 版提供）：

AddAccelerator(0x73, 7, "ExecProgram(`clock.exe', 1)")

注释

只有在Windows 帮助中才支持此宏。

AddAccelertor 运行的帮助宏可能无法在二级窗口中工作，或由于 AddAccelerator 宏本身在二级窗口中不能运行，而无法使用。在二级窗口中使用 AddAccelerator 运行宏之前，应先查看该宏的使用说明。


Annotate 帮助宏

此宏显示“注释”对话框（与“编辑”菜单上的“注释”命令等价）。

语法

Annotate( )

参数

无

注释

只有在Windows 帮助中才支持此宏。

不建议在二级窗口中使用此宏。

如果从弹出式窗口中运行 Annotate 宏，将把注释附加到包含弹出式窗口热点的主题中。


AppendItem 帮助宏

此宏在 InsertMenu 宏创建的菜单尾部添加菜单项。

语法

AppendItem(menuid, itemid, itemname, macro)

参数	说明
menuid	InsertMenu 宏创建菜单时使用的菜单名。这个菜单名应该括在引号中，新的菜单项将添加到该菜单中。
itemid	WinHelp 内部使用的标识该菜单项的名称。这个名称区分大小写，并且必须括在引号中。如果要废止或删除该菜单项，或更改菜单项在某些主题中的动作，可以在 DisableItem 或 DeleteItem 宏中使用这个名称。
itemname	WinHelp 显示在菜单上的该菜单项的名称。这个名称区分大小写，并且必须括在引号中。在引号中，可以在用作此宏键盘访问键的字符之前放置“&”符号。
macro	当用户选择菜单项时要运行的帮助宏或宏串。名称应该括在引号中。串中的多个宏应该用分号 (;) 隔开。
下面的宏把标记为“Tools”的菜单项添加在包含“mmu-books”标识符的菜单中。

AppendItem("mnu_books", "mnu_tools", "&Tools", "JI(`tools.hlp',

`first_topic')")

选择该菜单项将跳转到 TOOLS.HLP 文件中带有 first_topic 上下文字符串的主题。

注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。

应确保为菜单项指定的键盘访问键的唯一性。如果指定的键与其他菜单访问键冲突，WinHelp 将显示“无法添加菜单项”错误信息，并忽略此宏。


Back 帮助宏

此宏显示“后退”列表中先前的主题。“后退”列表包括启动 Help 应用程序后用户所显示的最近 40 个主题。

语法

Back( )

参数

无

注释

如果在二级窗口中运行，WinHelp 忽略此表。

如果在“后退”列表为空时运行 Back 宏，“帮助”应用程序不执行任何操作。


BookmarkDefine 帮助宏

此宏显示“定义”对话框（与“书签”菜单上的“定义”命令等价）。

语法

BookmarkDefine( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

不建议在二级窗口中使用此宏。

如果在弹出式窗口中运行 BackmarkDefine 宏，书签将添加到激活此弹出式窗口的主题中。


BookmarkMore 帮助宏

此宏显示“其他”对话框（与“书签”菜单上的“其他”命令等价）。如果用户定义的书签超过了九个，则“其他”命令出现在“书签”菜单上。

语法

BookmarkMore( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

不建议在二级窗口中使用此宏。


BrowseButtons 帮助宏

此宏在 Help 应用程序的工具栏中添加“向后浏览”(<<) 与“向前浏览”(>>) 按钮。

语法

BrowseButtons( )

参数

无

.HPJ 文件中的下述两个宏使得在工具栏上出现两个浏览按钮之前出现“时钟”铵钮。

CreateButton("&Clock", "ExecProgram(`clock', 0)")

BrowseButtons( )

注释

如果在二级窗口中运行时，WinHelp 忽略此宏（二级窗口只在 Windows 帮助中可用）。

如果在.HPJ文件的 [CONFIG] 部分中，BrowseButtons 宏与一个或多个 CreateButton 宏同时使用，则浏览按钮在 WinHelp 工具栏或 Microsoft Help 工具栏上的顺序由BrouseButtons 宏与 [CONFIG] 部分中其他宏的相对顺序决定。

附注

WinHelp3.5 版并不自动提供“向前浏览”(>>) 和“向后浏览”(<<) 按钮。如果“帮助”文件中包含一个或多个浏览序列，则必须使用BrouseButton( ) 宏，使用户可以向前和向后移动。


ChangeButtonBinding (CBB) 帮助宏

此宏为一个“帮助”按钮指定帮助宏。

语法

ChangeButtonBinding(buttonid, buttonmacro)

参数	说明
buttonid	为 CreateButton 宏中按钮或标准帮助按钮指定标识符，下列是预定义的按钮标识符： btn_contents (目录)、 btn_search (搜索)、 btn_back(后退)、 btn_history (历史)、 btn_previous (<<) 或 btn_next (>>)。按钮标识符应该括在引号中。
buttonmacro	用户选择按钮时要执行的帮助宏。该宏应该括在引号中。
下面的宏更改“内容”按钮的功能，使得当选择该按钮时跳转到 DICT.HLP 文件中的“目录表”主题（由上下文字符串“dict_contents”标识）。

ChangeButtonBinding("btn_contents", "JumpId(`dict.hlp',

`dict_contents')")

注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。


ChangeItemBinding (CIB) 帮助宏

此宏为 AppendItem 宏添加到 WinHelp 菜单中的菜单项指定帮助宏。

语法

ChangeItemBinding(itemid, itemmacro)

参数	说明
itemid	AppendItem 宏中为项指定的标识符。这个项标识符应该括在引号中。
itemmacro	用户选择该项时运行的帮助宏。这个宏应该括在引号中。
下面的宏更改标记为 time_item 的菜单项，使之能启动 Windows Clock 程序。

ChangeItemBinding("time_item", "ExecProgram(`clock', 0)")

注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。


CloseWindows 帮助宏

此宏关闭指定的窗口，该窗口可能是 WinHelp 主窗口，或者是某个二级窗口。

语法

CloseWindow(windowname)

参数	说明
windowname	要关闭的窗口名称。其中 main 保留给“帮助”主窗口。对于二级窗口，窗口的名称在 .HPJ 文件的 [WINDOWS] 部分中定义。这个名称应该括在引号中。
下面的宏关闭二级窗口“Keys”：

CloseWindow("keys")

注释

只有在 Windows 帮助中才支持此宏。

如果窗口不存在，WinHelp 忽略此宏。


Contents 帮助宏

此宏显示当前的“帮助”文件中的目录主题。目录主题由“帮助”项目文件 [OPTIONS] 部分的 CONTENTS 选项定义。

语法

Contents( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

如果项目文件不包含 CONTENTS 选项，则目录主题是 Help 项目文件中指定的第一个主题文件的第一个主题。


CopyDialog 帮助宏

此宏显示“复制”对话框（与“编辑”菜单上的“复制”命令等价）。

语法

CopyDialog( )

参数

无

注释

不建议在二级窗口（只在 WinHelp 中）中使用此宏。


 CopyTopic 帮助宏

此宏把当前主题的所有文本复制到 Windows 剪贴板上。

语法

CopyTopic( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

不建议在二级窗口中使用此宏。

此宏只复制文本；它并不复制位图及“帮助”主题中的其他任何图象。


CreateButton (CB) 帮助宏

此宏在 WinHelp 工具栏中添加一个新按钮。

语法

CreateButton(buttonid, name, macro)

参数	说明
buttonid	WinHelp 内部用于标记按钮的名称。这个名称应该括在引号中。如果要删除或废止该按钮，可以在 DisableButton 或 DestoyButton 宏中使用这一名称；如果更改此按钮在某些主题中运行的“帮助”宏，可以在 ChangeButtonBinAring 宏中使用这一名称。
name	按钮上出现的文本。这个名称必须括在引号中。要为这个按钮指定某个字母作为键盘访问关键字，可在文本中这个字母之前放置“&”符号（不适用于 Microsoft Help for the Macintosh）。按钮的名称区分大小写，最多可包含 29 个字符，超过这个长度的名称将被剪裁。
macro	用户选择该按钮时要运行的帮助宏或宏串。宏应该括在引号中。宏串中的各个宏之间用分号 (;) 分隔。
下面的宏创建一个标签为“Ideas”的新按钮，选择此按钮时跳转到 IDEAS.HLP 文件中有“directory”上下文字符串的主题。

CreateButton("btn_ideas", "&Ideas", "JumpId(`ideas.hlp', `directory')")

注释

如果在二级窗口中运行，WinHelp 忽略此宏。

WinHelp 最多允许创建 16 个按钮。在工具栏上允许有 22 个按钮，包括标准的浏览按钮。

如果在 .HPJ 文件的 [CONFIG] 部分中，BrouseButtons 宏与一个或多个 CreteButton 宏同时使用，则浏览按钮在 WinHelp 工具栏上的顺序由 [CONFIG] 部分中 BrouseButtons 宏相对于其他宏列出的次序决定。


DeleteItem 帮助宏

此宏删除 AppendItem 宏添加的菜单项。

语法

DeleteItem(itemid)

参数	说明
itemid	在 AppendItem 宏中使用的项标识符字符串。这个项标识行应该括在引号中。
下面的示例删除在 AppendItem 宏示例中添加的“Tools”菜单项。

DeleteItem("mnu_tools")

注释

只有在 WinHelp 中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。


DeleteMark 帮助宏

此宏删除用 SaveMark 宏添加的文本标记。

语法

DeleteMark(markertext)

参数	说明
markertext	在 SaveMark 宏中指定的标记文本。标记文本应该括在引号中。
下面的宏从疑难解答帮助文件中删除标记“Managing Memory”。

DeleteMark("Managing Memory")

注释

只有在 WinHelp 中才支持此宏。

如果运行 DeleteMark 宏时该标记并不存在，WinHelp 显示“主题未找到”错误信息。


 DestoryButton 帮助宏

此宏删除用 CreateButton 宏添加的按钮。

语法

DestroyButton(buttonid)

参数	说明
buttonid	在 CreateButton 宏中为按钮指定的标识符。这个按钮标识符必须括在引号中。按钮标识符不应该与标准“帮助”按钮使用的标识符重复。（有关这些标识符的列表，请参阅 ChangeButonBinding 宏）。
注释

如果在二级窗口中运行，WinHelp 忽略此宏。


DisableButton (DB) 帮助宏

此宏废止用 CreateButton 宏添加的按钮，并使此按钮变为灰色。

语法

DisableButton(buttonid)

参数	说明
buttonid	在 CreateButton 宏中为该按钮指定的标识符。这个按钮标识符必须括在引号中。
注释

只有在 WinHelp 中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。

被 DisableButton 宏废止的按钮，在用 EnableButton 宏激活之前，不能在主题中使用。


 DisableItem (DI) 帮助宏

此宏废止用 AppendItem 宏添加的菜单项，并使该菜单项变为灰色。

语法

DisableItem(itemid)

参数	说明
itemid	在 AppendItem 宏中为该菜单项指定的标识符，这个菜单项标识符应该括在引号中。
注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。

被 DisableItme 宏废止的某单项，在用 EnableItem 宏激活之前不能在主题中使用。


EnbleButton (EB) 帮助宏

此宏启用由 DisableButton 宏废止的按钮。

语法

EnableButton(buttonid)

参数	说明
buttonid	在CreateButton 宏中为该按钮指定的标识符。这个按钮标识符应该括在引号中。
注释

只有在 Windows 帮助中才支持此按钮。

如果在二级窗口中运行，WinHelp 忽略此宏。


EnableItem (EI) 帮助宏

此宏启用由 DisableItem 宏废止的菜单项。

语法

EnableItem(itemid)

参数	参数
itemid	在AppendItem 宏中为该菜单项指定的标识符。这个菜单项标识符应该括在引号中。
注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。


ExecProgram (EP) 帮助宏

此宏运行某个基于 Windows 的应用程序。

语法

ExecProgram(commandline, displaystate)

参数	说明
commandline	要执行的应用程序的命令行。这个命令行应该括在引号中。WinHelp 首先在当前目录下搜索该应用程序，然后相继在 Windows 目录、用户的路径以及当前显示的“帮助”文件所在的目录下搜索该应用程序。
displaystate	提示执行应用程序时显示方式的值。数值 0 指定正常显示，1 指定最小化， 2 指定最大化。
下面的宏以正常的窗口大小运行 Windows Clock 程序：

ExecProgram("clock.exe", 0)

注释

只有在 Windows 帮助中才支持此宏。


Exit 帮助宏

运行此宏时，退出 WinHelp 或 Microsoft 帮助应用程序（与“文件”菜单上的“退出”命令等价）。

语法

Exit( )

参数

无


FileOpen 帮助宏

此宏显示“打开”对话框（与“文件”菜单的“打开”命令等价）。

语法

FileOpen( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

不建议在二级窗口中使用此宏。


 FocusWindow 帮助宏

此宏使指定窗口拥有焦点，该窗口可以是WinHelp主窗口或是某个二级窗口。

语法

FocusWindow(windowname)

参数	说明
windowname	将拥有焦点的窗口名。其中，名称 main 保留给“帮助”主窗口。对于二级窗口，窗口名在 .HPJ 文件的[WINDOWS] 部分中定义。名称必须括在引号中。
下面的宏更改焦点，使二级窗口“keys”拥有焦点。

FocusWindow("keys")

注释

只有在 Windows 帮助中才支持此宏。

如果该窗口不存在，WinHelp 忽略此宏。


GoTo Mark 帮助宏

此宏跳转到 SaveMark 宏设置的标记上。

语法

GoToMark(markertext)

参数	说明
markertext	在 SaveMark 宏中指定的标记文本。这个标记文本应该括在引号中。
下面的宏跳转到帮助文件中的 Managing Memory 标记上。

GoToMark("Managing Memory")

注释

只有在 WinHelp 中才支持此宏。


HelpOn 帮助宏

此宏显示 WinHelp 应用程序所使用的帮助文件（与“帮助”菜单上的“帮助”命令等价）。

语法

HelpOn( )

参数

无

注释

只有在 WinHelp 中才支持此宏。


History 帮助宏

此宏显示“帮助历史记录”窗口，此窗口中显示用户在 WinHelp 或 Microsoft Help 中打开某个 Help 文件后所查看的最近 40 个主题。与在工具栏上选择“历史”按钮的作用相同。

语法

History( )

参数

无

注释

如果在二级窗口中运行，WinHelp 忽略此宏。


IfThen 帮助宏

如果给定的标记存在，此宏运行某个帮助宏。此宏使用 IsMark 宏进行测试工作。

语法

IfThen(IsMark(markertext), macro)

参数	说明
markertext	由 IsMark 宏测试的标记文本。这个标记文本应该括在引号中。
macro	标记存在时要运行的帮助宏或宏串。这个宏应该括在引号中。宏串中的各个宏这间用分号 (;) 隔开。.
如果已经用 Save Mark 宏设置了 Managing Memory 标记，下面的宏将跳转到带有 man_mem 上下文字符串的主题。

IfThen(IsMark("Managing Memory"), "JI(`trb.hlp', `man_mem')")

注释

只有在 Windows 帮助中才支持此宏。


IfThenElse 帮助宏

根据某个标记是否存在，此宏运行两个帮助宏中的一个。此宏使用 IsMark 宏进行测试工作。

语法

IfThenElse(IsMark(markertext), macro1, macro2)

参数	参数
markertext	由 IsMark 宏测试的标记文本。这个标记文本应该括在引号中。
macro1, macro2	如果该标记存在，WinHelp 运行 macro1，不存在时运行 macro2。两个宏都应该括在引号中。每个宏串中的多个宏之间用分号 (;) 隔开。
如果已经用 SaveMark 宏设置了 Managing Memory 标记，下面的宏跳转至带有 man_mem 上下文字符串的主题。标记不存在时，跳转到 TRB.HLP 文件的目录屏幕：

IfThenElse(IsMark("Managing Memory"), "JI(`trb.hlp', `man_mem')",

"JumpContents(`TRB.HLP')")

注释

只有 Windows 帮助中才支持此宏。


InsertItem 帮助宏

此宏在某个已存在菜单的给定位置上插入一个菜单项。该菜单可以是用 InsertMenu 宏创建的菜单，也可以是某个标准的 WinHelp 菜单。

语法

InsertItem(menuid, itemid, itemname, macro, position)

参数	说明
menuid	某个标准的 WinHelp 菜单名称，或者是 InsertMenu 宏要创建的菜单名称。标准菜单名有 mmu_file (“文件菜单”)，mmu_edit (“编辑”菜单)、mmu_bookmark (“书签”菜单) 和 mmu_helpon (“帮助”菜单)。菜单标识符应该括在引号中。新菜单项将插入到此菜单中。
itemid	WinHelp 内部用于标记该菜单项的名称。这个菜单项标识符应该括在引号中。如果要删除或废止该菜单项，或者更改在某些主题下该菜单项执行的操作，可以在 DisableItem 宏或 DeleteItem 宏中使用这一名称。
itemname	WinHelp 在菜单上显示的该菜单项的名称。这个名称区分大小写，并应该括在引号中。在引号中，可以在用作菜单项的键盘访问键字符前放置“&”符号。
macro	用户选择该菜单项时，要运行的帮助宏或宏串。这个宏应该括在引号中。宏串中的多个宏之间用分号 (;) 分隔。
position	指定代表新菜单项在菜单上出现位置的整数。位置 0 是菜单上的第一个位置或者说最高位置。
下面的宏在标识符为 mnu_books 的菜单上插入标记为 Tools 的菜单项，作为第三个菜单项。

InsertItem("mnu_books", "mnu_tools", "&Tools", "JI(`tools.hlp',

`first_topic')", 3)

选择此菜单项将跳转到 TOOL.HLP 文件中带有 first_topic 上下文字符串的主题。

注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。

应确保为菜单项指定的键盘访问键的唯一性。如果指定的键与其他的菜单访问键冲突，WinHelp 将显示“无法添加菜单项”错误信息，并忽略此宏。


InsertMenu 帮助宏

此宏在 WinHelp 的菜单栏上添加一个新菜单。

语法

InsertMenu(menuid, menuname, menuposition)

参数	说明
menuid	WinHelp 内部用于标识该菜单的名称。这个菜单标识符应该括在引号中。可以在 AkppendItem 宏中使用此名称，从而在该菜单中添加命令。
menuname	在菜单栏上显示的菜单名称。这个名称区分大小写，并应该括在引号中。可以在用作菜单的键盘访问键的字符前放置“&”符号。.
menuposition	是一个整数，指定 WinHelp 在菜单栏上显示新菜单的位置。位置由左而右编号，其中位置 0 是最左边的菜单。
下面的宏在 WinHelp 中添加 Utilities 菜单；

InsertMenu("menu_util", "&Utilities", 3)

Utilities 标记在 WinHelp 菜单栏上将作为第四个菜单出现。用户可以按 ALT+U 键来显示该菜单及其命令。

注释

只有在 Windows 帮助中才支持此宏。

如果在二级窗口中运行，WinHelp 忽略此宏。

应确保为菜单指定的键盘访问键的唯一性。如果指定的键与其他的菜单访问键冲突，WinHelp 将显示“无法添加菜单”错误信息，并忽略此宏。


IsMark 帮助宏

此宏确定某个由 SaveMark 宏设置的标记是否存在。此宏可作为条件宏 IfThen 与 IfThenElse 的一个参数使用。

语法

IsMark(markertext)

参数	说明
markertext	由 IsMark 宏测试的标记文本。如果标记存在，IsMark 宏返回“真”，不存在时返回“假”。这个标记文本应该括在引号中。
如果已经用 Save Mark 宏设置了名为 Managing Memory 的标记，下面的宏将跳转到带有 man_mem 上文字符串的主题：

IfThen(IsMark("Managing Memory"), "JI(`trb.hlp', `man_mem')")

注释

只有在 WinHelp 中才支持此宏。

可以利用 NOT 宏对 IsMark 宏的结果取反。


JumpContents 帮助宏

此宏跳转到“帮助”文件中指定的目录主题。目录主题由 .HPJ 文件 [OPTIONS] 部分的 CONTENTS 选项指出。

语法

JumpContents(filename)

参数	说明
filename	跳转的目标文件的文件名。这个文件名应该括在引号中。如果 WinHelp 没有找到该文件，WinHelp 将显示错误信息而不执行跳转。
下面的宏跳转到 PROGMAN.HLP 文件的目录主题：

JumpContents("PROGMAN.HLP")

注释

只有在 WinHelp 中才支持此宏。

如果并没有指定 CONTENTS 选项，WinHelp 将跳转到这个“帮助”文件的第一个主题。

如果在二级窗口中运行，WinHelp 忽略此宏。


JumpContext (JC) 帮助宏

跳转到由上下文编号标记的主题。上下文由 .HPJ 文件 [MAP] 部分的数据项指出。

语法

JumpContext(filename, contextnumber)

参数	说明
filename	跳转的目标文件的文件名。这个文件名应该括在引号中。如果 WinHelp 没有找到该文件，则 WinHelp 将显示错误信息而不执行跳转。
contextnumber	该主题在目标文件中的上下文编号。这个上下文编号必须已经在目标“帮助”文件的 [MAP] 部分中列出。如果这个上下文编号不存在，或者在 [MAP] 部分中没有找到，WinHelp 将跳转到文件的目录主题或第一个主题，并显示错误信息。（有关上下文编号的详细内容请参阅第六章“创建图形方式帮助”的“规划上下文相关”。）
下面的宏跳转到 PROGMAN.HLP 文件中映射为上下文编号 801 的主题。

JumpContext("PROGMAN.HLP", 801)

注释

只有在 Windows 帮助中才支持此宏。


JumpHelpOn 帮助宏

此宏跳转到“使用帮助”文件的目录主题。“使用帮助”文件可以是默认的 WINHELP.HLP 文件或者是在 .HPJ 文件 [CONFIG] 部分中由 SetHelpOnFile 宏指定的帮助文件。（有关详细内容，请参阅本节稍后的 SetHelpOnFile 宏）。

语法

JumpHelpOn( )

参数

无

下面的宏跳转到指定的“使用帮助”文件的目录主题。

JumpHelpOn()

注释

只有在 Windows 帮助中才支持此宏。

如果没有找到指定的“帮助”文件，WinHelp 将显示错误信息，而不执行跳转。


JumpId (JI) 帮助宏

此宏跳转到“帮助”文件中带有指定上下文字符串的主题。

当在 Macintosh 上使用内部文件跳转时，目标帮助文件应该安装在与源帮助文件相同的文件夹上。否则，不能执行跳转。

语法

JumpId(filename, contextstring)

参数	说明
filename	包含该上下文字符串的帮助文件的文件名。这个文件名应该括在引号中。如果没有找到该文件，WinHelp 将显示错误信息而不执行跳转。
contextstring	目标文件中该主题的上下文字符串。此上下文字符串应该括在引号中。如果这一上下文字符串并不存在，WinHelp 将跳转到该文件的目录主题。
下面的宏跳转到帮助文件 SECOND.HLP 中上下文字符串为 second_topic 主题：

JumpId("second.hlp", "second_topic")


JumpKeyword (JK) 帮助宏

此宏打开指定的帮助文件 (.HLP)，在 K 关键字表中搜索，并显示包含宏中指定关键字的第一个主题。

语法

JumpKeyword(filename, keyword)

参数

参数	说明
filename	包含所需关键字表的帮助文件的文件名。这个文件名应该括在引号中。如果该文件不存在，WinHelp 将显示错误信息而不执行跳转。
keyword	此宏所要搜索的关键字。这个关键字应该括在引号中。如果找到一个以上的匹配，WinHelp 将显示第一个匹配的主题。如果没有找到任何匹配，WinHelp 将显示“不是关键字”错误信息以及目标文件的目录主题。
下面的宏打开 CLOCK.HLP 帮助文件中以 hands 作为索引关键字的第一个主题。

JumpKeyword("clock.hlp", "hands")

注释

只有在 Windows 帮助中才支持此宏。


Next 帮助宏

此宏显示帮助文件浏览序列中的下一个主题。与选择“向前浏览” (>>) 按钮的作用相同。

语法

Next( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

如果当前主题是浏览序列中的最后一个，此宏不执行任何操作。

如果在二级窗口中运行，WinHelp 忽略此宏。


Not 帮助宏

此宏对 IsMark 宏返回的“真”值或“假”值求反。可以与 IsMark 宏一起作为 If Then 和 IfThenElse 条件宏的参数而使用。

语法

Not(IsMark(markertext)

参数	说明
markertext	由IsMark 宏测试的标记文本。如果标记存在，Not 宏返回“假”，否则，返回“真”。这个标记文本应该括在引号中。
如果未用 SaveMark 宏设置命名为 Managing Memory 的标记，下面的宏跳转到带有 Expanded Memory 上下文字符串的主题。

IfThen(Not(IsMark("Managing Memory")), "JI(`trb.hlp', `Expanded

Memory')")

注释

只有在 Windows 帮助中才支持此宏。


PopupContext (PC) 帮助宏

此宏显示由上下文编号标识的主题。上下文由 .HPJ 文件 [MAP] 部分的数据项指出。

语法

PopupContext(filename, contextnumber)

参数	说明
filename	包含要在弹出式窗口中显示主题的文件名。这个文件名应该括在引号中。如果没有找到该文件，WinHelp 将显示错误信息。
contextnumber	要在弹出式窗口中显示的主题的上下文编号。这个上下文编号必须已经映射到指定帮助文件的 [MAP] 部分中。如果上下文编号不存在或找不到，WinHelp 将显示该文件的目录主题或第一个主题。（有关上下文编号的详细内容，请参阅第十章“生成帮助文件”的“映射上下文相关主题”）。)
下面的宏在弹出式窗口中显示 PROGMAN.HLP 中映射为上下文编号 801 的主题。

PopupContext("progman.hlp", 801)

注释

只有在 Windows 帮助中才支持此宏。


PopupId (PI) 帮助宏

此宏在弹出式窗口中显示指定文件中的某个主题。

当在 Macintosh 上运行内部文件弹出时，目标帮助文件应该安装在与源帮助文件相同的文件夹上，否则，无法执行弹出操作。

语法

PopupId(filename, contextstring)

参数	说明
filename	包含弹出式窗口主题的文件的文件名。这个文件名应该括在引号中。如果文件不存在，WinHelp 将显示错误信息。
contextstring	目标文件中该主题的上下文字符串。这个上下文字符串应该括在引号中。如果所需要的上下文字符串不存在，WinHelp 将在弹出式窗口中显示该文件的目录主题或第一个主题。
下面的宏在弹出式窗口中显示 SECOND.HLP 文件中由上下文字符串 second_topic 标识的主题。

PopupId("second.hlp", "second_topic")


PositionWindow (PW) 帮助宏

对于 Help 主窗口或某个已存在的二级窗口，此宏设置其大小及位置。

在 Macintosh 帮助中，窗口的位置并不与显示器的最大长度相对应，而是与用户在窗口的缩放框中单击时窗口的假定位置对应。

语法

PositionWindow(xcoord, ycoord, width, height, windowstate,windowname)

参数	说明
xcoord, ycoord	窗口左上角的 X 坐标与 Y 坐标。位置是在 WinHelp 的 1024×1024 坐标系中定义的。
width, height	默认的窗口宽度和高度。与位置一样，窗口大小也是在 WinHelp 的坐标系统中定义的
windowstate	该参数指定窗口大小。正常大小使用参数 0，而最大化时使用 1。如果此参数为 1，则 WinHelp 将忽略xcoord、ycoord、width 和 height 参数。
windowname	要定位的窗口的名称。其中，名称 main 保留给帮助主窗口。对于二级窗口，窗口名在 HPJ 文件的 [WINDOWS] 部分中定义。这个名称应该括在引号中。
下面的宏定位二级窗口 Samples ，其左上角为 (100，100)，宽度与高度都是 500 （WinHelp 坐标）。

PositionWindow(100, 100, 500, 500, 0, "Samples")

注释

如果要定位的窗口并不存在，WinHelp 忽略此宏。


 Prev帮助宏

此宏显示帮助文件浏览序列中的前一个主题。与选择“向后浏览” (<<) 按钮的作用相同。

语法

Prev( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

如果当前显示的主题是游览序列中的第一个，此宏不执行任何操作。

如果在二级窗口中运行，WinHelp 忽略此宏。


Print 帮助宏

此宏将当前显示的主题发送到打印机。

语法

Print( )

参数

无

注释

此宏只能用来在 Help 主窗口之外的窗口中打印主题。例如，可以利用此宏打印二级窗口中显示的主题，假定打印过程中没有对话框打开。


PrinterSetup 帮助宏

此宏显示“打印设置”对话框（与“文件”菜单上的“打印设置”命令等价）。

语法

PrinterSetup( )

参数

无

注释

只有在 Windows 帮助中才支持此宏。

不建议在二级窗口中使用此宏。


RegisterRoutine (RR) 帮助宏

此宏把 DLL 中的某个函数注册为帮助宏。注册的函数与标准的帮助宏一样，既可以在主题文件的宏热点或脚注中使用，也可以在 .HPJ 文件的 [CONFIG] 部分中使用。

语法

RegisterRoutine(DLLname, functionname, formatspec)

参数	说明
DLLname	被调用的 DLL 名称。这个名称应该括在引号中。如果没有找到该 DLL，WinHelp 将显示错误信息而不执行调用。
functionname	指定 DLL 中要执行的函数名称。这个函数名称应该括在引号中。
formatspec	指定要向函数传递的参数格式字符串。这个格式字符串应该括在引号中。字符串中的字符代表 C 的参数类型：“u”表示无符号整数，“U”表示无符号长整数，“i”表示短整数，“I”表示长整数，“S”表示字符串 (near char*),"S"表示字符串 (far char*)，而“V”表示 void 型。WinHelp 自动保证上述格式与函数原型中指定的参数类型相匹配。
下面的 DLL 调用注册了 HELPLIB.DLL 中的一个 DLL 例程。参数 RetString 的类型有字符串，短整数及无符号长整数。

RegisterRoutine("HELPLIB", "RetString", "S=iU")

注释

只有在 Windows 帮助中才支持此宏。


SaveMark 帮助宏

此宏保存当前显示主题与文件的位置，并为该位置设置文本标记。之后就可以利用 Go To Mark 宏跳转到此位置。

语法

SaveMark(markertext)

参数	说明
markertext	用于标识主题位置的文本。这个标记文本应该括在引号中，并且应该是唯一的。如果在一个以上的标记中使用相同的文全，WinHelp 只识别最近一次输入的标记。
下面的宏在疑难解答帮助文件的当前主题中保存 Managing Memory 标记。

SaveMark("Managing Memory")

注释

只有在 Windows 帮助中才支持此宏。

除了 GoToMark 以外，WinHelp 提供下列与文本标记一起使用的宏：

 •	   DeleteMark 删除所有已定义的标记。

 •	   IsMark 在帮助文件中测试是否已设置了给定的标记，Not 对此结果求反。

 •	   如果给定标记已经设置，If Then 和 If ThenElse 运行一个或多个帮助宏。两者都利用 IsMark（以及可选的 Not）宏测试是否已设置标记。

如果用户退出 WinHelp 再重新启动，将不保存文本标记。


Search 帮助宏

此宏显示“搜索”按钮的对话框，该对话框允许用户查找使用关键字 (K) 脚注中所定义关键字的主题。与选择“搜索”按钮的作用相同。

语法

Search( )

参数

无

注释

如果在二级窗口中运行，“帮助”忽略此宏。


SetContents 帮助宏

此宏在帮助文件中指定某个主题作为目录主题。

语法

SetContents(filename, contextnumber)

参数	说明
filename	包含所需目录主题的帮助文件名。这个文件名应该括在引号中。如果没有找到该文件，WinHelp 将显示错误信息而不执行跳转操作。
contextnumber	指定文件中该主题的上下文编号。这个上下文编号应该已经在目标帮助文件的 [MAP] 部分中列出。如果上下文编号不存在，或者在 [MAP] 部分中找不到，WinHelp 将显示错误信息。
下面的宏把 PROGMA.HLP 文件中映射为上下文编号 801 的主题设置为目录主题：

SetContents("PROGMAN.HLP", 801)

运行此宏之后，按“目录”按钮将跳转到指定的主题。

注释

只有在 Window Help 中才支持此宏。


SetHelpOnFile 帮助宏

此宏指明用给定的帮助文件替换 Windows 环境中默认的“使用帮助”文件 WINHELP.HLP。

语法

SetHelpOnFile(filename)

参数	说明
filename	作为替换的“使用帮助”文件的文件名。这个文件名应该括在引号中。如果没有找到该文件，WinHelp 将显示错误信息。
下面的宏把 MYHELP.HLP 文件设置为“使用帮助”文件：

SetHelpOnFile("myhelp.hlp")

注释

只有在 Windows 帮助中才支持此宏。

如果此宏在“帮助”文件的某个主题中出现，则在执行完此宏后设置替换的文件。如果此宏在 .HPJ 文件的 [CONFIG] 部分中出现，则在打开“帮助”文件时设置替换的文件。


虚拟键代码

下面列出了 Microsoft Windows 虚拟键代码的符号常量名、十六进制值以及说明信息。虚拟键代码用于为宏指定快捷键或键组合。（有关指定快捷键或键组合的详细内容，请参阅 AddAccelerator 宏）。代码按数值的大小顺序排列。

名称	数值	说明
VK_CANCEL	03H	control-break 处理时使用
+	05H−07H	未定义
VK_BACK	08H	BACKSPACE 键
VK_TAB	09H	TAB 键
+	0AH−0BH	未定义
VK_CLEAR	0CH	CLEAR 键
VK_RETURN	0DH	RETURN 键
VK_SHIFT	10H	SHIFT 键
VK_CONTROL	11H	CTRL 键
VK_MENU	12H	ALT 键
VK_PAUSE	13H	PAUSE 键
VK_CAPITAL	14H	CAPITAL 键
+	15H−19H	为 Kanji 系统保留
+	1AH	未定义
VK_ESCAPE	1BH	ESC 键
+	1CH−1FH	为 Kanji 系统保留
VK_SPACE	20H	空格键
VK_PRIOR	21H	PGUP 键
VK_NEXT	22H	PGDN 键
VK_END	23H	END 键
VK_HOME	24H	HOME 键
VK_LEFT	25H	左箭头键
VK_UP	26H	上箭头键
VK_RIGHT	27H	右箭头键
VK_DOWN	28H	下箭头键
VK_SELECT	29H	SELECT 键
+	2AH	OEM 专用
VK_EXECUTE	2BH	EXECUTE 键
VK_SNAPSHOT	2CH	WINDOW 3.0版及以后版本中的打印屏幕键
VK_INSERT	2DH	INS 键
VK_DELETE	2EH	DEL 键
VK_HELP	2FH	HELP 键
VK_0	30H	0 键
VK_1	31H	1 键
VK_2	32H	2 键
VK_3	33H	3 键
VK_4	34H	4 键
VK_5	35H	5 键
VK_6	36H	6 键
VK_7	37H	7 键
VK_8	38H	8 键
VK_9	39H	9 键
+	3AH−40H	未定义
VK_A	41H	A 键
VK_B	42H	B 键
VK_C	43H	C 键
VK_D	44H	D 键
VK_E	45H	E 键
VK_F	46H	F 键
VK_G	47H	G 键
VK_H	48H	H 键
VK_I	49H	I 键
VK_J	4AH	J 键
VK_K	4BH	K 键
VK_L	4CH	L 键
VK_M	4DH	M 键
VK_N	4EH	N 键
VK_O	4FH	O 键
VK_P	50H	P 键
VK_Q	51H	Q 键
VK_R	52H	R 键
VK_S	53H	S 键
VK_T	54H	T 键
VK_U	55H	U 键
VK_V	56H	V 键
VK_W	57H	W 键
VK_X	58H	X 键
VK_Y	59H	Y 键
VK_Z	5AH	Z 键
+	5BH−5FH	未定义
VK_NUMPAD0	60H	数字键区 0 键
VK_NUMPAD1	61H	数字键区 1 键
VK_NUMPAD2	62H	数字键区 2 键
VK_NUMPAD3	63H	数字键区 3 键
VK_NUMPAD4	64H	数字键区 4 键
VK_NUMPAD5	65H	数字键区 5 键
VK_NUMPAD6	66H	数字键区 6 键
VK_NUMPAD7	67H	数字键区 7 键
VK_NUMPAD8	68H	数字键区 8 键
VK_NUMPAD9	69H	数字键区 9 键
VK_MULTIPLY	6AH	乘号键
VK_ADD	6BH	加号键
VK_SEPARATER	6CH	分隔符键
VK_SUBTRACT	6DH	减号键
VK_DECIMAL	6EH	小数点键
VK_DIVIDE	6FH	除号键
VK_F1	70H	F1 键
VK_F2	71H	F2 键
VK_F3	72H	F3 键
VK_F4	73H	F4 键
VK_F5	74H	F5 键
VK_F6	75H	F6 键
VK_F7	76H	F7 键
VK_F8	77H	F8 键
VK_F9	78H	F9 键
VK_F10	79H	F10 键
VK_F11	7AH	F11 键
VK_F12	7BH	F12 键
VK_F13	7CH	F13 键
VK_F14	7DH	F14 键
VK_F15	7EH	F15 键
VK_F16	7FH	F16 键
+	80H−87H	OEM专用
+	88H−8FH	未指定
VK_NUMLOCK	90H	NUM LOCK 键
+	91H	OEM 专用
+	92H-B9H	未指定
+	BAH-C0H	OEM 专用
+	C1H-DAH	未指定
+	DBH-E4H	OEM 专用
+	E5H	未指定
+	E6H	OEM 专用
+	E7H-E8H	未指定
+	E9H-F5H	OEM 专用
+	F6H-FEH	未指定


文档向导

请参阅

附注

只在 Visual FoxPro 专业版中才包含文档向导。

“文档向导”建立项目和程序文件的文档，并且可以分析代码从而整理代码文件中的格式。向导通过一系列的提问步骤来引导您完成任务。如果要进行“文档向导”的高级定制，请参阅定制文档向导。

默认情况下，向导不能对已存在文件进行修改。但是，您可以在最后一步选择是否进行此操作。

步骤 1 - 源文件

键入项目文件或者指定的程序文件的名称。

步骤 2 - 大写

关键字是 Visual FoxPro 程序语言内部的所有保留字，而符号是在代码中定义的变量和名称。

步骤 3 - 缩进

选择需要的选项来保证代码缩进的一致性。

步骤 4 - 标题

标题是对它后面代码的说明。它们可以放在文件、过程、类定义和方法的开始处，以增强代码的可读性。

步骤 5 - 报表

向导建立的报表实际上是文本文件。报表类型为：

报表类型	文件名	说明
操作图表	project.ACT	显示代码中的层次关系。如果使用的代码页不是 ASCII 1250 页和 ANSI 1252 页，请参阅定制文档向导中的 *# ACTIONCHARS 文档。
交叉引用	XREF.LST	列出所有用户自定义的符号。
文件列表	FILES.LST	列出所有项目中的文件。
资源代码列表	project.LST	将所有格式化代码放入一个文件中。
树图表	TREE.LST	显示所有过程调用树。
向导自动创建如下文件：

文件名字	说明
FILES.DBF	每个记录对应项目中一个文件的表
FDXREF.DBF	每个记录对应代码中用户符号的一个实例的表
FDXREF.DBF 包含一个名为 Flag 的字段，以标识关键字。这些标识如下：

标识	说明
B	基类
C	类名称
D	定义的 PROC 或者 FUNC（不包括方法）
F	函数调用：myproc( ) 或者 DO myproc
K	关键字
M	方法定义
N	文件名称
O	对象
P	对象属性
R	用户符号引用
V	用户符号（变量）定义 (PARA, PRIV, PUBL, DIME)
步骤 6 - 完成

默认下，向导不能改写已存在的文件。选择“改写当前文件”选项，用向导保存的文件代码改写已存在的代码文件。

如果选择“将文件放到单个目录中”选项并选择“完成”，向导将提示选择一个目录来存储建立的文件。

如果选择“将文件放到新目录树中”选项并选择“完成”，向导将提示选择一个目录来建立项目资源树的备份，并在新树的适当目录中存储新建的格式化的程序。

如果选择“交叉引用关键字”选项，对应程序代码中 Visual FoxPro 关键字的每个实例，向导向 FDXREF.DBF 文件中添加一条记录。根据代码的大小，该选项会用大量的记录扩充 FDXREF.DBF。选择该选项时，向导将代码中的关键字和 FDKEYWRD.DBF文件中第一个字段 Token 匹配起来。FDKEYWRD.DBF 中的第二列， Code，包含一个标识，以通知向导在分析代码时如何处理关键字。下表描述了标识代码。

代码	说明
I	缩进
U	不缩进（删除缩进）
R	将缩进设置为 0（如果是 InDefineClass，则为 1）
F	过程或者函数
D	While 或者 Case: DO 语句
O	对象（微调按钮，命令按钮）
P	属性 (Scalemode,DecimalPoints)
M	方法 (Init,KeyPress)
C	只能作为子句使用的语句：不能开始一个语句


请参阅

使用向导

定制文档向导


定制文档向导

请参阅

附注

只在专业版的 Visual FoxPro 中使用文档向导。

除了在运行文档向导时使用的选项外，可以在向导之外定制附加的选项。

CASE 结构中的缩进

默认下，向导在 CASE 结构中寻找如下的缩进：

DO CASE

CASE case1=1

case2=2

CASE case3=3

case4=4

ENDCASE

一些开发者愿意将 DO CASE 和 ENDCASE 之间的行再缩进一层，象下面这样：

DO CASE

CASE case1=1

case2=2

CASE case3=3

case4=4

ENDCASE

若要象第二例子中那样缩进 CASE 结构，可以在 FDKEYWRD.DBF 文件中指定。要在 FDKEYWRD.DBF 中指定代码类型，应将 ENDCASE 记录中 Code 字段的值更改为 UU。

文档向导指示

可以在代码文件中放置特定的向导指示，使文档向导在分析代码时完成指定的任务。

可以把指示放在：

 •	   项目的主程序中，指示向导如何分析项目中所有的代码文件。

 •	   独立的代码文件中，指示向导如何分析指定文件。

指示的语法规定以星号开始，Visual FoxPro 把它们作为注释并且在编译时忽略。指示不区分大小写，其语法为：

*# document directive

把指示放置在主程序文件的开始处是较好的方法，这能使文档向导在开始分析时就得到指示。

下面详细说明文档向导指示。

*# document ACTIONCHARS "abcdef"

默认时，文档向导建立一个操作图或者树图，当在 ASCII 1250 代码页和 ANSI 1252 代码页查看时，向导使用六个线条样的字符以及方角号。在其它代码页下查看时，不是所有的字符都映射为线条样字符。六个默认字符和相应的 FoxFont 字符在下表中用 a, b, c, d, e, 和 f 列出。

abcdef	Chr( ) 默认值	用FoxFont字体
a	32	（空格）
b	196
c	179
d	218
e	192
f	195

abcdef	Chr( ) 默认值

a	32

b	196

c	179

d	218

e	192

f	195

提示

当使用其它代码页时，在主程序文件中插入如下代码，可以确保图表中的行映射为线条样字符（引号括起的字符串中第一个字符是空格）
*# document ACTIONCHARS " -|+++"

有关所支持代码页的列表，请参阅 Visual FoxPro 支持的代码页。

*# document XREF cMode

启用变量的交叉索引，默认值为 ON。

cMode
ON	启用变量的交叉索引
OFF	废止变量的交叉索引
SUSPEND	在当前文件中不能使用变量的交叉索引，直至文档向导遇到下一个： *# document XREF ON 为止
*# document EXPANDKEYWORDS cMode

启用关键字扩展。例如，DEFI WIND 可以扩展为 DEFINE WINDOW。默认值为 OFF。

警告

在 Visual FoxPro 中不是所有的关键字都能以唯一的四字符长度的字符串开始。例如，REPL 可能代表REPLACE 或者 REPLICATE。注意自己是否包含这种指示并选择改写已有文件。

cMode	说明
ON	启用关键字扩展
OFF	废止关键字扩展
SUSPEND	在当前文件中不能使用关键字扩展，直到遇到下一个 *# document EXPANDKEYWORDS ON 为止，
*# document XREFKEYWORDS cMode

此指示对应于文档向导中“步骤-6 完成”中的“交叉引用关键字”选项。默认值为 OFF。

cMode	说明
ON	启用关键字的交叉引用
OFF	废止关键字的交叉引用
SUSPEND	在当前文件中不能使用关键字的交叉引用，直至遇到下一个 *# document XREFKEYWORDS ON 为止
*# document ARRAYBRACKETS cMode

默认值为 OFF。

cMode	说明
ON	文档向导假定数组使用方括号，而函数和方法使用圆括号
OFF	文档向导将方括号和圆括号都视为数组。
*# document ACTIONINDENTLENGTH nSpace

nSpace 是文档向导使用缩进时需要的空格数，最小值为 2。


请参阅

使用向导

文档向导


安装向导

请参阅

附注

只有在 Visual FoxPro 专业版中才包含“安装向导”。

“安装向导”根据发布树中的文件建立发布磁盘。要获得更多的有关发布过程以及运行“安装向导”之前准备发布树的信息，请参阅《专业级功能指南》的第十章“建立发布磁盘”。

步骤 1 -发布树

为发布树指定的目录必须包含要在用户环境中建立的所有文件和子目录。“安装向导”把此目录树作为要压缩到磁盘映象子目录中的文件源。

“安装向导”记录对每个发布树选项的设置值，并作为下一次对同样发布树建立安装时的默认值。

附注

不能使用 DISTRIB 目录，因为向导把它作为发布树目录使用。同时，最好将源树放置在 Visual FoxPro 目录外。

步骤 2 - 可选组件

选择应用程序使用的系统特性和用户安装应用程序时使用的操作系统。“安装向导”创建一个安装例程，来包含指定系统特征所必须的系统文件。

下表列出可以包含在安装程序中的文件大小。

选择项	大小	在下述情况选择此选项
Visual FoxPro 3.0 Runtime	3.5 MB	需运行 Visual FoxPro Runtime (VFP300.ESL)
Microsoft 5.0 Graph Runtime	2.2 MB	包含使用 Graph 5.0 控制的表单
ODBC Drivers...	4.3 MB	和不是 Visual FoxPro .DBF的表进行通讯。如果选择此项，显示 ODBC 驱动对话框，可以进行选择
Win32s1	4.0 MB	发布给使用Windows 3.11版本的用户。Visual FoxPro 应用程序需要 Win32s
Windows 951	0.5 MB	发布给使用 Windows 95的用户。由于 Windows 95 还未发布，不能保证 Windows 95 的驱动程序和 Visual FoxPro 兼容。与 Visual FoxPro 兼容的驱动程序将同 Windows 95 同时发布。
Windows NT1	0.5 MB	发布给使用 Windows NT 的用户
1 如果发布不是 Visual FoxPro 应用程序的文件（例如帮助文件），没必要选择平台选项
上述列出的大小代表文件安装在用户硬盘上的字节数，当安装时可能会有所增加。

步骤 3 - 磁盘映象

向导建立一个发布子目录，其中包含每种指定类型磁盘的映象。如果选择“网络安装”，向导将建立唯一的子目录来包含所有的文件。

在运行向导之前可以建立磁盘映象子目录。如果想让向导来建立，在文本对话框键入新的名称或者使用默认值。

步骤 4 - 安装选项

“安装向导”建立安装对话框时，把“对话标题”框中指定的标题作为标题。同时还在“关于安装”对话框中放置版权信息，可以通过安装应用程序的控制菜单中的“关于”命令访问“关于安装”对话框。“对话标题”和“安装版权”对话框需要输入项，“安装后可执行”输入项是可选项。

附注

为了进行到步骤 5，必须把插入点移到“对话标题”和“安装版权”对话框之外。

步骤 5 - 默认目标目录

安装程序将把应用程序放置在“默认目标目录”对话框指定的目录中。

步骤 6 - 文件总结

向导在网格中列出文件。可以通过单击要改变的项来改变对文件的设置，下表描述每列显示的设置。

列	说明
File	指定在用户机器上创建文件时使用的名称。
Target Dir	文件能够安装在用户机器上的应用程序目录、Windows 目录或者 Windows 系统目录内
PM Item	如果选择此选项，向导将显示“程序管理器项”对话框，从中可以指定程序项的属性：说明、命令行和图标 在命令行可以使用嵌入的 %s 序列代替应用程序目录，其中的 s 必须小写。要将程序安装到应用程序子目录中时，应使用 %s，这可以确保在用户为应用程序子目录指定了不同于默认值的名称时，文件也可以安装到正确的目录中。在下面示例中，把 MYDATA.DBF 文件安装到应用程序的 MAINDATA 子目录下： %s\MAINDATA\MYDATA.DBF 如果指定了源树之外的图标，安装例程将在应用程序子目录中安装所有的图标。
OLE	如果选择该项，安装程序将在用户的机器上注册 OLE 控制。在用户的机器上不为该控制注册设计许可权。最好使安装程序注册 OLE 控制，以确保用户使用控制的正确版本
只有购买了 OLE 控制及其许可权，同时在机器上安装它，Visual FoxPro 才允许建立或者实例化 OLE 控制。许可信息与表单或类保存在一起，允许可以在用户机器上成功地运行发布的表单。用户不能在设计时修改这些表单，除非在代理商那里购买了设计许可权。

可以发布包含 OLE 控制的可视类库。基于这些可视类库的新控制可以添加到运行的表单中，用户不能修改这些可视类库，在它们上面建立控制或者子类。

OLE 控制可能在未收取费用或没有许可的情况下开发和发布。所以大多数控制需要经过设计，使得在没有许可的情况下 OLE 控制失效。当前有两个版本的 OLE 控制：设计和运行。“设计许可”允许创建新的 OLE 控制，“运行许可”允许运行包含 OLE 控制的表单。要想获得有关发布带有 OLE 控制的应用程序的详细信息，请参阅发布 OLE 应用程序。

步骤 7 - 完成

当选择“完成”时，向导记录下可以在下次从发布树中建立发布磁盘时使用的配置值，然后开始创建应用程序磁盘映象。

第一次运行向导时将建立并且压缩几个唯一文件。这一步导致首次运行向导比以后运行向导花费更多的时间。向导保存这些文件，以供以后再次使用“安装向导”时使用。

在向导创建了指定的磁盘映象之后，可以把映象复制到主盘上，然后复制其它磁盘的内容并把它们组合成发布包。在建立一系列的主盘之后，可以删除磁盘映象子目录。最好保存 COMPRESS 子目录，这样在以后使用安装向导建立新的发布盘时，向导只需压缩改变的文件。


请参阅

使用向导

分布 OLE 应用程序


升迁向导

请参阅

附注

只有在 Visual FoxPro 专业版中才包含升迁向导。

升迁向导建立 SQL 服务器数据库，它最大限度地重现 Visual FoxPro 数据库的功能。使用升迁向导可以：

 •	   将本地数据移到远程服务器上。

 •	   将本地数据库和本地视图转换为远程数据库和远程视图。

 •	   将本地应用程序移到客户／服务机应用程序上。

对升迁向导更多的文档信息，包括每步的详细资料，请参阅《专业版特性指南》的第二章，“升迁 Visual FoxPro 数据库”中的“使用升迁向导”。

附注

升迁将需要很长的时间，主要依赖数据的大小、网络的繁忙程度和服务器同时处理的命令数量。大的表可能需要升迁几个小时。

步骤 1 - 选择本地数据库

如果没有打开数据库，选择“打开”按钮来选择并且打开一个数据库。

步骤 2 - 选择数据源

如果使用命名连接访问数据源，升迁向导把命名连接和升迁过程中创建的任何远程视图连接起来。

如果使用数据源名称代替命名连接来登录数据源，并且在向导中选择创建远程视图，升迁向导建立一个名为 Upsize 的命名连接（如果具有推荐名称的连接定义存在，则依次建立 Upsize2，Upsize3 等等）。

选择“下一步”按钮，向导显示 ODBC 登录对话框。如果命名连接带有密码，向导在不提示 ODBC 登录信息的情况下登录 SQL 服务器。

步骤 3 - 目标数据库

如果想向 SQL 服务器数据库添加 Visual FoxPro 表，可以升迁到已有的数据库中。要升迁到已有的数据库中，向导跳转到第六步。

如果要建立新的远程数据库，名称最多可包含 30 个字符，可以包含字母、数字和 #、$、_ 符号，但不允许空格。

步骤 4 - 数据库设备 (SQL Server)

选择数据库的大小和设备。可以重新建立数据库设备或者选择已有的设备。由于SQL 服务器要求至少有 2 MB，所以新数据库的大小至少为 2 MB。

步骤 5 - 日志设备 (SQL Server)

SQL 服务器为您的数据库建立一个事务日志，该日志在出现系统问题时将重建数据库。

理想情况下，数据库和相应的日志应该放在隔离的物理盘设备上。在起动升迁向导之前，必须首先建立这些设备，因为向导在同一个物理盘上创建所有的新设备，这个盘是主数据库所在的磁盘。

如果只有一个物理盘，应该把数据库和相应的日志放在分开的设备上，这样可以使用 SQL 服务器的 DUMP TRANSACTION 命令。

步骤 6 -要升迁的表

为保证导出数据的准确性，向导试图以独占的方式打开升迁数据库中的全部表。如果表已经打开并且共享使用，向导将关闭它们并且重新以独占方式打开，这样可能会丢失用 SET RELATION 或者 SET SKIP 命令建立的临时关系。不能以独占方式打开的表则不能升迁。

步骤 7 -字段类型

不能把关键字段的默认映象更改为不允许索引字段的数据类型。如果选择可以索引的数据类型，就能更改索引关键字中字段的默认映象；但您也可能更改关键字中其它字段的数据类型和它相匹配。当更改一个不是关键字段但被一个 Visual FoxPro 索引使用的字段的默认映象数据类型时，Visual FoxPro 会发出警告。如果发生错误，单击“重置为默认值”可以重新设置数据类型。

有关使用的默认数据类型的详细信息，请参阅升迁向导中的数据类型映象。

步骤 8 -升迁选项

默认情况下，升迁向导导出表的结构和数据。与字段名称及数据类型一起，升迁向导也可以导出索引、默认值、关系（参照完整性限制）和有效性规则。

Visual FoxPro 索引和默认值改变 SQL 服务器的索引和默认值。如果选择导出有效性规则，升迁向导就把字段级和行级有效性规则导出到 SQL 服务器，在那里成为由 SQL 服务器触发器调用的存储过程。导出的表关系也成为触发器的一部分。

提示

如果升迁表的关系，请确保同时升迁索引，否则可能导致很差的性能。

步骤 9 -完成

可以选择：

 •	   不产生 SQL 代码升迁。

 •	   只产生升迁所需的 SQL 代码。

 •	   升迁并产生 SQL 代码。

仅当您在 SQL 服务器上拥有 CREATE TABLE 权限时，第一和第三选项才可用。如果选择保存 SQL 代码的任一个选项，升迁向导创建的所有 SQL 代码保存在您的硬盘上。


请参阅

使用向导

升迁向导中的数据类型映象


浏览类

请参阅

在 Visual FoxaPro 的专业版中，可以使用类浏览器来浏览、追踪和修改类。

若要	请参阅
查看类等级	查看类等级
查看特定类	筛选类浏览器的类列表
查看类代码	查看类定义代码
创建、删除、重定义或复制类	使用类浏览器来管理类
向表单中添加类实例	使用类浏览器向表单中添加控制
修改类	修改类图标和说明
修改类浏览器	定制类浏览器


请参阅

使用类浏览器向表单中添加控制

类浏览器按钮

类浏览器窗口

定制类浏览器

筛选类浏览器的类列表

使用类浏览器来管理类

修改类图标和说明

查看类定义代码

查看类等级


查看类等级

请参阅

通过类浏览器，可查看一个类库的等级；也可查看用户自定义的类成员，并追踪相关类间成员的继承性。

� 若要查看类等级

1.	从“工具”菜单中，选择类浏览器。

  或者

在“命令”窗口中，键入下列命令：

DO (_BROWSER)

2.	在“打开”对话框中选择文件名，默认时，该文件类型为“类库”。如果要打开一个表单（.SCX 文件），可在“文件类型”框的“文件列”中选择“表单”。类浏览器打开并显示选定文件中类的大纲。

例如，若要查看在 TasTrade 中使用的基类，请从 SAMPLES\MAINSAMP\LIBS 目录中打开 TSBASE.VCX。

3.	从类列表中选择一个类。类浏览器可在类列表上方显示类图标，并在类列表下面的选项卡中显示用户自定义的类成员列表。

例如，在 TSBASE.VCX 中，选择 tsbaseform 查看其用户自定义的成员，然后选择它的子类 tsmaintform，查看其成员。

4.	在“全部”选项卡中，查看全部用户自定义的对象成员、属性、方法和实例。

  或者

选择一个选项卡以查看特定成员的类型。

5.	如果要查看选项卡列表中的保护属性、方法和对象，可选择“保护”按钮。保护成员在成员选项卡中出现时前面带有星号 (*)。

6.	如果要查看具有方法的对象，但不在选项卡列表中显示代码，应选择“空”。

当选定一个类时，可以很容易地查看其父类。

� 若要查看父类

 •	   双击类名旁的文件夹图片，类浏览器可显示父类。

如果类旁有一个标识 (<<)，则其父类位于类列表中显示的类库 (.VCX) 之外的类库中。当双击文件夹图片以查看父类时，则将包含父类的类库添加到类列表中并选定父类。

例如，从 SAMPLES\MAINSAMP\FORM 目录中打开 CUSTOMER.SCX，并双击 frmcustomers 文件夹图片。类浏览器将其类库 TSBASE.VCX 添加到库列表中，并选择 tsform 类。

通过在当前类浏览器窗口中打开另一文件，或打开另一个类浏览器窗口，可以查看多个类库或表单文件，也可在几个类浏览器窗口中打开同一文件。


请参阅

_BROWSER 系统内存变量

使用类浏览器向表单中添加控制

浏览类

类浏览器按钮

类浏览器方法

类浏览器属性

类浏览器窗口

定制类浏览器

筛选类浏览器的类列表

使用类浏览器来管理类

修改类图标和说明

查看类定义代码


筛选类浏览器的类列表

请参阅

使用筛选条件，如 Visual FoxPro 基类类型或一个类名，可以显示类列表中特定类的集合。

� 若要筛选类列表

1.	在类浏览器中浏览一个文件。

2.	如果要筛选文件中的全部类和子类，请选择“字母”序。

3.	在“类型”框中，输入类名或从列表中选择一个。

  或者

在“类型”框中，输入单个筛选条件或由逗号分隔的多个筛选条件，逗号代表逻辑“或”：一个类若要包含在类列表中，只需要与一个筛选条件相匹配。

与筛选条件相匹配的类将显示在类列表中，且输入的筛选条件将添加到下拉列表中。下拉列表保存了所选择的类型和筛选条件的记录，以便在类浏览器窗口的当前实例中查看。关闭实例以后，不保存该列表。

附注

当使用“字母”序时，Visual FoxPro 计算全部的类；当使用“层次”这个默认选择时，Visual FoxPro 计算父类。如果父类与筛选条件相匹配，则再计算其子类。如果父类与筛选条件不匹配，则不计算其子类，并且即使其子类与筛选条件相匹配，它也不显示在列表中。

可以在类名中使用下表描述的通配字符创建一个筛选条件：

如果已知	可使用以下符号来代替未知字符
类名中的第一个字符	星号(*)。例如查看以“VCR”开头的全部类，输入 VCR*。
类名中除一个字符以外的其它字符	问号(?)。例如查看以 MsgBox 和一个数字如 Msgbox1 开头的全部类，输入 MsgBox?
类名中的一个字符串	两个百分号(%%)，例如查看包含有字符串“mover”的全部类，输入 %MOVER%
可扩展类的搜索，使得可以搜索类名或类说明中包含特定字符的类。

� 若要通过类名和说明文本来搜索

1.	在类浏览器中浏览文件，然后选择“查找”按钮。

2.	在“查找类”对话框中，输入想要查找的文本串。

名称或说明中带有此文本串的一列类显示在类列表中。如果该列表是分层的，则只有匹配的父类及其相关的匹配子类才显示在列表中。如果要查看包含该文本串的任何类，可选择“字母”选项。


请参阅

使用类浏览器向表单中添加控制

浏览类

类浏览器按钮

类浏览器窗口

定制类浏览器

使用类浏览器来管理类

修改类图标和说明

创建类定义的子类

查看类定义代码

查看类等级


查看类定义代码

请参阅

如果要查看特定的参数或理解类的逻辑结构，可使用类浏览器来查看类代码。

� 若要查看类定义代码

1.	在类浏览器中，选择要查看的类。

2.	选择“查看类代码”按钮。

Visual FoxPro 在只读窗口中显示选定的类定义代码。可使用“编辑”菜单中某些编辑命令，如查找，复制和全部选定。


请参阅

使用类浏览器向表单中添加控制

浏览类

类浏览器按钮

类浏览器窗口

定制类浏览器

筛选类浏览器的类列表

使用类浏览器来管理类

修改类图标和说明

跟踪窗口

查看类等级


使用类浏览器来管理类

请参阅

可创建子类，把类从一个类库复制到另一类库，删除类和库文件，重命名类或者重新定义类关系。

注意

如果要对类进行删除、重命名或重定义，则基于此类的表单可能不能正确运行。

� 若要添加一个子类，

1.	在类浏览器中，打开类库。

2.	选择要从中派生子类的类，然后选择“添加子类”按钮。

3.	在新类对话框中，输入新子类名。

4.	在类设计器中，定义并保存子类。

类浏览器显示新子类。

� 若要把类从一个类库复制到另一类库中

1.	在类浏览器中，打开源类库。

2.	从“工具”菜单中，打开类浏览器的第二个实例，并选择目标库文件。

3.	在原类库中，选择要复制的类，然后把位于类列表上方的类图标拖到目的库中的类图标上。当经过目的类图标之上时，光标带有加号。

该类就添加到了目的类库中。

� 若要把多个类从一个类库文件复制到另一个类库文件中

1.	在类浏览器中打开源类库。

2.	如果要筛选类列表，则在“类型”框中键入筛选条件以限定想要从文件中复制的类。

2.	从“工具”菜单中，打开类浏览器的第二个实例，并选择目标库文件。

3.	在源类库中，选择要复制的类库文件，然后把位于类列表上方的类图标拖到目标库中的类图标上。当经过目标图标之上时，光标带有加号。

对选定类库文件，源类列表中显示的类全部添加到了目标类库中。

� 若要删除类、类库或表单，

1.	在类浏览器中打开类库或表单。

2.	在“类列表”中，选择要删除的类、类库或表单，然后选择“删除”按钮。对类来说，它在库中的记录标有删除标记，下一次就可选择“清除类库”；对类库和表单来说，文件是从磁盘中删除。

� 若要重命名类库中的类，

1.	在类浏览器中打开类库。

2.	在“类列表”中，选择要重命名的类，然后选择“重命名”按钮。

注意

如果对具有相关子类的类重命名，则子类将不能引用从重命名类中继承下来的属性。

3.	在“重命名类”对话框中，输入新的名称，然后选择“重命名”。

类浏览器显示新名。

� 若要更改一个类的父类

1.	在类浏览器中打开类库。

2.	在“类列表”中，选择想要重定义的类，然后选择“重定义”按钮。

3.	在“重定义”对话框的“为”框中，输入新的父类名。新父类与原父类必须是来源于同一基类。例如，可以把来源于工具栏基类中的类重定义到另一工具栏类中，但不能将其重定义为表单类。

4.	在“存放”框中，选择或输入类库文件名。


请参阅

浏览类

类浏览器按钮

类浏览器方法

类浏览器属性

类浏览器窗口

定制类浏览器

筛选类浏览器的类列表

修改类图标和说明

查看类等级


使用类浏览器向表单中添加控制

请参阅

在设计或运行表单时，可从类浏览器中添加控制。

� 若要向表单添加控制，

1.	在表单设计器中，打开表单。

2.	在类浏览器中，打开类库文件，其中应包含有添加到表单中的对象的类。

3.	从类列表中，选择类名，然后把类图标拖放到表单上。类图标位于类列表的上方。

附注

如果要把类添加到表单的容器对象上，则需把类图标拖放到表单中一个区域，然后把对象剪切并粘贴到所要的容器上。

� 若要查看表单中某个控制的类

1.	在“表单设计器”中，选择控制。

2.	从“工具”菜单中，选择“类浏览器”。类浏览器打开，并显示表单上选定控制的类。

可设计表单，以便在运行时把一个类的对象从类浏览器中添加到表单中。也可能需要设计一个表单类，把此特性作为它的一个属性。

� 若要在运行的表单上添加对象

1.	在“表单设计器”中，创建或修改一个表单。

2.	在属性窗口中，把下列代码添加到表单的 DragDrop 事件中。

LPARAMETERS oSource, nXCoord, nYCoord

LOCAL oNewObject

oNewObject=oSource.Parent.FormAddObject(THIS)

3.	保存并运行表单。

4.	打开“类浏览器”并查看类列表，其中应包含有要添加到表单中的对象的类。

5.	选择所要的类，将类图标从类浏览器拖到表单中。

一个基于类浏览器中选定类的新对象显示在表单中。

要引用这个新对象，应使用 oNewObject 变量；要把运行的表单保存在一个表单 (.SCX) 或类库 (.VCX) 中，可以使用表单的 SaveAs 或 SaveAsClass 方法。

� 若要查看运行表单中某个控制所在的类

1.	把焦点设置到该控制上。

2.	从“工具”菜单中，选择类浏览器，类浏览器计算 _SCREEN.ActiveForm.ActiveControl ，并显示表单中选定控制所在的类。


请参阅

从类库中添加对象到表单

在容器类中添加对象

浏览类

类浏览器按钮

类浏览器窗口

定制类浏览器

SaveAs 方法

SaveAsClass 方法

查看类等级


修改类图标和说明

请参阅

使用类浏览器，可以修改一个类的容器图标、类说明和成员说明。也可在类浏览器中通过“类设计器”来修改一个类。

当在类浏览器中选择类时，类图标就出现在类列表的上方。可给类指定一个不同的位图或图标。默认时类的容器图标和工具栏图标与父类的相同。

� 若要更改类图标

1.	在类浏览器中，选择要更改图标的类。

2.	使用辅鼠标键选择位于类列表上方的类图标。

3.	在“打开”对话框中，选择新的位图或图标，然后选择“确定”。

在类浏览器中新图标会取代旧图标。如果容器和工具栏的旧类图标相同，则都更改为新图标；若不同，则只更改容器图标。

可能会看到一个提示，询问是否想把类库图标重新设置为默认值，该图标是 visual FoxPro 用于其基类的图标。如果要更改图标来匹配其基类，可选择“是”。

若要更改类和成员说明而又不想在类设计器中打开每个类，可在类浏览器中使用说明框。

� 若要更改一个类或属性的说明

1.	在类浏览器中，选择要更改的类。

2.	在窗口左下角的编辑框中，为类说明键入新文本。

3.	在适当的选项卡中，选择要更改的属性。

4.	在窗口右下角的编辑框中，为属性说明键入新文本。

附注

可更改方法和属性的说明，但对象成员和实例的说明为只读。

如果要更改一个类的图标和说明以外的其它内容，可以通过在类浏览器中选择类或文件名来打开“类设计器”。

� 若要在“类设计器”中修改一个类

 •	   在“类列表”中，双击类名打开类设计器。

  或者

 •	   在“类列表”中，双击文件名，然后在“类设计器”的“打开”对话框中选择一个类。


请参阅

浏览类

类浏览器按钮

类浏览器窗口

类设计器

复制类库中的类

定制类浏览器

筛选类浏览器的类列表

使用类浏览器来管理类

MODIFY CLASS 命令

查看类定义代码

查看类等级


定制类浏览器

请参阅

可更改类浏览器的属性、事件和方法。

� 若要通过程序来操作类浏览器

1.	打开类浏览器将自动创建公共变量 _oBrowser，可使用此变量来引用或操作类浏览器表单，如同对任何表单对象一样。

2.	对要更改的类浏览器的属性进行设置。

例如，在打开类浏览器之前，可通过下列命令把类浏览器的标题属性设置为 Hello：

_OBROWSER.Caption = "Hello"

_OBROWSER.Left = 10

3.	打开类浏览器，创建一个实例。

例如，为了打开类浏览器，可输入下列代码：

DO (_BROWSER)


请参阅

_BROWSER 系统内存变量

浏览类

类浏览器按钮

类浏览器方法

类浏览器对象成员

类浏览器属性

类浏览器窗口

类浏览器属性的初始值


发布 OLE 应用程序

请参阅

Visual FoxPro 专业版提供了 OLE 控制和将其包含在您的应用程序中的授权许可。对于专业版，可以发布包含这些 OLE 控制的应用程序给所有的用户，包括专业版用户、标准版用户和没有 Visual FoxPro 的用户。

所有用户可以运行包含这些 OLE 控制的表单，然而，只有某些用户可以修改包含这些控制的应用程序组件。要发布包含这些控制的应用程序，请遵循如下准则：

 •	   只有专业版用户可以修改包含这些 OLE 控制的表单、类或子类。

 •	   只有专业版用户可以在运行时把这些 OLE 控制加到表单中。例如，只有专业版用户可以运行下列代码，把 OutLine 控制加到一个表单中：

PUBLIC frmOleNewForm

frmOleNewForm = CreateObject("form")

frmOleNewForm.Show

frmOleNewForm.ScaleMode = 3

frmOleNewForm.Addobject("NewOutline","OLEControl","MSOutl.Outline")

附注

当表单关闭时，运行时添加的控制并不保存。

 •	   所有用户可以把派生的 OLE 控制在运行时添加到表单中。例如，如果您拥有专业版，从 Outline 类定义 RedOutline 子类，并在 OLELIB.VCX 中发布此子类，任何用户可以运行如下代码，把 RedOutline 控制加到一个表单中：

PUBLIC frmOleNewForm

frmOleNewForm = CreateObject("form")

frmOleNewForm.Show

frmOleNewForm.ScaleMode = 3

SET CLASSLIB TO CURR() + OLELIB.VCX

frmOleNewForm.Addobject("NewOutline","RedOutline")

重要内容

可使用安装向导准备要发布的 OLE 应用程序。在步骤六中，确保在 OLE 栏中选定了要分发 OLE 控制的复选标记。此标记保证了用户在使用此应用程序时能调用这些控制。


请参阅

在表单中添加 OLE 对象

可发布文件

安装向导

OLE 控制概述

OLE 控制示例


可发布文件

请参阅

您可以发布不受限制.的任何 Visual FoxPro 文件。根据与本产品一同发出的“Microsoft 授权协议”，文件必须与相关的应用程序一同发布。下面是发布文件所应遵循的准则。

安装向导

在 Visual FoxPro DISTRIB.SRC 和 SETUP 目录下，用于支持相应应用程序的所有文件可以发布。当使用安装向导制作发布磁盘时，将自动把所需的文件从这些目录以压缩格式复制到发布磁盘中。在安装时，这些文件被自动解压，并以原文件名装入用户机器中的适当目录下。没有必要再复制这些文件到发布目录。

示例

在 Visual FoxPro SAMPLES 和 API\SAMPLE 目录下的文件是提供给用户学习的。尽管您不能不经修改就分发 Visual FoxPro 的这些示例应用程序，但您可以在创建自己的应用程序时参考示例中的部分代码。

如果您使用了 Visual FoxPro SAMPLES 或 API\SAMPLE（包括所有的 .BMP，.ICO 和 .CUR 文件）目录下的任何文件，那么这些文件必须包括在项目中，并加入应用程序的连编过程当中。它们不能用原名出现于发布盘中，并且不可以独立于应用程序发布。

类库

在应用程序中，可以不加修改地使用任何 .VCX 文件。这些库需要包括在您的项目中并在连编应用程序时用到。

ODBC 文件

请参考随同本产品一起发出的“Microsoft 授权协议”中有关再发布 ODBC 文件的限制条款。


请参阅

受限制文件

示例文件

安装向导


受限制文件

请参阅

Visual FoxPro 包含许多只供设计、开发和测试使用的授权文件。有关这些受限制文件的列表，请参阅 Visual FoxPro 目录下的 LICENSE.TXT 文件。

如果应用程序包含任何这种文件，请予以删除。随同本产品一起发出的 Microsoft 授权协议规定，不允许将这些文件随您的应用程序或磁盘一起分发。

安装向导将查找这些文件，并将其从发布的磁盘上删除。要发布的文件中不应包含这些文件。“安装向导”会删除所有与这些文件中任何一个文件同名的文件。

有关应用程序的可发布文件的内容，请参阅可发布文件。


请参阅

可发布文件

安装向导


类浏览器窗口

请参阅

在 Visual FoxPro 的“专业版”中，可用“类浏览器”显示类库或表单中的表，以及查看、使用和管理类及其用户定义成员。

若使用“类浏览器”，请选择“工具”菜单中的“类浏览器”，并指定一个文件，或在命令窗口中键入 DO (_BROWSER) 命令。

“类浏览器”由以下内容组成：

类浏览器按钮

执行各种“类浏览器”命令。

图钉按钮

控制“类浏览器”窗口的状态。当按下此按钮时，该窗口保持在最上面，即使这时其它窗口为活动窗口。当未按下此按钮时，该窗口不保持在最上面。

类型框

允许选定或输入一个类的类型或字符串来筛选类列表。下拉列表显示基类，并保留类的类型的历史，同时为“类浏览器”的当前实例筛选所选定的或输入的内容。

等级选项

按照等级显示类，以便展开或折叠类树。

字母顺序选项

按照字母顺序显示类。

受保护复选框按钮

显示在成员选项卡中的受保护成员，受保护成员用星号 (*) 表示。

空复选框按钮

显示成员选项卡的空方法，空方法用波浪线 (～) 表示。

类图标

显示代表选定类的图标，该图标可以拖动到某个表单，并向表单中添加类对象。一个用户定义的位图可以作为类图标。

类列表

按大纲形式列出包含在类库 (.VCX) 或表单 (.SCX 中的类及子类，文件夹图标出现在每个类和子类旁。类旁边的标识 (<<) 表示其父类位于当前“类列表”中未显示的文件之中。要查看父类，双击文件夹；要修改类设计器中的某个类，请双击类名。

成员选项卡

以成员类型显示选定类中的用户自定义成员，从基类或父类中继承下来的成员不在选项卡中出现。第一列用小写字母表示成员类型。例如，“o”表示对象成员。可以选择选项卡来查找某个特定的成员类型。

所有成员

显示选定类的用户定义对象成员、属性、方法及实例。

对象成员

显示选定的容器类的对象成员，受保护成员用星号 (*) 表示，且只有在按下“受保护”按钮时才包括受保护成员。

方法成员

显示选定类的方法成员。

属性成员

显示属性成员，该成员定义选定类的属性。

实例

显示派生于选定类的当前对象。

类说明框

显示对选定类的说明，该框位于“类浏览器”窗口的左下部，可以在框中对说明进行编辑。

成员说明框

显示类中所选定成员的信息。该框位于“类浏览器”窗口的右下部。

对于对象成员，该框为类及基类的只读显示。对于属性或方法成员，该框显示可以进行编辑的说明。例如，说明框显示一个只读说明，说明包括变量范围（公共的或隐藏的）、成员名和属性值等等。


请参阅

使用类浏览器向表单中添加控制

浏览类

类浏览器按钮

类浏览器方法

类浏览器属性

类设计器

命令窗口

定制类浏览器

筛选类浏览器的类列表

修改类图标和说明

查看类等级


类浏览器按钮

请参阅

可以在类浏览器中使用以下按钮：

	打开	打开已存在的类库 (.VCX) 文件，创建新的类库文件，或者打开已存在的表单／表单集 (.SCX) 文件
	查看附加文件	向类列表中添加已存在的类库 (.VCX) 文件，或者表单及表单集 (.SCX) 文件，也可以创建新的类库文件。
	查看类代码	显示选定类的类定义代码
	查找	在类名、类描述、成员名和成员描述中搜索特定的文本。
	添加子类	创建选定类或某个已存在的类的子类。
	更名	更改选定类的名字。 注意：更改类名可能使依赖于该类的表单不再有效。
	重定义	更改选定类的父类。
	删除	删除选定的类，或者删除选定的文件。 注意：删除类或文件可能使依赖于该类的表单或子类不再有效。.
	清除类库	运行 PACK 命令来删除带有删除标记的 .VCX 文件中的记录。
	Add-ins	显示已注册的add-in程序、应用程序或类的菜单。


请参阅

将类添加到表单、表单集和工具栏中

使用类浏览器向表单中添加控制

浏览类

类浏览器方法

类浏览器属性

类浏览器窗口

使用类浏览器来管理类

查看类定义代码


图象编辑器

要查看和编辑位图、光标和图标，可使用图象编辑器 IMAGEDIT.EXE。

� 要使用图象编辑器

 •	   在 Visual FoxPro 程序组中，选择图象编辑器图标。

 — 或者 —

 •	   运行 IMAGEDIT.EXE。

图象编辑器只在 Visual FoxPro 专业版中可用。如果安装时选择了“全部安装”或从“定制安装”的“专业工具”部分选择了“实用工具”的话，就可以使用图象编辑器。有关查看和编辑图象的详细内容，请参阅“图象编辑器”帮助文件 IMAGEDIT.HLP。


OLE 控制示例

请参阅

OLE 控制，诸如 Windows 的 SYSTEM 目录中的 Outline 和 MAPI 控制，都是预包装对象。您不能用 Visual FoxPro 创建 OLE 控制，但是可以从独立软件开发商手中获得，或者使用随同 Microsoft Visual C++ 2.0 一起提供的 Microsoft OLE 自定义控制开发工具创建新的 OLE 控制。OLE 控制使用起来很灵活，既可以从它们派生出新的控制，也可以通过相关的事件、方法和属性对它们进行控制。

Visual FoxPro 中提供了如下 OLE 控制示例：

Outline 控制示例

OUTLINE1.SCX 表单在 Visual FoxPro 的 SAMPLES\OLE 目录中，用来演示如何使用 Outline 用户自定义控制，其中含有示例代码，用户可用它选择数据库并以大纲方式显示数据库中的表和视图。通过展开大纲中的各级项目，可以查看每个表中的字段和索引。

MAPI 控制示例表单

SENDMAIL.SCX 表单在 Visual FoxPro 的 SAMPLES\OLE 目录中，用来演示如何使用“MAPI 工作期控制”和“MAPI 消息控制”来开始一个邮件工作期，收集当前记录中的数据以及创建并发送包含此数据的邮件消息。

MAPI 控制示例类

可视类库 MAPIBTN.VCX 在 Visual FoxPro 的 SAMPLES\OLE 目录中，它包含一个示例容器类，名为 mailbtn 。该类包含一个命令按钮、一个 MAPI 消息控制和一个 MAPI 工作期控制。该类具有“MAPI 控制示例表单”中演示的功能，并且可把它加到任何表单中。


请参阅

OLE 控制概述

示例文件


BUILDAPP.PRG

请参阅	示例

BUILDAPP.PRG 在 Visual FoxPro 的 TOOLS\BUILDAPP 目录中，它可用来从 .APP 和 .EXE 文件中提取 .SCX 和 .VCX 文件的方法和事件代码，以便发布。

在 Visual FoxPro 中，源代码通常保存在所有 .SCX 和 .VCX 表中的 Methods 字段中。当连编一个应用程序时，这些字段将包含在连编结果中，即它们的代码包含在 .APP 文件中。BUILDAPP 在应用程序最后连编前从方法字段中取得代码并在连编后将文件恢复为初始状态。不带源代码连编文件，可以使 .APP 文件变得更小和更安全。

语法

DO BUILDAPP [WITH ProjectName [, AppFileName [, DebugMode [, BuildEXE]]]]

参数

ProjectName

指定项目名称。如果不包括此项，将显示“定位文件”对话框。

AppFileName

如果指定 AppFileName，创建时将使用该应用程序名和 .APP 扩展名。如果不指定 AppFileName，应用程序创建时使用 ProjectName 和扩展名 .APP。如果指定的 AppFileName 具有 .EXE 扩展名，则连编结果为 .EXE（仅用于 Visual FoxPro 专业版）。

DebugMode

设置调试模式为“打开”。默认情况下调试模式为“关闭”。要设置调试模式为“打开”，请指定 DebugMode 为“真”。

BuildEXE

连编结构紧凑的 .EXE 文件而不是 .APP 文件。默认情况下 BuildEXE 是关闭的。要连编 .EXE 文件，请设置 BuildEXE 为“真”。 BUILDEXE 仅用于 Visual FoxPro 专业版中。

如果运行 BUILDAPP 时没有指定参数，则显示表单提示您输入所需的信息。

说明

BUILDAPP 执行如下操作：

1.	定位文件。

2.	打开项目。

3.	设置调试模式。

4.	由原始的项目文件连编应用程序。

这将确保所有 .VCX 和 .SCX 表的 Methods 字段中的源代码被编译，并将 P-code 保存在每个表对应的 ObjCode 字段中。在连编应用程序过程中，如果发现错误，错误信息就会显示。这时，可根据需要选择“忽略”、“挂起”或“取消”。要完整地执行 BUILDAPP，连编必须没有错误。

5.	创建数组，并用项目中每一 .VCX 和 .SCX 文件对应的文件名填充该数组。

6.	清理 .VCX 文件移去任何孤立的记录。

7.	把所有 .VCX 和 .SCX 表中的 Methods 字段复制到数组内的临时表中。

8.	用 ""（空字符串）替代所有的 Methods 字段，把表复制到临时地点，移去原表中的记录，把临时表(带有空的 Methods 字段)追加到原表中，最后删除临时文件。

9.	重新连编应用程序。

10.	恢复原表中所有的 Methods 字段，删除临时文件，并且将项目恢复到原始状态。运行 BUILDAPP 时不会给项目留下永久的变化。


* 从命令窗口中可以执行这个命令。

*

DO BUILDAPP WITH "MyFile"

*

* 由 MYFILE.PJX 连编名为 MYFILE.APP 应用程序。

* 本应用程序连编时调试模式为“关闭”。

* 本命令可以在程序内执行。

*

IF BuildApp("MyFile")

WAIT WINDOW "Build was successful" NOWAIT

ENDIF

*

* 由 MYFILE.PJX 连编为 MYFILE.APP 应用程序。

* 本应用程序连编时调试模式为 OFF。


请参阅

BUILD APP 命令

示例文件


类浏览器属性

请参阅

下列属性与“类浏览器”相关。有关这些属性值的详细内容，请参阅类浏览器属性的初始值。有关属性命名约定的详细内容，请参阅变量命名约定。

附注

标记为“仅供引用”或“仅供内部使用”的属性是内部维护，并且仅由“类浏览器”使用。应避免更改仅供引用属性的值，否则将导致类浏览器错误。

lActive

仅供引用。返回类浏览器的活动状态，如果类浏览器具有焦点，其值为“真”(.T.)。

cAlias

返回存在于类浏览器数据工作期内的工作区别名，该工作期与类列表中选定的类相关。默认时类浏览器的私有数据工作期至少打开两个表别名：BROWSER 和 METADATA。BROWSER 别名用于 BROWSER.DBF，供全部实例共享；META DATA 别名用于在类浏览器中打开的类库 (.VCX) 或表单 (.SCX)。如果有多个文件打开，则相应为每个打开文件增加一个 METADTA 别名。

cAddInMethod

仅供引用。返回方法名，该方法调用正在执行的外部添加项。外部添加项执行完成时清除该属性。当执行添加项时，本属性包含调用添加项的方法名。

lAddInMode

返回类浏览器添加项的状态，如果为“真”(.T.)，则调用添加项；如果为“假”(.F.)，则添加项已结束。

lAddInTrace

返回监督添加项事件的跟踪方式的显示状态。如果为“真”(.T.)，则描述添加项事件的信息送到 Visual FoxPro 主窗口中。

nAtPos

仅供内部使用。默认值为 0。

lAutoExpand

决定在刷新时类列表是否自动扩展或折叠。如果为“真”(.T.)，则类列表自动扩展或折叠大纲中的类树。如果为“假”(.F.)，则类列表大纲不扩展或折叠。默认值为“真”(.T.)。

cBaseClass

仅供引用。返回类列表中选定类的基类名。

cBrowserTable

仅供引用。返回 BROWSER.DBF 注册表的全整路径。

lBusyState

仅供引用。返回类浏览器的刷新操作状态。如果为“真”(.T.)，则刷新操作在进行。

cClass

仅供引用。返回类列表中选定的类名。

nClassCount

仅供引用。返回类列表中项的总数，默认值为 0。

cClassLibrary

仅供引用。返回类列表中选定类所在的类库名。

aClassList

仅供引用。是与当前类列表中类库 (.VCX) 或表单 (.SCX) 文件相关的两维数组值。在列表中每个文件都有自己的别名，例如，如果类列表显示两个文件，则别名为 METADATA1 和 METADATA2。

此数组包含下列格式：

aClassList 位置	设置
[nIndex,1]	类名
[nIndex,2]	相关的元数据记录号
[nIndex,3]	大纲标识层
[nIndex,4]	包含父类的文件名
[nIndex,5]	父类名
[nIndex,6]	包含父类的文件路径
nClassListIndex

仅供引用。返回在类列表中选定类的位置。第一项的值为 0，默认值为 -1。

cClassType

仅供引用。返回“类类型”框中指定的用于类列表上的当前筛选条件。

tcDefaultClass

仅供引用。返回传送至 BROWSER.APP 中的第二个参数的值或引用。例如，如果通过输入下列代码来打开类浏览器，则本属性返回“baseform”：

DO (_BROWSER) WITH "wizstyle.vcx","baseform"

nDisplayMode

仅供引用。返回由显示方式选项组指定的显示方式：1 - 层次或 2 - 字母。默认值为 1。

cDragIcon

返回在拖动操作期间当前拖动图标的临时表文件。

lError

返回错误检查的状态。如果为“真”(.T.)，则出现错误并显示类浏览器错误对话框。当打开类浏览器时，本属性设置为“假”(.F.)。如果要检查错误，则必须确保此属性为“假”。

nFileCount

仅供引用。返回当前在类浏览器中打开的类库 (.VCX) 或表单 (.SCX) 文件的数目。默认值为 0。

lFileMode

仅供引用。返回类列表中选定项的类型。如果为“真”(.T.)，则选定了文件；如果为“假”(.F.)，则选定了类。

cFileName

仅供引用。返回与类列表中选定类相关的文件完整路径。

tcFileName

仅供引用。返回传送到 BROWSER.APP 的第一个参数的值或引用。例如，如果通过输入下列代码来打开类浏览器，则本属性返回“VIZSTYLE.VCX”：

DO (_BROWSER) WITH "wizstyle.vcx","baseform"

aFiles

仅供引用。是当前类浏览器中打开的类库 (.VCX) 或表单 (.SCX) 文件的数组。

cFilter

仅供引用。返回打开的元数据表中对应于类列表中选定类的 SET FILTER 设置值。

cGetFileExt

决定类浏览器的 GETFILE( ) 方法的默认扩展名，默认值为“VCX;SCX”。

lInitialized

仅供引用。返回类浏览器的初始化状态。如果为“真”(.T.)，类浏览器被初始化；如果为“假”(.F.)，类浏览器没有被初始化。

aInstances

仅供引用。是与类列表中选定类相关的实例数组。功能与 AINSTANCE( ) 完全相同。

nInstances

仅供引用。返回 AINSTANCE( ) 中与类列表中选定类相关的实例总数。默认值为 0。

nLastHeight

返回在 Resize 事件发生之前表单的初始高度。默认值为 (THIS.Height)。

nLastRecNo

仅供内部使用。初始值为 1。

cLastSetComp

返回加载类浏览器时的 SET COMPATIBLE 设置值。

cLastSetESC

返回加载类浏览器时的 SET ESCAPE 设置质。

cLastValue

仅供内部使用。

nLastWidth

返回在 Resize 事件发生之前表单的初始宽度。默认值为 (THIS.Width)。

lModalDialog

决定在激活模式对话框之后类浏览器重新得到焦点时，类列表是否被刷新。如果为“真”(.T.)，该列表不被刷新；如果为“假”(.F.)，则刷新。默认值为“真”(.T.)。

lNoDefault

返回从添加项中返回时如何处理默认行为的状态。如果为“真”(.T.)，则忽略默认行为。

cParentClass

仅供引用。返回类列表中选定类的父类名。

nPixelOffset

仅供内部使用。决定层叠类浏览器多个实例时所用的位移量象素数。默认值为 22。

cPlatform

仅供引用。返回当前平台名。

cProgramName

仅供引用。返回正在执行的 BROWSER.APP 的完整路径。

lReadOnly

仅供引用。返回与类列表中选定类相关的文件的只读状态。

nRecCount

仅供引用。返回在打开的类库 (.VCX) 和表单 (.SCX) 文件中记录的总数。默认值为 0。

lRelease

仅供内部使用。指定类浏览器自动释放。

lResizeMode

仅供内部使用。返回类浏览器的调整大小方式的状态。

lSCXMode

仅供引用。返回类列表中选定类的文件类型状态。如果为“真”(.T.)，则文件为表单 (.SCX)；如果为“假”(.F.)，则文件为类库 (.VCX)。

oSource

仅供引用。返回从类浏览器拖到表单上的对象的引用。在拖放方法完成后，oSource 设置为 .NULL 。

cStartName

仅供引用。返回在加载类浏览器、但在名称加 1 之前，类浏览器的 Name 属性值。例如，默认值为 ClassBrowser，以后每打开一个实例，其名称加 1：CalssBrowser1,ClassBrowser2。

nStrLen

仅供内部使用。默认值为 0。

cTimeStamp

仅供引用。返回类列表中选定类的时间戳字段值。


请参阅

浏览类

类浏览器按钮

类浏览器方法

类浏览器对象成员

类浏览器窗口

定制类浏览器

类浏览器属性的初始值


类浏览器属性的初始值

请参阅

当类浏览器的一个实例打开时，其属性设置为下列显示的默认值。

类浏览器属性	初始设置
cAddInMethod	""
nAtPos	0
lAutoExpand	.T.
BackColor	RGB(192,192,192)
Caption	"Class Browser"
cBaseClass	""
cBrowserTable	""
cClass	""
nClassCount	0
nClassListIndex	1
cClassLibrary	""
cClassType	""
DataSession	2
cDefaultClass	""
nDisplayMode	1
DoCreate	.T.
cDragIcon	""
nFileCount	0
cFileName	""
cFilter	""
FontName	"MS Sans Serif"
FontSize	8
cGetFileExt	vcx;scx
Height	360
HelpContextID	1895825501
Icon	"browser.ico"
nInstances	0
nLastHeight	(THIS.Height)
nLastRecNo	1
cLastSetESC	""
cLastValue	""
nLastWidth	(THIS.Width)
Left	0
MinHeight	(302)
MinWidth	(345)
Name	"classbrowser"
cParentClass	""
nPixelOffset	22
cPlatform	""
cProgramName	""
nRecCount	0
ScaleMode	3
ShowTips	.T.
oSource	.NULL.
cStartName	""
nStrLen	0
cTimeStamp	""
Top	0
Width	462


请参阅

浏览类

类浏览器按钮

类浏览器方法

类浏览器对象成员

类浏览器属性

类浏览器窗口

定制类浏览器


类浏览器对象成员

请参阅

可使用本表内的名称来引用类浏览器的对象成员，表的排序反映了成员对象在类浏览器窗口的出现顺序，对类浏览器窗口本身的引用是 _oBrowser。

类浏览器对象	对象名
“打开”命令按钮	cmdOpen
“添加”命令按钮	cmdAdd
“查看类代码”命令按钮	cmdExport
“查找”命令按钮	cmdFind
“添加子类”命令按钮	cmdSubclass
“重命名”命令按钮	cmdRename
“重定义”命令按钮	cmdRedefine
“移去”命令按钮	cmdRemove
“清理类库”命令按钮	cmdCleanup
“显示方式”选项按钮	opgDisplayMode
“分层”选项按钮	optHierarchical
“字母”选项按钮	optAlphabetical
“保护”检查框	chkProtected
“空”检查框	chkEmpty
“类图标”图像	imgClassIcon
“类图标”命令按钮	cmdClassIcon
“类型”组合框的类型标签	lblClassType
“类型”组合框	cboClassType
类列表增亮文本	txtClassList3D
类列表大纲 OLE 容器	oleClassList
成员选项卡页面框	pgfMembers
全部页	fpgAll
全部列表框	lstAll
对象成员页面	fpgObjects
对象成员列表框	lstObjects
方法页面	fpgMethods
方法列表框	lstMethods
属性页面	fpgProperties
属性列表框	lstProperties
实例页面	fpgInstances
实例列表框	lstInstances
“类说明”编辑框	edtClassDesc
“成员说明”编辑框	edtMemberDesc


请参阅

浏览类

类浏览器按钮

类浏览器方法

类浏览器属性

类浏览器窗口

定制类浏览器

类浏览器属性的初始值


类浏览器方法

请参阅

下列是与类浏览器有关的方法。

AddClass( )

把一个类从一个类库 (.VCX) 复制到另一个类库中。在类浏览器实例之间进行拖放操作时使用此方法，并且依赖于 oSource 属性。如果指定的类不存在，则创建一个类。

AddFile( )

向类浏览器类列表中添加一个类库 (.VCX) 或表单 (.SCX) 文件，如果没传送参数，则使用类浏览器 GetFile( ) 方法来显示“添加文件”对话框。

语法:  AddFile([cFileName])

AddIn( )

向 BROWSER.DBF 注册表中安装或从中删除指定的添加项。

语法:  AddIn(cName[, cProgram] [, cMethod] [, cFileFilter] [, cPlatform][, cComment])

参数

cName

指定添加项的名称，不区分大小写；但是，当在菜单上显示时，它的值按输入时的样子出现。

cProgram

指定程序 (RPG)、表单 (.SCX)、应用程序 (.APP)、可执行文件 (.EXE) 或将运行的编译程序的名称。如果未提供扩展名，则假定为 .PRG；如果提供了指定类库 (.VCX) 和新类名，则在该库中创建新类。

附注 如果此参数为空，则对添加项做删除标记。

cMethod

指定作为事件钩的方法名。如果为空，则添加项出现在菜单上。

cFileFilter

指定能够使用添加项的类库和表单的列表。如果为空，则添加项可供全部类库 (.VCX) 和表单 (.SCX) 使用。

cPlatform

指定可以使用添加项的平台。如果为空，则可在 Visual FoxPro 支持的所有平台上使用添加项。

cComment

指定存储在 BROWSER.DBF 的备注字段中的文本。

AddInMenu( )

对显示注册的添加项的菜单进行扩展。

AddInMethod( )

对指定的对象方法执行任意的注册添加项。

语法:  AddInMethod(cObjMethod)

示例: 若要更改类浏览器中“帮助”按钮的默认行为，可使用以下代码：

_OBROWSER.AddInMethod("cmdHelp.click")

AutoRefresh( )

通过检查类列表中选定类的更新的类库 (.VCX) 信息和对正在编辑的类库 (.VCX) 文件中记录的总数进行检查，决定是否刷新显示。当激活类浏览器表单时运行本方法。

CleanUpFile( )

从与类列表中选定类相关的类库 (.VCX) 文件中移去记录。

ClearBrowser( )

仅供内部使用。

NewClass( )

在类列表中创建选定类的一个子类。

DeactivateMenu( )

使添加项弹出式菜单变为不活动。

DoAddIn( )

执行具有 BROWSER 别名的表中当前或指定记录的指定添加项。

语法:  DoAddIn([cAddInName])

FileMatch( )

对指定文件和指定的文件列表进行比较，确定该文件是否与添加项有关。

语法:  FileMatch(cFileName, cFileList)

ExportClass( )

生成并显示类列表中选定类或选定文件的定义源代码。如果参数 lShow 为“真”(.T.)，则类浏览器窗口显示代码。

语法:  ExportClass([lShow])

FindClass( )

在类中查找类文本。

语法:  FindClass([cFind])

FormAddObject( )

向外部表单中添加一个类列表选定类的实例。

语法:  FormAddObject(oObject [, nXCoord] [, nYCoord] [, lActivateForm] [, lDesignMode])

参数

oObject

指定对目的容器的引用。

nXCoord

指定容器中对象的水平位置。如果没有传送此值，则使用当前的鼠标位置。

nYCoord

指定容器中对象的垂直位置。如果没有传送此值，则使用当前的鼠标位置。

lActivateForm

如果为“真”(.T.)，则在添加对象时激活目的表单；如果为“假”(.F.)，则类浏览器仍为活动的。

lDesignMode

如果为真(.T.)，则对象引用是表单设计器或类设计器中的当前对象。

FormatMethods( )

格式化在类定义代码的显示中生成的方法文本。

语法:  FormatMethods(cMethods)

FormatProperties( )

格式化在类定义源代码的显示中生成的属性文本。

语法:  FormatProperties(cProperties [, lAddObjectMode])

GetFile( )

打开类浏览器的 GetFile( ) 对话框， GetFile( ) 方法供类浏览器“打开”或“添加”按钮内部使用。不论何时类浏览器提示类库 (.VCX) 或表单 (.SCX) ，都在内部调用了 GetFile( ) 方法。

语法:  GetFile([cFileExt])

IndentText( )

使文本块缩进一个制表符。

语法:  IndentText(cCode)

ModifyClass( )

在类设计器中打开选定类。

MsgBox( )

显示类浏览器信息框，它与 Visual FoxPro 的 MESSAGEBOX( ) 功能相似。

语法:  MsgBox(cMessage [, nType] [, cTitle])

NewFile( )

创建一个新的类库 (.VCX) 文件。如果没有传送参数，则显示“打开”对话框。如果提供了参数，则生成一个新的类库 (.VCX) 并将其添加到类浏览器的类列表中。

语法:  NewFile([cFileName] [, lOpenFile])

OpenFile( )

打开一个存在的类库 (.VCX) 或表单 (.SCX) 文件。如果未提供文件名，则显示“打开”对话框。

语法:  OpenFile([cFileName])

ProperBaseClass( )

返回以首字母大写的基类名。例如，对 combobox 返回 ComboBox。

语法:  ProperBaseClass(cBaseClass)

RedefineClass( )

更改类列表中选定类的父类。

语法:  RedefineClass([cAsClass] [, cClassLoc])

RefreshButtons( )

按照文件类型刷新类浏览器命令按钮。

RefreshClassList( )

刷新类列表。

语法:  RefreshClassList([cDefaultClass] [, lIgnoreTable]

RefreshClassListSubclass( )

仅供内部使用。

RefreshFileAttrib( )

刷新与类列表中选定类相关的文件名的文件属性状态。

RefreshCaption( )

刷新一个表单的类浏览器标题。

RefreshMembers( )

刷新“成员”选项卡，以显示与类列表中选定类相关的信息。

RefreshPrefRecNo( )

刷新 BROWSER.DBF 中对应于正在编辑的类库 (.VCX) 或表单 (.SCX) 文件的优先记录指针。

RefreshRecNo( )

刷新类库 (.VCX) 或表单 (.SCX) 表中对应于选定类文件的当前记录指针。

RemoveClass( )

从与其相关的类库 (.VCX) 文件中删除类列表中的选定类。

语法:  RemoveClass([lConfirm])

RenameClass( )

更改类列表中选定表的类名。

语法:  RenameClass([cToClass])

SavePreferences( )

存储对 BROWSER.DBF 注册表的当前优先设置。

ScaleResize( )

按比例放缩类浏览器表单中的控制，以适应在使用 Resize( ) 事件调整表单大小之后的情况。

SeekClass( )

将类列表指针移至类列表中特定类或索引上，可使用类列表中可视位置对应的数值。

语法:  SeekClass([cClass][, cClassLibrary])

SeekParentClass( )

显示类列表中选定类的父类。

SetBusyState( )

根据所接收的参数把 lBusystatus 属性设置为“真”(.T.)或“假”(.F.)；也可把鼠标指针形状设置为箭头或沙漏。

语法:  SetBusyState(lBusyState)

SetFont( )

对类浏览器的表单、控制和对话框所使用的字体和字体大小进行设置。

语法:  SetFont([cFontName][, nFontSize])

ShowMenu( )

显示基于数组的菜单。如果菜单是一维数组，则该方法可显示菜单中全部项的列表。如果数组是关于项和行为的二维数组，则它显示菜单项，并在选择项时，执行相关的行为。

语法:  ShowMenu(aMenu[, cOnSelection])

TrimExt( )

截去文件名的扩展名。

语法:  TrimExt(cFileName [, lPlatformType])

TrimFile( )

截去文件名，并只返回文件名和路径。

语法:  TrimFile(cFileName [, lPlatformType])

TrimPath( )

截去路径名。

语法:  TrimPath(cFileName [, lTrimExt] [, lPlatformType])

VersionCheck( )

检查打开的类库 (.VCX) 或表单 (.SCX) 文件。

语法:  VersionCheck([lShowErrorMsg])

WildcardMatch( )

将“类型”框中指定的筛选条件与通配符字符串进行对比。

语法:  WildcardMatch(cMatchExpList, cExpressionSearched)


请参阅

浏览类

类浏览器按钮

类浏览器方法

类浏览器对象成员

类浏览器属性

类浏览器窗口

定制类浏览器

类浏览器属性的初始值


轮廓控制属性对话框
Outline 控制属性对话框

请参阅

为 Outline 控制指定属性，Outline 控制是一个允许分层次显示项的OLE 容器控制。

� 若要显示“Outline 控制属性”对话框

1.	在表单设计器中创建表单或打开一个已存在的表单。

2.	在表单控制工具栏中，选择“OLE 容器控制”按钮从而在表单上设置 OLE 容器控制。

此时出现插入对象对话框。

3.	在“插入对象”对话框中选择“插入控制”。

4.	在“控制类型”列表中选择“Outline 控制”。

5.	选择“确定”按钮。

此时在表单上出现Outline 控制。

6.	在Outline 控制上单击鼠标右键，显示快捷菜单。

7.	在快捷菜单上选择“属性”。

此时出现“Outline 控制属性”对话框。

Outline 控制属性选项卡

常规

指定 Outline 控制的样式属性及一般特征。

图片

指定 Outline 控制的图片属性。

字体

指定 Outline 控制的字体、字形、字体大小及其他属性。

颜色

为 Outline 控制指定背景色和前景色。


请参阅

OLE 容器控制

Outline 控制


常规选项卡,轮廓控制属性对话框
常规选项卡，Outline 控制属性对话框

请参阅

指定Outline 控制的样式属性及常规特征。

选项卡选项

边框样式

指定边框的样式。该选项与BorderStyle 属性相对应。

样式

为 Outline 控制中的各个项指定图形样式与文本样式。该选项与Style 属性相对应。

鼠标指针

指定在运行时移动经过 Outline 控制的各个部分时鼠标指针的形状。该选项与 MousePointer 属性相对应。

路径分隔符

指定项分隔符。该选项与 PathSeparator 属性相对应。

激活

指定该 Outline 控制能够响应由用户生成的事件。该选项与 Enabled 属性相对应。

应用

不必退出“常规”选项卡即使用对 Outline 控制所做的更改。


请参阅

BorderStyle 属性

Enabled 属性

FullPath 属性

MousePointer 属性

Outline 控制

PathSeparator 属性

Style 属性


图片选项卡,轮廓控制属性对话框
图片选项卡，Outline 控制属性对话框

请参阅

指定 Outline 控制的图片属性。

选项卡选项

属性名

指定供项及下一级项使用的图片。可用的属性有MouseIcon 属性、PictureMinus, PicturePlus 属性 和 PictureClosed, PictureOpen, 以及 PictureLeaf 属性。

预览

显示一个图形，其属性为“属性名”列表中当前选定的属性。

浏览

显示“浏览”对话框，可以其中选择图片文件附加给“属性名”列表中当前选定的属性。

应用

不必退出“图片”选项卡即使用对Outline 控制所做的更改。


请参阅

MouseIcon 属性

Outline 控制

PictureClosed, PictureOpen, 和 PictureLeaf 属性

PictureMinus, PicturePlus 属性


字体选项卡,轮廓控制属性对话框
字体选项卡，Outline 控制属性对话框

请参阅

指定 Outline 控制的字体、字形、字体大小及其他属性。

选项卡选项

属性名

指定属性名。该选项设置为“字体”，并且不能更改。

字体

指定字体名。该选项与 FontName 属性相对应。

字形

指定字形（粗体、斜体等等）。该选项与 FontBold, FontItalic 属性相对应。

大小

指定字体大小（以磅为单位）。该选项与 FontSize 属性相对应。

效果

指定是否加删除线、下划线，或两者都加。该选项与 FontStrikethru, FontUnderline 属性相对应。

实例

显示指定属性的字体。

应用

不必退出“字体”选项卡即使用对 Outline 控制所做的更改。


请参阅

FontBold, FontItalic

FontName

FontStrikethru, FontUnderline

Outline 控制


颜色选项卡,轮廓控制属性对话框
颜色选项卡，Outline 控制属性对话框

请参阅

为 Outline 控制指定背景色和前景色。

选项卡选项

属性名

指定“前景色”或“背景色”。该选项与 ForeColor及 BackColor属性相对应。

系统颜色

显示 Windows 屏幕元素的列表，可以把这些元素的颜色作为 Outline 控制的前景色或背景色。从列表中选择后再选择“应用”，可以立刻看到其效果。

应用

不必退出“颜色”选项卡即使用对 Outline 控制所做的更改。


请参阅

BackColor

ForeColor

Outline 控制


PicClip 控制属性对话框

请参阅

为 Picture Clip 控制指定属性，该控制是允许选择源位图的某个区域并在表单上显示此区域的OLE 容器控制。

� 若要显示“PicClip 控制属性”对话框

1.	在表单设计器中创建表单或类或者打开一个已有的表单。

2.	在表单控制工具栏上，选择“OLE 容器控制”按钮从而在表单上设置 OLE 容器控制。

此时出现插入对象对话框。

3.	在“插入对象”对话框中选择“插入控制”。

4.	在“控制类型”列表中选择“PicClip 控制”。

5.	选择“确定”按钮。

此时表单上出现 PicClip 控制。

6.	在 PicClip 控制上单击鼠标右键显示快捷菜单。

7.	在快捷菜单上选择“属性”。

此时出现“PicClip 控制属性”对话框。

PicClip 控制属性选项卡

行/列

指定 PicClip 控制中行和列的数目。

图片

为 PicClip 控制指定图片。


请参阅

OLE 容器控制

PicClip 控制


行/列选项卡,PicClip 控制属性对话框
行/列选项卡，PicClip 控制属性对话框

请参阅

指定 Picture Clip 控制中行和列的数目。

选项卡选项

行

指定行数。该选项与 Rows 属性.相对应。

列

指定列数。该选项与 Cols 属性相对应。

应用

不必退出“行/列”选项卡即使用对 PicClip 控制所做的更改。


请参阅

Cols 属性

PicClip 控制

Rows 属性


图片选项卡,PicClip 控制属性对话框
图片选项卡，PicClip 控制属性对话框

请参阅

为 Picture Clip 控制指定图片。

选项卡选项

属性名

把“图片”指定为属性名。该值为预设值，并且不能更改。

浏览

显示“图片”对话框，可以在其中选择图片文件附加给“属性名”列表中当前选定的属性。

应用

不必退出“图片”选项卡即使用对 PciClip 控制所做的更改。


请参阅

PicClip 控制

Picture 属性 (PicClip 控制)


类浏览器 (工具菜单)
类浏览器（工具菜单）

请参阅

打开类浏览器窗口从而可以查看类的层次，向表单中添加控制以及执行各种类的管理任务。选定“类浏览器”命令后，必须要打开一个类库 (.VCX) 文件或表单 (.SCX) 文件以显示“类浏览器”窗口。


请参阅

使用类浏览器向表单中添加控制

浏览类

类浏览器窗口

命令窗口

定制类浏览器

DO

使用类浏览器来管理类

修改类图标和说明

查看类定义代码

查看类等级


_ActivateHandler( ) API 库例程

请参阅	示例

在事件处理函数列表的末尾添加一个事件处理函数。

语法

unsigned int _ActivateHandler(FPFI handler)
FPFI handler	/* 要添加的事件处理函数*/

说明

_ActiveteHandler( ) 函数返回这个处理函数的一个整数标识符。在 _DeActivateHandler( ) 函数中可以使用此标识符从事件处理队列中移去这个处理函数。

调用这个函数时需要两个参数，一个是事件所属窗口的句柄 WHANDLE ，另一个是指向事件记录的 FAR（32 位）指针。如果处理函数没有查找事件，也没有为后续事件处理程序修改事件，则这个函数将返回“假”(.F.)，表明应该继续把事件传递给其他的处理函数或 Visual FoxPro 的接口例程。如果处理函数确定了不必再继续传递事件，则返回“真”（一个非零的整数）以表明事件已处理完毕。


下面的示例在加载库时激活一个事件处理函数。此事件处理函数将为每个事件打印一条信息，然后让 Visual FoxPro 按正常方式处理事件。卸载库时，再废止这个事件处理程序。

Visual FoxPro  代码

SET LIBRARY TO ACTIHAND

WAIT WINDOW TO m.test TIMEOUT 5

SET LIBRARY TO

C 代码

#include <pro_ext.h>

static int HandlerID;

//	这是注册为事件处理程序的例程。

FAR EventHandler(WHandle theWindow, EventRec FAR *ev)

{

_PutStr("\nEventHandler() called.");

return NO;	// 事件仍然需要由 Visual FoxPro 处理

}

FAR Activate()

{

HandlerID = _ActivateHandler(EventHandler);

}

//	卸载库时,必须在 CALLONUNLOAD 函数中废止事件处理函数

FAR DeActivate()

{

_DeActivateHandler(HandlerID);

}

FoxInfo myFoxInfo[] = {

{"ACTIVATE",  Activate,	CALLONLOAD, ""},

{"DEACTIVATE", DeActivate, CALLONUNLOAD, ""}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DeActivateHandler( ), _FindWindow( ), _GlobalToLocal( ), _MousePos( )


_ActivateIdle( ) API 库例程

请参阅	示例

在 Visual FoxPro 等待用户输入或等待一个可能超时的事件时，在被调用的空闲事件处理程序列表的末尾添加一个空闲事件处理函数。

语法

unsigned int _ActivateIdle(FPFI handler)
FPFI handler	/* 事件处理函数。*/

说明

_ActivateIdle( ) 给这个事件处理函数返回一个整数标识符。在 _DeActivateIdle( ) 函数中可以使用这个标识符从空闲循环中删除这个空闲事件处理函数。


下面的示例在加载库时激活一个空闲事件处理程序。该空闲事件处理程序只打印一条信息。卸载库时，废止此空闲事件处理程序。

Visual FoxPro  代码

SET LIBRARY TO ACTIIDLE

WAIT WINDOW TO m.test TIMEOUT 5

SET LIBRARY TO

C  代码

#include <pro_ext.h>

static unsigned IdlerID;

//	这是注册为空闲时间事件处理程序的例程。

void FAR IdleHandler(WHandle wh, EventRec *ev)

{

_PutStr("\nIdleHandler() called.");

}

void FAR Activate(ParamBlk FAR *parm)

{

IdlerID = _ActivateIdle((FPFI) IdleHandler);

}

//	卸载库时，必须在 CALLONUNLOAD 函数中废止空闲事件处理程序。

void FAR DeActivate(ParamBlk FAR *parm)

{

_DeActivateIdle(IdlerID);

}

FoxInfo myFoxInfo[] = {

{"ACTIVATE",    (FPFI) Activate,   CALLONLOAD,     ""},

{"DEACTIVATE",  (FPFI) DeActivate, CALLONUNLOAD,   ""}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DeActivateIdle( ), _FindWindow( ), _GlobalToLocal( ), _MousePos( )


_ActivateMenu( ) API 库例程

请参阅	示例

在屏幕上显示指定的菜单并立刻将控制返回给调用例程。

语法

void _ActivateMenu(MENUID menuid)
MENUID menuid	/* 菜单标识符。

说明

如果检测到已在一个菜单上按下了一个鼠标键或一次击键，则可以调用 _MenuInteract( ) 函数判定用户选择了哪一个菜单项。


下面的示例生成一个有三个菜单项的菜单。_ActivateMenu( ) 函数显示这个菜单。这个菜单是无模式菜单，也就是说不象使用 _MenuInteract( ) 函数那样强制只能在这个窗口中进行交互对话。相反，用户作选择时将调用 _OnSelection( ) 函数，将在屏幕上显示所选的菜单项，同时删除菜单。

Visual FoxPro  代码

SET LIBRARY TO ACTIMENU

WAIT WINDOW "Make selection from menu." NOWAIT

SUSPEND

C  代码

#include <pro_ext.h>

static MENUID menuId;

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

}

FAR deactivateMenu(ParamBlk FAR *parm)

{

_DeActivateMenu(menuId);

_DisposeMenu(menuId);

}

FAR activateMenu(ParamBlk FAR *parm)

{

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_OnSelection(menuId, -1, onSelection);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) activateMenu, CALLONLOAD, ""},

{"ONUNLOAD", (FPFI) deactivateMenu, CALLONUNLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DeActivateMenu( ), _MenuId( ), _NewItem( ), _NewMenu( ), _OnSelection( )


_ALen( ) API 库例程

请参阅	示例

返回数组大小的信息，这个数组在名表中的索引是 nti。

语法

long _ALen(NTI nti, int mode)
NTI nti;	/* 数组的名表索引。 */
int mode;	/* 决定返回值的方式 */

说明

如果 mode 为 AL_ELEMENTS，则 _ALen( ) 函数返回数组中数组元素的总数。如果 mode 为 AL_SUBSCRIPT1，则 _ALen( ) 函数返回声明数组的第一个下标的值。如果 mode 为 AL_SUBSCRIPT2，则 _ALen( ) 函数返回用来声明数组的第二个下标的值。

如果 nti 不能指明任何已经存在的数组名称，则无论 mode 的值如何，_ALen( ) 函数都返回 -1。


下面的示例为每一种可能提供了一个 Visual FoxPro API 例程。

Visual FoxPro  代码

SET LIBRARY TO ALEN

DIMENSION a[10, 11]

? ALENELEM(@a)  && 返回 110

? ALENSUB1(@a)  && 返回 10

? ALENSUB2(@a)  && 返回 11

DIMENSION b[3]

? ALENELEM(@b)  && 返回 3

? ALENSUB1(@b)  && 返回 3

? ALENSUB2(@b)  && 返回 0; 没有第二个下标

c = .F.

? ALENELEM(@c)  && 返回-1 因为变量“C”不是数组名

? ALENSUB1(@c)  &&  返回-1 因为变量“C”不是数组名

? ALENSUB2(@c)  &&  返回-1 因为变量“C”不是数组名

C  代码

#include <pro_ext.h>

void FAR alenElem(ParamBlk FAR *parm)

{

_RetInt(_ALen(parm->p[0].loc.l_NTI, AL_ELEMENTS), 10);

}

void FAR alenSub1(ParamBlk FAR *parm)

{

_RetInt(_ALen(parm->p[0].loc.l_NTI, AL_SUBSCRIPT1), 10);

}

void FAR alenSub2(ParamBlk FAR *parm)

{

_RetInt(_ALen(parm->p[0].loc.l_NTI, AL_SUBSCRIPT2), 10);

}

FoxInfo myFoxInfo[] = {

{"ALENELEM", (FPFI) alenElem, 1, "R"},

{"ALENSUB1", (FPFI) alenSub1, 1, "R"},

{"ALENSUB2", (FPFI) alenSub2, 1, "R"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindVar( ), _Load( ), _NameTableIndex( ), _NewVar( ), _Release( ), _Store( )


_Alloca( ) API 库例程

示例

为调用例程分配一块堆栈空间。

语法

void FAR * _Alloca(unsigned int size)
unsigned int size;	/* 以字节为单位分配的堆栈空间大小。 */

说明

如果块分配成功，则 _Alloca( ) 函数返回指向该块的指针。不能分配块时，返回 0。当例程结束时，_Alloca( ) 函数自动释放内存，因此不再需要相应的释放例程。

注意

某些 C 编译器，如 MPW C，并不支持在堆栈中分配内存；使用这样的编译器，调用 _Alloca( ) 函数可能导致难以预料的后果。为解决此类问题，可以在代码中使用局部变量或调用 _AllocHand( ) 函数和 _FreeHand( ) 函数来保护内存。


下面的示例模仿 Visual FoxPro 中 REPLICATE( ) 函数的操作。临时用来复制字符的内存即由 _Alloca( ) 函数分配。

Visual FoxPro  代码

SET LIBRARY TO ALLOCA

x = xREPLICATE("x", 120)

? x

? LEN(x)

C  代码

#include <pro_ext.h>

void FAR allocaEx(ParamBlk FAR *parm)

{

char FAR *rep;

char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle);

rep = _Alloca((int) parm->p[1].val.ev_long + 1);

_MemFill(rep, c, (int) parm->p[1].val.ev_long);

    rep[parm->p[1].val.ev_long] = '\0';  // null terminate

_RetChar(rep);

}

FoxInfo myFoxInfo[] =

{

{"XREPLICATE", (FPFI) allocaEx, 2, "C,I"},

};

FoxTable _FoxTable =

{

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


_AllocHand( ) API 库例程

请参阅	示例

返回 hsize 大小的新建 MHANDLE。

语法

MHANDLE _AllocHand(unsigned int hsize)
unsigned int hsize;	/* 以字节为单位的新建内存句柄的大小。 */

说明

没有足够的内存满足要求时，_AllocHand( ) 函数返回 0。由 _AllocHand( ) 函数分配的内存不进行初始化，并且使用后必须释放。


在下面的示例中，使用 _AllocHand( ) 函数提供的内存复制一个字符。下面的 API 函数 REPLTOMH( ) 将内存句柄返回给 Visual FoxPro 。在 Visual FoxPro 中再将此内存句柄传递给需要内存句柄作为参数的 API 函数（作为一个整数传递，“I”）。

Visual FoxPro  代码

SET LIBRARY TO ALLOCHAN

mh = REPLTOMH("x", 120)

? MHTOFOX(mh)

? LEN(MHTOFOX(mh))

? MHTOFOX(mh)

= FREEMH(mh)

C  代码

#include <pro_ext.h>

//	将字符参数复制到 _AllocHand( ) 函数分配的内存中，然后将这个内存句柄返回给 Visual FoxPro 。

void FAR replToMH(ParamBlk FAR *parm)

{

char FAR *rep;

char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle);

MHANDLE mh;

if ((mh = _AllocHand((int) parm->p[1].val.ev_long + 1)) == 0)

{

_Error(182);  // 内存不够

}

_HLock(mh);

rep = _HandToPtr(mh);

_MemFill(rep, c, (int) parm->p[1].val.ev_long);

rep[parm->p[1].val.ev_long] = '\0';  // 以空结束

_HUnLock(mh);

_RetInt(mh, 10);

}

//	返回内存句中的字符
//	调用时的参数必须是有效的 Visual FoxPro 内存句柄。

void FAR MHToFoxString(ParamBlk FAR *parm)

{

char FAR *string;

MHANDLE mh = parm->p[0].val.ev_long;

_HLock(mh);

string = _HandToPtr(mh);

_RetChar(string);

_HUnLock(mh);

}

//	释放内存句柄，Visual FoxPro 调用时的参数必须是有效的 Visual FoxPro 内存句柄。

void FAR freeMH(ParamBlk FAR *parm)

{

_FreeHand((MHANDLE) parm->p[0].val.ev_long);

}

FoxInfo myFoxInfo[] = {

{"REPLTOMH", (FPFI) replToMH, 2, "C,I"},

{"MHTOFOX", (FPFI) MHToFoxString, 1, "I"},

{"FREEMH", (FPFI) freeMH, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FreeHand( ), _GetHandSize( ), _HandToPtr( ), _HLock( ), _HUnLock( ), _MemAvail( ), _SetHandSize( )


_AllocMemo( ) API 库例程

请参阅	示例

在备注文件中为某个字段分配 size 个字节的空间，并在数据库的相关记录中插入新建块的编号。

语法

long _AllocMemo(Locator FAR *fld, long size)
Locator FAR *fld;	/* 指向定义备注字段的定位器的指针。 */
long size;	/* 以字节为单位的分配空间大小。 */

说明

_AllocMemo( ) 函数执行成功时，返回在文件中开始写入的位置。否则，返回 -1。

注意

写入的字节数多于 size 时将造成备注文件的损坏。

如果想直接替换备注字段的字段，即使新数据的长度等于或小于原始值的长度，也必须在例程中向备注文件写之前调用 _AllocMemo( ) 函数，这将防止在多用户环境下可能出现的问题。如果安全，_AllocMemo( ) 函数将重用先前已分配的空间。


下面的示例创建新的备注字段内容。

Visual FoxPro  代码

SET LIBRARY TO ALLOMEMO

CREATE TABLE wMemo (memoField M)

APPEND BLANK

= NewMemo(@MemoField, "Hello, World.")

APPEND BLANK

= NewMemo(@MemoField, "Isn't this fun?")

C  代码

#include <pro_ext.h>

FAR newMemo(ParamBlk FAR *parm)

{

Locator FAR *memoFldLoc;

FCHAN fchMemo;

int memoLen;

long loc;

if ((fchMemo = _MemoChan(-1)) == -1)

{

_UserError("_MemoChan() failed");

}

memoFldLoc = &parm->p[0].loc;

memoLen = parm->p[1].val.ev_length;

if ((loc = _AllocMemo(memoFldLoc, memoLen)) == -1)

{

_UserError("_AllocMemo() failed");

}

_FSeek(fchMemo, loc, FS_FROMBOF);

_HLock(parm->p[1].val.ev_handle);

_FWrite(fchMemo, _HandToPtr(parm->p[1].val.ev_handle), memoLen);

_HUnLock(parm->p[1].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"NEWMEMO", (FPFI) newMemo, 2, "R,C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBReplace( ), _FindMemo( ), _MemoChan( ), _MemoSize( )


_BreakPoint( ) API 库例程

示例

_BreaKPoint( ) 是生成调试器断点指令 INT 3 的宏。此函数可能有助于调试外部例程。

语法

void _BreakPoint(void any)
void any;	/* 指针。 */

说明

程序运行时，如果遇到 _BreakPoint( ) 函数的调用，则将控制转给调试器。大多数的调试器将控制返回给包含 INT 3 指令的程序行，而您必须以人工方式使指针 (IP) 递增，跳过 INT 3 指令。此后可以用调试器设置其他的断点。退出此外部例程前应该移去所有的断点。有关调试的详细内容，请参阅《专业级功能指南》第十一章“创建库”的“调试库”一节。


下面的示例使用宏 _BreakPoint( ) 设置 INT 3 指令，调试器会将它作为断点处理。

Visual FoxPro  代码

SET LIBRARY TO BPOINT

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

int RetValue;

_BreakPoint(); // 调试器将在此处暂停执行

_HLock(parm->p[0].val.ev_handle);

_HLock(parm->p[1].val.ev_handle);

RetValue = _StrCmp(_HandToPtr(parm->p[0].val.ev_handle),

_HandToPtr(parm->p[1].val.ev_handle));

_RetInt(RetValue, 10); //在此处返回控制

_HUnLock(parm->p[0].val.ev_handle);

_HUnLock(parm->p[1].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"STRCMP", (FPFI) Example, 2, "C,C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


_CountItems( ) API 库例程

请参阅	示例

返回指定菜单上菜单标题或菜单栏的数目。

语法

int _CountItems(MENUID menuid)
MENUID menuid;	/* 菜单标识符。 */


下面的示例创建一个包含有三个菜单项的菜单，并调用 _CountItems( ) 函数显示该函数能正确地返回菜单上菜单项的数目。然后例程删除各菜单项，并再次调用 _CountItems( ) 函数。

Visual FoxPro  代码

SET LIBRARY TO CNTITEMS

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR CountItemsEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_PutStr("\n_CountItems() ="); putLong(_CountItems(menuId));

_Execute("WAIT");

_DisposeItem(menuId, _GetItemId(menuId, 1));

_PutStr("\n_CountItems() ="); putLong(_CountItems(menuId));

_Execute("WAIT");

_DisposeItem(menuId, _GetItemId(menuId, 0));

_PutStr("\n_CountItems() ="); putLong(_CountItems(menuId));

_Execute("WAIT");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) CountItemsEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetNewMenuId( ), _MenuId( ), _NewMenu( )


_DBAppend( ) API 库例程

请参阅	示例

尝试向 workarea 指定的工作区中打开的表追加一个新记录。

语法

int _DBAppend(int workarea, int carryflag)
int workarea;	/* 工作区编号。 */
int carryflag;	/* SET CARRY 的设置值 */

说明

-1 代表当前工作区。如果例程执行成功，则 _DBAppend( ) 返回 0。如果例程失败，则 _DBAppend( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。

carryflag 的值

值	作用
1	将前一个记录的信息带入新记录。
0	新记录为空记录。
1	利用 SET CARRY 的设置值判定是否要将前一个记录的信息带入新记录。
_DBAppend( ) 函数自动执行任何必需的锁定。如果不能锁定文件头，则 _DBAppend( ) 函数失败并返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。


下面的示例使用 _DBAppend( ) 函数向在当前工作区中打开的表中追加一条记录。

Visual FoxPro  代码

SET LIBRARY TO DBAPPEND

DO CreateTest

SET CARRY ON

= DBAPPEND(-1)	&& SET CARRY 为 ON ，将前一个记录的数据带入新记录

SET CARRY OFF

= DBAPPEND(1)	&& 无论 SET CARRY 为何值，均将前一个记录的数据带入新记录

= DBAPPEND(-1)	&& SET CARRY 为OFF，不将前一个记录的数据带入新记录

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "Golly month of"

APPEND BLANK

REPLACE ABC WITH "A twelfth of"

APPEND BLANK

REPLACE ABC WITH "Hello, world"

APPEND BLANK

REPLACE ABC WITH "When in the"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

int RetCode;

if ((RetCode = _DBAppend(-1, (int) parm->p[0].val.ev_long)) < 0) {

_Error(-RetCode);

}

}

FoxInfo myFoxInfo[] = {

{"DBAPPEND", (FPFI) Example, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBLock( ), _DBUnlock( )


_DBLock( ) API 库例程

请参阅	示例

尝试锁定当前记录或在由 workarea 指定的工作区中打开的表。

语法

int _DBLock(int workarea, int RecOrFile)
int workarea;	/* 工作区。 */
int RecOrFile;	/* 锁定对象类型。 */

说明

参数 RecOrFile 可以取值为 DBL_RECORD，指定要锁定当前记录，或取值为 DBL_FILE，指定要锁定表文件。锁定成功时，_DBLock( ) 函数返回“真”（非 0 整数），不成功时返回“假”( 0 )。


下面的示例中提供了可以在 Visual FoxPro 中调用的两个 API 函数：锁定当前工作区中当前记录的 XRLOCK( ) 函数和锁定当前工作区中打开的表的 XFLOCK( ) 函数。XRLOCK( ) 函数调用 _DBLock( - 1，DBL_RECORD( ))，而 XFLOCK( ) 函数调用 _DBLock(- 1，DBL_FILE( ))。

Visual FoxPro  代码

SET LIBRARY TO DBLOCK

DO CreateTest

USE Test SHARED

GO 2

= XRLOCK()

LIST STAT  && 显示锁定了第 2 个记录

= XFLOCK()

LIST STAT  && 显示锁定了整个 DBF

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "Golly month of"

APPEND BLANK

REPLACE ABC WITH "A twelfth of"

APPEND BLANK

REPLACE ABC WITH "Hello, world"

APPEND BLANK

REPLACE ABC WITH "When in the"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR xLockRecord(ParamBlk FAR *parm)

{

_DBLock(-1, DBL_RECORD);

}

FAR xLockFile(ParamBlk FAR *parm)

{

_DBLock(-1, DBL_FILE);

}

FoxInfo myFoxInfo[] =

{

{"XRLOCK", (FPFI) xLockRecord, 0, ""},

{"XFLOCK", (FPFI) xLockFile,   0, ""},

};

FoxTable _FoxTable =

{

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBAppend( ), _DBUnlock( )


_DBRead( ) API 库例程

请参阅	示例

在指定工作区中将记录指针从当前记录移到指定记录。

语法

int _DBRead(int workarea, long record)
int workarea;	/* 工作区。 */
long record;	/* 记录号。 */

说明

如果例程执行成功，_DBRead( ) 返回 0。如果例程执行失败，_DBRead( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。

指定 record 为 0 等价于发出 GO TOP 命令；指定 record 为 -1 等价于发出 GO BOTTOM 命令。


下面的示例提供与 Visual FoxPro 的 GO命令相同的函数 XGO(n)，它在当前工作区中将记录指针从当前记录移动到编号为 n 的记录上。

Visual FoxPro  代码

SET LIBRARY TO DBREAD

DO CreateTest

USE Test SHARED

GO BOTTOM

? RECNO()

= XGO(2)

? RECNO()

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_DBRead(-1, parm->p[0].val.ev_long);

}

FoxInfo myFoxInfo[] = {

{"XGO", (FPFI) Example, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBRewind( ), _DBSkip( ), _DBUnwind( )


_DBRecCount( ) API 库例程

请参阅	示例

返回指定工作区中打开的表的记录数。

语法

long _DBRecCount(int workarea)
int workarea;	/* 工作区。 */

说明

如果在指定的工作区没有表打开，则 _DBRecCount( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。


下面的示例调用 _DBRecCount( ) 函数统计在当前工作区中打开的表的记录总数。

Visual FoxPro  代码

SET LIBRARY TO DBRECCNT

DO CreateTest

? DBRECCOUNT()	&& 调用 API 例程

? RECCOUNT()	&& 调用内置的 Visual FoxPro 函数

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_RetInt(_DBRecCount(-1), 10);

}

FoxInfo myFoxInfo[] = {

{"DBRECCOUNT", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBRecNo( )


_DBRecNo( ) API 库例程

请参阅	示例

返回指定工作区中打开表的当前记录编号。

语法

long _DBRecNo(int workarea)
int workarea;	/* 工作区。 */

说明

如果指定工作区中没有表打开，则 _DBRecNo( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。如果记录指针在文件尾，则 _DBRecNo( ) 的返回比 _DBRecCount( ) 的返回值大 1 的值。


下面的示例提供与 Visual FoxPro 的 RECNO( ) 函数相似的功能。

Visual FoxPro  代码

SET LIBRARY TO DBRECNO

DO CreateTest

GO 3

? DBRECNO()

GO 6

? DBRECNO()

USE

? DBRECNO()  && 返回 -119

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

APPEND BLANK

REPLACE ABC WITH "This is record 5"

APPEND BLANK

REPLACE ABC WITH "This is record 6"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_RetInt(_DBRecNo(-1), 10);

}

FoxInfo myFoxInfo[] = {

{"DBRECNO", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBRecCount( )


_DBReplace( ) API 库例程

请参阅	示例

_DBReplace( ) 用一个新值替换一个字段中的原有值。

语法

int _DBReplace(Locator FAR *fld, Value FAR *val)
Locator FAR *fld;	/* 被替换的字段。 */
Value FAR *val;	/* 新值。 */

说明

如果替换操作执行成功，_DBReplace( ) 返回 0。如果替换操作执行失败，_DBReplace( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。_DBReplace( ) 可以用来将备注字段的值替换为少于 65,000 个字节的新值。当备注字段大于 65,000 个字节时，则要使用直接的备注字段例程和缓冲输入/输出例程。


下面的示例提供与 Visual FoxPro 的 REPLACE 命令相似的功能，但一次只替换一个记录的值。

Visual FoxPro  代码

SET LIBRARY TO DBREPLAC

DO CreateTest

? DBREPLACE(@ABC, "Replacement record 1")

? DBREPLACE(@ABC, 2)  && 返回 -302- ，字段 ABC 是字符型字段

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_RetInt(_DBReplace(&parm->p[0].loc, &parm->p[1].val), 10);

}

FoxInfo myFoxInfo[] = {

{"DBREPLACE", (FPFI) Example, 2, "R,?"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBLock( ), _DBUnlock( )


_DBRewind( ) API 库例程

请参阅	示例

功能与 Visual FoxPro 的 GO TOP 命令相似，并返回当前记录的编号。

语法

long _DBRewind(int workarea)
int workarea;	/* 工作区。 */


下面的示例调用 _DBRewind( ) 对当前工作区中打开的表进行操作。其效果与使用 Visual FoxPro 的 GO TOP 命令一样。

Visual FoxPro  代码

SET LIBRARY TO DBREWIND

DO CreateTest

GO BOTTOM

? RECNO()

? DBREWIND()	 && 返回 1

? RECNO()    && 正确，记录指针指向第一个记录

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_RetInt(_DBRewind(-1), 10);

}

FoxInfo myFoxInfo[] = {

{"DBREWIND", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBSkip( ), _DBUnwind( )


_DBSeek( ) API 库例程

请参阅	示例

在当前工作区的索引表中搜索索引关键字与值 val 匹配的第一个记录。

语法

long _DBSeek(Value FAR *val)
Value FAR *val;	/* 搜索的值。 */

说明

如果 _DBSeek( ) 找到匹配的记录，则把记录指针移到匹配记录上，并返回该记录的编号。除非 SET EXACT 设置为 OFF，否则应该是精确匹配。如果 _DBSeek( ) 没有找到匹配的记录，则返回 0。如果没有找到匹配的记录，而 SET NEAR 设置为 ON，则将把记录指针定位于最匹配的记录上。如果 SET NEAR 设置为 OFF，则记录指针定位于文件尾。

如果出错，则 _DBSeek( ) 返回一个负整数，其绝对值是 Visual FoxPro 一个错误编号。

搜索 个数值型字段时，即使该字段没有小数位，val 的数值类型也应该设置为 N。如果 val 的数值类型设置为 I，则 _DBSeek( ) 将返回内部错误编号 -302，即“数据类型不匹配”。


不论由哪一种索引控制当前工作区中的打开表的顺序，下面的示例都将正确搜索。注意， FoxInfo 结构中的“?”是需要的，因为不知道索引表达式的类型。

Visual FoxPro  代码

SET LIBRARY TO DBSEEK

DO CreateTest

INDEX ON ABC TAG ABC

SET ORDER TO TAG ABC

= DBSEEK("This is record 3")  && 搜索  ABC="This is record 3"

LIST NEXT 1

USE

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_DBSeek(&parm->p[0].val);

}

FoxInfo myFoxInfo[] = {

{"DBSEEK", (FPFI) Example, 1, "?"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBRecCount( ), _DBRecNo( )


_DBSkip( ) API 库例程

请参阅	示例

_DBSkip( ) 在指定的工作区中移动记录指针使之跳过一定数目的记录。

语法

long _DBSkip(int workarea, long distance)
int workarea;	/* 工作区。 */
long distance;	/* 跳过的记录数目。 */

说明

_DBSkip( ) 与 Visual FoxPro 的 SKIP 命令一样，都是基于活动索引和筛选表达式的。指针移动的距离可正可负。_DBSkip( ) 返回新记录的记录号。

使用 _DBStatus( ) 可以检查文件尾的条件与文件开始的条件是否满足。如果到了文件尾还想向前跳，或在文件开始时向回跳，_DBSkip( ) 都会返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。


下面的示例和 Visual FoxPro 的 SKIP 命令的工作方式一样。

Visual FoxPro  代码

SET LIBRARY TO DBSKIP

ON ERROR DO expectError

DO CreateTest

USE

= DBSKIP(1) 	&& 调用_Error():没有正在使用的 DBF

USE test

GO TOP

= DBSKIP(-1)= DBSKIP(-1)	&& 调用 _Error():在文件开始

GO BOTT

= DBSKIP(1)

= DBSKIP(1)	&& 调用_Error()：在文件尾

ON ERROR

PROCEDURE expectError

? "ERROR: " + MESSAGE()

RETURN

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *pblk)

{

int RetCode;

if ((RetCode = _DBSkip(-1, pblk->p[0].val.ev_long)) < 0) {

_PutStr("\nError encountered in example program.");

_Error(-RetCode);  // _DBSkip() 返回负的错误编码

}

_RetInt(RetCode, 10);

}

FoxInfo myFoxInfo[] = {

{"DBSKIP", (FPFI) Example, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBRecCount( ), _DBRecNo( )


_DBStatus( ) API 库例程

请参阅	示例

返回指定工作区的状态标志。

语法

int _DBStatus(int workarea)
int workarea;	/* 工作区。 */

说明

如果在指定的工作区中没有表打开，则 _DBStatus( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。下表显示了可返回的各个状态标志：

标志	设置条件
DB_BOF	与 Visual FoxPro 的 BOF( ) 函数设置条件相同。
DB_EOF	当 Visual FoxPro 的 EOF( ) 函数设置条件相同。
DB_RLOCKED	当前的记录锁定、表锁定或表以独占方式打开时设置。
DB_FLOCKED	表被锁定或以独占方式打开时设置。
DB_EXCLUSIVE	表以独占方式打开时设置。
DB_READONLY	当表打开后不允许写访问时设置。


下面的示例显示在当前工作区中打开的表的状态。它将检查 _DBStatus( ) 返回值的每一位，并在屏幕上显示相应信息。

Visual FoxPro  代码

SET LIBRARY TO DBSTATUS

= DBSTATUS()  && 显示当前工作区中的 DBF 的状态。

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

int dbstatus = _DBStatus(-1);

_PutStr("\nStatus of DBF in current work area:");

if (dbstatus & DB_BOF)

_PutStr("\nBOF()");

if (dbstatus & DB_EOF)

_PutStr("\nEOF()");

if (dbstatus & DB_RLOCKED)

_PutStr("\nCurrent record is RLOCKed");

if (dbstatus & DB_FLOCKED)

_PutStr("\nDatabase is FLOCKed");

if (dbstatus & DB_EXCLUSIVE)

_PutStr("\nDatabase is open EXCLUSIVEly");

if (dbstatus & DB_READONLY)

_PutStr("\nDatabase is READONLY");

}

FoxInfo myFoxInfo[] = {

{"DBSTATUS", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBLock( ), _DBUnlock( )


_DBUnlock( ) API 库例程

请参阅	示例

释放用户对 workarea 指定的工作区中文件或记录设置的所有锁定。

语法

void _DBUnlock(int workarea)
int workarea;	/* 工作区。 */


下面的示例使用 _DBUnlock( ) 释放对当前工作区中打开的表的所有记录的锁定。这段 Visual FoxPro 代码演示了 _DBUnlock( ) 并检验它是否能正确工作。

Visual FoxPro  代码

SET LIBRARY TO DBUNLOCK

DO CreateTest

USE Test SHARED

GO 2

= XRLOCK()

LIST STAT  && 显示锁定了 #2 记录

= XUNLOCK()

LIST STAT  && 显示没有锁定的记录

= XFLOCK()

LIST STAT  && 显示锁定了整个 DBF

= XUNLOCK()

LIST STAT  && 显示没有锁定的记录

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "Golly month of"

APPEND BLANK

REPLACE ABC WITH "A twelfth of"

APPEND BLANK

REPLACE ABC WITH "Hello, world"

APPEND BLANK

REPLACE ABC WITH "When in the"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR xLockRecord(ParamBlk FAR *parm)

{

_DBLock(-1, DBL_RECORD);

}

FAR xLockFile(ParamBlk FAR *parm)

{

_DBLock(-1, DBL_FILE);

}

FAR xUnLockFile(ParamBlk FAR *parm)

{

_DBUnLock(-1);

}

FoxInfo myFoxInfo[] = {

{"XRLOCK",  (FPFI) xLockRecord, 0, ""},

{"XFLOCK",  (FPFI) xLockFile,   0, ""},

{"XUNLOCK", (FPFI) xUnLockFile, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBAppend( ), _DBLock( ), _DBReplace( ), _DBStatus( ), _DBWrite( )


_DBUnwind( ) API 库例程

请参阅	示例

在指定的工作区中象 Visual FoxPro 的 GO BOTTOM 命令一样工作，并返回当前记录的编号。

语法

long _DBUnwind(int workarea)
int workarea;	/* 工作区。 */


下面的示例调用 _DBUnwind( ) 对当前工作区中打开的表进行操作。

Visual FoxPro  代码

SET LIBRARY TO DBUNWIND

DO CreateTest

? DBUNWIND()	&&  显示新的记录号

SKIP

? EOF() 	&& 此时 EOF() 返回 .T.

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

_RetInt(_DBUnwind(-1), 10);

}

FoxInfo myFoxInfo[] = {

{"DBUNWIND", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBRewind( )


_DBWrite( ) API 库例程

请参阅	示例

将指定工作区中当前记录写入磁盘，并更新所有相关的索引。

语法

int _DBWrite(int workarea)
int workarea;	/* 工作区。 */

说明

每当记录指针由一个记录移到另一个记录时，自动进行这一更新。如果没有进行任何字段数据的替换操作，则 _DBWrite( ) 不起作用。如果例程执行成功，_DBWrite( ) 返回 0。如果例程执行失败，_DBWrite( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。


下面的示例执行 _DBReplace( ) 函数时使用了两个参数：一个是以引用传递方式传递的表字段，另一个是相应类型的数值。这个示例在调用 _DBWrite( ) 前后分别执行 Visual FoxPro 的 LIST NEXT 1 命令。

Visual FoxPro  代码

SET LIBRARY TO DBWRITE

DO CreateTest

GO 3

=DBWRITE( @ABC, "Replacement Record 1")

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

int RetValue;

if (RetValue = _DBReplace(&parm->p[0].loc, &parm->p[1].val)) {

_UserError("\n_DBReplace() failed");

}

if (RetValue = _DBWrite(-1)) {

_Error(-RetValue);

}

_Execute("LIST NEXT 1");

}

FoxInfo myFoxInfo[] = {

{"DBWRITE", (FPFI) Example, 2, "R,?"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DBLock( ), _DBReplace( ), _DBUnlock( )


_DeActivateHandler( ) API 库例程

请参阅	示例

_DeActivateHandler( ) 从事件处理程序列表中删除指定的事件处理程序。

语法

void _DeActivateHandler(unsigned int EventIdentifier)
unsigned int EventIdentifier;	/* 要从列表中删除的事件处理程序的 ID。 */

说明

当卸载一个事件处理程序列表所在的库时，必须分别用 EventIdentifier 从处理程序列表中删除每一个事件处理程序。


下面的示例在加载库时激活一个事件处理程序。这个事件处理程序为每一个事件打印一条信息，并由 Visual FoxPro 处理此信息。卸载库时废止该事件处理程序。正如在下面的示例中一样，_DeActivateHandler( ) 常常在 CALLONUNLOAD 函数中调用。

Visual FoxPro  代码

SET LIBRARY TO DEACTHAN

C  代码

#include <pro_ext.h>

static int HandlerID;

//	这是注册为事件处理程序的例程。

FAR EventHandler(WHandle theWindow, EventRec FAR *ev)

{

_PutStr("\nEventHandler() called.");

return NO;	// 事件仍需由 Visual FoxPro 处理

}

FAR Activate()

{

HandlerID = _ActivateHandler(EventHandler);

}

//	卸载库时必须在 CALLONUNLOAD 函数中废止事件处理程序。

FAR DeActivate()

{

_DeActivateHandler(HandlerID);

}

FoxInfo myFoxInfo[] = {

{"ACTIVATE",  (FPFI) Activate, CALLONLOAD, ""},

{"DEACTIVATE", (FPFI)  DeActivate, CALLONUNLOAD, ""}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ActivateHandler( ), _FindWindow( ), _GlobalToLocal( ), _MousePos( )


_DeActivateIdle( ) API 库例程

请参阅	示例

在空闲循环中删除指定的例程。

语法

void _DeActivateIdle(unsigned int IdleIdentifier)
unsigned int IdleIdentifier;	/*要从空闲列表中删除的例程。 */

说明

卸载库时必须从空闲例程列表中删除每一个空闲例程。


下面的示例在加载库时激活一个空闲事件处理程序。这个空闲事件处理程序只是简单地打印信息并在卸载库时废止。正如在下面的示例中一样，_DeActivateIdle( ) 常常在 CALLONUNLOAD 函数中调用。

Visual FoxPro  代码

SET LIBRARY TO DEACTIDL

C  代码

#include <pro_ext.h>

static unsigned IdlerID;

//	这是注册为空闲事件处理程序的例程。

void FAR IdleHandler(WHandle wh, EventRec *ev)

{

_PutStr("\nIdleHandler() called.");

}

void FAR Activate(ParamBlk FAR *parm)

{

IdlerID = _ActivateIdle((FPFI) IdleHandler);

}

//	卸载库时，必须在 CALLONUNLOAD 函数中废止空闲事件处理程序。

void FAR DeActivate(ParamBlk FAR *parm)

{

_DeActivateIdle(IdlerID);

}

FoxInfo myFoxInfo[] = {

{"ACTIVATE",    (FPFI) Activate,   CALLONLOAD,     ""},

{"DEACTIVATE",  (FPFI) DeActivate, CALLONUNLOAD,   ""}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ActivateIdle( ), _FindWindow( ), _GlobalToLocal( ), _MousePos( )


_DeActivateMenu( ) API 库例程

请参阅	示例

从屏幕上移去一个菜单。

语法

void _DeActivateMenu(MENUID menuid)
MENUID menuid;	/* 菜单标识符。 */

说明

这个菜单并没有从内存中释放，并且能够用 _ActivateMenu( ) 重新激活。


下面的示例激活并废止一个菜单若干次。

Visual FoxPro  代码

SET LIBRARY TO DEACTMEN

C  代码

#include <pro_ext.h>

FAR DeActMenuEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_Execute("WAIT WINDOW 'Menu activated'");

_DeActivateMenu(menuId);

_Execute("WAIT WINDOW 'Menu deactivated'");

_ActivateMenu(menuId);

_Execute("WAIT WINDOW 'Menu activated'");

_DeActivateMenu(menuId);

_Execute("WAIT WINDOW 'Menu deactivated'");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) DeActMenuEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ActivateMenu( )


_DefaultProcess( ) API 库例程

请参阅	示例

当 _GetNextEvent( ) 的返回事件不需要特殊处理时，为该事件提供默认的事件处理。

语法

void _DefaultProcess(EventRec FAR *event)
EventRec FAR *event;	/* 要进行处理的事件。 */

说明

这使得外部过程能够比较容易地使用窗口，并使它们仍能够保持与产品的其他部分的一致性。

附注

不要在事件处理程序中调用 _DefaultProcess( )。


下面的示例在一个循环中调用了 _GetNextEvent( ) 和 _DefaultProcess( ) 。本过程中的所有事件都要接受默认的事件处理。

Visual FoxPro  代码

SET LIBRARY TO DEFAPROC

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

EventRec ev;

int i;

for (i = 0; i < 16; i++)

{

_GetNextEvent(&ev);

_DefaultProcess(&ev);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindWindow( ), _GetNextEvent( ), _GlobalToLocal( )


_Dialog( ) API 库例程

示例

在屏幕上显示具有指定配色方案的对话框，对话框中包含有指定的主体文本及按钮文本。

语法

int _Dialog(int scheme, char FAR *body_text, char FAR *button1,
char FAR *button2, char FAR *button3, int default, int escape)
int scheme;	/* 配色方案编号。 */
char FAR *body_text;	/* 对话框中的文本。 */
char FAR *button1;	/* 按钮提示。 */
char FAR *button2;	/* 按钮提示。 */
char FAR *button3;	/* 按钮提示。 */
int default;	/* 默认按钮的编号。 */
int escape;	/* 按 Esc 键时对应按钮的编号。 */

说明

_Dialog( ) 返回用户选定按钮的编号。

如果指定显示在对话框中的按钮少于 3 个，可以把一个按钮提示指定为 0 ，其他按钮为空。参数 default 指定在对话框中作为默认按钮而要突出显示的按钮，参数 escape 指定用户按 Esc 键时选择处理的按钮。

如果不指定任何按钮，则 Visual FoxPro 显示对话框并等待用户按一个键或单击鼠标左键。如果用户按 Escape 键，则 _Dialog( ) 返回这个 escape 值；否则，返回默认值。


下面的示例创建了四个对话框，分别包含三个、两个、一个或零个按钮。

Visual FoxPro  代码

SET LIBRARY TO DIALOG

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

void FAR dialogEx(ParamBlk FAR *parm)

{

int selection;

selection = _Dialog(DIALOG_SCHEME, "Example dialog with 3 buttons.",

"First", "Second", "Third", 2, 3);

_PutStr("\nItem selected ="); putLong(selection);

selection = _Dialog(DIALOG_SCHEME, "Example dialog with 2 buttons.",

"First", "Second", 0, 2, 2);

_PutStr("\nItem selected ="); putLong(selection);

selection = _Dialog(DIALOG_SCHEME, "Example dialog with 1 button.",

"First", (char *)0, (char *)0, 1, 1);

_PutStr("\nItem selected ="); putLong(selection);

selection = _Dialog(DIALOG_SCHEME, "Example dialog no buttons.",

(char *)0, (char *)0, (char *)0, 1, 2);

_PutStr("\nItem selected ="); putLong(selection);

}

FoxInfo myFoxInfo[] = {

{"DIALOGEX", (FPFI) dialogEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


_DisposeItem( ) API 库例程

请参阅	示例

从内存中释放指定的菜单项，并释放与此菜单项相关的所有内存。

语法

void _DisposeItem(MENUID menuid, ITEMID itemid)
MENUID menuid;	/* 菜单标识符。 */
ITEMID itemid;	/* 菜单项标识符。 */

说明

_DisposeItem( ) 并不释放与此菜单项相关的子菜单。


下面的示例创建一个包含三个菜单项的菜单，然后使用 _DispeseItem( ) 删除其中的两个菜单项。

Visual FoxPro  代码

SET LIBRARY TO DISPITEM

C  代码

#include <pro_ext.h>

FAR DisposeItemEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_Execute("WAIT WINDOW 'Menu has three items'");

_DisposeItem(menuId, _GetItemId(menuId, 1));

_Execute("WAIT WINDOW 'Menu has two items'");

_DisposeItem(menuId, _GetItemId(menuId, 0));

_Execute("WAIT WINDOW 'Menu has one item'");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) DisposeItemEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_NewItem( ), _GetItemId( )


_DisposeMenu( ) API 库例程

请参阅	示例

释放指定的菜单及其所有的菜单项，并释放与此菜单相关的所有内存。

语法

void _DisposeMenu(MENUID menuid)
MENUID menuid;	/* 菜单标识符。 */

说明

_DisposeMenu( ) 并不释放与此菜单相关的子菜单。


下面的示例在用户选择了一个菜单项后调用 _DisposeMenu( )。

Visual FoxPro  代码

SET LIBRARY TO DISPMENU

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

_DisposeMenu(menuId);

}

FAR activateMenu(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_OnSelection(menuId, -1, onSelection);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) activateMenu, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetNewMenuId( ), _MenuId( ), _NewMenu( )


_EdActive( ) API 库例程

请参阅	示例

允许隐藏（废止）或显示（激活）指定窗口中的选定范围或插入点的位置。

语法

void _EdActive(WHANDLE wh, int Show)
WHANDLE wh;	/* 编辑窗口的句柄。*/
int Show;	/* 确定隐藏或显示的布尔值。 */

说明

指定参数 Show 为 TRUE 时，显示选定的范围或插入点的位置，而指定 Show 为 FALSE 时，则隐藏选定的范围及插入点的位置。


下面的示例打开一个编辑窗口，将一个文件名作为参数传递给这个窗口，即在这个窗口中编辑这个文件，然后选择文件的第一个字符。使用 _EdActive( )，示例先激活选择项，然后又废止选择项。

Visual FoxPro  代码

SET LIBRARY TO EDACTIVE

fc = FCREATE("x", 0)

FOR i = 1 TO 90

= FPUTS(fc, REPL(ALLT(STR(i)), i), i)

ENDFOR

= FCLOSE(fc)

= EDACTIVE("x")	&& 调用自定义的 _EdActive( ) API 例程

C  代码

#include <pro_ext.h>

FAR EdActiveEx(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

_HLock(parm->p[0].val.ev_handle);

pFILENAME[parm->p[0].val.ev_length] = '\0';

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdActive(wh, TRUE);

_Execute("WAIT WINDOW 'Selection active'");

_EdActive(wh, FALSE);

_Execute("WAIT WINDOW 'Selection inactive'");

}

FoxInfo myFoxInfo[] = {

{"EDACTIVE", (FPFI) EdActiveEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdSelect( )


_EdCloseFile( ) API 库例程

请参阅	示例

关闭指定的编辑窗口以及此窗口中显示的文件。

语法

int _EdCloseFile(WHANDLE wh, int option)
WHANDLE wh;	/* 编辑窗口的句柄。 */
int option;	/* 关闭选项。*/

说明

参数 option 的值可以是：

Option 参数的值

值	结果
0	立即保存。
1	在对话框中确认后保存。
2	打开“另存为”对话框。
_EdCloseFile( ) 的返回值可以是下列值之一：

_EdCloseFile( ) 的返回值

返回值	意义
1	不保存文件并取消操作。
0	保存并关闭文件。
1	放弃更改并关闭文件。


下面的示例先后三次打开并编辑由参数指定的同一文件、删除一个字符、关闭编辑工作期。第一次，使用“立即保存”选项调用 _EdcloseFile( )；第二次使用“在对话框中确认后保存”选项，第三次则使用“打开‘另存为’对话框”选项。每一次操作，例程都将显示 _EdCloseFile( ) 的返回值。

Visual FoxPro  代码

SET LIBRARY TO EDCLOSE

= EDCLOSE("x")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 5;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

int retValue;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

_HLock(parm->p[0].val.ev_handle);

pFILENAME[parm->p[0].val.ev_length] = '\0';

// 打开文件，删除一个字符，关闭时不提问即保存

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdDelete(wh);

retValue = _EdCloseFile(wh, 0); //不提问即保存

_PutStr("\n_EdCloseFile() ="); putLong(retValue);

// 打开文件，删除一个字符，关闭提问是否保存

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdDelete(wh);

retValue = _EdCloseFile(wh, 1); // 提问是否保存

_PutStr("\n_EdCloseFile() ="); putLong(retValue);

// 打开文件，删除一个字符，关闭时执行“另存为”操作 。

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdDelete(wh);

retValue = _EdCloseFile(wh, 2); // 保存为

_PutStr("\n_EdCloseFile() ="); putLong(retValue);

}

FoxInfo myFoxInfo[] = {

{"EDCLOSE", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdOpenFile( ), _EdRevert( ), _EdSave( )


_EdCopy( ) API 库例程

请参阅	示例

将指定编辑窗口中文件的选定内容复制到剪贴板上。

语法

void _EdCopy(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */


下面的示例打开并编辑由参数指定的文件，并使用 _EdCopy( ) 将第一个字符复制到剪贴板上，然后使用 _EdPaste( ) 将此字符粘贴在第二个字符之后。

Visual FoxPro  代码

SET LIBRARY TO EDCOPY

= EDCOPY("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdCopy(wh);

_EdSetPos(wh, 2);

_EdPaste(wh);

}

FoxInfo myFoxInfo[] = {

{"EDCOPY", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdPaste( ), _EdSelect( ), _EdSetPos( )


_EdCut( ) API 库例程

请参阅	示例

将指定编辑窗口中的文件的选定内容复制到剪贴板上，并从指定窗口中删除此内容。

语法

void _EdCut(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */


下面的示例打开并编辑由参数指定的文件，然后使用 _EdCut( ) 将第一个字符剪切到剪贴板上，然后利用 _EdPaste( ) 为此字符粘贴在第二个字符之后。

Visual FoxPro  代码

SET LIBRARY TO EDCUT

= EDCUT("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdCut(wh);

_EdSetPos(wh, 2);

_EdPaste(wh);

}

FoxInfo myFoxInfo[] = {

{"EDCUT", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdPaste( ), _EdSelect( ), _EdSetPos( )


_EdDelete( ) API 库例程

请参阅	示例

删除指定编辑窗口中文件的选定内容。

语法

void _EdDelete(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。*/

说明

如果没有选定的内容，则 _EdDelete( ) 删除在当前插入点位置上的字符。


下面的示例打开并编辑由参数指定的文件，并使用 _EdDelete( ) 删除文件中的第一个字符。

Visual FoxPro  代码

SET LIBRARY TO EDDELETE

= EDDELETE("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

int retValue;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdDelete(wh);

}

FoxInfo myFoxInfo[] = {

{"EDDELETE", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdSelect( ), _EdSetPos( )


_EdGetChar( ) API 库例程

请参阅	示例

_EdGetChar( ) 返回指定编辑窗口中的文件内给定偏移位置上的字符。

语法

TEXT _EdGetChar(WHANDLE wh, EDPOS thePos)
WHANDLE wh;	/* 编辑窗口的句柄。*/
EDPOS thePos;	/* 要返回的字符在文件中的偏移位置。 */


下面的示例打开并编辑由参数指定的文件，并在屏幕上显示整个文件的内容。

Visual FoxPro  代码

SET LIBRARY TO EDGETCHA

= EDGETCHAR("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

EDPOS edpos;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

_HLock(parm->p[0].val.ev_handle);

pFILENAME[parm->p[0].val.ev_length] = '\0';

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdGetEnv(wh, &EdEnv);

for (edpos = 0; edpos <= EdEnv.length; edpos++)

{

_PutChr(_EdGetChar(wh, edpos));

}

}

FoxInfo myFoxInfo[] = {

{"EDGETCHAR", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdSetPos( )


_EdGetEnv( ) API 库例程

请参阅	示例

_EdGetEnv( ) 在 *EDENV 中提供了编辑器的环境信息。

语法

void _EdGetEnv(WHANDLE wh, *EDENV theEdEnv)
WHANDLE wh;	/* 编辑窗口的句柄。 */
*EDENV theEdEnv;	/* 环境设置。 */

说明

*EDENV 的结构在下面列出。

附注

在下面的注释中，(R) 说明该成员只读而不能使用 _EdSetEnv( )。(B) 说明该成员可以取两个布尔值中的一个，两个布尔值为： 1 （“真”）或 0 （“假”）。

typedef struct
{
char	filename[MAXFILENAME];	// (R)
EDPOS	length;	// 文本字节数。(R)
unsigned short	lenLimit;	// 最大允许长度。0=无穷

unsigned short	dirty,	// 文件已修改过吗? (R，B)
autoIndent,	// 自动缩进吗? (B)
backup,	// 制作备份文件吗? (B)
addLineFeeds,	// 保存时添加一个换行符吗? (B)
autoCompile,	// 是否应自动编译? (B)
addCtrlZ,	// 在文件尾添加 CTRL-Z 键吗?(B)
savePrefs,	// 保存编辑参数选择吗?(B)
dragAndDrop,	// 允许拖放吗?(B)
readOnly,	// 0 = 非 r/o，1 = 文件为 r/o
// 2 = 文件为 r/w，打开 r/o
// 3 = 文件为 r/o， 打开 r/o
status,	// 显示状态栏吗? (B)
lockPrefs,	//能否更新选择
insertMode;	// (B)

short	wrap;	// 如果小于 0，只有遇到 Return 键时才开始新的一行。
EDPOS	selStart;	// 选择开始点 (R)
EDPOS	selEnd;	// 选择结束点 (R)
EDPOS	selAnchor;	// 选定内容的定位点 ? (R)
short	justMode;	// 对齐方式（0 = 左对齐，1 = 右对齐，2 = 居中对齐）。
short	tabWidth;	// 制表符所占的空间大小。

char	fontName[MAXFONTNAME];
short	fontSize;
short	fontStyle;	// 0 = 纯文本，1 = 粗体，2 = 斜体，3 = 粗斜体。
short	kind;	// 编辑器工作期的种类(R)；
//   EDCOMMAND, EDPROGRAM, 等等。.
} EDENV;


下面的示例打开一个编辑工作期编辑由参数指定的文件，并显示这个文件由 _EdGetEnv( ) 返回的 EDENV 结构的每个域。

Visual FoxPro  代码

SET LIBRARY TO EDGETENV

= EDGETENV("x")

C  代码

#include <pro_ext.h>

void putLong(unsigned long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 6;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

EDPOS edpos;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdGetEnv(wh, &EdEnv);

_PutStr("\nfilename: ");        _PutStr(EdEnv.filename);

_PutStr("\nlength: ");          putLong(EdEnv.length);

_PutStr("\nlenLimit: ");        putLong(EdEnv.lenLimit);

_PutStr("\ndirty: ");           putLong(EdEnv.dirty);

_PutStr("\nautoIndent: ");      putLong(EdEnv.autoIndent);

_PutStr("\nbackup: ");          putLong(EdEnv.backup);

_PutStr("\naddLineFeeds: ");    putLong(EdEnv.addLineFeeds);

_PutStr("\nautoCompile: ");     putLong(EdEnv.autoCompile);

_PutStr("\naddCtrlZ: ");        putLong(EdEnv.addCtrlZ);

_PutStr("\nsavePrefs: ");       putLong(EdEnv.savePrefs);

_PutStr("\ndragAndDrop: ");     putLong(EdEnv.dragAndDrop);

_PutStr("\nreadOnly: ");        putLong(EdEnv.readOnly);

_PutStr("\nstatus: ");          putLong(EdEnv.status);

_PutStr("\nlockPrefs: ");       putLong(EdEnv.lockPrefs);

_PutStr("\ninsertMode: ");      putLong(EdEnv.insertMode);

_PutStr("\nwrap: ");            putLong(EdEnv.wrap);

_PutStr("\nselStart: ");        putLong(EdEnv.selStart);

_PutStr("\nselEnd: ");          putLong(EdEnv.selEnd);

_PutStr("\nselAnchor: ");       putLong(EdEnv.selAnchor);

_PutStr("\njustMode: ");        putLong(EdEnv.justMode);

_PutStr("\ntabWidth: ");        putLong(EdEnv.tabWidth);

_PutStr("\nfontName: ");        _PutStr(EdEnv.fontName);

_PutStr("\nfontSize: ");        putLong(EdEnv.fontSize);

_PutStr("\nfontStyle: ");       putLong(EdEnv.fontStyle);

_PutStr("\nkind: ");            putLong(EdEnv.kind);

}

FoxInfo myFoxInfo[] = {

{"EDGETENV", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdLastError( ), _EdSetEnv( )


_EdGetLineNum( ) API 库例程

请参阅	示例

返回指定编辑窗口中参数 thePos 指定的偏移位置对应的文件行号。

语法

EDLINE _EdGetLineNum(WHANDLE wh, EDPOS thePos)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDPOS thePos;	/* 在文件中的偏移位置。 */


下面的示例为参数指定的文件打开一个编辑工作期，并调用 _EdGetLinePos( ) 取得第 12 行的 EDPOS。然后以这个 EDPOS 作为参数调用 _EdGetLineNum( )，并返回 12。接着，每次都使 EDPOS 递增 1，并调用 _EdGetLineNum( )，直到返回值 EDLINE 变化为止。此时再对第 13 行调用 _EdGetLinePos( )。

Visual FoxPro  代码

SET LIBRARY TO EDGETLIN

= EDGETLPOS("x")

C  代码

#include <pro_ext.h>

void putLong(unsigned long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 6;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

EDPOS edpos;

EDLINE edlin, original;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

edpos = _EdGetLinePos(wh, 12);

_PutStr("\n_EdGetLinePos(wh, 12) =");

putLong(edpos);

original = edlin = _EdGetLineNum(wh, edpos);

for (;;)

{

_PutStr("\n_EdGetLineNum(wh,");

putLong(edpos);

_PutStr(") = ");

putLong(edlin);

if (edlin != original)

{

break;

}

edpos++;

edlin = _EdGetLineNum(wh, edpos);

}

edpos = _EdGetLinePos(wh, 13);

_PutStr("\n_EdGetLinePos(wh, 13) ="); putLong(edpos);

}

FoxInfo myFoxInfo[] = {

{"EDGETLPOS", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetChar( ), _EdGetLinePos( )


_EdGetLinePos( ) API 库例程

请参阅	示例

返回指定编辑窗口中的文件在指定行上第一个字符的偏移位置。

语法

EDPOS _EdGetLinePos(WHANDLE wh, EDLINE theLine)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDLINE theLine;	/* 行号。 */


下面的示例为参数指定的文件打开一个编辑工作期，并调用 _EdGetLinePos( ) 获得第 12 行的 EDPOS。然后将这个 EDPOS 作为参数调用 _EdGetLineNum( ) 并返回 12。接着，每次都使 EDPOS 递增 1，并调用 _EdGetLineNum( )，直到返回的 EDLINE 发生变化为止。此时再对第 13 行调用 _EdGetLinePos( )。

Visual FoxPro  代码

SET LIBRARY TO EDGETLPO

= EDGETLPOS("x")

C  代码

#include <pro_ext.h>

void putLong(unsigned long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 6;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

EDPOS edpos;

EDLINE edlin, original;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

edpos = _EdGetLinePos(wh, 12);

_PutStr("\n_EdGetLinePos(wh, 12) =");

putLong(edpos);

original = edlin = _EdGetLineNum(wh, edpos);

for (;;)

{

_PutStr("\n_EdGetLineNum(wh,");

putLong(edpos);

_PutStr(") = ");

putLong(edlin);

if (edlin != original)

{

break;

}

edpos++;

edlin = _EdGetLineNum(wh, edpos);

}

edpos = _EdGetLinePos(wh, 13);

_PutStr("\n_EdGetLinePos(wh, 13) ="); putLong(edpos);

}

FoxInfo myFoxInfo[] = {

{"EDGETLPOS", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetLineNum( )


_EdGetPos( ) API 库例程

请参阅	示例

返回指定编辑窗口中的文件插入点的当前偏移位置。

语法

EDPOS _EdGetPos(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */

说明

如果有选定的文本，则 _EdGetPos( ) 返回定位点的偏移位置。


下面的示例为参数指定的文件打开一个编辑工作期。在用 _EdSetPos( ) 设置当前的插入点后，调用 _EdGetPos( ) 检验此例程是否返回了插入点的偏移位置。在使用 _EdSelect( ) 选定文本后，再次调用 _EdGetPos( ) 检验此例程是否已返回定位点的偏移位置。

Visual FoxPro  代码

SET LIBRARY TO EDGETPOS

= EDGETPOS("x")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 6;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDPOS edpos;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, 19);

_PutStr("\n_EdSetPos(wh, 19)");

edpos = _EdGetPos(wh);

_PutStr("\n_EdGetPos(wh) ="); putLong(edpos);

_EdSelect(wh, 5, 12);

_PutStr("\n_EdSelect(wh, 5, 12)");

edpos = _EdGetPos(wh);

_PutStr("\n_EdGetPos(wh) ="); putLong(edpos);

}

FoxInfo myFoxInfo[] = {

{"EDGETPOS", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetChar( ), _EdSetPos( )


_EdGetStr( ) API 库例程

请参阅	示例

把指定的偏移位置上及它们之间的文本存放到给定的地址。

语法

void _EdGetStr(WHANDLE wh, EDPOS thePos, EDPOS thePos,
TEXT *theStr)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDPOS thePos;	/* 偏移起始点。 */
EDPOS thePos;	/* 偏移终止点。 */
TEXT *theStr;	/* 存放文本的地址。 */


下面的示例以文件名作为参数，并返回文件的前 16 字节的内容。

Visual FoxPro  代码

SET LIBRARY TO EDGETSTR

? EDGETSTR("x") && 返回文件‘x’的前 16 个字节。

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

WHANDLE wh;

char FAR *buffer;

char FAR *pFileName;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

_HLock(parm->p[0].val.ev_handle);

pFileName = _HandToPtr(parm->p[0].val.ev_handle);

pFileName[parm->p[0].val.ev_length] = '\0';

wh = _EdOpenFile(pFileName, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

if ((buffer = _Alloca(17)) == 0) {

_Error(182); // “内存不够”

}

_EdGetStr(wh, 0, 15, buffer);

buffer[16] = '\0';

_RetChar(buffer);

}

FoxInfo myFoxInfo[] = {

{"EDGETSTR", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetChar( ), _EdSetPos( )


_EdIndent( ) API 库例程

请参阅	示例

将指定编辑窗口中的选定的文件文本缩进一定数量的制表符。

语法

void _EdIndent(WHANDLE wh, int tabstops)
WHANDLE wh;	/* 编辑窗口的句柄。 */
int tabstops;	/* 制表符的数目。 */

说明

将 tabstops 指定为负数，可以使选定文本造成悬挂缩进的效果。


下面的示例为参数指定的文件打开一个编辑工作期，并使文件的第 13 行和第 15 行各缩进一个制表符。

Visual FoxPro  代码

SET LIBRARY TO EDINDENT

= EDINDENT("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1)) {

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, _EdGetLinePos(wh, 12), _EdGetLinePos(wh, 14));

_EdIndent(wh, 1);

}

FoxInfo myFoxInfo[] = {

{"EDINDENT", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetLineNum( ), _EdGetLinePos( ), _EdGetPos( ), _EdSetPos( )


_EdInsert( ) API 库例程

请参阅	示例

在插入点处插入从 TEXT*地址开始的一定字节数的内容。

语法

void _EdInsert(WHANDLE wh, TEXT *theStr, unsigned long Bytes)
WHANDLE wh;	/* 编辑窗口的句柄。 */
TEXT *theStr;	/* 所插入文本的起始地址。 */
unsigned long Bytes;	/* 要插入的字节数。 */


下面的示例为参数指定的文件打开一个编辑工作期，并在文件中插入一行文本“Hello, word”作为新的第 14 行。

Visual FoxPro  代码

SET LIBRARY TO EDINSERT

= EDINSERT("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1)) {

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\n", _StrLen("Hello, world\n"));

}

FoxInfo myFoxInfo[] = {

{"EDINSERT", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdSetPos( )


_EdLastError( ) API 库例程

请参阅	示例

_EdLastError( ) 返回与指定编辑窗口相关的最近一次编辑器错误的错误编号。

语法

int _EdLastError(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */


下面的示例在执行了一组编辑操作后显示 _EdLastError( ) 返回的错误编号。由于要保留诸如内存不足等严重错误的编号，下面的示例经常显示错误编号 0。

Visual FoxPro  代码

SET LIBRARY TO EDLASTER

= EDLASTERR("x")  && 在对文件‘X’进行操作后显示 EdLastError( )

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

char FAR *pFileName;

WHANDLE wh;

EDENV EdEnv;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

_HLock(parm->p[0].val.ev_handle);

pFileName = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

pFileName[parm->p[0].val.ev_length] = '\0';

wh = _EdOpenFile(pFileName, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

//	位置越过了文件尾

_EdGetEnv(wh, &EdEnv);

_EdSetPos(wh, EdEnv.length + 128);

_PutStr("\n_EdLastError() ="); putLong(_EdLastError(wh));

//	没有选择内容时调用 _EdCopy( )

_EdSetPos(wh, 1);

_EdCopy(wh);

_PutStr("\n_EdLastError() ="); putLong(_EdLastError(wh));

//	没有选择内容时调用 _EdScrollToSel( )

_EdScrollToSel(wh, TRUE);

_PutStr("\n_EdLastError() ="); putLong(_EdLastError(wh));

}

FoxInfo myFoxInfo[] = {

{"EDLASTERR", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetEnv( ), _EdSetEnv( )


_EdOpenFile( ) API 库例程

请参阅	示例

为开始一个编辑工作期，在窗口中打开指定的文件。

语法

WHANDLE _EdOpenFile(TEXT *filename, int mode)
TEXT *filename;	/* 要打开的文件。 */
int mode;	/* 方式选项。 */

说明

可以使用的方式选项有：FO_READONLY，FO_WRITEONLY, 及 RO_READWRITE。


下面的示例为参数指定的文件打开一个编辑工作期。

Visual FoxPro  代码

SET LIBRARY TO EDOPEN

= EDOPEN("x")  && 为文件‘X’打开一个编辑工作期

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"EDOPEN", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdCloseFile( ), _EdRevert( ), _EdSave( )


_EdPaste( ) API 库例程

请参阅	示例

把剪贴板的内容复制到指定编辑窗口的文件插入点处。

语法

void _EdPaste(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */


下面的示例打开并编辑由参数指定的文件，利用 _EdCopy( ) 将第一个字符复制到剪贴板上，然后利用 _EdPaste( ) 将此字符粘贴在第二个字符之后。

Visual FoxPro  代码

SET LIBRARY TO EDPASTE

= EDCOPY("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdCopy(wh);

_EdSetPos(wh, 2);

_EdPaste(wh);

}

FoxInfo myFoxInfo[] = {

{"EDCOPY", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdCopy( ), _EdCut( ), _EdGetPos( ), _EdSelect( ), _EdSetPos( )


_EdPosInView( ) API 库例程

请参阅	示例

语法

int _EdPosInView(WHANDLE wh, EDPOS thePos)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDPOS thePos;	/* 偏移位置。 */

说明

如果指定编辑窗口中文件的偏移位置是可见的，则 _EdPosInView( ) 返回“真”（一个非零整数），否则返回“假”(0)。


下面的示例打开并编辑由参数指定的文件。在滚动到文件头后，示例调用 _EdPosInView( ) 检查文件的头部和尾部是否在视图中，并在屏幕上打印出结果。然后滚动到文件的尾部，并再次调用 _EdPosInView( ) 检查文件的头部和尾部是否在视图中。

Visual FoxPro  代码

SET LIBRARY TO EDPOSINV

= POSINVIEW("x")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdGetEnv(wh, &EdEnv);

_EdScrollToPos(wh, 0, FALSE);

_PutStr("\n_EdScrollToPos(wh, 0)");

_PutStr("\n_EdPosInView(wh, 0) =");

putLong(_EdPosInView(wh, 0));

_PutStr("\n_EdPosInView(wh, EdEnv.length) =");

putLong(_EdPosInView(wh, EdEnv.length));

_EdScrollToPos(wh, EdEnv.length, FALSE);

_PutStr("\n_EdScrollToPos(wh, EdEnv.length)");

_PutStr("\n_EdPosInView(wh, 0) =");

putLong(_EdPosInView(wh, 0));

_PutStr("\n_EdPosInView(wh, EdEnv.length) =");

putLong(_EdPosInView(wh, EdEnv.length));

}

FoxInfo myFoxInfo[] = {

{"POSINVIEW", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( )


_EdRedo( ) API 库例程

请参阅	示例

_EdUndo( ) 在指定的编辑窗口中撤销了若干次文件修改命令之后，此例程可以重新执行最后撤消的一次修改。

语法

void _EdRedo(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */


下面的示例打开并编辑由参数指定的文件。在插入新的一行后，使用 _EdUndo( ) 删除这一新行，然后再利用 _EdUndo( ) 重新插入这一新行。

Visual FoxPro  代码

SET LIBRARY TO EDREDO

= EDREDO("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\n", _StrLen("Hello, world\n"));

_Execute("WAIT WINDOW 'New line inserted.  Press any key to undo.'");

_EdUndo(wh);

_Execute("WAIT WINDOW 'Insertion undone.  Press any key to redo.'");

_EdRedo(wh);

}

FoxInfo myFoxInfo[] = {

{"EDREDO", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdUndo( ), _EdUndoOn( )


_EdRevert( ) API 库例程

请参阅	示例

放弃从最近一次使用 _EdSave( ) 保存指定编辑窗口中显示的文件以来对该文件的所有修改。

语法

void _EdRevert(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。*/


下面的示例打开并编辑由参数指定的文件。先进行一些编辑操作：插入新的一行，缩进两行，并删除两行，然后使用 _EdRevert( ) 放弃这些修改。

Visual FoxPro  代码

SET LIBRARY TO EDREVERT

= EDREVERT("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\r\n", _StrLen("Hello, world\n"));

_EdSelect(wh, _EdGetLinePos(wh, 14), _EdGetLinePos(wh, 16));

_EdIndent(wh, 1);

_EdSelect(wh, _EdGetLinePos(wh, 9), _EdGetLinePos(wh, 12));

_EdDelete(wh);

_EdRevert(wh);

}

FoxInfo myFoxInfo[] = {

{"EDREVERT", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdRedo( ), _EdUndo( ), _EdUndoOn( )


_EdSave( ) API 库例程

请参阅	示例

_EdSave( ) 在不退出编辑状态的情况下保存指定编辑窗口中的文件。

语法

void _EdSave(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。 */


下面的示例打开并编辑由参数指定的文件。示例中插入新的一行，缩进两行，并删除两行。在插入新的一行后，调用 _EdSave( )。然后在缩进与删除操作后，连续三次调用 _EdUndo( ) 试图撤销所有的编辑操作，但无法撤销在调用 _EdSave( ) 之前执行的插入操作。示例接着又继续执行了两个编辑操作：插入两行，再删除两行，并在两个操作之间调用了 _EdSave( )，最后调用 _EdRerert( )，但同样也只能撤销自上一次的 _EdSave( ) 以来所作的更改。

Visual FoxPro  代码

SET LIBRARY TO EDSAVE

= EDSAVE("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\r\n", _StrLen("Hello, world\n"));

_EdSave(wh);

_EdSelect(wh, _EdGetLinePos(wh, 14), _EdGetLinePos(wh, 16));

_EdIndent(wh, 1);

_EdSelect(wh, _EdGetLinePos(wh, 9), _EdGetLinePos(wh, 12));

_EdDelete(wh);

_Execute("WAIT WINDOW 'Press any key to undo changes.'");

_EdUndo(wh);  // 撤销删除操作

_EdUndo(wh);  // 撤销缩进操作

_EdUndo(wh);  // 试图撤销插入操作，但没有成功

_EdSelect(wh, _EdGetLinePos(wh, 14), _EdGetLinePos(wh, 16));

_EdIndent(wh, 1);

_EdSave(wh);

_EdSelect(wh, _EdGetLinePos(wh, 9), _EdGetLinePos(wh, 12));

_EdDelete(wh);

_EdRevert(wh);	// 撤销删除操作

}

FoxInfo myFoxInfo[] = {

{"EDSAVE", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdCloseFile( ), _EdOpenFile( ), _EdRevert( ), _EdSave( )


_EdScrollToPos( ) API 库例程

请参阅	示例

确保在指定编辑窗口中指定的文件偏移位置是可见的。

语法

void _EdScrollToPos(WHANDLE wh, EDPOS thePos, int Center)
WHANDLE wh;	/* 要确保可见的偏移位置。 */
EDPOS thePos;	/* 要使之可见的偏移位置。*/
int Center;	/* 是否在窗口中居中对齐。 */

说明

_EdScrollToPos( ) 并不移动输入点。如果指定 Center 为 TRUE，则在窗口的垂直方向上居中对齐该位置；而 Center 为 FALSE 时，则不在垂直方向上居中对齐该位置。


下面的示例打开并编辑由参数指定的文件。在利用 _EdScrollToPos( ) 滚动到文件头部后，调用 _EdPosInView( ) 检查文件的头部和尾部是否在视图中，并在屏幕上打印出结果。然后再利用 _EdScrollToPos( ) 滚动到文件尾部，并再次调用 _EdPosInView( ) 检查文件的头部和尾部是否在视图中。

Visual FoxPro  代码

SET LIBRARY TO EDSCTOPO

= POSINVIEW("x")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1)) {

_Error(182); // “内存不够”

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdGetEnv(wh, &EdEnv);

_EdScrollToPos(wh, 0, FALSE);

_PutStr("\n_EdScrollToPos(wh, 0)");

_PutStr("\n_EdPosInView(wh, 0) =");

putLong(_EdPosInView(wh, 0));

_PutStr("\n_EdPosInView(wh, EdEnv.length) =");

putLong(_EdPosInView(wh, EdEnv.length));

_EdScrollToPos(wh, EdEnv.length, FALSE);

_PutStr("\n_EdScrollToPos(wh, EdEnv.length)");

_PutStr("\n_EdPosInView(wh, 0) =");

putLong(_EdPosInView(wh, 0));

_PutStr("\n_EdPosInView(wh, EdEnv.length) =");

putLong(_EdPosInView(wh, EdEnv.length));

}

FoxInfo myFoxInfo[] = {

{"POSINVIEW", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdPosInView( )


_EdScrollToSel( ) API 库例程

请参阅	示例

确保指定窗口中选定的文本可见。

语法

void _EdScrollToSel(WHANDLE wh, int Center)
WHANDLE wh;	/* 编辑窗口的句柄。 */
int Center;	/* 是否在窗口中居中对齐。 */

说明

指定 Center 为 TRUE 时，在窗口的垂直方向上居中对齐。而 Center 为 FALSE 时不居中对齐。


下面的示例打开并编辑由参数指定的文件。示例在文件尾部附近执行了选定操作。当用户按某键响应 Visual FoxPro 的 WAIT 命令时，示例调用 _EdScrollToSel( ) 将编辑窗口滚动到选定内容的位置，然后对在文件头部附近的选定内容重复上述操作。

Visual FoxPro  代码

SET LIBRARY TO EDSCTOSE

= TOSEL("x")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READONLY);

_HUnLock(parm->p[0].val.ev_handle);

_EdScrollToPos(wh, 0, TRUE);

_EdGetEnv(wh, &EdEnv);

_EdSelect(wh, EdEnv.length - 16, EdEnv.length);

_PutStr("\nMade selection at end of file.");

_Execute("WAIT WINDOW 'Press any key to scroll to selection.'");

_EdScrollToSel(wh, TRUE);

_EdSelect(wh, 1, 16);

_PutStr("\nMade selection at beginning of file.");

_Execute("WAIT WINDOW 'Press any key to scroll to selection.'");

_EdScrollToSel(wh, TRUE);

}

FoxInfo myFoxInfo[] = {

{"TOSEL", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdSelect( ), _EdSetPos( )


_EdSelect( ) API 库例程

请参阅	示例

在指定编辑窗口中的文件内，选择指定的两个偏移位置之间（包括这两个偏移位置之上）的内容。

语法

void _EdSelect(WHANDLE wh, EDPOS thePos, EDPOS thePos)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDPOS thePos;	/* 选择开始处的偏移位置。 */
EDPOS thePos;	/* 选择结束处的偏移位置。 */


下面的示例打开并编辑由参数指定的文件，使用 _EdSelect( ) 选择文件中的第一个字符，然后使用 _EdCopy( ) 将选定内容复制到剪贴板上，并使用 _EdPaste( ) 将此内容粘贴在第二个字符之后。

Visual FoxPro  代码

SET LIBRARY TO EDSELECT

= EDCOPY("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSelect(wh, 0, 1);

_EdCopy(wh);

_EdSetPos(wh, 2);

_EdPaste(wh);

}

FoxInfo myFoxInfo[] = {

{"EDCOPY", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdCopy( ), _EdCut( ), _EdPaste( )


_EdSendKey( ) API 库例程

请参阅	示例

模拟按键，此键与 charNum 指定的 ASCII 字符编码相关联。

语法

void _EdSendKey(WHANDLE wh, int charNum)
WHANDLE wh;	/* 编辑窗口的句柄。 */
int charNum;	/* 字符编码。 */


下面示例打开并编辑由参数指定的文件。通过调用 _EdSendkey( ) 发送每一个字符插入一行文本“Hello, World”。然后再使用 _EdSendkey( ) 发送回车符与换行符并插入一个 ASCII 的 ESC 字符。注意 ESC 字符并不解释为“放弃编辑工作期”。

Visual FoxPro 代码

SET LIBRARY TO EDSENDKE

= SENDKEY("x")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

//使用 _EdSendKey() 插入一行文本

_EdSetPos(wh, 0);

_EdSendKey(wh, 'H');

_EdSendKey(wh, 'e');

_EdSendKey(wh, 'l');

_EdSendKey(wh, 'l');

_EdSendKey(wh, 'o');

_EdSendKey(wh, ',');

_EdSendKey(wh, ' ');

_EdSendKey(wh, 'W');

_EdSendKey(wh, 'o');

_EdSendKey(wh, 'r');

_EdSendKey(wh, 'l');

_EdSendKey(wh, 'd');

_EdSendKey(wh, '.');

_EdSendKey(wh, 0x0d); //回车

_EdSendKey(wh, 0x0a); //换行符

_EdSendKey(wh, 0x1b); //在文件中插入 esc 字符编码

}

FoxInfo myFoxInfo[] = {

{"SENDKEY", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdInsert( )


_EdSetEnv( ) API 库例程

请参阅	示例

确定编辑器的各种设置值。

语法

void _EdSetEnv(WHANDLE wh, *EDENV theEdEnv)
WHANDLE wh;	/* 编辑窗口的句柄。 */
*EDENV theEdEnv;	/* 编辑器设置。 */

说明

有关 *EDENV 结构的信息，请参阅 _EdGetEnv( ) 。


下面的示例打开并编辑由参数指定的文件。在缩进文件的前两行后，使用 _EdSetEnv( ) 将制表符的大小由 6 个字符更改为 9 个字符。

Visual FoxPro  代码

SET LIBRARY TO EDSETENV

= EDSETENV("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDENV EdEnv;

EDPOS edpos;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdGetEnv(wh, &EdEnv);

_EdSelect(wh, _EdGetLinePos(wh, 1), _EdGetLinePos(wh, 3));

_EdIndent(wh, 1);

_Execute("WAIT WINDOW 'Press any key\

to change tabs to 6 characters.'");

EdEnv.tabWidth = 6;

_EdSetEnv(wh, &EdEnv);

_Execute("WAIT WINDOW 'Press any key \

to change tabs to 9 characters.'");

EdEnv.tabWidth = 9;

_EdSetEnv(wh, &EdEnv);

}

FoxInfo myFoxInfo[] = {

{"EDSETENV", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetEnv( ), _EdLastError( )


_EdSetPos( ) API 库例程

请参阅	示例

将插入点移动到指定编辑窗口中的文件内给定的偏移位置上，并放弃对已选定文本的选择。

语法

void _EdSetPos(WHANDLE wh, EDPOS thePos)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDPOS thePos;	/* 指定的偏移位置。 */


下面的示例打开并编辑由参数指定的文件。使用 _EdSetPos( ) 将插入点放置在文件的位置 19 上。然后调用 _EdGetPos( ) 并插入一些文本以检验插入点的放置。

Visual FoxPro  代码

SET LIBRARY TO EDSETPOS

= EDSETPOS('x')

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 6;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDPOS edpos;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, 19);

_PutStr("\n_EdSetPos(wh, 19)");

edpos = _EdGetPos(wh);

_PutStr("\n_EdGetPos(wh) ="); putLong(edpos);

_EdInsert(wh, "*** Inserted at EDPOS = 19 ***",

_StrLen("*** Inserted at EDPOS = 19 ***"));

}

FoxInfo myFoxInfo[] = {

{"EDSETPOS", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetLineNum( ), _EdGetChar( ), _EdGetPos( )


_EdSkipLines( ) API 库例程

请参阅	示例

将插入点移动到与其当前的偏移位置 thePos 相距 int 行的行首位置上。

语法

EDPOS _EdSkipLines(WHANDLE wh, EDPOS thePos, int offset)
WHANDLE wh;	/* 编辑窗口的句柄。 */
EDPOS thePos;	/* 当前的偏移位置。 */
int offset;	/* 要跳过的行数。 */

说明

可以指定一个正的行数，也可以指定一个负的行数。


下面的示例打开并编辑由参数指定的文件。首先使用 _EdSkipLines( ) 找到偏移位置，然后选择第 3 行和第 4 行。

Visual FoxPro  代码

SET LIBRARY TO EDSKIPLI

= SKIPLINE("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

EDPOS edpos;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

//选择下两行

edpos = _EdSkipLines(wh, 0, 2); //从头部跳过两行

_EdSelect(wh, edpos, _EdSkipLines(wh, edpos, 2));

_Execute("WAIT WINDOW 'Using _EdSkipLines() \

to select lines 3 and 4'");

}

FoxInfo myFoxInfo[] = {

{"SKIPLINE", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdGetPos( ), _EdSetPos( )


_EdUndo( ) API 库例程

请参阅	示例

撤销对指定窗口中文件所做的最近修改。

语法

void _EdUndo(WHANDLE wh)
WHANDLE wh;	/* 编辑窗口的句柄。*/

说明

当用户更改文件时，所作的更改将记录在 undo 缓冲区中。可以多次调用 _EdUndo( ) 从而撤销多个更改。无法撤销在调用 _EdSave( ) 之前所做的更改。


下面的示例打开并编辑由参数指定的文件。在插入新的一行后，又使用 _EdUndo( ) 删除该行，然后再调用 _EdRedo( ) 还原插入的行。

Visual FoxPro  代码

SET LIBRARY TO EDUNDO

= EDREDO("x")

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

pFILENAME[parm->p[0].val.ev_length] = '\0';

_HLock(parm->p[0].val.ev_handle);

wh = _EdOpenFile(pFILENAME, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\n", _StrLen("Hello, world\n"));

_Execute("WAIT WINDOW 'New line inserted.\

Press any key to undo.'");

_EdUndo(wh);

_Execute("WAIT WINDOW 'Insertion undone.  Press any key to redo.'");

_EdRedo(wh);

}

FoxInfo myFoxInfo[] = {

{"EDREDO", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdRedo( ), _EdUndoOn( )


_EdUndoOn( ) API 库例程

请参阅	示例

在使用 _EdUndo( ) 和 _EdRedo( ) 时，允许您将一系列操作组合起来成为单个操作。

语法

void _EdUndoOn(WHANDLE wh, int Grouped)
WHANDLE wh;	/* 窗口句柄。 */
int Grouped;	/* 切换分组。 */

说明

调用 Grouped 参数为 FALSE 的 _EdUndoOn( ) 或发生 _EdUndo( ) 之后的操作不能再组合为单一操作。


下面的显示如何使用 _EdUndoOn( ) 将编辑操作组合起来，从而在使用 _EdUndo( ) 时可以将这些操作成组地撤销。

Visual FoxPro  代码

SET LIBRARY TO EDUNDOON

= EDUNDOON("x")  && 编辑文件"x"

C  代码

#include <pro_ext.h>

#define TRUE	1

#define FALSE	0

FAR Example(ParamBlk FAR *parm)

{

char FAR *pFileName;

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

pFileName = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

pFileName[parm->p[0].val.ev_length] = '\0';

wh = _EdOpenFile(pFileName, FO_READWRITE);

_HUnLock(parm->p[0].val.ev_handle);

_EdUndoOn(wh, TRUE); // Undo 组合开始

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\n", _StrLen("Hello, world\n"));

_EdSelect(wh, _EdGetLinePos(wh, 14), _EdGetLinePos(wh, 16));

_EdIndent(wh, 1);

_EdUndoOn(wh, FALSE); // Undo 组合终止

_EdUndoOn(wh, TRUE); //另一个 Undo 分组开始

_EdSelect(wh, _EdGetLinePos(wh, 9), _EdGetLinePos(wh, 12));

_EdDelete(wh);

_EdSetPos(wh, _EdGetLinePos(wh, 13));

_EdInsert(wh, "Hello, world\n", _StrLen("Hello, world\n"));

_Execute("WAIT WINDOW 'Press any key to undo changes.'");

_EdUndoOn(wh, TRUE); //撤销自 Undo 组合开始的操作。

}

FoxInfo myFoxInfo[] = {

{"EDUNDOON", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_EdRedo( ), _EdUndo( )


_Error( ) API 库例程

请参阅	示例

在运行时根据 code 的值指定的错误向 Visual FoxPro 发出信号。

语法

void _Error(int code)
int code;	/* Visual FoxPro 内部错误编号。 */

说明

参数 code 为某个 Visual FoxPro 内部错误编号，可为正值或负值。_Error( ) 将把控制交给 Visual FoxPro 的错误处理程序使之象其他 Visual Foxpro 错误一样处理此错误。即使用户选择忽略此错误，程序流的控制也不会返回到调用 _Error( ) 的例程。程序将在下一条 Visual FoxPro 语句上恢复执行。

有关错误编号及其意义，请参阅 Visual FoxPro 帮助中的“错误的编号”主题。

附注

不要在事件处理程序中使用 Error( )。


下面的示例在 _DBSkip( ) 返回错误编号时调用 _Error( )。Visual FoxPro 代码将显示如何对 _Error( ) 进行调用。

Visual FoxPro  代码

SET LIBRARY TO ERROR

DO CreateTest

ON ERROR DO expectError

USE

= DBSKIP(1)  &&调用 _Error()：没有使用中的 DBF

USE test

GO TOP

= DBSKIP(-1)

= DBSKIP(-1)	 &&调用 _Error()：已在文件的头部

GO BOTT

= DBSKIP(1)

= DBSKIP(1)  &&调用 _Error()：已在文件的尾部

ON ERROR

PROCEDURE expectError

? "ERROR: " + MESSAGE()

RETURN

PROCEDURE CreateTest

CREATE TABLE test (ABC C(20))

APPEND BLANK

REPLACE ABC WITH "This is record 1"

APPEND BLANK

REPLACE ABC WITH "This is record 2"

APPEND BLANK

REPLACE ABC WITH "This is record 3"

APPEND BLANK

REPLACE ABC WITH "This is record 4"

GO TOP

RETURN

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *pblk)

{

int RetCode;

if ((RetCode = _DBSkip(-1, pblk->p[0].val.ev_long)) < 0) {

_PutStr("\nError encountered in example program.");

_Error(-RetCode);  // _DBSkip() 返回负的错误代码

}

_RetInt(RetCode, 10);

}

FoxInfo myFoxInfo[] = {

{"DBSKIP", (FPFI) Example, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ErrorInfo( ), _UserError( )


_ErrorInfo( ) API 库例程

请参阅	示例

返回与 code 指定的 Visual FoxPro 内部错误编号相对应的外部错误编号。

语法

int _ErrorInfo(int code, char FAR *message)
int code;	/* Visual FoxPro 内部错误编号。 */
char FAR *message;	/* 指向错误消息所在空间的指针。 */

说明

参数 message 是指向 Visual FoxPro 错误信息字符串的指针。如果 message 不是空指针，则 Visual FoxPro 将填充与外部错误编号相关的错误消息文本。


下面的示例显示 _ErrorInfo( ) 返回的信息。

Visual FoxPro  代码

SET LIBRARY TO ERRORINF

= ERRORINFO(0)

= ERRORINFO(1)

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

void FAR ErrorInfo(ParamBlk FAR *parm)

{

int ext;

char FAR *message;

if ((message =_Alloca(128)) == 0)

{

_Error(182); // "内存不够"

}

ext = _ErrorInfo((int) parm->p[0].val.ev_long, message);

_PutChr('\n'); putLong(ext); _PutStr(" "); _PutStr(message);

}

FoxInfo myFoxInfo[] = {

{"ERRORINFO", (FPFI) ErrorInfo, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_Error( ), _UserError( )


_Evaluate( ) API 库例程

请参阅	示例

编译并执行由 expr 指定的 Visual FoxPro 表达式，其结果放置在 res 中。

语法

int _Evaluate(Value FAR *res, char FAR *expr)
Value FAR *res;	/* 结果的地址。 */
char FAR *expr;	/* 表达式。 */

说明

可以指定能够用 Visual FoxPro 的 EVALUATE( ) 函数求值的任何表达式。在求出表达式的值以后，控制常常要返回到紧接着调用 _Evaluate( ) 的语句之后的 C 语句上，求值结果是 Visual FoxPro 的 CANCEL 或 QUIT 的命令除外。

_Evaluate( ) 返回与求表达式的值期间所发生的一个错误相对应的 Visual FoxPro 内部错误编号，当没有错误发生时返回 0。只有当 _Evaluate( ) 返回 0 时 res 的内容才有效。

附注

不要在事件处理程序中调用 _Evaluate( )。


下面的示例具有与 Visual FoxPro 的 EVALUATE( ) 函数相同的功能。

Visual FoxPro  代码

SET LIBRARY TO EVALUATE

? XEVAL("2 + 3")

? XEVAL("'a' + 'b'")

? XEVAL("SIN(PI()/2))")

C  代码

#include <pro_ext.h>

FAR EvaluateEx(ParamBlk FAR *parm)

{

char FAR *expr;

Value result;

//	以 NULL 结尾字符串

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length + 1))

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

expr = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

expr[parm->p[0].val.ev_length] = '\0';

_Evaluate(&result, expr);

_RetVal(&result);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"XEVAL", (FPFI) EvaluateEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_Execute( )


_Execute( ) API 库例程

请参阅	示例

编译并执行在 stmt 中指定的以 NULL 结尾的语句。

语法

int _Execute(char FAR *stmt)
char FAR *stmt;	/* 要执行的语句。 */

说明

参数 stmt 可以是能够在命令窗口中执行的任何命令或函数。语句执行完毕后，控制通常要返回到紧接着调用 _Execute( ) 的语句之后的 C 语句上。例外情况是所执行的代码包含 Visual FoxPro 的 CANCEL 或 QUIT 命令。

_Execute( ) 返回与执行语句期间所发生的错误相对应的 Visual FoxPro 内部错误编号。没有错误发生时返回 0。

附注

不要在事件处理程序中调用 _Execute( )。


下面的示例使用 _Execute( ) 执行所传递的 Visual FoxPro 语句。

Visual FoxPro  代码

SET LIBRARY TO EXECUTE

= EXEC("? 'Hello, world.'")

= EXEC("DISPLAY STATUS")

C  代码

#include <pro_ext.h>

FAR ExecuteEx(ParamBlk FAR *parm)

{

char FAR *cmd;

// 以 NULL 结尾空符串

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

cmd = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

cmd[parm->p[0].val.ev_length] = '\0';

_Execute(cmd);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"EXEC", (FPFI) ExecuteEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_Evaluate( )


_FCHSize( ) API 库例程

请参阅	示例

把指定文件在磁盘上的大小设置为指定长度 length。

语法

int _FCHSize(FCHAN chan, long length)
FCHAN chan;	/* 要更改的文件。 */
long length;	/* 以字节为单位表示的文件的新长度。 */

说明

所指定的长度可能使文件扩展或截断。如果成功地更改了文件的长度，_FCHSize( ) 返回 0，如果失败，_FCHSize( ) 返回 -1。


下面的示例创建了一个文件 TEMP.TXT，并使用 _FCHSize( ) 设置其大小为 8196 字节。

Visual FoxPro  代码

SET LIBRARY TO FCHSIZE

DIR  temp.txt

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan = _FCreate("temp.txt", FC_NORMAL);

_FCHSize(fchan, 8196);

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FCHSIZE", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FGets( ), _FPuts( ), _FWrite( )


_FClose( ) API 库例程

请参阅	示例

终止对文件的访问。

语法

int _FClose(FCHAN chan)
FCHAN chan;	/* 要关闭文件的文件通道。 */

说明

凡在打开以后进行过更改的缓冲区将自动地刷新磁盘。如果文件具有 TEMPORARY 属性，FCLose( ) 将删除该文件。如果成功地关闭文件，_FCLose( ) 返回 0，当关闭失败时返回 -1。


下面的示例创建文件 TEMP.TXT，设置其大小为 8196 字节，并用 _FCLose( ) 关闭文件。

Visual FoxPro  代码

SET LIBRARY TO FCLOSE

DIR temp.txt

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan = _FCreate("temp.txt", FC_NORMAL);

_FCHSize(fchan, 8196);

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FCHSIZE", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FOpen( )


_FCopy( ) API 库例程

请参阅	示例

尝试将源文件 sc 中偏移位置 spos 开始的 len 个字节的内容复制目标文件 dc 中偏移位置 dpos 处。

语法

int _FCopy(FCHAN dc, long dpos, FCHAN sc, long spos, long len)
FCHAN dc;	/* 目标文件的文件通道。 */
long dpos;	/* 复制目标起始点的偏移位置。 */
FCHAN sc;	/* 源文件的文件通道。 */
long spos;	/* 复制源文件起始点的偏移位置。 */
long len;	/* 要复制的字节数。 */

说明

执行成功时 _FCopy( ) 返回“真”（非零值），失败时返回“假”(0)。


下面的示例创建两个文件。在向第一个文件写入文本“Hello，world”后，将把此文件中由第三个字节开始的内容复制到第二个文件中。

Visual FoxPro  代码

SET LIBRARY TO FCOPY

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan1, fchan2;

int len;

fchan1 = _FCreate("temp1.txt", FC_NORMAL);

_FPuts(fchan1, "Hello, world.");

_FFlush(fchan1);

len = _FSeek(fchan1, 0, FS_FROMEOF); //测定文件的长度

fchan2 = _FCreate("temp2.txt", FC_NORMAL);

_FCopy(fchan2, 0, fchan1, 2, len - 2);

_FClose(fchan1);

_FClose(fchan2);

}

FoxInfo myFoxInfo[] = {

{"FCOPY", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FPuts( ), _FWrite( )


_FCreate( ) API 库例程

请参阅	示例

为新建文件指定一个 Visual FoxPro 通道。

语法

FCHAN _FCreate(char FAR *filename, int mode)
char FAR *filename;	/*要创建的文件名称。 */
int mode;	/* 文件属性。 */

说明

如果指定名称的文件已存在，则 _FCreate( ) 把此文件截断为 0 字节。

参数 mode 可以是下列某一个或某几个标志：FC_READONLY、FC_SYSTEM、FC_HIDDEN 及 FC_TEMPORARY。可以使用 C 语言的 | 或 + 操作符将以上标志组合起来。附加标志 FC_NORMAL 说明文件不具有其他属性。调用 _FCLose( ) 关闭文件时，将自动删除具有属性 FC_TEMPORARY 的文件。

成功地创建文件时，_FCreate( ) 返回文件的通道，失败时返回 -1。


下面的示例使用 _FCreate( ) 并选用不同的 mode 标志创建若干文件。

Visual FoxPro  代码

SET LIBRARY TO FCREATE

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

fchan = _FCreate("normal.tmp", FC_NORMAL);

_FClose(fchan);

fchan = _FCreate("readonly.tmp", FC_READONLY);

_FClose(fchan);

fchan = _FCreate("hidden.tmp", FC_HIDDEN);

_FClose(fchan);

fchan = _FCreate("system.tmp", FC_SYSTEM);

_FClose(fchan);

fchan = _FCreate("temp.tmp", FC_TEMPORARY);

_FClose(fchan);

fchan = _FCreate("multi.tmp", FC_SYSTEM | FC_READONLY);

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FCREATE", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FClose( ), _FOpen( )


_FEOF( ) API 库例程

请参阅	示例

语法

int _FEOF(FCHAN chan)
FCHAN chan;	/* 文件的文件通道。 */

说明

如果指定文件的文件指针指向文件尾，_FEOF( ) 返回“真”（非零整数）；如果不是指向文件尾，返回“假”(0)。


下面的示例创建了一个文件，并设置其长度为 8192 字节。然后移动文件指针指向文件开始，并调用 _FEOF( )，该函数返回 0 (“假”)。接着，移动文件指针指向文件尾并再次调用 _FEOF( )，这一次该函数返回 1 (“真”)。

Visual FoxPro  代码

SET LIBRARY TO FEOF

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan = _FCreate("temp.txt", FC_NORMAL);

_FCHSize(fchan, 8196);

_FFlush(fchan);

_FSeek(fchan, 0, FS_FROMBOF);

_PutStr("\n_FSeek(fchan, 0, FS_FROMBOF)");

_PutStr("\n_FEOF(fchan) ="); putLong(_FEOF(fchan));

_FSeek(fchan, 0, FS_FROMEOF);

_PutStr("\n_FSeek(fchan, 0, FS_FROMEOF)");

_PutStr("\n_FEOF(fchan) ="); putLong(_FEOF(fchan));

}

FoxInfo myFoxInfo[] = {

{"FEOF", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FSeek( )


_FError( ) API 库例程

请参阅	示例

返回记录的任何文件通道最近的文件操作错误编号。

语法

int _FError(void any)
void any;	/* 指针。 */


下面的示例使用 _FOpen( ) 尝试打开一个文件名为 NOFILE.ABC 的文件，此文件可能并不存在。然后调用 _FError( )，该函数返回错误编号 2，对应错误“没有找到文件”。

Visual FoxPro  代码

SET LIBRARY TO FERROR

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan = _FOpen("nofile.abc", FC_READONLY);

_PutStr("\nAttempted to _FOpen() a file which does not exist.");

_PutStr("\n_FError() ="); putLong(_FError());

}

FoxInfo myFoxInfo[] = {

{"FERROR", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FClose( ), _FCreate( ), _FOpen( )


_FFlush( ) API 库例程

请参阅	示例

把内存中指定文件所有已做修改的缓冲区内容刷新到磁盘上。

语法

int _FFlush(FCHAN chan)
FCHAN chan;	/* 要刷新的文件的文件通道。 */

说明

如果成功地刷新了缓冲区, _FFlush( ) 返回 0，失败时返回 -1。


下面的示例创建一个文件并设置其长度为 8196 字节。在命令窗口中执行 Visual FoxPro 的命令行 DIR TEMP.TXT，显示在磁盘上文件的大小为 0。然而，在执行 =XFFLUSH( ) 后再发出命令行 DIR TEMP.TXT，显示磁盘上的该文件已受到_FCHSize( ) 调用的影响，文件大小为 8196 字节。

Visual FoxPro  代码

SET LIBRARY TO FFLUSH

DIR temp.txt  && 磁盘上大小仍为 O

WAIT WINDOW "File Size = 0"

= XFFLUSH()

DIR temp.txt  && 磁盘上大小为 8196

WAIT WINDOW "File Size Does Not Equal 0"

CLOSE ALL

C  代码

#include <pro_ext.h>

static FCHAN fchan;

FAR CreateIt(ParamBlk FAR *parm)

{

fchan = _FCreate("temp.txt", FC_NORMAL);

_FCHSize(fchan, 8196);

}

FAR FFlushEx(ParamBlk FAR *parm)

{

_FFlush(fchan);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) CreateIt, CALLONLOAD, ""},

{"XFFLUSH", (FPFI) FFlushEx, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FPuts( ), _FWrite( )


_FGets( ) API 库例程

请参阅	示例

把指定文件中由当前位置开始的一行内容复制到缓冲区中。

语法

int _FGets(FCHAN chan, char FAR *buffer, int maxlen)
FCHAN chan;	/* 要从中复制内容的文件的文件通道。 */
char FAR *buffer;	/* 缓冲区地址。 */
int maxlen;	/* 以字节为单位的一行的最大长度。 */

说明

_FGets( ) 复制以回车符分隔的长度为 maxlen 的一行。回车符将转换为 null 结束符并存储在缓冲区中。换行符将被忽略并不能复制到缓冲区中。_FGets( ) 返回复制到缓冲区中的字节数。


下面的示例打开由参数指定的文件，并复制和显示文件中的每一行。

Visual FoxPro  代码

SET LIBRARY TO FGETS

fc = FCREATE("x", 0)

= FPUTS(fc, REPL("X", 512), 512)

= FCLOSE(fc)

= XFGETS("x")

DELETE FILE x

C  代码

#include <pro_ext.h>

#define BUFFSIZE 256

static char lineBuffer[BUFFSIZE];

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

//	以 Null 结尾的文件名

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

[parm->p[0].val.ev_length] = '\0';

if ((fchan=_FOpen((char FAR*)_HandToPtr(parm->p[0].val.ev_handle),

FC_NORMAL)) < 0)

{

_UserError("Could not open file.");

}

_HUnLock(parm->p[0].val.ev_handle);

while (!_FEOF(fchan))

{

_FGets(fchan, lineBuffer, BUFFSIZE);

_PutStr(lineBuffer); _PutChr('\n');

}

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"XFGETS", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FRead( ), _FSeek( )


_FindMemo( ) API 库例程

请参阅	示例

返回选定工作区中当前记录的备注字段 fld 中第一个字符的内存地址。

语法

long _FindMemo(Locator FAR *fld)
Locator FAR *fld;	/* 备注字段名。 */

说明

_FindMemo( ) 使您可以直接访问当前记录备注字段中的内容。如果当前记录的备注字段为空，或 fld 不是字段名，_FindMemo( ) 返回一个负整数，其绝对值是 Visual FoxPro 的一个错误编号。


下面的示例检索当前记录备注字段中的内容。_FindMemo( ) 在备注文件中找到当前记录中备注字段内容的位置。然后使用 _FSeek( ) 将文件指针移动到这个位置，并使用 _FRead (_MemoSize( )) 将备注字段的内存储在内存中。

Visual FoxPro  代码

SET LIBRARY TO FINDMEMO

CREATE TABLE WMemo (MemoField M)

APPEND BLANK

REPLACE MemoField WITH "Hello, World."

? GETMEMO(@MemoField)

C  代码

#include <pro_ext.h>

FAR FindMemoEx(ParamBlk FAR *parm)

{

Locator FAR *memoFldLoc;

FCHAN fchMemo;

char FAR *memoContents;

int memoLen;

long loc;

if ((fchMemo = _MemoChan(-1)) == -1)

{

_UserError("_MemoChan() failed");

}

memoFldLoc = &parm->p[0].loc;

if ((loc = _FindMemo(memoFldLoc)) < 0)

{

_UserError("_FindMemo() failed");

}

if ((memoLen = _MemoSize(memoFldLoc)) < 0)

{

_UserError("_MemoSize() failed");

}

if ((memoContents = _Alloca(memoLen + 1)) == 0)

{

_Error(182); // "内存不够"

}

_FSeek(fchMemo, loc, FS_FROMBOF);

_FRead(fchMemo, memoContents, memoLen);

memoContents[memoLen] = '\0';

_RetChar(memoContents);

}

FoxInfo myFoxInfo[] = {

{"GETMEMO", (FPFI) FindMemoEx, 1, "R"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocMemo( ), _DBReplace( ), _MemoChan( ), _MemoSize( )


_FindVar( ) API 库例程

请参阅	示例

提供一种初始化定位器的途径，使您可以使用 _Store( ) 将数据放置在已存在的内存变量或字段中。

语法

int _FindVar(NTI nti, int where, Locator FAR *loc)
NTI nti;	/* 变量或字段的 NTI 编号。 */
int where;	/* 工作区编号。 */
Locator FAR *loc;	/* 定位器。 */

说明

_FindVar( ) 使用信息填充传递的“定位器”，这些信息是由 where 指定的工作区中存在的称为 nti 的变量或字段的有关信息。

 •	   当 where 等于 -1 时，假定 nti 是一个内存变量。

 •	   如果在 FoxPro for MS-DOS 标准版本中，where 取值为 1 - 25 中的某个值，或在 FoxPro for Windows 以及 FoxPro for MS DOS 扩展版本中 where 取值为 1 - 225 中的某个值，则 nti 被假定为指定编号工作区中的字段。

 •	   如果 where 等于 0，则 _FindVar( ) 将检查 nti 是否是一个内存变量。如果不是内存变量，则在当前工作区查找具有指定 NTI 的字段。

如果在 where 中能够找到变量 nti 或字段 nti，_FindVar( ) 返回“真”（非零整数），否则，_FindVar 返回“假”(0)。


下面的示例以一种间接的方式显示 Visual FoxPro 的变量值。

Visual FoxPro  代码

SET LIBRARY TO FINDVAR

TestVar= "This is a test"

= QMARK("TestVar")

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR NameTableIndexEx(ParamBlk FAR *parm)

{

NTI nti;

char FAR *name;

Locator loc;

Value val;

//	变量名是以 NULL 结尾的字符串

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

name = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

name[parm->p[0].val.ev_length] = '\0';

nti = _NameTableIndex(name);

_FindVar(nti, 0, &loc);

_Load(&loc, &val);

_PutValue(&val);

}

FoxInfo myFoxInfo[] = {

{"QMARK", (FPFI) NameTableIndexEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ALen( ), _Load( ), _NameTableIndex( ), _NewVar( ), _Release( ), _Store( )


_FindWindow( ) API 库例程

请参阅	示例

把屏幕上的点 pt 所在窗口的句柄放置在 wh 中。

语法

int _FindWindow(WHANDLE FAR *wh, Point pt)
WHANDLE FAR *wh;	/* 指向窗口句柄的指针。 */
Point pt;	/* 点。 */

说明

_FindWindow( ) 返回一个整型值，指明该点定位在窗口的哪一部分中。例如，如果该点在窗口中，FindWindow( ) 的返回值为 inContent。

下表列出的是在 PRO_EXT.H 中定义的可能的返回值。

_FindWindow( ) 的返回值

值	点的位置
inBorder	在窗口的边框内
inHelp	在帮助区
inContent	在内容/文本区
inDrag	在标题栏上
inGrow	在“大小控制”区中
inGoAway	在“关闭”框中
inZoom	在“缩放控制”区中
inVUpArrow	在垂直滚动条的向上箭头上
inVDownArrow	在垂直滚动条的向下箭头上
inVPageUp	在垂直滚动条的“向后换页”区内
inVPageDown	在垂直滚动条的“向前换页”区内
inVThumb	在垂直滚动条的滚动框内
inHUpArrow	在水平滚动条的向右箭头上
inHDownArrow	在水平滚动条的向左箭头上
inHPageUp	在水平滚动条的“向右换页”区内
inHPageDown	在水平滚动条的“向左换页”区内
inHThumb	在水平条的滚动框内
inMenuBar	在菜单栏上


下面的示例等待单击鼠标左键，然后使用 _FindWindow( ) 得到鼠标所在窗口的句柄。

Visual FoxPro  代码

WAIT WINDOW  "Click mouse on a window" NOWAIT

SET LIBRARY TO FINDWIND

C  代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR FindWindowEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point mousePos;

int where;

//得到按下左键 时鼠标所在位置

while (_InKey(0, MOUSEACTIVE | HIDECURSOR) != 151);

while (!_MousePos(&mousePos));

switch (where = _FindWindow(&wh, mousePos))

{

case inBorder:

_PutStr("\nMouse down inBorder"); break;

case inHelp:

_PutStr("\nMouse down inHelp"); break;

case inContent:

_PutStr("\nMouse down inContent"); break;

case inDrag:

_PutStr("\nMouse down inDrag"); break;

case inGrow:

_PutStr("\nMouse down inGrow"); break;

case inGoAway:

_PutStr("\nMouse down inGoAway"); break;

case inZoom:

_PutStr("\nMouse down inZoom"); break;

case inVUpArrow:

_PutStr("\nMouse down inVUpArrow"); break;

case inVDownArrow:

_PutStr("\nMouse down inVDownArrow"); break;

case inVPageUp:

_PutStr("\nMouse down inVPageUp"); break;

case inVPageDown:

_PutStr("\nMouse down inVPageDown"); break;

case inVThumb:

_PutStr("\nMouse down inVThumb"); break;

case inHUpArrow:

_PutStr("\nMouse down inHUpArrow"); break;

case inHDownArrow:

_PutStr("\nMouse down inHDownArrow"); break;

case inHPageUp:

_PutStr("\nMouse down inHPageUp"); break;

case inHPageDown:

_PutStr("\nMouse down inHPageDown"); break;

case inHThumb:

_PutStr("\nMouse down inHThumb"); break;

case inMenuBar:

_PutStr("\nMouse down inMenuBar"); break;

default:

_PutStr("\nMouse down someplace else"); break;

}

_GlobalToLocal(&mousePos, wh);

_PutStr("\nPosition relative to window:");

putLong(mousePos.v, 5);

_PutChr(' ');

putLong(mousePos.h, 5);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) FindWindowEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_MousePos( )


_FindWindowP( ) API 库例程

请参阅	示例

将屏幕上点 pt 所在窗口的句柄放置在 wh 中。

语法

int _FindWindowP(WHANDLE FAR *wh, Point pt)
WHANDLE FAR *wh;	/* 指向窗口句柄的指针。 */
Point pt;	/* 以象素为单位指定的点。 */

说明

在 FoxPro for MS-DOS 的专业级版本中不可用。

_FindWindowP( ) 返回一个整数值，说明该点定位在窗口的哪一部分中。有关可能的返回值的信息，请参阅 _FindWindow( ) 。


下面的示例等待单击鼠标左键，然后使用 _FindWindowP( ) 得到鼠标所在窗口的句柄。

Visual FoxPro  代码

WAIT WINDOW "Click Mouse In Window" NOWAIT

SET LIBRARY TO FINDWINP

C  代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR FindWindowEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point mousePos;

int where;

//得到按下左键时鼠标所在位置

while (_InKey(0, MOUSEACTIVE | HIDECURSOR) != 151);

while (!_MousePosP(&mousePos));

switch (where = _FindWindowP(&wh, mousePos))

{

case inBorder:

_PutStr("\nMouse down inBorder"); break;

case inHelp:

_PutStr("\nMouse down inHelp"); break;

case inContent:

_PutStr("\nMouse down inContent"); break;

case inDrag:

_PutStr("\nMouse down inDrag"); break;

case inGrow:

_PutStr("\nMouse down inGrow"); break;

case inGoAway:

_PutStr("\nMouse down inGoAway"); break;

case inZoom:

_PutStr("\nMouse down inZoom"); break;

case inVUpArrow:

_PutStr("\nMouse down inVUpArrow"); break;

case inVDownArrow:

_PutStr("\nMouse down inVDownArrow"); break;

case inVPageUp:

_PutStr("\nMouse down inVPageUp"); break;

case inVPageDown:

_PutStr("\nMouse down inVPageDown"); break;

case inVThumb:

_PutStr("\nMouse down inVThumb"); break;

case inHUpArrow:

_PutStr("\nMouse down inHUpArrow"); break;

case inHDownArrow:

_PutStr("\nMouse down inHDownArrow"); break;

case inHPageUp:

_PutStr("\nMouse down inHPageUp"); break;

case inHPageDown:

_PutStr("\nMouse down inHPageDown"); break;

case inHThumb:

_PutStr("\nMouse down inHThumb"); break;

case inMenuBar:

_PutStr("\nMouse down inMenuBar"); break;

default:

_PutStr("\nMouse down someplace else"); break;

}

_GlobalToLocalP(&mousePos, wh);

_PutStr("\nPosition relative to window:");

putLong(mousePos.v, 5);

_PutChr(' ');

putLong(mousePos.h, 5);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", FindWindowEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindWindow( ), _MousePos( )


_FOpen( ) API 库例程

请参阅	示例

为一个已存在的文件指定文件通道。

语法

FCHAN _FOpen(char FAR *filename, int mode)
char FAR *filename;	/* 已存在文件的名称。*/
int mode;	/* 方式选项。 */

说明

有下列 mode 选项可用：FO_READONLY、FO_WRITEONLY 以及 FO_READWRITE。_FOpen( ) 以独占访问方式打开文件。如果成功地打开文件，则 _FOpen( ) 返回文件的文件通道，不能打开文件时返回 -1。


下面的示例创建一个测试文件。然后选用 FO_READONLY 方式打开文件，并尝试写文件。其结果是 _FError( ) 返回 5，对应错误“访问被拒绝”。接着再选用 FO_WRITEONLY 方式打开测试文件并尝试该文件。_FError( ) 同样返回 5。

Visual FoxPro  代码

SET LIBRARY TO FOPEN

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

#define BUFFSIZE 256

static char lineBuffer[BUFFSIZE];

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

fchan = _FCreate("temp.tmp", FC_NORMAL);

_FCHSize(fchan, 8192);

_FClose(fchan);

fchan = _FOpen("temp.tmp", FO_READONLY);

_FPuts(fchan, "Hello, world");

_PutStr("\nAttempt to _FPuts() to file _FOpen()d FO_READONLY");

_PutStr("\n_FError() ="); putLong(_FError());

_FClose(fchan);

fchan = _FOpen("temp.tmp", FO_WRITEONLY);

_FGets(fchan, lineBuffer, BUFFSIZE);

_PutStr("\nAttempt to _FGets() from file _FOpen()d FO_WRITEONLY");

_PutStr("\n_FError() ="); putLong(_FError());

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FOPEN", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FClose( ), _FCreate( )


_FPuts( ) API 库例程

请参阅	示例

向文件中写入指定的以 NULL 结尾，并后跟一个回车符/换行符对的字符串。

语法

int _FPuts(FCHAN chan, char FAR *buffer)
FCHAN chan;	/* 要写入的文件的文件通道。 */
char FAR *buffer;	/* 要写入的字符 */

说明

_FPuts( ) 返回写入文件的字节总数。


下面的示例创建一个文件，并使用 _FPuts( ) 向文件中写入文本“Hello, world”。

Visual FoxPro  代码

SET LIBRARY TO FPUTS

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

fchan = _FCreate("temp.tmp", FC_NORMAL);

_FPuts(fchan, "Hello, world.");

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FPUTS", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FFlush( ), _FSeek( ), _FWrite( )


_FRead( ) API 库例程

请参阅	示例

从文件中把恰好 length 个字节的内容复制到缓冲区 buffer 中。

语法

int _FRead(FCHAN chan, char FAR *buffer, int length)
FCHAN chan;	/* 从中复制内容的文件的文件通道。 */
char FAR *buffer;	/* 缓冲区的地址。 */
int length;	/* 要复制的字节数。 */

说明

_FRead( ) 并不在缓冲区中字节的末尾添加结束符。各字节存入缓冲区时也不执行任何的转换操作。_FRead( ) 返回所读的字节数。


下面的示例创建一个测试文件，并在其中放入文本。然后尝试使用 _FRead( ) 从文件中读出 32 个字节。

Visual FoxPro  代码

SET LIBRARY TO FREAD

C  代码

#include <pro_ext.h>

#define BUFFSIZE 32

static char buffer[BUFFSIZE];

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

int bytesRead;

fchan = _FCreate("temp.tmp", FC_NORMAL);

_FPuts(fchan, "Hello, world.");

_FPuts(fchan, "Hello, world.");

_FPuts(fchan, "Hello, world.");

_FPuts(fchan, "Hello, world.");

_FPuts(fchan, "Hello, world.");

_FSeek(fchan, 0, FS_FROMBOF);

bytesRead = _FRead(fchan, buffer, BUFFSIZE - 1);

buffer[bytesRead] = '\0';

_PutStr(buffer);

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FREAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FGets( ), _FSeek( )


_FreeHand( ) API 库例程

请参阅	示例

释放先前采用 _ALLocHand( ) 等方式分配的内存句柄 hand。

语法

void _FreeHand(MHANDLE hand)
MHANDLE hand;	/* 内存句柄。 */


下面的示例先后共分配了1024 个内存块，其中每个内存块为 16384 字节，因而共有 16 MB，每次在分配下一个内存块之前，都使用 _Freehand( ) 释放一个内存块。

Visual FoxPro  代码

SET LIBRARY TO FREEHAND

C  代码

#include <pro_ext.h>

void FAR Example(ParamBlk FAR *parm)

{

MHANDLE mh;

int i;

for (i = 0; i < 1024; i++)

{

if ((mh = _AllocHand(16384)) == 0)

{

_Error(182);  // "内存不够"

}

_FreeHand(mh);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _GetHandSize( ), _HandToPtr( ), _HLock( ), _HUnLock( ), _MemAvail( ), _SetHandSize( )


_FreeObject( )
_FreeObject( ) API 库例程

请参阅

从 Visual FoxPro API 数据池中释放一个对象。

语法

int _FreeObject(Value FAR *objct)

说明

可使用 _FreeObject( ) 从 Visual FoxPro API 对象表中释放一个对象。

_FreeObject( ) 可用于下列情况：

1.	如果一个对象引用是由 Visual FoxPro API 函数返回的（例如， _Evaluate( ) 或 _GetObjectProperty( )），则必须在不再使用该对象时，用 _FreeObject( ) 释放它。

2.如果您为不同的 Visual FoxPro API 调用保存了一个对象的引用，那么必须首先使用 _ObjectReference( ) 增加对象的计数值。当您不再使用该对象时，必须使用 _ObjectRelease( ) 减小对象的计数值，然后使用 _FreeObject( ) 释放该对象。

除了前面的规则以外，您必须对任何要返回一个值给 Value 结构的 Visual FoxPro API 函数首先清理该 Value 结构。例如，您可以创建一个函数，并在调用任何要返回一个值给该结构的函数之前，调用此函数以清理该结构。也可以创建一个函数并调用该函数以清除任何对象引用或不用的句柄。


请参阅

_ObjectReference( ), _ObjectRelease( )


_FSeek( ) API 库例程

请参阅	示例

将文件指针移动到由 position 和 mode 指定的新位置上。

语法

long _FSeek(FCHAN chan, long position, int mode)
FCHAN chan;	/* 文件通道。 */
long position;	/* 文件中的位置。 */
int mode;	/* 如何确定新位置。*/

说明

如果 mode 等于 0 （绝对位置），则把文件指针设置为等于 position 的值。如果 mode 等于 1 （相对于文件指针），则新位置等于文件指针的当前位置加上 position 的值。如果 mode 等于 2 （相对于文件尾），_Fseek( ) 将移动文件指针跳过文件尾。_FSeek( ) 返回文件指针的新位置。例如，_FSeek(chan, 0L, 2) 将把文件指针移动到文件尾并返回以字节为单位的文件长度。


下面的示例由一个 API 例程组成，此例程的两个参数分别为文件名和一个整数。打开文件后，使用 FSeek( ) 并选用 FS_FROMBOF 标志，然后将指针移动到由整型参数指定的偏移位置上，并从文件的这个位置上读一个字节。

Visual FoxPro  代码

SET LIBRARY TO FSEEK

fc = FCREATE("x", 0)

= FPUTS(fc, "abcdefghijklmnopqrstuvwxyz", 26)

= FCLOSE(fc)

? XFSEEK("x", 2)  && 将文件 X 的第三个字节当作整数显示

? XFSEEK("x", 4)  && 将文件 X 的第五个字节当作整数显示

DELETE FILE x

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

char x;

// 以 NULL 结尾的文件名

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

[parm->p[0].val.ev_length] = '\0';

if ((fchan=_FOpen((char FAR*)_HandToPtr(parm->p[0].val.ev_handle),

FC_NORMAL)) < 0)

{

_UserError("Could not open file.");

}

_HUnLock(parm->p[0].val.ev_handle);

_FSeek(fchan, parm->p[1].val.ev_long, FS_FROMBOF);

_FRead(fchan, &x, 1);

_RetInt(x, 10);

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"XFSEEK", (FPFI) Example, 2, "C,I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FCopy( ), _FFlush( ), _FGets( ), _FPuts( )


_FWrite( ) API 库例程

请参阅	示例

把缓冲区 buffer 中恰好 length 个字节的内容写入由 chan 指定的文件中。

语法

int _FWrite(FCHAN chan, char FAR *buffer, int length)
FCHAN chan;	/* 要写入的文件的文件通道。 */
char FAR *buffer;	/* 缓冲区的地址。 */
int length;	/* 要写入的字节数。 */

说明

_FWrite( ) 并不在文件中添加结束符。在字节写入之前，也不对字节执行转换操作。_FWrite( ) 返回写入的字节数。


下面的示例创建一个测试文件并使用 _FWrite( ) 向文件中写入一些数据。

Visual FoxPro  代码

SET LIBRARY TO FWRITE

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

FCHAN fchan;

fchan = _FCreate("temp.tmp", FC_NORMAL);

_FWrite(fchan, "Hello, world.", _StrLen("Hello, world."));

_FWrite(fchan, "\xd\xa", 2);

_FWrite(fchan, "1234567890", 10);

_FClose(fchan);

}

FoxInfo myFoxInfo[] = {

{"FWRITE", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FFlush( ), _FPuts( ), _FSeek( )


_GetAPIHandle( ) API 库例程

示例

返回当前 FLL 的句柄。

语法

void _GetAPIHandle( )


下面的示例返回当前 FLL 的句柄。

Visual FoxPro  代码

SET LIBR TO GETAPIHA.FLL

? GETAPIHAND( )

C  代码

#include <pro_ext.h>

void getAPIHandle()

{

_RetInt((int) _GetAPIHandle(),15);

}

FoxInfo myFoxInfo[] =

{

{"GETAPIHAND",  (FPFI) getAPIHandle, 0, ""},

};

FoxTable _FoxTable =

{

(FoxTable  *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


_GetHandSize( ) API 库例程

请参阅	示例

返回与指定的内存块句柄 hand 相关联的可用字节数。

语法

unsigned int _GetHandSize(MHANDLE hand)
MHANDLE hand;	/* 内存块句柄。 */

说明

可用字节数总是大于或等于成功调用 _ALLocHand( ) 或 _SetHandSize( ) 为这个 MHANDLE 最近一次申请的字节数。

附注

_GetHandSize( ) 不重新组织内存。


下面的示例先分配从 1 到 215 字节的各种大小的内存块，并显示 _GetHandSize( ) 对于各种分配的返回值。注意，_GetHandSize( ) 的返回值与 _AllocHand( ) 申请的大小只是有时完全相符，通常情况下，前者要大一些。

Visual FoxPro  代码

SET LIBRARY TO GETHANDS

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 5;

_PutValue(&val);

}

void FAR Example(ParamBlk FAR *parm)

{

MHANDLE mh;

unsigned int allocSize;

for (allocSize = 1;; allocSize *= 2)

{

if ((mh = _AllocHand(allocSize)) == 0)

{

_Error(182);  // "内存不够"

}

_PutStr("\n_AllocHand("); putLong(allocSize); _PutStr(")");

_PutStr("\n_GetHandSize() ="); putLong(_GetHandSize(mh));

_FreeHand(mh);

if (allocSize == 32768)

{

break;

}

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _FreeHand( ), _HandToPtr( ), _HLock( ), _HUnLock( ), _MemAvail( ), _SetHandSize( )


_GetItemCmdKey( ) API 库例程

请参阅	示例

把指定菜单项上显示的键盘快捷键字符串复制到由参数 text 指向的缓冲区中。

语法

int _GetItemCmdKey(MENUID menuid, ITEMID itemid, char FAR *text)
MENUID menuid;	/* 菜单标识符。 */
ITEMID itemid;	/* 菜单项标识符。 */
char FAR *text;	/* 保存快捷键字符串的地址。 */

说明

_GetItemCmdKey( ) 返回键盘快捷键的内部键盘码。如果指定的菜单项没有键盘快捷键，_GetItemCmdKey( ) 返回 0。


下面的示例创建一个包含三个菜单项的菜单，并为每一个菜单项设置键盘快捷键。然后使用 _GetItemCmdKey( ) 显示各个快捷键。

Visual FoxPro  代码

SET LIBRARY TO GETICMDK

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetItemCmdKeyEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

char FAR *shortcutString;

int intKeyCode;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

_SetItemCmdKey(menuId, itemId, altKey | 0x78, "Alt+1");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

_SetItemCmdKey(menuId, itemId, altKey | 0x79, "Alt+2");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

_SetItemCmdKey(menuId, itemId, altKey | 0x7a, "Alt+3");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

if ((shortcutString = _Alloca(64)) == 0)

{

_DisposeMenu(menuId);

_Error(182); // "内存不够"

}

intKeyCode = _GetItemCmdKey(menuId, _GetItemId(menuId, 0),

shortcutString);

_PutStr("\nShortcut string = "); _PutStr(shortcutString);

_PutStr("\nInternal key code ="); putLong(intKeyCode);

intKeyCode = _GetItemCmdKey(menuId, _GetItemId(menuId, 1),

shortcutString);

_PutStr("\nShortcut string = "); _PutStr(shortcutString);

_PutStr("\nInternal key code ="); putLong(intKeyCode);

intKeyCode = _GetItemCmdKey(menuId, _GetItemId(menuId, 2),

shortcutString);

_PutStr("\nShortcut string = "); _PutStr(shortcutString);

_PutStr("\nInternal key code ="); putLong(intKeyCode);

_Execute("WAIT");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetItemCmdKeyEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemSubMenu( ), _NewItem( ), _SetItemCmdKey( )


_GetItemId( ) API 库例程

请参阅	示例

返回指定菜单上指定项的菜单项标识符。

语法

ITEMID _GetItemId(MENUID menuid, long index)
MENUID menuid;	/* 菜单标识符。 */
long index;	/* 菜单项编号。 */

说明

可以使用 _GetItemId( ) 收集菜单栏或菜单标识符，从而对所有菜单项执行同一操作。当 index 超过了菜单上菜单项的数目时，_GetItemId( ) 返回 0。


下面的示例创建一个包含三个菜单项的菜单。然后使用 _GetItemId( ) 得到每个菜单项的 ITEMID。在从菜单上删除一个菜单项，您会发现 ITEMID 并不总是等于该项的索引。

Visual FoxPro  代码

SET LIBRARY TO GETIID

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetItemIdEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_PutStr("\nitemid for index 0 ="); putLong(_GetItemId(menuId, 0));

_PutStr("\nitemid for index 1 ="); putLong(_GetItemId(menuId, 1));

_PutStr("\nitemid for index 2 ="); putLong(_GetItemId(menuId, 2));

_Execute("WAIT WINDOW");

_DisposeItem(menuId, _GetItemId(menuId, 1));

_PutStr("\nitemid for index 0 ="); putLong(_GetItemId(menuId, 0));

_PutStr("\nitemid for index 1 ="); putLong(_GetItemId(menuId, 1));

_Execute("WAIT WINDOW");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetItemIdEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemSubMenu( ), _GetNewItemId( )


_GetItemSubMenu( ) API 库例程

请参阅	示例

返回父菜单项指定的子菜单中的菜单项标识符。

语法

MENUID _GetItemSubMenu(MENUID menuid, ITEMID itemid);
MENUID menuid;	/*菜单标识符。 */
ITEMID itemid;	/*菜单项标识符。*/

说明

仅用于 Visual FoxPro 专业级版本。

子菜单作为一个独立的菜单对待。_GetItemSubMenu( ) 返回为指定菜单项分配的子菜单的 MENUID，如果没有为该菜单项指定子菜单，_GetItemSubMenu( ) 返回 -1。


下面的示例创建一个菜单系统，并返回子菜单 ID。

Visual FoxPro  代码

SET LIBRARY TO GETITEMS

C  代码

#include <pro_ext.h>

MENUID SysMenuId, retMenuId;

MENUID PopupId;

ITEMID PadId;

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

}

void FAR StartUp()

{

ITEMID Bar1Id;

ITEMID Bar2Id;

        int Error;

//

//	在 SYSMENU 中添加新的菜单标题。

//

    SysMenuId = _MenuId(_SYSMENU);

    PadId = _GetNewItemId(SysMenuId);

if (_NewItem(SysMenuId, PadId, _LASTITEM, "\\<Added menu title"))

    {

        _Error(623); /* " " 无法定义菜单项。 */

    }

//

//	定义菜单。

//

    PopupId = _GetNewMenuId();

    if (Error = _NewMenu(MPOPUP, PopupId))

    {

        _Error(-Error);

    }

Bar1Id = _GetNewItemId(PopupId);

//

//	警告：在调用另一个 _GetNewItemId() 之前调用 _NewItem()。

//

if (_NewItem(PopupId, Bar1Id, _LASTITEM, "\\<1st item"))

    {

        _Error(623); /* “无法定义菜单项。” */

    }

Bar2Id = _GetNewItemId(PopupId);

if (_NewItem(PopupId, Bar2Id, _LASTITEM, "\\<2nd item"))

    {

        _Error(623); /* “无法定义菜单项。” */

    }

//

//	在菜单标题下附加菜单。

//

    _SetItemSubMenu(SysMenuId, PadId, PopupId);

    _PutStr("\nSubMenu Id = "); putLong(PopupId);

//

// 设置选择操作。

//

retMenuId = _GetItemSubMenu(SysMenuId,PadId);

_PutStr("\nThis is the return value from  _GetItemSubMenu.  retMenuId = "); putLong(retMenuId);

_OnSelection(PopupId, -1, onSelection);

}

void FAR ShutDown()

{

    _DisposeItem(SysMenuId, PadId);

    _DisposeMenu(PopupId);

}

FoxInfo myFoxInfo[] =

{

{"STARTUP",     (FPFI) StartUp,    CALLONLOAD,   ""},

{"SHUTDOWN",    (FPFI) ShutDown,   CALLONUNLOAD, ""},

};

FoxTable _FoxTable =

{

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemId( ), _NewItem( ), _SetItemText( )


_GetItemText( ) API 库例程

请参阅	示例

把菜单栏文本或菜单标题文本复制到 text 指向的缓冲区中。

语法

void _GetItemText(MENUID menuid, ITEMID itemid, char FAR *text)
MENUID menuid;	/* 菜单标识符。 */
ITEMID itemid;	/* 菜单项标识符。 */
char FAR *text;	/* 存储文本的缓冲区地址。 */

说明

缓冲区必须至少有 80 个字节长。


下面的示例创建一个包含三个菜单项的菜单，并用 _GetItemText( ) 检索各菜单项的文本。

Visual FoxPro  代码

SET LIBRARY TO GETITEXT

C  代码

#include <pro_ext.h>

FAR GetItemTextEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

char FAR *itemText;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

if ((itemText = _Alloca(80)) == 0)

{

_Error(182); // "内存不够"

}

_GetItemText(menuId, _GetItemId(menuId, 0), itemText);

_PutStr("\nItem text of 1st item = "); _PutStr(itemText);

_GetItemText(menuId, _GetItemId(menuId, 1), itemText);

_PutStr("\nItem text of 2nd item = "); _PutStr(itemText);

_GetItemText(menuId, _GetItemId(menuId, 2), itemText);

_PutStr("\nItem text of 3rd item = "); _PutStr(itemText);

_Execute("WAIT WINDOW");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetItemTextEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemSubMenu( ), _NewItem( ), _SetItemText( )


_GetNewItemId( ) API 库例程

请参阅	示例

返回一个标识符，该标识符当前可用作指定菜单上某一菜单项的标识符。

语法

ITEMID _GetNewItemId(MENUID menuid)
MENUID menuid;	/* 菜单标识符。 */

说明

菜单上的每个菜单项在菜单中都必须具有唯一的标识符。

使用一个 _GetNewItemId( ) 后，应在使用下一个 _GetNewItemId( ) 之前使用 _NewItem( ) 在菜单中添加新的菜单项。如果没有在菜单中添加新菜单项，随后调用的各个 _GetNewItemId( ) 返回相同的 ITEMID。


下面的示例创建一个包含三个菜单项的菜单。在将菜单项添加到菜单中之前，调用 _GetNemItemId( ) 生成唯一的 ITEMID。

Visual FoxPro  代码

SET LIBRARY TO GETNWIID

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetNewItemId(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_PutStr("\nmenuId ="); putLong(menuId);

_PutStr("\nitemId ="); putLong(itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetNewItemId, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemId( )


_GetNewMenuId( ) API 库例程

请参阅	示例

返回可以使用的菜单标识符。

语法

MENUID _GetNewMenuId(void any)
void any;	/* 指针。 */

说明

每个菜单都必须具有唯一的标识符。


下面的示例生成一个包含三个菜单项的菜单。在使用 _NewMenu( ) 创建菜单之前，必须使用 _GetNewMenuId( ) 生成唯一的 MENUID。

Visual FoxPro  代码

SET LIBRARY TO GETNWMID

C  代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetNewItemId(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_PutStr("\nmenuId ="); putLong(menuId);

_PutStr("\nitemId ="); putLong(itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetNewItemId, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_DisposeMenu( ), _MenuId( )


_GetNextEvent( ) API 库例程

请参阅	示例

将下一个事件读入 EventRec 并返回事件类型。

语法

int _GetNextEvent(EventRec FAR *event)
EventRec FAR *event;	/* 事件。 */

说明

在 MS-DOS 计时器每次报时期间，如果没有其他活动发生，则生成 null 事件。空闲例程不能调用 _GetNextEvent( )。可以在事件处理程序中调用 _GetNextEvent( )，但必须非常小心，因为 _GetNextEvent( ) 递归地调用该事件处理程序。


下面的示例是由对 _GetNextEvent( ) 的调用及其后对 _DefaultProcess( ) 的调用组成的循环。在过程中的所有事件都按默认处理。

Visual FoxPro  代码

SET LIBR TO GETNXEV

C  代码

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)

{

EventRec ev;

int i;

for (i = 0; i < 16; i++) {

_GetNextEvent(&ev);

_DefaultProcess(&ev);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ActivateHandler( ), _FindWindow( ), _GlobalToLocal( ), _MousePos( )


_GetObjectProperty( )
_GetObjectProperty( ) API 库例程

请参阅

返回一个对象的属性值。

语法

int _GetObjectProperty(Value FAR *retval, Value FAR *objct,
char FAR *prop)

说明

要返回其属性的对象由 *objct 指定，要返回的属性由 *prop 指定。

返回值放在 *retval 值结构中。

附注

在调用 _GetObjectProperty( ) 之前，必须首先用 0 填充 *retval 结构。

如果成功，_GetObjectProperty( ) 返回 0；否则，返回对应的负的 Visual FoxPro 错误码。


请参阅

_SetObjectProperty( )


_GlobalToLocal( ) API 库例程

请参阅	示例

将点的屏幕坐标转换为窗口坐标。

语法

void _GlobalToLocal(Point FAR *pt, WHANDLE wh)
Point FAR *pt;	/* 点。 */
WHANDLE wh;	/* 窗口句柄。 */

说明

在调用 _GlobalToLocal( ) 前，应先调用 FindWindow( ) 求出该点属于哪个窗口。


下面的示例等待单击鼠标左键，并使用 _FindWindow( ) 得到鼠标所在窗口的句柄。_GlobalToLocal( ) 以窗口句柄及鼠标的绝对位置为参数，返回相对于窗口的鼠标位置。

Visual FoxPro  代码

SET LIBRARY TO GLTOLOC

C  代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR FindWindowEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point mousePos;

int where;

//按下左键 时，得到鼠标所在的位置

_Execute("WAIT WINDOW 'Click In A Window' NOWAIT");

while (_InKey(0, MOUSEACTIVE | HIDECURSOR) != 151);

while (!_MousePos(&mousePos));

switch (where = _FindWindow(&wh, mousePos))

{

case inBorder:

_PutStr("\nMouse down inBorder"); break;

case inHelp:

_PutStr("\nMouse down inHelp"); break;

case inContent:

_PutStr("\nMouse down inContent"); break;

case inDrag:

_PutStr("\nMouse down inDrag"); break;

case inGrow:

_PutStr("\nMouse down inGrow"); break;

case inGoAway:

_PutStr("\nMouse down inGoAway"); break;

case inZoom:

_PutStr("\nMouse down inZoom"); break;

case inVUpArrow:

_PutStr("\nMouse down inVUpArrow"); break;

case inVDownArrow:

_PutStr("\nMouse down inVDownArrow"); break;

case inVPageUp:

_PutStr("\nMouse down inVPageUp"); break;

case inVPageDown:

_PutStr("\nMouse down inVPageDown"); break;

case inVThumb:

_PutStr("\nMouse down inVThumb"); break;

case inHUpArrow:

_PutStr("\nMouse down inHUpArrow"); break;

case inHDownArrow:

_PutStr("\nMouse down inHDownArrow"); break;

case inHPageUp:

_PutStr("\nMouse down inHPageUp"); break;

case inHPageDown:

_PutStr("\nMouse down inHPageDown"); break;

case inHThumb:

_PutStr("\nMouse down inHThumb"); break;

case inMenuBar:

_PutStr("\nMouse down inMenuBar"); break;

default:

_PutStr("\nMouse down someplace else"); break;

}

_GlobalToLocal(&mousePos, wh);

_PutStr("\nPosition relative to window:");

putLong(mousePos.v, 5);

_PutChr(' ');

putLong(mousePos.h, 5);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) FindWindowEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindWindow( ), _MousePos( )


_GlobalToLocalP( ) API 库例程

请参阅	示例

将点的屏幕象素坐标转换为窗口象素坐标。

语法

void _GlobalToLocalP(Point FAR *pt, WHANDLE wh)
Point FAR *pt;	/* 点。 */
WHANDLE wh;	/* 窗口句柄。 */

说明

在 FoxPro for MS-DOS 专业级版本中不可用。

在调用 _GlobalToLocalp( ) 之前，应该先调用 _FindWindow( ) 求出该点属于哪个窗口。


下面的示例等待单击鼠标左键，然后使用 _FindWindowP( ) 得到鼠标所在窗口的句柄。_GlobalToLcalP( ) 以窗口句柄及鼠标绝对位置为参数，返回相对于窗口的鼠标位置。

Visual FoxPro  代码

SET LIBRARY TO GLTOLOCP

C  代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR FindWindowEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point mousePos;

int where;

//按下左键 时，得到鼠标所在位置

_Execute("WAIT WINDOW 'Click In A Window' NOWAIT" );

while (_InKey(0, MOUSEACTIVE | HIDECURSOR) != 151);

while (!_MousePosP(&mousePos));

switch (where = _FindWindowP(&wh, mousePos))

{

case inBorder:

_PutStr("\nMouse down inBorder"); break;

case inHelp:

_PutStr("\nMouse down inHelp"); break;

case inContent:

_PutStr("\nMouse down inContent"); break;

case inDrag:

_PutStr("\nMouse down inDrag"); break;

case inGrow:

_PutStr("\nMouse down inGrow"); break;

case inGoAway:

_PutStr("\nMouse down inGoAway"); break;

case inZoom:

_PutStr("\nMouse down inZoom"); break;

case inVUpArrow:

_PutStr("\nMouse down inVUpArrow"); break;

case inVDownArrow:

_PutStr("\nMouse down inVDownArrow"); break;

case inVPageUp:

_PutStr("\nMouse down inVPageUp"); break;

case inVPageDown:

_PutStr("\nMouse down inVPageDown"); break;

case inVThumb:

_PutStr("\nMouse down inVThumb"); break;

case inHUpArrow:

_PutStr("\nMouse down inHUpArrow"); break;

case inHDownArrow:

_PutStr("\nMouse down inHDownArrow"); break;

case inHPageUp:

_PutStr("\nMouse down inHPageUp"); break;

case inHPageDown:

_PutStr("\nMouse down inHPageDown"); break;

case inHThumb:

_PutStr("\nMouse down inHThumb"); break;

case inMenuBar:

_PutStr("\nMouse down inMenuBar"); break;

default:

_PutStr("\nMouse down someplace else"); break;

}

_GlobalToLocalP(&mousePos, wh);

_PutStr("\nPosition relative to window:");

putLong(mousePos.v, 5);

_PutChr(' ');

putLong(mousePos.h, 5);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", FindWindowEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindWindow( ), _MousePos( )


_HandToPtr( ) API 库例程

请参阅	示例

将内存句柄转换为 FAR（32 位）指针，指向为此句柄分配的内存。

语法

void FAR * _HandToPtr(MHANDLE hand)
MHANDLE hand;	/* 内存句柄。 */

说明

每当控制传递给 Visual FoxPro 或当前模块以外的另一例程时，Visual FoxPro 可能会重组内存。

附注

_HandToPtr( ) 不会重组内存。

除非 MHANDLE 已经锁定，否则当控制传递回 Visual FoxPro 时，_HandToPtr( ) 返回的指针可能会无效。除非文档说明对某个外部函数的调用不会造成内存重组，否则调用外部函数后，不应再保留指向未定内存的句柄指针。


下面的示例在屏幕上显示其字符型参数。示例使用 _HandToPtr( ) 将 API 参数的内存句柄转换为 C 指针。

Visual FoxPro  代码

SET LIBRARY TO HANDTOPT

= HANDTOPTR("Hello, world.")  && 在屏幕上显示“Hello, world”

C  代码

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))

{

_Error(182); // "内存不够"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR Example(ParamBlk FAR *parm)

{

NullTerminate(&parm->p[0].val);

_HLock(parm->p[0].val.ev_handle);

_PutStr(_HandToPtr(parm->p[0].val.ev_handle));

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"HANDTOPTR", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _FreeHand( ), _GetHandSize( ), _HLock( ), _HUnLock( ), _MemAvail( ), _SetHandSize( )


_HLock( ) API 库例程

请参阅	示例

锁定内存句柄，在 Visual FoxPro 要求内存重组时，可以防止该句柄移动。

语法

void _HLock(MHANDLE hand)
MHANDLE hand;	/* 内存句柄。 */

说明

_HLock( ) 不会重组内存。在锁定达到目的之后应尽快地解除对 MHANDLE 的锁定。


下面的示例屏幕上显示其字符参数。示例使用 _HandToPtr( ) 将 API 参数的内存句柄转换为 C 指针。在调用 _PutStr( ) 期间，Visual FoxPro 可能会重组内存，为了确保正确执行程序，示例用 _HLock( ) 锁定了内存句柄。在示例的最后调用了 _HVnLock( )，因为锁定的内存句柄会对 Visual FoxPro 的性能产生不良影响。

Visual FoxPro  代码

SET LIBRARY TO HLOCK

= HLOCK("Hello, world.") && 在屏幕上显示“Hello, world”

C  代码

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))

{

_Error(182); // "内存不够"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR Example(ParamBlk FAR *parm)

{

NullTerminate(&parm->p[0].val);

_HLock(parm->p[0].val.ev_handle);

_PutStr(_HandToPtr(parm->p[0].val.ev_handle));

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"HLOCK", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _FreeHand( ), _GetHandSize( ), _HandToPtr( ), _HUnLock( ), _MemAvail( ), _SetHandSize( )


_HUnLock( ) API 库例程

请参阅	示例

解除对内存句柄的锁定，使得在内存重组期间 Visual FoxPro 可访问该句柄。

语法

void _HUnLock(MHANDLE hand)
MHANDLE hand;	/* 内存句柄。 /

说明

_HUnLock( ) 不会重组内存。


下面的示例，在字符参数是一个正确的日期的情况下，使用 _RetDateStrl( )，返回 Visual FoxPro 日期型的值。由于锁定的内存句柄会对 Visual FoxPro 的性能产生不利影响，当不需要再锁定内存句柄时，示例发出 _HUnlock( ) 来解除锁定。

Visual FoxPro  代码

SET LIBRARY TO HUNLOCK

? DATES("2/16/95")  && 返回日期 {02/16/95}

C  代码

#include <pro_ext.h>

void FAR dates(ParamBlk FAR *parm)

{

MHANDLE mh;

char FAR *instring;

if ((mh = _AllocHand(parm->p[0].val.ev_length + 1)) == 0)

{

_Error(182); // "内存不够"

}

_HLock(parm->p[0].val.ev_handle);

instring = _HandToPtr(parm->p[0].val.ev_handle);

instring[parm->p[0].val.ev_length] = '\0';

_RetDateStr(instring);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"DATES", (FPFI) dates, 1, "C"}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _FreeHand( ), _GetHandSize( ), _HandToPtr( ), _HLock( ), _MemAvail( ), _SetHandSize( )


_InKey( ) API 库例程

示例

返回 timeout 期间内键入的第一个键。

语法

int _InKey(int timeout, int flag)
int timeout;	/* 超时时间。*/
int flag;	/* 选项。*/

说明

timeout 是指 MS-DOS 记时器信号数。0 超时时间使 Visual FoxPro 等待，直到用户按一个键。负的超时值使 _InKey( ) 立即返回调用程序，如果用户不按任何键的话。

可以指定 flag 为下列选项：

 •	   SHOWCURSOR 或 HIDECURSOR

 •	   MOUSEACTIVE

用 SHOWCURSOR 使光标出现， 或者用 HIDECURSOR 使光标消失。如果两个都不指定，光标就使用 SYS(2002) 的设置值。还可以使用附加的标识值 MOUSEACTIVE，它使 _InKey( ) 把鼠标单击处理为键盘键击。对鼠标单击，_InKey 返回 151。若要指定两个标识值，应使用 C 的 | 或 + 操作符。

附注

空闲例程不能调用 _InKey( )。

可以对调用 _InKey( )的事件句柄进行写操作，但是必须小心，因为 _InKey( ) 递归调用事件句柄。


下面的示例从 Visual FoxPro 调用带两个标识的 _InKey( )。

Visual FoxPro 代码

SET LIBRARY TO INKEY

#define SHOWCURSOR	1

#define HIDECURSOR	2

#define MOUSEACTIVE 4

= XINKEY(0, SHOWCURSOR + MOUSEACTIVE)

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

_RetInt(_InKey((int) parm->p[0].val.ev_long,

(int) parm->p[1].val.ev_long), 10);

}

FoxInfo myFoxInfo[] = {

{"XINKEY", (FPFI) Example, 2, "I,I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


_Load( ) API 库例程

请参阅	示例

把 loc 指定的内存变量或当前记录字段的值放入 val 中。

语法

int _Load(Locator FAR *loc, Value FAR *val)
Locator FAR *loc;	/* 变量位置。 */
Value FAR *val;	/* 保存变量的值。*/

说明

如果例程运行成功，则 _Load( ) 返回 0 。如果失败，则返回一个负整数，其绝对值是 Visual FoxPro 的一个错误号。可以用  _Load( ) 检索备注字段的内容，但它不能检索字段内 65,000 字节以后的字符。如果 loc 指定一个一维数组，则 Visual FoxPro 返回数组的第一个元素。

如果定位器字段 l_offset 的设置值为 -1,那么 Visual FoxPro 返回一个逻辑值结构，它标明指定工作区内的当前记录是否被删除：

 •	   ev_length = .T. = DELETED( )

 •	   ev_length = .F. = NOT DELETED( )

附注

只有当程序正在加载的内存变量是字符串 (ev_type = 'C') 时，_Load( ) 才创建一个句柄。其他所有数据类型都把其值存贮在自己的 Value 结构中。您的程序必须释放 _Load( )创建的句柄。


下面的示例把以引用传递方式传递的字符串变量转换为大写。

Visual FoxPro 代杩

SET LIBRARY TO LOAD

x = "abc"

= XUPPER(@x)

? x

C 代码

#include <pro_ext.h>

void FAR Upper(ParamBlk FAR *parm)

{

char FAR *pString;

Value val;

int i;

//

//	_Load() 和 _Store 是对以引用传递方式传递的参数起作用的函数。

//

_Load(&parm->p[0].loc, &val);

//

//	FoxPro 不检查以引用方式传递的参数的类型，所以这里检查一下。

//

    if (val.ev_type != 'C')

{

_Error(9); // "数据类型不匹配 "

}

    pString = _HandToPtr(val.ev_handle);

for (i = 0; i < val.ev_length; i++)

{

if ('a' <= *pString && *pString <= 'z')

{

*pString += ('A' - 'a');

}

pString++;

}

_Store(&parm->p[0].loc, &val);

//

// 需要释放用 _LOAD() 创建的句柄。

//

_FreeHand(val.ev_handle);

}

FoxInfo myFoxInfo[] =

{

{"XUPPER", (FPFI) Upper, 1, "R"},

};

FoxTable _FoxTable =

{

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ALen( ), _FindVar( ), _NameTableIndex( ), _NewVar( ), _Release( ), _Store( )


_MemAvail( ) API 库例程

请参阅	示例

判断是否有足够的内存来分配一个 size 字节的内存句柄。

语法

int _MemAvail(unsigned int size)
unsigned int size;	/* 内存句柄的字节数。 */

说明

如果有足够的内存可用，则该函数返回“真”（0 以外的整数），否则返回“假” (0)。


下面的示例创建大小为 1K 的内存句柄链接列表，根据链表分配内存，直到遇到已使用的内存为止。然后，它释放分配的内存，并返回分配的数量。_MemAvail( ) 用来中止第一个 while 循环。

Visual FoxPro 代码

SET LIBRARY TO MEMAVAIL

? MEMAVAIL()  && 以 K 为单位显示可用内存的近似值。

C 代码

#include <pro_ext.h>

#define ALLOCSIZE 1024

FAR example(ParamBlk FAR *parm)

{

int nHandles = 0;

MHANDLE head = 0, mh;

while (_MemAvail(ALLOCSIZE))

{

mh = _AllocHand(ALLOCSIZE);

*((MHANDLE *) _HandToPtr(mh)) = head;

head = mh;

nHandles++;

}

_RetInt(nHandles, 10);

while (head != 0)

{

mh = *((MHANDLE *) _HandToPtr(head));

_FreeHand(head);

head = mh;

}

}

FoxInfo myFoxInfo[] = {

{"MEMAVAIL", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _FreeHand( ), _GetHandSize( ), _HandToPtr( ), _HLock( ), _HUnLock( ), _SetHandSize( )


_MemCmp( ) API 库例程

请参阅	示例

比较两个 length 字节的内存区域。

语法

int _MemCmp(void FAR *ptr1, void FAR *ptr2, unsigned int length)
void FAR *ptr1;	/* 开始比较的第一点。*/
void FAR *ptr2;	/* 开始比较的第二点。*/
unsigned int length;	/* 比较的字节数。*/

说明

_MemCmp( ) 比较两个内存区中的每一个字节，从最左边的一个字节开始，逐字节比较，直到遇上两个不相同的字节为止。如果所有的字节都相同，则 _MemCmp( ) 返回 0；如果第一个区中第一个不相同的字节大于第二个区的相应字节，返回一个正数，反之则返回一个负数。


下列示例用 _MemCmp( ) 来比较两个字符参数，直到遇到第一个不相同的字节为止。

Visual FoxPro 代码

SET LIBRARY TO MEMCMP

? MEMCMP("Hello, world.", "Hello, world.")  && 返回 0

? MEMCMP("Hello, world.", "Hello, wurld.")  && 返回非 0

C 代码

#include <pro_ext.h>

#define min(a, b) ((a) < (b) ? (a) : (b))

FAR example(ParamBlk FAR *parm)

{

int LenToCmp, RetValue;

LenToCmp = min(parm->p[0].val.ev_length, parm->p[1].val.ev_length);

_HLock(parm->p[0].val.ev_handle);

_HLock(parm->p[1].val.ev_handle);

RetValue = _MemCmp(_HandToPtr(parm->p[0].val.ev_handle),

_HandToPtr(parm->p[1].val.ev_handle), LenToCmp);

_RetInt(RetValue, 10); // 此处返回控制

_HUnLock(parm->p[0].val.ev_handle);

_HUnLock(parm->p[1].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"MEMCMP", (FPFI) Example, 2, "C,C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_MemFill( ), _MemMove( )


_MemFill( ) API 库例程

请参阅	示例

把 character 中 length 个字节的复本填充到内存区中，填充位置从 ptr 所指向的位置开始。

语法

void _MemFill(void FAR *ptr, int character, unsigned int length)
void FAR *ptr;	/* 填充的开始点。*/
int character;	/* 用于填充的字符。*/
unsigned int length;	/* 填充的字节数。*/


下面的示例用 _MemFill( ) 替代 Visual FoxPro 函数 REPLICATE( ) 的功能。

Visual FoxPro 代码

SET LIBRARY TO MEMFILL

x = xREPLICATE("x", 120)

? x

? LEN(x)

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

char FAR *rep;

char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle);

rep = _Alloca((int) parm->p[1].val.ev_long + 1);

_MemFill(rep, c, (int) parm->p[1].val.ev_long);

    rep[parm->p[1].val.ev_long] = '\0';

_RetChar(rep);

}

FoxInfo myFoxInfo[] = {

{"XREPLICATE", (FPFI) Example, 2, "C,I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_MemCmp( ), _MemMove( )


_MemMove( ) API 库例程

请参阅	示例

把从 src 开始的 length 个字节复制到 dest 处。

语法

void _MemMove(void FAR *dest, void FAR *src, unsigned int length)
void FAR *dest;	/* 目标。*/
void FAR *src;	/* 开始位置。*/
unsigned int length;	/* 要移动的字节数。*/

说明

为防止数据破坏，应在适当的方向上进行重叠移动。


下面的示例用 _MemMove( ) 实现子串函数。在 Visual FoxPro 中， _MemMove(s, n1, n2) 返回 s 中从位置 n1 开始到 n2 的子串。

Visual FoxPro 代码

SET LIBRARY TO MEMMOVE

? MEMMOVE("Hello, world.", 8, 10)  && 返回 "wor"

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

int SubstrLen;

MHANDLE bufferHandle;

char FAR *FirstDest;

SubstrLen = parm->p[2].val.ev_long - parm->p[1].val.ev_long + 1;

if ((bufferHandle = _AllocHand(SubstrLen + 1)) == 0)

{

_Error(182); // "内存不足

}

_HLock(bufferHandle);

_HLock(parm->p[0].val.ev_handle);

FirstDest = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle) +

parm->p[1].val.ev_long - 1;

_MemMove(_HandToPtr(bufferHandle), FirstDest, SubstrLen);

((char FAR *) _HandToPtr(bufferHandle))[SubstrLen] = '\0';

_RetChar(_HandToPtr(bufferHandle));

_HUnLock(bufferHandle);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"MEMMOVE", (FPFI) Example, 3, "C,I,I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_MemCmp( ), _MemFill( )


_MemoChan( ) API 库例程

请参阅	示例

返回与指定的 workarea 相关联的备注文件的文件通道。

语法

FCHAN _MemoChan(int workarea)
int workarea;	/* 工作区编号。*/

说明

如果在工作区中没有数据库打开，或者数据库中没有备注文件，则 _MemoChan( )  返回 -1。


下面的示例检索备注文件的内容。_MemoChan(-1) 返回当前工作区备注文件的文件通道。这个 FCHAN 用作低级文件 I/O API 回调函数的一个参数。

Visual FoxPro 代码

SET LIBRARY TO MEMOCHAN

CREATE TABLE WMemo (MemoField M)

APPEND BLANK

REPLACE MemoField WITH "Hello, World."

? GETMEMO(@MemoField)

C 代码

#include <pro_ext.h>

FAR FindMemoEx(ParamBlk FAR *parm)

{

Locator FAR *memoFldLoc;

FCHAN fchMemo;

char FAR *memoContents;

int memoLen;

long loc;

if ((fchMemo = _MemoChan(-1)) == -1)

{

_UserError("_MemoChan() failed");

}

memoFldLoc = &parm->p[0].loc;

if ((loc = _FindMemo(memoFldLoc)) < 0)

{

_UserError("_FindMemo() failed");

}

if ((memoLen = _MemoSize(memoFldLoc)) < 0)

{

_UserError("_MemoSize() failed");

}

if ((memoContents = _Alloca(memoLen + 1)) == 0)

{

_Error(182); // "内存不足"

}

_FSeek(fchMemo, loc, FS_FROMBOF);

_FRead(fchMemo, memoContents, memoLen);

memoContents[memoLen] = '\0';

_RetChar(memoContents);

}

FoxInfo myFoxInfo[] = {

{"GETMEMO", (FPFI) FindMemoEx, 1, "R"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocMemo( ), _DBReplace( ), _FindMemo( ), _FOpen( ), _MemoSize( )


_MemoSize( ) API 库例程

请参阅	示例

返回备注文件中当前记录指定备注字段的长度。

语法

long _MemoSize(Locator FAR *fld)
Locator FAR *fld;	/* 备注字段地址。*/

说明

如果当前记录的备注字段为空，或 fld 不是备注字段时，_MemoSize( ) 返回一个负整数，其绝对值为 Visual FoxPro 的错误编号。


下面的示例检索当前记录备注字段的内容。_MemoSize( ) 用来判定应该给缓冲区分配多少内存，以及应该从备注字段读取多少字节。

Visual FoxPro 代码

SET LIBRARY TO MEMOSIZE

CREATE TABLE WMemo (MemoField M)

APPEND BLANK

REPLACE MemoField WITH "Hello, World."

? GETMEMO(@MemoField)

C 代码

#include <pro_ext.h>

FAR FindMemoEx(ParamBlk FAR *parm)

{

Locator FAR *memoFldLoc;

FCHAN fchMemo;

char FAR *memoContents;

int memoLen;

long loc;

if ((fchMemo = _MemoChan(-1)) == -1)

{

_UserError("_MemoChan() failed");

}

memoFldLoc = &parm->p[0].loc;

if ((loc = _FindMemo(memoFldLoc)) < 0)

{

_UserError("_FindMemo() failed");

}

if ((memoLen = _MemoSize(memoFldLoc)) < 0)

{

_UserError("_MemoSize() failed");

}

if ((memoContents = _Alloca(memoLen + 1)) == 0)

{

_Error(182); // "内存不足"

}

_FSeek(fchMemo, loc, FS_FROMBOF);

_FRead(fchMemo, memoContents, memoLen);

memoContents[memoLen] = '\0';

_RetChar(memoContents);

}

FoxInfo myFoxInfo[] = {

{"GETMEMO", (FPFI) FindMemoEx, 1, "R"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocMemo( ), _DBReplace( ), _FindMemo( ), _MemoChan( )


_MenuId( ) API 库例程

请参阅	示例

返回与系统定义的系统菜单或菜单标题的原义相对应的菜单标识符。

语法

MENUID _MenuId(long literal)
long literal;	/* 系统定义的原义。*/

说明

原义是在 API  包含文件 PRO_EXT.H 中定义的。


下面的示例向系统菜单添加一个菜单标题，然后附加一个有两个菜单项的下拉式菜单。_MenuId( ) 用来得到系统菜单的 MENUID。

Visual FoxPro 代码

SET LIBRARY TO MENUID

C 代码

#include <pro_ext.h>

MENUID SysMenuId;

MENUID PopupId;

ITEMID PadId;

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

}

void FAR StartUp()

{

ITEMID Bar1Id;

ITEMID Bar2Id;

int Error;

// 向 SYSMENU 添加一个新菜单标题。

SysMenuId = _MenuId(_SYSMENU);

PadId = _GetNewItemId(SysMenuId);

if (_NewItem(SysMenuId, PadId, _LASTITEM, "\\<Added menu title"))

{

_Error(623); /* "不能定义菜单项。" */

}

//定义菜单。

PopupId = _GetNewMenuId();

if (Error = _NewMenu(MPOPUP, PopupId))

{

_Error(-Error);

}

Bar1Id = _GetNewItemId(PopupId);

// 警告：在另一个 _GetNewItemId() 前调用 _NewItem()。

if (_NewItem(PopupId, Bar1Id, _LASTITEM, "\\<1st item"))

{

_Error(623); /* "不能定义菜单项。" */

}

Bar2Id = _GetNewItemId(PopupId);

if (_NewItem(PopupId, Bar2Id, _LASTITEM, "\\<2nd item"))

{

_Error(623); /* "不能定义菜单项。" */

}

// 给菜单标题附加菜单。

_SetItemSubMenu(SysMenuId, PadId, PopupId);

// 设置选择行为。

_OnSelection(PopupId, -1, onSelection);

}

void FAR ShutDown()

{

_DisposeItem(SysMenuId, PadId);

_DisposeMenu(PopupId);

}

FoxInfo myFoxInfo[] = {

{"STARTUP",	(FPFI) StartUp,	CALLONLOAD,""},

{"SHUTDOWN",	(FPFI) ShutDown,	CALLONUNLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetNewMenuId( )


_MenuInteract( ) API 库例程

请参阅	示例

设置 itemid 和menuid，以指明选择了哪个菜单项，如果有的话。

语法

int _MenuInteract(MENUID FAR *menuid, ITEMID FAR *itemid)
MENUID FAR *menuid;	 /* 指向菜单标识的指针。*/
ITEMID FAR *itemid;	 /* 指向菜单项标识的指针。*/

说明

如果用户选择了菜单项， _MenuInteract( ) 返回 1。如果没有选择（例如，用户按 Esc），_MenuInteract( ) 返回 0。


下面的示例生成一个有三个菜单项的菜单，然后通过调用 _MenuInteract( ) 要求用户对菜单进行交互操作。

Visual FoxPro 代码

SET LIBRARY TO MENUINTE

C 代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetNewItemId(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_PutStr("\nmenuId ="); putLong(menuId);

_PutStr("\nitemId ="); putLong(itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetNewItemId, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_OnSelection( )


_MousePos( ) API 库例程

请参阅	示例

把鼠标指针的当前位置填入 pt。

语法

int _MousePos(Point FAR *pt)
Point FAR *pt;	/* 指针。*/

说明

调用 _MousePos( ) 时，如果鼠标左键按下，则此函数返回“真”（0 以外的整数）；如果鼠标左键没按下，则返回“假”(0)。


下面的示例显示当前鼠标指针的位置，直到检测到左键单击为止。

Visual FoxPro 代码

SET LIBRARY TO MOUSEPOS

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR MousePosEx(ParamBlk FAR *parm)

{

Point mousePos;

while (!_MousePos(&mousePos))

{

_PutStr("\nvertical =");

putLong(mousePos.v, 5);

_PutStr("; horizontal =");

putLong(mousePos.h, 5);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) MousePosEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindWindow( ), _GlobalToLocal( )


_MousePosP( ) API 库例程

请参阅	示例

以象素为单位，把鼠标指针的当前位置填入 pt。

语法

int _MousePosP(Point FAR *pt)
Point FAR *pt;	/* 指针。 */

说明

在 FoxPro for MS-DOS 的专业级版本中不能使用。

调用 _MousePosP( )时，如果鼠标左键按下，则此函数返回“真”（0 以外的整数）；如果鼠标左键没按下，则返回“假”(0)。


下面的示例显示当前鼠标指针的位置，直到检测到左键单击为止。

Visual FoxPro 代码

SET LIBRARY TO MOUSEPOP

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR MousePosPEx(ParamBlk FAR *parm)

{

Point mousePos;

while (!_MousePosP(&mousePos))

{

_PutStr("\nvertical =");

putLong(mousePos.v, 5);

_PutStr("; horizontal =");

putLong(mousePos.h, 5);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) MousePosPEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_FindWindow( ), _GlobalToLocal( )


_NameTableIndex( ) API 库例程

请参阅	示例

返回与给定变量名 name 相对应的名表索引值。如果 name 不在名表内，则返回 -1。

语法

NTI _NameTableIndex(char FAR *name)
char FAR *name;	/* 名称。 */

说明

即使名为 name 的变量不存在，name 也可能在名表内找到。若要判定名为 name 的变量是否存在，应使用  _FindVar( )，并把 _NameTableIndex( ) 返回的名表索引值指定为 nti 参数。


下面的示例释放一个内存变量，其变量名由一个字符参数指定。请注意， _NameTableIndex( ) 是在变量释放后找到变量名的，所以必须把  _NameTableIndex( ) 与 _FindVar( ) 一起使用，从而保证内存变量是当前已定义的。

Visual FoxPro 代码

SET LIBRARY TO NTI

x = 123

= XRELEASE("x")

C 代码

#include <pro_ext.h>

FAR ReleaseEx(ParamBlk FAR *parm)

{

NTI nti;

char FAR *name;

int exitCode;

Locator loc;

//	以 NULL 结尾的字符串，变量名

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

name = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

name[parm->p[0].val.ev_length] = '\0';

if ((nti = _NameTableIndex(name)) == -1)

{

_HUnLock(parm->p[0].val.ev_handle);

_UserError("Cannot find variable in name table.");

}

_HUnLock(parm->p[0].val.ev_handle);

if (_FindVar(nti, -1, &loc))

{

_PutStr("\nVariable exists prior to _Release().");

}

if ((exitCode =_Release(nti)) < 0)

{

_Error(-exitCode);

}

_HLock(parm->p[0].val.ev_handle);

name = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

name[parm->p[0].val.ev_length] = '\0';

if ((nti = _NameTableIndex(name)) != -1)

{

_PutStr("\n_NameTableIndex() still finds variable \

after it is released.");

}

_HUnLock(parm->p[0].val.ev_handle);

if (!_FindVar(nti, -1, &loc))

{

_PutStr("\nVariable does not exist after _Release().");

}

}

FoxInfo myFoxInfo[] = {

{"XRELEASE", (FPFI) ReleaseEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ALen( ), _FindVar( ), _Load( ), _NewVar( ), _Release( ), _Store( )


_NewItem( ) API 库例程

请参阅	示例

把具有指定标识 itemid 的菜单项添加到 menuid 所指定的菜单中。

语法

int _NewItem(MENUID menuid, ITEMID itemid, ITEMID beforeid, char FAR *prompt)
MENUID menuid;	/* 菜单标识。 */
ITEMID itemid;	/* 新菜单项的标识。 */
ITEMID beforeid;	/* 新菜单项后面菜单项的标识。 */
char FAR *prompt;	/* 新菜单项的文本。*/

说明

新菜单项的类型可以自动是菜单标题或菜单栏，取决于要插入该菜单项的菜单的类型。

beforeid 参数指定一个菜单项标识，新菜单项将放在该菜单项之前。若要把新菜单项指定为菜单列表中的第一项，指定 beforeid 为 -1；若要把它指定为菜单项的最后一项，指定 beforeid 为 -2。prompt 指定新菜单项的文本。如果添加菜单项成功，则 _NewItem( ) 返回 0，否则返回 -1。


下面的示例建立一个具有三个菜单项的菜单。它用  _NewItem( ) 向菜单中添加每个菜单项。

Visual FoxPro 代码

SET LIBRARY TO NEWITEM

C 代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetNewItemId(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -1, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_PutStr("\nmenuId ="); putLong(menuId);

_PutStr("\nitemId ="); putLong(itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetNewItemId, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_SetItemCmdKey( ), _SetItemColor( ), _SetItemSubMenu( )


_NewMenu( ) API 库例程

请参阅	示例

创建一个指定类型的新菜单。

语法

int _NewMenu(int mtype, MENUID menuid)
int mtype;	/* 菜单类型。 */
MENUID menuid;	/* 菜单标识。 */

说明

可以把 MPOPUP 或 MBAR 指定为 mtype 参数。菜单标识必须是唯一的。

若要得到可用的菜单 id，可以使用 _GetNewMenuId( )。如果创建新菜单成功，则  _NewMenu( ) 返回 0。如果不成功，_NewMenu( ) 就返回一个负整数，其绝对值是 Visual FoxPro 的错误编号。


下面的示例用 _NewMenu( ) 创建一个菜单。

Visual FoxPro 代码

SET LIBRARY TO NEWMENU

C 代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetNewItemId(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -1, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_PutStr("\nmenuId ="); putLong(menuId);

_PutStr("\nitemId ="); putLong(itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetNewItemId, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ActivateMenu( ), _GetNewMenuId( ), _MenuId( )


_NewVar( ) API 库例程

请参阅	示例

创建一个变量或数组。

语法

int _NewVar(char FAR *name, Locator FAR *loc, int flag)
char FAR *name;	/* 变量名。*/
Locator FAR *loc;	/* 地点。 */
int flag;	/* 范围。 */

说明

变量或数组名必须服从标准 Visual FoxPro 的变量名规则规则。新变量的初值为逻辑值假。

定位器字段 l_subs 的设置决定了变量或数组的类型：

 •	   0  标量变量

 •	   1   大小为 l_sub1 的一维数组

 •	   2   大小为 l_sub1×l_sub2 的数组

有关定位器结构的详细内容，请参阅《专业级功能指南》第十二章，“将库集成到 Visual FoxPro ”。

flag 参数可以是 NV_PUBLIC 或 NV_PRIVATE。NV_PRIVATE 变量创建时，就好象是调用外部例程的 Visual FoxPro 例程所创建的一样。

如果 _NewVar( ) 成功地创建了变量，就把所创建变量的非负 NTI 值填入字段 l_NTI 中，并且由 _NewVar( ) 返回这个数。如果_NewVar( ) 失败，它就返回一个负整数，其绝对值是 Visual FoxPro 的内部错误编号。


下面的示例用 _NewVar( ) 来创建三个变量。

Visual FoxPro 代码

SET LIBRARY TO NEWVAR

*

*   As defined in "pro_ext.h"

*

#define NV_PUBLIC	0

#define NV_PRIVATE	1

= xNewVar('var', 0, 0, 0, NV_PUBLIC)

DISPLAY MEMORY LIKE var

= xNewVar('onedim', 1, 5, 0, NV_PUBLIC)

DISPLAY MEMORY LIKE onedim

= xNewVar('twodim', 2, 5, 6, NV_PUBLIC)

DISPLAY MEMORY LIKE twodim

C 代码

#include <pro_ext.h>

void FAR NewVarEx(ParamBlk FAR *parm)

{

char FAR *varName;

Locator loc;

int flag;

int retValue;

// 以 NULL 结尾的的字符串

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

varName = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

varName[parm->p[0].val.ev_length] = '\0';

loc.l_subs = parm->p[1].val.ev_long;

loc.l_sub1 = parm->p[2].val.ev_long;

loc.l_sub2 = parm->p[3].val.ev_long;

flag = parm->p[4].val.ev_long;

if ((retValue = _NewVar(varName, &loc, flag)) < 0)

{

// _NewVar() 返回负的 Visual FoxPro 错误编号

_Error(-retValue);

}

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"XNEWVAR", (FPFI) NewVarEx, 5, "C,I,I,I,I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ALen( ), _FindVar( ), _Load( ), _NameTableIndex( ), _Release( ), _Store( )


_ObjectCmp( )
_ObjectCmp( ) API 库例程

请参阅

比较两对象的属性，如果它们的属性和属性值相同，则返回 0。

语法

int _ObjectCmp(Value FAR *objct1, Value FAR *objct2)

说明

如果对象具有相同的属性或属性值，则返回 0；如果一个对象具有另一个对象没有的属性，或者两者具有相同的属性但是属性值不同，则返回 1。

如果出错（比如少一个对象参数），则返回相应的负的 Visual FoxPro 错误编号。


请参阅

_GetObjectProperty( ), _SetObjectProperty( )


_ObjectReference( )
_ObjectReference( ) API 库例程

请参阅

增加一个对象的引用计数值。

语法

int _ObjectReference(Value FAR *objct)

说明

CLEAR MEMORY 或 CLEAR ALL 从内存中释放一个 API 对象。


请参阅

_FreeObject( ), _ObjectRelease( )


_ObjectRelease( )
_ObjectRelease( ) API 库例程

请参阅

减少一个对象的引用计数值。

语法

int _ObjectRelease(Value FAR *objct)


请参阅

_FreeObject( ), _ObjectReference( )


_OnSelection( ) API 库例程

请参阅	示例

指定当用户选择特定的菜单和菜单项时，要执行的例程。

语法

void _OnSelection(MENUID menuid, ITEMID itemid, FPFI routine)
MENUID menuid;	/* 菜单标识。 */
ITEMID itemid;	/* 菜单项标识。 */
FPFI routine;	/* 要执行的例程。 */

说明

如果指定 itemid 为 -1，则用户选择菜单中的任何菜单项时，都会执行该例程。与单个菜单项相关联的例程比与整个菜单相关联的例程的优先级别要高。若要取消指定菜单和菜单项的选定例程，请把 (FPFI)0 作为参数传递给 routine 。


下面的示例创建一个有三个菜单项的菜单。它调用参数 ITEMID 为 -1 的 _OnSelection( ) ，指明当用户从此菜单中选择任何菜单项时，都调用函数 USERCHOICE( )。

Visual FoxPro 代码

SET LIBRARY TO ONSELECT

C 代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

_DisposeMenu(menuId);

}

FAR activateMenu(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_OnSelection(menuId, -1, onSelection);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) activateMenu, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ActivateMenu( ), _MenuInteract( )


_PutChr( ) API 库例程

请参阅	示例

在当前输出窗口的当前输出位置以常规属性（颜色 0）显示字符 char。

语法

void _PutChr(int char)
int char;	/* 要显示的字符。 */

说明

_PutChr( ) 把换行、回车和铃声等特殊字符处理为控制字符，不在屏幕上显示出来。

若要显示这些控制字符相对应的字符，请把字符值加上 256。


下面的示例用 _PutChr( )  在屏幕上显示所有的 8 位字符。

Visual FoxPro 代码

SET LIBRARY TO PUTCHR

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

int ch;

for (ch = 0; ch < 256; ch++)

{

_PutChr(ch);

}

}

FoxInfo myFoxInfo[] = {

{"PUTCHR", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_PutStr( ), _PutValue( )


_PutStr( ) API 库例程

请参阅	示例

在当前输出窗口的当前输出位置以常规属性（颜色 0）显示以 NULL 结尾的字符串。

语法

void _PutStr(char FAR *str)
char FAR *str;	/* 要显示的字符串。 */

说明

_PutStr( ) 把换行、回车和铃声等特殊字符作为控制字符处理，不在屏幕上显示。

若要显示这些控制字符相对应的字符，请把字符值加上 256。


下面的示例用 _PutStr( ) 在屏幕上以大写方式显示它的字符类型参数。

Visual FoxPro 代码

SET LIBRARY TO PUTSTR

= XUPPER("upper")  && 在屏幕是显示 "UPPER"

C 代码

#include "pro_ext.h"

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))

{

_Error(182); // "内存不够"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR Example(ParamBlk FAR *parm)

{

char FAR *pString;

int i;

NullTerminate(&parm->p[0].val);

pString = _HandToPtr(parm->p[0].val.ev_handle);

for (i = 0; i < parm->p[0].val.ev_length; i++)

{

if ('a' <= *pString && *pString <= 'z')

{

*pString += ('A' - 'a');

}

pString++;

}

_HLock(parm->p[0].val.ev_handle);

_PutStr(_HandToPtr(parm->p[0].val.ev_handle));

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"XUPPER", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_PutChr( ), _PutValue( )


_PutValue( ) API 库例程

请参阅	示例

在当前输出窗口的当前输出位置写一个值 val。

语法

void _PutValue(Value FAR *val)
Value FAR *val;	/* 要显示的值。 */


下面的示例用 _PutValue( ) 在屏幕上以大写形式显示它的字符类型参数。

Visual FoxPro 代码

SET LIBRARY TO PUTVALUE

= XUPPER("upper")  && 在屏幕上显示 "UPPER"

C 代码

#include "pro_ext.h"

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))

{

_Error(182); // "内存不足"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR example(ParamBlk FAR *parm)

{

char FAR *pString;

int i;

NullTerminate(&parm->p[0].val);

pString = _HandToPtr(parm->p[0].val.ev_handle);

for (i = 0; i < parm->p[0].val.ev_length; i++)

{

if ('a' <= *pString && *pString <= 'z')

{

*pString += ('A' - 'a');

}

pString++;

}

_PutValue(&parm->p[0].val);

}

FoxInfo myFoxInfo[] = {

{"XUPPER", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_PutChr( ), _PutStr( )


_RefreshDisplay( ) API 库例程

请参阅	示例

重画整个屏幕，包括所有窗口。

语法

void _RefreshDisplay(void any)
void any;	/* 指针。 */

说明

仅在 FoxPro for MS-DOS 的专业版中可以使用。

作为示例，在切换视频模式时便可以使用 _RefreshDisplay( )。


下面的示例提供两个可以从 Visual FoxPro 中调用的 API 函数。MAKEMESS( ) 在屏幕的头三行显示无意义的字符。它只是为了演示使用  _RefreshDisplay( ) 的原因。

FoxPro for MS-DOS 代码

SET LIBRARY TO REFRDISP

= MAKEMESS()  && 把无意义的信息写在屏幕的头三行

= REFRESH()   && Visual FoxPro 重画它的显示

C 代码

#include <pro_ext.h>

FAR makeMess(ParamBlk FAR *parm)

{

char far *videoRam = (char far *) 0xb8000000;

  	int i;

for (i = 0; i < 480; i++) {

videoRam[i] = i;

}

}

FAR refresh(ParamBlk FAR *parm)

{

_RefreshDisplay();

}

FoxInfo myFoxInfo[] = {

{"REFRESH", (FPFI) refresh, 0, ""},

{"MAKEMESS", (FPFI) makeMess, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo

};


请参阅

_RefreshVideo( )


_RefreshVideo( ) API 库例程

请参阅	示例

使 Visual FoxPro 读取当前视频环境。

语法

void _RefreshVideo(void any)
void any;	/* 指针。 */

说明

仅在 FoxPro for MS-DOS 的专业版中可以使用。


下面的示例在不检查 Visual FoxPro 的情况下改变视频环境。除非调用 _RefreshVideo( ) 使 Visual FoxPro 定向到该视频环境，否则这种改变不会在 Visual FoxPro 中反映出来。

FoxPro for MS-DOS 代码

SET LIBRARY TO REFRVIDE

SET DISP TO VGA50

= LARGEFONT()	&& 切换到 8 x 16 字体

SDFDF	&& 寻找错误框

= REFRESH()	&& 把 Visual FoxPro 定向到视频环境

SDFDF	&& 现在把错误框显示在屏幕上

SET DISP TO VGA25

= SMALLFONT()	&& 切换到 8 x 8 字体

LIST STAT	&& 只用屏幕的一半

= REFRESH() 	&& 把 Visual FoxPro 定向到视频环境

LIST STAT	&& 使用整个屏幕

C 代码

#include <dos.h>

#include <pro_ext.h>

FAR smallFont(ParamBlk FAR *parm)

{

union REGS cpuReg;

cpuReg.h.ah = 0x11; // 载入字符集

cpuReg.h.al = 0x12; // 8 x 8 字体

cpuReg.h.bl = 0x00;

int86(0x10, &cpuReg, &cpuReg);

}

FAR largeFont(ParamBlk FAR *parm)

{

union REGS cpuReg;

cpuReg.h.ah = 0x11; // 载入字符集

cpuReg.h.al = 0x14; // 8 x 16 字体

cpuReg.h.bl = 0x00;

int86(0x10, &cpuReg, &cpuReg);

}

FAR refresh(ParamBlk FAR *parm)

{

_RefreshVideo();

}

FoxInfo myFoxInfo[] = {

{"SMALLFONT", (FPFI) smallFont, 0, ""},

{"LARGEFONT", (FPFI) largeFont, 0, ""},

{"REFRESH", (FPFI) refresh, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RefreshDisplay( )


_Release( ) API 库例程

请参阅	示例

从内存中释放指定的内存变量或数组。

语法

int _Release(NTI n)
NTI n;	/* 要释放的变量或数组的 NTI 编号。*/

说明

如果成功地释放内存变量或数组，则_Release( ) 返回 0 ，否则返回一个整数，其绝对值是失败时的 Visual FoxPro 错误编号。


下面的示例从内存中释放一个内存变量，其变量名由字符参数给定。_NameTableIndex( ) 用来寻找变量的 NTI。

Visual FoxPro 代码

SET LIBRARY TO RELEASE

x = 123

= XRELEASE("x")

C 代码

#include <pro_ext.h>

FAR ReleaseEx(ParamBlk FAR *parm)

{

NTI nti;

char FAR *name;

int exitCode;

Locator loc;

// 以 NULL 结尾的字符串，变量名

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

name = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

name[parm->p[0].val.ev_length] = '\0';

if ((nti = _NameTableIndex(name)) == -1)

{

_HUnLock(parm->p[0].val.ev_handle);

_UserError("Cannot find variable in name table.");

}

_HUnLock(parm->p[0].val.ev_handle);

if (_FindVar(nti, -1, &loc))

{

_PutStr("\nVariable exists prior to _Release().");

}

if ((exitCode =_Release(nti)) < 0)

{

_Error(-exitCode);

}

_HLock(parm->p[0].val.ev_handle);

name = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);

name[parm->p[0].val.ev_length] = '\0';

if ((nti = _NameTableIndex(name)) != -1)

{

_PutStr("\n_NameTableIndex() still finds variable \

after it is released.");

}

_HUnLock(parm->p[0].val.ev_handle);

if (!_FindVar(nti, -1, &loc))

{

_PutStr("\nVariable does not exist after _Release().");

}

}

FoxInfo myFoxInfo[] = {

{"XRELEASE", (FPFI) ReleaseEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ALen( ), _RetCurrency( ), _RetDateTimeStr( ), _FindVar( ), _Load( ), _NameTableIndex( ), _NewVar( ), _Store( )


_RetChar( ) API 库例程

请参阅	示例

将库的返回值设置为以 NULL 结尾的字符串。

语法

void _RetChar(char FAR *string)
char FAR *string;	/* 字符串。 */

说明

如果需要返回的字符串可能包含嵌入的 NULL 字符，应使用 _RetVal( ) 函数。


下面的示例两次调用 _RetChar( )，演示了控制从 _RetChar( ) 返回到 API 例程并且后一个 _RetChar( ) 决定返回到 Visual FoxPro 的值。

Visual FoxPro 代码

SET LIBRARY TO RETCHAR

C 代码

#include <pro_ext.h>

void FAR chars(ParamBlk FAR *parm)

{

char message[] = "Hello, world";

_RetChar(message);

}

FoxInfo myFoxInfo[] = {

{"CHARS", (FPFI) chars, 0, ""}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetCurrency( ), _RetDateStr( ), _RetDateTimeStr( ), _RetFloat( ), _RetInt( ), _RetLogical( ), _RetVal( )


_RetCurrency( ) API 库例程

请参阅	示例

将库的返回值设置为货币值。

语法

void _RetCurrency(CCY money, int width)
CCY money;	/* CCY - LARGE_INTEGER. */
int width;	/* 要显示的列数。*/

说明

仅在 Visual FoxPro 的专业版中可以使用。


下面的示例把数值型值转换为货币型值。

Visual FoxPro 代码

SET LIBRARY TO RETCURR

? xntom(100.1)

C 代码

#include <pro_ext.h>

#include <math.h>

void FAR retcurr(ParamBlk FAR *parm)

{

CCY money;

money.HighPart = (long) (parm->p[0].val.ev_real*10000 / pow(2,32));

money.LowPart = (unsigned long) ((parm->p[0].val.ev_real - (double) (money.HighPart * pow(2,32)/10000.0)) *10000);

_RetCurrency(money,25);

}

FoxInfo myFoxInfo[] = {

{"XNTOM", (FPFI) retcurr, 1, "N"}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetChar( ), _RetDateStr( ), _RetDateTimeStr( ), _RetFloat( ), _RetInt( ), _RetLogical( ), _RetVal( )


_RetDateStr( ) API 库例程

请参阅	示例

将库的返回值设置为日期型。

语法

void _RetDateStr(char FAR *string)
char FAR *string;	/* 日期型字符串。 */

说明

请以月/日/年 (mm/dd/year) 的格式指定日期字符串，其中年份可以是两位数或四位数。


下面的示例把字符串转换为日期数值类型，并返回给 Visual FoxPro。

Visual FoxPro 代码

SET LIBRARY TO RETDATES

? DATES("02/16/95")  && 返回日期 {02/16/95}

C 代码

#include <pro_ext.h>

void FAR dates(ParamBlk FAR *parm)

{

MHANDLE mh;

char FAR *instring;

if ((mh = _AllocHand(parm->p[0].val.ev_length + 1)) == 0)

{

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

instring = _HandToPtr(parm->p[0].val.ev_handle);

instring[parm->p[0].val.ev_length] = '\0';

_RetDateStr(instring);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"DATES", (FPFI) dates, 1, "C"}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetChar( ), _RetCurrency( ), _RetDateTimeStr( ), _RetFloat( ), _RetInt( ), _RetLogical( ), _RetVal( )


_RetDateTimeStr( ) API 库例程

请参阅	示例

将库的返回值设置为日期时间。

语法

void _RetDateTimeStr(char FAR *string)
char FAR *string;	/* 日期时间字符串。 */

说明

仅在 Visual FoxPro 的专业版中可以使用。

请以月/日/年 时:分:秒 (mm/dd/year hh:mm:ss) 的格式指定日期时间，其中年可以是两位或四位数。有关时期时间字符串，请参阅 CTOT( ) 的日期时间有效格式列表。


下面的示例把日期型值转换为日期时间型值。

Visual FoxPro 代码

SET LIBRARY TO RETDT

? xctot("2/16/95 12:07am")

C 代码

#include <pro_ext.h>

void FAR datetime(ParamBlk FAR *parm)

{

    MHANDLE mh;

    char FAR *instring;

if ((mh = _AllocHand(parm->p[0].val.ev_length + 1)) == 0) {

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

instring = _HandToPtr(parm->p[0].val.ev_handle);

instring[parm->p[0].val.ev_length] = '\0';

_RetDateTimeStr(instring);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"XCTOT", (FPFI) datetime, 1, "C"}

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

CTOT( ), _RetChar( ), _RetCurrency( ), _RetFloat( ), _RetInt( ), _RetLogical( ), _RetVal( )


_RetFloat( ) API 库例程

请参阅	示例

将库的返回值设置为浮点型值。

语法

void _RetFloat(double flt, int width, int dec)
double flt;	/* 双精度浮点值。*/
int width;	/* 数值显示的列数。*/
int dec;	/* 小数点后的位数。 */

说明

width 参数指定 Visual FoxPro 显示数值时所用的列数，需要时请包括小数点。如果宽度未知，请用 20 。dec 参数指定数中小数点的位置。必须正确地设置小数点的位置，以确保 Visual FoxPro 正确地处理该数。如果小数位不是零，则宽度至少应比 dec 多两位。


下面的示例用  _RetFloat( )  返回 Visual FoxPro 日期型参数的浮点型表示。

Visual FoxPro 代码

SET LIBRARY TO RETFLOAT

? RETFLOAT({2/16/95})  && 返回日期的浮点型表示 {2/16/95}

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

_RetFloat(parm->p[0].val.ev_real, 20, 4);

}

FoxInfo myFoxInfo[] = {

{"RETFLOAT", (FPFI) Example, 1, "D"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetChar( ), _RetCurrency( ), _RetDateStr( ), _RetDateTimeStr( ), _RetInt( ), _RetLogical( ), _RetVal( )


_RetInt( ) API 库例程

请参阅	示例

将库的返回值设置为数值型值。

语法

void _RetInt(long ival, int width)
long ival;	/* 长整数型值。 */
int width;	/* 要显示的数的列数。 */

说明

width 参数指定 Visual FoxPro 显示数值时所用的列数。如果宽度未知，请用 10。


下面的示例在当前工作区打开的表上进行一些运算。它显示 _RecCount( ) 返回的值。

Visual FoxPro 代码

SET LIBRARY TO RETINT

? CTEST()

C 代码

#include  <pro_ext.h>

#define nl _PutChr('\n')

long FAR CTest()

{

long rc,rec;

int workarea = -1;

int flag = 0;

int rn,recn;

rc = _DBRewind(workarea);

_PutStr("top");  nl;

rc = _DBSkip(workarea, 5);

_PutStr("skipped 5");  nl;

rc = _DBAppend(workarea,flag);

_PutStr("Appending");   nl;

rc = _DBRewind(workarea);

_PutStr("top");  nl;

rn = _DBRecCount(workarea);

_RetInt(rn, 10);

rec = rn;

return rn;

}

FoxInfo myFoxInfo[] = {

{"CTEST", (FPFI) CTest,0 , ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetChar( ), _RetCurrency( ), _RetDateStr( ), _RetDateTimeStr( ), _RetFloat( ), _RetLogical( ), _RetVal( )


_RetLogical( ) API 库例程

请参阅	示例

将库的返回值设置为逻辑型值。

语法

void _RetLogical(int flag)
int flag;	/*标识位。 */

说明

_RetLogical( ) 把零值当作“假”，把任何其他非零值当作“真”。


下面的示例是一个“翻硬币游戏”。它基于库函数 RAND( ) 来返回 .T. 或 .F.。

Visual FoxPro 代码

SET LIBRARY TO RETLOGIC

? RETLOGICAL()  && 随机地返回 .T. 或者 .F.。

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

_RetLogical(rand() % 2);

}

FoxInfo myFoxInfo[] = {

{"RETLOGICAL", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetChar( ), _RetCurrency( ), _RetDateStr( ), _RetDateTimeStr( ), _RetFloat( ), _RetInt( ), _RetVal( )


_RetVal( ) API 库例程

请参阅	示例

返回任何除“备注”之外的 Visual FoxPro 数据类型。

语法

void _RetVal(Value FAR *val)
Value FAR *val;	/* 指向 Value 结构的指针。 */

说明

_RetVal( ) 传递一个完整的 Visual FoxPro Value 结构。若要返回包含空字符的字符串，必须调用 _RetVal( )。


下面的示例用 _RetVal( ) 返回被转换为大写形式的字符型参数。

Visual FoxPro 代码

SET LIBRARY TO RETVAL

? XUPPER("upper")  && 返回 "UPPER"

C 代码

#include "pro_ext.h"

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1)) {

_Error(182); // "内存不足"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR Example(ParamBlk FAR *parm)

{

char FAR *pString;

int i;

NullTerminate(&parm->p[0].val);

pString = _HandToPtr(parm->p[0].val.ev_handle);

for (i = 0; i < parm->p[0].val.ev_length; i++)

{

if ('a' <= *pString && *pString <= 'z')

{

*pString += ('A' - 'a');

}

pString++;

}

_RetVal(&parm->p[0].val);

}

FoxInfo myFoxInfo[] = {

{"XUPPER", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_RetChar( ), _RetCurrency( ), _RetDateStr( ), _RetDateTimeStr( ), _RetFloat( ), _RetInt( ), _RetLogical( )


_SetHandSize( ) API 库例程

请参阅	示例

更改分配给内存块句柄 hand 的内存数量。

语法

int _SetHandSize(MHANDLE hand, unsigned int size)
MHANDLE hand;	/* 内存块句柄。 */
unsigned int size;	   /* 新的字节数。 */

说明

如果内存重新分配成功，则 _SetHandSize( ) 返回“真”（0 以外的整数）；如果失败，则返回“假” (0)。与 MHANDLE 相关联的数据被保留。如果 hand 是一个锁定的 MHANDLE，则 _SetHandSize( ) 失败。


下面的示例用 _SetHandSize( ) 改变分配给一个 MHANDLE 的内存量。

Visual FoxPro 代码

SET LIBRARY TO SETHANDS

= HANDTOPTR("Hello, world.") && 在屏幕上显示"Hello, world"

C 代码

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))

{

_Error(182); // "内存不足"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR example(ParamBlk FAR *parm)

{

NullTerminate(&parm->p[0].val);

_HLock(parm->p[0].val.ev_handle);

_PutStr(_HandToPtr(parm->p[0].val.ev_handle));

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"HANDTOPTR", (FPFI) example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_AllocHand( ), _FreeHand( ), _GetHandSize( ), _HandToPtr( ), _HLock( ), _HUnLock( ), _MemAvail( )


_SetItemCmdKey( ) API 库例程

请参阅	示例

为指定菜单项设置键盘快捷键，并为键盘快捷键设置显示的文本。

语法

void _SetItemCmdKey(MENUID menuid, ITEMID itemid, int key, char FAR *text)
MENUID menuid;	/* 菜单标识。 */
ITEMID itemid;	/* 菜单项标识。 */
int key;	/* 快捷键。 */
char FAR *text;	/* 显示的文本。 */

说明

如果不想显示键盘快捷键，请把 text 作为一个空字符串的指针传递。如果想让系统产生默认的显示文本，请传递 (char FAR *)0。


下面的示例建立一个有三个菜单项的菜单，并给每个菜单项指定一个键盘快捷键。

Visual FoxPro 代码

SET LIBRARY TO SETICMDK

C 代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

_DisposeMenu(menuId);

}

FAR SetItemCmdKeyEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

_SetItemCmdKey(menuId, itemId, altKey | 0x178, "Alt+1");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

_SetItemCmdKey(menuId, itemId, altKey | 0x179, "Alt+2");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

_SetItemCmdKey(menuId, itemId, altKey | 0x17a, "Alt+3");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_OnSelection(menuId, -1, onSelection);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) SetItemCmdKeyEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemCmdKey( ), _GetItemId( )


_SetItemColor( ) API 库例程

请参阅	示例

定义一个菜单项的配色方案。

语法

void _SetItemColor(MENUID menuid, ITEMID itemid, int scheme)
MENUID menuid;	/* 菜单。 */
ITEMID itemid;	/* 菜单项。 */
int scheme;	/* 配色方案。 */

说明

仅在 FoxPro for MS-DOS 专业版中可以使用。

如果不想让菜单项使用 _SetMenuColor( ) 指定的配色方案，请使用 _SetItemColor( )。


在本例中，三个菜单项以不同的配色方案显示。

FoxPro for MS-DOS 代码

SET LIBRARY TO SETICOLO

C 代码

#include <pro_ext.h>

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR GetNewItemId(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

_SetItemColor(menuId, itemId, ALERT_SCHEME);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

_SetItemColor(menuId, itemId, DIALOG_SCHEME);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

_SetItemColor(menuId, itemId, WINDOW_SCHEME);

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_PutStr("\nmenuId ="); putLong(menuId);

_PutStr("\nitemId ="); putLong(itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) GetNewItemId, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemId( )


_SetItemSubMenu( ) API 库例程

请参阅	示例

为给定菜单项指定一个子菜单。

语法

void _SetItemSubMenu(MENUID menuid, ITEMID itemid,
MENUID submenuid)
MENUID menuid;	/* 菜单标识。 */
ITEMID itemid;	/* 菜单项标识。 */
MENUID submenuid;	/* 子菜单标识。 */

说明

可以用 _SetItemSubMenu( ) 把菜单附加到菜单标题，或把子菜单附加到菜单项上。


下面的示例为系统菜单添加一个菜单标题。然后用 _SetItemSubMenu( ) 向这个菜单标题附加一个有两个项的菜单。

Visual FoxPro 代码

SET LIBRARY TO SETISUBM

C 代码

#include <pro_ext.h>

MENUID SysMenuId;

MENUID PopupId;

ITEMID PadId;

void putLong(long n)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = 10;

_PutValue(&val);

}

FAR onSelection(long menuId, long itemId)

{

_PutStr("\nitemId = "); putLong(itemId);

}

void FAR StartUp()

{

ITEMID Bar1Id;

ITEMID Bar2Id;

int Error;

// 给 SYSMENU 添加一个菜单标题

SysMenuId = _MenuId(_SYSMENU);

PadId = _GetNewItemId(SysMenuId);

if (_NewItem(SysMenuId, PadId, _LASTITEM, "\\<Added menu title"))

{

_Error(623); /* "菜单项不能定义。" */

}

// 定义菜单。

PopupId = _GetNewMenuId();

if (Error = _NewMenu(MPOPUP, PopupId))

{

_Error(-Error);

}

Bar1Id = _GetNewItemId(PopupId);

// 警告: 在另一个  _GetNewItemId() 之前调用 _NewItem()。

if (_NewItem(PopupId, Bar1Id, _LASTITEM, "\\<1st item"))

{

_Error(623); /* "菜单项不能定义。" */

}

Bar2Id = _GetNewItemId(PopupId);

if (_NewItem(PopupId, Bar2Id, _LASTITEM, "\\<2nd item"))

{

_Error(623); /* "菜单项不能定义。" */

}

// 给菜单标题附加一个菜单

_SetItemSubMenu(SysMenuId, PadId, PopupId);

// 建立选择动作。

_OnSelection(PopupId, -1, onSelection);

}

void FAR ShutDown()

{

_DisposeItem(SysMenuId, PadId);

_DisposeMenu(PopupId);

}

FoxInfo myFoxInfo[] = {

{"STARTUP",	 (FPFI) StartUp,	CALLONLOAD,   ""},

{"SHUTDOWN",	(FPFI) ShutDown,   CALLONUNLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_MenuId( ), _NewMenu( )


_SetItemText( ) API 库例程

请参阅	示例

更改指定菜单项的显示文本。

语法

void _SetItemText(MENUID menuid, ITEMID itemid, char FAR *text)
MENUID menuid;	/* 菜单标识。 */
ITEMID itemid;	/* 菜单项标识。 */
char FAR *text;	/* 文本。 */

说明

菜单项可以是菜单标题或菜单栏。


下面的示例建立一个有三个菜单项的菜单。然后它用 _SetItemText( ) 来改变菜单项的文本。

Visual FoxPro 代码

SET LIBRARY TO SETITEXT

C 代码

#include <pro_ext.h>

FAR SetItemTextEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_ActivateMenu(menuId);

_Execute("WAIT WINDOW 'Original item text'");

_SetItemText(menuId, _GetItemId(menuId, 0),

"This was the 1st item");

_SetItemText(menuId, _GetItemId(menuId, 1),

"This was the 2nd item");

_SetItemText(menuId, _GetItemId(menuId, 2),

"This was the 3rd item");

_Execute("WAIT WINDOW 'New item text'");

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) SetItemTextEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_GetItemId( ), _GetItemText( )


_SetMenuColor( ) API 库例程

请参阅	示例

为指定的整个菜单和没有设置特殊配色方案的菜单项定义配色方案。

语法

void _SetMenuColor(MENUID menuid, int scheme)
MENUID menuid;	/* 菜单标识。*/
int scheme;	/* 配色方案。 */

说明

仅在 FoxPro for MS-DOS 专业版中可以使用。


下面的示例用以调用参数所指定的配色方案，创建一个有三个菜单项的菜单。

FoxPro for MS-DOS 代码

SET LIBRARY TO SETMNCOL

= MENUCOLOR(1)

= MENUCOLOR(6)

C 代码

#include <pro_ext.h>

FAR SetMenuColorEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

_SetMenuColor(menuId, (int) parm->p[0].val.ev_long);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"MENUCOLOR", (FPFI) SetMenuColorEx, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_MenuId( )


_SetMenuPoint( ) API 库例程

请参阅	示例

指定一个菜单的左上角在屏幕上的位置 loc。

语法

void _SetMenuPoint(MENUID menuid, Point loc)
MENUID menuid;	/* 菜单标识。 */
Point loc;	/* 菜单左上角的位置。*/

说明

通常，菜单根据其大小和用户激活菜单的方式自动定位。提供这个例程可以忽略自动定位功能。


本例创建一个菜单，然后在 _SetMenuPoint( ) 所指定的三个不同的屏幕位置上把它激活。

Visual FoxPro 代码

SET LIBRARY TO SETMNPNT

C 代码

#include <pro_ext.h>

FAR SetMenuPointEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 10; loc.h = 20;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

loc.v = 15; loc.h = 30;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

loc.v = 20; loc.h = 40;

_SetMenuPoint(menuId, loc);

_MenuInteract(&menuId, &itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) SetMenuPointEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_NewMenu( )


_SetMenuPointP( ) API 库例程

请参阅	示例

以象素为单位，指定菜单左上角的屏幕位置 loc。

语法

void _SetMenuPointP(MENUID menuid, Point loc)
MENUID menuid;	/* 菜单标识。 */
Point loc;	/* 菜单左上角的位置。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。

通常，菜单根据其大小和用户激活菜单的方式自动定位。提供这个例程可以忽略自动定位功能。


下面的示例创建一个菜单，然后在 _SetMenuPointP( ) 所指定的三个不同的屏幕位置上把它激活。

Visual FoxPro 代码

SET LIBRARY TO SETMNPTP

C 代码

#include <pro_ext.h>

FAR SetMenuPointPEx(ParamBlk FAR *parm)

{

MENUID menuId;

ITEMID itemId;

Point loc;

menuId = _GetNewMenuId();

_NewMenu(MPOPUP, menuId);

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<1st item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<2nd item");

itemId = _GetNewItemId(menuId);

_NewItem(menuId, itemId, -2, "\\<3rd item");

loc.v = 40; loc.h = 80;

_SetMenuPointP(menuId, loc);

_MenuInteract(&menuId, &itemId);

loc.v = 80; loc.h = 160;

_SetMenuPointP(menuId, loc);

_MenuInteract(&menuId, &itemId);

loc.v = 160; loc.h = 320;

_SetMenuPointP(menuId, loc);

_MenuInteract(&menuId, &itemId);

_DisposeMenu(menuId);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", SetMenuPointPEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_NewMenu( )


_SetObjectProperty( )
_SetObjectProperty( ) API 库例程

请参阅

设置一个对象的属性。

语法

int _SetObjectProperty(Value FAR *objct, char FAR *prop, Value FAR *val,
int fAdd)

说明

第一个参数 *objct 是一个对象引用，第二个参数 *prop 是要设置的属性名，第三个参数 *val 是新属性值。

最后一个参数 fAdd 可以是 0 或非零值，指明如果对象不含有该属性时是否添加该属性。如果 fAdd 为非零值并且该对象不含有您指定的属性，则该属性作为用户自定义属性添加到该对象上，并且该属性具有*val 所指定的值。如果 fAdd 为 0 并且指定的属性不存在，则该属性不添加到该对象上。

如果成功，_SetObjectProperty( ) 返回 0 ；否则，返回相应的负的 Visual FoxPro 错误编号。


请参阅

_GetObjectProperty( )


_Store( ) API 库例程

请参阅	示例

以值 val 代替 loc 所指定的内存变量。

语法

int _Store(Locator FAR *loc, Value FAR *val)
Locator FAR *loc;	/* 内存变量定位器。*/
Value FAR *val;	/* 要存储的值。 */

说明

把 l_subs 设置为指定的下标数目，把 l_sub1 和 l_sub2 设置为实际的下标值，可以引用单个数组元素。数组的第一个元素编号为 1 。如果 loc 指定一个数组且 l_subs 为 0，则  _Store( ) 把 val 中的值存储到数组的所有元素中。

如果运行成功，_Store( ) 返回 0；如果失败，_Store( ) 返回一个负数，其绝对值是 Visual FoxPro 的错误编号。如果向数组存储的过程中 _Store( ) 超出内存之外，则数组元素的某些值可能已设置，而另一些没有设置。


下面的示例把以引用传递方式传递的字符串参数转换为大写形式 。

Visual FoxPro 代码

SET LIBRARY TO STORE

x = "abc"

= XUPPER(@x)

? x

C 代码

#include <pro_ext.h>

void FAR Upper(ParamBlk FAR *parm)

{

char FAR *pString;

Value val;

int i;

//

//	_Load() 和 _Store 是对以引用传递方式传递的参数起作用的函数

//

_Load(&parm->p[0].loc, &val);

//

//	FoxPro 不检查以引用传递方式传递的参数的类型，所以这里进行。

//

if (val.ev_type != 'C') {

_Error(9); // "数据类型不符"

}

    pString = _HandToPtr(val.ev_handle);

for (i = 0; i < val.ev_length; i++)  {

if ('a' <= *pString && *pString <= 'z') {

*pString += ('A' - 'a');

}

pString++;

}

_Store(&parm->p[0].loc, &val);

//

// 需要释放用 _LOAD() 创建的句柄

//

_FreeHand(val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"XUPPER", (FPFI) Upper, 1, "R"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_ALen( ), _FindVar( ), _Load( ), _NameTableIndex( ), _NewVar( ), _Release( )


_StrCmp( ) API 库例程

请参阅	示例

从最左边的字节开始，逐字节地比较两个以 NULL 结尾的字符串。

语法

int _StrCmp(char FAR *string1, char FAR *string2)
char FAR *string1;	/* 比较的第一个字符串。 */
char FAR *string2;	/* 比较的第二个字符串。 */

说明

如果 string1 和 string2 相同，则_StrCmp( ) 返回 0；如果 string1 中第一个不相同的字节大于 string2 中的相应字节，它返回一个正数；如果 string1 中第一个不相同的字节小于 string2 中的相应字节，它返回一个负数。


下面的示例用 _StrCmp( ) 来比较两个作为参数传递的字符串。

Visual FoxPro 代码

SET LIBRARY TO STRCMP

? STRCMP("Hello, world.", "Hello, world.")  && 相同；返回 0

? STRCMP("Hello, world.", "Hello, wurld.")  && 不相同；返回非 0 值

C 代码

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))

{

_Error(182); // "内存不足"

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR example(ParamBlk FAR *parm)

{

int RetValue;

NullTerminate(&parm->p[0].val);

NullTerminate(&parm->p[1].val);

_HLock(parm->p[0].val.ev_handle);

_HLock(parm->p[1].val.ev_handle);

RetValue = _StrCmp(_HandToPtr(parm->p[0].val.ev_handle),

_HandToPtr(parm->p[1].val.ev_handle));

_RetInt(RetValue, 10); // 这里返回控制

_HUnLock(parm->p[0].val.ev_handle);

_HUnLock(parm->p[1].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"STRCMP", (FPFI) example, 2, "C,C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_StrCpy( ), _StrLen( )


_StrCpy( ) API 库例程

请参阅	示例

从 src 中把一个以 NULL 结尾的字符串复制到 dest 中。

语法

void _StrCpy(char FAR *dest, char FAR *src)
char FAR *dest;	/* 目的位置。 */
char FAR *src;	/* 源位置。 */

说明

_StrCpy( ) 不支持重叠式移动。当 src 和 dest 有一些公共字节时，要求重叠式移动。如果要求重叠式移动，请使用 _MemMove( )。


把一个 Visual FoxPro 字符型数组传递给下面的示例。然后它用 _Store( ) 代替数组的第二个元素。

在调用 MYFUNC( ) 之前，Visual FoxPro 示例代码创建一个数组，并将其初始化为字符型。MYFUNC( ) 以引用传递方式传递这个数组。

Visual FoxPro 代码

SET LIBRARY TO STRCPY

? STRCPY("Hello", " world")	&& 返回 "Hello world"

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

#define p0 (parm->p[0].val)

#define p1 (parm->p[1].val)

if (!_SetHandSize(p0.ev_handle, p0.ev_length + p1.ev_length))

_Error(182); // "内存不足 "

_HLock(p0.ev_handle);

_HLock(p1.ev_handle);

((char FAR *) _HandToPtr(p1.ev_handle))[p1.ev_length] = '\0';

_StrCpy((char FAR *) _HandToPtr(p0.ev_handle) + p0.ev_length,

_HandToPtr(p1.ev_handle));

_RetChar(_HandToPtr(p0.ev_handle));

_HUnLock(p0.ev_handle);

_HUnLock(p1.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"STRCPY", (FPFI) example, 2, "C,C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_StrCmp( ), _StrLen( )


_StrLen( ) API 库例程

请参阅	示例

以字节为单位返回指定的以 NULL 结尾的字符串的长度。

语法

int _StrLen(char FAR *string)
char FAR *string;	/* 待测的字符串。 */


下面的示例类似于 Visual FoxPro 函数 LEN( )，但不能处理内嵌 \0 的字符串。

Visual FoxPro 代码

SET LIBRARY TO STRLEN

? STRLEN("Hello") && 返回 5

C 代码

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)

{

if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1)) {

_Error(182); // "内存不足 "

}

((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';

}

FAR example(ParamBlk FAR *parm)

{

NullTerminate(&parm->p[0].val);

_HLock(parm->p[0].val.ev_handle);

_RetInt(_StrLen(_HandToPtr(parm->p[0].val.ev_handle)), 10);

_HUnLock(parm->p[0].val.ev_handle);

}

FoxInfo myFoxInfo[] = {

{"STRLEN", (FPFI) example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_StrCmp( ), _StrCpy( )


_UserError( ) API 库例程

请参阅	示例

用 message 中指定的以 NULL 结尾的文本报告一个错误。

语法

void _UserError(char FAR *message)
char FAR *message;	/* 错误信息。*/

说明

Visual FoxPro 对这一错误的内部编码为 98。用 Visual FoxPro ERROR( ) 函数返回的编码为 1098。Visual FoxPro MESSAGE( ) 函数向用户返回您指定的 message。控制被传递给Visual FoxPro 错误处理器，并不返回。

附注

在 Windows 或 Macintosh 上，不要在 CALLUNLOAD 例程中调用_UserError( ) ，由于 _UserError( ) 的调用, 此库不能装载，也不显示任何信息。


下面的示例调用 _UserError( )，演示了在调用UserError( ) 之后，执行不会返回到 API 例程中

Visual FoxPro 代码

SET LIBRARY TO EXAMPLE

= example()

C 代码

#include <pro_ext.h>

FAR UserErrorEx(ParamBlk FAR *parm)

{

_UserError("This is a _UserError() example.");

_PutStr("This should never be displayed.");

}

FoxInfo myFoxInfo[] = {

{" EXAMPLE ", (FPFI) UserErrorEx, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_Error( ), _ErrorInfo( )


_WAttr( ) API 库例程

请参阅	示例

返回一颜色索引的属性字节，此索引是指定窗口配色方案中的指定颜色索引。

语法

int _WAttr(WHANDLE wh, int color)
WHANDLE wh;	/* 窗口句柄。 */
int color;	/* 颜色索引。 */


下面的示例检查每个配色方案的每种颜色，并显示 _WAttr( ) 返回的属性字节。

Visual FoxPro 代码

SET LIBRARY TO WATTR

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR WAttrEx(ParamBlk FAR *parm)

{

int scheme;

int color;

WHANDLE wh;

int attrib, savePen;

for (scheme = 0; scheme <= 25; scheme++)

{

wh = _WOpen(2, 10, 23, 70, WEVENT, scheme, (Scheme FAR *) 0,

WO_SYSTEMBORDER);

for (color = WA_NORMAL; color <= WA_ISSHADOW; color++)

{

attrib  = _WAttr(wh, color);

savePen = _WAttr(_WGetPort(), WA_PENCOLOR);

_WSetAttr(_WGetPort(), WA_PENCOLOR, attrib);

_PutStr("\nScheme:"); putLong(scheme, 5);

_PutStr("; Color:"); putLong(color, 5);

_PutStr("; Attribute byte:"); putLong(attrib, 5);

_WSetAttr(_WGetPort(), WA_PENCOLOR, savePen);

}

_WClose(wh);

_Execute("WAIT");

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WAttrEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSetAttr( )


_WBottom( ) API 库例程

请参阅	示例

返回指定窗口底端在屏幕上所在的行。

语法

int _WBottom(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例显示最前面的窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WBOTTOM

= WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTop(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeft(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottom(wh), 5);

_PutStr("\nright  ="); putLong(_WRight(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WHeight( ), _WLeft( ), _WRight( ), _WTop( ), _WWidth( )


_WBottomP( ) API 库例程

请参阅	示例

以象素为单位返回指定窗口底端在屏幕上的位置。

语法

int _WBottomP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例显示最前面的窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WBOTTOM

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTopP(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeftP(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottomP(wh), 5);

_PutStr("\nright  ="); putLong(_WRightP(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", Example 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WHeightP( ), _WLeftP( ), _WRightP( ), _WTopP( ), _WWidthP( )


_WClear( ) API 库例程

请参阅	示例

通过把窗口内容区域更改为默认背景色，清除指定窗口的内容。

语法

void _WClear(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

光标的逻辑位置不变。


下面的示例创建一个窗口，并以多个 X 符号填充。当用户按键响应 Visual FoxPro WAIT 命令时，_WClear( ) 就清除窗口。

Visual FoxPro 代码

SET LIBRARY TO WCLEAR

C 代码

#include <pro_ext.h>

FAR WClearEx(ParamBlk FAR *parm)

{

WHANDLE wh;

int row, col;

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (row = 0; row < _WHeight(wh); row++)

{

for (col = 0; col < _WWidth(wh); col++)

{

_WPutChr(wh, 'X');

}

_WPutChr(wh, '\n');

}

_Execute("WAIT WINDOW 'Press any key to clear window'");

_WClear(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WClearEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClearRect( )


_WClearRect( ) API 库例程

请参阅	示例

通过把指定窗口的指定矩形区域更改为默认背景色，清除该矩形区。

语法

void _WClearRect(WHANDLE wh, Rect r)
WHANDLE wh;	/* 窗口句柄。 */
Rect r;	/* 要清除的矩形。 */

说明

输出位置不变。

矩形区的范围是从左上角座标延伸到右下角座标处（但不包括它）。这就是说，应该把右座标和底端座标定义得比矩形大一些。


下面的示例创建一个窗口，并用多个 X 符号填充它。当用户按键响应 Visual FoxPro WAIT 命令时，WClearRect( ) 就清除窗口的矩形区域。

Visual FoxPro 代码

SET LIBRARY TO WCLRECT

C 代码

#include <pro_ext.h>

FAR WClearEx(ParamBlk FAR *parm)

{

WHANDLE wh;

int row, col;

Rect r;

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (row = 0; row < _WHeight(wh); row++)

{

for (col = 0; col < _WWidth(wh); col++)

{

_WPutChr(wh, 'X');

}

}

_Execute("WAIT WINDOW 'Press any key to clear window rectangle'");

r.top	 = 2;

r.left	 = 2;

r.bottom = 15;

r.right  = 65;

_WClearRect(wh, r);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WClearEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClear( )


_WClearRectP( ) API 库例程

请参阅	示例

把窗口的指定矩形区改为默认背景色, 删除此矩形区中的内容。

语法

void _WClearRectP(WHANDLE wh, Rect r)
WHANDLE wh;	/* 窗口句柄。 */
Rect r;	/* 要清除的矩形。 */

说明

在 FoxPro for MS-DOS 的专业版中不能使用。

矩形区以象素为单位指定。输出位置不变。

矩形区的范围是从左上角座标到右下角座标（但不包括它）。这就是说，应该把右座标和底端座标定义得比矩形的大小要大一个象素。


下面的示例创建一个窗口，并用多个 X 符号填充它。当用户按键响应 Visual FoxPro WAIT 命令时，WClearRectP( ) 就清除窗口中的一个矩形区域。

Visual FoxPro 代码

SET LIBRARY TO WCLRECTP

C 代码

#include <pro_ext.h>

FAR WClearEx(ParamBlk FAR *parm)

{

WHANDLE wh;

int row, col;

Rect r;

wh = _WOpen(2, 2, 20, 70, CLOSE, WINDOW_SCHEME, (Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (row = 0; row < _WHeight(wh); row++)

{

for (col = 0; col < _WWidth(wh); col++)

{

_WPutChr(wh, 'X');

}

}

_Execute("WAIT WINDOW 'Press any key to clear window rectangle'");

r.top	 = 20;

r.left	 = 20;

r.bottom = 100;

r.right  = 300;

_WClearRectP(wh, r);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", WClearEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClear( )


_WClose( ) API 库例程

请参阅	示例

关闭指定窗口，并释放与此窗口相关联的所有内存。

语法

void _WClose(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

如果窗口显示在屏幕上，_WClose( ) 就把它从屏幕上删除。


下面的示例创建并显示一个窗口。当用户按健响应 Visual FoxPro WAIT 命令时，_WClose( ) 关闭窗口。

Visual FoxPro 代码

SET LIBRARY TO WCLOSE

C 代码

#include <pro_ext.h>

FAR Ex(ParamBlk FAR *parm)

{

WHANDLE wh;

int row, col;

Rect r;

wh = _WOpen(2, 2, 20, 70, 0, WINDOW_SCHEME, (Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to close window'");

_WClose(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Ex, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WOpen( )


_WFindTitle( ) API 库例程

请参阅	示例

返回具有指定标题的窗口的 WHANDLE 。

语法

WHANDLE _WFindTitle(TEXT *title)
TEXT *title;	/* 窗口标题。*/


下面的示例把窗口隐藏起来，窗口的标题是作为参数传递给此例程的。

Visual FoxPro 代码

SET LIBRARY TO WFINDTIT

CREATE TABLE X (X C(10))

BROWSE NOWAIT

SET LIBR TO WFINDTIT

= WHIDE("X")

C 代码

#include <pro_ext.h>

void FAR WFindTitleEx(ParamBlk FAR *parm)

{

//	增加可读性：

#define pTITLE ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+1))

{

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

pTITLE[parm->p[0].val.ev_length] = '\0';

wh = _WFindTitle(pTITLE);

_HUnLock(parm->p[0].val.ev_handle);

_WHide(wh);

}

FoxInfo myFoxInfo[] = {

{"WHIDE", (FPFI) WFindTitleEx, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSetTitle( )


_WFooter( ) API 库例程

请参阅	示例

输出窗口的以 NULL 结尾的注脚 footer ，窗口由 footer 中的 wh 指定。

语法

void _WFooter(WHANDLE wh, char FAR *footer)
WHANDLE wh;	/* 窗口句柄。*/
char FAR *footer;	/* 窗口注脚。*/

说明

仅在 FoxPro for MS-DOS 专业版中使用。


下面的示例创建一个有标题和注脚的窗口，并显示在屏幕上。它用 _WTitle( ) 和 _WFooter( ) 检索标题和注脚文本，然后将其显示在屏幕上。

FoxPro for MS-DOS 代码

SET LIBRARY TO WFOOTER

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

char FAR *buffer;

wh = _WOpen(4,4,20,70,CLOSE | WEVENT,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WSetTitle(wh, "This is a window title");

_WSetFooter(wh, "This is a window footer");

_WShow(wh);

if ((buffer = _Alloca(128)) == 0)

{

_Error(182); // "内存不足"

}

_WTitle(wh, buffer);

_PutStr("\nThe window title is \"");

_PutStr(buffer);

_PutChr('"');

_WFooter(wh, buffer);

_PutStr("\nThe window footer is \"");

_PutStr(buffer);

_PutChr('"');

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSetFooter( )


_WGetCursor( ) API 库例程

请参阅	示例

返回指定窗口中的当前输出位置。

语法

Point _WGetCursor(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。*/


下面的示例创建一个窗口，并在该窗口内画一个由 X 组成的对角线图。在写每个 X 之前，它用 _WPosCursor( ) 定位光标，然后再用 _WGetCursor( ) 得到同一位置。

Visual FoxPro 代码

SET LIBRARY TO WGETCURS

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

Point putPos, getPos;

wh = _WOpen(4,4,20,70,0,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (putPos.v = 2; putPos.v < 14; putPos.v++)

{

putPos.h = putPos.v;

_WPosCursor(wh, putPos);

getPos = _WGetCursor(wh);

_WPutChr(wh, 'X');

_PutStr("\nCursor position:");

putLong(getPos.v, 5);

putLong(getPos.h, 5);

_Execute("WAIT WINDOW");

}

_WClose(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WPosCursor( )


_WGetCursorP( ) API 库例程

请参阅	示例

以象素为单位返回指定窗口的当前输出位置。

语法

Point _WGetCursorP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。*/

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例创建一个窗口，并在该窗口内画一个由 X 组成的对角线图。在写每个 X 之前，它用  WPosCursorP( ) 定位光标，然后再用 _WGetCursorP( ) 得到同一位置。

Visual FoxPro 代码

SET LIBRARY TO WGETCURP

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

Point putPos, getPos;

wh = _WOpen(4,4,20,70,0,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

for (putPos.v = 10; putPos.v < 100; putPos.v += 10)

{

putPos.h = putPos.v;

_WPosCursorP(wh, putPos);

_WPutChr(wh, 'X');

getPos = _WGetCursorP(wh);

_PutStr("\nCursor position:");

putLong(getPos.v, 5);

putLong(getPos.h, 5);

_Execute("WAIT");

}

_WClose(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WPosCursor( )


_WGetObjectClientWindow( )
_WGetObjectClientWindow( ) API 库例程

请参阅

返回含有指定对象的客户窗口的句柄。

语法

_WGetObjectClientWindow(Value FAR *objct)


请参阅

_WGetObjectWindow( )


_WGetObjectWindow( )
_WGetObjectWindow( ) API 库例程

请参阅

返回含有指定对象的框架窗口的句柄。

语法

_WGetObjectWindow(Value FAR *objct)


请参阅

_WGetObjectClientWindow( )


_WGetPort( ) API 库例程

请参阅	示例

返回窗口的 WHANDLE，该窗口是当前为用户输出所选定的窗口。

语法

WHANDLE _WGetPort(void any)
void any;	/* 指针。 */


当前输出端口改变时，下面的示例显示由 _WGetPort( ) 返回的窗口句柄。

Visual FoxPro 代码

SET LIBRARY TO WGETPORT

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

WHANDLE oldPort;

wh = _WOpen(2,10,23,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

_PutStr("\n1) _WGetPort() ="); putLong(_WGetPort(), 10);

oldPort = _WSetPort(wh);

_PutStr("\n2) _WSetPort(wh) ="); putLong(oldPort, 10);

_PutStr("\n3) _WGetPort() ="); putLong(_WGetPort(), 10);

oldPort = _WSetPort(oldPort);

_PutStr("\n4) _WSetPort(oldPort) =");  putLong(oldPort, 10);

_PutStr("\nShould be back where we started.");

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WhToHwnd( )


_WHeight( ) API 库例程

请参阅	示例

返回指定窗口中内容区的行数。

语法

int _WHeight(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例以行和列为单位显示最前面的窗口的高度和宽度。

Visual FoxPro 代码

SET LIBRARY TO WHEIGHT

=WDIMEN()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\nheight ="); putLong(_WHeight(wh), 5);

_PutStr("\nwidth  ="); putLong(_WWidth(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WDIMEN", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WLeft( ), _WRight( ), _WTop( ), _WWidth( )


_WHeightP( ) API 库例程

请参阅	示例

以象素为单位返回指定窗口中内容区的高度。

语法

int _WHeightP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例以象素为单位显示最前面的窗口的高度和宽度。

Visual FoxPro 代码

SET LIBRARY TO WHEIGHTP

=WDIMEN()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\nheight ="); putLong(_WHeightP(wh), 5);

_PutStr("\nwidth  ="); putLong(_WWidthP(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WDIMEN", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottomP( ), _WLeftP( ), _WRightP( ), _WTopP( ), _WWidthP( )


_WHide( ) API 库例程

请参阅	示例

从屏幕上删除一个窗口，但保持对其内容的追踪，以便可以重新显示。

语法

void _WHide(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例隐藏一个窗口，窗口标题是作为参数传递的。

Visual FoxPro 代码

SET LIBRARY TO WHIDE

CREATE TABLE X (X C(10))

BROWSE NOWAIT

WAIT WINDOW "Press A Key To Hide Window"

SET LIBR TO WFINDTIT

= WHIDE("X")

WAIT WINDOW "Window Is Hidden"

C 代码

#include <pro_ext.h>

void FAR example(ParamBlk FAR *parm)

{

//	增加可读性---

#define pTITLE ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

WHANDLE wh;

if (!_SetHandSize(parm->p[0].val.ev_handle,

parm->p[0].val.ev_length+ 1))

{

_Error(182); // "内存不足"

}

_HLock(parm->p[0].val.ev_handle);

pTITLE[parm->p[0].val.ev_length] = '\0';

wh = _WFindTitle(pTITLE);

_HUnLock(parm->p[0].val.ev_handle);

_WHide(wh);

}

FoxInfo myFoxInfo[] = {

{"WHIDE", (FPFI) Example, 1, "C"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WShow( )


_WhToHwnd( ) API 库例程

请参阅	示例

返回指定 WHANDLE 的 Windows HWND。

语法

HWND_WhToHwnd(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

仅在 Visual FoxPro 和 FoxPro for Windows 专业版中可以使用。

有关 FoxPro for Macintosh 专业版中功能相同函数的描述，请参阅下面主题。


下面的示例创建一个窗口，然后用回调函数 _WhToHwnd( ) 得到该窗口的 Windows HWND。为了验证  _WhToHwnd( ) 所返回的值，本例把 HWND 作为参数传递给一个 Windows 函数。

Visual FoxPro 代码

SET LIBRARY TO WHTOHWND

C 代码

#include <windows.h>

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR WhToHwndEx(ParamBlk FAR *parm)

{

RECT Rect;

HWND hwnd;

WHANDLE wh;

Value val;

wh = _WOpenP(10,10,120,240,CLOSE,WINDOW_SCHEME, (Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

//	得到 Windows 窗口句柄，当作一个参数传递给 Windows 函数。

hwnd = _WhToHwnd(wh);

GetWindowRect(hwnd, &Rect); // Windows 函数

_PutStr("\ntop	="); putLong(Rect.top, 5);

_PutStr("\nleft   ="); putLong(Rect.left, 5);

_PutStr("\nbottom ="); putLong(Rect.bottom, 5);

_PutStr("\nright  ="); putLong(Rect.right, 5);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", WhToHwndEx, CALLONLOAD,  ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WFindTitle( ), _WOpen( )


_WhToHwnd( ) Macintosh API 库例程
_WhToHwnd( ) API 库例程

请参阅	示例

返回指定 WHANDLE 的 Macintosh WindowPtr 。

语法

WindowPtr _WhToHwnd(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

仅在 FoxPro for Macintosh 专业版中可以使用。

有关 Visual FoxPro 和 FoxPro for Windows 专业版中功能相同函数的描述，请参阅前面主题。


下面的示例创建一个窗口，然后用回调函数 _WhToHwnd( ) 得到该窗口的 Macintosh WindowPtr。为了验证  _WhToHwnd( ) 所返回的值，本例把 WindowPtr 作为参数传递给几个 Macintosh 函数。

FoxPro for Macintosh 代码

SET LIBRARY TO WHTOHWND

C 代码

#include <windows.h>

#include <pro_ext.h>

FAR WhToHwndEx(ParamBlk FAR *parm)

{

WindowPtr theWindow;

WHANDLE wh;

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

//	得到 WindowPtr，并当作一个参数用于 Macitosh 函数中。

 and use as a parameter to a Macintosh function

theWindow = _WhToHwnd(wh);

_Execute("Wait 'Press any key to hide the window.'");

HideWindow(theWindow);

_Execute("Wait 'Press any key to show the window.'");

ShowWindow(theWindow);

_Execute("Wait 'Press any key to close the window.'");

_WClose(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", WhToHwndEx, CALLONLOAD,  ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WFindTitle( ), _WOpen( )


_WLeft( ) API 库例程

请参阅	示例

返回指定窗口左边缘在屏幕上所处的列。

语法

int _WLeft(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。*/


下面的示例显示最前面的窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WLEFT

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTop(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeft(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottom(wh), 5);

_PutStr("\nright  ="); putLong(_WRight(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeight( ),_WRight( ), _WTop( ), _WWidth( )


_WLeftP( ) API 库例程

请参阅	示例

以象素为单位返回指定窗口左边缘在屏幕上所处的位置。

语法

int _WLeftP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例以象素为单位显示最前面的窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WLEFTP

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTopP(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeftP(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottomP(wh), 5);

_PutStr("\nright  ="); putLong(_WRightP(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeight( ), _WRight( ), _WTop( ), _WWidth( )


_WMainWindow( ) API 库例程

请参阅	示例

返回 Visual FoxPro 主窗口的 WHANDLE。

语法

WHANDLE _WMainWindow(void any)
void any;	/* 指针。 */


下面的示例把一条信息写到 Visual FoxPro 主窗口中。

Visual FoxPro 代码

SET LIBRARY TO WMAIN

= EXWMAIN()

C 代码

#include <pro_ext.h>

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WMainWindow();

WPutStr(wh, "\nThis is the FoxPro main window or desktop.");

}

FoxInfo myFoxInfo[] = {

{"EXWMAIN", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WhToHwnd( )


_WMove( ) API 库例程

请参阅	示例

把指定窗口移动到 pt 所指定的新位置上。

语法

void _WMove(WHANDLE wh, Point pt)
WHANDLE wh;	/* 窗口句柄。 */
Point pt;	/* 新位置。 */

说明

pt 参数以行和列为单位指定了窗口左上角的位置。新位置有可能使窗口部分显示或者完全显示在屏幕之外。


下面的示例把最前面的窗口沿对角线方向向下移动 10 行、向右移动 10 列。

Visual FoxPro 代码

SET LIBRARY TO WMOVE

=WMOVE()

C 代码

#include <pro_ext.h>

void FAR WMoveEx(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

Point newPos;

newPos.v = _WTop(wh)  + 10;

newPos.h = _WLeft(wh) + 10;

_WMove(wh, newPos);

}

FoxInfo myFoxInfo[] = {

{"WMOVE", (FPFI) WMoveEx, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSIZE( )


_WMoveP( ) API 库例程

请参阅	示例

把指定窗口移动到 pt 所指定的新位置。

语法

void _WMoveP(WHANDLE wh, Point pt)
WHANDLE wh;	/* 窗口句柄。 */
Point pt;	/* 新位置。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。

pt 参数以象素为单位指定窗口左上角的位置。新位置可能使窗口部分显示或者完全显示在屏幕之外。


下面的示例把最前面的窗口沿对角线方向向下移动 40 个象素、向右移动 40 个象素。

Visual FoxPro 代码

SET LIBRARY TO WMOVEP

=WMOVEP()

C 代码

#include <pro_ext.h>

void FAR WMovePEx(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

Point newPos;

newPos.v = _WTopP(wh)  + 40;

newPos.h = _WLeftP(wh) + 40;

_WMoveP(wh, newPos);

}

FoxInfo myFoxInfo[] = {

{"WMOVEP", WMovePEx, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSIZE( )


_WOnTop( ) API 库例程

请参阅	示例

返回最前面窗口的 WHANDLE 。

语法

WHANDLE _WOnTop(void any)
void any;	/* 指针。 */

说明

通常情况下，键击属于最前面的窗口，处理例程需要做出恰当地响应。


下面的示例显示有关最前面窗口的位置信息。

Visual FoxPro 代码

SET LIBRARY TO WONTOP

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTop(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeft(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottom(wh), 5);

_PutStr("\nright  ="); putLong(_WRight(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSendBehind( ), _WShow( ), _WTop( )


_WOpen( ) API 库例程

请参阅	示例

创建一个新窗口，其座标由 top, left, bottom 和 right 参数指定。

语法

WHANDLE _WOpen(int top, int left, int bottom, int right, int flag,
int scheme_num, Scheme FAR *scheme, char FAR *bord)
int top;	/* 顶端座标的行号。*/
int left;	/* 左侧座标的列号。*/
int bottom;	/* 底端座标的行号。*/
int right;	/* 右侧座标的列号。*/
int flag;	/* 属性。 */
int scheme_num;	/* 配色方案。*/
Scheme FAR *scheme;	/* 指向要使用的配色方案。*/
char FAR *bord;	/* 边框类型。*/

说明

窗口座标可以在屏幕之外，但是高度不能超过 120 ，宽度不能超过 264。若要保存这个窗口在屏幕之外的图象，就要多分配一些内存。

flag 参数确定该窗口的属性。flag 可以是下列一个或多个标识值。可用 C 语言的 | 或者 + 操作符来组合使用多个标识值。典型的窗口边框在 PRO_EXT.H 中有定义。

flag 值	窗口属性
WCURSOR	在本窗口中可显示插入点。
ZOOM	用户可以缩放窗口。
ADJ	用户可以调整窗口尺寸的大小。
CLOSE	用户可以关闭窗口。
MOVE	用户可以移动窗口。
AUTOSCROLL	当输出滚出底线时，窗口滚动。
WEVENT	窗口可以接受、激活事件和使事件不活动。
SHADOW	窗口具有阴影。
WMODAL	用户不能把该窗口放在其他窗口之后。
WMINIMIZE	用户可以使该窗口最小化。
scheme_num 可以是任何有效的配色方案编号，也可以是 -1。-1 表明 scheme 参数指向要使用的配色方案。


下面的示例用许多不同的配色方案和边框来创建窗口。请特别注意自定义配色方案和自定义边框。（用户指定的边框仅在 FoxPro for MS-DOS 中可以使用。）

Visual FoxPro 代码

SET LIBRARY TO WOPEN

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

char customBorder[] = "ABCDEFGHabcdefgh";

Scheme customScheme =

{

(char) (BLACK_ON	| WHITE),

(char) (RED_ON	| BLACK	| BLINK),

(char) (WHITE_ON	| WHITE	| BRIGHT),

(char) (CYAN_ON	| BLUE	| BRIGHT),

(char) (GREEN_ON	| BROWN),

(char) (BROWN_ON	| BROWN	| BRIGHT),

(char) (MAGENTA_ON	| MAGENTA	| BRIGHT),

(char) (RED_ON	| MAGENTA	| BRIGHT | BLINK),

(char) (BROWN_ON	| GREEN	| BRIGHT),

(char) (BLACK_ON	| CYAN),

(char) (BLUE_ON	| CYAN),

};

_Execute("WAIT WINDOW 'Press any key to see a window \

in WINDOW_SCHEME with WO_DOUBLEBOX border'");

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_DOUBLEBOX);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in ALERT_SCHEME with WO_SINGLEBOX border'");

_WClose(wh);

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,ALERT_SCHEME, (Scheme FAR *) 0,

WO_SINGLEBOX);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in WINDOW_SCHEME with WO_PANELBORDER border'");

_WClose(wh);

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_PANELBORDER);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in a custom scheme with WO_SYSTEMBORDER border'");

_WClose(wh);

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,-1,(Scheme FAR *) customScheme,

WO_SYSTEMBORDER);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in WINDOW_SCHEME with a custom border (DOS only)'");

_WClose(wh);

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

customBorder);

_WShow(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClose( ), _WSelect( ), _WSetFooter( ), _WSetTitle( ), _WShow( )


_WOpenP( ) API 库例程

请参阅	示例

在 top, left, bottom 和 right 参数指定的位置创建一个新窗口。

语法

WHANDLE _WOpenP(int top, int left, int bottom, int right, int flag,
int scheme_num, Scheme FAR *scheme, char FAR *bord)
int top;	/* 以象素为单位表示的顶端座标。*/
int left;	/* 以象素为单位表示的左侧座标。*/
int bottom;	/* 以象素为单位表示的底端座标。*/
int right;	/* 以象素为单位表示的右侧座标。*/
int flag;	/* 属性。*/
int scheme_num;	/* 配色方案。*/
Scheme FAR *scheme;	/* 指向要使用的配色方案。*/
char FAR *bord;	/* 边框类型。*/

说明

在 FoxPro for MS-DOS 专业版中不能使用。

窗口位置可以超出屏幕之外。若要保存这个窗口在屏幕之外的图象，就要多分配一些内存。

 flag 参数判断该窗口的属性。flag 可以是下列一个或多个标识值。可用 C 语言的 | 或者 + 操作符来组合使用多个标识值。典型的窗口边框在 PRO_EXT.H 中定义。

flag 值	窗口属性
WCURSOR	在本窗口中可显示插入点。
ZOOM	用户可以缩放窗口。
ADJ	用户可以调整窗口尺寸的大小。
CLOSE	用户可以关闭窗口。
MOVE	用户可以移动窗口。
AUTOSCROLL	当输出滚出底线时，窗口滚动。
WEVENT	窗口可以接受、激活事件和使事件不活动。
SHADOW	窗口具有阴影。
WMODAL	用户不能把该窗口放到其他窗口之后。
WMINIMIZE	用户可以最小化该窗口。
scheme_num 可以是任何有效的配色方案编号，也可以是 -1。-1 表明 scheme 参数指向要使用的配色方案。


下面的示例用许多不同的配色方案和边框来创建窗口。请特别注意自定义的配色方案。

Visual FoxPro 代码

SET LIBRARY TO WOPENP

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

char customScheme[12] =

{

BLACK_ON	| WHITE,

RED_ON	| BLACK	| BLINK,

WHITE_ON	| WHITE	| BRIGHT,

CYAN_ON	| BLUE	| BRIGHT,

GREEN_ON	| BROWN,

BROWN_ON	| BROWN	| BRIGHT,

MAGENTA_ON	| MAGENTA	| BRIGHT,

RED_ON	| MAGENTA	| BRIGHT | BLINK,

BROWN_ON	| GREEN	| BRIGHT,

BLACK_ON	| CYAN,

BLUE_ON	| CYAN,

};

_Execute("WAIT WINDOW 'Press any key to see a window \

in WINDOW_SCHEME with WO_DOUBLEBOX border'");

wh = _WOpenP(10, 10, 160, 320, WEVENT | CLOSE, WINDOW_SCHEME,

(Scheme FAR *)0, WO_DOUBLEBOX);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in ALERT_SCHEME with WO_SINGLEBOX border'");

_WClose(wh);

wh = _WOpenP(10, 10, 160, 320, WEVENT | CLOSE, ALERT_SCHEME,

(Scheme FAR *)0, WO_SINGLEBOX);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in WINDOW_SCHEME with WO_PANELBORDER border'");

_WClose(wh);

wh = _WOpenP(10, 10, 160, 320, WEVENT | CLOSE, WINDOW_SCHEME,

(Scheme FAR *)0, WO_PANELBORDER);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to see a window \

in a custom scheme with WO_SYSTEMBORDER border'");

_WClose(wh);

wh = _WOpenP(10,10,160,320,WEVENT | CLOSE,-1,customScheme,

WO_SYSTEMBORDER);

_WShow(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClose( ), _WSelect( ), _WSetFooter( ), _WSetTitle( ), _WShow( )


_WPosCursor( ) API 库例程

请参阅	示例

把输出位置定位在指定窗口中由 pt 指定的位置（以行和列表示）。

语法

void _WPosCursor(WHANDLE wh, Point pt)
WHANDLE wh;	/* 窗口句柄。 */
Point pt;	/* 输出位置。 */

说明

_WPosCursor( ) 不会使插入点出现。正常情况下，只有当 Visual FoxPro 正在等待输入时，插入点才是可见的。


下面的示例创建一个窗口，并在此窗口内画由 X 组成的对角线图。在写每一个 X 之前，它用 _WPosCursor( ) 来定位光标，然后再用 _WGetCursor( ) 来得到同一位置。

Visual FoxPro 代码

SET LIBRARY TO WPOSCUR

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

Point putPos, getPos;

wh = _WOpen(4,4,20,70,0,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (putPos.v = 2; putPos.v < 14; putPos.v++)

{

putPos.h = putPos.v;

_WPosCursor(wh, putPos);

_WPutChr(wh, 'X');

getPos = _WGetCursor(wh);

_PutStr("\nCursor position:");

putLong(getPos.v, 5);

putLong(getPos.h, 5);

_Execute("WAIT");

}

_WClose(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WGetCursor( )


_WPosCursorP( ) API 库例程

请参阅	示例

把指定窗口的输出位置定位在以象素为单位由 pt 指定的位置。

语法

void _WPosCursorP(WHANDLE wh, Point pt)
WHANDLE wh;	/* 窗口句柄。 */
Point pt;	/* 输出位置。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。

_WPosCursorP( ) 不会使插入点出现。正常情况下，只有当 Visual FoxPro 正在等待输入时，插入点才是可见的。


下面的示例创建一个窗口，并在此窗口内画由 X 组成的对角线图。在写每一个 X 之前，它用 _WPosCursorP( ) 来定位光标，然后用 _WGetCursorP( ) 来得到同一位置。

Visual FoxPro 代码

SET LIBRARY TO WPOSCURP

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

Point putPos, getPos;

wh = _WOpen(4,4,20,70,0,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

for (putPos.v = 10; putPos.v < 100; putPos.v += 10)

{

putPos.h = putPos.v;

_WPosCursorP(wh, putPos);

_WPutChr(wh, 'X');

getPos = _WGetCursorP(wh);

_PutStr("\nCursor position:");

putLong(getPos.v, 5);

putLong(getPos.h, 5);

_Execute("WAIT");

}

_WClose(wh);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WGetCursor( )


_WPutChr( ) API 库例程

请参阅	示例

在指定窗口的输出位置用当前颜色显示一个字符 char 。

语法

void _WPutChr(WHANDLE wh, int char)
WHANDLE wh;	/* 窗口句柄。 */
int char;	/* 要显示的字符。 */

说明

换行、回车和铃声等特殊字符当作控制字符处理，不在屏幕上显示。

若要显示与这些控制字符相对的字符，请把字符值加上 256。


下面的示例在一个新窗口中用 _WPutChr( ) 显示所有的 8 位值。

Visual FoxPro 代码

SET LIBRARY TO WPUTCHR

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

int i;

WHANDLE wh;

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (i = 0; i < 256; i++)

_WPutChr(wh, i);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WPutStr( )


_WPutStr( ) API 库例程

请参阅	示例

在指定窗口的输出位置用当前色显示一个以 NULL 结尾的字符串。

语法

void _WPutStr(WHANDLE wh, char FAR *theStr)
WHANDLE wh;	/* 窗口句柄。 */
char FAR *theStr;	/* 要显示的字符串。 */

说明

在没有 AUTOSCROLL 属性设置的窗口中，使窗口正常滚动的输出会产生未定义的结果。


下面的示例用 _WPutStr( ) 在一个新窗口中显示包括所有 8 位值（\0 除外）的字符串。

Visual FoxPro 代码

SET LIBRARY TO WPUTSTR

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

int i;

WHANDLE wh;

char String[256];

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

for (i = 0; i < 255; i++)

String[i] = i + 1;

String[255] = '\0';

_WPutStr(wh, String);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WPutChr( )


_WRight( ) API 库例程

请参阅	示例

返回指定窗口右边缘在屏幕上所处的列。

语法

int _WRight(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例显示最前面的窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WRIGHT

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTop(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeft(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottom(wh), 5);

_PutStr("\nright  ="); putLong(_WRight(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeight( ), _WLeft( ), _WTop( ), _WWidth( )


_WRightP( ) API 库例程

请参阅	示例

以象素为单位返回指定窗口右边缘在屏幕上的位置。

语法

int _WRightP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例显示最前面的窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WRIGHTP

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTopP(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeftP(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottomP(wh), 5);

_PutStr("\nright  ="); putLong(_WRightP(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottomP( ), _WHeightP( ), _WLeftP( ), _WTopP( ), _WWidthP( )


_WScroll( ) API 库例程

请参阅	示例

上下、左右滚动窗口中的部分内容。

语法

void _WScroll(WHANDLE wh, Rect r, int dv, int dh)
WHANDLE wh;	/* 窗口句柄。 */
Rect r;	/* 要滚动的部分。*/
int dv;	/* 向左或向右。*/
int dh;	/* 向上或向下。*/

说明

 •	   r 参数描述窗口中要滚动的部分。

 •	   dv 参数描述窗口要向左或向右滚动的字符数。如果 dv 为负值，则窗口内容向左滚动。如果 dv 正值，则窗口内容向右滚动。

 •	   dh 参数描述窗口要向上或向下滚动的字符数。如果 dh 为负值，则窗口内容向上滚动。如果 dh 正值，则窗口内容向下滚动。

如果 dv 和 dh 都为 0，则 _WScroll( ) 清除矩形内的字符。


下面的示例打开一个窗口，并画一个由 X 组成的矩形图案。这个矩形也是滚动矩形。本例首先将矩形向上、向左各滚动两个位置，然后向下、向右各滚动四个位置。

Visual FoxPro 代码

SET LIBRARY TO WSCROLL

C 代码

#include <pro_ext.h>

FAR WScrollEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point pos;

Rect rect;

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

rect.top	= 6;

rect.left	= 6;

rect.bottom = 12;

rect.right	= 12;

for (pos.v = rect.top; pos.v < rect.bottom; pos.v++)

{

for (pos.h = rect.left; pos.h < rect.right; pos.h++)

{

_WPosCursor(wh, pos);

_WPutChr(wh, 'X');

}

}

_Execute("WAIT WINDOW 'Press any key to _WScroll(wh,rect,-2,-2)'");

_WScroll(wh, rect, -2, -2);

_Execute("WAIT WINDOW 'Press any key to _WScroll(wh,rect,+4,+4)'");

_WScroll(wh, rect, +4, +4);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WScrollEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClear( )


_WScrollP( ) API 库例程

请参阅	示例

上下、左右滚动窗口中的部分内容。

语法

void _WScrollP(WHANDLE wh, Rect r, int dv, int dh)
WHANDLE wh;	/* 窗口句柄。 */
Rect r;	/* 要滚动的部分。*/
int dv;	/* 向左或向右。*/
int dh;	/* 向上或向下。*/

说明

在 FoxPro for MS-DOS 专业版中不能使用。

 •	   r 参数描述窗口中要滚动的部分。

 •	   dv 参数描述窗口要向左或向右滚动的象素数。如果 dv 为负值，则窗口内容向左滚动。如果 dv 正值，则窗口内容向右滚动。

 •	   dh 参数描述窗口要向上或向下滚动的象素数。如果 dh 为负值，则窗口内容向上滚动。如果 dh 正值，则窗口内容向下滚动。

如果 dv 和 dh 都为 0，则 _WScroll( ) 清除矩形内的字符。


下面的示例打开一个窗口，并画一个由 X 组成的矩形图案。这个矩形也是滚动矩形。_WScrollP( ) 首先将矩形向上、向左滚动，然后向下、向右滚动。

Visual FoxPro 代码

SET LIBRARY TO WSCROLLP

C 代码

#include <pro_ext.h>

FAR WScrollEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point pos;

Rect rect;

wh = _WOpenP(2, 2, 160, 320, WEVENT | CLOSE, WINDOW_SCHEME,

(char *) 0, WO_SYSTEMBORDER);

    _WShow(wh);

rect.top	= 40;

rect.left	= 40;

rect.bottom = 100;

rect.right	= 100;

for (pos.v = rect.top; pos.v < rect.bottom; pos.v += 6)

{

for (pos.h = rect.left; pos.h < rect.right; pos.h +=6)

{

_WPosCursorP(wh, pos);

            _WPutChr(wh, 'X');

}

}

_Execute("WAIT 'Press any key to _WScroll(wh, rect, -20, -20)'");

_WScrollP(wh, rect, -20, -20);

_Execute("WAIT 'Press any key to _WScroll(wh, rect, +40, +40)'");

_WScrollP(wh, rect, +40, +40);

}

FoxInfo myFoxInfo[] =

{

{"ONLOAD", WScrollEx, CALLONLOAD, ""},

};

FoxTable _FoxTable =

{

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClear( )


_WSelect( ) API 库例程

请参阅	示例

把指定窗口显示在屏幕的最前面。

语法

void _WSelect(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例创建五个相互层叠的窗口。从所创建的第一个窗口开始，用 _WSelect( ) 把窗口逐个移动到最前面。

Visual FoxPro 代码

SET LIBRARY TO WSELECT

C 代码

#include <pro_ext.h>

FAR WSelectEx(ParamBlk FAR *parm)

{

WHANDLE wh[5];

int i;

for (i = 0; i < 5; i++)

{

wh[i] = _WOpen(4 + 2*i,4 + 2*i,12 + 2*i,40 + 2*i,WEVENT | CLOSE,

WINDOW_SCHEME, (Scheme FAR *) 0, WO_SYSTEMBORDER);

_WShow(wh[i]);

}

for (i = 0; i < 5; i++)

{

_Execute("WAIT WINDOW 'Press key to _WSelect() next window'");

_WSelect(wh[i]);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WSelectEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WOnTop( ), _WShow( )


_WSendBehind( ) API 库例程

请参阅	示例

把指定窗口送到屏幕的最后面。

语法

void _WSendBehind(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例创建五个相互层叠的窗口。从最后创建的一个窗口开始，用 _WSendBehind( )把窗口逐个送到最后面。

Visual FoxPro 代码

SET LIBRARY TO WSENDBEH

C 代码

#include <pro_ext.h>

FAR WSendBehindEx(ParamBlk FAR *parm)

{

WHANDLE wh[5];

int i;

for (i = 0; i < 5; i++)

{

wh[i] = _WOpen(4 + 2*i,4 + 2*i,12 + 2*i,40 + 2*i,WEVENT | CLOSE,

WINDOW_SCHEME, (Scheme FAR *) 0, WO_SYSTEMBORDER);

_WShow(wh[i]);

}

for (i = 4; i >= 0; i--)

{

_Execute("WAIT WINDOW 'Press key to _WSendBehind() next window'");

_WSendBehind(wh[i]);

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WSendBehindEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WOnTop( ), _WSelect( )


_WSetAttr( ) API 库例程

请参阅	示例

把 color 配色方案的属性改为新属性 attr 。其中的 color 是指定窗口配色方案中指定的配色方案索引。

语法

void _WSetAttr(WHANDLE wh, int color, int attr)
WHANDLE wh;	/* 窗口句柄。 */
int color;	/* 配色方案。*/
int attr;	/* 属性。 */


下面的示例遍历每个配色方案中的每种颜色，用 _WSetAttr( ) 设置画笔颜色，然后用每种颜色显示一些文本。

Visual FoxPro 代码

SET LIBRARY TO WSETATTR

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR WAttrEx(ParamBlk FAR *parm)

{

int scheme;

int color;

WHANDLE wh;

int attrib, savePen;

for (scheme = 0; scheme <= 25; scheme++)

{

wh = _WOpen(2,10,23,70,WEVENT,scheme,(Scheme FAR *)0,

WO_SYSTEMBORDER);

for (color = WA_NORMAL; color <= WA_ISSHADOW; color++)

{

attrib  = _WAttr(wh, color);

savePen = _WAttr(_WGetPort(), WA_PENCOLOR);

_WSetAttr(_WGetPort(), WA_PENCOLOR, attrib);

_PutStr("\nScheme:"); putLong(scheme, 5);

_PutStr("; Color:"); putLong(color, 5);

_PutStr("; Attribute byte:"); putLong(attrib, 5);

_WSetAttr(_WGetPort(), WA_PENCOLOR, savePen);

}

_WClose(wh);

_Execute("WAIT");

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WAttrEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WClear( ), _WClearRect( )


_WSetFooter( ) API 库例程

请参阅	示例

改变指定窗口的注脚 footer。

语法

void _WSetFooter(WHANDLE wh, char FAR *footer)
WHANDLE wh;	/* 窗口句柄。 */
char FAR *footer;	/* 注脚文本。 */

说明

只能在 FoxPro for MS-DOS 专业版中使用。

若要删除窗口的注脚，请把 (char FAR *)0 作为新注脚传递给 _WSetFooter( ) API 库例程。


下面的示例创建一个窗口，用 _WSetTitle( ) 设置其标题文本，用 _WSetFooter( ) 设置注脚文本。

FoxPro for MS-DOS 代码

SET LIBRARY TO WSETFOOT

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

char FAR *buffer;

wh = _WOpen(4,4,20,70,CLOSE | WEVENT,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WSetTitle(wh, "This is a window title");

_WSetFooter(wh, "This is a window footer");

_WShow(wh);

if ((buffer = _Alloca(128)) == 0)

{

_Error(182); // "内存不足"

}

_WTitle(wh, buffer);

_PutStr("\nThe window title is \"");

_PutStr(buffer);

_PutChr('"');

_WFooter(wh, buffer);

_PutStr("\nThe window footer is \"");

_PutStr(buffer);

_PutChr('"');

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WFooter( )


_WSetPort( ) API 库例程

请参阅	示例

把用户输出窗口更改为指定的窗口。

语法

WHANDLE _WSetPort(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

_WSetPort( ) 返回前一个输出窗口的句柄。

附注

如果您的例程更改了用户输出窗口，在返回 Visual FoxPro 之前一定不要忘记恢复用户输出窗口。


下面的示例创建一个窗口，并使它成为输出端口。在这个新建窗口中写入一些文本，然后再切换回原来的输出端口。

Visual FoxPro 代码

SET LIBRARY TO WSETPORT

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

WHANDLE oldPort;

wh = _WOpen(2,10,23,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

_PutStr("\n1) _WGetPort() ="); putLong(_WGetPort(), 10);

oldPort = _WSetPort(wh);

_PutStr("\n2) _WSetPort(wh) ="); putLong(oldPort, 10);

_PutStr("\n3) _WGetPort() ="); putLong(_WGetPort(), 10);

oldPort = _WSetPort(oldPort);

_PutStr("\n4) _WSetPort(oldPort) =");  putLong(oldPort, 10);

_PutStr("\nShould be back where we started.");

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WGetPort( )


_WSetTitle( ) API 库例程

请参阅	示例

把指定窗口的标题更改为 title。

语法

void _WSetTitle(WHANDLE wh, char FAR *title)
WHANDLE wh;	/* 窗口句柄。 */
char FAR *title;	/* 窗口标题。 */

说明

若要删除一个窗口的标题，请把 (char FAR *)0 作为新标题传递给 _WSetTitle( ) API 库例程。


下面的示例创建一个窗口，用 _WSetTitle( ) 定义它的标题，用 _WSetFooter( ) 定义它的注脚。窗口注脚仅在 FoxPro for MS-DOS 中可以使用。

Visual FoxPro 代码

SET LIBRARY TO WSETTITL

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

char FAR *buffer;

wh = _WOpen(4,4,20,70,CLOSE | WEVENT,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WSetTitle(wh, "This is a window title");

_WSetFooter(wh, "This is a window footer");

_WShow(wh);

if ((buffer = _Alloca(128)) == 0)

{

_Error(182); // "内存不足"

}

_WTitle(wh, buffer);

_PutStr("\nThe window title is \"");

_PutStr(buffer);

_PutChr('"');

_WFooter(wh, buffer);

_PutStr("\nThe window footer is \"");

_PutStr(buffer);

_PutChr('"');

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WFindTitle( )


_WShow( ) API 库例程

请参阅	示例

在屏幕上把隐藏的窗口显示出来。

语法

void _WShow(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

创建窗口后，默认情况下它是隐藏的，需要用  _WShow( ) 把它显示出来。


下面的示例包括两个 API 例程。WINOPEN( ) 打开一个窗口，但不调用_WShow( )，说明窗口是隐藏的。需要用_WShow( ) 把它显示在屏幕上。

Visual FoxPro 代码

SET LIBRARY TO WSHOW

wh = WOPEN()

= WSHOW(wh)

C 代码

#include <pro_ext.h>

FAR WOpen(ParamBlk FAR *parm)

{

_RetInt(_WOpen(2, 2, 20, 70, WEVENT | CLOSE, WINDOW_SCHEME,

(Scheme FAR *) 0, WO_SYSTEMBORDER), 10);

}

FAR WShow(ParamBlk FAR *parm)

{

_WShow(parm->p[0].val.ev_long);

}

FoxInfo myFoxInfo[] = {

{"WOPEN", (FPFI) WOpen, 0, ""},

{"WSHOW", (FPFI) WShow, 1, "I"},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WHide( ), _WOpen( ), _WSelect( )


_WSize( ) API 库例程

请参阅	示例

把指定窗口的新尺寸设置为 pt 参数中 h 和 v 所指定的高度和宽度。

语法

void _WSize(WHANDLE wh, Point pt)
WHANDLE wh;	/* 窗口句柄。 */
Point pt;	/* 位置。 */


下面的示例创建一个窗口，然后扩大它的宽度和高度。

Visual FoxPro 代码

SET LIBRARY TO WSIZE

C 代码

#include <pro_ext.h>

FAR WSizeEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point dim;

wh = _WOpen(2,2,10,10,CLOSE | WEVENT,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

dim.v = 8;

//	增加宽度

for (dim.h = 8; dim.h < 60; dim.h += 4)

{

_WSize(wh, dim);

_Execute("WAIT WINDOW 'Press Any Key To Change Size'");

}

//	增加高度

for (dim.v = 8; dim.v < 20; dim.v += 2)

{

_WSize(wh, dim);

_Execute("WAIT WINDOW 'Press Any Key To Change Size'");

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) WSizeEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WMove( )


_WSizeP( ) API 库例程

请参阅	示例

把指定窗口的新尺寸设置为 pt 参数中以象素为单位由 h 和 v 指定的高度和宽度。

语法

void _WSizeP(WHANDLE wh, Point pt)
WHANDLE wh;	/* 窗口句柄。 */
Point pt;	/* 位置。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例创建一个窗口，然后扩大它的宽度和高度。

Visual FoxPro 代码

SET LIBRARY TO WSIZEP

C 代码

#include <pro_ext.h>

FAR WSizeEx(ParamBlk FAR *parm)

{

WHANDLE wh;

Point dim;

wh = _WOpenP(6,6,20,20,CLOSE | WEVENT,WINDOW_SCHEME,(Scheme FAR *)0,

WO_SYSTEMBORDER);

_WShow(wh);

dim.v = 14;

//	增加宽度

for (dim.h = 14; dim.h < 480; dim.h += 40)

{

_WSizeP(wh, dim);

_Execute("WAIT");

}

//	增加高度

for (dim.v = 14; dim.v < 240; dim.v += 40)

{

_WSizeP(wh, dim);

_Execute("WAIT WINDOW 'Press Any Key To Change Window Size'");

}

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", WSizeEx, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottomP( ), _WLeftP( ), _WRightP( ), _WTopP( )


_WTitle( ) API 库例程

请参阅	示例

把窗口 wh 以 NULL 结尾的标题放入 title 中。

语法

void _WTitle(WHANDLE wh, char FAR *title)
WHANDLE wh;	/* 窗口句柄。 */
char FAR *title;	/* 窗口标题。 */


下面的示例创建并显示一个带有标题和注脚的窗口。_WTitle( ) 和 _WFooter( ) 检索标题和注脚文本，然后在屏幕上显示出标题和注脚。窗口注脚仅在 FoxPro for MS-DOS 可用。

Visual FoxPro 代码

SET LIBRARY TO WTITLE

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

char FAR *buffer;

wh = _WOpen(4,4,20,70,CLOSE | WEVENT,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WSetTitle(wh, "This is a window title");

_WSetFooter(wh, "This is a window footer");

_WShow(wh);

if ((buffer = _Alloca(128)) == 0)

{

_Error(182); // "内存不足 "

}

_WTitle(wh, buffer);

_PutStr("\nThe window title is \"");

_PutStr(buffer);

_PutChr('"');

_WFooter(wh, buffer);

_PutStr("\nThe window footer is \"");

_PutStr(buffer);

_PutChr('"');

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WSetTitle( )


_WTop( ) API 库例程

请参阅	示例

返回窗口顶端在屏幕上所处的行。

语法

int _WTop(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例显示最前面窗口的行位置。

Visual FoxPro 代码

SET LIBRARY TO WTOP

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTop(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeft(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottom(wh), 5);

_PutStr("\nright  ="); putLong(_WRight(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeight( ), _WLeft( ), _WRight( ), _WWidth( )


_WTopP( ) API 库例程

请参阅	示例

以象素为单位返回窗口顶端在屏幕上所处的位置。

语法

int _WTopP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例以象素为单位显示最前面窗口的位置。

Visual FoxPro 代码

SET LIBRARY TO WTOPP

=WPOSITION()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\ntop	="); putLong(_WTopP(wh), 5);

_PutStr("\nleft   ="); putLong(_WLeftP(wh), 5);

_PutStr("\nbottom ="); putLong(_WBottomP(wh), 5);

_PutStr("\nright  ="); putLong(_WRightP(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WPOSITION", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeightP( ), _WLeftP( ), _WRightP( ), _WWidth( )


_WWidth( ) API 库例程

请参阅	示例

返回指定窗口中内容区的列数。

语法

int _WWidth(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */


下面的示例以行和列为单位显示最前面窗口的高度和宽度。

Visual FoxPro 代码

SET LIBRARY TO WWIDTH

=WDIMEN()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\nheight ="); putLong(_WHeight(wh), 5);

_PutStr("\nwidth  ="); putLong(_WWidth(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WDIMEN", (FPFI) Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeight( ), _WLeft( ), _WRight( ), _WTop( )


_WWidthP( ) API 库例程

请参阅	示例

以象素为单位返回指定窗口中内容区的宽度。

语法

int _WWidthP(WHANDLE wh)
WHANDLE wh;	/* 窗口句柄。 */

说明

在 FoxPro for MS-DOS 专业版中不能使用。


下面的示例以象素单位显示最前面窗口的高度和宽度。

Visual FoxPro 代码

SET LIBRARY TO WWIDTHP

=WDIMEN()

C 代码

#include <pro_ext.h>

void putLong(long n, int width)

{

Value val;

val.ev_type = 'I';

val.ev_long = n;

val.ev_width = width;

_PutValue(&val);

}

void FAR example(ParamBlk FAR *parm)

{

WHANDLE wh = _WOnTop();

_PutStr("\nheight ="); putLong(_WHeightP(wh), 5);

_PutStr("\nwidth  ="); putLong(_WWidthP(wh), 5);

}

FoxInfo myFoxInfo[] = {

{"WDIMEN", Example, 0, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WBottom( ), _WHeightP( ), _WLeftP( ), _WRightP( ), _WTopP( )


_WZoom( ) API 库例程

请参阅	示例

使指定窗口最大化或最小化，或者使它回复到正常状态。

语法

void _WZoom(WHANDLE wh, int newstate)
WHANDLE wh;	/* 窗口句柄。 */
int newstate;	/* 窗口缩放以后的状态。*/

说明

可以把 newstate 参数指定为 WZ_MINIMIZE, WZ_NORMAL 或者 WZ_MAXIMIZE，它们在 PRO_EXT.H 文件中有定义。在 Macintosh 上， WZ_MINIMIZE 无效。


下面的示例创建并显示一个窗口，然后对这个窗口用每个可能参数调用  _WZoom( )。

Visual FoxPro 代码

SET LIBRARY TO WZOOM

C 代码

#include <pro_ext.h>

FAR example(ParamBlk FAR *parm)

{

WHANDLE wh;

int row, col;

wh = _WOpen(2,2,20,70,WEVENT | CLOSE,WINDOW_SCHEME,(Scheme FAR *) 0,

WO_SYSTEMBORDER);

_WShow(wh);

_Execute("WAIT WINDOW 'Press any key to minimize window'");

_WZoom(wh, WZ_MINIMIZED);

_Execute("WAIT WINDOW 'Press any key to normalize window'");

_WZoom(wh, WZ_NORMAL);

_Execute("WAIT WINDOW 'Press any key to maximize window'");

_WZoom(wh, WZ_MAXIMIZED);

_Execute("WAIT WINDOW 'Press any key to normalize window'");

_WZoom(wh, WZ_NORMAL);

}

FoxInfo myFoxInfo[] = {

{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},

};

FoxTable _FoxTable = {

(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo

};


请参阅

_WMove( ), _WSIZE( )


Visual FoxPro 系统事件（API 库结构）

本表列举了所有 Visual FoxPro 事件、事件记录字段的布局以及事件发生时的说明。

事件	EventRec 字段	说明
nullEvent	what = nullEvent where.h = 水平鼠标位置 where.v = 垂直鼠标位置 when = 启动的一瞬间	没有其他事件等待时发生。这是最常发生的事件，并且，为了性能方面的考虑，应该节约使用。
mouseDownEvent	what = mouseDownEvent where.h = 水平鼠标位置 where.v = 垂直鼠标位置 mbState = 鼠标左键 when = 启动的一瞬间	鼠标左键按动时发生。可俘获 mouseDownEvent 并将 where 点和 _FindWindow 函数和它联合使用，从而查看用户是在窗口的关闭菜单框还是在其他部分单击鼠标（在窗口的关闭菜单框单击时，不会产生 closeEvent）。
keyDownEvent	what = keyDownEvent where.h = 水平鼠标位置 where.v = 垂直鼠标位置 message = 键代码 (请参阅附录 A) modifier = 修正键 when = 启动的一瞬间	当在键盘上按键或键盘缓冲区起作用时发生。
deactivateEvent	what = deactivateEvent where.h = 水平鼠标位置 where.v = 垂直鼠标位置 message = 窗口的 WHANDLE  when = 启动的一瞬间	当单击关闭菜单框、激活另一个窗口或使用 DEACTIVE WINDOW 命令，从而使窗口不活动时发生。通常 deactivateEvent 后面都有 activateEvent。
activateEvent	what = activateEvent where.h = 水平鼠标位置 where.v = 垂直鼠标位置 message = 窗口的 WHANDLE when = 启动的一瞬间	激活窗口时发生。包括系统窗口、用户窗口和对话窗口，所以建议您：不管何时收到这类事件，都要检查是否与您的窗口有关。 activateEvent 之前通常都有 deactivateEvent 。
menuHitEvent	what = menuHitEvent misc = MENUID misc2 = BAR # when = 启动的一瞬间 modifier = 修正键	当用户在菜单型项中作出一项选择时发生。菜单型项包括普通菜单、弹出式菜单和可滚动的列表。因为 menuHitEvents 经常发生，所以最好用  _OnSelection 函数对菜单选择执行一项确定的任务，以取消许多不必要的事件检查。
closeEvent	what = closeEvent message =窗口的 WHANDLE when = 启动的一瞬间	用 RELEASE WINDOW 命令从内存中删除窗口或退出 Visual FoxPro 时发生。若要检查用户是否单击关闭菜单框来关闭菜单，请检查 mouseDownEvent。
hideEvent	what = hideEvent when = 启动的一瞬间	用 HIDE WINDOW 命令隐藏窗口时发生
showEvent	what = showEvent when = 启动的一瞬间	用 SHOW WINDOW 命令显示窗口时发生。
hotkeyEvent	what = hotkeyEvent where.h = 水平鼠标位置 where.v = 垂直鼠标位置 message = 键代码（请参阅“ FoxPro 键代码”一章） modifier = 修正键 when = 启动的一瞬间	当用户按了一个键，而该键具有 ON KEY LABEL 命令指定的动作时发生。
sizeEvent	what = sizeEvent when = 启动的一瞬间	仅当使用 ZOOM WINDOW 或 SIZE WINDOW 命令时发生。若要检查用户单击窗口的大小控制的情况，请检查 mouseDownEvent。
zoomEvent	what = zoomEvent when = 启动的一瞬间	仅当执行 ZOOM WINDOW 时发生。若要检查用户单击缩放控制的情况，请检查 mouseDownEvent。


Visual FoxPro 键代码
Visual FoxPro 键代码（API 库结构）

示例

键盘上的大部分键都有一个常值，即使是与修正键（Shift, Ctrl 和 Alt）一起使用时也是这样。键盘上的所有常规键（字母键和特殊字符）都有一个 ASCII 值表示的键代码。

在 EventRec 结构中返回健代码和修正健值。键代码可在 EventRec.message 中找到，修正键可在 EventRec.modifiers 中找到。

Visual FoxPro 把某些键解释为不同的值，此值起决于与之一起使用的修正键。例如，按 Shift+F10 时，EventRec 中对应的字段是：

 •	   EventRec.message = 15D (Hex)

 •	   EventRec.modifier = 1000 (Hex)

类似地，如果按 Ctrl+F10 ，则 EventRec 值为：

 •	   EventRec.message = 167 (Hex)

 •	   EventRec.modifiers = 2000 (Hex)

当一个以上修正键与一个键使用时，就要加上全部修正键的值。例如，如果按 Ctrl+Shift+F10，就返回下列值：

 •	   EventRec.message = 167 (Hex)

 •	   EventRec.modifiers = 3000 (Hex)

此例中的 EventRec.modifiers 值为 0x3000，是因为按键时同时按下了 Ctrl 和 Shift 两个修正键。也就是，Shift 修正键（0x1000）加上 Ctrl 修正键，结果得到 0x3000 的值。

Visual FoxPro 解释键（特别是带修正键的键）的方式只在 Visual FoxPro 内部有效。别的程序可能会有不同的解释。当一个键与一个或多个修正键（Shift, Ctrl 和 Alt）同时按下时，最高的半个字节代表所使用的修正健。

下表是使用各个修正键时，F8 键的不同键代码。

按键	修正键	F8 的键值
F8	None	\x142
Shift+F8	Shift	\x15B
Ctrl+F8	Ctrl	\x165
Alt+F8	Alt	\x16F
每个可以与修正键一起使用的特殊键，当与每个修正键一起使用时，都有一个唯一的值。当特殊键与多个修正键一起使用时，指定给它的唯一值是它对于修正键之一的值，规则如下：

1.	首先检查一起按动的键中是否包括 Alt 键，因为有 Alt 键时将指定主键为它的 Alt 键值。

2.	如果一起使用的键中没有 Alt ，检查是否有 Ctrl 修正键，因为此时将指定主键为它的 Ctrl 键值。

3.	如果 Alt 和 Ctrl 键都没有使用，检查是否有 Shift 键，因为此时将指定主键为它的 Shift 键值。

4.	最后，如果没有使用修正键，则指定主键值为没有修正键的基本值。

特殊键代码

下表列出了 Visual FoxPro 对键盘上的特殊键所指定的键值。

键	键代码( 16进制 )	修正键
LEFTMOUSE	100	None
F1	13B	None
F2	13C	None
F3	13D	None
F4	13E	None
F5	13F	None
F6	140	None
F7	141	None
F8	142	None
F9	143	None
F10	144	None
HOME	147	None
UPARROW	148	None
PGUP	149	None
LEFTARROW	14B	None
RIGHTARROW	14D	None
END	14F	None
DNARROW	150	None
PGDN	151	None
INS	152	None
DEL	153	None
F11	185	None
F12	186	None
BACKTAB	10F	shift 键
SHIFT+F1	154	shift 键
SHIFT+F2	155	shift 键
SHIFT+F3	156	shift 键
SHIFT+F4	157	shift 键
SHIFT+F5	158	shift 键
SHIFT+F6	159	shift 键
SHIFT+F7	15A	shift 键
SHIFT+F8	15B	shift 键
SHIFT+F9	15C	shift 键
SHIFT+F10	15D	shift 键
SHIFT+F11	187	shift 键
SHIFT+F12	188	shift 键
CTRL+A	001	ctrl 键
CTRL+B	002	ctrl 键
CTRL+C	003	ctrl 键
CTRL+D	004	ctrl 键
CTRL+E	005	ctrl 键
CTRL+F	006	ctrl 键
CTRL+G	007	ctrl 键
CTRL+H	008	ctrl 键
CTRL+I	009	ctrl 键
CTRL+ENTER	00A	ctrl 键
CTRL+J	00A	ctrl 键
CTRL+K	00B	ctrl 键
CTRL+L	00C	ctrl 键
CTRL+M	00D	ctrl 键
CTRL+N	00E	ctrl 键
CTRL+O	00F	ctrl 键
CTRL+P	010	ctrl 键
CTRL+Q	011	ctrl 键
CTRL+R	012	ctrl 键
CTRL+S	013	ctrl 键
CTRL+T	014	ctrl 键
CTRL+U	015	ctrl 键
CTRL+V	016	ctrl 键
CTRL+W	017	ctrl 键
CTRL+X	018	ctrl 键
CTRL+Y	019	ctrl 键
CTRL+Z	01A	ctrl 键
CTRL+LBRACKET	01B	ctrl 键
CTRL+BACKSLASH	01C	ctrl 键
CTRL+RBRACKET	01D	ctrl 键
CTRL+CARET	01E	ctrl 键+shift 键
CTRL+HYPHEN	01F	ctrl 键
CTRL+SPACEBAR	020	ctrl 键
CTRL+F1	15E	ctrl 键
CTRL+F2	15F	ctrl 键
CTRL+F3	160	ctrl 键
CTRL+F4	161	ctrl 键
CTRL+F5	162	ctrl 键
CTRL+F6	163	ctrl 键
CTRL+F7	164	ctrl 键
CTRL+F8	165	ctrl 键
CTRL+F9	166	ctrl 键
CTRL+F10	167	ctrl 键
CTRL+LEFTARROW	173	ctrl 键
CTRL+RIGHTARROW	174	ctrl 键
CTRL+END	175	ctrl 键
CTRL+PGDN	176	ctrl 键
CTRL+HOME	177	ctrl 键
CTRL+PGUP	184	ctrl 键
CTRL+F11	189	ctrl 键
CTRL+F12	18A	ctrl 键
CTRL+UPARROW	18D	ctrl 键
CTRL+DNARROW	191	ctrl 键
CTRL+INS	192	ctrl 键
CTRL+DEL	193	ctrl 键
CTRL+TAB	194	ctrl 键
ALT+Q	110	alt 键
ALT+W	111	alt 键
ALT+E	112	alt 键
ALT+R	113	alt 键
ALT+T	114	alt 键
ALT+Y	115	alt 键
ALT+U	116	alt 键
ALT+I	117	alt 键
ALT+O	118	alt 键
ALT+P	119	alt 键
ALT+A	11E	alt 键
ALT+S	11F	alt 键
ALT+D	120	alt 键
ALT+F	121	alt 键
ALT+G	122	alt 键
ALT+H	123	alt 键
ALT+J	124	alt 键
ALT+K	125	alt 键
ALT+L	126	alt 键
ALT+Z	12C	alt 键
ALT+X	12D	alt 键
ALT+C	12E	alt 键
ALT+V	12F	alt 键
ALT+B	130	alt 键
ALT+N	131	alt 键
ALT+M	132	alt 键
ALT+F1	168	alt 键
ALT+F2	169	alt 键
ALT+F3	16A	alt 键
ALT+F4	16B	alt 键
ALT+F5	16C	alt 键
ALT+F6	16D	alt 键
ALT+F7	16E	alt 键
ALT+F8	16F	alt 键
ALT+F9	170	alt 键
ALT+F10	171	alt 键
ALT+1	178	alt 键
ALT+2	179	alt 键
ALT+3	17A	alt 键
ALT+4	17B	alt 键
ALT+5	17C	alt 键
ALT+6	17D	alt 键
ALT+7	17E	alt 键
ALT+8	17F	alt 键
ALT+9	180	alt 键
ALT+0	181	alt 键
ALT+F11	18B	alt 键
ALT+F12	18C	alt 键
ALT+HOME	197	alt 键
ALT+UPARROW	198	alt 键
ALT+PGUP	199	alt 键
ALT+LEFTARROW	19B	alt 键
ALT+RIGHTARROW	19D	alt 键
ALT+END	19F	alt 键
ALT+DNARROW	1A0	alt 键
ALT+PGDN	1A1	alt 键
ALT+INS	1A2	alt 键
ALT+DEL	1A3	alt 键


FAR EventHandler(WHandle theWindow, EventRec FAR *ev)

{

switch(ev->what)

{

case keyDownEvent:	/* 检查 keyDownEvent */

if (ev->modifiers & shiftCodeMask)	/* 按了一个修正键。 */

{

if (ev->modifiers & alt 键)	/* 检查 Alt 键 */

_PutStr("Alt Key Code should be used.\n");

else

if (ev->modifiers & ctrl 键)	/* Ctrl 键 */

_PutStr("Ctrl Key Code should be used.\n");

else

if (ev->modifiers & shift 键)	/* Shift 键 */

_PutStr("Shift Key Code should be used.\n");

}

else

_PutStr("Regular Key Code should be used.\n");

return NO;	/* 使 Visual FoxPro 也有键 */

break;

default:

return NO;

}

}

附注

shiftCodeMask, alt 键, ctrl 键 和 shift 键 在PRO_EXT.H 和 PRO_EXT.INC 都有如下定义：

#define  shiftCodeMask  0xf000

#define  shift 键  0x1000

#define  ctrl 键  0x2000

#define  alt 键  0x4000


OLE 控制概述

请参阅

Visual FoxPro OLE 容器控制允许您向应用程序中添加 OLE 控制（.OCX 文件）。

根据所选用的 Windows 平台（Windows3.1，Windows for Workgroup，Windows NT或 Windows95），可以在 Visual FoxPro 的 WINDOWS/SYSTEM 目录下，最多安装四个 OLE 控制。下表列出每一个 OLE 控制、控制的文件名及其相应的说明。

OLE 容器控制	文件名	说明
通信	MSCOMM32.OCX	通过串行端口发送和接收数据，向应用程序提供串行通信。
消息应用程序接口 (MAPI)	MSMAPI32.OCX	允许创建一个启用邮件的 Visual FoxPro 应用程序。
Outline	MSOUTL32.OCX	允许在层次列表中显示项目。
图片裁剪	PICCLP32.OCX	允许选择位图中某一区域，并在表单中或图片框中显示该区域的图象。
有关 Visual FoxPro 中 OLE 对象的详细内容，请参阅《开发指南》第十八章“添加 OLE”。


请参阅

OLE 容器控制


Communications 控制
Communication（通信）控制

请参阅	属性	事件	方法	错误信息	示例

Communication 控制，MSCOMM32.OCX，通过串行端口发送和接收数据，向应用程序提供串行通信。

语法

MSComm

说明

Communication 控制只在运行 Windows NT 或 Windows95 时安装。

Communication 控制提供以下两种处理通讯的途径：

 •	   事件驱动通信是一种非常有效的处理串行口交互的方法。在许多情况下，比如当 Carrier Detect(CD) 或 Request To Send(RTS) 线中有字符到达或出现更改时，您可能希望当发生这些事件时能够收到提示。这种情况下，可用Communication 控制的 OnComm 事件来俘获并处理这些通信事件。OnComm 事件也可检测和处理通信错误。

 •	   也可以通过在程序中每一个临界函数之后检察 CommEvent 属性值，来检测事件或错误。这种方法更适用于独立的小程序。例如，如果是一个简单的电话拨号程序，如果每接收到一个字符便生成一个事件，将不会有任何意义。因为所需接收的唯一字符都来自调制解调器的 OK 响应。

每一个Communication 控制对应于一个串行端口，若在应用中需要访问一个以上的串行端口，则必须使用一个以上的Communication 控制。端口地址和中断地址可在 Windows “控制面板”中更改。

附注

当创建和发送采用Communication 控制的应用程序时，需要在用户的 Microsoft Windows SYSTEM 子目录下安装 MSCOMM32.OCX 文件。


 属性

*AutoSize	*BaseClass	Break
CDHolding	CDTimeout	*ClassLibrary
*Class	*Comment	CommEvent
CommID	CommPort	CTSHolding
CTSTimeout	*DocumentFile	*DragIcon
*DragMode	DSRHolding	DSRTimeout
DTREnable	*Enabled	Handshaking
*Height	*HelpContextID	*HostName
InBufferCount	InBufferSize	Input
InputLen	Interval	*Left
*MousePointer	*Name	NullDiscard
*OLEClass	OutBufferCount	OutBufferSize
Output	*Parent	*ParentClass
ParityReplace	PortOpen	RThreshold
RTSEnable	Settings	*Sizable
SThreshold	*Stretch	*TabIndex
*TabStop	*Top	*Visible
*Width
*这些属性适用于包含Communication 控制的 OLE 容器控制。


 事件

*Destroy	*DragDrop	*DragOver
*Error	*GotFocus	*Init
*LostFocus	*Moved	OnComm
*Resize	*UIEnable
*这些事件适用于包含Communication 控制的 OLE 容器控制。


 方法

AboutBox	*CloneObject	*DoVerb
*Drag	*Move	*Refresh
*SaveAsClass	*SetFocus	*ZOrder
*这些方法适用于包含Communication 控制的 OLE 容器控制。


*下例显示了如何执行基本的串端口通讯。

* Use COM1.

Comm1.CommPort = 1

* 9600波特率，无奇偶校验，8 位数据，1 位终止位。

Comm1.Settings = "9600,N,8,1"

*通知控制使用输入时读整个缓冲区

Comm1.InputLen = 0

* 打开端口

Comm1.PortOpen = .T.

* 发送注意命令至调制解调器。

Comm1.Output = "AT" + CHR(13)

* 等待数据返回至串行端口

DO WHILE Comm1.InBufferCount <= 2

* 读串行端口中的 OK 响应数据

InString = Comm1.Input

IF InString == "OK"

EXIT

ENDIF

ENDDO

* 关闭串行端口

Comm1.PortOpen = .F.


请参阅

OLE 容器控制


AboutBox 方法（Communications 控制）
AboutBox 方法（Communication 控制）

显示Communication 控制的“关于框”。

应用于

Communication 控制

语法

[Form.]MSComm.AboutBox


Break 属性（Communications 控制）
Break 属性（Communication 控制）

设置或清除中断信号状态。

应用于

Communication 控制

语法

[Form.]MSComm.Break[ = lExpression]

设置

lExpression

Break 属性设置为：

设置	说明
“真”(.T.)	设置中断信号状态。
“假”(.F.)	清除中断信号状态。
当设置为“真”(.T.)时，Break 属性发送一个中断信号。中断信号挂起字符传输并将传输线设置为中断状态，直到 Break 属性设置为“假”(.F.)。

说明

设计时不可用，运行时可读写。

一般地讲，用户为短暂的时间间隔设置中断状态，并且仅当正在进行通信的设备要求时才设置中断信号。


CDHolding 属性（Communications 控制）
CDHolding 属性（Communication 控制）

请参阅

通过查询 Carrier Detect(LD) 线的状态，来确定该载波是否存在。Carrier Detect 是从调制解调器发到与之相连计算机的一个信号，该信号指示调制解调器在线。

应用于

Communication 控制

语法

[Form.]MSComm.CDHolding[ = lExpression]

设置

lExpression

CDHolding 属性的设置为：

设置	说明
“真”(.T.)	Carrier Detect 线为高。
“假”(.F.)	Carrier Detect 线为低。
说明

设计时不可用，运行时只读。

当 Carrier Detect 线为高　(CDHolding=.T.)，并且 CDTimeOut 的毫秒值已过时，Communication 控制将 CommEveat 属性设置为　CDTO (Carrier Detect Timeout Error)，并生成 Oncomm 事件。

附注

在主应用程序（比如一个公告牌）中，俘获载波的消失尤其重要，因为调用程序可能在任何时候挂起（把载波降为 0）。

Carrier Detect 也被称作 Receive Line Signal Detect(RLSD)。

有关俘获这种情况的内容，请参阅 CDTimeout 属性。


请参阅

CDTimeout 属性, OnComm 事件


CDTimeout 属性（Communications 控制）
CDTimeout 属性（Communication 控制）

请参阅

指定或返回时间（以毫秒记）的最大值，该时间指定超时前，控制等待 Carrier Detect (CD) 信号的时间。

应用于

Communication 控制

语法

[Form.]MSComm.CDTimeout[ = nMilliseconds]

设置

nMilliseconds

指定Communication 控制等待 Carrier Detect(CD) 信号的毫秒值。

说明

设计时可用，运行时可读写。

该属性通过把 CommEvent 属性设置为 CDTO(Carrier Detect Timeout Error)，指示定时失效并生成 OnComm 事件。

当 Carrier Detect 线为低 (CDHing=.F.)，并且 CDTimeout 的毫秒值已过时，Communication 控制将 CommEvent 属性设置为 CDTO(Carrier Detect Timeout Error)，并生成 OnComm 事件。

有关检测载波存在与否的详细内容，请参阅 CDHolding 属性。


请参阅

CDHolding 属性


CommEvent 属性（Communications 控制）
CommEvent 属性（Communication 控制）

请参阅

包含一个对应于最近通信事件或错误的值。

应用于

Communication 控制

语法

[Form.]MSComm.CommEvent

说明

设计时不可用，运行时只读。

虽然一旦有通信错误或事件出现就生成 OnComm 事件，但 CommEvent 属性保持该错误或事件的数值代码。若要确定导致 OnComm 事件的实际错误或事件，必须引用 CommEvent 属性。

CommEvent 属性包含的值对应于下列通信错误或事件：

通信错误

值	说明
1001	接收一个中断信号。
1007	载波检测超时。当发送字符时，Carrier Detect 线保持CDTimeout 毫秒为低。Carrier Detect 也被称作 Receive Line Signal Detect(RLSD)。
1002	Clear To Send 超时。当要发送字符时，Clear To Send 线保持 CTSTimeout 毫秒为低。
1003	Data Set Ready 超时。当要发送字符时，Data Set Ready 线保持 DSRTimeout 毫秒为低。
1004	祯错误。硬件检测出现错误。
1006	端口过载。在从端口读一个字符之前，下一个字符已到达并丢失。若用户在 Windows3.2 版本下遇到该错误时，应减小 Internal 属性值。更详尽的内容，请参阅本章后面 Internal 属性说明。
1008	接收缓冲区过载。在接收缓冲区中没有空间。
1009	奇偶性错误。硬件检测出奇偶检验出错。
1010	发送缓冲区已满。当要查询字符时，发送缓冲区已满。
通信事件

值	说明
5	Carrier Detect 线的更改。
3	Clear To Send 线的更改。
4	Data Set Ready 线的更改，该事件只在 DSR 从 -1 更改到 0 时发生。
7	接收到 End of File (ASCII  码 26) 字符。
6	检测到 Ring。一些 UARTs（通用异步收发器）可能不支持该事件。
2	接收 RThreashold 个字符。除非用户使用 Input 属性来删除接收缓冲区中的数据，否则将连续产生该事件。
1	发送缓冲区中的字符数少于 SThpeshold 值。


请参阅

OnComm 事件


CommID 属性（Communications 控制）
CommID 属性（Communication 控制）

请参阅

包含一个标识通信设备的句柄。

应用于

Communication 控制

语法

[Form.]MSComm.CommID

说明

设计时不可用，运行时只读。

该值由 Windows API OpenCoum 函数返回，用在 Windows API 中的内部通信例程中。

在 Visual FoxPro 中可以访问 Windows API，但需通过 DECLEARE-DLL 命令和 Visual FoxPro 专业版生成的外部 Visual FoxPro API 库例程来访问。


请参阅

CommEvent 属性, CommPort 属性, DECLARE - DLL, OnComm 事件, SET LIBRARY


CommPort 属性（Communications 控制）
CommPort 属性（Communication 控制）

请参阅

指定或返回通信端口编号。

应用于

Communication 控制

语法

[Form.]MSComm.CommPort[ = nPortNumber]

设置

nPortNumber

设计时指定 1 到 99 之间的任一值（默认值为 1）。但是，如果用户试图用 PortOpen 属性打开的端口不存在时，Communication 控制生成 68 号错误（设备不可用）。

重要内容

必须在打开端口前设置 CommPort 属性。

说明

设计时可用，运行时可读写。


请参阅

PortOpen 属性


CTSHolding 属性（Communications 控制）
CTSHolding 属性（Communication 控制）

请参阅

通过查询 Clear To Send(CTS) 线的状态来指定或返回一个逻辑性值，该值确定能否发送数据。

应用于

Communication 控制

语法

[Form.]MSComm.CTSHolding[ = lExpression]

设置

lExpression

CTSHolding 属性的设置为：

设置	说明
“真”(.T.)	Clear To Send 线高。
“假”(.F.)	Clear To Send线低。
当 Clear To Send 线为高并且 CTSTimeout 的毫秒数已过时，Communication 控制将 CommEvent 属性设置为 CTSTO (Clear To Send Tineout) 并激活 OnComm 事件。

说明

设计时不可用，运行时只读。

一般来讲，调制解调器发送 Clear To Send 信号至与其连接的计算机时，指示可以开始发送。

Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手协议。若用户需要确定 Clear To Send 线的状态，CTSHolding 属性提供了一条人工查询该线的途径。

有关握手协议的详细内容，请参阅 Handshaking 属性。


请参阅

CommEvent 属性, CTSTimeout 属性, OnComm 事件


CTSTimeout 属性（Communications 控制）
CTSTimeout 属性（Communication 控制）

请参阅

指定或返回在将 CommEvent 属性设置为 CTSO 并生成 OnComm 事件之前，等待 Clear To Send 信号的微秒数。

应用于

Communication 控制

语法

[Form.]MSComm.CTSTimeout[ = nMilliseconds]

设置

nMilliseconds

指定Communication 控制等待 Clear To Send 信号的毫秒数。

说明

设计时可用，运行时可读写。

当 Clear To Send 线为高 (CTSHolding = .T.)，并且 CTSTimeout 的毫秒数已过时，Communication 控制将 CommEvent 属性设置为 CTSTO (Clear To Send Timeout)，并激活 OnComm 事件。

使用 CTSHolding 属性可以人工查询 Clear To Send 线的状态。


请参阅

CommEvent 属性, CTSHolding 属性, OnComm 事件


DSRHolding 属性（Communications 控制）
DSRHolding 属性（Communication 控制）

请参阅

指定或返回 Data Set Ready (DSR) 线的状态。

应用于

Communication 控制

语法

[Form.]MSComm.DSRHolding[ = lExpression]

设置

lExpression

DSRHolding 属性的设置为：

设置	说明
“真”(.T.)	Data Set Ready 线为高。
“假”(.F.)	Data Set Ready 线为低。
当 Data Set Ready 线为高 (DSRHolding = .T.)，并且 DSRTimeout 的毫秒数已过时，Communication 控制将 CommEvent 属性设置为 DSRTO(Data Set Ready Timeout)，并激活 OnComm 事件。

说明

设计时不可用，运行时只读。

一般来讲，调制解调器发送 Data Set Ready 信号到与其连接的计算机时，指示已准备好操作。

在为一台 DTE(Data Terminul Equipment) 机器编写 Data Set Ready/Data Terminal Ready 握手例程时，DSRHolding 属性很有用。


请参阅

CommEvent 属性, CTSHolding 属性, DSRTimeout 属性, OnComm 事件


DSRTimeout 属性（Communications 控制）
DSRTimeout 属性（Communication 控制）

请参阅

指定或返回在将 CommEvent 属性设置为 DSRTO 和生成 OnComm 事件之前，等待 Data Set Ready(DSK) 信号的毫秒数。

应用于

Communication 控制

语法

[Form.]MSComm.DSRTimeout[ = nMilliseconds]

设置

nMilliseconds

指定等待 Data Set Ready(OSR) 信号的毫秒数。

说明

设计时可用，运行时可读写。

当 Data Set Ready 线为高 (DSRHolding = .T.)，并且 DSRTimeout 的毫秒数已过时，Communication 控制将 CommEvent 属性设置为 DSRTO (Data Set Ready Timeout)，并生成 OnComm 事件。

当为一台 DTE 机编写 Data Set Ready/Data Terminal Ready 握手例程时，DSRTimeout 属性很有用。

DSRHolding 属性允许用户人工查询 Data Set Ready 线的状态。


请参阅

CommEvent 属性, CTSHolding 属性, DSRHolding 属性, OnComm 事件


DTREnable 属性（Communications 控制）
DTREnable 属性（Communication 控制）

指定或返回一逻辑值，该值确定通信期间是否启用 Data Terminal Ready(DTR) 线。

应用于

Communication 控制

语法

[Form.]MSComm.DTREnable[ = lExpression]

设置

lExpression

DTREnable 属性的设置为：

设置	说明
“真”(.T.)	启用 Data Terminal Ready 线。
“假”(.F.)	（默认值）废止 Data TERminal Ready 线。
在 DTREnable 设置为“真”(.T.)时，若端口打开，则 Data Terminal Ready 线设置为高 (on)；若端口关闭，则为低 (off)。在 DTREnable 设置为“假”(.T.)时，Data Terminal Ready 线一直保持为低 (off)。

说明

设计时可用，运行时可读写。

一般来讲，计算机发送 Data Terinal Ready 信号至调制解调器，指示计算机已准备好接收输入传输。

附注

在大多数情况下，设置 Data Terminal Ready 线为低，挂起电话。


Handshaking 属性（Communications 控制）
Handshaking 属性（Communication 控制）

请参阅

指定或返回硬件握手协议。

应用于

Communication 控制

语法

[Form.]MSComm.Handshaking[ = nProtocol]

设置

nProtocol

Handshaking 属性的设置为：

值	说明
0	（默认值）无握手。
1	XON/XOFF 握手。
2	RTS/CTS(Request To Send/Clear To Send ) 握手。
3	同时有 Request To Send 和 XON/XOFF 握手。
说明

设计时可用，运行时可读写。

握手是一个内部通信协议，通过握手协议实现数据从硬件端口到接收缓冲区的传送。当字符数据到达串行端口后，通信设备将数据移送到接收缓冲区，以使用户程序可读到该数据。如果没有接收缓冲区，用户程序希望直接从硬件读取一个字符，那么用户可能丢失数据，因为字符到达太快。

握手协议确保不会由于缓冲区超限而丢失数据，在这种情况下，数据到达端口太快，使通信设备不能把数据传送到接收缓冲区。


请参阅

CTSHolding 属性, CTSTimeout 属性, RTSEnable 属性


InBufferCount 属性（Communications 控制）
InBufferCount 属性（Communication 控制）

请参阅

指定或返回在接收缓冲区中等待读取的字符数。

应用于

Communication 控制

语法

[Form.]MSComm.InBufferCount [ = nCount]

设置

nCount

指定调制解调器接收到并在接收缓冲区中等待用户读取的字符数目。可以将 InBufferCount 属性设置为 0，从而清除接收缓冲区。

说明

设计时不可用，运行时可读写。

附注

不要把该属性和 InBufferSize 属性搞混  InBufferSize 属性反映的是接收缓冲区的大小。


请参阅

InBufferSize 属性


InBufferSize 属性（Communications 控制）
InBufferSize 属性（Communication 控制）

请参阅

指定或返回接收缓冲区的字节数。

应用于

Communication 控制

语法

[Form.]MSComm.InBufferSize[ = nBytes]

设置

nBytes

指定接收缓冲区总的大小。默认值为 1024 字节。

说明

设计时可用，运行时可读写。

不要把该属性和 InBufferCount 属性搞混淆  InBufferCount 属性反映的是正在接收缓冲区等待的字符数。

附注

接收缓冲区越大，应用程序可用的内存空间越小。然而，如果缓冲区太小，就有溢出的危险，除非采用了握后协议。作为一个通用准则，一个缓冲区的初始值为 1024 字节。如果出现了溢出错误，则应增加缓冲区的大小来处理应用程序的传输率。


请参阅

InBufferCount 属性


Input 属性（Communications 控制）
Input 属性（Communication 控制）

请参阅

从接收缓冲区中返回并删除一串字符。

应用于

Communication 控制

语法

[Form.]MSComm.Input

说明

设计时不可用，运行时只读。

InputLen 属性确定 Input 属性读取的字符数目。设置 InputLen 为 0 可以使 Input 属性读取接收缓冲区的全部内容。


请参阅

InputLen 属性, Output 属性


InputLen 属性（Communications 控制）
InputLen 属性（Communication 控制）

请参阅

指定或返回 Input 属性从接收缓冲区中读到的字符数目。

应用于

Communication 控制

语法

[Form.]MSComm.InputLen[ = nCharacters]

设置

nCharacters

指定 Input 属性读取的字符数，InputLen 属性的默认值为 0。如果设置 InputLen 为 0，在使用 Input 时，将使Communication 控制读取接收缓冲区中的全部内容。

说明

设计时可用，运行时可读写。

如果在接收缓冲区中 nCharacters 不可用，那么 Input 属性返回空字符串。用户可在使用 Input 前随时检查 InBufferCount 属性值来确定所要求的字符数是否存在。当从一台机器中读数据，而其输出已格式化为固定长度的数据块时，该属性很有用。


请参阅

InBufferCount 属性, Input 属性


Interval 属性（Communications 控制）
Interval 属性（Communication 控制）

指定或返回在 Windows3.0 版本下查询硬件端口读数据时，以毫秒计的时间间隔。

应用于

Communication 控制

语法

[Form.]MSComm.Interval[ = nMilliseconds]

设置

nMilliseconds

指定以毫秒计的查询时间间隔，Interval 属性的默认值为 1000（1 秒）。

说明

只有在运行 Windows3.1 版本下的应用程序时才需要该属性，因为Communication 控制必须以一个特定时间间隔的人工查询硬件端口读取数据。但是，对 Windows3.1 版本来说，则没必要使用该属性。


NullDiscard 属性（Communications 控制）
NullDiscard 属性（Communication 控制）

确定空字符是否从端口传送到接收缓冲区。

应用于

Communication 控制

语法

[Form.]MSComm.NullDiscard[ = lExpression]

设置

lExpression

NullDiscard 属性的设置为：

设置	说明
“真”(.T.)	空字符不有从端口传送到接收缓冲区。
“假”(.F.)	（默认值）空字符从端口传送到接收缓冲区。
说明

设计时可用，运行时可读写。


OnComm Event（Communications 控制）
OnComm 事件（Communication 控制）

请参阅

当 CommEvent 属性值更改时出现，标明出现了一个通信事件或一个错误。

应用于

Communication 控制

语法

PROCEDURE MSComm.OnComm

说明

CommEvent 属性包含生成 OnComm 事件的错误或事件数值。注意，将 Rthreshold 和 Sthreshold 属性值设置为 0，将分别禁止俘获 Receive 和Send 事件。


请参阅

CommEvent 属性, RThreshold 属性, SThreshold 属性


OutBufferCount 属性（Communications 控制）
OutBufferCount 属性（Communication 控制）

请参阅

返回在发送缓冲区中等待的字符数。也可以用它清除发送缓冲区。

应用于

Communication 控制

语法

[Form.]MSComm.OutBufferCount[ = 0]

说明

设计时不可用，运行时可读写。

把 OutBufferCount 属性设置为 0，可以清除发送缓冲区。

附注

不要把该属性和 OutBufferSize 属性搞混  OutBufferSize 属性反映的是发送缓冲区的大小。


请参阅

OutBufferSize 属性


OutBufferSize 属性（Communications 控制）
OutBufferSize 属性（Communication 控制）

请参阅

指定或返回发送缓冲区的字符数。

应用于

Communication 控制

语法

[Form.]MSComm.OutBufferSize[ = nBytes]

设置

nBytes

指定发送缓冲区的字符数，默认值为 512 字节。

说明

OutBufferSize 指的是发送缓冲区的大小，请不要把该属性与 OutBufferCount 属性搞混  OutBufferCount 属性反映的是正在发送缓冲区中的等待的字节数。

附注

请注意，发送缓冲区越大，应用程序可用的内存空间就越小。然而，如果缓冲区太小，就有溢出的危险，除非采用握手协议。作为一个通用准则，缓冲区的初始值为 512 字节。如果出现溢出错误，则应该增加缓冲区的大小来处理应用程序的传输率。


请参阅

OutBufferCount 属性


Output 属性（Communications 控制）
Output 属性（Communication 控制）

请参阅

向发送缓冲区写一个字符串。

应用于

Communication 控制

语法

[Form.]MSComm.Output = cOutString

设置

cOutString

指定写进发送缓冲区的字符串。

说明

设计时不可用，运行时只读。


请参阅

Input 属性


ParityReplace 属性（Communications 控制）
ParityReplace 属性（Communication 控制）

指定或返回在出现奇偶性错误时，用以代替数据流中无效字符的字符。

应用于

Communication 控制

语法

[Form.]MSComm.ParityReplace[ = cExpression]

设置

cExpression

指定替换无效字符的字符。默认时，用问号 (?) 来替换无效字符。

说明

设计时可用，运行时可读写。

“奇偶校验位”指定一位，该位与指定数目的数据位一起发送，以提供少量错误的检查。在使用奇偶校验位时，Communication 控制累加数据中所有已设位（值为 1），并测试该和数是奇还是偶（根据端口打开时所采用的奇偶性设置来确定）。

设置 ParityReplace 为空字符串 ("") 将废止奇偶性校验。


PortOpen 属性（Communications 控制）
PortOpen 属性（Communication 控制）

请参阅

指定或返回通信端口的状态（打开或关闭）。

应用于

Communication 控制

语法

[Form.]MSComm.PortOpen[ = lExpression]

设置

lExpression

PortOpen 属性的设置为：

设置	说明
“真”(.T.)	端口打开。
“假”(.F.)	端口关闭。
说明

设计时不可用，运行时可读写。

设置 PortOpen 属性为“真”(.T.)，则打开端口；设置为“假”(.F.)，则关闭端口并清除收发缓冲区。当应用程序终止时，Communication 控制自动关闭串行口。

在打开端口前，确保 CommPort 属性的设置为有效端口编号。如果在用户试图打开端口时，CommPort 属性的设置为无效端口数，则Communication 控制生成错误 68（设备不可用）。

另外，用户的串行端口设备必须支持 Setting 属性。如果 Setting 属性中包含硬件不支持的通信设置，则硬件不能正常工作。

如果在端口打开前，DTREnable 属性和 RTSEnable 属性设置为 .T.，那么在端口关闭时该属性设置为 .F.。否则，DTR 线和 RTS 线保持其原有状态。


请参阅

CommPort 属性, DTREnable 属性, RTSEnable 属性, Settings 属性


RThreshold 属性（Communications 控制）
RThreshold 属性（Communication 控制）

请参阅

指定或返回在Communication 控制将 CommEvent 属性设置为 Receive，并生成 OnComm 事件之前，所要接收的字符数目。

应用于

Communication 控制

语法

[Form.]MSComm.RThreshold[ = nCharacters]

设置

nCharacters

指定或返回在Communication 控制将 CommEvent 属性设置为 Receive，并生成 OnComm 事件之前，所要接收的字符数目。默认值为 0。

说明

设计时可用，运行时可读写。

将 RThreshold 属性设置为 0（默认值），将在接收字符时禁止生成 OnComm 事件。

例如，将 RThreshold 属性设置为 1，则每在接收缓冲区放置一个字符时，将使Communication 控制生成 OnComm 事件。


请参阅

CommEvent 属性, OnComm 事件


RTSEnable 属性（Communications 控制）
RTSEnable 属性（Communication 控制）

请参阅

确定是否启用 Request To Send (RTS) 线。

应用于

Communication 控制

语法

[Form.]MSComm.RTSEnable[ = lExpression]

设置

lExpression

RTSEnable 属性的设置为：

设置	说明
“真”(.T.)	启用 Request To Send 线。
“假”(.F.)	（默认值）废止 Request To Send 线。
在 RTSEnable 设置为“真”(.T.)的情况下，当端口打开时，Request To Send 线设置为高 (on)；当端口关闭时，RTS 线设置为低 (off)。

说明

设计时可用，运行时可读写。

一般来讲，请求发送数据的 Request To Send 信号从一台计算机发往与其联接的调制解调器。

Request To Send 线用于 RTS/CTS 硬件握手。如果用户要确定 Request To Send 线的状态，RTSEnable 属性允许人工查询 RTS。


请参阅

Handshaking 属性


Settings 属性（Communications 控制）
Settings 属性（Communication 控制）

指定或返回波特率、奇偶性、数据位及终止位参数。

应用于

Communication 控制

语法

[Form.]MSComm.Settings[ = cParameterString]

设置

cParameterString

指定控制控制的参数。

cParameterString 由以下格式的四个设置构成：

"BBBB,P,D,S"

BBBB 为波特率，P 为奇偶性，D 为数据位的位数，S 为终止位的位数，cParameterString 的默认值为：

"9600,N,8,1"

说明

运行时可用，设计时可读写。

如果端口打开时 cParameterString 无效，则Communication 控制生成错误 380（属性值无效）。

有效的波特率

设置
110
300
600
1200
2400
9600（默认）
14400
19200
38400 （保留）
56000 （保留）
128000 （保留）
256000 （保留）
有效奇偶值

设置	说明
E	偶
M	标记
N（默认值）	无
O	奇
S	空
有效数据位值

设置
4
5
6
7
8（默认）
有效停止位值

设置
1（默认）
1.5
2


SThreshold 属性（Communications 控制）
SThreshold 属性（Communication 控制）

请参阅

指定或返回在Communication 控制设置 CommEvent 属性为 Send，并生成 OnComm 事件之前，发送缓冲区中允许字符数的最小值。

应用于

Communication 控制

语法

[Form.]MSComm.SThreshold[ = nCharacters]

设置

nCharacters

指定在Communication 控制设置 CommEvent 属性为 Send，并生成 OnComm 事件之前，发送缓冲区中允许字符数的最小值。默认值为 0。

说明

设计时可用，运行时可读写。

设置 SThrehold 属性为 0（默认值），将禁止为数据发送事件生成 OnComm 事件。设置 STreshold 属性为 1，则Communication 控制在发送缓冲区全空时生成 OnComm 事件。

如果发送缓冲区中的字符数小于 ncharacters，则 CommEvent 属性设置为 Send，并生成 OnComm 事件。Send 事件仅在字符数通过 SThreshold 设置值时发生一次。例如，SThreshold 属性等于 5，则 Send 事件只在输出队列中的字符数从 5 落到 4 时出现。如果输出队列中的字符数从不多于 Sthreshold 个字符，那么 Send 事件绝不会激活。


请参阅

CommEvent 属性, OnComm 事件


错误信息（Communications 控制）
错误信息（Communication 控制）

请参阅

下表列出控制控制可俘获的错误。

错误编号	错误
380	无效属性值。
8000	端口打开时操作无效。
8000	端口打开时操作无效。
8001	超时值必须大于零。
8002	设备标识无效或不支持。
8003	属性仅在运行时可用。
8003	属性仅在运行时可用。
8004	属性在运行时只读。
8005	端口已打开。
8006	设备标识无效或不支持。
8007	设备波特率不支持。
8008	指定字节大小无效。
8009	默认参数错误。
8010	硬件不可用（被另外设备锁定）。
8011	函数不能分隔队列。
8012	设备未打开。
8014	不能启用命令提示。
8015	不能设置命令状态。
8018	仅在设备打开时操作有效。
8019	设备忙。
8020	读命令设备错误。


请参阅

Communication 控制


MAPI 控制概述

请参阅

说明

通信应用程序接口 (MAPI) 控制，MSMAPI32.OCX，允许用户创建一个启用邮件的 Visual FoxPro 应用程序。用 MSMAPI32.OCX 可创建两个 OLE 控制：MAPI 工作期和 MAPI 消息。“MAPI 工作期”控制建立一个 MAPI 工作期，“MAPI 消息”控制允许用户执行一系列消息系统函数。

只有在用户运行 Windows NT 或 Windows 95 时，才安装 MAPI 控制。

在运行时，MAPI 控制不可见。另外，该控制没有事件。要使用该控制，必须指定合适的方法。

要使这些控制工作，必须有 MAPI 服务。MAPI 服务由 Microsoft Windows3.0 或更高版本的 Microsoft Mail 电子邮件系统提供。


请参阅

MAPI 工作期控制, MAPI Message 控制, OLE 容器控制


MAPI Messages 控制
MAPI Message 控制

请参阅	属性	事件	方法	错误信息

在“MAPI 工作期”控制建立消息工作期之后，“MAPI 消息”控制执行一系列消息系统函数。

语法

MapiMessages

说明

使用“MAPI 工作期”控制，您可以，

 •	    访问“信箱”中的当前消息。

 •	    构成一条新消息。

 •	    添加和删除消息的收件人和附件。

 •	    发送消息（不管有没有支持的用户接口）。

u 保存、复制和删除消息。

 •	    显示“地址簿”对话框。

 •	    显示“正文”对话框。

 •	    访问附件，包括 OLE 自动化附件。

 •	    在寻址期间确定一个收件人的名称。

 •	    执行应答、全部应答和转寄消息。

“MAPI 工作期”控制的大多数属性可分为四个功能区：地址簿、文件附件、消息和收件人属性。文件附件、消息和收件人属性分别由 AttachmentIndex，MsgIndex 和 RecipIndex 属性控制。

例如，当 MsgIndex 的索引值更改时，所有其他消息、文件附件和收件人属性随之更改，以反映所指定消息的特征。消息和收件人属性设置的工作方式相同。地址簿属性指定“地址簿”对话框的外部特征。

消息缓冲区

在使用 MAPI 工作期控制时，用户需要追踪两个缓冲区：构成缓冲区和读缓冲区。读缓冲区由检索过的取自用户信箱的消息集合构成。用 MsgIndex 属性访问该集合中的单个消息，从代表第一条消息的 0 值开始，每一条消息递增 1，直至该集合的末尾。

使用 Fecth 方法生成消息集合。该集合包括 FetchMsgType 类的所有消息，并按 Fetchsorted 属性指定的方法排序。使用 FetchUnreadOnly 属性，可以在消息集合中包含或移去先前已读的消息。用户不可修改读缓冲区中的消息，但可把消息复制到构成缓冲区作更改。

在构成缓冲区中可以创建或编辑消息。当 MsgIndex 属性设置为 -1 时，构成缓冲区是一个活动的缓冲区。许多消息活动仅在构成缓冲区中可用，比如发送消息，在对话框内发送消息，保存消息或删除收件人和附件。


 属性

Action	AddressCaption	AddressEditFieldCount
AddressLabel	AddressModifiable	AddressResolveUI
AttachmentCount	AttachmentIndex	AttachmentName
AttachmentPathName	AttachmentPosition	AttachmentType
*AutoSize	*BaseClass	*Class
*ClassLibrary	*Comment	*DocumentFile
*DragIcon	*DragMode	*Enabled
FetchMsgType	FetchSorted	FetchUnreadOnly
*Height	*HelpContextID	*HostName
*Left	*MousePointer	MsgConversationID
MsgCount	MsgDateReceived	MsgID
MsgIndex	MsgNoteText	MsgOrigAddress
MsgOrigDisplayName	MsgRead	MsgReceiptRequested
MsgSent	MsgSubject	MsgType
*Name	*OLEClass	*ParentClass
RecipAddress	RecipCount	RecipDisplayName
RecipIndex	RecipType	SessionID
*Sizable	*Stretch	*TabIndex
*TabStop	*Top	*Visible
*Width
* 这些属性适用于容纳 MAPI 工作期控制的 OLE 容器控制。


 事件

*Destroy	*DragDrop	*DragOver
*Error	*GotFocus	*Init
*Moved	*LostFocus	*Resize
*UIEnable
* 这些事件适用于容纳 MAPI 工作期控制的 OLE 容器控制。


 方法

AboutBox	*CloneObject	Compose
Copy	Delete	*DoVerb
*Drag	Fetch	Forward
*Move	*Refresh	ReplyAll
Reply	ResolveName	*SaveAsClass
Save	Send	*SetFocus
Show	*ZOrder
* 这些方法适用于容纳 MAPI 工作期控制的 OLE 容器控制。


请参阅

MAPI 控制概述, MAPI 工作期控制, OLE 容器控制


AboutBox 方法（MAPI Messages 控制）
AboutBox 方法（MAPI Message 控制）

显示 MAPI Message 控制的“关于”框。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AboutBox


Action 属性（MAPI Messages 控制）
Action 属性（MAPI Message 控制）

指定或返回一个值，该值确定激活 MAPI 工作期控制时执行什么动作。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Action[ = nSetting]

说明

设计时不可用，运行时只写。

使用 Action 属性可以为 MAPI 工作期控制选择一种动作。下表详细说明了可能的动作。对于每一种动作，“缓冲”列指出该动作是工作于构成缓冲区 (C)、读缓冲区 (R) 还是两者都有 (CIR)。

值	缓冲	说明
1	C/R	从“信箱”选定消息中创建一个消息集合，消息集合包括“信箱”中查找到的所有 FetchMsgType 类消息。按 FetchSorted 所选定的顺序排序并由 FetchUnredOnly 属性限定。 当发生后续取出动作时，删除读缓冲区中所有的附件文件。
2	C	向对话框中发送消息。提示用户输入消息的不同组件（主题、接收者及文本等等），并向邮件服务器提交所要传送的消息。 所有与构成缓冲区生成的消息（ MsgIndex = 1 的即将发送消息）相关的消息属性构成显示的消息对话框的基础。在对话框中做的更改不影响构成缓冲区中的消息。
3	C	不使用对话框发送消息。向邮件服务器提交即将传送出去的消息。不显示对话框，而且如果在没有收件人或者在附件路径名丢失的情况下发送消息时，会出现错误。
4	C	保存构成缓冲区中的当前消息 (MsgIndex = 1)。
5	R	把当前索引的消息复制到构成缓冲区中。把 MsgIndex 属性设置为 -1。
6	R	构成一条新消息。消除构成缓冲区的全部组件，将 MsgIndex 属性设置为 -1。
7	R	应答消息，把当前索引的消息复制到构成缓冲区中作为应答，同时在 Subject 行的开头添加 RE:。 当前索引消息的发送人变为输出消息的收件人，然后复制文本，等等。 将 MsgInde 属性设置为 -1。
8	R	应答所有的消息收件人。与 Reply 一样，除此之外包含了所有 To: 和 CC: 收件人。 将 MsgIndex 属性设置为 -1。
9	R	转寄消息。把当前索引消息复制到构成缓冲区作为一个转寄消息，并在 Subject 行的开头添加 FW：。 将 MsgIndex 属性设置为 -1。
10	R	删除消息。删除当前索引消息所有的组件，MsgCount 属性减 1，而且所删除消息后的每一条消息的索引编号减 1。 如果所删除消息是该集合中的最后一条消息，则该动作使 MsgIndex 减 1。
11	C/R	显示邮件“地址簿”对话框。用户可使用地址簿来创建或修改收件人集合。不保存构成缓冲区以外对地址簿所做的任何更改。（在 MsgIndex 不等于 -1 时）。
12	C/R	显示一个对话框，该对话框显示当前索引的收件人详细资料。对话框中的现有消息量由消息系统确定。它至少包含收件人姓名和地址的显示。
13	C/R	确定当前索引的收件人姓名，在地址簿中寻找匹配的当前索引收件人姓名。如果未找到，则返回一个错误。（没有匹配值并不认为是多义的）。 AddressResolveUI 属性确定是否显示一对话框来确定多义姓名。该动作不附加确定消息发送人姓名或地址。 该动作可能导致 RecipType 属性更改。
14	C	删除当前索引收件人。RecipCount 属性自动减 1，并把删除收件人之后每一个收件人的索引编号减 1。 如果所删除收件人是该集合中的最后一个收件人，则该动作使 RecipIndex 减 1。
15	C	删除当前索引附件。AttachmentCount 属性自动减 1，并使所删除附件后每一个附件的索引编号减 1。 如果所删除附件是该设置中的最后一个附件，则该动作使 ttachmentIndex 减 1。
要避免占用不必要的磁盘空间，应在设置任何可能修改构成缓冲区中消息附件数据的动作之前，删除所有与构成缓冲区有关的临时附件文件。这包括下列动作：5，6，7，8，9 和 15（只删除与所删除附件有关的临时附件文件）。


AddressCaption 属性（MAPI Messages 控制）
AddressCaption 属性（MAPI Message 控制）

请参阅

当 Show 方法遗漏了 DETAILS 参数或将其设置为“假” (.F.)时，用此属性指定或返回出现在“地址簿”对话框顶部的标题。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AddressCaption[ = cCaption]

设置

cCaption

指定“地址簿”对话框标题。

说明

设计时可用，运行时可读写。

如果该属性设置为空字符串 (“”)，则使用“地址簿”对话框的默认标题。


请参阅

Show 方法


AddressEditFieldCount 属性（MAPI Messages 控制）
AddressEditFieldCount 属性（MAPI Message 控制）

请参阅

当 Show 方法遗漏了 DETAILS 参数或将其设置为“假” (.F.)时，用此属性指定或返回“地址簿”对话框可用的编辑控制数目。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AddressEditFieldCount[ = nNumber]

设置

nNumber

AddressEditFieldCount 属性的设置为：

设置	说明
0	无编辑控制；只允许浏览。
1	（默认值）在对话框中只有 To 编辑控制。
2	对话框中有 To 和 CC（复制）编辑控制。
3	对话框中有 To，CC（复制）和 BCC（闪烁复制）编辑控制。
4	对话框中只有消息系统支持的那些编辑控制。
说明

设计时可用，运行时可读写。

例如，如果 AddressEditFieldCount 是 3，则用户可在“地址簿”对话框中选择 To，CC 或 BCC 编辑控制。AddressEditFieldCount 可调，使它等于收件人集合需要的最小编辑控制数目。


请参阅

Show 方法


AddressLabel 属性（MAPI Messages 控制）
AddressLabel 属性（MAPI Message 控制）

请参阅

当 Show 方法遗漏了 DETAILS 参数或将其设置为“假” (.F.)时，用此属性指定或返回地址簿中编辑控制的 To 标签的外观。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AddressLabel[ = cText]

设置

cText

指定 To 编辑控制的标签。默认值为空字符串 (“”)。

说明

设计时可用，运行时可读写。

该属性通常被忽略，并应包含一个空串从而使用默认标签“To”。然而，在 AddressEditFieldCount 属性设置为 1 时，用户可选择是否指定另一标签（假设收件人集合所需编辑控制数等于 1）。


请参阅

AddressEditFieldCount 属性


AddressModifiable 属性（MAPI Messages 控制）
AddressModifiable 属性（MAPI Message 控制）

指定或返回是否可以修改地址簿。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AddressModifiable[ = lExpression]

设置

lExpression

AddressModifiable 属性的设置有：

设置	说明
“真”(.T.)	允许用户修改其个人地址簿。
“假”(.F.)	（默认值）不允许用户修改其个人地址簿。
说明

设计时可用，运行时可读写。


AddressResolveUI 属性（MAPI Messages 控制）
AddressResolveUI 属性（MAPI Message 控制）

请参阅

指定或返回一个逻辑值，该值确定在指定 Resolvename 方法后，寻址期间是否显示对话框来确定任何多义姓名。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AddressResolveUI[ = lExpression]

设置

lExpression

AddressResolveUI 属性的设置为：

设置	说明
“真”(.T.)	显示一个对话框，其中显示与可能收件人姓名最为匹配的姓名。
“假”(.F.)	（默认值）对多义姓名不显示对话框。若未找到潜在的匹配值，则出错（无匹配不是一个多义状态）。
说明

设计时可用，运行时可读写。


请参阅

ResolveName 方法


AttachmentCount 属性（MAPI Messages 控制）
AttachmentCount 属性（MAPI Message 控制）

请参阅

包含与当前索引消息有关的全部附件数目。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AttachmentCount

说明

设计时不可用，运行时只读。

默认值为 0。AttachmentCount 的值取决于当前索引消息的附件数。


请参阅

AttachmentIndex 属性


AttachmentIndex 属性（MAPI Messages 控制）
AttachmentIndex 属性（MAPI Message 控制）

请参阅

指定或返回当前索引的附件。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AttachmentIndex[ = nIndex]

设置

nIndex

指定索引编号来标识一个特定的消息附件。该属性的索引编号决定 AttachmentName，AttachmentPathName，AttachmentPathName，AttachmentPosition 和 AttachmentType 属性的值。AttachmentIndex 属性标识的附件称为“当前索引附件”。AttachmentIndex 值的范围可从 0 （默认值）到 AttachmentCount-1。

说明

设计时不可用，运行时可读写。

要添加一个新附件，应在构成缓冲区 (MsgIndex=-1) 设置一个大于或等于当前附件数量的 AttachmentIndex 值。AttachmentCount 属性自动更新，以反映该隐含的新附件数目。

例如，若当前 Attachment 属性值为 3，则设置 AttachmentIndex 属性为 4 可以添加 2 个新附件，并将 AttachmentCount 属性增为 5。

若要删除一个现有的附件，把 nObject 值设置为 2，然后指定 Delete 方法。仅在 MsgIndex 属性设置为 -1 时，才可添加或删除附件。


请参阅

AttachmentCount 属性, AttachmentName 属性, AttachmentPathName 属性, AttachmentPosition 属性, AttachmentType 属性, Delete 方法, MsgIndex 属性


AttachmentName 属性（MAPI Messages 控制）
AttachmentName 属性（MAPI Message 控制）

请参阅

指定或返回当前索引附件文件名。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AttachmentName[ = cFileName]

设置

cFileName

指定收件人阅读的当前索引消息文件名。如果 AttachmentName 属性包含一个空字符串。则使用 AttachmentPathName 属性中的文件名。

如果附件是一个 OLE 对象，则 AttachmentName 属性包含该对象名，比如“Microsoft Excel Worksheet”。

说明

若 MsgIndex 属性设置不为 -1，则设计时该属性不可用且只读。

若随后发生取动作时，将删除读缓冲区中的附件。AttachmentName 属性的值取决于当前索引消息，当前索引消息由 AttachmentIndex 属性指定。


请参阅

AttachmentIndex 属性, MsgIndex 属性


AttachmentPathName 属性（MAPI Messages 控制）
AttachmentPathName 属性（MAPI Message 控制）

请参阅

指定或返回当前索引附件的完全路径名。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AttachmentPathName[ = cPath]

设置

cPath

指定当前索引附件的完全路径名。

说明

若 MsgIndex 属性设置不为 -1，则设计时该属性不可用且只读。

若用户试图发送以空字符串为路径的消息，则出现错误。随后发生取动作时，将删除读缓冲区中的附件。读缓冲区中的附件需人工删除。AttachmentPathName 属性的值取决于当前索引消息，当前索引消息由 AttachmentIndex 属性指定。


请参阅

AttachmentIndex 属性, AttachmentPathName 属性, MsgIndex 属性


AttachmentPosition 属性（MAPI Messages 控制）
AttachmentPosition 属性（MAPI Message 控制）

请参阅

指定或返回当前索引附件在消息体内的位置。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AttachmentPosition[ = nPosition]

设置

nPosition

指定或返回当前索引附件在消息体内的位置。

说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用，运行时只读。

要确定附件放置于何处，则需对消息的字符计数并决定要将附件放置于哪个字符位置。该位置的字符数量需设置给 AttachmentPosition 属性。

例如，在一个 5 个字符长的消息体中，用户可将 AttachmentPosition 属性设置为 4，而在该消息的末尾放置一个附件（消息体占据 0 到 4 的字符位置）。

用户不可能将两个附件放置于同一消息中的同一位置上，而且，用户不可能在消息体末尾以外放置附件。

AttachmentPosition 属性的值取决于当前索引消息，当前索引消息由 AttachmentIndex 属性所指定。


请参阅

AttachmentIndex 属性, MsgIndex 属性


AttachmentType 属性（MAPI Messages 控制）
AttachmentType 属性（MAPI Message 控制）

请参阅

指定或返回当前索引文件附件的类型。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.AttachmentType[ = nFileType]

设置

nFileType

AttachmentType 属性的设置为：

设置	说明
0	该附件为数据文件。
1	该附件为嵌入的 OLE 对象。
2	该附件为静态 OLE 对象。
说明

若 MsgIndex 属性设置不为 -1，则设计时不可用且只读。

AttachmentType 属性的设置取决于当前索引消息，当前索引消息由 AttachmentIndex 属性指定。


请参阅

AttachmentIndex 属性, MsgIndex 属性


Compose 方法（MAPI Messages 控制）
Compose 方法（MAPI Message 控制）

请参阅

构成一条消息。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Compose

说明

该方法清除构成缓冲区的所有组件，并将 MsgIndex 设置为 -1。


请参阅

Copy 方法, MsgIndex 属性


Copy 方法（MAPI Messages 控制）
Copy 方法（MAPI Message 控制）

请参阅

将当前索引消息复制到构成缓冲区中。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Copy

说明

该 Copy 方法将 MsgIndex 属性设置为 -1。


请参阅

Compose 方法, MsgIndex 属性


Delete 方法（MAPI Messages 控制）
Delete 方法（MAPI Message 控制）

请参阅

删除消息、收件人或附件。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Delete [nObject]

参数

nObject

nObject 值及其相应动作为：

值	说明
省略或 0	删除当前索引消息的所有组件。MsgCount 属性减 1，并将所删除消息后每一条消息的索引编号减 1。 如果所删除消息是集合中的最后一条消息，则该方法将 MsgIndex 属性减 1。
1	删除当前索引收件人。RecipCount 属性自动减 1。并将所删除收件人之后每一个收件人的索引编号减 1。 若所删除收件人为该集合中的最后一个收件人，则该方法将 RecipIndex 属性减 1。
2	删除当前索引附件。AttachmentCount 自动减 1。并将所删除附件之后每一个附件的索引编号减 1。 若所删除附件为该集合中的最后一个附件，则该方法将 AttachmentIndex 减 1。


请参阅

AttachmentIndex 属性, MsgCount 属性, MsgIndex 属性, RecipIndex 属性


Fetch 方法（MAPI Messages 控制）
Fetch 方法（MAPI Message 控制）

请参阅

从“输入框”内所选消息中创建一个消息集合。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Fetch

说明

消息集合包括信箱中 FetchMsgType 属性指定类型的所有消息。这些消息按 FetchSorted 属性指定的方法进行排序。如果 FetchUnreadOnly 属性设置为“真”(.T.)，则消息集合仅包含未读消息。

当随后发生取动作时，将删除读缓冲区中的所有附件文件。


请参阅

FetchMsgType 属性, FetchUnreadOnly 属性


FetchMsgType 属性（MAPI Messages 控制）
FetchMsgType 属性（MAPI Message 控制）

请参阅

指定或返回填充消息集合的消息类型。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.FetchMsgType[ = cMessageText]

设置

cMessageText

指定或返回填充消息集合的消息类型。

说明

设计时可用，运行时可读写。

该属性确定在指定 Fetch 方法时，向消息集合添加何种类型的消息。该属性中的 0 值或空字符串指定群体消息类型 (IPM)，并以此为默认值。


请参阅

Fetch 方法, FetchUnreadOnly 属性


FetchSorted 属性（MAPI Messages 控制）
FetchSorted 属性（MAPI Message 控制）

在用输入框中的消息填充消息集合时，指定或返回消息的排序。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.FetchSorted[ = lExpression]

设置

lExpression

FetchSorted 属性的设置为：

设置	说明
“真”(.T.)	按接收消息的排序向消息集合添加消息（先进先出）。
“假”(.F.)	（默认值）由用户输入框中指定的排序添加消息。
说明

设计时可用，运行时可读写。


FetchUnreadOnly 属性（MAPI Messages 控制）
FetchUnreadOnly 属性（MAPI Message 控制）

请参阅

指定或返回一个逻辑值，该值决定是否将消息集合中的消息限定为未读消息。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.FetchUnreadOnly[ = lExpression]

设置

lExpression

FetchUnreadOnly 属性的设置为：

设置	说明
“真”(.T.)	只向消息集合添加 FetchMsgType 属性指定的未读消息。
“假”(.F.)	（默认值）添加输入框中适当类型的全部消息。
说明

设计时可用，运行时可读写。


请参阅

Fetch 方法, FetchMsgType 属性


Forward 方法（MAPI Messages 控制）
Forward 方法（MAPI Message 控制）

请参阅

转寄一条消息。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Forward

说明

该方法将当前索引消息复制到构成缓冲区作为一条转寄消息，并在 Subject 行的开头添加 FW:，该方法同时也将 MsgIndex 属性设置为 -1。


请参阅

MsgIndex 属性


MsgConversationID 属性（MAPI Messages 控制）
MsgConversationID 属性（MAPI Message 控制）

请参阅

指定或返回当前索引消息的对话线程标识值。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgConversationID[ = cConversationThreadID]

说明

若 MsgIndex 属性设置不为 -1，则设计时该属性不可用且只读。

对话线程用于标识一系列消息，这些消息起始于原始消息，并包含所有后续应答。相同的对话 ID 表明这些消息是同一线程的一部分。新消息由消息系统指定一个 ID。MsgCoversationID 属性值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgIndex 属性


MsgCount 属性（MAPI Messages 控制）
MsgCount 属性（MAPI Message 控制）

请参阅

包含当前通信工作期消息集合中现有的消息总数。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgCount

说明

设计时不可用，运行时只读。

MsgCount 属性包含消息集合中当前消息的数目。默认值为 0，每执行一次取动作，MsgCount 重置一次。


请参阅

Fetch 方法


MsgDateReceived 属性（MAPI Messages 控制）
MsgDateReceived 属性（MAPI Message 控制）

请参阅

包含当前索引消息的收到日期。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgDateReceived

说明

设计时不可用，运行时只读。

MsgDataReceived 属性的格式为：yyyy/mm/dd hh:mm。小时按标准的 24 时方式度量。MsgDateReceived 属性值由消息系统设置，并取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgIndex 属性


MsgID 属性（MAPI Messages 控制）
MsgID 属性（MAPI Message 控制）

请参阅

包含当前索引消息的字符串标识符。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgID

说明

设计时不可用，运行时只读。

消息标识字符串是一个唯一标识消息的含有 64 个字符的字符串，它由系统指定，并且不能打印。MsgID 属性值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgID 属性, MsgIndex 属性


MsgIndex 属性（MAPI Messages 控制）
MsgIndex 属性（MAPI Message 控制）

请参阅

指定或返回当前索引消息的索引编号。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgIndex[ = nIndex]

设置

nIndex

指定当前索引消息的索引编号。由 MsgIndex 属性标识的消息称为当前索引消息。在索引更改时，所有其他消息的属性随之更改，以反映索引消息的特征。值 -1 表示在构成缓冲区内生成一条消息，换句话说，是一条即将输出的消息。

说明

设计时不可用，运行时只读。

MsgIndex 属性确定 MAPI Message 控制的所有其他相关消息属性值。索引编号范围是从 -1 到 (MsgCount-1)。

附注

更改 MsgIndex 属性将使附件和收件人的整个集合也随之更改。


请参阅

MsgCount 属性, MsgIndex 属性


MsgNoteText 属性（MAPI Messages 控制）
MsgNoteText 属性（MAPI Message 控制）

请参阅

指定或返回消息的文本体。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgNoteText[ = cMessageText]

设置

cMessageText

指定消息的文本体。

说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用且只读。

该属性由消息体的全部文本部分组成（减去所有附件）。空字符串表示无文本。

对于入站消息，以回车-换行符、CHR(13)+CHR(10) 终止各段。对于出站消息，可用回车、CHR(13)、换行符、CHR(10) 或回车-换行符、CHR(13)+CHR(10) 来终止各段。MsgNoteText 属性取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgIndex 属性


MsgOrigAddress 属性（MAPI Messages 控制）
MsgOrigAddress 属性（MAPI Message 控制）

请参阅

包含一个值，该值指示当前索引消息发送人的邮件地址。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgOrigAddress

说明

设计时不可用，运行时只读。

在发送消息时，消息系统设置此属性。

MsgOrigAddress 值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。在构成缓冲区中该值为 0。


请参阅

MsgIndex 属性


MsgOrigDisplayName 属性（MAPI Messages 控制）
MsgOrigDisplayName 属性（MAPI Message 控制）

请参阅

包含当前索引消息发送人的姓名。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgOrigDisplayName

说明

设计时不可用，运行时只读。

该属性由消息系统设置。

该属性中的姓名为发送人的姓名，显示于消息标头。MsgOrigDisplayName 值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。在构成缓冲区中该值为 0。


请参阅

MsgIndex 属性


MsgRead 属性（MAPI Messages 控制）
MsgRead 属性（MAPI Message 控制）

请参阅

包含一个指示消息是否已读过的值。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgRead

说明

设计时不可用，运行时只读。

若消息未读，则 MsgRead 为“假”(.F.)。若已读过当前索引消息，则 MsgRead 为“真”(.T.)。

MsgRead 的设置值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。在用户访问附注文本或任何附件消息时，该消息标记为已读。然而，访问标头消息并不把消息标记为已读。


请参阅

MsgIndex 属性


MsgReceiptRequested 属性（MAPI Messages 控制）
MsgReceiptRequested 属性（MAPI Message 控制）

请参阅

指定或返回一个逻辑值，该值确定当前索引消息是否要求一个返回收据。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgReceiptRequested[ = lExpression]

设置

lExpression

MsgReceiptRequested 属性的设置为：

设置	说明
“真”(.T.)	在收件人打开消息时，给发送者返回一个收据通知。
“假”(.F.)	（默认值）不生成返回收据。
说明

设计时不可用，运行时可读写。

MsgReceiptRequested 属性设置值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgIndex 属性


MsgSent 属性（MAPI Messages 控制）
MsgSent 属性（MAPI Message 控制）

请参阅

包含一个逻辑值，该值指示是否已将当前索引消息发送给邮件服务器以供传送。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgSent

说明

设计时不可用，运行时只读。

如果 MsgSent 属性为“真”(.T.)，则已将当前索引消息提交给邮件服务器作为即将输出消息。如果 MsgSent 属性为“假”(.F.)，则还未将当前索引消息交给服务器。

在发送消息时，消息系统设置该属性。MsgSent 属性的设置值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgIndex 属性


MsgSubject 属性（MAPI Messages 控制）
MsgSubject 属性（MAPI Message 控制）

请参阅

指定或返回当前索引信息的主题行，该行显示于消息标头中。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgSubject[ = cSubjectLine]

设置

cSubjectLine

指定当前索引消息的主题行。

说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用且为只读。

MsgSubject 值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。MsgSubject 限制为 64 个字符，包括 null 值字符。


请参阅

MsgIndex 属性


MsgType 属性（MAPI Messages 控制）
MsgType 属性（MAPI Message 控制）

请参阅

指定或返回当前索引消息的类型。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.MsgType[ = cMessageType]

设置

cMessageType

指定当前索引消息的类型。

说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用且为只读。

MsgType 值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。该属性并不表示可用作供发送者分离消息、收件时间和其他分类的选择器。空字符串表示 IPM 消息类型。

MsgType 属性用于应用程序而不是个人邮件（IPM 消息类型）。并非所有的邮件系统都支持 IPM 以外的消息类型，它们可能不提供（或忽略）该参数。


请参阅

MsgIndex 属性


RecipAddress 属性（MAPI Messages 控制）
RecipAddress 属性（MAPI Message 控制）

请参阅

指定或返回当前索引收件人的电子邮件地址。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.RecipAddress[ = cAddress]

设置

cAddress

指定当前索引收件人的电子邮件地址。

说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用且为只读。

RecipAddress 值取决于当前索引收件人，当前索引收件人由 RecipIndex 属性指定。


请参阅

MsgIndex 属性, RecipIndex 属性


RecipCount 属性（MAPI Messages 控制）
RecipCount 属性（MAPI Message 控制）

请参阅

包含当前索引消息的收件人总数。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.RecipCount

说明

设计时不可用，运行时只读。

默认值为 0，RecipCount 属性值取决于当前索引消息，当前索引消息由 MsgIndex 属性指定。


请参阅

MsgIndex 属性


RecipDisplayName 属性（MAPI Messages 控制）
RecipDisplayName 属性（MAPI Message 控制）

请参阅

指定或返回当前索引收件人的姓名。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.RecipDisplayName[ = cRecipientName]

设置

cRecipientName

指定收件人的姓名，显示于信息标头。

说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用，运行时只读。

RecipDisplayName 属性取决于当前索引消息，当前索引消息由 RecipIndex 属性指定。ResolveName 方法使用存储在该属性中的收件人名称。


请参阅

RecipIndex 属性, ResolveName 方法


RecipIndex 属性（MAPI Messages 控制）
RecipIndex 属性（MAPI Message 控制）

请参阅

指定或返回当前索引收件人。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.RecipIndex[ = nIndex]

设置

nIndex

指定一个索引编号以标识一个特定的消息收件人。

说明

设计时不可用，运行时只读。

该属性的索引编号确定 RecipAddress，RecipCount，RecipDisplayName 和 RecipType 属性的值。

由 RecipIndex 属性标识的收件人称为当前索引收件人。RecipIndex 值的范围从 0（默认值）到 RecipCount-1。在读缓冲区的 RecipIndex 属性设置为 -1 时，其他收件人属性显示消息发送人的信息。默认设置值为 0。

要添加一个新收件人，则需在构成缓冲区内，设置 RecipIndex 属性值大于或等于当前收件人数目。RecipCount 属性自动更新，以反映隐含的新收件人数目，例如，若当前 RecipCount 属性值为 3，则设置 RecipIndex 属性至 4 可以添加两个新收件人，并将 RecipCount 属性增加到 5。

若要删除一个现有收件人，则需将 nObject 值设置为 1，然后指定 Delete 方法。仅当 MsgIndex 属性设置为 -1 时，才可添加或删除收件人。


请参阅

Delete 方法, MsgIndex 属性, RecipAddress 属性, RecipCount 属性, RecipDisplayName 属性, RecipType 属性


RecipType 属性（MAPI Messages 控制）
RecipType 属性（MAPI Message 控制）

请参阅

指定或返回当前索引收件人的类型。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.RecipType[ = nSetting]

设置

nSetting

RecipType 属性的设置为：

设置	说明
0	消息发送人。
1	接收者是一个原始收件人。
2	接收者是一个复制 (CC) 收件人。
3	接收者是一个闪烁复制 (BCC) 收件人。
说明

若 MsgIndex 设置不为 -1，则设计时该属性不可用且为只读。

RecipType 属性的设置值取决于当前索引消息，当前索引消息由 RecipIndex 属性指定。用户不能把收件人类型设置为 0（消息系统使用 0 值表示信息发送人）。指定 ResolveName 方法可以重置 RecipType 属性。


请参阅

MsgIndex 属性, RecipIndex 属性


Reply 方法（MAPI Messages 控制）
Reply 方法（MAPI Message 控制）

请参阅

应答一条消息。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Reply

说明

Reply 方法将当前索引消息复制到构成缓冲区，并在主题行的开头添加 RE:。它同时也将 MsgIndex 属性设置为 -1。

当前索引消息发送人变为即将输出消息的收件人。


请参阅

MsgIndex 属性


ReplyAll 方法（MAPI Messages 控制）
ReplyAll 方法（MAPI Message 控制）

请参阅

应答所有的消息收件人。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.ReplyAll

说明

ReplyAll 方法将当前索引消息复制到构成缓冲区，并在主题行的开头添加 RE:，它同时也将 MsgIndex 属性设置为 -1。

消息发送到当前索引消息发送人，到全部的 TO: 和 CC: 收件人。


请参阅

MsgIndex 属性


ResolveName 方法（MAPI Messages 控制）
ResolveName 方法（MAPI Message 控制）

请参阅

确定当前索引收件人的名称。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.ResolveName

说明

ResolveName 方法在地址簿中寻找匹配的当前索引收件人姓名。若未找到匹配值，则返回错误。它不附加确定消息发送人性命或地址。

AddressResolveUI 属性决定是否显示对话框来确定多义姓名。

ResolveName 方法可导致更改 RecipType 属性。


请参阅

AddressResolveUI 属性, RecipType 属性


Save 方法（MAPI Messages 控制）
Save 方法（MAPI Message 控制）

请参阅

在构成缓冲区保存现有消息 (MsgIndex = -1)。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Save


请参阅

MsgIndex 属性


Send 方法（MAPI Messages 控制）
Send 方法（MAPI Message 控制）

请参阅

发送一条消息。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Send [ = nDialog]

参数

nDialog

nDialog 值及其相应动作为：

值	说明
“真”(.T.)	发送对话框内消息，提示用户输入消息的各种组件，并将消息提交给邮件服务器以供传送。 所有与构成缓冲区中生成的消息有关的消息属性构成消息对话框的基础。然而，对话框中所做的更改并不影响构成缓冲区中的消息。
“假”(.F.) 或省略	在不显示对话框的情况下，将输出消息提交给邮件服务器。如果在没有收件人或附件路径遗漏的情况下试图发送消息，则出现错误。


请参阅

Reply 方法


SessionID 属性（MAPI Messages 控制）
SessionID 属性（MAPI Message 控制）

请参阅

指定或返回当前消息工作期的句柄。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.SessionID[ = nHandle]

说明

设计时不可用，运行时可读写。

该属性包含由 MAPI SESSION 控制的 SessionID 属性返回的消息工作期句柄。要把一个 MAPI SESSION 控制 与一个有效通信工作期关联起来，将该属性设置为一个已注册成功的MAPI SESSION 控制的 SessionID。


请参阅

SessionID 属性（MAPI SESSION 控制）


Show 方法（MAPI Messages 控制）
Show 方法（MAPI Message 控制）

请参阅

显示邮件“地址簿”对话框或当前索引收件人的详细资料。

应用于

MAPI Message 控制

语法

[Form.]MapiMessages.Show [nDetails]

参数

nDetails

nDetails 值及其相应动作为：

值	说明
“真”(.T.)	显示一个对话框，该对话框显示当前索引收件人的详细资料。对话框内的信息量由消息系统确定。该对话框至少应包含收件人姓名和地址的显示
“假”(.F.)或省略	显示邮件“地址簿”对话框。用户可以使用地址簿来创建或修收收件人集合。构成缓冲区以外的任何地址簿修改都不保存。


请参阅

RecipIndex 属性


MAPI SESSION 控制

请参阅	属性	事件	方法	错误信息

MAPI SESSION 控制注册一个现有 MAPI 工作期。它也可用于注销一个 MAPI 工作期。

语法

MapiSession

说明

在显示完注册屏幕之后，SessionID 属性包含 MAPI 工作期的句柄。以后，在使用 MAPI Message 控制时，必须将工作期句柄传递给MAPIMessage 控制，否则会生成错误。

确保使用 MAPI SESSION 控制来注销所有用注册动作初始化的消息工作期。


 属性

Action	*AutoSize	*BaseClass
*Class	*ClassLibrary	*Comment
*DocumentFile	DownloadMail	*DragIcon
*DragMode	*Enabled	*Height
*HelpContextID	*HostName	*Left
LogonUI	*MousePointer	*Name
NewSession	*OLEClass	*ParentClass
Password	SessionID	*Sizable
*Stretch	*TabIndex	*TabStop
*Top	UserName	*Visible
*Width
*这些属性适用于 MAPI SESSION 控制所在的 OLE 容器 控制。


 事件

*Destroy	*DragDrop	*DragOver
*Error	*GotFocus	*Init
*LostFocus	*Moved	*Resize
*UIEnable
*这些事件适用于 MAPI SESSION 控制所在的 OLE 容器 控制。


 方法

AboutBox	*CloneObject	*DoVerb
*Drag	*Move	*Refresh
*SaveAsClass	*SetFocus	SignOff
SignOn	*ZOrder
*这些方法适用于 MAPI SESSION 控制所在的 OLE 容器 控制。


请参阅

MAPI 控制概述, MAPI Message 控制, OLE 容器控制


AboutBox 方法（MAPI SESSION 控制）

显示 MAPI SESSION 控制的“关于框”。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.AboutBox


Action 属性（MAPI SESSION 控制）

请参阅

确定在 MAPI工作期控制激活时执行何种动作。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.Action[ = nSetting]

设置

nSetting

Action 属性的设置为：

设置	说明
1	将用户注册于 UserName 和 Password 属性指定的帐户中，并向底层消息子系统提供工作期句柄。该工作期句柄存储于 SessionID 属性。 根据 NewSession 属性的值，该工作期句柄可表示一个新创建的工作期或一个现有工作期。
2	终止消息工作期，并从所指定帐目中注销该用户。
说明

设计时不可用，运行时只写。

SignOn 和 SignOff 方法提供的附加功能，可以代替 Action 属性来启动或终止一个消息工作期。

Action 属性用于选择注册还是注销一个消息系统。在注册时，返回一个工作期句柄并存储于 SessionID 属性中。


请参阅

SessionID 属性, SignOn 方法, SignOff 方法


DownloadMail 属性（MAPI SESSION 控制）

指定是否为指定用户从邮件处理器中卸载一条新消息。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.DownloadMail[ = lExpression]

设置

lExpression

DownloadMail 属性的设置为：

设置	说明
“真”(.T.)	（默认值）所有来自邮件服务器的新消息都在显示注册屏幕过程中强制加进用户的信箱。显示一个过程指示器直到信息下载结束。
“假”(.F.)	服务器上的新信息并不立即加进用户的信箱，但按照用户设置的时间间隔下载。
说明

设计时可用，运行时可读写。

在注册时，如果想访问用户的完整信息集合，可将 DownloadMail 属性设置为“真”(.T.)。但是，处理时间会因此而增加。


LogonUI 属性（MAPI SESSION 控制）

请参阅

指定是否为注册提供一个对话框。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.LogonUI[ = lExpression]

设置

lExpression

DownloadMail 属性的设置为：

设置	说明
“真”(.T.)	（默认值）一个对话框提示新用户输入他们的用户名和口令（除非已存在一个有效消息工作期。有关详细内容，请参见 NewSession 属性。）
“假”(.F.)	不显示对话框。
说明

设计时可用，运行时可读写。

若要在没有用户干涉的情况下开始一个消息工作期，或者已获得用户的帐目名和口令，将 DownloadMail 属性设置为“假”(.F.) 很有用。然而，当所提供的值不足或不正确时，将生成错误。


请参阅

Password 属性, UserName 属性


NewSession 属性（MAPI SESSION 控制）

请参阅

指定是否建立一个新的消息工作期，即使此时已存在一个有效工作期。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.NewSession[ = lExpression]

设置

lExpression

NewSession 属性的设置为：

设置	说明
“真”(.T.)	不管是否已存在一个有效工作期，都要建立一个新的消息工作期。
“假”(.F.)	（默认值）使用用户建立的现有工作期。
说明

设计时可用，运行时可读。


请参阅

SessionID 属性


Password 属性（MAPI SESSION 控制）

请参阅

指定与 UserName 属性相关的帐户口令。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.Password[ = cPassword]

设置

cPassword

指定用户的口令，默认值为空字符串。

说明

设计时可用，运行时可读写。

指定一个空字符串，可以显示一个带有空口令字段的注册对话框。


请参阅

UserName 属性


SessionID 属性（MAPI SESSION 控制）

请参阅

包含当前消息工作期句柄。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.SessionID

说明

设计时不可用，运行时只读。

当用户指定 SignOn 方法时设置该属性。SessionID 属性包含一个唯一的消息工作期句柄，默认值为 0。

使用该属性可以设置 MAPI工作期控制的 SessionID 属性。


请参阅

SessionID 属性（MAPI Message 控制）, SignOn 方法


SignOff 方法（MAPI SESSION 控制）

请参阅

终止消息工作期，并从 UserName 和 Password 属性指定的帐户中注销用户。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.SignOff


请参阅

Password 属性, SignOn 方法, UserName 属性


SignOn 方法（MAPI SESSION 控制）

请参阅

将用户注册到 UserName 和 Password 属性所指定的帐户中，并向底层消息子系统提供一个工作期句柄。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.SignOn

说明

工作期句柄存储于 SessionID 属性中。根据 NewSession 属性的值，工作期句柄可表示一个新创建的工作期或一个现有工作期。


请参阅

NewSession 属性, SessionID 属性, SignOn 方法


UserName 属性 (MAPI Session 控制)
UserName 属性（MAPI SESSION 控制）

请参阅

指定用户帐户名。

应用于

MAPI SESSION 控制

语法

[Form.]MapiSession.UserName[ = cUserName]

设置

cUserName

指定用户的帐户名。

说明

设计时可用，运行时可读写。

该属性包含注册和注销时所需的用户帐户名。如果 LogonUI 属性为“真”(.T.)，则 UserName 属性中的空字符串可以生成一个具有空姓名字段的注册对话框。默认值为空字符串。


请参阅

LogonUI 属性, Password 属性


错误信息（MAPI 控制）

请参阅

下表列出了 MAPI 控制可捕获的错误。

错误号	错误
7	超出内存。
380	无效属性值。
32001	用户取消了处理
32002	出现未指定错误。
32003	注册失败。
32004	磁盘已满。
32005	内存不够。
32006	拒绝访问。
32007	MAPI_E_FAILURE.
32008	工作期太多。
32009	文件太多。
32010	收件人太多。
32011	附件未找到。
32012	打开附件失败。
32013	试图写附件失败。
32014	不可知收件人。
32015	无效收件人类型。
32016	无消息。
32017	无效消息。
32018	文本太大。
32019	无效工作期。
32020	类型不支持。
32021	多义收件人。
32022	消息正使用。
32023	网络失败。
32024	无效 Editfields。
32025	无效收件人。
32026	不支持。
32027	用户已放弃先前动作。
32050	注册失败：已存在有效工作期ID。
32051	为使用构成缓冲区时该属性只读。设置 MsgIndex = -1。
32052	动作仅对构成缓冲区有效。设置 Set MsgIndex = -1。
32053	MAPI 失败：不存在有效工作期 ID。
32054	在构成缓冲区中没有发送人。
32055	动作对构成缓冲区无效。
32056	不能执行动作，列表中无消息。
32057	不能执行动作，无收件人。
32058	不能执行动作，无附件。


请参阅

MAPI SESSION 控制, MAPI Message 控制


Outline 控制

请参阅	属性	事件	方法	错误信息

OutLine 控制，MSOUTL32.OCX，是一种特殊的列表框。这种列表框允许在分层次列表中显示数据项。对于显示文件系统中的目录和文件，这个控制是很有用的。Windows 的文件管理器就使用这种技术。

语法

Outline

说明

每个 OutLine 控制中的数据项都可以有从属项，从属项直观地用缩进层次来表示。当扩展一个数据项时，该数据项的从属项就成为可见的；当折叠起一个数据项时，该数据项的从属项就隐藏起来。OutLine 控制中的数据项也可以显示图形元素，以提供数据项状态的可视提示。

可视元素

OutLine 控制能够为列表中每个数据项显示图形和文本。下面的示例使用 +/- 图片和文本：

下面的示例使用目录树线条、类型图片和文本：

每一项都可以具有下列图形元素：

目录树线

连接数据项及其从属项的垂直和水平线条。目录树线条产生扩展和折叠事件。

缩进

项的从属项层次。每个缩进都是一个 Indent 属性指定的从属项。

+／- 号

指示从属项是可见还是隐藏的。当单击“+”号时，从属项成为可见的，并且用“-”号替换“+”号；为单击“-”号时，从属项成为隐藏的，并用“+”号替换“-”号。

类型图片

提示数据项的状态。类型图片通常显示具有从属项的数据项是可扩展还是可折叠的。例如，一个关闭的文件夹的图片表示该文件夹中的数据项是可扩展的。数据项的状态是用户自定义的。类型图片产生 PictureClick 和 PictureDblclick 事件。

文本

为数据项显示的字符串。

每个图形元素都可以是“热点”图形，单击“热点”触发特定系列的事件。

使用 Style 属性可以显示 OutLine 控制中每个数据项的全部、部分或者不显示图形元素。

附注

若要选择一个数据项，必须单击或双击文本；不能通过单击图形元素来选择数据项。

键盘接口

可以使用键盘来选择 OutLine 控制列表中的数据项。下表列出各键及其动作。

键	动作
左箭头	如果当前数据项是从属项，则将焦点移到其父数据项上。
右箭头	如果可见，则将焦点移到第一个从属项上。
上箭头	如果有，则将焦点移到上一个从属项上。
下箭头	如果有，则将焦点移到下一个数据项上。
HOME	将焦点移到列表中的第一个数据项上。
END	将焦点移到最后一个可见的数据项上。
PAGE UP	将焦点后移一页，或者将焦点移到当前显示页的第一个数据项上。
PAGE DOWN	将焦点前移一页，或者将焦点移到当前显示页的最后一个数据项上。
此外，可以用下面的两个键扩展或折叠具有从属项的项。

键	动作
+（加号）	扩展一个项。
-（减号）	折叠一个项。


 属性

*AutoSize	BackColor	*BaseClass
BorderStyle	*Class	*ClassLibrary
*Comment	*DocumentFile	*DragIcon
*DragMode	*Enabled	Expand
FontBold	FontItalic	FontName
FontSize	FontStrikethru	FontUnderline
ForeColor	FullPath	HasSubItems
*Height	*HelpContextID	*HostName
hWnd	Indent	IsItemVisible
ItemData	*Left	ListCount
ListIndex	List	MouseIcon
*MousePointer	*Name	*OLEClass
*Parent	*ParentClass	PathSeparator
PictureClosed	PictureLeaf	PictureMinus
PictureOpen	PicturePlus	PictureType
*Sizable	*Stretch	Style
*TabIndex	*TabStop	Text
*Top	TopIndex	*Visible
*Width
* 这些属性仅用于含有 Outline 控制的 OLE 容器控制。


 事件

*Click	Collapse	*DblClick
*Destroy	*DragDrop	*DragOver
*Error	Expand	*GotFocus
*Init	KeyDown	*KeyPress
KeyUp	*LostFocus	*MouseDown
*MouseMove	*MouseUp	*Moved
PictureClick	PictureDblClick	*Resize
*UIEnable
*这些事件仅用于含有 Outline 控制的 OLE 容器控制。


 方法

AboutBox	AddItem	Clear
*CloneObject	*DoVerb	*Drag
*Move	*Refresh	RemoveItem
*SaveAsClass	*SetFocus	*ZOrder
*这些方法仅用于含有 Outline 控制的 OLE 容器控制。


请参阅

OLE 容器控制, Outline 控制属性对话框


AboutBox 方法（Outline 控制）

为 Outline 控制显示“关于”框。

应用于

Outline 控制

语法

[Form.]Outline.Object.AboutBox


AddItem 方法（Outline 控制）

请参阅

在运行时向 Outline 控制中添加一个项。

应用于

Outline 控制

语法

[Form.]Outline.Object.AddItem(cItemText [, nIndex])

参数

cItemText

为项指定文本。

nIndex

指定要添加项的索引。

如果指定的 nIndex 指向一个已存在的项，那么将新项插入 Outline 控制中，并使用已存在项的缩进层次。然而，如果指定了 nIndex 而该项不存在，那么将该项添加进 Outline 控制中，其缩进层次设置为 0。如果一个数据项的缩进层次是 0，但不是 Outline 控制中的第一个数据项，那么该数据项是不可见的，直到其缩进层次大于 0。

如果没有指定 nIndex 参数，则当前选定的项就决定新项的插入位置。例如，如果 ListIndex 属性设置为 2，那么新数据项添加在 ListIndex 属性值为 2 的项的从属项末尾。如果 ListIndex 属性设置成 -1（没有选择项），那么新项的缩进层次是 1，并且加在列表的末尾。


请参阅

RemoveItem 方法


BackColor 属性（Outline 控制）

请参阅

指定 Outline 控制的背景色。

应用于

Outline 控制

语法

[Form.]Outline.Object.BackColor[= nColor]

设置

nColor

指定单一的颜色值。下表列出了典型的颜色值。

颜色	RGB 值	nColor  值
白色	255, 255, 255	16777215
黑色	0, 0, 0	0
灰色	192, 192, 192	12632256
深灰色	128, 128, 128	8421504
红色	255, 0, 0	255
深红色	128, 0, 0	128
黄色	255, 255, 0	65535
深黄色	128, 128, 0	32896
绿色	0, 255, 0	65280
深绿色	0, 128, 0	32768
青色	0, 255, 255	16776960
深青色	0, 128, 128	8421376
蓝色	0, 0, 255	16711680
深蓝色	0, 0, 128	8388608
洋红色	255, 0 ,255	16711935
深洋红色	128, 0, 128	8388736
说明

设计时可用，运行时可读写。

Visual FoxPro 使用 Windows 的红-绿-蓝 (GRG) 配色方案来构成各种颜色。红、绿、蓝三种颜色成分分别用一个 0 和 255 之间的数代表。使用 RGB( ) 函数可以将三原色转换成一个混合的颜色值 nColor。


请参阅

ForeColor 属性


BorderStyle 属性（Outline 控制）

指定 Outline 控制的边框样式。

应用于

Outline 控制

语法

[Form.]Outline.Object.BorderStyle[= nValue]

设置

nValue

指定 Outline 控制的边框样式。

设置	说明
0	无边框和与边框相关的元素。
1	（默认值）实单线。
说明

设计时可用，运行时只读。


Clear 方法（Outline 控制）

清除 Outline 控制中的内容。

应用于

Outline 控制

语法

[Form.]Outline.Object.Clear


Collapse 事件（Outline 控制）

请参阅

当折叠一个项时该事件发生，意味着隐藏该项的从属项。

应用于

Outline 控制

语法

PROCEDURE [Form.]Outline.Object.Collapse
LPARAMETERS nList

说明

这一事件传递列表中要关闭的数据项索引 nList。


请参阅

Expand 事件


Expand 事件（Outline 控制）

请参阅

当扩展一个数据项时该事件发生，意味着使该项的从属项可见。

应用于

Outline 控制

语法

PROCEDURE [Form.]Outline.Object.Expand
LPARMETERS nList

说明

这一事件传递列表中要关闭的数据项索引 nList。

可以用 Expand 事件更改项的类型图片。例如，当数据项扩展开时，显示一幅图片，而当数据项折叠起来后，显示另一幅不同的图片。

附注

如果将 Expand 属性设置成“真”(.T.)时，那么即使项没有从属项也会发生 Expand 事件。


请参阅

Collapse 事件


Expand 属性（Outline 控制）

请参阅

指定一个项是否已经扩展（从属项成为可见的）。

应用于

Outline 控制

语法

[Form.]Outline.Object.Expand(nIndex)[ = lExpression]

设置

lExpression

Expand 属性的设置是：

设置	说明
“真”(.T.)	项已经扩展，其从属项可见。
“假”(.F.)	项的从属项，如果有的话，被折叠从而隐藏。
说明

设计时不可用，运行时可读写。

使用 Expand 属性，能够以编程方式控制从属项的扩展和折叠。当 Outline 控制与其他控制值是上下文相关的时候，Expand 属性很有用。

如果某个数据项是折叠的，而设置它的 Expand 属性为“真”(.T.)，那么 Outline 控制产生一条运行错误“父项没有扩展开”。

如果将 Expand 属性设置为“真”(.T.)，那么发生 Expand 事件。


请参阅

Expand 事件


FontBold, FontItalic, FontStrikethru, FontUnderline 属性（Outline 控制）

请参阅

指定 Outline 控制中的文本具有一种或几种字形：粗体，斜体，删除或下划线。

应用于

Outline 控制

语法

[Form.]Outline.Object.FontBold[ = lExpr]
[Form.]Outline.Object.FontItalic[ = lExpr]
[Form.]Outline.Object.FontStrikeThru[ = lExpr]
[Form.]Outline.Object.FontUnderline[ = lExpr]

设置

lExpr

字体属性的设置是：

设置	说明
“真”(.T.)	字形是黑体、斜体、删除或下划线。
“假”(.F.)	（默认值，FontBOld 除外）字形不是黑体，斜体、删除或下划线。
说明

设计时可用，运行时可读写。

一般地，在用 FontSize，FontBold，FontItalic，FontStrikethru 和 FontUnderline 属性设置字体的大小和字形之前，要更改 Font 或 FontName 属性的设置。然而设置小于 8 磅的 TrueType 字体时，应该先用 FontSize 属性设置磅值，然后设置 FontName 属性，最后再用 FontSize 属性设置磅值。在 Windows 环境下，对于小于 8 磅的 TrueType 字体，使用另一种不同的字体。

附注

可用的字体随系统配置、显示设备和打印设备的不同而有所变化。只能为实际存在的字体设置与字体相关的属性。


请参阅

FontName 属性, FontSize 属性


FontName 属性（Outline 控制）

请参阅

指定在 Outline 控制中用来显示文本的字体名。

应用于

Outline 控制

语法

[Form.]Outline.Object.FontName[ = cName]

设置

cName

指定字体名。

说明

设计时可用，运行时可读写。

可用字体随系统配置的不同而有所变化。只能为实际存在的字体设置与字体相关的属性。

一般地，在用 Font Size，FontBold，FontItalic，FontStrikethru 和 FontUnderline 属性设置字体的大小和字形之前，要更改 FontName 属性值。


请参阅

FontBold 属性, FontItalic 属性, FontSize 属性, FontStrikethru 属性, FontUnderline 属性


FontSize 属性（Outline 控制）

请参阅

指定在 Out line 控制中用来显示文本的字体大小。

应用于

Outline 控制

语法

[Form.]Outline.Object.FontSize[ = nSize]

设置

nSize

以磅为单位指定字体的大小。

说明

设计时可用，运行时可读写。

nSize 的最大值是 2048 磅。1 英寸有 72 磅。

一般地，在用 FontSize，Font Bold，FOntItalic，FontStrikethru 和 FontUnderline 属性设置字体的大小和字形之前，要更改 Font 或 FontName 属性。然而，当设置小于 8 磅的 TrueType 字体时，应该先用 FontSize 属性设置磅值，然后设置 FontName 属性，最后再用 FontSize 属性设置磅值。在 Windows 环境下，对于小于 8 磅的 TrueType 字体，使用另一种不同的字体。

附注

可用的字体随系统配置的不同而有所变化。只能为实际存在的字体设置与字体相关的属性。


请参阅

FontBold 属性, FontItalic 属性, FontName 属性, FontStrikethru 属性, FontUnderline 属性


ForeColor 属性（Outline 控制）

请参阅

指定 Out line 控制的前景色。

应用于

Outline 控制

语法

[Form.]Outline.Object.ForeColor[ = nColor]

设置

nColor

指定一个单一的颜色值。下表列出了典型的颜色值。

颜色	RGB 值	nColor  值
白色	255, 255, 255	16777215
黑色	0, 0, 0	0
灰色	192, 192, 192	12632256
深灰色	128, 128, 128	8421504
红色	255, 0, 0	255
深红色	128, 0, 0	128
黄色	255, 255, 0	65535
深黄色	128, 128, 0	32896
绿色	0, 255, 0	65280
深绿色	0, 128, 0	32768
青色	0, 255, 255	16776960
深青色	0, 128, 128	8421376
蓝色	0, 0, 255	16711680
深蓝色	0, 0, 128	8388608
洋红色	255, 0 ,255	16711935
深洋红色	128, 0, 128	8388736
说明

设计时不可用，运行时可读写。

Visual FoxPro 使用 Windows 的红一绿一蓝 (GRB) 配色方案来构成各种颜色。红、绿、蓝 三种颜色成分分别用一个 0 到 255 之间的数代表。使用RGB( ) 函数可以将三元色转换成一个混合的颜色值 nColor。


请参阅

BackColor 属性


FullPath 属性（Outline 控制）

请参阅

返回项的完整名称。

应用于

Outline 控制

语法

[Form.]Outline.Object.FullPath( = nIndex)

设置

nIndex

通过索引编号指定 Outline 控制中的一个项。完整名是项及其父项以及祖父项等等的连接，直到缩进层次是 1 的父项。FullPath 属性是一个数组，该数组中的索引值对应着列表中的项。

如果 Outline 控制中的第一个项的缩进层次是 0，并且该数可见，那么第一个项也包含在 FullPath 属性中。

使用 PathSeparator 属性可以在 FullPath 属性的各组件之间创建一个分隔符。当 Outline 控制中包括诸如目录名和文件名之类的文件系统组件时，PathSeparator 属性就显得很有用了

说明

设计时不可用，运行时只读。


请参阅

PathSeparator 属性


HasSubItems 属性（Outline 控制）

请参阅

返回一个项是否有从属项。

应用于

Outline 控制

语法

[Form.]Outline.Object.HasSubItems(nIndex)

设置

nIndex

通过索引编号指定 Outline 控制中的一个项。HasSubItems 属性是一个数组，该数组中的索引值对应着列表中的项。

如果项有从属项，不管从属项是否可见，HasSubItems 属性都返回“真”(.T.)。若要确定某一特定项是否可见，可以使用 IsItemVisible 属性。

说明

设计时不可用，运行时只读。


请参阅

IsItemVisible 属性


hWnd 属性（Outline 控制）

请参阅

包含指向 Outline 控制的句柄。

应用于

Outline 控制

语法

[Form.]Outline.Object.hWnd

说明

设计时不可用，运行时只读。

Microsoft Windows 通过指定一个句柄或 hWnd 属性值的方式来标识应用程序中的每个表单和控制。hWnd 属性用在 Windows API 调用中。许多 Windows 操作环境函数都需要活动窗口的 hWnd 属性值作为一个参数。

在 Visual FoxPro 中，可以通过 DECLARE - DLL 或是用 Visual FoxPro 专业版创建的外部 Visual FoxPro API 库例程来访问 Windows API。

因为 hWnd 属性的值在程序运行过程中可能改变，所以千万不要将 hWnd 的值存入变量中。


请参阅

DECLARE - DLL, SET LIBRARY


Indent 属性（Outline 控制）

请参阅

指定或返回列表中特定索引的缩进层次。

应用于

Outline 控制

语法

[Form.]Outline.Object.Indent(nIndex)[ = nIndent]

设置

nIndex

通过索引编号指定 Outline 控制中的一个项。

如果 nIndex 的值比其父项的缩进层次大二或更多，就会产生运行错误“非法大纲缩进”。例如，如果列表中的第一个项的缩进层次是 1，而将第二个项的缩进层次设置成 3，就会产生运行错误。

缩进层次 0 有两种含义。如果一个项是第一项，那么缩进层次 0 就意味着它是层次中的根项（例如，一个驱动器字母）。这仅适用于 Style 属性中包含图片和目录树线条的控制。如果一个项不是第一项，那么缩进层次 0 意味着该数据项是不可见的，直到它的缩进层次大于 0 为止。

如果 nIndex 引用了一个不存在的项，那么 Outline 控制将自动添将该项添加到列表中，并且调整 ListCount 属性的值。

nIndent

指定缩进层次。

说明

设计时不可用，运行时可读写。

Indent 属性是一个数组，该数组中的索引值对应着列表中的项。


请参阅

Style 属性


IsItemVisible 属性（Outline 控制）

请参阅

返回一个数据项当前是否可见。

应用于

Outline 控制

语法

[Form.]Outline.Object.IsItemVisible(nIndex)

nIndex

通过索引编号指定 Outline 控制中的项。

说明

设计时不可用，运行时只读。

IsItemVisible 属性是一个数组，该数组中的索引值对应着列表中的项。


请参阅

HasSubItems 属性


ItemData 属性（Outline 控制）

请参阅

使用索引来引用一维数组。该数组中包含与 Out line 控制的 List 属性设置值相同数目的数据项。

应用于

Outline 控制

语法

[Form.]Outline.Object.ItemData(nIndex)[ = nData]

设置

nIndex

指定要存贮或检索的项的索引，nIndex 对应着 Outline 控制中项的显示顺序。

nData

从 ItemData 列表中存贮或检索的编号。

说明

设计时不可用，运行时可读写。

使用 ItemData 属性可以将一个特定的编号与 Outline 控制中的每个项关联起来。这样在代码中就可以使用这些编号来标识 Outline 控制中的项。


请参阅

List 属性, ListCount 属性, ListIndex 属性, TopIndex 属性


KeyDown Event（Outline 控制）
KeyDown 事件（Outline 控制）

请参阅

当 Out line 控制获得焦点且按下一个键时该事件发生。

应用于

Outline 控制

语法

PROCEDURE [Form.]Outline.Object.KeyDown
LPARAMETERS Keycode, Shift

参数

必须在事件过程中包含一条 LPARAMETERS 或 PARAMETERS 语句，并且为每个参数指定一个名称。

Keycode

包含一个数字。该数字标识按下的键。关于特殊键和组合键的代码列表，请参阅 INKEY( )。

Shift

如果按下特定键则设置某位。这个参数是所有设置位的总和。低位分别对应着 SHIFT 键（ 0 位），CTRL 键（ 1 位）和 ALT 键（ 2 位）。这些位分别对应着数值 1，2 和 4。这个参数指示出这些键的状态。当其中的部分、全部或没有位设置时，则表明部分、全部或没有键按下。例如，如果 CTRL 键和 ALT 键一起按下，那么 Shift 的值就是 6。

说明

当 Outline 控制获得焦点时，KeyDown 事件对于捕获输入的键击很有用，这使您可以立即检测键击的有效性。


请参阅

INKEY( ), KeyUp 事件


KeyUp 事件（Outline 控制）

请参阅

当 Outline 控制获得焦点且释放一个键时该事件发生。

应用于

Outline 控制

语法

PROCEDURE [Form.]Outline.Object.KeyUp
LPARAMETERS Keycode, Shift

参数

必须在事件过程中包含一条 LPARAMETERS 或 PARAMETERS 语句，并且为每个参数指定一个名称。

Keycode

包含一个数字。该数字标识释放的键。关于特殊键和组合键的代码列表，请参阅 INKEY( ) 函数。

Shift

如果按下特定键则设置某位。这个参数是所有设置位的总和。低位分别对应着 SHIFT 键（ 0 位），CTRL 键（ 1 位）和 ALT 键（ 2 位）。这些位分别对应着数值 1，2 和 4。这个参数指示出这些键的状态。当其中的部分、全部或没有位设置时，则表明部分、全部或没有键按下。例如，如果 CTRL 键和 ALT 键一起按下，那么 Shift 的值就是 6。


请参阅

INKEY( ), KeyDown 事件


List 属性（Outline 控制）

请参阅

指定包含在 Out line 控制中的项。

应用于

Outline 控制

语法

[Form.]Outline.Object.List(nRow)[ = cItemText]

设置

nRow

以显示的顺序指定要被检索或指定的数据项的行值。例如，nRow = 3 指定显示在 Outline 控制中的第 3 行。

cItemText

为项指定文本。

说明

设计时不可用，运行时可读写。

如果数据项的索引不存在，那么 Outline 控制自动将该项添加到列表中，并且调整 ListCount 属性的值。然而，该数据项是不可见的，直到缩进层次大于 0。

List 属性和 ListCount 属性一起配合使用，List 属性可以从 1 到ListCount 一 命名 Outline 控制中的项。ListCount 属性返回列表中的所有项。


请参阅

ItemData 属性, ListCount 属性, ListIndex 属性, TopIndex 属性


ListCount 属性（Outline 控制）

请参阅

包含 Outline 控制中项的数目。

应用于

Outline 控制

语法

[Form.]Outline.Object.ListCount

说明

设计时不可用，运行时只读。


请参阅

ItemData 属性, List 属性, ListIndex 属性, TopIndex 属性


ListIndex 属性（Outline 控制）

请参阅

指定 Outline 控制中所选项的索引编号。

应用于

Outline 控制

语法

[Form.]Outline.Object.ListIndex[ = nIndex]

设置

nIndex

ListIndex 属性的设置是：

设置	说明
0	(默认值)没有选择数据项。
1 ... ListCount	所选数据项的索引编号。
说明

设计时不可用，运行时可读写。


请参阅

ItemData 属性, List 属性, ListCount 属性, TopIndex 属性


MouseIcon 属性（Outline 控制）

请参阅

指定当鼠标指针位于 Outline 控制上时所显示的鼠标图标文件。

应用于

Outline 控制

语法

[Form.]Outline.Object.MouseIcon[ = PictureFile]

设置

PictureFile

指定鼠标图标文件。

说明

设计时可用，运行时可读写。

若要使用 MouseIcon 属性来指定鼠标图标文件，必须将 MousePointer 属性设置为 99（自定义）。


请参阅

MousePointer 属性


PathSeparator 属性（Outline 控制）

请参阅

指定或返回项的分隔字符串。该字符串在访问 FullPath 属性时使用。

应用于

Outline 控制

语法

[Form.]Outline.Object.PathSeparator[ = cDelimiter]

说明

设计时可用，运行时可读写。

分隔符的默认值是反斜杠 (\)。


请参阅

FullPath 属性


PictureClick 事件（Outline 控制）

请参阅

当单击与项相关联的类型图片时该事件发生。

应用于

Outline 控制

语法

PROCEDURE [Form.]Outline.Object.PictureClick
LPARAMETERS nList

说明

这个事件传递列表中要被关闭的项的索引 nList。


请参阅

PictureDblClick 事件


PictureClosed, PictureOpen, PictureLeaf 属性（Outline 控制）

请参阅

指定或返回与 PictureType 属性相关联的类型图片。

应用于

Outline 控制

语法

[Form.]Outline.Object.PictureClosed[ = nPicture]

[Form.]Outline.Object.PictureOpen[ = nPicture]

[Form.]Outline.Object.PictureLeaf[ = nPicture]

说明

设计时可用，运行时可读写。

在 Outline 控制中的每个项都有一个等于 0，1 或 2 的 PictureType 属性值。值为 0 的 PictureType 属性指的是 Picture Closed 图片；值为 1 的 Picture Type 属性指的是 PictureOpen 图片；值为 2 的 PictureType 属性指的是 PictureLeaf 图片。

要显示类型图片，Style 属性必须设置为 1，3 或 5。

PictureClosed，PictureOpen 和 PictureLeaf 属性既可以显示位图文件 (*.BMP)，也可以显示图标文件 (*.ICO)。

如果不为 PictureClosed，PictureOpen 和 PictureLeaf 设置值，Outline 控制将使用默认图片。也可以在运行时更改图片的数值。


请参阅

Picture Minus 属性, Picture Plus 属性, PictureType 属性, Style 属性


PictureDblClick 事件（Outline 控制）

请参阅

当双击与项相关联的类型图片时该事件发生。

应用于

Outline 控制

语法

PROCEDURE [Form.]Outline.Object.PictureDblClick
LPARAMETERS nList

说明

这个事件传递列表中要被关闭的项的索引 nList。


请参阅

PictureClick 事件


PictureMinus, PicturePlus 属性（Outline 控制）

请参阅

PictureMinus 属性为具有可折叠从属项的项指定或返回图片。PicturePlus 属性为具有可扩展从属项的项指定或返回图片。

应用于

Outline 控制

语法

[Form.]Outline.Object.PictureMinus[ = nPicture]

[Form.]Outline.Object.PicturePlus[ = nPicture]

说明

设计时可用，运行时可读写。

若要显示 +／- 图片，必须将 Style 属性设置为 2 或 3。

PictureMinus 和 PicturePlus 属性既可以显示位图文件 (*.BMP)，也可以显示图标文件 (*.ICO)。

如果不为 PictureMinus 和 PicturePlus 属性设置值，那么 Outline 控制使用默认的图片。


请参阅

PictureClosed 属性, PictureOpen 属性, PictureLeaf 属性, PictureType 属性, Style 属性


PictureType 属性（Outline 控制）

请参阅

指定或返回代表 PictureClosed，PictureOpen 或 PictureLeaf 图片的整数。

应用于

Outline 控制

语法

[Form.]Outline.Object.PictureType(nIndex)[ = nType]

设置

nIndex

通过索引编号指定 Outline 控制中的一个项。

nType

PictureType 属性的设置是：

设置	说明
0	使用 PictureClosed 图片。
1	使用 PictureOpen 图片。
2	使用 PictureLeaf 图片。
如果不为 PictureClosed，PictureOpen 和 PictureLeaf 设置值，那么 Outline 控制使用默认的图片。

说明

设计时不可用，运行时可读写。

PictureType 属性是一个数组，该数组中的索引对应着列表中的项。


请参阅

PictureClosed 属性, PictureLeaf 属性, PictureOpen 属性, Style 属性


RemoveItem 方法（Outline 控制）

请参阅

在运行时从 Outline 控制中删除一个项及其从属项。

应用于

Outline 控制

语法

[Form.]Outline.Object.RemoveItem(nIndex)

参数

nIndex

指定要删除项的索引。

说明

RemoveItem 方法删除指定项及所有的从属项。


请参阅

AddItem 方法


Style 属性（Outline 控制）

请参阅

指定或返回为 Outline 控制中每个项所显示的图形和文本的样式。

应用于

Outline 控制

语法

[Form.]Outline.Object.Style[ = nStyle]

设置

nStyle

Style 属性的设置是：

设置	说明
0	只有文本。
1	图片和文本。
2	（默认值）+／- 和文本。
3	+／-，图片和文本。
4	目录树线条和文本。
5	目录树线条、图片和文本。
说明

设计时可用，运行时可读写。

这里有两个关于使用 Style 属性的例子。下面的示例使用 +／- 图片和文本：

下面的示例使用目录树线条、类型图片和文本：


请参阅

PictureClosed 属性, PictureOpen 属性, PictureLeaf 属性


Text 属性（Outline 控制）

请参阅

包含 Outline 控制中当前所选项的文本。

应用于

Outline 控制

语法

[Form.]Outline.Object.Text

说明

设计时不可用，运行时只读。

项的文本由 List 属性指定。


请参阅

List 属性


TopIndex 属性（Outline 控制）

请参阅

指定在列表中显示在最上面的项。

应用于

Outline 控制

语法

[Form.]Outline.Object.TopIndex[ = nIndex]

设置

nIndex

指定 Outline 控制中显示在最上面的项的索引。

说明

设计时不可用，运行时可读写。

数据项的索引反映了它在 Outline 控制中的位置，这一索引值相对于 Outline 控制中的其他项，并且可以更改。


请参阅

ItemData 属性, List 属性, ListCount 属性, ListIndex 属性


 错误信息（Outline 控制）

请参阅

下表列出了 Outline 控制可俘获的错误。

错误编号	错误
6	溢出。
380	无效的属性值。
381	无效的属性数组索引。
383	错误-IsItemVisible 是只读属性。
383	错误-Text 在运行时只读。
383	错误-Text 是只读属性。
383	错误-ListCount 在运行时只读。
383	错误- ListCount 是只读属性。
383	错误-HasSubItems 是只读属性。
383	错误- SetFullPath 是只读属性。
32000	在线：不支持的图片格式。
32001	非法 Out line 缩进。
32002	在线：内存不够。
32003	在线：父数据项没有扩展。
32004	在线：不能识别的错误。


请参阅

Outline 控制


Picture Clip 控制

请参阅	属性	事件	方法	错误信息

Picture Clip 控制 PICCLP32.OCX 允许用户从一个源位图中选择一个区域，然后将该区域的图象显示在一个表单中。Picture Clip 控制在运行时是不可见的。

语法

PictureClip

说明

Picture Clip 控制为存贮多幅图片资源提供了一个有效的工具。可以在应用程序中创建一个包含 OLE 控制所需要的全部图象的源位图，以此代替使用多个位图或图标。当需要单独访问某一幅图象时，使用 Picture Clip 控制在源位图中选择所需图象的区域即可。

例如，使用该控制可以将应用程序需要的所有图象都存贮在一起。将所有图象存贮在一个 Picture Clip 控制中比将每幅图象作一个文件存贮要有效的多。要这样做，必须首先创建一个包含所有图象的源位图。

附注

由源位图创建的 Picture Clip 控制引用只能由其他 OLE 控制所使用。例如，可用于 Outline 控制中的 PictureOpen 和 PictureClosed 属性。但 Visual FoxPro 控制和对象不能使用 Picture Clip 控制创建的图片对象引用。

可以使用下面两个方法在源位图中指定载剪区域：

 •	   使用 Random Access 方法选择源位图的一部分作为剪载区域。使用 ClipX 和 ClipY 属性指定剪载区域的左上角，使用 ClipHeight 和 ClipWidth 属性确定剪裁区域面积。当想要显示位图的一部分时，这种方法很有用。

 •	   使用 Enumerated Access 方法将源位图分割成一定数目的行和列。形成大小一样的图片单元矩阵，依次编号为 0，1，2 等等。然后可以使用 GraphicCell 属性单独访问某一个单元。当源位图包含要单独访问的图象调色板时，这种方法很有用。

使用 Picture 属性可以将源位图加载到 Picture Clip 控制中。只能将位图文件 (.BMP) 加载到 Picture Clip 控制中。

l

附注

当创建和发布使用 Picture Clip 控制的应用程序时，应该将 PICCLP32.OCX 安装到用户的 Microsoft Windows\SYSTEM 子目录中。


 属性

*AutoSize	*BaseClass	CellHeight
CellWidth	*ClassLibrary	*Class
Clip	ClipHeight	ClipWidth
ClipX	ClipY	Cols
*Comment	*DocumentFile	*DragIcon
*DragMode	*Enabled	GraphicCell
Height	*HelpContextId	*HostName
hWnd	*Left	*MousePointer
*Name	*OLEClass	*Parent
*ParentClass	Picture	Rows
*Sizable	*Stretch	StretchX
StretchY	*TabIndex	*TabStop
*Top	*Visible	Width
* 这些属性用于容纳 Picture Clip 控制的 OLE 容器控制。


 事件

*Destroy	*DragDrop	*DragOver
*Error	*GotFocus	*Init
*LostFocus	*Moved	*Resize
*UIEnable
* 这些事件用于容纳 Picture Clip 控制的 OLE 容器控制。


 方法

AboutBox	*CloneObject	*DoVerb
*Drag	*Move	*Refresh
*SaveAsClass	*SetFocus	*Zorder
* 这些方法用于容纳 Picture Clip 控制的 OLE 容器控制。


请参阅

OLE 容器控制, Picture Clip 控制属性对话框


AboutBox 方法（Picture Clip 控制）

显示 Picture Clip 控制的“关于”框。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.AboutBox


CellHeight, CellWidth 属性（Picture Clip 控制）

请参阅

以象素为单位包含 Picture Clip 控制中 GraphicCell 属性的的高度和宽度。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.CellHeight
[Form.]PictureClip.CellWidth

说明

设计时不可用，运行时只读。

CellHeight 和 CellWidth 属性依赖于 Picture Clip 控制的 Cols 和 Row 属性。例如，将一幅图片分割成四行四列和将同一幅图片分割成八行八列，那么前者的 GraphicCell 属性值是后者的两倍。


请参阅

Cols 属性, GraphicCell 属性, Rows 属性


Clip 属性（Picture Clip 控制）

请参阅

包含一个对象引用。该对象引用指向 Picture Clip 控制中用 ClipHeight，CkipWidth，ClipX 和 ClipY 属性指定的位图区域。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.Clip

说明

设计时不可用，运行时只读。

当使用 Random Access 方法时，用 Clip 属性来指定剪裁区域。包含在 Clip 属性中的对象引用可以被其他 OLE 控制所使用。例如，该对象可用在 Outline 控制中的 PictureOpen 和 PictureClosed 属性中。


请参阅

ClipHeight 属性, ClipWidth 属性, ClipX 属性, ClipY 属性, Outline 控制, StretchX 属性, StretchY 属性


ClipHeight, ClipWidth, ClipX, ClipY 属性（Picture Clip 控制）

请参阅

指定或返回要复制到 Clip 属性中的 Picture Clip 控制内的区域。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.ClipHeight[ = nHeight]
[Form.]PictureClip.ClipWidth[ = nWidth]
[Form.]PictureClip.ClipX[ = nX]
[Form.]PictureClip.ClipY[ = nY]

设置

nHeight

指定 Picture Clip 控制中要复制的区域的高度。

nWidth

指定 Picture Clip 控制中要复制的区域的宽度。

nX

指定 Picture Clip 控制中要复制的区域的左上角 X 坐标。

nY

指定 Picture Clip 控制中要复制的区域的左上角 Y 坐标。

说明

设计时不可用，运行时只读。

使用这些属性可以指定要复制到 Clip 属性中的 Picture Clip 控制中的区域。这些属性都以象素为单位。


请参阅

Clip 属性


Cols, Rows 属性（Picture Clip 控制）

请参阅

指定或返回图片中列或行的总数。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.Cols[ = nColumns]
[Form.]PictureClip.Rows[ = nRows]

设置

nColumns

指定图片中的列数。

nRows

指定图片中的行数。

说明

使用这些属性可以将源位图分割成大小一样图片单元矩阵。使用 GraphicCell 属性可指定一个单元。

一个 Picture Clip 控制必须至少有一行一列。

每一个图片单元的高度由分割源位图高度的行数确定。源位图底部（由等分引起）的剩余象素就被剪裁掉。

每一个图片单元的宽度由分割源位图宽度的列数确定。源位图右边（由等分引起）的剩余象素就被剪裁掉。


请参阅

GraphicCell 属性, Height 属性, Width 属性


GraphicCell 属性（Picture Clip 控制）

请参阅

表示全部图片单元的一维图片数组。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.GraphicCell(nIndex)

设置

nIndex

指定图片单元的编号。

说明

设计时不可用，运行时只读。

当使用 Sequential Access 方法时，用这个属性可以指定一个剪裁区域。使用 Rows 和 Cols 属性将图片分割成大小一样的图片单元矩阵。由 GraphicCell 指定的单元按下列规则编号：从 0 开始，从左到右从上到下编号依次递增。

当没有图片或者 Rows 或 Cols 属性设置成 0 时，读 GrophicCell 属性会产生错误。


请参阅

Cols 属性, Rows 属性


Height, Width 属性（Picture Clip 控制）

请参阅

包含在控制中显示的位图的高度和宽度（以象素为单位）。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.Height
[Form.]PictureClip.Width

说明

设计时不可用，运行时只读。

只有当控制中包含有位图时，这些属性才有效。

在设计时可以通过在 Picture Clip 控制上单击鼠标右键来将一幅位图加载到 Picture Clip 控制中，选择“属性”然后再选择“图片”选项卡，最后为图片指定一个 .BMP 文件。


请参阅

Picture 属性


hWnd 属性（Picture Clip 控制）

请参阅

包含一个指向 Picture Clip 控制的句柄。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.hWnd

说明

设计时不可用，运行时只读。

Microsoft Windows 通过指定一个句柄或 hWnd 属性值来标识应用程序中的每个表单和控制。hWnd 属性用在 Windows API 调用中，许多 Windows 操作环境函数都需要活动窗口的 hWnd 属性值作为一个参数。

在 Visual FoxPro 中，可以通过  DECLARE - DLL 来访问 Windows API，也可以通过用 Visual FoxPro 专业级版本创建的外部 Visual FoxPro 例程库来访问 Windows API。

因为 hWnd 属性的值在程序运行过程中可能改变，所以千万不要将 hWnd 的值存入变量中。


请参阅

DECLARE - DLL, SET LIBRARY


Picture 属性（Picture Clip 控制）

请参阅

指定或返回出现在 Picture Clip 控制中的图片。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.Picture[ = oPicture]

设置

oPicture

在运行时间，以编程方式指定出现在 Picture Clip 控制中的图片。

说明

设计时可用，运行时可读写。

在设计时，可以指定一个 .BMP 文件作为出现在 Picture Clip 控制中的图片。若要指定一个 .BMP 文件，在 Picture Clip 控制上单击鼠标右键，然后选择“属性”，再选择“图片”选项卡，最后为图片指定一个 .BMP 文件。

在运行时间，可以指定一个包含图片的 OLE 控制对象引用。例如，可以指定包含在 Out line 控制中 PictureOpen 或 PictureClosed 属性内的图片。


请参阅

Height 属性, Width 属性


StretchX, StretchY 属性（Picture Clip 控制）

请参阅

指定或返回用 Clip 属性创建的位图的目标大小。

应用于

Picture Clip 控制

语法

[Form.]PictureClip.StretchX[ = nWidth]
[Form.]PictureClip.StretchY[ = nHeight]

设置

nWidth

指定剪裁位图伸展或压缩后区域的宽度。

nHeight

指定剪裁位图伸展或压缩后区域的高度。

说明

设计时不可用，运行时可读写。

使用这些属性可以定义要复制的剪裁位图区域。复制位图时，该位图伸展或者压缩以调整到 nWidth 和 nHeight 定义的区域大小。

nWidth 和 nHeight 以象素为单位测量。


请参阅

Clip 属性


错误信息（Picture Clip 控制）

请参阅

下表列出了 Picture Clip 控制的可俘获错误：

错误编号	错误
32000	不支持的图片格式。
32001	不能获取显示上下文。
32002	不能获取内存设备内容。
32003	不能获取位图。
32004	不能选择位图对象。
32005	不能分配内部图片结构。
32006	错误的 GraphicCell 索引。
32007	未指定 GraphicCell 图片大小。
32008	只允许位图 GraphicCell 图片。
32010	错误的 GraphicCell Picture Clip 属性请求。
32012	GetObject( ) 窗口函数失败。
32014	GlobalAlloc( ) 窗口函数失败。
32015	剪裁区域边界错误。
32016	单元尺寸太小（至少 1 × 1 个象素)。
32017	Rows 属性值必须大于 0。
32018	Cols 属性值必须大于 0。
32019	StretchX 属性值不能是负数。
32020	StretchY 属性值不能是负数。
32021	没有指定图片。


请参阅

Picture Clip 控制