hillyspring
銀牌會(huì)員
發(fā)短消息
關(guān)注Ta
積分 3152
帖子 435
威望 5490 個(gè)
禮品券 406 個(gè)
專家指數(shù) 563
注冊(cè) 2006-5-9 專業(yè)方向
2G4G優(yōu)化
回答問(wèn)題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
|
大
中
小
發(fā)表于 2011-11-27 19:48:56
只看樓主
|
周日好忙哦,上午健步,下午寫周報(bào),還要看看周六參數(shù)策略之后的全網(wǎng)KPI變化,吃了晚飯散步了一個(gè)小時(shí),買了點(diǎn)吃的,終于有空完MAPBASIC了。
今天,就從用戶菜單開(kāi)始學(xué)起吧,這是最基本的,而且是看得見(jiàn)的東西,效果容易體現(xiàn)。
菜單是圖形用戶界面中最重要的元素,MapBasic讓你能夠控制MapInfo菜單結(jié)構(gòu)的
每一個(gè)方面。
1.菜單的基本元素
MapInf0菜單結(jié)構(gòu)包括下列基本元素(見(jiàn)圖):
[attach]206908[/attach]
圖
MapInfo的菜單結(jié)構(gòu)
菜單欄(Menu Bar)是橫貫MapInfo工作區(qū)域頂部的水平條。默認(rèn)的Mgplnfo菜單欄包括[文件]、[編輯]、[對(duì)象]、[查詢]等等。
菜單Menu)在菜單欄上可以下拉的命令列表,例如大多數(shù)應(yīng)用程序都包括[文件]菜單和[編輯]菜單。
·菜單頂(Menu Item)是出現(xiàn)在菜單上的一個(gè)個(gè)相互獨(dú)立的命令。例如:[文件]菜單一般包括以下菜單項(xiàng):[打開(kāi)]、[關(guān)閉]、[保存]和[打印]。
菜單、菜單欄、菜單項(xiàng)是相互聯(lián)系的。每個(gè)菜單都是菜單項(xiàng)的集合。而菜單欄又是一個(gè)或多個(gè)菜單的集合。
2.增加新的菜單項(xiàng)
向己存在的菜單增加菜單項(xiàng)可以用Alter Menu語(yǔ)句,例如下面的例子是向[查詢]菜單增加兩個(gè)菜單項(xiàng)(一個(gè)叫[年度報(bào)告],另一個(gè)叫[季度報(bào)告]):
Alter Menu “ 查詢”
Add
“ 年度報(bào)告” Calling report_sub
“ 季度報(bào)告” ,Calling report_sub_q
對(duì)于每一個(gè)用戶定義菜單項(xiàng),Alter Menu語(yǔ)句都指定一個(gè)Calling于句,這個(gè)子句指定當(dāng)用戶選擇這個(gè)菜單項(xiàng)時(shí),什么事情將會(huì)發(fā)生。在上例中,如果用戶選擇了菜單項(xiàng)[年度報(bào)告],MapInfo將調(diào)用子過(guò)程report_sub;如果用戶選擇了菜單項(xiàng)[季度報(bào)告],MapInfo將調(diào)用于過(guò)程report_sub_q,當(dāng)然這兩個(gè)過(guò)程必須在同一個(gè)應(yīng)用程序的其他地方已經(jīng)定義。用戶也可創(chuàng)建一些菜單項(xiàng),它們調(diào)用標(biāo)準(zhǔn)MapInfo命令,而不是調(diào)用MapBasic于過(guò)程。在MapInfo中,定義文件menu.def包含所有菜單代碼的定義列表(如M_FILE_NEW和M_EDIT_UNDO)。這個(gè)文件中的每一項(xiàng)定義對(duì)應(yīng)一個(gè)MapInfo的標(biāo)準(zhǔn)菜單命令(例如M_EDIT_UNDO對(duì)應(yīng)[編輯]菜單中[轍消]命令)。如果一個(gè)菜單項(xiàng)的Calling子句指定了一個(gè)menu.def中的菜單代碼,則當(dāng)用戶選擇了一個(gè)菜單項(xiàng)時(shí),MapInfo調(diào)用相應(yīng)的MapInfo命令。例如:
Alter Menu
“ 查詢”
Add
“ 顏色代碼地臥圖” ,Calling M_MAP_HEMATIC
3.移去舊的菜單項(xiàng)
一個(gè)應(yīng)用程序可以移去單獨(dú)的菜單項(xiàng)。下面的語(yǔ)句是從MapInfo的[表]>[表維護(hù)]菜單中移去[刪除表]項(xiàng):
Alter Menu“表維護(hù)”Remove M_TABLE_DELETE
這里的標(biāo)識(shí)符M_TABLE DELETE是在菜單定義文件menu.def中定義的代碼。
如果想從菜單中移去多個(gè)菜單項(xiàng),有兩種方法:一種方法是把所有你想移去的菜單項(xiàng)的列表放在Alter Menu … Remove語(yǔ)句中:另一種方法是用Create Menu … 語(yǔ)句重新定義一個(gè)菜單,它只包括你想要的那些菜單項(xiàng),如下面的語(yǔ)句創(chuàng)建了一個(gè)新版本的[地圖]菜單,它僅包括三個(gè)菜單項(xiàng)([圖層控制]、[前一視圖]和[選項(xiàng)])
Create Menu
” 地圖” As
“ 圖層控制” Calling
M_MAP_LAYER_CONTROL,
“ 前一視圖”
Calling
M_MAP_PREVIOUS,
“ 選項(xiàng)”
Calling M_MAP_OPTIONS
4.創(chuàng)建新的菜單
要?jiǎng)?chuàng)建一個(gè)全新的菜單可以使用Create Menu語(yǔ)句。例如:
Create
Menu
“ TextBox”
As
“ &Create Text Boxes ...”
Ca11ing create_sub,
“ Close TextBox”
Calling bye,
“ About TextBox…”
Calling about
建好的菜單需要把它加到菜單欄上才能看得見(jiàn),可以用下面的A1ter Menu Bar語(yǔ)句:
Alter Menu Bar
Add
“ TexBox”
事實(shí)上,不斷地往菜單欄上增加新的菜單是不現(xiàn)實(shí)的,因?yàn)椴藛螜谏鲜S嗟目臻g是有限的,不久整個(gè)菜單欄就會(huì)被占滿。我們可以用另一種技術(shù),即把一個(gè)菜單作為另一個(gè)菜單的子菜單。例如,前面的例子中建立了一個(gè)TextBox菜單,可以把這個(gè)菜單作為[工具]菜單下的一個(gè)子菜單,請(qǐng)看下面的語(yǔ)句:
Alter Menu
“ 工具” Add
“ (-“ ,
‘ 插入分隔線
“ TextBox”
As
“ TextBox”
5.修改一個(gè)菜單項(xiàng)
MapBasic語(yǔ)言可以對(duì)一個(gè)單獨(dú)的菜單項(xiàng)進(jìn)行下列操作:
·灰化一個(gè)菜單項(xiàng),以使用戶不能選擇該菜單項(xiàng)。
·使一個(gè)灰化的菜單項(xiàng)恢復(fù)正常。
·可以改變菜單項(xiàng)的名字。
要修改一個(gè)菜單項(xiàng)可以用Alter Menu Item語(yǔ)句,該語(yǔ)句有幾個(gè)可選的子句Enable、Disable、Check、UnCheck等,使用這些子句可以實(shí)現(xiàn)你要的修改。下面的例子是先建立一個(gè)用戶菜單:
Create Menu
“ OverView”
As
“ &Setup OverView” Calling OverView,
“ (Suspend Tracking”
Calling
MenuToggler,
“ (Pick Frame Style”
Calling PickFrame,
“ (-“ ,
“ Close OverView”
Calling
Bye,
“ (-“ ,,
“ Abut Overview”
Calling About
其中的[Pick Frame Style]菜單項(xiàng)初始是不可選的(灰化的),這是因?yàn)樵诙x該菜單項(xiàng)時(shí),在菜單項(xiàng)名字的每一個(gè)字母前加了一個(gè)字符“(”,在必要的時(shí)候要使該菜單項(xiàng)可選,則可用下面的語(yǔ)句:
Alter Menu Item
PickFrame
Enable
如果又要使該菜單項(xiàng)不可選,可用下面的語(yǔ)句:
Alter Menu Item
PickFrame
Disable
你同樣可以用Alter Menu Item語(yǔ)句去改變一個(gè)菜單項(xiàng)的名字。例如,上面例子的Ovewiew菜單中有一個(gè)名叫[Supend Tracking]的菜單項(xiàng),如果想把該菜單項(xiàng)的名字改為[Resume Tracking]可以這樣做:
Alter Menu
Item MenuToggler Text
“ Resume Tracking”
6.重定義菜單欄
從菜單欄中移去或增加菜單可以用下面的語(yǔ)句:
Alter Menu Bar Remove
“ 查詢”
Alter Menu Bar Add
“ 地圖” , “ 瀏覽”
上面第一個(gè)語(yǔ)句是從菜單欄上移去[查詢]菜單,而第二個(gè)語(yǔ)句是在菜單欄的右邊增加兩個(gè)菜單[地圖]和[瀏覽],這兩個(gè)MapInfo標(biāo)準(zhǔn)菜單一般不在菜單欄上顯示,只有當(dāng)相應(yīng)的地圖窗口或?yàn)g覽窗口被打開(kāi)時(shí),它們才出現(xiàn)在菜牧欄上。在菜單欄上增加一個(gè)菜單,總是放在最右邊。有時(shí)我們想把菜單插入到原有的菜單中間,如想把[工具]菜單插入到[窗口]
菜單的左邊可以用下面的語(yǔ)句:
Alter
Menu Bar Remove ID6, ID7
Alter
Menu Bar Add
“ 工具” , ID6, ID7
這里第一個(gè)語(yǔ)句是先移去菜單欄上的[窗口]菜單(ID號(hào)為6)和[幫助]菜單(ID號(hào)為7),第二個(gè)語(yǔ)句是在菜單欄上增加三個(gè)菜單[工具],[窗口],[幫助]。這樣就完成了菜單的插入。如果你想完全控制菜單欄上各菜單的頃序,或者你想自已創(chuàng)建一個(gè)全新的菜單欄,那么你可以直接用Create Menu Bar語(yǔ)句,如:
Create Menu Bar
As
“ 文件” , “ 編輯” , “ 地圖” , “ 查詢” , “ 幫助”
Create Menu Bar As Default語(yǔ)句可以使菜單欄恢復(fù)到MapInfo標(biāo)準(zhǔn)定義狀態(tài)。
7.快捷鍵和熱鍵的定義
快捷鍵就是不用鼠標(biāo)而直接使用鍵盤就可以讓用戶訪問(wèn)菜單或菜單項(xiàng)的組合鍵。典型的快捷鍵是用菜單或菜單項(xiàng)名中帶下劃線的字母來(lái)表示的,例如在windows中激活MapInfo的[文件]菜單的快捷鍵是<A1t—F>。當(dāng)想用帶下劃線的字母來(lái)表示一個(gè)菜單項(xiàng)的快捷鍵時(shí),可以直接在你想定義的快捷鍵的字母前加上字符(&),例如:
Create
Menu
“ TextBox”
As
“ &Create TextBoxes”
Calling create_sub
......
這樣C就是該菜單項(xiàng)的快捷鍵,當(dāng)TextBox菜單被激活時(shí),你直接可以用C鍵來(lái)選擇該菜單項(xiàng)。
熱鍵是讓用戶在不激活菜單的情況下,就可以執(zhí)行菜單命令的組合鍵?旖萱I是用鍵盤來(lái)使用菜單,而熱鍵是可以完全避免使用菜單。下面的程序是給一個(gè)用戶菜單項(xiàng)定義了一個(gè)熱鍵(Ctrl—Z):
Alter Menu
“ 查詢”
Add
“ 新報(bào)告” +Chr&(9)+” Ctrl-Z/W^%122”
Calling
new_sub
這里Chr$(9)表示插入一個(gè)tab字符,/w^%122是MapInfo的熱鍵代碼,其中/w表示這是Windows版本的MapInfo熱鍵代碼。” ^” 表示Ctrl鍵,%122指的是字母“Z”(122是字母“Z”的ASCII碼).
----------------------------------------------------
菜單的基本情況已經(jīng)介紹完了,那么下面我就開(kāi)始自己動(dòng)手來(lái)制作一個(gè)新的菜單。
我想制作一個(gè)名字為NSN的菜單,里面有三項(xiàng)
分別為
Create Text Boxes...
Close TextBox
About TextBox
然后給第一項(xiàng)一個(gè)快捷鍵,為SHIFT+Z
思路已經(jīng)完成,現(xiàn)在開(kāi)始正式編程了
先建立一個(gè)新菜單,NSN,把子項(xiàng)加進(jìn)去
create menu "NSN" as
"Create Text Boxes...",
"Close TextBox",
"About TextBox"
然后我們給第一項(xiàng)一個(gè)快捷鍵,為shift+z
代碼如下:
create menu "NSN" as
"Create Text Boxes..." + Chr$(9) + "shift-Z /W#z",
"Close TextBox",
"About TextBox"
這里重點(diǎn)講一下快捷鍵的設(shè)定:
/WZ
就是快捷鍵為Z
/W#Z就是快捷鍵為SHIFT+Z
/W@Z就是快捷鍵為ALT+Z
/W^Z就是快捷鍵為CRTL+Z
我為什么選擇
shift呢,應(yīng)為MAP默認(rèn)的很多快捷鍵就是CRTL的,為了避免不必要的沖突,我選擇用shift做為快捷鍵。
快捷鍵加好了,現(xiàn)在把NSN的菜單加到菜單一欄中去,代碼如下:
alter menu bar add
"NSN"
create menu "NSN" as
"Create Text Boxes..." + Chr$(9) + "shift-Z /W#z",
"Close TextBox",
"About TextBox"
[attach]206909[/attach]
好了,現(xiàn)在所有的代碼都已經(jīng)完成了,對(duì)代碼編譯后生成MBX文件,導(dǎo)入map中去,
效果如下
[attach]206907[/attach]
效果如預(yù)期,出現(xiàn)了一個(gè)新菜單NSN,里面有三項(xiàng),而且快捷鍵為SHIFT+Z。
今天就到這里了,我去吃橘子了。水果有益健康
[ 本帖最后由 hillyspring 于 2011-11-27 22:34 編輯 ]
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書》
2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21》
3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書》
4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書》》
5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5G NTN技術(shù)白皮書》
6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解》
7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書》
8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1》
| |