29 November 2012

Banyak cara dalam VB untuk membulatkan suatu bilangan/ angka desimal menjadi bilangan bulat. Jika Anda belum paham, berikut penjelasan singkatnya :
  • Pembulatan Otomatis
    Pembulatan ini dilakukan secara otomatis tergantung bilangannya.
    Jika angka utamanya adalah ganjil dan angka desimalnya >= 0,5 maka dilakukan pembulatan ke atas (angka utama ditambah 1) dan bila angka desimalnya < 0,5 maka dilakukan pembulatan ke bawah.
    Namun jika angka utamanya adalah 0 atau genap dan angka desimalnya > 0,5 maka dilakukan pembulatan ke atas dan bila angka desimalnya <= 0,5 maka dilakukan pembulatan ke bawah.
    i = CInt(0.4) , hasilnya 0
    i = CInt(0.5) , hasilnya 0
    i = CInt(0.6) , hasilnya 1
    i = CInt(1.4) , hasilnya 1
    i = CInt(1.5) , hasilnya 2
    i = CInt(1.6) , hasilnya 2

  • Pembulatan Selalu ke Bawah
    Pembulatan ini dilakukan selalu ke bawah berapapun angka desimalnya. Dengan kata lain akan menghilangkan angka desimalnya.
    i = Int(1.1) , hasilnya 1
    i = Int(1.5) , hasilnya 1
    i = Int(1.8) , hasilnya 1

  • Pembulatan Selalu ke Atas
    Pembulatan ini dilakukan selalu ke atas berapapun angka desimalnya.
    i = -Int(-(1.1)) , hasilnya 2
    i = -Int(-(1.5)) , hasilnya 2
    i = -Int(-(1.8)) , hasilnya 2

  • Pembulatan Yang Ditentukan
    Pembulatan ini dilakukan sesuai dengan Batas yang telah ditentukan.
    Jadi bila angka desimalnya >= Batas maka dilakukan pembulatan ke atas dan bila angka desimalnya < Batas maka dilakukan pembulatan ke bawah.
    Misalnya Batas yang ditentukan adalah 0,4 kodenya seperti ini :
Dim Nilai As Double, Hasil As Long

Nilai = 1.4 'bilangan yg akan dibulatkan

Hasil = Int(Nilai) + IIf(CDbl(CStr(Nilai - Int(Nilai))) >= 0.4, 1, 0) 'Batas = 0,4

MsgBox Hasil 'pesan Hasil = 2

Demikian tutorial kali ini, semoga bermanfaat .

Cara termudah untuk mendeteksi versi MS Office yang ter-install di komputer, yaitu dengan cara membaca nilai registry. Berikut kodenya :

Tulis kode function ini di Module baru :
 
