home *** CD-ROM | disk | FTP | other *** search
- (********************************************************)
- (* ZOOMDEMO.PAS *)
- (* Demonstration der Unit ZOOM für Hardware-Zooming *)
- (* auf entsprechenden VGA-Karten. Die Routinen, die den *)
- (* Bildschirm mit Kreissegmenten füllen, sind ein *)
- (* Bestandteil des BGIDEMO, daß bei Turbo Pascal 5.5 *)
- (* als Demoprogramm mitgeliefert wird. *)
-
- PROGRAM ZoomDemo;
-
- USES
- Crt, Dos, Graph, Zoom;
-
-
- VAR
- GraphDriver : INTEGER;
- GraphMode : INTEGER;
- MaxX, MaxY : WORD;
- ErrorCode : INTEGER;
- MaxColor : WORD;
- OldExitProc : POINTER;
- Window : ZoomWindow;
-
- (* Grafik initializieren und Fehler melden *)
- PROCEDURE Initialize;
-
- VAR
- InGraphicsMode : BOOLEAN;
- PathToDriver : STRING;
- BEGIN
- DirectVideo := FALSE;
- PathToDriver := '';
- REPEAT
-
- GraphDriver := Detect; (* Autodetektion der Karte *)
-
- InitGraph(GraphDriver, GraphMode, PathToDriver);
- ErrorCode := GraphResult;
- IF ErrorCode <> grOK THEN
- BEGIN
- WriteLn('Grafik-Fehler: ',
- GraphErrorMsg(ErrorCode));
- IF ErrorCode = grFileNotFound THEN
- BEGIN (* Treiber nicht gefunden *)
- WriteLn('Pfad für BGI-Treiber eingeben:');
- ReadLn(PathToDriver);
- WriteLn;
- END
- ELSE
- CloseGraph;
- Halt(1); (* Sonstige Fehler: Anhalten *)
- END;
- UNTIL ErrorCode = grOK;
- Randomize;
- MaxColor := GetMaxColor;
- MaxX := GetMaxX;
- MaxY := GetMaxY;
- END;
-
- (* Integer zu String konvertieren *)
- FUNCTION Int2Str(L : LONGINT) : STRING;
-
- VAR
- S : STRING;
-
- BEGIN
- Str(L, S);
- Int2Str := S;
- END;
-
-
- (* Zufallsfarbe im legalen Bereich zurückgeben. *)
- FUNCTION RandColor : WORD;
- BEGIN
- RandColor := Random(MaxColor)+1;
- END;
-
-
-
-
- (* BGI-Grafiktreiber und passenden Modus wählen *)
- PROCEDURE GetDriverAndMode(VAR DriveStr,
- ModeStr : STRING);
- BEGIN
- DriveStr := GetDriverName;
- ModeStr := GetModeName(GetGraphMode);
- END;
-
-
- (* Zufällig Kreissegmente auf Schirm zeichnen *)
- PROCEDURE SectorPlay;
-
- CONST
- MaxFillStyles = 12;
-
- VAR
- MaxRadius : WORD;
- FillColor : INTEGER;
- EndAngle : INTEGER;
-
- BEGIN
- ClearDevice;
- MaxRadius := MaxY DIV 10;
- SetLineStyle(SolidLn, 0, NormWidth);
- REPEAT
- FillColor := RandColor;
- SetColor(FillColor);
- SetFillStyle(Random(MaxFillStyles), FillColor);
- EndAngle := Random(360);
- Sector(Random(MaxX), Random(MaxY), Random(EndAngle),
- EndAngle,
- Random(MaxRadius), Random(MaxRadius));
- UNTIL KeyPressed;
- END;
-
-
- (* Auf Tastendruck warten *)
- PROCEDURE WaitKey;
-
- VAR Dummy : CHAR;
-
- BEGIN
- (* Tastaturbuffer leeren *)
- WHILE KeyPressed DO Dummy := ReadKey;
- REPEAT UNTIL KeyPressed;
- END;
-
- VAR faktor,x,y : INTEGER;
- c : CHAR;
- BEGIN
- Initialize;
- SectorPlay;
-
- Window.x1 := 100;
- Window.x2 := 540;
- Window.y1 := 50;
- Window.y2 := 300;
- Window.faktor := 1;
- Window.xoffs := 0;
- Window.yoffs := 0;
-
- SetzeZoomWindow(Window);
-
- WaitKey;
- Zoomen(4);
- (* Zoom-Bereich verschieben *)
- FOR y := 200 TO 210 DO BEGIN
- FOR x := 50 TO 600 DO BEGIN
- Zentrieren(x,y);
- Delay(10);
- repeat
- c := ReadKey;
- until c in ['w','W'];
-
-
- END;
- END;
-
- CloseGraph;
-
- END.
-
- (*******************************************************)
- (* Ende ZOOMDEMO.PAS *)