7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
1/57
Ministerul Educatiei al Republicii Moldova Universitatea Tehnica a Moldov
Facultatea de Radioelectronica i Telecomunicatii
Catedra CPAE
Lucrarea de cursLa disciplina: Ingineria soft Tema: Crearea unei aplicatii software multimed
redactor grafic
A efectuat Barbovschi A.
Studentul grupei SER-091
A verificat Ichim I.
Lector superior
Chiinau 2012
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
2/57
Cuprins
1. Introducere ....................................................................................................... 3 2. Abordarea problemei proiectului............................................................... 4
2.1. Notiuni generale ....................................................................................... 42.1.1. Primitivele i functionalitatea .................................................... 52.1.2. Mediul de lucru ........................................................................... 5
2.2. Programe paint analoage .......................................................................... 62.2.1. Microsoft Paint ........................................................................... 62.2.2. Paint.Net ..................................................................................... 7
2.2.3. Pixia ............................................................................................ 92.3. Cerinte fata de program ......................................................................... 10
3. Ciclul de viaja al programului................................................................... 11 3.1. Notiuni generale ..................................................................................... 113.2. Etapele de viata a unui produs soft ........................................................ 113.3. Diagrama ciclului de viata a aplicatiei elaborate ................................... 14
4. Descrierea algoritmului de elaborare a programului.......................... 15 4.1. Pregatirea mediului de programare pentru lucru ................................... 164.2. Aranjarea obiectelor pe forme ............................................................... 174.3. Declararea functiilor i descrierea lor ................................................... 224.4. Descrierea fiierului header Unt1.h ....................................................... 29
Concluzie.............................................................................................................. 31
Bibliografie.......................................................................................................... 32 Anexa 1................................................................................................................. 33 Anexa 2.................................................................................................................. 52 Anexa 3................................................................................................................. 53
CPAE 525.1 091 01 ME
Mod. Coala document. Semnat. Data Elaborat. Barbovschi A.
Crearea unei aplicatii
software multimedia redactor
grafic
Lit. Coala Coli
Controlat Ichim I. 2 56Contr. STAS UTMFRTgr. SER-091
Aprobat
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
3/57
1. Introduceren ultimul timp a crescut brusc interesul fata de programare, fapt generat de
patrunderea tehnologiilor informational n viata de zi cu zi. Daca cineva are de
afacere cu calculatorul, mai devreme sau mai trziu, la dorinta proprie sau denevoie, va ncerca sa programeze.
Dezvoltarea rapida a tehnicii de calcul, necesitatea unor medii efective descriere a aplicatiilor, au dus la aparitia unor sisteme de programare rapida bazate ptehnologia RAD (Rapid Application Development), ce are ca fundament tehnologiprogramarii vizuale i de eveniment. Ce reprezinta acest mod de programare?
Programarea vizuala sau "OOP" ("Object Oriented Programming") are labaza ideea unificarii datelor cu modalitatile de prelucrare a acestora i manevreazentitati reprezentate sub forma de obiecte:
obiect = date + cod de tratare a acestor date
Programarea obiectuala ofera posibilitati de modelare a obiectelor, a
proprietatilor i a relatiilor dintre ele, dar i posibilitatea de a descompune oproblema n componentele sale (soft mai mentenabil, adaptabil, reciclabil). Ctevexemple de limbaje de programare orientata obiect: SIMULA (1965), SIMULA-2(1967), Smalltalk, C++, Java (n plus, Java poate fi considerat un limbaj deprogramare orientata eveniment).
Facilitatile oferite de programarea orientata obiect (conform lui Pascou)
sunt:1. Abstractizarea datelor;2. Motenirea;3. ncapsularea (ascunderea) informatiei;4. Legarea dinamica ("trzie").
Coala
CPAE 525.1 091 01 ME 3Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
4/57
In fine, mediul de programare ia asupra lui o parte mare a rutinei, iarprogramatorului nu-i ramane decat sa elaboreze ferestrele de dialog i sa scriefunctiile de prelucrare a evenimentelor.
In lucrarea data programul se va proiecta in mediul soft C++ Builder 6,elaborat in 2006 de compania Borland Inc. Versiunea 6 are un ir de noiimplementari fata de versiunile precedente 4 i 5. Printre acestea putem enumera:- posibilitatea crearii programelor cross-platform, ce pot fi rulate atat pe Windowscat i pe Linux;- noi tehnologii de acces la date;- noi componente i metode de lucru cu acestea.
2. Abordarea problemei proiectului2.1. No^iuni generaleEditorul de imagini este un program care permite desenarea cu mouse-ul pe
ecranul calculatorului, salvarea acestui desen intr-un fiier pe disc, modificarea tiparirea lui. Programele pentru desenare pot sa lucreze in grafica de pixeli(bitmapped graphics) sau in grafica vectoriala (vector graphics).
Daca programul lucreaza in grafica de pixeli atunci imaginea se realizeaza dinpuncte (pixeli), care de fapt sunt nite dreptunghiuri foarte mici. Pentru fiecare pixeal desenului se memoreaza codul de culoare.
Un avantaj al acestei grafici este ca imaginea creata din puncte poate sacontina foarte multe detalii, insa cand dimensiunea desenului se modifica el pierde
din calitate. Marind foarte mult conturul desenului acesta apare in trepte (efectul d"dinti de fierastrau"), iar daca se micoreaza foarte mult punctele ajung sa sesuprapuna.
Un alt dezavantaj al acestui tip de grafica este dimensiunea foarte mare afiierului in care se memoreaza desenul. Cu cat desenul este mai mare cu atat elcontine mai multe puncte pentru care trebuie sa se memoreze codul de culoare, ia
cu cat se folosesc mai multe culori in realizarea desenului, cu atat sunt necesari mamulti biti pentru memorarea culorii pentru fiecare pixel.
Coala
CPAE 525.1 091 01 ME 4Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
5/57
Exemplu: Daca se folosete o paleta de 16 (24) culori, pentru fiecare pixel dindesen sunt necesari patru biti pentru culoare, iar daca se folosete o paleta de 256(28) de culori sunt necesari opt biti de culoare.
n al doilea exemplu, din cauza maririi numarului de culori, necesarul desuport pentru memorarea desenului se dubleaza.
2.1.1. Primitivele i funcjionalitateaPentru crearea imaginilor n editorul de imagini se folosesc instrumente"-
rigla (linia"), dreptunghi, cerc, elipsa .a. Astfel de instrumente care permit creareafigurilor simple se numesc primitive grafice" Aceste sunt cele mai simple elementedin care se compune imaginea. Pentru a ntrebuinta un instrument este necesar dales primitivul grafic" corespunzator i de micat cursorul n punctul dorit alecranului unde este necesar de creat figura aleasa.
Functiile tuturor editoarelor de imagini sunt aproximativ identice. Ele permitutilizatorului:
- de creat imagini din primitivele grafice;
- de aplicat la desenare diverse culori i perii" (adica de folosit linii de diversalargime i configurate);
- de taiat" imaginile sau partile lor, de pastrat temporar n memorie tampon(buzunar") sau de pastrat pe suporturi externe;
- de deplasat un fragment al imaginii pe ecran;- de a ncleia" o imagine cu alta;
- de marit fragmentul imaginii pentru a vizualiza detalii marunte;- de adaugat la imagini text.
Multe editoare de imagini permit de asemenea de a crea animatie decalculator, adica de a crea la calculator imagini n micare.
2.1.2. Mediul de lucruMediul de lucru a editorului de imagini const din trei prti principale. Partea
instrumental - set de pictograme care reprezint instrumentele. De
Coala
CPAE 525.1 091 01 ME 5Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
6/57
obicei aceasta sunt peria" pentru crearea liniilor de configuratie aleatoare, rigla" pentru crearea liniilor drepte, cerc", dreptunghi", elipsa" pentru crearea figurilocorespunzatoare, radiera" pentru tergerea imaginilor, rola" pentru colorarea
f igurilor, foarfece" pentru taierea fragmentelor de imagini. Alta parte a mediului-paleta pentru alegerea culorii imaginii. i in fine, partea a treia - meniul de comenza editorului. Aceste parti ale mediului sunt situate de obicei la marginile ecranuluiPartea centrala a ecranului este destinata pentru campul de lucru (sau cum se maspune panza"), pe care creeaza imagini.
Editor de imagini are, ca regula, urmatoarele regimuri de baza de lucru:regimul de selectare i setare a instrumentului, regimul de selectare a culoriiregimul de lucru cu imaginea (desenarea i redactarea), regim de lucru cudispozitive externe. Creand imagini pe ecranul calculatorului se poate nu numai de le desena singur, dar i de folosit alte imagini, de exemplu fotografii, imagini dincarti etc.
5
2.2. Programe paint analoage2.2.1. Microsoft PaintPaint este o caracterstica din Windows care se poate utiliza pentru a desena,
colora K edita imagini. Paint se poate utiliza precum un caiet de schite digital,pentru a crea imagini simple, proiecte creative, sau pentru a adauga textK graficaaltor imagini, cum ar fi cele facute cu aparatul foto digital.
Acest program cunoscut i de incredere este acum mai uor de utilizat i, deasemenea, mai distractiv. Noile pensule" digitale cu aspect realist din Paint vor trezi la viata imaginile dvs., in stil de acuarela, creion i caligrafe. i o nouapanglica, faia aflata de-a lungul ferestrei care arata ce poate face un programafieaza optiunile intr-un mod mai deschis decat apareau in meniuri.
De asemenea, Paint este pregatit acum i pentru tehnologia tactila, deci, dacaaveti un computer cu ecran tactil, veti desena in curand cu degetul, direct pe ecran
Este posibil chiar sa utilizati doua degete pentru a urmari doua trasaturi separate.
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
7/57
Fig. 1 Programul Microsoft Paint
2.2.2. Paint.Net
Paint.Net este un program gratuit de editat poze, cu o interfat simpl i uorde folosit. Evident, nu se poate compara cu Photoshop, dar include cele maiimportante functii pentru categoria de aplicatii din care face parte.
Coala
CPAE 525.1 091 01 ME 6Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
8/57
LayereUnul din laturile lui Paint.Net este lucrul cu layere. Putine programe deprelucrat imagini gratuite includ suport pentru layere. Utilizarea acestei facilitati nuridic dificultati nici pentru utilizatorii inceptori, nici pentru cei care au lucrat cuPhotoshop. Principiul de lucru cu layere este asemntor functiei similare dinPhotoshop.
La fel ca Photoshop, gestionarea layerelor in Paint.Net se face pe baza uneimici ferestre in care acestea sunt afiate unul sub altul. Ordinea din fereastrarespectiva este i ordinea in care acestea se vor suprapune in imagine.
InstrumentePaint.Net include cele mai importante instrumente pentru modificarea
pozelor: selectie (inclusiv Magic Wand pentru selectarea rapid a unui obiect),
pensul, gradient, radier, color picker, clone stamp etc.Chiar dac nu ofer aceeai functionalitate ca cele din Photoshop, in cele ma
multe cazuri, aceste instrumente sunt suficiente pentru utilizatorii obinuiti careurmresc imbunttirea calittii unei poze sau modificarea anumitor aspecte. Deexemplu, functia de selectare permite adugarea sau eliminarea din selectie a unozone.
EfectePaint.Net ofer i numeroase efecte care pot fi aplicate pozelor. De la efecte
artistice (Oil Painting, Ink Sketch etc.) la distorsionri, utilizatorul are suficientemijloace prin care ii poate lsa amprenta asupra imaginilor.
Exist, bineinteles, posibilitatea reglrii sau modificrii atributelorimaginilor: culoare, saturatie, contrast etc. Reglrile se pot face atat manual, cat automat.
Fig. 2 Programul Paint.NetCoala
CPAE 525.1 091 01 ME 7Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
9/57
Coala
CPAE 525.1 091 01 ME 8Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
10/57
Chiar dac nu se poate compara cu Photoshop sau cu alte aplicatii similare, Paineste o solutie pentru utilizatorii care nu urmresc realizarea unor operatiuni complexe. este gratuit i foarte uor de folosit.
2.2.3. PixiaCreat de Isao Maruoka, Pixia este un program gratuit de prelucrare a graficii i im
digitale, ce ruleaz numai pe platforma Microsoft Windows. Initial, a fost proiectat expentru desenatorii din comunitatea anime, ns n timp, a fost utilizat tot mai des, n maidomenii de activitate. n afar de interfata
' S
original n limba japonez, softul mai este disponibil n englez, francez, italian, spmaghiar, chinez simplificat i traditional, polonez, coreean i german.
Fig. 3 Programul Pixia
Pixia - [C:\Dokumente und EinsteLlungenUU Users\Dokumente\EigeneBilder\Bei5pielbilder\S0nnenuntergang.jpg [LAYERO] of Standard Accuracy]
|^~|[n"|fx"| D File Edit Selection Paint Image View Window Help
JJJJ 7 M
und Einstellungen All UsersDokumente Eigene Bi...] [800x600 pixels] [24 bits]
[~|| hi -
"HS
m pii
Coala
CPAE 525. l O9l Ol ME 9Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
11/57
Odat cu Pixia 2.6, programul a oferit suport nu numai pentru spatiul deculoare RGB (Red, Green, Blue) ci i pentru CMYK (Cyan, Magenta, Yellow,blacK - culorile principale folosite la tipar). Ultima versiune aprut este 4.2. (iuni
2008), i se poate descrca gratuit, n mai multe limbi strine, de aici. Utilizatoruare la dispozitie mai multe instrumente pentru a realiza o lucrare de exceptie, cum afi: efecte ale imaginii i graficii (transparente, strlucire, contrast, umbre,degrade-uri), lucrul cu straturi (layers), filtre (filters), canale (channels), mti(masks), pensule (brushes), iar interfata intuitiv este uor de folosit att pentrumceptori ct i pentru avansati. Cu Pixia se pot crea, edita, vizualiza i exportafiniere cu extensiile BMP, JPG, JPEG, PSD (formatul pentru Adobe Photoshop)TGA, TIF, TIFF, WMF, precum i PXA - fiierul standard al Pixia, ms nu lucreazcu fiierele n format GIF.
De asemenea, pentru a veni n ajutorul desenatorilor, programul estecompatibil cu tabletele grafice Wacom. ncepnd cu versiunea Pixia 4,programatorii recomand instalarea programului numai pe Microsoft Windows Me2000, XP i Vista, deoarece s-ar putea s apar probleme pe variantele Windows 9598 i NT. Fie c creati un desen sau prelucrati o imagine digital, aplicatia Pixia vofer cam tot ce aveti nevoie pentru ca documentul s arate excelent la final.
2.3. Cerinje fa$ de programDeci, n lucrarea de fat am hotrt s scriu un program dotat cu urmtoarele
functii i posibilitti:
- platforma de rulare este Microsoft Windows Millenium, 2000, XP, Vista, 7;- format imagini: *.bmp;- este dotat cu un sistem complex de pstrare (programul nu permite
pierderea modificrilor nesalvate);- lucrul cu culori este unul flexibil (este accesibil o palet de culori preselectate
2 culori de baz, posibilitatea de a seta culoarea de pe orice punct al imaginii
i pe orice punct al imaginii);Coala
CPAE 525.1 091 01 ME 10Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
12/57
- un set de primitive grafice (linie dreapt, linie aleatoare, dreptunghi cu/frumplere, elips cu/fr umplere);
- instrument pentru tergerea fragmentului dorit al imaginii (radiera);
- instrument pentru deplasarea/copierea fragmentului dorit al imaginii;- instrument pentru nserarea textului (cu posibilitatea setrii parametrilor
fontului);- mecanismul de amnare a ultimelor modificri;- un manual.
3. Ciclul de viaj al programului3.1. No^iuni generaleUn produs soft, la fel ca i oricare produs, trece printr-o serie de faze, de la
productie pn la ieire din circulatie. n principiu fazele prin care trece o aplicatiesoftware sunt similare cu cele ale oamenilor, astfel: gestatia, copilria, maturitateai sfritul vietii.
3.2. Etapele de via^ a unui produs soft- Pre-Alpha (gestatia). Aceast faz cuprinde toate activittile efectuate nainte caproiectul software s mceap testele (analizarea cerintelor, design software, scrierepropriu-zis a programului i verificarea buctilor componente ale acestuia). nmediul programatorilor open source" exist mai multe tipuri de versiuni pre-alpha.- Alpha (naterea i copilria timpurie). Faza alpha este caracterizat de ncepereatestrii aplicatiei n ansamblu acesteia n conditii de mediu controlate, fiind realizatdou tipuri de teste:- Testele folosind tehnologii white box" n care programul este supus de ctredezvoltatorii acestuia unor teste generale de functionalitate; practic se verific dacprogramul tie s fac ce a fost proiectat n conditii ideale de mediu (input corect)aceast sub-faz este cunoscut i sub denumirea de private beta";
Coala
CPAE 525.1 091 01 ME 11Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
13/57
- Testele folosind tehnologii black box" sunt efectuate de catre o alta echipa carein esenta incearca sa determine reactiile programului la inputuri mai putin ortodoxe pana la testarea black box", toate celelalte faze se petrec in cadrul organizatiei car e
planifica i produce programul; odata cu inceperea testelor black box" programu primete denumirea de versiunea alpha" i poate fi pus la dispozitia publiculudoritor sa-1 testeze. Versiunile alpha de software sunt deseori instabile i pot generinghetari a sistemului de operare i/sau pierderi a datelor. Faza alpha se termina dobicei cu o inghetare a caracteristicilor" care indica faptul ca nici o altacaracteristica nu va mai fi adaugata acestuia.
- Beta (adolescenta). Faza din ciclul de viata al unui program software careurmeaza dupa alpha i este denumita dupa litera beta din alfabetul grecesc. Deobicei incepe cand programul este inghetat din punct de vedere al caracteristicilor are ca principal scop masurarea impactului acestuia asupra utilizatorilor finali teste de usability. Utilizatorii versiunilor beta sunt de regula clienti sau potentialclienti ai programului, dornici sa testeze aplicatia gratuit sau pentru o mica taxaEste probabil ca versiunile beta sa fie folosite pentru demonstratii interne iprevizualizari. Unii dezvoltatori sau programatori denumesc aceasta etapaavanpremiera, prototip, previzualizare tehnica sau acces timpuriu.- Open beta i closed beta. Dezvoltatorii programelor lanseaza fie o versiune
open beta" ori o versiune closed beta": versiunile open beta sunt destinate unuigrup mai mare de utilizatori (in general publicului larg) in timp ce versiunile closedbeta sunt disponibile doar unui anumit grup de indivizi. Utilizatorii versiunilor betraporteaza orice bug pe oare-l identifica i uneori sugereaza anumite caracteristicpe care i-ar dori ca programul sa le aiba in forma finala.- Release candidate (majorul). Termenul de release candidate (RC) se refera la o
versiune care are potential de a deveni produsul final, gata de a fi lansat duca nu sunidentificate comportamente fatale sau erori grave de programare. In unii 1990 Applobinuia sa foloseasca termenul de golden master" pentru versiunile release
candidate ale propriilor programe, Alte litere din alfabetul grecesc cum ar fi gammi delta sunt folosite uneori pentru a indica versiuni cure sunt in faza
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
14/57
avansat de perfectionare dei se afl inc in tesle iar literele omega i zenith sun
folosite pentru a indica versiuni care se afl in ultimele teste, sunt considerate a ffr bug-uri i pot intra in productie
O versiune primete denumirea code complete cand echipa dezvoltatorilor sepune de acord ca nu va mai fi adugat cod-surs nou programului, dei ar puteaexista schimbri ale codului sursa in vederea reparrii unor erori.- RTM (Release -varsta maturittii). Termenele release to manufucturing" sau
"release to marketing" (ambele prescurtate RTM) - sunt folosite pentru a indica cprogramul a atins un nivel satisfctor de calitate i este gata pentru distributia inmas fie prin mijloace electronice sau prin suporti fizici media. RTM inseamn deregul c programul a fost lansat pe piat, dar nu este disponibil i pentru ceilaltproductori de hardware i software care s-i poat astfel ajusta specificatiilepropriilor produse in conformitate cu acesta. Faza RTM se intampl de obiceiinaintea celei de general availability" (disponibilitate general), cand un produseste fcut disponibil publicului larg.- General availability (disponibilitate general). Reprezint momentul in care toate
activittile necesare comercializrii programului au fost finalizate i acesta estedisponibil intregii piete fie prin web sau prin medii de stocare fizice.- Suport. Dup intrarea produsului in faza GA, acesta mai poate primi unele
imbunttiri prin intermediul aa-numitelor service-packs. Un exemplu foartecunoscut este cel al lui Microsoft Windows XP care a primit pan in prezent 3Service Packs sau Service Pack 1 Beta pentru Windows 7. Service-Pack-urile sunnite colectii de actualizri, patch-uri i/sau extinderi a functionalittii livrate subforma unui singur fixier instalabil, Acestea pot contine de asemenea i noicaracteristici.- End of life (sfritul vietii). Cand un program nu se mai gsete in vanzare sau
compania car 1-a produs nu mai ofer suport pentru acesta, se spune c a ajuns lsfaritul vietii.
Coala
CPAE 525.1 091 01 ME 12Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
15/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
16/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
17/57
ntreg algoritmul consta din nite pai consecutivi pe care ii voi descrie succcontinuare.
4.1. Pregtirea mediului de programare pentru lucruDeschidem programul C++ Builder 6 prin intermediul shortcut-ului respectiv, sameniul Start. In fereastra deschis apsam File -> New -> Application. Pe ecran vomurmtoarele ferestre:
Suprafata de proiectare este Forml, anume pe ea se amplaseaz obiecteleaplicatiei n modul corespunztor. Apsnd dublu-click pe oricare obiect sedeschide fereastra de redactare a evenimentelor respective, unde putem declara descrie functii, adic modul n care reactioneaz obiectul respectiv la carevaeveniment, spre exemplu click.
Obiectele sunt amplasate pe Paleta de obiecte n partea de sus a ferestreiprincipale. Ele sunt grupate conform unor trsturi specifice n taburi.
Builder 6 - Projectl
File Edit Search View Project Run Component Database lools Window Help |
sB - 0 \J\S Standard Additional] Win32] System ] Data Access] Data Controls dbExoress ] DataSnao] BDE | ADO InterBase WebServices 1 InternetExoress ] Internet] WebSnao ] FastNet] De 1HT M m J5
Fig. 6 Ferestrele mediului C++ Builder 6 cu suprafata de lucru Forml
ra i i*
AnchorsAutoS croll
AutoS izeBiDiModeEBorderlcons BorderS tyleBorderWidth __ 0Caption FornnlClientHeight 1466ClientWidth 862Color
QclBtnFace0 Constraints (TSizeConstrainCtl3D trueCursor crDelaultDefaultMonitor dmActiveFormAll shoi
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
18/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
19/57
La stnga jos avem o fereastr numit Object Inspector unde sunt descrisepropriettile obiectului ales i evenimentele acestuia.
Mai sus este fereastra Object Tree View unde sunt afiate clasele de obiecte i
subcategoriile acestora. n cazul dat avem o singur clas Forml.
4.2. Aranjarea obiectelor pe forme4.2.1. Aranjarea obiectelor pe forma FormlPe suprafata de lucru Forml aranjm urmtoarele componente dup cum este
artat n fig. 7:
Fig. 7 Aranjarea componentelor pe forma Forml
Unele componente, ca spre exemplu Edit2, Edit3, Edit5, Edit6, Edit7, Edit8,Edit9, sunt invizibile in timpul rulrii aplicatiei, altele, ca spre exempluOpenPictureDialogl, SavePictureDialogl, FontDialogl sunt vizibile doar la
Coala
CPAE 525.1 091 01 ME 17Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
20/57
apelarea la ele, iar restul sunt permanent vizibile, astfel ca un utilizator obinuitpoate s actioneze asupra lor n mod direct, spre exemplu click pe buton.
Componentele trebuie aranjate astfel nct fereastra aplicatiei s aib un
aspect ergonomic i intuitiv, adic utilizatorului s-i fie uor de navigat, i s nu ntlneasc careva probleme n timpul utilizrii aplicatiei. Cifrele din imaginereprezint componentele:1. SBBrush - permite de a colora o regiune dorit de pe spatiul de lucru;2. SBPen - cu ajutorul lui putem desena o linie de configuratie aleatoare;3. SBRect - instrument pentru deplasarea/copierea unei regiuni dreptunghiulare de
pe spatiul de lucru;4. SBErase - radier care terge orice fragment de pe pnz;5. SBLine - deseneaz o linie dreapt;6. MainMenul - componentul dat creaz meniul pe care l putem accesa n partea desus a aplicatiei;
7. OpenPictureDialogl - fereastra de dialog care ne permite sa deschidem un fiiergrafic pentru a avea posibilitatea de a lucra cu el in aplicatia noastra;
Fig. 8 Componentul MainMenul (afiarea submeniului File)
Coala
CPAE 525.1 091 01 ME 18Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
21/57
: | [
: : Bitmaps (".brnp]
Fig. 9 Fereastra de dialog OpenPictureDialogl
8. SavePictrueDialogl - fereastr de dialog care ne permite s salvm imagineacreat sau modificat de ctre utilizator mtr-un fixier grafic;
: | fp
:
: Bitmaps.]
Fig. lO Fereastra de dialog SavePictrueDialogl
Picture: 0 ff i-
1\
My NP5 Files FlikerlO
Samsung flikerll fllkerl2
[fi]flikerl3. Flikerll
|^ flikerlS flikjer i,fllkerl6 Flikjer 1 Flikerl7 fliker2 flikerlS
flikjer4 i,fllkerl9 flikerS FlikerEO fliker6 Is
flikjer-7 flikerS flikerS
31 El - Picture:
My NP5 Files FlikerlO
Samsung flikerll
| fllkerl2 | fllkerl3. FllkerH^ flikerlS flikjer [ flIkerl Flikjer 1 Fllkeriy fliker2 flikerlS flikjer4 | Flikjer 19 FlikerS FllkerSO fliker6 Is flikjer7 FlikerS fliker?
[None]
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
22/57
Coala
CPAE 525. l O9l Ol ME 19Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
23/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
24/57
25. Image3 - acest component i este spatiul nostru de lucra, pnza pe care noidesenm;26. Text -un component de tip Label cu inscriptia Text:";
27. InsertText - din denumire reiese c anume aici, n componentul de tip Edit,introducem textul dorit spre nserare cu ajutorul SBInsertText;28. SBColor - ne permite setarea culorilor principale prin apsarea pe orice punct depe pnz;29. Imagel - acest component rspunde pentru culoarea de baz;30. Image2 - aici este afiat culoarea auxiliar;31. Image4 - acest component ne creaz palet de culori (10 la numr).
O remarc la componentele enumerate mai sus cu prefixul SB - aceste suntcomponente de tip SpeedButton.
4.2.2. Aranjarea obiectelor pe forma Form2Pe aceast form este situat doar un component - Manual de tip Memo (1).
(gj| Manual for DSP I. a Is] brfflWelcome to the manual foi Damn Simple Paint!In (his short but comprehensive manual I will explain you how to use this simple graphic edilor.
Chaplei I Main menu ^^
Menu File has got: New. Clears the workspace and it become* the same -as at the launching the application, If you haveany unsaved changes you will be prompted lo save them. Open. Let you choose and open your desired graphic file. Be careful, supported formats are limited!Also, if you have any unsaved changes you will be asked to save them. Save. Write your changes in a file. If you are saving lor the firs! lime you will be proposed lo save in afile. After thai, when you will be saving yaui work il will be saved in your desired lile [01 in file whichyouopened lor modification). Save as... You can save al any moment your painling in a sepai ale lile.- Exit Quit the application at any moment. II you have any unsaved change?you will be asked if you 'A1 ant them to be saved or not. Also you can cancel closing the application.
Menu Edit has got only Undo which lets you go back if you made a mistake. Undo tool is specific one numbei of necesary calls to undo last change depends on Instrument used to make last changes. Alsothere is no need loi R edo Undo mechanism is cidic. It means that il you continue to undo you will get tothe state before using the Undo. Warning! If you undo after acc esing File > Hew or Open (and did notchoose Cancel) and will try to save it will not be saved in the file you have been working with. Instead youwill be asked to save it in a new file [bul you can save iri the file you have been working with, it will beoverwritten].
Menu Help has got: Manual. It gives you acces to this manual which you read at the moment, About. Tells you about name, version, license and author of this application.
Chapter II - Editing toolsBrush let you till any chosen area with desired color. Left -click fills it with main color, right-click - withauxiliary colorPen - draw an arbitrary line with main color.Selection - choose an aiea and cut^eopy it where you want. To copy hold Oil key on your keyboard.Warning! When cutting consider the fact that original area will be tilled with auxiliary ooloi aftei you movechosen area.Era&ei - erase whatever yeu want on your painting. Uses auxiliary color for erasing.Line - draw a straight line with main colorRectangle - draw a rectangle with main color.Filled leclangle - the same as previous but fills it with main color.Ellipse - draw an ellipse. Us es main colorFilled ellipse the same as previous but fills using main color. Insert tent lets you insert desired lent. To do that introduce your tet in the Tent field,, click
Fig. 12 Aranjarea componentelor pe forma Form2
Coala
CPAE 525.1 091 01 ME 21Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
25/57
4.2.3. Aranjarea obiectelor pe forma Form3Aici doar un component este invizibil la rularea aplicatiei - Editl. Restul
componentelor sunt vizibile.
1 2 3 4 5Fig. 13 Aranjarea componentelor pe forma Form3
Cifrele din imagine reprezint:
1. Editl - este folosit ca variabila;2. Buttonl -obiect cu inscriptia Yes" pentru a confirma salvarea modificarilor efectate;3. Labell - inscriptia din acest obiect furnizeaza utilizatorului o interogare;4. Button2 -obiect cu inscriptia No" pentru a refuza salvarea modificarilor nesalvate;
5. Button3 - permite de a se intoarce la aplicatie fara a efectua vreo operatie.
4.3. Declararea functiilor i descrierea lorOrice functie, variabila sau constant utilizata in program trebuie declarata
Declararea functiilor se face in modulule header Unitl.h, Unit2.h i Unit3.hFunctiile predefinite nu necesita a fi declarate, deoarece sunt incluse in bibliotecildisponibile in C++ Builder.
tii Warning . kS*1
You have unsaved cha iges. Do you want to save them?; Editl Yes No Cancel
Coala
CPAE 525.1 091 01 ME 22Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
26/57
4.3.1. Funcjia Arc();Metoda Arc(X1, Y2, X2, Y2, X3, Y3, X4, Y4) deseneaz o figura deschis n
form de arc de elips sau de cerc cu ajutorul parametrilor curenti a Pen. Figura nu s
umple cu valoarea lui Brush. Punctele cu coordonatele X1, Y1, X2, Y2 specificcolturile dreptunghiului care circumscrie elipsa. Arcul se ncepe din punctul carreprezint intersectia elipsei cu dreapta, care trece prin central ei i punctul cucoordonatele X3, Y3. Punctul final a arcului se stabilete prin intersectia elipsei cdreapta , care trece prin centrul ei i punctul cu coordonatele X4, Y4. Arcul sedeseneaz mpotriva acului de ceasornic de la punctul initial la punctul final.
4.3.2. Functia CopyRect()
Copie un fragment al imaginii de pe o pnz pe alta.
Clasa TCanvas
Declarareavoid __ fastcall CopyRect (const Windows::TRect SDest,
TCanvas *Canvas,Const Windows::TRect &Source);
Descrierea
Metoda CopyRect deplaseaz fragmentul al imaginii definit de parametralSource de pe pnza sursei de imagine Canvas n regiunea definit de parametral Dea obiectului dat TCanvas. Copierea are loc n regimul stabilit de proprietateaCopyMode.
4.3.3. Functia DrawFocusRect()Deseneaz imaginea dreptunghiului ntr-o forma utilizat pentru afiarea
cadrului de focalizare, cu ajutorul operatiei XOR.Coala
CPAE 525.1 091 01 ME 23Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
27/57
Clasa TCanvas Declarareavoid _ fastcall DrawFocusRect (const Windows::TRect &Rect);
DescriereaMetoda DrawFocusRect deseneaz pe pnz in regiunea Rect imaginea
dreptunghiului intr-o form care de obicei se folosete pentru afiarea cadrului dfocalizare, adic prin puncte. La desenare se folosete operatia XOR, ce permite deterge imaginea dreptunghiului prin desenarea lui repetat.
4.3.4. Functia Ellipse()
Deseneaz elips sau cerc umpluti.
Clasa TCanvas Declarareavoid _ fastcall Ellipse (int X1, int Y1, int X2, int Y2);
DescriereaMetoda Ellipse deseneaz circumferint sau elips cu ajutorul parametrilor
curenti a Pen. Figura se umpl cu valoarea curent a Brush. Punctele (X1, Y1) i(X1, Y2) definesc dreptunghi care circumscrie elipsa. Exemplu Operatorul
Image1->Canvas->Brush->Color = clRed;Image1->Canvas->Ellipse(0, 0, Image1->Width, Image1->Height); va desena
elips circumscris in componentul Imagel i umplut cu culoarearoie.
4.3.5. Functia FillRect
Umple dreptunghiul indicat de pe panza folosind parametral curent Brush.
Clasa TCanvas
Coala
CPAE 525.1 091 01 ME 24Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
28/57
Declarareavoid _ fastcall FillRect (const Windows::TRect &Rect);
DescriereaMetoda Fillrect umpla un dreptunghi de pe panza, indicat de de parametru
Rect, folosind valoarea curenta a Brush. Regiunea care se umpla include partile dsus i de stanga a dreptunghiului, dar nu include partile de dreapta i de jos. Lautilizarea FillRect parametrul Rect deseori este stabilit de functia Rect.
ExempluOperatorulImage1->Canvas->FillRect (Rect(0, 0, Image1->Width, Image1->Height);terge totul de pe panza componentului Imagel, umpland-o cu fon daca el est
setat in proprietatile ale Brush.
4.3.6. Functia FloodFillColoreaza cu peria curenta regiunea inchisa de pe panza, cu culoarea stabilita
Clasa TCanvas
DeclarareaEnum TFillStyle (fsSurface, fsBorder);void _ fastcall FloodFill (int X, int Y, TColor Color,
TFillStyle FillStyle);
DescriereaMetoda FloodFill coloreaz cu peria curent Brush regiunea inchis de pe
pnz, stabilit de culoarea i de punctul initial de colorare (X, Y). Punctul cucoordonatele X i Y reprezint un punct intern aleatoriu al regiunei care se umpl poate fi de o form aleatoare. Hotarul acestei regiuni este stabilit de ansamblul d
Coala
CPAE 525.1 091 01 ME 25Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
29/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
30/57
Metoda LineTo deseneaz pe pnz linia dreapt care se ncepe cu pozitiacurent a stiloului PenPos i se termin cu punctul (X, Y), cu exceptia a acestupunct (X, Y). Pozitia curent a stiloului PenPos se deplaseaz n punctul (X, Y). L
desenare se folosesc setrile curente a stiloului Pen.
4.3.8. Func^ia MoveTo
Modific pozitia curent a stiloului pe cea indicat, fr a desena ceva.
Clasa TCanvas
Declarareavoid _ fastcall MoveTo (int X, int Y);
DescriereaMetoda MoveTo modific pozitia curent a stiloului PenPos la cea indicat de
punctul (X, Y). Aceasta este echivalent cu setarea direct a propriettii PenPos. Ldeplasarea stiloului prin metoda MoveTo nimic nu se deseneaz.
4.3.9. Funcjia RectangleDeseneaz pnz cu stiloul curent un dreptunghi i l umpl cu peria curent
Clasa TCanvas
void _ fastcall Rectangle (int Xl, int Yl, int X2, int Y2);
DescriereaMetoda Rectangle deseneaz pe pnz cu stiloul curent Pen un dreptunghi acrui coltul stng de sus are coordonatele (Xl, Yl), iar cel drept de jos - (X2, Y2)Dreptunghiul este umplut cu peria curent Brush.
DeclarareaCoala
CPAE 525.1 091 01 ME 27Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
31/57
4.3.10. Funcfia ShowMessage
Afieaz ferestre de dialog simple de mesaj.
Fixier header: Dialogs.hpp.
Sintax#include extern PACKAGE void __ fastcall ShowMessage (constAnsiString Msg);
DescriereaIn aplicatii deseori este necesar de afiat diverse ferestre de dialog simple
pentru a transmite utilizatorului unele instructiuni. Cea mai simpl dintre functii dacest gen este ShowMessage, care afieaz o fereastr cu mesaj. Textul mesajulueste stabilit de parametral Msg. Antetul ferestrei coincide cu numele fiierulexecutabil al aplicatiei.
4.3.11. Functia TextOutScrie pe pnz linie de text indicat, incepnd cu pozitia indicat.
Clasa TCanvas
Declararea
void _ fastcall textOut (int X, int Y, const AnsiString Text);
DescriereaFunctia TextOut scrie linie de text Text pe pnz, ncepnd de la pozitia cu
coordonatele (X, Y). Inscriptia se face corespunztor setrilor curente a fontulu
Font. Fundalul inscriptiei este determinat de setrile curente ale periei Brush. Poziticurent PenPos a stiloului pen este deplasat la captul textului afiat.
Coala
CPAE 525.1 091 01 ME 28Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
32/57
Dac culoarea curent periei n momentul afirii a textului se deosebete dela cea a pnzei, atunci textul va fi suprapus unui dreptunghi de aceast culoare. Dadimensiunile lui vor fi exact identice dimensiunii textului.
ExempluOperatorulImage1->Canvas->TextOut (10, 10, s) afieaz text care se pstreaz n
variabila de ir s pe pnza componentului Imagel, ncepnd cu pozitia (10, 10).
4.4. Descrierea fiierului header Unit1.hn conformitate cu principiul ncapsulrii (ascunderii) informatiei, textul
modulului este divizat n dou prti:- Unitl.h - headerul,unde are loc declararea functiilor, claselor, variabilelorutilizate, etc.- Unitl.cpp modulul executiv, care contine descrierea functiilor.
Dup cum se observ, n header sunt incluse directivele preprocesorului
#include, unde se indic preprocesorului ce biblioteci trebuie s includ n programmacrosuri, etc.
Mai jos de directive sunt declarate clasele de componente i functiile. ClasaTForml este divizat n 3 compartimente:- Published. Compartiment deschis ce contine declararea componentelor i ametodelor de prelucrare a lor; tot ce se contine aici, C++ Builder include automat
timpul proiectrii formei.
- Private. Compartiment nchis, declarable fcute aici sunt disponibile numaipentru modulul dat.
- Public. Compartiment deschis, declarable sunt accesibile pentru alte clase saumodule.
Programatorul poate aduga propriile functii, clase, variabile ncompartimentele public i private.
Coala
CPAE 525.1 091 01 ME 29Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
33/57
Dup declararea clasei urmeaz propozitia PACKAGE, inclus automat nheader. Dup ea putem declara tipurile, variabilele, functiile, la care vom avea accedin alte module, dar care nu se include n clasa TForml.
Pentru necesittile mecanismului Undo, dialogurilor de deschidere/salvare afiierelor grafice i a unelor instrumente de desenare declarm componente de tipTBitmap: Graphics::TBitmap *Bitmap = new Graphics::TBitmap;Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap; Graphics::TBitmap*Bitmap2 = new Graphics::TBitmap; Graphics::TBitmap *Bitmap3 = newGraphics::TBitmap; Graphics::TBitmap *Bitmap4 = new Graphics::TBitmap;
Graphics::TBitmap *Bitmap5 = new Graphics::TBitmap; Graphics::TBitmap*Bitmap6 = new Graphics::TBitmap; Graphics::TBitmap *Bitmap7 = newGraphics::TBitmap; Graphics::TBitmap *Bitmap8 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap9 = new Graphics::TBitmap; Graphics::TBitmap*Bitmap10 = new Graphics::TBitmap; Graphics::TBitmap *Bitmap11 = newGraphics::TBitmap; Graphics::TBitmap *Bitmap12 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap13 = new Graphics::TBitmap; Graphics::TBitmap*Bitmap14 = new Graphics::TBitmap; Graphics::TBitmap *Bitmap15 = newGraphics::TBitmap; Graphics::TBitmap *Buffer = new Graphics::TBitmap;
n continuare declarm 2 componente de tip TRect:TRect R,R0;
Ele se ntrebuinteaz de mai multe instrumente care apeleaz la formdreptunghiular.
Mai departe declarm mai multe variabile de tip ntreg:int X0,Y0,X1,Y1;
Toate ele slujesc pentru stabilirea coordonatelor. Urmtoarele variabile suntde tip boolean:bool RBegin = false, REnd = false, RDrag = false, Reset = false;
Coala
CPAE 525.1 091 01 ME 30Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
34/57
Prima variabil este un semnal care arat c s-a nceput sau nu selectareafragmentului. A doua este opus primei - ea semnalizeaz dac s-a terminat sau nselectarea fragmentului. Cea de-a treia, ultima, slujete pentru evitarea aparitiei
semnalizrii ca sunt modificri nesalvate la apelarea la Undo. Valoarea 1 semnificfaptul ca mecanismul Undo a fost resetat.
Concluzien aceast lucrare de curs am elaborat aplicatie pentru editarea imaginilor
(analog Microsoft Paint). Aplicatia creat se numete Damn Small Paint (prescurtaDSP) i este distribuit sub termenii licentei GPL versiunea a 3-a.
Ca mediu de programare am ales C++ Builder versiunea 6. La baza lui stlimbajul de programare C++ Builder, o extindere a C++, un limbaj foarte performani universal, ca are la baz tehnologia RAD (Rapid Application Development)permitnd crearea unor aplicatii prin metoda orientat-obiect, adic este necesarnumai amplasarea obiectelor, cum i am procedat n capitolul 4.2, i apoi descriereevenimentelor, ms relativ complicat (fat de exemplu Delphi), fapt ce nu poate fevitat n cazul unei performante mai mari.
Printre avantajele aplicatiei DSP pot fi mentionati: o interfat simpl iintuitiv, cu instrumente aranjate ergonomic, fr o supra-aglomerare; modificrilnepstrate nu sunt pierdute; posibilitatea de a amna modificrile recente; uninstrument de deplasare/copiere intuitiv.
Printre dezavantajele aplicatiei DSP pot fi mentionati: prezenta bug-urilorcare creaza incomoditati sau chiar forteaza pe utilizatorul de a reporni aplicatiasuporta doar formatul BMP.
Daca comparam cu analoage, programul elaborat este destul de primitiv.Instrumentarul este sarac i nu este deplin, mecanismul de amanare i deplasare
copiere sunt atipice.Luand in consideratie cerintele initiale (capitolul 2) putem spune ca sarcina a
fost indeplinita conform acestora, adica poate ceea ce trebuia sa poata conform
Coala
CPAE 525.1 091 01 ME 31Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
35/57
prevederilor. In plus, scopul principal a lucrarii de curs a fost obtinerea deprinderilopractice de proiectare a unui produs soft.
Analizand obiectivele initiale i rezultatul proiectarii putem concluziona ca
lucrarea este indeplinita corect.
Bibliografie1. "C++ Builder6. . 1. ++", . ., ", 2002, ; 2. "C++ Builder6. . 2. ", . ., ", 2002, ; 3. " C++ Builder 6", . ., ", 2003, ; 4. http://wikipedia.org/ ; 5. http://google.com.
Anexa 1
1. Codul de program al header-ului Forml (Unitl.h) // -------------------------------------------------------------------------------------
#ifndef UnitlH
#define UnitlH // -------------------------------------------------------------------------------------#include #include #include #include #include
Coala
CPAE 525. l 09l Ol ME 32Mod. Coala document. Semnat. Data
http://wikipedia.org/http://wikipedia.org/http://wikipedia.org/http://google.com/http://google.com/http://google.com/http://google.com/http://wikipedia.org/7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
36/57
#include #include #include #include #include // -------------------------------------------------------------------------------------
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap2 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap3 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap4 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap5 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap6 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap7 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap8 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap9 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap10 = new Graphics::TBitmap;
Graphics::TBitmap *Bitmap11 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap12 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap13 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap14 = new Graphics::TBitmap;Graphics::TBitmap *Bitmap15 = new Graphics::TBitmap;Graphics::TBitmap *Buffer = new Graphics::TBitmap; TRectR,R0; int X0,Y0,X1,Y1;bool RBegin = false, REnd = false, RDrag = false, Reset = false;class TForm1 : public TForm{_ published: // IDE-managed Components
TImage *Image1; TImage *Image2; TImage*Image4; TImage *Image3; TSpeedButton*SBBrush; TSpeedButton *SBColor;TOpenPictureDialog *OpenPictureDialog1;TMainMenu *MainMenu1; TMenuItem *File1;
TMenultem *MOpen;TMenultem *Editl;
TMenultem *Undo;TMenultem *Exitl;TSpeedButton *SBPen;TSpeedButton *SBRect;TSpeedButton *SBErase;TSpeedButton *SBRectang;TSpeedButton *SBFillRec;TSpeedButton *SBLine;TMenultem *MSaveAs;TMenultem *Helpl;TMenultem *Aboutl;TSavePi ctureDi alog *S avePictureDi alogl;TSpeedButton *SBEllipse;TSpeedButton *SBFillEllipse;TButton *Width;TEdit *PenWidth;TSpeedButton *SBInsertText;
Coala
CPAE 525.1 091 01 ME 33Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
37/57
TFontDialog *FontDialogl;TEdit *InsertText;TLabel *WidthPen;TLabel *Text;TMenultem *Manuall;TMenultem *Newl;
TMenultem *Savel;TEdit *Edit2;TEdit *Edit3;TEdit *Edit5;TEdit *Edit6;TEdit *Edit7;TEdit *Edit8;TEdit *Edit9;void __ fastcall FormCreate(TObject *Sender);void __ fastcall MOpenClick(TObject *Sender);void __ fastcall ExitlClick(TObject *Sender);void __ fastcall UndoClick(TObject *Sender);void __ fastcall Image4MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
void __ fastcall Image3MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
void __ fastcall SBBrushClick(TObject *Sender);void __ fastcall Image3MouseMove(TObject *Sender, TShiftState Shift,int X, int Y);
void __ fastcall Image3MouseUp(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y);
void __ fastcall MSaveAsClick(TObject *Sender);void __ fastcall AboutlClick(TObject *Sender);void __ fastcall SavelClick(TObject *Sender);void __ fastcall WidthClick(TObject *Sender);void __ fastcall Image3Click(TObject *Sender);void __ fastcall NewlClick(TObject *Sender);
void __ fastcall Manual1Click(TObject *Sender);void __ fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
private: // User declarations public: // User declarations_ fastcall TForm1(TComponent* Owner);
}; // extern PACKAGE TForm1 *Form1; // #endif
2. Codul de program al par^ii executive Form1 (Unit1.cpp) //
#include #pragma hdrstop#include "Unit1.h"#include "Unit2.h"#include "Unit3.h" //
Coala
CPAE 525.1 091 01 ME 34Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
38/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
39/57
// Instalam valorile variabilelor necesareEdit5->Text = 0;Edit2->Text = 0;Edit3->Text = 0;Edit8->Text = 0; //Setam proprietatile necesare a componentelor noastre SavePictureDialog1->DefaultExt=".bmp";
SavePictureDialog1->Filter="Bitmaps (*.bmp)|*.bmp"; OpenPictureDialog1->DefaultExt=".bmp";OpenPictureDialog1->Filter="Bitmaps (*.bmp)|*.bmp"; SBBrush->AllowAllUp = true;SBPen->AllowAllUp = true; SBRect->AllowAllUp = true;
SBErase->AllowAllUp = true; SBLine->AllowAllUp = true; SBRectang->AllowAllUp =true; SBFillRec->AllowAllUp = true; SBEllipse->AllowAllUp = true;SBFillEllipse->AllowAllUp = true; SBInsertText->AllowAllUp = true;SBColor->AllowAllUp = true; SBBrush->GroupIndex = 1; SBPen->GroupIndex = 1;SBRect->GroupIndex = 1; SBErase->GroupIndex = 1; SBLine->GroupIndex = 1;SBRectang->GroupIndex = 1; SBFillRec->GroupIndex = 1; SBEllipse->GroupIndex = 1;SBFillEllipse->GroupIndex = 1; SBInsertText->GroupIndex = 1; SBColor->GroupIndex =1;SBBrush->Hint = "Brush. Left-click for main color, right-click for auxiliary color";SBPen->Hint = "Pen. Draw a free-style line";SBRect->Hint = "Selection. Hold Ctrl to copy";SBErase->Hint = "Eraser. It uses auxiliary color";SBLine->Hint = "Line. Draw a straight line";SBRectang->Hint = "Rectangle. Draw an empty rectangle";SBFillRec->Hint = "Filled rectangle";SBEllipse->Hint = "Ellipse. Draw an empty ellipse";SBFillEllipse->Hint = "Filled ellipse";SBInsertText->Hint = "Insert text";SBColor->Hint = "Pippete. Left-click for main color, right-click for auxiliary color";SBBrush->ShowHint = true;SBPen->ShowHint = true;SBRect->ShowHint = true;SBErase->ShowHint = true;SBLine->ShowHint = true;SBRectang->ShowHint = true;SBFillRec->ShowHint = true;SBEllipse->ShowHint = true;SBFillEllipse->ShowHint = true;SBInsertText->ShowHint = true;SBColor->ShowHint = true;Image1->ShowHint = true;Image2->ShowHint = true;Image4->ShowHint = true;InsertText->ShowHint = true;Image1->Hint = "Main color";Image2->Hint = "Auxiliary color";
Image4->Hint = "Color palette";InsertText->Hint = "Introduce here your text";Edit2->Visible = false;Edit3->Visible = false;Edit5->Visible = false;
Coala
CPAE 525.1 091 01 ME 36Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
40/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
41/57
Bitmap5->Assign(Image3->Picture);Bitmap6->Assign(Image3->Picture);Bitmap7->Assign(Image3->Picture);Bitmap8->Assign(Image3->Picture);Bitmap9->Assign(Image3->Picture);Bitmap10->Assign(Image3->Picture);Bitmap11->Assign(Image3->Picture);Bitmap12->Assign(Image3->Picture);Bitmap13->Assign(Image3->Picture);Bitmap14->Assign(Image3->Picture);Bitmap15->Assign(Image3->Picture);Reset = true;}} // -------------------------------------------------------------------------------------
void __ fastcall TForm1::Exit1Click(TObject *Sender){ // Efectuam inchiderea aplicatiei. Dar inainte de aceasta se va apela la CloseQuery(), ceea ce ne va permit // sa salvam sau nu modificarile sau in genere sa aminam inchidere a aplicatieiClose();} // -------------------------------------------------------------------------------------
void __ fastcall TForm1::UndoClick(TObject *Sender){ // Aici este prezentat mecanismul ciclic Undo.Image3->Picture->Assign(Bitmap);Bitmap->Assign(Bitmap1);Bitmap1->Assign(Bitmap2);Bitmap2->Assign(Bitmap3);Bitmap3->Assign(Bitmap4);Bitmap4->Assign(Bitmap5);Bitmap5->Assign(Bitmap6);Bitmap6->Assign(Bitmap7);Bitmap7->Assign(Bitmap8);Bitmap8->Assign(Bitmap9);Bitmap9->Assign(Bitmap10);Bitmap10->Assign(Bitmap11);Bitmap11->Assign(Bitmap12);Bitmap12->Assign(Bitmap13);Bitmap13->Assign(Bitmap14);Bitmap14->Assign(Bitmap15);Bitmap15->Assign(Image3->Picture); // Variabila Reset a fost deja mentionata. In cazul in care nu s-a efectuat deschiderea // sau crearea unui nofisier variabila data ramine false, ce duce in consecinta la stabilirea // faptului ca daca aplicam mecanismuUndo imaginea va fi considerata ca una care a suferit modificari,
// ce si va fi afisat in antetul aplicatieiif(Reset){
Coala
CPAE 525.1 091 01 ME 38Mod. Coala document. Semnat. Data
Coala
CPAE 525.1 091 01 ME 39Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
42/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
43/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
44/57
}else if (SBRect->Down || SBRectang->Down || SBFillRec->Down || SBEllipse->Down ||SBFillEllipse->Down){if (REnd){ // Suprimam DrawFocusRect precedent
Image3->Canvas->DrawFocusRect(R); // Regimul de incepere a deplasariifragmentuluiif ((X < R.Right) && (X > R.Left) && (Y > R.Top) && (Y < R.Bottom)){
// Instalarea flagurilor RDrag = true; REnd = false; // Memorarea pozitiei intiale fragmentului care este deplasat
R0 = R; // Memorarea imaginiiBuffer->Assign(Image3->Picture); // Setarea culorii a BrushImage3->Canvas->Brush->Color = Image2->Canvas->Brush->Color;}
}else // Setam flagurile care semnalizeaza ca s-a inceput desenarea chenarului a fragmentului. De asemenea // stabilim coordonatele si desenam chenarul propriu-zis{
RBegin = true;REnd = false;R.Top = X;R.Bottom = X;R.Left = Y;R.Right = Y;Image3->Canvas->DrawFocusRect(R);}
}}}
// -------------------------------------------------------------------------------------
void __ fastcall TForm1::SBBrushClick(TObject *Sender){ // Semnalam ca nu au loc nici un fel de operatii cu fragment RBegin = false; RDrag = false;REnd = false; } //
void __ fastcall TForm1::Image3MouseMove(TObject *Sender, TShiftState Shift,int X, int Y)
{ // Blocam posibilitatea de a desena cu tasta dreapta a mouse-ului if (! Shift.Contains(ssLeft)) return; // Desenam linia dreaptaif (SBLine->Down){ // Stergem linia anterioara Image3->Canvas->MoveTo(X0,Y0); Image3->Canvas->LineTo(X 1,Y1); // Desenam linia noua Image3->Canvas->MoveTo(X0,Y0); Image3->Canvas->LineTo(X,Y); // Memoramnoile coordonate a capatului liniei X1 = X; Y1 = Y;} // Desenam linie aleatoareelse if (SBPen->Down)Image3->Canvas->LineTo(X,Y);
Coala
CPAE 525.1 091 01 ME 42Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
45/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
46/57
I // Regimul de deplasara a fragmentului cu restabilirea imaginii sub fragmentul deplasatImage3->Canvas->CopyRect(R,Buffer->Canvas,R); // Daca nu este apasata tasta Ctrl s sterge imagineain RO if (! Shift.Contains(ssCtrl)) Image3->Canvas->FillRect(R0); // Formarea pozitiei noi afragmentului R.Left = R.Left + X - XO; R.Right = R.Right + X - XO; R.Top = R.Top + Y - YO;R.Bottom = R.Bottom + Y - YO; // Memorarea pozitiei cursorului XO = X; YO = Y; // Desenarea fragmentului in pozitia noua
Image3->Canvas->CopyRect(R,Buffer->Canvas,R0); // Desenarea chenaruluiImage3->Canvas->DrawFocusRect(R);}}
} // -------------------------------------------------------------------------------------
void __ fastcall TForml::Image3MouseUp(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y)
I if (SBLine->Down)I // Stergem linia anterioara, schimbam regimul de desenare si cream linia dreapta doritaImage3->Canvas->MoveTo(X0,Y0); Image3->Canvas->LineTo(X 1,Y1);Image3->Canvas->Pen->Mode = pmCopy; Image3->Canvas->MoveTo(X0,Y0);Image3->Canvas->LineTo(X,Y);} else if (SBRect->Down)I // In primul caz suprimam chenarul, in al doilea anuntam ca fragmentul a fost ales if (RDrag)Image3->Canvas->DrawFocusRect(R); if (RBegin && ! REnd)IREnd = true; }} // Instrumental de desenare a dreptungiului a fost realizat cu ajutorului liniilor.
// Aceasta se explica prin complicatiile care au aparut cu instrumental FrameRect(R). // La desenarea cu ajutorul FrameRect nu era posibila suprimarea corecta a DrawFocusRect(R). // La inceput stabilim culoarea Pen (ea determina culoarea liniei), apoi suprimamDrawFocusRect // si in final desenam figura dorita else if (SBRectang->Down)I
Coala
CPAE 525.1 091 01 ME 44Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
47/57
Image3->Canvas->Pen->Color = Image1->Canvas->Brush->Color;Image3->Canvas->DrawFocusRect(R);Image3->Canvas->MoveTo(R.Left,R.Top);Image3->Canvas->LineTo(R.Right,R.Top);Image3->Canvas->LineTo(R.Right,R.Bottom);Image3->Canvas->LineTo(R.Left,R.Bottom);
Image3->Canvas->LineTo(R.Left,R.Top);} // Instrumental desenarii a dreptunghiului umplut este unul simplu si functioneaza asa: // Setam culoarea Pen si Brush (ambele influentiaza instrumental Rectangle. Setam aceleasiculori // deoarece dorim un dreptunghi colorat complet intr-o culoare). // Desenam cu ajutorul Rectangle, stabilind colturile de sus stinga si de jos dreaptaelse if (SBFillRec->Down){
Image3->Canvas->Brush->Color = Image1->Canvas->Brush->Color; Image3->Canvas->Pen->ColoImage1->Canvas->Brush->Color;
Image3->Canvas->Rectangle(R.Left,R.Top,R.Right,R.Bottom);} // Pentru desenarea cercului fara umplere folosim instrumental Arc. Primii 4 parametrii a sai // stabilesccoordonatele dreptunghiului in care se circumscrie arcul. Urmatorii 4 parametrii // stabilesc coordonatelinceputului si sfirsitului arcului. Le stabilim in coltul sting al // dreptunghiului si in asa fel primim inrezultat figura cerculuielse if (SBEllipse->Down){Image3->Canvas->Pen->Color = Image1->Canvas->Brush->Color;Image3->Canvas->DrawFocusRect(R);Image3->Canvas->Arc(R.Left,R.Top,R.Right,R.Bottom,R.Left,R.Left,R.Left,R.Left);} // Cercul umplut desenam cu ajutorul Ellipse. Parametrii sai stabilesc coordonatele // dreptunghiului incare se va circumscrie cerculelse if (SBFillEllipse->Down){Image3->Canvas->Pen->Color = Image1->Canvas->Brush->Color;Image3->Canvas->DrawFocusRect(R);Image3->Canvas->Brush->Color = Image1->Canvas->Brush->Color;Image3->Canvas->Ellipse(R.Left,R.Top,R.Right,R.Bottom);} // La inserarea textului chemam dialogul care stabileste parametrii textului (FontDialog1) // si transmitemparametrii setati spatiului de lucru. Apoi inseram insasi textul cu ajutorul // instrumentului TextOut care
insereaza textul inscris in cimpul Text. Parametrii sai stabilesc // coordonatele de sus stinga adreptunghiului in care va fi inserat textul si sursa textului pe // care dorim sa-l inseramelse if (SBInsertText->Down){if(FontDialog1->Execute()){Image3->Canvas->Brush->Color = Image1->Canvas->Brush->Color;Image3->Canvas->Font->Color=FontDialog1->Font->Color;Image3->Canvas->Font=FontDialog1->Font;Image3->Canvas->Font->Size=FontDialog1->Font->Size;Image3->Canvas->Font->Style=FontDialog1->Font->Style;
Image3->Canvas->TextOut(XO,YO,InsertText->Text); }}
Coala
CPAE 525.1 091 01 ME 45Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
48/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
49/57
} // -------------------------------------------------------------------------------------
void __ fastcall TForm1::About1Click(TObject *Sender){ // Aratam un scurt mesaj cu careva detalii despre aplicatia noastraShowMessage("Damn Simple Paint v0.1\nDistributed under GPL v3 terms\nAlex Fliker Inc.2011"); } // -------------------------------------------------------------------------------------
void __ fastcall TForm1::Save1Click(TObject *Sender){ // Variabila Edit5 cu valoarea 0 semnifica faptul ca nu exista modificari sau modificarile au // fostpastrate, deci in consecinta nu aveam ce pastraif(Edit5->Text.ToInt()==0){ShowMessage("Nothing to save!"); } // Variabila Edit5 cu valoarea 1 semnalizeaza faptul ca exista modificari nesalvate
if(Edit5->Text.ToInt()== 1){ // Variabila Edit2 setata in 1 semnifica faptul ca anterior s-a efectuat salvarea modificarilorif(Edit2->Text.ToInt()==1){ // Variabila Edit1 din Form3 semnifica faptul daca fisierul a fost pastrat intr-un file sau // a fost deschis unfisier. Valoarea 0 semnifica ca fisierul a fost pastrat cu SavePictureDialog1, // 1 - a fost deschis cuOpenPictureDialog1. Corespunzator efectuam pastrarea modificarilor. De // asemenea cream antetulcorespunzator al aplicatiei
if(Form3->Edit 1->Text.ToInt()==0){
Bitmap->Assign(Image3->Picture);Bitmap->SaveToFile(SavePictureDialog1->FileName);Form1->Caption = Edit7->Text + SavePictureDialog1->FileName;}if(Form3->Edit 1->Text.ToInt()== 1){Bitmap->Assign(Image3->Picture);Bitmap->SaveToFile(OpenPictureDialog1->FileName); Form1->Caption= Edit7->Text + OpenPictureDialog1->FileName;
}}
// Variabila Edit2 cu valoarea 0 semnifica ca anterior nu s-a efectuat pastrarea sau nu a fost deschis vreufisier. // Instalam variabila data in 1 pentru a semnaliza ca exista deja fisier in care se vor pastra modificarilulterioare. // Si iarasi cream antet corespunzator pentru aplicatieif(Edit2->Text.ToInt()==0)
{if (SavePi ctureDi al og1->Execute()){Bitmap->Assign(Image3->Picture);Bitmap->SaveToFile(SavePictureDialog1->FileName); Edit2->Text = 1;Form1->Caption = Edit7->Text + SavePictureDialog1->FileName;}}
// Semnalizam ca modificari nesalvate nu mai exista
Coala
CPAE 525.1 091 01 ME 47Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
50/57
Edit5->Text = 0;}} // -------------------------------------------------------------------------------------
void __ fastcall TForm1::WidthClick(TObject *Sender){
// Pentru instrumentul de modificare a grosimii liniei cu care desenam linia arbitrara, // liniadreapta, dreptunghi si cerc cream mecanism de prevenire a caderii aplicatiei. // In cazul in careutilizatorul va seta in loc de o cifra orice alt simbol va fi afisat un mesaj // cu rugaminte de aintroduce un numartry { Image3->Canvas->Pen->Width = PenWidth->Text.ToInt(); }catch(...) { ShowMessage("Please, introduce a number!"); }} // -------------------------------------------------------------------------------------
void __ fastcall TForm1::Image3Click(TObject *Sender){ // La apasarea pe spatiul de lucru, cu conditia ca este activat unul dintre instrumentele enumerate // mai j
se va instala valoarea variabilei care semnalizeaza modificari nesalvate. De asemenea se // va crea antetul corespunzator. Pentru evitarea multiplicarii " - Unsaved changes" a fost instalata // conditia conform careia se verifica daca deja nu a fost adaugat in antet textul dat if(SBRect->Down ||SBRectang->Down || SBFillRec->Down || SBEllipse->Down || SBFillEllipse->Down || SBErase->DownSBBrush->Down || SBInsertText->Down || SBLine->Down || SBPen->Down){Edit5->Text = 1;if(Edit9->Text!=Form 1->Caption)
{Form1->Caption = Form1->Caption + " - Unsaved changes";Edit9->Text = Form1->Caption;
}
}
} // --------------------------------------------------------------------------------------
void __ fastcall TForm1::New1Click(TObject *Sender){
// Verificam daca imaginea a fost modificata sau nu (1 semnifica "da, a fost modificata")if(Edit5->Text.ToInt()== 1){ // Verificam daca imaginea anterior a fost pastrata (1 semnifica "da, a fost pastrata sau deschisa"). // Instalam valoarea variabilei Edit3 in 1 ce semnifica activarea mecanismului aparte de salvareif(Edit2->Text.ToInt()==1){
Edit3->Text = 1;Form3->ShowModal();
// Verificam daca nu a fost apasat butonul Cancel (in acest caz Edit5 devine 1). In caz daca butonul // Cancel a fost apasat imaginea ramine intacta
if(Edit5->Text.ToInt()==0){ Image3->Canvas->Brush->Color = clWhite;
Image3->Canvas->Pen->Color = clWhite;Image3->Canvas->Rectangle(0,0,Image3->Width,Image3->Height);Edit2->Text = 0; Edit5->Text = 0;Form3->Edit1->Text = 0;}
Coala
CPAE 525.1 091 01 ME 48Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
51/57
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
52/57
void __ fastcall TForml::ManuallClick(TObject *Sender)I // Totul e simplu - doar chemam manualul, care reprezinta o forma aparte cu un singur obiect Memo // cu proprietatea ReadOnly setata in trueForm2->ShowModal();} // -------------------------------------------------------------------------------------
void __ fastcall TForml::FormCloseQuery(TObject *Sender, bool &CanClose)I // Modificari exista (1). Se porneste mecanism suplimentar de verificare. if(Edit5->Text.ToInt()== 1)I // In cazul dat (1) a avut loc salvarea anterioara sau deschiderea unui fisier. // Cum deja am mentionatprima variabila in corpul if semnalizeaza faptul ca pastrarea // sau deschiderea unui fisier a fost dejaefectuata dar nu este necesara deschiderea // unui alt fisier (acest mecanism este descris mai detaliat si clain Unit3.cpp).
// Valoarea 1 semnifica ca SaveDialog1 nu este nevoie de activat. Apoi urmeaza chemareadialogului // de salvareif(Edit2->Text.ToInt()==1){Edit3->Text = 1; Form3->ShowModal(); // Verificam daca butonul Cancel a fost sau nu apasat. In caz in care a fost apasat are loc aminarea // inchiderii aplicatiei
if(Edit8->Text.ToInt()==1){CanClose =false; }
} // Verificam daca imaginea a fost anterior salvata (sau a fost deschisa dintr-un fisier). // In cazul dat (0) nu s-a efectuat pastrarea anterioara sau deshiderea unui fisier. // Stabilim valoarea variabilei care semnalizeaza faptul ca salvarea se efectueaza pentru primadata, // dar nu este nevoie de deschis alt fisier (0 semnalizeaza faptul ca este necesar dupa // pastrare de des
fisier. 2 semnifica faptul ca este nevoie de activat SaveDialog1)if(Edit2->Text.ToInt()==0)
{Edit3->Text = 2; Form3->ShowModal();if(Edit8->Text.ToInt()==1)
{CanClose =false; }
}} // Verificam daca imaginea a suferit modificari. In cazul dat (0) modificari lipsesc si aplicatia // este oprit(parametrul CanClose este setat in true, ceea ce permite aplicatiei de a fi inchisa). // De asemenea, inaintde inchiderea aplicatiei are loc eliberarea memoriei datorita golirii // memoriilor-bufer a mecanismuluiUndoif(Edit5->Text.ToInt()==0) {Bitmap->Free();Bitmap1->Free();Bitmap2->Free();Bitmap3->Free();Bitmap4->Free();
Coala
CPAE 525.1 091 01 ME 50Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
53/57
Bitmap5->Free();Bitmap6->Free();Bitmap7->Free();Bitmap8->Free();Bitmap9->Free();Bitmap10->Free();
Bitmap11->Free();Bitmap12->Free();Bitmap13->Free();Bitmap14->Free();
Bitmap15->Free();CanClose = true;}} // -------------------------------------------------------------------------------------
Anexa 21. Codul de program al header-ului Form2 (Unit2.h)
// -------------------------------------------------------------------------------------#ifndef Unit2H#define Unit2H // -------------------------------------------------------------------------------------#include
#include #include #include // -------------------------------------------------------class TForm2 : public TForm{_ published: // IDE-managed Components
TMemo *Manual;void __ fastcall FormCreate(TObject *Sender);
private: // User declarations public:// User declarations
_ fastcall TForm2(TComponent* Owner);}; // -------------------------------------------------------------------------------------extern PACKAGE TForm2 *Form2; // -------------------------------------------------------------------------------------#endif
2. Codul de program al prjii executive Form2 (Unit2.cpp) // -------------------------------------------------------------------------------------#include #pragma hdrstop#include
"Unit2.h" // -------------------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm" TForm2*Form2; // -------------------------------------------------------------------------------------
Coala
CPAE 525.1 091 01 ME 51Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
54/57
_ fastcall TForm2::TForm2(TComponent* Owner): TForm(Owner)
{}
// -------------------------------------------------------------------------------------
Form2->Caption = "Manual for DSP"; Manual->ScrollBars =ssVertical;Manual->ReadOnly = true;} // -------------------------------------------------------------------------------------
Anexa 31. Codul de program al header-ului Form3 (Unit3.h)
// -------------------------------------------------------------------------------------#ifndef Unit3H#define Unit3H
// -------------------------------------------------------------------------------------#include #include #include #include #include #include // -------------------------------------------------------------------------------------Graphics::TBitmap *Bitmap16 = new Graphics::TBitmap;class TForm3 : public TForm{_ published: // IDE-managed Components
TLabel *Label1;TButton *Button1;TButton *Button2;TButton *Button3;TEdit *Edit1;void __ fastcall Button1Click(TObject *Sender);void __ fastcall Button2Click(TObject *Sender);void __ fastcall Button3Click(TObject *Sender);void __ fastcall FormDestroy(TObject *Sender);void __ fastcall FormCreate(TObject *Sender);
private: // User declarations public: // User declarations_ fastcall TForm3(TComponent* Owner);
}; // -------------------------------------------------------------------------------------extern PACKAGE TForm3 *Form3; // -------------------------------------------------------------------------------------#endif
2. Codul de program al parjii executive Form3 (Unit3.cpp) // -------------------------------------------------------------------------------------
void___ fastcall TForm2::FormCreate(TObject *Sender)
{Form2->AutoSize = true;Coala
CPAE 525.1 091 01 ME 52Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
55/57
#include #pragma hdrstop #include "Unit3.h" #include"Unit1.h" // ------------------------------------------------------------------------
#pragma resource "*.dfm"TForm3 *Form3; // -------------------------------------------------------------------------------------
_ fastcall TForm3::TForm3(TComponent* Owner): TForm(Owner)
{ } // -------------------------------------------------------------------------------------
void __ fastcall TForm3::Button1Click(TObject *Sender){ // Verificam daca a fost efectuata pastrare anterioara (1 - da, 0 - nu)if(Form 1->Edit2->Text.ToInt()== 1){ // Verificam daca dorim sa efectuam simpla pastrare (1), sa deschidem un fisier (0) // sau sa sa pastram infisier nou (2)if(Form 1->Edit3->Text.ToInt()==0)
{ // Verificam unde anume sa pastram (0 - in fisierul anterior pastrat, 1 - in fisierul anterior deschis)
if(Edit1->Text.ToInt()==0){Bitmap16->Assign(Form 1->Image3->Picture);Bitmap16->SaveToFile(Form 1->SavePictureDialog1->FileName);}if(Edit1->Text.ToInt()== 1){Bitmap16->Assign(Form 1->Image3->Picture);Bitmap16->SaveToFile(Form 1->OpenPictureDialog1->FileName);}if(Form 1->OpenPictureDialog1->Execute()){
try { Form1->Image3->Picture->LoadFromFile(Form1->OpenPictureDialog1->FileName); }
catch(...) { ShowMessage("Bad picture! Sorry but I am unable to open it."); }}}
if(Form 1->Edit3->Text.ToInt()== 1){if(Edit1->Text.ToInt()==0){Bitmap16->Assign(Form 1->Image3->Picture);Bitmap16->SaveToFile(Form 1->SavePictureDialog1->FileName);}if(Edit1->Text.ToInt()== 1)
{Bitmap16->Assign(Form 1->Image3->Picture);Bitmap16->SaveToFile(Form 1->OpenPictureDialog1->FileName);}}
}if(Form 1->Edit2->Text.ToInt()==0)
#pragma package(smart_init)Coala
CPAE 525.1 091 01 ME 53Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
56/57
{if(Form 1->Edit3->Text.ToInt()==0){
if(Form 1->SavePictureDialog1->Execute()){Bitmap16->Assign(Form 1->Image3->Picture); Bitmap16->SaveToFile(Form1->SavePictureDialog1->FileName); Edit1->Text = 1;if(Form 1->OpenPictureDialog1->Execute()){try { Form1->Image3->Picture->LoadFromFile(Form1->OpenPictureDialog1->FileName);
}catch(...) { ShowMessage("Bad picture! Sorry but I am unable to open it."); }}}}if(Form 1->Edit3->Text.ToInt()==2){if(Form 1->SavePictureDialog1->Execute()){Bitmap16->Assign(Form 1->Image3->Picture);Bitmap16->SaveToFile(Form 1->SavePictureDialog1->FileName);}}}
// Setam vlorile variabilelor din Forml (s-a efectuat pastrarea, nu exista modificari nesalvate // si aplicatia poate fi inchisaForm1->Edit2->Text = 1;Form1->Edit5->Text = 0;
F orm 1->Edit8->Text = 0; // Eliberam memoriaBitmap16->Free(); // Inchidem Form3Form3->Close();} // -------------------------------------------------------------------------------------
void __ fastcall TForm3::Button2Click(TObject *Sender){ if(Form 1->Edit3->Text.ToInt()==0)
{if(Form 1->OpenPictureDialog1->Execute()){try { Form1->Image3->Picture->LoadFromFile(Form1->OpenPictureDialog1->FileName); }catch(...) { ShowMessage("Bad picture! Sorry but I am unable to open it."); }}}
if(Form 1->Edit3->Text.ToInt()== 1){Form3->Close();}
Form1->Edit5->Text = 0;
F orm 1->Edit8->Text = 0; Bitmap16->Free();Form3->Close();} // ---------------------------------
Coala
CPAE 525.1 091 01 ME 54Mod. Coala document. Semnat. Data
Coala
CPAE 525.1 091 01 ME 55
Mod. Coala document. Semnat. Data
7/31/2019 Ministerul Educatiei Al Republicii Moldova Universitatea Tehnica a Moldovei Facultatea de Radioelectronica
57/57
void ___ fastcall TForm3::Button3Click(TObject *Sender){Form1->Edit5->Text = 1; F
orm 1->Edit8->Text = 1;Form3->Close(); } // -------------------------------------------------------------------------------------
void ___ fastcall TForm3::FormDestroy(TObject *Sender){ Bitmap10->Free();} // -------------------------------------------------------------------------------------
void ___ fastcall TForm3::FormCreate(TObject *Sender){ // Setam variabila si proprietatile a componentelor Edit1->Text = 0;Form 1->SavePictureDialog1->DefaultExt=M.bmpM;Form 1->SavePictureDialog1->Filter="Bitmaps (*.bmp)|*.bmp";Form 1->OpenPictureDialog1->DefaultExt=".bmp";Form 1->OpenPictureDialog1->Filter="Bitmaps (*.bmp)|*.bmp";Edit1->Visible = false;Form3->Caption = "Warning!";Form3->AutoSize = true;Form3->Top = 400;Form3->Left = 400;} // -------------------------------------------------------------------------------------
Coala
CPAE 525.1 091 01 ME 56Mod. Coala document. Semnat. Data