Home > Visual Basic > Memanfaatkan file Resource untuk menyimpan text, icon, gambar dan wav

Memanfaatkan file Resource untuk menyimpan text, icon, gambar dan wav

March 1, 2010

Whats is Resource File ?

A Resource File is a repository where you can store images, sounds, videos, data, or whatever you like.  You can stored any file type in a resource file.  It’s like your project’s suitcase… stuff can be put there and kept there, and retrieved easily when needed (NOTE: Resource files are Read-Only).

When you compile your project, the resource file is compiled right into the .EXE, .DLL, .OCX, etc.

Sesuai dengan definisi dan fungsi file resource diatas, kita akan mencoba membuat project dengan menambahkan file resouce.

1. Buat project baru dan jangan lupa langsung disimpan

2. Adapun langkah-langkah untuk menambahkan file resource sebagai berikut :

a. Klik menu Add-Ins -> Add-In Manager …

b. Aktifkan pilihan VB 6 Resource Editor

c. Klik kanan project -> Add -> Resource File

Selanjutnya kita diminta untuk menentukan lokasi penyimpanan file resourcenya (simpan difolder yang sama dengan project), untuk contoh disini saya simpan dengan nama my-resource.

Jika berhasil tampilan project explorer akan seperti berikut :

Kemudian klik ganda file my-resource, setelah itu akan tampil jendela VB Resource Editor. Nih bentuknya :

Oke karna kita sudah berhasil menambahkan file resourcenya selanjutnya kita akan menambahkan data-data berikut :

1. Data berupa string

Contoh pemanggilan via kode

Private Sub cmdTest1_Click()
    Me.Caption = LoadResString(101) '101 -> ID dari String Tabel diatas
End Sub

2. Data berupa icon

Selanjutnya kita diminta untuk menentukan file icon yang ingin disimpan dengan maksimal kedalaman warna icon 256 color. Jika berhasil akan ada tambahan Node Icon dengan default ID 101.

Contoh pemanggilan via kode

Private Sub cmdTest2_Click()
    Picture1.Picture = LoadResPicture(101, vbResIcon) '101 -> ID icon
End Sub

3. Data berupa gambar

Kemudian kita diminta untuk menentukan file gambar, tapi disini dibatasi hanya untuk format bmp. Trus bagaimana jika ingin menyimpan file gambar dengan format jpg atau lainnya ? Jawabnya gampang, setelah Anda menyelesaikan artikel ini saya yakin Anda otomatis akan punya gambaran bagaimana melakukan hal tersebut.

Setelah berhasil menambahkan file gambar (format bmp) akan ada tambahan Node Bitmap dengan default ID 101 juga.

Kemudian pemanggilan via kode juga hampir sama dengan pemanggilan icon, dimana cukup mengganti konstanta vbResIcon menjadi vbResBitmap

Private Sub cmdTest3_Click()
    Picture1.Picture = LoadResPicture(101, vbResBitmap)
End Sub

4. Terakhir data berupa file sound dengan ekstensi .WAV

Selanjutnya kita diminta untuk menentukan file sound dengan ekstensi .wav, jika berhasil akan ada tambahan Node “CUSTOM”

Untuk pemanggilan file wav ini kita akan menggunakan fungsi api PlaySound, berikut kode lengkapnya :

Private Const SND_MEMORY = &H4
Private Const SND_NODEFAULT = &H2
Private Const SND_SYNC = &H0

Private Declare Function PlaySound Lib "WINMM.DLL" Alias "PlaySoundA" (ByRef Sound As Any, ByVal hLib As Long, ByVal lngFlag As Long) As Long

Private Sub cmdPlay_Click()
    Dim dataArray() As Byte

    'jangan lupa untuk mengetes kode ini soundnya digedeIn
    dataArray = LoadResData(101, "CUSTOM")
    Call PlaySound(dataArray(0), 0, SND_MEMORY Or SND_NODEFAULT Or SND_SYNC)
    Erase dataArray
End Sub

Untuk data bertipe “CUSTOME” ini, tidak terbatasnya hanya untuk menyimpan file WAV saja Anda bahkan bisa menyimpan file AVI, EXE, DLL, JPG, PNG, de el el (hampir semua jenis file).

Selamat mencoba🙂

