VFP 6.0的十个实用技巧

朱运喜(河北省.任丘市)

---- 一.选择网络打印机

---- 笔者单位里的局域网上安装有多台网络打印机,在使用VFP 6.0编制的程序进行打印操作时,是否可以选择其中的某一台空闲的网络打印机进行打印,而不一定非要从默认打印机输出,从而提高工作效率呢?经笔者研究,在执行命令:Report From … To Printer 之前,先执行下列程序代码:Set Printer To Name Getprinter(),就可以调用操作系统的"打印设定"对话框,用户利用该窗口即可达到灵活选择空闲打印机进行打印输出的功能。(注:可供选择的打印机名是用户计算机上已安装好的打印机名。)

---- 二.恢复丢失了的FPT文件

---- 由于误操作,将自由表的备注文件删除,致使自由表无法打开。遇到这种情况我们可采用下述方法解决:

---- 1.创建一个新的自由表,且该自由表只含一个字段,其类型为备注型。关闭该自由表,将其扩展名为FPT的备注文件复制给误删除的自由表的备注文件,或将该备注文件改名为误删除的自由表的备注文件即可。运行下面的程序同样也可以恢复丢失了的FPT 文件:

accept '请输入丢失了.FPT
文件的自由表名称(不带扩展名):' to namef
namef=trim(namef)+'.bbb'
crea dbf &namef (aa m)
use
dele file &namef

---- 2.用VFP低级文件函数创建一个空的FPT文件,原自由表即可打开。程序清单如下:
accept '请输入丢失了.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 6.0创建的应用程序,被编译成可执行程序后,若要使其脱离VFP环境独立运行,除了我们所知道的在应用程序目录中需包含一个名为"CONFIG.FPW"的配置文件外,经笔者试验发现还必须包含"VFP6R.DLL"、"VFP6RCHS.DLL"、"VFP6RENU.DLL"这三个动态链接库文件。这三个文件在"Windows/System"目录下,用户可直接将其复制到自己的应用程序目录中。最后再经过编译形成可执行程序,运行安装向导创建发布磁盘,我们开发的小应用程序就可以堂堂正正地在Win 98下安装运行了。

---- 四.低级文件函数加密数据库

---- VFP有一个十分薄弱的环节就是数据库的保密性差。由于.DBF文件都是敞开式的,甚至用DOS中最简单的TYPE命令都可以浏览,因此,笔者从以下两方面对数据进行加密:

---- 1.在向自由表中增加数据时,就进行加密,即更新自由表时就对数据进行加密,在读取数据时再解密。

---- 2.用VFP提供的低级文件函数进行加密,加密后的文件无法打开、浏览,使用时,再执行该加密程序即可将加密的自由表还原。

**加密数据库程序(同时也是解密程序)**
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"类库中。

---- 2.进入类设计器后,设置"中文TextBox"的各项属性,如字体、颜色等。

---- 3.设计GotFocus事件,代码为: =IMESTATUS(1) 表示当光标移到此框后,自动启动中文输入法。

---- 4.设计LostFocus事件,代码为: =IMESTATUS(0) 表示当光标移开此框后,自动关闭中文输入法。设计好后,保存到文件即可。

---- 七.立体框类的设计方法

---- 在VFP的标准类里提供了一个形状控制类(Shape),可以简单地将S hape的"SpecialEf fect"属性设置为"0-3D",将"BackStyle"属性设为 "0-透明",来设计三维立体框。

---- 然而这样的三维立体框太单调,缺少变化。通过以下的设计方法, 我们可以作出类似于VB中的Three_D Panel那样的效果。具体设计步骤如下:

---- 1.新建一个类,基类是"Container",类名为"Three_Panel",存储于"myclass"类库中。

---- 2.进入类设计器后,设置"Three_ panel"的各项属性,如表1所示。属性设计完毕后,存入文件,就可以得到凸起效果的边框类。

---- 3.通过调整"SpecialEffect"的值为"1-凹下",可以设计凹下效果的边框类(three_p anel_ao)。 调整其余参数可以得到不同效果的边框。

---- 八.在程序中播放动画

---- 我们知道,VFP只支持静止的图片,无法直接播放GIF动画。但网上许多有趣而华丽的GIF动画的确令人心动,如何将这些动画插入到你的VFP程序中,让你的程序更吸引人呢?

---- 其实很简单,将GIF动画分解成各单独的静止的GIF或BMP图片,然后在VFP使用计时器让这些静止的图片轮流出现,就产生动画效果了。

---- 将GIF动画分解为静止图片的软件有很多,在网上很容易找到,如Animagic GIF 等。分解出来的图片我们分别以a0.bmp、a1.bmp……这样的形式保存。在表单中添加计时器TIMER1,TIMER1的Interval属性设为100,Enabled属性设为.T.,再添加Image1控件,其Backstyle属性设为0(透明),Stretch也设为0(裁剪)。

---- 在FORM的LOAD过程中写代码:

Public I , N
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 Event编写如下事件处理程序,该事件处理程序首先将选择内容复制到Windows剪贴板上,然后再将剪贴板上的内容添加到控件中。

