Sunteți pe pagina 1din 68

Liste

Listele reprezint obiecte care permit alegerea unor opiuni din mai multe variante posibile, afiate total sau parial pe ecran. Listele pot fi simple cnd pe ecran sunt afiate mai multe elemente sau derulante cnd pe ecran este afiat doar elementul selectat din list.

Liste simple (List Box)


Acest tip de list se utilizeaz atunci cnd n cadrul formularului exist suficient spaiu pentru a evidenia mai multe opiuni puse la dispoziia utilizatorului. n exemplul urmtor se prezint o list din care se poate selecta una din zilele unei sptmni (vezi imaginea urmtoare).

Pentru a construi o list: Se alege din bara cu instrumente (Form Controls) opiunea List Box i se plaseaz pe suprafaa formularului; Se stabilete modul n care se obin elementele listei; Se stabilete locul n care vor fi plasate informaiile selectate din lista Se stabilesc alte caracteristici pentru liste.

Modul n care se obin elementele unei liste este stabilit de valorile a dou proprieti: RowSourceType (tipul sursei) i RowSource (sursa efectiv).

Principalele tipuri de surse sunt prezentate n tabelul urmtor: Valoare 0 1 2 3 Tipul sursei None Value Alias Sql Statement Sursa de date a listei Nici o surs predefinit List cu elemente delimitate prin virgule Selectarea coloanelor se realizeaz prin intermediul proprietii ColumnCount Comand SQL care creeaz un cursor sau o tabel ca surs de date Numele unui fiier Query al crui rezultat va fi sursa de date Un tablou cu una sau mai multe dimensiuni O list de cmpuri separate prin virgul Lista fiierelor din directorul curent Cmpurile tabelei specificate n RowSource Elementele unui submeniu (acest tip pentru compatibilitatea cu versiunile precedente)

4
5 6 7 8 9

Query (.qpr)
Array Fields Files Structure Popup

Locul n care vor fi nregistrate informaiile preluate din list este stabilit n proprietatea ControlSouce. Dac, de exemplu, n ControlSouce se introduce numele variabilei <V100>, dup selectarea unui element din list, acesta va fi accesibil n variabila <V100>. n continuare se vor prezenta mai multe exemple n care se utilizeaz diferite tipuri de surse de date. Exemplul 1: Se consider o tabel numit candidai care conine dou cmpuri: <nume> (completat deja) i <ora> ce urmeaz a fi completat cu ajutorul unei liste (presupunem c tabela conine persoane care locuiesc numai n urmtoarele orae: Arad, Deva, Cluj, Iai, Piteti i Craiova).

Pe suprafaa formularului se va plasa un buton cu textul nchide Formular pentru nchiderea acestuia, un grup de dou butoane pentru deplasarea (naintenapoi) n cadrul tabelei i un cmp de editare n care se va vizualiza cmpul <nume>. Aciunile referitoare la list vor fi: Pentru RowSourceType se alege valoarea 1 (ceea ce nseamn c elementele se vor enumera n proprietatea RowSource); n proprietatea RowSource se introduc numele oraelor, desprite prin virgule: Arad, Deva, Cluj, Iai, Piteti i Craiova; Pentru fiecare persoan din tabel (numele este vizibil n cmpul corespunztor aflat n formular) se alege un ora. Pentru ca numele oraului s fie plasat n tabel, n cmpul <ora> din nregistrarea curent, se nscrie n proprietatea ControlSource valoarea candidai.oras; Pentru ca fundalul listei s aib o nuan de galben se nscrie n proprietatea Itembackcolor combinaia 225,255,0, iar pentru a scrie elementele listei cu rou se nscrie n proprietatea Itemforecolor combinaia 255,0,0.

Exemplul 2: Se dorete completarea cmpului <promovat> din tabela candidai (care are valoarea true pentru candidat promovat) pentru anumite persoane, care vor fi selectate dintr-o list format din toate numele din tabel.

se include n mediul de date tabela candidai; se plaseaz n formular cmpul <promovat> prin tragere cu mouse-ul din mediul de date; se plaseaz un buton de comand pentru nchiderea formularului; se plaseaz lista pe suprafaa formularului; se alege valoarea 2 Alias pentru RowSourceType; se alege numele tabelei n proprietatea RowSource. La rularea formularului se alege un nume din list (cu mouse-ul sau cu tastele direcionale) i se selecteaz caseta de validare (cu mouse-ul sau cu tasta de spaiu). Formularul se nchide prin executarea unui clic pe butonul corespunztor.

Observaii:
Cnd s-a selectat un element din list, indicatorul de nregistrri se poziioneaz automat pe nregistrarea din tabel care conine acel nume. Astfel, informaia existent n caseta de validare va fi plasat n cmpul <promovat> n nregistrarea corespunztoare din tabel. 2. Utilizarea opiunii Alias pentru RowSourceType permite realizarea unei liste dup primul cmp din tabel (valoarea 0 sau 1 n proprietatea ColumnCount).
1.

Problema de mai sus se putea rezolva i prin inserarea valorii 6 Fields n RowSource Type i a irului candidai.nume n proprietatea RowSource.

Exemplul 3: Ne propunem s actualizm o tabel alegnd nregistrarea i cmpul din cadrul unei nregistrri n care se vor efectua modificri.

din DataEnvironment se mut cu mouse-ul cmpurile care vor face obiectul modificrilor; se plaseaz n formular butonul de nchidere i butoanele (nainte napoi) pentru deplasarea n fiier; din bara Form Controls se plaseaz o list pe suprafaa formularului; n RowSourceType se selecteaz valoarea 8 (Structure), opiune ce permite formarea unei liste cu numele tuturor cmpurilor din tabel; n RowSource se plaseaza numele tabelei; cnd se selecteaz un cmp din list, se transfer controlul cmpului respectiv i va fi selectat informaia coninut n cmp (aceasta permite o modificare comod a cmpurilor; La apsarea oricrei taste, informaia selectat va fi nlocuit cu caracterul ales). n metoda ClickEvent asociat listei se poate scrie codul:

Pentru oricare alt cmp se poate scrie o instruciune if asemntoare. Se face o excepie pentru cmpul <cod>, n care nu se permit actualizri. n acest scop, se atribuie proprietii ReadOnly valoarea True pentru obiectul txtcod.
Exemplu 4: Ne propunem s obinem o list n mod dinamic, n timpul rulrii formularului. Din tabela candidai vom selecta cteva persoane ntr-o nou list, cu ajutorul a dou butoane: selectat i eliminat. n prima list (RowSource Type=2 i RowSource=candidai) vom prelua toate numele din tabela menionat, iar n a doua list (RowSource Type=0) elementele vor fi selectate din prima list.

Macheta formularului se prezint ca n imaginea urmtoare.

Pentru butonul selectat metoda Click permite adugarea elementului selectat n prima list la elementele din a doua list, cu ajutorul codului:

Metoda Additem (adaug un element ntr-o list) primete 3 parametri: textul asociat noului element (n cazul nostru este singurul parametru i conine valoarea curent din list 1); poziia n list unde va fi introdus noul element (n mod prestabilit, la sfritul listei); coloana pentru care se specific textul.
Pentru butonul <eliminat> n metoda Click se poate scrie codul:

Aceast instruciune determin eliminarea din list a elementului selectat.

n timpul rulrii, formularul se prezint ca n imaginea de mai jos:

Exemplul 5: Ne propunem s folosim ca surs de date pentru o list un tablou cu dou dimensiuni, care conine numele i prenumele unor persoane.

ntr-un program inclus n pagina Code a proiectului se declar o variabil public de tip tablou, cu dou dimensiuni: public v dimension v [4,2] n cadrul programului se completeaz cu valori componentele tabloului. Pentru realizarea formularului se execut urmtoarele operaii: proprietatea RowSourceType va avea valoarea 5 Array; proprietatea RowSource va conine numele matricei: V; proprietatea ColumnCount va avea valoarea 2 (se includ n list dou coloane din matrice); proprietatea ColumnWidth va avea valoarea 66 (limea n pixeli a unei coloane). Exemplul 6: Ne propunem s construim o list pe baza unei comenzi SQL Select care s preia dintr-o tabel persoanele ale cror nume ncep cu litera A sau cu litera M. Pentru lista plasat n formular: se atribuie proprietii RowSourceType valoarea 3-Sql; se introduce n proprietatea RowSource instruciunea SQL vizibil n fereastra Proprieties din imaginea de mai jos.

Exemplul 7: Se dorete construirea unei liste pe baza unui fiier de tip interogare (cu extensia .qpr): n proprietatea RowSource Type se plaseaz valoarea 4 Query, iar n proprietatea RowSource se alege un fiier Query.

Exemplul 8: Se dorete construirea unei liste cu toate fiierele .dbf din directorul curent, din care utilizatorul s poat alege un fiier i s-l vizualizeze.

n metoda Init a formularului se scrie codul:

se plaseaz o list pe suprafaa formularului; se nscrie n proprietatea RowSourceType valoarea 7 Files, iar n RowSource irul *.dbf (orice nume de fiier cu extensia .dbf); n proprietatea ControlSource se plaseaz numele unei variabile de memorie de tip ir de caractere (<fise>); n metoda LostFocus a listei (care se execut cnd lista pierde controlul) se scrie codul:

