Documente Academic
Documente Profesional
Documente Cultură
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).
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,
{$R *.dfm}
pb1.Canvas.Arc(355,225,205,75,280,75,205,150);//pentru
cadranul 2
end;
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;
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;
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;
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;
pb2.Canvas.chord(355,225,205,75,205,150,280,225);//cadr.3
end;
begin
pb2.Canvas.Brush.Color:=clgray;
pb2.Canvas.Chord(355,225,205,75,280,225,355,150); //cadr.4
end;
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;
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;
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
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;
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;
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;
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;
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;
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
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;
25
end;
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
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
end.
Execuia programului:
De exemplu ,fcnd clik pe PageControl cu denumirea
,,Poligoni apoi clik pe butonul ,,Afieaz,obtinem asa imagine
:
31
{$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;
35
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;
37
end;
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;
39
end.
Execuia programului:
Fcnd clik pe butonul ,,toat-forma obinem o form plina cu
stelua programat anterior:
40
41
implementation
{$R *.dfm}
var i,j,e,d:Integer;
procedure TForm1.btn1Click(Sender: TObject);
begin
tmr1.Enabled:=True; //pornirea ceasului
42
Randomize;
end;
43
Randomize;
tmr2.Enabled:=True;//pornire ceas 2
end;
45
end;
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
48
end; end;end;
end;
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;
50
51
52
53