Membuat menu dengan 4 style

Posted by Kamarudin • 4 minute read • Comments

Melengkapi koleksi artikel-artikel saya tentang membuat menu alternatif di VB, kali ini kita akan membuat tampilan menu seperti berikut :

Tujuan saya membuat artikel ini adalah agar Anda semakin bingung menentukan pilihan membuat menu alternatif dan akhirnya back to basic menggunakan menu editor :grin: he he he just kidding.

Untuk membuat menu dengan 4 style diatas kita akan menggunakan komponen vbAccelerator CommandBar Control dan library pendukung VB6 SSubTmr, download dan ekstrak ke dua komponen tersebut trus dicopykan ke folder Windows\System32 dan jangan lupa diregistrasikan dengan perintah regsvr32.

Membuat menu dengan vbAccelerator CommandBar Control sedikit berbeda dengan komponen VBSmart Menu XP dan vbAccelerator VB6 Explorer Bar.

Adapun urutan membuat menu dengan komponen vbAccelerator CommandBar Control adalah sebagai berikut :

Gimana? Apakah Anda jadi teringat akan sesuatu ? Yaph Anda benar :blush: langkah-langkahnya mirip coding menu di java menggunakan komponen swing (JMenuBar, JMenu dan JMenuItem)

Oke kita langsung saja mencoba untuk mempraktikkannya :

  1. Buat project baru kemudian tambahkan komponen dan referensi berikut :

  2. Masukkan komponen vbAccelerator CommandBar Control dan ImageList ke form

    khusus untuk komponen ImageList tambahkan beberapa icon dan jangan lupa mengeset keynya

1. Membuat Menu Bar

Dim objMenuBar  As cCommandBar
Dim objMenu     As cCommandBarButtons

With cmdBar(0)
    Set objMenuBar = .CommandBars.Add("MenuBar")
    Set objMenu = objMenuBar.Buttons
End With

2. Membuat Menu

Untuk membuat menu kita membutuhkan prosedur berikut :

Private Sub addMenu(ByVal cmdBar As vbalCommandBar, ByVal objMenu As cCommandBarButtons, ByVal menuName As String, ByVal menuCaption As String, Optional showCaptionInToolbar As Boolean = True)

    Dim btn     As cButton

    Set btn = cmdBar.Buttons.Add(menuName, , menuCaption)
    btn.showCaptionInToolbar = showCaptionInToolbar
    objMenu.Add btn
End Sub

3. Membuat Menu Item

Untuk membuat menu item/sub menu kita membutuhkan prosedur berikut :

Private Sub addMenuItem(ByVal cmdBar As vbalCommandBar, ByVal objMenuItem As cCommandBarButtons, ByVal menuName As String, ByVal menuCaption As String, _
                        Optional iconIndex As Long = -1, Optional buttonStyle As EButtonStyle = eNormal, Optional shortcutKey As KeyCodeConstants, Optional enabled As Boolean = True, Optional selected As Boolean = False)

    Dim btn     As cButton

    Dim i       As Long
    Dim n       As Long

    If buttonStyle = eSeparator Then
        n = 1
        For i = 1 To cmdBar.Buttons.Count
            If InStr(1, cmdBar.Buttons(i).key, "mnuSpr", vbTextCompare) > 0 Then n = n + 1
        Next i

        menuName = "mnuSpr" & n
        menuCaption = ""
    End If

    Set btn = cmdBar.Buttons.Add(menuName, iconIndex, menuCaption, buttonStyle, , shortcutKey)
    btn.enabled = enabled
    btn.Checked = selected

    objMenuItem.Add btn
End Sub

Adapun kode untuk menghandle menu yang diklik adalah sebagai berikut :

Private Sub cmdBar_ButtonClick(index As Integer, btn As vbalCmdBar6.cButton)
    Select Case btn.key
        Case "mnuNew": 'TODO : something here
        Case "mnuOpen": 'TODO : something here
        Case "mnuClose": 'TODO : something here
        Case "mnuSave": 'TODO : something here
        Case "mnuSaveAs": 'TODO : something here
        Case "mnuPrintPreview": 'TODO : something here
        Case "mnuPrint": 'TODO : something here
        Case "mnuMailRecipient": 'TODO : something here
        Case "mnuMailRecipientReview": 'TODO : something here
        Case "mnuOnlineMeetingParticipant": 'TODO : something here
        Case "mnuFaxRecipient": 'TODO : something here
        Case "mnuMicrosoftPowerPoint": 'TODO : something here
        Case "mnuExit": End

        Case "mnuStyle1": cmdBar(0).Style = eOfficeXP
        Case "mnuStyle2": cmdBar(0).Style = eOffice2003
        Case "mnuStyle3": cmdBar(0).Style = eMoney
        Case "mnuStyle4": cmdBar(0).Style = eComCtl32
    End Select
