home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 04 / praxis / zoomdemo.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1992-05-27  |  3.4 KB  |  165 lines

  1. (********************************************************)
  2. (*                    ZOOMDEMO.PAS                      *)
  3. (* Demonstration der Unit ZOOM für Hardware-Zooming     *)
  4. (* auf entsprechenden VGA-Karten. Die Routinen, die den *)
  5. (* Bildschirm mit Kreissegmenten füllen, sind ein       *)
  6. (* Bestandteil des BGIDEMO, daß bei Turbo Pascal 5.5    *)
  7. (* als Demoprogramm mitgeliefert wird.                  *)
  8.  
  9. PROGRAM ZoomDemo;
  10.  
  11. USES
  12.   Crt, Dos, Graph, Zoom;
  13.  
  14.  
  15. VAR
  16.   GraphDriver : INTEGER;
  17.   GraphMode   : INTEGER;
  18.   MaxX, MaxY  : WORD;
  19.   ErrorCode   : INTEGER;
  20.   MaxColor    : WORD;
  21.   OldExitProc : POINTER;
  22.   Window : ZoomWindow;
  23.  
  24. (* Grafik initializieren und Fehler melden *)
  25. PROCEDURE Initialize;
  26.  
  27. VAR
  28.   InGraphicsMode : BOOLEAN;
  29.   PathToDriver   : STRING;
  30. BEGIN
  31.   DirectVideo := FALSE;
  32.   PathToDriver := '';
  33.   REPEAT
  34.  
  35.     GraphDriver := Detect; (* Autodetektion der Karte *)
  36.  
  37.     InitGraph(GraphDriver, GraphMode, PathToDriver);
  38.     ErrorCode := GraphResult;
  39.     IF ErrorCode <> grOK THEN
  40.     BEGIN
  41.       WriteLn('Grafik-Fehler: ',
  42.               GraphErrorMsg(ErrorCode));
  43.       IF ErrorCode = grFileNotFound THEN
  44.       BEGIN (* Treiber nicht gefunden *)
  45.         WriteLn('Pfad für BGI-Treiber eingeben:');
  46.         ReadLn(PathToDriver);
  47.         WriteLn;
  48.       END
  49.       ELSE
  50.         CloseGraph;
  51.         Halt(1);    (* Sonstige Fehler: Anhalten *)
  52.     END;
  53.   UNTIL ErrorCode = grOK;
  54.   Randomize;
  55.   MaxColor := GetMaxColor;
  56.   MaxX := GetMaxX;
  57.   MaxY := GetMaxY;
  58. END;
  59.  
  60. (* Integer zu String konvertieren *)
  61. FUNCTION Int2Str(L : LONGINT) : STRING;
  62.  
  63. VAR
  64.   S : STRING;
  65.  
  66. BEGIN
  67.   Str(L, S);
  68.   Int2Str := S;
  69. END;
  70.  
  71.  
  72. (* Zufallsfarbe im legalen Bereich zurückgeben. *)
  73. FUNCTION RandColor : WORD;
  74. BEGIN
  75.   RandColor := Random(MaxColor)+1;
  76. END;
  77.  
  78.  
  79.  
  80.  
  81. (* BGI-Grafiktreiber und passenden Modus wählen *)
  82. PROCEDURE GetDriverAndMode(VAR DriveStr,
  83.                                ModeStr  : STRING);
  84. BEGIN
  85.   DriveStr := GetDriverName;
  86.   ModeStr := GetModeName(GetGraphMode);
  87. END;
  88.  
  89.  
  90. (* Zufällig Kreissegmente auf Schirm zeichnen *)
  91. PROCEDURE SectorPlay;
  92.  
  93. CONST
  94.   MaxFillStyles = 12;
  95.  
  96. VAR
  97.   MaxRadius : WORD;
  98.   FillColor : INTEGER;
  99.   EndAngle  : INTEGER;
  100.  
  101. BEGIN
  102.   ClearDevice;
  103.   MaxRadius := MaxY DIV 10;
  104.   SetLineStyle(SolidLn, 0, NormWidth);
  105.   REPEAT
  106.     FillColor := RandColor;
  107.     SetColor(FillColor);
  108.     SetFillStyle(Random(MaxFillStyles), FillColor);
  109.     EndAngle := Random(360);
  110.     Sector(Random(MaxX), Random(MaxY), Random(EndAngle),
  111.            EndAngle,
  112.            Random(MaxRadius), Random(MaxRadius));
  113.   UNTIL KeyPressed;
  114. END;
  115.  
  116.  
  117. (* Auf Tastendruck warten *)
  118. PROCEDURE WaitKey;
  119.  
  120. VAR Dummy : CHAR;
  121.  
  122. BEGIN
  123.   (* Tastaturbuffer leeren *)
  124.   WHILE KeyPressed DO Dummy := ReadKey;
  125.   REPEAT UNTIL KeyPressed;
  126. END;
  127.  
  128. VAR faktor,x,y : INTEGER;
  129.     c : CHAR;
  130. BEGIN
  131.   Initialize;
  132.   SectorPlay;
  133.  
  134.   Window.x1 := 100;
  135.   Window.x2 := 540;
  136.   Window.y1 := 50;
  137.   Window.y2 := 300;
  138.   Window.faktor := 1;
  139.   Window.xoffs := 0;
  140.   Window.yoffs := 0;
  141.  
  142.   SetzeZoomWindow(Window);
  143.  
  144.   WaitKey;
  145.   Zoomen(4);
  146.   (* Zoom-Bereich verschieben *)
  147.   FOR y := 200 TO 210 DO BEGIN
  148.     FOR x := 50 TO 600 DO BEGIN
  149.       Zentrieren(x,y);
  150.       Delay(10);
  151.       repeat
  152.         c := ReadKey;
  153.       until c in ['w','W'];
  154.  
  155.  
  156.    END;
  157.   END;
  158.  
  159.   CloseGraph;
  160.  
  161. END.
  162.  
  163. (*******************************************************)
  164. (*                  Ende ZOOMDEMO.PAS                  *)
  165.