You are on page 1of 50

UTCB

UNIVERSITATEA TEHNICA DE CONSTRUCTII


BUCURESTI

&DPHOLD*DYULO 9LRUHO3HWUHKXú

UTILIZAREA

CALCULATOARELOR

/HFLLSHQWUXVWXGHQLLDQXOXL,

1
UTCB

0. Introducere

3DJLQLOHGHIDUHSUH]LQWSDUWHGLQOHFLLOHGHSURJUDPDUHLQXWHGHDXWRUL
OD)DFXOWDWHDGH,QVWDODLLGLQFDGUX87&%2YDULDQWVFULVPDLH[WLQV
DDSUXWvQDQXOODHGLWXUD87&%XQGHDXPDLIRVWFRDXWRUL$QFD
,RUGQHVFXúL&HFLOLD5DGX3DUWHDUHSURGXVDLFLDIRVWvQvQWUHJLPHVFULV
GH&*DYULOúL93HWUHKXú

2
UTCB

3URJUDPDUHDRULHQWDWVSUHRELHFWH

1. Tipul obiect în Pascal

'HFODUDUHDúLXWLOL]DUHDWLSXOXLRELHFW

ÌQFHSkQGFXYHUVLXQHDDPHGLXOXL7XUER3DVFDOVDLQWURGXVQRLXQHD
GHRELHFWSULQDQDORJLHFXQRLXQHDGHFODVGLQ&8QWLSRELHFWUHSUH]LQWR
VWUXFWXUFDUHFRQLQHGDWHGHRULFHWLSúLPHWRGHGHSUHOXFUDUHDORUSURFHGXULúL
IXQFLL8QWLSRELHFWDSDUHDVWIHOFDRJHQHUDOL]DUHDQRLXQLLGHUHFRUGSHOkQJ
GDWHDSUkQGúLPHWRGH
Sintaxa de declarare a unui obiect este:
Type numele_obiectului=OBJECT
câmp_1 : tip_1; {date publice ale obiectului}
câmp_2 : tip_2;
...
procedure nr1(argumentele procedurii);^PHWRG
SXEOLF`
...
IXQFWLRQIXQFWLD DUJXPHQWHOHIXQFLHL WLSXOBIXQFLHL
...
PRIVATE
câmp_n:tip_n; ^GDWSULYDWHXWLOL]DELOGLUHFWGRDU
de metodele obiectului};
procedure ..... ^SURFHGXUSULYDWHDSHODELOGRDUGH
metodele obiectului}
END;
3URSULHWDWHDRELHFWHORUGHDFXSULQGHDWkWWLSXULGHGDWH FkW úL PHWRGH VH
QXPHúWH încapsulare.
8QXWLOL]DWRUDORELHFWXOXLSRDWHVapeleze metodele publice, VPRGLILFH
valorile variabilelor publice sau VH[WLQGRELHFWXO3ULQDFHDVWH[WLQGHUHQRXO
RELHFWYDDYHDWRDWHFkPSXULOHúLPHWRGHOHFHOXLYHFKLSOXVFHOHDGXJDWHSULQ
H[WLQGHUH$FHDVWSURSULHWDWHDRELHFWHORUVHQXPHúWH mostenire. De asemenea,
SULQH[WLQGHUHXQXWLOL]DWRUSRDWHVUHGHILQHDVFXQHOHPHWRGHPRúWHQLWHDGLF
V OH SVWUH]H QXPHOH GDU V OH VFKLPEH FRUSXO GH LQVWUXFLXQL $FHDVW
SURSULHWDWHVHQXPHúWHpolimorfism.
'LQWUH PHWRGHOH RELHFWXOXL GRX DX VHPQLILFDLH VSHFLDO XQD FDUH VH
QXPHúWH constructor úL FDUH VH DSHOHD] OD FUHDUHD RELHFWXOXL DYkQG UROXO GH D
IDFHLQLLDOL]ULDOHGLYHUVHORUFRPSRQHQWHDOHRELHFWXOXLLDUFHDODOWPHWRGVH
QXPHúWH destructorúLVHDSHOHD]ODWHUPLQDUHDOXFUXOXLFXRELHFWXODYkQGUROXO
de a elibera memoria de datele ocupate de obiect. Aceste metode pot lipsi, dar
GDF vQ RELHFW VH XWLOL]HD] GDWH GLQDPLFH DWXQFL HVWH QHYRLH GH HOH 'H
PHQLRQDWFXQRELHFWSRDWHDYHDPDLPXOLFRQVWUXFWRULúLGHVWUXFWRUL
3
UTCB
,Q 7XUER 3DVFDO XQ RELHFW HVWH XQ WLS GH GDW 3HQWUX DO XWLOL]D WUHEXLH
create variabile de tipul obiectului respectiv. Aceste variabile se numesc LQVWDQH
DOHRELHFWXOXLúLVHGHFODUvQVHFLXQHDvar, ca mai jos:
type obiectul_meu=object
...
end;

Var a,b,c:obiectul_meu;
&RUSXO GH LQVWUXFLXQL  SHQWUX ILHFDUH PHWRG D RELHFWXOXL VH VFULH GXS
descrierea obiectului, înainte de corpul programului. De obicei un obiect este
GHVFULVvQWUXQXQLW,QDFHVWFD]FRUSXULOHGHLQVWUXFLXQLDOHPHWRGHORUVHSXQvQ
zona IMPLEMENTATION a unitului.
Referirea la un câmp al obiectului se face prin: InstantaObiect.câmp, iar
UHIHULUHDODRPHWRGVHIDFHSULQInstantaObiect.metoda.
$YHPvQFRQWLQXDUHXQH[HPSOXGHGHFODUDUHúLXWLOL]DUHGHRELHFWH

Program exemplu; function rezolvitor.e_rezolvat:boolean;


type matr=array[1..2,1..2] of real; begin e_rezolvat:=indicator;
vect=array[1..2] of real; end;
sir_explicativ=array[1..5] of string[40];
procedure rezolvitor.citeste_date;
rezolvitor=OBJECT var i,j,index:integer;
eps:real; begin
comentar:sir_explicativ; for i:=1 to 2 do
constructor init; for j:=1 to 2 do
procedure citeste_date; begin
procedure rezolva; write('a[',i:1,',',j:1,']=');
function e_rezolvat:boolean; repeat
procedure afiseaza_rezultatul;
destructor done; $i};readln(a[i,j]);{$i+};index:=ioresult;
PRIVATE if(index<>0) then
a:matr; b,x:vect; writeln(comentar[1]);
indicator:boolean; until index=0;
END; end;
constructor rezolvitor.init; for i:=1 to 2 do
begin begin
comentar[1]:='eroare de introducere de write('b[',i:1,']=');
date'; repeat
comentar[2]:='determinant prea mic in
modul'; {$i+};readln(b[i]);{$i+};index:=ioresult;
comentar[3]:='bravo! datele sunt bine if(index<>0) then
introduse'; writeln(comentar[1]);
comentar[4]:='sistemul nu e rezolvat'; until index=0;
comentar[5]:='ura! urmeaza solutia'; end;
indicator:=false; eps:=0.00001; indicator:=false;
end; writeln(comentar[3]+' Apasa
Enter');readln;
end;

4
UTCB

{continuarea programului}; procedure rezolvitor.afiseaza_rezultatul;


procedure rezolvitor.rezolva; var i:integer;
var delta, delta1, delta2:real; begin
begin for i:=1 to 2 do
delta:=a[1,1]*a[2,2]-a[1,2]*a[2,1]; begin
if(abs(delta)<eps)then write('x['i:1,',',']=');writeln(x[i]:10:4);
begin writeln(comentar[2]+' Apasa end;
Enter');indicator:=false; writeln('Apasa Enter.');readln;
end; end;
delta1:=b[1]*a[2,2]-b[2]*a[1,2];
delta2:=a[1,1]*b[2]-a[2,1]*b[1]; Var Student:rezolvitor;
x[1]:=delta1/delta; x[2]:=delta2/delta;
indicator:=true; Begin
end; Student.Init;
Student.citeste_date;
destructor rezolvitor.done; Student.rezolva;
begin if(Student.e_rezolvat) then
end; Student.afiseaza_rezultatul;
End.

In programul de mai sus este descris un obiect numit rezolvitor. El este


JkQGLW FD úWLLQGV FLWHDVFGHOD WDVWDWXUD XQ VLVWHP GH GRX HFXDWLL OLQLDUH FX
GRXQHFXQRVFXWHVUH]ROYHDFHVWVLVWHPúLVDILúH]HVROXLLOH$FHVWRELHFWDUH
câmpurile private a=matricea sistemului, b=vectorul termenilor liberi,
[ YHFWRUXO UH]XOWDW LQGLFDWRU YDULDELO FDUH DUH YDORDUHD ORJLF WUXH GDF
VLVWHPXOHVWHUH]ROYDWúLDUHYDORDUHDORJLFIDOVHGDFVLVWHPXOQXHVWHUH]ROYDW
Doar metodele obiectului pot modifica aceste câmpuri. Obiectul mai are
FkPSXULOH SXEOLFH HSV YDORDUHD VXE FDUH FRQVLGHU GHWHUPLQDQWXO VLVWHPXOXL
SUHDPLFSHQWUXDPDLvQFHUFDVOUH]ROYPFRPHQWDU XQYHFWRUFXFRPHQWDULL
SHFDUHOHDILúPGLQFkQGvQFkQG
Constructorul InitLQLLDOL]HD]FkPSXULOHHSVFRPHQWDUúLLQGLFDWRU
Procedura Citeste_dateUHDOL]HD]FLWLUHDPDWULFLLúLDWHUPHQLORUOLEHULDL
sistemului.
Procedura Rezolva asigura rezolvarea sistemului.
)XQFLDE_rezolvatWHVWHD]GDFYDULDELODLQGLFDWRUHVWHWUXHDGLFGDF
sistemul este rezolvat.
Procedura Afiseaza_rezultatulUHDOL]HD]WLSULUHDVROXLHLSHHFUDQ
Destructorul Done, în exemplul nostru nu face nimic.
3URJUDPXOSULQFLSDOHVWHH[WUHPGHVLPSOXVHGHFODURYDULDELOQXPLW
6WXGHQWGHWLSXOUH]ROYLWRUDSRLVHDSHOHD]PHWRGHOHLQLWFLWHVWHBGDWHUH]ROYD
úLDILVHD]DBUH]XOWDW

5
UTCB
Acest obiect poate fi extins. Declararea unui descendent al unui obiect se
face prin:
obiect_nou=object(obiect_vechi)
GHFODUDLLGHQRLFkPSXULVLPHWRGH
end;
De exemplu putem extinde obiectul la unul în care sunt implementate
PHWRGHGHUH]ROYDUHúLDHFXDLLORUGHJUDGXODVWIHO
type super_rezolvitor=object(rezolvitor)
a,b,c,x1,x2:real;
constructor init;
procedure citeste_coeficienti;
procedure rezolva_ecuatie;
procedure scrie_solutie;
function gata_rezolvarea:boolean;
destructor done;
private
ind:boolean;
end;
,QDFHVWHH[HPSOXDEF[[VXQWFRHILFLHQLLHFXDLHLúLVROXLLOHHLLDU
LQGHVWHRYDULDELOFDUHLDYDORDUHDWUXHGDFHFXDLDHVWHUH]ROYDWúLYDORDUHD
IDOVH vQ FD] FRQWUDU 2ELHFWXO PRúWHQHúWH GDWHOH úL SURFHGXULOH GH OD RELHFWXO
UH]ROYLWRU OD FDUH VDX DGXJDW XQHOH QRL 3ULQ XUPDUH úWLH V UH]ROYH DWkW
HFXDLLGHJUDGXOFkWúLVLVWHPH&kPSXULOHúLPHWRGHOHSULYDWHDOHRELHFWXOXL
UH]ROYLWRU YRU IL SULYDWH úL vQ RELHFWXO VXSHUBUH]ROYLWRU LDU FHOH SXEOLFH vQ
VWUPRúXOUH]ROYLWRUYRUILSXEOLFHvQVXSHUBUH]ROYLWRU
Deci, obiectul super_rezolvitor are:
•câmpurile private a:matr; b,x:vect; indicator,ind:boolean
•câmpurile publice eps:real; comentar:sir_explicativ; a, b, c, x1, x2:real;
•metodele, în exemplul nostru, sunt toate publice.
8UPHD]VILHVFULVHFRUSXULOHGHSURJUDPSHQWUXILHFDUHPHWRGúLDSRL
V ILH XWLOL]DWH vQ SURJUDP &RQVWUXFWRUXO ,QLW DO RELHFWXOXL VXSHUBUH]ROYLWRU
WUHEXLH V DSHOH]H SULPD GDW FRQVWUXFWRUXO RELHFWXOXL VWUPRú UH]ROYLWRU
(inherited init DSRLVIDFHYHQWXDOHOHQRLLQLLDOL]UL
,QFRQGLLLOHvQFDUHDYHPYDULDELOHYúLYGHWLSXULGHVFHQGHQWH unul din
DOWXODWXQFLHVWHSRVLELODWULEXLUHD
v1:=v2;
QXPDLGDFYHVWHGHDFHODúLWLSFXYVDXHVWHXQGHVFHQGHQWDOVX

1.2. Metode virtuale

6SUHVXSXQHPFDYHPXQRELHFWREúLXQGHVFHQGHQWDOVXRE,Q
RELHFWXOREHVWHGHVFULVPHWRGDVFULHFDUHHVWHUHGHILQLWvQRELHFWXORE)LH
DFXPGRXYDULDELOH DOWIHOVSXVLQVWDQH GHWLSREUHVSHFWLYREDGLF
var v1:ob1; v2:ob2;
6
UTCB
Apelul direct al metodelor cu specificarea obiectelor, v1.scrie, respectiv
v2.scrie YD GXFH OD H[HFXLD D GRX SURFHGXUL GLIHULWH SURFHGXUD VFULH GLQ Y
UHVSHFWLY FHD UHGHILQLW GLQ Y $SHOXO LQGLUHFW IU VSHFLILFDUHD RELHFWXOXL
SRDWHSURGXFHH[HFXLDOXLYVFULHFKLDUGDFDSHOXOVHIDFHGLQWURLQVWDQGH
WLS RE 3HQWUX FD GH ILHFDUH GDW FkQG DYHP PHWRGH UHGHILQLWH vQWUXQ
GHVFHQGHQWRULFHDSHODOORUvQWURLQVWDQGHDFHOWLSGHVFHQGHQWVGHWHUPLQH
H[HFXLD PHWRGHL GHILQLWH vQ GHVFHQGHQWXO UHVSHFWLY úL QX D XQHLD GLQWUXQ
VWUPRú DO WLSXOXL WUHEXLH V VSHFLILFP DFHOH PHWRGH FD ILLQG virtuale. Prin
H[HPSOXOXUPWRUVHOPXUHVFOXFUXULOH
program varianta1; program varianta2;
uses crt; uses crt;
type ob1=object type ob1=object
constructor init; constructor init;
procedure scrie; procedure scrie; virtual;
procedure mesaj; procedure mesaj;
end; end;

ob2=object(ob1) ob2=object(ob1)
constructor init; constructor init;
procedure scrie; procedure scrie; virtual
end; end;

procedure ob1.scrie; procedure ob1.scrie;


begin writeln(' obiectul 1');readln; begin writeln(' obiectul 1');readln;
end; end;

procedure ob1.mesaj; procedure ob1.mesaj;


begin begin
write('mesajul provine din:');scrie; write('mesajul provine din:');scrie;
end; end;

procedure ob2.scrie; procedure ob2.scrie;


begin writeln('obiectul 2');readln; begin writeln('obiectul 2');readln;
end; end;

constructor ob1.init; constructor ob1.init;


begin begin
end; end;

constructor ob2.init; constructor ob2.init;


begin inherited init; begin inherited init;
end; end;

var v1:ob1;p:ob1; v2:ob2; var v1:ob1;p:ob1; v2:ob2;


Begin Begin
clrscr; v1.init ; v2.init; v1.mesaj;v2.mesaj; clrscr; v1.init; v2.init; v1.mesaj; v2.mesaj;
end. end.
'DFUXOPSULPXOSURJUDPRELQHPSHHFUDQ
mesajul provine din: obiectul 1
7
UTCB
mesajul provine din: obiectul 1
'DFUXOPSURJUDPXODOGRLOHDRELQHP
mesajul provine din: obiectul 1
mesajul provine din: obiectul 2
'LIHUHQD SURYLQH GLQ IDSWXO F vQ DO GRLOHD SURJUDP PHWRGD VFULH HVWH
GHFODUDWYLUWXDOGHFLvQWURLQVWDQGHWLSREDúDFXPHVWHYVHYDIRORVL
PHUHX PHWRGD REVFULH FKLDU GDF HVWH DSHODW LQGLUHFW SULQ LQWHUPHGLXO
metodei mesaj.
Constructorul unui obiect nu poate fi declarat virtual.

&UHDUHDGLQDPLFDRELHFWHORU

3HQWUXFUHDUHDGLQDPLFDRELHFWHORUSURFHGXULOH1HZúL'LVSRVHDXIRVW
DGDSWDWHúLSHQWUXRELHFWHDVWIHO
New(pointer_la_obiect, constructor_obiect);
pointer_obiect:=New(tip_pointer_la_obiect, constructor_obiect);
Dispose(pointer_obiect, destructor_obiect);
'HH[HPSOXGDFDYHPRELHFWHOHRERESXWHPGHFODUD
var p1:^ob1;
p2:^ob2; ^SúLSVXQWYDULDELOHUHIHULQODRELHFWH`
type pob2=^ob2; ^SREHVWHXQWLSGHGDW`
.....................
begin
.........
new(p1,init); p2:=new(pob2, init);
.........
dispose(p1, done); dispose(p2, done);
end.
,QIHOXODFHVWDRGDWFXFUHDUHDGLQDPLFDRELHFWHORUVHIDFúLLQLLDOL]ULOH
QHFHVDUHLDUODGLVWUXJHUHDORUVHSRDWHHOLEHUDPHPRULDDORFDWSULQLQLLDOL]ULOH
de la creare.

1.3. Obiecte predefinite. Turbo Vision.

,Q OLPEDMXO 7XUER 3DVFDO DX IRVW LPSOHPHQWDWH R PXOLPH GH RELHFWH
SHQWUXDSHUPLWHVFULHUHDFRPRGGHSURJUDPHFDUHDXRLQWHUIDSULHWHQRDVFX
XWLOL]DWRUXO$FHVWHRELHFWHJUXSDWHVXEQXPHOH7XUER9LVLRQVXQWFRQLQXWHvQ
mai multe unituri: App Dialogs, Drivers, Editors, HistList, Memory, Menus,
Objects, TextView, Views, Validate. In aceste unituri sunt declarate constante,
YDULDELOHXQHOHIXQFLLúLSURFHGXULFHQXIDFSDUWHGLQRELHFWHOH7XUER9LVLRQúL
desigur o mare varietate de obiecte:
In unitul Menus: TMenu, TMenuBar, TMenuBox, TMenuItem,
TMenuStr, TStatusDef, TStatusItem, TStatusLine.
8
UTCB
In unitul App: TApplication, TBackground, TDeskTop, TProgram.
In unitul Dialogs: TButton, TCheckBoxes, TCluster, TDialog, THistory,
TInputLine, TLabel, TListBox, TParamText, TRadioButtons, TSItem,
TStaticText.
In unitul Drivers: TEvent, TSysErrorFunction.
In unitul Objects: TObject, TCollection, TStream, TStreamRec, TPoint,
TRect, etc.
In unitul Views: TView, TFrame, TWindow, TGroup, etc.
/DUkQGXOORUILHFDUHRELHFWDUHFkPSXULúLPHWRGHvQFkWXWLOL]DUHDDFHVWRU
multe obiecte pare foarte greoaie. De fapt, în majoritatea cazurilor este nevoie de
DXWLOL]DGRDURSDUWHGLQRELHFWHúLSHQWUXILHFDUHRELHFWGRDUGHXQHOHPHWRGH
vQWURPDQLHUPDLPXOWVDXPDLSXLQVWDQGDUG
2ELHFWHOH VXQW XQHOH GHVFHQGHQWH DOH DOWRUD DYkQG FD VWUPRú FRPXQ SH
72EMHFW 2 DSOLFDLH HVWH JkQGLW FD XQ GHVFHQGHQW DO RELHFWXOXL 7$SSOLFDWLRQ
care este derivat astfel:
TObject

TView

TGroup

TWindow TDeskTop TProgram

TDialog TApplication

'DF DFHVW GHVFHQGHQW GLQ 7$SSOLFDWLRQ HVWH 7$SOLFDWLH DWXQFL GXS


GHILQLUHDPHWRGHORUúLLQLLDOL]DUHDFkPSXULORUSURJUDPXOGHYLQH
var X:TAplicatie;
Begin X.Init; X.Run; X.Done; End.
,Q FRQWLQXDUH VH G XQ H[HPSOX GH SURJUDP VFULV FX RELHFWH GLQ 7XUER
9LVLRQ FX H[SOLFDLL DOWXUL GH LQVWUXFLXQL ,Q PDUH DOW SURJUDP VH SRDWH IDFH
GXS DFHVWD VFKLPEkQG OLVWD GH PHQLXUL úL DGkXJkQG SURFHGXULOH SRWULYLWH
3HQWUX R XWLOL]DUH HILFLHQW HVWH QHYRLH GH R FDUWH FX PDL PXOWH GHWDOLL GHVSUH
Turbo Vision. Se poate consulta Helpul mediului Turbo Pascal sau programele
demonstrative din subdirectorul \Docdemos\Tv\.

Programul Explicatii
Program Exemplu_obiecte; -Desi se folosesc mai multe unituri, compilatorul
uses vúLH[WUDJHGLQILHFDUHGRDUFHHDFHVHIRORVHúWH
Objects,App,Drivers,Menus,Views efectiv în program.

9
UTCB
,MsgBox, Dialogs, Validate; 3ULQFRQVWDQWHOHGHILQLWHVHLGHQWLILFDQXPLWH
comenzi mai departe.
const cmSistem=101; 7'DWH6LVWHPUHSUH]LQWFRHILFLHQLLVLVWHPXOXL
cmEc2=102;cmObs=103; D [E \ SF [G \ TSUHFXPúLVROXLD
cmUrare=104; DFHVWXLD[\76LU'DWH6LVWHPUHSUH]LQWDFHVWH
YDORULWUDQVIRUPDWHvQúLUXULGHFDUDFWHUH
type TDateSistem=array[1..8]of
real; _ TRezolvitor este un obiect derivat din obiectul
TSirDateSistem=array[1..8]of 7$SSOLFDWLRQFDUHVHJVHúWHvQXQLWXO$SS/D
String[15]; DFHVWRELHFWVHDGDXJRYDULDELOGLDORJFDUHHVWH
RUHIHULQODXQRELHFW7'LDORJ WLSXULOHGH
type RELHFWHDXQXPHFDUHvQFHSFX7LDUUHIHULQHOHOD
TRezolvitor=object(TApplication) RELHFWHDXQXPHFDUHvQFHSFX3 GRXYDULDELOH
dialog:PDialog; SUSVúLVHUHGHILQHVFGRXSURFHGXULYLUWXDOH
ps:TSirDateSistem; ,QLW0HQX%DUSULQFDUHVHVSHFLILFPHQLXO
pr:TDateSistem; DSOLFDLHLúL,QLW6WDWXV/LQHSULQFDUHVHSUHFL]HD]
procedure cum va fi linia de stare a programului (de obicei
InitMenuBar;virtual; XOWLPDOLQLHGLQIHUHDVWUDDSOLFDLHL 3URFHGXULOH
procedure 2EVHUYDLH8UDUH6LVWHPVHGHFODQúHD]FkQG
InitStatusLine;virtual; DOHJHPFXPRXVHXOVDXFXWDVWDWXUDRRSLXQHGLQ
procedure Observatie; meniu. HandleEvent este obigatorie pentru a
procedure Urare; gestiona evenimentele. In meniu, la fiecare
procedure Sistem; RSLXQHVHVSHFLILFXQQXPUvQWUHJvQGRPHQLXO
procedure HandleEvent( var 100-255 sau 1000-65535. Alegerea cu mouse-ul
Event:TEvent);virtual; VDXWDVWDWXUDDDFHOHLRSLXQLGHPHQLXIDFHFD
end; QXPUXOvQWUHJDVRFLDWVILHWUDQVIHUDWSURFHGXULL
+DQGOH(YHQWXQGHSULQWURLQVWUXFLXQH&$6(VH
GHWHFWHD]FHQXPUHVWHúLVHWUDQVIHUFRQWUROXO
unei proceduri dorite de programator.
^8UPHD]GHILQLUHDPHQLXULORU` 2ELHFWHOHúLSURFHGXULOHGLQVWkQJDDX
procedure TRezolvitor.InitMenuBar; GHILQLLLOH
var R:TRect; {R este instanta a unui TPoint=record
obiect tip dreptunghi} x: integer; y: integer;
AdresaMenu:PMenu; end;
begin TRect=object
GetExtent(R);{se determina A: TPoint; B: TPoint;
marimea maxima a unui dreptunghi}; procedure Assign(XA,YA,XB,YB:Integer);
R.B.Y:=1;{R.A.X=0, R.A.Y=0, deci R procedure Grow(ADX,ADY:Integer);
este un dreptunghi de o linie,sus}; ...
AdresaMenu:=NewMenu( function Contains(P:TPoint):boolean;
NewSubMenu('~R~ezolvari', end;
2000,NewMenu( TRect este tipul dreptunghi. Prin procedura
NewItem('~S~istem', 'Alt-S', kbAltS, $VVLJQVHIL[HD]FROXULOHOXL)XQFLD
cmSistem, 2000, &RQWDLQVGHWHUPLQGDF3HVWHvQ
NewItem('~E~cuatie','Alt-E', dreptunghi sau nu.
kbAltE,cmEc2,2000,nil))), SURFHGXUH*HW([WHQW 575HFW GHWHUPLQ
NewSubMenu('~M~esaje', GUHSWXQJKLXOPD[LPFHvQFDSHvQIHUHDVWU
4000,NewMenu( /DLHúLUH5$; 5$< LDU5%;úL
NewItem('Mesa~j~','Alt-J', kbAltJ, R.B.Y iau valorile maxim posibile.
cmObs, 4000, function
NewItem('Citeste','F10',kbF10, NewMenu(Items:PMenuItem):PMenu;
10
UTCB
cmUrare, 4000,nil))), XQGH30HQX,WHPHVWHRUHIHULQOD
NewSubmenu('~T~erminat',6000, TMenuItem=record
NewMenu( Next:PMenuItem; Name:PString;
NewItem('E~x~it', 'Alt-X',kbAltX, Command:Word; Disabled:Word;
cmQuit, 1000, nil)), KeyCode:Word; HelpCtx:Word;
nil)))); Case integer of
MenuBar:=New(PMenuBar, (0:Param:PString); (1: Submenu:PMenu);
Init(R,AdresaMenu)); end;
{Init este constructorul lui TMenuBar}; end;
end; 70HQX,WHPHVWHGHFLWLSXOJHQHUDOGHGDW
dintr-un meniu.
^&DUDFWHUHOHLQWUHaYRUDSDUHHYLGHQLDWH $GXJDUHDGHVXEPHQLXULODPHQLXVHIDFH
SHHFUDQ,QFKHLHUHDXQHLOLVWHGHRSLXQL prin:
GLQPHQLXVHWHUPLQFkQGvQFkPSXO1H[W function NewSubMenu(Name:TMenuStr;
VHSXQHQLO&kQGVHDFWLYHD]RRSLXQH Help:Word; SubMenu:PMenu;
care are un numar in câmpul HelpCtx, Next:PMenuItem):PMenuItem;
DWXQFLVHDILúHD]SHOLQLDGHVWDUH 3ULQFkPSXO1H[WVHSRWFUHDODQXULGH
LQIRUPDLDSHQWUXFDUHGRPHQLXOGHDMXWRU DUWLFROHvQPHQLXUL)XQFLD1HZ,WHPDUH
FRQLQHDFHOQXPU` GHILQLLD
function NewItem(Name,Param:TMenuStr;
KeyCode:Word; Help:Word;
Next:PMenuItem):PMenuItem;
^XUPHD]GHILQLUHDOLQLHLGHVWDUH`
procedure 0HQX%DUHVWHRYDULDELODXQLWXOXL$SSFDUH
TRezolvitor.InitStatusLine; FRQLQHRUHIHULQODPHQLXODSOLFDLHL
var R:TRect;
AdresaStare:PStatusDef; /LQLDGHVWDUHHVWHDILúDWGHRELFHLSHPDUJLQHDGH
begin MRVDIHUHVWUHLSURJUDPXOXLúLFRQLQHLQIRUPDLL
GetExtent(R); SHQWUXXWLOL]DWRUWDVWHFHSRWILDSVDWHFXVFXUWH
R.A.Y:=R.B.Y-1; H[SOLFDLLLQIRUPDLLGHVSUHFDOFXODWRUHWF$FHVWH
AdresaStare:= LQIRUPDLLVXQWDILúDWHvQIXQFLHGHFRQWH[WXOGH
NewStatusDef(0,1000, DMXWRU,QH[HPSOXODOWXUDWGDFHVWHDFWLYDWR
NewStatusKey('~Alt-X~ RSLXQHFDUHvQFkPSXOGHDMXWRU +HOS&W[ DUHXQ
terminarea programului', QXPUvQWUHúLVHYDDILúDSHOLQLDGHVWDUH
kbAltX, cmQuit,
$OW;WHUPLQDUHDSURJUDPXOXL
GDF+HOS&W[HVWH
nil), vQWUHúLVHDILúHD]
$OW6UH]ROYDULGH
NewStatusDef(1001,3000, sisteme liniare AltE rezolvarea unei ec. de gradul
NewStatusKey('~Alt-S~ 2', etc.
rezolvari de sisteme SURFHGXUD,QLW6WDWXV/LQHWUHEXLHVFULVGHXWLOL]DWRU
liniare',kbAltS, cmSistem, DVHPQWRUFXH[HPSOXODOWXUDW
/LQLDGHVWDUHVHFRQVWUXLHúWHSULQ
NewStatusKey('~Alt-E~ constructor TStatusLine.Init(Bounds:TRect;
rezolvarea unei ec. de gradul Adefs:PStatusDef);%RXQVUHSUH]LQWGUHSWXQJKLXO
2' ,kbAltE, cmEc2, XQGHDSDUHOLQLD36WDWXV'HIHVWHRUHIHULQOD
nil)), TStatusDef=record
NewStatusDef(3001,5000, Next:PStatusDef; Min,Max:Word;
NewStatusKey('~Alt-J~ o Items:PStatusItem;
constatare ',kbAltJ, cmObs, end;
NewStatusKey('~F10~ un sfat 36WDWXV,WHPHVWHRUHIHULQODRRSLXQHGHOLQLHGH
dezinteresat',kbF10,cmUrare, stare:
nil)),nil))); TStatusItem=record
11
UTCB
Next:PStatusItem; Text:PString;
StatusLine:=New(PStatusLine, KeyCode:Word; Command:Word;
Init(R,AdresaStare)); end;
end; $GXJDUHDXQXLLQWHUYDOGHDMXWRUVHIDFHSULQ
function NewStatusDef(Amin,Amax:Word;
^6WDWXV/LQHHVWHRYDULDELOGLQ AItems:PStatusItem;ANext:PStatusDef):PStatusDef
XQLWXO$SSFDUHFRQLQHRUHIHULQ ;
la linia de stare a programului} $GXJDUHDXQHLLQIRUPDLLvQOLQLDGHVWDUHVHIDFH
SULQIXQFLD
function NewStatusKey(AText:String;
AKeyCode:word; ACommand:Word;
ANext:PStatusItem):PStatusItem;
^GRXSURFHGXUL`
0HVDMHSHHFUDQSRWILDILúDWH
procedure TRezolvitor.Observatie; FXIXQFLD
begin function
MessageBox('Pana la urma nu e prea dificil'+ MessageBox(Mesaj:String;
' de a folosi obiectele din Turbo Vision', Param:Pointer;
nil, mfInformation or mfOkButton); Options:Word):Word;
end;
PI,QIRUPDWLRQGHWHUPLQFD
procedure TRezolvitor.Urare; IHUHDVWUDVILHFRQVLGHUDWGH
begin informare
MessageBox( 'Studiati programarea pe obiecte '+ ( apare cu titlul Information)
'dintr-o carte mai completa.'+
' In particular vedeti cum '+ PI2NGHWHUPLQDSDULLD
'se programeaza in Windows' EXWRQXOXL2NvQIHUHDVWU
,nil, mfInformation or mfOkButton);
end;

{procedura de rezolvare a sistemului}


$FHDVWSURFHGXUUH]ROYXQ
procedure TRezolvitor.Sistem; VLVWHPOLQLDUGHGRXHFXDLLFX
const LungMaxLinie=15; GRXQHFRQRVFXWH
var R:TRect; Introducerea datelor se face
Intrare:PInputLine; vQWURIHUHDVWUGHGLDORJ
Control,i,cod:word; 7'LDORJ IHUHDVWUvQFDUHVH
delta,delta1,delta2:real; pun mai multe obiecte:
begin A)etichete (TLabel) pentru a
R.Assign(10,6,60,20); indica utilizatorului ce date
dialog:=New(PDialog,Init(R,'Sisteme liniare')); apar pe ecran;
B)ferestre de editare
R.Assign(5,2,50,3); (TInputline) unde se introduc
dialog^.Insert(New(PStaticText,Init(R,'Sistemul GDWHOHGHLQWUDUHúLXQGHVH
este: a*x+b*y=p'))); WLSUHVFUH]XOWDWHOHGLQFDOFXOH
R.Assign(5,3,50,4); & EXWRDQHGHFRPDQG
dialog^.Insert(New(PStaticText,Init(R,' 7%XWWRQ FDUHODDSVDUH
c*x+d*y=q'))); WUDQVPLWXQQXPUGHFRPDQG
FWUHSURFHGXUDKDQGOHHYHQW
R.Assign(6,5,15,6); unde se decide prin program
Intrare:=New(PInputLine, FWUHFHSURFHGXUVHWUDQVIHU
12
UTCB
Init(R,LungMaxLinie)); controlul.
3ULPDGDWVHFRQVWUXLHúWH
Intrare^.SetValidator(New(PPXPictureValidator, fereastra de dialog astfel:
Init('[-][#][#][#][#][#][#][#][.][#][#][#][#][#]', 5$VVLJQ  )L[HD]SR]LLD
True))); ferestrei pe ecran, apoi
dialog^.Insert(Intrare); dialog:=New(pdialog,
R.Assign(2,5,5,6); Init(R,'Sisteme liniare'))
dialog^.Insert(New(PLabel,Init(R,'a=',Intrare))); FRQVWUXLHúWHRUHIHULQOD
fereastra de dialog.
R.Assign(21,5,30,6); 2. In continuare se pun
RELHFWHvQIHUHDVWUDVWIHO
Intrare:=New(PInputLine,Init(R,LungMaxLinie)); 5$VVLJQ  'HWHUPLQ
PULPHDGUHSWXQJKLXOXLFX
Intrare^.SetValidator(New(PPXPictureValidator, obiectul;
Init('[-][#][#][#][#][#][#][#][.][#][#][#][#][#]', 2.2. Intrare:= New(pinputline,
True))); Init(R, lungmaxlinie))
dialog^.Insert(Intrare); FRQVWUXLHúWHRUHIHULQODR
linie de editare date în
R.Assign(17,5,20,6);dialog^.Insert(New(PLabel,Init( dreptunghiul R, cu cel mult
R,'b=',Intrare))); lungmaxlinie caractere în linie;
2.3. Intrare^.setvalidator
R.Assign(36,5,45,6); UHIHULQODXQSURJUDPGH
Intrare:=New(PInputLine, YDOLGDUH VWDELOHúWHvQFH
Init(R,LungMaxLinie)); FRQGLLLRGDWLQWURGXVvQ
IHUHDVWUHVWHYDOLG2ELHFWXO
Intrare^.SetValidator(New(PPXPictureValidator, WS[SLFWXUHYDOLGDWRUYDOLGHD]R
Init('[-][#][#][#][#][#][#][#][.][#][#][#][#][#]', GDWSULQPRGHOXOSURSXVGH
True))); programator prin constructorul
dialog^.Insert(Intrare); Init al obiectului: # pentru
R.Assign(32,5,35,6); dialog^.Insert(New(Plabel, cifre, ? Pentru litere, & pentru
Init(R,'p=',Intrare))); litere mari, @ pentru orice
caracter, ! Pentru orice
R.Assign(6,7,15,8); FDUDFWHUIRUDWODFDUDFWHU
Intrare:=New(PInputLine, Init(R, major (în cazul literelor), []
LungMaxLinie)); SHQWUXRSLRQDO^`SHQWUX
grupare de caractere, iar alte
Intrare^.SetValidator(New(PPXPictureValidator, semne ce apar se transcriu
Init('[-][#][#][#][#][#][#][#][.][#][#][#][#][#]', literal.
True))); 6HDSHOHD]PHWRGD,QVHUW
dialog^.Insert(Intrare); a obiectului dialog^ pentru a
R.Assign(2,7,5,8); dialog^.Insert(New(PLabel, insera linia de editare în
Init(R,'c=', Intrare))); fereastra de dialog.
6HLQVHUHD]vQIHUHDVWUD
R.Assign(21,7,30,8); GHGLDORJFRQIRUPFXSDúLL
Intrare:=New(PInputLine, 2.1., 2.2. , 2.4., Etichete
Init(R,LungMaxLinie)); explicative.
6HSXQGRXEXWRDQHGH
Intrare^.SetValidator(New(PPXPictureValidator, FRPDQGvQFDVHWDGHGLDORJ
Init('[-][#][#][#][#][#][#][#][.][#][#][#][#][#]', %XWRQXOQXPLW
UH]ROY
FDUH
True))); JHQHUHD]SULQDSVDUH
dialog^.Insert(Intrare); FRPDQGDFP2N XQQXPU
13
UTCB
întreg)
R.Assign(17,7,20,8);dialog^.Insert(New(Plabel,Init( -Butonul 'gata distractia' care
R,'d=',Intrare))); JHQHUHD]FRPDQGDFP&DQFHO
$FHDVWFRPDQGGHWHUPLQ
R.Assign(36,7,45,8); distrugerea ferestrei de dialog.
Procedura HandleEvent
Intrare:=New(PInputLine,Init(R,LungMaxLinie)); standared a ferestrei de dialog
WUDWHD]FRPHQ]LOHFP&DQFHO
Intrare^.SetValidator(New(PPXPictureValidator, FP2NúLFP&ORVH'DFVHSXQ
Init('[-][#][#][#][#][#][#][#][.][#][#][#][#][#]', butoane cu alte comenzi,
True))); DWXQFLWUHEXLHDFWXDOL]DW
dialog^.Insert(Intrare); procedura HandleEvent a
dialogului.
R.Assign(32,7,35,8);dialog^.Insert(New(PLabel,Init( In liniile de intrare datele apar
R,'q=',Intrare))); ca texte. Punerea unor texte în
liniile de intrare se face cu
dialog^.SetData(date), unde
R.Assign(6,10,21,11); date este un array or record de
valori String. Ordinea din
Intrare:=New(PInputLine,Init(R,LungMaxLinie)); record se corespunde cu
dialog^.Insert(Intrare); ordinea în care sunt declarate
liniile de input în fereastra de
R.Assign(2,10,5,11);dialog^.Insert(New(PLabel,Init( dialog. Extragerea datelor din
R,'x=',Intrare))); caseta de dialog se face cu
dialog^.GetData(date 'DF
R.Assign(6,12,21,13); datele sunt numere, ele se
Intrare:=New(PInputLine, Init(R, convertesc cu procedura Str în
LungMaxLinie)); úLUXULSXVHvQYDULDELODGDWH
dialog^.Insert(Intrare); înainte de apelul
R.Assign(2,12,5,13);dialog^.Insert(New(PLabel, dialog^.SetData(date), iar
Init(R,'y=',Intrare))); SHQWUXH[WUDJHUHGXS
dialog^.GetData(date) se
R.Assign(35,3,45,5); FRQYHUWHVFúLUXULOHvQQXPHUH
dialog^.Insert(New(PButton, cu procedura Val.
Init(R,'~R~ezolva',cmOk,bfNormal))); ([HFXLDGLDORJXOXLVHIDFHFX
metoda DeskTop^.Execview.
R.Assign(26,10,45,13);
dialog^.Insert(New(PButton, Init(R,'Gata DeskTop este un pointer la
distractia',cmCancel,bfDefault))); imaginea întregului ecran.
SelectNext(false); 'XSH[HFXLHVHvQWRDUFHR
for i:=1 to 8 do ps[i]:='';dialog^.SetData(ps); YDORDUHHJDOFXQXPUXO
Control:=DeskTop^.ExecView(dialog); comenzii care a închis
dialog^.GetData(ps); dialogul. In continuare se
for i:=1 to 6 do UH]ROYVLVWHPXOVHWUDQVIRUP
begin val(ps[i],pr[i],cod); UH]XOWDWHOHvQúLUXUL vQSV FDUH
if(cod<>0)then begin pr[i]:=0;ps[i]:='0';end; se transmit spre liniile de input
end; FXGLDORJA6HW'DWD SV úLVH
delta:=pr[1]*pr[5]- H[HFXWGLQQRXGLDORJXO$SDU
pr[2]*pr[4];delta1:=pr[3]*pr[5]-pr[6]*pr[2]; DFXPvQ[úL\VROXLLOH
delta2:=pr[1]*pr[6]-pr[3]*pr[4]; sistemului.
if(abs(delta)<0.00001)then
14
UTCB
begin
ps[7]:='nu';ps[8]:='nu';dialog^.SetData(ps);
end
else
begin pr[7]:=delta1/delta; pr[8]:=delta2/delta;
str(pr[7]:14:5,ps[7]); str(pr[8]:14:5,ps[8]);
dialog^.SetData(ps);
end;
Control:=DeskTop^.ExecView(dialog);
end;

{procedura de gestionare a evenimentelor};


procedure TRezolvitor.HandleEvent(var Procedura HandleEvent a unui obiect
Event: TEvent); H[HFXWSULPDGDWSURFHGXUD+DQGOH(YHQW
begin PRúWHQLWDSRLGDF(YHQW:KDWHVWH
inherited HandleEvent(Event); FRPDQG HY&RPPDQG GHWHFWHD]FDUH
if Event.What = evCommand then FRPDQGHVWHSULQWURLQVWUXFLXQHFDVHúL
begin ODQVHD]SURFHGXUDFRUHVSXQ]WRDUH'XS
case Event.Command of UHYHQLUHDGLQSURFHGXUVHúWHUJH
cmUrare: begin evenimentul cu ClearEvent.
Urare;ClearEvent(Event);end;
cmObs: begin
Observatie;ClearEvent(Event);end;
cmSistem:begin
Sistem;ClearEvent(Event);end;
end;
end;
end;

{programul principal};
var Rezolvitor:TRezolvitor;
BEGIN
Rezolvitor.Init;
Rezolvitor.Run;
Rezolvitor.Done;
END.

/DH[HFXLDSURJUDPXOXLDSDUHSHHFUDQ
Se vede meniul cu "Rezolvari' selectat,
GLQFDUHVDDFWLYDWRSLXQHD
6LVWHP


6HODQVHD]vQH[HFXLHSURFHGXUD
6LVWHPúLVHRELQHIHUHDVWUDGHGLDORJ
FDUHXUPHD]XQGHGDFVHLQWURGXFDESFGTDWXQFLVHDILúHD][úL\6HYHGHWH[WXO
static "Sistemul este: a*x.....', liniile de introducere date (TInputLine ) cu etichetele
7/DEHO 
D

E
HWFSUHFXPúLEXWRDQHOH
5H]ROYD
úL
*DWDGLVWUDFWLD


15
UTCB

([HUFLLL

1. 6VHFRPSOHWH]HSURJUDPXOGHPDLVXVFXRSURFHGXUGHUH]ROYDUHDXQHLHFXDLLGH
gradul 2.

2. 6VHVFULHXQSURJUDPvQ7XUER9LVLRQFDUHVFDOFXOH]HVXPHúLSURGXVHGHPDWULFL[

16
UTCB

2. Programarea cu componente vizuale

*HQHUDOLWL

6HFRQVWDWFRPDUHSDUWHGLQSURJUDPVHFRQVXPSHQWUXVFULHUHD
PHQLXULORUúLDFDVHWHORUGHGLDORJ3UDFWLFSURJUDPXOGHUH]ROYDUHDXQXLVLVWHP
HVWHGRDUSDUWHDHYLGHQLDWSHXQIRQGPDLvQFKLVGLQOLVWLQJXODQWHULRU,QFD]XO
QRVWUXDSUR[LPDWLYGLQSURJUDPXOVXUVHVWHUHSUH]HQWDWGHFDOFXOHOHGH
UH]ROYDUHDXQXLVLVWHPUHVWXOGHILLQGIRUPDWGLQGHFODUDLLFRQVWUXFLLGH
PHQLXULúLGLDORJXUL
Acest lucru a fost remediat la noile medii de programare Visual Basic sau
'HOSKLXQGHFRQVWUXFLDPHQLXULORUúLDFDVHWHORUGHGLDORJQXVHPDLIDFHSULQ
VFULHUH GH WH[W FL SULQ DOHJHUHD FX PRXVHXO D RELHFWHORU úL DUDQMDUHD ORU vQ
SDJLQ
(OHPHQWXOGHED]DOXQHLDSOLFDLLHVWHIRUPDvQFDUHVHSXQGLYHUVH
obiecte alese din bara de unelte (vezi figura de mai jos).

3HQWUXILHFDUHIRUP'HOSKLJHQHUHD]XQXQLWvQFDUHVFULHFHRELHFWHV
au ales. Fiecare obiect are caracteristici ce pot fi schimbate direct pe ecran (în
caseta Properties a obiectului): culoare, titlu, font,etc. De asemenea fiecare
RELHFWDUHPHWRGHSURSULLúLLVHDVRFLD]SURFHGXULFDUHVHDFWLYHD]ODXQ
HYHQLPHQWH[WHUQFOLFFXPRXVHXOSHRELHFWDSVDUHDXQRUWDVWHGXEOXFOLFFX
mouse-ul, etc. Aceste proceduri au nume sugestive:
ClickVHGHFODQHD]ODXQFOLFNGHPRXVHSHLPDJLQHDRELHFWXOXL
DblClickVHGHFODQúHD]ODXQGXEOXFOLFGHPRXVHSHLPDJLQHD
obiectului,
KeyPress VHGHFODQúHD]ODRDSVDUHGHWDVWHWF
,QLLDODFHVWHSURFHGXULFRQLQGRDUEHJLQúLHQGXUPkQGFDSURJUDPDWRUXO
VOHFRPSOHWH]HFXLQVWUXFLXQLOHGRULWH
,QXQLWXOIRUPHLSURJUDPDWRUXOPDLLQWURGXFHGDWHOHGHFDUHDUHQHYRLHúL
FRPSOHWHD]SURFHGXULOH2Q&OLFNHWFSHQWUXGLYHUVHRELHFWH,QPRGDXWRPDW
'HOSKLJHQHUHD]XQSURJUDPSULQFLSDOFHXWLOL]HD]XQLWXULOHDVRFLDWHIRUPHORU
In continuare se vede cât de scurt este codul pentru rezolvarea problemei
GLQDLQWHvQ'HOSKL)RUPDDSOLFDLHLHVWHvQILJXUDXUPWRDUH,QWDEHOXOFDUH
XUPHD]HVWHFRGXOSURJUDPXOXL,QFDUDFWHUHvQJURúDWHDSDULQVWUXFLXQLOHVFULVH
de programator, celelalte fiind generate de Delphi în urma punerii obiectelor pe
IRUPúLDOHJHULLSURSULHWLORUDFHVWRUD
17
UTCB

test:=1;
unit Unit1; Val(b.Text,a12,code);If(code<>0)then
test:=1;
interface
uses Val(c.Text,a21,code);If(code<>0)then
SysUtils, WinTypes, WinProcs, Messages, test:=1;
Classes, Graphics, Controls, Val(d.Text,a22,code);if(code<>0)then
StdCtrls, ExtCtrls, Forms; test:=1;
type Val(p.Text,b1,code);If(code<>0)then
TForm1 = class(TForm) test:=1;
a: TEdit; eta: TLabel; Val(q.Text,b2,code);If(code<>0)then
etb: TLabel; b: TEdit; test:=1;
etp: TLabel; c: TEdit; If(test=1)then obs.Caption:='Date
etq: TLabel; d: TEdit; incorecte'
etc: TLabel; p: TEdit; else begin
etr: TLabel; q: TEdit; dx:=b1*a22-b2*a12; dy:=a11*b2-a21*b1;
Edit1: TEdit; Edit2: TEdit; delta:=a11*a22-a12*a21;
Label1: TLabel; Label2: TLabel; If(Abs(delta)<1.E-10) then
Button1: TButton; Button2: TButton; obs.Caption:='Sistem singular'
obs: TLabel; else begin
procedure Button1Click(Sender: TObject); x:=dx/delta;dy:=dy/delta;
procedure Button2Click(Sender: TObject); Str(x:15:4,s1);Str(y:15:4,s2);
end; Edit1.Text:=s1; Edit2.Text:=s2;
obs.Caption:='Sistem compatibil
var determinat';
Form1: TForm1; end
end
a11,a12,a21,a22,b1,b2,x,y,dx,dy,delta:Real; end;
code,test:Integer;
s1,s2:String; procedure TForm1.Button2Click(Sender:
TObject);
implementation begin
{$R *.DFM} Halt;
procedure TForm1.Button1Click(Sender: end;
TObject); end.
begin
test:=0; program Obj1;
Val(a.Text,a11,code);If(code<>0)then uses
Forms,
Unit1 in 'UNIT1.PAS' {Form1};
{$R *.RES}
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

La rularea programului apare pe ecran forma programului în care se introduc


GDWHúLXQGHVHDILúHD]UH]XOWDWHOH

18
UTCB

3UH]HQWDUHJHQHUDODPHGLXOXLGHSURJUDPDUH'HOSKL

Sistemul de operare Windows este mult mai complicat decât sistemul de


RSHUDUH 'RV (O UHDOL]HD] FHO SXLQ GRX OXFUXUL vQ SOXV SHUPLWH UXODUHD
VLPXOWDQ D PDL PXOWRU SURJUDPH HYHQWXDO FRRSHUDUHD vQWUH HOH úL DILúHD]
LQIRUPDLLOHvQPRGJUDILF
3HQWUX D UHDOL]D DFHVW OXFUX PHPRULD GLVSRQLELO HVWH SDUWDMDW vQWUH
GLIHULWHOHDSOLFDLLFDUHUXOHD]úLILHFUHLDSOLFDLLLVHDORFXQDQXPLWQXPUGH
PLFURVHFXQGH GXS FDUH VH FRQWLQX FX XUPWRDUHD DSOLFDLH úDPG $SDUH
DVWIHOXQIHOGHGLDORJvQWUHVLVWHPúLDSOLFDLLSXUWDWSULQLQWHUPHGLXOPHVDMHORU
8Q PHVDM HVWH R VWUXFWXU FDUH FRQLQH H[SHGLWRUXO DGLF SURJUDPXO FDUHO
WULPLWHGHVWLQDWDUXODGLFDSOLFDLDFDUHOSULPHúWHWLSXOGHPHVDMúLFRQLQXWXO
FDUHWUHEXLHVvQFDSSHRFWHL5HSUH]HQWDUHDJUDILFDLQIRUPDLHLWULPLVGH
program spre utilizator sau invers se face prin intermediul unei ferestre grafice.
$VWIHO RULFH SURJUDP :LQGRZV WUHEXLH V FRQLQ FHO SXLQ GRX
elemente:
a) GHILQLUHD XQHL IHUHVWUH FDUH DSDUH SH HFUDQ úL SULQ FDUH VH UHDOL]HD]
comunicare utilizator-program;
b) E GHILQLUHDXQHLIXQFLLGHSUHOXFUDUHDPHVDMHORUSULPLWHGHDSOLFDLH
([LVW IRDUWH PXOWH WLSXUL GH PHVDMH vQ :LQGRZV GDU R DSOLFDLH
WUDWHD]vQPRGQRUPDOGRDUFkWHYD
Scrierea de programe pentru sistemul de operare Windows apare astfel
GLILFLO3URJUDPDUHDHVWHIDFLOLWDWGHPHGLLOHYL]XDOHGHSURJUDPDUHXQGHVXQW
GHMDFRQVWUXLWHRELHFWHFDUHGHILQHVFIHUHVWUHúLSURFHGXULGHWUDWDUHDPHVDMHORU
vQIXQFLHGH RELHFW 3URJUDPDWRUXOWUHEXLH GRDU VLQFOXG DVWIHO GH RELHFWH vQ
SURJUDPXO VX V DGDXJH SURFHGXUL VXSOLPHQWDUH vQ IXQFLH FXP YUHD V
IXQFLRQH]H DSOLFDLD úL V OH OHJH vQWUXQ WRW XQLWDU ,Q FRQWLQXDUH VH GHVFULH
PRGXOvQFDUHVHUHDOL]HD]DFHVWOXFUXvQ'HOSKL
3HQWUXDFUHDRDSOLFDLHvQ'HOSKLVHFUHHD]PDLPXOWHILúLHUH8QXOGLQ
ILúLHUH VH QXPHúWH ILúLHU SURLHFW úL FRQLQH LQIRUPDLL GHVSUH GLYHUVHOH
19
UTCB
FRPSRQHQWHGLQFDUHHVWHFRQVWUXLWDSOLFDLD)LúLHUXOSURLHFWHVWHGHWLSWH[WúL
HVWHDXWRPDWDFWXDOL]DWGH'HOSKL8QDVWIHOGHILúLHUDUHH[WHQVLD.dpr.