Observaii: n secvena de mai sus: 1. Se creeaz un obiect numit geam n care se va afia fiierul; 2. Se deschide fiierul al crui nume se afl n variabila <fise>.

Exemplul 9 : Se cere construirea unei liste cu elemente preluate dintr-un meniu de tip Popup. n proprietatea RowSourceType se trece valoarea 9 Popup, iar n RowSource se scrie numele meniului de acest tip creat ntr-un program al proiectului.
n metoda Init a formularului se trece codul: do prog1 Programul prog1 conine instruciunea: define popup man prompt field nume

Observaii: 1. Instruciunea din program definete un meniu de tip Popup numit man, care preia toate elementele din cmpul nume al unei tabele; 2. Tabela este prezent (deci legat la formular) n mediul de date (Data Environment) al formularului.

Liste derulante (ComboBox)


n stare neactivat, listele derulante permit vizualizarea unui singur element.

Pentru a vizualiza elementele listei, se execut clic pe butonul din partea dreapt a listei.

Exemplu: Vom construi o list derulant care cuprinde numele existente ntr-o tabel i vom defini un cmp de editare n care vom vizualiza oraul n care locuiete persoana selectat din list. Din bara Form Controls alegem obiectul ComboBox i l plasm pe suprafaa formularului. n RowSourceType vom alege valoarea 2 (Alias), iar n RowSource vom plasa numele tabelei.

La rularea formularului se va observa c la alegerea unui element din list (indicatorul de nregistrri se poziioneaz automat pe nregistrarea care conine numele selectat) acesta nu va figura i n cmpul de editare de pe suprafaa formularului, deoarece informaiile din formular nu sunt actualizate. Pentru a actualiza informaiile modificate se introduce n metoda Click a listei urmtoarea linie de program: thisform.refresh

O alt posibilitate de a actualiza aceste informaii este utilizarea obiectului Timer din bara cu instrumente FormControls, obiect reprezentat prin imaginea unui ceas. Acesta este singurul obiect invizibil n timpul rulrii formularului.

Controlul Timer va putea fi configurat s funcioneze pentru un interval de 2-3 secunde (proprietatea Interval va avea valoarea 2000) iar aciunea ce se produce dup scurgerea perioadei de timp precizate va fi plasat n metoda TimerEvent: thisform.refresh

Grila (Grid)
O gril permite afiarea i prelucrarea unei tabele, a unui grup de cmpuri dintr-o tabel sau din mai multe tabele. Acest tip de obiect permite vizualizarea i prelucrarea tabelelor n cadrul unui formular. Grila este un obiect container care poate conine cmpuri din tabele. Orice cmp poate conine antete i controale, fiecare cu propriul set de proprieti, evenimente i metode.

Un control gril se adaug la un formular alegnd butonul Grid din bara cu instrumente i plasndu-l ntr-un anumit loc stabilit pe suprafaa formularului. n vederea stabilirii surselor pentru datele incluse ntr-o gril se utilizeaz proprietile RecordSource, RecordSource Type i ControlSource.

Sursa de date poate fi stabilit: pentru ntreaga gril, utiliznd proprietile RecordSourceType i ControlSource; pentru anumite coloane, utiliznd proprietatea ControlSource (la nivel de coloan). n imaginea de mai jos se observ variantele care pot fi selectate pentru proprietatea RecordSourceType.

Pentru valoare 0 Table, Visual FoxPro include n gril tabela specificat n mediul de date sau tabela activ deschis ntr-o zon de lucru, dac utilizorul nu specific explicit numele unei tabele n proprietatea RecordSource. Pentru valoarea 1 Alias, utilizatorul trebuie s specifice numele tabelei n proprietatea RecordSource. Pentru valoarea 2 Prompt se ignor proprietatea RecordSource, iar la rularea formularului se va deschide fereastra Open, din care utilizatorul va putea alege numele tabelei care se va include n gril. Pentru a introduce ntr-o gril numai anumite coloane dintr-o tabel, utilizatorul trebuie s stabileasc numrul de coloane din gril n proprietatea ColumnCount, iar apoi trebuie s asocieze un cmp pentru fiecare coloan, prin intermediul proprietii ControlSource.

Cel mai rapid mod de a construi o gril cu toate cmpurile unei tabele este de a trage cu mouse-ul tabela din baza de date sau mediul de date direct pe suprafaa formularului.

Pentru a realiza aceeai operaie asociind tabela la gril prin proprietatea ControlSource se poate proceda astfel: se alege butonul Grid din bara Form Controls i se plaseaz pe suprafaa formularului; se atribuie proprietii RecordSource Type valoarea 0 Table; se plaseaz tabela n mediul de date; n proprietatea RecordSource se nscrie numele tabelei din care se va forma grila; se plaseaz (opional) un buton de nchidere a formularului.

