Sunteți pe pagina 1din 11

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatic i Microelectronic
Catedra Automatic i Tehnologii Informaionale

RAPORT

Disciplina: Medii interactive de dezvoltare a produselor soft


Lucrare de laborator Nr. 1 (a, b, c)
Tema: Componentele mediului integrat C++ Builder. Funcii pentru
gestionarea timpului ale mediului C++ Builder. Funcii pentru gestionarea
resurselor grafice ale mediului C++ Builder

A efectuat :
A verificat:

lector universitar Boleac Ruslan

Chiinu 2013

1 Obiectivele lucrrii
1. nsuirea modului de utilizare a celor mai importante componente ale mediului integrat C++
Builder.
2. Realizarea unui program simplu care utilizeaz componente de tip TButton, TEdit, Tlabel,
RadioButton etc.
3. nsuirea modului de utilizare a componentei VCL TTimer.
4. nsuirea modului de utilizare a funciilor de lucru cu timpul sistem.
5. Realizarea unor aplicaii de gestionare a resursei timp.
6. nsuirea modului de utilizare a componentelor VCL TPaintBox i TPanel.
7. nsuirea modului de utilizare a principalelor funcii grafice ale mediului C++ Builder.
8. Realizarea unor elemente pentru afiarea grafic a informaiei.
2 Consideraii teoretice
Spre deosebire de Borland C++ clasic, n Borland C++ Builder se scriu programe sub Windows,
folosindu-se anumite componente specifice Windows-ului. Programele astfel concepute trebuie s
rspund anumitor evenimente (apsarea unei taste, un click de mouse etc.) Aciunile utilizatorului
sunt efectuate asupra unor obiecte care sunt caracterizate prin anumite proprieti (culoare, mrime
etc.) Evident c nu orice obiect poate rspunde la orice eveniment i difer de altele prin diferite
proprieti.
Programele sub windows utilizeaz biblioteci speciale de subprograme numite DLL-uri
(dynamic-link library). Acestea includ elementele de interfa utilizate (subprograme care se apeleaz
de fiecare dat cnd este nevoie de ele).
Executnd click pe butonul run aflat pe bara de comenzi rapide sau F9 se comand compilarea i
execuia programului.
Obiectele (componentele) aplicaiei se adaug n formulare. O aplicaie poate conine unul sau
mai multe formulare. Colecia de componente se gsete pe Paleta de componente.
Un obiect are anumite proprieti, valorile acestora putnd fi stabilite utiliznd inspectorul de
obiecte. De exemplu, pentru formular (care este i el un obiect) se poate stabili textul din bara de titlu
utiliznd proprietatea Caption.
Dezvoltarea rapid a aplicaiilor nseamn suport pentru propietile, metodele i evenimentele
obiectelor (PME). Propietile permit setarea uoar a caracteristicilor componentelor. Metodele
execut aciuni asupra obiectelor. Evenimentele permit ca aplicaia s rspund la mesajele Windows,
sau la schimbri de stare a obiectelor. Folosirea modelului PME furnizeaz un robust i intuitiv mediu
de dezvoltare pentru aplicaiile Windows.

Utilizarea componentei TTimer


Componenta TTimer se gsete n Component Palette (pagina System).
Obiectul de acest tip permite execuia n cadrul aplicaiei a unor funcii la intervale specificate.
n context Windows obiectul TTimer lanseaz ctre aplicaie mesaje la intervale prestabilite.
Gestionarea timpului
Prototipurile funciilor de gestionare a timpului sistem se gsesc in header-ele dos.h, time.h ,
vcl\sysdefs.h. Precizrile urmtoare se refer la header-ul dos.h., n care se gsesc prototipurile
urmatoarelor funcii ce permit gestionarea resursei timp:
void getdate(struct date *datep)
void gettime(struct time *timep)
void setdate(struct date *datep)
void settime(struct time *timep)
n care: *datep si *timep sunt pointeri la structurile struct date si struct time.
Utilizarea componentei TPaintBox
Componenta TPaintBox se gsete n Component Palette (pagina System). Obiectul de acest tip
furnizeaz o component TCanvas care permite desenarea n interiorul unui dreptunghi, prevenind
depirea marginilor acestuia.
Utilizarea componentei TPanel
Componenta TPanel se gsete n Component Palette (pagina Standard) . Obiectul de acest tip
poate fi utilizat pentru desenare dac pe el se amplaseaz o component TPaintBox.
3 Elaborarea aplicaiilor
3.1 Se vor utiliza urmtoarele obiecte (n afara formei):
-

dou butoane (Button 1 i 2) pentru incrementarea (UP) respectiv decrementarea (DOWN) a


unei variabile ntregi i ;

un buton (Button 3) pentru iesirea din program (Exit);

o caset de editare (Edit1) unde se va afia valoarea variabilei i;

- dou etichete (Label1 i 2) pentru afiarea textului Incrementare decrementare contor.


Respectiv a sensului de variaie a variabilei i din caseta Edit1;
- n caption-ul formei se va afia textul MIDPS 1- A;
- fiecare obiect va avea hint-ul activ completat corespunztor .
3

Realizarea sarcinii
Declaram variabila nr de tip intreg, cu valoarea initiala egala cu zero. Aceasta variabila va fi
incrementata sau decrementata in dependenta de butonul apasat pe forma. Am definit un sir de
caractere s cu dimensiunea maxima egala cu 10.
int nr = 0;
char s[10];

Am scris o functie inscrieValoare() care realizeaza convertirea numarului care trebuie afisat din
tipul intreg in sir de caractere. Pentru convertire am utilizat functia itoa care are 3 parametri : variabila
de tip intreg care trebuie convertita, variabila sir in care se inscrie sirul si baza numarului care urmeaza
sa fie convertit. Dupa convertire, textul din sirul s se inscrie in componenta Edit1 din Form1.
void inscrieValoarea() {
itoa(nr, s, 10);
Form1->Edit1->Text = s;
}

Am definit evenimentul pentru apasarea butonului Exit. La apasarea butonului se realizeaza


iesirea din executia programului, prin apelarea functiei Close() .
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}

Definim evenimentul pentru butonul Incrementeaza. La apasarea butonului se realizeaza


incrementarea variabilei nr apoi se apeleaza functia inscrieVariabila() pentru convertirea noii valori a
lui nr in sir de caractere si afisarea lui.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
++nr;
inscrieValoarea();
}

Definim evenimentul pentru butonul Decrementeaza. La apasarea butonului se realizeaza


decrementarea variabilei nr apoi se apeleaza functia inscrieVariabila() pentru convertirea noii valori a
lui nr in sir de caractere si afisarea lui.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
4

--nr;
inscrieValoarea();
}

Rezultatul programului

3.2 Se elaboreaz un program pentru realizarea unui cronometru.


Se vor utiliza urmtoarele obiecte, evideniate n figura 4.2:
-

o form (Form1) pe care sunt dispuse celelalte obiecte i n Caption-ul creia se va afia textul

MIDPS;
-

patru butoane (Button 1, 2, 3 , 4) cu urmtoarele funcii:

Button1 pornirea cronometrului( Caption Start);

Button2 oprirea cronometrului( Caption Stop);

Button3 iniializarea cronometrului( Caption Zero);

Button4 ieirea din program (Caption Exit).

dou timere (Timer1 i Timer2) cu urmtoarele funcii

Timer1 (Interval=1000 ms) utilizat la afiarea timpului curent;

Timer2 (Interval=100 ms) utilizat pentru cronometru;

dou casete de editare (Edit1 si Edit2) utilizate pentru :


5

Edit1 - afisarea datei si orei curente;

Edit2 - afiarea timpului cronometrat;

dou etichete (Label1 si Label2) cu Caption-ul conform figurii 2.4


Observaii:

din primele trei butoane, la un un moment dat va fi activ unul singur;

fiecare obiect va avea hint-ul activ completat corespunztor;


Realizarea sarcinii
Am definit variabilele min, sec si zec de tip int, utilizate pentru afisarea intervalului de timp al

timer-ului(minute, secunde, zecimi de secunda).


int min, sec, zec;

La primul timer, care va afisa data si ora am folosit structurile struct date si struct time,
predefinite in biblioteca dos.h. Am definit un sir de caractere de dimensiune maximala 25. Utilizam
functiile getdate si gettime pentru aflarea datei si orei de la sistem, iar ca parametri indicam adresele
unde vor fi pastrate aceste valori. Pentru inscrierea datei si orei intr-un sir de caractere, care mai apoi
va fi afisat se utilizeaza functia sprintf. Ca parametri se indica sirul in care se vor inscrie valorile, apoi
se realizeaza formatarea valorilor pentru afisare(introducerea a cel putin 2 valori, completarea spatiilor
cu zerouri, tipul valorilor), apoi se utilizeaza campurile structurilor pentru inscrierea datei si orei. Apoi
sirul obtinut se inscrie in Edit1.
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static struct date d;
static struct time t;
char s[25];
getdate(&d);
gettime(&t);
sprintf(s, "%02d-%02d-%04d %02d:%02d:%02d", d.da_day, d.da_mon,
d.da_year, t.ti_hour, t.ti_min, t.ti_sec);
Edit1->Text = s;
}

Pentru timer-ul al doilea am utilizat trei instructiuni de decizie care verifica valorile variabelelor
ce se incrementeaza astfel ca la atingerea valorii 10 a variabilei zec se incrementeaza valoarea sec, iar
cand aceasta ajunge la valoarea 60 se incrementeaza variabila min.
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
6

char s[25];
++zec;
if (zec == 10) {
++sec;
zec = 0;
}
if (sec == 60) {
++min;
sec = 0;
}
sprintf(s, "%02d min %02d sec %d zec", min, sec, zec);
Edit2->Text = s;
}

Initial, timerul nu este pornit, deci butonul stop este inactiv, iar celelate sunt active.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer2->Enabled = false;
Button1->Enabled = true;
Button2->Enabled = false;
Button3->Enabled = true;
}

Apoi, daca a fost pornit timerul, toate butoanele se dezactiveaza, cu excceptia butonului stop.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer2->Enabled = true;
Button1->Enabled = false;
Button2->Enabled = true;
Button3->Enabled = false;
}

La apasarea butonului ZERO se anuleaza toate valorile timerului, adica valorile variabelelor mis,
sec si zec se egaleaza cu zero.
void __fastcall TForm1::Button3Click(TObject *Sender)
{
min = sec = zec = 0;
Edit2->Text = "00 min 00 sec 0 zec";
}

Am definit evenimentul pentru apasarea butonului Exit. La apasarea butonului se realizeaza


iesirea din executia programului, prin apelarea functiei Close() .
7

void __fastcall TForm1::Button4Click(TObject *Sender)


{
Close();
}

Rezultatele programului

3.3 Sa se reprezinte graficul unei functii utilizand componenta paintBox.


Realizarea sarcinii
Definim coordonatele minime si maxime ale ferestrei si portii. Am definit un tablou care contine
pointeri la 3 functii.
double xfmin, yfmin, xfmax, yfmax;
int xpmin, ypmin, xpmax, ypmax, nseg = 1000;
double (*func[3])(double), (*f)(double);

Definim cele trei functii globale caror grafice vor putea fi vizualizate : x^2, x^3 si sin(x) ;
double f1(double x) {
return x * x;
}
double f2(double x) {
return x * x * x;
}
double f3(double x) {
return sin(x);
}
8

Efectuam transformarea fereastra poarta, pentru a trece de la coordonate logice la coordonate


ecran.
// Transformarea fereastra-poarta
int xp(double xf) {
return xpmin + (xf - xfmin) / (xfmax - xfmin) * (xpmax - xpmin);
}
int yp(double yf) {
return ypmax - (yf - yfmin) / (yfmax - yfmin) * (ypmax - ypmin);
}

Scriem o functie plot() pentru desenarea graficului la ecran.


void plot() {
double xf;

Definim coordonatele poarta minime si maxime, in pixeli.


xpmin = 0;
ypmin = 0;
xpmax = Form1->PaintBox1->Width;
ypmax = Form1->PaintBox1->Height;

Stabilim culoarea de desenare a axelor.


Form1->PaintBox1->Repaint();
Form1->PaintBox1->Canvas->Pen->Color = 0x00ff0000;

Verificam daca axele X si Y se afla pe ecran. Daca ele sunt pe ecran se deseneaza, in caz contrar
nu.
if (xfmin < 0 && xfmax > 0) {
Form1->PaintBox1->Canvas->MoveTo(xp(0), ypmin);
Form1->PaintBox1->Canvas->LineTo(xp(0), ypmax);
}
if (yfmin < 0 && yfmax > 0) {
Form1->PaintBox1->Canvas->MoveTo(xpmin, yp(0));
Form1->PaintBox1->Canvas->LineTo(xpmax, yp(0));
}

Stabilim culoarea de desenare a graficului functiei si intr-un ciclu , prin segmete, desenam insasi
graficul finctiei.
Form1->PaintBox1->Canvas->Pen->Color = 0x000000ff;
Form1->PaintBox1->Canvas->MoveTo(xp(xfmin), yp(f(xfmin)));
for (int i=1; i<=nseg; i++) {
xf = xfmin + i * ((xfmax - xfmin) / nseg);
9

Form1->PaintBox1->Canvas->LineTo(xp(xf), yp(f(xf)));
}

Stabilim conditiile de minimalitate si maxim pentru coordonatele minime si maxime ale ferestrei,
astefel coordonata minima nu poate fi mai mare decat coordonata maxima si invers.
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
if (CSpinEdit1->Value >= CSpinEdit2->Value) CSpinEdit1->Value = CSpinEdit2>Value - 1;
xfmin = CSpinEdit1->Value;
plot();
}
void __fastcall TForm1::CSpinEdit2Change(TObject *Sender)
{
if (CSpinEdit1->Value >= CSpinEdit2->Value) CSpinEdit2->Value = CSpinEdit1>Value + 1;
xfmax = CSpinEdit2->Value;
plot();
}
void __fastcall TForm1::CSpinEdit3Change(TObject *Sender)
{
if (CSpinEdit3->Value >= CSpinEdit4->Value) CSpinEdit3->Value = CSpinEdit4>Value - 1;
yfmin = CSpinEdit3->Value;
plot();
}
void __fastcall TForm1::CSpinEdit4Change(TObject *Sender)
{
if (CSpinEdit3->Value >= CSpinEdit4->Value) CSpinEdit4->Value = CSpinEdit3>Value + 1;
yfmax = CSpinEdit4->Value;
plot();
}

Definim valorile initiale pentru cooronatele minime si maxime ale ferestrei. Pentru fiecare
componenta a vectorului specificam cate o functie.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
xfmin = -8;
yfmin = -12;
10

xfmax = 8;
yfmax = 25;
func[0] = f1;
func[1] = f2;
func[2] = f3;
f = f1;
}

Specificam functia pentru care se va desena graficul, prin selectarea acesteia din ListBox1.
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
f = func[ListBox1->ItemIndex];
plot();
}

Rezultatul programului

Concluzii
La aceast lucrare de laborator am studiat componentele de baz ale mediului C++ Builder,
proprieti, metode i evenimente. Am elaborat o aplicaie care utilizeaz noiunile, componentele
studiate. Programarea vizual n C++ Builder ajut la crearea rapid a aplicaiilor cu o interfa grafic
cu utilizator prietenoas.

11

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