回 帖 发 新 帖 刷新版面

主题:工具条怎么制作?

工具条怎么制作?谁有这样的教程啊,或者最简单的例子,发一个给菜鸟我zxfhlhxl@21cn.com  先谢谢!

回复列表 (共17个回复)

沙发

到处都有,自已从网上查

板凳

我来告诉你把
我的用法,不知道别人怎么做的,不过管用
说明我的用法,希望高手也帮我指摘一下,可能我的方法很菜。
1、在项目管理器 类 那个页面里新建一个类mytoolbar,继承于toolbar,保存到我自己的雷库文件mylib里面,将他的showwindow属性设为在顶层标单中(因为我侧程序一般都是用顶层标单,不要_screen)。
2、在运行需要有工具栏的表单之前,定义变量public omyform1,
然后do form forms\表单名 name omyform1
3、在需要调用mytoolbar:在窗体的init中定义全局变量 publ omytoolbar,如果用中加个按钮,写上:
{
set clisslib to mylib additive&&如果mylib不在默认目录下,需要写上路径
omytoolbar=createobject('mytoolbar')
omytoolbar.show&&显示
omytoolbar.dock(0)&&停放
}

如果把上面一段代码写到do form 之后,则form一开始就有工具栏

4、这样,omytoolbar.combo1就是指工具烂上的combo1,
而在omytoolbar上面操作omyform,可以用,omyform1.text1.value=this.combo1.value之类的,
高手指点呀,应该有更好的方法吧。

3 楼

一看就知道,你没有VFP的帮助文件,或是根本没看过。 我拷上来大家看吧!
创建自定义工具栏
如果应用程序中包含一些用户经常重复执行的任务,那么可以添加相应的自定义工具栏,简化操作,加速任务的执行。例如,如果用户要经常从菜单中选择打印报表命令,则最好能提供带有打印按钮的工具栏,从而简化这项操作。

下面各节介绍的是为应用程序创建自定义工具栏的方法。 有关定制 Visual FoxPro 提供的工具栏的详细内容,请参阅“定制工具栏”对话框”。

以下各节的主要内容有:

定义工具栏类


在自定义工具栏类中添加对象


在表单集中添加自定义工具栏
定义工具栏类
如果要创建一个工具栏,它要包含已有工具栏所没有的按钮,则可通过定义一个自定义工具栏类完成此任务。Visual FoxPro 提供了一个工具栏基类,在此基础上,您可以创建所需的类。

定义了工具栏类以后,可向工具栏类添加对象,并为自定义工具栏定义属性、事件和方法程序。最后可将工具栏添加到表单集中。

若要定义一个自定义工具栏的类

从“项目管理器”中,选定“类”,然后选择“新建”按钮。


在“类名”框中,键入新类的名称。


从“派生于”框中,选择“Toolbar”,以使用工具栏基类。
– 或者 –

选择对话按钮,以便选择其他工具栏类。

在“存储于”框中,键入类库名,保存创建的新类。
– 或者 –

选择对话按钮,以便选择一个已有的类库。

在新建的工具栏类中添加对象。
例如,可以将派生于工具栏基类的 printing 类存储在 inventory 类库中。

在“新建类”对话框中创建一个新类




“新建类”对话框结束后,“类设计器”便显示出来。

在“类设计器”中的一个新建的自定义工具栏




可用下列任何一种操作定义工具栏类:

从“文件”菜单中选择“新建”命令,然后选择“类”。


使用 CREATE CLASS 或 MODIFY CLASS 命令。


用 DEFINE CLASS 命令以编程方式定义类。
在自定义工具栏类中添加对象
创建好了一个自定义工具栏类后,便可以在其中添加对象,只要是 Visual FoxPro 支持的对象就可以。例如,可以从“控件”工具栏添加对象。

若要将对象添加到自定义工具栏类中

请打开一个类库,其中应该包含了要添加对象的自定义工具栏类,打开这个类。


从“表单控件”工具栏上,选择所要添加的对象。


选择自定义工具栏,将对象放置在自定义工具栏上。


重复执行步骤 2 和 3,直至完成自定义工具栏。


如果需要的话,可以重新调整自定义工具栏上的对象。



例如,可以调整对象大小,拖动对象以更改其位置,按 DELETE 键删除对象,或在对象之间插入“表单控件”工具栏上的分隔符对象,增加对象间的空格。

注释 每次只能移动一个对象。

在“属性”窗口中,设置工具栏的属性。


保存自定义工具栏类。
提示 设置工具栏按钮的 Picture 属性,可以给按钮添加位图或图标。

在表单集中添加自定义工具栏
在定义一个工具栏类之后,便可以用这个类创建一个工具栏。可以用“表单设计器”或者用编写代码的方法将工具栏与表单对应起来。

在“表单设计器”中协调工具栏和表单
可以在表单集中添加工具栏,让工具栏与表单集中的各个表单一起打开。但不能直接在某个表单中添加工具栏。

若要使用“表单设计器”在表单集中添加工具栏

请先注册并选定包含工具栏类的类库。



打开要使用上述工具栏类的表单集,再从“表单控件”工具栏单击“查看类”按钮,然后从显示的列表中选择该工具栏类。


从“表单控件”工具栏中选择工具栏类。


在“表单设计器”中单击,添加此工具栏,然后将工具栏拖动到适当的位置。
Visual FoxPro 将在表单集上添加工具栏,如果表单集尚未打开,Visual FoxPro 将提示您打开一个。

为工具栏及其按钮定义操作。(请参阅下一节的“定义工具栏的操作”。)
提示 要确定某个对象的所属类,可以查看它在“表单控件”工具栏中的工具提示信息。

有关如何注册及选择包含工具栏类库的详细内容,请参阅第三章“面向对象程序设计”中的“将类添加到表单中”部分。

使用代码协调工具栏和表单
除了使用“表单设计器”外,还可以使用代码在表单集中添加工具栏。

若要使用代码在表单集中添加工具栏

请在表单集的 Init 事件中,使用 SET CLASSLIB 命令,指定包含工具栏类的类库,然后在表单集中由此类创建工具栏。
例如,要添加并显示基于 inventory 类库中 printing 类的工具栏 tbrPrint,可以在表单集的 Init 事件中添加下列代码:

SET CLASSLIB TO inventory
THIS.AddObject("tbrPrint","printing")
tbrPrint.Show

注释 如果工具栏类没有定义工具栏及其按钮要执行的操作,那么您必须在与工具栏及其按钮相关的事件过程中定义操作。有关的详细内容,请参阅下一节的“定义工具栏的操作”部分。

示例:创建自定义工具栏
可以在代码中定义工具栏的各个要素。例如,如果在表单集的 Init 事件中添加下列代码,当加载表单集时,Visual FoxPro 将创建并显示代码中定义的工具栏。这个工具栏包含有两个按钮。

有两个按钮的工具栏




若选择按钮,将更改表单集中 frmForm1 表单的字体属性。

表单集的 Init 事件代码

代码 注释
THIS.AddObject("tbrTool1","mytoolbar")
THIS.tbrTool1.Show
在当前表单集中添加 mytoolbar 工具栏,并将它显示出来。这段代码放在表单集的 Init 事件中。


类定义代码

代码 注释
DEFINE CLASS myToolBar AS TOOLBAR

ADD OBJECT cmdBold AS COMMANDBUTTON
ADD OBJECT sep1    AS SEPARATOR
ADD OBJECT cmdItalic AS COMMANDBUTTON
类定义的起始部分:工具栏上包含一个命令按钮、一个分隔符和另一个命令按钮。
Left = 1
Top  = 1
Width = 25
Caption = "Form Attributes"
设置工具栏对象的属性。
cmdBold.Caption = "B"
cmdBold.Height = 1.7
cmdBold.Width = 10

cmdItalic.Caption = "I"
cmdItalic.Height = 1.7
cmdItalic.Width = 10
cmdItalic.FontBold = .F.
设置控件的属性。注意这里并没有设置工具栏上控件的 Top 或 Left 属性。工具栏上的控件将自动按照添加的顺序定位。

cmdItalic 的 FontBold 属性设置为“假”(.F.),因为默认情况下 FontBold 属性为“真”(.T.)。
PROCEDURE Activate
   THIS.cmdBold.FontBold = ;
    THISFORMSET.frmForm1.FontBold
   THIS.cmdItalic.FontItalic = ;
    THISFORMSET.frmForm1.FontItalic
ENDPROC
工具栏激活时,设置两个命令按钮的字体属性,分别反映 frmForm1 的粗体设置和斜体设置。
PROCEDURE cmdBold.CLICK
   THISFORMSET.frmForm1.FontBold = ;
    !THISFORMSET.frmForm1.FontBold
   THIS.FontBold = ;
    THISFORMSET.frmForm1.FontBold
ENDPROC
用户单击 cmdBold 时,对 frmForm1 的 FontBold 设置求反,并将 cmdBold 的 FontBold 也设置为相同的内容。
PROCEDURE cmdItalic.CLICK
   THISFORMSET.frmForm1.FontItalic = ;
    !THISFORMSET.frmForm1.FontItalic
   THIS.FontItalic = ;
    THISFORMSET.frmForm1.FontItalic
ENDPROC
用户单击 cmdItalic 时,frmForm1 的 FontItalic 设置求反,cmdItalic 的 FontItalic 也设置为相同的内容。
ENDDEFINE
类定义结束。

4 楼

设置自定义工具栏的属性
在设计自定义工具栏的同时,可以设置其属性,例如,可以设置 Movable 属性,以便允许用户移动工具栏。

