Showing posts with label Article. Show all posts
Showing posts with label Article. Show all posts

Thursday, December 20, 2012

VB6 Code: Menggunakan ( := ) dalam Coding VB6

Apabila Anda sering bekerja dengan pemrograman macro yang terdapat dalam Microsoft Office , entah itu macro yang ada dalam Microsoft Office 97, Microsoft Office 2000, Microsoft Office 2003, Microsoft Office 2007, dan Microsoft Office seterusnya, tentu Anda sudah tidak asing lagi dengan := (titik dua sama dengan).

Dikarenakan VB6 identik dengan VBA office dalam artian keduanya menggunakan bahasa yang sama, kebutuhan runtime file yang sama, dan sebagainya (yang berbeda hanya objek-objek saja), maka apa yang ada dalam VBA tentu bisa dijalankan dalam VB6. Salah satunya adalah tanda (:=) walau jarang sekali melihatnya dalam pengkodean VB6.

Tanda (:=) merupakan pemberitahuan kepada compiler bahwa sebuah argumen optional telah diisi dengan nilai tertentu. Agar lebih jelasnya berikut merupakan contoh sebuah function yang memiliki 26 argument optional (argumen yang memiliki 2 opsi, boleh diisi atau tidak):

Option Explicit

'Sebuah function dengan 26 argument, nama argument dari a s/d z
Private Function Test(Optional a, Optional b, Optional c, Optional d, Optional e _
, Optional f, Optional g, Optional h, Optional i, Optional j, Optional k, Optional l _
, Optional m, Optional n, Optional o, Optional p, Optional q, Optional r, Optional s _
, Optional t, Optional u, Optional v, Optional w, Optional x, Optional y, Optional z)
    MsgBox o
    MsgBox z
    'Kode dan seterusnya
End Function
Maka untuk memanggil fungsi di atas bisa seperti ini:
Private Sub Command1_Click()
    Call Test(, , , , , , , , , , , , , , 6, , , , , , , , , , , 1)
End Sub
Atau seperti ini:
Private Sub Command2_Click()
    Call Test(o:=6, z:=1) 'Call disini berguna untuk memudahkan pembacaan kode
End Sub
Atau seperti ini (dengan membalikan, argumen z di depan dan argumen o di belakang):
Private Sub Command3_Click()
     Call Test(z:=1, o:=6)
End Sub
Atau seperti ini (tanpa call):
Private Sub Command4_Click()
     Test z:=1, o:=6 'tanpa Call juga bisa berjalan kok
End Sub
Mana yang menurut Anda praktis?
READ MORE - VB6 Code: Menggunakan ( := ) dalam Coding VB6

Wednesday, June 20, 2012

Cara Yang Cerdik Untuk Mentrap On Error Resume Next - VB6

Mengenai cara men-trap (menjebak) objek error yang berada di bawah bari On Error Resume Next - Bagaimana kita dapat melakukan sebuah pengecualian dalam baris yang berada di bawah On Error Resume Next, di bawah adalah contoh kode VB6 beserta penjelasannya:
Option Explicit

Private Sub Command1_Click()
'Baris pertama kita memasang On Error Resume Next, maksudnya
'kita memberitahukan pada compiler VB6 untuk melangkahi baris error
'dan mengeksekusi baris berikutnya tanpa harus menampilkan pesan error
On Error Resume Next

'Selanjutnya kita mamasang satu variable i (catatan: variable satu huruf
'seperti i, b, j dan selanjutnya, hanya bisa digunakan pada sebuah jangkah (scope)
'yang sempit, dan jangan pernah menggunakannya pada scope yang luas seperti
'Public i as Integer dan variable i berada pada module, Global l as long, dst
Dim i As Integer

'Dengan adanya On Error Resume Next di atas, maka kode di bawah ini akan
'diabaikan/dilangkahi oleh compiler VB6. Selanjutnya pesan error tidak akan
'ditampilkan
i = "Hai, ini pasti error"

'Walaupun kita telah memasang baris On Error Resume Next, bukan berarti
'Bukan berarti Error Object tidak, Error Object tetap bekerja sebagaimana
'biasanya
If Err Then 'Apabila Error = True a.k.a Err.Number > 0 maka ...
'Kode trap ...
MsgBox Err.Description
'Kode trap ...
End If

