Tuesday, June 12, 2012

Validasi Numeric Yang Disertai Decimal Symbol - Visual Basic 6

Bagaimana logika untuk validasi numerik yang disertai angka dibelakang koma? Nah, dengan menggabungkan posting sebelumnya dan sebelumnya, maka kita memperoleh logika untuk membuat validasi numeric yang memperbolehkan angka di belakang koma. Adapun kodenya adalah sebagai berikut:
Private Sub Text1_KeyPress(KeyAscii As Integer) 
Dim intDummyDecimalSymbol As Integer
intDummyDecimalSymbol = IIf(InStr(1, Text1.Text, Chr(GetDecimalSymbol)) = 0, GetDecimalSymbol, 0)
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8 Or KeyAscii = 45 Or KeyAscii = intDummyDecimalSymbol) Then KeyAscii = 0
End Sub

Private Function
GetDecimalSymbol() As Integer
'akan memperoleh 44 untuk koma (,) dan 46 untuk (.) dan lain sebagainya.
GetDecimalSymbol = Asc(Mid$(1 / 2, 2, 1))
End Function

Kode di atas akan sangat merepotkan, apabila harus memvalidasi banyak TextBox. Maka buatlah menjadi sederhana dengan menyimpannya pada module agar dapat diakses oleh seluruh form.
'Simpan dalam module 
Public Function GetNumericAndDecimal(txt As TextBox, Keyascii As Integer) As Integer
Dim
intDummyDecimalSymbol As Integer
intDummyDecimalSymbol = IIf(InStr(1, txt.Text, Chr(GetDecimalSymbol)) = 0, GetDecimalSymbol, 0)
If Not ((Keyascii >= 48 And Keyascii <= 57) Or Keyascii = 8 Or Keyascii = 45 Or Keyascii = intDummyDecimalSymbol) Then
GetNumericAndDecimal = 0
Else
GetNumericAndDecimal = Keyascii
End If
End Function

Public Function
GetDecimalSymbol() As Integer
'akan memperoleh 44 untuk koma (,) dan 46 untuk (.) dan lain sebagainya.
GetDecimalSymbol = Asc(Mid$(1 / 2, 2, 1))
End Function

Contoh penggunaan:
Private Sub Text1_KeyPress(KeyAscii As Integer) 
KeyAscii = GetNumericAndDecimal(Text1, KeyAscii)
End Sub



READ MORE - Validasi Numeric Yang Disertai Decimal Symbol - Visual Basic 6

Black Circle PasswordChar Untuk Login Form - Visual Basic 6

Pada saat kita menuliskan password di yahoo, gmail, xp, facebook, dll, kita dapat melihat, bahwa karakter yang digunakan untuk menuliskan password bukanlah karakter asterix (*) melainkan lingkaran kecil berwarna hitam. Nah, bagaimana setting PasswordChar untuk menggantikan karakter asterix (*) tersebut? (ini tentu saja akan membuat form login Anda terlihat lebih baik dan standard).

Option Explicit 

Private Sub
Form_Load()
With Text1
.FontName = "Wingdings"
.FontSize = 9
.PasswordChar = "l"
End With
End Sub

Catatan: yang harus kita perhatikan adalah, apakah font 'Wingdings' merupakan font bawaan OS (98, 2000, XP, Vista, Windows 7)?, jika bukan maka kita harus mengikutsertakan dalam file setup/installer.
READ MORE - Black Circle PasswordChar Untuk Login Form - Visual Basic 6

Generator Interface Yang Dilengkapi Template, Sebuah Konsep

Mengenai generator interface yang dilengkapi template - Pada posting terdahulu saya telah menjelaskan mengenai pembuatan generator interface database yang sangat sederhana. Kelemahan utama dari generator tersebut yang ketidakmampuannya untuk diedit secara atau pada saat runtime (yaitu pada saat telah dicompile ke dalam bentuk DLL), sehingga bisa dianggap sebagai generator interface yang statis. Disini kita akan belajar mengenai cara membuat generator interface yang memiliki sifat dinamis, sehingga memiliki keleluasaan untuk diperbaiki, diedit, dipilih, dikembangkan bahasanya menjadi lebih baik, dan tentu saja akan menghasilkan tampilan yang berbeda-beda (seperti halnya mengedit CSS).