Dac nu se specific numele unei table, n gril se va ncrca tabela activ, iar dac nu exist o astfel de tabel, gril va rmne vid. Pentru a forma o gril cu una dintre tabelele cuprinse n baza de date activ, se plaseaz o gril pe suprafaa formularului i se alege din RecordSourceType valoarea 2 Prompt, iar proprietatea RecordSource nu se folosete. La rularea formularului se va deschide fereastra Open, din care se poate alege tabela care urmeaz s populeze grila. Aceeai operaie se poate realiza prin mutarea cu mouse-ul a unei tabele din fereastra Detabase Designer direct pe suprafaa formularului, aa cum se poate vedea n imaginea urmtoare.

Pentru a forma o gril cu una din tabelele incluse n mediul de date, se plaseaz o gril pe suprafaa formularului i se atribuie proprietii RecordSourceType valoarea 1- Alias, iar pentru RecordSource se alege numele sau aliasul tabelei dorite. Pentru a forma o gril specificnd coloanele care urmeaz a fi inserate: se plaseaz o gril pe suprafaa formularului; se atribuie proprietii ColumnCount o valoare egal cu numrul de cmpuri dorit (valoarea implicit -1 indic toate cmpurile din tabel); din lista derulant (care prezint structura arborescent a formularului) aflat n partea superioar a ferestrei Properties se alege pentru fiecare coloan elementul Header1, a crui proprietate Caption va conine numele care va fi plasat n antetul de coloan. din aceeai list se va lega fiecare coloan la cmpul corespunztor dintr-o tabel n proprietatea ControlSource.

Exemplu: S se formeze o gril cu trei cmpuri: <nume> i <ora> preluate din tabela ghizi, respectiv <vrsta> preluat din tabela vrste.

se plaseaz o gril pe suprafaa formularului; se selecteaz grila i se plaseaz n proprietatea ColumnCount valoarea 3; din lista ierarhic a obiectelor plasate pe formular, aflat n fereastra Properties, se alege Column1.Header1 i se modific proprietatea Caption n nume; se alege Column2.Header1 i se modific proprietatea Caption n ora iar pentru Column3.Header1 proprietatea Caption se modific n vrst;

din aceeai list cu obiecte se alege Column1 i se atribuie proprietii ControlSource numele cmpului corespunztor: ghizi.nume. proprietatea ControlSource a obiectului Column2 va conine numele cmpului ghizi.ora, iar a treia coloan se va lega la cmpul vrste.vrsta.

Grila se prezint ca n imaginea urmtoare:

Observaie: ntre cele dou tabele trebuie s existe o relaie temporar sau permanent (care s asocieze indicatoarele de nregistrri ale celor dou tabele) bazat pe un cmp comun (n cazul prezentat cmpul <cod>). Legtura este vizibil n mediul de date, cum se poate observa n imaginea de mai jos:

Adugarea unui control ntr-un cmp al grilei


Coloana unei grile este un container n care sunt plasate automat obiecte de tip Header i Text. Pe lng afiarea cmpurilor de date, n coloanele unei grile se pot insera i controale, astfel nct utilizatorul s aib la dispoziie casete de validare, casete cu incrementare, grupuri de butoane de comand, liste sau alte tipuri de controale. Pentru a aduga controale ntr-o coloan a unei grile: se selecteaz din lista ierarhic a obiectelor incluse ntr-un formular (fereastra Properties) coloana-printe a controlului care se va insera; se selecteaz din bara FormControls controlul dorit i se plaseaz n coloana-printe; se atribuie proprietii ControlSource a coloanei-parinte cmpul corespunztor din tabel; se atribuie noul control proprietii CurrentControl a coloanei-printe. La rularea formularului, controlul va fi afiat n coloana grilei.

n exemplul urmtor, n tabela table1 se vor completa cmpurile <Cas>, <Materia> i <Nota>, utiliznd controale incluse n coloanele unei grile care va conine tabela. Celalalte cmpuri ale tabelei sunt completate aa cum se observ n imaginea urmtoare:

Grila va conine cmpurile <Nume>, <Cas>, <Materia> i <Nota>. Informaiile care se vor introduce n aceste cmpuri sunt urmtoarele: n cmpul <Cas>: true pentru cstorit i false pentru necstorit; n cmpul <Materia> una dintre opiunile: englez, francez sau spaniol; n cmpul <Nota> o valoare ntreag, cuprins ntre 1 i 10.

Pentru introducerea acestor informaii se vor utiliza o caset de validare, un grup de trei butoane de comand i o caset cu incremente.

