Sunteți pe pagina 1din 53

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA PEDAGOGIC DE STAT ,,ION CREANG DIN CHIINU

Facultatea Informatic i TII


Specialitatea matematic i informatic

LUCRARE DE LABORATOR
1

TEMA: Primitivele
Grafice. Metode i
Proprieti a
bibliotecii TCanvas.

Efectuat:Turcule Axenia
Verificat: Grosu Olga

Chiinu,2012
Scopul lucrarii: Lucrul cu biblioteca canvas.
Problema1:
Utilizarea
metodelor
(arc,
rectangrle,
roundrect,pie,chord, ellipse, polygon, polyline,textout) i
propietilor (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 mrimea grafic,
cu colul din stnga 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 stnga
ale dreptunghiului, dar excluznd marginile de jos i din dreapta.

procedure LineTo(X, Y: Integer);

Metoda deseneaz linia dus din punctul unde se gsete la momentul dat
creionul n punctul (X, Y).
procedure MoveTo(X, Y: Integer);
Aceast metod presupune schimbarea poziiei creionului n punctul (X,Y).
procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
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);
Construiete un polygon lund n consideraie masivul coordonatelor punctelor
Points, astfel ca ultimul punct se unete cu primul i suprafaa figurii se
coloreaz.
procedure Polyline(const Points: array of TPoint);
Construiete o linie frnt dup coordonatele Points.
procedure Rectangle(X1, Y1, X2, Y2: Integer);
Deseneaz un dreptunghi cu coordonatele (1, Y1) stnga 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 lime i nlimea X3 Y3.

function TextExtent(const Text: string): TSize;


- determina spaiul ocupat de textul din imagi.

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


- Scrie un ir de caractere pe panza, ncepnd de la punctul (X,
Y), i apoi actualizeaz PenPos la sfritul ir.
procedure TextRect(Rect: TRect; X, Y: Integer; const Text:
string);
- se utilizeaz pentru a scrie numai textul care se potrivete
ntr-un dreptunghi de tiere.
Proprietile se caracterizeaz astfel:
TCanvas - De exemplu, cnd se execut o secven de tipul
Move To sau Line To, se deseneaz o linie avnd culoarea
curent selectat. Proprietatea Paint este folosit pentru a
determina culoarea curent i este o parte din clasa TPen.
Aceast clas are proprieti ce determin tipul de linie:
limea, stilul (continu, punctat, linie ntrerupt etc).
Tbrush reprezint o pensul folosit pentru umplerea
modelului de pe pnz, prin operaii ca FillRect (umplere
dreptunghiular), Polygon (umplere poligonal), Ellipse
(umplere n form de elips). Proprietile 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 operaii cu fonturi. Proprietile includ:
Color, Height (nlime), Style (bold, italic, normal i so on ).
Proprietile Height i Width (de tip integer).Sabilesc nlimea,
respectiv lmea formei sau componentei. Aceste valori sunt
exprimate n puncte care include i dimensiunile rezervate
chenarelor.
Prin bitmap nelegem o matrice de pixeli, fiecare
pixel fiind n esen un numr ntreg care codific, sub un
anumit format, o culoare. Atunci cnd un bitmap este tras
(draw) pe ecran, fiecrui pixel i corespunde un punct colorat pe
monitor. Pentru manipularea bitmapurilor Delphi pune la
4

dispoziie clasa TBitmap, un obiect din aceast clas avnd, pe


lng bitmapul propriuzis, multe alte cmpuri i metode utile.
Mai mult, fiecare obiect TBitmap are propriul canvas, prin
intermediul cruia i putem seta pixelii.
Proprietatea Enabled (de tip boolean)--Se refer la
accesibilitatea formei sau componentei.
Metoda Refresh, Repaint--Redeseneaz forma.

Forma nainte de execuie:

Fig.1.1.imaginea formei nainte de execuie

Aici la form au fost schimbate proprietile


Tfond,Caption,Tcolor;la fel i la butoane au fost schimbate
aceste proprieti,pentru o imagine mai evideniat.
implementation
5

{$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
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;
6

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
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);
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
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
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);

10

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);
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);

11

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
//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);

12

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
pb2.Canvas.Brush.Color:=clcream;

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

procedure TForm1.btn16Click(Sender: TObject);


13

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
//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);
14

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);
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;

15

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);


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;

16

pb2.Canvas.Chord(355,225,205,75,355,75,355,225);//construies
te 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;

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;

17

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;

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);

18

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);
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;
19

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;
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);
20

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);


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;

21

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);
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
22

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;
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));

23

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));
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);

24

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);
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));

25

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));
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)
26

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
for j:=0 to form1.height do
begin
pb6.Canvas.Pixels[i,j]:=RGB(Random(255),Random(255),Rando
m(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;

27

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),Rando
m(255));
end;
begin
pb6.Canvas.Pen.Width:=4;
pb6.Canvas.Brush.Color:=clGreen;
pb6.Canvas.Font.Size:=8;
pb6.Canvas.Font.Color:=clblack;
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);

28

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,');
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;

29

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),Rando
m(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),Rando
m(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 ');
end; end;
30

procedure TForm1.btn35Click(Sender: TObject);


begin
tmr1.Enabled:=False;
end;

end.

Execuia programului:
De exemplu ,fcnd clik pe PageControl cu denumirea
,,Poligoni apoi clik pe butonul ,,Afieaz,obtinem asa imagine
:

Fig.1.2.forma dup execuie

Iar daca fcem clik pe ,,Poliline i apoi dublu clik pe PaintBox


obtinem:

31

Fig.1.3.forma dup execuie

i dac pe ,,arc,apoi pe butoanele cadran 1,2,3,4 obinem


arcurile:

Fig.1.4.forma dup execuie


32

Problema2: Utilizarea subprogramului procedur pentru


repartizarea multipl a figurii complexe pe suprafaa
componentei Tform: pe orizontal, pe vertical, umplerea
ntregii componente Tform cu desenul multiplicat.
Forma nainte de execuie:

Fig.2.1.forma nainte de execuie

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
33

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;

34

procedure cercFor(cs:TCanvas;xc,yc,r:integer);//procedura
pentru dessenarea a 5 cercuri unul in altul cu raze diferite
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;

35

procedure TForm1.btn3Click(Sender: TObject);


var j,yc:integer;
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

36

Refresh;
xc:=60; yc:=150;
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;

37

procedure TForm1.btn8Click(Sender: TObject);


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;

38

begin
refresh;
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

39

for j:=1 to i-1 do


cercFor(form1.Canvas,xc*i*2-xc*i,yc*j*2-yc*j,10) ;
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.

Execuia programului:
Fcnd clik pe butonul ,,toat-forma obinem o form plina cu
stelua programat anterior:

40

Fig.2.2.forma dup execuie


Alt exemplu avem facnd clik pe butonul,,2,i ne apare imaginea,,fluture:

Fig.2.3.forma dup execuie

41

Problema3: Programarea desenului n componenta Ttimer i


micarea lui pe suprafaa formei: pe orizontal, pe vertical,
diagonal, pe cerc etc.
Forma nainte de execuie:

Fig.3.1.forma nainte de execuie


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
42

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);

43

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;

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
44

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

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),R
andom(255)) ;//va genera diferite culori
end; end;

procedure TForm1.btn4Click(Sender: TObject);


begin
Randomize;
tmr3.Enabled:=True;//pornire ceas3

45

end;

procedure TForm1.tmr3Timer(Sender: TObject);


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),R
andom(255)) ;
inc(e) ;
end;
end;

procedure TForm1.btn5Click(Sender: TObject);


begin
Randomize;
tmr4.Enabled:=True;end;
procedure TForm1.tmr4Timer(Sender: TObject);
46

var x,y,x1,y1,x2,y2:integer;
begin //rotirea cercului sub un unghi
if j>500 then begin
form1.Canvas.Pen.Color:=rgb(Random(255),Random(255),Rand
om(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),Ra
ndom(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);

47

end
else
begin
x1:=500-round(150*sin(j*pi/180));
y1:=500-round(150*cos(j*pi/180));
Form1.Canvas.Brush.Color:=rgb(Random(255),Random(255),Ra
ndom(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),Ra
ndom(255));
Form1.Canvas.Ellipse(x2-30,y2+30,x2+30,y2-30);
inc(i);

48

end; end;end;
end;

procedure TForm1.tmr5Timer(Sender: TObject);


var x3,y3:integer;
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),Rand
om(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),Rand
om(255));

49

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;

procedure TForm1.btn6Click(Sender: TObject);


begin
tmr5.Enabled:=True;
end;
end.
Execuia programului:
Pentru a mica pe form o figur,facem clik pe butonul
,,nainte:

50

Fig.3.2.forma dup execuie

La apasarea butonului ,,stelu avem:

51

Fig.3.3.forma dup execuie

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

52

Fig.3.4.forma dup execuie

53

S-ar putea să vă placă și