ministerul educaţiei al republicii moldova
DESCRIPTION
Ministerul Educaţiei Al Republicii MoldovaTRANSCRIPT
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