Function VersiOffice(ByVal Aplikasi As String) As String
    On Error GoTo Ero
    Dim Reg As Object
    Dim s As String
      
    Set Reg = CreateObject("Wscript.Shell")
    s = Reg.RegRead("HKCR\" & Aplikasi & ".Application\CurVer\")
    VersiOffice = Replace(s, Aplikasi & ".Application.", "", , , 1)
  
Ero:
End Function

Kode penggunaannya seperti ini :


Dim v As String
v = VersiOffice("Word")
If v <> "" Then
    MsgBox ("Microsoft Word versi " & v)
Else
    MsgBox ("Microsoft Word tidak ter-install")
End If

Dapat dilihat contoh diatas digunakan untuk mendeteksi Word, maka juga bisa digunakan untuk Excel, PowerPoint, Access, dll 



Saya ada source code baru nih, tapi kali ini tentang VB.NET .
Ini merupakan aplikasi media player sederhana yang mampu memutar file audio, video, bahkan playlist. Didalamnya tersedia fasilitas fullscreen, loop, shuffle, dll.
Media player ini menggunakan kontrol Windows Media Player (wmp.dll) sebagai kontrol utamanya. Yang mungkin membedakan dengan souce code media player lain, terletak dimana daftar file media yang diputar terintegrasi dengan playlist dari kontrol, sehingga lebih mudah dikembangkan dan dikendalikan.

Download Media Player

27 November 2012

Setelah saya dulu saya mempostingkan artikel yang sama dengan postingan ini, yaitu cara menyimpan setingan form dalam registry editor .
Kali ini tutorial yang sama saya postingkan, tapi dengan menggunakan fungsi API, saya dapat tutorial ini dari web Microsoft .

Perhatikan berikut ini :

RINGKASAN

Meskipun Visual Basic meliputi fungsi-fungsi SaveSetting dan GetSetting untuk menyimpan dan mengambil informasi dari registry, fungsi-fungsi ini hanya beroperasi pada bagian tertentu dari registri, Visual Basic dan pengaturan Program VBA HKEY_CURRENT_USER akar kunci.

Artikel ini menguraikan penggunaan fungsi Windows API 32-bit, yang dapat digunakan untuk menetapkan dan mengambil nilai dari mana saja di dalam registri. Topik dan fungsi referensi dalam artikel ini dapat dirampatkan ke registri program 16-bit.

Fungsi API 32-bit juga termasuk dukungan untuk keamanan, meskipun Ikhtisar keamanan adalah di luar lingkup artikel ini.

Catatan: Fungsi SaveSetting dan GetSetting yang tidak bagian dari VBA fungsi perpustakaan. Namun, kode contoh di bawah ini masih berlaku untuk aplikasi 32-bit yang menerapkan VBA. 

Informasi registri

Registri yang digunakan oleh aplikasi dan Windows untuk menyimpan data konfigurasi. Itu adalah pengganti untuk sejumlah besar file INI yang bertumbuh pesat pada mesin Windows 3.x dan juga digunakan berat oleh OLE.

Registri diatur menggunakan serangkaian hirarkis kunci dan nilai-nilai yang menyerupai sebuah pohon. Setiap kunci, dimulai dengan salah satu tombol standar akar enam, dapat memiliki sub-Key dan nilai-nilai yang terkait dengannya. Kunci adalah unit organisasi dan penamaan dan muncul dalam Windows Registry Editor sebagai folder file. Nilai entri data dan muncul sebagai entri teks di panel kanan Peninjau Suntingan Registri. Kunci tidak perlu memiliki nilai apapun terkait, tetapi mungkin memiliki banyak. Setiap nilai memiliki tipe data terkait. Dua jenis data registri yang paling umum digunakan adalah REG_SZ, string dihentikan null; dan REG_DWORD, nomor 32-bit.

Proses dasar yang digunakan untuk menulis atau membaca dari lokasi di registri adalah sama. Untuk referensi apapun diberikan kunci atau nilai, Anda harus memiliki sebuah handle untuk kunci. Setelah handle ini diperoleh, nilai-nilai dan sub-Key kunci yang mengacu pada handle ini dapat membaca, ditetapkan, atau terdaftar (disebutkan).

Mengingat lokasi di registri, untuk mendapatkan sebuah handle untuk kunci, Anda harus mulai dengan salah satu tombol standar enam (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, dan HKEY_DYN_DATA) dan melintasi pohon registri sampai tombol yang diinginkan tercapai. Program-program pengguna paling sering membaca dan menulis dari HKEY_CURRENT_USER dan HKEY_LOCAL_MACHINE. Jika tombol yang dilalui sudah ada, Anda dapat menggunakan serangkaian panggilan ke fungsi RegOpenKey atau RegOpenKeyEx. Jika tombol perlu dibuat, fungsi RegCreateKey dan RegCreateKeyEx melakukan pekerjaan.

Dengan menangani ke tombol yang dikehendaki, fungsi yang digunakan untuk daftar, set, dan mengambil informasi dapat disebut. Dalam semua kasus, fungsi dengan akhiran Ex akan bekerja hanya pada 32-bit platform. Fungsi tanpa akhiran mungkin bekerja pada versi Windows 16-bit dan 32-bit. Perlu diingat bahwa tidak semua fungsi registri yang kurang akhiran 'Ex' adalah fungsi yang disediakan untuk kompatibilitas 16-bit. Akhiran Ex hanya ditambahkan ketika kemampuan 16-bit fungsi diperluas. Fungsi yang benar-benar baru dan khusus untuk 32-bit platform tidak memiliki ekstensi mantan.

Fungsi RegSetValue dan RegSetValueEx memungkinkan pengaturan nilai diubah, sementara RegQueryValue dan RegQueryValueEx mengambil pengaturan arus dari nilai. Keterbatasan bebas-Ex, 16-bit versi api sangat jelas di sini. Ketika menggunakan fungsi RegSetValue 16-bit ada cara untuk nama nilai, dan karena ini, RegSetValue tidak dapat digunakan untuk menghubungkan lebih dari satu nilai dengan setiap tombol. Selain itu, semua nilai ditulis dengan RegSetValue memiliki tipe data REG_SZ. Keterbatasan ini melekat dengan Registry 16-bit. RegSetValueEx memungkinkan penciptaan beberapa jumlah nilai dengan setiap jenis data yang tersedia.

Bagaimana menulis ke lokasi registri tertentu

Setelah menentukan apa fungsi yang Anda akan perlu menggunakan untuk proyek Anda, salinan yang relevan menyatakan dari kode pada akhir artikel ini untuk modul dasar. Dua Visual Basic prosedur termasuk (SetValueEx dan QueryValueEx) adalah pembungkus untuk fungsi-fungsi RegSetValueEx dan RegQueryValueEx API dan sangat menyederhanakan penggunaan mereka. Catatan di bawah ini membuat penggunaan ini Visual Basic fungsi; Namun, Anda gratis untuk membuat panggilan langsung ke API jika Anda inginkan.

Menciptakan/memodifikasi kunci dan nilai:

Dengan deklarasi dan prosedur yang tersedia, Anda dapat membuat dan membuka kunci, dan menambah, mengubah, dan membaca nilai-nilai. Tiga bagian berikut menjelaskan cara membuat kunci, mengatur atau mengubah nilai, dan query nilai.

Membuat kunci yang baru:

Membuat kunci yang baru yang sederhana seperti menggunakan prosedur berikut. CreateNewKey mengambil nama kunci untuk membuat, dan konstanta mewakili tombol standar untuk membuat kunci di bawah. Panggilan untuk RegCreateKeyEx tidak memanfaatkan mekanisme keamanan yang diperbolehkan, tetapi dapat dimodifikasi untuk melakukannya. Diskusi tentang keamanan registri adalah di luar lingkup artikel ini.
   Private Sub CreateNewKey (sNewKeyName As String, lPredefinedKey As Long)
       Dim hNewKey As Long         'handle to the new key
       Dim lRetVal As Long         'result of the RegCreateKeyEx function

       lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, _
                 vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
                 0&, hNewKey, lRetVal)
       RegCloseKey (hNewKey)
   End Sub
    

