菜单条-MenuBar、菜单项-MenuItem、级联菜单(子菜单)-SubMenu
菜单项(MenuItem)是菜单中最基本的元素,只要有文字内容的就是菜单项。菜单条(MenuBar)是菜单中级别最高的菜单项的总称,也叫做菜单标题。菜单条的内容总是显示出来,对菜单的操作也是首先从这里开始的。在菜单条上移动鼠标或者点击其中的项目可以显示对应的内容,称为下拉菜单,包括很多的菜单项,它们大多数都执行相应的功能,少数还可以包含更细致的内容,称为级联菜单(SubMenu),也叫做子菜单。这样的菜单项右面都有小箭头指示
在设置菜单时,在设计窗口中的每一步修改都能反映到预览窗口中,随时可以检查级别关系是否正确。如果发生顺序或者级别错误,可以用鼠标选中错误菜单项(不要使菜单项处于编辑状态),然后直接拖动到正确的位置即可。在菜单项中输入内容时,有两个字符具有特殊的含义,“-”可以创建菜单项之间的分隔线,“...”表示该菜单项可以弹出一个属性对话窗口。另外,弹出式菜单弹出的是某个下拉菜单或者某个级联菜单,也可以单独设计弹出式菜单,和下拉式菜单的设计没有什么区别。
【属性】
▲Name
在该属性框中为菜单项命名。缺省菜单的名称都是m_加上菜单项的内容。在脚本中引用菜单项时要从最开始一级加圆点符号逐级引用,比如要引用“文件”下的菜单项“打开”,可以使用“m_文件. m_打开”来引用。
▲Text
该属性就是在创建菜单时每个菜单项中输入的内容。运行时的整个菜单内容就是该属性的内容。
▲MicroHelp
如果菜单挂接在MDIHelp!类型的窗口中,运行状态下,当鼠标指针指向菜单项或者工具条中的小图标时,该文字可以显示在MDI窗口底部的状态条中
▲ToolbarItemText
可以定义显示在工具条小图标中的文字,以对小图标的功能有简短的描述。当鼠标指针指向工具条中的小图标时,显示此文字
▲ToolbarItemName
该属性用来定义工具条小图标上显示的图形。可以使用PowerBuilder提供的很多小图标,也可以自定义。
▲ToolbarItemDownName
菜单选中时,即checked时,按下的图标,一般与ToolBarItemName相同
▲ToolbarItemVisible
显示或隐藏工具条图标
▲ToolbarItemDown
菜单选中,即checked,图标按下
▲ToolbarItemSpace
指定该图标和前面图标之间的间距。一般都是0,只有不同组的图标之间才有必要设置间距。
▲ToolbarItemBarIndex
指定图标显示在哪一行的工具条上。该属性相同的图标显示在同一行,只要相同就可以,并不要求该属性取值为连续的数字。
▲ToolbarItemOrder
指定图标显示顺序,此值越大越靠后,默认0时按照菜单中的顺序显示。
如在菜单file下后exit,需要把exit图标放在最后,则其他都为0,exit设为1就可以了
▲ShortCutKey
该属性和ShortCut Alt,ShortCut Control和ShortCut ShIft三个选项配合使用来定义菜单项的快捷键。
其他的属性使用得比较少。
〖菜单编程〗
●为“退出”菜单项编写脚本
在菜单中指代词parentwindow是指菜单挂接的窗口,比直接使用窗口的名称有更好的通用性。所以在“退出”菜单项的Clicked事件中可以这样编写脚本:close(parentwindow)
●选中某个菜单项
可以使用Checked标记来表示某个菜单项选中,可以在菜单项的Clicked事件中编写如下脚本来选中菜单项:
if this.checked then
this.checked = false
else
this.checked = true
end if
也可以使用函数Check和UnCheck来代替属性修改。上面的脚本可以改成:
if this.checked then
this.uncheck()
else
this.check()
end if
当菜单项选中时,菜单项的左侧有一个“√”符号,并且对应的小图标为按下状态。
●隐藏某个菜单项
要隐含某个菜单项,可以将该菜单项的Visible属性修改为False,如果该菜单项位于菜单条的最高级别上,则可以将整个下拉菜单隐含。例如,某窗口上挂接了菜单m_main,在窗口的打开事件中将菜单中的“文件”整个下拉菜单隐含,可以在该窗口的0pen事件中编写如下脚本:
m_main.m_文件.Visible = False
但是,将菜单项隐含并不能将其对应的在工具条中的小图标隐含,并且小图标的功能照样能够正常执行。要将小图标隐含,应该设置ToolBarItemVisible属性为False。例如,隐含菜单项“打开”对应的小图标,在窗口的打开事件中可以使用下面的语句:
m_main.m_文件.m_打开.ToolBarItemVisible= False
●使某个菜单项失效
将菜单项的Enabled属性置为False,即可使菜单项显示变灰而不能使用,同时对应的小图标也变灰。如果足下拉菜单则整个下拉菜单不能使用,但其下拉项目对应的小图标可以正常使用。如果是级联菜单则级联菜单不能被打开,但是级联菜单下的各个菜单项对应的小图标可以正常使用。下面是在窗口打开事件中将菜单m_main的“文件”下的m_open修改为无效的脚本:
m_main.m_文件.m_open.Enabled = False
●调整工具条的位置
如果工具条的ToolBarUserControl属性(在application中)设置为True,则用户可以在工具条上按鼠标右键弹出菜单。使用该弹出菜单可以调整工具条的显示位置。用直接拖拉的方式也可以改变工具条的显示位置。当工具条的位置发生变化时将触发窗口的ToolBarMoved事件,在该事件中可以编写脚本来判断工具条的移动情况。当该事件触发时,PB自动修改Message中的参数WordParm和LongParm使用这两个属性可以判断工具条的移动情况,属性含义如下:
Message.LongParm属性的含义:
0:移动到左侧;
1:移动到顶部;
2:移动到右侧:
3:移动到底测;
4:变为浮动显示。
Message.WordParm属性的含义:
O:FrameBar在移动;
1:SheetBar在移动。
关于工具条位置的编程一般是在窗口打开和关闭时应用。关闭对应该保存用户关于工具条的设置,以便在窗口打开时将工具条恢复到上次关闭时的状态。这些信息可以保存在应用的ini文件中,具体含义只要开发人员清楚即可,打开时按同样的含义来设置工具条的位置。如在Frame的close()事件中编程(ToolbarAlignment为窗口的属性):
choose case this.ToolbarAlignment
case AlignAtTop!
SetProfileString("C:\toolbar.ini","setup","align","1")
case AlignAtLeft!
SetProfileString("C:\toolbar.ini","setup","align","0")
case AlignAtRight!
SetProfileString("C:\toolbar.ini","setup","align","2")
case AlignAtBottom!
SetProfileString("C:\toolbar.ini","setup","align","3")
case Floating!
SetProfileString("C:\toolbar.ini","setup","align","4")
end choose
同样,在Frame的打开事件中可以根据ini文件的设置来决定工具条的显示。例如,下面的脚本在打开事件中读取ini文件中的配置来决定工具条的显示位置:
string ls_align
ls_align = ProfileString("c:\toolbar.ini","setup","align","1")
choose case ls_align
case '0'
this.ToolbarAlignment = AlignAtLeft!
case '1'
this.ToolbarAlignment = AlignAtTop!
case '2'
this.ToolbarAlignment = AlignAtRight!
case '3'
this.ToolbarAlignment = AlignAtBottom!
case '4'
this.ToolbarAlignment = Floating!
end choose
当然,也可以用同样的方法保存更多的设置,例如是否隐含工具条,是否显示文字SheetBar的显示情况等等。
●修改工具条上右键弹出菜单中的内容
应用对象的属性ToolBarUserControl控制着用户是否可以在工具条上使用右键弹出菜单,该属性缺省是True,默认为英文格式,可以修改ToolBarFrameTitle、ToolabarSheetTitle、ToolbarPopMenuText等属性换成中文字。
ToolBarFrameTitle:框架(也可理解为主菜单工具条)Frambar中文
ToolabarSheetTitle:打开sheet后的Sheetbar中文
也可以在Frame的打开事件中编写脚本实现:
GetApplication().ToolbarPopMenuText = "左侧、顶部、右侧、底部、浮动、文字、提示信息"
文字以逗号分隔,如果多了则被自动忽略。只能修改该弹出菜单中的文字,但不能修改对应各项的功能。其中函数GetApplication可以获取当前应用的句柄(handle)。也可以在Frame的打开事件中使用下面的语句来限制用户不准使用工具条上的弹出菜单:
GetApplication().ToolbarUserControl = false
●动态设置MicroHelp
使用函数SetMicroHelp可以动态改变菜单项的MicroHelp内容。该函数的语法是:
windowname.SetMicroHelp(string)
其中windowname是菜单所挂接的窗口名称,string是要设置的MicroHelp内容。函数正确执行返回1,否则返回-1,如果有参数为null则返回null。一般在菜单项的Selected事件中使用该函数。
如果在定制Frame窗口的控件中修改MicroHelp,还得在相关事件中取消MicroHelp。一般在控件的GetFocus事件中显示MicroHelp提供关于该控件的解释信息,在LoseFocus事件中将MicroHelp修改为“Ready”。
一个保存MicroHelp的好方法是使用控件的Tag属性,在窗口画板中给每个要显示MicroHelp的控件的Tag属性都指定适当的内容,然后在需要改变MicroHelp的脚本中将Tag属性作为函数SetMicroHelp的参数即可。
●使用右键弹出菜单
在RButtonDown事件下使用函数PopMenu来显示弹出试菜单。该函数的语法是:
menuname.PopMenu(xlocation,ylocation)
其中menuname是要弹出的菜单的名称,可以是某个下拉菜单中的某个下拉项目或者某个级联菜单。xlocation和ylocation是菜单显示的位置,该坐标的取值是相对于窗口而言的。通常使用函数PointerX和PointerY来获取该坐标,以便在鼠标点击的位置弹出菜单。这两个函数的语法格式相同,PointerX的格式是:
objectname.PointerX()
其中objectname是控件名称,X是鼠标点击位置和objectname左边框的距离,缺省为脚本所在的控件。在和函数PopMenu搭配使用时应该获取相对于窗口而言的坐标位置。虽然每个控件的RbuttonDown事件中都有xpos和ypos参数可用,但这都是相对于控件而言的。
也就是说除了要弹出的菜单在窗口上,一般很少用xpos和ypos。一般为menuname.PopMenu(parent.pointerX(),parent.pointerY())。
*Menu4 NewMenu
NewMenu = CREATE Menu4
NewMenu.m_language.PopMenu(PointerX(), PointerY())
NewMenu.m_language.PopMenu(w_frame.PointerX(), w_frame.PointerY())
●改变窗口中的菜单
函数ChangeMenu可以动态改变窗口的菜单。它的语法格式是:
windowname.ChangeMenu(menuname{,position})
其中,windowname是要改变菜单的窗口的名称;menuname是要挂接到窗口上的菜单的名称;position是可选参数,仅用于MDI Frame窗口中,用来指示给当前的窗口列表中追加的菜单标题的位置。缺省值为1,这时所有打开的Sheet出现在第一个菜单标题的下拉式菜单的底部。
●
隐藏和显示工具栏
windowname.ToolbarVisible = True/False
隐藏和显示文字
GetApplication().ToolbarText = True/False
隐藏和显示提示信息
GetApplication().ToolbarTips = True/False
————————————————
版权声明:本文为CSDN博主「冷-寂」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012369435/article/details/36435889