Sunteți pe pagina 1din 26

LUCRAREA NR.

1A

COMPONENTELE MEDIULUI INTEGRAT C++ BUILDER


1. Obiectivele lucrrii: a) nsuirea modului de utilizare a celor mai importante componente ale mediului integrat C++ BUILDER . b) Realizarea unui program simplu care utilizeaz componente de tip TButton, TEdit, Tlabel, RadioButton etc.

3.Breviar 3.1. Facilitile mediului C++Builder Borland C++Builder este un mediu de programare vizual, orientat obiect, pentru dezvoltarea rapid de aplicaii (RAD) cu scop general i aplicaii client/server pentru Windows95 i WindowsNT. Folosind C++Builder se pot crea aplicaii Windows eficiente sciind un minim de cod. Facilitile semnificative oferite de acestea sunt prezentate succint n cele ce urmeaz. I. nalta productivitate a mediului de dezvoltare Aceasta este favorizat de principalele instrumente furnizate de mediul de dezvoltare integrat (IDE) C++Builder i anume : - Visual Form Designer; - Object Inspector; - Component Palette; - Project Manager; - Code Editor; - Debugger. Acestea dau posibilitatea utilizatorului s dezvolte rapid aplicaii avnd totodat un control complet asupra codului i resurselor. Proiectare drag-and-drop Utilizatorul poate crea aplicaii prin simpla tragere (drag and drop) a componentelor din Component Palette pe Form designer urmat de setarea propietilor din Object Inspector. Handler-ele de evenimente sunt automat create, iar codul lor este complet accesibil. Acest mod de proiectare a unei aplicaii nu restricioneaz n nici un fel accesul programatorului la codul surs, o aplicaie putnd fi scris i fr a folosi componente vizuale. A. Propieti, metode, evenimente 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. B. C++Builder Help Mediul C++Builder ofer un ghid practic, care conine peste 3000 de pagini de documentaie despre IDE, VCL, baze de date i tehnici de programare. C. Codurile surs pentru VCL Mediul C++Builder pune la dispoziie codurile surs pentru VCL Visual Component Library, furniznd astfel o unic privire nuntrul modului n care lucreaz C++Builder. VCL furnizeaz peste 100 de componente reutilizabile care ajut programatorul s construieasc aplicaii robuste ntr-un timp scurt. Aceste componente pot fi modificate pentru a corespunde necesitilor din cele mai diverse. C++Builder ul incude o suit complet de controale Windows95: TreeView, Trackbars, ProgressBars, toolbars, Rich Edit, ListViews, ImageLists, StatusBars etc. Totodat C++Builder include suport pe 32 de bii pentru numele lungi de fiiere, multi-threading i Win95 API.

3.2. IDE (Mediul de Dezvoltare Integrat) Elementele mediului integrat de dezvoltare sunt: Meniu principal (Main Menu); Forma (Form); Editorul de cod (Code Editor); Bara cu instrumente (Toolbar); Paleta cu componente (Component Palette); Tabelul cu proprieti ale obiectelor (Object Inspector); Administratorul de program (Program Manager); 3.2.1. MAIN MENU n figura 1.1 se prezint funciile specifice meniului principal.

Fig. 1.1. Semnificaiile butoanelor din Main Meniu sunt urmtroarele: File pentru a deschide, crea, salva, nchide project-uri i fiiere; Edit pentru prelucrare de texte i componente; Search pentru localizare de text, erori, obiecte, variabile, unit-uri, ...n editorul de cod; View pentru a afia, sau ascunde elemente ale mediului; Project pentru a compila o aplicaie; Run pentru a executa i a depana o aplicaie. Component pentru a crea sau a instala o component. DataBase pentru manipulare de baze de date. Workgroups pentru manipularea proiectelor mari. Tools pentru a rula programele utilitare disponibile, fr a prsi mediul C++Builder; Options pentru a controla comportamentul mediului de dezvoltare; Help pentru a obine ajutor n diversele faze de utilizare a mediului.

3.2.2. Forma nreaga parte vizibil a unei aplicaii este construit pe un obiect special numit form(ca cea din figura 1.2). O form liber este creat de fiecare dat cnd este lansat n execuie mediul C++Builder. O aplicaie poate avea mai multe forme. Adugarea de noi forme unei aplicaii se face selectnd comanda New Form din meniul File. Pe form se pot aeza i aranja componente vizulale i non-vizuale care alctuiesc interfaa cu utilizatorul. Fiecrei forme i sunt asociate dou fiiere cu exensiile .cpp respectiv .h (n cazul formei de mai sus unit1.cpp i unit1.h)

Fig. 1.2.

