VFP9的10件酷事(1) 文本框自动完成
VFP9的10件酷事
David Stevenson著
RMH译
这是 FOXTALK杂志6月刊 提供的一篇免费文章,我们把她翻译出来,更多的译文资料在: http://foxer.xicp.net
象VFP8一样,VFP9的许多改进建议也是来自全球的各个VFP社区。(大大小小的建议,很难知道是谁提出了这些好建议)。不过尽管改进很多,我们也必须承认,VFP的很多方面还没被照顾到。
总的看来,VFP9带给我们的是:修补了很多BUG;弥补了一些功能的缺陷或实现了过去曾提出过的一些设想;某些功能被重写发生了翻天覆地的变化……当然,你所渴望的某些功能或许在或许不在这个版本里面,但可以确定你能从那个“What's New”文档中发现一些有价值的东西。记住,尝试测试版总要带点探险精神的。 我写这篇文章的时候,是在VFP测试版发布前的几个星期,VFP文档有些地方跟不上VFP软件的更新,这就意味着你拿到的测试版拷贝会和文档有些出入,所以很自然,尝试测试版软件总要带点探险精神的,呵呵。
正式的官方文档还在继续完善,不过其中“What's New”的一部分现在已经展现在我面前了。花了4页纸用以赤裸裸地展示了 数据增强 部分,IDE增强 用了2页,语言增强 用了10页 等等…… 实际上提供给官方内部测试者的 版本声明 和 开发文档 有1英寸多厚,就这还不包括新的报表设计部分!报表设计器焕然一新。与报表编辑器的大幅度改动相比,其它所有的改进和新功能都变得黯然失色。尽管保持了向后兼容,VFP 开发组还是从底层完全重写了 VFP 的报表编辑器,给了它一个新的引擎,该引擎能够让你从外部用自己的代码来与它提供的 GDI+ 表现界面进行交互,并为你自己的代码提供了钩子(hook)。
按照VFP惯例,几个以下划线开头的系统变量将粉墨登场(_ReportBuilder, _ReportOutput, 和 _ReportPreview),这些都是外挂的报表模块,你可以用自己的模块来代替他们。你还可以使用一个名叫“ReportListener”的基类,可以直接使用它,可以在预览/打印行为中使用它,或者把它提供给其它的用户反馈表单。你甚至可以把几个“ReportListener”连在一起,控制多个输出和反馈。
FOXTALK杂志将会在接下来的几个月讲述VFP9报表系统改良的优越性,期间你会碰到一些新概念,比如ReportListener,一开始完全掌握它们会有点难度,你得呆在这儿连续阅读,最好跟着试验下。一旦这些概念注入你的大脑,我想你会吃惊、感叹的。让我们来看看这十件酷事 老实说要在这个文档中挑选10个新特征来举例真不容易,因为这里有上百个新特性供选,我眼花花,比如,也许我该选这个?:如何在BROWSE窗口显示MEMO提示(移动鼠标到MEMO字段上面显示4095个字符);如何禁止打开表对话框并返回一个错误(SET TABLEPROMPT OFF);如何用 SET REFRESH 指定更快的刷新率;如何在 命令按钮/选项按钮/检查框 中隐藏CAPTION后还能使用热键/图像(通过设置一个新的属性PicturePosition=14-No Text)。嗯……或者我应该介绍这个?:为CURSOR对象提供的新属性 OrderDirection ,在数据环境中将它设为 升序 或 降序;工具栏纵横向改变时动态调整分隔对象;用 Listbox.AutoHideScrollBar 属性来隐藏滚动条。
我苦思冥想,因为我要从这个万众瞩目的VFP9.0中选出10个典型的特性来阐述。 注:因为这篇文章基于VFP9的一个早期测试版,所以有的特征可能和现在有点出入。
1、 文本框自动完成
你是否曾梦想过给文本框添加一种看起来更流行的“输入常用的单词或短语就出现一个下拉列表”的外观?通过使用 VFP 智能感知的核心引擎,VFP 开发组给了我们这样一种很酷的新功能,并且不但令人惊讶的易于使用,而且完全可以扩充。 让我们来尝试一下,将一个文本框拖放到表单上(或者打开一个有文本框的任何一个表单),将文本框新的 AutoComplete 属性设置为一个非零值,这样就搞定了!运行几次这个表单,在文本框里输入一些内容,然后就看魔术表演吧!你也可以用下面这样的代码来让表格中的文本框支持 AutoComplete: THISFORM.Grid1.Column1.Text1.AutoComplete = 1 AutoComplete 属性控制着自动完成的行为表现,可用的值如下:
※ 0 —— 不使用自动完成;
※ 1 —— 按字母顺序;
※ 2 —— 最常用的;
※ 3 —— 最近使用的;
※ 4 —— 用户自定义的加权排序(Weighted Order);
这些选项中的最后一个需要特别注意一下。当 AutoComplete 的值在 1-3 之间的时候,自动完成的功能是系统自维护的,而用户自定义加权排序的值4则让你可以通过给 AutoComp.DBF 表中的 Weight 字段赋以一个数值型值来指定各个数据项的显示顺序(最大的 Weight值显示在下拉列表的顶部)。 默认的 AutoComp.DBF 表位于 HOME(7) 目录下(译者注:使用参数7,该函数返回用户应用程序的数据目录。),但你可以通过在全局的层次上设置 _SCREEN.AutoCompTable、或者在单个文本框的层次上设置 Text1.AutoCompTable来覆盖默认的设置。不管你在哪个属性中指定一个表,如果这个表不存在,则系统会自动为你新建一个。你可以同时拥有多个AutoComp表,而每个表也可以服务于一个或多个文本框,VFP会管理这些在一个隐藏的数据工作期内的表的打开和关闭。 在 AutoComp 表中,除非你给文本框设置了 AutoCompSource 属性,否则这个文本框的 Name 将作为决定显示哪些数据项的查询关键字,反之,则使用 AutoCompSource 属性指定的值。要想让多个文本框共享自动完成提供的值的话,只要简单的把这些文本框的 AutoCompSouce 属性设置为相同的值就可以里,例如设置为 NameAutoComp或者Cities。 通过在运行时将 AutoCompSource 动态的设置为一个代表某个用户的特定代码的字符串、或者在属性表中设置如下的代码,你甚至可以为你所在组织中的每个人启用独特的自动完成列表: = "Custs_" + LoginName 不过,如果采用了这种办法,你需要注意的是在 AutoComp 表中作为搜索关键字的 Source 字段只有 20个字符大小。当然,你可以自己建一个有着更大长度的 Source 字段的表作为 AutoComp 表,可是如果在为一个特定的文本框初次使用AutoComplete功能的时候你让 VFP 自动为你建立这个表,那么这个表中的 Source 字段的长度默认就是 20个字符。 要在测试的时候看看 AutoComp 表中发生了什么事情,你可以从 VFP 的另一个数据工作期内共享打开这个表来浏览它的内容,或者也可以在命令窗口中执行如下代码:
USE HOME(7) + "autocomp.dbf" SHARED IN 0
SELECT autocomp
BROWSE