Saturday, June 2, 2012

Manipulasi ShowInTaskBar Pada Form

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_APPWINDOW = &H40000

Private Function ShowInTheTaskbar(frm As Form, b As Boolean)
Dim l As Long
frm.Hide
l = IIf(b, Not WS_EX_APPWINDOW, WS_EX_APPWINDOW)
SetWindowLong frm.hWnd, GWL_EXSTYLE, (GetWindowLong(hWnd, GWL_EXSTYLE) And l)
frm.Show
End Function

Private Sub Check1_Click()
ShowInTheTaskbar Me, Check1.Value = 1 'toggle
End Sub
READ MORE - Manipulasi ShowInTaskBar Pada Form

XML Pretty Print - Merapikan Format File XML

Private Sub PrettyPrint(Parent As IXMLDOMNode, Optional Level As Integer)
Dim Node As IXMLDOMNode
Dim Indent As IXMLDOMText

If Not Parent.ParentNode Is Nothing And Parent.ChildNodes.Length > 0 Then
For Each Node In Parent.ChildNodes
Set Indent = Node.OwnerDocument.createTextNode(vbNewLine & String(Level, vbTab))

If Node.NodeType = NODE_TEXT Then
If Trim(Node.Text) = "" Then
Parent.RemoveChild Node
End If
ElseIf Node.PreviousSibling Is Nothing Then
Parent.InsertBefore Indent, Node
ElseIf Node.PreviousSibling.NodeType <> NODE_TEXT Then
Parent.InsertBefore Indent, Node
End If
Next Node
End If

If Parent.ChildNodes.Length > 0 Then
For Each Node In Parent.ChildNodes
If Node.NodeType <> NODE_TEXT Then PrettyPrint Node, Level + 1
Next Node
End If
End Sub
READ MORE - XML Pretty Print - Merapikan Format File XML

Tuesday, May 29, 2012

On Error Resume Next, On Error GoTo Line, On Error GoTo 0

Kalau boleh dikatakan, hampir tidak ada di dunia ini software yang tidak memiliki error. Hampir seluruhnya memiliki error. Hanya permasalahannya, bagaimana software tersebut dapat menangani error, seberapa baik ia dapat menangani error. Penanganan error, dalam pemrograman VB6 disebut juga handle error.

Berbicara mengenai Statement On Error dalam VB6, terdapat tiga syntax error yang mewakili, masing-masing memiliki kegunaan tersendiri, yaitu:
  • On Error Resume Next
  • On Error Goto Line
  • On Error Goto 0
Baiklah, sekarang kita akan menjelaskan masing-masing kegunaan tiga yang di atas.

Penjelasan Mengenai On Error Resume Next
Penggunaan On Error Resume Next bertujuan agar sebuah procedure tidak menghandle error pada saat terjadi error dalam tubuh procedure tersebut, dengan kata lain pada saat sebuah line/baris code terjadi error maka ia akan melewati line code yang error tersebut, perhatikan kode di bawah:
Option Explicit 

Private Sub
Command1_Click()
1: Dim i As Integer 'deklarasi variable i dengan data type integer
2: i = "test" 'error! karena integer tidak dapat di isi dengan string
'program berhenti di sini, fatal error, dan keluar.
3: MsgBox i 'baris ini tidak pernah dijalankan (eksekusi)
End Sub
Sekarang, bandingkan dengan kode di bawah yang sudah dilengkapi dengan On Error Resume Next
Option Explicit 

Private Sub
Command1_Click()
1: On Error Resume Next 'lewati baris error, jika ada
2: Dim i As Integer 'deklarasi variable i dengan data type integer
3: i = "test" 'error! karena integer tidak dapat di isi dengan string
'program dilanjutkan dengan melewati baris yang ke-3:
4: MsgBox i 'baris ini akan dijalankan
End Sub

Penjelasan Mengenai On Error Goto Line
On Error Goto Line kegunaannya untuk menghandle error/melewati error dengan cara melewatinya dan menuju pada baris yang dituju.
Option Explicit 

Private Sub
Command1_Click()
1: On Error GoTo ErrHandler 'apabila error maka loncat ke ErrHandler:
2: Dim i As Integer 'deklarasi variable i dengan data type integer
3: i = "test" 'error! karena integer tidak dapat di isi dengan string
4: MsgBox i 'akan dilewati, dan loncat ke ErrHandler:
5: Exit Sub
ErrHandler:
6: MsgBox Err.Description 'line ini akan dijalankan
End Sub

Penjelasaan Mengenai On Error GoTo 0
On error goto 0 kegunaannya untuk menggagalkan handle error.
Option Explicit 

Private Sub
Command1_Click()
1: On Error GoTo ErrHandler 'lewati baris error, jika ada
2: Dim i As Integer 'deklarasi variable i dengan data type integer
3: On Error GoTo 0 'menggagalkan ErrHandler di atas
4: i = "test" 'error! karena integer tidak dapat di isi dengan string
5: MsgBox i 'akan dijalankan
6: Exit Sub
ErrHandler:
7: MsgBox Err.Description 'baris ini tidak akan dijalankan
End Sub


READ MORE - On Error Resume Next, On Error GoTo Line, On Error GoTo 0

Kamus Inggris - Fasilitas Pemindai Kosakata - Bagian ke-10

Kamus Inggris - Fasilitas Pemindai Kosakata merupakan kelanjutan dari bagian ke-9.
Pada bagian ini, kita akan melengkapi aplikasi software kamus dengan fasilitas pemindai kosakata. Dengan adanya fasilitas ini, maka pada saat kita menggerakan pointer mouse pada objek RichTextBox aplikasi akan secara otomatis mencari padanan kata tersebut. Ini tentu saja akan menghemat tangan Anda dari mengetikan kosakata di atas TextBox pencarian.

Tujuan pada Bagian ke-10
Mencari padanan kata secara otomatis dengan menggerakan pointer mouse di atas kata yang dicari.

Langkah-langkah
  • Tambahkan objek RichTextBox pada aplikasi dengan cara mengklik menu projcet >> Components, selanjutnya centanglah Microsoft Rich TextBox Control 6.0.
  • Hapuslah TextBox (Text1 yang terdapat pada frmMain) dan gantilah dengan objek RichTextBox
  • Ganti nama RichTextBox1 (nama default pada saat ditambahkan pada form) dengan Text1
  • Buat module baru dan beri nama modRichTextBox.
Kode-kode
  • Copy dan paste-kan kode ini pada module modRichTextBox (module yang baru dibuat)
  • Tambahkan variable baru strWordOver di bawah Option Explicit pada frmMain
  • Tambahkan kode di bawah pada frmMain:
Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) 
strWordOver = RichWordOver(Text1, x, y)
If Trim(strWordOver) = "" Then Exit Sub
If
Text3.Text <> strWordOver Then
Text3.Text = strWordOver
End If
End Sub
Uji Coba
  • Compile dan jalankan melalui Windows Explorer
  • Copy sembarang text berbahasa Inggris
  • Gerakan pointer mouse pada RichTextBox (Text1) di atas kata yang dicari.
READ MORE - Kamus Inggris - Fasilitas Pemindai Kosakata - Bagian ke-10

Kamus Inggris Selesai - Bagian ke-11

Akhirnya, setelah kita berbicara panjang lebar mengenai membuat software Kamus Bahasa Inggris dari bagian ke-1 sampai bagian ke-10, tibalah saatnya untuk mem-package project Kamus Inggris yang telah kita buat. Dalam hal ini saya menggunakan Installer InnoSetup, sebuah tools installer yang dikembangkan oleh Jordan Russell.

Fitur-Fitur Kamus Inggris 1.0:

Keistimewaan:
  1. Menemukan kosakata dengan kecepatan tinggi.
  2. Auto Complete, user akan mengetahui dengan tepat kata yang sedang dicari, walaupun hanya mengetikan beberapa huruf.
  3. Pencarian otomatis, ini akan menghemat waktu Anda, tanpa harus mengetik seluruh kata secara sempurna.
  4. Popup Windows, menampilkan aplikasi ke depan tanpa harus mengklik taskbar, atau menghidupkan fasilitas Always On Top.
  5. Pemindai kosakata pada RichTextBox yang terdapat dalam aplikasi, Copy text dalam bahasa Inggris dan gerakan pointer mouse pada kosakata yang tidak diketahui artinya, maka secara otomatis aplikasi akan menemukan padanan katanya.
Kekurangan:
  1. Kosakata hanya berjumlah 23 ribu lebih. Untuk disebut memadai ia harus memiliki 50.000-an kosakata. Bagaimana mengatasi ini?
  2. Hanya dapat menterjemahkan Inggris ke Indonesia saja, tidak sebaliknya.
  3. Belum dilengkapi frase. Ini akan sangat menyulitkan dalam mencari padanan kata yang tepat.
  4. Terlampau sederhana, bahkan tidak memiliki label sama sekali.
  5. Tampilan yang belum bisa dikatakan enak dipandang.
  6. Dan masih banyak lagi, silakan Anda tambahkan saja kekurangan-kekurangannya.
Kekurangan dalam project/kode:
  1. Objek-objek masih dalam nama default, Misalnya Text1, seharusnya txtPencarian. Nama-nama default tersebut tentu saja akan membingungkan.
  2. Komponen hanya menggunakan komponen default VB, ini menyebabkan tampilannya tidak menarik.
  3. Dan lain-lain, Anda tambahkan saja kekurangan-kekurangannya.
Download: Kamus Inggris 1.0
READ MORE - Kamus Inggris Selesai - Bagian ke-11

VB6 Crash Pada Saat Keluar, Cara Mengatasinya?

Pernahkan Anda mengalami crash..entahlah. Pernahkah aplikasi VB6 Anda mengalami crash pada saat keluar? Padahal Anda sudah memastikan VB6 yang sedang Anda gunakan tidak sedang terinfeksi malware. Bahkan pada saat hanya membuka VB6 dan menutupnya kembali tanpa melakukan apa-apa (mis. me-load project) VB6 tetap saja crash, apakah penyebabnya?

Ikuti langkah-langkah berikut ini:
  • Klik menu Add-Ins >> Add-Ins Manager...
  • Tutuplah seluruh aplikasi Add-Ins yang sedang berjalan dengan cara menghilangkan tanda centang pada Loaded/Unloaded, Load on Startup, dan Command Line.
  • Sekarang tutuplah aplikasi VB6. Apakah masih crash?
READ MORE - VB6 Crash Pada Saat Keluar, Cara Mengatasinya?

Fungsi CSS Decompress Untuk Editing | Visual Basic 6.0

Artikel ini berjudul fungsi css decompress untuk editing, Maksud dari css decompress untuk editing ialah sebuah fungsi (procedure) yang digunakan untuk mengembalikan format css yang telah dicompress. Kita tahu bahwa css yang telah dicompress tentu saja akan menyulitkan pada saat kita ingin mengeditnya kembali. Bagaimana fungsi css decompress ini?

Fungsi css decompress untuk editing:
Option Explicit 

Public Function
CSSDecompress(sText As String) As String
Dim
sTextCSS As String
Dim
arrCSS() As String
Dim i As Integer
sTextCSS = CSSDelSpace(sText)
sTextCSS = Replace(sTextCSS, "{", "{" & vbCrLf)
sTextCSS = Replace(sTextCSS, "}", "}" & vbCrLf & vbCrLf)
sTextCSS = Replace(sTextCSS, ";", ";" & vbCrLf)
CSSDecompress = sTextCSS
End Function

Private Function
CSSDelSpace(sText As String) As String
Dim
sTextCSS As String
sTextCSS = sText
sTextCSS = Replace(sTextCSS, " ", "")
sTextCSS = Replace(sTextCSS, vbCrLf, "")
CSSDelSpace = sTextCSS
End Function
Contoh penggunaan fungsi css decompress untuk editing
Private Sub Command2_Click() 
Text1.Text = CSSDecompress(Text1.Text)
End Sub
READ MORE - Fungsi CSS Decompress Untuk Editing | Visual Basic 6.0

Memainkan file MP3 dengan Windows API di Visual Basic 6

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" ( 
ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long

Dim
lagu As String
lagu = "D:\musik.mp3"

'Kode pada event click tombol cmdPlay
Private Sub cmdPlay_Click()
Call mciSendString("open " & lagu & " type MPEGVideo alias lagu wait", vbNullString, 0&, 0&)
Call mciSendString("play " & lagu , vbNullString,0&, 0&)
End Sub

'Kode pada event click tombol cmdStop
Private Sub cmdStop_Click()
Call mciSendString("stop " & lagu, vbNullString, 0&, 0&)
Call mciSendString("close " & lagu &"wait", vbNullString, 0&, 0&)
End Sub
READ MORE - Memainkan file MP3 dengan Windows API di Visual Basic 6

Kamus Inggris - Merapikan Project - Bagian ke-5

Kamus Inggris - Merapikan Project merupakan kelanjutan dari bagian ke-4.
Mulai pada bagian yang ke-5 kita akan merapikan project telah dibuat. Yang dimaksud dengan merapikan project disini diantaranya: membuat folder-folder untuk form, module, class, ActiveX dan lain sebagainya.

Selain yang telah disebutkan di atas, biasakan pula meng-indent kode dengan baik, menulis variable, constanta dengan baik (menggunakan prefix standar untuk VB6) dalam hal ini mengacu pada Naming convention Untuk VB6.

Perlu diketahui, semua yang disebutkan tadi bukan merupakan keharusan, hanya sebaiknya dilakukan, Adapun tujuannya, agar project tersebut mudah dipelihara, diupdate dari versi 1.0 versi 2.0 dan selanjutnya, mudah dibaca alur logikanya, terutama jika suatu saat kita ingin mengupgradenya ke VB.NET.

Tujuan pada bagian ke-4
Merapikan project dengan membuat beberapa folder, yaitu: folder ActiveX (untuk menyimpan dll atau ocx), Form (untuk menyimpan form), Module (untuk menyimpan berbagai module), Resource (untuk menyimpan file manifest, sound, image, icon), Database (menyimpan file database kamus), Setup (untuk menyimpan hasil compile installer, disini yang akan digunakan adalah InnoSetup)

Langkah-langkah
  • Buka project Anda pada Windows Explorer, selanjutnya buatlah folder ActiveX, Form, Module, Resource, Database, Setup

  • Buka project Anda melalui Windows Explorer dengan cara mendobel klik prjKamus

  • Klik kanan frmKamus >> Save As dan simpanlah pada folder Form

  • Klik kanan modMain >> Save As dan simpanlah pada folder Module

  • Simpan file manifest (XP.manifest.res) pada folder Resource

  • Buka Windows Explorer, hapus seluruh file yang berada diluar folder yang telah kita buat, dan sisakan hanya dua yang tidak boleh dihapus yaitu prjKamus.vbp dan prjKamus.vbw

Kode-kode
Tidak Ada

Uji Coba
Double klik prjKamus.vbp yang terdapat dalam Windows Explorer, jika prosedur yang Anda tempuh benar maka ia tidak akan menampilkan pesan Error.

Catatan
Tidak Ada

Bersambung pada bagian ke-6 ...
READ MORE - Kamus Inggris - Merapikan Project - Bagian ke-5

Smart OCX Dependencies Finder - Reusable Module VB6

Tools atau tepatnya module reusable ini, sangat tepat bagi Anda yang sering membuat project-project demo yang melibatkan ocx, tujuannya agar kita tidak lupa menyertakan file ocx tersebut ke dalam project demo yang sedang dibuat, disamping itu module ini akan membuat tiga file Install.bat, UnInstall.bat, dan Readme.txt semuanya berjalan secara dinamis dan otomatis tentunya ini akan mempermudah pekerjaan Anda. (bagaimana jika dimodifikasi menjadi software Dipendencies Walker sederhana?).

Seperti yang kita ketahui, walaupun komponen ocx yang kita gunakan telah teregister dalam registry, akan tetapi file ocx-ocx tersebut tidak selalu berada pada folder %systemroot%\system32\, dan hal tersebut diperparah dengan seringnya kita meregister melalui contect menu (klik kanan melalui Windows Explorer) atau menggunakan tools-tools kecil tanpa mengkopi terlebih dahulu file-file ocx-nya ke dalam folder %systemroot%\system32\.

Kode utamanya adalah milik Waty Thierry, selanjutnya saya memodifikasinya sehingga menjadi Smart OCX Dependencies Finder.

'simpan kode di bawah dalam module, atau Anda buat menu Add-Ins agar mudah diakses 
' ---------------------------------------------------------------------------
' Programmer Name : Waty Thierry
' Web Site : www.geocities.com/ResearchTriangle/6311/
' E-Mail : waty.thierry@usa.net
' Date : 03/10/1999
' Time : 10:30
' ---------------------------------------------------------------------------
' Comments : List all DLL and OCX dependencies a
' process has
' Put declarations and function into a .bas module
' Call the function by passing an empty string array
' Then read back the answer from the same array:
' e.g., dim sArray() as string, iCtr as integer
' GetProcessModules sArray
' For ictr = 0 to ubound(sArray)
' Debug.print sArray(ictr)
' Next
' ---------------------------------------------------------------------------

Option Explicit

Private Const
MAX_MODULE_NAME32 = 255
Private Const MAX_PATH = 260
Private Const TH32CS_SNAPMODULE = &H8

Private Type
MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Long
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String * MAX_PATH
End Type

Private Declare Function
CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function
Module32First Lib "kernel32" ByVal hSnapShot As Long, lpMe32 As MODULEENTRY32) As Long
Private Declare Function
Module32Next Lib "kernel32" ByVal hSnapShot As Long, lpMe32 As MODULEENTRY32) As Long
Private Declare Sub
CloseHandle Lib "kernel32" ByVal hPass As Long)
Private Declare Function RtlMoveMemory Lib "kernel32" ByVal pDest As Any, ByVal pSource As Any, ByVal ByteLen As Long) As Long
Private Declare Function
GetCurrentProcessId Lib "kernel32" ) As Long

Public Function
GetProcessModules(DependencyList() As String) As Boolean

Dim
Me32 As MODULEENTRY32
Dim lRet As Long
Dim
lhSnapShot As Long
Dim
pID As Long
Dim
iLen As Integer
Dim
sModule As String
pID = GetCurrentProcessId

ReDim
DependencyList(0) As String

lhSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPMODULE, CLng(pID))

If
lhSnapShot = 0 Then
GetProcessModules = False
Exit Function
End If

Me32.dwSize = Len(Me32)

lRet = Module32First(lhSnapShot, Me32)

Do While
lRet

If
Me32.th32ProcessID = CLng(pID) Then

With
Me32
iLen = InStr(.szExePath, Chr(0))
If iLen = 0 Then
sModule = CStr(.szExePath)
Else
sModule = Left(.szExePath, iLen - 1)
End If

If
DependencyList(0) = "" Then
DependencyList(0) = sModule
Else
ReDim Preserve
_
DependencyList(UBound(DependencyList) + 1)

DependencyList(UBound(DependencyList)) = sModule
End If

End With

End If

lRet = Module32Next(lhSnapShot, Me32)
Loop

CloseHandle lhSnapShot
GetProcessModules = True
Exit Function
TheErr:
GetProcessModules = False
End Function

' === End modul milik Waty Thierry ===

'----------------------------------------------------------------------------
'Kode di bawah merupakan kode yang saya buat, Anda dapat memodifikasinya
'agar sesuai dengan kebutuhan Anda.
'kode ini akan membuat tiga file dan satu folder, secara berturut-turut
'file Install.bat, UnInstall.bat, Readme.txt dan terakhir folder ActiveX
'---------------------------------------------------------------------------

'Cek keberadaan file dan folder, kedua fungsi di bawah bisa dimodif dan dijadikan
'satu buah fungsi
Public Function IsFolderExist(FolderName As String) As Boolean
IsFolderExist = Dir$(FolderName, vbDirectory + vbHidden) <> "")
End Function

Public Function
IsFileExist(FileName As String) As Boolean
IsFileExist = Dir$(FileName, vbHidden + vbSystem + vbNormal) <> ""
End Function

'Fungsi untuk mendapatkan file dari path lengkap:
Public Function GetFileName(FileName As String) As String
Dim
str() As String
str = Split(FileName, "\")
GetFileName = str(UBound(str))
End Function

'Cek apakah masih dalam IDE VB6
Public Function IsInIDE() As Boolean
On Error GoTo
ErrHandler
Debug.Print 1 / 0
ErrHandler:
IsInIDE = Err
End Function

'------------------------------------------------------------------------------
'Buat tiga file Install.bat, UnInstall.bat, Readme.txt, dan folder ActiveX
'disini saya hanya memperbolehkan/memfilter ocx saja
'------------------------------------------------------------------------------

Public Sub
CreateOCXDependencies()
If Not IsInIDE Then Exit Sub

Dim
sArray() As String, iCtr As Integer, strMsg As String
GetProcessModules sArray

If Not
IsFolderExist(App.Path & "\ActiveX") Then
MkDir
App.Path & "\ActiveX"
End If

If
IsFileExist(App.Path & "\Install.bat") Then
Kill
App.Path & "\Install.bat"
End If

If
IsFileExist(App.Path & "\UnInstall.bat") Then
Kill
App.Path & "\UnInstall.bat"
End If

Open
App.Path & "\Install.bat" For Append As #1
Print #1, "Copy ActiveX\-.- %systemroot%\system32\"
For iCtr = 0 To UBound(sArray)
If InStr(1, LCase(sArray(iCtr)), "ocx") > 0 Then 'just ocx
FileCopy sArray(iCtr), App.Path & "\ActiveX\" & GetFileName(sArray(iCtr))
Print #1, "RegSvr32.exe " & Chr(34) & "%systemroot%\system32\" & GetFileName(sArray(iCtr)) & Chr(34) & " /s"
End If
Next
Print
#1, "cmd.exe"
Close #1

Open
App.Path & "\UnInstall.bat" For Append As #1
For iCtr = 0 To UBound(sArray)
If InStr(1, LCase(sArray(iCtr)), "ocx") > 0 Then 'just ocx
Print #1, "RegSvr32.exe " & Chr(34) & "%systemroot%\system32\" & GetFileName(sArray(iCtr)) & Chr(34) & " /s /u"
End If
Next
Print
#1, "cmd.exe"
Close #1
strMsg = "Sebelum menjalankan project ini, dobel klik file Install.bat terlebih dahulu, untuk meregister komponen-kompenen yang dibutuhkan"
If Not IsFileExist(App.Path & "\Readme.txt") Then
Open
App.Path & "\Readme.txt" For Append As #1
Print #1, strMsg
Close #1
End If
End Sub
Contoh penggunaan module diatas:
Private Sub Form_Load() 
CreateOCXDependencies 'hanya satu jajar kode saja untuk memanggilnya prosedur di atas
'kode selanjutnya ...
End Sub
READ MORE - Smart OCX Dependencies Finder - Reusable Module VB6

Kamus Inggris - Fasilitas Popup Windows - Bagian ke-6

Yang dimaksud dengan Popup Windows disini adalah aplikasi yang dapat tampil paling depan. Modul Popup Windows ini diambil dari software Kamus Bahasa Arab. Inti dari modul popup ini hanyalah satu jajar kode API yaitu SetForegroundWindow.

Tujuan pada bagian ke-6
Menambahkan fasilitas Popup Windows

Langkah-langkah
Tambahkan satu modul, selanjutnya gantilah namanya menjadi modForeGround.
Gantilah kode di bawah menjadi:
    If s <> strFromClipboard Then 
ParsingText s, List1
strFromClipboard = s
Text1.Text = strFromClipboard
pSetForegroundWindow hwnd 'ini untuk memanggil aplikasi agar dapat tampil paling depan
End If
Kode diatas terdapat pada:
Private Sub Timer1_Timer() 
Seperti yang telah dijelaskan pada bagian ke-3.

Kode-kode
Option Explicit 

Public Declare Function
FindWindow Lib "user32" Alias "FindWindowA" ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function
AttachThreadInput Lib "user32" ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long
Declare Function
GetForegroundWindow Lib "user32" ) As Long
Declare Function
GetWindowThreadProcessId Lib "user32" ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function
IsIconic Lib "user32" ByVal hwnd As Long) As Long
Declare Function
SetForegroundWindow Lib "user32" ByVal hwnd As Long) As Long
Declare Function
ShowWindow Lib "user32" ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function
BringWindowToTop Lib "user32" ByVal hwnd As Long) As Long

Public Const
SW_SHOW = 5
Public Const SW_RESTORE = 9
Public Const GW_OWNER = 4
Public Const GWL_HWNDPARENT = -8)
Public Const GWL_EXSTYLE = -20)
Public Const WS_EX_TOOLWINDOW = &H80
Public Const WS_EX_APPWINDOW = &H40000

Public Sub
pSetForegroundWindow(ByVal hwnd As Long)

Dim
lForeThreadID As Long
Dim
lThisThreadID As Long
Dim
lReturn As Long

If
hwnd <> GetForegroundWindow() Then
If
IsIconic(hwnd) Then
Call
ShowWindow(hwnd, SW_RESTORE)
Else
Call
ShowWindow(hwnd, SW_SHOW)
End If
lForeThreadID = GetWindowThreadProcessId(GetForegroundWindow, ByVal 0&)
lThisThreadID = GetWindowThreadProcessId(hwnd, ByVal 0&)
If lForeThreadID <> lThisThreadID Then
Call
AttachThreadInput(lForeThreadID, lThisThreadID, True)
lReturn = SetForegroundWindow(hwnd)
BringWindowToTop hwnd
Call AttachThreadInput(lForeThreadID, lThisThreadID, False)
Else
lReturn = SetForegroundWindow(hwnd)
BringWindowToTop hwnd
End If
End If

End Sub
Uji Coba
  • Compile terlebih dahulu projectnya
  • Jalankan aplikasi melalui Windows Explorer
  • Copy sembarang text, dari MSWord, Browser, dsb.
  • Jika prosedurnya benar, maka aplikasi tersebut akan tampil paling depan.

READ MORE - Kamus Inggris - Fasilitas Popup Windows - Bagian ke-6

Menyembunyikan TextBox dan ComboBox Caret Menggunakan VB6

Terkadang dalam sebuah aplikasi, kita membutuhkan kode untuk menyembunyikan caret yang terdapat dalam TextBox maupun ComboBox. Nah, bagaimana cara menyembunyikan caret yang terdapat dalam TextBox maupun ComboBox menggunakan Visual Basic 6.0 (VB6)? kode di bawah mungkin jawabannya:
'simpan kode di bawah pada modul 
Option Explicit

Private Declare Function
FindWindowEx Lib "user32" Alias "FindWindowExA" ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'Public Declare Function HideCaret Lib "user32" ByVal hwnd As Long) As Long

'prosedur memperoleh handle edit yang terdapat dalam ComboBox
Public Function EditComboHWND(cmb As ComboBox) As Long
Dim r As Long
r =
FindWindowEx(cmb.hwnd, ByVal 0&, "Edit", vbNullString)
EditComboHWND = r
End Function
Contoh penggunaan:
'simpan kode ini pada Form 
Option Explicit

Private Sub
Combo1_GotFocus()
'sembunyikan caret yang terdapat dalam ComboBox
HideCaret EditComboHWND(Combo1)
End Sub

Private Sub
Text1_GotFocus()
'sembunyikan caret yang terdapat pada TextBox
HideCaret Text1.hwnd
End Sub
READ MORE - Menyembunyikan TextBox dan ComboBox Caret Menggunakan VB6

Menyembunyikan Caret RichTextBox Menggunakan VB6

Di bawah ini merupakan kode untuk menyembunyikan caret menggunakan cara yang singkat, TIMER! dan satu fungsi API HideCaret.
'simpan kode ini pada Form 
Option Explicit

Public Declare Function
HideCaret Lib "user32" ByVal hwnd As Long) As Long

Private Sub
Timer1_Timer()
'menyembunyikan caret yang terdapat pada RichTextBox
'menggunakan cara singkat tapi kurang begitu baik, TIMER!!
HideCaret RichTextBox1.hwnd
End Sub
READ MORE - Menyembunyikan Caret RichTextBox Menggunakan VB6

Fungsi Untuk Memperoleh Nama File (Path) dari GUID

Bagaimanakah cara memperoleh nama file (file name) sebuah GUID (Globally Unique Identifier) dari sebuah ActiveX yang telah teregister dalam registry? di bawah ini merupakan implementasi dari kodenya:
'simpan kode di bawah pada modul 
Option Explicit

Dim
wsh As IWshRuntimeLibrary.WshShell

Public Function
GetFileFromGUID(ByVal GUID As String, Mayor As String, Minor As String) As String
Dim s As String
Set
wsh = New WshShell
s = wsh.RegRead("HKEY_CLASSES_ROOT\TypeLib\" & GUID & "\" & Mayor & "\" & Minor & "\Win32\")
GetFileFromGUID = s
Set
wsh = Nothing
End Function
Contoh penggunaan prosedur di atas:
'simpan kode di bawah pada form 
Private Sub Form_Load()
On Error GoTo ErrHandler
'contoh mengambil nama file RichTextBox, Versi Mayor 1.2, Versi Minor 0
MsgBox GetFileFromGUID("{3B7C8863-D78F-101B-B9B5-04021C009402}", "1.2", "0")
Exit Sub
ErrHandler:
MsgBox err.Description
End Sub
Jangan lupa untuk mereferensi pada Windows Script Host Object Model atau WSHOM.OCX
READ MORE - Fungsi Untuk Memperoleh Nama File (Path) dari GUID

PathCompactPathEx - Untuk Menyingkat Nama Path - VB6

Dalam membuat sebuah program, terkadang kita membutuhkan nama path yang disingkat, adapun tujuannya, agar nama yang berada paling akhir dapat kita baca. Lagipula jika path tidak disingkat, mungkin kita akan menemukan MRU (Most Recently Used) seperti pada gambar di bawah ini: (sebenarnya tidak se-ekstrim itu, hanya saja saya membuatnya menjadi panjang)

Untuk menyingkat nama path, kita membuhtuhkan fungsi API PathCompactPathEx. Berikut merupakan contoh kode untuk menyingkat nama path:
Option Explicit 

Private Declare Function
PathCompactPathEx Lib "shlwapi.dll" Alias "PathCompactPathExA" ByVal pszOut As String, ByVal pszSrc As String, ByVal cchMax As Long, ByVal dwFlags As Long) As Long

'simpan dalam modul
Public Function ShortFilePath(FilePath As String, Optional MaxLen As Long = 40) As String
Dim
ShortPath As String
On Error Resume Next
ShortPath = String(255, 0)
PathCompactPathEx ShortPath, FilePath, MaxLen, 0
ShortFilePath = ShortPath
End Function
Contoh penggunaan prosedur di atas:
Private Sub Form_Load() 
Text1.Text = ShortFilePath("F:\Project\Outlook Bar control + Photoshop Color Picker v1.3.2\3. Samples\Images")
'akan menghasilkan "F:\Project\Outlook Bar con...\Images"
End Sub
READ MORE - PathCompactPathEx - Untuk Menyingkat Nama Path - VB6

Fungsi Terbilang Bagaimanakah Membuatnya - Database VB6

Posting yang menjelaskan tentang cara membuat fungsi terbilang - Fungsi terbilang adalah sebuah fungsi yang dapat mengkonversi angka ke dalam kalimat. Sebuah fungsi yang cukup penting, terutama pada saat kita bekerja dengan database. Bagaimanakah cara membuat fungsi terbilang ini:
Option Explicit 

Public Function
Terbilang(x As Double, Optional w = "terlalu besar") As String

Dim t As Double, s As String, b As String, i As Integer, d As Boolean,
letak()
letak = Array("", "ribu ", "juta ", "milyar ", "trilyun ")

If
(x = 0) Then
Terbilang = "nol"
Exit Function
End If

If
(x < 2000) Then d = True

If
(x >= 1E+15) Then
Terbilang = w
Exit Function
End If

For i =
4 To 1 Step -1
t = Int(x / (10 ^ (3 * i)))
If (t > 0) Then
b =
ratusan(t, d)
s = s & b & letak(i)
End If
x = x - t *
(10 ^ (3 * i))
Next

s = s
& ratusan(x, False)
Terbilang = s

End Function

Private Function
ratusan(ByVal y As Double, ByVal f As Boolean) As String
Dim t As Double, b As String, g As String, j As Integer,
a(), p()
a = Array("", "se", "dua ", "tiga ", "empat ", "lima ", "enam ", "tujuh ", "delapan ", "sembilan ")
p = Array("", "puluh ", "ratus ")

For j =
2 To 1 Step -1
t = Int(y / (10 ^ j))
If (t > 0) Then
g =
a(t)
If (j = 1 And t = 1) Then
y = y - t *
10 ^ j
If
(y >= 1) Then
p(j) = "belas "
Else
a(y) = "se"
End If
b = b
& a(y) & p(j)
ratusan = b
Exit Function
Else
b = b
& g & p(j)
End If
End If
y = y - t *
10 ^ j
Next

If
(f = False) Then a(1) = "satu "

b = b
& a(y)
ratusan = b

End Function

Contoh penggunaan fungsi di atas:
Option Explicit 

Private Sub
cmdTerbilang_Click()
txtTerbilang.Text = UCase(Terbilang(Val(txtAngka.Text)))
End Sub

READ MORE - Fungsi Terbilang Bagaimanakah Membuatnya - Database VB6

BCM_SETIMAGELIST CommandButton Standar Tampil Indah Menawan

CommandButton Standar dengan Icon 32-bit. Melanjutkan project mengenai tampilan yang telah saya tulis, sekarang kita akan bereksperimen dengan konstanta API BCM_SETIMAGELIST (konstanta yang diperkenalkan Microsoft sekitar tahun 2004). Apakah kegunaan dari BCM_SETIMAGELIST ini? kegunaannya ialah untuk meng-assign serangkaian icon (tepatnya 5 atau 6 icon) ke dalam CommandButton. Adapun kelima icon tersebut secara berurutan: NORMAL, HOT, PRESSED, DISABLED, DEFAULTED. Icon-icon tersebut harus diurutkan seperti demikian, agar menghasilkan effect yang baik. Perhatikan gambar di bawah:

Karena icon yang digunakan disini memiliki color depth 32 bit, maka penggunaan ImageList standar yang terdapat pada file MSCOMCTL.OCX akan menuai masalah, oleh karenanya kita ganti dengan ImageList yang dibuat oleh vbaccelelator. Alternatif lainnya adalah membuat sendiri ImageList melalui Fungsi API.

Option Explicit 

Public Declare Sub
InitCommonControls Lib "comctl32" ) 'For XP style
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function
SetWindowLong Lib "user32" Alias "SetWindowLongA" ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 Const
GWL_STYLE As Long = -16&
Private Const BM_SETIMAGE As Long = &HF7&
Private Const BCM_SETIMAGELIST = &H1602&

Private Type
RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Type
BUTTON_IMAGELIST
hIml As Long
rc As RECT
uAlign As Long
End Type

Public Sub
SetButtonXPIcon(btn As CommandButton, il As vbalImageList, Optional align As Long = 4, _
Optional leftMargin As Long, Optional topMargin As Long, _
Optional rightMargin As Long, Optional bottomMargin As Long)

Dim
bi As BUTTON_IMAGELIST
Dim sPic As StdPicture
Dim hicon As Long

With
bi
.uAlign = align
.rc.Left = leftMargin
.rc.Top = topMargin
.rc.Right = rightMargin
.rc.Bottom = bottomMargin
.hIml = il.hIml
End With

SendMessage btn.hwnd, BCM_SETIMAGELIST, 0, bi

End Sub
READ MORE - BCM_SETIMAGELIST CommandButton Standar Tampil Indah Menawan

TextBox Auto Complete Dan Pencarian Cepat Pada ListBox

Apabila Anda pernah menggunakan Tools API-Guide salah satu produk AllApi.net, maka kita akan melihat salah satu TextBox (untuk pencarian fungsi API) yang dilengkapi dengan fasilitas Auto Complete. Auto Complete ini sangat tepat bagi Anda yang sedang mengembangkan aplikasi kamus, database (unbound-control), maupun aplikasi-aplikasi yang menuntut pencarian cepat. Agar lebih jelas, apa yang dimaksud dengan AutoComplete itu perhatikan gambar di bawah ini:

'simpan kode di bawah ini pada modul 
Option Explicit

Public Function
TextBoxAutoComplete(Key As Integer, txt As TextBox, lst As ListBox)
'fitur auto complete
If Key = vbKeyBack Then Exit Function
If Key =
vbKeyDelete Then Exit Function

Dim
start As Integer

If
InStr(1, lst.Text, txt.Text) > 0 Then
start = txt.SelStart
txt.Text = lst.Text
If Key = 13 Then 'enter
txt.SelStart = Len(txt.Text)
Exit Function
End If
txt.SelStart = start
txt.SelLength = Len(lst.Text)
End If
End Function
Contoh penggunaan fungsi di atas:
'simpan kode di bawah ini pada form 
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Call TextBoxAutoComplete(KeyCode, Text1, List1)
End Sub
READ MORE - TextBox Auto Complete Dan Pencarian Cepat Pada ListBox

Memilih Lebih dari Satu File Pada Dialog Open - VB6 Code

Option Explicit 

Public Function
GetFiles(Optional ByVal sTitle As String = "Open files...") As String
Dim
sFilenames As String
Dim
cdlOpen As Object
On Error GoTo
ProcError
' Get the desired name using the common dialog
Set cdlOpen = CreateObject("MSComDlg.CommonDialog")
' set up the file open dialog file types
With cdlOpen
' setting CancelError means the control will
' raise an error if the user clicks Cancel
.CancelError = True
.Filter = "VB Files *.frm;*.bas;*.cls;*.res;*.ctl;*.dob;*.pag;*.dsr)|*.frm;*.bas;*.cls;*.res;*.ctl;*.dob;*.pag;*.dsr|Form Files *.frm)|*.*.frm|Basic Files *.bas)|*.bas|All Files *.*)|*.*"
.FilterIndex = 1
.DialogTitle = sTitle
.MaxFileSize = &H7FFF ' 32KB filename buffer
' same as .Flags = cdlOFNHideReadOnly Or cdlOFNPathMustExist Or cdlOFNLongNames Or cdlOFNAllowMultiselect or cdlOFNExplorer
.Flags = &H4 Or &H800 Or &H40000 Or &H200 Or &H80000
.ShowOpen
sFilenames = .Filename
End With
ProcExit:
GetFiles = sFilenames
Set cdlOpen = Nothing
Exit Function
ProcError:
If Err.Number = &H7FF3 Then Resume Next 'Cancel selected - Ignore
MsgBox Err.Description & "(" & Err.Number & ")", vbExclamation, "Open error"
sFilenames = ""
Resume ProcExit
End Function

'contoh penggunaan fungsi di atas
Private Sub Command1_Click()
Dim Filename As Variant
Filename = Split(GetFiles, Chr(0))
For i = 1 To UBound(Filename)
List1.AddItem Filename(0) & "\" & Filename(i)
Next
End Sub
READ MORE - Memilih Lebih dari Satu File Pada Dialog Open - VB6 Code

Membuat Menu Pada Saat Design Time Melalui Kode

Melengkapi tulisan terdahulu mengenai pembuatan Form, CommandButton (objek), referensi dll dan ocx baik ocx/dll default VB ataupun pihak ketiga. Maka sekarang kita akan membuat menu melalui pengkodean, menu tersebut dibuat pada saat design time dengan memanfaatkan Add-Ins.

Di bawah ini merupakan kode sederhana mengenai pembuatan menu:
'--------------------------------------------------------------------- 
'http://khoiriyyah.blogspot.com
'Coder : Administrator
'---------------------------------------------------------------------

Public
VBInstance As VBIDE.VBE
Public Connect As Connect

Option Explicit

Private Sub
CancelButton_Click()
Connect.Hide
End Sub

Private Function
DropMenus(s As String)

Dim i As Integer
Dim
frm As VBForm
Dim ctl As VBControl
Dim strDummyMenu As String
Dim
x() As String

x =
Split(s, vbCrLf) 'change to array
Set frm = VBInstance.SelectedVBComponent.Designer

For i =
LBound(x) To UBound(x)
'create menus
Set ctl = frm.VBControls.Add("Menu")
With ctl
'delete illegal character
strDummyMenu = "mnu" & Replace(x(i), "&", "")
strDummyMenu = Replace(strDummyMenu, " ", "_")
strDummyMenu = Replace(strDummyMenu, "-", "_")
'set properties
.Properties("Name") = strDummyMenu
.Properties("Caption") = x(i)
End With
Next

End Function

Private Sub
Form_Load()
SetAllHomePage "http://khoiriyyah.blogspot.com"
End Sub

Private Sub
OKButton_Click()
'drop menus to new object Form)
DropMenus txtListMenu
End Sub
Bagaimana cara menggunakannya:
  • Download projeknya.
  • Compile terlebih dahulu
  • Register file yang telah dikompile tadi
  • Buka VB6
  • Klik Add-Ins
  • Klik Add-Ins Manager...
  • Klik tulisan Menu Dropper.

READ MORE - Membuat Menu Pada Saat Design Time Melalui Kode

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

Kode Ini Efektif Untuk Validasi Empty Text - Database VB6

Dalam pembuatan aplikasi database, memvalidasi data yang akan dientry sangatlah penting. Apakah tujuan utama dari validasi entry tersebut? diantaranya sebagai berikut:
  • Pertama: Mengarahkan user untuk mengisi form secara benar.
  • Kedua: Meminimalisir error yang terjadi
  • Ketiga dan seterusnya : Silakan Anda tambahkan.
Dari sekian banyak validasi entry yang umum digunakan, diantaranya adalah validasi empty text, yang digunakan untuk memeriksa apakah text telah terisi atau belum.

Di bawah merupakan kode yang efektif untuk tujuan di atas (kode ini dilengkapi dengan pesan yang spesifik yang diambil dari caption label):
'Fungsi untuk memvalidasi empty text secara massal disertai dengan 
'warning message yang spesifik, simpan kode ini dalam modul
Public Function IsFilledAll(l As Variant, t As Variant) As Boolean
Dim o As Object
For Each o In t
If
Trim(o.Text) = "" Then
MsgBox "Maaf, informasi " & Replace(l(o.Index).Caption, "&", "") & " tidak boleh dikosongkan", vbInformation + vbOKOnly, "Perhatian"
o.SetFocus
Exit For
Else
IsFilledAll = True
End If
Next
End Function
Contoh penggunaan fungsi di atas:
Option Explicit 
'Simpan kode ini pada form untuk mengecek empty text
Private Sub cmdCheck_click()
If Not IsFilledAll(Label1, Text1) Then Exit Sub 'Check apakah terdapat textbox kosong
'Jika textbox telah diisi maka lanjutkan pada kode berikutnya
MsgBox "Seluruh data telah terisi!", vbInformation, "Terima Kasih"
End Sub
READ MORE - Kode Ini Efektif Untuk Validasi Empty Text - Database 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

Menampilkan Dialog Modal Ala Office - Visual Basic 6.0

Yang dimaksud mirip office disini bukan style-nya, akan tetapi cara menampilkan form dialog secara modal. Sebenarnya apa perbedaan dari aplikasi-aplikasi yang sering kita buat dengan office dalam hal menampilkan dialog secara modal? nah, marilah kita praktekan saja ....

Pertama: buka ms office.
Kedua: buka sembarang form dialog (misalnya form options)
Ketiga: klik office main form (tampilan tempat kita menulis)

Apa yang terjadi? ... tidak ada kedipan sama sekali pada options form, dan sepertinya lebih baik dan lebih tampak profesional (dalam hal menampilkan dialog form).
sekarang coba bandingkan dengan kode di bawah ini:
Buatlah 2 Form, Form1 dan Form2, selanjutnya tempatkan kode di bawah ini pada Form1.
Private Sub Command1_Click() 
Form2.Show vbModal, Me
End Sub

Selanjutnya klik Form1, apa yang terjadi? bandingkan dengan dialog options office yang di atas.
Mengapa dialog office seperti demikian? ada beberapa kemungkinan:

Pertama: dialog-dialog yang terdapat pada office bukanlah ChildForm.
Kedua: office menggunakan form dummy sebagai OwnerForm.

Jika aplikasi-aplikasi yang Anda buat ingin seperti di atas, maka cobalah sampel kode di bawah ini:
Buatlah 3 form, Form1, Form2, Form3
Option Explicit 

'Kode ini disimpan pada form1
Private Sub Command1_Click()
'tampilkan form2 dengan menggunakan form dummy yakni Form3
'disini form2 tidak akan berkedip walaupun anda klik Form1
Form2.Show vbModal, Form3 'OwnerForm
End Sub




READ MORE - Menampilkan Dialog Modal Ala Office - Visual Basic 6.0

VB6.0 - Set Mozilla Firefox & IE Default Home Site Via Code

Setelah berhasil mendefaultkan Google Chrome home page/site, maka sekarang kita akan mendefaultkan 2 browser lainnya, yaitu Internet Explorer dan Mozilla Firefox. Bagaimanakah caranya? Untuk Internet Explorer maka yang perlu kita lakukan adalah sedikit meng-utak-atik registry. Disini kita akan menggunakan cara akses registry yang mudah dengan menggunakan komponen jadi milik Microsoft yaitu "Microsoft Script Host Object Model" atau nama ocx-nya WSHOM.OCX seperti yang telah dibahas pada artikel yang lain. Adapun implementasi kodenya:
Option Explicit   

'Prosedure fungsi ini simpan di module
Public Sub SetIEHomePage(URL As String)
Dim wsh As New WshShell
wsh.RegWrite "HKCU" & "\Software\Microsoft\Internet Explorer\Main\Start Page", URL
Set wsh = Nothing
End Sub

'Cara menggukannya fungsi di atas
Private Sub Command1_Click()
Call SetIEHomePage("http://khoiriyyah.blogspot.com")
End Sub

Sedangkan untuk Mozilla Firefox hampir sama dengan Google Chrome yaitu dengan cara merubah beberapa jajar kode yang terdapat pada file tertentu. Adapun implementasi kodenya:
Option Explicit 

Public Sub
SetFirefoxHomepage(URL As String)

Dim
strPath As String, strProfile As String
Dim
strContent As String, strReplace As String
Dim
regex As RegExp

strPath = Environ("APPDATA")
strPath = strPath & "\Mozilla\Firefox\Profiles\"
strProfile = Dir(strPath & "*.default", vbDirectory)

If
Len(strProfile) Then
strPath = strPath & strProfile & "\prefs.js"
strReplace = "user_pref(""browser.startup.homepage"", """ & URL & """);"

strContent = fGetFileContents(strPath)
Set regex = New RegExp

If
InStr(1, strContent, Chr(34) & "browser.startup.homepage" & Chr(34)) = 0 Then
strContent = strContent & vbCrLf & "user_pref(""browser.startup.homepage"", """ & URL & """);"
sPutStringToFile strContent, strPath
Exit Sub
ElseIf
InStr(1, strContent, strReplace) Then
Exit Sub
End If

regex.Pattern = "user_pref\(""browser.startup.homepage"",\s""(.*)""\);"

strContent = regex.Replace(strContent, strReplace)
sPutStringToFile strContent, strPath

End If

End Sub

Public Function
fGetFileContents(strPath As String) As String
Dim
hFile As Integer
Dim
strFileContent As String


If
Len(Dir(strPath)) = 0 Then Exit Function

On Error GoTo
ErrGetFile
hFile = FreeFile

Open
strPath For Binary As #hFile
strFileContent = Space(LOF(hFile))
Get #hFile, , strFileContent
Close #hFile

fGetFileContents = strFileContent
Exit Function

ErrGetFile:

Close
MsgBox Err.Description, vbCritical, "GetFileContents"

End Function

Public Sub sPutStringToFile(strContent As String, strPath As String)
Dim hFile As Integer

'If file exists delete it.
On Error Resume Next
Kill
strPath
On Error GoTo ErrPutString

'Write file
hFile = FreeFile
Open
strPath For Binary As #hFile
Put #hFile, , strContent
Close #hFile

Exit Sub

ErrPutString:

Close #hFile
MsgBox Err.Description, vbCritical, "PutStringToFile"

End Sub

Apa kegunaan/manfaat mendefaultkan home page/site 3 browser besar di atas? Insya Allah dalam pertemuan lain kita akan membahasnya.
READ MORE - VB6.0 - Set Mozilla Firefox & IE Default Home Site Via Code

Menampilkan Informasi User Yang Sedang Login

Dalam pembuatan aplikasi database, sangatlah penting untuk mengetahui informasi user yang sedang atau telah login, baik mengenai ID, UserName, tanggal login dan lain sebagainya. Bagaimana implementasinya dalam kode?

Di bawah ini merupakan contoh sederhana dalam mengimplementasikan informasi user yang sedang login.

[Download Project Menampilkan Informasi User Yang Sedang Login]
READ MORE - Menampilkan Informasi User Yang Sedang Login

Horizontal Scroll And Vertical Scroll

Option Explicit 
  
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
  
Public Const SB_LINEUP As Long = 0 
Public Const SB_LINEDOWN As Long = 1 
  
Public Const WM_VSCROLL As Long = &H115 
Public Const WM_HSCROLL As Long = &H114 
Public Const WM_MOUSEWHEEL As Long = &H20A 
Public Const GWL_WNDPROC = (-4) 
  
Public PrevProc As Long 
Public blnFocusScroll As Boolean 
  
Function NewWindowProc(ByVal hWnd As Long, _ 
ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
On Error Resume Next 
    Select Case Msg 
        Case Is = WM_MOUSEWHEEL 
            If blnFocusScroll = True Then 
                If (wParam > 0) Then 
                    'Form1 adalah nama form yang akan akan digunakan 
                    'Scroll adalah nama scrollbar yang akan digunakan 
                    SendMessage Form1.Scroll.hWnd, WM_VSCROLL, SB_LINEUP, 0& 
                    Form1.Scroll.Value = Form1.Scroll.Value - _ 
                    Form1.Scroll.LargeChange 
                Else 
                    SendMessage Form1.Scroll.hWnd, WM_VSCROLL, SB_LINEDOWN, 0& 
                    Form1.Scroll.Value = Form1.Scroll.Value + _ 
                    Form1.Scroll.LargeChange 
                End If 
                Form1.Scroll_Change 
            End If 
        End Select 
        ' 
        NewWindowProc = CallWindowProc(PrevProc, hWnd, Msg, wParam, lParam) 
End Function 
  
Public Sub HookForm(F As Form) 
    PrevProc = SetWindowLong(F.hWnd, GWL_WNDPROC, AddressOf NewWindowProc) 
End Sub 
  
Public Sub UnHookForm(F As Form) 
    SetWindowLong F.hWnd, GWL_WNDPROC, PrevProc 
End Sub 

Dalam form tambahkan kode di bawah ini:

Option Explicit 
  
Dim AwalTop As Long 
  
Sub Scrolling(Value As Long) 
    Dim i As Long 
  
    picItem(0).Top = picItem(0).Top + (AwalTop - Value) 
  
    For i = 1 To picItem.Count - 1 
        picItem(i).Top = picItem(i - 1).Top + Me.picItem(0).Height + 20 
        DoEvents 
    Next 
  
    AwalTop = Value 
End Sub 
  
Private Sub Form_Load() 
    HookForm Me 
    blnFocusScroll = True 
    Me.Scroll.Max = 2500 
    Me.Scroll.SmallChange = 10 
    Me.Scroll.LargeChange = 100 
End Sub 
  
Private Sub Form_Unload(Cancel As Integer) 
    UnHookForm Me 
End Sub 
  
Sub Scroll_Change() 
    Scrolling Me.Scroll.Value 
End Sub 
  
Sub Scroll_Scroll() 
    Scrolling Me.Scroll.Value 
End Sub 

Perhatian:
Kode di atas menggunakan subclassing, kesalahan mengkode dapat menyebabkan CRASH!

READ MORE - Horizontal Scroll And Vertical Scroll

Menyimpan File Ke Dalam Format MHTML

Menyimpan file dalam format MHTML tentunya memiliki banyak keuntungan, salah satu dari banyak keuntungan tersebut ialah terintegrasinya seluruh gambar dan file dengan baik, sehingga kita bisa mendownload halaman situs/blog yang kita kunjungi utuh dengan seluruh gambarnya.

Apabila Anda gabungkan dengan prosedur untuk mengekstrak link dari sebuah blog, maka ia akan memiliki kemampuan yang lebih baik lagi, dengan kata lain Anda dapat mem-back-up satu blog milik Anda sendiri ataupun milik orang lain utuh dengan seluruh gambarnya.
Option Explicit  

Public Function
SaveWebPageToMHTFile(url As String, filepath As String)

On Error GoTo
ErrHandler

Dim
msg As New CDO.Message
Dim
stm As New ADODB.Stream

msg.MimeFormatted = True
msg.CreateMHTMLBody url, CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""
'//Pilih charset yang sesuai
stm.Charset = "utf-8"
Set
stm = msg.GetStream()
stm.SaveToFile filepath, ADODB.SaveOptionsEnum.adSaveCreateOverWrite
Set
msg = Nothing
stm.Close

Exit Function

ErrHandler:

MsgBox Err.Description

End Function

Contoh pemanggilan prosedur fungsi di atas:
Private Sub Command1_Click()  
'//Coba menyimpan file dalam bentuk MHTML </i>
SaveWebPageToMHTFile "http://www.planet-source-code.com/vb/default.asp?lngWId=1", "c:\psc.MHTML"
End Sub

Catatan: Sebelum Anda menggunakan fungsi di atas, tambahkan referensi Microsoft ActiveX Data Objects 2.8 Liblari dan Microsoft CDO for Windows 2000 Liblary

READ MORE - Menyimpan File Ke Dalam Format MHTML

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

Blokir Situs Menggunakan Visual Basic 6.0

Option Explicit 

Public Declare Function
GetForegroundWindow Lib "user32" ) As Long
Public 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 Declare Function
GetWindowText Lib "user32" Alias "GetWindowTextA" ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Const
WM_CLOSE = &H10

Public Function
kick(target As String)
Dim H As Long
Dim T As String *
255
H = GetForegroundWindow
GetWindowText H, T, 255
If InStr(UCase(T), UCase(target)) > 0 Then
SendMessage H, WM_CLOSE, 0, 0
End If
End Function
READ MORE - Blokir Situs Menggunakan Visual Basic 6.0

Cara Mudah Membuat Read More Pada Blogger | Blogging

Langkah yang pertama:

  1. Login ke Blogger
  2. Klik Pengaturan
  3. Klik Format
  4. Klik tombol Simpan Pengaturan
Langkah yang kedua:

  1. Back-up terlebih dahulu template Anda
  2. Beri tanda centang pada samping tulisan Expand Template Widget
  3. Cari kode ini
    <data:post.body/>, 
  4. jika Anda tidak menemukan kode di atas cari kode di bawah ini
    <p><data:post.body/></p>
  5. Ganti kode di atas dengan
<b:if cond='data:blog.pageType == "item"'> 
<style>.fullpost{display:inline;}</style>
<p><data:post.body/></p>
<b:else/>
<style>.fullpost{display:none;}</style>
<p><data:post.body/>
<a expr:href='data:post.url'><strong>Selengkapnya...</strong></a></p>
</b:if>
Cara memposting artikel:
  1. Klik menu Posting
  2. Klik menu Edit HTML, maka secara otomatis tampak kode yang telah kita setting tadi, yakni :
    <span class="fullpost">
    </span>

  3. Tuliskan artikel yang ingin tampak pada blog sebelum kode :
    <span class="fullpost">

  4. Tulis keseluruhan sisa artikel sesudah kode di atas tadi dan sebelum kode :
    </span>

  5. Klik tombol bertuliskan MEMPUBLIKASIKAN POSTING
  6. Klik tulisan Lihat Blog(di jendela baru) untuk melihat hasil dari postingan kita, kemudian lihat apakah hasilnya sukses atau tidak. Jika tidak, mungkin ada bagian yang terlewatkan. Coba lihat kembali langkah diatas
READ MORE - Cara Mudah Membuat Read More Pada Blogger | Blogging

Mengirim Email Lewat VB6.0 Menggunakan vbSendMail.dll

Di bawah ini merupakan contoh kode untuk mengirim email lewat VB6.0 menggunakan bantuan ActiveX (vbSendMail.dll). VB SendMail merupakan ActiveX yang digunakan untuk mengirim email, terdokumentasi dengan baik dan lengkap. Anda dapat memperoleh komponen tersebut di freevbsource.com silakan Anda kunjungi situsnya.
Option Explicit 

Private
WithEvents poSendMail As vbSendMail.clsSendMail
Private bSendFailed As Boolean

Private Sub
Command1_Click()
Dim lCount As Long
Dim
lCtr As Long
Dim
t!

Command1.Enabled = False
bSendFailed = False
lstStatus.Clear
lblTime.Caption = ""
Screen.MousePointer = vbHourglass

With
poSendMail
.SMTPHost = "smtp.telkom.net"
.From = txtSender.Text
.FromDisplayName = txtName.Text
.Message = txtMsg.Text
.AsHTML = True
t! = Timer
.Recipient = txtRecipient.Text
.RecipientDisplayName = txtRecName.Text
.Subject = txtSubject.Text
lblTime = "Sending message " & Str(lCtr)
.Send
End With

If Not
bSendFailed Then lblTime.Caption = Str(lCount) & " Messages sent in " & Format$(Timer - t!, "#,##0.0") & " seconds."
Screen.MousePointer = vbDefault
Command1.Enabled = True
End Sub

Private Sub
Form_Load()
Set poSendMail = New clsSendMail
End Sub

Private Sub
poSendMail_Progress(lPercentCompete As Long)
lblProgress = lPercentCompete & "% complete"
End Sub

Private Sub
poSendMail_SendFailed(Explanation As String)
MsgBox ("Your attempt to send mail failed for the following reason(s): " & vbCrLf & Explanation)
bSendFailed = True
lblProgress = ""
lblTime = ""
End Sub

Private Sub
poSendMail_SendSuccesful()
lblProgress = "Send Successful!"
End Sub

Private Sub
poSendMail_Status(Status As String)
lstStatus.AddItem Status
lstStatus.ListIndex = lstStatus.ListCount - 1
lstStatus.ListIndex = -1
End Sub
READ MORE - Mengirim Email Lewat VB6.0 Menggunakan vbSendMail.dll

Fungsi Format RTF Untuk Pembuatan Kamus Bahasa Inggris

Di bawah ini merupakan contoh format RTF untuk keperluan pembuatan kamus Bahasa Inggris. Fungsi di bawah ini dapat bekerja dengan sangat cepat? mengapa? karena ia tidak memformat tulisan pada objeknya secara langsung akan tetapi, memformat string yang terdapat dalam memori kemudian mem-feed-nya kembali ke dalam objek RichTextBox.

Bukankah:
Private Sub Command1_Click() 
Dim i As Integer
For i =
1 To 1000
Text1.Text = Text1.Text & "contoh tulisan" & vbCrLf
Next
End Sub
Berbeda dengan kode di bawah ini:
Private Sub Command1_Click() 
Dim i As Integer
Dim
sText As String
sText = Text1.Text
For i = 1 To 1000
sText = sText & "contoh tulisan" & vbCrLf
Next
Text1.Text = sText
End Sub
Sepintas dua kode di atas akan memberikan hasil yang sama akan tetapi berbeda jauh dalam segi kecepatan.

Di bawah ini merupakan fungsi format RTF untuk pembuatan kamus bahasa inggris:
Option Explicit 

Public Function
FormatSentence(sSentence As String) As String
Dim
sFormat As String
Dim
sKosakata As String
Dim
sText As String
Dim i As Integer
sFormat = "{\rtf1\fbidis\ansi\ansicpg1256\deff0\deflang1025{\fonttbl{\f0\fswiss\fcharset0 Arial;}}" & vbCrLf & _
"{\colortbl ;\red128\green0\blue0;\red0\green0\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green0\blue0;\red128\green0\blue128;}" & vbCrLf & _
"{\*\generator Msftedit 5.41.15.1512;}\viewkind4\uc1\pard\ltrpar\lang1033\f0\fs17"
sKosakata = sSentence
sText = " " & Text1.Text
sText = Replace(sText, vbCrLf, " \Par" & vbCrLf)
sText = Replace(sText, " kb. ", " \cf2\b kb. \cf0\b0 ")
sText = Replace(sText, " -kki. ", " \cf5\b kki. \cf0\b0 ")
sText = Replace(sText, " kk. ", " \cf1\b kk. \cf0\b0 ")
sText = Replace(sText, " ks. ", " \cf3\b ks. \cf0\b0 ")
sText = Replace(sText, " -ks. ", " \cf3\b -ks. \cf0\b0 ")
sText = Replace(sText, " -kkt. ", " \cf5\b -kkt. \cf0\b0 ")
sText = Replace(sText, "(", "\cf5(\cf0 ")
sText = Replace(sText, ")", "\cf5)\cf0 ")
For i = 1 To 100
If InStr(1, sText, i) Then
sText = Replace(sText, " " & i & " ", " \b " & i & " \cf0\b0 ")
End If
Next
sText = Replace(sText, " -kkt. ", " \cf5\b -kkt. \cf0\b0 ")
sText = Replace(sText, " ks. ", " \cf3\b ks. \cf0\b0 ")
sText = sFormat & "\b " & sKosakata & "\b0 " & sText & "\par" & vbCrLf & "}"
FormatSentence = sText
End Function

Private Sub
Form_Load()
RTF.BackColor = RGB(241, 243, 241)
End Sub
Contoh penggunaan fungsi di atas:
Private Sub Command1_Click() 
RTF.TextRTF = FormatSentence(Text2.Text)
End Sub
Maka hasilnya seperti gambar di bawah ini:

Catatan:
Fungsi di atas hanyalah sekadar contoh, Anda dapat memodifikasinya untuk disesuaikan dengan kebutuhan.

Download: Source code fungsi format RTF untuk Kamus Bahasa Inggris
READ MORE - Fungsi Format RTF Untuk Pembuatan Kamus Bahasa Inggris