Tuesday, June 12, 2012

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