home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 22 / events / umouse.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-01-04  |  4.5 KB  |  181 lines

  1. (* ----------------------------------------------------- *)
  2. (*                     UMOUSE.PAS                        *)
  3. (*                                                       *)
  4. (* ■ MouseObj: Kann auch benutzt werden, wenn keine Maus *)
  5. (*   vorhanden ist. Das ist der Einfachheit halber für   *)
  6. (*   Programme, die dauernd eine Maus zeigen oder        *)
  7. (*   "verstekken" wollen. Will ein Programm eine Maus    *)
  8. (*   verlangen, so kann GetAvail abgefragt werden. -     *)
  9. (*   MouseObj stellt hier nur die nötigsten Methoden zur *)
  10. (*   Verfügung.                                          *)
  11. (*                                                       *)
  12. (*            (c) 1991 by R.Reichert & toolbox           *)
  13. (* ----------------------------------------------------- *)
  14. UNIT UMouse;
  15.  
  16. INTERFACE
  17.  
  18. USES UBase, Dos;
  19.  
  20. CONST
  21.   DoubleClickTime : BYTE = 5;
  22.   MouseDelay      : BYTE = 15;
  23.  
  24. TYPE
  25.   MouseObjPtr = ^MouseObj;
  26.   MouseObj = OBJECT (Base)
  27.  
  28.     Regs : Registers;
  29.     Avail,                             { Maus vorhanden ? }
  30.     Visible,                           { Maus sichtbar ?  }
  31.     TextModus : BOOLEAN;               { Textmodus ?      }
  32.  
  33.     CONSTRUCTOR Init;
  34.     PROCEDURE Hide;                                VIRTUAL;
  35.     PROCEDURE Show;                                VIRTUAL;
  36.     PROCEDURE SetArea (x1,y1,x2,y2 : INTEGER);     VIRTUAL;
  37.     PROCEDURE SetSpeed (xs, ys : INTEGER);         VIRTUAL;
  38.     PROCEDURE SetMouse (x, y : INTEGER);           VIRTUAL;
  39.     PROCEDURE TextMouse
  40.       (Chr : CHAR; Col, BckCol : BYTE);            VIRTUAL;
  41.  
  42.     FUNCTION GetX : INTEGER;                       VIRTUAL;
  43.     FUNCTION GetY : INTEGER;                       VIRTUAL;
  44.     FUNCTION GetAvail : BOOLEAN;                   VIRTUAL;
  45.     FUNCTION GetVisible : BOOLEAN;                 VIRTUAL;
  46.     DESTRUCTOR Done;                               VIRTUAL;
  47.   END;
  48.  
  49. IMPLEMENTATION
  50.  
  51. CONSTRUCTOR MouseObj.Init;
  52. BEGIN
  53.   Regs.AX := $00;
  54.   Intr ($33, Regs);
  55.   Avail := (Regs.AX=$FFFF);  Visible := FALSE;
  56.   TextModus := TRUE;
  57. END;
  58.  
  59. PROCEDURE MouseObj.Hide;
  60. BEGIN
  61.   IF Avail AND Visible THEN BEGIN
  62.     Regs.AX := $02;
  63.     Intr ($33, Regs);
  64.     Visible := FALSE;
  65.   END;
  66. END;
  67.  
  68. PROCEDURE MouseObj.Show;
  69. BEGIN
  70.   IF (Avail) AND (NOT Visible) THEN BEGIN
  71.     Regs.AX := $01;
  72.     Intr ($33, Regs);
  73.     Visible := TRUE;
  74.   END;
  75. END;
  76.  
  77. PROCEDURE MouseObj.SetArea (x1, y1, x2, y2 : INTEGER);
  78. BEGIN
  79.   IF Avail THEN BEGIN
  80.     Regs.AX := $07;
  81.     IF TextModus THEN BEGIN
  82.       Regs.CX := Pred (x1) SHL 3;
  83.       Regs.DX := Pred (x2) SHL 3;
  84.     END ELSE BEGIN
  85.       Regs.CX := x1;
  86.       Regs.DX := x2;
  87.     END;
  88.     Intr ($33, Regs);
  89.     Regs.AX := $08;
  90.     IF TextModus THEN BEGIN
  91.       Regs.CX := Pred (y1) SHL 3;
  92.       Regs.DX := Pred (y2) SHL 3;
  93.     END ELSE BEGIN
  94.       Regs.CX := y1;
  95.       Regs.DX := y2;
  96.     END;
  97.     Intr ($33, Regs);
  98.   END;
  99. END;
  100.  
  101. PROCEDURE MouseObj.SetSpeed (xs, ys : INTEGER);
  102. BEGIN
  103.   IF Avail THEN BEGIN
  104.     Regs.AX := $0F;  Regs.CX := xs;  Regs.DX := ys;
  105.     Intr ($33, Regs);
  106.   END;
  107. END;
  108.  
  109. PROCEDURE MouseObj.SetMouse (x, y : INTEGER);
  110. BEGIN
  111.   IF Avail THEN BEGIN
  112.     Regs.AX := $04;
  113.     IF TextModus THEN BEGIN
  114.       Regs.CX := x SHR 3;   Regs.DX := y SHR 3;
  115.     END ELSE BEGIN
  116.       Regs.CX := Pred (x);  Regs.DX := Pred (y);
  117.     END;
  118.     Intr ($33, Regs);
  119.   END;
  120. END;
  121.  
  122. PROCEDURE MouseObj.TextMouse (Chr:CHAR; Col,BckCol : BYTE);
  123.   VAR Attr : INTEGER;
  124. BEGIN
  125.   IF Avail AND TextModus THEN BEGIN
  126.     Regs.AX := $0A;  Regs.BX := $00;
  127.     Attr := Col OR (BckCol SHL 4);
  128.     IF Col>15 THEN
  129.       Attr := Attr OR 128;
  130.     Regs.CX := Attr SHL 8;
  131.     Regs.DX := Regs.CX + Ord (Chr);
  132.     Intr ($33, Regs);
  133.   END;
  134. END;
  135.  
  136. FUNCTION MouseObj.GetX : INTEGER;
  137. BEGIN
  138.   IF Avail THEN BEGIN
  139.     Regs.AX := $03;
  140.     Intr ($33, Regs);
  141.     IF TextModus THEN
  142.       GetX := Succ (Regs.CX SHR 3)
  143.     ELSE
  144.       GetX := Regs.CX;
  145.   END ELSE
  146.     GetX := -1;
  147. END;
  148.  
  149. FUNCTION MouseObj.GetY : INTEGER;
  150. BEGIN
  151.   IF Avail THEN BEGIN
  152.     Regs.AX := $03;
  153.     Intr ($33, Regs);
  154.     IF TextModus THEN
  155.       GetY := Succ (Regs.DX SHR 3)
  156.     ELSE
  157.       GetY := Regs.DX;
  158.   END ELSE
  159.     GetY := -1;
  160. END;
  161.  
  162. FUNCTION MouseObj.GetAvail : BOOLEAN;
  163. BEGIN
  164.   GetAvail := Avail;
  165. END;
  166.  
  167. FUNCTION MouseObj.GetVisible : BOOLEAN;
  168. BEGIN
  169.   GetVisible := Visible;
  170. END;
  171.  
  172. DESTRUCTOR MouseObj.Done;
  173. BEGIN
  174.   Hide;
  175. END;
  176.  
  177. END.
  178. (* ----------------------------------------------------- *)
  179. (*                Ende von UMOUSE.PAS                    *)
  180. (* ----------------------------------------------------- *)
  181.