home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 09_10 / oop / umouse.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-06-12  |  4.7 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.