KeyPress Event
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
---- 再将其作为类保存起来,添加到你的类库中。
---- 若你在编程中,需用此功能,就可直接用此循环微调控件类了。
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426171105.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程目标</span></strong> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》从零开始,循序渐进地介绍了目前流行的网络爬虫框架Scrapy。即使你没有任何编程基础,学习起来也不会有压力,因为我们有针对性地介绍了Python编程技术。另外,《从零开始学Scrapy网络爬虫》在讲解过程中以案例为导向,通过对案例的不断迭代、优化,让读者加深对知识的理解,并通过14个项目案例,提高学习者解决实际问题的能力。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">适合对象</span></strong> </p> <p style="font-size:16px;color:#666666;"> 爬虫初学者、爬虫爱好者、高校相关专业的学生、数据爬虫工程师。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <span style="font-size:20px;"><strong>课程介绍</strong></span> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》共13章。其中,第1~4章为基础篇,介绍了Python基础、网络爬虫基础、Scrapy框架及基本的爬虫功能。第5~10章为进阶篇,介绍了如何将爬虫数据存储于MySQL、MongoDB和Redis数据库中;如何实现异步AJAX数据的爬取;如何使用Selenium和Splash实现动态网站的爬取;如何实现模拟登录功能;如何突破反爬虫技术,以及如何实现文件和图片的下载。第11~13章为高级篇,介绍了使用Scrapy-Redis实现分布式爬虫;使用Scrapyd和Docker部署分布式爬虫;使用Gerapy管理分布式爬虫,并实现了一个抢票软件的综合项目。 </p> <p style="font-size:16px;color:#666666;"> <span style="color:#FF0000;">      由于目标网站可能会对页面进行改版或者升级反爬虫措施,如果发现视频中的方法无法成功爬取数据,敬请按照页面实际情况修改XPath的路径表达式。视频教程主要提供理论、方法支撑。我们也会在第一时间更新源代码,谢谢!</span> </p> <p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426306665.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程特色</span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/202001311426415123.png" alt="" /> </p> <div> <br /> </div>
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其中的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
<p style="color:#333333;"> <strong> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#337FE5;">[为什么要学习Spring Cloud微服务]</span> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#4D555D;"></span> </strong> </p> <p class="ql-long-24357476" style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="font-family:"background-color:#FFFFFF;">SpringCloud作为主流微服务框架,<span style="color:#4D555D;">已成为各互联网公司的首选框架,国内外企业占有率持续攀升,</span>是Java工程师的必备技能。</span><span style="font-family:"background-color:#FFFFFF;">就连大名鼎鼎的阿里巴巴</span><span style="font-family:"background-color:#FFFFFF;">dubbo</span><span style="font-family:"background-color:#FFFFFF;">也正式更名为</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud Alibaba</span><span style="font-family:"background-color:#FFFFFF;">,成为了</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud </span><span style="font-family:"background-color:#FFFFFF;">微服务中的一个子模块。</span><span style="font-family:"background-color:#FFFFFF;"></span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud是企业架构转型、个人能力提升、架构师进阶的不二选择。</span> </strong> </p> <p style="color:#333333;"> <strong><strong><br /> </strong> </strong> </p> <strong><span style="font-family:"color:#337FE5;font-size:14px;background-color:#FFFFFF;">【推荐你学习这门课的理由】</span><br /> </strong> <p> <br /> </p> <p> <span>1、</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">本课程总计</span><span style="background-color:#FFFFFF;">29</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">课时,<span style="color:#333333;">从微服务是什么、能够做什么开始讲起,绝对的零基础入门</span></span><span></span> </p> <p> <span style="background-color:#FFFFFF;">2、<span style="color:#333333;">课程附带全部26个项目源码,230页高清PDF正版课件</span><span style="color:#333333;"></span></span> </p> <p> <span style="background-color:#FFFFFF;"><b><br /> </b></span> </p> <p> <span style="background-color:#FFFFFF;"><b><span style="color:#337FE5;">【课程知识梳理】</span></b></span> </p> <p> <span style="background-color:#FFFFFF;"><b>1、</b></span><span style="color:#333333;">先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。</span> </p> <p> <span style="color:#333333;">2、</span><span style="color:#333333;">从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。</span> </p> <p style="color:#333333;"> 3、讲解Spring Boot 与Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。 </p> <p style="color:#333333;"> 4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。 </p> <p style="color:#333333;"> 5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。 </p> <p style="color:#333333;"> 6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码搞定服务的远程调用。 </p> <p style="color:#333333;"> 7、最后为大家介绍了整个微服务体系应该包含什么,学习路线是什么,应该学习什么。 </p> <p style="color:#333333;"> <strong><br /> </strong> </p> <p style="color:#333333;"> <strong><span style="color:#337FE5;">【</span><strong><span style="color:#337FE5;">学习方法</span></strong><span style="color:#337FE5;"></span><span style="color:#337FE5;">】</span></strong> </p> <p style="color:#333333;"> 每一节课程均有代码,最好的方式是静下心来,用一天的时间,或者两个半天时间来学习。 </p> <p style="color:#333333;"> 一边听我的讲解,一边使用我提供的项目代码进行观察和运行。 </p> <p style="color:#333333;"> 只要你能跟住我的节奏,你就可以搞定微服务。 </p> <br />
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

nm

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值