Postup:
Založte nový
projekt, vložte do něj modul a formulář. Do formuláře připojte dvě
tlačítka (cmdSplit1 a cmdSplit2) a vytvořte menu s jakýmkoliv počtem
položek. Pojmenujte pole položek mnuOptions a index první položky
nastavte na 0.
Nyní nadeklarujte v modulu následující:
Public Type
MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Public Declare
Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" (ByVal
hMenu As Long) As Long
Public Declare Function GetSubMenu Lib "user32" (ByVal
hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function GetMenuItemInfo Lib "user32" Alias
"GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b
As Boolean, lpmii As MENUITEMINFO) As Long
Public Declare Function SetMenuItemInfo Lib "user32" Alias
"SetMenuItemInfoA" (ByVal hMenu As Long, ByVal uItem As Long,
ByVal fByPosition As Long, lpmii As MENUITEMINFO) As Long
Public Const MIIM_STATE
= &H1
Public Const MIIM_ID = &H2
Public Const MIIM_SUBMENU = &H4
Public Const MIIM_CHECKMARKS = &H8
Public Const MIIM_TYPE = &H10
Public Const MIIM_DATA = &H20
Public Const MFT_RADIOCHECK = &H200&
Public Const RGB_STARTNEWCOLUMNWITHVERTBAR = &H20&
Public Const RGB_STARTNEWCOLUMN = &H40&
Public Const RGB_EMPTY = &H100&
Public Const RGB_VERTICALBARBREAK = &H160&
Public Const RGB_SEPARATOR = &H800&
Public Const MFT_STRING = &H0&
* každá
deklarace musí být celá na samostatném řádku
Do formuláře, na událost
Click tlačítka cmdSplit1 vložte následující kód:
Private Sub
cmdSplit1_Click()
'Rozdělí menu před
poslední položkou (mnuItemCount - 1)
Dim r
As Long
Dim hSubMenu As Long
Dim mnuItemCount As Long
Dim mInfo As MENUITEMINFO
hSubMenu = GetSubMenu(GetMenu(Me.hWnd), 0)
mnuItemCount = GetMenuItemCount(hSubMenu)
mInfo.cbSize = Len(mInfo)
mInfo.fMask = MIIM_TYPE
mInfo.fType = MFT_STRING
mInfo.dwTypeData = Space$(256)
mInfo.cch = Len(mInfo.dwTypeData)
r = GetMenuItemInfo(hSubMenu, mnuItemCount - 1,
True, mInfo)
mInfo.fType = RGB_STARTNEWCOLUMNWITHVERTBAR
mInfo.fMask = MIIM_TYPE
r = SetMenuItemInfo(hSubMenu, mnuItemCount - 1,
True, mInfo)
End Sub
Do formuláře, na událost
Click tlačítka cmdSplit2 vložte následující kód:
Private Sub
cmdSplit2_Click()
'Rozdělí menu do dvou
stejných sloupců
Dim r
As Long
Dim hSubMenu As Long
Dim mnuItemCount As Long
Dim mInfo As MENUITEMINFO
Dim pad As Long
hSubMenu = GetSubMenu(GetMenu(Me.hWnd), 0)
mnuItemCount = GetMenuItemCount(hSubMenu)
mnuItemCount Mod 2 <> 0 Then pad = 1
mInfo.cbSize = Len(mInfo)
mInfo.fMask = MIIM_TYPE
mInfo.fType = MFT_STRING
mInfo.dwTypeData = Space$(256)
mInfo.cch = Len(mInfo.dwTypeData)
r = GetMenuItemInfo(hSubMenu, (mnuItemCount \ 2) +
pad, True, mInfo)
mInfo.fType = RGB_STARTNEWCOLUMNWITHVERTBAR
mInfo.fMask = MIIM_TYPE
r = SetMenuItemInfo(hSubMenu, (mnuItemCount \ 2) +
pad, True, mInfo)
End Sub
|