Database 版 (精华区)

发信人: sleep (allfn(ss,″″,10) &&停止播放), 信区: Database
标  题: VFP技巧3
发信站: 哈工大紫丁香 (2000年12月04日14:59:24 星期一), 站内信件

VFP中实现背景音乐的几种方法
    
首页 您现在的位置 编程技巧(四) 


FOXPRO应用技巧篇(四)   
序号 
 内    容 
 

 为VFP设计一个进度条类 

 如何有效率的设置控件属性? 

 如何显示垂直的标签? 

 使用报表打印时,如何控制打印页数及范围? 

 用VFP建立适用不同分辨率的菜单 

 在VFP应用程序中如何取得现有的磁盘代号? 

 创建不带有标题栏的顶层表单实例 

 Visual FoxPro 3.0中背景音乐的实现 

 在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
  BackColor=rgb(64,128,128)
  Caption=″通用管理信息系统″
  ControlBox=.F.
  MaxButton=.F.
  MinButton=.F.
  WindowState=2
  end with
  二、制作“空白”菜单
  通常的表单会因为标题条、控制盒等影响其实际使用面积。能否做出一个纯粹
的“空白”表单呢?答案是肯定的。如果你和我一样讨厌Form的标题条,请按如下
方式设置其属性:
  with Form1
  Caption=″″
  Closable=.F.
  ControlBox=.F.
  MaxButton=.F.
  MinButton=.F.
  Movable=.F.
  end with
  可以将这样的一个表单保存为一个“空白”表单类,以备不时之需。 (湖北 
李雄文)

本文出自:《电脑报》1998年6月29日第25期13版
 
 
12、VFP5.0报表生成器使用技巧
     VisualFoxPro5.0(VFP5.0)的报表生成器可以对单个数据库或多个数据库通过
关联方式来产生报表。其数据来源可以是内存变量,也可以是数据库中的记录。报
表的封面、表头、表体、表尾分别对应报表生成器的不同的带。一般在标题带制作
封面,在表头带制作各种表头,在详细带制作表体,在页脚带制作表尾。
一、用报表生成器创建报表
(1)打开要创建表的各个相关的数据库,设置索引,设置数据库的关联。
(2)将当前工作区选择为主库工作区。
(3)单击文件菜单,选择“新建”,在弹出的对话框中选择“报表”,然后,单击
右上边的“新文件”图标。选择系统菜单中的“报表”选项,在弹出的下拉菜单中
选择“快速报表”选项,在弹出的对话框中点击“字段”可以选择要打印的字段;
点击“标题”可以在表头带里打印或取消字段名;点击“添加别名”可以在每个字
段变量前加上当前工作区数据库的别名。确认后即可自动在报表各个带里摆放相应
的字段和变量。建议不要加别名,否则当多个数据库共用一张表时,会出现找不到
变量的错误。
用报表控制工具画出适当的表格线,用“格式”菜单中的“文本对齐方式”设置各
个域的对齐方式,画出报表头和报表尾,一张表就基本制作完了。
二、创建报表的技巧
1.对象组的选取
在画表的过程中,经常要移动各个带里对象的存放位置,或者把一个带里的对象拷
贝或移动到其它带里。把要移动的对象标记为一个对象组合,使对象移动或拷贝的
操作更加方便,标记对象组的方法有如下几种:(1)当要标记一个带里的所有对象
时,可以双击该带下端的分隔条,选取该带里的所有对象,然后选择“格式”菜单
中的“分组”选项,把所有选取的对象标记为一个对象组,方便移动或拷贝。
(2)当要标记相邻的多个对象时,用鼠标拖曳出一矩形框,把要选取的对象圈入矩
形框中,释放鼠标,则可同时选取多个对象。
(3)当要标记不相邻的多个对象时,按下Shift键的同时,用鼠标点击要选取的对象
,选中后再组合为一个对象组。
当同时移动多个对象时,如果不把这些对象标记为一个对象组,则用光标多次移动
对象位置时,系统会报告“内存不够”的错误信息。
2.对象的条件打印
创建报表时经常要控制在特定条件下打印特定的信息,这可以用对象的条件打印来
实现,我们以页号的打印为例来讨论对象的条件打樱通常页号的打印直接利用系统
变量_pageno来打印阿拉伯数字,现在我们页号变为中文一、二、三。利用文本输
入工具,在报表中创建文本对象“一”、“二”、“三”等,鼠标双击“一”,在
弹出的对话框中选择“printwhen”,在弹出的“打印条件设置”对话框中点击“
printonlywhen”选择框,在表达式中填入_pageno-1,确认后退出。如上操作,
对文本对象“二”设置其打印条件为_pageno-2;对文本对象“三”设置其打印条
件_pageno-3。设置完成各个文本对象的打印控件后,把它们移动到要打印页号的
位置,重叠放置。用预示功能查看,可看到页号已变成中文数字。
3.表格线对齐
通常表格线对齐是用鼠标拖曳线段的段点,往往不易做到一次就能对齐,经常需要
反复调整。实际上,当需要按像素调整线段的长度时,可以采用如下的方法:如是
水平线段,则用鼠标点击线段右端点,线段向右拉长一个像素,左段点位置不变。
点击左端点,线段向右缩短一个像素,右段点位置不变,用这种方法,便于精确对
齐。同样,对垂直线段,点击上端或下端,分别向下缩短或拉长一个像素。(河北
左巍)


