Professional Documents
Culture Documents
&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
'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`
...
IXQFWLRQIXQFWLDDUJXPHQWHOHIXQFLHLWLSXOBIXQFLHL
...
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
4
UTCB
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 initDSRLVIDFHYHQWXDOHOHQRLLQLLDOL]UL
,QFRQGLLLOHvQFDUHDYHPYDULDELOHYúLYGHWLSXULGHVFHQGHQWH unul din
DOWXODWXQFLHVWHSRVLELODWULEXLUHD
v1:=v2;
QXPDLGDFYHVWHGHDFHODúLWLSFXYVDXHVWHXQGHVFHQGHQWDOVX
6SUHVXSXQHPFDYHPXQRELHFWREúLXQGHVFHQGHQWDOVXRE,Q
RELHFWXOREHVWHGHVFULVPHWRGDVFULHFDUHHVWHUHGHILQLWvQRELHFWXORE)LH
DFXPGRXYDULDELOHDOWIHOVSXVLQVWDQHGHWLSREUHVSHFWLYREDGLF
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;
&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.
,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
TDialog TApplication
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'LDORJWLSXULOHGH
type RELHFWHDXQXPHFDUHvQFHSFX7LDUUHIHULQHOHOD
TRezolvitor=object(TApplication) RELHFWHDXQXPHFDUHvQFHSFX3GRXYDULDELOH
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; XOWLPDOLQLHGLQIHUHDVWUDDSOLFDLHL3URFHGXULOH
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([WHQW575HFWGHWHUPLQ
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;
{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
*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.
18
UTCB
3UH]HQWDUHJHQHUDODPHGLXOXLGHSURJUDPDUH'HOSKL
,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
FRPSRQHQWHORUVWDQGDUG'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
PHVDMXOXL2Q&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
SURJUDPDUHFRQGXVGHHYHQLPHQWHHYHQWGULYHQ
,QKHOSXOGLQ'HOSKLVHJVHVFSHQWUXILHFDUHFRPSRQHQWSURSULHWLOHúL
HYHQLPHQWHOH OD FDUH UVSXQGH HOH VXQW DILúDWH úL GH 2EMHFW ,QVSHFWRU YH]L
ILJXUDSUHFHGHQWSUHFXPú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
PopupMenuVHIRORVHúWHSHQWUXDFUHDPHQLXULvQRULFHORFSHHFUDQDWXQFLFkQGDXQ
RELHFWHVWHVHOHFWDWESURSULHWDWHD3RSXS0HQXDRELHFWXOXLHVWH HJDO FXQXPHOHPHQLXOXL
24
UTCB
SRSXSúLFVHDSDVPRXVHXOGUHSW
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
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.
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
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.
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;
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
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}
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.
$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
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
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.
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}
39
UTCB
procedure TForm1.DeschideClick(Sender: TObject);
begin
If OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
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
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.
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.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