Memindahkan Koordinat Pointer Mouse
Koordinat pointer mouse dapat dipindahkan tanpa harus menggerak-gerakkan mouse secara manual. Untuk memindahkan posisi koordinat pointer mouse dapat digunakan interupsi 33 heksadesimal servis 4.
Berikut ini adalah prosedur yang harus dilakukan untuk memindahkan pointer menggunakan interupsi 33 heksadesimal servis 4.
Register AH harus bernilai 0.
Register AL harus bernilai 4 heksadesimal.
Register CX menentukan posisi baris pointer mouse.
Register DX menentukan posisi kolom pointer mouse.
Lakukan interupsi 33 heksadesimal.
Berikut ini adalah contoh program untuk mempraktekkan interupsi 33 heksadesimal servis 4.
kode program;
#include <stdlib.h>
#include <time.h> /* Prototype fungsi randomize dan rand */
#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 setMousePos(USHORT row, USHORT col);
void showMouse(void);
int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
USHORT baris, kolom;
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("Klik kiri untuk berhenti.");
showMouse(); /* Tampilkan pointer mouse */
randomize(); /* Inisialisasi angka random */
while (TRUE)
{
baris = rand() % 480;
kolom = rand() % 640;
setMousePos(baris, kolom);
getMousePos(&baris, &kolom, &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 */
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) }
void showMouse(void)
{
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x01; /* Register AL = 1, AH:AL = AX = 1 */
asm int MOUSE_INT; /* Tampilkan pointer mouse */
return;
}
hasil outputnya adalah;
Fungsi setMousePos pada program diatas digunakan untuk memindahkan pointer mouse. Fungsi setMousePos menerima parameter row dan col yang bertipe unsigned integer yang dikrimkan secara nilai. Parameter row digunakan untuk menentukan posisi vertikal pointer mouse, sedangkan parameter col digunakan untuk menentukan posisi horizontal mouse. Program baru berhenti ketika pengguna menekan tombol kiri mouse.
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, berikut ini memberikan contoh membatasi posisi vertikal pointer mouse antara baris 10 sampai 15 dan posisi horizontal antara kolom 30 sampai 60.
kode program :
#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;
}
return;
}
hasil outputnya adalah;
Koordinat pointer mouse dapat dipindahkan tanpa harus menggerak-gerakkan mouse secara manual. Untuk memindahkan posisi koordinat pointer mouse dapat digunakan interupsi 33 heksadesimal servis 4.
Berikut ini adalah prosedur yang harus dilakukan untuk memindahkan pointer menggunakan interupsi 33 heksadesimal servis 4.
Register AH harus bernilai 0.
Register AL harus bernilai 4 heksadesimal.
Register CX menentukan posisi baris pointer mouse.
Register DX menentukan posisi kolom pointer mouse.
Lakukan interupsi 33 heksadesimal.
Berikut ini adalah contoh program untuk mempraktekkan interupsi 33 heksadesimal servis 4.
kode program;
#include <stdlib.h>
#include <time.h> /* Prototype fungsi randomize dan rand */
#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 setMousePos(USHORT row, USHORT col);
void showMouse(void);
int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
USHORT baris, kolom;
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("Klik kiri untuk berhenti.");
showMouse(); /* Tampilkan pointer mouse */
randomize(); /* Inisialisasi angka random */
while (TRUE)
{
baris = rand() % 480;
kolom = rand() % 640;
setMousePos(baris, kolom);
getMousePos(&baris, &kolom, &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 */
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) }
void showMouse(void)
{
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x01; /* Register AL = 1, AH:AL = AX = 1 */
asm int MOUSE_INT; /* Tampilkan pointer mouse */
return;
}
hasil outputnya adalah;
Fungsi setMousePos pada program diatas digunakan untuk memindahkan pointer mouse. Fungsi setMousePos menerima parameter row dan col yang bertipe unsigned integer yang dikrimkan secara nilai. Parameter row digunakan untuk menentukan posisi vertikal pointer mouse, sedangkan parameter col digunakan untuk menentukan posisi horizontal mouse. Program baru berhenti ketika pengguna menekan tombol kiri mouse.
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, berikut ini memberikan contoh membatasi posisi vertikal pointer mouse antara baris 10 sampai 15 dan posisi horizontal antara kolom 30 sampai 60.
kode program :
#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;
}
return;
}
hasil outputnya adalah;
0 komentar:
Posting Komentar