本文出自:《电脑报》1998年10月12日第39期13版
 
13、使用VFP的_SCREEN对象
    在VisualFoxPro中充分利用_SCREEN对象,就能对主窗口进行各种操作,如可
以动态地改变主窗口的图标、标题、颜色等,也可以通过它引用其它的对象或属性

    _SCREEN对象(即指主窗口)是从表单类派生出来的,表单中的部分属性、事
件和方法在_SCREEN对象也存在,因而可以把主窗口当作表单来操作(但也有所不
同,如在_SCREEN中不能像表单那样对LOAD、ACTIVATE等事件添加代码)。
    下面举例说明如何利用_SCREEN对象:
   1更改图标和标题
    把VFP窗口的小狐狸图标和“MicrosoftVisualFoxPro”标题,改为你所喜欢的
图标和标题,只需执行代码     _SCREENICON=″你的图标文件名(.ICO)″
    _SCREENCAPTION=″你的标题名″
    2动态地改变主窗口的图标和标题
    即让主窗口的图标和标题随时间的变化而变化。这就需要在_SCREEN中加入一
个Timer类,Timer类是每经过一定的时间(在Interval属性中设定,单位为毫秒)循
环地执行其Timer事件中的代码。方法如下:先定义你的Timer类:点“文件/新建
/类/新建文件”,这时弹出一窗口,上面有这几项需要填写:“类名”项填新建类
名(如MyTimer),“派生于”项选Timer,“来源于”项不用填,“存储于”项填
新建类库名(如MyClass)。确定后出现类设计器(很像表单设计器),上有一小
闹钟(Timer控件)把其Interval属性设为1000(时间间隔,毫秒),在Init事件
中输入代码:
    PUBL NN
    NN=0&&NN为变化的标志变量
    在Timer事件(每隔一定时间执行)输入:
    _SCREENICON=IIF((-1)^NN,″所需加入的图题1″,″图标2″)
    _SCREENCAPION=IIF((-1)^NN,″所需加入的标题1″,″标题2″)
    NN=NN+1
    关闭并保存,类建立完毕。
    可视地把该类添到_SCREEN中:由于_SCREEN与表单有所区别,故不能用表单设
