home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 22 / events / mkdemo.pas next >
Encoding:
Pascal/Delphi Source File  |  1991-01-04  |  4.8 KB  |  147 lines

  1. (* ----------------------------------------------------- *)
  2. (*                     MKDEMO.PAS                        *)
  3. (*                                                       *)
  4. (* Demonstriert den Gebrauch von EvHand und das          *)
  5. (* Installieren eines eigenen Eventhandlers und das Aus- *)
  6. (* werten der Events.                                    *)
  7. (*                                                       *)
  8. (*          (c) 1991 by R.Reichert & toolbox             *)
  9. (* ----------------------------------------------------- *)
  10. PROGRAM MouKeyDemo;
  11.  
  12. USES MouKey, Crt;
  13.  
  14. {$R-}
  15.  
  16. (* ----------------------------------------------------- *)
  17. (* Ein Miniaturerbe von EventHandlerObj zu Demozwecken:  *)
  18. (* Bei jedem drücken und loslassen einer Taste piepst er *)
  19. (* kurz.                                                 *)
  20. (* ----------------------------------------------------- *)
  21. TYPE
  22.   EvHandDemoPtr = ^EvHandDemo;
  23.   EvHandDemo    = OBJECT (EventHandlerObj)
  24.     PROCEDURE KeybHandler (Key : BYTE);            VIRTUAL;
  25.   END;
  26.  
  27. PROCEDURE EvHandDemo.KeybHandler (Key : BYTE);
  28. BEGIN
  29.   Sound (4000);  Delay (3);  NoSound;
  30.   EventHandlerObj.KeybHandler (Key);
  31. END;
  32.  
  33. VAR
  34.   Ev : EventObj;
  35.   i  : INTEGER;
  36.  
  37. (* ----------------------------------------------------- *)
  38. (* Ändert Mauszeiger je nach Bereich; piepst beim Druck  *)
  39. (* von "r" oder "R".                                     *)
  40. (* ----------------------------------------------------- *)
  41. {$F+}   PROCEDURE AllHandler (VAR Event : EventObj);  {$F-}
  42. BEGIN
  43.   IF (Event.EventType AND EvMouAll > 0) THEN BEGIN
  44.     Sound (250);  Delay (1);  NoSound;
  45.     IF (Event.Y=2) THEN
  46.       Mouse^.TextMouse (#25, 15, 15);
  47.     IF (Event.Y=24) THEN
  48.       Mouse^.TextMouse (#24, 15, 15);
  49.     IF (Event.X=2) THEN
  50.       Mouse^.TextMouse (#26, 15, 15);
  51.     IF (Event.X=79) THEN
  52.       Mouse^.TextMouse (#27, 15, 15);
  53.     IF (Event.Y>2) AND (Event.Y<24) AND
  54.        (Event.X>2) AND (Event.X<79) THEN
  55.       Mouse^.TextMouse (#255, 15, 7)
  56.   END;
  57.   IF (Event.EventType=EvKeyPressed) THEN BEGIN
  58.     IF (Event.Key=Ord ('R')) OR
  59.        (Event.Key=Ord ('r')) THEN BEGIN
  60.       Sound (1000);  Delay (15);  NoSound;
  61.     END;
  62.   END;
  63. END;
  64.  
  65.  
  66. BEGIN
  67.   TextAttr := 7; ClrScr;
  68.   IF (EvHand=NIL) OR             { Fehler beim initia-    }
  69.      (Mouse=NIL) THEN BEGIN      { lisieren aufgetreten ? }
  70.     TextAttr := $7F;
  71.     Write ('Fehler beim Initialisieren der Objekte ');
  72.     Writeln ('(im Init-Teil der Unit MouKey) !');
  73.     TextAttr := 15;
  74.     Writeln;
  75.     Writeln ('Programm abgebrochen.');
  76.     Halt;
  77.   END;
  78.  
  79.     { Für Bildschirmausgabe vorbereiten: }
  80.   TextAttr := 15;
  81.   Writeln ('Demo der Unit MOUKEY - EventHandling':55);
  82.   TextAttr := 7;
  83.   FOR i := 1 TO 80 DO Write ('─');
  84.   GotoXY (1, 24);
  85.   FOR i := 1 TO 80 DO Write ('─');
  86.   TextAttr := 15;
  87.   Write ('(c) ''91 by R.Reichert & toolbox':55);
  88.   TextAttr := 7;
  89.   Window (2, 3, 79, 23);
  90.   Writeln (' Bitte irgendeine Eingabe machen, ',
  91.            'Maus oder Tastatur: ');
  92.  
  93.     { Raus mit dem alten, rein mit dem Demoobjekt: }
  94.   DeInstall;
  95.   ReInstall (New (EvHandDemoPtr, Init));
  96.  
  97.     { Handler eintragen, hier für alle Eventarten.
  98.       Zum Experimentieren am besten EvMouAll etc ein-
  99.       setzen.                                        }
  100.   EvHand^.RegisterHandler (EvAll, AllHandler);
  101.   Mouse^.SetArea (2, 2, 79, 24);
  102.   REPEAT
  103.     Mouse^.Show;                   { Maus sichtbar machen }
  104.     EvHand^.SetTakeOut (TRUE);    { aus Tastpuf entfernen }
  105.     EvHand^.WaitForEvent (EvAll, Ev);            { warten }
  106.     Mouse^.Hide;
  107.     Writeln;
  108.     Write ('Zeitpunkt: ', Ev.Time,
  109.            ' Event-Art: ', Ev.EventType:4,' : ');
  110.     TextAttr := 15;
  111.     CASE Ev.EventType OF
  112.       EvMouMove,
  113.       EvLeftPress,
  114.       EvLeftRel,
  115.       EvRightPress,
  116.       EvRightRel   :
  117.         Write ('Maus => X: ', Ev.X,' Y: ',
  118.                Ev.Y, ' Taste(n): ',Ev.Buttons);
  119.       EvKeyPressed :
  120.         IF Ev.Key<255 THEN
  121.           Write ('"Normale" Taste, Code: ',Ev.Key,
  122.                  ' Zeichen: ', Chr (BYTE (Ev.Key)))
  123.         ELSE
  124.           Write ('erweiterte Taste, Code: ',Ev.Key);
  125.       EvKeyState   :
  126.         Write ('Statustaste, BitWert: ', Ev.StateKey);
  127.       EvKeyUnknown :
  128.         Write ('Unbekannte Taste, ScanCode: ',
  129.                 Ev.ScanCode, ' Status: ', Ev.State);
  130.     END;
  131.     TextAttr := 7
  132.   UNTIL (Ev.EventType=EvKeyPressed) AND (Ev.Key=27);
  133.   EvHand^.SetTakeOut (FALSE);
  134.   Writeln;
  135.   Writeln;
  136.   Write ('Press key ENTER to finish...');
  137.   Readln;
  138.   { ^^^  ist EvHandDemo installiert, so kann man auch bei
  139.          Tastendrücken, die gar nicht mehr registriert
  140.          werden, lustige Effekte erzielen.                }
  141.  
  142.   Window (1,1,80,25);
  143. END.
  144. (* ----------------------------------------------------- *)
  145. (*                 Ende von MKDEMO.PAS                   *)
  146. (* ----------------------------------------------------- *)
  147.