Ver. 1.0 Beta, Don't have a compiler? Now you can write simple scripts ONLINE! This is a basic version -does not include all the Pascal statements. Only to learn basics

Poruszanie myszą w Pascalu. Jak pisać program obsługujący mysz

Pascal

Back to previous articleprevious Obsługa klawiatury w Turbo Pascalu
Go to main menuup Zaawansowany kurs pascala
Next articlenext Lista poleceń assemblera

Poruszanie myszą w Pascalu. Jak pisać program obsługujący mysz
Obsługa myszy w Turbo Pascalu 7.0
Za obsługę myszy odpowiada przerwanie 33h. Wstawiając do rejestu Ax numer funkcji, rejestry cx i dx zwracają żądane wartości.

Można także wstawiać wartości do cx i dx, wywołać przerwanie 33h by np. zmienić pozycję kursora myszy.

Przerwanie 33h. Główne funkcje:
00h - Badanie czy mysz jest zainstalowana
03h - Badanie pozycji myszki
04h - ustawianie położenia myszy
10h - Ustawianie obszaru aktywnego kursora

Jak narysować kursor? Po prostu sprawdzić stan przycisków i wyświetlać go przy każdej zmianie pozycji. Najlepsze efekty daje utworzenie kursora najpierw w buforze pamięci, potem skopiowanie go

Poniżej prezentacja modułu MouseX
Zawiera wstawki assemblera


{******************************************
  Modul do myszki       : 28.11.2004                    
  Ostatnia aktualizacja : 28.11.2004                    
******************************************}

UNIT MouseX;

INTERFACE

CONST M_ZADEN    =$00;
     M_LEWY     =$01;
     M_PRAWY    =$02;
     M_SRODKOWY =$04;

{******************************************}

FUNCTION  MouseInstalled:Boolean;
FUNCTION  MouseButtons:Byte;
PROCEDURE MouseXY(X, Y:Integer);
PROCEDURE MouseWhereXY(VAR X, Y:Integer);
PROCEDURE MouseButtonsXY(VAR X, Y:Integer;VAR B:Byte);
PROCEDURE MouseSetMax(X, Y:Word);
PROCEDURE MouseSetRatio(X, Y:Word);
PROCEDURE MouseRestore;
PROCEDURE MouseGet;

{******************************************}

{PAMIETA POPRZEDNIE USTAWIENIA MYSZKI}
VAR OldMaxX, OldMaxY,
   OldMinX, OldMinY  :Word;


IMPLEMENTATION


{******************************************}
{Sprawdza czy sterownik myszy jest zainstalowany}
FUNCTION MouseInstalled:Boolean;
BEGIN
 ASM
   Mov  Ax, 00h
   Int  33h
   Mov  @Result, al
 END;
END;

{******************************************}
{Ustawia polozenie myszy w X, Y}
PROCEDURE MouseXY(X, Y:Integer);ASSEMBLER;
ASM
 Mov  Ax, 04h
 Mov  Cx, X
 Mov  Dx, Y
 Int  33h
END;

{******************************************}
{Pyta o polozenie myszy, zwraca wartosci w X, Y}
PROCEDURE MouseWhereXY(VAR X, Y:Integer);
VAR X1, Y1:Integer;
BEGIN
ASM
 Mov  Ax, 03h
 Int  33h
 Mov  X1, Cx
 Mov  Y1, Dx
END;
 X:=X1;
 Y:=Y1;
END;

{******************************************}
{Pyta o wcisniete przyciski myszy}
FUNCTION MouseButtons:Byte;
BEGIN
ASM
 Mov  Ax, 03h
 Int  33h
 Mov  @Result, Bl
END;
END;

{******************************************}
{Pyta o polozenie myszy i stan przyciskow}
PROCEDURE MouseButtonsXY(VAR X, Y:Integer;VAR B:Byte);
VAR X1, Y1:Integer;
   B1:Byte;

BEGIN
ASM
 Mov  Ax, 03h
 Int  33h
 Mov  Word Ptr X1, Cx
 Mov  Word Ptr Y1, Dx
 Mov  Byte Ptr B1, Bl
END;
 X:=X1;
 Y:=Y1;
 B:=B1;
END;
{******************************************}
{Ustala maksymalny i minimalny zakres myszki}
PROCEDURE MouseSetMax(X, Y:Word);
BEGIN
 ASM
   Mov  Ax, 10h
   Mov  Cx, 0
   Mov  Dx, 0
   Mov  Si, X
   Mov  Di, Y
   Int  33h
 END;
END;
{******************************************}
PROCEDURE MouseGet;
BEGIN
 ASM
   Mov  Ax, 31h
   Int  33h
   Mov  OldMinX, Ax
   Mov  OldMaxX, Cx
   Mov  OldMinY, Bx
   Mov  OldMaxY, Dx
 END;
END;
{******************************************}
PROCEDURE MouseRestore;
BEGIN
 ASM
   Mov  Ax, 10h
   Mov  Cx, OldMinX
   Mov  Dx, OldMinY
   Mov  Si, OldMaxX
   Mov  Di, OldMaxY
   Int  33h
 END;
END;
{******************************************}
PROCEDURE MouseSetRatio(X, Y:Word);
BEGIN
 ASM
   Mov  Ax, 000Fh
   Mov  Cx, X
   Mov  Dx, Y
   Int  33h
 END;
END;
{******************************************}
END.

ON-LINE scripts!

This website uses cookie files in order to provide Google services (advertisements, analitycs) and Facebook. If you want to block using cookies, turn them off in your browser settings. Need a help? Click me