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