PB中的菜單屬性及使用

菜單條-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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章