Dengan prosedur ini panggilan dari:
   CreateNewKey "TestKey", HKEY_LOCAL_MACHINE
    

akan menciptakan sebuah kunci yang disebut TestKey di bawah HKEY_LOCAL_MACHINE.

Memanggil CreateNewKey seperti ini:
      CreateNewKey "TestKey\SubKey1\SubKey2", HKEY_LOCAL_MACHINE
    

akan membuat bersarang tiga tombol yang dimulai dengan TestKey segera di bawah HKEY_CURRENT_USER, SubKey1 yang subordinat kepada TestKey, dan SubKey3 di bawah SubKey2.

Pengaturan/memodifikasi nilai:

Membuat dan menetapkan nilai kunci tertentu dapat dicapai dengan prosedur pendek berikut. SetKeyValue mengambil kunci yang nilai akan dikaitkan dengan nama nilai, setting nilai, dan jenis nilai (SetValueEx fungsi hanya mendukung REG_SZ dan REG_DWORD, tetapi ini dapat diubah jika perlu). Menetapkan nilai baru untuk sValueName yang ada akan mengubah pengaturan saat ini nilai.
   Private Sub SetKeyValue (sKeyName As String, sValueName As String, _
   vValueSetting As Variant, lValueType As Long)
       Dim lRetVal As Long         'result of the SetValueEx function
       Dim hKey As Long         'handle of open key

       'open the specified key
       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
                                 KEY_SET_VALUE, hKey)
       lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
       RegCloseKey (hKey)
   End Sub
    

Panggilan:
   SetKeyValue "TestKey\SubKey1", "StringValue", "Hello", REG_SZ
    

akan menciptakan nilai tipe REG_SZ yang disebut "StringValue" dengan pengaturan "Halo." Nilai ini akan dikaitkan dengan kunci SubKey1 "TestKey."

Dalam kasus ini, "TestKey" adalah subkunci HKEY_CURRENT_USER, tetapi ini dapat diubah dengan mengubah panggilan untuk RegOpenKeyEx. Panggilan ini akan gagal jika "TestKey\SubKey1" tidak ada. Untuk menghindari masalah ini, gunakan panggilan untuk RegCreateKeyEx daripada panggilan ke RegOpenKeyEx. RegCreateKeyEx akan membuka kunci tertentu jika sudah ada.

