home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 06 / tricks / mread.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-02-20  |  3.1 KB  |  115 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      MREAD.PAS                         *)
  3. (*  MReadCode ist eine Eingabefunktion, die neben den     *)
  4. (*  Tasten auch die Eingabeinformationen der Maus in      *)
  5. (*  ScanCodes übersetzt.                                  *)
  6. (*         (c) 1990 Michael Plewe & TOOLBOX               *)
  7. (* ------------------------------------------------------ *)
  8. UNIT MREAD;
  9.  
  10. INTERFACE
  11.  
  12. USES Crt, Dos;
  13.  
  14. VAR
  15.   MouseInit : BOOLEAN;
  16.  
  17.   FUNCTION MReadCode : WORD;
  18.   FUNCTION ReadCode  : WORD;
  19.  
  20. IMPLEMENTATION
  21.  
  22. CONST
  23.   CUp     = $4800;   { ScanCode für Cursor rauf            }
  24.   CDown   = $5000;   { ScanCode für Cursor runter          }
  25.   CLeft   = $4B00;   { ScanCode für Cursor links           }
  26.   CRight  = $4D00;   { ScanCode für Cursor rechts          }
  27.   MLeft   = $000D;   { ScanCode RETURN für linke Maustaste }
  28.   MMiddle = $3B00;   { ScanCode F1 für mittlere Maustaste  }
  29.   MRight  = $001B;   { ScanCode ESC für rechte Maustaste   }
  30.   XSense  = 25;      { Grenzwert für hor. Mausbewegung     }
  31.   YSense  = 25;      { Grenzwert für vert. Mausbewegung    }
  32.   BSense  = 150;     { Verzögerungsfaktor nach Maustaste   }
  33.  
  34. VAR
  35.   MouseIntVec : Pointer;
  36.   Regs        : Registers;
  37.  
  38.   FUNCTION MouseOK : BOOLEAN;
  39.   { Prüft, ob Maustreiber vorhanden ist }
  40.   BEGIN
  41.     GetIntVec($33, MouseIntVec);
  42.     IF MouseIntVec <> NIL THEN BEGIN
  43.       Regs.AX := 0;
  44.       Intr($33, Regs);
  45.       MouseOK := (Regs.AX = $FFFF);
  46.     END;
  47.   END;
  48.  
  49.   PROCEDURE GetMickeyCounter(VAR dx, dy : INTEGER);
  50.   { Liefert vert. und hor. Mausbewegung relativ }
  51.   { zur vorherigen Position                     }
  52.   BEGIN
  53.     Regs.AX := 11;
  54.     Intr($33, Regs);
  55.     dx := Regs.CX;
  56.     dy := Regs.DX;
  57.   END;
  58.  
  59.   FUNCTION WhichButton : INTEGER;
  60.   { Liefert die Taste zurück, die gedrückt wurde }
  61.   BEGIN
  62.     Regs.AX := 3;
  63.     Intr($33, Regs);
  64.     WhichButton := Regs.BX;
  65.   END;
  66.  
  67.   FUNCTION ReadCode : WORD;
  68.   { Liest Taste aus Tastaturpuffer }
  69.   BEGIN
  70.     Regs.AX := 0;
  71.     Intr($16, Regs);
  72.     IF Regs.AL = 0 THEN
  73.       ReadCode := Regs.AX
  74.     ELSE
  75.       ReadCode := Regs.AX AND $FF;
  76.   END;
  77.  
  78.   FUNCTION MReadCode : WORD;
  79.   { Liest Taste aus Tastaturpuffer unter }
  80.   { Berücksichtigung der Maus            }
  81.   VAR
  82.     dx, dy : INTEGER;
  83.     Key    : WORD;
  84.   BEGIN
  85.     Key := 0;
  86.     IF MouseInit THEN BEGIN
  87.       GetMickeyCounter(dx, dy);
  88.       REPEAT
  89.         GetMickeyCounter(dx, dy);
  90.         IF dx >   XSense  THEN Key := CRight;
  91.         IF dy >   YSense  THEN Key := CDown;
  92.         IF DX < -(XSense) THEN Key := CLeft;
  93.         IF dy < -(YSense) THEN Key := CUp;
  94.         IF WhichButton > 0 THEN BEGIN
  95.           CASE WhichButton OF
  96.             1 : Key := MLeft;
  97.             2 : Key := MRight;
  98.             4 : Key := MMiddle;
  99.           END;
  100.           Delay(BSense);
  101.         END;
  102.       UNTIL KeyPressed OR (Key > 0);
  103.     END;
  104.     IF Key > 0 THEN
  105.       MReadCode := Key
  106.     ELSE
  107.       MReadCode := ReadCode;
  108.   END;
  109.  
  110. BEGIN
  111.   MouseInit := MouseOK;
  112. END.
  113. (* ------------------------------------------------------ *)
  114. (*                   Ende von MREAD.PAS                   *)
  115.