Dezvoltarea rapida de aplicatii īn Delphi
5.1 Introducere
Unii specialisti considera Delphi ca fiind versiunea RAD (Rapid Application Development) a mediului de programare Borland Pascal. Unul dintre primele lucruri care trebuie īntelese cānd se lucreaza īntr-un mediu RAD se refera la faptul ca un mediu RAD este o tehnologie de elaborare a solutiilor unor probleme de informatica, bazata be o serie de concepte, componente si protocoale de utilizarea a acestora. Un mediu RAD devine cu adevarat puternic īn māinile unui programator daca acesta stie:
Sa modeleze obiect orientat solutia unei probleme date;
Sa utilizeze suportul Delphi pentru progranmare obiect orientata;
Sa utilizeze componentele Delphi īn procesul de dezvoltare rapida de aplicatii;
Sa reutilizeze propriul effort de dezvoltarea rapida a aplicatiilor Delphi.
Deprinderea de a modela obiect orientat solutia unei probleme se formeaza prin īnsusirea unei metodologii de modelare adecvate si prin mult exercitiu īn contextul respectivei metodologii.
Elementele referitoare la suportul Delphi pentru programarea obiect orientata le-am prezentat īn Capitolele 2 si 3.
Īn acest capitol voi īncerca o incursiune selectiva īn ceea ce īnseamna oferta Delphi de componente si facilitati pentru operationalizarea paradigmei RAD.
Īnainte de a face acest lucru voi īncerca sa explic cititorului ce se īntelege mai precis prin sintagma RAD, strāns legata īn ingineria softului de ideea de prototipizare.
RELAŢIA RAD-PROTOTIPIZARE
Multe modele de dezvoltare a sistemelor soft se bazeaza pe utilizarea, īn anumite momente, a abordarilor iterative (de exemplu, analiza poate implica o serie de sarcini care sunt iterativ repetate pāna cānd modelele analizei sunt considerate complete).
Desi promite un cadru mai realist de dezvoltare a softului o astfel de abordare poate fi usor "descumpanita" de constatarea ca, īn zilele noastre utilizatorul final sau indirect stie sa foloseasca sistemul odata ce acesta a fost livrat, ceea ce creeaza foarte repede īmprejurarile necesare pentru ca acesta (utilizatorul) sa observe eventualele neconcordante īntre cerintele lui fata de sistem si cele implementate efectiv.
Modelul prototipizarii ofera o abordare care, potential, poate contribui la eliminarea omisiunilor si ambiguitatilor care pot exista īn cerinte.
Īn ingineria softului se numeste prototip un sistem sau un sistem partial finisat care este construit rapid pentru a explora anumite aspecte ale cerintelor fata de sistem si care nu este considerat sistem gata de livrarea finala la utilizator.
Un sistem soft aflat īn faza de prototip se deosebeste de un sistem soft gata de livrare prin o serie de omisiuni asumate sau strecurate involuntar īn faza de codificare (implementare).
Astfel ca un prototip are, īn mod obisnuit, o functionalitate incompleta (capacitate limitata de procesare a datelor, performante reduse īn timpul executiei, siguranta īn functionare problematica, etc.).
Dezvoltarea prototipului este posibila efectiv doar utilizānd instrumente pentru dezvoltarea rapida a sistemelor soft (medii vizuale de proiectare, medii vizuale de programare, etc.).
Cānd realizam un prototip putem avea diferite obiective īn minte.
Putem construi un prototip pentru a investiga cerintele utilizator; īn acest scop ne putem focaliza efortul de dezvoltare pe realizarea interfetei cu utilizatorul pentru a stabili ce date asteapta utilizatorul de la sistem si ce date furnizeaza utilizatorul sistemului.
Prototipul poate fi folosit pentru a determina cel mai adecvat gen de interfata.
Putem construi un prototip pentru a stabili daca o platforma de implementare anume poate suporta anumite cerinte de prelucrare.
Īn sfārsit, un prototip ar putea sa urmareasca determinarea eficientei unui limbaj particular, a unui SGBD sau a unei infrastructuri de comunicatie.
O perspectiva mai clara asupra proprietatilor modelului MP putem obtine si din Figura 3.10.
Figura 5.1 Dezvoltarea rapida a softului utilizānd prototipizarea
Asadar, fazele principale necesare pentru a 131e41b pregati un prototip sunt:
Efectuarea unei analize initiale;
Definirea obiectivelor prototipului ;
Specificarea prototipului;
Construirea prototipului;
Evaluarea prototipului si stabilirea schimbarilor de efectuat.
Efectuarea unei analize initiale
Īntreaga activitate de dezvoltare a softului foloseste resurse valoroase. Īnceperea unui exercitiu de prototipizare fara o analiza initiala este posibil sa conduca la o activitate nestructurata si gresit focalizata care va produce un soft proiectat nesatisfacator.
Definirea obiectivelor prototipului
Prototipizarea este de dorit sa aiba obiective clar stabilite. Un exercitiu de prototipizare poate implica multe iteratii, fiecare iteratie avānd drept rezultat o anumita īmbunatatire a prototipului. Pentru participantii la un exercitiu de prototipizare, la un moment dat poate fi dificil de stabilit daca prototipizarea trebuie sau nu sa continue.
Pentru evitarea unei astfel de posibilitati definirea clara a obiectivelor de īndeplinit poate fi de mare folos.
Specificarea prototipului
Desi prototipul nu este realizat īn perspectiva unor operatii de extindere este, evident, important sa aiba un comportament scontat. De aceea, este absolut firesc sa luam īn calcul posibilitatea unor modificari care sa apropie prototipul cāt mai mult de comportamentul scontat.
Aceste modificari sunt mult mai usor de facut daca softul este realizat potrivit unor principii de proiectare profunde.
Construirea prototipului
Deoarece este important ca prototipul sa fie realizat rapid este firesc ca īn aceasta faza sa se apeleze la un mediu de dezvoltare rapida a plicatiilor (Delphi, Visual Basic, Visual C, C-Builder, etc.).
Evaluarea prototipului si stabilirea schimbarilor de efectuat
Motivul principal pentru care realizam un prototip este testarea si explorarea anumitor aspecte ale sistemului soft de realizat. Prototipul trebuie evaluat īn conformitate cu obiectivele identificate la īnceperea exercitiului de prototipizare. Daca obiectivele nu au fost īndeplinite, evaluarea are drept consecinta o serie de modificari care urmaresc apropierea prototipului de obiectivele asumate.
Dupa cum se vede si din Figura 5.1, ultimele trei faze sunt parcurse ciclic, pāna cānd toate obiectivele asumate de exercitiul de prototipizare sunt īndeplinite.
Īn cele ce urmeaza putem prezenta avantajele acestui model dar si o serie de aspecte de care ar trebui sa tinem cont īnainte de a ne "aventura" īn prototipizare.
Avantaje:
Ilustrarea timpurie a functionalitatii sistemului ajuta la identificarea tuturor dezacordurilor dintre specialistul IS si client;
Cerintele client omise au sanse sa fie identificate;
Dificultatile legate de proiectarea interfetei pot fi constientizate si rezolvate;
Realizabilitatea si utilitatea sistemului soft pot fi testate chiar daca, prin natura lui, prototipul este incomplet.
Probleme:
Clientul poate percepe prototipul ca parte a sistemului final dar nu poate īntelege amploarea efortului cerut, uneori, de realizarea formei finale a sistemului, motiv pentru care are senzatia ca acesta (sistemul final) trebuie livrat mai curānd decāt este posibil īn realitate;
Prototipul poate distrage atentia de la aspectele functionale (uneori critice pentru sistem) catre problemele de interfata (fetisizate oarecum de nevoia de a da permanent satisfactie clientului/utilizatorului);
Prototipizarea se bazeaza pe o implicare semnificativa a utilizatorului;
Managementul care se bazeaza pe modelul MP are de luat decizii dificile de-a lungul īntregului ciclu de viata.
Pentru o mai buna īntelegere a ideilor prezentate mai sus, i-ar prinde bine cititorului o lectura atenta a unei carti de initiere īn ingineria softului. Recomand, cartea cu titlul INŢIERE ĪN INGINERIA SISTEMELOR SOFT aparuta la Editura Albastra din Cluj_Napoca, autor D. Bocu.
5.2 Centrul de control al mediului Delphi
Numit de unii si fereastra principala a mediului, centrul de control se compune din urmatoarele sectiuni principale:
Bara meniu
Aceasta sectiune este unul dintre cele mai comune elemente ale aplicatiilor Windows. Īn Delphi, bara meniu asigura mecanisme de acces la toate functiile IDE Delphi, precum: instalarea componentelor, setarea mediului si a optiunilor de compilare, crearea de noi forme si unit-uri, etc. Bara meniu apare imediat sub bara de titlu a ferestrei principale.
Containerul cu acceleratori (Speedbar)
Īn aceasta sectiune a ferestrei principale se gasesc o serie de elemente "shortcut" care permit accesul rapid la 14 dintre cele mai mult utilizate comenzi ale mediului Delphi. Aceste comenzi asigura functiile prezentate īn tabelul de mai jos. Containerul cu acceleratori este situat sub bara meniu īn stānga.
|
Nr. crt. |
Nume accelerator |
Descriere. |
|
Open Project |
Deschide un proiect existent. Echivalenta cu comanda File / Open |
|
|
Save all |
Salveaza toate elementele proiectului actual. Echivalenta cu comanda File / Save All |
|
|
Add file to project |
Adaugarea unui fisier la proiect. Echivalenta cu comanda File / Add to project |
|
|
Select unit from list |
Selectarea unui unit din lista. Echivalenta cu comanda View / Units (Ctrl+F12) |
|
|
Select form from list |
Selectare unei forme din lista. Echivalenta cu comanda View / Forms (Shift+F12) |
|
|
Run |
Compilarea si lansarea īn executie a aplicatiei. Echivalenta cu comanda Run / Run (F9) |
|
|
Pause |
Pauza temporara īn executia programului. Echivalenta cu comanda Run / Program Pause |
|
|
Open File |
Īncarcare proiect, forma, unitate sau fisier text īn editorul de coduri. Echivalenta cu comanda File / Open. |
|
|
Save File |
Salvarea modificarilor efectuate īn fisierele incluse īn proiect. Echivalenta cu comanda File / Save (Ctrl+S). |
|
|
Remove file from project |
stergerea unui unit din proiectul curent. Echivalenta cu comanda File / Remove from project. |
|
|
Toggle Form/Unit |
Comutare īntre forma si unit-ul asociat. Echivalenta cu comanda View/Toggle Form/Unit (F12). |
|
|
New form |
Crearea unei forme vide si a unei noi unitati si adaugarea lor la proiectul curent. Echivalenta cu comanda File / New Form. |
|
|
Trace into |
Executia pas cu pas a programului (inclusiv instructiunile continute īn subprograme). Echivalenta cu comanda Run/Trace into (F7). |
|
|
Step over |
Executia pas cu pas a programului. Subprogramele apelate sunt execuate īntr-un singur pas. Echivalenta cu comanda Run/Step over (F8). |
Paleta de componente
Contine peste 100 de componente utilizate īn dezvoltarea aplicatiilor, care sunt organizate īn mai multe pagini. Componentele pot fi vizuale (de exemplu butoane, linii de editare,etc.) sau nevizuale (de exemplu ferestrele standard de dialog, ceasul sistemului, etc.). O componenta se numeste vizuala daca daca este vizibila īn timpul executiei proiectului īn care apare. O componenta se numeste nevizuala daca īn timpul proiectarii este prezenta ca icoana, iar la executia proiectului nu se vede sau este vizibila doar daca este activata prin metode dedicate. Paleta de componente repartizeaza componentele īn liste astfel:
Lista de componente Standard
Sub aceasta eticheta puteti gasi toate componentele standard pe care le puteti folosi cu Delphi: etichete, meniuri, cāmpuri de editare, butoane de apasare, butoane radio, panouri. Fiecare dintre aceste componente contine o functie de baza ceruta de majoritatea aplicatiilor.
Lista de componente Additional
Sub aceasta eticheta se regasesc cāteva dintre componentele grafice de baza, cum ar fi butoanele de tip BitBtn, tipul Tshape, precum si o serie de alte componente destinate realizarii unor obiective speciale īn aplicatii Delphi (Bevel, ScrollBox, Chart, StaticText, etc.).
Lista de componente Win32
Componentele din aceasta lista utilizeaza accesul pe 32 biti (Windows 95/98 si NT).
Lista contine toate noile componente ale interfetei, puse la dispozitie de mediul Windows 95/98/NT (ImageList- Lista de imagini, ProgressBar- Bara de progres, StatusBar- Linia de stare, TrackBar-Bara de glisare,etc.).
Lista de componente System
Aceasta lista contine cāteva dintre cele mai interesante componente puse la dispozitie de Delphi. Aceasta lista poate fi folosita, de exemplu, pentru a adauga un cronometru aplicatiei Dvs..Tot īn aceasta lista veti gasi un program media player si componente DDE.
Lista de componente Data Access
Componentele din aceasta lista permit realizarea legaturilor spre articolele diferitelor baze de date. Ele sunt componente invizibile (īn timpul executiei nu sunt afisate pe ecran). Dintre componentele din aceasta lista semnalam:
Componenta DataSource - care realizeaza legatura īntre componentele invizibile Table, Query, StoredProc si componentele vizibile de acces spre baze de date (de exemplu TDBGrid).
Componenta Table - Īncarca date dintr-un tabel, care se transmit, prin intermediul componentei DataSource) spre componentele vizuale de acces la baze de date.
Query - Permite utilizarea diferitelor instructiuni SQL.
Lista de componente Data Controls
Componentele din aceasta lista sunt destinate afisarii si editarii articolelor unei baze de date. Sunt componente vizuale, care asigura interfata vizuala īntre utilizator si o baza de date. Dintre componentele din aceasta lista semnalam:
DBGrid - Permite afisarea articolelor unei baze de date sub forma unui tabel (retea). Componenta permite si editarea articolelor bazei.
DBNavigator - Creeaza un panou format din mai multe butoane de comanda, cu ajutorul carora se poate naviga printre īnregistrarile bazei de date.
s.a.m.d.
Lista de componente Dialogs
Componentele acestei liste permit afisarea si utilizarea ferestrelor de dialog, care sunt specifice sistemului de operare Windows 95 (deschideri, salvari, tipariri de fisiere).
Alte liste de componente prezente īn Paleta de componente: Internet, Decision Cube, Qreport, Win3.1, Samples, ActiveX.
Inspectorul de obiecte
Inspectorul de obiecte al mediului Delphi este prevazut cu doua pagini. Pagina Properties permite stabilirea proprietatilor componentelor īn timpul procesului de proiectare. Pagina Events gestioneaza diferitele evenimente legate de componentele aplicatiei.
La rāndul ei, pagina Properties este prevazuta cu doua coloane. Īn coloana din stānga sunt listate denumirile proprietatilor. Īn coloana din dreapta sunt afisate valorile actuale aferente diverselor proprietati. Pentru a atribui o anumita valoare unei proprietati, se efectuiaza un click de mouse pe numele proprietatii. Numele proprietatii fiind selectat, atribuirea unei valori la o proprietate poate fi realizata īn trei moduri diferite:
prin linia de editare aferenta proprietatii;
prin lista derulanta corespunzatoare proprietatii;
prin intermediul unei ferestre de dialog.
Fereastra formei
Īn procesul de dezvoltare a unei aplicatii Delphi, forma ocupa un loc central prin proprietatile si evenimentele cu care se poate asocia. Se poate afirma, pe drept cuvānt, ca īn jurul conceptului de forma se desfasoara partea cea mai importanta a activitatilor specifice unui demers RAD de realizare a unei aplicatii utilizator.
Pentru descrierea formelor se poate apela, potential, la 38 de proprietati, care pot fi stabilite, īn perioada de proiectare prin intermediul inspectorului de obiecte, sau modificate, la nevoie īn timpul executiei aplicatiei.
Totodata, formele pot reactiona la 21 de evenimente. De semnalat faptul ca, majoritatea proprietatilor si evenimentelor formelor sunt identice cu proprietatile si evenimentele altor componente importante pentru realizarea aplicatiilor Delphi. Acesta este motivul pentru care, vom prezenta, mai jos, cele mai importante proprietati si evenimente referitoare la forme.
Proprietatile formelor
Proprietatea ActiveControl
Este utilizata atunci cānd pe forma au fost asezate mai multe componente si se doreste specificarea componentei care trebuie sa fie īn focar īn momentul activarii formei sau la un moment dat īn timp ce forma este activa. Proprietatea poate fi setata atāt prin intermediul inspectorului de obiecte, īn faza de proiectare, cāt si īn timpul executiei programului, printr-o atribuire de tipul:
<Variabila_Forma_gazda>.ActiveControl:=<Nume_Componenta_focalizata>;
Daca forma gazda a componentei memorate īn proprietatea ActiveControl nu este īn focar, atunci īn momentul īn care forma ajunge īn focar, componenta memorata īn Active Control este focalizata.
Proprietatea AutoScroll
Este o proprietate de tip boolean care se refera la modul de utilizare a barelor de defilare atasate formei. Īn cazul īn care pentru aceasta proprietate se stabileste valoarea True, care este si valoarea implicita, atunci īn caz de nevoie, īn executie forma va fi prevazuta cu bare de defilare, daca dimensiunile componentelor "asezate" pe forma depasesc dimensiunile formei. Daca proprietate este setata la False, atunci forma nu va mai fi īnzestrata automat cu bare de defilare. Īn acest caz atasarea barelor de defilare poate fi realizata prin intermediul proprietatilor HorzScrollBar si VertScrollBar.
Proprietatea BorderIcons
Este o proprietate compusa care se refera la existenta, īn linia de titlu a formei, a meniului sistem si a butoanelor de minimizare/maximizare a formei. Aceasta proprietate este de tip multime, valorile posibile fiind:
|
Valoare |
Semnificatie |
|
biSystemMenu |
Forma este prevazuta cu meniul sistem |
|
biMinimize |
Forma este prevazuta cu un buton de minimizare |
|
biMaximize |
Forma este prevazuta cu un buton de maximizare |
|
biHelp |
Daca proprietatea BorderStyle contine valoarea bsDialog sau daca sunt excluse valorile biMinimize si biMaximize, atunci īn bara de titlu apare un semn de īntrebare. Daca se efectuiaza un click pe acest semn, cursorul de mouse va avea forma definita de constanta crHelp. |
Proprietatea BorderStyle
Se refera la stilul chenarului formei. Valorile posibile ale acestei proprietati sunt:
|
Valoare |
Semnificatie |
|
bsDialog |
Chenar neredimensionabil; chenarul standard al ferestrelor de dialog. |
|
bsSingle |
Chenar neredimensionabil, desenat cu o linie simpla |
|
bsNone |
Chenar neredimensionabil, desenat cu linie invizibila |
|
bsSizeable |
Chenar redimensionabil standard |
|
bsToolWindows |
Similar cu bsSingle, dar este prevazut cu un mic titlu |
|
bsSizeToolWin |
Similar cu bsSizeable, dar este prevazut cu un mic titlu |
Proprietatea Caption
Este o proprietate de tip string care specifica un sir de caractere care este afisat īn linia de titlu a formei. Īn cazul componentelor aceasta proprietate desemneaza eticheta atasata componentei. Īn acest ultim caz, litera precedata de caracterul "&" este litera de selectie a componentei, care va apare subliniata (Componenta poate fi selectata prin combinatia Alt+Litera subliniata).
Proprietatile ClientHeight si ClientWidth
Acestea sunt doua proprietati de tip integer care specifica īnaltimea si, respectiv, latimea zonei client a formei. Aceste valori sunt specificate īn puncte. Zona client este aria utilizabila īn interiorul chenarului formei.
Proprietatea Color
Proprietatea este de tip TColor=longint, stabilind culoarea de fond a formei. Pentru initializarea valorica a acestei proprietati pot fi folosite constante predefinite sau valori returnate de functia RGB. Valoarea implicita este clBtnFace . Daca pentru proprietatea ParentColor corespunzatoare unei componente se ia valoarea True , si se modifica valoarea proprietatii Color corespunzatoare formei proprietar al componentei, atunci se va modifica automat si culoarea componentei.
Proprietatea Ctl3D
Fiind de tip boolean, aceasta proprietate stabileste aspectul tridimensional al formei pentru True si aspect bidimensional pentru False. Valoarea implicita este True. Daca pentru proprietatea ParentCtl3D corespunzatoare unei componente se ia valoarea True, si se modifica valoarea proprietatii Ctl3D corespunzatoare formei proprietar al componentei, atunci se va modifica automat si aspectul componentei.
Proprietatea Cursor
Stabileste imaginea utilizata pentru reprezentarea cursorului de mouse. Pentru selectarea unei imagini se vor folosi diferitele constante predefinite asociate. Valoarea implicita este crDefault.
Proprietatea Enabled
si aceasta proprietate este de tip boolean si se refera la accesibilitatea formei sau componentei.Daca proprietatea este setata la True, care este si valoarea implicita, atunci forma sau componenta va reactiona la diferite evenimente pe care este abilitata sa le trateze. Daca se alege varianta False, forma sau componenta este inhibata. Valoarea acestei proprietati se modifica, de regula, īn timpul executiei. Astfel, daca la un moment dat, un anumit buton trebuie dezactivat, proprietatea Enabled a acestuia este setata la False. Evident, la nevoie, componenta dezactivata poate fi reactivata.
Proprietatea compusa Font
Stabileste fontul utilizat īn textele care sunt afisate pe obiectul Canvas al formei, precum si la textele aferente componentelor asezate pe forma. Fontul utilizat poate fi definit īn perioada de elaborare a proiectului, īnsa poate fi modificat si īn timpul executiei, prin redefinirea subproprietatilor Color, Height, Name, Pitch, Size, sau Style.
Astfel ca, daca este necesar, sunt absolut plauzibile setarile de mai jos.
Font.Color:=clBlue;
Font.Size:=18;
Font.Style:=[fsBold];
Proprietatea FormStyle
Stabileste stilul formei. Valorile posibile ale acestei proprietati sunt urmatoarele:
|
Valoare |
Semnificatie |
|
fsNormal |
Forma creaza o fereastra normala (nici MDI copil, nici MDI parinte). Valoare implicita. |
|
fsMDIChild |
Forma creeaza o fereastra MDI copil. |
|
fsMDIForm |
Forma creeaza o fereastra MDI parinte. |
|
fsStayOnTop |
Forma va fi afisata deasupra celorlaltor forme utilizate īn proiect. |
Propriettile Height si Width
Aceste proprietati de tip integer stabilesc īnaltimea, respectiv, latimea formei sau componentei, īn puncte care include si dimensiunile rezervate chenarelor.
Proprietatea Hint
Proprietate de tip string, specifica un text explicativ care va fi afisat atunci cānd cursorul de mouse este asezat deasupra unei forme sau componente. Acest text este afisat numai atunci cānd proprietatea ShowHint (de tip boolean) este setata la True.
Proprietatile compuse HorzScrollBar si VertScrollBar
Stabilesc daca forma este prevazuta sau nu cu bare de defilare orizontale si/sau verticale. Subproprietatile barelor de defilare sunt prezentate īn tabelul urmator:
|
Subproprietate |
Descriere |
|
Increment (O valoare cuprinsa īntre 1 si 32767, valoarea implicita este 8) |
Stabileste distanta de deplasare a componentei sau imaginii din forma īn momentul īn care utilizatorul efectueaza un click pe unul din butoanele ci sageti situate īn extremitatile barelor de defilare. |
|
Margin (De tip word, valoarea implicita 0) |
Stabileste momentul de afisare a barei de defilare. Aceasta proprietate determina numarul minim de puncte care separa componentele formei si muchia formei. Īn executie, daca o componenta ajunge sa fie la o distanta mai mica decāt Margin puncte de la muchie si daca proprietatea Visible este setata la True, atunci se afiseaza o bara de defilare. |
|
Position (De tip integer, valoarea implicita 0) |
Comunica pozitia curenta a cursorului glisat al barei de defilare. Valoarea acestei proprietati este actualizata automat, īn timpul executiei aplicatiei. |
|
Range (De tip integer, valoarea implicita 0) |
Dimensiunea maxima de defilare, exprimata īn puncte. La bara de defilare verticala aceasta valoare trebuie sa fie mai mare decāt valoarea proprietatii Height (īn caz contrar, bara verticala este invizibila). La bara de defilare orizontala aceasta valoare trebuie sa fie mai mare decāt valoarea proprietatii ClientWidth (Īn caz contrar, bara orizontala este invizibila). |
|
Tracking (De tip boolean, valoarea implicita false) |
Daca se alege valoarea True, imaginea / componenta din forma se deplaseaza īmpreuna cu butonul de glisare tras de utilizator. Daca se alege valoarea False, imaginea ramāne statica cāt timp utilizatorul trage butonul de glisare, adica actualizarea imaginii defilate are loc numai īn momentul eliberarii butonului glisant al barei de defilare. |
|
Visible (De tip boolean, valoare implicita True) |
Se refera la vizibilitatea barei de defilare. Daca se alege valoarea True si daca componenta se afla la o distanta mai mica decāt Margin puncte de muchia formei, atunci bara de defilare devine vizibila. |
Proprietatea Icon
Specifica simbolul grafic care va fi utilizat cānd forma este minimizata.
Proprietatea KeyPreview
De tip boolean, se refera la modul de gestiune al evenimentelor referitoare la tastatura (OnKeyDown, OnKeyPress, OnKeyUp). Daca pentru aceasta proprietate se alege valoarea True, atunci evenimentele referitoare la tastatura sunt gestionate de forma actuala, nu de componentele asezate pe forma, chiar daca īn momentul respectiv īn focar se afla o componenta. Astfel ca, daca, de exemplu, forma contine un buton de comanda care este īn focar, daca utilizatorul apasa o tasta, evenimentul aferent va fi gestionat de procedurile formei, nu de procedurile butonului.
Proprietatile Left si Top
Stabilesc abscisa, respectiv ordonata :
-formei fata de coltul stānga sus al ecranului;
-componentei fata de coltul stānga sus al formei proprietar;
-componentei fata de coltul stānga sus al unei componente de tip container.
Valorile acestor proprietati sunt date īn puncte.
Proprietatea Menu
De tip TmainMenu , stabileste componenta de tip meniu principal care este utilizata de forma la un moment dat. Īn perioada de elaborare a proiectului aceasta proprietate este initializata automat cu prima componenta MainMenu asezata pe forma. Īn timpul executiei aceasta valoare poate fi modificata, printr-o instructiune de atribuire, ceea ce īnseamna ca o forma poate sa foloseasca mai multe componente MainMenu.
De analizat si exemplul de mai jos.
procedure TForm1.SchimbMeniu_1;
begin
Menu:=MainMenu2;
end
procedure TForm1.SchimbMeniu_2;
begin
Menu:=MainMenu1;
end
Proprietatea PopupMenu
De tip TPopupMenu, identifica componenta de meniu flotant care este utilizata de forma la un moment dat. Se mentioneaza faptul ca aceasta proprietate nu este initializata automat cu componenta PopupMenu asezata pe forma. Īn executie valoarea acestei proprietati poate fi modificata printr-o instructiune de atribuire , astfel ca o forma poate sa folosessca, īn functie de context, mai multe componente PoppupMenu.
Proprietatea Name
De tip string, este utilizata pentru atribuirea unui nume( ca variabile obiect) unei forme sau componente. Atribuirile de nume sunt realizate automat de sistemul Delphi, īnsa aceste denumiri predefinite (Form1,Form2,.Button1,Button2,.,etc.), nu īntotdeauna pe gustul oricarui programator, pot fi modificate, codul aplicatiei putānd fi personalizat si devenind astfel mai lizibil.Daca proprietatea Caption nu a fost īnca modificata si daca se atribuie un nou nume unei forme, atunci proprietatea Caption va fi modificata automat la noul nume.
Proprietatea ParentFont
De tip boolean, se refera la modul de selectie al fontului corespunzator unei componente. Daca se alege valoarea True , atunci fontul utilizat de o componenta este identic cu fontul utilizat de forma proprietar. Daca se alege varianta False, atunci fontul componentei nu va depinde de fontul formei proprietar (adica proprietatea Font a componentei este prioritara fata de proprietatea Font a formei gazda. Valoarea implicita a acestei proprietati este False.
Proprietatea Position
Se refera la dimensiunea si locul de plasare a formei īn timpul executiei, fata de dimensiunea si locul de amplasare care au fost utilizate īn timpul proiectarii. Valorile posibile ale acestei proprietati sunt urmatoarele:
|
Valoare |
Semnificatie |
|
poDesigned |
Dimensiunea si pozitia formei īn executie coincid cu dimensiunea si pozitia formei utilizata īn timpul proiectarii. Valoare implicita. |
|
poDefault |
Nu se conserva nici dimensiunea, nici pozitia initiala a formei; noile valori sunt determinate de sistemul Delphi. |
|
poDefaultPosOnly |
Īn executie va fi conservata dimensiunea formei, īnsa pozitia acesteia va fi stabilita de sistemul Delphi. |
|
poDefaultSizeOnly |
Īn executie va fi conservata pozitia formei, īnsa dimensiunea acesteia va fi stabilita de sistemul Delphi. |
|
poScreenCenter |
La executie se conserva dimensiunea formei, īnsa aceasta va fi plasata centrat pe ecran. |
Proprietatea PrintScale
Se refera la modul de tiparire a formei, mai precis la modul de alegere a scalei utilizate īn procesul de tiparire. Valorile posibile ale acestei proprietati sunt :
|
Valoare |
Semnificatie |
|
poNone |
Nu se face nici o scalare speciala, astfel īncāt forma tiparita la imprimanta poate sa se deosebeasa de forma afisata pe ecran |
|
poProportional |
Se va utiliza o scala prin care dimensiunea formei tiparite va fi aprozimativ egala cu dimensiunea formei afisate pe ecran (WYSIWYG). Valoare implicita. |
|
poPrintToFit |
Forma este tiparita īn asa fel īncāt se conserva proportiile afisate pe ecran, dar dimensiunea de tiparire este determinata īn asa fel īncāt forma va īncape pe foaia utilizata. |
Proprietatea Scaled
De tip boolean, stabileste modul de dimensionare a formei, īn functie de proprietatea PixelsPerInch. Daca se alege valoarea True, care este si valoarea implicita, atunci proprietatea PixelsPerIInch stabileste numarul de puncte care va corespunde īntr-un inch al formei. Daca se alege valoarea False, atunci valoarea specificata īn proprietatea PixelsPerInch va fi neglijata.
Proprietatea Tag
De tip longint, este utilizata atāt īn cazul formelor cāt si īn cazul componentelor. Cu ajutorul acestei proprietati, se poate adauga o valoare formelor sau componentelor. Aceasta proprietate nu are o semnificatie predefinita, putānd fi utilizata īn diverse scopuri de catre programatori. Prezentam , īn continuare un exemplu de utilizare a proprietatii Tag.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
B:TButton;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
B:=Button1;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
B:=Button2;
end
procedure TForm1.FormClick(Sender: TObject);
begin
if Assigned(B)
then
case B.Tag of
1: Form1.Caption:='Butonul 1...';
2: Form1.Caption:='Butonul 2...';
end;
end;
end
Proprietatea Visible
De tip boolean, se refera la vizibilitatea formei. Daca se alege valoarea True, forma va fi vizibila īn timpul executiei. Daca se alege valoarea False, forma va fi invizibila īn timpul executiei. Proprietate Visible a unei forme poate primi valoarea True si prin intermediul metodelor Show si ShowModal.
Proprietatea WindowMenu
De tip TMenuItem, este utilizata numai īn cazul formelor MDI parinte (al caror stil este fsMDIForm). Cu ajutorul acestei proprietatī se desemneaza un element de meniu din linia meniului principal, la care sistemul Delphi va adauga automat meniul Window (lista ferestrelor copil deschise īn fereastra parinte, cu indicarea ferestrei active).
Proprietatea WindowState
Se refera la modul de afisare pe ecran a formei. Valorile posibile ale acestei proprietati sunt urmatoarele:
|
Valoare |
Semnificatie |
|
wsNormal |
Forma este afisata īn stare normala; nici minimizata, nici maximizata. Valoare implicita. |
|
wsMinimized |
Forma este afisata īn stare minimizata. |
|
wsMaximized |
Forma este afisata īn stare maximizata. |
Evenimentele asociate formelor
Evenimentul OnActivate
Acest eveniment apare īn momentul īn care o forma ajunge īn focar (De exemplu, utilizatorul lucreaza simultan cu mai multe forme si efectuiaza un click de mouse pe una dintre ele, ceea ce determina ajungerea respectivei forme īn focar). Īn cazul īn care proiectul contine o singura forma, īn momentul lansarii īn executie a proiectului forma respectiva va fi automat activata. Proceduta atasata acestui eveniment are urmatorul prototip:
procedure TForm1.FormActivate(Sender: TObject);
begin
end
De observat faptul ca, īn cazul ferestrelor a caror proprietate FormStyle are valoarea fsMDIChild , evenimentul onActivate apare numai atunci cānd focarul este transferat dintr-o fereastra copil īntr-o alta fereastra copil.
Evenimentul OnClick
Se produce atunci cānd utilizatorul unui program efectuiaza un click de mouse pe o zona libera a formei sau pe o componenta care īn momentul respectiv este inhibata. Procedura atasata acestui eveniment are prototipul urmator:
procedure TForm1.FormClick(Sender: TObject);
begin
end
Evenimentul OnDblClick
Apare atunci cānd utilizatorul efectuiaza un dublu click de mouse pe o zona libera a formei sau pe o componenta care īn momentul respectiv este inhibata. Procedura atasata acestui eveniment are prototipul urmator:
procedure TForm1.FormDblClick(Sender: TObject);
begin
:
end
Evenimentul OnCloseQuery
Apare īn momentul īn care utilizatorul este autorul unei actiuni prin care semnaleaza faptul ca doreste sa īnchida forma. Astfel de actiuni sunt: apelarea metodei Close, efectuarea unui click pe butonul de īnchidere, efectuarea unui dublu click pe meniul sistem al formei sau apelarea comenzii Close din meniul sistem.
Procedura atasata acestui eveniment are urmatorul prototip:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
end
Daca īn aceasta procedura i se atribuie parametrului variabil CanClose valoarea True, forma poate fi īnchisa si īn continuare se lanseaza īn executie procedura atasata evenimentului OnClose. Daca variabile CanClose i se atribuie valoarea False, forma nu poate fi īnchisa.
Evenimentul OnClose
Se produce īn momentul īn care utilizatorul a cerut īnchiderea formei. El se declanseaza dupa evenimentul OnCloseQuery. Procedura atasata are prototipul:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
end
Parametrul variabil Action stabileste daca forma trebuie sa fie īntr-adevar īnchisa. Valorile posibile ale acestui parametru sunt urmatoarele:
|
Valoare |
Semnificatie |
|
caNone |
Nu se autorizeaza īnchiderea ferestrei |
|
caHide |
Forma nu este īnchisa ci doar ascunsa. Īn continuare utilizatorul poate sa aiba acces la aceasta forma si poate sa ceara reafisarea formei cu metoda Show. Aceasta valoare este valoarea implicita īn cazul formelor care au stil diferit de fsMDIChild. |
|
caFree |
Forma este īnchisa si memoria alocata formei este eliberata. |
|
caMinimize |
Forma nu este īnchisa, doar minimizata. Aceasta valoare este valoarea implicita īn cazul formelor care au stilul fsMDIChild. |
Īn exemplul de mai jos se poate urmari un mod de tratare a celor doua evenimente.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
end;
var
Form1: TForm1;
implementation
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('Se inchide forma?', mtConfirmation, [mbOk, mbCancel],
0)=mrCancel
then CanClose:=False
else CanClose:=True;
end
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Se inchide forma(Y/N?', mtConfirmation, [mbYes, mbNo],
0)=mrYes
then Action:=caFree
else Action:=caNone;
end
end
Evenimentul OnCreate
Apare īn momentul īn care se creeaza forma (adica la prima executie a formei). De regula se foloseste pentru initializarea proprietatilor formei si a componentelor asezate pe aceasta. Procedura atasata evenimentului OnCreate are urmatorul prototip:
procedure Tform1.FormCreate(Sender: TObject);
begin
end
De semnalat faptul ca īn procesul de creare a unei forme, daca proprietatea de vizibilitate a acesteia (Visible) este True, se vor declansa urmatoarele evenimente, īn ordinea specificata mai jos:
OnCreate
OnShow
OnActivate
OnPaint
Evenimentul OnDeactivate
Apare īn momentul īn care forma urmeaza sa piarda focarul, altfel spus atunci cānd aplicatia foloseste mai multe forme si utilizatorul printr-un click de mouse activeaza alta forma. De mentionat faptul ca trecerea de la o aplicatie la alta (nu la o alta forma a aplicatiei curente) poate fi prelucrata prin evenimentul OnDeactivate atasat obiectelor de tip Tapplication.
Procedura atasata evenimentului OnDeactivate al formei are prototipul:
procedure TForm1.FormDeactivate(Sender: TObject);
begin
end
Evenimentul OnDestroy
Apare īn momentul īn care se distruge forma actuala (adica se elibereaza toate resursele atasate formei). Procedura atasata acestui eveniment are prototipul urmator:
procedure TForm1.FormDestroy(Sender: TObject);
begin
end
Īn aceasta procedura se vor distruge toate acele obiecte, care au fost create īn metoda de tratare a evenimentului OnCreate.
Evenimentul OnHide
Apare īn momentul īn care forma este ascunsa, adica proprietatea de vizibilitate a formei Visible este initializata cu valoarea False. Procedura atasata acestui eveniment are urmatorul prototip:
procedure TForm1.FormHide(Sender: TObject);
begin
end
Evenimentul OnShow
Apare īn momentul īn care forma este afisata, adica proprietatea de vizibilitate a formei (Visible) este initializata cu valoarea True. Procedura atasata acestui eveniment are prototipul urmator.
procedure TForm1.FormShow(Sender: TObject);
begin
end
Evenimentul OnPaint
Este declansat īn momentul īn care unele zone ale formei curente trebuie sa fie redesenate (de exemplu datorita faptului ca unele zone ale formei au fost acoperite temporar de alte ferestre). Procedura atasata acestui eveniment are prototipul urmator:
procedure TForm1.FormPaint(Sender: TObject);
begin
end
Evenimentul OnResize
Este declansat īn momentul īn care forma a fost redimensionata de utilizator. De regula īn procedura aferenta acestui eveniment se va realiza reasezarea si redimensionarea componentelor asezate pe forma. Se mentioneaza faptul ca acest eveniment este declansat si īn procesul de creare a formei. Procedura atasata acestui eveniment are prototipul:
procedure TForm1.FormResize(Sender: TObject);
begin
end
Alte evenimente asociate formei vor fi prezentate īn contexte īn care este oportuna o discutie mai ampla si mai precisa asupra lor.
Fereastra de editare a codului
Īn momentul initial, fereastra de editare a codului se afla īn spatele ferestrei formei, fiind vizibila partea ei inferioara, deci poate fi activata oricānd printr-un click de mouise. Īn aceasta fereastra se introduce codul programului, care stabileste modul de tratare a diferitelor evenimente. Fereastra este un editor ASCII complet; pot fi deschise simultan mai multe ferestre de cod. Continutul lor este salvat īn diferite unit-uri. Extensia fisierelor de unitati este īntotdeauna .PAS, prin care se semnaleaza faptul ca aceste fisiere contin un anumit cod scris īn limbajul Object Pascal. Formatul acestor fisiere este īntotdeauna ASCII.
La intrare īn Delphi sau la crearea unui nou proiect, editorul de cod contine textul sursa aferent unitatii principale. Numele implicit al fisierului unitatii principale este Unit1.PAS si are urmatorul continut:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
public
end;
var
Form1: TForm1;
implementation
end
5.3 Cum se foloseste un mediu vizual de programare?
Dupa ce am vazut ce īnseamna dezvoltarea rapida de aplicatii, dupa ce ne-am format o idee despre "potentialul de asistare" al mediului Delphi, dupa ce, īn sfārsit, am īnteles cāte ceva despre suportul oferit de Object Pascal pentru a realiza sisteme soft, merita si chiar cred ca este folositor sa vedem, din perspectiva pragmatica, cum se foloseste un mediu vizual de programare.
Cu referire directa la Delphi, am putea sa luam īn considerare urmatoarele:
Odata adaugate elementele grafice ale interfetei aplicatiei cu utilizatorul, programatorul trebuie sa adauge cod pentru a da raspunsuri evenimentelor specifice ale aplicatiei. Īn Delphi acest cod seamana atāt de bine cu codul Pascal incāt orice programator cu abilitati īn scrierea de cod Pascal devine rapid un aprogramator abil īn Delphi daca rezolva, tot rapid, niste probleme de mentalitate formata īn Pascalul clasic. Este vorba despre obiect orientare si de o serie de noutati īn materie de sintaxa īn zona obiect orientata, cu predilectie.
Am lasat la urma, dar, poate ca aceasta problema trebuie rezolvata prima,
chiar si īntr-un mediu vizual de programare, īnainte de a ne repezi īn tastatura, trebuie sa vedem cāt de clare sunt o serie de probleme referitoare la:
-cerintele fata de aplicatie;
-structura interfetei;
-tipul de modularizare ales;
-structura algoritmilor critici folositi.
Alinierea la paradigma RAD ne mai atrage atentia si asupra altor aspecte demne de luat īn seama, īnainte de a porni "voiniceste" la scris de cod DELPHI.
|