Query nilai:

Prosedur berikutnya dapat digunakan untuk memastikan pengaturan nilai yang ada. QueryValue mengambil nama kunci dan nama nilai terkait dengan kunci dan menampilkan kotak pesan dengan nilai yang sesuai. Menggunakan panggilan untuk QueryValueEx wrapper fungsi yang didefinisikan di bawah ini, yang hanya mendukung jenis REG_SZ dan REG_DWORD.
   Private Sub QueryValue (sKeyName As String, sValueName As String)
       Dim lRetVal As Long         'result of the API functions
       Dim hKey As Long         'handle of opened key
       Dim vValue As Variant      'setting of queried value

       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
   KEY_QUERY_VALUE, hKey)
       lRetVal = QueryValueEx(hKey, sValueName, vValue)
       MsgBox vValue
       RegCloseKey (hKey)
   End Sub
    

Dengan prosedur ini, panggilan:
   QueryValue "TestKey\SubKey1", "StringValue"
    

akan menampilkan kotak pesan dengan pengaturan yang saat ini nilai "StringValue", dan mengasumsikan bahwa "StringValue" ada di tombol "TestKey\SubKey1".

Jika nilai Anda kueri tersebut tidak ada QueryValue akan mengembalikan kode galat 2 - 'ERROR_BADKEY'.

Catatan tambahan:

Contoh di atas menggunakan versi 32-bit diperpanjang fungsi registri secara eksklusif. Fungsi ini memungkinkan lebih dari satu nilai untuk dikaitkan dengan kunci masing-masing. Seperti yang dibahas di atas, RegSetValue dan RegQueryValue 16-bit bertindak pada nilai tunggal yang terkait dengan kunci saat ini (yang selalu jenis REG_SZ). Fungsi-fungsi ini muncul dalam 32-bit Registry Editor dengan nama < NO nama >. Untuk mengatur, mengubah, atau permintaan nilai terkait ini khusus, salah satu harus menggunakan fungsi registri 16-bit. Membaca dan menulis dari registri di lingkungan 16-bit adalah jauh lebih sederhana daripada di lingkungan 32-bit. Prosedur dasar yang sama diikuti: membuka kunci dan mendapatkan pegangan dan kemudian memanggil fungsi modifikasi Anda dengan yang menangani, tetapi tidak ada pertimbangan kebutuhan harus dibuat untuk beberapa nilai terkait atau untuk jenis data nilai yang berbeda. Aplikasi 16-bit yang dapat membuat dan mengubah kunci dan nilai-nilai dengan deklarasi dari fungsi RegCreateKey, RegOpenKey, RegQueryValue, RegSetValue, dan RegCloseKey.

Dalam beberapa kasus, ada tidak perlu untuk nilai apapun berhubungan dengan kunci. Aplikasi mungkin hanya perlu tahu jika kunci atau nilai tertentu yang ada, dan tidak peduli tentang sifat dari nilai-nilai kunci. Dalam situasi seperti ini, RegEnumKey, RegEnumKeyEx, dan RegEnumValue fungsi dapat digunakan untuk menentukan apakah kunci atau nilai tertentu yang ada. Untuk informasi lebih lanjut tentang fungsi-fungsi ini mengacu pada referensi API Peninjau teks dan/atau Windows API.

Fungsi API dan konstan Deklarasi

   Option Explicit

   Public Const REG_SZ As Long = 1
   Public Const REG_DWORD As Long = 4

   Public Const HKEY_CLASSES_ROOT = &H80000000
   Public Const HKEY_CURRENT_USER = &H80000001
   Public Const HKEY_LOCAL_MACHINE = &H80000002
   Public Const HKEY_USERS = &H80000003

   Public Const ERROR_NONE = 0
   Public Const ERROR_BADDB = 1
   Public Const ERROR_BADKEY = 2
   Public Const ERROR_CANTOPEN = 3
   Public Const ERROR_CANTREAD = 4
   Public Const ERROR_CANTWRITE = 5
   Public Const ERROR_OUTOFMEMORY = 6
   Public Const ERROR_ARENA_TRASHED = 7
   Public Const ERROR_ACCESS_DENIED = 8
   Public Const ERROR_INVALID_PARAMETERS = 87
   Public Const ERROR_NO_MORE_ITEMS = 259

   Public Const KEY_QUERY_VALUE = &H1
   Public Const KEY_SET_VALUE = &H2
   Public Const KEY_ALL_ACCESS = &H3F

   Public Const REG_OPTION_NON_VOLATILE = 0

   Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long
   Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias _
   "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions _
   As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes _
   As Long, phkResult As Long, lpdwDisposition As Long) As Long
   Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
   "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As _
   Long) As Long
   Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As String, lpcbData As Long) As Long
   Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, lpData As _
   Long, lpcbData As Long) As Long
   Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As Long, lpcbData As Long) As Long
   Declare Function RegSetValueExString Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As _
   String, ByVal cbData As Long) As Long
   Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, _
   ByVal cbData As Long) As Long
    