'Baris di bawah akan meng-Clear error
On Error GoTo 0

'Sekarang lihat hasilnya
MsgBox Err.Description
End Sub
Kode utuh tanpa keterangan (comment) adalah sebagai berikut:
Option Explicit

Private Sub Command1_Click()
On Error Resume Next
Dim i As Integer
i = "Hai, ini pasti error"
If Err Then
MsgBox Err.Description
End If
On Error GoTo 0
MsgBox Err.Description
End Sub
READ MORE - Cara Yang Cerdik Untuk Mentrap On Error Resume Next - VB6

Thursday, June 14, 2012

Apa Yang Terjadi Jika dd/mm/yyyy dirubah menjadi mm/yyyy

Mengenai merubah format "dd/mm/yyyy" yang dirubah menjadi "mm/yyyy" dalam VB6 - Judul di atas sangat jelas, Apakah yang akan terjadi dengan sebuah tanggal yang memiliki format "dd/mm/yyyy" kemudian kita rubah formatnya menjadi "mm/yyyy" dalam pemrograman Visual Basic 6.0? pemahaman ini sangat penting terutama jika kita banyak berhubungan dengan pemrograman VB6 yang melibatkan banyak format tanggal, misalnya merancang aplikasi database.

Apabila kita menginput sebuah tanggal misalnya #12/06/2012# dalam format "dd/mm/yyyy" kemudian kita rubah dengan "mm/yyyy" sehingga menjadi #06/2012# apakah yang terjadi dengan tanggal 12? tanggal 12 akan kembali ke tanggal awal atau tanggal 01. Untuk membuktikannya coba Anda buat kode yang sangat sederhana seperti di bawah ini:

Option Explicit

Private Sub Command1_Click()
Dim d As Date
d = #23/12/2012#
Dim s As String
s = Format$(d, "mm/yyyy")
MsgBox CDate(Format$(s, "dd/mm/yyyy"))
End Sub
Apakah artinya? banyak, mari kita buat logika pemrograman sederhana dengan menggunakan pengetahuan di atas. Contoh kasus sederhana: Diketahui tanggal #30/01/2012#, ditanyakan nama hari dari awal tanggal a.k.a #01/01/2012#? maka:
Option Explicit

Private Sub Command1_Click()
Dim d As Date
d = #23/12/2012#
Dim s As String
s = Format$(d, "mm/yyyy")
MsgBox Format$(s, "dddd")
End Sub
Bukankah kode di atas akan menghasilkan Sabtu untuk tanggal #01/12/2012# dan Minggu untuk tanggal #23/12/2012#?
READ MORE - Apa Yang Terjadi Jika dd/mm/yyyy dirubah menjadi mm/yyyy

Friday, June 8, 2012

Cara Mengatasi Aplikasi Crash Akibat OCX Third Party

Bagaimana kita dapat mengatasi aplikasi yang menjadi crash pada saat keluar (exit) dari program akibat dari ocx yang dibuat oleh pihak ketiga (third party)? Penggunaan ocx yang kurang stabil (pada aplikasi yang telah dicompile/dijadikan exe), seringkali menyebabkan crash yaitu pada saat keluar dari aplikasi tersebut. Kondisi ini tentu saja sangat mengganggu, karena aplikasi, tidak akan pernah menjalankan kode-kode yang berada pada event Unload atau QueryUnload, seperti kode untuk mengatur settingan pada registry, settingan pada file .ini, dsb. Bagaimana cara mengatasi keadaan tersebut? ikuti langkah-langkah berikut:
  • Tambahkan satu CommonDialog biarkan dengan nama default CommondDialog1
  • Tambahkan satu UserControl biarkan dengan nama default UserControl1
  • Biarkan CommonDialog dan UserControl tersebut tanpa ditambahkan kode.
Lakukan compile ulang, dan lihatlah hasilnya, dalam banyak kasus kondisi di atas bisa diatasi, tapi bila masih crash sebaiknya Anda mencari pengganti dari ocx tersebut.
READ MORE - Cara Mengatasi Aplikasi Crash Akibat OCX Third Party

Tips Menempatkan CommonDialog Pada Posisi Yang Diinginkan

Posting mengenai cara mudah menempatkan CommonDialog pada koordinat yang diinginkan - Dari beberapa common dialog yang terdapat pada COMDLG32.OCX, ada beberapa common dialog yang sulit untuk diatur posisinya, dalam arti ia selalu tampil pada sisi kiri bagian atas, mengapa demikian? karena sebelum tampil ia (COMDLG32.OCX) membaca terlebih dahulu koordinat yang diperoleh dari hwnd parentnya. Nah, untuk memposisikan commondialog pada saat tampil, ikuti langkah-langkah berikut:
  1. Pada form tambahkan satu PictureBox jadikan property visible = false
  2. Samakan ukurannya dengan COMDLG32.OCX (agar tidak menghabiskan space).
  3. Masukan COMDLG32.OCX pada PictureBox tadi
  4. Aturlah posisi PictureBox tadi pada koordinat tertentu
Sekarang CommonDialog akan selalu tampil mengikuti koordinat PictureBox yang menjadi parentnya. Untuk mengujinya (dengan mengikuti langkah di atas) buatlah kode seperti di bawah ini:
'kode di bawah simpan pada form 
'tambahkan CommandButton dengan nama default Command1
'tambahkan CommonDialog dengan nama default CommonDialog1
Option Explicit

Private Sub
Command1_Click()
CommonDialog1.ShowColor
End Sub
Selanjutnya jadikan property form WindowState = 2 - Maximize, bandingkan hasilnya sebelum dan sesudah menggunakan PictureBox. Demikian mengenai cara menempatkan CommonDialog pada posisi yang diinginkan. Semoga bermanfaat.
READ MORE - Tips Menempatkan CommonDialog Pada Posisi Yang Diinginkan

Tuesday, May 29, 2012

Modal, Modeless, Non Modal Non Modeless - VB6

Dalam menampilkan sebuah form, apalagi jika bukan method .Show yang digunakan. Method .Show ini memiliki dua parameter, yaitu [Modal] dan [OwnerForm], jadi lengkapnya adalah seperti ini Form.Show ([Modal], [OwnerForm]). Karena dua parameter (Modal, OwnerForm) ini bersifat Optional, maka kita memiliki pilihan antara memasukan argumen (satu atau kedua-duanya) atau tidak. Yang menjadi pertanyaan disini adalah, bagaimana kita dapat mengetahui perbedaan antara argumen yang dimasukan (Modal, Modeless, Non Modal Non Modeless)?

Untuk memahami perbedaan antara Modal, Modeless, Non Modal Non Modeless lebih baik kita praktekan saja. Buatlah Project Standar Exe dengan dua Form, Form1 dan Form2. Pada Form1 berilah satu CommandButton. Masukan kode di bawah ini pada Form1.
Option Explicit 

Private Sub
Command1_Click()
Form2.Show 'Non Modal Non Modeless
MsgBox "Non Modal Non Modeless"
End Sub
Jalankan kode di atas, Klik sembarang pada Form1.

Kesimpulan: Pertama, dengan menggunakan kode di atas, kode-kode selanjutnya akan tetap dijalankan (disini diwakili dengan MessageBox). Kedua, Form1 dapat menempati posisi paling depan (Zorder 0). Nah, sekarang rubahlah kodenya menjadi:
Option Explicit 

Private Sub
Command1_Click()
Form2.Show vbModal, Me 'Modal
MsgBox "Non Modal Non Modeless"
End Sub
Jalankan kode di atas, Klik sembarang pada Form1.

Kesimpulan: Pertama, dengan menggunakan kode kedua, kode-kode selanjutnya tidak bisa dijalankan (disini diwakili oleh MessageBox) sebelum Form2 di tutup. Kedua, Form1 tidak bisa menempati posisi paling depan. Sekarang, rubahlah kodenya menjadi:
Option Explicit 

Private Sub
Command1_Click()
Form2.Show vbModeless, Me
MsgBox "Non Modal Non Modeless"
End Sub
Jalankan kode di atas, klik sembarang pada Form2.

Kesimpulan: Pertama, kode-kode selanjutnya bisa dijalankan (diwakilik MessageBox). Kedua: Form1 tidak bisa menempati posisi paling depan (Zorder 0).
Nah, sekarang Anda telah memahami perbedaan antara Modal, Modeless, Non Modal Non Modeless. Mengenai argumen-argumen ini ada sebuah trik yang sangat bagus (setidaknya menurut saya sendiri), dan bisa Anda baca disini.

Semoga Bermanfaat.
READ MORE - Modal, Modeless, Non Modal Non Modeless - VB6

Beberapa masalah penggunaan file manifest dan Penyelesaiannya

Penggunaan file manifest untuk meng- Style XP-kan objek-objek Visual Basic 6.0 ternyata memiliki bebearapa masalah, diantaranya:
  1. Hilangnya shortcut mnemonic
  2. OptionButton dan CheckBox yang disimpan dalam kontainer Frame berubah berwarna hitam mengakibatkan Caption dari dua objek tersebut tidak dapat terbaca.
  3. CommandButton yang property style-nya diset pada mode 1-Graphical tidak mau berubah menjadi Style XP.
  4. MSCOMCTL.OCX TreeView, ToolBar, dsb tidak mau berubah menjadi Style XP.
Penyelesaian:
  • Masalah ke-1: Simpan kode di bawah ini pada module, selanjutnya panggil pada setiap Event Form Load.
    Option Explicit 

    Private Const
    WM_CHANGEUISTATE As Long = &H127
    Private Const UISF_HIDEFOCUS As Integer = &H1
    Private Const UISF_HIDEACCEL As Integer = &H2
    Private Const UIS_CLEAR As Integer = &H2

    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

    Public Sub
    ShowMnemonic(frm As Form)
    Dim uiState As Long
    uiState = MakeLong(UIS_CLEAR, UISF_HIDEFOCUS Or UISF_HIDEACCEL)
    SendMessage frm.hwnd, WM_CHANGEUISTATE, uiState, ByVal 0
    End Sub

    Private Function
    MakeLong(ByVal wLow As Integer, ByVal wHigh As Integer) As Long
    MakeLong = wHigh * &H10000 + wLow
    End Function
  • Masalah ke-2: Jangan tempatkan OptionButton dan CheckBox secara langsung di atas Frame, tetapi simpanlah kedua objek tersebut di atas PictureBox, selanjutnya pindahkan PictureBox ini ke dalam Frame.
  • Masalah ke-3: Mengenai permasalah ini Anda dapat mengunjugi situs Edanmo (Eduardo A. Morcillo).
  • Masalah ke-4: Sudah diselesaikan disini.

READ MORE - Beberapa masalah penggunaan file manifest dan Penyelesaiannya

Kesalahan Penulisan Variable Yang Umum Terjadi

Seringkali kita menemui penulisan variable seperti di bawah ini:
Option Explicit 

Private Sub
Form_Load()
Dim i, a, b, c, s As String
'Kode selanjutnya
End Sub

Penulisan variable seperti di atas seakan-akan menunjukan bahwa i, a, b, c memiliki tipe data string, Padahal dalam kenyataanya variable i, a, b, c di atas memiliki type data variant, hanya variable s saja dari contoh di atas yang memiliki type data string. Darimana kita mengetahuinya? mari kita lanjutkan.... rubahlah kode di atas sehingga menjadi:
Option Explicit 

Private Sub
Form_Load()
Dim i, a, b, c, s As String
'Kode selanjutnya ...
'TypeName digunakan untuk mengetahui data type sebuah variable
Debug.Print TypeName(i) 'Empty -> data type variant
Debug.Print TypeName(b) 'Empty -> data type variant
Debug.Print TypeName(c) 'Empty -> data type variant
Debug.Print TypeName(s) 'String -> data type string
End Sub

Sebelum menjalankan kodenya, pijit CTRL + G untuk memunculkan Immediate Window untuk melihat hasilnya.
READ MORE - Kesalahan Penulisan Variable Yang Umum Terjadi