计器工具来完成拖放类定义,而是用“类浏览器”来完成,寻工具/类浏览器”后
,弹出一打开窗口,选择刚才建立的类库文件(MYCLASS),确定后,弹出类浏览
器窗口,选中MyTimer类,这时在类浏览器的左上角有一小闹钟,把它拖放到主窗
口中,你就会惊奇地发现你的主窗口不再是死气沉沉的了。不信?试试!
   3利用_SCREEN得到主窗口内包含的表单数量
   执行:?_SCREENFORMCOUNT即可
   4利用_SCREEN得到打开的表单名
   可执行:?_SCREENFORMS(1)NAME&&FORM(1)为数组
    以上是有关_SCREEN对象的简单阐述,想要你的窗口美化起来,具体的工作还
需要你自己去做。我的联系地址:hhongwei@163net。(河南 黄宏伟)

本文出自:《电脑报》1998年11月9日第43期13版
 
 
14、VFP3.0的多媒体编程实例二则

  一、彩色按钮的设计
  Visual FoxPro拥有强大的ActiveX控件类库,但由于控件类的封装比较严密,
因而也损失了一些灵活性,即标准控制对象的组件不能被单独修改。如果要设计一
些形状各异,丰富多彩的命令按钮,就要另辟蹊径。好在VFP提供了很强的扩展功
能,这些问题不难解决。以下给出了利用可视化编程技术设计的椭圆形可变色命令
按钮的步骤,供大家参考。
  1创建主表单Form1。
  2在Form1中创建两个叠加在一起的形状控件Shape1和Shape2。将Shape1的
BackColor属性设为0,0,0(黑色),并将其向右下方稍稍移动一点,作为
Shape2的阴影。
  3将Shape1和Shape2的Carvature(曲率)属性设为90,控件便成为椭圆形状

  4将Shape2和BackColor属性设为0,128,255(蓝色)。
  5在Shape2的MouseMove Event方法中输入:
  thisBackColor=RGB(255,0,255)
  即当鼠标移到Shape2上时,Shape2的颜色将变为紫红色。
  6再在Form1中创建一个标签控件Label1,并将Label移至Shape2上,作为按钮
上的标题。
  7将Label1的属性作如下设置:
  BackStyle为“透明”;
  Caption为按钮上的文字;
  ForeColor为255,255,255(白色);
  FontName为揩体;
  FontSize为14;
  说明:以上设置仅供参考,读者可根据自己的需要和喜爱来确定按钮的字体、
大小、颜色等。
  8在Label1的Click方法中输入按钮被按下时要执行的程序。
  9最后,打开主表单Form1的属性表,在MouseMove Freat方法中输入语句:

  thisShape2BackColor=RGB(0,128,255)
  目的是当鼠标离开按钮时,按钮能恢复成蓝色。
  然后来运行一下这个彩色按钮,感觉不错吧。
  二、为表单添加背景音乐
  MP3播放器现在非常流行,它可以播放MP3类型的声音文件,我们可以用OLE方
式将其加入到表单中,当打开表单时就可听到优美的音乐或歌曲,使得操作界面显
得更加活泼友好。
  具体步骤简述如下:
  1首先将准备播放的MP3文件以及播放器WINMPLAY3应用程序集中放在某个子
目录中,例如名为VFPMUS的子目录。
  2选择一首当表单打开时自动播放的音乐,假设为Music0mp3。双击
Music0mp3,将弹出Win95的“打开方式”窗口,在“选择要使用的程序”中选择
VFPMUS目录下的WINMPLAY3exe,同时还要设定“始终用此程序打开此文件”,这
样,只要双击Music0mp3,就会弹出MP3播放器,并自动开始播放Music0。
  3在主表单Form1中创建OLE容器对象olecontrol1,随后将弹出OLE对象窗口,
在左边的单选项中选“从文件中插入”,单击“浏览”,选择“C:
\VFPMUS\Music0mp3”,同时,设定为“链接方式”。最后,单击“确定”退出

  4用鼠标右键单击olecontrol1对象,选择“编辑包”对OLE对象的图标进行
