Saturday, July 23, 2011

Skin Form Yang Mengagumkan Ini milik Leandro Ascierto

Selain Codejock dan Active Skin, skin form yang dibuat oleh Leandro Ascierto (argentina) ini layak sekali untuk dipertimbangkan. Memiliki banyak contoh skin, kurang lebih ada 16 skin. Apabila kita belum puas dengan tampilannya, kita bisa membuat custom skin, karena projectnya (terpisah) dilengkapi dengan fasilitas editor untuk membuat custom skin.

Skin form (open source dan lengkap beserta contohnya) dapat Anda download di: http://www.leandroascierto.com.
Selain skin form, di situs miliknya, kita akan mendapati resource-resource berupa uc(User Control) yang berkualitas.

READ MORE - Skin Form Yang Mengagumkan Ini milik Leandro Ascierto

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