资源描述
在VFP中创建自己的生成器
VFP中一些控件程序自带了生成器,当我们自己创建一个类时,大家有没有想过自己也给这个类创建一个生成器,其实自定义生成器并不难,只要完成以下几个步骤即可(以我的雨田Gridtree生成器为例):
【第一步】创建一个新的项目,名叫:gridtreebuilder
【第二部】创建一个程序:gridtreebuilder.prg,代码如下
PUBLIC OSelGridtreeRef
LOCAL LASELECTEDOBJECTS( 1 )
DO CASE
CASE ASELOBJ(LASELECTEDOBJECTS) >= 1 AND UPPER(LASELECTEDOBJECTS(1).CLASS) = 'GRIDTREE'
OSelGridtreeRef = LASELECTEDOBJECTS(1)
SET CLASSLIB TO Gridtree ADDITIVE
DO FORM Gridtreebuilder
CASE ASELOBJ(LASELECTEDOBJECTS) >= 1 AND UPPER(LASELECTEDOBJECTS(1).CLASS) = 'TREEVIEW'
OSelGridtreeRef = LASELECTEDOBJECTS(1).GRIDTREE
SET CLASSLIB TO Gridtree ADDITIVE
DO FORM Gridtreebuilder
OTHERWISE
= MESSAGEBOX('只有当基于GridTree的类在表单设计器中被选择,GridTree生成器才会被执行!’)
ENDCASE
RELEASE OSelGridtreeRef
RETURN
说明:1、ASELOBJ()函数把“表单设计器”、“类设计器”或者代码“编辑”窗口中当前选定的控件或
容器的对象引用存入指定的变量数组。
2、OSelGridtreeRef保存选定的控件对象,以便在在生成器表单对其进行引用。当然也可以在打开生成器表单时将选定的控件对象传递给表单
【第三步】创建一个表单“Gridtreebuilder”类似如下图:
在表单上放一些用于设置参数的控件,那么这些设置如何起作用呢?别忘了第二步的“OSelGridtreeRe”这个全局变量,有了这个变量,你可以随时访问选定对象的属性及方法,假设选定的对象有一个“table”这个属性,生成器窗口上有一个文本框text1用于设置选定控件的Table属性,以下代码可以用Text1的值来设置Table属性:OSelGridtreeRe.table = allt(thisform.text1.value),这些代码可以放在生成器表单的一个“确定”按钮。呵呵!就这么简单。
【第四步】 将gridtreebuilder.prg设置为主程序,并将其编译为“APP”文件。
【第五步】 在VFP编程语言中注册这个生产器,注册的过程是,首先将Gridtreebuilder.app文件复制到VFP的Wizards文件夹中,然后在builder.dbf数据表中注册生成器的信息。
Wizards文件夹位置如下图:
builder.dbf数据表内容如下图:
注册生成器的代码:
lcFile = HOME(1) + 'wizards\Gridtreebuilder.app'
lcTable = HOME(1) + 'wizards\builder.dbf'
*将生成器文件复制到VFP程序的相应文件夹中
COPY FILE Gridtreebuilder.app TO "&lcFile"
IF NOT USED("&lcTable")
USE "&lcTable" IN 0
ENDIF
*在相应数据表中注册GridTree类生成器
LOCATE FOR UPPER(type)='GRIDTREE'
IF !FOUND()
APPEND BLANK
ENDIF
REPLACE name WITH 'GRIDTREE生成器', type WITH 'GRIDTREE', program WITH 'wizards\Gridtreebuilder.app'
USE IN &lcTable
MESSAGEBOX('注册成功')
注销生成器的代码:
lcFile = HOME(1) + 'wizards\Gridtreebuilder.app'
lcTable = HOME(1) + 'wizards\builder.dbf'
IF FILE("&lcFile")
DELETE FILE "&lcFile"
ENDIF
SELECT 0
USE "&lcTable" ALIAS builder
LOCATE FOR UPPER(builder.type)='GRIDTREE'
IF FOUND()
DELETE
ENDIF
PACK
完成以上五步,就可以使用自定义的生成器了!
作者博客:
展开阅读全文