End Sub

dan ini adalah sisa source codenya :

Private Function getIconIndex(ByVal key As String) As Long
    getIconIndex = ImageList1.ListImages.Item(key).index - 1
End Function

Public Sub createCommandBars()
    Dim objMenuBar          As cCommandBar
    Dim objMenuBarItem      As cCommandBar

    Dim objMenuBarSendTo    As cCommandBar

    Dim objMenu             As cCommandBarButtons
    Dim objMenuItem         As cCommandBarButtons
    Dim objMenuItemSendTo   As cCommandBarButtons

    Dim menuName            As String

    With cmdBar(0)
        '1. MEMBUAT MENU BAR
        Set objMenuBar = .CommandBars.Add("MenuBar") 'MENU BAR UNTUK MENAMPUNG MENU UTAMA. EX : MENU FILE DAN MENU STYLE MENU
        Set objMenu = objMenuBar.Buttons

        '2. MEMBUAT MENU/MAIN MENU (EX. FILE, STYLE MENU)
        menuName = "mnuFile"
        Call addMenu(cmdBar(0), objMenu, menuName, "File")
        Set objMenuBarItem = .CommandBars.Add(menuName)
        .Buttons(menuName).Bar = objMenuBarItem 'MENGAITKAN MENU FILE KE MENU BAR

        '3. MEMBUAT MENU ITEM/SUB MENU (EX. NEW, OPEN, CLOSE de el el)
        Set objMenuItem = objMenuBarItem.Buttons
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuNew", "New", getIconIndex("new"), , vbKeyN)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuOpen", "Open", getIconIndex("open"), , vbKeyO)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuClose", "Close", getIconIndex("close"))
        Call addMenuItem(cmdBar(0), objMenuItem, "", "", , eSeparator)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuSave", "Save", getIconIndex("save"), , vbKeyS)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuSaveAs", "Save As...")
        Call addMenuItem(cmdBar(0), objMenuItem, "", "", , eSeparator)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuPrintPreview", "Print Preview", getIconIndex("preview"))
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuPrint", "Print", getIconIndex("print"), , vbKeyP)
        Call addMenuItem(cmdBar(0), objMenuItem, "", "", , eSeparator)

        Call addMenuItem(cmdBar(0), objMenuItem, "mnuSendTo", "Send To")
        '>>>> SUB MENU SEND TO
            Set objMenuBarSendTo = .CommandBars.Add(menuName & ":mnuSendTo")
            .Buttons("mnuSendTo").Bar = objMenuBarSendTo

            Set objMenuItemSendTo = objMenuBarSendTo.Buttons
            Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuMailRecipient", "Mail Recipient", getIconIndex("mail"))
            Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuMailRecipientReview", "Mail Recipient (for Review)")
            Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuOnlineMeetingParticipant", "Online Meeting Participant")
            Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuFaxRecipient", "Fax Recipient...", getIconIndex("fax"))
            Call addMenuItem(cmdBar(0), objMenuItemSendTo, "", "", , eSeparator)
            Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuMicrosoftPowerPoint", "Microsoft PowerPoint", getIconIndex("powerpoint"))
        '<<<<

        Call addMenuItem(cmdBar(0), objMenuItem, "", "", , eSeparator)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuExit", "Exit", , , vbKeyX)

        'MENU : STYLE MENU
        menuName = "mnuStyleMenu"
        Call addMenu(cmdBar(0), objMenu, menuName, "Style Menu")
        Set objMenuBarItem = .CommandBars.Add(menuName)
        .Buttons(menuName).Bar = objMenuBarItem 'MENGAITKAN MENU STYLE MENU KE MENU BAR

        '>> SUB MENU STYLE MENU
        Set objMenuItem = objMenuBarItem.Buttons
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuStyle1", "Office XP", , eRadio)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuStyle2", "Office 2003", , eRadio, , , True)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuStyle3", "Ms Money", , eRadio)
        Call addMenuItem(cmdBar(0), objMenuItem, "mnuStyle4", "Standar", , eRadio)
        '>>

        .MenuImageList = ImageList1
        .Toolbar = .CommandBars("MenuBar")
    End With
End Sub

Private Sub cmdBar_RequestNewInstance(index As Integer, ctl As Object)
    Dim lNewIndex As Long

    lNewIndex = cmdBar.UBound + 1
    Load cmdBar(lNewIndex)

    cmdBar(lNewIndex).Align = 0
    Set ctl = cmdBar(lNewIndex)
End Sub

Private Sub Form_Load()
    Call createCommandBars
End Sub

Oke mungkin itu saja yang bisa saya bahas pada artikel kali ini, dan mudah-mudahan Anda benar-benar memutuskan cukup menggunakan Menu Editor untuk membuat menu :grin:.

Sample program bisa didownload disini.

Selamat mencoba :blush:

Comments