esercizi di grafica con turbo pascal 1.1 su mac
Program figure2; { attivazione funzioni grafiche per disegnare con quickdraw }
{$U-}
USES Memtypes,QuickDraw,OSIntf,ToolIntf;
VAR gPort: GrafPort; sagoma: EventRecord;
procedure pausa; var a:integer; begin for a:=1 to 5 do sysbeep(1); end;
procedure disegna; var x1,y1,x2,y2,a:integer; vertici:rect; sfondo:pattern; v,w,q,p:integer;
begin x1:=20;y1:=20;x2:=100;y2:=100; v:=30;w:=30; { smussamento vertici cornice } {----------------------------------------------1----------} { assegnare a variabile VERTICI tipo RECT le coordinate } { per delimitare cornice rettangolare assegnando a variabili } { x1,y1,x2,y2 tipo INTEGER le coordinate dell'angolo alto sinistro} { e basso destro } setrect(vertici,x1,y1,x2,y2); {disegnare cornice smussata usando come argomento VERTICI } frameroundrect(vertici,v,w);pausa; {-----------------------------------------------2---------} { assegnare dimensione penna con PENSIZE(a,b) } { con a,b interi per dimensione verticale e orizzontale penna } { assegnare colore penna con PENPAT(nome colore) } { nome colore:bkack,white,gray,dkgray }
penpat(dkgray); pensize(10,2); setrect(vertici,180,20,300,100); frameroundrect(vertici,v,50);pausa; {-----------------------------------------------3---------} {disegna riquadro pieno con PAINTroundRECT(vertici) } setrect(vertici,350,20,450,100); penpat(black); paintroundrect(vertici,v,w);pausa; {----------------------------------------------4----------} { assegna tipo tratteggio per riempire con FILLRECT ..sfondo} { ritaglia porzione figura con OFFSETRECT q,p } { la parte ritagliata e' protetta da cancellazione con ERASE..} q:=10;p:=20; stuffhex(@sfondo,'121212121212121212'); setrect(vertici,20,120,100,200); frameroundrect(vertici,w,v);pausa; offsetrect(vertici,q,p);pausa; paintroundrect(vertici,w,v); pausa; offsetrect(vertici,w,v); paintroundrect(vertici,w,v); {----------------------------------------------5----------} { assegna tipo tratteggio per riempire con FILLRECT ..sfondo} { ritaglia porzione figura con OFFSETRECT q,p } q:=20;p:=20; stuffhex(@sfondo,'123321456654765123'); setrect(vertici,320,120,400,200); frameroundrect(vertici,v,w); pausa; offsetrect(vertici,q,p);pausa; fillrect(vertici,gray); {-------------------------------------------------------} { pausa e cancellazione disegni } pausa; eraserect(gport.portrect); framerect(gport.portrect); {-------------------------------------------------------} { disegna ovali con SETRECT..FRAMEOVAL...PAINTOVAL..FILLOVAL } x1:=30;y1:=20;x2:=100;y2:=100; {--------------------------------------------------6------} { assegnare a variabile VERTICI tipo RECT le coordinate } { per delimitare cornice rettangolare assegnando a variabili } { x1,y1,x2,y2 tipo INTEGER le coordinate dell'angolo alto sinistro} { e basso destro } setrect(vertici,x1,y1,x2,y2); {disegnare cornice usando come argomento VERTICI } frameoval(vertici); offsetrect(vertici,30,30); pausa;{ protegge sezione } eraseoval(vertici);pausa; { cancella sezione non protetta } paintoval(vertici); { disegna ovale con nuove coordinate } pausa; {---------------------------------------------------7-----} { assegnare dimensione penna con PENSIZE(a,b) } { con a,b interi per dimensione verticale e orizzontale penna } { assegnare colore penna con PENPAT(nome colore) } { nome colore:bkack,white,gray,dkgray }
penpat(dkgray); pensize(20,10); setrect(vertici,180,20,300,100); frameoval(vertici); offsetrect(vertici,10,50); paintoval(vertici);pausa; {-------------------------------------------------8-------} {disegna ovale pieno con PAINTOVAL(vertici) } setrect(vertici,350,20,450,100); penpat(black); paintoval(vertici); offsetrect(vertici,50,10); filloval(vertici,gray);pausa; {-------------------------------------------------9-------} {disegna OVALE con tratteggio FILLRECT...e colore} setrect(vertici,20,120,100,200); fillOVAL(vertici,gray); offsetrect(vertici,10,10); paintrect(vertici); offsetrect(vertici,20,20); filloval(vertici,gray); offsetrect(vertici,50,50); paintroundrect(vertici,30,50);pausa; {-------------------------------------------------10-------} { assegna tipo tratteggio per riempire con FILLRECT ..sfondo} stuffhex(@sfondo,'123321456654765123'); setrect(vertici,120,120,200,200); fillOVAL(vertici,sfondo); end;
BEGIN {inizializzazione sottoprogrammi o routine} InitGraf(@thePort); initfonts; InitCursor; {HideCursor;} OpenPort(@gPort);
{inizio programma principale} PenPat(black); BackPat(white); EraseRect(gPort.portRect); FrameRect(gPort.portRect); { procedura operativa modificabile..altre procedure aggiungere } disegna; WHILE NOT OSEventAvail(mDownMask + keyDownMask, sagoma) DO; END.
Program figure3; { attivazione funzioni grafiche per disegnare con quickdraw }
{$U-}
USES Memtypes,QuickDraw,OSIntf,ToolIntf;
VAR gPort: GrafPort; sagoma: EventRecord; vertici:rect; sfondo:pattern;
procedure pausa; var a,tempo:integer; begin textfont(0); tempo:=100; for a:=1 to tempo do begin moveto(10,10); drawstring('attendere,prego'); end; end;
procedure fine; var a,tempo:integer; begin textfont(0); sysbeep(1); moveto(10,350); drawstring('premi return per finire'); end;
procedure cancella; { cancella area grafica } begin setrect(vertici,1,1,450,400); eraserect(vertici); end;
procedure disegna; var x1,y1,x2,y2,a:integer; vertici:rect; sfondo:pattern; q,p:integer; begin {--------------------------1----------------------------} { disegnare rette con LINETO...MOVETO..} { LINETO(X,Y) traccia linea da posizione cursore a punto } { indicato da nuove coordinate colonna,riga } { MOVETO(X,Y) posiziona cursore a colonna,riga indicate }
pensize(10,10); penpat(gray); x1:=20;y1:=20;x2:=200;y2:=100; moveto(x1,y1); { posiziona cursore a colonna,riga } lineto(x2,y1); { traccia linea da posizione a nuovo punto} penpat(black); pensize(15,10); lineto(x2,y2); { traccia linea da posizione a nuovo punto } pennormal; { penna normalizzata ,dimensione e colore } lineto(x1,y1); { traccia linea da posizione a nuovo punto } pausa; {------------------------------2-----------------------} { disegnare rette con LINE...MOVE } { LINE(X,Y) traccia segmento da posizione cursore } { spostando x spazi verso destra se X positivo,sinistra se X negativo} { verso basso se Y positivo,verso alto se Y negativo } { MOVE(X,Y) posiziona cursore spostando X,Y spazi da posizione} { occupata,a destra,sinistra,alto,basso } PENSIZE(2,2); moveto(20,200); lineto(100,200); move(20,0); pensize(5,5);line(50,0); pensize(10,5);line(0,50); pensize(5,2);line(30,0); pensize(8,4);line(0,-50); pensize(2,6);line(-30,0); pausa; cancella; pausa; {----------------------------3----------------------------} { disegna archi con ARC... } { angoli misurati da 0 in senso orario come orologio 0-9-12-18-24} { delimitare sezione rettangolare con SETRECT } setrect(vertici,20,20,100,100); framearc(vertici,0,90); setrect(vertici,120,20,200,100); framearc(vertici,0,180); setrect(vertici,220,20,300,100); framearc(vertici,0,270); p:=90;q:=180; setrect(vertici,320,20,400,100); framearc(vertici,0,360); pausa; cancella; { disegna archi pieni con FILLARC...PAINTARC..OFFSETARC } stuffhex(@sfondo,'1010101010101010'); setrect(vertici,20,20,100,100);pausa; fillarc(vertici,0,90,gray); {arco 90 gradi grigio } setrect(vertici,120,20,200,100); paintarc(vertici,0,120);pausa; setrect(vertici,220,20,300,100); fillarc(vertici,0,300,dkgray);pausa; offsetrect(vertici,50,50);pausa; paintarc(vertici,90,150);pausa; erasearc(vertici,90,120); { cancella parte di arco } pausa; end;
BEGIN {inizializzazione sottoprogrammi o routine} InitGraf(@thePort); initfonts; InitCursor; {HideCursor;} OpenPort(@gPort);
{inizio programma principale} PenPat(black); BackPat(white); EraseRect(gPort.portRect); FrameRect(gPort.portRect); { procedura operativa modificabile..altre procedure aggiungere } disegna; fine; WHILE NOT OSEventAvail(mDownMask + keyDownMask, sagoma) DO; END.
Program figure4; { disegna poligoni con POLYHANDLE }
{$U-}
USES Memtypes,QuickDraw,OSIntf,ToolIntf;
VAR gPort: GrafPort; sagoma: EventRecord; vertici:rect; sfondo:pattern; poligono:polyhandle;
procedure fine; begin textfont(0); sysbeep(1); moveto(10,50); drawstring('premi return per finire '); end;
procedure pausa; var a,tempo:integer; begin textfont(0); tempo:=100; for a:=1 to tempo do begin moveto(10,20); drawstring('attendere,prego'); end; end;
procedure disegna; begin stuffhex(@sfondo,'1234567891234567');{ serie 16 numeri } poligono:=openpoly; {definizione poligono} moveto(30,290); lineto(30,280); lineto(50,265); lineto(90,265); lineto(80,280); lineto(95,290); lineto(30,290); closepoly;
framepoly(poligono); pausa; offsetpoly(poligono,25,15);pausa; pensize(3,2); erasepoly(poligono);pausa; framepoly(poligono);pausa;
offsetpoly(poligono,25,15);pausa; paintpoly(poligono);pausa;
offsetpoly(poligono,25,15);pausa; pennormal; fillpoly(poligono,gray);pausa; framepoly(poligono);pausa;
offsetpoly(poligono,25,15);pausa; fillpoly(poligono,sfondo);pausa; framepoly(poligono);pausa; killpoly(poligono);pausa; end;
BEGIN {inizializzazione sottoprogrammi o routine} InitGraf(@thePort); initfonts; InitCursor; HideCursor; OpenPort(@gPort);
{inizio programma principale} PenPat(black); BackPat(white); EraseRect(gPort.portRect); FrameRect(gPort.portRect); { procedura operativa modificabile..altre procedure aggiungere } disegna; fine; WHILE NOT OSEventAvail(mDownMask + keyDownMask, sagoma) DO; END.