home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / tvision / scrsave / scrsav.pas
Pascal/Delphi Source File  |  1991-10-15  |  5KB  |  156 lines

  1. (*****************************************************************************)
  2. (*                                                                           *)
  3. (*        Filename        : SCRSAV.PAS                                       *)
  4. (*        Autor           : Stefan Boether / Compuserve Id : 100023,275      *)
  5. (*        System          : TURBO 6.00 / MS-DOS 3.2 / Netzwerk               *)
  6. (*        Aenderung       :                                                  *)
  7. (*        wann     was                                                wer    *)
  8. (*---------------------------------------------------------------------------*)
  9. (*****************************************************************************)
  10. (*        Beschreibung:  Litte screensaver object like norton-commander      *)
  11. (*                       If you enjoy this object send me your own objects   *)
  12. (* The screensaving starts if one of these events reached :                  *)
  13. (*    - The mouse was move to the upper-right corner of desktop              *)
  14. (*    - 30.000 ticks without action gone                                     *)
  15. (*    - The user sends a cmStartSave command to desktop ( from menu )        *)
  16. (*****************************************************************************)
  17. {Header-End}
  18.  
  19. (* !!! litte Example to uses the screen-save in an application
  20.  
  21.     TMain = OBJECT (TApplication)
  22.        Saver     : PScreenSaver;
  23.        CONSTRUCTOR Init;
  24.        PROCEDURE   HandleEvent(VAR Event: TEvent); VIRTUAL;
  25.        PROCEDURE   GetEvent(VAR Event : TEvent );  VIRTUAL;
  26.        PROCEDURE   Idle;                           VIRTUAL;
  27.     END;
  28.  
  29.     CONSTRUCTOR TMain.Init;
  30.       VAR R        : TRect;
  31.     BEGIN
  32.       TApplication.Init;
  33.       Saver := NEW( PScreenSaver, Init ( 30000 ));
  34.       Insert( Saver );
  35.     END;
  36.  
  37.     PROCEDURE TMain.GetEvent(VAR Event : TEvent );
  38.     BEGIN
  39.       TApplication.GetEvent( Event );
  40.       Saver^.GetEvent( Event );
  41.     END;
  42.  
  43.     PROCEDURE TMain.HandleEvent( var Event: TEvent );
  44.     BEGIN
  45.         TApplication.HandleEvent(Event);
  46.         CASE Event.What = evCommand AND
  47.              Event.Command = cmStartSaver THEN
  48.             Saver^.StartIt;
  49.     END;
  50.  
  51.     PROCEDURE TMain.Idle;
  52.     BEGIN
  53.       TApplication.Idle;
  54.       IF NOT Saver^.Activ THEN
  55.          BEGIN
  56.            Clock^.Update;
  57.            Heap^.Update;
  58.          END;
  59.     END;
  60.  
  61. *)
  62.  
  63. UNIT ScrSav;
  64.  
  65. INTERFACE
  66.  
  67. USES  Dos, Objects, Drivers, Views, App ;
  68.  
  69. TYPE
  70.  
  71.   PScreenSaver = ^TScreenSaver;
  72.   TScreenSaver = OBJECT( TView )
  73.     Activ       : BOOLEAN;                 (* Screen Saver aktiv ? *)
  74.     MaxTicks    : WORD;                 (* Aktivieren nach n-Ticks *)
  75.     TicksGone   : WORD;                        (* Vergangene Ticks *)
  76.     CONSTRUCTOR Init( Ticks : WORD );
  77.     PROCEDURE   GetEvent( VAR Event : TEvent );    VIRTUAL;
  78.     PROCEDURE   Action;                            VIRTUAL;
  79.     PROCEDURE   StartIt;                           VIRTUAL;
  80.   END;
  81.  
  82. IMPLEMENTATION
  83.  
  84. (*****************************************************************************)
  85.  
  86. CONSTRUCTOR TScreenSaver.Init( Ticks : WORD );
  87.   VAR R : TRect;
  88. BEGIN
  89.   Desktop^.GetExtent( R );
  90.   R.A.X := PRED( R.B.X ); R.B.Y := SUCC( R.A.Y );
  91.   TView.Init( R );
  92.   Activ    := FALSE;
  93.   MaxTicks := Ticks;
  94.   TicksGone := 0;
  95. END; (* TScreenSaver.Init *)
  96.  
  97. (*****************************************************************************)
  98.  
  99. PROCEDURE TScreenSaver.StartIt;
  100. BEGIN
  101.   TicksGone := MaxTicks;
  102. END;
  103.  
  104. (*****************************************************************************)
  105.  
  106. PROCEDURE TScreenSaver.GetEvent( VAR Event : TEvent );
  107.   (* Please call this method in your applicationsmethod GetEvent-Method *)
  108. BEGIN
  109.   IF ( Event.What = evNothing ) THEN
  110.      IF NOT Activ THEN
  111.         BEGIN
  112.          INC( TicksGone );
  113.          IF TicksGone > MaxTicks THEN
  114.             BEGIN
  115.              Activ := TRUE;
  116.              DoneVideo;
  117.             END;
  118.         END
  119.      ELSE Action
  120.   ELSE
  121.      BEGIN
  122.        IF Event.What = evMouseMove THEN
  123.           IF MouseInView( Event.Where ) THEN
  124.              BEGIN
  125.                StartIt;
  126.                EXIT;
  127.              END;
  128.        IF Activ THEN
  129.           BEGIN
  130.             Activ := FALSE;
  131.             InitVideo;
  132.             Application^.ReDraw;
  133.           END;
  134.        TicksGone := 0;
  135.      END;
  136. END;  (* TScreenSaver.GetEvent *)
  137.  
  138. (*****************************************************************************)
  139.  
  140. PROCEDURE TScreenSaver.Action;
  141.   VAR Reg : REGISTERS;
  142. BEGIN
  143.   WITH Reg DO
  144.     BEGIN
  145.       AH := $02;
  146.       DH := RANDOM( ScreenHeight );
  147.       DL := RANDOM( ScreenWidth );
  148.       INTR( $10, Reg );
  149.     END;
  150.   IF RANDOM ( 100 ) < 2 THEN
  151.      IF RANDOM( 4 ) < 2 THEN PrintStr( '*' )
  152.                         ELSE PrintStr( '·' )
  153.   ELSE PrintStr( ' ' );
  154. END; (* TScreenSaver.Action *)
  155.  
  156. END.