VFP编程技巧
如何注册ActiveX控件
- 我曾在“编程心得(三)”中提到:“经常在网上看到因“XXX.OCX
没有注册,不能运行,怎么办?”这个问题,最近我也陆续开发了一些以
.OCX为后缀的ActiveX控件,这次我就简要地介绍一下什么是ActiveX控
件、如何注册ActiveX控件的问题。
如果我们直接讲OLE控件(Object Link and Enbed 译: 对象链接
与嵌入)恐怕大家就比较熟悉了,因为在VFP的帮助里常常会看到“OLE”
这三个字母,而OLE是指在Windows环境下应用程序间信息共享和传送的一
种技术,其包含的内容非常广泛,OLE控件(.OCX)只不过是OLE庞大技术
体系中的一种。在VFP中,我们可以简单和笼统地说:ActiveX控件(.OCX)
就是目前最高版本的OLE控件。
在这里我并不想详细介绍OLE或ActiveX,而是介绍如何注册ActiveX
控件和当系统出现“XXX.OCX没有注册”后怎么办的问题。
1.ActiveX控件一般存放在什么文件夹里:
要注册ActiveX控件,你首先必须知道ActiveX控件具体的文件名和它
所在的文件夹。ActiveX控件是以 .OCX为后缀的文件,Windows 95/98操
作系统一般都把ActiveX控件存放在:系统\System\文件夹中(这也是每个
应用程序查找ActiveX控件时默认的文件夹),当然根据需要您也可放在其
他文件夹中,如果是这样,一旦存放ActiveX控件的文件夹名重命名,那您
就必须重新对该ActiveX控件进行注册,否则就会出现“XXX.OCX没有注册”
或“找不到XXX.OCX文件”的提示。(这点您将会在下面的介绍中知道原因)
2.如何注册ActiveX控件:
所谓注册,就是在系统注册表文件System.dat中建立一个主键,在
Windows 9X 中,是建立在“HKEY_CLASSES_ROOT\CLSID\”键下的。
在VFP中注册ActiveX控件一般有以下三种简单的方法:
A、通过VFP菜单的选择项进行注册: 进入VFP编辑状态,在VFP系统主
菜单的[工具]-[选项]-[控件]-[ActiveX 控件]-[按添加按钮],选择您要
注册ActiveX控件的文件夹和文件名,VFP就会自动向系统注册表进行注册,
注册完后您只需在控件列表框“ActiveX控件名”前的复选择框里打钩,就
可在表单设计器的[表单控件]-[ActiveX控件]中进行选择使用了。
B.直接运行Regsvr32.EXE系统文件进行注册,
可在VFP的程序中执行:Ren Regsvr32 [PATH]\xxx.ocx
进行注册。
C.利用Regedit.exe注册表编辑器,在编辑器的查找里直接输入 .OCX
文件名进行查找,找到:
“HKEY_CLASSES_ROOT\CLSID\{xxxxxxxxxxxxxxxxxxxxxxxxxxx}”主键
后,再利用注册表编辑器菜单上-[注册表]-[导出注册表文件]-然后在文件
选择窗里输入导出的注册表文件名,并在下面的[导出范围]单选框中选[选
择的分支],最后按[保存],这样您就把该控件在注册表中的主键保存在一
个 .REG的注册表文件里了。在需要注册该控件的机器上,您只要直接在这
个 .REG的注册表文件上双击鼠标,系统就会询问您是否要将该.REG文件写
入本机的System.dat文件中,也就是进行注册。 如果选择“是”,那就进
行注册了。
那么我们保存的这个.REG注册表文件里有些什么呢?
下面是MP3PLAY.OCX在导出的.REG注册表文件中的内容:
REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}]
@="Dialog-Medien Mp3Play Control"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\ProgID]
@="Mp3Play.Mp3PlayCtrl.1"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\InprocServer32]
@="C:\\MP3\\MP3PLAY.OCX"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\ToolboxBitmap32]
@="C:\\MP3\\MP3PLAY.OCX, 1"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\MiscStatus]
@="0"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\MiscStatus\1]
@="131473"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\Control]
@=""
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\TypeLib]
@="{3B00B10A-6EF0-11D1-A6AA-0020AFE4DE54}"
[HKEY_CLASSES_ROOT\CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}\Version]
@="1.0"
我之所以写这些,是为了让您理解ActiveX控件放在“系统\System\”文件
夹和放在其他文件夹中的区别,我的这个MP3PLAY.OCX是放在C:\MP3\文件夹里的,
所以上面的红色部分就明确标明了ActiveX控件所在的文件夹,也就是:如果这个
文件夹被重新命名后,您必须重新进行注册的原因所在。而如果是放在:
“系统\System\”里,那这些红色的部分就是这样写的了:
@="MP3PLAY.OCX"
@="MP3PLAY.OCX, 1"
可以看出,这里已没有C:\MP3\文件夹名了。
上面的兰色部分就是一个ActiveX控件是不是在注册表文件里进行注册的标志,
也就是该控件在注册表文件里的主键名。
必须注意的是,上面B和C方法的注册,只是在注册表中进行了注册,如果您想
在VFP编辑时象其他控件那样在表单设计器的[表单控件]-[ActiveX控件]中看见它,
则您还必须进行方法A中的绿色部分。
- 希望通过上面这些简单的介绍,当您再遇到“XXX.OCX没有注册,...”时,您
可以找出原因,自行处理了。
利用DOS下的内部或外部命令来完成VFP无法达到的功能
- 这次“心得”继续谈谈编程中的一些小技巧,这些小技巧您可能已经知道,
但我还是希望这些技巧能对您有所帮助:
1.利用DOS下的内部或外部命令来完成VFP无法完成的功能:
A.利用DOS下的ATTRIB.EXE程序来改变文件的属性。我曾介绍过用VFP
的RENAME命令来更改文件属性的方法,其实用DOS下的ATTRIB.EXE更加方便。
ATTRIB.EXE程序是DOS操作系统的外部命令之一,在C:\WINDOWS\COMMAND\
文件夹里,
用法: RUN /N ATTRIB [+或-] [R S H] 文件名
比如: RUN /N ATTRIB -R -S -H XXX.DAT
把XXX.DAT文件的只读、隐含和系统属性去掉,如果把“-”改为“+”,则作
用相反。
B.利用DOS的内部命令DIR来取得指定磁盘上所有的文件夹和文件名、 磁
盘格式化时建立的磁盘卷标序号、文件夹及文件的长文件名和短文件名、文件
夹和文件的个数等。
用法: RUN DIR [*或?] [/s /...] > 文件名
比如想取得C:盘下的所有文件夹和文件,则:
RUN DIR C:\*.* /S > DISK_C.TXT
这样就会在当前目录下建立一个名为DISK_C.TXT的文本文件,文件里包含了上
面提到的所有数据,下面是其中的一部分:
Volume in drive C has no label
Volume Serial Number is 3846-11DF
Directory of C:\
COMMAND COM 94,282 06-19-98 20:01 COMMAND.COM
WZT1 25 10-11-99 23:44 WZT1
WZT2 25 10-11-99 23:44 WZT2
WINDOWS < DIR > 05-04-99 20:56 WINDOWS
......
22 file(s) 234,496 bytes
40 dir(s) 1530,612,224 bytes free
具体的数据格式这里就不介绍了。
C.利用DOS的内部命令DATE来改变系统日期
VFP本身没有办法改变系统的日期或时间,用WIN32 API虽说可以改变,
但十分复杂(在我的[专题文章]栏目里有介绍),如果用 DOS的内部命令:
DATE来改变系统日期就比较方便了,方法是:
RUN DATE [MM/DD/YY]
比如把系统日期改为2000年10月1日,则
RUN DATE 10/01/2000
如果您需用变量来改日期,则:
mDATE=''10/01/2000''
RUN DATE &mDATE
同理,如果想改变时间则用DOS的内部命令TIME来达到。
类似的命令还有一些,您可自己一试,需要说明的是,利用DOS下的命令,
会出现DOS窗口,您可以建立个快捷方式,将其设为最小化,使用时调用这个快
捷方式,可以以最小化窗口来执行DOS的命令。 也许您发现了,利用DOS的内部
命令时RUN命令后不能带“/N” 。
0
相关文章