SetValueEx dan QueryValueEx Wrapper fungsi:
   Public Function SetValueEx(ByVal hKey As Long, sValueName As String, _
   lType As Long, vValue As Variant) As Long
       Dim lValue As Long
       Dim sValue As String
       Select Case lType
           Case REG_SZ
               sValue = vValue & Chr$(0)
               SetValueEx = RegSetValueExString(hKey, sValueName, 0&, _
                                              lType, sValue, Len(sValue))
           Case REG_DWORD
               lValue = vValue
               SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, _
   lType, lValue, 4)
           End Select
   End Function

   Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As _
   String, vValue As Variant) As Long
       Dim cch As Long
       Dim lrc As Long
       Dim lType As Long
       Dim lValue As Long
       Dim sValue As String

       On Error GoTo QueryValueExError

       ' Determine the size and type of data to be read
       lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
       If lrc <> ERROR_NONE Then Error 5

       Select Case lType
           ' For strings
           Case REG_SZ:
               sValue = String(cch, 0)

   lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, _
   sValue, cch)
               If lrc = ERROR_NONE Then
                   vValue = Left$(sValue, cch-1)
               Else
                   vValue = Empty
               End If
           ' For DWORDS
           Case REG_DWORD:
   lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, _
   lValue, cch)
               If lrc = ERROR_NONE Then vValue = lValue
           Case Else
               'all other data types not supported
               lrc = -1
       End Select

   QueryValueExExit:
       QueryValueEx = lrc
       Exit Function

   QueryValueExError:
       Resume QueryValueExExit
   End Function 
Berlaku bagi:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic for Applications 6.0
Kata kunci: 
kbcode kbhowto kbtophit kbmt KB145679 KbMtid
 
 

25 November 2012

Berikut adalah cara-cara untuk menekan tombol di form lain dengan menggunakan kode . Jadi anda tidak perlu untuk menggunakkan mouse pointer anda untuk mengkliknya  .

[ VB 6.0 ]

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
[ VB .NET ]
Private Declare Function SendMessage Lib"user32.dll" Alias "SendMessageA"(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As Object) As Integer

Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202


Sekarang untuk mempraktekkannya gunakan kode seperti berikut :
 [ VB 6.0 ]
SendMessage Command1.hwnd, &HF3, 1, 0
Sleep 150
SendMessage Command1.hwnd, &HF3, 0, 0

Command1.Value = True

[ VB .NET ]
SendMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0)
Application.DoEvents()
Threading.Thread.Sleep(150)
SendMessage(Button1.Handle, WM_LBUTTONUP, 0, 0)

Button1.PerformClick()
Sudah lama banget tidak posting di blog ini .karena saya sangat sibuk dan lagi banyak ulangan dari guru .
Terus terang saja, untuk menyimpan settingan form ke dalam registry cukup simple dan mudah .

Pertama-tama buat form dan beri textbox ke dalam form.
pada form unload,  ketikkan seperti yang dibawah ini :
'Untuk menyimpan ..
SaveSetting app.title,"Settings","Form1",text1.text

Pada form Load ketikkan kode ini  .
'Untuk Mengambil settingan..
Text1.Text = GetSetting (app.title,"Settings","Form1")

Untuk dapat mengetahui apakah settingan sudah di simpan atau belum, anda dapat mengisi textbox berikut dengan kata-kata apa saja, lalu keluar dari aplikasi tersebut dan jalankan kembali aplikasi anda .
Apa yang terjadi ? Coba saja, dan semoga bermanfaat :)

Recent Comment

Contact Form

Name

Email *

Message *

2012 © Jabat Software