厦门巨龙软件工程有限公司
章 元
----
用于生成具有Office 97风格的菜单和工具条的ActiveBar控件1.0版,早以以其强大的功能,可方便地生成自定义的菜单及工具条,而广受程序员们的青睐。但是它却不能支持PowerBuilder,不免给PowerBuilder程序员带来了遗憾,新出版的ActiveBar
2.0版,不仅在功能上大大超过了ActiveBar 1.0版(它可设计出具有Office 2000
的各种程序界面,包括菜单、工具栏、垂直导航、状态栏以及各种 Dock
窗口),而且它可支持VB5.0或更高版本、VC5.0或更高版本、IE4.0或更高版本、Delphi4.0或更高版本、HTML编辑器,虽然它的帮助文件未提及支持PowerBuilder,但是经过笔者测试,在PowerBuilder
6.0、6.5、7.0版本(其它版本未测试)中可以使用它,下面就介绍如何在PowerBuilder中使用ActiveBar2.0版控件,同样也适用于其它编程语言。
---- 安装完ActiveBar控件后,在PowerBuilder的窗口中选择添加OLE对象,从Insert
Control列表框中选取ActiveBar2 Class控件,添加到窗口后,用鼠标选取它并点右键,从弹出式菜单中选择Ocx Properties…进入ActiveBar
Designer,它是用于交互设计工具条、菜单等的工具,其功能强大,能轻易设计出所需要的工具条、菜单等项。
----
在Designer中,ActiveBar有两个分支,一个是Categories(类别)用于创建Tool对象,并将所创建的Tool对象进行分门别类的管理,另一个是Bands,用于放置按钮、菜单项的工具条、菜单条等的集合,以下步骤用于创建一个具有菜单条、工具栏、状态栏、垂直导航的界面。
----
一、在Categories中新增如下5个类别:
----
①Shortcuts(用于垂直导航),在其中增加如下5个Button(按钮),tInternet(name = tInternet,caption =
Internet,Description = Internet,tooltip text = Internet)、tExplorer(name =
tExplorer, caption = Explorer, Description = Explorer,tooltip text =
Explorer)、tNetwork(name = tNetwork,caption = Network,Description =
Network,tooltip text = Network)、tMycomputer(name = tMycomputer,caption = My
Computer,Description = My Computer,tooltip text = My Computer)、tRecycle(name
= tRecycle,caption = Recycle,Description = Recycle、tooltip text = Recycle);
---- ②StatusBar(用于状态栏),在其中增加如下7个Label,status(name
= status,caption = 准备…,Alignment = 3,style = 0,Autosize = 1,LabelBlvel =
2,LabelStyle = 0)、statusInsert(name = statusInsert,caption = Ins,Alignment =
4,style = 1,Autosize = 0,LabelBlvel = 2,LabelStyle = 1)、statusCaps(name =
statusCaps,caption = Caps Lock,Alignment = 4,style = 1,Autosize =
0,LabelBlvel = 2,LabelStyle = 2)、statusNum(name = statusNum,caption = Num
Lock,Alignment = 4,style = 1,Autosize = 0,LabelBlvel = 2,LabelStyle =
3)、statusScroll(name = statusScroll,caption = Scroll Lock,Alignment =
4,style = 1,Autosize = 0,LabelBlvel = 2,LabelStyle = 4)、statusTime(name =
statusTime,caption = 22:16,Alignment = 4,style = 1,Autosize = 0,LabelBlvel =
2,LabelStyle = 6)、statusDate(name = statusDate,caption = 00-2-16,Alignment =
4,style = 1,Autosize = 0,LabelBlvel = 2,LabelStyle = 5);
----
③edit(用于菜单及工具栏),在其中增加如下对象,undo(name = undo,caption = 撤消(&U),controltype =
0,tooltip text = 撤消)、tsep(name = tsep,caption 为空,controltype = 5)、cut(name =
cut,caption = 剪切(&T),controltype = 0,tooltip text = 剪切);
----
④file(用于菜单及工具栏),在其中增加4个Button按钮,newfile(name = newfile,caption =
新建(&N))、tsep1(name = tsep1,caption 为空,controltype = 5)、openfile(name =
openfile,caption = 打开(&O))、savefile(name = savefile,caption =
保存(&S))、tsep2(name = tsep2,caption 为空,controltype = 5)、exit(name =
exit,caption = 退出(&X));
----
⑤menu(用于菜单),在其中增加2个Button按钮,file(name = file,caption = 文件(&F))、edit(name =
edit,caption = 编辑(&E));
----
二、在Bands中创建如下对象
---- ①popfile(弹出式菜单(Popup
Menu),用于菜单下的菜单项,在ActiveBar中,所有展开的菜单都是弹出式菜单),将Categories中的file类下的所有对象逐一添加到此弹出式菜单。
---- ②popedit(弹出式菜单(Popup
Menu),用于菜单下的菜单项),将Categories中的edit类下的所有对象逐一添加到此弹出式菜单。
----
③menu(菜单(Menu Bar),用于菜单),将Categories中的menu类下的所有对象逐一添加到此菜单。将两个按钮的SubBand属性分别设置为popfile和popedit。
---- ④StatusBar(状态栏(Status
Bar),用于状态栏),将Categories中的StatusBar类下的所有对象逐一添加到此状态栏。
---- ⑤ToolBar(工具栏(Tool
Bar),用于工具栏),将Categories中的file类下的按钮newfile、openfile、savefile和edit类下的按钮undo和cut添加到此工具栏。并在savefile后添加edit类下的tsep分格栏,将cut按钮的controltype属性改为1(下拉式按钮)、subband
= popfile。
---- ⑥tbShortcuts(工具栏(Tool
Bar),用于垂直导航),name = tbShortcuts、caption =快捷方式、DockingArea = 2、ChildBandStyle
= 3以产生一个Child Bands,在此Child Bands下增加一个Band,name = tbMyShortcuts,caption =
快捷按钮,然后将Categories中的Shortcuts类下的所有对象逐一添加到此栏。
----
以上如有用到图片的地方如工具栏、垂直导航等,请自行指定其Bitmap属性。上述步骤完成了设计阶段的任务,下面介绍在PowerBuilder中如何调用它。
----
在窗口中放置一个ActiveBar控件(name = ole_1),按上述步骤完成设计阶段的任务。在窗口的open事件中写如下代码:
This.WindowState = Maximized! //窗口最大化
ole_1.x = 0
ole_1.y = 0
在窗口的resize事件中写如下代码:
ole_1.width = this.width
ole_1.height = this.height - 100
在ole_1的toolclick事件中写如下代码:
CHOOSE CASE Tool.Name
CASE 'newfile'
messagebox('','创建一个文件')
CASE 'openfile'
messagebox('','打开一个文件')
CASE 'savefile'
messagebox('','保存一个文件')
CASE 'exit'
close(parent)
END CHOOSE
----
运行程序,可以产生一个具有office 2000风格的菜单条、工具栏、状态栏、垂直导航的界面。
----
用上述方法生成的菜单和工具条等信息全部存在程序中(*.pbl),也可以不用在编程语言中设计,而在ActiveBar安装路径下单独运行Designer可执行程序,设计完后将其保存为脚本文件(*.tb2),在程序中调用它,调用格式如下:
[form!]ActiveBar2.Load BandName As String,
vData As Variant, SerializeOptions As Long
----
如果不指定Band名则会把脚本中的所有Band全部载入。如果只载入某几个Band,则需一个个地依次载入。使用这种方法,当用户通过"自定义"菜单改变了菜单、工具条等后,能使程序通过保存脚本的方式来保存当前的工具条和菜单等信息。下次运行程序时再载入,使程序保持用户自定义的界面。
---- 保存脚本的格式如下:
[form!]ActiveBar2.Save BandName As String,
FileName As String, SerializeOptions As Long
如果没有指定Band名,则保存所有的Band。
---- 举例如下:
----
在窗口的open事件中写如下代码:
This.WindowState = Maximized! //窗口最大化
ole_1.x = 0
ole_1.y = 0
ole_1.object.load('','c:\temp\1\activebar.tb2',1)
//载入脚本文件
If FileExists("c:\temp\UserChanges.tb2") Then
ole_1.object.LoadLayoutChanges
("c:\temp\UserChanges.tb2",1)
End If
If FileExists("c:\temp\MenuUsage.tb2") Then
ole_1.object.LoadMenuUsageData
("c:\temp\MenuUsage.tb2",1)
End If
ole_1.object.RecalcLayout()
//重新排布窗口中的各种Band对象
在窗口的resize事件中写如下代码:
ole_1.width = this.width
ole_1.height = this.height - 100
在窗口的close事件中写如下代码:
ole_1.object.SaveMenuUsageData
("c:\temp\MenuUsage.tb2", 1)
在ole_1的customizeend事件中写如下代码:
If bModified Then
this.object.SaveLayoutChanges
("c:\temp\UserChanges.tb2", 1)
End If
在ole_1的toolclick事件中写如下代码:
CHOOSE CASE Tool.Name
CASE 'newfile'
messagebox('','创建一个文件')
CASE 'openfile'
messagebox('','打开一个文件')
CASE 'savefile'
messagebox('','保存一个文件')
CASE 'exit'
close(parent)
END CHOOSE
----
以上两种方法都可生成菜单、工具条等对象,但是它们都是在设计时就产生的,ActiveBar2.0版支持程序运行时生成菜单,详细情况请见ActiveBar的帮助或者用户手册,这些资料对所有属性、方法和事件都有详尽的说明。
----
Designer可以打开脚本文件,同时也可打开ActiveBar1.0版脚本文件(*.tb),使得前后版本兼容,同时也可在多种编程语言中共享脚本文件,为程序开发节省了时间。经测试ActiveBar2.0对PowerBuilder6.5版本支持不是很好,多次修改后发现不能存盘,解决此问题的一个方法是用Designer先设计好所需的菜单、工具条、状态栏等对象,然后在程序中用Ocx
Properties…将其添加到程序中,另一个解决方法是用PowerBuilder7.0版本设计程序,ActiveBar2.0较好地支持了它。
----
ActiveBar2.0版可在 http://www.nease.net/~jackyyin/index_main.htm
中下载,希望它能帮你设计出良好的界面。 |