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