ministerul educaţiei al republicii moldova

Post on 09-Apr-2016

34 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

Ministerul Educaţiei Al Republicii Moldova

TRANSCRIPT

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVAUNIVERSITATEA PEDAGOGICĂ DE STAT ,,ION CREANGĂ “ DIN CHIŞINĂU

Facultatea Informatică şi TII

Specialitatea matematică şi informatică

LUCRARE DE LABORATOR №1

TEMA: Primitivele Grafice. Metode şi Proprietăţi a

bibliotecii TCanvas.

Efectuat:Turculeţ Axenia

Verificat: Grosu Olga

Chişinău,2012

Scopul lucrarii: Lucrul cu biblioteca canvas.

Problema1: Utilizarea metodelor (arc, rectangrle, roundrect,pie,chord, ellipse, polygon, polyline,textout) şi propietăţilor (pen, brush,font) pentru realizarea unui desen complex.

Date teoretice:(aceste date teoretice se referă la întreaga lucrare de laborator)

Orice canvas are un Pen (peniţă) care are o anumită culoare, o grosime şi un anumit stil de trasare a liniei, are un Brush (pensulă) care are un anumit tipar

de desenare, are un Font cu care se scriu texte pe canvas, şi are o serie largă de metode de trasare şi de scriere:

procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Această metodă desenează un arc de elipsă. Coordonatele elipsei sunt

determinate de dreptunghiul în care ea este înscrisă (X1,Y1) - (Х2, Y2) ;

procedure Draw(X, Y: Integer; Graphic: TGraphic);

Imaginea este redată într-un dreptunghi determinată de mărimea grafică, cu colțul din stânga sus la punctul (X, Y). 

procedure Ellipse(X1, Y1, X2, Y2: Integer);

Aceasta desenează o elipsă înscrisă într-un dreptunghi (Х1, Y1) - (Х2, Y2);

procedure FillRect(const Rect: TRect);

Umple o regiune dreptunghiu lară cu ajutorul periei curente. Regiunea estecompletată, inclusiv partea de sus și din stânga ale dreptunghiului, dar excluzând marginile de jos și din dreapta. 

procedure LineTo(X, Y: Integer);

Metoda desenează linia dusă din punctul unde se găseşte la momentul dat

creionul în punctul (X, Y).

procedure MoveTo(X, Y: Integer);

Această metodă presupune schimbarea poziţiei creionului în punctul (X,Y).

procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

2

Această metodă deseneză un sector de elipsă înscrisă în dreptunghi (Х1, Y1) -

(Х2, Y2). Marginile sectorul sunt determinate de razele duse din central

elipsei în punctele (ХЗ, Y3) şi (Х4, Y4).

procedure Chord (XI, Yl, X2,Y2, ХЗ, Y3, Х4, Y4:Integer) ;

Primele patru coornonate determină dreptunghiul în care se înscrie o elipsă,

celelalte două punctul initial şi final al coardei determinat ca şi în cazul

arcului.

procedure Polygon(const Points: array of TPoint);

Construieşte un polygon luînd în consideraţie masivul coordonatelor punctelor

Points, astfel ca ultimul punct se uneşte cu primul şi suprafaţa figurii se

colorează.

procedure Polyline(const Points: array of TPoint);

Construieşte o linie frîntă după coordonatele Points.

procedure Rectangle(X1, Y1, X2, Y2: Integer);

Desenează un dreptunghi cu coordonatele (Х1, Y1) – stînga sus, şi dreapta jos

(Х2, Y2).

procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);

RoundRect  desenează un dreptunghi rotunjit . Dreptunghiul va avea margini definite de punctele (X1, Y1), (X2, Y1), (X2, Y2), (X1, Y2), dar colțurile va fi ras pentru a crea un aspect rotunjit. Curba de colturi rotunjite coincide cu curbură a unei elipse cu lățime și înălțimea X3 Y3.

function TextExtent(const Text: string): TSize;

- determina spaţiul ocupat de textul din imagi.

procedure TextOut(X, Y: Integer; const Text: string);

- Scrie un șir de caractere pe panza, începând de la punctul (X, Y), și apoi actualizează PenPos la sfârșitul șir.

procedure TextRect(Rect: TRect; X, Y: Integer; const Text: string);

3

- se utilizează pentru a scrie numai textul care se potrivește într-un dreptunghi de tăiere.

Proprietățile se caracterizează astfel:

TCanvas - De exemplu, când se execută o secvenţă de tipul Move To sau Line To, se desenează o linie având culoarea curentă selectată. Proprietatea Paint este folosită pentru a determina culoarea curentă şi este o parte din clasa TPen. Această clasă are proprietăţi ce determină tipul de linie: lăţimea, stilul (continu, punctat, linie întreruptă etc).

Tbrush reprezintă o pensulă folosită pentru umplerea modelului de pe “pânză”, prin operaţii ca FillRect (umplere dreptunghiulară), Polygon (umplere poligonală), Ellipse (umplere în formă de elipsă). Proprietăţile TBrush includ Color, Style şi Bitmap. Proprietatea Style oferă posibilitatea alegerii unui model pentru pensulă (brush). Proprietatea Bitmap dă posibilitatea să se aleagă imaginea dorită pentru a umple modelul.

