A. Mengetahui Koordinat Pointer
Mouse
Seperti halnya kursor keyboard
yang ditampilkan di layar monitor, pointer mouse pun menempati koordinat
tertentu di layar. Untuk mengetahui letak atau posisi koordinat pointer mouse
dilayar dapat digunakan interupsi 33 heksadesimal servis 3. Berikut ini adalah
prosedur untuk mengetahui koordinat pointer mouse.
Register AH harus bernilai 0.
Register AL harus bernilai 3
heksadesimal.
Lakukan interupsi 33
heksadesimal.
Setelah interupsi dilaksanakan:
Register CX menunjukkan posisi
horizontal pointer mouse (sumbu X).
Register DX menunjukkan posisi
vertikal pointer mouse (sumbu Y).
Register BX menunjukkan tombol
mouse yang ditekan. Jika nilai register BX sama dengan 1
berarti tombol kiri
mouse yang ditekan. Jika tombol kanan mouse yang ditekan, nilai register BX
sama dengan 2.
Posisi vertikal dan horizontal
pointer mouse dimulai dari posisi 0.
Dari prosedur yang telah
dijelaskan diatas, dapat disimpulkan bahwa interupsi 33 heksadesimal servis 3
selain dapat digunakan untuk mengetahui posisi koordinat pointer mouse, juga
dapat digunakan untuk mengetahui status penekanan tombol mouse. Berikut ini
adalah contoh program untuk mempraktekan interupsi 33 heksadesimal servis 3.
Simpan project contoh22.ide berikut ini pada direktori yang sama dengan file
screen.cpp dan keyboard.cpp serta pilihlah Floating Point atau Emulation di
group box Math Support pada jendela New Target.
contoh22.cpp:
#include
<stdlib.h>
#include
"keyboard.cpp"
#include
"screen.cpp"
#define
MOUSE_INT 0x33
#define
MOUSE_RIGHT_CLICK 0x02
#define
USHORT unsigned short int 61
UCHAR detectMouse(UCHAR *btn);
void getMousePos(USHORT *row, USHORT *col, UCHAR *btn);
void showMouse(void);
int main(void)
{
Screen *layar = new Screen();
Keyboard *tuts = new Keyboard(layar);
USHORT baris, kolom;
UCHAR status, button, str[5];
status = detectMouse(&button);
layar->setMode(0x03);
layar->setCursorPos(4, 14);
tuts->hideCursor();
if (!status)
{
layar->writeString("Mouse tidak siap! Tekan ENTER
...");
tuts->getString(str, 0);
delete tuts; delete layar;
exit(EXIT_FAILURE);
}
layar->writeString("Deteksi Koordinat Pointer
Mouse");
layar->setCursorPos(6, 14);
layar->writeString("X:");
layar->setCursorPos(7, 14);
layar->writeString("Y:");
layar->setCursorPos(9, 14);
layar->writeString("Klik kanan untuk berhenti");
showMouse();
while (TRUE)
{
/* Periksa koordinat dan penekanan tombol mouse */
getMousePos(&baris, &kolom, &button);
baris /= 8; kolom /= 8; /* kolom dan baris dibagi 8 */
gcvt((double) kolom, 2, str);
layar->setCursorPos(6, 17); layar->writeString(” ”);
layar->setCursorPos(6, 17); layar->writeString(str);
gcvt((double) baris, 2, str);
layar->setCursorPos(7, 17); layar->writeString(” ”);
layar->setCursorPos(7, 17); layar->writeString(str);
if (button == MOUSE_RIGHT_CLICK) break;
}
delete tuts; delete layar;
return EXIT_SUCCESS;
}
UCHAR detectMouse(UCHAR *btn)
{
UCHAR state, button;
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x00; /* Register AL = 0, AH:AL = 0:0 */
asm int MOUSE_INT; /* Laksanakan interupsi 0x33 */
asm mov state, al; /* Salin nilai AL ke state */
asm mov button, bl; /* Salin nilai BL ke button */
*btn = button;
return state;
}
void getMousePos(USHORT *row, USHORT *col, UCHAR *btn)
{
USHORT x, y;
UCHAR button;
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x03; /* Register AL = 0, AH:AL = AX = 0 */
asm int MOUSE_INT; /* Lakukan interupsi 0x33 */
asm mov x, cx; /* Salin CX ke x, posisi horizontal */
asm mov y, dx; /* Salin DX ke y, posisi vertikal */
asm mov button, bl; /* Status penekanan tombol */
*row = y; *col = x; *btn = button;
return;
}
void showMouse(void)
{
asm mov ah, 0x00;
asm mov al, 0x01;
asm int MOUSE_INT;
return;
}
Pada program
contoh22.cpp, fungsi getMousePos menerima tiga parameter, yaitu row, col dan
btn yang dikirimkan secara referensi. Parameter row dan col yang bertipe
unsigned integer digunakan untuk menyimpan posisi baris dan kolom pointer
mouse, sedangkan parameter btn yang bertipe unsigned character digunakan untuk
mengetahui apakah tombol kiri atau kanan ditekan. Perhatikanlah baris 49! Pada
baris 49, variabel baris dan kolom dibagi dengan 8 setelah fungsi getMousePos
dijalankan karena nilai baris yang dikembalikan akan berkisar dari 0 s.d 479
dan nilai kolom yang dikembalikan berkisar antara 0 s.d 639. Berikut ini adalah
alur program contoh22.cpp:
1. Deteksi
mouse. Jika mouse tidak siap digunakan maka program dihentikan.
2. Jika mouse
siap digunakan maka lakukan perulangan terus-menerus untuk memeriksa koordinat
pointer mouse.
3. Tampilkan
posisi baris dan kolom pointer mouse.
4.
Periksa apakah tombol kanan mouse diklik. Jika tombol kanan mouse diklik maka
hentikan perulangan dan program selesai.

Tidak ada komentar:
Posting Komentar