A. Membatasi Posisi Horizontal dan
Vertikal Mouse
Letak koordinat pointer mouse
dapat dibatasi sehingga posisi vertikal dan horizontal pointer mouse tidak bisa
melewati area tertentu pada layar yang sudah dibatasi. Untuk membatasi posisi
horizontal pointer mouse dapat digunakan interupsi 33 heksadesimal servis 7,
sedangkan untuk membatasi posisi vertikal pointer mouse digunakan interupsi 33
heksadesimal servis 8. Berikut ini adalah prosedur untuk membatasi koordinat
pointer mouse.
Membatasi posisi horizontal
pointer mouse:
Register AH harus bernilai 0.
Register AL harus bernilai 7
heksadesimal.
Register CX menentukan batas
minimal posisi horizontal pointer mouse.
Register DX menentukan batas
maksimal posisi horizontal pointer mouse.
Membatasi posisi vertikal pointer
mouse:
Register AH harus bernilai 0.
Register AL harus bernilai 8
heksadesimal.
Register CX menentukan batas
minimal posisi vertikal pointer mouse.
Register DX menentukan batas
maksimal posisi vertikal pointer mouse.
Catatan: Jika batas minimal lebih besar
daripada batas maksimal, maka akan ditukar.
Untuk mempraktekkan teori yang
telah dijelaskan diatas, project contoh24.ide berikut ini memberikan contoh
membatasi posisi vertikal pointer mouse antara baris 10 sampai 15 dan posisi
horizontal antara kolom 30 sampai 60. Simpan project contoh24.ide berikut ini
dalam direktori yang sama dengan file screen.cpp dan keyboard.cpp.
contoh24.cpp:
#include
<stdlib.h>
#include
"screen.cpp"
#include
"keyboard.cpp"
#define
MOUSE_INT 0x33
#define
MOUSE_LEFT_CLICK 0x01
#define
USHORT unsigned short int
UCHAR detectMouse(UCHAR *btn);
void getMousePos(USHORT *row, USHORT *col, UCHAR *btn);
void setMouseRegion(USHORT y1, USHORT x1,
USHORT y2, USHORT x2);
void showMouse(void);
int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol
= new Keyboard(layar);
USHORT x1, x2, y1, y2;
UCHAR status,
button, str[5];
status =
detectMouse(&button);
layar->setMode(0x03);
layar->setCursorPos(4, 14);
tombol->hideCursor();
if (!status)
{
layar->writeString("Mouse
tidak siap! Tekan ENTER ...");
tombol->getString(str,
0);
delete tombol;
delete layar;
exit(EXIT_FAILURE);
}
layar->writeString("Gerakan
mouse Anda!");
layar->setCursorPos(5,
14);
layar->writeString("Klik
kiri untuk berhenti.");
y1 = 9 * 8; /*
Baris ke-10 */
y2 = 14 * 8; /* Baris ke-15 */
x1 = 29 * 8; /* Kolom ke-30 */
x2 = 59 * 8; /* Kolom ke-60 */
showMouse(); /*
Tampilkan pointer mouse */
setMouseRegion(y1, x1, y2, x2); /* Batas koordinat mouse */
while (TRUE)
{
getMousePos(&y1, &x1, &button);
if (button == MOUSE_LEFT_CLICK) break;
}
delete tombol; delete layar;
return EXIT_SUCCESS;
}
UCHAR detectMouse(UCHAR *btn)
{
UCHAR state, button;
asm mov ah, 0x00; /* Register AH = 0 */ 67
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 setMouseRegion(USHORT y1, USHORT x1,
USHORT y2, USHORT x2)
{
asm mov ax, 0x0007; /* Register AX = 7 */
asm mov cx, x1; /* CX = batas horizontal minimal */
asm mov dx, x2; /* DX = batas horizontal maksimal */
asm int MOUSE_INT; /* Lakukan interupsi 0x33 */
asm mov ax, 0x0008; /* Register AX = 8 */
asm mov cx, y1; /* CX = batas vertikal minimal */
asm mov dx, y2; /* DX = batas vertikal maksimal */
asm int MOUSE_INT; /* Lakukan interupsi 0x33 */
return;
}
void getMousePos(USHORT *row, USHORT *col, UCHAR *btn)
{
USHORT x, y;
UCHAR button;
asm mov ah, 0x00;
asm mov al, 0x03;
asm int MOUSE_INT;
asm mov x, cx;
asm mov y, dx;
asm mov button, bl;
*row = y; *col = x;
*btn = button;
return;
}
void showMouse(void)
{
asm mov ax, 0x00001;
asm int
MOUSE_INT;
return;
}
Pada
program contoh24.cpp fungsi yang digunakan untuk membatasi koodinat posisi
mouse adalah fungsi setMouseRegion. Fungsi setMouseRegion menerima empat
parameter bertipe unsigned integer yang dikirimkan secara nilai. Parameter y1
dan y2 digunakan untuk menentukan batas vertikal, sedangkan parameter x1 dan x2
digunakan untuk menentukan batas horizontal.

Tidak ada komentar:
Posting Komentar