3.2.3. Editorul de cod Mediul C++Builder are o fereastr unde programatorul poate scrie codul unei aplicaii.. Editorul de cod este un editor ASCII complet i poate deschide mai multe fiiere simultan. Fiecrui fiier deschis i este ataat, n partea de sus a ferestrei, un buton cu numele lui. Trecerea de la un fiier la altul se face prin click pe butonul ataat fiierului. La intrarea n C++Builder, sau la crearea unui nou

Fig 1.3.

project, editorul arat ca n figura 1.3. n momentul n care adugm un unit, sau o form n editorul de cod se va creea o nou fereastr. Prin execuia unui click dreapta n editorul de cod mediul C++Builder pune a dispoziie un meniu cu comenzile cele mai des folosite la editarea, depanarea, execuia a unei aplicaii. Prin selecia opiunii Properties, din acest meniu, avem acces la setrile de baz ale editorului, i anume la culori, fonturi etc. figura 1.4..

Fig. 1.4.

3.2.4. Bara cu instrumente Aceasta reprezint o scurttur la comenzile aflate n MainMenu. n varianta implicit comenzile pe care le conine sunt cele specificate n figura 1.5.

Fig. 1.5 3.2.5. Paleta cu componente Componentele sunt elemente utilizate pentru a crea aplicaii C++Builder. O component este de fapt un element de tip UI (user interface). Pot fi vizuale (de exemplu butoanele, cutiile de dialog), sau pot fi non-vizuale (de exemplu timer-ul).

Spunem despre o component c este vizual, dac ea este vizibil, sau va fi vizibil la momentul execuiei, iar o component este non-vizual, dac la momentul proiectrii aplicaiei apare pe form ca un desen, iar n momentul execuiei aplicaiei devine invizibil (de exemplu TTimer din pagina System), sau este invizibil pn n momentul n care este apelat (de exemplu TOpenDialog sau TSaveDialog din pagina Dialogs). Fiecare component are atribute care permit controlul aplicaiei. Componentele sunt grupate n pagini. n forma implicit paginile sunt: Standard, Win95, Additional, Dat Access, Data Control, Win31, Internet, Dialogs, System, QReport, ActiveX figura 1.6

Fig. 1.6. De exemplu cele mai folosite componente sunt cele din pagina Standard, care conine cutii de dialog, meniuri, butoane etc. Pentru a obine help despre fiecare dintre ele, executai click pe componenta dorit, iar apoi apsai pe F1. O component special este i forma, care are la rndul ei atate propieti, metode, evenimente etc. Aezarea unei componente pe o form se poate face n mai multe moduri. - dac dorim plasarea componentei n mijlocul formei atunci executm dublu click pe forma respectiv. - dac dorim s plasm componenta n alt loc dect centrul formei, atunci executm un click pe component, iar apoi nc un clik n locul dorit pe form. Colul din stnga sus al componentei va coincide cu locul unde am executat cel de-al doilea click. n aceste dou cazuri dimensiunile componentei vor fi cele implicite. Se pot modifica aceste dimensiuni, fie din Object Inspector (vezi mai jos), fie cu ajutorul mouse-ului. n cazul n care tergem o component de pe form, ablonul handler-ului de evenimente asociat componentei va rmne (ns fr codul surs existent nainte) deoarece acesta ar putea fi apelat de ctre alte metode. Dac programatorul intervine n codul surs i terge acest handler, compilatorul va da o eroare. 3.2.6. Tabelul cu proprieti ale obiectelor Acest tabel (Object Inspector) care face legtura ntre interfaa aplicaiei i codul scris de programator are dou funcii: seteaz propitetile componentelor aflate n form. creeaz i ajut la navigatul prin handler-ele de evenimente. Un handler de evenimente se execut n momentul n care apare un eveniment (de exemplu apsarea unei taste, a unui buton de mouse etc.). Object Selector n captul de sus al lui se afl Object Selector care conine toate componentele de pe form mpreun cu tipul lor. Object Inspector are dou pagini figurile 1.7, 1.8.: Properties page (figura 1.7) permite stabilirea (setarea) propietilor unei componente, i anume: dimensiunile ei, poziia n cadrul formei, fonturile folosite, numele etc. Alte propieti pot

Fig. 1.7. fi setate al momentul execuiei programului prin scrierea de cod surs n cadrul handler-lor de evenimente. Event page (figura 1.8) permite legarea unei componente la evenimentele programului. Prin executarea unui dublu click pe un eveniment, de exemplu pe OnClik, C++Builder creeaz un handler de evenimente, care este de fapt o metod ataat unei clase i care se va executa cnd apare un eveniment particular (n cazul nostru executarea unui click pe buton).

