Michael Neuhold Homepage
Startseite > Informatikunterricht > Graphik mit Turbo Pascal

Graphik mit Turbo Pascal


  1. Graphikmodus ein- und ausschalten
  2. Farben
  3. Bildschirmfenster
  4. Zeichnen
  5. Füllen
  6. Text
  7. Animation
  8. Graphiktreiber und Zeichensätze einbinden

1. Graphikmodus ein- und ausschalten

Alle für die Graphik notwendigen Datentypen, Konstanten, Funktionen und Prozeduren sind Bestandteil der Unit Graph; daher: USES ..., graph;

2. Farben

3. Bildschirmfenster

4. Zeichnen

PUTPIXEL (x, y, FarbNr)
zeichnet einen Punkt in der angegebenen Farbe.
LINE (x1, y1, x2, y2)
zeichnet eine Linie zwischen zwei Punkten.
LINETO (x, y)
zieht eine Line von der momentanen Graphikcursorposition bis zum angegebenen Punkt. Der Graphikcursor steht dann an Position x/y (während sich seine Position bei LINE nicht ändert).
LINEREL (Dx, Dy)
zeichnet eine Linie ausgehend von der momentanen Cursorposition. Dx und Dy geben den Abstand des Endpunktes vom Anfangspunkt an.
RECTANGLE (x1, y1, x2 y2)
zeichnet ein Rechteck.
CIRCLE (x, y, Radius)
zeichnet einen Kreis um den Mittelpunkt x/y.
ARC (x, y, StartWinkel, EndWinkel, Radius)
zeichnet einen Kreisbogen. StartWinkel und EndWinkel werden in Grad angegeben, die Zählung erfolgt gegen den Uhrzeigersinn:
ELLIPSE (x, y, StartWinkel, EndWinkel, xRadius, yRadius)
zeichnet einen Ellipsenbogen.
DRAWPOLY (PunktAnzahl, Punkte)
zeichnet eine Figur aus PunktAnzahl Punkten, indem die Punkte mit geraden Linien verbunden werden. Punkte sind die Koordinatenpaare der Punkte, wofür es den vordefinierten Typ POINTTYPE gibt (POINTTYPE = RECORD x, y: Integer END;):
PROCEDURE DrawHexagon;
CONST  NumPoints = 6;
TYPE   Polygon = array [1..NumPoints] of PointType;
VAR    P: Polygon;
BEGIN
  P[1].x:= 100; P[1].y:= 100;
  P[2].x:= 150; P[2].y:= 50;
  P[3].x:= 200; P[3].y:= 100;
  P[4].x:= 220; P[4].y:= 150;
  P[5].x:= 80;  P[5].y:= 150;
  P[6]:= P[1];                {Endpunkt = Startpunkt}
  DrawPoly (NumPoints, P);
END;

5. Füllen

FLOODFILL (x, y, Begrenzungsfarbe)
füllt, ausgehend von Punkt x/y, einen in Begrenzungsfarbe umschlossenen Bereich ("flutet" ihn).
BAR (x1, y1, x2, y2)
zeichnet ein gefülltes Rechteck.
BAR3D (x1, y1, x2, y2, Tiefe, Deckel)
zeichnet einen ausgefüllten dreidimensionalen Balken. Tiefe gibt die räumliche Tiefe (wie weit der Balken "nach hinten geht") an, am besten 25% der Balkenbreite ((x2-x1) DIV 4). Deckel ist vom Typ Boolean und gibt an, ob ein oberer Balkenabschluß gezeichnet werden soll (TRUE, TopOn) oder nicht (FALSE, TopOff), letzteres benötigt man, um Balken übereinander zu stapeln.
FILLELLIPSE (x, y, xRadius, yRadius)
zeichnet eine gefüllte Ellipse.
PIESLICE (x, y, StartWinkel, EndWinkel, Radius)
zeichnet ein gefülltes Tortenstück.
SECTOR (x, y, StartWinkel, EndWinkel, xRadius, yRadius)
zeichnet ein gefülltes elliptisches Tortenstück.
FILLPOLY (PunktAnzahl, Punkte)
zeichnet ein gefülltes Vieleck.

6. Text

7. Animation

8. Graphiktreiber und Zeichensätze einbinden

Um z.B. den VGA-Treiber und die Zeichensatzdatei SANS.CHR mit dem Programm zu linken, gibt man zunächst auf der DOS-Ebene ein:
binobj egavga.bgi egavga.obj vgadriver
binobj sans.chr sans.obj sansserifproc

Der Pascal-Code für eine Prozedur, die den Graphikmodus einschaltet, könnte etwa so aussehen:

USES graph, crt;

PROCEDURE VGADriver; EXTERNAL;
{$L c:\tp6\egavga.obj}            {Code des Graphiktreibers einbinden}

PROCEDURE SansSerifProc; EXTERNAL;
{$L c:\tp6\sans.obj}              {Code des Zeichensatzes einbinden}

PROCEDURE GraphOn;
VAR  GraphDriver, GraphMode, ErrorCode: Integer;

{lokale Prozedur zum Programmabruch mit Fehlermeldung:}
  PROCEDURE Abort (SourceMsg, ErrMsg: String);
  BEGIN
    WriteLn (SourceMsg, ': ', ErrMsg);  {Fehlermeldung}
    halt (1);                           {Programmabruch}
  END;

BEGIN
{Graphiktreiber registrieren:}
  IF RegisterBGIDriver (@VGADriver) < 0
    THEN Abort ('VGA-Treiber', GraphErrorMsg(GraphResult));
{Zeichensatz registrieren:}
  IF RegisterBGIFont (@SansSerifProc) < 0
    THEN Abort ('SansSerif-Font', GraphErrorMsg(GraphResult));
{Graphikkarte suchen:}
  DetectGraph (GraphDriver, GraphMode);
  IF NOT GraphDriver in [EGA, EGA64, EGAMono, VGA]
    THEN Abort ('Keine EGA- oder VGA-Karte gefunden', '');
{Graphikmodus einschalten:}
  InitGraph (GraphDriver, GraphMode, '');
  ErrorCode:= GraphResult;
  IF ErrorCode <> grOK
    THEN Abort ('Graphikinitialisierung', GraphErrorMsg(ErrorCode));
{Text nicht direkt in Bildschirmspeicher schreiben:}
  DirectVideo:=false;
END;

Autor: Michael Neuhold (E-Mail-Kontakt)
Erstellungsdatum: 15. April 1996
Letzte Aktualisierung: 24. März 2017