修改,可从VFP\Samples\Graphics\Icons中选一个合适的图标,选好图标后,单击
“外观”,选择编辑菜单中的标识符项,输入“音乐”二字,最后关闭窗口。
  5打开主表单Form1的属性窗口,在Init Event方法中输入:
  thisolecontrol1DoVerb(-2)
  使得运行Form1时就能自动播放背景音乐。
  这样,音乐播放器就可以使用了。运行Form1,在表单上便可看到正在播放音
乐的MP3播放器,可以将其最小化,或移到合适的位置,以免MP3播放器遮挡表单上
的内容。若要停止播放,可关闭MP3播放器窗口,若想再进行播放,可双击“音乐
”图标。如果想换一首曲子,可单击MP3播放器的File菜单项,打开其他MP3文件。
也可以选定MP3播放器的Repeat项,以进行不间断的重复播放。(江苏 张浩平) 


本文出自:《电脑报》1998年12月28日第50期13版
 
 
15、VFP中实现背景音乐的几种方法


  一、利用set bell to 
  VFP5.0的set bell to命令的使用格式不同于FoxPro2.X的格式。在VFP5.0中,
它的格式为Set Bell To [cWAVFileName, nDuration]。其中cWAVFileName为一个
.WAV文件;nDuration为持续时间(注意该项不可省略,否则会产生语法错误)。
这样当在个人程序的初始模块中用set bell to 定向到一.WAV文件后,便可在后面
的模块中用?chr(7)来播放该.WAV文件。
  示例1:
  set bell on &&使bell有效
  set bell to′ .WAV文件′,0 &&使bell定向到一个.WAV 文件。注意有单引

  ?chr(7)
  &&播放该.WAV文件
  二、利用OLE容器控件
  创建一表单,单击表单控件工具栏中的“OLE容器控件”按钮,然后在表单上
适当位置点击或拖动。在出现的“Insert Object”窗口中选“Creat New”或“
Creat From File”,用“Browse”按钮选取自己的.WAV文件,确定即可。
  在当前表单中会出现一“喇叭”图标,设置该图标的属性“ AutoActivate”
为1,可使每当表单运行时自动播放该.WAV文件,实现背景音乐;设置Height、
Width均为0时,可隐藏“喇叭”图标。
  三、利用VFP库Foxtools.fll
  用=Regfn()和=Callfn()可访问Foxtools.fll中的音频模块,进行播放声
音文件。
  示例2:
  创建一表单,在其Activate事件中输入下列代码:
  public ss &&定义一全局变量ss
  set library to foxtools.fll &&打开库Foxtools.fll
  ss=Regfn(″SndPlaySound″,″CI″,″I″,″mmsystem″) &&取得音频信

  =Callfn(ss,″一.wav文件″,n) &&n=0(1,2,3也可)时只播放一遍,n=9时
循环播放
  在其Destroy事件中输入下列代码:
  =Callfn(ss,″″,10) &&停止播放
  set library to &&从内存中释放库foxtools.fll
  四、利用Windows的动态链接库
  在VFP5.0的安装目录samples\classes下,有一类库samples\classes。其中提
供有两种控件:视频和音频,音频可以控制播放.WAV和.MID文件,利用它可轻松地
实现背景音乐。下面给出它的实例。
  示例3:
  创建一表单,在表单控件工具栏中选择类按钮,添加VFP5.0中的
samples\classes\samples.vbx类库。此时表单控件工具栏中会出现SoundPlayer和
VideoFrame两个多媒体控件。选择SoundPlayer,在表单上单击后,设置它的属性
如下:
  AutoOpen=.t.
  AutoPlay=.t.
  AutoRepeat=.t.
  Class=SoundPlayer
  Soundfile=指定一.WAV或.MID文件 &&注意没有引号
  Visible=.f. &&不可见
  以上几种方式各有优缺点,应用时要注重满足自己的编程需要。若你有更好的
方法,欢迎来信共同探讨。我的E-mail:excuse99@163.net。(河南 申绍勇)

本文出自:《电脑报》1999年01月25日第04期

 

 

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:213.153毫秒