此外,还可以使用方法程序和事件控制自定义工具栏。例如,可以使用 Dock 方法程序停放或移出工具栏,也可以使用 BeforeDock 事件和 AfterDock 事件控制工具栏停放前后所发生的活动。

定义工具栏的操作
创建工具栏后,必须定义与工具栏及其对象相关的操作。例如,必须定义用户单击工具栏或其中某个按钮时所发生的活动。

若要定义工具栏的操作

选定要定义操作的对象:工具栏或其中某个按钮。


在“属性”窗口中,选择“方法程序”选项卡。


编辑相应的事件。


添加代码,以指定操作。
此外,也可以设置工具栏及其对象的属性和方法程序。

协调菜单和自定义工具栏
如果创建了工具栏,必须使菜单命令与对应的工具栏按钮同步工作。例如,如果启用了某个工具栏按钮,则必须同时启用对应的菜单命令。

在设计与创建应用程序时应做到:

无论用户使用工具栏按钮,还是使用与按钮相关联的菜单项,都执行同样的操作。


相关的工具栏按钮与菜单项具有相同的可用或不可用属性。
当协调菜单和工具栏按钮时,请遵循如下步骤:

通过定义工具栏类来创建工具栏,添加命令按钮,并将要执行的代码包括在对应于此命令按钮的 Click 事件的方法程序中。


创建与之协调的菜单。


添加协调的工具栏和菜单到一个表单集中。
创建协调的菜单
如果将菜单与工具栏相协调,则菜单项执行与对应工具栏相同的任务,并在对应的工具栏按钮废止时,菜单项也自动地废止。

若要创建与工具栏相协调的菜单

在“菜单设计器”中,根据工具栏上的每个按钮对应地创建子菜单。


在每个子菜单项的“结果”栏,选择“命令”。


对每个子菜单项,调用相关工具栏按钮的 Click 事件对应的代码。
例如,如果工具栏按钮的名字为 cmdA,可以在子菜单项命令编辑框中添加如下代码:

Formset.toolbar.cmdA.Click

在“选项”栏选择此按钮,打开“提示选项”对话框,选择“跳过”。


在“表达式生成器”中输入表达式,指出当工具栏命令按钮失效时,菜单功能应该“跳过”。
例如,如果工具栏按钮的名称为 cmdA,可以在“跳过”框中输入如下表达式:

NOT formset.toolbar.cmdA.Enabled

生成菜单。


把菜单添加到拥有此工具栏的表单集中,并运行表单集。
当用户打开菜单时,Visual FoxPro 计算“跳过”条件的值,如果相关的工具栏命令不可用,则菜单也不可用。当用户选择菜单项时,则执行相关工具栏命令的 Click 事件代码。

将相关的工具栏和菜单添加到表单集中
创建了协调工作的工具栏类和菜单之后,在表单集中协调它们就变得非常容易。

若要在表单集中加入协调的工具栏和菜单

请用下列三种方法中的一种将工具栏添加到表单集中:
将工具栏类从“项目管理器”中拖入“表单设计器”中。


注册工具栏类库并从“表单控件”工具栏中将工具栏添加到表单集中。


在表单集的 Init 事件中,包含 AddObject 方法程序代码,添加此工具栏。
在表单集中的 Load 事件中,保存已有菜单,运行菜单程序。
例如,如果菜单名为 mymenu,可包含使用 PUSH MENU 和 DO 命令的如下代码:

PUSH MENU _MSYSMENU
DO mymenu.mpr

在表单集中的 Unload 事件中,使用 POP MENU 命令恢复原有菜单:
POP MENU _MSYSMENU

如果某些菜单命令使用频繁,可创建一个自定义工具栏,它包含那些频繁使用的命令按钮。这样用户在需要这些命令时只需简单地按动按钮就可以了。如果创建了工具栏,则需要使菜单命令和相应的按钮同步。例如,如果启用某个按钮,则需要启用与它相应的菜单命令。

5 楼

谢谢楼上三位大鸟的回答,经常得到你们的指点,帮助,甚是感激!!再次感谢!!!

6 楼

用VB容易啊,看看书啊,呵呵!!

7 楼

你好!我推荐一本书,希望能对你有帮助啊!
专家门诊系列丛书 人民邮电出版社
专家门诊---Visual FoxPro 开发答疑

8 楼

以上各位大虾的发言,我觉得二楼老兄说得更贴切.实际上现在的许多VFP书籍或者是VFP帮助文件只能让人越看越糊涂,看多了,像进了云里雾里,只能让人更迷茫.当然,好书还是有的,只是太少了.否则我们大家用不着在此讨论了.所以我更希望大家能多谈谈心得体会,或像二楼朋友那样,拿具体的例子谈自己的具体做法.

9 楼

谢谢,真是新手的老师

10 楼

个人认为用以上方法不美观......

我来回复

您尚未登录,请登录后再回复。点此登录或注册