Ver. 1.0 Beta, Nie masz kompilatora? Teraz możesz pisać skrypty ONLINE! Wersja podstawowa -nie zawiera wszystkich poleceń Pascala. Służy do nauki podstaw

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

Pascal

Wsteczwstecz Obsługa klawiatury w Turbo Pascalu
W góręw górę Zaawansowany kurs pascala
Dalejdalej 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.
Strona korzysta z plików cookie w celu świadczenia usług Google (reklamy, statytyki) oraz Facebook. Jeśli chcesz zablokować pliki cookies wyłacz je w swojej przeglądarce. Potrzebujesz pomocy? kliknij