TFont se ocupă de operaţii cu fonturi. Proprietăţile includ: Color, Height (înălţime), Style (bold, italic, normal şi so on ). Proprietãþile Height și Width (de tip integer).Sabilesc înãlţimea, respectiv lãţmea formei sau componentei. Aceste valori sunt exprimate în puncte care include și dimensiunile rezervate chenarelor.

Prin bitmap înţelegem o matrice de pixeli, fiecare pixel fiind în esenţă un număr întreg care codifică, sub un anumit format, o culoare. Atunci când un bitmap este tras (draw) pe ecran, fiecărui pixel îi corespunde un punct colorat pe monitor. Pentru manipularea bitmapurilor Delphi pune la dispoziţie clasa TBitmap, un obiect din această clasă având, pe lângă bitmapul propriuzis, multe alte câmpuri şi metode utile. Mai mult, fiecare obiect TBitmap are propriul canvas, prin intermediul căruia îi putem seta pixelii.

Proprietatea Enabled (de tip boolean)--Se referã la accesibilitatea formei sau componentei.

Metoda Refresh, Repaint--Redeseneazã forma.

4

Forma înainte de execuție:

Fig.1.1.imaginea formei înainte de execuţie

Aici la formă au fost schimbate proprietăţile Tfond,Caption,Tcolor;la fel și la butoane au fost schimbate aceste proprietăţi,pentru o imagine mai evidenţiată.

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

begin

pb1.Canvas.Pen.Width:=1; //grosimea liniei cu care va desena creionul

pb1.Canvas.Pen.Style:=psSolid; //stilul de desenare a liniei

pb1.Canvas.Pen.Color:=clFuchsia; //culoarea creionului

5

pb1.Canvas.Brush.Color:=clWhite; // culoarea pensulei,pentru umplerea pinzei

//aici incepem programarea pentru a desena cadranele in care vor aparea arcurile

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

pb1.Canvas.Arc(355,225,205,75,355,150,280,75); //arcul va aparea in cadranul 1

end;

procedure TForm1.btn2Click(Sender: TObject);

begin

pb1.Canvas.Pen.Width:=1;

pb1.Canvas.Pen.Style:=psDash;

pb1.Canvas.Arc(355,225,205,75,280,75,205,150);//pentru cadranul 2

end;

procedure TForm1.btn3Click(Sender: TObject);

begin

pb1.Canvas.Pen.Width:=1;

pb1.Canvas.Pen.Style:=psDashDot;

pb1.Canvas.Arc(355,225,205,75,205,150,280,225); //pentru cadranul 3

6

end;

procedure TForm1.btn4Click(Sender: TObject);

begin

pb1.Canvas.Pen.Width:=1;

pb1.Canvas.Pen.Style:=psDot;

pb1.Canvas.Arc(355,225,205,75,280,225,355,150); //pentru cadranul 4

end;

procedure TForm1.btn7Click(Sender: TObject);

begin

pb1.Refresh; //refresh-redeseneaza forma

end;

procedure TForm1.btn5Click(Sender: TObject);

begin

pb1.Canvas.Pen.Width:=1;

pb1.Canvas.Pen.Style:=psSolid;

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

7

pb1.Canvas.Pen.Width:=3;

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256)); //rgb-

//alteratia culorilor rosu verde si albastru

pb1.Canvas.Arc(355,225,205,75,335,75,205,225); //construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in 3

end;

procedure TForm1.btn6Click(Sender: TObject);

begin

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256));

pb1.Canvas.Arc(355,225,205,75,205,75,355,225);//construieste arcul ce porneste

//din mijlocul caranului 2 si se termina in 4

end;

procedure TForm1.btn8Click(Sender: TObject);

begin

8

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256));

pb1.Canvas.Arc(355,225,205,75,355,75,205,75);//construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 2

end;

procedure TForm1.btn9Click(Sender: TObject);

begin

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256));

pb1.Canvas.Arc(355,225,205,75,205,75,205,225); //construieste arcul ce porneste

//din mijlocul caranului 2 si se termina in mij.cadr. 3

9

end;

procedure TForm1.btn10Click(Sender: TObject);

begin

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256));

pb1.Canvas.Arc(355,225,205,75,205,225,355,225); //construieste arcul ce porneste

//din mijlocul caranului 3 si se termina in mij.cadr. 4

end;

procedure TForm1.btn11Click(Sender: TObject);

begin

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

10

pb1.Canvas.LineTo(205,150);

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256));

pb1.Canvas.Arc(355,225,205,75,355,225,355,75);//construieste arcul ce porneste

//din mijlocul caranului 4 si se termina in mij.cadr. 1

end;

procedure TForm1.btn12Click(Sender: TObject);

begin

pb1.Canvas.Brush.Color:=clWhite;

pb1.Canvas.Rectangle(355,225,205,75);

pb1.Canvas.MoveTo(280,225);

pb1.Canvas.LineTo(280,75);

pb1.Canvas.MoveTo(355,150);

pb1.Canvas.LineTo(205,150);

pb1.Canvas.pen.Color:=rgb(random(256),random(256),random(256));

pb1.Canvas.Arc(355,225,205,75,355,75,355,225); //construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 4

end;

procedure TForm1.btn13Click(Sender: TObject);

begin

11

//in paintbox2 incepem programarea pentru chord -coarda

pb2.Canvas.Brush.Color:=clWhite;

pb2.Canvas.Rectangle(355,225,205,75);

pb2.Canvas.MoveTo(280,225);

pb2.Canvas.LineTo(280,75);

pb2.Canvas.MoveTo(355,150);

pb2.Canvas.LineTo(205,150);

pb2.Canvas.Pen.Width:=4;

pb2.Canvas.Pen.Color:=clYellow;

pb2.Canvas.Brush.Color:=clAqua;

pb2.Canvas.Chord(355,225,205,75,355,150,280,75); //pentru cadr. 1

end;

procedure TForm1.btn14Click(Sender: TObject);

begin

pb2.Canvas.Pen.Width:=4;

pb2.Canvas.Pen.Color:=clYellow;

pb2.Canvas.Brush.Color:=clblue;

pb2.Canvas.chord(355,225,205,75,280,75,205,150);//cadr.2

end;

procedure TForm1.btn15Click(Sender: TObject);

begin

12

pb2.Canvas.Brush.Color:=clcream;

pb2.Canvas.chord(355,225,205,75,205,150,280,225);//cadr.3

end;

procedure TForm1.btn16Click(Sender: TObject);

begin

pb2.Canvas.Brush.Color:=clgray;

pb2.Canvas.Chord(355,225,205,75,280,225,355,150); //cadr.4

end;

procedure TForm1.btn17Click(Sender: TObject);

begin

pb2.Canvas.Brush.Color:=clWhite;

pb2.Canvas.Rectangle(355,225,205,75);

pb2.Canvas.MoveTo(280,225);

pb2.Canvas.LineTo(280,75);

pb2.Canvas.MoveTo(355,150);

pb2.Canvas.LineTo(205,150);

pb2.Canvas.Brush.Color:=clgreen;

pb2.Canvas.Chord(355,225,205,75,335,75,205,225); ////construieste arcul ce porneste

13

//din mijlocul caranului 1 si se termina in mij.cadr. 3

end;

procedure TForm1.btn18Click(Sender: TObject);

begin

pb2.Canvas.Brush.Color:=clWhite;

pb2.Canvas.Rectangle(355,225,205,75);

pb2.Canvas.MoveTo(280,225);

pb2.Canvas.LineTo(280,75);

pb2.Canvas.MoveTo(355,150);

pb2.Canvas.LineTo(205,150);

pb2.Canvas.Brush.Color:=clPurple;

pb2.Canvas.Chord(355,225,205,75,205,75,355,225); //construieste arcul ce porneste

//din mijlocul caranului 2 si se termina in mij.cadr. 4

end;

procedure TForm1.btn19Click(Sender: TObject);

begin

pb2.Canvas.Brush.Color:=clWhite;

pb2.Canvas.Rectangle(355,225,205,75);

pb2.Canvas.MoveTo(280,225);

14

pb2.Canvas.LineTo(280,75);

pb2.Canvas.MoveTo(355,150);

pb2.Canvas.LineTo(205,150);

pb2.Canvas.Brush.Color:=clMaroon;

pb2.Canvas.Chord(355,225,205,75,355,75,205,75); //construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 2

end;

procedure TForm1.btn20Click(Sender: TObject);

begin

pb2.Canvas.Brush.Color:=clWhite;

pb2.Canvas.Rectangle(355,225,205,75);

pb2.Canvas.MoveTo(280,225);

pb2.Canvas.LineTo(280,75);

pb2.Canvas.MoveTo(355,150);

pb2.Canvas.LineTo(205,150);

pb2.Canvas.Brush.Color:=clred;

pb2.Canvas.Chord(355,225,205,75,205,75,205,225); //construieste arcul ce porneste

//din mijlocul caranului 2 si se termina in mij.cadr. 3

end;

procedure TForm1.btn21Click(Sender: TObject);

15

begin

pb2.Canvas.Brush.Color:=clWhite;

pb2.Canvas.Rectangle(355,225,205,75);

pb2.Canvas.MoveTo(280,225);

pb2.Canvas.LineTo(280,75);

pb2.Canvas.MoveTo(355,150);

pb2.Canvas.LineTo(205,150);

pb2.Canvas.Brush.Color:=clwhite;

pb2.Canvas.Chord(355,225,205,75,355,75,355,225);//construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 4

end;

procedure TForm1.btn22Click(Sender: TObject);

begin

pb2.Refresh;

end;

procedure TForm1.btn33Click(Sender: TObject);

begin

pb3.Refresh;

end;

16

procedure TForm1.btn23Click(Sender: TObject);

begin //programarea pentru pie-felia de tort

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Pen.color:=clRed;

pb3.Canvas.Brush.Color:=clGreen;

pb3.Canvas.Brush.Style:=bscross;

pb3.Canvas.Pie(355,225,205,75,355,150,280,75); //cadr.1

end;

procedure TForm1.btn24Click(Sender: TObject);

begin

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Brush.Color:=clMaroon;

pb3.Canvas.Brush.Style:=bsDiagCross;

pb3.Canvas.Pie(355,225,205,75,280,75,205,150);//cadr.2

end;

17

procedure TForm1.btn25Click(Sender: TObject);

begin

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Brush.Color:=clCream;

pb3.Canvas.Brush.Style:=bsBDiagonal;

pb3.Canvas.Pie(355,225,205,75,205,150,280,225); //cadr.3

end;

procedure TForm1.btn26Click(Sender: TObject);

begin

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Brush.Color:=clAqua;

pb3.Canvas.Brush.Style:=bsFDiagonal;

pb3.Canvas.Pie(355,225,205,75,280,225,355,150); //cadr.4

end;

procedure TForm1.btn27Click(Sender: TObject);

begin

pb3.Refresh;

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

18

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Pen.Color:=clred;

pb3.Canvas.Brush.Color:=clblack;

pb3.Canvas.Brush.Style:=bsHorizontal;

pb3.Canvas.Pie(355,225,205,75,205,75,205,225); //construieste arcul ce porneste

//din mijlocul caranului 2 si se termina in mij.cadr. 3

end;

procedure TForm1.btn28Click(Sender: TObject);

begin

pb3.Refresh;

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Brush.Color:=clGreen;

pb3.Canvas.Brush.Style:=bscross;

19

pb3.Canvas.Pie(355,225,205,75,205,75,355,225); //construieste arcul ce porneste

//din mijlocul caranului 2 si se termina in mij.cadr. 4

end;

procedure TForm1.btn29Click(Sender: TObject);

begin

pb3. Refresh;

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Pen.Color:=clred;

pb3.Canvas.Brush.Color:=clyellow;

pb3.Canvas.Brush.Style:=bsVertical;

pb3.Canvas.Pie(355,225,205,75,355,75,205,75); //construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 2

end;

procedure TForm1.btn30Click(Sender: TObject);

20

begin

pb3. Refresh;

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Pen.Color:=clred;

pb3.Canvas.Brush.Color:=clblue;

pb3.Canvas.Brush.Style:=bsSolid;

pb3.Canvas.Pie(355,225,205,75,205,225,355,225); //construieste arcul ce porneste

//din mijlocul caranului 3 si se termina in mij.cadr. 4

end;

procedure TForm1.btn31Click(Sender: TObject);

begin

pb3.Refresh;

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

21

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Pen.Color:=clred;

pb3.Canvas.Brush.Color:=clblack;

pb3.Canvas.Brush.Style:=bsclear;

pb3.Canvas.Pie(355,225,205,75,355,75,355,225);

//construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 4

end;

procedure TForm1.btn32Click(Sender: TObject);

begin

pb3.Refresh;

pb3.Canvas.Brush.Color:=clWhite;

pb3.Canvas.Rectangle(355,225,205,75);

pb3.Canvas.MoveTo(280,225);

pb3.Canvas.LineTo(280,75);

pb3.Canvas.MoveTo(355,150);

pb3.Canvas.LineTo(205,150);

pb3.Canvas.Pen.Width:=3;

pb3.Canvas.Pen.Color:=clred;

pb3.Canvas.Brush.Color:=clblack;

pb3.Canvas.Brush.Style:=bsHorizontal;

22

pb3.Canvas.Pie(355,225,205,75,335,75,205,225); //construieste arcul ce porneste

//din mijlocul caranului 1 si se termina in mij.cadr. 3

end;

procedure TForm1.btn34Click(Sender: TObject);

//Plygon - procedure Polygon (const Points: array of TPoint)

// Construieste un polygon luind in consideratie masivul coordonatelor punctelor

// Points, astfel ca ultimul punct se uneste cu primul si suprafata figurii se coloreaza.

const p:array [1..7] of Tpoint=((x:50;y:50),(x:65;y:50),(x:115;y:250),(x:100;y:250),

(x:60;y:90),(x:25;y:250),(x:10;y:250));

const s:array [1..4] of tpoint=((x:20;y:135),(x:110;y:135),(x:110;y:150),(x:20;y:150));

const x:array [1..12] of TPoint=((x:120;y:50),(x:135;y:50),(x:175;y:135),(x:225;y:50),

(x:240;y:50),(x:181;y:150),(x:240;y:250),(x:225;y:250),(x:175;y:165),(x:135;y:250),

(x:120;y:250),(x:169;y:150));

const e:array [1..12] of TPoint=((x:245;y:50),(x:345;y:50),(x:345;y:65),(x:265;y:65),

(x:265;y:135),(x:345;y:135),(x:345;y:155),(x:265;y:155),(x:265;y:235),(x:345;y:235),

(x:345;y:250),(x:245;y:250));

23

const n:array [1..10] of TPoint=((x:350;y:50),(x:370;y:50),(x:450;y:230),(x:450;y:50),

(x:465;y:50),(x:465;y:250),(x:445;y:250),(x:365;y:65),(x:365;y:250),(x:350;y:250));

const i:array [1..12] of TPoint=((x:470;y:50),(x:500;y:50),(x:500;y:65),(x:495;y:65),(x:495;y:235),

(x:500;y:235),(x:500;y:250),(x:470;y:250),(x:470;y:235),(x:475;y:235),(x:475;y:65),(x:470;y:65));

const a:array [1..7] of TPoint=((x:550;y:50),(x:565;y:50),(x:615;y:250),(x:600;y:250),

(x:560;y:100),(x:520;y:250),(x:505;y:250));

const aa:array [1..4] of TPoint=((x:520;y:135),(x:600;y:135),(x:600;y:150),(x:520;y:150));

begin

pb4.canvas.brush.color:=clblue;

pb4.canvas.polygon(p);

pb4.canvas.brush.color:=clblue;

pb4.canvas.polygon(s);

pb4.Canvas.Brush.Color:=clMaroon;

pb4.Canvas.Polygon(x);

pb4.Canvas.Brush.Color:=clRed;

pb4.Canvas.Polygon(e);

pb4.Canvas.Brush.Color:=clgray;

pb4.Canvas.Polygon(n);

pb4.Canvas.brush.color:=clYellow;

pb4.Canvas.Polygon(i);

24

pb4.Canvas.Brush.Color:=clgreen;

pb4.Canvas.Polygon(a);

pb4.Canvas.Polygon(aa);

end;

procedure TForm1.pb5Click(Sender: TObject);

//Polyline - procedure Polyline (constPoints: array of TPoint);

// Metoda construieste o linie frinta dupa coordonatele Points.

const t:array[1..4] of tpoint= ((x:10;y:50),(x:90;y:50),(x:50;y:50),(x:50;y:250));

const u:array[1..4] of tpoint= ((x:95;y:50),(x:95;y:250),(x:170;y:250),(x:170;y:50));

const r:array[1..6] of tpoint= ((x:175;y:250),(x:175;y:50),(x:265;y:50),(x:265;y:120),

(x:175;y:120),(x:265;y:250));

const c:array[1..4] of tpoint= ((x:360;y:50),(x:270;y:50),(x:270;y:250),(x:360;y:250));

const uu:array[1..4] of tpoint= ((x:365;y:50),(x:365;y:250),(x:455;y:250),(x:455;y:50));

const l:array[1..3] of tpoint= ((x:460;y:50),(x:460;y:250),(x:550;y:250));

const ee:array[1..7] of tpoint= ((x:645;y:50),(x:555;y:50),(x:555;y:150),(x:645;y:150),(x:555;y:150),(x:555;y:250),(x:645;y:250));

const et:array[1..4] of tpoint= ((x:650;y:50),(x:740;y:50),(x:695;y:50),(x:695;y:250));

25

const ett:array[1..2] of TPoint=((x:695;y:255),(x:695;y:270));

begin

pb5.Canvas.pen.Color:=clGreen;

pb5.Canvas.Pen.Width:=3;

pb5.Canvas.Polyline(t);

pb5.Canvas.Polyline(u);

pb5.Canvas.Polyline(r);

pb5.Canvas.Polyline(c);

pb5.Canvas.Polyline(uu);

pb5.Canvas.Polyline(l);

pb5.Canvas.Polyline(ee);

pb5.Canvas.Polyline(et);

pb5.Canvas.Polyline(ett)

end;

procedure TForm1.btn36Click(Sender: TObject);

begin

tmr1.Enabled:=True;

end;

procedure TForm1.tmr1Timer(Sender: TObject);

var i,j:Integer;b:tBITMAP;

begin

for i:=0 to form1.width do

26

for j:=0 to form1.height do

begin

pb6.Canvas.Pixels[i,j]:=RGB(Random(255),Random(255),Random(255));

end;

begin

pb6.Canvas.Rectangle(190,200,870,380);

pb6.Canvas.Font.Size:=70;

pb6.Canvas.Font.Color:=clred;

pb6.Canvas.TextOut(200,210,'Creanga inimii ');

end;

begin

for i:=0 to form1.width do

for j:=0 to form1.height do

begin

pb6.Canvas.Pixels[i,j]:=RGB(Random(255),Random(255),Random(255));

end;

begin

pb6.Canvas.Pen.Width:=4;

pb6.Canvas.Brush.Color:=clGreen;

pb6.Canvas.Font.Size:=8;

pb6.Canvas.Font.Color:=clblack;

27

pb6.Canvas.Rectangle(100,100,320,320);

pb6.Canvas.pen.Width:=4;

pb6.Canvas.textout(110,150,'Si nici macar o clipa eu nu ma mir ca pot,');

pb6.canvas.TextOut(110,180,'Sa tin pe creanga asta si universul tot...');

pb6.Canvas.TextOut(110,220,'Il port pe creaga asta întinsa usurel,');

pb6.Canvas.TextOut(110,250,'Cum port lumina lumii în piatra de inel,');

pb6.Canvas.Brush.Color:=clFuchsia;

pb6.Canvas.Ellipse(50,300,250,500);

pb6.Canvas.Brush.Color:=clred;

pb6.Canvas.RoundRect(350,100,650,330,100,150); //Metoda deseneaza un dreptunghi cu colturile rotungite,

pb6.Canvas.pen.Width:=4;

pb6.Canvas.textout(390,150,'Cind alte universuri ma cheama sau le chem,');

pb6.Canvas.TextOut(390,180,'De-o nostalgie crunta adinc oftez si gem,');

pb6.Canvas.TextOut(390,220,'Caci stiu atit de bine ca din acelasi lut');

pb6.Canvas.TextOut(390,260,'Si trupul meu si Calea Lactee s-au facut,');

pb6.canvas.Brush.Color:=clAqua;

pb6.Canvas.Ellipse(630,20,800,180);

pb6.Canvas.Pen.Width:=4;

pb6.canvas.Brush.Color:=clYellow;

pb6.Canvas.rectangle(620,300,840,520);

pb6.Canvas.pen.Width:=4;

pb6.Canvas.textout(640,350,'Si pare universul imens si uimitor,');

pb6.Canvas.TextOut(640,400,'Adeseori ca bucla iubitei de usor,');

28

pb6.Canvas.TextOut(640,440,'Si-l simt pina la durere si imn, adese, cind');

pb6.Canvas.TextOut(630,470,'Cumplit mi se apasa pe creanga lacramind.');

end;end;

for i:=0 to form1.width do

for j:=0 to form1.height do

begin

pb6.Canvas.Pixels[i,j]:=RGB(Random(255),Random(255),Random(255));

end;

begin

b:=tbitmap.create;

b.LoadFromFile('poet.bmp') ;

pb6.canvas.draw(300,150,b)

end;

for i:=0 to form1.width do

for j:=0 to form1.height do

begin

pb6.Canvas.Pixels[i,j]:=RGB(Random(255),Random(255),Random(255));

end;

begin

pb6.Canvas.Rectangle(190,200,877,300);

pb6.Canvas.Font.Size:=40;

pb6.Canvas.Font.Color:=clred;

pb6.Canvas.TextOut(200,210,'Din Cercul Poetilor Disparuti ');

29

end; end;

procedure TForm1.btn35Click(Sender: TObject);

begin

tmr1.Enabled:=False;

end;

end.

Execuția programului:

De exemplu ,făcănd clik pe PageControl cu denumirea ,,Poligon”și apoi clik pe butonul ,,Afișează”,obtinem asa imagine :

Fig.1.2.forma după execuţie

Iar daca fcem clik pe ,,Poliline” și apoi dublu clik pe PaintBox obtinem:

30

Fig.1.3.forma după execuţie

Și dacă pe ,,arc”,apoi pe butoanele cadran 1,2,3,4 obţinem arcurile:

Fig.1.4.forma după execuţie

31

Problema2: Utilizarea subprogramului procedură pentru repartizarea multiplă a figurii complexe pe suprafaţa componentei Tform: pe orizontală, pe verticală, umplerea întregii componente Tform cu desenul multiplicat.

Forma înainte de execuție:

Fig.2.1.forma înainte de execuţie

Pentru dizainul formei și butoanelor s-a schimbat proprietatea Caption,Font,Color.

implementation

{$R *.dfm}

Procedure steluta(cs:TCanvas;xc,yc,Rx,Ry,h,g,f:integer); //procedura pentru disenarea stelutei

begin

32

cs.brush.color:=rgb(Random(255),Random(255),Random(255));//culoarea de umplere a figurii

cs.Rectangle(xc-Rx,yc-Ry,xc+Rx,yc+Ry);//deseana dreptunghiul ca suport al stelutei

cs.Pen.Color:=clmaroon; //pentru creion

cs.Brush.Color:=clYellow;//pentru steluta culoarea

//incepem desenarea stelutei cu ajutorul procedurelor,MouveTo si LineTo

cs.MoveTo(xc-Rx-h,yc-Ry+h);

cs.LineTo(xc,yc-Ry-h-g);

cs.LineTo(xc+Rx+h,yc-Ry+h);

cs.LineTo(xc+Rx,yc-Ry);

cs.LineTo(xc-Rx+h-g,yc-Ry-h-g+f);

cs.LineTo(xc+Rx-h+g,yc-Ry-h-g+f);

cs.LineTo(xc-Rx-h,yc-Ry+h);

//incepe colorarea stelutei cu ajutorul procedurei FloodFill

cs.FloodFill(xc,yc-Ry-h-g+10,clmaroon,fsborder);

cs.FloodFill(xc,yc-Ry+h-g+10,clmaroon,fsborder);

cs.FloodFill(xc-Rx,yc-Rx+h-g-f+10,clmaroon,fsborder);

cs.FloodFill(xc+Rx,yc-Rx+h-g-f+10,clmaroon,fsborder);

cs.FloodFill(xc-Rx,yc-Rx-h-g+f+10,clmaroon,fsborder);

cs.FloodFill(xc+Rx,yc-Rx-h-g+f+10,clmaroon,fsborder);

cs.Brush.Color:=clYellow;

end;

procedure cercFor(cs:TCanvas;xc,yc,r:integer);//procedura pentru dessenarea a 5 cercuri unul in altul cu raze diferite

33

var i:integer;

begin

for i:=5 downto 1 do begin

cs.brush.Color:=rgb(random(256),random(256),random(256));

cs.Ellipse(xc-i*r,yc-i*r,xc+i*r,yc+i*r);

end; end;

procedure TForm1.btn1Click(Sender: TObject);

begin

steluta(form1.Canvas,50,150,10,30,10,50,20);//coordonatele pentru steluta

end;

procedure TForm1.btn2Click(Sender: TObject);

var i,xc:integer;

begin

refresh;

xc:=50;

for i:=1 to 10 do

steluta(Form1.Canvas,xc*2*i,150,10,30,10,50,20);

//aparitia stelutei pe orizontala

end;

procedure TForm1.btn3Click(Sender: TObject);

var j,yc:integer;

34

begin

refresh;

yc:=150;

for j:=1 to 4 do

steluta(Form1.Canvas,50,yc*j,10,30,10,50,20);

//aparitia pe verticala

end;

procedure TForm1.btn4Click(Sender: TObject);

var i,j,xc,yc:Integer;

begin

refresh;

xc:=60; yc:=150;

for i:=1 to 8 do begin

for j:=1 to 4 do

steluta(Form1.Canvas,xc*i*2,yc*j,10,30,10,50,20) ;

//aparitia stelutei pe toata forma

end; end;

procedure TForm1.btn5Click(Sender: TObject);

var i,j,xc,yc:Integer;

begin

Refresh;

xc:=60; yc:=150;

35

for i:=2 to 5 do

for j:=1 to i-1 do

steluta(Form1.Canvas,xc*i*2,yc*j,10,30,10,50,20) ;

//aparitia pe diagonala principala

end;

procedure TForm1.btn6Click(Sender: TObject);

var i,j,xc,yc:Integer;

begin

Refresh;

xc:=60; yc:=150;

for i:=1 to 9 do

for j:=1 to 5-i do

steluta(Form1.Canvas,xc*i*2,yc*j,10,30,10,50,20) ;

//aparitia pe secundara

end;

procedure TForm1.btn7Click(Sender: TObject);

begin

Refresh;

cercFor(form1.Canvas,50,50,10) ;//coordonatele pentru cerc

end;

procedure TForm1.btn8Click(Sender: TObject);

36

var i,xc:integer;

begin

refresh;

xc:=50;

for i:=1 to 10 do

cercFor(form1.Canvas,xc*i*2,90,10) ;

//aparitia cercului pe orizontala

end;

procedure TForm1.btn9Click(Sender: TObject);

var j,yc:integer;

begin

refresh;

yc:=50;

for j:=1 to 6 do

cercFor(form1.Canvas,50,yc*j*2,10) ;

//aparitia pe verticala

end;

procedure TForm1.btn10Click(Sender: TObject);

var i,j,xc,yc:integer;

begin

refresh;

37

xc:=50; yc:=50;

for i:=1 to 10 do begin

for j:=1 to 6 do

cercFor(form1.Canvas,xc*i*2,yc*j*2,10) ; //toata forma

end; end;

procedure TForm1.btn11Click(Sender: TObject);

var i,j,xc,yc:integer;

begin

Refresh;

xc:=50; yc:=50;

for i:=1 to 7 do

for j:=1 to i-1 do

cercFor(form1.Canvas,xc*i*2,yc*j*2,10) ; //diagonala principala

end;

procedure TForm1.btn12Click(Sender: TObject);

var i,j,xc,yc:integer;

begin

Refresh;

xc:=50; yc:=50;

for i:=0 to 20 do

for j:=1 to i-1 do

cercFor(form1.Canvas,xc*i*2-xc*i,yc*j*2-yc*j,10) ;

38

end;

procedure TForm1.btn13Click(Sender: TObject);

var i,j,xc,yc:integer;

begin

Refresh;

xc:=50; yc:=50;

for i:=0 to 10 do

for j:=4 to i-1 do

cercFor(form1.Canvas,xc*i*2-xc*i,yc*j*2-yc*j,10) ;

begin

for i:=12 to 21 do

for j:=4 to 21-i do

cercFor(form1.Canvas,xc*i*2-xc*i,yc*j*2-yc*j,10) ;

//fluturi

end;end;

end.

Execuția programului:

Făcînd clik pe butonul ,,toată-forma” obţinem o formă plina cu steluţa programată anterior:

39

Fig.2.2.forma după execuţie

Alt exemplu avem facînd clik pe butonul,,2”,și ne apare imaginea,,fluture”:

Fig.2.3.forma după execuţie

40

Problema3: Programarea desenului în componenta Ttimer şi mişcarea lui pe suprafaţa formei: pe orizontală, pe verticală, diagonală, pe cerc etc.

Forma înainte de execuție:

Fig.3.1.forma înainte de execuţie

Aici am schimbat la Tform și Tbuton proprietatea Caption,Color,Font.

implementation

{$R *.dfm}

var i,j,e,d:Integer;

procedure TForm1.btn1Click(Sender: TObject);

begin

tmr1.Enabled:=True; //pornirea ceasului

41

Randomize;

end;

procedure TForm1.tmr1Timer(Sender: TObject);

begin //programarea smailicului sa se miste inainte

Form1.Refresh;

if i>300 then begin

tmr1.Enabled:=False;//sa se opreasca ceasul cind ajunge la sfirsit

Form1.Canvas.Ellipse(100+i,100,300+i,300); //fata

Form1.Canvas.Ellipse(150+i,160,170+i,180); //un ochi

Form1.Canvas.Ellipse(230+i,160,250+i,180);//alt ochi

Form1.Canvas.Arc(140+i,160,260+i,260,140+i,260,260+i,260);//gura

end

else

begin

Form1.Canvas.Brush.Color:=clYellow;//culoarea de umplere a fetei

Form1.Canvas.Ellipse(100+i,100,300+i,300);

Form1.Canvas.Brush.color:=clBlack; //culoarea de umplere a ochilor

Form1.Canvas.Ellipse(150+i,160,170+i,180);

Form1.Canvas.Ellipse(230+i,160,250+i,180);

Form1.Canvas.Pen.Width:=3 ;//grosimea cu care deseneaza creionul

Form1.Canvas.Arc(140+i,160,260+i,260,140+i,260,260+i,260);

inc(i);

end; end;

42

procedure TForm1.FormCreate(Sender: TObject);

begin

i:=1;

j:=1;

d:=1;

end;

procedure TForm1.btn2Click(Sender: TObject);

begin

Form1.refresh;

tmr3.Enabled:=False;

tmr1.Enabled:=False;

tmr2.Enabled:=False;

tmr4.Enabled:=False;

tmr5.Enabled:=False;

end;

procedure TForm1.btn3Click(Sender: TObject);

begin

Randomize;

tmr2.Enabled:=True;//pornire ceas 2

end;

43

procedure TForm1.tmr2Timer(Sender: TObject);

begin //miscarea cercului inapoi

Form1.Refresh;

if j>200 then begin

tmr2.Enabled:=False;

Form1.Canvas.Ellipse(500-j,300,700-j,500);

inc(j);

end

else

begin

Form1.Canvas.Ellipse(500-j,300,700-j,500);

inc(j);

Form1.Canvas.Brush.Color:=RGB(Random(255),Random(255),Random(255)) ;//va genera diferite culori

end; end;

procedure TForm1.btn4Click(Sender: TObject);

begin

Randomize;

tmr3.Enabled:=True;//pornire ceas3

end;

procedure TForm1.tmr3Timer(Sender: TObject);

44

begin //umflarea balonului

Form1.Refresh;

if e>400 then begin

tmr3.Enabled:=False;

Form1.Canvas.Ellipse(300-e,300-e,300+e,300+e);

inc(e);

end

else

begin

Form1.Canvas.Ellipse(300-e,300-e,300+e,300+e);

Form1.Canvas.TextOut(300,300,'!');

Form1.Canvas.Brush.Color:=RGB(Random(255),Random(255),Random(255)) ;

inc(e) ;

end;

end;

procedure TForm1.btn5Click(Sender: TObject);

begin

Randomize;

tmr4.Enabled:=True;end;

procedure TForm1.tmr4Timer(Sender: TObject);

var x,y,x1,y1,x2,y2:integer;

begin //rotirea cercului sub un unghi

if j>500 then begin

45

form1.Canvas.Pen.Color:=rgb(Random(255),Random(255),Random(255));

x:=300+round(150*cos(j*pi/180));

y:=300-round(150*sin(j*pi/180));

Form1.Canvas.Ellipse(x-30,y+30,x+30,y-30);

inc(j);

end

else

begin

x:=300+round(150*cos(j*pi/180));

y:=300-round(150*sin(j*pi/180));

Form1.Canvas.Brush.Color:=rgb(Random(255),Random(255),Random(255));

Form1.Canvas.Ellipse(x-30,y+30,x+30,y-30);

inc(j);

end; begin

if j>200 then begin

x1:=500-round(150*sin(j*pi/180));

y1:=500-round(150*cos(j*pi/180));

Form1.Canvas.Ellipse(x1-30,y1+30,x1+30,y1-30);

inc(j);

end

else

begin

x1:=500-round(150*sin(j*pi/180));

y1:=500-round(150*cos(j*pi/180));

46

Form1.Canvas.Brush.Color:=rgb(Random(255),Random(255),Random(255));

Form1.Canvas.Ellipse(x1-30,y1+30,x1+30,y1-30);

inc(j);

end; begin

if i>450 then begin

x2:=400+round(150*cos(i*pi/90));

y2:=400-round(150*sin(i*pi/90));

Form1.Canvas.Ellipse(x2-30,y2+30,x2+30,y2-30);

inc(i);

end

else

begin

x2:=400+round(150*cos(i*pi/90));

y2:=400-round(150*sin(i*pi/90));

Form1.Canvas.Brush.Color:=rgb(Random(255),Random(255),Random(255));

Form1.Canvas.Ellipse(x2-30,y2+30,x2+30,y2-30);

inc(i);

end; end;end;

end;

procedure TForm1.tmr5Timer(Sender: TObject);

var x3,y3:integer;

47

begin //rotirea stelutei subt unghi

begin

end;

if j>459 then begin

Form1.Canvas.Pen.Width:=3;

form1.Canvas.Pen.Color:=rgb(Random(255),Random(255),Random(255));

x3:=350-round(150*sin(j*pi/180));

y3:=350-round(150*cos(j*pi/180));

form1.Canvas.polyline([Point(x3+45,y3- 60), Point(x3-15, y3+70), Point(x3+90,y3- 30),

Point(x3-5,y3- 30), Point(x3+75, y3+70), Point(x3+45,y3-60)]);

inc(j);

end

else

begin

form1.Canvas.Pen.Color:=rgb(Random(255),Random(255),Random(255));

x3:=350-round(150*sin(j*pi/180));

y3:=350-round(150*cos(j*pi/180));

form1.Canvas.polyline([Point(x3+45,y3- 60), Point(x3-15, y3+70), Point(x3+90,y3- 30),

Point(x3-5,y3- 30), Point(x3+75, y3+70), Point(x3+45,y3-60)]);

inc(j);

end; end;

48

procedure TForm1.btn6Click(Sender: TObject);

begin

tmr5.Enabled:=True;

end;

end.

Execuția programului:

Pentru a mișca pe formă o figură,facem clik pe butonul ,,înainte”:

Fig.3.2.forma după execuţie

La apasarea butonului ,,steluţă” avem:

49

Fig.3.3.forma după execuţie

Această imagine va aparea la apasarea pe butonul ,,rotire”:

50

Fig.3.4.forma după execuţie

51

top related