五、彈出式菜單的設(shè)計
功能:用于對窗體中某個特定區(qū)域有關(guān)的操作或選項進行控制。與下拉式菜單不同,它不需要在窗口的頂部下拉打開,可在窗口的任意位置打開。
設(shè)計分為兩步:首先用菜單編輯器建立菜單,這一步與前面介紹的基本相同,的區(qū)別是,必須把菜單名(即主菜單項)的可見屬性設(shè)置為False(子菜單項不要設(shè)置為False);第二步用PopupMenu方法彈出顯示。
PopupMenu方法用來顯示彈出菜單,語法格式為:
object.PopupMenu menuname,flags,x, y,boldcommand
其中:
Object(對象)——窗體名。
Menuname(菜單名)——指在菜單編輯器中定義的主菜單項名。
X、Y——彈出式菜單在窗體上的顯示位置的X、Y坐標(與Flags參數(shù)配合使用)。
Boldcommand——指定彈出式菜中的彈出式菜單控件的名字,用以顯示為黑體正文標題。
Flags——該參數(shù)是一個數(shù)值或符號常量,指定彈出式菜單的位置和行為,其取值分為兩組,一組用來指定菜單位置,另一組用來定義特殊的菜單行為,如下表:
指定菜單位置
定位常量 值 作用
VbPopupMenuLeftAlign 0 X坐標指定彈出式菜單的左邊界位置
VbPopupMenuCenterAlign 4 X坐標指定彈出式菜單的中間位置
VbPopupMenuRightAlign 8 X坐標指定彈出式菜單的右邊界位置
定義菜單行為
定位常量 值 作用
VbPopupMenuLeftButton 0 通過單擊鼠標左鍵選擇菜單命令
VbPopupMenuRightButton 8 通過單擊鼠標右鍵選擇菜單命令
說明:
PopupMenu方法的6個參數(shù)中,除“菜單名”外,其余參數(shù)都是可選的。當省略了“對象”時,彈出式菜單只能在當前窗體中顯示。如果需要在其它窗體中顯示彈出菜單,則必須加上窗體名。
Flags的兩組參數(shù)可以單獨使用,也可以聯(lián)合使用。當聯(lián)合使用時,每組中取一個值,兩個值相加;如果使用符號常量,則兩個值用Or連接。
X、Y分別用來指定彈出式菜單顯示位置的橫、縱坐標,如果省略,則彈出菜單在鼠標光標的當前位置顯示。
彈出式菜單的“位置”由X、Y、Flags參數(shù)共同指定。如果省略這幾個參數(shù),則在單擊鼠標右鍵彈出菜單時,鼠標光標所在位置為彈出式菜單左上角的坐標。在默認情況下,以窗體的左上角為坐標原點。如果只省略Flags參數(shù),不省略X、Y參數(shù),則X、Y為彈出式菜單左上角的坐標;如果同時使用X、Y及Flags參數(shù),則彈出菜單的位置分為一下幾種情況:
Flags=0 X、Y為彈出式菜單左上角的坐標
Flags=4 X、Y為彈出式菜單頂邊中間的坐標
Flags=8 X、Y為彈出式菜單右上角的坐標
為了顯示彈出式菜單,通常把PopupMenu方法放在MouseDown事件中,該事件響應(yīng)所有的鼠標單擊操作。按照慣例,一般通過單擊鼠標右鍵顯示彈出菜單,這可以用Button參數(shù)來實現(xiàn)。對于兩個鍵的鼠標來說,左鍵的Button參數(shù)值為1,右鍵的Button參數(shù)值為2。因此可以強制使用右鍵來響應(yīng)MouseDown事件而顯示彈出菜單:
If Button=2 Then PopupMenu 菜單名
下面舉例說明建立彈出式菜單的一般過程。
例6 建立一個彈出式菜單,用來改變文本框中字體的屬性。
步驟如下:
打開菜單編輯器,設(shè)置各菜單屬性。
標題 名稱 內(nèi)縮符號 可見性
字體格式化
粗體
斜體
下劃線
20
隸書
退出 popFormat
popBold
popItalic
popUnder
font20
fontLs
Quit 無
1
1
1
1
1
1 False
True
True
True
True
True
True
編寫窗體的MouseDown事件過程。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then '判斷所按下的是否鼠標右鍵,如果是,則用PopupMenu方法彈出菜單。
PopupMenu popFormat 'PopupMenu方法省略了對象參數(shù),指的是當前窗體。
End If
End Sub
鼠標事件:
鼠標事件除了單擊(Click)、雙擊(DbClick)事件外,還有識別按下或放開某個鼠標鍵而觸發(fā)的事件,它們是壓下鼠標事件(MouseDown)、松開鼠標事件(MouseUp)、移動鼠標光標事件(MouseMove)。3個鼠標事件具有相同的參數(shù),含義分別為:
◆Button——被按下的鼠標鍵,可取3個值1、2、4,分別表示鼠標的左鍵、右鍵和中間鍵(如果沒有或不可用,可省略)。
◆X、Y——鼠標光標當前的位置,不需要給出具體的數(shù)值,它隨鼠標光標在窗體上的移動而變化。
◆Shift——表示 Shift、Ctrl和Alt的狀態(tài)。它有8個值(0—7),分別作用如下:
0——未按轉(zhuǎn)換鍵
1——按下Shift鍵
2——按下Ctrl鍵3
3——同時按下Shift和Ctrl鍵
4——按下Alt鍵
5——按下Alt鍵和Shift鍵
6——按下Alt鍵和Ctrl鍵
7——同時按下Shift、Ctrl和Alt鍵
功能:用于對窗體中某個特定區(qū)域有關(guān)的操作或選項進行控制。與下拉式菜單不同,它不需要在窗口的頂部下拉打開,可在窗口的任意位置打開。
設(shè)計分為兩步:首先用菜單編輯器建立菜單,這一步與前面介紹的基本相同,的區(qū)別是,必須把菜單名(即主菜單項)的可見屬性設(shè)置為False(子菜單項不要設(shè)置為False);第二步用PopupMenu方法彈出顯示。
PopupMenu方法用來顯示彈出菜單,語法格式為:
object.PopupMenu menuname,flags,x, y,boldcommand
其中:
Object(對象)——窗體名。
Menuname(菜單名)——指在菜單編輯器中定義的主菜單項名。
X、Y——彈出式菜單在窗體上的顯示位置的X、Y坐標(與Flags參數(shù)配合使用)。
Boldcommand——指定彈出式菜中的彈出式菜單控件的名字,用以顯示為黑體正文標題。
Flags——該參數(shù)是一個數(shù)值或符號常量,指定彈出式菜單的位置和行為,其取值分為兩組,一組用來指定菜單位置,另一組用來定義特殊的菜單行為,如下表:
指定菜單位置
定位常量 值 作用
VbPopupMenuLeftAlign 0 X坐標指定彈出式菜單的左邊界位置
VbPopupMenuCenterAlign 4 X坐標指定彈出式菜單的中間位置
VbPopupMenuRightAlign 8 X坐標指定彈出式菜單的右邊界位置
定義菜單行為
定位常量 值 作用
VbPopupMenuLeftButton 0 通過單擊鼠標左鍵選擇菜單命令
VbPopupMenuRightButton 8 通過單擊鼠標右鍵選擇菜單命令
說明:
PopupMenu方法的6個參數(shù)中,除“菜單名”外,其余參數(shù)都是可選的。當省略了“對象”時,彈出式菜單只能在當前窗體中顯示。如果需要在其它窗體中顯示彈出菜單,則必須加上窗體名。
Flags的兩組參數(shù)可以單獨使用,也可以聯(lián)合使用。當聯(lián)合使用時,每組中取一個值,兩個值相加;如果使用符號常量,則兩個值用Or連接。
X、Y分別用來指定彈出式菜單顯示位置的橫、縱坐標,如果省略,則彈出菜單在鼠標光標的當前位置顯示。
彈出式菜單的“位置”由X、Y、Flags參數(shù)共同指定。如果省略這幾個參數(shù),則在單擊鼠標右鍵彈出菜單時,鼠標光標所在位置為彈出式菜單左上角的坐標。在默認情況下,以窗體的左上角為坐標原點。如果只省略Flags參數(shù),不省略X、Y參數(shù),則X、Y為彈出式菜單左上角的坐標;如果同時使用X、Y及Flags參數(shù),則彈出菜單的位置分為一下幾種情況:
Flags=0 X、Y為彈出式菜單左上角的坐標
Flags=4 X、Y為彈出式菜單頂邊中間的坐標
Flags=8 X、Y為彈出式菜單右上角的坐標
為了顯示彈出式菜單,通常把PopupMenu方法放在MouseDown事件中,該事件響應(yīng)所有的鼠標單擊操作。按照慣例,一般通過單擊鼠標右鍵顯示彈出菜單,這可以用Button參數(shù)來實現(xiàn)。對于兩個鍵的鼠標來說,左鍵的Button參數(shù)值為1,右鍵的Button參數(shù)值為2。因此可以強制使用右鍵來響應(yīng)MouseDown事件而顯示彈出菜單:
If Button=2 Then PopupMenu 菜單名
下面舉例說明建立彈出式菜單的一般過程。
例6 建立一個彈出式菜單,用來改變文本框中字體的屬性。
步驟如下:
打開菜單編輯器,設(shè)置各菜單屬性。
標題 名稱 內(nèi)縮符號 可見性
字體格式化
粗體
斜體
下劃線
20
隸書
退出 popFormat
popBold
popItalic
popUnder
font20
fontLs
Quit 無
1
1
1
1
1
1 False
True
True
True
True
True
True
編寫窗體的MouseDown事件過程。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then '判斷所按下的是否鼠標右鍵,如果是,則用PopupMenu方法彈出菜單。
PopupMenu popFormat 'PopupMenu方法省略了對象參數(shù),指的是當前窗體。
End If
End Sub
鼠標事件:
鼠標事件除了單擊(Click)、雙擊(DbClick)事件外,還有識別按下或放開某個鼠標鍵而觸發(fā)的事件,它們是壓下鼠標事件(MouseDown)、松開鼠標事件(MouseUp)、移動鼠標光標事件(MouseMove)。3個鼠標事件具有相同的參數(shù),含義分別為:
◆Button——被按下的鼠標鍵,可取3個值1、2、4,分別表示鼠標的左鍵、右鍵和中間鍵(如果沒有或不可用,可省略)。
◆X、Y——鼠標光標當前的位置,不需要給出具體的數(shù)值,它隨鼠標光標在窗體上的移動而變化。
◆Shift——表示 Shift、Ctrl和Alt的狀態(tài)。它有8個值(0—7),分別作用如下:
0——未按轉(zhuǎn)換鍵
1——按下Shift鍵
2——按下Ctrl鍵3
3——同時按下Shift和Ctrl鍵
4——按下Alt鍵
5——按下Alt鍵和Shift鍵
6——按下Alt鍵和Ctrl鍵
7——同時按下Shift、Ctrl和Alt鍵