Pentru a construi aceast gril, se execut urmtoarea succesiune de operaii: se selecteaz grila din bara FormControls i se plaseaz pe suprafaa formularului; se atribuie proprietii ColumnCount valoarea 4 (grila va conine 4 cmpuri); se modific antetul grilei, specificnd numele cmpurilor (nume, cstorit, materia, nota) n proprietatea Caption a obiectelor Header1 asociate celor 4 obiecte Column (numerotate de la 1 la 4), utiliznd lista derulant din partea superioar a ferestrei Properties sau executnd clic cu mouse-ul pe antetul coloanei din formular; se asociaz fiecare coloan din gril cmpului corespunztor din tabel (tabela a fost inclus n mediul de date al formularului) i se selecteaz prima coloan a grilei (din lista ierarhic oferit de fereastra Properties sau executnd clic cu mouse-ul direct pe coloana corespunztoare); in proprietatea ControlSource se plaseaz numele cmpului corespunztor table1.nume; procednd n mod similar, se atribuie proprietilor ControlSource din coloanele 2, 3 i 4 numele cmpurilor asociate (care pot fi selectate dintr-o list derulant aflat la dispoziia proprietii ControlSource);

se interzice utilizatorului s modifice cmpul <nume>, plasnd n proprietatea

ReadOnly (a obiectului Column1) valoarea True; se introduce n obiectul Column2 o caset de validare pentru a facilita introducerea datelor. Pentru aceasta se selecteaz obiectul Column2 din fereastra Properties i opiunea CheckBox din bara FormControls i se execut clic cu mouse-ul pe suprafaa formularului n interiorul coloanei respective.
proprietatea Caption a obiectului Check1 din Column2 primete ca valoare

irul vid; n caz contrar, irul introdus n proprietatea Caption va fi nscris n interiorul cmpului <cas> alturi de caseta de validare; proprietatea CurrentControl a obiectului Column2 va asocia caseta de validare la cmpul dorit alegnd valoarea Check1; proprietatea Sparse a aceluiai obiect primete valoarea False pentru a face vizibile casetele de validare din fiecare rnd al tabelei (n caz contrar, obiectele dintr-un cmp devin vizibile doar la selectarea cu mouse-ul).

n coloana urmtoare (materia) se introduce un grup de 3 butoane de comand: se selecteaz coloana 3; se selecteaz butonul CommandGroup din FormControls; proprietile Caption ale celor trei butoane componente primesc ca valori textele: englez, francez, spaniol; in proprietatea CurrentControl se selecteaz CommandGroup; proprietatea Sparse va avea n continuare valoare True, astfel nct grupul de butoane va deveni vizibil doar la acionarea cu mouse-ul n interiorul cmpului <materia>.
Astfel, executnd clic cu mouse-ul n interiorul cmpului <materia> se vor afia cele trei butoane, din care se poate alege o materie care va fi nscris n tabel n rubrica corespunztoare.

n cmpul <nota> se introduce o caset cu incrementare (Spinner); se selecteaz coloana 4; se selecteaz obiectul Spinner din fereastra Form Controls; se execut clic cu mouse-ul pe suprafaa formularului n coloana aleas ; in obiectul Spinner, proprietatea SpinnerHighValue primete valoarea 10, iar proprietatea SpinnerLowValue primete valoarea 1; in obiectul Column4, proprietatea CurrentControl va primi valoarea Spinner1, iar Sparse va primi valoarea False.
n acest mod se introduc note n tabel folosind valorile stabilite cu ajutorul casetei de incrementare.

Macheta grilei este prezentat n imaginea urmtoare :

Sortarea nregistrrilor dintr-o gril n funcie de informaiile coninute n coloane


Antetul unei coloane este un obiect care poate fi utilizat la ordonarea nregistrrilor n conformitate cu valorile coninute n acel cmp. Astfel, utilizatorii aplicaiei pot s ordoneze o tabel inclus ntr-o gril executnd clic pe antetul coloanei care va servi drept criteriu de ordonare. Pentru a realiza acest lucru se poate nscrie n procedura Click a antetului de coloan (Header1.click) o secven de program care s stabileasc ordinea nregistrrilor pe baza unui index pe acea coloan i s actualizeze formularul.

De exemplu, tabela Candidai, introdus ntr-o gril poate fi ordonat n funcie de cmpul <nume> sau cmpul <medie> executnd clic cu mouse-ul pe antetul unuia dintre aceste cmpuri.

Afiarea relaiei de tip una la mai multe ntre dou tabele ale unui formular
Una dintre cele mai interesante faciliti oferite de o gril este posibilitatea de a realiza configurarea unui formular de tip una la mai multe. n formular se introduce un control de tip TextBox care afieaz date din nregistrrile tabelei printe, n timp ce grila afieaz nregistrrile corespunztoare din tabela-fiu. Aceast aciune se poate realiza utiliznd mediul de date al formularului: pe formular se plaseaz opional un buton pentru nchiderea formularului i un grup de dou butoane pentru parcurgerea tabelei-printe; se mut cu mouse-ul, din mediul de date, cmpurile din tabela-printe care urmeaz a fi incluse n formular; se mut tabela-fiu din mediul de date pe suprafaa formularului; rulnd formularul, se va observa c prin deplasarea n tabela-printe, este posibil vizualizarea nregistrrilor corespunztoare din tabela-fiu.

Fr utilizarea mediului de date se obine acelai efect dac:


se adaug la formular cmpurile din tabela-printe; se atribuie tabela-printe proprietii ControlSource pentru fiecare cmp adugat n

formular; se adaug o gril n formular; n proprietatea RecordSource asociat grilei se plaseaz numele tabelei-fiu; n proprietatea LinkMaster asociat grilei se plaseaz numele tabelei-printe; n proprietatea ChildOrder asociat grilei se plaseaz eticheta de index din tabela-fiu care corespunde expresiei relaionale din tabela-printe;

Exemplu: Utiliznd tabelele printe.dbf i fiu.dbf (incluse ntr-o baz de date) ntre care exist o relaie permanent i una temporar de tip una la mai multe s se realizeze un formular n care s figureze cmpul <nume> din tabela printe i toate cmpurile din tabela fiu. Deplasarea n tabela printe se va executa cu ajutorul unui grup de butoane de comand, iar pentru nchiderea formularului se va utiliza un alt buton de comand.

din biblioteca de clase se adaug butonul pentru nchiderea formularului i grupul de dou butoane care permite deplasarea n tabela-printe; se selecteaz controlul TextBox din bara FormControls i se plaseaz n formular; n proprietatea ControlSource se plaseaz cmpul <printe.nume>; din fereastra FormControls se selecteaz butonul Grid i se plaseaz pe suprafaa formularului; n proprietatea RecordSource se introduce <fiu>; n proprietatea LinkMaster se introduce <printe>; n proprietatea ChildOrder se introduce <cod>; n proprietatea RelaionalExpr se introduce <cod>.
Acionnd butonul din bara Visual FoxPro se va rula formularul i se vor putea vizualiza nregistrrile din tabela-fiu asociate fiecrui nume afisat n cmpul de editare. Macheta formularului se poate vedea n imaginea urmtoare.

Cadre de pagin
Un cadru de pagini este un obiect container care conine mai multe pagini. La rndul lor, paginile pot conine diferite controale. Proprietile pot fi stabilite la nivel de cadru de pagin sau la nivel de control. Cadrul de pagin definete aranjarea paginilor i descrie partea vizibil a acestora. Colul din stnga-sus al paginii este ancorat de colul din stnga-sus al cadrului de pagin. Aceasta constituie o modalitate convenabil de selectare a oricrei pagini din interiorul cadrului, fiecare pagin fiind identificat printr-o etichet. Un exemplu sugestiv pentru un cadru de pagini este aplicaia Project Manager. Cadrele de pagini sunt utile atunci cnd nu se dorete construirea mai multor formulare independente, care trebuie activate n diferite etape ale unui proiect. Pentru a introduce un cadru de pagin ntr-un formular se selecteaz din bara FormControls obiectul PageFrame i se execut clic cu mouse-ul n locul stabilit pe suprafaa formularului. Un cadru pagin este alctuit din dou sau mai multe pagini stratificate (plasate una peste cealalt), fiecare coninnd obiecte diferite. La un moment dat, este vizibil o singur pagin.

Fereastra FormDesigner unde s-a plasat un cadru de pagin care conine implicit dou pagini, respectiv lista ierarhic din fereastra Properties n care este nscris structura obiectului, sunt vizibile n imaginea urmtoare.

Principalele proprieti utilizate n parametrizarea cadrelor de pagin sunt:


Active Page specific numrul paginii active; Page Count - specific numrul de pagini inclus n cadru; Tabstyle - specific dac toate etichetele paginilor incluse n cadru au limi

egale;

Page Order specific poziia relativ a paginii n interiorul cadrului. Exemple rezolvate: 1. Se construiete un cadru cu dou pagini. n prima pagin se include o list din care se va selecta numele unei persoane. La alegerea numelui se va achita a doua pagin, n care se vor vizualiza informaii despre acea persoan (numele oraului i materia studiat).

Pentru ndeplinirea acestor cerine se vor efectua urmtoarele operaii: se plaseaz butonul de nchidere a formularului; se plaseaz setul de pagini selectnd din FormControls opiunea Page Frame;

n proprietatea Caption din Page1 se introduce irul pagina 1 iar n proprietatea Caption din Page2 se introduce irul pagina 2; se plaseaz o list pe pagina 1 i se leag la cmpul <nume> din tablel introducnd n proprietatea RowSourceType valoarea 2 Alias, iar n proprietatea RowSource numele table1; se dimensioneaz lista astfel nct s se ncadreze n pagin, stabilind pentru proprietile de mai jos urmtoarele valori: distana de marginea superioar a formularului top=32; distana de marginea lateral din stnga a formularului left=35; nlimea listei height=96; limea listei width=108; n metoda Click Event asociat listei se va scrie codul necesar pentru ca atunci cnd se selecteaz o opiune din list cu ajutorul mouse-ului (moment n care indicatorul de nregistrri s-a poziionat pe nregistrarea care conine numele selectat) s se transfere automat ctre pagina urmtoare (pagina2):

Observaie: Proprietatea ActivePage va marca pagina 2 ca pagin activ. n pagina2 se va scrie urmtoarea linie de program n metoda ActivateEvent (la activarea acestei pagini, se reactualizeaz informaiile din tabel): thisform.refresh n caz contrar, vor fi vizibile informaiile referitoare la prima nregistrare. Tot n pagina2 se vor plasa dou obiecte de tip cmp de editare, prin selectarea FormControls a obiectului TextBox.

Deasupra celor dou obiecte se vor plasa, de pe aceeai bar,dou etichete


Label. Se asociaz primul TextBox la cmpul <ora>, iar al doilea TextBox la cmpul <materia> (ambele cmpuri din tabel2). Se va rula formularul cu butonul din bara Visual FoxPro.

2. Se va construi un cadru coninnd 5 pagini. n prima pagin se va afia o list cu numele grilor din ora. Dup selectarea unei gri, executnd clic pe butonul <OK> se va trece automat la pagina care conine informaii despre trenurile care pleac din acea gar. Revenirea n pagina1 (pagina principal) se realizeaz selectnd eticheta corespunztoare sau un buton suplimentar cu textul <index> vizibil pe toate paginile setului. Dac informaiile despre terenurile dintr-o gar nu se ncadreaz integral n pagina atribuit, informaiile n exces vor fi afiate n pagina urmtoare, iar utilizatorul va apsa un buton cu textul <continuare>. Butonul <ieire> va dezactiva formularul.

Pentru a rezolva problema, se vor efectua urmtoarele operaii: se plaseaz butonul cu textul <ieire> pe suprafaa formularului; se plaseaz PageFrame pe suprafaa formularului; toate celelalte obiecte se vor plasa n containerul PageFrame; pentru PageFrame se va modifica proprietatea Name n <gara>, iar proprietatea PageCount va primi valoarea 5 (valoarea implic este 2), deci obiectul va dispune de 5 pagini; se plaseaz la nivelul cadrului de pagini un buton de comand cu textul <index>, care va fi vizibil n toate paginile, n aceeai poziie, i va avea acelai efect.

Observaie: Transferul controlului ctre prima pagin din cadru se realizeaz cu instruciunea: thisform.gara.activepage=1
n Page 1 se asociaz proprietii Caption irul <pagina1> i n mod similar n celelalte pagini se vor introduce irurile <pagina2>, <pagina3> etc; se va plasa n Page 1 o list (List Box) pentru care: se vor asocia proprietilor specificate valorile: left=23, height=96, top=44 i width=108; se va atribui proprietii Itembackcolor valoarea 255,255,0 (culoarea galben) pentru fundalul listei; se va introduce valoarea Type 1 Value n proprietatea RowSource (ceea ce nseamn c se vor introduce n proprietatea RowSource opiunele posibile din list, separate prin virgule); se vor plasa n proprietatea RowSource textele: Gara de Nord, Basarab, Gara cea Nou; se va atribui proprietii Sorted valoarea True pentru ca elementele listei s fie sortate alfabetic, indiferent de ordinea n care au fost introduse n list;

se va atribui proprietii Value valoarea -1, ceea ce nseamn c implicit este

selectat primul element din list, dar i c proprietatea Value va recepta valori numerice (1,2,3) i nu iruri de caractere (Gara de nord, Basarab, Gara cea Nou); n Page 1 se plaseaz un buton de comand pentru care proprietatea Caption va reine irul <OK> iar metoda ClickEvent va conine codul: thisform.gara.activepage=thisform.gara.page1.list1.value+1 Observaie: Cu aceast instruciune se activeaz din setul <gara> din formularul activ pagina care are numrul de ordine mai mare cu o unitate dect numrul de ordine al elementului selectat din list. n pagina urmtoare (Page2) se plaseaz un control Edit Box pentru care culoarea de fundal (galben) a fost selectat n proprietatea BackColor cu butonul informaiile vor fi preluate dintr-un cmp memo numit <info> plasat ntr-o tabel de care va fi legat prin intermediul proprietii ControlSource; pentru ca un utilizator s nu poat modifica informaia plasat n EditBox, se va atribui proprietii RealOnly valoarea True;

se consider controlul EditBox deselectat, deci acesta va fi afiat pe un fundal cenuiu (pentru a folosi alt culoare, se atribuie proprietii DisabledBlackColor un alt cod de culoare); n paginile 3,4 i 5 se plaseaz n mod asemntor cte un control EditBox cu aceleai proprieti; n pagina 4 (Page 4) se plaseaz un buton pentru a permite trecerea la urmtoarea pagin, n care sunt prezentate informaii referitoare la gara aleas: proprietatea Caption are valoarea <continuare>; Metoda ClikEvent va conine codul: thisform.gara.activepage=thisform.gara.page4.pageorder+1; unde proprietatea PageOrder specific numrul de ordine al paginii curente n interiorul cadrului de pagin; (pageorder+1 reprezint numrul de ordine al paginii urmtoare) un ultim aspect al acestui exemplu: am dorit s plasm un buton (cu textul <index>) care s fie vizibil n acelai loc n toate paginile setului i care s aib acelai efect: transferul controlului ctre prima pagin. n acest caz, butonul respectiv nu trebuie plasat i pe prima pagin. Pentru a rezolva aceast situaie: cnd se activeaz prima pagin, se execut codul folosit n metoda ActivateEvent (thisform.command1.visible=.f.), care face acest buton invizibil;

butonul va fi reafiat la dezactivarea paginii, cnd se execut codul plasat n metoda Deactivate Event: thisform.command1.vizible=.t.

n imaginile urmtoare sunt ilustrate paginile 1, 3 i 4 din setul de pagini prezentat n acest exemplu.

Exercitii propuse:
1. Adaugati unui formular o lista continand zilele unei saptamani si asociati lista unui camp corespunzator din tabela activa. 2. Adaugati unui formular o lista cu materiile optionale care pot fi alese la examenul de Bacalaureat si transferati optiunile elevilor intr-un camp din tabela activa. 3. Construiti o lista care sa contina numele tuturor elevilor dintr-o tabela inclusa in mediul de date. Pentru fiecare elev se va permite introducerea numelui orasului natal, in tabela, in inregistrarea corespunzatoare. 4. Adaugati intr-un formular o lista derulanta cu ajutorul careia un antrenor sa poata stabili echipa de inceput a unui meci, preluand din aceasta lista jucatorii care fac 5. 6. 7. 8.

parte din lotul largit. Sa se vizualizeze o tabela utilizand o grila. Sa se vizualizeze anumite inregistrari dintr-o tabela utilizand o grila. Sa se vizualizeze o tabela intr-o grila si sa se modifice informatiile din anumite campuri. Introduceti intr-o grila o tabela care contine campurile <nume>, <clasa> si <nota> si inserati in campul <nota> un obiect de tip Spiner, pentru a permite introducerea de note numere intregi in intervalul inchis [1; 10].

9. Introduceti intro grila o tabela cu mai multe campuri si scrieti programul corespunzator pentru a permite vizualizarea inregistrarilor sortate in functie de anumite campuri prin executarea unui clic pe antetul coloanei respective. 10.Utilizand mediul de date, construiti o grila din doua tabele legate printr-o relatie una la mai multe, astfel incat la selectarea numelui unui diriginte din prima tabela sa se vizualizeze in grila numele elevilor din clasa acelui diriginte.

11.Realizati cerintele de la problema precedenta fara a utiliza mediul de date.


12.Construiti un formular cu ajutorul unui asistent de tip Wizard in care sa se afiseze relatia stabilita intre tabelele judete si municipii. La afisarea numelui unui judet se vor afisa in formular municipiile din acel judet. 13.Sa se realizeze un formular in care sa se construiasca, prin intermediul unei aplicatii Builder, un grup de optiuni in stil grafic. Cu ajutorul optiunilor se vor completa in tabelul camere_hotel alegerile efectuate de un client:
O camera cu televizor O camera cu telefon

O camera cu radio.

Raspunsurile vor fi de tip da/nu si vor fi inscrise in tabela in inrfegistrarea corespunzatoare.

14. Construiti un formular in care sa includeti un cadru cu trei pagini. Din prima pagina se pot selecta, cu ajutorul unui grup de doua butoane de comanda, optiunile elevi si profesori. La selectarea primei optiuni se va activa a doua pagina, in care se va insera o lista cu ajutorul careia se poate alege o anumita clasa. La selectarea optiunii profesori se va activa a tgreia pagina, unde se va introduce o lista de tip ComboBox din care se va selecta numele unui profesor si se va afisa lista claselor la care preda acel profesor.

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