Fig 1.8. Un handler de evenimente pentru componenta TButton din cadrul paginii Standard va arta n felul urmtor:

void_fastcall Tform1::Button1Click(TObject *Sender) { //Aici putem scrie cod surs, care se va executa //n momentul apsrii butonului cu ajutorul mouse-ului }

n cazul n care alegem evenimentul OnDblClick (OnDoubleClick) handler-ul de evenimente va arta n felul urmtor (am ales n cazul acesta componenta RadioButton):
void_fastcall Tform1::RadioButton1DblClick(TObject *Sender) { //Aici putem scrie cod surs, care se va executa //n momentul apsrii butonului cu ajutorul mouse-ului }

Precun se vede i din cele dou exemple formele i componentele sunt numerotate (TForm1, RadioButton1). Dac am mai fi adugat pe form nc un RadioButton acesta ar fi fost denumit RadioButton2 etc. Object Inspector denumete automat toate componentele i handler-ele de evenimente. Pagina cu evenimente va afia la un moment dat doar evenimentele unei singure componente i anume a aceleia selectate din form (poate fi chiar forma nsi). D. 3.2.7 Administratorul de program Aplicaiile C++Builder sunt denumite project-uri. Un project este un grup de mai multe fiiere care mpreun alctuiesc aplicaia. Fiecare fiier reprezint, pentru aplicaia din care face parte, o resurs care necesit setri speciale pentru a putea fi legat la aplicaiea final (DLL, sau EXE). Pe msur ce aplicaia crete, numrul de fiiere necesare va fi tot mai mare (de exemplu pot fi adugate fiiere multimedia, baze de date, unit-uri Pascal etc.) i deci se va face tot mai simit nevoia unei manipulri ct mai uoare a acestor fiiere. C++Builder se ocup de manipularea tuturor acestor fiiere i totodat pune la dispoziia programatorului un instrument care s permit acestuia s navigheze uor printre fiierele ce alctuiesc un project. Acest instrument este denumit sugestiv Project Manager. n structura unui project intr trei tipuri de fiiere (cu extensiile .mak, .cpp i .res ). Fiierul .cpp (cu numele implicit Project1.cpp) este punctul central al unei aplicaii C++ Builder. El conine funcia WinMain, deci de aici i ncepe programul execuia. n continuare se prezint un exemplu de program simplu care conine doar acest fiier:
// 1 #include <vcl\vcl.h> 2 #programa hdstop // 3 USERES (Project. res); // 4 WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int) { 5 try { 6 Application->Initialize( );

7 8 9

Application->Run ( ); } catch (Exception &exception) { Application->ShowException (&exception); } return 0; } //

Am numerotat liniile programului pentru a face mai uoar explicarea lor: linia 1: fiierul vcl.h conine definiiile necesare pentru Visual Component Library (VCL). Acest fiier este inclusn fiecare project C++Builder. linia 2: atenioneaz procesorul s nu mai adauge alte fiiere handler la lista celor deja existente ( acest directiv termin lista cu fiiere handler). linia 3: USERES este un macrou folosit pentru a aduge resurse la project. n acest context precizm c mai exist i alte macrouri dintre care: - USEFORM (pentru a aduga forme la un project); - USEOBJ (pentru a aduga fiiere obj la project); - USEUNIT (pentru a aduga unit-uri Object Pascal la project); - USEDATAMODULE; - USEDATAMODULENS; - USERC; - USEFORMNS; - USELIB; - USEFILE. C++Builder creeaz automat aceste macrouri, aa c nu este necesar ca programatorul s intervin n ele. linia 4: reprezint apelul funciei WinMain (de aici ncepe execuia programului). liniile 5 i 8: aceste instruciuni in de programarea cu excepii. linia 6: se iniializeaz obiectul VCL Aplication pentru acest process. linia 7: procesul este lansat n execuie (de aici programul ncepe s se ruleze n mediul Windows). n continuare se prezint programul surs demonstrativ Unit1.cpp :
//--------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma resource "*.dfm" TForm1 *Form1; // Form1 este un pointer care acceseaza aplicatia // TForm este clasa care defineste fereastra aplicatiei // TForm1 este clasa derivata din TForm1 //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

// Constructorul clasei si al aplicatiei // Constructorul este o metoda speciala de initializare { Label1->Caption=""; // Se reseteaza proprietatea Caption pentru Label1 si anume egal "" } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) // Numele functiei (Button1Click) si apartenenta( la clasa TForm1) sunt generate automat // Button1Click este generata automat la apsarea butonului Button1 // Button1 este butonul pe care este afisat textul GO { Edit1->Text="Bun venit si succes grupei 1905 la disciplina Sisteme cu microprocesoare"; //Se modifica proprietatea Text a obiectului Edit1 si anume se incarca cu valoarea // specificata (mesajul dintre ghilimele) Label1->Caption="Specializarea Automatica si Informatica Industriala - AII"; //Se modifica proprietatea Caption a obiectului Label1 si anume se incarca cu valoarea // specificata (mesajul dintre ghilimele) Button1->Enabled=false; // Se modifica proprieataea Enabled a obiectului Button1 si anumue se dezactiveaza Button2->Enabled=true; // Se modifica proprieataea Enabled a obiectului Button2 si anumue se activeaza } //--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender) { // Button3Click este generata automat la apsarea butonului Button3 // Button3 este butonul pe care este afisat textul Exit Close(); // Se aplica metoda Close() care inchide aplicatia curenta } //--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { //Au loc modifcari asemanatoare cu functia Button1Click Edit1->Text=""; Label1->Caption=""; Button2->Enabled=false; Button1->Enabled=true; } //---------------------------------------------------------------------------

4. Modul de lucru a) Se alimenteaz sistemul cu tensiune; b) Se lanseaz mediul C++ Builder (dublu click pe icon-ul corespunztor din desktop) ; c) Se selecteaz din Main Menu opiunea File i apoi OpenProject urmat de calea D:\DIDACTIC\SMP\1905 (a sau b)\LUC1\Project1.mak. d) Se execut click pe butonul Run din Toolbar (aceast aciune este urmat de lansarea n execuie a programului); e) Vor fi examinate toate componentele prezentate n breviar; f) Se modific programul astfel nct s se obin forma cu obiecte din figura 1.9 ;

Fig. 1.9. 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 ieirea din program (Exit); - o caset de editare (Edit1) unde se va afia valoarea variabilei i; - dou etichete (Label1 i 2) pentru afiarea textului Lucrarea nr. 1. Incrementare decrementare contor. Respectiv a sensului de variaie a variabilei i din caseta Edit1; - n caption-ul formei se va afia textul Laboratorul Informatica Industriala; - fiecare obiect va avea hint-ul activ completat corespunztor ; g) Lucrarea se considera incheiata in momentul in care programul modificat este funcional. Referatul va cuprinde principalele idei din breviar referitoare la mediul C++Builder i forma surs a unit-ului modificat.

Lucrarea 1B FUNCTII PENTRU GESTIONAREA TIMPULUI ALE MEDIULUI C++ BUILDER


1. Obiectivele lucrrii: a) nsuirea modului de utilizare a componentei VCL TTimer. b) nsuirea modului de utilizare a funciilor de lucru cu timpul sistem. c) Realizarea unor aplicaii de gestionare a resursei timp. . 2.Aparatura si suporturile utilizate: a) PC in configuraia unitate central,monitor, tastatur; b) Precizrile din prezentul ndrumar; c) Manuale de prezentare a mediului C++BUILDER. 3.Breviar 3.1. Utilizarea componentei TTimer Componenta TTimer se gsete n Component Palette (pagina System) . Obiectul de acest tip permite execuia in cadrul aplicaiei a unor funcii la intervale specificate. n context Windows obiectul TTimer lanseaz ctre aplicaie mesaje la intervale prestabilite. O particularitate fa de componentele utilizate n lucrarea precedent const in faptul ca acest obiect nu are corespondent grafic pe form n momentul execuiei programului. In figura 2.1 este reprezentat obiectul vizual Timer asa cum se gsete n pagina System. Aducerea pe form a acestui obiect se realizeaz in conformitate cu precizrile din lucrarea precedent.

Fig. 2.1.

n figura 2.2 se prezint Tabelul cu Proprieti (Object Inspector) paginile Proprieti i Evenimente pentru componenta TTimer.

Fig 2.2. Proprietatea Enabled stabilete dac obiectul TTimer rspunde la evenimentul OnTimer (dac Enabled este true atunci se rspunde la eveniment Timer-ul este activat). Proprietatea Interval specifica numrul de milisecunde dintre dou mesaje tip TTimer consecutive ( TTimer este apelat dupa fiecare trecere a intervalului specificat ). Proprietatea Name specific numele Timer-ului. Proprietatea Tag este utilizata pentru transferul de informatii suplimentare (variabile de tip int). Evenimentul OnTimer apare de fiecare dat cnd trece intervalul (Interval) specificat. n continuare este prezentat codul programului P1 care realizeaz: dezactivarea timer-ului Timer1 (in constructor si la apsarea butonului Dezactivare Timer ) ; activarea Timer-ului Timer1 (la apasarea butonului Activare Timer ); transferul unei valori ntregi , prin intermediul proprietii Tag in componenta Label1 .
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "ex_timer.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" int i=0; TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Label1->Caption=""; Timer1->Enabled=false; DesBtn->Enabled=false; ActivBtn->Default=true;

} //--------------------------------------------------------------------------void __fastcall TForm1::ActivBtnClick(TObject *Sender) { Timer1->Enabled=true; ActivBtn->Enabled=false; DesBtn->Enabled=true; } //--------------------------------------------------------------------------void __fastcall TForm1::DesBtnClick(TObject *Sender) { Timer1->Enabled=false; ActivBtn->Enabled=true; DesBtn->Enabled=false; } //--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender) { i++; Timer1->Tag=i; Label1->Caption=Timer1->Tag; } //-----------Programul-P1----------------------------------------------------

In figura 2.3 se prezint dispunerea pe form a obiectelor din programul P1.

Fig. 2.3.

3.2 Funcii de gestionare a 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)
in care: *datep si *timep sunt pointeri la structurile struct date si struct time; Structurile menionate mai sus (aferente datei i orei) sunt de forma: struct date { int da_year; /* pentru an */ char da_day: /* pentru zi */ char da_ mon; /* pentru luna */ }; respectiv: struct time { unsigned char ti_min; unsigned char ti_hour; unsigned char ti_hund; unsigned char ti-sec; };

/* pentru minute */ /* pentru ore */ /* pentru sec/100 */ /* pentru secunde */

Funciile getdate si gettime preiau data i ora curente iar funciile setdate i settime permit iniializarea acestora. Modurile de utilizare a functiilor getdate si gettime sunt evideniate n programul P2 ale crui text surs se prezinta in continuare.
//----------Programul-P2--------------------------------------------------#include <vcl\vcl.h> #include <stdio.h> #pragma hdrstop #include "Unit3.h" #include "dos.h" //--------------------------------------------------------------------------#pragma resource "*.dfm" TForm1 *Form1; struct date d; struct time t; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {

} //--------------------------------------------------------------------------void __fastcall TForm1::FormActivate(TObject *Sender) { Edit1->Clear(); Timer1->Interval=1000; } //--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender) { char buf[20]; getdate(&d); gettime(&t); sprintf(buf,"%02d-%02d-%4d %02d:%02d:%02d",d.da_day,d.da_mon,d.da_year, t.ti_hour,t.ti_min,t.ti_sec); Edit1->Text=(AnsiString)buf; // Conversie din String in AnsiString AnsiString este o clasa care permite lucru cu // // siruri de caractere in mediul C++Builder } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Close(); } //---------------------------------------------------------------------------

Programul P2 afieaz data i ora cu periodicitate de o secund ( setarea proprietatii Interval pentru Timer1).Ieirea din program se face prin apsarea butonului Exit. 4. Modul de lucru a) Se alimenteaz sistemul cu tensiune; b) Se lanseaz mediul C++ Builder (dublu click pe icon-ul corespunztor din desktop); c) Se implementeaz programul P1 descris n prezenta lucrare. d) Se selecteaz din Main Menu opiunea File i apoi OpenProject urmat de calea D:\DIDACTIC\SMP\1905 (a sau b)\LUC2\Project1.mak. e) Se execut click pe butonul Run din Toolbar (aceast aciune este urmat de lansarea n execuie a programului);

f) Se examineaz n programele P1 i P2 utilizarea elementelor aferente gestiunii resursei timp ( Timere ,Struct date i Struct time ) ; g) Se elaboreaz programul P3 pentru realizarea unui cronometru.

Fig 2.4. Se vor utiliza urmtoarele obiecte, evideniate n figura 2.4: - o form (Form1) pe care sunt dispuse celelalte obiecte i n Caption-ul creia se va afia textul Laboratorul Informatica Industriala; - 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 : 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; n timpul execuiei programului forma va avea aspectul din figura 2.5:

Fig.2.5. g) Lucrarea se considera incheiat n momentul n care programele P1 , P2 i P3 sunt funcionale. Referatul va cuprinde principalele idei din breviar referitoare la mediul C++Builder (obiectul Ttimer) i forma surs a unit-ului programului P3.

LUCRAREA NR. 1C

FUNCII PENTRU GESTIONAREA RESURSELOR GRAFICE ALE MEDIULUI C++ BUILDER


1. Obiectivele lucrrii: a) nsuirea modului de utilizare a componentelor VCL TPaintBox i TPanel. b) nsuirea modului de utilizare a principalelor funcii grafice ale mediului C++BUILDER . c) Realizarea unor elemente pentru afiarea grafic a informaiei (diagram i bargraf). . 2. Aparatura si suporturile utilizate: a) PC in configuraia unitate central,monitor, tastatur; b) Precizrile din prezentul ndrumar; c) Manuale de prezentare a mediului C++BUILDER. 3. Breviar 3.1. 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.

n figura 3.1 este prezentat obiectul vizual TPaintBox (asa cum apare pe form) iar n figura 3.2 acelai obiect aa cum apare n pagina System. Aducerea pe form a acestui obiect se realizeaz in conformitate cu precizrile din prima lucrare. Ca i n cazul obiectului Ttimer, nici obiectul TPaintBox nu este vizibil n timpul execuiei programului (dup cum s-a menionat acesta delimiteaz spaiul de lucru pentru desenare).

Fig 3.1.

Fig. 3.2. n figura 3.3 se prezint Tabelul cu Proprieti (Object Inspector) paginile Proprieti i Evenimente pentru componenta TPaintBox.

Fig 3.3. Proprietatea Name specific numele PaintBox-ului. Proprietatea Tag este utilizata pentru transferul de informatii suplimentare (variabile de tip int).

Restul elementelor din figura 3.3 sunt cunoscute de la lucrrile de laborator anterioare. 3.2. 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. n prezenta lucrare obiectul TPanel va fi utilizat pentru realizarea bargrafului. n figura 3.4 este prezentat obiectul vizual TPanel (aa cum apare pe form) iar n figura 3.5 acelai obiect aa cum apare n pagina Standard. Aducerea pe form a acestui obiect se realizeaz in conformitate cu precizrile din prima lucrare. Obiectul TPanel este vizibil n timpul execuiei programului.

Fig 3.4.

Fig 3.5. n figura 3.6 se prezint Tabelul cu Proprieti (Object Inspector) paginile Proprieti i Evenimente pentru componenta TPanel.

Fig 3.6. Proprietatea Name specific numele Panel-ului. Proprietatea Tag este utilizata pentru transferul de informatii suplimentare (variabile de tip int). Proprietile Height i Top specific nlimea respectiv vrful (raportat la obiectul Form). Aceste proprieti se vor modifica prin program n cadrul aplicaiei de construcie a bargrafului. Restul elementelor din figura 3.6 sunt fie cunoscute de la lucrrile de laborator anterioare fie nesemnificative pentru prezenta lucrare.

3.3. Utilizarea principalelor obiectelor grafice ale mediului C++Builder

Obiectul TCanvas furnizeaz spaiul de desenare pentru obiectele pe


a cror suprafa se poate realiza un desen (de exemplu o linie pe un obiect TPaintBox). n continuare se vor prezenta proprietile Brush i Pen ale obiectului TCanvas .

Brush - permite umplerea unui contur nchis cu o culoare (proprietatea Color) sau cu un model de haurare (proprietatea Style).

n tabelul 3.1 se prezint codurile culorilor principale, care pot fi utilizate pentru toate obiectele grafice. Tabelul 3.1

Codurile culorilor
Culoare negru albastru verde rosu galben mov maro alb argintiu gri Functie C++Builder clBlack clBlue clGreen ClRed clYellow ClFuschia clMaroon ClWhite clSilver clGray

n tabelul 3.2 se prezint codurile stilurilor de haurare.

.
Codificarea stilurilor de haurare Nume bsSolid bsHorizontal bsVertical bsFDiagonal bsBDiagonal bsCross haur orizontal haur vertical haur \\\ (diagonal stnga-dreapta) haur /// (diagonal dreapta stnga) haur n cruce +++ Descriere

Tabelul 3.2

umple uniform toti pixelii cu culoarea selectat

bsDiagCross

haur n cruce oblic xxx

Pen - permite fixarea unor atribute ale liniilor drepte sau curbe i anume culoare (color), grosime (width), tip (style).

n tabelul 3.3 sunt prezentate codurile pentru stilurile de linie. Tabelul 3.3 Codificarea stilurilor de linie

Nume
psSolid psDot psDash psDashDot psDashDot Dot

Descriere linie continu linie punctat linie ntrerupt linie intrerupt (linie-punct) linie intrerupt (linie-punct-punct)

Pentru grosimi se folosete proprietatea Width a obiectului grafic Pen n care se specific un numr ntreg (implicit Width=1 pixel, iar alte grosimi se exprim prin multipli 3 pixeli = 3*Width). Pentru culori sunt valabile codurile din tabelul 3.1. Obiectului TCanvas i sunt asociate i foarte multe metode (funcii) dintre care n tabelul 3.4 se prezint cele cu o frecven mai mare de utilizare.

Tabelul 3.4 Funcii de desenare ale obiectului TCanvas Prototip


MoveTo(int x,int y) LineTo (int x,int y); Ellipse(int stinga,int sus, int dreapta, int jos) Rectangle(int stinga,int sus, int dreapta,int jos) TextOut (int x, int y, AnsiString Text) FloodFill (int x, int y, TColor Culoare , TfillStyle Stil) Stil=fsSurface sau fsBorder CopyRect (TRect dest TCanvas Canvas, TRect sursa)

Funcie
fixeaza pozitia curenta in (x,y) linie din poz. curenta pina la (x,y) deseneaz o elips tangent la laturile dreptunghiului specificat deseneaz un dreptunghi cu coordonatele colurilor specificate afieaz textul Text ncepnd cu punctul de coordonate x, z umple o suprafa,mrginit de un contur cu culoare Culoare, care conine punctul de coordonate (x,y) cu stilul Stil (implicit fsBorder) copiaz zona definit de dreptunghiul surs n Canvas-ul Canvas n zona definit de dreptunghiul dest

Observaii 1. Suprafaa delimitat de un obiect TPaintBox este vazut ca o matrice de dimensiuni Width Height puncte, conform figurii 3.7.

(0,0)

(Width,0)

(0,Height)
Fig. 3.7.

(Width ,Height )

2. Referitor la utilizarea obiectului CopyRect (copiaz o zon dreptunghiular dintr-un Canvas n alt zon dreptunghiular n acelai Canvas) se prezint urmtorul exemplu edificator.
TRect sursa,destinatie; // variabilele sursa si destinatie sunt de tipul TRect sursa=Rect(stinga1, sus1, dreapta1, jos1) ; // se construieste dreptunghiul sursa destinatie=Rect(stinga2, sus2, dreapta2, jos2) ; // se construieste dreptunghiul destinatie PaintBox1->Canvas->CopyRect(destinatie,PaintBox1->Canvas,sursa) ;

//copiaza imagina incadrata de dreptunghiul sursa in dreptunghiul destinatie

3. Pentru detalii in legatur cu utilizarea resurselor grafice ale mediului C++Buider se poate consulta lucrarea : Oltean M., Cocan M., C++Buider n aplicaii, Ed. Albastr, Cluj-Napoca, 1998. Se prezint mai jos codul surs al programului P1 care utilizeaz o mare parte din resursele grafice ale mediului C++Builder enumerate n breviar (comentariile se refer ntotdeauna la linia urmtoare).
//--------------------------------------------------------------------------#include <vcl\vcl.h> #pragma hdrstop #include "P1.h" //--------------------------------------------------------------------------#pragma resource "*.dfm" TForm1 *Form1; int xs,ys; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { //Specifica culoarea liniei (negru) PaintBox1->Canvas->Pen->Color=clBlack; // Instructiune MoveTo muta cursorul grafic in pozitia X,Y //Constructia Edit1->Text.ToInt() permite convertirea numarului care se introduce in casuta //de editare dintr-un ansistring intr-un numar intreg PaintBox1->Canvas->MoveTo(Edit1->Text.ToInt(),Edit2->Text.ToInt()); //Instructiunea LineTo deseneaza o linie din pozitia curenta in pozitia X,Y PaintBox1->Canvas->LineTo(Edit3->Text.ToInt(),Edit4->Text.ToInt()); } //--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { PaintBox1->Canvas->Pen->Color=clBlack; //Instructiunea Rectangle deseneaza un dreptunghi care are coltul din stinga sus in //punctul de coordonate X1,Y1 iar coltul dreapta jos in punctul de coordonate X2,Y2 PaintBox1->Canvas->Rectangle(Edit1->Text.ToInt(),Edit2->Text.ToInt(),Edit3->Text.ToInt(),Edit4>Text.ToInt()); } //--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender) { //dreptunghi este o variabila de tipul Trect TRect dreptunghi; //Se specifica culoarea de umplere (culoarea pensulei = rosu) PaintBox1->Canvas->Brush->Color = clRed; // Se specifica stlilul de hasurare (bsHorizontal) PaintBox1->Canvas->Brush->Style = bsHorizontal; // Se defineste variabila dreptunghi //Este folosit cuvantul Rect si parametrii ca in exemplul de mai sus //Coltul din stigna sus dat de X1,Y1 //Coltul din dreapta jos X2,Y2 dreptunghi=Rect(Edit1->Text.ToInt(),Edit2->Text.ToInt(),Edit3->Text.ToInt(),Edit4->Text.ToInt()); // Umple dreptunghiul desenata cu hasura specificata mai sus prin intermediul obiectului //Brush

PaintBox1->Canvas->FillRect(dreptunghi); } //--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender) { //Se redeseneaza paintbox-ul (functia Repaint) PaintBox1->Repaint(); } //--------------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender) { //Specifica culoarea liniei PaintBox1->Canvas->Pen->Color=clBlack; //Specifica grosimea liniei PaintBox1->Canvas->Pen->Width=3; //Specifica stilul liniei PaintBox1->Canvas->Pen->Style=psDash; //Se deseneaza o elipsa care este incadrata in dreptunghiul de coordonate X1,Y1 si X2,Y2 //Coltul din stinga sus (coordonate X1,Y1) //Coltul din dreapta jos (coordonate X2,Y2) PaintBox1->Canvas->Ellipse(Edit1->Text.ToInt(),Edit2->Text.ToInt(),Edit3->Text.ToInt(),Edit4>Text.ToInt()); } //--------------------------------------------------------------------------void __fastcall TForm1::Button6Click(TObject *Sender) { //se declara variabilelele sursa si destinatie de tipul TRect TRect sursa,destinatie; //Se construiesc dreptunghiurile sursa si destinatie sursa=Rect(0,0,100,150); destinatie=Rect(100,0,200,150); //Copiaza imagina incadrata de dreptunghiul sursa in dreptunghiul destinatie PaintBox1->Canvas->CopyRect(destinatie,PaintBox1->Canvas,sursa); } //--------------------------------------------------------------------------void __fastcall TForm1::Button7Click(TObject *Sender) { //Se modifica culoare de hasura (in clAqua albastru deschis) PaintBox1->Canvas->Brush->Color = clAqua; //Se modifica stilul de hasura (cruce in diaonala) PaintBox1->Canvas->Brush->Style = bsDiagCross; //Instructiunea FloodFill umple o suprafata marginita de conturul de culoare neagra, care conine punctul de coordonate (x,y) cu stilul fsBorder (umple pana la contur) PaintBox1->Canvas->FloodFill(Edit3->Text.ToInt()-3,Edit4->Text.ToInt()-3,clBlack,fsBorder); } //--------------------------------------------------------------------------void __fastcall TForm1::Button8Click(TObject *Sender) { Close(); } //---------------------------------------------------------------------------

4. Modul de lucru a) Se alimenteaz sistemul cu tensiune; b) Se lanseaz mediul C++ Builder (dublu click pe icon-ul corespunztor din desktop); c) Se selecteaz din Main Menu opiunea File i apoi OpenProject urmat de calea D:\DIDACTIC\SMP\1905 (a sau b)\LUC3\Project1.mak.

e) Se execut click pe butonul Run din Toolbar (aceast aciune este urmat de lansarea n execuie a programului P1 al crui text surs este prezentat n breviar); f) Se examineaz n programul P1 utilizarea elementelor resurselor grafice ale mediului C++Builder ; g) Se elaboreaz programul P2 pentru realizarea a dou elemente de afiare (bargraf i diagram cu avans continuu) pentru care forma arat ca n figura 3.8 pe care sunt dispuse urmtoarele obiecte: - o form (Form1) n Caption-ul creia se va afia textul Laboratorul Informatica Industriala; - trei butoane (Button 1, 2, 3 ) cu urmtoarele funcii: Buton1 activarea afirii n diagram i n bargraf ( Caption Start); Buton2 oprirea afirii n diagram i n bargraf ( Caption Stop); Buton3 ieirea din program (Caption Exit).

Fig 3.8. dou timere (Timer1 i Timer2) cu urmtoarele funcii Timer1 (Interval=1000 ms) utilizat la afiarea timpului curent; Timer2 (Interval=500 ms) pentru intervalul de afiare n diagram i n bargraf; o caset de editare (Edit1) utilizat pentru afiarea datei si orei curente; dou etichete (Label1 si Label2) cu Caption-ul conform figurii 3.8

Fig.3.9.

Observaii: - din primele dou butoane, la un un moment dat va fi activ unul singur; - fiecare obiect va avea hint-ul activ completat corespunztor; - valoarea numeric ce se va afia n cele dou elemente grafice se obine cu funcia random dup care numrul generat se va converti n pixeli inndu-se cont de nlimea comun a graficului i bargrafului - pentru realizarea bargrafului se vor utiliza dou obiecte de tip TPanel de culori diferite care se vor suparpune; - pentru desenarea graficului se vor utiliza funciile MoveTo, LineTo iar pentru avansul acestuia funcia CopyRect. n timpul execuiei programului forma va avea aspectul din figura 3.9. g) Lucrarea se considera incheiat n momentul n care programul P2 este funcional. Referatul va cuprinde principalele idei din breviar referitoare la mediul C++Builder (resursele grafice) i forma surs a unit-ului programului P2.