我做的工具条,为何一直躲到顶层表单的后面,我参考了网上的一些设置,有几点不明白,忘大家赐教,不盛感激!
其中这几句话一直不明白什么意思:
This.TopToolBar=NewObject("MyToolBar","MyVcx")
This.TopToolBar.show()
This.TopToolBar.dock(0)
我的工具条名称是:工具条.vcx,请问该如体设置上面的代码。附:我在网络上找的代码:
VFP教程:如何制作自定义工具栏2006-12-30 04:421、建立的方法
(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)
现在,你就可以享受顶层表单的工具栏了!
以上只是应用三条原则中的第一条“属性可以变成对象”而已。用这三条金钥匙、发挥你的想象力,你
可以作出更漂亮的魔术
如何制作自定义工具栏
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)执行。在执行表单的同时工具栏会被自动打开,如下图: