Wednesday, June 22, 2011

Membaca Struktur Table dan Menerapkannya Dalam GUI

Setelah bepanjang lebar membicarakan Addins, maka sekarang kita akan menerapkannya dalam sebuah project yang bermanfaat (jika dilanjutkan memprogramnya) yaitu: generator database yang sangat sederhana (hanya untuk MS Access saja, untuk database lainnya, silakan modifikasi kodenya). Project ini hanya akan mengenerate GUI-nya saja (tanpa kode), adapun jika jika ingin menambahkan kode-kode yang sesuai Anda dapat merujuk pada tautan di samping, menambah kode pada module (tentu saja setelah dimodifikasi dan disesuaikan).

Langkah-Langkah:
  • Buat project Addin
  • Masukan kode-kode di bawah ini:
Kode pada frmAddin:
Public VBInstance As VBIDE.VBE 
Public Connect As Connect

Option Explicit

Dim
strCon As String

Private Sub
cboTables_Click()
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = DBase
Dim c As ADOX.Column
lstAll.Clear
For Each c In cat.Tables(GetTabelValidName(cboTables.Text)).Columns
lstAll.AddItem c.Name
Next
If
lstAll.ListCount > 0 Then lstAll.ListIndex = 0
Set cat = Nothing
End Sub

Private Function
GetTabelValidName(strName As String) As String
Dim
s() As String
s =
Split(strName, " : ")
GetTabelValidName = s(1)
End Function

Private Sub
cmdConnect_Click()
On Error GoTo ErrHandler
strCon = getADOConnectionString()
If strCon = "" Then Exit Sub
txtCon.Text = strCon
If OpenDataBase(strCon) = True Then
FillComboWithTables
End If
Exit Sub
ErrHandler:
MsgBox Err.Number & vbNewLine & Err.Description, vbExclamation + vbOKOnly, "Connection Error"
lstAll.Clear
cboTables.Clear
End Sub

Private Function
FillComboWithTables()
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = DBase
Dim i As Integer
cboTables.Clear
lstAll.Clear
For i = 0 To cat.Tables.Count - 1
If cat.Tables(i).Type <> "SYSTEM TABLE" And cat.Tables(i).Type <> "ACCESS TABLE" Then
If
cat.Tables(i).Type = "TABLE" Then
cboTables.AddItem "Table : " & cat.Tables(i).Name
Else
cboTables.AddItem "query : " & cat.Tables(i).Name
End If
End If
Next i
Set
cat = Nothing
End Function

Private Sub
Command1_Click()
AddFormAndControls Replace(GetTabelValidName(cboTables.Text), " ", "_"), GetTabelValidName(cboTables.Text)
End Sub

Private Function
AddFormAndControls(f As String, c As String)

On Error Resume Next

Dim
frm As VBIDE.VBComponent
Dim ctl As VBControl
Dim frmCurrent As VBForm
Dim i As Integer, x As Integer, y As Integer, k As Integer
Set
frm = VBInstance.ActiveVBProject.VBComponents.Add(vbext_ct_VBForm)
Set frmCurrent = VBInstance.SelectedVBComponent.Designer

For i =
0 To lstAll.ListCount - 1
'kode di bawah ini untuk menambah TextBox
Set ctl = frmCurrent.VBControls.Add("VB.TextBox")
With ctl
.Properties("Name") = "txt" & Replace(lstAll.List(i), " ", "_")
If i = 0 Then
.Properties("Top") = 500
x = 500
Else
x = x +
400 'spasi (jarak) untuk TextBox
End If
.Properties("Top") = x
.Properties("Left") = 2500
.Properties("Width") = 4000
.Properties("Height") = 330
.Properties("Text") = lstAll.List(i)
'.properties dan lain-lain, disesuaikan kebutuhan
End With
If i =
lstAll.ListCount - 1 Then
y = x +
2000 'Form Height
k = x + 900 'CommandButton Top
End If
'kode di bawah ini untuk menambah label
Set ctl = frmCurrent.VBControls.Add("VB.Label")
With ctl
.Properties("Name") = lstAll.List(i)
.Properties("Top") = x
.Properties("Left") = 465
.Properties("Width") = 2000
.Properties("Height") = 255
.Properties("Caption") = lstAll.List(i)
.Properties("BackStyle") = 0 'transparent
'.properties dan lain-lain, disesuaikan kebutuhan
End With
Next
Set
ctl = frmCurrent.VBControls.Add("VB.CommandButton")
With ctl
.Properties("Name") = "cmdUpdate"
.Properties("Top") = k
.Properties("Left") = 5040
.Properties("Width") = 1455
.Properties("Height") = 375
.Properties("Caption") = "&Update"
'.properties dan lain-lain, disesuaikan kebutuhan
End With
Set
ctl = frmCurrent.VBControls.Add("VB.CommandButton")
With ctl
.Properties("Name") = "cmdCancel"
.Properties("Top") = k
.Properties("Left") = 3480
.Properties("Width") = 1455
.Properties("Height") = 375
.Properties("Caption") = "&Cancel"
'.properties dan lain-lain, disesuaikan kebutuhan
End With
InsertOCX "{2CDCDF4C-4914-4DBC-99CB-12359BE472E1}"
Set ctl = frmCurrent.VBControls.Add("Liner.cLiner")
With ctl
.Properties("Top") = k - 300
.Properties("Left") = -5
.Properties("Width") = 7000
.Properties("Height") = 30
End With
With
frm
.Properties("Name") = "frm" & f
.Properties("Width") = 7155
.Properties("Caption") = c
.Properties("Height") = y
End With
'--------------------------------------------------------------------------------------------------
'tambahkan kontrol lain-lain ThirdParty OCX
'tambahkan pula kode-kode yang sesuai
'maaf, belum dibuatkan....
'--------------------------------------------------------------------------------------------------
End Function

Public Function
InsertOCX(ProgID As String) As Boolean
On Error GoTo
ErrHandler
'Add OCX
VBInstance.ActiveVBProject.AddToolboxProgID ProgID
InsertOCX = True
Exit Function
ErrHandler:
InsertOCX = False
End Function

Kode pada modDatabase:
Option Explicit 

Public
DBase As New ADODB.Connection
Public cat As ADOX.Catalog

Function
OpenDataBase(sFilename As String) As Boolean
'// Membuat koneksi ke database
Set DBase = New ADODB.Connection
With DBase
.CursorLocation = adUseClient
.Open "Provider= Microsoft.Jet.OLEDB.4.0;Persist security info=False;Data Source=" & sFilename & ";Jet OLEDB:Database;"
End With
OpenDataBase = True
End Function
Kode pada modDataLinks: silakan copy dan pastekan dari tautan di samping module data links.

READ MORE - Membaca Struktur Table dan Menerapkannya Dalam GUI

Merubah Nama Menu Add-Ins Yang Akan Ditampilkan - VB6 Add-In

Untuk merubah caption sub menu (Addin yang dibuat sendiri) yang ditampilkan di bawah menu Add-Ins, maka ikutilah langkah-langkah berikut:
  • Buatlah project Add-Ins dengan cara klik menu File >> New Project >> pada kotak dialog New Project pilihlah template/project Addin
  • Secara default akan terbentuk satu project dengan dua component, masing-masing frmAddIn dan Connect
  • Klik kanan Connect, dan pilihlah menu View Code
  • Carilah di bawah ini (yang terdapat pada Connect):

    If ConnectMode = ext_cm_External Then 
'Used by the wizard toolbar to start this wizard
Me.Show
Else
Set
mcbMenuCommandBar = AddToAddInCommandBar("My AddIn")
'sink the event
Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar)
End If
  • Gantilah menu My Addin di atas dengan nama menu yang Anda Inginkan.
  • Selanjutnya Compile dan lakukan register jika perlu.
READ MORE - Merubah Nama Menu Add-Ins Yang Akan Ditampilkan - VB6 Add-In

Sedikit Tentang Code Module dan Object Member - VB6 Add-Ins

Dalam sebuah code module (editor tempat kita menulis kode di VB6), maka berapapun banyaknya kode yang kita tulis (puluhan baris sampai puluhan ribu baris), kode tersebut dapat diklasifikasikan menjadi lima unsur saja, Adapun yang kelima unsur tersebut, diantaranya:
  1. Variable
  2. Constanta
  3. Method (Sub, Function, Event Procedure)
  4. Events
  5. dan terakhir Property.
Dari kelima di atas, maka semuanya memiliki scope (jangkauan akses), adapun scope hanya ada 3 saja (berapapun banyaknya kode yang kita tulis), berturut-turut:
  1. Private
  2. Public
  3. Friend
Jadi, jika bukan private maka public atau friend, jika bukan public maka private atau friend, dst. Untuk membuktikannya, buatlah project Add-ins, tambahkan satu ListBox (dengan nama default saja List1)
Public VBInstance As VBIDE.VBE 
Public Connect As Connect

Option Explicit

Private Sub
OKButton_Click()
EnumAllMembers
End Sub

Private Function
EnumAllMembers()
Dim m As Member
Dim t As String
List1.Clear
For Each m In VBInstance.SelectedVBComponent.CodeModule.Members
Select Case m.Type
Case vbext_MemberType.vbext_mt_Const
t = "Constanta"
Case vbext_MemberType.vbext_mt_Event
t = "Event"
Case vbext_MemberType.vbext_mt_Method
t = "Method"
Case vbext_MemberType.vbext_mt_Property
t = "Property"
Case vbext_MemberType.vbext_mt_Variable
t = "Variable"
End Select
List1.AddItem "Nama: " & m.Name & vbTab & vbTab & "Type: " & t & vbTab & vbTab & "Scope: " & m.Scope
Next
End Function
Walaupun kode di atas tampak sederhana, akan tetapi ia akan sangat berguna, kira-kira untuk apa?
READ MORE - Sedikit Tentang Code Module dan Object Member - VB6 Add-Ins

Sunday, May 22, 2011

Manifest Injector - 1 kali Klik Untuk XP Style - Tools VB6

Setelah kita memahami cara menambah module, menambahkan kode, mengubah Startup Object, maka sekarang kita akan membuat sebuah tools sederhana yang bermanfaat dan akan banyak digunakan yaitu Manifest Injector sebuah generator kode sederhana.
Langkah-langkah:
  • Buat project Add-Ins
  • Hapus frmAddIns (form default saat membuat project Addins)
  • Tambahkan kode-kode di bawah ini:
-modAddIns
Public VBInstance As VBIDE.VBE
Public Connect As Connect

Option Explicit

Public Sub OKButton_Click()
AddResource 'and sure, some code too..
End Sub

Private Function AddResource() As Boolean

Dim newResourcee As VBComponent
Dim PathName As String

PathName = GetName(VBInstance.ActiveVBProject.Filename, PathNameOnly)
On Error GoTo ErrHandler
If Not IsProjectSaved Then
MsgBox "Simpan terlebih dahulu projectnya!", vbInformation, "Project belum disimpan"
Exit Function
End If
FileCopy App.Path & "\XP.manifest.res", PathName & "\XP.manifest.res"
Set newResourcee = VBInstance.ActiveVBProject.VBComponents.AddFile(PathName & "\XP.manifest.res")
InsertXPCode
AddModule "modManifestRes", "Public Declare Sub InitCommonControls Lib " & Chr(34) & "comctl32.dll" & Chr(34) & "()"
Exit Function

ErrHandler:

MsgBox Err.Description, vbCritical, "Warning"

End Function

Private Function IsProjectSaved() As Boolean
IsProjectSaved = Not (VBInstance.ActiveVBProject.Filename = "")
End Function

Private Sub InsertXPCode()

Dim CD As CodePane
Dim CM As CodeModule
Dim strName As String
strName = GetStartUpName
If GetStartUpName <> "Sub Main" Then
Set CD = VBInstance.ActiveVBProject.VBComponents(strName).CodeModule.CodePane
Set CM = VBInstance.ActiveVBProject.VBComponents(strName).CodeModule

Dim frm As VBIDE.VBForm

With VBInstance
With .ActiveVBProject.VBComponents(strName)

Set frm = .Designer
If .Type = vbext_ct_VBMDIForm Then
If Not IsExistProc("MDIForm_Initialize", CD) Then
MakeProcedure "Initialize", "MDIForm", CM
End If
CM.InsertLines CD.CodeModule.ProcBodyLine("MDIForm_Initialize", vbext_pk_Proc) + 1, " InitCommonControls"
ElseIf .Type = vbext_ct_VBForm Then
If Not IsExistProc("Form_Initialize", CD) Then
MakeProcedure "Initialize", "Form", CM
End If
CM.InsertLines CD.CodeModule.ProcBodyLine("Form_Initialize", vbext_pk_Proc) + 1, " InitCommonControls"
End If
End With
End With
Else
Set CD = VBInstance.ActiveVBProject.VBComponents(GetSubMain).CodeModule.CodePane
Set CM = VBInstance.ActiveVBProject.VBComponents(GetSubMain).CodeModule
CM.ReplaceLine CM.Members("main").CodeLocation, "Sub Main()" & vbCrLf & " InitCommonControls"
End If

End Sub

Private Function IsExistProc(Procname As String, oCodePane As CodePane) As Boolean
Dim i As Integer
For i = 1 To oCodePane.CodeModule.CountOfLines
If oCodePane.CodeModule.ProcOfLine(i, vbext_pk_Proc) <> "" Then
If Procname = oCodePane.CodeModule.ProcOfLine(i, vbext_pk_Proc) Then
IsExistProc = True
Exit For
End If
End If
Next i
End Function

Private Function MakeProcedure(EventName, ObjectName, oCodeModule As CodeModule)
oCodeModule.CreateEventProc EventName, ObjectName
End Function

Private Function GetStartUpName() As String
On Error GoTo ErrHandler
GetStartUpName = VBInstance.ActiveVBProject.VBComponents.StartUpObject.Name
Exit Function
ErrHandler:
GetStartUpName = "Sub Main"
End Function

Private Function GetSubMain() As String
Dim v As VBComponent
Dim l As Long, s As String
For Each v In VBInstance.ActiveVBProject.VBComponents
With v
If .Type = vbext_ct_StdModule Then
l = v.CodeModule.CountOfLines
If l > 0 Then
s = v.CodeModule.Lines(1, l)
If InStr(1, s, "sub main()", vbTextCompare) > 0 Then
GetSubMain = v.Name
Exit Function
End If
End If
End If
End With
Next
End Function

Private Function AddModule(ModulName As String, Optional strCode As String) As Boolean

Dim newModule As VBComponent

On Error GoTo ErrHandler

Set newModule = VBInstance.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule)
With newModule
.Name = ModulName
.CodeModule.AddFromString strCode
End With
Exit Function

ErrHandler:

MsgBox Err.Description

End Function

  • Tambahkan module ini, gantilah namanya menjadi modFileAndDirectory
  • Ganti seluruh kode yang terdapat pada Connect.dsr dengan kode di bawah:
Connect.dsr
Option Explicit

Public FormDisplayed As Boolean
Public VBInstance As VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
'Dim mfrmAddIn As New frmAddIn
Public WithEvents MenuHandler As CommandBarEvents 'command bar event handler

'Sub Hide()
'
' On Error Resume Next
'
' FormDisplayed = False
' mfrmAddIn.Hide
'
'End Sub

Sub Show()

' On Error Resume Next

' If mfrmAddIn Is Nothing Then
' Set mfrmAddIn = New frmAddIn
' End If

Set modAddIns.VBInstance = VBInstance
Set modAddIns.Connect = Me
' FormDisplayed = True
' mfrmAddIn.Show
OKButton_Click
End Sub

'------------------------------------------------------
'this method adds the Add-In to VB
'------------------------------------------------------
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
On Error GoTo error_handler

'save the vb instance
Set VBInstance = Application

'this is a good place to set a breakpoint and
'test various addin objects, properties and methods
Debug.Print VBInstance.FullName

If ConnectMode = ext_cm_External Then
'Used by the wizard toolbar to start this wizard
Me.Show
Else
Set mcbMenuCommandBar = AddToAddInCommandBar("XP-Theme")
'sink the event
Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar)
End If

If ConnectMode = ext_cm_AfterStartup Then
If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then
'set this to display the form on connect
Me.Show
End If
End If

Exit Sub

error_handler:

MsgBox Err.Description

End Sub

'------------------------------------------------------
'this method removes the Add-In from VB
'------------------------------------------------------
Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
On Error Resume Next

'delete the command bar entry
mcbMenuCommandBar.Delete

'shut down the Add-In
If FormDisplayed Then
SaveSetting App.Title, "Settings", "DisplayOnConnect", "1"
FormDisplayed = False
Else
SaveSetting App.Title, "Settings", "DisplayOnConnect", "0"
End If

' Unload mfrmAddIn
' Set mfrmAddIn = Nothing
Set modAddIns.VBInstance = Nothing
Set modAddIns.Connect = Nothing

End Sub

Private Sub IDTExtensibility_OnStartupComplete(custom() As Variant)
If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then
'set this to display the form on connect
Me.Show
End If
End Sub

'this event fires when the menu is clicked in the IDE
Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
Me.Show
End Sub

Function AddToAddInCommandBar(sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'command bar object
Dim cbMenu As Object

On Error GoTo AddToAddInCommandBarErr

'see if we can find the Add-Ins menu
Set cbMenu = VBInstance.CommandBars("Add-Ins")
If cbMenu Is Nothing Then
'not available so we fail
Exit Function
End If

'add it to the command bar
Set cbMenuCommandBar = cbMenu.Controls.Add(1)
'set the caption
cbMenuCommandBar.Caption = sCaption

Set AddToAddInCommandBar = cbMenuCommandBar

Exit Function

AddToAddInCommandBarErr:

End Function

  • Compile Project dan Register.
  • Tambahkan XP.manifest.res (XP.manifest.res adalah resource manifest yang telah dicompile menggunakan RC.EXE) bisa Anda download disini.
  • Satukah XP.manifest.res dengan DLL yang berasal dari project yang telah dicompile tadi.
  • Jika ingin langsung menggunakan, download project jadinya di bawah ini:

READ MORE - Manifest Injector - 1 kali Klik Untuk XP Style - Tools VB6

Menguji Kode Project Add-Ins Tanpa Compile - Add-Ins VB6

Menjelaskan mengenai cara menguji kode yang terdapat pada sebuah Addins tanpa compile - Apabila kita hanya bermaksud menguji, melihat kinerja serta men-debug sebuah project Addins tanpa bermaksud mengcompilenya menjadi sebuah DLL, maka yang harus kita lakukan adalah menjalankan (run) project Addin tersebut dengan mengklik tombol run atau tombol keyboard F5 (biarkan), selanjutnya buka Aplikasi baru (terpisah dari project Addin yang telah dijalankan) dan buatlah sebuah project baru (Standard Exe misalnya), klik menu Add-Ins, maka pada sub menu akan terdapat menu My Addin.

Efek samping menjalankan project addins tanpa compile:
  1. MessageBox (apabila project addins tersebut menampilkan MessageBox) tidak akan tampil ke depan.
  2. Kecepatan eksekusi kode berkurang antara 25 - 100 kali (sangat signifikan)
  3. dan lain sebagainya.
READ MORE - Menguji Kode Project Add-Ins Tanpa Compile - Add-Ins VB6

Menambah Module Yang Disertai Kode Melalui VB6 Add-Ins

Menjelaskan mengenai cara menambah module melalui Visual Basic 6 Add-Ins - Sebelumnya saya telah memposting mengenai cara menambah Form, Menu, CommandButton, menambah referensi komponen OCX dan DLL melalui pemrograman Add-Ins, maka untuk melengkapi mengenai cara membuat robot software atau generator code tentulah harus dapat menambahkan Module, Class, UserControl, Resource, dsb.

Untuk menjalankan kode di bawah, ikuti langkah-langkah berikut:
  1. Buat project Add-Ins baru dengan cara Klik File, klik New Project, klik Addin
  2. Gantilah seluruh kode yang terdapat pada frmAddin dengan kode di bawah
  3. Lakukan compile dengan cara klik File, klik Make MyAddin.dll
  4. Simpan project, dan tutuplah aplikasi Visual Basic 6

Public VBInstance As VBIDE.VBE 
Public Connect As Connect

Option Explicit

Private Sub
CancelButton_Click()
Connect.Hide
End Sub

Private Sub
OKButton_Click()
AddModule "moDatabase", ConnectionCode
End Sub

Public Function
AddModule(ModulName As String, Optional strCode As String) As Boolean

Dim
newModule As VBComponent

On Error GoTo
ErrHandler

Set
newModule = VBInstance.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule)
With newModule
.Name = ModulName
.CodeModule.AddFromString strCode
End With
Exit Function

ErrHandler:

MsgBox Err.Description

End Function

Private Function
ConnectionCode() As String
Dim
sMsg As String
sMsg = sMsg & "" & vbCrLf
sMsg = sMsg & "Public conn As ADODB.Connection" & vbCrLf
sMsg = sMsg & "" & vbCrLf
sMsg = sMsg & "Public Function OpenDatabase(Filename As String) As Boolean" & vbCrLf
sMsg = sMsg & "" & vbCrLf
sMsg = sMsg & " Dim c As String" & vbCrLf
sMsg = sMsg & " " & vbCrLf
sMsg = sMsg & " On Error GoTo ErrHandler" & vbCrLf
sMsg = sMsg & " " & vbCrLf
sMsg = sMsg & " c = " & Chr(34) & "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Chr(34) & " & Filename" & vbCrLf
sMsg = sMsg & " " & vbCrLf
sMsg = sMsg & " Set conn = New ADODB.Connection" & vbCrLf
sMsg = sMsg & " conn.ConnectionString = c" & vbCrLf
sMsg = sMsg & " conn.Open" & vbCrLf
sMsg = sMsg & " " & vbCrLf
sMsg = sMsg & " OpenDatabase = True" & vbCrLf
sMsg = sMsg & " Exit Function" & vbCrLf
sMsg = sMsg & "" & vbCrLf
sMsg = sMsg & "ErrHandler:" & vbCrLf
sMsg = sMsg & " " & vbCrLf
sMsg = sMsg & " OpenDatabase = False" & vbCrLf
sMsg = sMsg & " " & vbCrLf
sMsg = sMsg & "End Function" & vbCrLf
ConnectionCode = sMsg
End Function

Untuk mengakses MyAddin.dll, buka project baru klik Add-in Addin Manager.... klik My Add-in, selanjutnya tekanlah tombol OK dan lihatlah hasilnya.
READ MORE - Menambah Module Yang Disertai Kode Melalui VB6 Add-Ins

Friday, April 22, 2011

Module Untuk Memperoleh Nama File, Extension, Path - VB6

Karena bingung memberi judul, akhirnya judulnya seperti di atas. Module ini digunakan untuk memperoleh (return/get) nama dari PathName lengkap, apakah yang akan diambil extensionnya saja, filenamenya saja, path tanpa filename. Adapun kodenya sebagai berikut:
Option Explicit 

Public Enum
eFilename
ExtentionOnly = 0 'contoh .exe, .zip, dll
FileNameOnly = 1 'update.exe, notify.exe, file.zip
PathNameOnly = 2 'c:\program files\anti virus
WithOutExtention = 3 'update, notify (tanpa .exe)
End Enum

Public Function
GetName(Filename As String, str As eFilename) As String
Dim
vArray As Variant, sDelimiter As String, e As String, v() As String
If
Filename = "" Then Exit Function
Select Case
str
Case ExtentionOnly
sDelimiter = "."
Case FileNameOnly
sDelimiter = "\"
Case PathNameOnly
vArray = Split(Filename, "\")
GetName = Mid(Filename, 1, Len(Filename) - Len(vArray(UBound(vArray))) - 1)
Exit Function
Case
WithOutExtention
vArray = Split(Filename, "\")
e = vArray(UBound(vArray))
v() = Split(e, ".")
GetName = v(0)
Exit Function
End Select
vArray = Split(Filename, sDelimiter)
GetName = vArray(UBound(vArray))
End Function
Contoh penggunaan kode di atas:
Private Sub Command1_Click() 
msgbox GetName ("C:\Program Files\UI\Update.exe",FileNameOnly) 'jika ingin memperoleh filenamenya saja, dll.
End Sub
READ MORE - Module Untuk Memperoleh Nama File, Extension, Path - VB6

Mematikan (Disable) Check Spelling TextArea

Setelah selesai membahas mengenai cara membuat TextArea sederhana yang hanya melibatkan beberapa attribute/property yakni rows, cols, align, dan name, sekarang kita akan membahas mengenai cara mematikan atau men-disable-kan fasilitas Check Spelling. Apa yang dimaksud dengan Fasilitas Check Spelling pada TextArea itu?
Mengapa pada kondisi tertentu check spelling ini harus kita disable-kan? Perlu diketahui, Check Spelling adalah fasilitas yang membantu kita mengecek ejaan sehingga terhindar dari kesalahan penulisan. Tetapi bagaimana jika bahasa yang sedang kita tulis tidak didukung oleh fasilitas ini (misalnya menggunakan bahasa daerah)? yang terjadi adalah sebagian atau banyak dari tulisan akan digarisbawahi dengan warna merah. Nah, pada kondisi ini terdapat dua pilihan, menggunakan Check Spelling atau tidak. Manakah yang Anda pilih? hmm.. sepertinya Anda memilih untuk mematikan/men-disable fasilitas Check Spelling ini.

Untuk mendisable check spelling ini, kita hanya perlu menambahkan satu property/attribute yaitu spellchek=false. Property spellcheck ini memiliki data type Boolean, jadi kita hanya dapat mengisi dua nilai saja, antara TRUE dan FALSE.

Catatan: Fasilitas Check Spelling ini hanya ada pada browser tertentu.
READ MORE - Mematikan (Disable) Check Spelling TextArea

Thursday, April 14, 2011

Kamus Inggris - Menambahkan Database - Bagian ke-7

Kamus Inggris - Menambahkan Database merupakan kelanjutan dari bagian ke-6.
Database kamus ini, kosakatanya berjumlah 23623 (dua puluh tiga ribu lebih). dalam format text sehingga bisa dengan mudah diakses dan ditambah kosakatanya. Database kamus ini diambil dari gKamus (Kamus Bahasa Inggris Indonesia Open Source). Beberapa modul/kode pada
bagian ke-7 ini diambil dari Putra VB (disitus miliknya Anda dapat belajar VB6 dan VB.Net). Untuk kedua Author situs tersebut saya ucapkan terima kasih. Selanjutnya ...

Pada bagian ke-8 kita akan menambahkan databasenya, dengan demikian project ini sudah bisa kita gunakan, dengan fitur bug disana-sini, sederhana, dan tampilan yang kurang enak dipandang (tentu saja, setidaknya untuk sementara), bagaimana mengenai kecepatan pencariannya? saya kira tidak perlu diragukan.

Tujuan pada bagian ke-
Menambahkan database, sehingga kamus ini sudah bisa kita gunakan.

Langkah-langkah
  • Download terlebih dahulu databasenya [Download Database]
  • Satukan file database (en-id.txt) ke dalam folder database
  • Buatlah module baru dan berinama modData
  • Tambahkan 1 TextBox (Text3) dan 1 ListBox (List2)
  • Tambahkan beberapa kode di bawah ini:
Kode-kode
'tambahkan kode di bawah ke dalam form frmMain 
Private Sub Form_Load()
BukaData App.Path & "\database\en-id.txt", List2
End Sub

Private Sub
List1_Click()
Text3.Text = List1.Text
End Sub

Private Sub
List2_Click()
If List2.ListIndex <> -1 Then
Text2.Text = Replace(DataEn(List2.ListIndex), vbTab, " = ")
End If
End Sub

Private Sub
Text1_DblClick()
Text3.Text = Trim(Text1.SelText)
End Sub

Private Sub
Text3_Change()
Dim i As Integer
If
Text3.Text = "" Then
List2.ListIndex = -1
Text2.Text = ""
Exit Sub
End If
i =
List2.ListIndex
If List2.Text = "" Then List2.ListIndex = i
Dim
retValue As Long
retValue = SendMessage(List2.hWnd, LB_FINDSTRING, -1, ByVal Text3.Text)
If retValue > -1 Then
List2.TopIndex = retValue
Else
List2.TopIndex = i
End If
List2.ListIndex = List2.TopIndex
End Sub

Kode di bawah ini masukan ke dalam module modData
Option Explicit 

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 Const
LB_ADDSTRING = &H180
Public Const LB_FINDSTRING = &H18F
Public Const LB_FINDSTRINGEXACT = &H1A2

Public
DataEn() As String
Public
LokasiData As String

Sub
BukaData(FileName As String, lst As ListBox)
Dim Temp As String
Dim i As Long
lst.Parent.Visible = False
Open
FileName For Binary As #1
Temp = Space$(LOF(1))
Get #1, , Temp
Close #1

Temp = Replace(Temp, vbCrLf & "" & vbCrLf, vbCrLf)
DataEn = Split(Temp, vbCrLf)

lst.Clear

For i =
0 To UBound(DataEn) - 1
SendMessage lst.hWnd, LB_ADDSTRING, 0, ByVal CStr(Split(DataEn(i), vbTab)(0))
Next
lst.ListIndex = 0
lst.Parent.Visible = True
End Sub

Uji Coba
  • Compile terlebih dahulu projectnya
  • Jalankan melalui Windows Explorer
  • Ketikan kosakata inggris pada TextBox pencarian (Text3), Anda lihat sekarang kamus ini dapat mencari kosakata dengan sangat cepatnya
Catatan
Pada bagian download terdapat file .exe, sebagai perbandingan saja.
Sampai disini apakah ada pertanyaan? sepertinya tidak ada, maka kita lanjutkan pada bagian ke-8
READ MORE - Kamus Inggris - Menambahkan Database - Bagian ke-7

Kamus Inggris - Splash Screen, Apakah Kegunaannya - Bagian 8

Kamus Inggris - Splash Screen, Apakah Kegunaannya merupakan kelanjutan dari bagian ke-7.
Dengan ditambahkannya database, maka pada saat dijalankan aplikasi akan memiliki jeda (Time Lag). Hal ini disebabkan aplikasi tersebut harus me-load terlebih dahulu kosakatanya, disinilah kita akan membutuhkan apa yang biasa disebut dalam pemrograman dengan Splash Screen/Form. Splash screen berguna untuk memberitahukan user bahwa aplikasi yang kita buat baik-baik saja, bukan hang. Selain itu splash screen bisa dianggap sebagai ciri khas dari aplikasi yang Anda buat, mengenai hal ini kreatifitas Anda sangat diperlukan.

Tujuan pada Bagian ke-8
Cara menampilkan splash screen dengan benar

Langkah-langkah
  • Klik menu project >> Add Form
  • Pilih Splash Screen, selanjutnya klik OK
  • Tambahkan (ganti) kode yang terdapat dalam modMain, tepat kode yang berada pada method Sub Main()
Kode-kode
Pada bagian modMain seperti yang telah disebutkan pada bagian ke-4 gantilah kode di bawah ini:
Sub Main()   
InitCommonControls
frmMain.Show
End Sub
sehingga menjadi:
Sub Main()   
InitCommonControls 'XP Style inisialisasi
frmSplash.Show 'tampilkan splash form terlebih dahulu
frmSplash.Refresh 'refresh agar tampilannya benar
Load frmMain 'load seluruh kode dalam tampilan utama
frmMain.Show 'tampilkan form utama
Unload frmSplash 'tutup splash form
End Sub
Uji Coba
  • Compile terlebih dahulu
  • Jalankan melalui Windows Explorer
  • Sekarang aplikasi akan menampilkan splash screen terlebih dahulu
READ MORE - Kamus Inggris - Splash Screen, Apakah Kegunaannya - Bagian 8

Kamus Inggris - Advance Form Center - Bagian ke-9

Kamus Inggris - Advance Form Center merupakan kelanjutan dari bagian ke-8.
Pada bagian ke-9 ini kita akan menambahkan modul form center dan module registry. Module form center berguna untuk menyimpan form di tengah layar, dalam hal ini kita akan menggunakan advance form center. Diberi kata advance, karena ia memiliki beberapa keistimewaan, yaitu:
  • Menampilkan form di tengah layar hanya untuk pertama kali saja,
  • Pada kali kedua ditampilkan dan seterusnya, posisi form akan diambil dari nilai yang terdapat pada registry
  • Tidak terpengaruh oleh tingginya taskbar, sehingga ia akan berada benar-benar di tengah layar.
Module registry selain digunakan untuk module form center, ia akan digunakan juga dalam setting-setting, opsi, dan konfigurasi aplikasi ini.

Tujuan pada Bagian ke-9
  • Menambahkan modul form center agar aplikasi ditampilkan tepat di tengah layar.
  • Menambahkan modul registry untuk keperluan setting/konfigurasi, dan opsi.
Langkah-langkah
  • Buatlah modul baru dan beri nama modForm, copy dan pastekan kode ini.
  • Buatlah modul baru dan beri nama modRegistry, copy dan pastekan kode ini.
Kode-kode
Gantilah kode di bawah ini (terdapat pada frmMain):
Private Sub Form_Load()  
BukaData App.Path & "\database\en-id.txt", List2
End Sub
Sehingga menjadi:
Private Sub Form_Load() 
GetPositionsFromRegistry Me 'ini untuk posisi form yang diambil dari registry
BukaData App.Path & "\database\en-id.txt", List2
End Sub
Tambahkan kode di bawah ini pada frmMain:
Private Sub Form_Unload(Cancel As Integer) 
SavePositionsInRegistry Me ' menyimpan posisi ke dalam registry
End Sub
Uji Coba
  • Compile terlebih dahulul projectnya, Jalankan melalui Windows Explorer. Pada saat pertama kali dijalankan aplikasi akan berada tepat di tengah layar. Selanjutnya geser (drag) aplikasi kamus dan tutuplah, buka kembali, maka sekarang ia akan tampil seperti pada posisi terakhir kali ia ditutup.
Sampai disini mungkin tidak ada pertanyaan, baiklah terima kasih. Kita lanjutkan pada bagian yang ke-10.
READ MORE - Kamus Inggris - Advance Form Center - Bagian ke-9

Tuesday, March 22, 2011

Kamus Inggris - Tutorial Cara Membuatnya

Agaknya prosedur-prosedur fungsi yang saya kumpulkan sudah lumayan walaupun tidak bisa disebut banyak, daripada prosedur-prosedur tersebut kurang bermanfaat dan menganggur, lebih baik kita gunakan untuk merakit software-software kecil. Lalu darimana kita memulainya...

Beberapa hal...
Prosedur-prosesedur fungsi yang telah saya tuliskan sebagian kecil berasal dari copy paste (tanpa modifikasi), sebagian kecil ide/dibuat sendiri, dan sebagian besar merupakan hasil copy yang selanjutnya dimodikasi kemudian dijalankan, untuk memastikan apakah ia bisa berjalan dengan baik. Prosedur-prosedur yang telah dimodifiksi tersebut diusahakan agar tidak memiliki dependency (ketergantungan) secara langsung terhadap objek maupun variable-variable yang bersifat publik, tujuan utamanya adalah agar memiliki sifat mudah digunakan kembali, mudah dicopypastekan, mudah di-encapsulate dalam bentuk dll atau ocx. Disamping itu ia akan menjadi prosedur dari pemrograman modular yang baik (jika tidak dijadikan dll atau ocx). Dengan demikian, kita dapat memisahkan bagian demi bagian dengan mudah, dan terhindar dari kerumitan kode karena melihatnya secara keseluruhan.

Untuk siapa tutorial ini?
Pemula, untuk pemula saja, karena saya pun seorang pemula. Jadi, jika seorang pemula bingung melihat kode, kemungkinan saya pun sama, jadi kita sama-sama belajar.

Selanjutnya...
Untuk membuat software-software kecil, ada beberepa tools yang harus kita kumpulkan dan miliki. Beberapa tools tersebut diantaranya memang harus dimiliki seperti InnoSetup (tools installer) dan sebagainya, dan sebagian lagi optional, hanya sebagai pelengkap untuk memudahkan dan mempercepat pekerjaan seperti MZ-Tools dan sebagainya (banyak). kita bahas saja sambil berjalan.

Software kecil apa yang akan kita buat?
Kamus Inggris Indonesia sederhana, karena yang tidak sederhana sudah banyak bertebaran di internet, walaupun sederhana, tetapi saya akan membagikannya menjadi beberapa puluh bagian (part).

Darimana databasenya?
Kebetulan saya memiliki beberapa database kamus inggris berasal dari software-software open source salah satunya dari gkamus, Kambing (bukan hewan) singkatan dari Kamus Bahasa Indonesia Inggris, dan lain sebagainya, terdiri dari puluhan ribu kosakata. Jika Anda ingin memilikinya, silakan kunjungi situsnya.
READ MORE - Kamus Inggris - Tutorial Cara Membuatnya

Monday, March 14, 2011

Kamus Inggris - Membuat Project Baru - Bagian Ke-2

Kamus Inggris - Membuat Project Baru merupakan kelanjutan dari Bagian ke-1.
Selanjutnya untuk membuat software menggunakan VB6, yang harus kita lakukan adalah membuat project baru.

Tujuan:
  • Membuat project baru menggunakan VB6
  • Menambahkan kemampuan copy text yang berasal dari Clipboard
Langkah-langkah:
  • Buat project baru
  • Tambahkan 2 TextBox, 1 ListBox, 1 Timer
  • Rubahlah property Interval pada Timer1 = 1
  • Ganti nama Project1 menjadi prjKamus
  • Ganti nama Form1 menjadi frmMain
  • Modifikasi ukuran-ukurannya, sehingga terlihat seperti gambar di bawah.
  • Simpanlah dalam folder, beri nama folder itu dengan Project Kamus Inggris
Kode-kode:
'simpan (copy dan pastekan) kode di bawah ini dalam frmMain 
Option Explicit

Dim
strFromClipboard As String

Private Sub
Timer1_Timer()
Dim s As String
s =
Clipboard.GetText
If s <> strFromClipboard Then
strFromClipboard = s
Text1.Text = strFromClipboard
End If
End Sub
Uji Coba:
  • Jalankan project yang baru kita buat dengan cara menekan tombol F5 atau mengklik tombol start yang terdapat pada toolbar VB6.
  • Copy sembarang text, maka text yang telah dicopy tadi secara otomatis akan masuk ke dalam Text1


READ MORE - Kamus Inggris - Membuat Project Baru - Bagian Ke-2

Kamus Inggris - Handle Error 521 dan Parse Text - Bagian 3

Kamus Inggris - Handle Error 521 merupakan kelanjutan dari Bagian ke-2.
Ternyata kode yang sangat sedikit yang terdapat pada bagian ke-2 menyisakan bug, terkadang ia memunculkan error yaitu Error Number = 521 Error Description = "Unable to open clipboard"

Tujuan pada bagian ke-3:
  • Meng-handle dan mengkoreksi Error 521
  • Mem-parse text dan menambahkannya ke dalam objek ListBox
  • Memfilter hanya karakter yang valid untuk diterjemahkan
Langkah-langkah:
  • Singkat saja, ganti seluruh kode yang terdapat pada bagian ke-1 (Error 521) dengan kode yang terdapat pada bagian kode-kode.
Kode-kode:
Option Explicit 

Private Declare Function
EmptyClipboard Lib "user32" ) As Long 'API Function
Dim strFromClipboard As String

'---------------------------------------------------------------------------------
' Copy text dari clipboard dan masukan ke dalam objek TextBox
' dengan men-trigger secara kontinyu menggunakan bantuan timer
'---------------------------------------------------------------------------------
Private Sub Timer1_Timer()

On Error GoTo
ErrHandler 'apabila error loncat ke Handle Error

Dim s As String

s =
Clipboard.GetText 'baris ini terkadang error |Error Number = 521|

If s
<> strFromClipboard Then
ParsingText s, List1
strFromClipboard = s
Text1.Text = strFromClipboard
End If

Exit Sub

ErrHandler:
'Handle Error
If Err.Number = 521 Then 'Can't open the clipboard
Text1.Text = ""
EmptyClipboard 'paksa kosongkan clipboard dengan Fungsi API
Resume Next 'loncat lagi ke baris atas dan lanjutkan eksekusi membaca kode)
End If

End Sub

'--------------------------------------------------------------------------------
' dua event List1_Click() dan Text_DblClick()
' dengan kode sementara, hanya untuk mengecek dan melihat hasilnya saja
'--------------------------------------------------------------------------------
Private Sub List1_Click()
Text2.Text = "Menterjemahkan : " & List1.Text & " ==> ke dalam bahasa Inggris"
End Sub

Private Sub
Text1_DblClick()
Text2.Text = "Menterjemahkan : " & Text1.SelText & " ==> ke dalam bahasa Inggris"
End Sub

'---------------------------------------------------------------------------------
' Fungsi untuk Parse uraikan) kalimat ke dalam text dan masukan ke ListBox
'---------------------------------------------------------------------------------
Private Sub ParsingText(s As String, lst As ListBox)

Dim
strText As String
Dim
y() As String
Dim i As Integer
Dim b As String

lst.Clear
strText = s
strText = Replace(strText, " ", vbCrLf)
y = Split(strText, vbCrLf)

For i =
LBound(y) To UBound(y)
b = Trim(y(i))
If IsValidWord(b) Then
lst.AddItem y(i)
End If
Next

End Sub

'-------------------------------------------------------------------------------
' Fungsi untuk memfilter karakter yang tidak valid diterjemahkan
'-------------------------------------------------------------------------------
Private Function IsValidWord(s As String) As Boolean

Dim x As String
Dim z As String

z =
"= - , . % *" 'tambahkan karakter tidak valid untuk diterjemahkan disini
x = s
If
Len(x) = 0 Then Exit Function
If
InStr(1, z, s) > 0 Then Exit Function
IsValidWord = True

End Function

'-------------------------------------------------------------------------------
' == End All Of Code ==
'-------------------------------------------------------------------------------
Uji Coba:
Jalankan, copy sembarang text dan klik sembarang item yang terdapat pada ListBox, apabila berhasil maka gambarnya seperti yang ada di samping [ScreenShot]

Mas, saya mau bertanya, apakah ini sedang membuat software Kamus Bahasa Inggris atau sedang membuat Rencana Pelaksaan Pembelajaran (RPP)?
READ MORE - Kamus Inggris - Handle Error 521 dan Parse Text - Bagian 3

Kamus Inggris - XP Style Manifest Dalam EXE - Bagian Ke-4

Kamus Inggris - XP Style Manifest Dalam EXE merupakan sambungan dari bagian ke-3.
Agar aplikasi yang kita buat memiliki theme XP style, maka cara yang termudah adalah menambahkan file manifest. Di antara beberapa cara menambahkan file manifest, maka menambahkannya langsung melalui file exe dianggap cara yang paling elegant, mengapa demikian? karena user tidak akan pernah melihat file manifest tersebut, baik file manifest dengan atribute normal, maupun manifest dengan atribute hidden (hidden file).

Tujuan pada bagian ke-4:
  • Menanam file manifest ke dalam exe, agar aplikasi memiliki theme XP Style.
  • Menjadikan Sub Main sebagai Startup Object
Langkah-langkah:
  • Buatlah manifest resource, jika tidak mau repot membuat manifest resource, Anda bisa mendownloadnya di sini.
  • Pada aplikasi VB6, klik Project >> Add File...
  • Tambahkan manifest resource file yang telah Anda buat atau Anda download tadi.
  • Buat module baru dan beri nama modMain (mod adalah prefix untuk module)
  • Tambahkan fungsi API InitCommonControls (akan dibahas pada bagian kode-kode)
  • Jadikan Sub Main() sebagai Startup Object
Kode-kode:
'simpan kode di bawah pada module modMain 
Option Explicit

Public Declare Sub
InitCommonControls Lib "Comctl32" )

Sub
Main()
InitCommonControls
frmMain.Show
End Sub
Uji Coba:
  • Compile Project (Klik File >> Make Kamus Inggris.exe)
  • Jalankan Kamus Inggris.exe melalui Windows Explorer, sekarang Anda lihat bahwa Kamus Inggris.exe memiliki theme XP Style.
Catatan:
Selain untuk aplikasi ini, menanam resource manifest juga bisa digunakan untuk aplikasi-aplikasi yang dibuat menggunakan Visual Basic 6.0 agar memiliki theme XP Style. Semoga bermanfaat.
READ MORE - Kamus Inggris - XP Style Manifest Dalam EXE - Bagian Ke-4

Saturday, March 5, 2011

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 6

وَمُفْرَدًا يَأتِي وَيَأتِي جُمْلَهْ ... حَاوِيَةً مَعْنَى الّذِي سِيْقَتْ لَهْ
وَمُفْرَدَنْ يَأتِيْ وَيَأتِي جُمْلَهْ ... حَاوِيَتَنْ مَعْنَى لْلَذِيْ سِيْقَتْ لَهْ
وَمُفْرَدَنْ- يَأتِيْ وَيَأ-تِي جُمْلَهْ ... حَاوِيَتَنْ -مَعْنَى لْلَذِيْ- سِيْقَتْ لَهْ
مَفَاعِلُنْ - مُسْتَفْعِلُنْ - مَفْعُوْلُنْ ... مُفْتَعِلُنْ - مُسْتَفْعِلُنْ - مَفْعُوْلُنْ
المخبونة - السالمة - المقطوعة ... المطويّة - السالمة - المقطوع

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 6

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 7

وَإِنْ تَكُنْ إِيَّاهُ مَعْنًى اكْتَفَى ... بِهَا كَنُطْقِي الله حَسْبِي وَكَفَى
وَإِنْ تَكُنْ إِيْيَاهُ مَعْنَن كْتَفَى ... بِهَا كَنُطْقِ لْلاهُ حَسْبِي وَكَفَى
وَإِنْ تَكُنْ- إِيْيَاهُ مَعْ-نَن كْتَفَى ... بِهَا كَنُطْ-قِ لْلاهُ حَسْ-بِي وَكَفَى
مَفَاعِلُنْ - مُسْتَفْعِلُنْ - مَفَاعِلُنْ ... مَفَاعِلُنْ - مُسْتَفْعِلُنْ - مُفْتَعِلُنْ
المخبونة - السالمة - المخبونة ... المخبونة - السالمة - المطويّ

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 7

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 8

وَالمُفْرَدُ الجَامِدُ فَارِغٌ وَإِنْ ... يُشْتَقَّ فَهْوَ ذُو ضَمِيْرٍ مُسْتَكِنْ
وَلْمُفْرَدُ لْجَامِدُ فَارِغُنْ وَإِنْ ... يُشْتَقْقَ فَهْوَ ذُو ضَمِيْرِنْ مُسْتَكِنْ
وَلْمُفْرَدُ لْ-جَامِدُ فَا-رِغُنْ وَإِنْ ... يُشْتَقْقَ فَهْ-وَ ذُو ضَمِيْ-رِنْ مُسْتَكِنْ
مُسْتَفْعِلُنْ - مُفْتَعِلُنْ - مَفَاعِلُنْ ... مُسْتَفْعِلُنْ - مَفَاعِلُنْ - مُسْتَفْعِلُنْ
السالمة - المطويّة - المخبونة ... السالمة - المخبونة - الصحيح

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 8

Nadzom Bahar Rojaz: Jawaban Latihan Soal No. 9

وَأَبْرِزَنْهُ مُطْلَقًا حَيْثُ تَلاَ ... مَا لَيْسَ مَعْنَاهُ لَهُ مُحَصَّلاَ
وَأَبْرِزَنْهُ مُطْلَقَنْ حَيْثُ تَلاَ ... مَا لَيْسَ مَعْنَاهُ لَهُو مُحَصْصَلاَ
وَأَبْرِزَنْ-هُ مُطْلَقَنْ-حَيْثُ تَلاَ ... مَا لَيْسَ مَعْ-نَاهُ لَهُو-مُحَصْصَلاَ
مَفَاعِلُنْ - مَفَاعِلُنْ - مُفْتَعِلُنْ ... مُسْتَفْعِلُنْ - مُفْتَعِلُنْ - مَفَاعِلُنْ
المخبونة - المخبونة - المطويّة ... السالمة - المطويّة - المخبون

READ MORE - Nadzom Bahar Rojaz: Jawaban Latihan Soal No. 9

Nadzom Bahar Rojaz: Jawaban Latihan Soal No. 10

وَأَخْبَرُوا بِظَرْفِ أوْ بِحَرْفِ جَرْ ... نَاوِيْنَ مَعْنَى كَائِنٍ أَوِ اسْتَقَرْ
وَأَخْبَرُوْ بِظَرْفِ أَوْ بِحَرْفِ جَرْ ... نَاوِيْنَ مَعْنَى كَائِنِنْ أَوِ سْتَقَرْ
وَأَخْبَرُوْ-بِظَرْفِ أَوْ-بِحَرْفِ جَرْ ... نَاوِيْنَ مَعْ-نَى كَائِنِنْ-أَوِ سْتَقَرْ
مَفَاعِلُنْ - مَفَاعِلُنْ - مَفَاعِلُنْ ... مُسْتَفْعِلُنْ - مُسْتَفْعِلُنْ - مَفَاعِلُنْ
المخبونة - المخبونة - المخبونة ... السالمة - السالمة - المخبون
READ MORE - Nadzom Bahar Rojaz: Jawaban Latihan Soal No. 10

VB6 Code - AutoFit TextBox.Text Caranya?

Yang dimaksud dengan AutoFit TextBox.Text disini adalah menyesuaikan ukuran huruf yang terdapat dalam objek TextBox agar sesuai dengan lebar textbox. Perhatikan gambar di bawah ini:
Pada mulanya text melebihi lebar textbox
menjadi:
Sekarang text sesuai dengan lebar textbox
Pada gambar di atas objek TextBox-nya lebih dari satu, sehingga prosedurnya harus dipanggil satu persatu menggunakan kode di bawah ini:

Option Explicit 
 '----------------------------------------------------------------------- 
'http://khoiriyyah.blogspot.com 
'By Asep Hibban Ibnu Surur) 
'----------------------------------------------------------------------- 
 
Private Sub Command1_Click() 
    Dim ctl As Object 
    For Each ctl In Me.Controls 
        If TypeName(ctl) = "TextBox" Then 
            AutoFitTextBox ctl 
        End If 
    Next 
End Sub 
Selengkapnya bisa Anda download pada link di bawah ini:

READ MORE - VB6 Code - AutoFit TextBox.Text Caranya?

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 5

وَالخَبَرُ الجُزْءُ المُتِمُّ الفَائِدَهْ ... كَالله بَرٌّ والأَيَادِي شَاهِدَهْ
وَلْخَبَرُ لْجُزْءُ لْمُتِمْمُ لْفَائِدَهْ ... كَلْلاهُ بَرْرُنْ وَلأَيَادِيْ شَاهِدَهْ
وَلْخَبَرُ لْ-جُزْءُ لْمُتِمْ-مُ لْفَائِدَهْ ... كَلْلاهُ بَرْ-رُنْ وَلأَيَا-دِيْ شَاهِدَهْ
مُفْتَعِلُنْ - مُسْتَفْعِلُنْ - مُسْتَفْعِلُنْ ... مُسْتَفْعِلُنْ - مُسْتَفْعِلُنْ - مُسْتَفْعِلُنْ
المطويّة - السالمة - الصحيحة ... السالمة - السالمة - الصحيح

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 5

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 4

وَرَفَعُوْا مُبْتَدَاءً بِالإِبْتِدَا ... كَذَاكَ رَفْعُ خَبَرٍ بِالمُبْتَدَا
وَرَفَعُوْ مُبْتَدَئَنْ بِلإِبْتِدَا ... كَذَاكَ رَفْعُ خَبَرِنْ بِلْمُبْتَدَا
وَرَفَعُوْ- مُبْتَدَئَنْ- بِلإِبْتِدَا ... كَذَاكَ رَفْ-عُ خَبَرِنْ-بِلْمُبْتَدَا
فَعِلَتُنْ - مُفْتَعِلُنْ - مُسْتَفْعِلُنْ ... مَفَاعِلُنْ - فَعِلَتُنْ - مُسْتَفْعِلُنْ
المخبولة - المطويّة - الصحيحة ... المخبونة - المخبولة - الصحيح

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 4

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 3

وَقِسْ وَكَاسْتِفْهَامٍ النَّفْيُ وَقَدْ ... يَجُوزُ نَحْوُ فَائِزٌ أُولُو الرَّشَدْ
وَقِسْ وَكَسْتِفْهَامِنِ نْنَفْيُ وَقَدْ ... يَجُوْزُ نَحْوُ فَائِزُنْ أُوْلُوْ رْرَشَدْ
وَقِسْ وَكَس-ْتِفْهَامِنِ نْ-نَفْيُ وَقَدْ ... يَجُوْزُ نَحْ-وُ فَائِزُنْ- أُوْلُوْ رْرَشَدْ
مَفَاعِلُنْ - مُسْتَفْعِلُنْ - مُفْتَعِلُنْ ... مَفَاعِلُنْ - مَفَاعِلُنْ - مُسْتَفْعِلُنْ
المخبونة - السالمة - المطويّة ... المخبونة - المخبونة - الصحيح

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 3

Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 2

وَأَوَّلٌ مُبْتَدَأٌ وَالثَّانِي ... فَاعِلٌ اغْنَى فِي أَسَارٍ ذَانِ
وَأَوْوَلُنْ مُبْتَدَئُنْ وَ ثْثَانِيْ ... فَاعِلُن غْنَى فِي أَسَارِنْ دَانِي
وَأَوْوَلُنْ - مُبْتَدَئُنْ - وَ ثْثَانِيْ ... فَاعِلُن غْ - نَى فِي أَسَا - رِنْ دَانِي
مَفَاعِلُنْ - مُفْتَعِلُنْ - مَفْعُوْلُنْ ... مُفْتَعِلُنْ - مُسْتَفْعِلُنْ - مَفْعُوْلُنْ
المخبونة - المطويّة - المقطوعة ... المطويّة - السالمة - المقطوع

READ MORE - Nadzom Bahar Rojaz: Jawaban Soal Latihan No. 2

Nadzom Bahar Rojaz : Jawaban Soal Latihan No. 1

مُبْتَدَأٌ زَيْدٌ وَعَاذِرٌ خَبَرْ ... إِنْ قُلْتَ زَيْدٌ عَاذِرٌ مَنِ اعْتَذَرْ
مُبْتَدَئُنْ زَيْدُنْ وَعَاذِرُنْ خَبَرْ ... إِنْ قُلْتَ زَيْدُنْ عَاذِرُنْ مَنِ عْتَذَرْ
مُفْتَعِلُنْ - مُسْتَفْعِلُنْ - مَفَاعِلُنْ ... مُسْتَفْعِلُنْ - مُسْتَفْعِلُنْ - مَفَاعِلُنْ
المطويّة - السالمة - المخبونة ... السالمة - السالمة - المخبون

READ MORE - Nadzom Bahar Rojaz : Jawaban Soal Latihan No. 1

Friday, March 4, 2011

VB6 Code - Code Generator: Add Ocx Add Dll

Yang dimaksud kode generator disini adalah sebuah aplikasi yang digunakan untuk membuat sebuah project. Adapun tujuan utamanya ialah untuk menghemat waktu, tenaga, dan biaya sedangkan tujuan lainnya yang tidak kalah penting adalah kecepatan.

Kode generator sangat baik sekali digunakan untuk men-generate aplikasi-aplikasi database, karena aplikasi database hampir memliki kode-kode yang sama (insert-update-delete-dsb) hanya objeknya saja yang berbeda. Maka jika kita ingin membuat belasan aplikasi database dengan objek yang berbeda, pembuatan kode generator dengan rancangan yang baik sangat layak untuk dipertimbangkan.

Hanya sebagai contoh saja, Anda dapat mendownload kode generator yang kurang baik disini. Walaupun kurang baik, tapi coba perhatikan apakah keistimewaanya?

Membuat aplikasi kode generator, tentunya harus memiliki kemampuan menambahkan sembarang OCX dan referensi DLL yang support VB6.0. Bagaimanakah caranya? Di bawah ini merupakan potongan dari kode generator tersebut, gunanya untuk menambahkan referensi DLL dan OCX.
'------------------------------------------------------------------------------- 
'http://khoiriyyah.blogspot.com 
'Asep Hibban 
'------------------------------------------------------------------------------- 
 
Public VBInstance As VBIDE.VBE 
Public Connect As Connect 
 
Option Explicit 

Public Function InsertOCX(ProgID As String) As Boolean 
On Error GoTo ErrHandler 
    'Add OCX 
     VBInstance.ActiveVBProject.AddToolboxProgID ProgID 
    InsertOCX = True 
Exit Function ErrHandler: 
    InsertOCX = False 
End Function 

Public Function InsertReferences(GUID As String, Mayor As Long, Minor As Long) As Boolean 
On Error GoTo ErrHandler 
    'Add dll references 
    VBInstance.ActiveVBProject.References.AddFromGuid GUID, Mayor, Minor 
    InsertReferences = True ErrHandler: 
    InsertReferences = False 
End Function 

Private Sub Command1_Click() 
    'Add ListView to VB6 project 
    InsertOCX "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" 
    'Add TreeView 
    InsertOCX "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" 
    'Add MSFlexGrid 
    InsertOCX "{0ECD9B60-23AA-11D0-B351-00A0C9055D8E}" 
End Sub 

Private Sub Command2_Click() 
    'Add scrun.dll Microsoft Scripting Runtime) 
    InsertReferences "{420B2830-E718-11CF-893D-00A0C9054228}", 1#, 0 
    'Add msado15.dll Microsoft ActiveX Data Objects 2.8 Library)  
    InsertReferences "{2A75196C-D9EB-4129-B803-931327F72D5C}", 2, 8 
End Sub 
Adapun cara menggunakan kode di atas telah saya bahas disini dan disini. Semoga bermanfaat.
READ MORE - VB6 Code - Code Generator: Add Ocx Add Dll

Visual Basic 6.0 - Kesalahan Penulisan Variable Yang Umum

Mengenai masalah kesalahan penulisan variable Visual Basic 6.0 yang sering ditemui - 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 - Visual Basic 6.0 - Kesalahan Penulisan Variable Yang Umum

Tuesday, March 1, 2011

VB6 Code - ToolBar, TabStrip, ListView, TreeView XP Style

Mengenai cara membuat toolbar, tabstrip, listview dengan tampilan XP tanpa kode - Bagaimana dengan ToolBar, TabStrip, TreeView, dan ListView, Apakah memungkinkan untuk dibuat style XP tanpa menggunakan kode, dan hanya menggunakan file manifest saja?

Seperti yang kita ketahui, menggunakan file manifest biasanya tidak memberikan efek/pengaruh pada komponen-komponen di atas. Tetapi coba perhatikan gambar di bawah:

Gambar 1, 2 ToolBar, TabStrip, ListView, TreeView Style XP

Bagaimana caranya? bisa Anda download file di bawah ini:

READ MORE - VB6 Code - ToolBar, TabStrip, ListView, TreeView XP Style

Monday, February 28, 2011

VB6 Code - Save As MHTML

Mengenai cara menyimpan halaman dengan format MHTML menggunakan Visual Basic 6.0 - 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.
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 Liblary dan Microsoft CDO for Windows 2000 Liblary
READ MORE - VB6 Code - Save As MHTML

Saturday, February 26, 2011

VB6.0 - Set Google Chrome Default Home Site Programmatically

Mendefaultkan home site IE (Internet Explorer) atau Mozilla Firefox secara pemrograman mungkin kita sudah mengetahuinya, tapi bagaimana dengan Google Chrome yang tergolong relatif masih muda untuk saat ini (2011).

Masalah mendefaultkan Google Chrome home page, hanyalah masalah merubah 1 baris kode yang terdapat pada file preferences yang terdapat pada folder: .... \Local Settings\Application Data\Google\Chrome\User Data\Default.

Atau tepatnya merubah 1 baris kode yang terdapat pada gambar di bawah ini:

Gambar 1  Kode yang dirubah pada file preferences
Di bawah ini merupakan kode untuk mendefaultkan home page Google Chrome. Letakan kode ini pada module.

'---------------------------------------------------------------------------------- 
'From: http://khoiriyyah.blogspot.com
'By: Asep Hibban
'----------------------------------------------------------------------------------
Option Explicit

Public Sub
SetChromeHomepage(URL As String)

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

strPath = Environ("SystemDrive") & Environ("HOMEPATH")
strPath = strPath & "\Local Settings\Application Data\Google\Chrome\User Data\Default"
strProfile = Dir(strPath, vbDirectory)
Debug.Print strPath
If Len(strPath) Then
strPath = strPath & "\Preferences"
strReplace = Chr(34) & "homepage" & Chr(34) & ": " & Chr(34) & URL & Chr(34) & ","
strContent = fGetFileContents(strPath)
Set regex = New RegExp
If InStr(1, strContent, Chr(34) & "homepage" & Chr(34)) = 0 Then
strContent = strContent & vbCrLf & Chr(34) & "homepage" & Chr(34) & ": " & Chr(34) & URL & Chr(34) & ","
sPutStringToFile strContent, strPath
Exit Sub
ElseIf
InStr(1, strContent, strReplace) Then
Exit Sub
End If
'tidak bisa direplace menggunakan replace biasa
'maka kita gunakan regular expressions untuk keperluan ini
regex.Pattern = Chr(34) & "homepage" & Chr(34) & ": .*)"

strContent = regex.Replace(strContent, strReplace)
strContent = Replace(strContent, Chr(34) & "homepage_is_newtabpage" & Chr(34) & ": true,", vbCrLf & Chr(34) & "homepage_is_newtabpage" & Chr(34) & ": false,")
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
Contoh pemanggilan prosedure di atas:
Private Sub Command1_Click() 
SetChromeHomepage "http://khoiriyyah.blogspot.com"
End Sub
READ MORE - VB6.0 - Set Google Chrome Default Home Site Programmatically

Monday, February 14, 2011

Menghilangkan Virus Copy of Shortcut to (1) to (4) secara Manual

Pernahkah PC/flasdisc Anda terinfeksi virus seperti di bawah ini:

Sementara disaat yang bersamaan PC Anda telah terpasang misalnya 2 Antivirus (lokal maupun luar) dengan update terbaru. Jika keduanya mampu menghapus secara tuntas virusnya, tentu tidak ada masalah dan Anda disarankan untuk tidak melanjutkan membaca artikel ini. Tapi Jika keduanya tidak mampu mengatasi masalah diatas dan komputer Anda terasa sangat lambat sekali, koneksi internet sangat lambat sekali, maka terpaksa Anda harus menghapusnya secara manual. Bagaimana caranya:
Langkah pertama:
  1. Hapus/pindahkan seluruh file aplikasi browser, misalnya: Chrome.exe, firefox.exe, IExplorer.exe, dan sebagainya ke sebuah folder tertentu.
  2. Putuskan koneksi internet, cabut seluruh flashdisc.
  3. Restar komputer.
  4. Hapus file-file virusnya.
  5. Selesai.
Penjelasan:
  • Chrome.exe terdapat pada: C:\Documents and Settings\.....\Local Settings\Application Data\Google\Chrome\Application\chrome.exe
  • firefox.exe terdapat pada: C:\Program Files\Mozilla Firefox\firefox.exe
  • IExplorer.exe terdapat pada: C:\Program Files\Internet Explorer\IExplorer.exe
  • dan file-file browsing lainnya dengan menggunakan search. Pastikan file browser tersebut tidak dalam keadaan berjalan dengan melihatnya melalui Windows Task Manager.
  • Setelah direstart. kini giliran menghapus file-file virusnya, caranya:
    Pertama: Buka folder C:\Program Files maka perhatikan disana akan terdapat folder dengan nama acak, di dalamnya ada satu file exe, itulah yang menjadi file virusnya (karena acak, nama virus tidak harus sama dengan yang terdapat dalam gambar). Perhatikan gambar di bawah ini:

Kedua: Buka folder C:\Documents and Settings\Ibnu Surur\Start Menu\Programs\Startup. Di dalam folder ini Anda akan menemukan satu file virus lagi (karena acak, nama virus tidak harus sama dengan yang terdapat dalam gambar). Hapus saja secara manual. Sekarang Anda aman.


Jika Anda mau Anda dapat melakukan pembersihan terhadap key-key registry yang telah dirubah, juga menghapus seluruh file-file yang telah ditambahkan pada flashdisc. Hapus pula file dmlconf.dat (cari melalui search), mengaktifkan safemode kembali, mendisable autorun seluruh disc. Tapi jika tidak pun tidak apa-apa, hanya berpotensi terinfeksi virus kembali.

Terakhir: tiba saatnya mengucapkan selamat jalan pada virus tersebut.

Jika dilihat dari tingkah lakunya, virus tersebut tidak merubah/merusak file, hanya membuat komputer lambat, dan kemungkinan (hanya kemungkinan saja, mudah-mudahan tidak) mengintai (spy) aktifitas Anda berinternet serta mengkoleksi password-password Anda.

Update (12-2012):
Cara di atas sudah tidak bisa digunakan lagi, dikarenakan virus copy of shortcut sudah bisa melakukan infeksi terhadap file-file yang berektensi *.exe, *.dll, *.html. Untuk solusinya silakan klik link di samping Cara mudah mengatasi virus shortcut

READ MORE - Menghilangkan Virus Copy of Shortcut to (1) to (4) secara Manual