| 网络开发 | 调用API函数 | 报表打印 | 常用技术 | 经验汇总 | 控件使用 | 软件工程 | 数据处理 |
VFP 6.0的十个实用技巧 一.选择网络打印机 二.恢复丢失了的FPT文件 文件的自由表名称(不带扩展名):' to namef namef=trim(namef)+'.bbb' crea dbf &namef (aa m) use dele file &namef 2.用VFP低级文件函数创建一个空的FPT文件,原自由表即可打开。程序清单如下: 文件的自由表名称(不带扩展名):' to namef namef=trim(namef)+'.FPT' hand=fcreate(namef) abc=repl(chr(0),3)+chr(8)+ repl(chr(0),3)+'@'+repl(chr(0),504) =fwrite(hand,abc) =fclose(hand) return
上述方法只是为丢失了FPT文件的自由表建立了一个新的FPT文件,原FPT文件中的内容已经丢失,无法恢复。在实际操作中若遇到这种情况,最好是恢复原来的FPT文件,若原FPT文件无法恢复时再采用上述方法。 三.脱离VFP运行程序 VFP有一个十分薄弱的环节就是数据库的保密性差。由于.DBF文件都是敞开式的,甚至用DOS中最简单的TYPE命令都可以浏览,因此,笔者从以下两方面对数据进行加密: 1.在向自由表中增加数据时,就进行加密,即更新自由表时就对数据进行加密,在读取数据时再解密。 set talk off close all clea @10,10 say "请输入要加密的 自由表名(含扩展名):" get file1 defa ' ' read handle=fopen("&file1",2) if handle< 0 @14,10 say "不能打开文件!" =inkey(0) retu endif j=0 do while .not.feof(handle) bb=fread(handle,1) cc=chr(mod(asc(bb)+128,256)) =fseek(handle,j) =fwrite(handle,cc) ?asc(bb),asc(cc) j=j+1 enddo =fclose(handle) close all retu 五.简易设置TextBox对象的输入长度 在以前的Xbase语法中,我们可以通过Picture参数定义某变量或文本栏的输入长度格式,而在VFP中的TextBox对象中则支持了Format和InputMask属性来定义输入的格式。我们可以使用比较原始的方法来进行设定,比如当要求输入有20个栏位的文本框对象时,我们可以在此对象的InputMask属性中定义为InputMask="XXXXXXXXXXXXXXXXXXXX"。 但是这样的设定方法非常麻烦,尤其是当面对更长的字符串输入时更是不方便。其实我们完全可以用另外一种方法来把这样的需求设计过程变得很简单,下面就具体介绍一下这种简易的快速设定输入栏位的方法。 利用Replicate()函数设定输入长度这里我们同样利用了对象的InputMask属性来定义输入格式和输入长度,但是当对象的输入比较长时,则可以借助算术表达式的方式来对其进行设定。通过属性窗口中的InputMask属性建立表达式对话框,我们可以利用Replicate()函数设定重复的"X"的个数即可(本例为20)。完成后回到属性设置窗口,我们可以看到在InputMask属性栏中出现了"=Replicate(20)"位值的表达式,这样,我们就轻松地完成了长字符输入的长度控制。由此我们也可以体会到善于使用表达式给我们带来的方便之处。 六.中文文本框的设计方法 在程序开发过程中,我们经常要设计一些文本框,而且这些文本框要求只能输入中文。在这种情况下,通常需手工启动某一种中文输入法。如果软件能够自动启动缺省的中文输入法,那么将会给编程人员带来很大的方便。下面的类便能实现这一功能,具体的设计步骤如下: 1.创建一个新类,其基类是"TextBox",类名为"中文TextBox",存储于"myclass"类库中。 我们知道,VFP只支持静止的图片,无法直接播放GIF动画。但网上许多有趣而华丽的GIF动画的确令人心动,如何将这些动画插入到你的VFP程序中,让你的程序更吸引人呢? 其实很简单,将GIF动画分解成各单独的静止的GIF或BMP图片,然后在VFP使用计时器让这些静止的图片轮流出现,就产生动画效果了。 在FORM的LOAD过程中写代码: I=0 N=5(静止图片的总共数目) 在TIMER1的TIMER过程中写代码: Local j i = mod (i+1,n) j = alltrim( str(i) ) thisform.image1.picture="a"-j-".bmp" 运行表单,我们就可以看到熟悉的GIF动画了。 九.粘贴VFP顶层表单 当你将表单设置为顶层表单并独立运行于Windows下,就会发现表单中复制粘贴功能失效,给实际工作造成极大的不便,从而使编制的软件达不到专业水准。通过认真分析与实践,笔者认为,造成这一问题的原因是微软设计VFP时,只考虑了位于系统选单下的表单的复制和粘贴情况,即位于系统选单下的表单可使用复制及粘贴热键,而处于Windows下的表单完全脱离了系统选单的控制,因此复制及粘贴热键失效。 解决的办法是可在表单的控件(本文举例为文本框)中,为KeyPress LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode=3 && CTRL+C 复制 -cliptext=this.seltext endif if nkeycode=22 && CTRL+V 粘贴 do case case this.selstart=0 this.value=-cliptext+this.value case this.selstart〉=1 and this.selstart〈=len(this.value) this.value=subs(this.value,1,this.selstart)+ -cliptext+subs(this.value,this.selstart+1) endcase endif thisform.grid1.column1.setfocus() sele recetem if not eof() skip endif thisform.refresh 十.为VFP添加循环微调控件类 在VFP编程中,微调控件是最常用的控件之一。按照微调控件提供的基本功能,通过单击向上或向下箭头,而达到微调控件的最大或最小值时,如继续单击向上或向下箭头,将保持最大或最小值不变。笔者通过对Spinner控件属性和事件的分析,用编程的方法实现了循环微调控件功能。 循环微调控件(CycleSpinner)所实现的功能是:当单击向上箭头而达到最大值时,再单击向上箭头,能自动跳到最小值;当单击向下箭头而达到最小值时,能自动跳到最大值;其余功能均继承Spinner基类的功能。具体实现方法如下:利用表单控件,在表单中设计一个微调按钮,并设置如下属性: SpinnerHighValue=Max &&Max应小于Spinner基类所 &&提供的最大默认值 SpinnerLowValue=Min &&Min应大于Spinner基类所 &&提供的最小默认值 Value=1 Name='CycleSpinner' 在Init事件中写入如下代码: This.SpinnerHighValue=This. SpinnerHighValue+This.Increment This.SpinnerLowValue=This. SpinnerLowValue-This.Increment 在InteractiveChange事件中写入如下代码: If This.Value=This.SpinnerHighValue This.Value=Int(This. SpinnerLowValue+This.Increment) Endif If This.Value=This.SpinnerLowhValue This.Value=Int(This. SpinnerHighValue-This.Increment) Endif Thisform.Refresh |
||||