home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / qpdemo / beispiel / animatio.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-08-24  |  2.0 KB  |  85 lines

  1.  
  2.  
  3. PROGRAM Animation;
  4.  
  5. (* Demonstriert Bildschirmanimation durch Benutzung von Bildpuffer *)
  6.  
  7. USES
  8.       MSGraph, Crt;
  9.  
  10. CONST
  11.       max_puffer = 65520;
  12.  
  13. VAR
  14.       q      : Integer;
  15.       vc     : _VideoConfig;
  16.       puffer : POINTER;
  17.       bildgr : LongInt;
  18.       x0, y0 : Integer;
  19.       x, y   : Integer;
  20.  
  21. BEGIN  (* Hauptprogramm *)
  22.  
  23.       _ClearScreen( _GClearScreen );
  24.  
  25.       (* Festlegen und Überprüfen des Bildschirmmodus *)
  26.       q := _SetVideoMode( _MaxResMode );
  27.       IF ( q = 0 ) THEN
  28.         BEGIN
  29.           WriteLn( 'Graphikmodus nicht verfügbar;' +
  30.                ' drücken Sie Eingabe, um fortzufahren.');
  31.           ReadLn;
  32.           q := _SetVideoMode( _DefaultMode );
  33.           Halt( 0 );
  34.         END;
  35.       (* Feststellen einiger Bildschirmeigenschaften *)
  36.       _GetVideoConfig( vc );
  37.  
  38.       (* Zeichnen und Speichern einer einfachen Figur *)
  39.       _SetColor( 3 );
  40.       x := vc.NumXPixels DIV 4;
  41.       y := vc.NumYPixels DIV 4;
  42.  
  43.       _Rectangle( _GFillInterior, 0, 0, x, y );
  44.       bildgr := _ImageSize( 0, 0, x, y );
  45.       IF (bildgr > max_puffer) OR (bildgr > MaxAvail) Then
  46.         BEGIN
  47.           WriteLn( 'Bild zu groß.' );
  48.           ReadLn;
  49.           Halt( 0 );
  50.         END
  51.       ELSE
  52.         BEGIN
  53.           GetMem( puffer, bildgr );
  54.           IF (puffer = NIL) THEN
  55.             BEGIN
  56.               WriteLn('Kann keinen Bildschirm zuweisen.');
  57.               ReadLn;
  58.               Halt( 0 );
  59.             END;
  60.           END;
  61.       _GetImage( 0, 0, x, y, puffer^ );
  62.       _ClearScreen( _GClearScreen );
  63.  
  64.       (* Zeichnen eines zentrierten Achsenkreuzes auf dem Bildschirm *)
  65.       _SetColor( 2 );
  66.       x0 := vc.NumXPixels DIV 2 - 1;
  67.       y0 := vc.NumYPixels DIV 2 - 1;
  68.       _MoveTo( x0, 0 );
  69.       _LineTo( x0, vc.NumYPixels );
  70.       _MoveTo( 0, y0 );
  71.       _LineTo( vc.NumXPixels, y0 );
  72.  
  73.       _SetTextPosition( 1, 1 );
  74.       _OutText( '_GXOR' );
  75.       WHILE NOT KeyPressed DO
  76.         BEGIN
  77.           _PutImage( Random( vc.NumXPixels - x ),
  78.               Random( vc.NumYPixels - y ), puffer^ , _GXOR );
  79.           Delay( 500 );
  80.         END;
  81.       _ClearScreen( _GClearScreen );
  82.       q := _SetVideoMode( _DefaultMode );
  83. END.
  84.  
  85.