Selasa, 14 Mei 2013

Tau kan yang namanya Bill Gates?? , betulllllll dia itu seorang pendiri dari MICROSOFT (Os yg kebanyakan org pake, termasuk kamu kan??).
Nah kalo kamu pengen wajah Bill Gates nampang di PC or laptop kamu, cobain aplikasi billeyes.  Dengan aplikasi ini, akan muncul karikatur kepala Bill Gates dan yang menariknya tampilan tersebut bukan tampilan biasa, karena bola mata bill gates akan mengikuti kursor mouse kita kemanapun itu.
Contoh penampakannya :

Nah buat yang pengen nyoba silahkan sedot filenya disini.
Trus jalanin file .exe nya.
Suatu ketika saya di beri job oleh atasan untuk membuat sebuah aplikasi yang cara pengunaanya nanti oleh user hanya tinggal klik pada daftar data yang tampil. Saya pikir itu gampang makanya langsung saya katakan "ok pak". Dan 3 hari program pun selesai dan saya presentasikan.  Namun saat presentasi ada request pada tampilan data (saya pake listview) yang akan di klik terdapat pilihan dengan combobox karena aktual data lapangan seperti itu (terdapat beberapa pertimbangan untuk memilih data).
Listview dengan combo box???? langsung itu yang terlintas dipikiran saya, agak susah karena pada listview tidak ada fasilitas menampilkan combobox. saya pikir jika saya ganti ke datagrid bakal lama lagi trus data grid gak serapih listview tampilannya. Coba otak-atik program dan alhamdulillah akhirnya ketemu caranya.

Sekedar primbon pribadi aja, berikut saya tuliskan caranya:

- Buat desain form seperti berikut


- Kemudian tuliskan kode berikut untuk mengisi listview ( lebih bagus ngambil data dari database), saya contohkan sebagai berikut agar lebih cepat mengisinya (tanpa harus konek ke database dulu)

Private Sub Form_Load()
Dim i As Integer
Dim myList As ListItem

For i = 1 To 10
Set myList = Me.ListView1.ListItems.Add
myList.SubItems(1) = "Ini Kolom Ke2 Baris " & i
myList.SubItems(2) = "Ini Kolom Ke3 Baris " & i
myList.SubItems(3) = "Ini Kolom Ke4 Baris " & i
myList.SubItems(4) = "Ini Kolom Ke5 Baris " & i
Next
End Sub

- Kemudian kita buat fungsi untuk mendapatkan ukuran dan letak listview agar sesuai dengan 
   combobox

Function GetKolom(x!) As Long
Dim TempLebar() As Single
Dim TempBatasAwal() As Single
Dim TempBatasAkhir() As Single

Dim Lebar As Single
Dim i As Integer
Dim X1!, X2!

ReDim Preserve TempLebar(0)

TempLebar(0) = 0

For i = 1 To Me.ListView1.ColumnHeaders.Count
ReDim Preserve TempLebar(i)
ReDim Preserve TempBatasAwal(i)
ReDim Preserve TempBatasAkhir(i)

TempLebar(i) = Me.ListView1.ColumnHeaders(i).Width
Lebar = Lebar + TempLebar(i)
TempBatasAwal(i) = Lebar - TempLebar(i) + 1
TempBatasAkhir(i) = Lebar - 1
Next

For i = 1 To Me.ListView1.ColumnHeaders.Count
If x >= TempBatasAwal(i) And x <= TempBatasAkhir(i) Then
GetKolom = i
Exit For
End If
Next
End Function

Function Baris() As Long
Baris = Me.ListView1.ListItems(ListView1.SelectedItem.Index).Index
End Function

- Lalu buat fungsi yang tujuannya agar saat kolom listview di klik, maka akan tampil   
   combobox pada baris tersebut

Sub EditList()
On Error Resume Next
Dim myList As ListItem
Set myList = Me.ListView1.SelectedItem
If myList Is Nothing Then Exit Sub
Me.Combo1.Visible = False
With Me.ListView1
Me.Combo1.Left = .Left + .ColumnHeaders(Kolom).Left + 130
Me.Combo1.Top = .Top + myList.Top + 70
Me.Combo1.Width = .ColumnHeaders(Kolom).Width - 50
If Kolom > 1 Then
Me.Combo1.Text = myList.SubItems(Kolom - 1)
Else
Me.Combo1.Text = myList.Text
End If
Me.Combo1.Visible = True
Me.Combo1.SetFocus
End With
End Sub

-Panggil fungsi -fungsi diatas dengan menuliskan kode berikut:

Private Sub ListView1_Mouseup(Button As Integer, _
Shift As Integer, x As Single, y As Single)
Kolom = GetKolom(x)
EditList
End Sub

- Tuliskan kode berikut untuk menjadikan isi listview berubah sesuai text pada combobox yang kita pilih

Private Sub Combo1_Click()
Set myList = Me.ListView1.ListItems(Baris())

If Kolom > 1 Then
myList.SubItems(Kolom - 1) = Me.Combo1.Text
Else
myList.Text = Me.Combo1.Text
End If
End Sub

Private Sub Combo1_GotFocus()
With Me.Combo1
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) Then
Combo1.Visible = False
End If
End Sub

- Selesai,,,,,,,,, dan tampilannya seperti berikut:


*) o ya,  comboboxnya saya isi manual datanya (implementasinya seh bisa dari database), terus visible=false
==== Kalo kurang jelas silahkan tinggalkan pesan di kotak komentar,,,