Kode dibawah masih sangat sederhana, kurang layak, perlu dikembangkan. Setelah menjadi baik maka gabungkan dengan kode yang terdapat pada posting terdahulu (tentu saja setelah disesuaikan kodenya).
Public VBInstance As VBIDE.VBE 
Public Connect As Connect

Option Explicit

Private Sub
CancelButton_Click()
Connect.Hide
End Sub

Private Sub
OKButton_Click()
OpenTextFileAndTranslate 'membuka template dan menerjemahkannya
End Sub

'//fungsi yang digunakan untuk membaca template baris demi baris
Private Function OpenTextFileAndTranslate() As String
Dim
nFileNum As Integer, sText As String
Dim
sNextLine As String, lLineCount As Long
nFileNum = FreeFile
Open
App.Path & "\template.txt" For Input As nFileNum
lLineCount = 1
Do While Not EOF(nFileNum)
Line Input #nFileNum, sNextLine
Compile sNextLine
sNextLine = sNextLine & vbCrLf
sText = sText & sNextLine
Loop
OpenTextFile = sText
Close nFileNum
End Function

'//fungsi yang digunakan untuk menterjemahkan template, sehingga bisa dianggap
'//sebagai translator/compiler code (walaupun tidak tepat). Disini kita diberi
'//kebebasan untuk mengembangkan translator menjadi lebih baik lagi, dengan
'//memberikan sedikit 'kecerdasan' kepada mesin untuk menerjemahkan kode yang
'//telah kita buat/edit. dan lain-lain. Adapun kode fungsi di bawah
'//ini masih sangat sederhana, sehingga kurang layak untuk digunakan, tetapi kita
'//telah memahami konsep/logika/garis besarnya, bukan?

Private Sub
Compile(Code As String)

Dim
ObjectOrMethod As String
Dim
strCode As String
Dim
strObject As String
Dim
strProperty As Variant
Dim
ctl As VBControl
Dim f As VBForm
Dim i As Integer

If
(Trim(Left(Code, 1)) = "/") Or (Trim(Code) = "") Then
Exit Sub
'do nothing with comments or blank line
End If

strObject = Split(Code, "=")(0)
ObjectOrMethod = Trim$(Split(Code, "=")(0))
Set f = VBInstance.SelectedVBComponent.Designer

Select Case
ObjectOrMethod
Case "Form"
'Do with Form
Case Else
Set
ctl = f.VBControls.Add(ObjectOrMethod)
End Select

strCode = Trim$(Right$(Code, Len(Code) - Len(strObject)))
strCode = Right$(strCode, Len(strCode) - 1)
strProperty = Split(strCode, ",")

For i =
LBound(strProperty) To UBound(strProperty)
Select Case ObjectOrMethod
Case "InsertOCX"
InsertOCX Trim$(Split(strProperty(i), "=")(0))
Case "Form"
With VBInstance.SelectedVBComponent
.Properties(Trim$(Split(strProperty(i), "=")(0))) = CVar((Trim$(Split(strProperty(i), "=")(1))))
End With
Case Else
With
ctl
.Properties(Trim$(Split(strProperty(i), "=")(0))) = CVar((Trim(Split(strProperty(i), "=")(1))))
End With
End Select
Next

End Sub

'//sub fungsi dari fungsi di atas, digunakan untuk menambahkan OCX third party
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

Pada kode di atas saya menggunakan sebuah ActiveX (OCX) yang dibuat oleh Mas Gyus (Gautama Yustitia) pemilik situs http://araysoft.blogspot.com

Contoh template yang digunakan:
// -- HEADER -------------------------------------------------------------------------------------------
// -- contoh menambahkan OCX third party ke dalam ToolBox VB6
InsertOCX=ARTitleBar32.ARCompanyLine

// -- banyak yang belum diimplementasikan, atau Anda sendiri yang membuatnya dengan selera
// -- bahasa Anda sendiri, di antaranya:
// InsertDLL= menambah reference dll seperti ;Microsoft ActiveX Data Object 2.8 Library' dan lain-lain
// SpaceTop= margin atas penempatan object
// SpaceLeft= margin kiri penempatan object
// SpaceRight= margin kanan penempatan object
// SpaceBottom= margin bawah penempatan object
// SpaceBetween= kerenggangan TextBox atau label
// dan lain-lain -- silakan Anda kembangkan bahasa sendiri dengan menggunakan logika percabangan
// (branching) agar layak untuk digunakan

