home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 11 / tricks / curmouse.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-08-06  |  3.7 KB  |  140 lines

  1. (* ------------------------------------------------------ *)
  2. (*                  CURMOUSE.PAS                          *)
  3. (*             255 Zeiger im Grafikmodus                  *)
  4. (*        (c) 1990 Thorsten Remer & TOOLBOX               *)
  5. (* ------------------------------------------------------ *)
  6. UNIT CurMouse;  { txMouse }
  7.  
  8. INTERFACE
  9.  
  10.   FUNCTION  MouseInit : INTEGER;
  11.   { liefert die Anzahl der Mausknöpfe. Ist das Resultat }
  12.   { der Funktion 0, ist kein Maustreiber eingebunden.   }
  13.  
  14.   PROCEDURE MousePos(VAR button, x, y : INTEGER);
  15.   { liefert die Position der Maus sowie die Anzahl der  }
  16.   { gedrückten Buttons zurück.                          }
  17.  
  18.   PROCEDURE CreateCursor(curnum : BYTE);
  19.   { definiert einen Cursor (1..255)                     }
  20.  
  21.   PROCEDURE PutCursor(VAR xbak, ybak, x, y : INTEGER);
  22.   { setzt den Maus-Cursor auf die Koordinaten x, y und  }
  23.   { speichert die aktuellen Werte in xbax, ybak.        }
  24.  
  25.   PROCEDURE CursorOn(x, y : INTEGER);
  26.   { schaltet den Cursor ein und setzt ihn auf x, y.     }
  27.  
  28.   PROCEDURE CursorOff(xbak, ybak : INTEGER);
  29.   { schaltet den Cursor an der Position xbak, ybak aus. }
  30.  
  31.   PROCEDURE GetWindow(x1, y1, x2, y2 : INTEGER);
  32.  
  33.   PROCEDURE PutWindow(x1, y1 : INTEGER);
  34.  
  35. IMPLEMENTATION
  36.  
  37. USES Dos, Crt, Graph;
  38.  
  39. VAR
  40.   Button      : INTEGER;
  41.   CurImgSize  : WORD;
  42.   CursorImage : POINTER;
  43.   xbak, ybak  : INTEGER;
  44.   WindImgSize : WORD;
  45.   WindowImage : POINTER;
  46.  
  47.   FUNCTION MouseInit : INTEGER;
  48.   VAR
  49.     Regs     : Registers;
  50.     Mstat    : WORD;
  51.     NButtons : WORD;
  52.   BEGIN
  53.     IF ((Mem[0000:$00CC] = 0) AND
  54.         (Mem[0000:$00CD] = 0) AND
  55.         (Mem[0000:$00CE] = 0) AND
  56.         (Mem[0000:$00CF] = 0)) THEN
  57.       MouseInit := 0
  58.     ELSE BEGIN
  59.       Regs.ax := 0;
  60.       Intr($33, Regs);
  61.       WITH Regs DO BEGIN
  62.         Mstat    := ax;
  63.         NButtons := bx;
  64.       END;
  65.       IF Mstat = 0 THEN
  66.         MouseInit := 0
  67.       ELSE
  68.         MouseInit := NButtons;
  69.     END;
  70.   END;
  71.  
  72.   PROCEDURE MousePos(VAR button, x, y : INTEGER);
  73.   VAR
  74.     Regs : Registers;
  75.   BEGIN
  76.     Regs.ax := 3;
  77.     Intr($33, Regs);
  78.     WITH Regs DO BEGIN
  79.       button := bx;
  80.       x      := CX;
  81.       y      := DX;
  82.       IF x > 639 THEN x := 639;
  83.       IF y > 479 THEN y := 479;
  84.     END;
  85.   END;
  86.  
  87.   PROCEDURE CreateCursor(curnum : BYTE);
  88.   BEGIN
  89.     IF curnum = 1 THEN BEGIN
  90.       Line( 1, 10, 10, 1);
  91.       Line(10,  1,  5, 1);
  92.       Line(10,  1, 10, 5);
  93.       CurImgSize := ImageSize(1, 1, 21, 21);
  94.       GetMem(CursorImage, CurImgSize);
  95.       GetImage(1, 1, 20, 20, CursorImage^);
  96.       PutImage(1, 1, CursorImage^, XorPut);
  97.     END;
  98.     IF curnum = 2 THEN BEGIN
  99.       Line( 1,10, 19, 10);
  100.       Line(10, 1, 10, 19);
  101.       CurImgSize := ImageSize(1, 1, 21, 21);
  102.       GetMem(CursorImage, CurImgSize);
  103.       GetImage(1, 1, 20, 20, CursorImage^);
  104.       PutImage(1, 1, CursorImage^, XorPut);
  105.     END;
  106.   END;
  107.  
  108.   PROCEDURE PutCursor(VAR xbak, ybak, x, y : INTEGER);
  109.   BEGIN
  110.     PutImage(xbak, ybak, CursorImage^, XorPut);
  111.     PutImage(x, y, CursorImage^, XorPut);
  112.     xbak := x;  ybak := y;
  113.   END;
  114.  
  115.   PROCEDURE CursorOn(x, y : INTEGER);
  116.   BEGIN
  117.     PutImage(x, y, CursorImage^, XorPut);
  118.   END;
  119.  
  120.   PROCEDURE CursorOff(xbak, ybak : INTEGER);
  121.   BEGIN
  122.     PutImage(xbak, ybak, CursorImage^, XorPut);
  123.   END;
  124.  
  125.   PROCEDURE GetWindow(x1, y1, x2, y2 : INTEGER);
  126.   BEGIN
  127.     WindImgSize := ImageSize(x1, y1, x2, y2);
  128.     GetMem(WindowImage, WindImgSize);
  129.     GetImage(x1, y1, x2, y2, WindowImage^);
  130.   END;
  131.  
  132.   PROCEDURE PutWindow(x1, y1 : INTEGER);
  133.   BEGIN
  134.     PutImage(x1, y1, WindowImage^, CopyPut);
  135.     FreeMem(WindowImage, WindImgSize);
  136.   END;
  137.  
  138. END.
  139. (* ------------------------------------------------------ *)
  140. (*                Ende von CURMOUSE.PAS                   *)