Referensi : TheVbZone

  1. tami
    April 8, 2010 at 7:12 am

    asalamu’alaikum,
    saya mau tanya,
    gimana kalo kita simpan file suara ke database ms.access yg bertipe data OLE,,kemudian kita mainkan di form VB 6.0 dengan mengklik sebuah button,,,,
    terima kasih,,,,
    postingannya sangat membantu… ^^

  2. April 8, 2010 at 8:37 am

    Waalaikumussalam warahmatullahi wabarakatuh

    Untuk menyimpan file suara, source codenya masih sama dg artikel yang di SINI, hanya saja mungkin fungsi addImageToDB aja diganti namanya menjadi addSoundToDB biar lebih nyambung😀.

    Untuk meload data file suaranya, kita cukup melakukan sedikit revisi di fungsi getImageFromDB, disini sy ganti namanya menjadi getSoundFromDB dan variabel rsImage sy ganti menjadi rsSound, berikut kode lengkapnya :

    Public Function getSoundFromDB(ByVal query As String) As Byte()
        Dim sFile       As String
        
        'tambahan variabel
        Dim fileLength  As Long
        Dim bytes()     As Byte
                
        On Error GoTo errHandle
    
        Set rsSound = New ADODB.Recordset
        rsSound.Open query, conn, adOpenForwardOnly, adLockReadOnly
        If Not rsSound.EOF Then
            If Not IsNull(rsSound(0).Value) Then
                nHandle = FreeFile
    
                sFile = App.Path & "\output.bin"
                If fileExists(sFile) Then Kill sFile
                DoEvents
    
                Open sFile For Binary Access Write As nHandle
    
                lsize = rsSound(0).ActualSize
                iChunks = lsize \ CHUNK_SIZE
                nFragmentOffset = lsize Mod CHUNK_SIZE
    
                varChunk() = rsSound(0).GetChunk(nFragmentOffset)
                Put nHandle, , varChunk()
                For i = 1 To iChunks
                     ReDim varChunk(CHUNK_SIZE) As Byte
    
                     varChunk() = rsSound(0).GetChunk(CHUNK_SIZE)
                     Put nHandle, , varChunk()
                     DoEvents
                Next
                Close nHandle
                
                'tambahan kode baru disini
                '>>>>>>
                fileLength = FileLen(sFile)
                ReDim bytes(1 To fileLength)
                
                Open sFile For Binary As #1
                Get #1, 1, bytes
                Close #1
                
                getSoundFromDB = bytes
                '<<<<<
                
            Else
                ReDim getSoundFromDB(1) 'revisinya juga ada disini
            End If
    
        Else
            ReDim getSoundFromDB(1)
        End If
        Call closeRecordset(rsSound)
        
        Exit Function
    errHandle:
        ReDim getSoundFromDB(1)
    End Function
    

    Kemudian untuk memainkan file suaranya juga mirip kode di artikel ini

    Private Sub cmdPlay_Click()
        Dim dataArray() As Byte
        
        strSql = "SELECT field_suara FROM tbl WHERE where kode_suara = '001'"
        dataArray = getSoundFromDB(strSql)
        
        Call PlaySound(dataArray(1), 0, SND_MEMORY Or SND_NODEFAULT Or SND_SYNC)
        Erase dataArray
    End Sub
    

    Selamat mencoba🙂

  3. tami
    April 10, 2010 at 2:50 am

    terimakasih atas bantuannya,,,, ^^
    okay baiklah akan secepatnya saya coba…
    sekali lagi terima kasih…. ^^
    sukses terus yahhh….
    assalammu’alaikum….

  4. April 10, 2010 at 3:18 am

    Waalaikumussalam

  5. tami
    April 12, 2010 at 3:37 am

    assalamualaikum,,,maaf…saya mau tanya lagi,,,
    setelah saya jalankan program di atas kemudian saya klik tombol play nya error di ‘fileExists’ sub or function not defined,,,
    itu gmn ya ngebenerinnya,,,,
    maaf ngerepotin,,,mohon bantuannya..

  6. April 12, 2010 at 3:44 am

    tami :

    assalamualaikum,,,maaf…saya mau tanya lagi,,,
    setelah saya jalankan program di atas kemudian saya klik tombol play nya error di ‘fileExists’ sub or function not defined,,,
    itu gmn ya ngebenerinnya,,,,
    maaf ngerepotin,,,mohon bantuannya..

    Waalaikumussalam

    Berarti fungsi fileExists belum ada mba, coba copy fungsi fileExists diSINI

  7. tami
    April 12, 2010 at 6:19 am

    saya mau nanya lagi ne,,,maaf ya ga langsung td barengan
    script yg ini bs tlg dijelasin mas —->> WHERE where kode_suara = ‘001’”
    knp ‘where’ nya ada 2?
    trus ‘kode_suara’ field name yah?
    dan ‘001’ itu kode dari sound yang diinputkan, berarti ada 2 field di ms.access
    field_suara dan kode_suara yah?
    mas,kalo mau di-play kaya nampilin gambar tuh sama aja ato beda ya mas?
    maaf banyak banget yang saya tanya…. ^^
    maaf juga udah ngerepotin dan ganggu,,,, ^^
    mohon bantuannya… ^^
    assalamualaikum,,,, ^^
    dan terima kasih udah baik banget ngerespon saya… ^^

  8. April 12, 2010 at 7:57 am

    tami :

    saya mau nanya lagi ne,,,maaf ya ga langsung td barengan
    script yg ini bs tlg dijelasin mas —->> WHERE where kode_suara = ‘001′”
    knp ‘where’ nya ada 2?

    Namanya juga copas mba, kadang2x salah😀, jadi intinya WHEREnya cuma 1

    tami :
    trus ‘kode_suara’ field name yah?
    dan ‘001′ itu kode dari sound yang diinputkan, berarti ada 2 field di ms.access
    field_suara dan kode_suara yah?

    Iya, itu asumsinya kalo file sound yg disimpan banyak jadikan tentu dibedakan dg kodenya, sama lah seperti SISWA dibedakan dg NISnya

    tami :
    mas,kalo mau di-play kaya nampilin gambar tuh sama aja ato beda ya mas?

    beda dikit, kan revisi source codenya udah sy jawab diatas

    tami :
    assalamualaikum

    Waalaikumussalam

  9. tami
    April 13, 2010 at 4:19 am

    mas,kode tombol play nya saya bikin gini—>>>

    strSql = “SELECT Music FROM tbl WHERE judul = ‘” & TxtJudul.Text & “‘ ”

    menurut mas gimana caranya supaya waktu saya ketik judul yang saya save di database barengan sama file suaranya kemudian waktu di-play suara dari judul lagu yang saya ketik itu main?

    oh ya mas, saya nge-save data suaranya sama kaya nge-save gambar di postingan mas,kita ketikkan dmna file suara itu di simpen,
    mohon bantuannya yah mas,,, ^^
    maksih atas yang udah2 y mas, assalamu’alaikum… ^^

  10. April 13, 2010 at 7:09 am

    tami :

    mas,kode tombol play nya saya bikin gini—>>>

    strSql = “SELECT Music FROM tbl WHERE judul = ‘” & TxtJudul.Text & “‘ ”

    menurut mas gimana caranya supaya waktu saya ketik judul yang saya save di database barengan sama file suaranya kemudian waktu di-play suara dari judul lagu yang saya ketik itu main?

    Klo pake judul resikonya judulnya harus sama persis, atau buat aja semacam fasilitas pencarian kemudian hasilnya ditampilkan ke dalam ListBox dari situ baru milih judulnya.

    tami :

    oh ya mas, saya nge-save data suaranya sama kaya nge-save gambar di postingan mas,kita ketikkan dmna file suara itu di simpen,

    Saran saya sebaiknya untuk memilih nama file suaranya menggunakan komponen Microsoft Common Dialog Control 6.0 aja, setidaknya mengurangi kesalahan klo dibandingkan dg mengetik manual.

    Ngomong2x format file suaranya apa aja.

    tami :
    assalamu’alaikum…

    Waalaikumussalam

  11. tami
    April 13, 2010 at 7:24 am

    rencananya mau wav aja mas,,,
    makasih pencerahannya ya mas,,,
    saya coba utak-atik lagi,ntar kalo kesulitan lage saya masih boleh nanya-nanya kan,,,??
    ehehe… ^^
    assalammualaikum,, ^^

  12. April 13, 2010 at 7:49 am

    Oke slamet ngotax-atix

  13. tami
    April 14, 2010 at 5:57 am

    mas,bantuannya lage lage ya,,
    kemaren saya coba buat buka file dari common dialog ndak bisa,error di OpenFile apa ada yang kurang yah?

  14. April 14, 2010 at 6:32 am

    tami :

    mas,bantuannya lage lage ya,,
    kemaren saya coba buat buka file dari common dialog ndak bisa,error di OpenFile apa ada yang kurang yah?

    Pesan errornya apa ya? klo bisa coba posting kodenya disini

  15. tami
    April 14, 2010 at 10:05 am

    pesan errornya —->>> Compile error:
    Sub or Function not defined

    trus saya coba:
    Dim OpenFile As String

    trus muncul pesan—>>> Compile error:
    Expected Sub, Function, or Property

    itu gmn benerinnya ya mas?
    mohon bantuannya…

  16. arthur
    August 18, 2010 at 7:44 pm

    assalam

    kalo load res berupa skn(activeskin) gimana ya gan
    masih bingung nih

    salam

    • August 19, 2010 at 2:16 am

      Waalaikumussalam

      Saya asumsikan om sudah memahami artikel di atas dan sudah bisa menambahkan item resource dengan tipe CUSTOM, nah file2x skin dari ActiveSkinnya disimpan dengan tipe CUSTOME. Lihat gambar berikut :

      VB Resource Editor

      Kemudian untuk mengekstrak skinnya gunakan perintah berikut :

      Private Sub loadSkin(ByVal skinID As Integer, ByVal fileName As String)
          Dim arrSkin()   As Byte
          Dim handler     As Long
          
          arrSkin = LoadResData(skinID, "SKIN")
          handler = FreeFile
          
          Open fileName For Binary Access Write As #handler
          Put #handler, , arrSkin
          Close #handler
      End Sub
      
      Private Sub cmdExtractSkin_Click()
          Call loadSkin(1, App.Path & "\skin1")
          Call loadSkin(2, App.Path & "\skin2")
          Call loadSkin(3, App.Path & "\skin3")
          
          'TODO : printah load skin
      End Sub
      

      Selamat mencoba🙂

  17. December 11, 2010 at 2:08 am

    klo nyimpan dll n ocx bisa ngga….. ????

    • December 11, 2010 at 2:38 am

      Bisa om, caranya sama kayax ngeload skin diatas

  18. December 11, 2010 at 5:54 am

    Sample code na ada ngga… hehehe waktu coba error

    • December 11, 2010 at 7:26 am

      Oke om, selamat bererror ria ya?😀

  19. December 11, 2010 at 11:32 pm

    hehe…🙂 mg brhsil ntr…:)

    • December 12, 2010 at 1:49 pm

      Oke om semangat ya…😛

  20. nek4te
    April 26, 2011 at 9:19 am

    Untuk play res wav …gimana biar gak berhenti di tengah …….mksh

    • April 27, 2011 at 1:34 am

      File wavnya kegedean kali om, jangan dipake bwt nyimpan lagu😀

  21. September 8, 2011 at 4:33 pm

    kalo output suara berdasarkan yang kita ketik,apa perlu di rekam semua?? ketikannya random, untuk merangkai kata. tapi klo orang salah ketikkan bisa saja

    • September 9, 2011 at 1:01 pm

      Ya jelas klo kita ambil contoh mau membuat output suara terbilang berarti harus ada rekaman suara : satu, dua, tiga, empat, lima, enam, tujuh, delapan, sembian, nol, dst

  22. mae
    September 13, 2011 at 3:18 am

    sya sdah coba yg untuk penyimpanan wav, tp ko suaranya ga kluar yaahhh… jd bgaimna om?

    • September 13, 2011 at 3:38 am

      Coba mana sample projectnya ?

  23. mae
    September 13, 2011 at 4:34 am

    gini aja om.. misalx saya buat sebuah form di form itu saya kasih beberapa button, di button 1 saya kasih misalx gambar angka 1, button 2 angka 2, button 3 angka 3, dst..
    nah ketika saya klik angka 1 maka akan keluar suara “satu”, sya klik angka 2 akan kluar suara “dua”, dst..
    jadi spaya suarax kluar itu gimana om..? sya sdh cb materi yg diatas, tp suarax ga kluar..
    mohon bantuanx..🙂

    • September 13, 2011 at 5:20 am

      Makanya diupload aja sourcenya biar gampang dikoreksi

      • mae
        September 13, 2011 at 5:50 am

        source codex saya ambil dari coding yg ada di materi, seperti ini..

        Private Const SND_MEMORY = &H4
        Private Const SND_NODEFAULT = &H2
        Private Const SND_SYNC = &H0

        Private Declare Function PlaySound Lib “WINMM.DLL” Alias “PlaySoundA” (ByRef Sound As Any, ByVal hLib As Long, ByVal lngFlag As Long) As Long

        Private Sub cmdSatu_Click()
        Dim dataArray() As Byte

        dataArray = LoadResData(101, “CUSTOM”)
        Call PlaySound(dataArray(0), 0, SND_MEMORY Or SND_NODEFAULT Or SND_SYNC)
        Erase dataArray
        End Sub

        • September 13, 2011 at 6:46 am

          klo ngeliat kodenya udah oke, asalkan ID 101 dan “CUSTOM” sesuai gambar diatas

  24. mae
    September 13, 2011 at 6:09 am

    apa perlu ditambah komponen “media player” supaya suarax bisa keluar.. karena kalo yg untuk gmbar seperti postingan diatas kan ditambah komponen picture box jd gmbarx bs muncul.. nah kalo suara bgaimana?????

    • September 13, 2011 at 6:46 am

      Enggak perlu lagi komponen media player kan udah menggunakan fungsi API PlaySound
      Atw coba dulu file2x WAV standar yg ada folder windows

  25. mae
    September 13, 2011 at 7:29 am

    alhamdulillah om sdah bs.. brarti slah format aja kyx td..
    sya tnya lg om.. sya ingin tampilkan database yg ada di sql server ke vb dan saya sdh bs tampilkanx.. tp sya ingin membuat tombol “DELETE” di form itu.. agar pada saat dijalankan sy bs mghapus datax tanpa harus membuka database di sqlx.. gimana om carax??

    • September 13, 2011 at 7:41 am

      Sippp

      Untuk DELETE tetap harus terkoneksi ke database, jadi database tetap harus dalam kondisi terbuka

  26. mae
    September 13, 2011 at 2:56 pm

    oowwhhh gtu yah omm.. makasih byak ya omm..:)
    askum..

  27. September 13, 2011 at 3:04 pm

    Iya, waalaikumussalam

  28. November 22, 2011 at 2:42 am

    Yang Tau Pakek Gimana Ya

    • November 22, 2011 at 2:45 am

      Pakek Java Maksudnya….

      • November 22, 2011 at 5:21 am

        Yang Tau Pakek Gimana Ya

        Pakek Java Maksudnya….

        Emg nanya apaan sih om ?

  29. December 26, 2011 at 3:15 pm

    om,, ada yang tau nggak??
    Kalo kita nyimpan file di Resource truss mau di jadiin file tu gimana??

    saya coba :

    Dim Dat() As String
    Dat = LoadResData(101, “CUSTOM”)

    Open “FILE.EXE” For Output As #1
    Write #1, DAT(0)
    Close #1

    nggak bisa?? Apa ada yang salah?? Tolong bantuanya…

    • December 26, 2011 at 3:44 pm

      Mungkin gini om

      Private Sub loadDataIntoFile(ByVal id As Integer, ByVal fileName As String)
          Dim myArray()   As Byte
          Dim myFile      As Long
          
          myArray = LoadResData(id, "CUSTOM")
          myFile = FreeFile
          Open fileName For Binary Access Write As #myFile
          Put #myFile, , myArray
          Close #myFile
      End Sub
      
      Private Sub cmdTes_Click()
          Dim fileName As String
          
          fileName = App.Path & "\file.dat"
          
          Call loadDataIntoFile(101, fileName)
          
          Open fileName For Output As #1
          Write #1, "tesss data yg ditulis"
          Close #1
      End Sub
      
      • December 27, 2011 at 1:32 pm

        Thanks infonya.. ini sangat berguna bagiku..

        • December 27, 2011 at 3:40 pm

          Sama2x om

  30. December 28, 2011 at 6:02 pm

    Om,, tanya lagi.. Berkaitan dengan Read/Write File…

    Klo di atas itu skrip untuk membuat file…
    klo untuk open file,, gimana??
    saya coba :

    Dim Fil As Long
    Dim Teks As String
    Fil = FreeFile

    Open “form1.exe” For Binary Access Read As #Fil
    Teks = String(LOF(1), 0)
    Get #Fil, 1, Teks
    Close #Fil

    Text1.Text = Teks

    hasilnya cuma “MZ”
    mohon penjelasanya

    • December 29, 2011 at 9:32 pm

      Klo file yg dibuka berekstensi .exe ya jelas donk om hasilnya kode ascii doank.

  31. December 31, 2011 at 8:10 am

    Sebenernya saya mau buat aplikasi yang menyimpan file di berkas gambar,, dengan nggabungin 2 file : File gambar & file arsip.. klo pake cmd, klo ada file yang mengandung spasi nggak bisa…

    • January 3, 2012 at 1:16 pm

      Wah sy blm paham om😀

  32. March 24, 2012 at 5:51 pm

    Mas,, kalo penggunaan file resource di vb 2005 Express Edition dan cara write filenya gimana??

  33. agung
    February 28, 2013 at 9:55 am

    om, klo semua file .ocx & dll disimpan dalam resource, apa bisa buat aplikasi portable??

    • February 28, 2013 at 1:20 pm

      Ya tapi tetap aja file2xnya harus di extract dulu om.

  1. No trackbacks yet.
Comments are closed.
%d bloggers like this: