Sunteți pe pagina 1din 51

CAPITOLUL 1

Introducere n Programarea Orientat-Obiect


Programarea orientat obiect (POO) revoluioneaz aproape
orice aspect al dezvoltrii aplicaiilor cu Visual FoxPro, de la faza de
analiz i proiectare p!n la faza de scriere a codului de program i
testarea aplicaiilor i a componentelor aplicaiilor" #e asemenea,
Visual FoxPro, ca i Visual $%% de altfel, este un limba& 'ibrid, adic
dezvoltatorii de programe pot alege (ntre metodele POO i
programarea modular" POO sre o altfel de abordare dec!t
programarea modular, (n faptul c POO lucreaz cu entiti de genul
obiectelor"
#ac se dorete adaptarea unei aplicaii (ntr)o nou form,
av!nd (n vedere c exist o form modificat a unei aplicaii mai
vec'i, se realizeaz modificrile pe baza unui procedeu numit
subclasare, i anume preluarea vec'ilor obiecte ale aplicaiei i
modificarea acestora dup noile proprieti" $omportamentul i
atributele obiectelor originale sunt automat aduse i la noile obiecte
modificate, acest lucru numindu)se motenire" *n sc'imb dac se
modific cumva obiectele originale, sc'imbrile fcute sunt aduse
imediat i asupra obiectelor noi, realizate cu a&utorul subclasrii, prin
modificarea obiectelor originale"
POO utilizeaz nite termeni, pentru a explica expres
conceptele POO, i anume+ motenire, ncapsulare i polimorfism"
Primul i cel mai important concept c'eie al POO este
obiectul" ,n obiect este un pac'et de informaii i aciuni" ,n obiect
se conine pe sine" -oate cunotiinele i comportamentele unui obiect
.
sunt coninute (n acesta" /cest concept este cunoscut sub numnele de
(ncapsulare" Orice obiect este caracterizat de propireti i evenimente"
Proprieti
#atele dintr%un obiect sunt denumite proprieti" O proprietate
((n termenii Visual FoxPro) este foarte simplu o variabil de memorie
care este ataat la obiect i care are un anumit scop" ,tilizarea valorii
proprietii i modificarea ei se face utiliz!nd numele obiectului urmat
de punct (") i apoi de numele proprietii" Propreitile pot conine
orice tipuri de date care sunt valide pentru variabilele de memorie
Visual FoxPro" #e exemplu, dac avem o proprietate numit l0ste1ou
care este ataat la un obiect numit o-est, se poate interoga valoarea
proprietii (n felul urmtor+
o-est"l0ste1ou
Metode
Pe l!ng faptul c obiectele au date ataate, ele pot executa
anumite aciuni" /ceste aciuni sunt reprezentate de fapt de codul de
program care este scris (n procedurile care sunt ataate la obiect"
/ceste proceduri sunt denumite de fapt metode" /pelarea unei metode
se face (n mod asemntor cu a unei proprieti, i anume numele
obiectului, urmat de punct (") i de numele metodei, dup cum
urmeaz+
o-est"Print()
-e'nic, parantezele care apar la sf!ritul numelui metodei sunt
necesare numai dac se ateapt returnarea unei valori sau dac cumva
se transmit parametrii metodei" 2ugestia noastr este de a se utiliza
3
(ntotdeauna paranteze pentru siguran, (n acest caz fiind i siguri c
se apeleaz o metod" *n cazul apelrii unei metode dup care se
ateapt returnarea unei valori, se poate salva valoarea returnat (n
modul urmtor+
lValoare4eturnat 5 o-est"Print()
Evenimente
Evenimentele sunt aciuni care se (nt!mpl" #e exemplu,
fc!nd clic6 pe butonul st!nga al mouse)ului se declaneaz un
eveniment" 0venimentele pot fi cauzate de aciunea utilizatorului (ca
(n cazul de mai sus) sau de ctre sistem (nsui (ca (n cazul (n care
apare o eroare)" #ac creezi o clas de tipul unui buton de comand (n
Visual FoxPro, poi ataa cod (ca o metod) la evenimente" #ac se
declaneaz evenimentul (de exemplu, utilizatorul face clic6 st!nga cu
mouse)ul deasupra butonului de comand), metoda asociat (care este
metoda clic6) este apelat automat" *n Visual FoxPro, se pot ataa
metode la tot felul de evenimente+ dac se d clic6 pe mouse, dac se
ia m!na de pe mouse, se poate apela o metod (n momentul (n care un
obiect este creat (evenimentul 7nit) sau invers (n momentul (n care
obiectul este ters (evenimentul #estro8)" /pelarea evenimentelor se
face (n acelai mod ca i apelarea metodelor"
Clase
P!n la acest punct, toate discuiile din acest capitol au fost
centrate (n &urul obiectelor" *n programarea orientat)obiect, obiectele
nu sunt niciodat programate, ci mai degrab obiectele de baz
(numite clase) pot fi programate. -oate obiectele sunt instaniate
(adic, create) pornind de la clase" #e aceea, toate programele se fac
9
la nivelul clasei" Odat un obiect instaniat pe baza unie clase, tot ceea
ce trebuie s faci este s interacionezi cu el" 1u se adaug sau se
modific metode existente (ntr)un obiect, ci mai degrab se adaug i
se modific metode (n clase pe baza crora se instaniaz obiectele"
,n exemplu de clas+
#0F710 $:/22 $las /2 $ustom
c1ume 5 ;;
c-ip 5 ;;
l0ste1ou 5 "F"
P4O$0#,40 /ratValoare
< t'is"c1ume
< t'is"c-ip
7F t'is"l0ste1ou
< ;2unt 1ou;
0:20
< ;2unt Vec'i;
01#7F
01#P4O$
01##0F710
#efine $lass $las as $ustom
/ceast linie de program spune Visual FoxPro c utilizatorul
definete o nou clas numit $las bazat pe o clas de baz $ustom"
c1ume 5 ;;
c-ip 5 ;;
=
l0ste1ou 5 "F"
:iniile anterioare sunt cunoscute ca declaraii de cod" *n aceat
parte a definiiei clasei, se enumer variabilele (proprietile)
obiectului i valorile lor iniiale"
P4O$0#,40 /ratValoare
< t'is"c1ume
< t'is"c-ip
7F t'is"l0ste1ou
< ;2unt 1ou;
0:20
< ;2unt Vec'i;
01#7F
01#P4O$
/ceasta este o definiie a unei metode" /pelarea unei metode
va executa toate liniile de cod dintre linia P4O$0#,40 p!n la linia
01#P4O$"
Instanierea Obiectelor
,n obiect este instaniat cu a&utorul funciei
$40/-0O>?0$-()" 2intaxa pentru crearea unei instane a clasei
$las+
o$las 5 $40/-0O>?0$-(;$las;)
o$las este o variabil de memorie simpl de tipul Ob&ect"
@
Pentru a accesa membrii clasei $las, se pot utiliza urmtoarele
comenzi+
< o$las"c1ume AA 7niial gol
o$las"c1ume 5 ;Popescu 7on;
< o$las"c1ume AA /cum arat ;Popescu 7on;
o$las"/ratValoare() AA 0xecut metoda
/ratValoare
$uv!ntul c'eie -B72 (nseamn c se acceseaz metodele i
variabilele membre ale obiectului (nsui"
Subclasarea-Bazarea unei Clase pe alt Clas
2 presupunem c vom defini o clas numit Formular i care
definete de fapt un formular cu anumite proprieti ale sale"
#0F710 $:/22 Formular /2 form
Cidt'5.DD
Beig't5.@D
P4O$0#,40 7nit
$aption 5 EFormular.F
01#P4O$
01##0F710
Putem crea o subclas a clasei create anterior i pe care o
vom denumi Formular., subclas care va moteni toate proprietile
clasei printe, adic clasa Formular, dar (n plus va avea proprieti (n
plus fa de clasa printe"
#0F710 $:/22 Formular. /2 Formular
G
1ame5FFormularF
P4O$0#,40 $lic6
$aption 5 EFormular cu clic6F
01#P4O$
01##0F710
O (nsuire foarte interesant a motenirii poate accepta ceea
ce (i convine de la clasa printe i poate rescrie restul dup cum
doreti" /cest lucru se poate realiza prin rescrie proprietii sau a
metodei respective (n subclasa respectiv" #e exemplu (n clasa
Formular, clasa printe a subclasei Formular., avem un eveniment
7nit, (n care d(m titlul formularului ca fiind Formular., putem rescrie
acest lucru (n subclas prin rescrierea procedurii respective"
#0F710 $:/22 Formular. /2 Formular
1ame5FFormularF
P4O$0#,40 7nit
$aption 5 EFormular3F
01#P4O$
01##0F710
*n acest caz am redenumit evenimentul din clasa printe
rescriind aceiai procedur (n subclasa Formular."
#e asemenea, s presupunem c este posibil s dorii s lansai
(n execuie metoda din clasa printe (nt!i i apoi s adugai ceva cod
de program (n plus (n metoda din subclas, ca (n exemplul urmtor+
#0F710 $:/22 Formular3 /2 Formular
1ame5FFormularF
P4O$0#,40 7nit
H
Formular.++7nit()
$aption 5 EFormular3F
C/7- C71#OC E0xemplu de apelare a unei
metode din clasa printeF
01#P4O$
01##0F710
Operatorul (++) este utilizat pentru a apela metodele din clasele
superioare (n ierar'ia claselor"
Metode i Proprieti Prote!ate
:a crearea unui obiect trebuie s decidei dac dorii s fie
public, adic s poat s fie utilizat i de alte clase sau numai (n cadrul
clasei respective" 2oluia (n acest caz este s creai metode i
proprieti prote&ate, care nu pot fi accesibile din afara clasei (n care s)
au definit respectivele metode i proprieti" /cest lucru se realizeaz
scriind+
P4O-0$-0# numeproprietate (n seciunea (n care declarai
definiiile de cod, sau P4O-0$-0# (n faa liniei P4O$0#,40"
#0F710 $:/22 $las /2 $ustom
P4O-0$-0# c1ume
c1ume 5 ;;
c-ip 5 ;;
l0ste1ou 5 "F"
P4O-0$-0# P4O$0#,40 /ratValori
< t'is"c1ume
< t'is"c-ip
I
7F t'is"l0ste1ou
< ;02-0 1O,;
0:20
< ;02-0 V0$B7;
01#7F
01#P4O$
01##0F710
*n acest exemplu ambele proprieti c1ume i c-ip sunt
prote&ate, ca i metoda /ratValori care este i ea prote&at" *ncercrile
de a le accesa din afara clasei vor produce erori ca i cum aceste
proprieti i metode nu ar exista"
Polimor"ism
Polimorfismul este un alt concept care trebuie dezbtut dac se
vorbete despre programarea orientat-obiect" Polimorfismul este
capacitatea de a da metodelor i proprietilor din diferite clase acelai
nume, c'iar dac acele metode i proprieti fac lucruri cu totul
diferite de la o clas la alta" #e exemplu urmtoarele linii de comand+
oObiect. 5 $40/-0O>?0$-(;Formular.;)
oObiect3 5 $40/-0O>?0$-(;-elefon;)
oObiect."0xecut() AA:anseaz (n execuie metoda
0xecut a Obiect.
oObiect3"0xecut() AA:anseaz (n execuie metoda
0xecut a Obiect3
J
Crearea Obiectelor
oFact 5 $40/-0O>?0$-(;Factura;)
aceast linie de cod de program transmite un mesa& clasei Factura
spun!ndu)i s creeze un obiect numit oFact bazat pe aceast clas"
#tribuirea unei valori unei proprieti
lnValoare 5 oFact"nValoare
/ceast linie de cod de program transmite un mesa& obiectului oFact
i (i spune s ia valoarea proprietii nValoare i s o returneze la
lnValoare"
#pelarea unei metode
oFact"/fiare AA /fieaz obiectul oFact
2e transmite un mesa& obiectului oFact spun!ndu)i s execute
metoda /fiare"
#naliz i Proiectare cu POO
Programarea orientat)obiect nu (ncepe cu scrierea codului de
program, cu toate c p!n acum am discutat numai despre
implementarea fazei de scriere a obiectelor, iar acest pas este totui
ultimul (n crearea programelor orientate)obiect"
Primul pas ce trebuie fcut este de a analiza domeniul
problemei i de a proiecta ierar'ia claselor" 0ste destul de simplu de
realizat dac se respect o anumit disciplin" /nalitii au apreciat c
(n realizarea unei aplicaii HDK din timp se pierde cu analiza orientat)
.D
obiect (/OO) i proiectarea orientat)obiect (POO)" 0xist mai multe
tipuri de metodologii create de nume populare (n domeniul bazelor de
date Lrad8 >ooc', 7var ?acobsen i 4ebecca Cirfs)>roc6"
Crearea i utilizarea claselor cu $isual %o&Pro
#efinirea claselor se face utiliz!nd constructorul #0F710
$:/22 M 01##0F710, dup cum urmeaz+
#0F710 $:/22 NnumeclasO /2 NclasdebazO
P)) /ici se face declararea codului
P4O-0$-0# Nlist variabile membruO
P4O$0#,40 NmetodprocO (param., param3 """")
:O$/: Nlist de variabile localeO
P)) /ici se scrie codul procedurii
01#P4O$
F,1$-7O1 NmetodfuncO (param., param3 """")
:O$/: Nlist de variabile localeO
P)) /ici se scrie codul funciei
40-,41 NvaloarereturnatO
01#F,1$
01##0F710
'E%I(E C)#SS *numeclas+ #S *superclas+
/ceast linie de cod comunic Visual FoxPro c se creaz o
nou clas" -oate liniile de cod de program dintre #0F710 i
01##0F710 in de definiia clasei respective" <numeclas> este
..
numele clasei nou create i <superclas> este numele clasei pe baza
creia se creaz clasa cea nou"
-ermenul superclas mai poate fi (nt!lnit (n terminologia de
specialitate i ca o clas printe" Prin definiie orice clas creat (n
Visual FoxPro este o subclas a altei clase" :a cel mai (nalt nivel
clasele create (n Visual FoxPro sunt subclase a ccea ce Qicrosoft
numete clase de baz, clase care apar (n tabelul urmtor"
$isual %o&Pro ,-. Clase de Baz
(ume Clas 'escriere
#ctive'oc Obiectul document active care poate fi
gzduit (ntr)un broRser de tipul 7nternet
0xplorer"
C/ec0Bo& O caset de validare standard, control
similar cu o caset de validare din
FoxPro 3""
Column O coloan (ntr)un control grid"
ComboBo& O caset combinat (combo box) similar
cu un control pop)up (n FoxPro 3""
CommandButton 0c'ivalent cu un pus'button (n FoxPro
3"x.
Command1roup ,n grup de butoane de comand care
opereaz (mpreun" 2unt ec'ivalente cu
un grup de pus'button din FoxPro 3"x
controlate de o variabil
Container ,n obiect generic proiectat pentru a
putea conine alte obiecte (n el" 0ste
utilizat (n cazul crerii unei clase care
conine mai multe obiecte (n ea"
Control /celai lucru ca i clasa container , (ns
de data aceasta referirea nu se mai face
la clasa container ci la clasa control"
.3
(ume Clas 'escriere
Cursor #efiniia unui cursor (ntr)un mediu de
date"
Custom *n mod primar se folosete pentru
obiecte care nu sunt vizuale, dar care pot
conine obiecte vizuale ca membrii"
'ata O colecie de medii de date cursori i
relaii pentru a putea fi desc'ise i
(nc'ise ca o unitate"
EditBo& O regiune de editare ec'ivalent cu
FoxPro 3"G"
%orm ,n singur ;screen;, format pentru
introducerea de date" 0ste obiect
container care poate conine i alte
obiecte (n el"
%ormSet ,n obiect tip container care are ca
membrii mai multe formulare (forms)"
1rid ,n obiect de tip container care permite
afiarea i editarea informaiilor (n
formatul tabel"
2eader /ntetul unei coloane a unui tabel"
23perlin0 Ob!ect Furnizeaz butoane, imagini sau etic'ete
care la un clic6 pot lansa pagini C0>"
Image O imagine"
)abel O etic'et a unui obiect"
)ine O linie desenat"
)istBo& O list derulant"
OleControl ,n control bazat pe un obiect O:0"
OptionButton ,n singur obiect radio)tip obiect"
Option1roup Qai multe butoane radio care opereaz
ca un singur control" 0ste ec'ivalentul
unui obiect radio button din FoxPro 3"x"
Page O singur pagin din cadrul unui
.9
(ume Clas 'escriere
formular pagin"
Page%rame ,n control de tip pagin" Fiecare pagin
din cadrul unui control de tip pagin
este o pagin separat" Formularul
pagin este un control tip container
deoarece el poate conine mai multe
obiecte"
Pro!ect2oo0 $reeaz instane ale proiectului desc'is
care permit acces la nivel program ctre
evenimentele proiectului"
4elation O definiie a unei relaii (ntre dou
cursoare (ntr)un mediu de date"
Separator Obiect care pune spaii albe (ntre
controale pe un toolbar"
S/ape O form (un cerc sau un dreptung'i)"
Spinner 0c'ivalentul unui spinner control din
FoxPro 3"x"
5e&tBox 0c'ivalentul unui L0- control din
FoxPro 3"x"
5imer ,n obiect vizual care nu apare pe form"
/cest control este proiectat pentru a
permite aciuni la intervale de timp fixe"
5oolBar O bar de instrumente, care este un grup
de obiecte care pot fi lipite (n partea de
sus, &os, sau lateral ecranului" $!nd nu
este lipit, o bar de instrumente arat
asemntor unei forme"
Clase
$lasele pot fi caracterizate (n dou tipuri i anume clase
vizuale i clase nonvizuale"
.=
Clase $izuale
O clas vizual este o clas proiectat pentru scopul de a putea
fi afiat" #e exemplu, un formular este o clas vizual" Principalul
scop al claselor vizuale este (ns crearea interfeei (deseori numit i
L,7 ) Lrap'ical ,ser 7nterface sau interfaa grafic a utilizatorului)"
*n aceast categorie de clase se pot proiecta clase (n
urmtoarele subcategorii+
) controale singure
) combinaii de controale
) containere
) formulare
) toolbar)uri"
Butonul de comand O6 este un bun exemplu de control
singular, care la execuia unui clic6 prsete formularul" Pentru a
realiza acest lucru se creaz o clas de tipul $ommand>utton (n care
se definesc c!teva proprieti ale butonului OS i bine(neles
evnimentul $lic6 cu a&utorul cruia prsete formularul"
P)) $lass+ butono6
P)) Parent$lass+ $ommand>utton
P)) >ase$lass+ $ommand>utton
P
#0F710 $:/22 butono6 /2 $ommand>utton
/uto2ize 5 "F"
Beig't 5 3J
Cidt' 5 =.
$aption 5 ;OS;
#efault 5 "-"
1ame 5 ;butono6;
.@
P4O$0#,40 $lic6
40:0/20 t'isform
01#P4O$
01##0F710
/cest buton poate fi plasat (n orice formular" Qetoda
utilizat de acest buton este 40:0/20 -B72FO4Q (n evenimentul
$lic6 al butonului. *n figura nr". putei vedea un buton OS creat
cu a&utorul codului de program anterior"
Fig". ,n formular cu un buton care prsete formularul
Subclasa unei clase a unui control singular -e'nic, toate
clasele din Visual FoxPro sunt subclase ale unor clase de baz" 2
presupunem c dorim o versiune a butonului creat mai sus, dar cu un
text a&uttor (tooltip text care apare dac lsai mouse)ul puin timp
deasupra controlului respectiv)"
P)) $lass+ butono6cua&utor
P)) Parent$lass+ butono6
P)) >ase$lass+ $ommand>utton
P)) 2ubclas a butonOS adaug un a&utor (-ool-ip)
.G
"
#0F710 $:/22 butono6cua&utor /2 o6button

Beig't 5 3J
Cidt' 5 =.
-ool-ip-ext 5 ;Prsete formularul;
1ame 5 ;butono6cua&utor;
01##0F710
Observai c evenimentul $lic6 de data aceasta nu este
prezent, deoarece este motenit din clasa printe" 2e adaug (n plus la
aceast subclas proprietatea -ool-ip-ext"
'e ce subclas7 2e apeleaz la subclase i nu se face direct
modificarea (n clasa printe, deoarece ar (nsemna (n caz contrar c
orice modificare (n clasa printe va fi motenit de toate subclasele
sau instanele obiectului respectiv"
O clas container - Navigator ,n container de
$ommand>uttons utilizat pentru navigarea (ntr)o tabel dintr)un
formular" Pentru a realiza un astfel de container de butoane de
navigarese definete (n prim fa8 clasa container (n care se adaug
instanele claselor butoanelor de navigare definite ulterior" /dugarea
la clasa container se face cu a&utorul instruciunii /## O>?0$-"
Prog- 8 9n Container - Bazat pe un set de butoane de navigare
P)) $lass+ navigator
P)) Parent$lass+ container
P)) >ase$lass+ container
.H
#0F710 $:/22 navigator /2 container
Cidt' 5 9@D
Beig't 5 93
>ac62t8le 5 D
>orderCidt' 5 D
1ame 5 ;navigator;
/## O>?0$- cmd,rmatoarea /2 cmd,rmatoarea
C7-B T
-op 5 D, T
:eft 5 D, T
Beig't 5 9., T
Cidt' 5 GD, T
$aption 5 ;,rmatoarea;, T
1ame 5 ;cmd,rmatoarea;
/## O>?0$- cmd/nterioara /2 cmd/nterioara
C7-B T
-op 5 D, T
:eft 5 H3, T
Beig't 5 9., T
Cidt' 5 GD, T
$aption 5 ;/nterioara;, T
1ame 5 ;cmd/nterioara;
/## O>?0$- cmdPrima /2 cmdPrima C7-B T
-op 5 D, T
:eft 5 .==, T
Beig't 5 9., T
Cidt' 5 GD, T
.I
$aption 5 ;Prima;, T
1ame 5 ;cmdPrima;
/## O>?0$- cmd,ltima /2 cmd,ltima C7-B T
-op 5 D, T
:eft 5 3.G, T
Beig't 5 9., T
Cidt' 5 GD, T
$aption 5 ;,ltima;, T
1ame 5 ;cmd,ltima;
/## O>?0$- cmdo6 /2 butono6cua&utor C7-B T
-op 5 D, T
:eft 5 3II, T
Beig't 5 9., T
Cidt' 5 GD, T
1ame 5 ;cmdOS;
01##0F710
#0F710 cmd,rmatoarea /2 $ommand>utton
P4O$0#,40 $lic6
2S7P .
7F 0OF()
5Qessagebox(;2f!rit de fiierU;, .G)
LO >O--OQ
01#7F
t'isform"refres'()
01#P4O$
01##0F710
.J
#0F710 $:/22 cmd/nterioara /2 $ommand>utton
P4O$0#,40 $lic6
2S7P ).
7F >OF()
5Qessagebox(;*nceput de fiierU;, .G)
LO -OP
01#7F
t'isform"refres'()
01#P4O$
01##0F710
#0F710 $:/22 cmdPrima /2 $ommand>utton
P4O$0#,40 $lic6
LO -OP
t'isform"refres'()
01#P4O$
01##0F710
#0F710 $:/22 cmd,ltima /2 $ommand>utton
P4O$0#,40 $lic6
LO >O--OQ
t'isform"refres'()
01#P4O$
01##0F710
#0F710 $:/22 butono6cua&utor /2 o6button
Beig't 5 3J
Cidt' 5 =.
3D
-ool-ip-ext 5 ;Prsete formularul;
1ame 5 ;butono6cua&utor;
01##0F710
Fig" 3 Formular cu butoane de navigare
Pornind de la programul anterior (n care am definit o clas
container de butoane de navigare, vom realiza un alt program, care va
avea (n plus fa de cel anterior un buton 1ou (acesta va crea o nou
(nregistrare (n tabelul test"dbf)" 2e creaz clasa container care va
conine pe l!ng butoanele de navigare i 3 casete text legate cu
a&utorul proprietii $ontrol2ource la tabelul test care se consider c
este de&a adugat la mediul de date al formularului" /ceste 3 casete
text vor fi legate la 3 c!mpuri ale tabelului test i anume cnume i ctip"

P)) Form+ form.
P)) Parent$lass+ form
P)) >ase$lass+ form
#0F710 $:/22 form. /2 form
-op 5 D
:eft 5 D
3.
Beig't 5 .I3
Cidt' 5 =G9
#o$reate 5 "-"
>ac6$olor 5 4L>(.J3,.J3,.J3)
>order2t8le 5 3
$aption 5 ;Form.;
1ame 5 ;Form.;
/## O>?0$- text. /2 textbox C7-B T
>ac6$olor 5 4L>(.J3,.J3,.J3), T
$ontrol2ource 5 ;test"cnume;, T
Beig't 5 3=, T
:eft 5 =I, T
-op 5 3=, T
Cidt' 5 ..9, T
1ame 5 ;-ext.;
/## O>?0$- text3 /2 textbox C7-B T
>ac6$olor 5 4L>(.J3,.J3,.J3), T
$ontrol2ource 5 ;test"ctip;, T
Beig't 5 3=, T
:eft 5 =I, T
-op 5 GD, T
Cidt' 5 ..9, T
1ame 5 ;-ext3;
/## O>?0$- navigator. /2 navigator C7-B T
-op 5 .3D, T
:eft 5 .3, T
Cidt' 5 =3., T
33
Beig't 5 93, T
1ame 5 ;1avigator.;, T
cmd,rmatoarea"1ame 5 ;cmd,rmatoarea;, T
cmd/nterioara"1ame 5 ;cmd/nterioara;, T
cmdPrima"1ame 5 ;cmdPrima;, T
cmd,ltima"1ame 5 ;cmd,ltima;, T
cmdOS"-op 5 D, T
cmdOS":eft 5 9GD, T
cmdOS"Beig't 5 9., T
cmdOS"Cidt' 5 G., T
cmdOS"1ame 5 ;cmdOS;
/## O>?0$- form."navigator."cmd1ou /2
commandbutton C7-B T
-op 5 D, T
:eft 5 3II, T
Beig't 5 9., T
Cidt' 5 G., T
$aption 5 ;1ou;, T
1ame 5 ;cmd1ou;
P4O$0#,40 cmd1ou"$lic6
/PP01# >:/1S
t'isform"refres'()
01#P4O$
01##0F710
/dugarea butonului 1ou la container se face cu a&utorul comenzii
/## O>?0$- sau al metodei /ddOb&ect()
39
Fig"9 Formular cu casete de text
%ormularul
*n programarea structurat pentru a lansa un formular se
folosete comanda #O FO4Q nume, (n sc'imb (n programarea
orientat obiect se creaz o instan a obiectului printe cu a&utorul
metodei $reateOb&ect(), iar apoi se apeleaz metoda 2'oR() a
obiectului respectiv, metod care (l va afia""
5IP
*n Visual FoxPro G, putei utiliza funcia 1eROb&ect()
pentru a crea obiecte din clase"
oForm 5 $reateOb&ect(;Form;)
oForm"2'oR(.)
sau
oForm 5 1eROb&ect(;Form;)
oForm"2'oR(.)
Citirea evenimentelor sistemului
20- $:/22 -O &un6me
3=
oForm 5 $reateOb&ect(;Form;)
oForm"2'oR()
*n programul anterior se creeaz un formular pe baza unei
instanieri a clasei de baz Form, apoi se apeleaz metoda 2'oR()"
Problema se pune (n felul urmtor+ la apelarea metodei 2'oR()
formularul va aprea i apoi va disprea de pe ecran" #e aceea este
necesar s se transmit cumva sistemului s citeasc din nou
evenimentele" /cest lucru se poate realiza cu a&utorul comenzii 40/#
0V01-2"
Prog-: 9n buton de comand care lanseaz un "ormular
P)) $lass+ lansarea (n execuie a unui formular
P)) Parent$lass+ $ommand>utton
P)) >ase$lass+ $ommand>utton
#0F710 $:/22 lansareformular /2 $ommand>utton
Beig't 5 3J
Cidt' 5 J=
$aption 5 ;:ansareFormular;
oform 5 "1,::"
1ame 5 ; :ansareFormular ;
P4O$0#,40 $lic6
t'is"oForm 5 $reateOb&ect(;Form;)
t'is"oForm"2'oR()
01#P4O$
01##0F710
Mediul de date sau 'ata Environment ,na dintre cele mai
mari diferene dintre crearea formularului "2$V i crearea unei clase
de tip formular se afl (n zona mediului de date" Folosirea mediului de
3@
date se face pentru a specifica ce tabele, vederi sau relaii sunt utilizate
(n formular" :a crearea unui formular nu se poate salva mediul de date
(mpreun cu el, dac se salveaz un formular ca o clas care are un
mediu de date ataat, mediul de date este pierdut" #e aceea se creeaz
acest mediu de date cu a&utorul codului de program" #e obicei
plasarea codului de program referitor la desc'iderea mediului de date
se face (n evenimentul :oad, sau (ntr)o procedur numit :oad"
/stfel se creaz clasa container (formularul) care va conine casetele
de text, legate la tabela $lient cu a&utorul proprietii $ontrol2ource,
i bine(neles etic'etele corespunztoare fiecrei casete de text" *n
evenimentul :oad al formularului desc'idem baza de date test
specific!nd calea unde se afl memorat (n calculator, iar apoi
desc'idem tabela $lient"
Prog-; 9n "ormular care desc/ide o tabel de date pentru editare
P)) $lass+ formularcudateclient
P)) Parent$lass+ form
P)) >ase$lass+ form
#0F710 $:/22 formularcudateclient /2 form
#ata2ession 5 3
Beig't 5 39I
Cidt' 5 9@G
#o$reate 5 "-"
/uto$enter 5 "-"
>ac6$olor 5 4L>(.J3,.J3,.J3)
$aption 5 ;0xemplu de #ate $lient;
1ame 5 ;formularcudate;
/## O>?0$- txtcodcl /2 -ext>ox C7-B T
3G
$ontrol2ource 5 ;client"codcl;, T
0nabled 5 "F", T
Beig't 5 3=, T
:eft 5 .3D, T
-op 5 3=, T
Cidt' 5 3D@, T
1ame 5 ;txt$odcl;
/## O>?0$- txtcompanie /2 -ext>ox C7-B T
$ontrol2ource 5 ;client"companie;, T
Beig't 5 3=, T
:eft 5 .3D, T
-op 5 H3, T
Cidt' 5 3D@, T
1ame 5 ;txt$ompanie;
/## O>?0$- txtcontact /2 -ext>ox C7-B T
$ontrol2ource 5 ;client"contact;, T
Beig't 5 3=, T
:eft 5 .3D, T
-op 5 .3D, T
Cidt' 5 3D@, T
1ame 5 ;txt$ontact;
/## O>?0$- txttitlu /2 -ext>ox C7-B T
$ontrol2ource 5 ;client"titlu;, T
Beig't 5 3=, T
:eft 5 .3D, T
-op 5 .GI, T
Cidt' 5 3D@, T
3H
1ame 5 ;txt-itlu;
/## O>?0$- label. /2 label C7-B T
/uto2ize 5 "-", T
>ac62t8le 5 D, T
$aption 5 ;$od $lient+;, T
Beig't 5 .I, T
:eft 5 .3, T
-op 5 3=, T
Cidt' 5 ID, T
1ame 5 ;:abel.;
/## O>?0$- label3 /2 label C7-B T
/uto2ize 5 "-", T
>ac62t8le 5 D, T
$aption 5 ;$ompanie+;, T
Beig't 5 .I, T
:eft 5 .3, T
-op 5 H3, T
Cidt' 5 G=, T
1ame 5 ;:abel3;
/## O>?0$- label9 /2 label C7-B T
/uto2ize 5 "-", T
>ac62t8le 5 D, T
$aption 5 ;$ontact+;, T
Beig't 5 .I, T
:eft 5 .3, T
-op 5 .3D, T
Cidt' 5 @3, T
3I
1ame 5 ;:abel9;
/## O>?0$- label= /2 label C7-B T
/uto2ize 5 "-", T
>ac62t8le 5 D, T
$aption 5 ;-itlu+;, T
Beig't 5 .I, T
:eft 5 .3, T
-op 5 .GI, T
Cidt' 5 93, T
1ame 5 ;:abel=;
P4O$0#,40 :oad
OP01 #/-/ W2/QP:02%; Xtest"dbc;
,20 client
01#P4O$
01##0F710
5IP
Visual FoxPro G are o nou variabil de sistem numit
W2/QP:02" /ceasta reine calea unde sunt memorate
exemplele de coduri de program din directorul printe
Visual 2tudio G, aceste exemple toate fiind memorate (n
acelai director"
3J
Fig" = Formular cu casete de text legat la un tabel
Prog- < %ormularul de date precedent cu butoanele de navigare
adugate
P)) $lass+ formularcudateclientcunavigator
P)) Parent$lass+ formularcudateclient
P)) >ase$lass+ form
#0F710 $:/22 formularcudateclientcunavigator /2
formularcudateclient
Beig't 5 3I9
Cidt' 5 9HD
#o$reate 5 "-"
1ame 5 ; formularcudateclientcunavigator ;
txt$odcl"1ame 5 ;txt$odcl;
txt$ompanie"1ame 5 ;txt$ompanie;
txt$ontact"1ame 5 ;txt$ontact;
txt-itlu"1ame 5 ;txt-itlu;
:abel."1ame 5 ;:abel.;
:abel3"1ame 5 ;:abel3;
:abel9"1ame 5 ;:abel9;
9D
:abel="1ame 5 ;:abel=;
/## O>?0$- navigator. /2 navigator C7-B T
-op 5 3=D, T
:eft 5 .3, T
Cidt' 5 9@D, T
Beig't 5 93, T
1ame 5 ;1avigator.;, T
cmd,rmatoarea"1ame 5 ;cmd,rmatoarea;, T
cmd/nterioara"1ame 5 ;cmd/nterioara;, T
cmdPrima"1ame 5 ;cmdPrima;, T
cmd,ltima"1ame 5 ;cmd,ltima;, T
cmdOS"1ame 5 ;cmdOS;
01##0F710
Construirea "ormularelor cu a!utorul claselor sau utilizarea
Proiectantului de %ormulare7
,tilizarea proiectantului de formulare versus formularele create
sub forma claselor este o (ntrebare la care se rspunde greu"
/mbele metode merg bine (n aplicaii"
Qixarea i sc'imbarea diferitelor feluri de abordare nu face dec!t
s (ngreuneze meninerea aplicaiilor respective peste timp"
Proiectantul de Formulare poate fi folosit pentru crearea de seturi
de formulare, care conin mai mult de un formular" /stfel se
poate controla care dintre formulare este vizibil la un moment
dat"
Clasele mediului de date =data environment>
9.
:a crearea unui formular cu Proiectantul de formulare din
Visual FoxPro, trebuiesc specificate tabelele cu care lucreaz
formularul respectiv prin crearea unui mediu de date pentru formular"
#up cum apare i (n figura urmtoare un mediu de date este alctuit
din cursori i relaii" V putei g!ndi la un mediu de date ca la un
pac'et (de fapt un container), care conine informaiile necesare pentru
configurarea mediului de date"
Fig" @ Qediul de date al unui formular
0xist o limitare a mediului de date, cursorii i clasele nu pot fi
create vizual, ci pot fi create numai prin cod de program"
Clasa Cursor
93
$lasa $ursor definete coninutul zonei de lucru, se vor detalia
proprietile, evenimentele i metodele acestei clase"
Proprietile Clasei Cursor
Proprieti 'escriere
/lias $onfigureaz aliasul zonei de lucru c!nd se
desc'ide
>ufferQodeOverride 2pecific modul de buffering pentru cursor+
D 1imic (fr buffering)
. 0ste configurat la nivel de
formular
3 Pessimistic roR buffering
9 Optimistic roR buffering
= Pessimistic table buffering
@ Optimistic table buffering
dac clasa mediului de date nu este utilizat (ntr)
un formular se folosete orice valoare (n afar de
."
$ursor2ource 2pecific sursa pentru datele cursorului" Poate fi
o tabel, o baz de date, o vedere sau o tabel
liber"
#atabase 2pecific baza de date care conine sursa
cursorului, trebuie menionat calea complet"
0xclusive 2pecific dac sursa cursorului este desc'is (n
mod exclusiv i accept valori logice"
Filter 2pecific irul de caractere dup care se face
filtrarea
1o#ataOn:oad #ac aceast proprietate este setat pe "-",
desc'ide cursorul i creaz structura, dar nici o
99
dat nu va fi descrcat (n cursor" /cest lucru se
va realiza cu a&utorul lui 4eYuer8()"
Order 2pecific ordinea de afiare a datelor" -rebuie
specificat un tag de index"
4eadOnl8 #ac aceast proprietate este setat pe "-", atunci
datele nu vor putea fi modificate"
Evenimente i Metode? $lasa $ursor suport numai
evenimentele 7nit, #estro8 i 0rror"
Clasa 4elaii
$lasa 4elaii specific informaiile necesare pentru a configura
o relaiile (ntre doi cursori dintr)un mediu de date"
Proprieti
20:0$- Factura
20- O4#04 -O c$od$l
20:0$- $lient
20- 40:/-7O1 -O c$od$l 71-O Factura
Proprietile Clasei 4elaii
Proprieti 'escrierea
$'ild/lias /liasul tabelei copil" 0x" Factura"
$'ildOrder 2pecific ordinea din tabelul copil" 0x" c$od$l"
One-oQan8 2pecific dac este relaie una)la)mai)multe"
Parent/lias /liasul tabelei printe" 0x" $lient
4elational0xpr 0xpresia dup care se face relaia" 0x" c$od$l"
9=
Evenimente i Metode $lasa relaie suport numai
evenimentele 7nit, #estro8 i 0rror"
Clasa Mediu de date ='ataEnvironment>
$lasa #ata0nvironment este un container pentru cursori i
relaii, care luate (mpreun formeaz un mediu de date"
Proprietile Clasei 'ataEnvironment
Proprieti 'escrierea
/uto$lose-ables 2pecific dac tabelele ar trebui (nc'ise automat (n
cazul (n care obiectul este prsit"
/utoOpen-ables 2pecific dac tabelele ar trebui desc'ise automat
(n cazul (n care obiectul este instaniat"
7nitial2elected/lias 2pecific care alias ar trebui selectat iniial"
Metode #diionale ale Clasei 'ataEnvironment
Metod 'escrierea
$lose-ables() /ceast metod (nc'ide toate tabelele i cursorii din
clasa mediului de date"
Open-ables() /ceast metod desc'ide toate tabelele i cursorii din
clasa mediului de date"
Evenimentele Clasei 'ataEnvironment
Eveniment 'escrierea
>eforeOpen-ables() /cest eveniment se execut (nainte ca tabelele s
fie desc'ise
/fter$lose-ables() /cest eveniment se execut dup ce tabelele sunt
(nc'ise"
Prog- @ 9n e&emplu de clas 'ata Environment
9@
#0F710 $:/22 client /2 cursor
alias 5 ;$:701-;
cursorsource 5 ;$:701-;
database 5 BOQ0()%;-02-"#>$;
01##0F710
#0F710 $:/22 comenzi /2 cursor
alias 5 ;$OQ01Z7;
cursorsource 5 ;$OQ01Z7;
database 5 BOQ0()%;-02-#/-/"#>$;
01##0F710
#0F710 $:/22 articolcomand /2 cursor
alias 5 ;/4-7$O:$OQ/1#;
cursorsource 5 ;/4-7$O:$OQ/1#;
database 5 BOQ0()%;t02-#/-/"#>$;
01##0F710
#0F710 $:/22 $lientW:aW$omenzi /2 relation
c'ildalias 5 ;$omenzi;
parentalias 5 ;$lient;
c'ildorder 5 ;c$od$l;
4elational0xpr 5 ;c$od$l;
01##0F710
#0F710 $:/22 $omenziW:aW/rticol$omand /2
relation
c'ildalias 5 ;/rticol$omand;
parentalias 5 ;$omenzi;
9G
c'ildorder 5 ;c$od$omanda;
4elational0xpr 5 ;c$od$omanda;
01##0F710
#0F710 $:/22 #0 /2 #ata0nvironment
/## O>?0$- o$lient /2 $lient
/## O>?0$- o$omenzi /2 $omenzi
/## O>?0$- o/rticol$omand /2 /rticol$omand
/## O>?0$- o $lientW:aW$omenzi /2
$lientW:aW$omenzi
/## O>?0$- o $omenziW:aW/rticol$omand /2
$omenziW:aW/rticol$omand

P4O$0#,40 7nit
t'is"Open-ables()
01#P4O$

P4O$0#,40 #estro8
t'is"$lose-ables()
01#P4O$
01##0F710
0venimentul 7nit apeleaz metoda Open-ables (n aa fel (nc!t
toate tabelele sunt automat desc'ise c!nd obiectul este instaniat i
metoda $lose-ables() este apelat c!nd obiectul este prsit"
4ecuperarea de"iniiilor din 'BC ar putea fi o problem, mai
ales dac (n timpul dezvoltrii aplicaiei mai facei i ceva sc'imbri
(n #>$" *n acest caz trebuie imediat actualizat i mediul de date"
/cest aspect se poate realiza relativ simplu cu a&utorul funciilor de
9H
tipul /#>Ob&ects, astfel (nc!t s v generai programul automat din
#>$"
Clasa? '9MP'BC
#ump#bc este o subclas a clasei $ustom"
Proprietile subclasei 'ump'bc
Proprieti 'escrierea
P4O-0$-0# a4elations 0ste o list de obiecte relaie din fiierul #>$"
P4O-0$-0# a-ables 0ste o list de obiecte tabel din fiierul #>$"
P4O-0$-0# aVieRs 0ste o list de obiecte vedere din fiierul #>$"
$#>$1ame 0ste numele fiierului #>$ care se export"
$P4L1ame 0ste numele programului P4L care se creeaz"
P4O-0$-0# cPat' 0ste calea complet unde se afl baza de date"
P4O-0$-0# n4elations 0ste numrul de obiecte relaie din fiierul #>$"
P4O-0$-0# n-ables 0ste numrul de obiecte tabel din fiierul #>$"
P4O-0$-0# nVieRs 0ste numrul de obiecte vedere din fiierul
#>$"
Evenimente i Metode
Qetoda E&ecuta /ceast metod iniiaz scrierea
programului, fiind singura metod public" #e fapt ea verific
dac s)au completat proprietile c#>$1ame i cP4L1ame,
(n caz contrar apare o caset de dialog de tipul Letfile() sau
Putfile()"
9I
Qetoda clasecursor /ceast metod P4O-0$-0# merge
prin toate tabele i vederile bazei de date i genereaz clasele
cursor pentru ele, apel!nd metoda Crite$ursor$lass"
Qetoda citestedbc /ceast metod P4O-0$-0# citete
definiiile relaiilor, tabelelor i vederilor #>$ utiliz!nd
/#>Ob&ects i le plaseaz (n a4elations, a-ables i aVieRs
ca membrii ai unui tabel"
Qetoda claserelatie /ceast metod P4O-0$-0#
genereaz toate clasele relaie pentru fiierul #>$ i le scrie
(n fiierul program de ieire"
Qetoda scrieclase() /ceast metod P4O-0$-0#
lanseaz procesul de scriere al tuturor claselor" 0ste apelat de
metoda 0xecuta dup ce metoda $iteste#bc (i termin treaba"
Qetoda 2crieclase apeleaz metodele $laseCursor i
$laseRelatie pentru a scrie clasele individuale (n fiierul de
ieire" ,n ultim lucru pe care (l face aceast metod este s
apeleze metoda 2crieClaseImplicite, care scrie o
clas mediu de date implicit care are toi
cursorii i relaiile n ea.
Qetoda scrieclasecursor (tcClassName) Qetoda
P4O-0$-0# scrie o singur clas cursor (n program, av!nd
acelai nume cu cel al vederii sau cursorului"
Qetoda scrieclaseimplicite P4O-0$-0# scrie o clas
mediu de date implicit numit #efaultWde, care are toate clasele
cursor i relaii din fiierul #>$"
9J
Prog- , Cod pentru crearea clasei 'ump'BC i creaz i un
program de ieire
P)) $lass+ dumpdbc
P)) Parent$lass+ custom
P)) >ase$lass+ custom
P)) $reaz clase $,42O4 i clase 40:/-7O1 pentru
un "#>$"
#0F710 $:/22 dumpdbc /2 custom
P)) 1umrul de obiecte relaie din "#>$
P4O-0$-0# nrelations
nrelations 5 D
P)) 1umrul de obiecte tabel din "#>$
P4O-0$-0# ntables
ntables 5 D
P)) 1umrul de obiecte vedere din "#>$
P4O-0$-0# nvieRs
nvieRs 5 D
P)) 1umele "#>$
cdbcname 5 ;;
P)) 1umele fiierului program care va fi creat
cprgname 5 ;;
1ame 5 ;dumpdbc;
P)) $alea unde se afl baza de date
P4O-0$-0# cpat'
P)) :ista obiectelor relaie din "#>$
P4O-0$-0# arelations[.\
P)) :ista obiectelor vedere din "#>$
P4O-0$-0# avieRs[.\
P)) :ista obiectelor tabel din "#>$
=D
P4O-0$-0# atables[.\
P4O-0$-0# init
P)) $itete "#>$)ul (ntr)un arra8 (tablou) "
P4O-0$-0# P4O$0#,40 citestedbc
7F Udbused(t'is"c#bc1ame)
OP01 #/-/>/20 (t'is"c#bc1ame)
01#7F
P)) $itete "#>$
t'is"n-ables 5 a#>Ob&ects(t'is"a-ables,
;-able;)
t'is"nVieRs 5 a#>Ob&ects(t'is"aVieRs,
;VieR;)
t'is"n4elations 5 a#>Ob&ects(t'is"a4elations,
;4elation;)
01#P4O$
P)) 2crie toate clasele"
P4O-0$-0# P4O$0#,40 scrieclase
20- -0V-Q04L0 -O (t'is"cP4L1/Q0)
1O2BOC
7F t'is"n-ables O D O4 t'is"nVieRs O D
t'is"$lase$ursor()
01#7F
7F t'is"n4elations O D
t'is"$lase4elatie()
01#7F
t'is"2crie$lase7mplicite()
20- -0V-Q04L0 OFF
=.
20- -0V-Q04L0 -O
01#P4O$
P)) Proceseaz toate clasele cursor (n "#>$"
P4O-0$-0# P4O$0#,40 $lase$ursor
:O$/: ln$ounter
20- -0V-Q04L0 O1
FO4 ln$ounter 5 . -O t'is"n-ables
t'is"2crie$lase$ursor(t'is"a-ables[ln$ounter\)
01#FO4
FO4 ln$ounter 5 . -O t'is"nVieRs
t'is"2crie$lase$ursor(t'is"aVieRs[ln$ounter\)
01#FO4
20- -0V-Q04L0 OFF
01#P4O$
P)) 2crie o clas cursor (n fiierul program de ieire"
P4O-0$-0# P4O$0#,40 scrieclasecursor
:P/4/Q0-042 tc$lass1ame
X#0F710 $:/22 NN2-4-4/1(tc$lass1ame, c'r(93),
;W;)OO /2 cursor
X alias 5 ;NNtc$lass1ameOO;
X cursorsource 5 ;NNtc$lass1ameOO;
X database 5 #/-/>/20P/-B %
;NNt'is"c#bc1ameOO;
X01##0F710
X
01#P4O$
P)) Proceseaz i scrie toate clasele relaie"
P4O-0$-0# P4O$0#,40 claserelatie
=3
:O$/: ln$ounter, T
lc$lass1ame, T
lc$'ild/lias, T
lcParent/lias, T
lc$'ildOrder, T
lc4elational0xpr
20- -0V-Q04L0 O1
FO4 ln$ounter 5 . -O t'is"n4elations
lc$lass1ame 5 ;40:/-7O1;)
/lltrim(2tr(ln$ounter))
lc$'ild/lias 5 t'is"a4elations[ln$ounter,.\
lcParent/lias 5 t'is"a4elations[ln$ounter,3\
lc$'ildOrder 5 t'is"a4elations[ln$ounter,9\
lc4elational0xpr 5 t'is"a4elations[ln$ounter,=\
X#0F710 $:/22 NNlc$lass1ameOO /2
relation
X c'ildalias 5 ;NNlc$'ild/liasOO;
X parentalias 5 ;NNlcParent/liasOO;
X c'ildorder 5 ;NNlc$'ildOrderOO;
X 4elational0xpr 5 ;NNlc4elational0xprOO;
X01##0F710
X
01#FO4
20- -0V-Q04L0 OFF
01#P4O$
=9
P)) 2crie clasa mediului de date implicit (#ata
0nvironment) (n program
P4O-0$-0# P4O$0#,40 scrieclaseimplicite
:O$/: la$lasses[t'is"n-ables % t'is"nVieRs %
t'is"n4elations\
FO4 ln$ounter 5 . -O t'is"n-ables
la$lasses[ln$ounter\ 5 t'is"a-ables[ln$ounter\
01#FO4
FO4 ln$ounter 5 . -O t'is"nVieRs
la$lasses[ln$ounter%t'is"n-ables\ 5
t'is"aVieRs[ln$ounter\
01#FO4
FO4 ln$ounter 5 . -O t'is"n4elations
la$lasses[ln$ounter%t'is"n-ables%t'is"nVieRs\
5 T
;4elation; % /::-47Q(2-4(ln$ounter))
01#FO4
20- -0V-Q04L0 O1
X#0F710 $:/22 deWimplicit /2
#ata0nvironment
FO4 ln$ounter 5 . -O /:01(la$lasses,.)
lcOb&ect1ame 5 ]o]%la$lasses[ln$ounter\
lc$lass1ame 5 la$lasses[ln$ounter\
==
X /## O>?0$- NNlcOb&ect1ameOO /2
NNlc$lass1ameOO
01#FO4
X01##0F710
X
20- -0V-Q04L0 OFF
01#P4O$
P4O$0#,40 executa
P)) #ac nici un nume dbc nu este specificat, (ntreab de
unul"
7F 0QP-^(t'is"c#>$1ame)
t'is"c#>$1ame 5 L0-F7:0(;#>$;, ;2electati
va rugam #>$ pentru clasa dump+;)
7F UF7:0(t'is"c#>$1ame)
5Q022/L0>OV(;1u este selectat nici un #>$U
/nulamU;,.G)
40-,41 "F"
01#7F
01#7F
P)) /celai lucru i cu "P4L
7F 0QP-^(t'is"cP4L1ame)
t'is"cP4L1ame 5 P,-F7:0(;P4L pentru a fi
creat+;,;;,;P4L;)
7F 0QP-^(t'is"cP4L1ame)
5Qessagebox(;Operatie anulataU;, .G)
40-,41
01#7F
01#7F
=@
7F 20-(;safet8;) 5 ;O1; /1# T
F7:0(t'is"cP4L1ame) /1# T
Qessage>ox(;4escriere existenta ; % T
/::-47Q(t'is"cP4L1ame) % ;<;, 9G)
_ G
5Qessagebox(;Operatie anulataU;, .G)
40-,41
01#7F
P)) salveaz configurrile 2/F0-^
:O$/: lcOld2afet8
lcOld2afet8 5 20-(;safet8;)
20- 2/F0-^ OFF
t'is"citestedbc()
t'is"scrieclases()
20- 2/F0-^ AlcOld2afet8
01#P4O$
01##0F710
Prog- A Program care ilustreaz utilizarea clasei 'umpdbc
2et $lass:ib to $'ap.H
2et $lass:ib to Fox-ool /##7-7V0
o#bcLen 5 $40/-0O>?0$-(;dumpdbc;)
o#bcLen"c#>$1ame 5 ;testdata;
o#bcLen"cP4L1ame 5 ;deleteme"prg;
o#bcLen"xecuta()
=G
Prog- B Programul de ieire 'E)E5EME-P41
P Program"""""""""""+ deleteme"prg
P #>$"""""""""""""""+ -02-#/-/"#>$
P Lenerated"""""""""+ /ugust 3I, .JJI ) .D+.G+39
_#0F710 databasepat' BOQ0()%;X-02-X;
#0F710 $:/22 $:701- /2 cursor
alias 5 ;$:701-;
cursorsource 5 ;$:701-;
database 5 #/-/>/20P/-B %
;-02-#/-/"#>$;
01##0F710
#0F710 $:/22 P4O#,20 /2 cursor
alias 5 ;P4O#,20;
cursorsource 5 ;P4O#,20;
database 5 #/-/>/20P/-B %
;-02-#/-/"#>$;
01##0F710
#0F710 $:/22 /4-7$O:$OQ/1# /2 cursor
alias 5 ;/4-7$O:$OQ/1#;
cursorsource 5 ;/4-7$O:$OQ/1#;
database 5 #/-/>/20P/-B %
;-02-#/-/"#>$;
01##0F710
#0F710 $:/22 $OQ01Z7 /2 cursor
alias 5 ;$OQ01Z7;
=H
cursorsource 5 ;$OQ01Z7;
database 5 #/-/>/20P/-B %
;-02-#/-/"#>$;
01##0F710
#0F710 $:/22 /1L/?/-7 /2 cursor
alias 5 ;/1L/?/-7;
cursorsource 5 ;/1L/?/-7;
database 5 #/-/>/20P/-B %
;-02-#/-/"#>$;
01##0F710
#0F710 $:/22 40:/-70. /2 relation
c'ildalias 5 ;$OQ01Z7;
parentalias 5 ;$:701-7;
c'ildorder 5 ;$O#$:;
4elational0xpr 5 ;$O#$:;
01##0F710
#0F710 $:/22 40:/-703 /2 relation
c'ildalias 5 ;$OQ01Z7;
parentalias 5 ;/1L/?/-7;
c'ildorder 5 ;$O#/1L;
4elational0xpr 5 ;$O#/1L;
01##0F710
#0F710 $:/22 40:/-709 /2 relation
c'ildalias 5 ;/4-7$O:$OQ/1#;
parentalias 5 ;$OQ01Z7;
c'ildorder 5 ;$O#$OQ/1#/;
=I
4elational0xpr 5 ;$O#$OQ/1#/;
01##0F710
#0F710 $:/22 40:/-70= /2 relation
c'ildalias 5 ;/4-7$O:$OQ/1#;
parentalias 5 ;P4O#,20;
c'ildorder 5 ;$O#P4O#,2;
4elational0xpr 5 ;$O#P4O#,2;
01##0F710
#0F710 $:/22 deWimplicit /2 #ata0nvironment
/## O>?0$- o$lient /2 $lient
/## O>?0$- oProduse /2 Produse
/## O>?0$- o/rticolcomand /2 /rticolcomand
/## O>?0$- o$omenzi /2 $omenzi
/## O>?0$- o/nga&ati /2 /nga&ati
/## O>?0$- o4elatie. /2 4elatie.
/## O>?0$- o4elatie3 /2 4elatie3
/## O>?0$- o4elatie9 /2 4elatie9
/## O>?0$- o4elatie= /2 4elatie=
01##0F710
Qai este necesar s apelai metoda Open-ables() pentru a avea
tabelele desc'ise i deasemenea s apelai metoda $lose-ables()
pentru a (nc'ide tabelele"
#0F710 $:/22 #03 /2 #ata0nvironment
P4O$0#,40 7nit
t'is"Open-ables()
01#P4O$
=J
P4O$0#,40 #estro8
t'is"$lose-ables()
01#P4O$
01##0F710
Creterea puterii mediului de date cu a!utorul sesiunilor de
date ='ataSessions>
Putei s realizai aplicaii mult mai flexibile, lucr!nd cu mai
multe sesiuni de date" /cest lucru se (nt!mpl pentru a nu mai
desc'ide toate fiierelor la (nceput, ci numai funcie de sesiunea de
date corespunztoare" #e asemena, numai formularele pot crea sesiuni
de date independente"
$lasa care este creat ulterior nu se va putea aduga la un
formular cu a&utorul lui /## O>?0$- sau /ddOb&ect(), ci va trebui
s fie instaniat un obiect de acest tip cu a&utorul lui $reateOb&ect()"
Prog- C Codul pentru clasa Sesiunededatenoua
P)) $lass+ 2esiunededatenoua
P)) Parent$lass+ form
P)) >ase$lass+ form
#0F710 $:/22 sesiunededatenoua /2 form
#ata2ession 5 3
-op 5 D
:eft 5 D
Beig't 5 9@
Cidt' 5 .G3
#o$reate 5 "-"
$aption 5 ;Form;
Visible 5 "F"
1ame 5 ;sesiunededatenoua;
@D
P4O-0$-0# s'oR
P4O-0$-0# visible
01##0F710
$lasa de mai sus a creat un formular care nu va pute a fi afiat,
deoarece proprietatea Visible a fost configurat pe "F" i metoda
2BOC a fost prote&at de asemenea"
Clasele nonvizuale sunt clasele care nu sunt proiectate (n
primul r!nd pentru a fi afiate (n vreun fel" #e exemplu
$ommand>utton este o clas creat pentru a fi afiat (ntr)un
formular"
$lasele nonvizuale (n Visual FoxPro sunt tipic descendente ale
claselor $ustom i deseori nu conin componente care s poat fi
afiate" $u toate acestea o clas nonvizual poate avea componente
vizuale ataate la ea" #e asemenea, clasele vizuale pot fi baza pentru
clasele nonvizuale"
@.

S-ar putea să vă placă și