//------------------------------------------------------------------------------------------------------
// -- http://khoiriyyah.blogspot.com
//-- Coder: Asep Hibban
// menjelaskan mengenai cara membuat sebuah compiler GUI sederhana
// sehingga bisa dibuat sebuah template atau style yang digunakan untuk generator code
//------------------------------------------------------------------------------------------------------

// -- menambah control/object serta memodifikasi property-property yang dibutuhkan
TextBox=Width=5295,Top=660,Height=2805,Left=1440,Text=Cool a.k.a Hade Pisan
ComboBox=Text=Bagaimana?,Width=5295,Top=180,Left=1440
CommandButton=Caption=&Ok,Top=3885,Left=4260,Height=360
CommandButton=Caption=&Cancel,Top=3885,Left=5520,Height=360
CommandButton=Caption=&Update,Top=3885,Left=3000,Height=360

//PictureBox=Align=3,BorderStyle=0,BackColor=&H000000C0

// -- menambah control third party serta memodifikasi property-property yang dibutuhkan
ARTitleBar32.ARCompanyLine=CompanyName=khoiriyyah.blogspot.com,Left=-5,Width=7050,Top=3540


// --- memodifikasi property Form
Form=Width=7000,Height=4900,Caption=Data Karyawan,Name=frmKaryawan,BorderStyle=3

// --- End Template ------------------------------------------------------------------------------------

Download lampiran (source code): Generator Interface
READ MORE - Generator Interface Yang Dilengkapi Template, Sebuah Konsep

Menambahkan Object Yang Disertai Gambar - VB6 Add-Ins

Mengenai cara menambahkan object yang disertai atau membutuhkan gambar - Dalam mengenerate kode, terkadang ada object-object yang harus, membutuhkan, lebih baik disertai dengan gambar. Dalam contoh kode sekarang, object diwakili dengan satu PictureBox sedangkan untuk object-object yang lainnya (Smart Menu, object-object dari Codejock, menu vbAccelator, dll), Anda qiyaskan saja setelah disesuaikan kodenya.

Sebelum mengembangkan kode selanjutnya, ada beberapa yang harus kita pahami mengenai properties Picture. Pertama: Picture memiliki data type object, untuk mengatur propertiesnya, kita tidak bisa menggunakan kode seperti .Properties ("Picture") = LoadPicture ("C:\contoh_gambar.jpg"), ini akan menyebabkan ketidaksesuaian data type, karena penulisan .Properties ("Text") misalnya, sama dengan .Properties ("Text").Value, karena default untuk untuk .Properties adalah Value, seperti halnya kita menulis Text1 = "Contoh Text" (pada saat runtime) sama halnya dengan menulis Text1.Text = "Contoh Text" karena default properties untuk object TextBox adalah properties Text, demikian pula Label default Propertiesnya adalah Caption, dan seterusnya. Nah, untuk properties Picture (karena data typenya object) maka kita harus menuliskan .Properties ("Picture").Object = LoadPicture ("C:\contoh_gambar.jpg"). Kedua: Karena properties Picture adalah object maka kita tidak bisa menjalankan kode design time v.s desin time, mau tidak mau kita harus mengcompile terlebih dahulu project add-insnya untuk dibuat menjadi sebuah dll dan diakses secara runtime, mengapa?

Public VBInstance As VBIDE.VBE 
Public Connect As Connect

Option Explicit

Private Sub
CancelButton_Click()
Connect.Hide
End Sub

Private Sub
OKButton_Click()
Dim v As VBForm
Dim p As VBControl
Set v = VBInstance.SelectedVBComponent.Designer
Set p = v.VBControls.Add("VB.PictureBox")
With p
.Properties("AutoSize") = True
.Properties("BorderStyle") = 0 'None
Set .Properties("Picture").object = LoadPicture(App.Path & "\home_brown_48.gif")
End With
End Sub

Download: Source Code

Walaupun sangat sederhana, akan tetapi kode di atas merupakan kode yang sangat langka sekali.
READ MORE - Menambahkan Object Yang Disertai Gambar - VB6 Add-Ins