Trus apa perbedaan antara SDI form dan MDI form ? Ya monggo silahkan cari aja sendiri :D
Gimana udah dapat perbedaannya ? Ok salah satu properties penting yang dimiliki SDI Form adalah KeyPreview, jika nilainya di set True maka form akan terlebih dulu merespon event keyboard dibandingkan objek lainnya.
Misal kita ingin menambahkan beberapa fungsi shortcut berikut :
123456789101112131415161718
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyEscape Then cmdSelesai_Click 'tombol ESC
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyT And (Shift And vbCtrlMask) Then 'tombol CTRL + T
If cmdTambah.Enabled = True Then cmdTambah_Click
ElseIf KeyCode = vbKeyB And (Shift And vbCtrlMask) Then 'tombol CTRL + B
If cmdPerbaiki.Enabled = True Then cmdPerbaiki_Click
ElseIf KeyCode = vbKeyH And (Shift And vbCtrlMask) Then 'tombol CTRL + H
If cmdHapus.Enabled = True Then cmdHapus_Click
ElseIf KeyCode = vbKeyE And (Shift And vbCtrlMask) Then 'tombol CTRL + E
cmdSelesai_Click
End If
End Sub
Kode diatas tidak akan jalan jika properties KeyPreview masih dalam kondisi False (ingat nilai default properties KeyPreview = False).
Nah sesuai dengan judul artikel kali ini yang menjadi pertanyaan adalah MDI Form tidak mempunyai properties KeyPreview, trus bagaimana solusinya jika kita ingin menambahkan tombol shortcut ?
Ada banyak cara, salah satu solusi yang mudah dan murah tentunya :D adalah sebagai berikut :
Tambahkan objek Timer kemudian set nilai Intervalnya misal 100
Ketikkan kode berikut misal kita akan membuat shortcut pencarian (CTRL + F)
123456789
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyF) And &H8000 Then
If GetAsyncKeyState(vbKeyControl) And &H8000 Then
'TODO : tampilkan dialog pencarian di sini
End If
End If
End Sub
Pertanyaan berikutnya, kenapa harus ada nilai &H8000 ?