📄 数据库技巧4.txt
字号:
序号 内 容
1 为VFP设计一个进度条类
2 如何有效率的设置控件属性?
3 如何显示垂直的标签?
4 使用报表打印时,如何控制打印页数及范围?
5 用VFP建立适用不同分辨率的菜单
6 在VFP应用程序中如何取得现有的磁盘代号?
7 创建不带有标题栏的顶层表单实例
8 Visual FoxPro 3.0中背景音乐的实现
9 在VFP中如何设计EXCEL容器对象
10 如何在VFP中判断目前进入网络的使用者是谁?
11 Visual FoxPro编程技巧
12 VFP5.0报表生成器使用技巧
13 使用VFP的_SCREEN对象
14 VFP3.0的多媒体编程实例二则
15 VFP中实现背景音乐的几种方法
1、为VFP设计一个进度条类
作者:江永忠
在应用程序中使用一个进度条可以直观形象地显示当前处理完成的百分率,此功能的传统实现方法
是在程序源代码中直接处理,这显然是一项繁重而缺乏灵活性的工作。为此,笔者在目前较为流行的VFP3.0
下编写了一个具有数字和图形双重显示功能的进度条类,对应用程序而言,其调用与标准控件完全一致,并
且全面支持可视化编程。
1.建立类
进度条类应该包含两个对象:一个显示处理过程的图形和一个显示处理完成百分率值的标签。首先,
建立一个基于包容器类的自定义类,命名为ProgressBar,并在其内部建立一个图形BarShape,高度
和ProgressBar相同,宽度预置为0,为便于百分率正文的显示,将图形设置为浅色(如浅蓝色)。
加入标签对象TxtLabel,位置居中,宽度足够容下最大正文“100%”,颜色为深色。
鉴于在实际应用中要求本控件的尺寸是交互可变的,因此,对ProgressBar控件的Init事件的编码为:
THIS.BarShape.Height = THIS.Height
THIS.BarShape.Width = 0
THIS.TxtLabel.Alignment = 2
THIS.TxtLabel.Left = (THIS.Width-THIS.TxtLabel.Width)/2
THIS.TxtLabel.Top = (THIS.Height-THIS.TxtLabel.Height)/2
THIS.TxtLabel.Caption = "0%"
THIS.Percent=0
自定义属性Percent用于跟踪记录当前百分率的变化;自定义的方法Show用于同时以图形和文本的方式
来显示这种变化。
方法Show的代码:
PARAMETERS lpPercent
*--合法性检验
IF lpPercent < 0
lpPercent = 0
ENDIF
IF lpPercent > 100
lpPercent = 100 ENDIF
*-刷新显示
THIS.Percent = lpPercent
THIS.BarShape.Width = THIS.Width*(lpPercent/100)
THIS.TxtLabel.Caption = ALLT(STR(lpPercent))+"%"
THIS.Refresh
此时,进度条类设计完毕,将其存入自定义的类库中,假设类库名为:MyLib.VCX。
2.应用示例
一旦在VFP中注册了自定义类库MyLib.VCX,那么就能够象对待标准控制一样将其放入应用程序窗体中,
通常可以由定时器或循环来激活该控制。
例1:由定时器控制进度时的主要代码:
... ...
THISFORM.Timer1.Interval = 1
THISFORM.Timer1.Enabled = .T.
THISFORM.Timer1.Reset
THISFORM.ProgressBar1.Show(0)
IF THISFORM.ProgressBar1.Percent
THISFORM.ProgressBar1.Show(THISFORM.ProgressBar1.Percent+1)
ELSE
THISFORM.Timer1.InterVal = 0
THISFORM.Timer1.Enabled = .F.
... ...
ENDIF
... ...
例2:由循环语句控制进度时的主要代码
... ...
THISFORM.ProgressBar1.Show(0)
FOR m.i=1 TO n
THISFORM.ProgressBar1.Show(m.i/n*100)
... ...
处理循环体
... ...
ENDFOR
返回页首
2、如何有效率的设置控件属性?
对于设置某一控件的多项属性,利用WITH...ENDWITH可提高程序的可读性以执行效率,从而避免使用重复的thisform.object.property。
例如:我们设置某一FORM中的PAGE1中GRID的COLUMN3的TEXT1的多项属性:
WITH THISFORM.PAGEFRAME.PAGE1.GRID.COLUMN3.TEXT1
This.enabled=.t.
This.resizable=.f.
This.forecolor=rgb(0,0,0)
This.backcolor=rgb(255,255,255)
Endif
如此一来将使得程序的效率提高,因为Visual FoxPro 参考某控件并一次变更所有属性,而非一次参考一控件变更一属性。
返回页首
3、如何显示垂直的标签?
由于VFP中的标签控件并不具备垂直显示的选项,那么我们如何能使标签垂直显示呢?要实现这个功能,就要使用CHR(13)这个换行符,以下为一例:
设要显示一垂直字串“管理系统”。
Label.caption="管”+CHR(13)+"理”+CHR(13)+"系”+CHR(13)+"统”
若要经常使用这功能,可按如下步骤:
于CAPTION中录入要显示的字串,并于INIT方法中加入
LOCAL Nlen,Cstring
Nlen=lenc(this.caption)
Cstring=""
For I=1 to nlen*2
Cstring=cstring+substr(this.caption,I,2)+chr(13)
I=I+1
Endfor
This.caption=cstring
返回页首
4、使用报表打印时,如何控制打印页数及范围?
VFP5.0中有这样的命令:REPORT FORM XXX RANGE nStartPage,nEndPage,nStartPage是打印的第一页,nEndPage是打印的最后一页,看到这里,大家可能明白,要设置打印范围,只需更改nStartPage及nEndPage的值即可,现举例如下:
REPORT FROM dlhome range 2,5 to printer &&打印第2~5页
REPORT FROM dlhome range 2,2 to printer &&打印第2页
返回页首
5、用VFP建立适用不同分辨率的菜单
程序开发者开发的菜单一般仅适用于某些特定的分辨率,如果使用者的系统分辨率不同,将造成画面上菜单过长或过短,为解决此问题一般都开发几个分别适应不同分辨率下的菜单,但如此一来将造成一些不必要的麻烦,下面的程序将解决此问题。
1.首先在640*480分辨率下建立一新菜单
2.将下列代码放在复合式物件的INIT METHOD中
LOCAL OLDHEIGHT,OLDWIRTH,CHANGEHEIGHT,CHANGEWIDTH
OLDHEIGHT=640
OLDWIDTH=480
CHANGEHEIGHT=0 &&新分辨率与640*480分辨率之HEIGHT差
CHANGEWIDTH=0 &&新分辨率与640*480分辨率之WIDTH差
*SYSMETRIC(1) &&得到目前分辨率HEIGHT
*SYSMETRIC(2) &&得到目前分辨率WIDTH
IF SYSTEMETRIC(1)!=OLDHEIGHT
THISFORM.LOCKSCREEN=.T.
CHANGEHEIGHT=SYSMETRIC(1)/OLDHEIGHT
CHANGEWIDTH=SYSMETRIC(2)/OLDWIDTH
&&更改菜单外框
IF THIS.BASECLASS="FORM"
THIS.HEIGHT=THIS.HEIGHT*CHANGEHEIGHT
THIS.WIDTH =THIS.WIDTH*CHANGEWIDTH
THIS.TOP =THIS.TOP*CHANGEHEIGHT
THIS.LEFT =THIS.LEFT*CHANGEWIDTH
ENDIF
&&逐一更改CONTAINER内的控制项
FOR I=1 TO THIS.CONTROLCOUNT
WITH THIS.CONTROLS(I)
.HEIGHT=.HEIGHT*CHANGEHEIGHT
.WIDTH =.WIDTH*CHANGEWIDTH
.TOP =.TOP*CHANGEHEIGHT
.LEFT =.LEFT*CHANGEWIDTH
ENDWITH
ENDFOR
THISFORM.LOCKSCREEN=.F.
ENDIF
THISFORM.REFRESH
注:如果您预先设定最低分辨率为800*600
首先在800*600分辨率下建立一新菜单
把OLDHEIGHT=640改为OLDHEIGHT=800
把OLDWIDTH=480改为OLDWIDTH=600
返回页首
6、在VFP应用程序中如何取得现有的磁盘代号?
要取得可用的磁盘代号,需要调用WIN32API来得到,利用WIN32API中的GetLogicalDrives()函数,GetLogicalDrives()函数会传回一个值,其值中的每位若为1,则表示该磁盘已用,若为0则表示磁盘为可用,具体代码如下:
Declare integer GetLogicalDrives in kernel32.dll as is_iriver_ready
Nreslut=is_driver_ready()
Cused_driver="已被用的磁盘代号有:"
Cavail_driver="可用的磁盘代号有:"
Nmask=1
For I=1 to 26
If bitand(nreslut,nmask)!=0
Cused_driver=cused_driver+chr(64+I)+","
Else
Cavail_driver=cvalil_driver+chr(64+I)+","
Endif
Nmask=bitlshift(nmask,1)
Next
Wait cused_driver+chr(13)+cavail_driver wind
返回页首
7、创建不带有标题栏的顶层表单实例
若要创建一个不带标题栏的表单,如果把它当作表单类的实例来创建,可能会有一定困难。通常,通过如下设置可创建一个不带标题的顶层表单:
? 将 ShowWindow 属性设置为 2 (作为顶层表单)
? 将 BorderStyle 属性设置为 2 (固定对话框)
? 将 Caption 属性设置为空字符串。
? 将 MaxButton、MinButton、ControlBox 和 Movable 属性设置为“假”(.F.)。
例如,用以下代码产生一个不带有标题栏的表单:
PUBLIC myForm
myForm = CREATEOBJECT("blankForm")
myForm.Show
RETURN
DEFINE CLASS blankForm AS form
ShowWindow = 2
BorderStyle = 2
Caption = ""
ControlBox = .F.
MaxButton = .F.
MinButton = .F.
Movable = .F.
ENDDEFINE
然而,表单显示时带有一个空标题栏。为了解决此问题,并生成不带标题栏的表单,您可以先将 Caption 属性设置为一个字符串值,然后在表单的 Init 方法程序中将它重置为空字符串。以下代码对前例做了修改,可以正确显示表单:
PUBLIC myForm
myForm = CREATEOBJECT("blankForm")
myForm.Show
RETURN
DEFINE CLASS blankForm AS form
ShowWindow = 2
BorderStyle = 2
Caption = "Testing form"
ControlBox = .F.
MaxButton = .F.
MinButton = .F.
Movable = .F.
PROCEDURE Init
THIS.Caption = ""
ENDPROC
ENDDEFINE
返回页首
8、Visual FoxPro 3.0中背景音乐的实现
在使用Visual FoxPro 3.0编制应用程序时,我们可以利用OLE嵌套的方法很容易的为一个应用程序加入背
景音乐。
进入Visual FoxPro 3.0系统环境,在命令行窗口中键入CREATE FORM或在‘文件’菜单中选择‘新建’、
'表单’,即可建立一个新的表单。表单建立后可对表单进行一些设置,如表单屏幕大小、表单底图、
表单上的按钮、表单上要显示的文字等,做出一个漂亮的屏幕界面。点击‘表单控制’上的‘OLE容器’
,并将其拖至FORM中任意位置。在‘插入对象’窗口中选择‘媒体剪辑’,选中‘以图标显示’栏(必
须选中此栏,否则无法将其隐藏起来),按‘确认’键退出。
在‘媒体播放机’窗口中,选择‘文件’、‘打开’,从文件列表中选择想要作为背景音乐的声音文件。
作为背景音乐,必须是程序启动时开始播放,直到程序结束。由于音乐文件一般不是很长,所以要求循环
播放,此时可选择‘编辑’菜单中的‘选项’,在选项窗口中选中‘重复播放’和去掉‘重放的控制条’
前的选中标记,确认后退出。
回到Visual FoxPro 3.0系统环境,按下鼠标右键,在弹出菜单中点击‘属性’栏调出属性窗口。选择
'Olecontrol1'对象,将它的‘Visible'属性设为.F.,‘Autosize'属性设为.F.。再按下鼠标右键,
在弹出菜单中点击‘代码’栏进入过程书写窗口,选择‘Form1'对象的‘Activate'过程,在过程栏中
加入:
Thisform.Olecontrol1.Doverb(0)
点击Form1窗体,按下鼠标右键,在弹出菜单中点击‘运行’,即可运行此程序。
返回页首
9、在VFP中如何设计EXCEL容器对象
首先要在工作平台中安装EXCEL应用系统,进入VFP,利用FORM DESIGNE新建一表单FORM,选择表单设计器中的OLE容器控件,此时激活Insert Object对话框
此时选择EXCEL工作表即可
ole container对象属性如下
属性名称
设定值
说明
Autosize
.T.
设定OLE对象大小可随其中插入的对象自动调整尺寸
AutoVerbMenu
.T.
设定激活OLE对象鼠标支持的快捷菜单
OLETypeAllowed
-1 Empty
-1为预设值,对应插入对象的链接类型,如链接、嵌入或两者均设定,该属性为只读属性
Autoactive
0-Manual
将OLE执行状态高定为程序执行,即手工方式。
同理,可设计一个播放影片的OLE容器对象,请于实践中验证。
10、如何在VFP中判断目前进入网络的使用者是谁?
运用VFP所提供的SYS(0)与ID()函数可完成此项工作,SYS(0)与ID()函数的作用是完全相同的,它们都是于网络环境中传回所属工作站的电脑名称与目前进入网络的使用者名称。现举例如下:
设有一名为SLGD01的WIN95工作站以使用者名称A01进入网络,接着运行VFP,则在VFP中执行SYS(0)函数时将传回:
SLGD01 #A01
同样,ID()可得相同值。
返回页首
11、Visual FoxPro编程技巧(一)
一、定制桌面
是否感觉到VFP提供的桌面有些不合你的口味?如果不喜欢那些最大最小化和关闭按钮,试试在你的应用程序初始化时加入如下代码段:
with_ SCREEN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -