一、用户菜单设计
菜单是图形用户界面应用程序的重要元素,是执行用户旨意的直接界面。MapInfo菜单由菜单栏、菜单和菜单项三部分组成。菜单栏是MapInfo工作区域顶部的水平条,菜单是菜单栏上可以下拉的命令列表,菜单项是出现在菜单列表中的各项命令。利用MapBasic提供的语句和函数,可以修改MapInfo标准菜单或建立全新的用户自定义菜单。
1.添加菜单项
向已存在的菜单中增加菜单项,可以使用Alter Menu语句。其语法形式为:
Alter Menu{menuname|ID menu_id}
Add menudef[,menudef…]
newmenuitem
[ID menu_item_id]
[HelpMsg help]
[{Calling handler|As menuname}]
其中,menuname为已存在的菜单名,menu_id为标准菜单的ID号,newmenuitem为一个字符串,表示添加到指定菜单中的菜单项,menu_item_id设置了自定义菜单项识别号,help为一个字符串,当菜单项明亮化时显示的状态条信息,handler表示调用该菜单项执行的操作,可以是一个子过程、标准的MapInfo命令或是通过调用OLE或DDE处理菜单事件的特殊语句。
下列语句加一菜单项到"File"菜单:
Alter Menu"File"Add
"Special"Calling sub_procedure_name
2.删除菜单项
使用Alter Menu语句可以向已存在的菜单中删除菜单项。其语法形式为:
Alter Menu{menuname|ID menu_id}
Remove{handler|submenuname|ID menu_item_id}
[,{handler|submenuname|ID menu_item_id}…]
其中,handler为子过程名或标准的MapInfo命令代码,submenuname为被删除的子菜单名。
下面的语句从"Edit"菜单删除"Undo"菜单项:
Alter Menu ID 2 Remove M_EDIT_UNDO
3.创建新菜单
使用Create Menu语句可以创建一个全新的菜单。其语法形式为:
Create Menu newmenuname[ID menu_id]As
menuitem[ID menu_item_id][HelpMsg help]{Calling handler|As menuname}
[,menuitem…]
其中,newmenuname为菜单名,menuitem为菜单项,menuname为下一级子菜单名。
如果Create Menu语句的newmenuname与已有的MapInfo菜单名(如File)相同,则语句重新定义下拉式菜单,否则Create Menu建立一个完整的新菜单。
Create Menu语句并不会显示新建菜单,新菜单必须在Alter Menu Bar或Create Menu Bar语句执行后才显示。但是,如果Create Menu修改了已存在菜单,而这个已有菜单已经是菜单条的一部分,则修改后即可显示。
在新菜单里包含分级菜单,应该使用As子句。As子句后的下一级子菜单名必须是已定义的菜单。
下列语句建立了一个SpacialQuery菜单,然后把这个菜单作为Query菜单的子菜单:
Create Menu"SpacialQuery"As
"PointQuery"Calling pointquery_sub
"RectQuery"Calling rectquery_sub
Create Menu"Query"As
"AttributeQuery"Calling attributequery_sub
"SpacialQuery"As"SpacialQuery"
4.修改菜单项
修改一个菜单项可以使用Alter Menu Item语句,通过选用相应的子句,可以对一个菜单项进行可用或不可用、可复选或不可复选以及重命名等操作。Alter Menu Item语句的语法形式为:
Alter Menu Item{handler|ID menu_item_id}
{[Check|Uncheck]|
[Enable|Disable]|
[Text itemname]|
[Calling handler|As menuname]}
其中,handler为子过程名或标准的MapInfo命令代码,menu_item_id为菜单项标识,itemname为菜单项新的名称,menuname为一个已存在菜单名。
Alter Menu Item语句可修改菜单的一个或多个菜单项。如果Alter Menu Item语句包括处理过程名,则MapInfo改变所有调用该过程的菜单项;如果语句包括ID子句,则MapInfo只修改menu_item_id指定的菜单项。
Check子句和Uncheck子句控制是否在菜单上显示选中标记。Disable和Enable子句控制菜单项可用与不可用。Calling子句为菜单项定义一个处理程序,如果用户选择该菜单项,MapInfo则调用指定的处理程序。
5.重新定义菜单栏
从菜单栏中增加或删除菜单可以使用Alter Menu Bar语句,该语句的语法形式为:
Alter Menu Bar{Add|Remove}
{menuname|ID menu_id}
[,{menuname|ID menu_id}…]
其中,menuname为有效的菜单名,menu_id为菜单的ID标识。
下列语句首先将Query菜单从菜单栏中删除,然后又将它加入到菜单栏中(Query菜单此时在菜单栏的右端):
Alter Menu Bar Remove"Query"
Alter Menu Bar Add"Query"
如果想重新安排菜单栏的顺序,或创建一个全新的菜单栏,可以使用Create Menu Bar语句。如:Create Menu Bar As"File","Edit","Query","Help"。
要恢复MapInfo标准菜单,使用Create Menu Bar As Default语句即可。
6.定义快捷键和热键
快捷键是直接在键盘上操作菜单或菜单项的组合键。快捷键用带下画线的字母表示。要给一个菜单项定义快捷键,在它的字母前直接放置一个&符号即可。下例将"C"键定义为"TextBox"菜单项的快捷键,当"TextBox"菜单被激活时,直接可以用C键来选择该菜单项。
Create Menu"TextBox"As
"&Create Text Boxes…"Calling creat_sub
热键是让用户在不激活菜单的情况下,就可以执行菜单命令的组合键。下面的语句给Open菜单项定义了热键(Ctrl-O):
Create Menu"File"As
"Open"+Chr$(9)+"Ctrl+O/W^O"Calling M_FILE_OPEN
其中,Chr$(9)表示插入一个tab字符,“/W”表示这是Windows版本的MapInfo热键代码,“^”表示Ctrl键,整个“/W^O”是MapInfo的热键代码,表示“Ctrl+O”。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。