![]() |
|
Lengkapi program tersebut dengan beberapa hal sebagai berikut :
1. txtCCode, maksimal pengetikkan 4 huruf, dan tidak boleh kurang dari 4 huruf, dan yang dapat diketik hanya digit (0 s/d 9).
Solusi :
A. Untuk membatasi jumlah pengetikkan maksimal 4 huruf, kita dapat menggunakan properti MaxLength pada picture box txtCCode yang diset menjadi 4.
B. Untuk memaksakan pengetikkan tidak boleh kurang dari 4 huruf, kita dapat melakukan koding pada event Validate kontrol txtCCode, yang perlu kita lakukan adalah memeriksa apakah txtCCode kosong atau tidak, jika tidak kosong kita periksa apakah panjangnya dibawah 4 huruf dengan menggunakan fungsi bantu Len(string), jika dibawah 4 huruf kita set argumen Cancel menjadi True yang artinya tidak dapat keluar dari kontrol.
Private Sub txtCCode_Validate(Cancel As Boolean)
If Trim(txtCCode.Text) <> "" Then 'Jika tidak kosong
If Len(txtCCode.Text) < 4 Then 'Jika panjang dibawah 4 huruf
MsgBox "Kode Akses harus 4 digit", vbOKOnly + vbInformation, "Perhatian"
Cancel = True 'Tidak boleh meninggalkan kontrol
End If
End If
End Sub
C. Untuk membatasi huruf yang dapat diketik hanya digit (0 s/d 9) pada txtCCode, kita perlu melakukan koding terhadap event Keypress, dengan memeriksa isi argumen KeyAscii dan memanipulasinya.
Private Sub txtCCode_KeyPress(KeyAscii As Integer)
If Not (Chr$(KeyAscii) Like "[0-9]" Or _ 'Jika yang ditekan bukan 0 s/d 9
KeyAscii = 8) Then 'atau backspace
KeyAscii = 0 'Abaikan saja
End If
End Sub
2. txtNama, maksimal pengetikkan 30 huruf, dan huruf pertama setiap suku kata otomatis besar, misalnya Hendra Wijaya, Susan Dewichan.
Solusi :
A. Untuk solusi maksimal pengetikkan 30 huruf, dapat dilihat pada jawaban diatas.
B. Untuk mengubah setiap huruf pertama suku kata menjadi huruf besar mula-mula kita perlu membuat fungsi bantu proper :
Function Proper(x As String)
Dim cRet As String 'Menampung hasil perubahan huruf perhuruf
Dim lBesar As Boolean 'Flag untuk menandai huruf berikutnya huruf besar
Dim i As Integer 'Variabel counter dari huruf 2 s/d selesai
If Len(x) > 0 Then 'Jika x tidak kosong
cRet = UCase$(Left(x, 1)) 'Buat huruf pertama jadi besar
lBesar = False 'Huruf berikutnya huruf kecil
For i = 2 To Len(x) 'Mulai dari huruf 2 s/d selesai
If lBesar Then 'Jika lBesar
cRet = cRet & UCase$(Mid$(x, i, 1)) 'Buat huruf tersebut jadi besar
lBesar = False 'Huruf berikutnya huruf kecil
Else
cRet = cRet & LCase$(Mid$(x, i, 1)) 'Buat huruf tersebut jadi kecil
End If
If Mid$(x, i, 1) = " " Then 'Jika huruf tersebut adalah spasi
lBesar = True 'Huruf berikutnya huruf besar
End If
Next i
End If
Proper = cRet 'Kembalikan hasil perubahan di cRet
End Function
Kemudian kita gunakan fungsi Proper tersebut pada event Change pada txtNama, artinya setiap terjadi perubahan pada isi textbox, maka kita jalankan fungsi proper untuk menjamin tampilan.
Private Sub txtNama_Change() Dim i As Integer i = txtNama.SelStart 'Simpan posisi titik sisip txtNama.Text = Proper(txtNama.Text) txtNama.SelStart = i 'Kembalikan posisi titik sisip End Sub
3. txtEkstension, maksimal pengetikkan 3 huruf, dan yang dapat diketik hanya digit (0 s/d 9), dan nomor ekstension terkecil 100, terbesar 600.
Solusi :
A. Solusi 1 dan 2 lihat diatas.
B. Solusi untuk nomor ekstension terkecil 100, dan terbesar 600, kita lakukan pada event Validate
Private Sub txtEkstension_Validate(Cancel As Boolean)
If Trim$(txtEkstension.Text) <> "" Then 'Jika tidak kosong
If Len(txtEkstension.Text) < 3 Or _ 'Jika kurang dari 3 huruf atau
txtEkstension.Text < "100" Or _ 'dibawah 100 atau
txtEkstension.Text > "600" Then 'diatas 600
MsgBox "Ekstension mulai 100 s/d 600", vbOKOnly + vbInformation, "Perhatian"
Cancel = True
End If
End If
End Sub
4. Penekanan Enter dapat digunakan untuk berpindah antar textbox
Solusi :
Untuk melakukan hal ini kita perlu mengatur event keypress masing-masing kontrol sehingga menjadi :
Private Sub txtCCode_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys "{tab}"
ElseIf Not (Chr$(KeyAscii) Like "[0-9]" Or _
KeyAscii = 8) Then
KeyAscii = 0
End If
End Sub
Private Sub txtNama_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys "{tab}"
End If
End Sub
Private Sub txtEkstension_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys "{tab}"
ElseIf Not (Chr$(KeyAscii) Like "[0-9]" Or _
KeyAscii = 8) Then
KeyAscii = 0
End If
End Sub
5. Option SLI, hanya bisa dipilih untuk ekstension 100 s/d 199, SLJJ, hanya dipilih untuk ekstension 200 s/d 299
Solusi :
Untuk memeriksa apakah suatu nomor ekstension dapat melakukan akses SLJJ maupun akses SLI, kita perlu memeriksanya pada event klik pada masing-masing option button.
Private Sub optSLI_Click() If txtEkstension.Text > "199" Then MsgBox "Ekstension tidak bisa akses SLI" optSLI.Value = False End If End Sub
Private Sub optSLJJ_Click() If txtEkstension.Text > "299" Then MsgBox "Ekstension tidak bisa akses SLJJ" optSLJJ.Value = False End If End Sub
6. txtCCode, txtNama, txtEkstension, dan Akses tidak boleh kosong.
Solusi :
Pemeriksaan terhadap data txtCCode, txtNama dan txtEkstension tidak boleh kosong kita lakukan pada bagian Update, artinya jika salah satu kosong kita tampilkan kotak pesan dan proses Update dibatalkan.
Private Sub cmdUpdate_Click()
If Aksi = flAdd Or Aksi = flEdit Then 'Kalau update dilakukan karena Edit
'atau Add
If Trim$(txtCCode.Text) = "" Then 'Jika txtCCode kosong
MsgBox "Kode Akses tidak bisa kosong" 'Tampil pesan
txtCCode.SetFocus 'Kembalikan fokus ke txtCCode
Exit Sub 'Keluar dari sub
End If
If Trim$(txtNama.Text) = "" Then
MsgBox "Nama tidak bisa kosong"
txtNama.SetFocus
Exit Sub
End If
If Trim$(txtEkstension.Text) = "" Then
MsgBox "Ekstension tidak bisa kosong"
txtEkstension.SetFocus
Exit Sub
End If
If Not (optLocal.Value Or optSLJJ.Value Or optSLI.Value) Then
MsgBox "Anda harus pilih salah satu option"
Exit Sub
End If
If Aksi = flAdd Then
JlhRec = JlhRec + 1
Posisi = JlhRec
End If
DatPemakai.CCode = txtCCode.Text
DatPemakai.nama = txtNama.Text
DatPemakai.Ekstension = txtEkstension.Text
DatPemakai.Local = optLocal.Value
DatPemakai.SLJJ = optSLJJ.Value
DatPemakai.SLI = optSLI.Value
Put #1, Posisi, DatPemakai
Call Kunci
End If
End Sub