,QLLDO'HOSKLDGDXJSURLHFWXOXLRIRUPúLXQXQLWDVRFLDWIRUPHL)RUPD
HVWH R IHUHDVWU SULQ FDUH SURJUDPXO YD LQWHUDFLRQD FX XWLOL]DWRUXO FkQG YD IL
JDWD)LúLHUXOFHFRQLQHLQIRUPDLLOHGHVSUHIRUPHVWHGHWLSWH[WúLHVWHDXWRPDW
actualizat de Delphi. El are extensia .dfm.
8QLWXO DVRFLDW IRUPHL DUDW LQLLDO FD FHO DOWXUDW 7RDWH XQLWXULOH GLQ 'HOSKL
QHFHVDUH OD FRPSLODUH VXQW DGXJDWH DXWRPDW vQ FODX]D XVHV 'DF XWLOL]DWRUXO
YUHD V DGDXJH XQLWXUL SURSULL FRPSOHWHD] OLQLD XVHV FX XQLWXULOH GH FDUH DUH
QHYRLH8QLWXOHVWHVDOYDWVXEIRUPGHILúLHUWH[WúLDUHH[WHQVLD.pas iar un unit
FRPSLODWVHSVWUHD]vQWUXQILúLHUH[WHQVLD.dcu.
2 DSOLFDLH SRDWH DYHD PDL PXOWH unit Unit1;
IRUPH ILHFDUH IRUP FX XQLWXO HL 'H
asemenea, pentru claritate, în cazul interface
DSOLFDLLORU PDUL VH SRW JUXSD XQHOH
uses
proceduri în unituri care nu sunt asociate cu Windows, Messages,
YUHRIRUP SysUtils, Classes, Graphics,
,QPRGDXWRPDWSHPVXUFHVHSXQ Controls, Forms, Dialogs;
RELHFWH SH IRUP GLQ EDUD GH XQHOWH VH
DGDXJ GH FWUH PHGLXO 'HOSKL vQ ILúLHUXO type
TForm1 = class(TForm)
unit al formei, linii de text cu descrierea
private
obiectelor puse. { Private declarations }
In partea “interface” se introduc public
YDULDELOH FH VH SRW XWLOL]D vQ DOWH SUL GLQ { Public declarations }
SURJUDP GDF XQLWXO HVWH VSHFLILFDW DFROR end;
prin uses, iar în partea implementation se
var
scrie codul procedurilor declarate în
Form1: TForm1;
LQWHUID VDX DO DOWRU SURFHGXUL XWLOL]DWH vQ
XQLW ,Q IXQFLH GH DSOLFDLD SH FDUH R implementation
FRQVWUXLP úL DOWH ILúLHUH FX DOWH H[WHQVLL
VXQWDXWRPDWDGXJDWHSURLHFWXOXL {$R *.DFM}
La lansarea mediului Delphi apare pe
end.
HFUDQRILJXUFDPFDFHDFDUHXUPHD]

Meniul FileDUHRSLXQLGHDGHVFKLGHVDXFUHDXQSURLHFWRIRUPXQXQLW
H[LVWHQWRSLXQLGHDVDOYDSURLHFWHIRUPHVDXXQLWXULRSLXQLGHDDGXJDXQXL
SURLHFWRIRUPVDXXQXQLWFUHDWHDOWXQGHYDRSLXQHGHWHUPLQDUHDOXFUXOXLFX
Delphi.
Meniul EditFRQLQHRSLXQLGHHGLWDUHDYDQVDW
Meniul SearchDUHRSLXQLGHFXWDUHvQILúLHUHOHSURLHFWXOXL

20
UTCB

Meniul ViewDUHRSLXQLGHFRQWURODVXSUDILúLHUHORUGLQSURLHFWFHYRUIL
DILúDWHSHHFUDQ$VWIHORSLXQHDProgam ManagerDúDFXPVHYHGHvQILJXU
FRQLQH ILúLHUHOH DILúDELOH GLQ SURLHFW XQLWXUL IRUPH DOWH ILúLHUH Object
InspectorHVWHDúDFDvQILJXUXQSURJUDPFHDILúHD]SURSULHWLOHRELHFWHORU
FRPSRQHQWHORU VWDQGDUG'HOSKL'HDVHPHQHDHODILúHD]HYHQLPHQWHOHODFDUH
UHDFLRQHD] ILHFDUH RELHFW 8Q GXEOX FOLF SH QXPHOH HYHQLPHQWXOXL GHVFKLGH
IHUHDVWUDFXXQLWXOvQFDUHVHJVHúWHSURFHGXUDDVRFLDWHYHQLPHQWXOXL$FXPVH
SRDWHVFULHFRGXOGRULW5HVWXORSLXQLORUGLQ9LHZVHUHIHUODDILúULXWLOL]DWHvQ
general pentru depanarea programelor.
Meniul ProjectFRQLQHFRPHQ]LGHDGXJDUHVDXVFRDWHUHGH ILúLHUH GLQ
SURLHFW FRPHQ]L GH FRPSLODUH VDX GH VWDELOLUH D XQRU RSLXQL GH OXFUX SHQWUX
mediul Delphi.
Meniul Run FRQLQH FRPHQ]L GH UXODUH FRPSOHW D SURJUDPXOXL VDX GH
rulare pas cu pas în regim de depanare.
Prin meniul HelpRELQHP LQIRUPDLL VXEVWDQLDOH GHVSUH PHGLXO 'HOSKL
'DF vQ SURJUDP SODVP FXUVRUXO SH XQ FXYkQW úL DSVP &WUO) RELQHP
LQIRUPDLLGHVSUHQRLXQHDH[SULPDWGHDFHOFXYkQW
&HOHODOWHRSLXQLGHPHQLXVHXWLOL]HD]PDLSXLQvQWURSULPID]
(OHPHQWXO GH ED]   vQ SURJUDPDUHD YL]XDO HVWH “componenta”. O
FRPSRQHQWHVWHXQRELHFWFDUHDUHGLVSRQLELOHSHQWUXSURJUDPDWRUSURSULHWL ,
metodeúLmetode de tratare a evenimentelor.
3URSULHWLOHVXQWFkPSXULDúDFXPVDPDLGLVFXWDWODRELHFWHúLFURUDOH
SRW IL DWULEXLWH YDORUL LDU YDORULOH SURSULHWLORU SRW IL XWLOL]DWH FD SDUDPHWUL vQ
GLYHUVH FDOFXOH $WULEXLUHD XQHL YDORUL XQHL SURSULHWL HVWH DVRFLDW LQWHUQ FX
GHFODQúDUHDXQHLSURFHGXULSURFHGXUFDUHVSXQvQDFRUGVWDUHDSURJUDPXOXL
FXQRXDYDORDUHLDUFLWLUHDYDORULLXQHLSURSULHWLHVWHvQVRLWGHODQVDUHDDOWHL

21
UTCB
SURFHGXULIHQRPHQWUDQVSDUHQWSHQWUXXWLOL]DWRU3ULQWUHSURSULHWLOHvQWkOQLWHOD
majoritatea componentelor vizuale amintim:

•ColorGHWHUPLQFXORDUHDFRPSRQHQWHL
•Name este identificatorul componentei în
program. In mod standard, Delphi atribuie un
QXPH ILHFUHL FRPSRQHQWH LQVWDODWH vQ SURJUDP
GDU DFHVW QXPH VH SRDWH VFKLPED GH FWUH
programator.
•Caption este textul ce apare pe
FRPSRQHQWvQWLPSXOH[HFXLHLSURJUDPXOXL
•VisibleLDYDORULOHWUXHVDXIDOVHGXSFXP
FRPSRQHQWDHVWHYL]LELOSHHFUDQVDXQX
•Enabled LD YDORULOH WUXH VDX IDOVH GXS
FXPFRPSRQHQWDHVWHDFWLYVDXQX'DFQXHVWH
DFWLY WUHEXLH DFWLYDW SULQ SURJUDP SHQWUX D
SXWHD IL IRORVLW VWDELOLQG OD WUXH YDORDUHD
SURSULHWLHQDEOHG
•TabStopSRDWHOXDYDORDUHDWUXHúLDWXQFL
FRPSRQHQWD SRDWH IL VHOHFWDW SULQ DSVDUHD
VXFFHVLY D WDVWHL 7DE VXQW VHOHFWDWH VXFFHVLY
componentele cu valoarea TabStop:=True) sau
SRDWH OXD YDORDUHD IDOVH úL DWXQFL QX VH SRDWH
selecta cu Tab.
•TabOrder este un întreg prin care se
VSHFLILFQXPUXOGHRUGLQHSULQWUHFRPSRQHQWHOH
cu TabStop:=True. In mod implicit se atribuie o
valoare, în ordinea punerii componentelor în
IRUP
•Cursor GHWHUPLQ FH IRUP YD DYHD
PRXVHXOFkQGWUHFHSHVWHFRPSRQHQW
•HintDUHFDYDORDUHXQWH[WFHVHDILúHD]
vQWUR IHUHDVWU PLF FD LQIRUPDLH SHQWUX XWLOL]DWRU FkQG VH WUHFH FX
PRXVHXOSHVWHFRPSRQHQW$ILúDUHDVHIDFHGRDUGDF6KRZ+LQW 7UXH
•ShowHint SRDWH IL WUXH FkQG LQIRUPDLD GLQ SURSULHWDWHD +LQW VH
DILúHD]VDXSRDWHILIDOVHFkQGLQIRUPDLDQXVHDILúHD]
•Ctl3DSRDWHIL7UXHúLDWXQFLFRQWUROXODUHDVSHFWGLPHQVLRQDOVDX
IDOVHúLDWXQFLDUHDVSHFWGLPHQVLRQDO
•Left, Top, Width, Height GHWHUPLQ SR]LLD úL PULPHD
componentei. Valorile sunt completate automat la punerea componentei pe
IRUPGDUSRWILVFKLPEDWHúLSULQSURJUDP

22
UTCB
•Align poate lua valorile alNone, alTop, alBottom, alLeft, alRight,
DO&OLHQW úL GHWHUPLQ DOLQLHUHD FRPSRQHQWHL vQ IRUP FKLDU GDF IRUP VH
UHGLPHQVLRQHD]
•PopupMenu HVWH HJDO FX QXPHOH XQXL PHQLX 3RSXS FDUH VH
DFWLYHD]ODXQFOLFGUHDSWDFXPRXVHXOVDXQXLDQLFLRYDORDUH
•Autosize SRDWH IL WUXH úL DWXQFL FRPSRQHQWD VH SRDWH DXWRGLPHQVLRQD
GDFHVWHQHYRLHVDXIDOVHúLDWXQFLFRPSRQHQWDvVLVFKLPEGLPHQVLXQLOHGRDU
la comanda programatorului.
$WXQFL FkQG R FRPSRQHQW HVWH SODVDW SH IRUP úL VHOHFWDW vQ REMHFW
LQVSHFWRUDSDUWRDWHSURSULHWLOHGLVSRQLELOHvQ PRPHQWXOSURLHFWULL DSOLFDLHL
8QHOHSURSULHWLVXQWGLVSRQLELOHGRDUvQWLPSXOH[HFXLHLSURJUDPXOXLúLHOHVH
pot afla din Help.
Metodele sunt proceduri ale componentelor care pot fi apelate în timpul
UXOULLSURJUDPXOXL
Evenimentele UHSUH]LQW PLMORFXO GH OHJWXU GLQWUH DFLXQLOH
utilizatorului, cu mouse-ul sau tastatura, exercitate asupra componentei vizuale,
úL GHFL]LL GH DFLXQH FDUH VH LDX vQ SURJUDP )LHFDUH WLS GH HYHQLPHQW DUH XQ
QXPH2Q&OLFN2Q'EO&OLFNHWF/DDSDULLDXQXLDVWIHOGHHYHQLPHQWVLVWHPXO
WULPLWHFWUHDSOLFDLHXQPHVDMLDUvQDSOLFDLHVHODQVHD]vQH[HFXLHSURFHGXUD
DVRFLDW PHVDMXOXL ,Q PRG VWDQGDUG SURFHGXUD DVRFLDW HYHQLPHQWXOXL GHFL
PHVDMXOXL 2Q&OLFNVHQXPHúWH&OLFNFHDVRFLDWHYHQLPHWXOXL2Q'EO&OLFNVH
QXPHúWH 'EO&OLFN HWF ([LVW PXOWH WLSXUL GH HYHQLPHQWH FX SURFHGXULOH
FRUHVSXQ]WRDUH0DLMRVVHGDXQXPHOHFkWRUYDHYHQLPHQWHPDLIUHFYHQWWUDWDWH
vQDSOLFDLL
•OnClickVHGHFODQúHD]FkQGVHIDFHFOLFFXPRXVHXOSHFRPSRQHQW
•OnDblClickVHGHFODQúHD]ODGXEOXFOLFSHFRPSRQHQW
•OnMouseMoveVHGHFODQúHD]ODPLúFDUHDPRXVHXOXL
•OnKeyPressVHGHFODQúHD]ODDSVDUHDXQHLWDVWH
•OnKeyDown  VH GHFODQúHD] FkQG R FRPSRQHQW HVWH VHOHFWDW úL VH
DSDVRWDVW
•OnKeyUp  VH ODQVHD] FkQG XQ XWLOL]DWRU ODV V VH ULGLFH R WDVW
DSVDW
•OnEnterúLOnActivateDSDUFkQGRFRPSRQHQWGHYLQHDFWLY([LVW
RDQXPHGLIHUHQvQWUHVLWXDLLOHGHDSDULLHDOHFHORUGRXHYHQLPHQWH
•OnResize - apare când imaginea componentei de pe ecran este
UHGLPHQVLRQDWvQWLPSXOUXOULLDSOLFDLHL
•OnShowDSDUHH[DFWvQDLQWHFDVGHYLQYL]LELOFRPSRQHQWD
•OnDragOverDSDUHFkQGXWLOL]DWRUXOWUDJHXQRELHFWSHVWHFRPSRQHQW
•OnDragDropDSDUHFkQGXQXWLOL]DWRUODVSHVWHFRPSRQHQWXQRELHFW
ce este tras cu mouseul.
•OnHideDSDUHH[DFWvQDLQWHFDRFRPSRQHQWVILHIFXWLQYL]LELO
•OnExit  DSDUH FkQG VHOHFLD HVWH WUHFXW GH OD FRPSRQHQW OD DOW
FRPSRQHQW
23
UTCB
•OnChangeDSDUHFkQGFRQLQXWXOXQHLFRPSRQHQWHVHPRGLILF
•OnHint DSDUH FkQG VH PLúF PRXVHXO SH RELHFW $WXQFL DSDUH R PLF
IHUHDVWUSHFDUHVHGDXH[SOLFDLLGHVSUHFHVHSRDWHIDFHHWF
Deoarece procedura Click, de exemplu, o au mai multe obiecte, pentru a
OH GLVWLQJH vQ SURJUDP QXPHOH FRPSOHW GDW HL GH FWUH 'HOSKL HVWH QXPHOH
RELHFWXOXL FDUH R DUH FRQWLQXDW FX QXPHOH &OLFN $QDORJ VH SURFHGHD] FX
celelalte proceduri de eveniment. De exemplu procedura Click a obiectului
Edit1 se va numi Edit1Click.
6WLOXO GH SURJUDPDUH vQ FDUH DFLXQLOH FH VH H[HFXW GH FWUH SURJUDP
GHSLQG GH HYHQLPHQWHOH FDUH DSDU vQ WLPSXO UXOULL SURJUDPXOXL VH QXPHúWH
SURJUDPDUHFRQGXVGHHYHQLPHQWH HYHQWGULYHQ 
,QKHOSXOGLQ'HOSKLVHJVHVFSHQWUXILHFDUHFRPSRQHQWSURSULHWLOHúL
HYHQLPHQWHOH OD FDUH UVSXQGH HOH VXQW DILúDWH úL GH 2EMHFW ,QVSHFWRU YH]L
ILJXUDSUHFHGHQW SUHFXPúLPHWRGHOHHL
Componentele vizuale sunt plasate pe bara cu unelte a programului
Delphi.

(OHVXQWJUXSDWHDúDFXPVHYHGHvQILJXUvQPDLPXOWHVHULL6WDQGDUG
Aditional, Win95, Data Access, etc. Un clic cu mouse-ul pe un nume de serie
GXFHODDILúDUHDFRPSRQHQWHORUGLQVHULDUHVSHFWLY,QILJXUDGHPDLVXVDSDUH
seria Standard.

&RPSRQHQWHOHGLQVHULD6WDQGDUGDúDFXPVHYGvQILJXUVXQW

Obiectul 'LQ3URSULHWL Evenimente Din


mai folosite Metode
Name=numele meniului )LHFUXL DUWLFRO GH PHQLX L VH
MainMenu, este Items RS LXQLOH GH PHQLX DVRFLD] R SURFHGXU vQ XQLWXO
IRORVLW OD DOFWXLUHD Un articol de meniu are: formei unde este meniul. Când
meniurilor ce apar în Caption: numele pe ecran HVWHVHOHFWDWDUWLFROXOVHODQVHD]
partea de sus a ferestrelor Name: identificator in vQ H[HFXLH SURFHGXUD 3HQWUX
program
introducerea articolelor de meniu
Enabled: este True sau False
GXS FXP HVWH DFWLY VDX QX VH IDFH GXEOX FOLF SH PHQLX úL
RS LXQHD apare editorul de meniuri. De
Visible: True sau False DFXP DGXJDUHD GH DUWLFROH
Checked:=True sau False GHYLQH IRDUWH XúRDU 3HQWUX
FUHDUHD vQ WLPSXO H[HFXLHL D
(apare sau nu )
meniurilor se folosesc metodele:
Create, Free, Destroy

PopupMenuVHIRORVHúWHSHQWUXDFUHDPHQLXULvQRULFHORFSHHFUDQDWXQFLFkQGD XQ
RELHFWHVWHVHOHFWDWE SURSULHWDWHD3RSXS0HQXDRELHFWXOXLHVWH HJDO FXQXPHOHPHQLXOXL
24
UTCB
SRSXSúLF VHDSDVPRXVHXOGUHSW
AutoPopup 7UXH VDX )DOVH SHUPLWH V DSDU VDX QX PHQLXO SRSXS

Name=identificatorul în ,QJHQHUDOVHIRORVHúWHVXEIRUPD
Label VH IRORVHúWH program Nume.Caption:=string, pentru a
pentru a crea etichete= Caption=textul pe ecran PRGLILFD WH[WXO vQ IXQFLH GH
zone de text, pentru Autosize= true sau false; starea programului
H[SOLFDLL permite sau nu
autodimensionarea
Visible=true sau false
Name=identificatorul ,Q JHQHUDO UHDFLRQHD] OD PXOWH
Edit VH IRORVHúWH casetei evenimente, Click, DblClick,
pentru a prelua date de la Text WH[WXOGLQFDVHW Change, Hint, etc.
utilizator sau pentru a Width OLPHDFDVHWHL
DILúDLQIRUPDLLSHROLQLH Visible=true sau false
Datele pot fi editate în ReadOnly=true sau false
WLPSXOH[HFXLHL SHUPLWHGRDUDILúDUHDVDXúL
editarea textului

Name=identificator 0HWRGHOHXUPWRDUHVXQWXWLOH
Memo VH XWLOL]HD] Lines=linii de text SelectAll VHOHFWHD]WRWWH[WXO
pentru a edita text pe mai MaxLength=nr. Max de CopyToClipboard=trimite textul
multe linii caractere selectat în Clipboard
WordWrap=true sau false, CutToClipboard
permite sau nu ca un string PasteFromClipboard
ce nu incape pe o linie ClearSelection
fizica sa fie continuat pe ,Q PHQLXO +HOS VH JVHVF
alta descrise toate metodele)
SelText=textul selectat 5HDFLRQHD] OD HYHQLPHQWHOH
SelStart SR]LLD GH XQGH Change, Click, DblClick, etc.
începe textul selectat
SelLength=lungimea
textului selectat
Name=identificator In general
Button VH XWLOL]HD] Caption=text pe buton UHDFLRQHD]
ODGHFODQúDUHDGHFRPHQ]L Visible=true, false la
Hint WH[WDILúDWFkQGVHWUHFHFXPRXVHXOSHVWH Click,
buton DblClick,
TabStop=true,false permite selectarea butonului KeyDown,
cu Tab KeyPressed
TabOrder=nr. de ordine în care este selectat GDU úL OD DOWH
când se trece cu Tab de la un control la altul evenimente.

Name=identificator
CheckBox FDVHW GH Caption WH[WDILúDWDOWXUL
validare sau invalidare a State FE&KHFNHG FE8Q&KHFNHG FE*UD\HG DUDW VWDUHD
XQHL RSLXQL LQGHSHQGHQW controlului
GHDOWHRSLXQL Enabled=true,false
Visible=true,false

Name=identificator 5HDFLRQHD] OD Click, KeyPress,


RadioButton, se Caption WH[WDILúDWDOWXUL Enter, Exit, MouseDown,
25
UTCB
XWLOL]HD] SHQWUX YDOLGDUHD Checked=true,false MouseMove, etc.
XQHLVLQJXUHRSLXQL GLQWU Enabled=true,false
R OLVW PDL PXOWH Visible=true,false
Radiobutoane). De obicei
se pun mai multe
radiobutoane într-un
“GroupBox”. Decizia în
SURJUDPVHLDvQIXQFLHGH
controlul selectat.
Name=identificator 5HDFLRQHD]
ListBoxVH XWLOL]HD] Items úLUXULOHGLQOLVW,WHPVHVWHXQRELHFWFDUH OD
SHQWUXDILúDUHDPDLPXOWRU FRQLQH PHWRGH FD Add, Delete, Insert, Exchange, Enter
YDULDELOH 6WULQJ ,Q OLVW Move FDUH SHUPLW DGXJDUHD úWHUJHUHD VFKLPEDUHD Exit
ele apar ca prima valoare, sau mutarea unui articol Click
a doua valoare, etc. Sorted WUXH IDOVH HOHPHQWHOH GLQ OLVW VXQW VRUWDWH DblClick
sau nu) KeyDown
ItemIndex= indicele articolului selectat KeyUp
SelCount QUGHDUWLFROHVHOHFWDWHGLQOLVW KeyPress
Selected[x:Integer]  WUXH VDX IDOVH GXS DragDrop
articolul x este selectat sau nu DragOver
MultiSelect WUXHIDOVH GHWHUPLQ GDF VH SRW
VHOHFWD PDL PXOWH DUWLFROH GLQ OLVW ,QLLDO HVWH
false.
Nume=identificator 5HDFLRQHD] OD Click, Change,
ComboBox este o Text RSLXQHD DblClick, Enter, Exit, etc.
caseta de editare + caseta Sorted WUXHIDOVHGXSFXP
de listare pentru a permite sunt sortate sau nu
DOHJHUHD FRPRG D XQHL RSLXQLOH
RSLXQL GH FWUH MaxLength=nr. maxim de
XWXOL]DWRU 2SLXQHD HVWH RSLXQL
un text. Items OLVWDGHRSLXQL YH]L
la ListBox)
Min, MaxYDORULOHvQWUHFDUHYDULD]FRQWRUXOFRQWUROXOXL
ScrollBar este un Position SR]LLD FXUHQW D FRQWRUXOXL GHWHUPLQ SR]LLD
control care permite PDUFDMXOXLSHEDU
GHILODUHD FRQLQXWXOXL XQHL LargeChange FXFkWVHPRGLILFSRVLWLRQODXQFOLFNSHEDU
ferestre. MinChange FXFkWVHPRGLILFSRVLWLRQODXQFOLF SH VJHLOH
GHODFDSWXOEDUHL
5HDFLRQHD] OD HYHQLPHQWH FD &KDQJH (QWHU ([LW &OLFN
DblClick, Keypress, KeyDown,

Name= identificator
GroupBox este un container pentru alte
Caption= textul pe ecran, pentru
componente. De obicei se pun aici componente cu
grup
IXQFLRQDOLWDWHDVHPQWRDUH

Name= identificator
RadioGroup se Caption= textul pe ecran, pentru grup
XWLOL]HD] SHQWUX D JUXSD Items= textele pentru radiobutoanele din grup
radiobutoane. Numai unul ItemIndex QXPUXOEXWRQXOXLVHOHFWDW
din grup poate fi activ 5HDFLRQHD]OD(QWHU([LW&OLFN'UDJ'URS'UDJ2YHU«
(checked)
26
UTCB
Align:=alNone, alTop, alLeft,
PanelHVWHRFRPSRQHQWFRQWDLQHUSHQWUXDOWH DO5LJKW DO%RWWRP  FRQWUROHD]
RELHFWH(VWHXWLOL]DWFDEDUGHXQHOWHVDXFDOLQLHGH aliniarea
stare. Intr-un Panel se pot pune componente ca Label, Ctl3D:=true sau false,
(GLW,PDJH%LW%WQHWFFDUHVHGHSODVHD]vQDOW FRQWUROHD] GDF DSDUH FX DVSHFW
SR]LLHSHHFUDQRGDWFXGHSODVDUHD3DQHOXOXL 3 dimensional sau nu.

7LSXORELHFWHORUVHQRWHD]FXOLWHUD7vQID. Astfel TPanel este clasa de


RELHFWHFDUHvQEDUDGHFRPSRQHQWHVHQXPHúWH3DQHO'LYHUVHRELHFWHGHDFHVW
tip puse în program vor fi numite Panel1, Panel2, etc.

8WLOL]DUHDPHQLXULORU,QWURGXFHUHDúLDILúDUHDGDWHORU3URFHGXUL
asociate evenimentelor

,QPDUHSURJUDPDUHDFXFRPSRQHQWHYL]XDOHFRQVW vQ
1. Stabilirea unui algoritm de rezolvare a problemei
23URLHFWDUHDLQWHUIHHLFXXWLOL]DWRUXO
2.1)RUPDSULQFLSDODDSOLFDLHL
2.2 Meniul
2.3)RUPHOHSHFDUHYRUDSDUHGLDORJXULOHXWLOL]DWRUDSOLFDLH
2.4 Punerea componentelor pe forme
36FULHUHDSURFHGXULORUGHUVSXQVODHYHQLPHQWH,QXQHOHGLQHOHYRU
IL LQFOXVH úL SURFHGXULOH GH UH]ROYDUH SURSULX]LV D SUREOHPHL
programate.
6LOXVWUPSUDFWLFDFHVWHOXFUXUL1HSURSXQHPV VFULHPXQSURJUDPvQ
FDUHVDYHPSURFHGXULGHUH]ROYDWHFXDLLGHJUDGXOúLVLVWHPHGHGRXHFXDLL
FX GRX QHFXQRVFXWH SURFHGXUL GH DGXQDW úL vQPXOLW PDWULFL 'H DVHPHQHD
SULQWURRSLXQHGHPHQLXVDSDUDXWRULLSURJUDPXOXL
Incepem prin a scrie un unit cu procedurile de rezolvare. Acest unit îl vom
DGXJDSURLHFWXOXLDSOLFDLHLQRDVWUH
1. $OHJHPGLQPHQLXO)LOHRQRXDSOLFDLHúLDSRLRúLVDOYPFX6DYH$VvQWU
XQGLUHFWRU6HFUHD]GRXILúLHUHXQXOSHQWUXIRUPúLXQXOSHQWUXXQLWXOHL
FX QXPHOH 8QLWGIP UHVSHFWLY 8QLWSDV &X RS LXQHD File/SaveAs… îl
VDOYPVXEQXPHOH8QLW3ULQFSDV8OWHULRUVHYDVDOYDDLFLúLILúLHUXOSURLHFW
cu extensia .dpr. In mod standard proiectul se va numi Project1.dpr. Il putem
VDOYDVXEDOWQXPHFXRSLXQHD File/Sava Project As….
2. $GXJP XQ QRX XQLW DSOLFDLHL DOHJkQG File/New… úL DSRL GLQ FDVHWD GH
dialog New Items(vezi în continuare) alegem “Unit”. Scriem codul de
UH]ROYDUH SHQWUX HFXDLD GH JUDGXO ,, úL SHQWUX VLVWHP FD vQ FRQWLQXDUH vQ
WH[WXOFHXUPHD]

27
UTCB

unit UnitCalcule;

interface

type matrice22=array[1..2,1..2] of real;


vector2=array[1..2]of real;

procedure ec2(a,b,c:real;var x1,x2,re,im:real;var cod:integer;var s:string);


procedure sis2ec(a:matrice22;var b,x:vector2;var cod:integer; var s:string);
{FRGYDFRQLQHGDFUH]ROYDUHDDGHFXUVQRUPDOVDX!vQFD]FRQWUDU}
{VYDFRQLQHPHVDMXOSHFDUHSURFHGXUDvOWHQVPLWHODWHUPLQDUHDFDOFXOHORUvQ
IXQFLHGHFXPDXGHFXUVDFHVWHD}

implementation

procedure ec2;
var d:real;
begin
if a=0 then
begin cod:=1; s:='nu este ecuatie de gradul 2';
end
else
begin d:=b*b-4*a*c;
if d<0 then
begin s:='radacini complexe'; re:=-b/(2*a);
im:=sqrt(-d)/(2*a);cod:=2;
end
else
begin x1:=(-b-sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a);
cod:=0; s:='radacini reale';
end
28
UTCB
end;
end; {terminare ec2}

procedure sis2ec;
var delta:real;
begin
delta:=a[1,1]*a[2,2]-a[1,2]*a[2,1];
if(abs(delta)<1.e-10) then
begin s:='sistem singular';cod:=1;
end
else
begin x[1]:=(b[1]*a[2,2]-b[2]*a[1,2])/delta;
x[2]:=(a[1,1]*b[2]-a[2,1]*b[1])/delta;
cod:=0;
s:='solutie unica';
end;
end;

end.

3. $GXJP XQLWXO SURLHFWXOXL QRVWUX SULQ PHQLXO Project/Add to Project….


$OHJHP RSLXQHD File/SaveAs…, úL VDOYP XQLWXO VXE QXPHOH
UnitCalcule.pas.
4. Alegem View/Project Manager úL GLQ FDVHWD FX FRPSRQHQWHOH SURLHFWXOXL
DOHJHPIRUPDSULQFLSDOFDUHFRUHVSXQGHXQLWXOXL8QLWVDX8QLW3ULQFGDF
l-am salvat cu numele nou. In Object InspectorFRPSOHWPFkPSXO1DPHFX
valoarea de tip string “FormPrinc”, iar câmpul Caption cu “Unele Ecuatii”.
)RUPD YD IL VDOYDW FX QXPHOH )RUP3ULQFGIP vQ PRG DXWRPDW 5HVWXO
SURSULHWLORUOHOVPGHILQLWHLPSOLFLWGH'HOSKL
3. 6HOHFWP GLQ EDUD GH FRPSRQHQWH SH
0DLQ0HQXúLDSRLFXPRXVHXODSVDWWUDVP
un dreptunghi pe forma FormPrinc. Imediat
YD DSDUH R LFRDQ 0DLQ0HQX SH IRUP 8Q
GXEOX FOLF SH LFRDQ úL DSDUH HGLWRUXO GH
meniuri unde introducem
RSLXQLOH GH
meniu ca în
ILJXULOHDOWXUDWH)LHFUHLRSLXQLGHPHQLXvLYD
FRUHVSXQGH R DFLXQH FDUH VH GHFODQúHD] FkQG
VH VHOHFWHD] RSLXQHD UHVSHFWLY FX PRXVHXO
sau tastatura.

6. )DFHP GXEOX FOLF SH ³7HUPLQDUH´ úL DSDUH


SURFHGXUD DVRFLDW DUWLFROXOXL GH PHQX 7HUPLQDUH GH SH IRUPD )RUP3ULQF
29
UTCB
,QLLDO SURFHGXUD FRQLQH GRDU EHJLQ úL HQG $GXJP KDOW FHHD FH YD
GHWHUPLQDWHUPLQDUHDSURJUDPXOXLFkQGVHVHOHFWHD]DFHVWDUWLFROGHPHQLX
procedure TFormPrinc.Terminare1Click(Sender: TObject);
begin
halt;
end;
,Q PRG VWDQGDUG 'HOSKL G QXPH XQLFH GLYHUVHORU FRPSRQHQWH VDX
DUWLFROHGHPHQLXDGXJDWHIRUPHL6FKLPEDUHDQXPHOXLVXEFDUHDFHVWHDVHYG
vQ SURJUDP VH IDFH SULQ VFKLPEDUHD YDORULL SURSULHWL 1DPH FRUHVSXQ]WRDUH
1XPHOHSURFHGXULORUGHHYHQLPHQWHVWHELQHVILHOVDWHDúDFXPVXQWSURSXVH
de mediul Delphi deoarece s-ar putea crea confuzii între evenimentele care apar
úLSURFHGXULOHDVRFLDWH
7. &RPSOHWP DFXP DFLXQHD DVRFLDW RSLXQLL ³'HVSUH´ 9UHP FD OD DOHJHUHD
DFHVWHL RSLXQL V VH DILúH]H R
IHUHDVWU FX LQIRUPDLL GHVSUH
program. Pentru aceasta alegem
File/New… úL GLQ FDVHWD GH GLDORJ
“New Items” alegem “Forms”, apoi
VHOHFWP LFRDQD ³$ERXW%R[´
6FKLPEP WH[WHOH GH SH IRUP DúD
FXP VH YHGH vQ ILJXU ,Q FkPSXO
Caption punem “Despre…”. Prin clic
SH GLYHUVH FRPSRQHQWH YHGHP F
IRUPDFRQLQHXQRELHFW73DQHOQXPLW
3DQHO FDUH FRQLQH GRX HWLFKHWH 3URGXFW1DPH úL 9HUVLRQ GH WLS 7/DEHO
SUHFXP úL XQ RELHFW QXPLW 3URGXFW,FRQ GH WLS 7,PDJH &RPSOHWP
3URGXFW1DPH&DSWLRQ úL 9HUVLRQ&DSWLRQ FD vQ ILJXU IRORVLQG 2EMHFW
,QVSHFWRU LDUvQFkPSXO3URGXFW,FRQ3LFWXUHDOHJHPRSLFWXUFXDMXWRUXOOXL
2EMHFW ,QVSHFWRU VDX OVP ILJXUD VWDQGDUG SURSXV GH 'HOSKL ,Q PRG
VWDQGDUG ILHFUHL IRUPH PHGLXO 'HOSKL vL DVRFLD] XQ XQLW vQ FDUH VXQW
VSHFLILFDWH RELHFWHOH GH SH IRUP úL SURFHGXULOH DVRFLDWH HYHQLPHQWHORU ,Q
DFHVWFD]QXDYHPQLPLFGHDGXJDW6DOYPXQLWXOVXEQXPHOH³8QLW'HVSUH´
8. 3XWHP UXOD DFXP SURJUDPXO 9HGHP F UVSXQGH OD RSLXQLOH GH PHQLX
³'HVSUH´úL³7HUPLQDUH´GDUQXúLODUH]ROYDUHDGHHFXDLL
9. &RPSOHWP UVSXQVXO SURJUDPXOXL OD UH]ROYDUHD HFXDLHL GH JUDGXO ,,
Alegem File/New…úL GLQ GLDORJXO ³1HZ ,WHPV´ DOHJHP R IRUP QRX SH
FDUHRFRPSOHWPFDvQFRQWLQXDUH
A.&kPSXO1DPHvOFRPSOHWPFX)RUP(F&DXUPDUHIRUPDYDILVDOYDWVXE
QXPHOH  )RUP(FGIP 3XQHP SH IRUP FLQFL RELHFWH 7(GLW QXPLWH VWDQGDUG
Edit1, Edit2,.. Edit5 în ordine în care au fost puse. In primele trei se vor pune
FRHILFLHQL HFXDLHL LDU vQ XOWLPHOH GRX VROXLLOH ,Q IDD ILHFUXL RELHFW 7(GLW
SXQHP FkWH R HWLFKHW 7/DEHO DO FUHL FkPS &DSWLRQ YD IL FRPSOHWDW FX
H[SOLFDLLGHVSUHFkPSXO(GLWYHFLQ

30
UTCB
0DL SXQHP XQ RELHFW 7/DEHO DX[LOLDU SHQWUX D DILúD H[SOLFDLL GHVSUH
UH]ROYDUHDHFXDLHLGHJUDGXO,,,QSDUWHDGHMRVDIRUPHLSXQHPGRXEXWRDQH
GH FRPDQG &kPSXULOH ORU &DSWLRQ VH FRPSOHWHD] FX WH[WHOH GLQ ILJXU /D
RELHFWHO7HGLWFRPSOHWPFkPSXULOH7H[WFXµ¶DGLFWH[WXOYLG$SDUHDVWIHOR
IRUPFDFHDGHDOWXUL
B. )RUPHLL VH DVRFLD]
un unit pe care îl
VHOHFWP GLQ
3URJUDP0DQDJHUúL
vO VDOYP VXE
numele UnitEc2.
8UPHD] V
DGXJP DFLXQLOH
GH UVSXQV OD
butoanele de pe
IRUP 3ULQ GXEOX
clic pe un buton,
apare procedura din
XQLWXOIRUPHLFDUHVHFRPSOHWHD]FDPDLMRV(VWHXPEULWGRDUSDUWHD
DGXJDWGHQRL

Codul ([SOLFDLL
unit UnitEc2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls,
UnitCalcule; 6H DGDXJ XQLWXO 8QLW&DOFXOH
SHQWUX F IRORVLP SURFHGXUD (F
type din acest unit.
TFormEc2 = class(TForm)
Label1: TLabel;
Edit1: TEdit; 3H PVXU FH DP SXV FX PRXVHXO
Label2: TLabel; FRPSRQHQWH SH IRUP vQ PRG
Label3: TLabel; automat aceste componente au fost
Edit3: TEdit; DGXJDWH vQ XQLWXO IRUPHL OD FODVD
Edit2: TEdit; 7)RUPHF FH UHSUH]LQW WLSXO GH
Label4: TLabel; IRUPDVRFLDWFXQXPHOHGDWGHQRL
Label5: TLabel; FormEc2.
Edit4: TEdit;
Label6: TLabel;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
31
UTCB
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormEc2: TFormEc2;
a,b,c,x1,x2,re,im:real;
cod:integer;
s,s1,s2:String; Aici am pus datele necesare
UH]ROYULL HFXDLHL FRHILFLHQL
implementation VROXLLPHVDMH

{$R *.DFM}

procedure TFormEc2.Button1Click(Sender:
TObject); 2ELHFWHOH (GLW úL (GLW VH IDF
begin 5HDG2QO\ SHQWUX FD XWLOL]DWRUXO V
Edit4.ReadOnly:=True; Edit5.ReadOnly:=True; QXOHSRDWPRGLILFD3URJUDPXOYD
Val(Edit1.Text,a,cod); DILúD DLFL UH]XOWDWHOH 3UHOXDUHD
Val(Edit2.Text,b,cod); datelor se face ca texte din
Val(Edit3.Text,c,cod); (GLW7H[W (GLW7H[W úL
ec2(a,b,c,x1,x2,re,im,cod,s); Edit3.Text. Aceste texte se
If (cod=0) then convertesc în numere cu procedura
begin Str(x1:15:5,s1);Str(x2:15:5,s2); 9DO 'DF DSDUH R HURDUH GH
Edit4.Text:=s1; Edit5.Text:=s2; conversie, variabila cod va lua o
Label4.Caption:=s; YDORDUH QHQXO 3XWHP IRORVL
label5.Caption:='x1=';label6.Caption:='x2='; DFHDVW YDORDUH SHQWUX D OXD R
end GHFL]LH GH H[HPSOX SHQWUX D DILúD
else XQ PHVDM F GDWHOH QX VXQW FRUHFW
begin Str(re:15:5,s1);Str(im:15:5,s2); introduse.
Edit4.Text:=s1; Edit5.Text:=s2; 6HDSHOHD]SURFHGXUDHFSHQWUXD
UH]ROYD HFXDLD 9DORULOH UHWXUQDWH
Label4.Caption:=s;label5.Caption:='re=';label6.Cap VXQW IRORVLWH SHQWUX D DILúD
tion:='im='; UH]XOWDWHOH 3HQWUX D DILúD QXPHUH
end; HOHVHFRQYHUWHVFPDLvQWkLvQúLUXUL
end; de caractere cu procedura Str. Pe
XUPFkPSXULOH7H[WDOHRELHFWHORU
procedure TFormEc2.Button2Click(Sender: (GLWXQGHYUHPVDSDUUH]XOWDWHOH
TObject); VH HJDOHD] FX úLUXULOH RELQXWH
begin ([SOLFDLLOH VH DILúHD] SULQ
Close; atribuirea de valori de tip string
end; câmpurilor Caption ale etichetelor.
end.
/D DSVDUHD EXWRQXOXL 
³7HUPLQDUH´GHSHIRUPIRUPDVH
vQFKLGH úL SURJUDPXO UHYLQH OD
IRUPDSUHFHGHQWGHXQGHVDIFXW
32
UTCB
apelul.

C. 7UHEXLH FD DFWLYDUHD IRUPHL (F úL GHFL SRVLELOLWDWHD GH D UH]ROYD R
HFXDLHGHJUDGXO,,VVHIDFODDOHJHUHDDUWLFROXOXLGHPHQLX³(FXDWLDGHJUDGXO
II”. Pentru a realiza acest lucru alegem din Program Manager forma FormPrinc
FH FRQLQH PHQLXO úL IDFHP XQ FOLF SH RSLXQHD UHVSHFWLY GH PHQLX $SDUH
SURFHGXUDDVRFLDWHYHQLPHQWXOXL&OLFNSHRSLXQHDGHPHQLXGLQXQLWXOIRUPHL
,QLLDO SURFHGXUH FRQLQH GRDU EHJLQ úL HQG $GXJP FD PDL MRV OLQLD
FormEc2.ShowModal;

procedure TFormPrinc.EcuatiadegrII1Click(Sender: TObject);


begin
FormEc2.ShowModal;
end;

Metoda FormEc2.ShowModalvQVHDPQFGXSFHDSDUHIRUPD)RUP(F
QXSXWHPWUHFH OD DOW IRUP D DSOLFDLHLSkQ QXR vQFKLGHP SH DFHDVWD 'DF
apelam metoda FormEc2.Show atunci puteam deschide mai multe forme ale
DSOLFDLHLVLPXOWDQSXWkQGWUHFHGHODXQDODDOWDIUDOHvQFKLGH
3XWHPUXODDFXPSURJUDPXOúLYHGHPFODXQFOLFSH³(FXDLDGHJU,,´VH
DFWLYHD] )RUP(F úL SXWHP UH]ROYD R HFXDLH GH JUDGXO ,, /D DSVDUHD
butonului “Terminare” se revine la forma FormPrinc.

10. &RPSOHWPUVSXQVXOSURJUDPXOXLODDOHJHUHD³´6LVWHPHOLQLDUH´GLQPHQLXO
SULQFLSDO 3URFHGP FD OD SXQFWXO  6H FUHHD] R QRX IRUP QXPLW
)RUP6LVOLQFDUHDUDWFDPDLMRV

Câmpul name se
FRPSOHWHD] FX
“FormSislin”, iar câmpul
&DSWLRQVHFRPSOHWHD]FX
“Sisteme Liniare”, apoi se
GLPHQVLRQHD] FX PRXVH
XOIRUPDODPULPHDGRULW
úL VH SXQ RELHFWHOH FD vQ
ILJXU

Unitul asociat formei va


DUWDFDvQFRQWLQXDUH
Codul ([SOLFDLL
unit Unitsislin; /D IHO FD vQ FD]XO HFXDLHL
GHJUDGXO,,VDXPEULWXúRU
interface ceea ce avem noi de
uses DGXJDW
Windows, Messages, SysUtils, Classes, Graphics, Controls,
33
UTCB
Forms, Dialogs, StdCtrls,
UnitCalcule;

type
TFormSislin = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Edit6: TEdit;
Label7: TLabel;
Label8: TLabel;
Edit7: TEdit;
Label9: TLabel;
Edit8: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormSislin: TFormSislin;
a:matrice22;
b,x:vector2; Datele pentru rezolvare
s:string;
cod:integer;
implementation

{$R *.DFM}

procedure TFormSislin.Button1Click(Sender: TObject);


begin Edit7.ReadOnly:=True; Edit8.ReadOnly:=True;
Val(Edit1.text,a[1,1],cod);
Val(Edit2.text,a[1,2],cod);
Val(Edit4.text,a[2,1],cod); Preluarea datelor din
Val(Edit5.text,a[2,2],cod); casetele Edit, conversia lor
Val(Edit3.text,b[1],cod); în numere, apelul procedurii
Val(Edit6.text,b[2],cod); sis2ec din unitul
sis2ec(a, b,x, cod, s); UnitCalcule pentru

34
UTCB
rezolvarea sistemului,
if(cod=0)then conversia rezultatelor
begin label7.caption:=s;Str(x[1]:10:3,s);Edit7.text:=s; vQWRDUVH GH VLVHF vQ úLUXUL
Str(x[2]:10:3,s);Edit8.text:=s; GH FDUDFWHUH úL DILúDUHD ORU
end în casetele Edit.
else ([SOLFDLL VXSOLPHQWDUH VH
begin label7.Caption:=s;Edit7.text:='';Edit8.text:=''; dau prin atribuirea de valori
end; GH WLS 6WULQJ SURSULHWLORU
end; Caption ale unor etichete.

procedure TFormSislin.Button2Click(Sender: TObject);


begin
Close;
end;
$SVDUHD EXWRQXOXL
end GHWHUPLQ vQFKLGHUHD
formei.

 3URJUDPXO HVWH JDWD úL vO


SXWHP VDOYD (O FRQLQH DFXP
PXOWH ILúLHUH &RPSRQHQWHOH SH
care le putem modifica apar în
3URMHFW 0DQDJHU 3H OkQJ
acestea apar uniturile compilate,
ILúLHUXO H[HFXWDELO FDUH DUH FD
nume tocmai numele proiectului,
HYHQWXDOHDOWHILúLHUH
12. Alegem RunúLSXWHPXUPUL
HYROXLDSURJUDPXOXL

2.4 Utilizarea obiectelor de navigare prin structura de directoare

$FHVWHRELHFWHVHJVHVFSHEDUDGHXQHOWH6\VWHP0DLMRVVXQWGHVFULVH
FkWHYDSURSULHWLDOHXQRURELHFWHGHDLFLVXILFLHQWHSHQWUXDSOLFD LLVLPSOH

Obiectul 'LQ3URSULHWL

Drive:=drive-ul selectat
DriveComboBox DirList:=numele unui obiect de tip DirectoryListBox care va da
HVWH R FDVHW SHQWUX OLVWDGLUHFWRDUHORUFkQGVHVFKLPEGULYHXOvQ'ULYH&RPER%R[

35
UTCB
VHOHFLD SULQ SURJUDP D Text QXPHOHGULYHXOXLLQLLDOVHOHFWDW
discului de lucru (local
VDXvQUHHD
Directory:=directorul curent
DirectoryListBox FileList QXPHOH XQXL RELHFW GH WLS )LOH/LVW%R[ FDUH YD DILúD
HVWHRFDVHWGHVHOHFWDUH ILúLHUHOHGLQGLUHFWRUXOVHOHFWDW
a directorului curent Drive GULYHXOSHFDUHVHJVHúWHGLUHFWRUXOFXUHQW
DirLabel QXPHOHXQXLRELHFW7/DEHODFUXLYDORDUH&DSWLRQYD
ILDXWRPDWDFWXDOL]DWFXQXPHOHGLUHFWRUXOXLFXUHQW

FileName QXPHOHILúLHUXOXLVHOHFWDW FDOHDHVWHLQFOXV


FileListBox este o Mask PDVFDILúLHUHORUDILúDWHvQOLVW  3$6   7;7HWF 
FDVHW GH DILúDUH D FileType DWULEXWHOH ILúLHUHORU FH VXQW DILúDWH vQ )LOH/LVW%R[
ILúLHUHORU GLQ GLUHFWRUXO Poate lua valorile: ftReadOnly, ftHidden, ftSystem, ftVolumeID,
curent ftDirectory, ftArchive, ftNormal D FURU VHPQLILFDLH HVWH
FODU
FileEdit:=numele unui obiect de tip TEdit în care numele
ILúLHUXOXLHVWHDILúDW
ShowGlyphs 7UXHVDX)DOVHúLGHWHUPLQDILúDUHDVDXQHDILúDUHD
LFRDQHORUDVRFLDWHILúLHUHORU
ItemIndex QXPUXOGHRUGLQHDOILúLHUXOXLVHOHFWDW
TopIndex ,QGH[XOSULPXOXLILúLHUDILúDWvQOLVW

FileList QXPHOHXQXLRELHFWGHWLS)LOH/LVW%R[XQGHVHYRUDILúD
FilterComboBox ILúLHUHOHGHWLSXOVHOHFWDWvQ)LOWHU&RPER%R[
este folosit pentru a Filter /LVWDWLSXULORUGHILúLHUHGLQFDUHVHSRDWHDOHJH
VHOHFWD WLSXULOH GH ILúLHUH Text 7H[WXOFHDSDUHLQLLDOvQ)LOWHU&RPER%R[
FH VH YRU DILúD vQWUXQ Mask PDVFDILúLHUHORUFHYRUILDILúDWHvQ)LOH/LVW%R[
obirct FileListBox.
Interval:=intevalul de timp, în milisecunde, Procedura
Timer este folosit GXSFDUHVHGHFODQúHD]RDFLXQH GHFODQúDW SHULRGLF
SHQWUX D GHFODQúD XQ Enabled:=True sau False este OnTimer.
eveniment la intervale
fixe de timp.

'HVLJXUH[LVWúLDOWHRELHFWHvQSDOHWDVLVWHPGDUQXLQVLVW PDVXSUDORU
2VHULHGHGLDORJXULDSDUIUHFYHQWvQPDMRULWDWHDDSOLFD LLORUúLDXIRVWSXVH
ODGLVSR]LLDSURJUDPDWRULORU(OHVHDIOvQSDOHWD'LDORJV

Din stânga în dreapta ele se numesc OpenDialog, SaveDialog,


OpenPictureDialog, SavePictureDialog, FontDialog, ColorDialog, PrintDialog,
PrinterSetupDialog, FindDialog, ReplaceDialog.
/DSURLHFWDUHDDSOLFDLHLDFHVWHGLDORJXULVHSXQSHIRUPGDUQX VHYRU
YHGHDODH[HFXLH$FWLYDUHDORUVHIDFHFXFRPDQGD1XPH'LDORJ([HFXWHFkQG
GHYLQ YL]LELOH LDU OD vQFKLGHUHD ORU XQ FkPS FRQ LQH LQIRUPDLD SHQWUX FDUH DX
IRVWSURLHFWDWH$VWIHOFkPSXO)LOH1DPHGHODGLDORJXULOH2SHQRUL6DYHFRQ LQH
QXPHOHúLFDOHDILúLHUXOXLVHOHFWDWFkPSXO)RQWDOGLDORJXOXL)RQW'LDORJFRQ LQH

36
UTCB
IRQWXO DOHV FkPSXO &RORU GLQ &RORU'LDORJ FRQLQH FXORDUHD VHOHFWDW HWF
,QIRUPDLLVXSOLPHQWDUHVHJVHVFvQILúLHUHOH+HOSFRUHVSXQ]WRDUH
,QFRQWLQXDUHSUH]HQWPXQPLFHGLWRUGHWH[WHIRDUWHXúRUGHSURJUDPDW
vQ'HOSKL$úDFXPVHYHGHvQILJXUDDOWXUDWSHIRUPDSURJUDPXOXLSXQHP
- Un obiect
toolbar care se
IL[HD] SH
marginea de
sus a formei
- Pe toolbar
punem 8
EXWRDQH úL 
separatori.
Pentru aceasta
facem un clic
cu dreapta pe
WRROEDU úL
alegem din meniul pop-up care apare fie “New Button” fie “New Separator”.
 3XQHP SH IRUP XQ RELHFW 76FUROO%R[ care este automat denumit
6FUROO%R[3URSULHWDWHD$OOLJQDRELHFWXOXLRIDFHPHJDOFXDO&OLHQWFHHDFH
IDFHFDWRDW]RQDOLEHUDIRUPHLVILHRFXSDWGHDFHVWRELHFW5ROXOOXLHVWHFD
XQVFUROOSHIRUPVQXPLúWHRELHFWHOHGLQDIDUDOXL6FUROO%R[$VWIHOWRROEDUXO
UPkQHIL[DWXQFLFkQGQDYLJPSULQILúLHUXOWH[W
3XQHPSHIRUPXQRELHFW7PHPR care este editorul,propriu zis. El va fi
GHQXPLWDXWRPDW0HPR)DFHPSURSULHWDWHD$OOLJQDRELHFWXOXL0HPRHJDO
cu alClient. Prin aceasta, la redimensionarea formei, obiectul Memo1 se
UHGLPHQVLRQHD] DVWIHO FD V RFXSH WRW VSDLXO OLEHU DO IRUPHL OD IHO FD
ScrollBox1, peste care se suprapune.

- Punem din bara “Additional” un obiect TImageList, care are icoana .


Acest obiect
PHPRUHD] R VHULH GH
imagini de tip bitmap
care vor fi plasate pe
butoane. Pentru a
memora imaginile
facem un dublu clic pe
,PDJH/LVW úL DSDUH
GLDORJXO DOWXUDW SULQ
FDUH PHPRUP R OLVW
de bitmapuri în obiect.
Imaginile le alegem
din cele existente pe
37
UTCB
KDUG GLVF VDX FUHP XQHOH QRL FX XQ HGLWRU SRWULYLW 3DLQW ,PDJH (GLWRU
Photoshop, Corel Draw, etc.
 &RPSRQHQWD 7,PDJH/LVW SXV SH IRUP HVWH GHQXPLW DXWRPDW ,PDJH/LVW
3XWHP SVWUD DFHDVW GHQXPLUH 3URSULHWDWHD ,PDJHV D OXL WRROEDUXOXL R IDFHP
HJDO FX ,PDJHOLVW ,Q IHOXO DFHVWD EXWRDQHOH GH SH WRROEDU YRU DYHD SH HOH
GHVHQDWHLPDJLQLGLQOLVWDPHPRUDWvQ,PDJH/LVW
 )DFHP FOLF SH UkQG SH EXWRDQHOH GLQ WRROEDU úL SURSULHWDWHD ,PDJH,QGH[ D
EXWRQXOXL VHOHFWDW R IDFHP HJDO FX  VDX  VDX HWF DGLF HJDO FX LQGH[XO
XQHLLPDJLQLGLQ,PDJH/LVW,PHGLDWLPDJLQHDUHVSHFWLYDSDUHSHEXWRQ
- Eventual putem redenumi butoanele schimbând proprietatea Name cu un nume
PDL XúRU GH LQXW PLQWH ,Q SURJUDP EXWRDQHOH DX IRVW UHGHQXPLWH
³6FKLPED)RQW´ ³&RSLD]D´ ³7DLH´ ³/LSHúWH´ ³6WHUJH´ 'HVFKLGH´ ³,QFKLGH´
³'HVSUH´ $FXP VXQWHP JDWD V DVRFLHP R SURFHGXU XQXL FOLF SH XQ EXWRQ
9UHP FD XQ FOLF SH EXWRQXO ³&RSLD]´ V DLE FD XUPDUH FRSLHUHD WH[WXOXL
VHOHFWDW vQ &OLSERDUG XQ FOLF SH EXWRQXO ³/LSVHWH´ V DLE FD HIHFW OLSLUHD
WH[WXOXLVDOYDWvQ&OLSERDUGvQILúLHUXOQRVWUXvQSR]LLDLQGLFDWGHFXUVRUHWF
 $GXJP SURJUDPXOXL R IRUP GH WLSXO $ERX%R[ OD IHO FD vQ SURJUDPXO
anterior.
- Punem pe forma programului dialogurile OpenDialog, SaveDialog,
FontDialog. Ele vor fi automat definite OpenDialog1, SaveDialog1,
FontDialog1.
)DFHPGXEOXFOLFSHILHFDUHEXWRQGLQWRROEDUúLFRPSOHWPFDvQOLVWLQJXOGH
PDLMRVSURFHGXULOH&OLFNFRUHVSXQ]WRDUH
Codul Comentarii
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
OleCtrls, StdCtrls, Buttons, ComCtrls, ToolWin;

type
TForm1 = class(TForm)
ToolBar1: TToolBar;
Copiaza: TToolButton;
Taie: TToolButton;
Lipeste: TToolButton;
Deschide: TToolButton;
Inchide: TToolButton;
ToolButton7: TToolButton;
ImageList1: TImageList;
Sterge: TToolButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
StatusBar1: TStatusBar;
38
UTCB
ScrollBox1: TScrollBox;
Memo1: TMemo;
FontDialog1: TFontDialog;
SchimbaFont: TToolButton;
Despre: TToolButton;
ToolButton1: TToolButton;
procedure CopiazaClick(Sender: TObject);
procedure TaieClick(Sender: TObject);
procedure LipesteClick(Sender: TObject);
procedure StergeClick(Sender: TObject);
procedure DeschideClick(Sender: TObject);
procedure InchideClick(Sender: TObject);
procedure SchimbaFontClick(Sender: TObject);
procedure DespreClick(Sender: TObject);

private
pozveche:integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit3;

{$R *.DFM}

procedure TForm1.CopiazaClick(Sender: TObject);


begin
Memo1.CopyToClipboard;
end;

procedure TForm1.TaieClick(Sender: TObject);


begin
Memo1.CutToClipboard;
end;

procedure TForm1.LipesteClick(Sender: TObject);


begin
Memo1.PasteFromClipboard;
end;

procedure TForm1.StergeClick(Sender: TObject);


begin
Memo1.ClearSelection;
end;

39
UTCB
procedure TForm1.DeschideClick(Sender: TObject);
begin
If OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.InchideClick(Sender: TObject);


begin
If SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.SchimbaFontClick(Sender: TObject);


begin
If FontDialog1.Execute then
Memo1.Font:=FontDialog1.Font;
end;

procedure TForm1.DespreClick(Sender: TObject);


begin
AboutBox.ShowModal;
end;

end.
&DGHRELFHLDPVFRVvQHYLGHQFHHDFHWUHEXLHHIHFWLYVVFULHPSULQWU
XQ IRQG vQFKLV 5HVWXO HVWH DGXJDW DXWRPDW GH 'HOSKL SH PVXU FH SXQHP
RELHFWHSHIRUPúLFRPSOHWPFkPSXULOHORU
0DLH[LVWXQXQLWFDUHHVWHDVRFLDWIRUPHL$ERXW%R[GDUDLFLQXWUHEXLH
VVFULHPQLPLFDúDFQXODPOLVWDW
0LQLHGLWRUXOHVWHJDWD$OHJHP³5XQ´úLSXWHPYHGHDFkWGHSHUIRUPDQW
HVWH&LWLWRUXOFXULRVYDJVLPLMORDFHGHDOSHUIHFLRQD

(OHPHQWHGHJUDILFvQ'HOSKL

8QHOHRELHFWHYL]XDOHFRQLQRSURSULHWDWHQXPLWCanvas care la rândul ei


este un obiect în care sunt implementate proceduri grafice. Astfel au proprietatea
Canvas obiectele de tip TForm, TBitmap, TImage, TPrinter, TPaintBox, TLabel,
HWF 2ELHFWXO &DQYDV DUH XUPWRDUHOH SURSULHWL %UXVK &OLS5HFW &RS\0RGH
Font, Handle, LockCount, Pen, PenPos, Pixels. Mai jos sunt descrise câteva
SURSULHWL
Proprietatea Descriere
Brush Descrie fondul de desenare:
Brush.Color:=culoarea fondului;
Brush.Style:=bsSolid, bsDiagCross, bsCross, bsHorizontal,
EV9HUWLFDOHWF GHVFULHPRGHOXOGHKDúXUDUHDILJXULORUvQFKLVH
Brush.Bitmap:= referire la un bitmap de 8x8 pixeli pentru
40
UTCB
KDúXUDUH
Metodele Assign, Create, Destroy, Free se folosesc pentru a
FRSLDFUHDGLVWUXJHVDXHOLEHUDVSDLXORFXSDWGHRSHQVXO
Pen Descrie tipul de linie pentru desen
Pen.Color:=culoarea liniei
Pen.Style:=psSolid, psDash, psDot, psDashDot, psClear,
psInsideFrame (descrie tipul de linie)
Pen.Width:=grosimea liniei în pixeli
Pen.Mode:=pmBlack, pmWhite, pmXor, pmNotXor, pmCopy,
pmNotCopy, pmNot, pmNop, pmMerge, pmNotMerge, etc.
GHVFULHIHOXOvQFDUHVHFRPELQFXORDUHDOLQLHLFXDIRQGXOXL
PenPos (VWHXQRELHFWGHWLS73RLQWFDUHGHVFULHSR]LLDFXUHQWD
SHQLHLSH&DQYDVvQSL[HOL2ULJLQHDHVWHvQFROXOVWkQJDVXV
TPoint este definit astfel:
TPoint = record
X: Longint;
Y: Longint;
end;
ClipRect 5HSUH]LQWGUHSWXQJKLXOGLQ&DQYDVvQFDUHDUHORFGHVHQDUHD
3RULXQHDGHGHVHQFHFDGHvQDIDUDGUHSWXQJKLXOXLHVWHWLDW
Clipect este un obiect de tipul Trect care este declarat:
TRect = record
case Integer of
0: (Left, Top, Right, Bottom: Integer);
1: (TopLeft, BottomRight: TPoint);
end;
Pixels 'HILQLLDH[DFWHVWHproperty Pixels[X, Y: Integer]: TColor;
&LWLUHDYDORULL&DQYDV3L[HOV>[\@GFDUH]XOWDWFXORDUHD
pixelului de coordonate (x,y), iar atribuirea unei valori are ca
efect modificarea culorii pixelului respectiv. Culoarea se
UHSUH]LQWSHRFWHLWUHLRFWHLSHQWUXLQWHQVLWLOH5*%LDU
XQRFWHWSHQWUXLQIRUPDLLGHVSUHOHJWXUDvQWUHFXORDUHúL
paletele de culoare definite. Pentru comoditate în utilizare
culorile au fost denumite: clBlack, clMaroon, clGreen,
clOlive, clNavy, clPurple , clTeal, clGray, clSilver,
clRed, clLime, clBlue, clFuchsia, clAqua, clWhite.
Font Este un obiect de tip Tfont. Un astfel de obiect are câmpurile
&RORU1DPH6L]H6W\OHHWF&HOPDLELQHHVWHFDIRQWXOVILH
ales cu un dialog FontDialog, ca în exemplul precedent.
CopyMode 'HVFULH FXP HVWH FRSLDW R LPDJLQH GLQ DOW &DQYDV 3RDWH OXD
valorile: cmBlackness, cmWhiteness, cmDstInvert,
cmMergeCopy, cmMergePaint, cmSrcCopy, cmSrcAnd,
FP6UF3DLQWHWF'HWDOLLDVXSUDVHPQLILFDLLORUDFHVWRUYDORULVH
JVHVFvQ+HOS

Obiectul Canvas are o serie de metode pentru desenat. In tabelul de mai


jos se descriu unele:
Metode Descriere
Arc(x1,y1,x2,y2,x3,y3,x4,y4:Integer); 7UDVHD] XQ DUF GH HOLSV vQ GUHSWXQJKLXO
41
UTCB
determinat de (x1,y1), (x2,y2), în sens
trigonometric pozitiv, începând din dreptul
SXQFWXOXL [\  SkQ vQ GUHSWXO SXQFWXOXL
(x4,y4).
Chord(x1,y1,x2,y2,x3,y3,x4,y4:Integer); $QDORJ FX $UF GRDU F VH XQHVF SULQWUXQ
segment capetele arcului.
Ellipse(X1, Y1, X2, Y2: Integer); 7UDVHD] R HOLSV vQ GUHSWXQJKLXO GHWHUPLQDW
de (x1,y1), (x2,y2). Marginea elipsei este
WUDVDW FX WLSXO GH OLQLH GHVFULV vQ 3HQ LDU
interiorul este umplut cu modelul descris de
Brush.
Rectangle(X1, Y1, X2, Y2: Integer) 7UDVHD] XQ GUHSWXQJKL 0DUJLQHD
dreptunghiului este trasat cu tipul de linie
descris în Pen, iar interiorul este umplut cu
modelul descris de Brush.
FrameRect(const Rect: TRect) 7UDVHD] FRQWXUXO XQXL GUHSWXQJKL IU DO
KDúXUD
FillRect(const Rect: TRect) 7UDVHD] XQ GUHSWXQJKL IU FRQWXU
Interiorul este umplut cu modelul descris de
Brush.
RoundRect(X1, Y1, X2, Y2: Integer) 7UDVHD] XQ GUHSWXQJKL FX FX FROXULOH
rotunjite.
Polygon(Points: array of TPoint) 7UDVHD]XQSROLJRQ
Polyline(Points: array of TPoint) 7UDVHD] R OLQLH IRUPDW GLQ PDL PXOWH
segmente.
FloodFill(X, Y: Integer; Color: TColor; Se umple cu modelul dat de Brush o regiune,
FillStyle: TFillStyle); vQFHSkQGGLQ ;< 'DF)LOO6W\OH IV6XUIDFH
XPSOHUHDVHIDFHSkQVHDMXQJHODRFXORDUH
GLIHULW GH &RORU 'DF )LOO6W\OH IV%RUGHU
DWXQFL XPSOHUHD VH IDFH SkQ VH DWLQJH
culoarea Color.
TFillStyle = (fsSurface, fsBorder);

MoveTo(X, Y: Integer) 0XWSR]LLDFXUHQWDSHQLHLvQ [\ 


LineTo(X, Y: Integer) 7UDVHD]ROLQLHGLQSR]LLDFXUHQWvQSR]LLD
(x,y).
Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint); 7UDVHD]RILJXUvQIRUPGHVHFWRUGHHOLSV
încadrat în dreptunghiul (x1,y1), (x2,y2), la
IHO FD OD vQ SURFHGXUD $UF GRDU F HVWH
umplut cu modelul dat de Brush.
TextWidth(const Text: string): Integer; 'HWHUPLQ OXQJLPHD vQ SL[HOL D WH[WXOXL
FRQLQXWvQ7H[WGDFVDUWLSULSHIHUHDVWU
TextHeight(const Text: string): Integer 'HWHUPLQ vQOLPHD vQ SL[HOL D WH[WXOXL
FRQLQXWvQ7H[WGDFVDUWLSULSHIHUHDVWU
TextRect(Rect: TRect; X, Y: Integer; const 6FULH XQ WH[W vQ GUHSWXQJKLXO 5HFW &ROXO
Text: string) stânga-sus al textului este plasat în (x,y)
TextOut(X, Y: Integer; const Text: string) 6FULH WH[WXO 7H[W SH &DQYDV &ROXO VWkQJD
sus al textului este în (x,y)
TextExtent(const Text: string): TSize 'HWHUPLQ OXQJLPHD úL vQOLPHD WH[WXOXL
Text.

42
UTCB
'HFODUDLDWLSXOXL7VL]HHVWH
TSize = record
cx: Longint;
cy: Longint;
end;
Draw(X, Y: Integer; Graphic: TGraphic); &RSLD] XQ RELHFW JUDILF ELWPDS LFRQ
PHWDILOH  SH &DQYDV FX FROXO VWkQJDVXV DO
graficului în (x,y).
CopyRect(Dest: TRect; C: TCanvas; Sursa: 6HFRSLD]RSRULXQHGLQGUHSWXQJKLXO6XUVD
TRect); de pe canvasul C în dreptunghiul Dest din
canvasul curent.
StretchDraw(const Rect: TRect; Graphic: &RSLD] LPDJLQHD *UDSKLF DMXVWkQGR OD
TGraphic ); dreptunghiul Rect.

3HQWUX GHVHQDUHD ILJXULORU JHRPHWULFH VLPSOH H[LVW  RELHFWXO TShape a


FUXL SURSULHWDWH 6KDSH SRDWH OXD YDORULOH VW&LUFOH VW(OOLSVH VW5HFWDQJOH
VW5RXQG5HFWVW5RXQG6TXDUHVW6TXDUHvQIXQF LHGHWLSXOGHILJXU3URSULHWLOH
3HQ úL %UXVK GHVFULX SHQLD úL PRGHOXO GH XPSOHUH 3URSULHWLOH %RXQGV5HFW
&OLHQW2ULJLQ &OLHQW5HFW &OLHQW+HLJKW &OLHQW:LGWK GHVFULX GLPHQVLXQLOH úL
DúH]DUHD SH IRUP D ILJXULL 3URSULHWLOH +LQW 6KRZ+LQW 9LVLEOH DX DFHHDúL
VHPQLILFDLH FD OD FHOHODOWH FRPSRQHQWH 2ELHFWXO 76KDSH UHDF LRQHD] OD
evenimentele OnMouseMove, OnMouseUp, OnMouseDown, OnDragOver,
OnDragDrop, OnStartDrag, OnEndDrag.
Vom ilustra cele de mai sus printr-un mic program de grafica.
$OHJHP GLQ PHQLXO )LOH R QRX DSOLFDLH úL SH IRUPD HL SXQHP RELHFWHOH GLQ
ILJXUDXUPWRDUH

43
UTCB
3HPDUJLQHDGHVXVHVWHXQSDQHOSHFDUHVHDIOEXWRDQHGHWLSXO76SHHG%XWWRP
3URSULHWDWHD$OOLJQDRELHFWXOXLGHWLS73DQHOHVWHVHWDWODDO7RS3HPDUJLQLOH
ODWHUDOHVXQWGRXRELHFWHGHWLS73DQHODOHFURUSURSULHWL$OOLJQVXQWVHWDWHOD
alLeft, respectiv alRight. Pe aceste obiecte apar patru obiecte de tip
TRadioGroup. Printr-un clic pe proprietatea Items a lor, din Object Inspector, se
GHVFKLGHRIHUHDVWUvQFDUHVHLQWURGXFQXPHOHUDGLREXWRDQHORUFHYRUDSDUHvQ
fiecare grup. Intr-un grup doar un singur radiobuton poate fi selectat. In stânga
VHOHFWP SULQ UDGLREXWRDQH JURVLPHD SHQLHL úL FXORDUHD HL LDU vQ GUHDSWD
VHOHFWPFXORDUHDGHIRQGúLWLSXOGHKDúXU%XWRDQHOHGHWLS76SHHG%XWWRQGH
SDQHOXOGHVXVYRUFRPDQGDFHWLSGHVHQVHIDFHVDXGDFVHWLSUHúWHRSRULXQH
DOXL3XQHPSURSULHWLOH&DSWLRQFDvQILJXU3HPDUJLQHGHMRVDSDUHXQRELHFW
de tip TStatusBar. Facem un clic pe proprietatea Panels a barei de stare, (clic in
2EMHFW ,QVSHFWRU  úL VH GHVFKLGH R IHUHDVWU GH GLDORJ SULQ FDUH SXWHP vPSUL
EDUD GH VWDUH vQ PDL PXOWH SDQHOH XQGH SXWHP DILúD LQIRUPDLL GHVSUH VWDUHD
SURJUDPXOXL&RGXOSHFDUHOVFULHPvQXQLWXOIRUPHLHVWHvQWDEHOXOXUPWRU
Codul Comentarii
unit UnitGrafica;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, ComCtrls, Printers;
$PDGXJDWXQLWXO3ULQWHUVSHQWUX
type DSXWHDWLSULODLPSULPDQW
TFormGrafica = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
StatusBar1: TStatusBar; 3HPVXUFHDPSXVRELHFWHOHSH
RadioGroup1: TRadioGroup; IRUP HOH DX IRVW VSHFLILFDWH vQ
RadioGroup2: TRadioGroup; unitul formei.
Label1: TLabel;
Label2: TLabel;
RadioGroup3: TRadioGroup;
RadioGroup4: TRadioGroup;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
procedure FormActivate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);

44
UTCB
procedure SpeedButton2Click(Sender: TObject); 3URFHGXULOH DX IRVW DGXJDWH vQ
procedure SpeedButton3Click(Sender: TObject); XQLW FkQG DP IFXW FOLF SH
procedure SpeedButton4Click(Sender: TObject); HYHQLPHQWXO FRUHVSXQ]WRU GLQ
procedure SpeedButton5Click(Sender: TObject); Object Inspector.
procedure SpeedButton6Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject;
Shift: TShiftState; X,
Y: Integer);
procedure SpeedButton7Click(Sender: TObject);
procedure FormMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SpeedButton8Click(Sender: TObject);
procedure SpeedButton9Click(Sender: TObject);
private

{ Private declarations }
public
{ Public declarations }
end;

var
FormGrafica: TFormGrafica; 6HPQLILFDLDGDWHORU
xi,yi,xa,ya:Integer;
figura:(linie,elipsa,drept,punct,scris,liber,umple,select Avem nevoie de câteva variabile:
,nimic); (xi,yi) HVWH SXQFWXO XQGH VH DIO
sir1,sir2:String; PRXVHXO FkQG DSVP EXWRQXO
Dest,Sursa:TRect; din stânga
(xa,ya) sunt coordonatele
implementation SXQFWXOXLvQFDUHVHDIOPRXVHXO
FkQGVHULGLFEXWRQXOVWkQJ
{$R *.DFM} Figura este o enumerare cu
procedure Optionare; WLSXULOHGHDFXQHFHVHLDXFkQVH
begin DSDV XQ 6SHHG%XWWRQ /D
With FormGrafica.RadioGroup1 do DSVDUHD XQXLD YDULDELOD ILJXUD
With FormGrafica.Canvas.Pen do HVWH DFWXDOL]DW FX YDORDUHD
If ItemIndex=0 then Width:=1 FRUHVSXQ]WRDUH QXPHOH GH SH
else if ItemIndex=1 then Width:=2 buton).
else if ItemIndex=2 then Width:=3 Sir1, sir2 se folosesc pentru a
else if ItemIndex=3 then Width:=4; converti coordonatele mouse-ului
With FormGrafica.Radiogroup2 do vQúLUXULGHFDUDFWHUH
With FormGrafica.Canvas.Pen do Sursa este dreptunghiul selectat
Case ItemIndex of din desen (de pe canvas) iar Dest
0: Color:=clWhite; este dreptunghiul de pe canvasul
1: Color:=clBlack; obiectului Printer unde este copiat
2: Color:=clRed; dreptunghiul Sursa.
3: Color:=clGreen;
45
UTCB
4: Color:=clBlue; ,Q2SWLRQDUHVHLQVSHFWHD]VWDUHD
5: Color:=clYellow; UDGLREXWRDQHORU úL VH VHWHD]
end; FRUHVSXQ]WRU RSLXQLOH GH VWLO úL
With FormGrafica.RadioGroup3 do FXORDUH ,QGHFúL EXWRDQHORU vQ
With FormGrafica.Canvas.Brush do fiecare grup încep cu 0.
Case ItemIndex of
0: Style:=bsSolid;
1: Style:=bsCross;
2: Style:=bsDiagCross;
3: Style:=bsHorizontal;
4: Style:=bsVertical;
end;
With FormGrafica.Radiogroup4 do
With FormGrafica.Canvas.Brush do
Case ItemIndex of
0: Color:=clWhite;
1: Color:=clBlack;
2: Color:=clRed;
3: Color:=clGreen;
4: Color:=clBlue;
5: Color:=clYellow;
end;
end;

procedure TFormGrafica.FormActivate(Sender:
TObject);
begin
Optionare; /D DFWLYDUHD IRUPHL VH VHWDH]
end; RSLXQLOH

procedure TFormGrafica.SpeedButton1Click(Sender:
TObject);
begin
StatusBar1.Panels[0].Text:='Deseneaza LINIE';
figura:=linie;
end;

procedure TFormGrafica.SpeedButton2Click(Sender: Pentru fiecare buton de pe panelul


TObject); de sus, la un clic pe el se fac
begin XUPWRDUHOHGRXOXFUXUL
StatusBar1.Panels[0].Text:='Deseneaza ELIPSA'; i) se scrie în primul panel
figura:=elipsa; (index 0) al barei de stare
end; QXPHOH DFLXQLL FH GHYLQH
FXUHQW QXPHOHGHSHEXWRQ
procedure TFormGrafica.SpeedButton3Click(Sender: ii) VHVHWHD] YDULDELOD ILJXUD FX
TObject); YDORDUHDFRUHVSXQ]WRDUH
begin
StatusBar1.Panels[0].Text:='Deseneaza
DREPTUNGHI';
figura:=drept;
end;
46
UTCB

procedure TFormGrafica.SpeedButton4Click(Sender:
TObject);
begin
StatusBar1.Panels[0].Text:='Deseneaza PUNCT';
figura:=punct;
end;

procedure TFormGrafica.SpeedButton5Click(Sender:
TObject);
begin
StatusBar1.Panels[0].Text:='Scrie TEXT';
figura:=scris;
end;

procedure TFormGrafica.SpeedButton6Click(Sender:
TObject);
begin
StatusBar1.Panels[0].Text:='Deseneaza LIBER';
figura:=liber;
end;

procedure TFormGrafica.SpeedButton7Click(Sender:
TObject);
begin
StatusBar1.Panels[0].Text:='UMPLE';
figura:=umple;
end;

procedure TFormGrafica.SpeedButton9Click(Sender:
TObject);
begin
StatusBar1.Panels[0].Text:='SELECTEAZA';
figura:=select;
end;

procedure TFormGrafica.FormMouseDown(Sender:
TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Shift=[ssLeft] then
begin
Optionare; &kQG VH DSDV PRXVHXO
Str(x-Panel2.Width, sir1); Str(y- coordonatele (x,y) ale punctului
Panel1.Height,sir2); activ se transmit procedurilor
StatusBar1.Panels[1].Text:='x='+sir1; legate de evenimentele de mouse.
StatusBar1.Panels[2].Text:='y='+sir2; 'DF EXWRQXO DSVDW HVWH FHO
Canvas.MoveTo(x,y); stâng, coordonatel (x,y) se
xi:=x; yi:=y; xa:=x; ya:=y; WUDQVIRUPvQ úLUXUL úL VH DILúHD]
Canvas.Pen.Mode:=pmCopy; vQ SDQHOHOH  úL  GLQ EDUD GH
Canvas.Pen.Style:=psSolid; VWDUH 6H PHPRUHD] [L\L  FD

47
UTCB
Case figura of punctul de început al figurilor.
umple:
Canvas.FloodFill(x,y,Canvas.Pixels[x,y],fsSurface);
punct: Canvas.Pixels[x,y]:=Canvas.Pen.Color;
drept: begin
Canvas.Pen.Mode:=pmXor; ,Q IXQFLH GH WLSXO GH DFLXQH
Canvas.Rectangle(xi,yi,xa,ya); selectat cu butoanele
end; SpeedButton se ia decizia
select: begin FRUHVSXQ]WRDUH  SULQWUR
Canvas.Pen.Color:=clTeal; LQVWUXFLXQH&DVH
Canvas.Brush.Style:=bsClear;
Canvas.Pen.Style:=psDot;
Canvas.Pen.Mode:=pmXor;
Canvas.Rectangle(xi,yi,xa,ya);
end;
end;

end;
end;

procedure TFormGrafica.FormMouseMove(Sender:
TObject; Shift: TShiftState;
X, Y: Integer);
begin
If Shift=[ssLeft] then
begin
Str(x-Panel2.Width, sir1); Str(y-
Panel1.Height,sir2);
StatusBar1.Panels[1].Text:='x='+sir1;
StatusBar1.Panels[2].Text:='y='+sir2; 'DF PRXVHXO HVWH vQ PLúFDUH VH
Case figura of WLSUHVF SH OLQLD GH VWDUH
liber: Canvas.LineTo(x,y); FRRUGRQDWHOHOXLvQSHUPDQHQ
punct: Canvas.Pixels[x,y]:=Canvas.Pen.Color; De asemenea pe canvas se
drept: begin GHVHQHD] PRGHOXO FRUHVSXQ]WRU
Canvas.Rectangle(xi,yi,xa,ya); YDULDELOHL ILJXUD 'DF ILJXUD QX
Canvas.Rectangle(xi,yi,x,y); HVWH GHILQLWLY FL VH YD GHILQLWLYD
xa:=x; ya:=y; la ridicarea mouseului, desenarea
end; VH YD IDFH FX FX VWLOXO GH SHQL
select: begin SP;RU 'HVHQkQG GH GRX RUL
Canvas.Rectangle(xi,yi,xa,ya); DFHHDúL ILJXU vQ DFHODúL ORF FX
Canvas.Rectangle(xi,yi,x,y); DFHDVW RSLXQH HIHFWXO HVWH GH
xa:=x; ya:=y; GLVSDULLH D ILJXULL $FHVWD HVWH
end; rolul comenzilor de desenare de
end; GRXRULFRQVHFXWLYSULPDGDWVH
end; GHVHQHD]ILJXUDSHVWHFHDYHFKH
end; GHFLGLVSDUHDSRLVHGHVHQHD]vQ
QRXDSR]LLH

procedure TFormGrafica.FormMouseUp(Sender:
48
UTCB
TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Case figura of
drept: begin
Canvas.Rectangle(xi,yi,xa,ya); &kQG PRXVHXO VH ULGLF ILJXULOH
Canvas.Pen.Mode:=pmCopy; GHVHQDWH WHPSRUDU VH GHVHQHD]
Canvas.Rectangle(xi,yi,xa,ya); GHILQLWLY IRORVLQG VWLOXO GH SHQL
end; pmCopy.
select: begin
Sursa.Left:=xi; Sursa.Top:=yi;
Sursa.Right:=xa;Sursa.Bottom:=ya;
Canvas.Rectangle(xi,yi,xa,ya);
end; 'DF HVWH YRUED GH VHOHFLH OD
end; ridicarea mouseului se
end; PHPRUHD] FRRUGRQDWHOH
dreptunghiului desenat. Aceste va
procedure TFormGrafica.SpeedButton8Click(Sender: SXWHD IL WULPLV VSUH LPSULPDQW
TObject); $SRL VH úWHUJH LPDJLQHD GH SH
begin ecran a dreptunghiului
Dest:=Sursa; GHVHQkQGXO D GRXD RDU FX
Printer.BeginDoc; RSLXQHDSP;RU
Printer.Canvas.CopyMode:=cmSrcCopy;
Printer.Canvas.CopyRect(Dest,Canvas,Sursa);
Printer.EndDoc; 3HQWUX D WLSUL XQ GHVHQ OD
end; LPSULPDQWVHSURFHGHD]DVWIHO
Printer.BeginDoc;
6H FRSLD] SH RELHFWXO &DQYDV DO
printerului un dreptunghi dintr-un
end. canvas cu imagine (sau dintr-un
obiect TImage);
Printer.EndDoc;
$XWRPDWvQFHSHWLSULUHD

,QYDULDQWDSUH]HQWDWDLFLQXWRDWHEXWRDQHOHGHSHSDQHOXOGHVXVDXIRVW
DVRFLDWHFXXQWLSGHDFLXQH

([HUFLLL

6VHDGDXJHODHGLWRUXOGHWH[WHSUH]HQWDWvQDFHDVWVHFLXQHúLRSLXQHGHWLSULUH
,QGLFDLH/DFOLFSHXQEXWRQV]LFHPEXWRQXO3ULQWVHDFWLYHD]SURFHGXUD
procedure TEditForm.Print1Click(Sender: TObject);
var
Line: Integer;^QXPUWRUGHOLQLL`
PrintText: TextFile; ^ILúLHUWH[WvQ'HOSKL`
begin
if PrintDialog1.Execute then
49
UTCB
begin
AssignPrn(PrintText); { ca în Pascal sub Dos }
Rewrite(PrintText);
for Line := 0 to Memo1.Lines.Count - 1 do
Writeln(PrintText, Memo1.Lines[Line]);
CloseFile(PrintText);
end;
end;
end;

  6 VH DVRFLH]H DFLXQL FRUHVSXQ]WRDUH SHQWUX ILHFDUH EXWRQ VSHHGEXWWRQ GLQ
SURJUDPXOGHJUDILF6VHDWDúH]HXQPHQLXXQGHVDSDUWRDWHRSLXQLOHGHSHEXWRDQHúLV
VHDGDXJHRIRUP$ERXW%R[SURJUDPXOXL

  6 VH UHDOL]H]H XQ SURJUDP FDUH V JUXSH]H SURJUDPHOH WHP IFXWH vQ OLPEDMXO
3DVFDO VXE 'RV vQWUR VLQJXU DSOLFDLH 'HOSKL XQGH SULQ RSLXQL GH PHQLX V VH DSHOH]H
SURJUDPXOGRULWSXVVXEIRUPGHSURFHGXU

6VHVFULHXQHGLWRUGHWH[WHXWLOL]kQGXQRELHFWGHWLS75LFK(GLWvQORFGH70HPR
------------

50

You might also like