1、建立的方法
(1)建立新类别。在命令窗口中执行CREATE CLASS命令后,在新建类窗口中键入类别及类别库的名称. (2)加入按钮对象。当进入类设计器时会发现Toolbar的窗口很小,因此你要仔细的建立按钮,按下工具栏中的按钮,再在类设计器中的工具栏内单击鼠标左键,以加入一个按钮到该自定义工具栏中,并修改按钮的特性为: Caption=’’ Picture=Top1.bmp 如果发现图形不能完全显示,表示图形太大可以修改成小一点的图形或将按钮拉大,如果要在按钮之间加入空格,请按下按钮,并在按钮之间按下。 (3)编写按钮的事件过程。就是对每个按钮编写各自的Click过程,这与表单中按钮的Click事件建立过程一样。 (4)保存。按下Ctrl+W将该类别保存到LIBS.VCX类别库中。 2、类别的应用 此类别是一个Toolbar,而Toolbar事实上也是表格的一种,只是某些特性与表格不同,因此,如果显示数据的画面也是一个表格,便不能将其加入到数据显示表格中,因此我们要建立一个更大的对象以便同时加入表格和工具栏,此对象便是Formset。 (1)建立新表格。在命令窗口中执行:CREATE FORM (2)建立表格集。请选定表单菜单中的创建表格集选项。 (3)建立工具栏对象。对于工具栏不是直接以视觉化方式加入到表格集中的,而是通过程序建立,在Formset的ini事件中编写如下程序: SET CLASSLIB TO libs ADDITIVE This.AddObject(’mybar’,’move_rec’) This.mybar.show This.mybar.dock(0)?? 关于dock()函数的说明: 值 常量 说明 -1 TOOL_NOTDOCKED 不停放工具栏。 0 TOOL_TOP 在 Visual FoxPro 主窗口的顶部停放工具栏。 1 TOOL_LEFT 在 Visual FoxPro 主窗口的左边停放工具栏。 2 TOOL_RIGHT 在 Visual FoxPro 主窗口的右边停放工具栏。 3 TOOL_BOTTOM 在 Visual FoxPro 主窗口的底部停放工具栏。 (4)执行。在执行表单的同时工具栏会被自动打开. THE NEXT WAY: 1、自定义属性可以变成对象; 2、对象可以象普通变量一样被传递到其他对象或其他对象的属性中,接收该对象变量的属性将变为对象;
3、源对象如果未被释放,将和接收被传递对象的属性变成的对象一模一样。也就是说,我们等于在目标属性上插入了一个源对象的链接。
我们先看第二条,对象可以被象普通变量一样被传递。
在上一篇中我专门讨论了“对象也是一种变量”的观点,只有理解了这一点,才能够接受传递对象的理论——是变量那么当然可以被传递了。实际上,对象变量被传递的方式更类似于传递数组,带着属性就好象数组的子集,也是一种变量!
没错,这就是我要证明的第二点:属性也是变量!
尤其是自定义属性,正因为其变量的本质,所以:属性也可以象变量一样被改变数据类型!
正如我们在《VFP6中的_Assign方法》一文中所看到的,一个表单的自定义属性,原来是逻辑型数据的,在将该属性指定为一个对象变量的名称以后,它的数据类型变成了对象型“O”,而且竟然也有了自己的属性!
属性的属性——不太好理解吧?其实,根本没什么属性的属性。原来的那个属性,现在已经变成了一个不折不扣的对象。是对象,当然可以有自己的属性了。而且,要注意的是:这个对象跟源对象是一模一样的——不止是一模一样,其实根本就是一个对象。
比如说:现在有表单A和B,A上带有一个Custom对象AOC;B有一个属性RcvAoc。现在我们从A表单向B表单传递AOC对象:
DO form B with thisform.AOC
thisform.hide 在B的INIT事件中接收AOC对象变量,并将它赋值给属性RcvAoc:
LParameters tmprcv
thisform.RcvAoc=tmprcv 这时,B表单的RcvAoc属性变成了一个与A表单的AOC对象除了名字外一模一样的对象,你可以用调试器的局部窗口观察一下。
从这时开始,我们对RcvAoc做的修改会反应在AOC上,而在AOC上做的修改也会反应在RcvAoc上。看到这里,你也许会脱口而出:这不是链接嘛!
没错,这就是我想证明的第三点:这种属性接收对象的传递变换,其实质是对象的链接。
一口气谈了那么多理论问题,你也许有点烦了:这看来有趣,但有什么用呢?别急,下面,我们就用这个理论来解决一个困扰我们多久的实际问题:给顶层表单添加工具栏。
顶层表单有些特殊性,是因为它的“顶层”的缘故。
用普通的建立工具栏的方法给顶层表单添加工具栏,会发现工具栏不能正常显示。事实上,工具栏被顶层表单挡在后面了,即使你把顶层表单的SHOWWINDOW属性设置为“最上层表单”、把AlwaysOnTop属性设置为.T.也没用。这是因为工具栏是一种特殊的表单,而在VFP中除了应用程序对象_VFP和_SCREEN对象,没有其它任何表单的层级比顶层表单高。
有的朋友就此认为顶层表单无法添加工具栏,因而放弃了使用顶层表单而用“古老”的屏幕。其实,顶层表单还是可以有工具栏的。
要给顶层表单程序添加工具栏,必须把工具栏做在顶层表单本身上,也就是说:要做成TOPFORM.ToolBar的形式。
下面是我参考有关书籍和《VFP6中的_Assign方法》一文找到的解决办法:
1.在类库MyVcx中建立一个工具栏类MyToolBar,将工具栏的ShowWindow属性设置为1——最上层表单;
2.给顶层表单添加一个自定义属性TopToolBar;
3.编辑顶层表单的Activate event,输入以下代码:
This.TopToolBar=NewObject("MyToolBar","MyVcx")
This.TopToolBar.show() This.TopToolBar.dock(0) 现在,你就可以享受顶层表单的工具栏了!
以上只是应用三条原则中的第一条“属性可以变成对象”而已。用这三条金钥匙、发挥你的想象力,你可以作出更漂亮的魔术!
|
|