Home > Visual Basic > Membuat menu dengan 4 style

Membuat menu dengan 4 style

March 3, 2010

Melengkapi koleksi artikelartikel 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😀 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🙂 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😀.

Sample program bisa didownload disini.

Selamat mencoba🙂

  1. Beni Wijaya
    March 8, 2010 at 8:06 pm

    Huhuhuhu,,, keren ta coba yawh hehehe
    Thq🙂

  2. March 9, 2010 at 1:09 am

    Beni Wijaya :

    Huhuhuhu,,, keren ta coba yawh hehehe
    Thq :)

    Silahkan gan, selamat mencoba🙂

  3. March 25, 2010 at 12:50 am

    hem…. thanks mas informasinya. lumayan….. lumayan membingungkan….
    hehhe…. itu kira-kira bisa kita tentukan ya stylenya….

  4. March 25, 2010 at 1:25 am

    Erwinsyah :

    hem…. thanks mas informasinya. lumayan….. lumayan membingungkan….
    hehhe…. itu kira-kira bisa kita tentukan ya stylenya….

    Ya jelas bisa coba aja download sourcecodenya trus di run kan ada menu “Style Menu”nya nah gantinya dari situ.

  5. Herman
    March 25, 2010 at 4:57 am

    Thanks…
    aku dah coba dan berhasil tapi untuk di Form Child.
    tapi masih gagal di MDIForm.

  6. March 25, 2010 at 5:42 am

    Herman :

    Thanks…
    aku dah coba dan berhasil tapi untuk di Form Child.
    tapi masih gagal di MDIForm.

    Klo untuk MDIForm komponen vbAccelerator CommandBar Control diletakkan didalam objek PictureBox dan untuk komponen ImageList diganti dengan komponen vbaccelerator ImageList

    Selamat mencoba🙂

  7. itankjs
    June 24, 2010 at 10:03 am

    Tqs..sangat membantu..

    • June 24, 2010 at 11:58 am

      Sama-sama🙂

  8. andri
    August 5, 2010 at 6:29 am

    mas bagaimana contoh script penggunaan vbaccelerator Imagelist itu???
    tentu beda kan ma script image list bawaan vb???
    tolong kasih contoh donk mas.
    kalo di imagelist kan seperti :
    imagelist1.listimages.item(key).index-1

    nah kalo pake vbaccelerator Imagelist gmn???
    makasih ya mas sebelumnya.

    • August 5, 2010 at 7:19 am

      Seperti ini :

      vbalImageList1.ItemPicture(index_icon)
      
  9. February 23, 2011 at 9:52 am

    mas sy coba yang code ini : vbalImageList1.ItemPicture(index_icon) untuk
    vbaccelerator Imagelist v gk bisa knp ya mas??
    soalnya saya lg coba di MDIForm.
    Mohon bantunya🙂

    • February 23, 2011 at 10:18 am

      coba om, paste source penggunaan “balImageList1.ItemPicture(index_icon)”nya disini

  10. cobe
    February 25, 2011 at 11:02 am

    sama kayak di atas cuman imagelist diganti sama vbalImageList1.ItemPicture(index_icon) yang kata mas harus pake itu klo mau pake MDIform tapi malah muncul eror variabel not….
    gmn ya mas tolong dong bantunya dengan sangat

    • February 25, 2011 at 11:59 am

      Ini langkah-langkah revisinya om :
      1. Objek cmdBar harus diletakkan didalam PictureBox jadi jangan langsung di MDIFormnya.

      2. Revisi fungsi getIconIndex

      Private Function getIconIndex(ByVal key As String) As Long
          getIconIndex = vbalImageList1.ItemIndex(key) - 1
      End Function
      

      3. Revisi prosedur createCommandBars
      Ganti perintah .MenuImageList = ImageList1 menjadi .MenuImageList = vbalImageList1

      Tapi yg sy heran kok errornya “variabel not …” error itukan biasanya salah penyebutan nama variabel/objek

      Selamat mencoba🙂

  11. cobe
    February 28, 2011 at 6:23 am

    wah berhasil mas makasih banyak atas bantunya…
    Trima kasih ya…moga sukses🙂

    • February 28, 2011 at 6:38 am

      Oke om, sama2x🙂

  12. Alan Shufy
    May 7, 2011 at 5:56 pm

    Ketemu lagi disini Bang, saya mau tanya kalau dipakai buat MenuPopUp gimana caranya yah???🙂

    • May 9, 2011 at 2:54 am

      Masih mengacu contoh diatas dengan memanfaatkan menu File yang sudah ada untuk dijadikan popup menu, tambahkan 1 tombol kemudian ketik kode berikut :

      Private Sub cmdPopup_Click()
          Dim xPixels As Long
          Dim yPixels As Long
          
          xPixels = Me.ScaleX(cmdPopup.Left, Me.ScaleMode, vbPixels)
          yPixels = Me.ScaleY(cmdPopup.Top + cmdPopup.Height, Me.ScaleMode, vbPixels)
          
          cmdBar(0).ClientCoordinatesToScreen xPixels, yPixels, Me.hWnd
          cmdBar(0).ShowPopupMenu xPixels, yPixels, cmdBar(0).CommandBars("mnuFile")
      End Sub
      

      Lihat gambar

  13. Alan Shufy
    May 14, 2011 at 12:51 pm

    Wah termima Kasih Banyak, Sangat bermanfa’at….🙂

  14. Alan Shufy
    May 15, 2011 at 2:11 am

    Yang di atas tdak berhasil di MdIForm bagian “me.scalemode” di MDIForm ngak tersedia, barangkali ada cara lain, mhon pencerahannya…

    • May 15, 2011 at 6:59 am

      Klo untuk MDIForm membutuhkan objek container seperti PictureBox, jadi tombolnya diletakkan didalam PictureBox

      Lihat gambar

      Jadi tinggal ganti perintah Me.Scale… menjadi PictureBox.Scale..

      Private Sub cmdPopup_Click()
          Dim xPixels As Long
          Dim yPixels As Long
      
          xPixels = Picture1.ScaleX(cmdPopup.Left, Picture1.ScaleMode, vbPixels)
          yPixels = Picture1.ScaleY(cmdPopup.Top + cmdPopup.Height, Picture1.ScaleMode, vbPixels)
      
          cmdBar(0).ClientCoordinatesToScreen xPixels, yPixels, Me.hWnd
          cmdBar(0).ShowPopupMenu xPixels + 2, yPixels + 22, cmdBar(0).CommandBars("mnuMaster")
      End Sub
      

      Selamat mencoba🙂

  15. Alan Shufy
    May 15, 2011 at 5:02 pm

    🙂 Sip !!! Dah Sukses, tapi Kalau untuk pemanggilan pada Menu Itemnya Bisa Ngak? pada Screen Shot di atas ada Menu Item “Send To” yang memiliki Sub Menu Lagi, kira2 bisa ngak “mnuSendto” yang dipanggil buat PopUpMenu-nya?, mhon maaf maklum pemula yang hanya belajar studi kasus🙂

  16. Alan Shufy
    May 15, 2011 at 5:21 pm

    Alhamdulillah Dah Bisa, Maaf….

    • May 16, 2011 at 7:00 am

      Oke om, siiippp

  17. Alan Shufy
    June 15, 2011 at 9:35 pm

    waduh dah malu nih nanya melulu tapi bagaimana lgi namanya mau belajar yah harus berani malu ! he he he.
    langsung ajha, gmna caranya biar bisa buat salah satu menu item bernilai false ?
    seperti pada menu bisa….

  18. June 16, 2011 at 6:08 am

    Si om ini benar2x kurang explorasinya, gimana mau jadi programmer handal ?

    padahal cuma ngerubah kode :

    Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuOnlineMeetingParticipant", "Online Meeting Participant")
    

    menjadi

    Call addMenuItem(cmdBar(0), objMenuItemSendTo, "mnuOnlineMeetingParticipant", "Online Meeting Participant", , eCheck, , , True)
    
    • Alan Shufy
      June 29, 2011 at 6:17 am

      waduh maaf dah lma gak browsing, terima kasih sesudahnya.
      justru itu saya hanya belajar dari studi kasus alias niru baru belajar explor setelahnya
      saya ni benar2 ngak ngerti soal program tapi pengen ngerti alhamdulillah sedikit2 sekarang sudah mulai faham, tidak terlepas dari dukungan kang admin🙂
      hampir semua program sama isi blognya saya copas terima kasih sudah banyak membantu si fakir ini yg hnya punya keinginan tanpa dilandasi keilmuan…… semoga bermanfaat ilmunya kang Amiiin…

      • June 29, 2011 at 11:30 am

        Oke om, ingat kata mbah Einstein “Mencontoh bukanlah salah satu cara untuk belajar, tapi satu – satunya cara untuk belajar”😀

        Om beruntung semangatnya udah oke, soalnya banyak mahasiswa2x yg ngambil jurusan TI tapi codingnya males😀

        Yang penting semangat explorasinya ditingkatkan lagi

  19. October 10, 2011 at 2:37 pm

    wah baru tau klo bisa jd popup…tangkyu mAs Bro

    • October 11, 2011 at 6:08 am

      Sama-sama om

  1. April 16, 2014 at 9:12 am
Comments are closed.
%d bloggers like this: