![]() | Biologie | Chimie | Didactica | Fizica | Geografie | Informatica |
Istorie | Literatura | Matematica | Psihologie |
FORMULARE IN VISUAL FOX PRO
1 Obiectele formularului
Utilizarea formularelor permite construirea unei interfete mai prietenoasa si atractiva pentru utilizator. Formularele sunt niste ferestre care pot contine obiecte ce raspund printr-un anume comportament (implementat prin metode) la evenimente declansate de utilizator, de sistem, sau de alte obiecte.
Printre cele mai importante obiecte ale unui formular:
Simbolul Butonului |
Denumire |
Functionalitate |
Poate fi legat la o sursa de date |
|
Select obiect (selectorul nu este un obiect) |
Selecteaza obiecte in vederea redimensionarii si/sau mutarii lor (click+shift selecteaza mai multe obiecte) |
Nu |
|
Label (Eticheta) |
Obiect de tip eticheta care afiseaza un text in formular |
Nu |
|
Text box (Caseta de text) |
Afiseaza si da posibilitatea modificarii unei surse de date formate din valoarea unui camp al unei tabele sau dintr-o variabila de memorie. Afiseaza o singura linie de text |
Da |
|
Edit Box (caseta de editare de text) |
Are cam acceeasi functionalitate ca si controlul Text Box, dar ca afiseaza sursa de date pe mai multe linii (se poate incepe linie noua cu Enter) Folosit in general pentru a introduce fragmente de text (campuri de tip memo) |
Da |
|
Command Button (Buton de comanda) |
Obiect care simuleaza vizual un buton al unui aparat oarecare (poate fi "apasat") In general raspunde la un evenimet click. Foloseste la declansarea unei operatii |
Nu |
|
Command Group (Grup de butoane de comanda) |
Container ce contine un numar variabil de butoane de comanda, fiecare avand propria functionalitate. Avantajul consta ca pot fi manipulate unitar(ca un singur obiect) in functie de necesitati |
Nu |
|
Option Group Grup de butoane de optiune |
Container ce contine un numar variabil de butoane cu aspect circular, fiecare insotit de un text explicativ. Permite utilizatorului alegerea unei singure optiuni din cele posibile la un moment dat. Se mai numesc si butoane radio |
Da |
|
Check Box Caseta de optiune |
Ofera utilizatorului posibilitatea de a opta intre adevarat sau fals pentru o anumita conditie. Spre deosebire de butoanele de optiune, grupurile de obiecte de tip bifa pot oferi posibilitatea alegerii mai multor obtiuni din cele posibile |
Da |
|
List box Caseta cu lista |
Obiect care afiseaza o lista de elemente in care utilizatorul se poate deplasa pe verticala si poate selecta unul sau mai multe la un moment dat |
Da |
|
Combo Box Lista combinata |
Obiect asemanator cu o caseta de text, ce deschide o lista de elemente din care utilizatorul poate alege una singura. Dupa selectia necesara lista se inchide. Foarte util pentru economisirea spatiului pe formular. |
Da |
|
Spinner |
Afiseaza intr-o casuta de text un contor (numar) ce poate lua valori intre anumite limite. Incrementarea sau decrementarea au loc prin click pe sagetile sus jos sau prin scrierea unui numar de la tastatura |
Da |
|
Grid |
Obiect de tip container, ce poate afisa si manipula datele intr-o forma tabelara poate include alte tipuri de obiecte |
Da |
|
Image |
Afiseaza si manipuleaza fisiere grafice de pe disc sau campuri de tip General din tabele |
Da |
|
Timmer |
Obiect ce permite lansarea unor procese la anumite intervale de timp, fixate dinainte(de exp. un text care apare/dispare, afisarea orei la fiecare secunda) Invizibil la executie |
Nu |
|
Page frame |
Obiect de tip container ce permite afisarea mai multor pagini suprapuse, fiecare continand alte controale. Foarte util pentru formularele complexe, in care spatiul de pe o singura pagina este insuficient |
Nu |
|
Ole container control |
Utilizat pentru introducerea obiectelor de tip ActiveX |
In functie de tipul obiectului |
|
Ole Bound Control |
Asemanator cu anteriorul, dar ca se leaga de un camp de tip General dint-o tabela. Este utilizat in special pentru afisarea imaginilor stocate in tabela |
Da |
|
Line |
Serveste la trasarea de linii pe formular |
Nu |
|
Shape |
Serveste la trasarea unor forme geometrice pe formular |
Nu |
2. PROPRIETATI, EVENIMENTE SI METODE
Proprietatile sunt variabile locale ale fiecarui obiect, numite si atribute ce pot lua diverse valori, in conformitate cu functionalitatea acestora.
Metodele sunt proceduri specifice asociate fiecarui obiect in parte, ce se executa in momentul invocarii lor explicite printr-o linie de cod dintr-o alta procedura. Metodele se pot executa si automat la aparitia, la aparitia unui eveniment.
Evenimentele desemneaza actiuni ale utilizatorului (click-uri, deplasarea mouse-lui, apasarea unei taste sau a unei combinatii de taste, scurgerea unui interval de timp, deschiderea unei baze de date etc)
Prin intermediul evenimentelor si al metodelor (se mai numesc proceduri eveniment) se implementeaza comportamentul obiectului. Propritatile metodele si evenimentele unui obiect sunt intotdeauna accesibile codului sursa implementat la nivel superior (la nivel de metode ale formularului); reciproc, proprietatile metodele si evenimetele formularului pot fi accesate din cadrul codului aferent unui obiect anume de pe formular.
Sintaxa generala pentru a accesa o proprietate sau metoda a unui obiect este:
Numecontainer.numeobiect.numeproprietate[=valoare]
Sau variabila=numecontainer.numeobiect.numeproprietate
Sau numecontainer.numeobiect.numemetoda
Containerul de nivelul cel mai inalt este formularul insusi, care in cod se specifica prin expresia thisform. De asemenea, codul asociat unui eveniment, numele controlului pentru care se trateaza evenimentul poate fi inlocuit cu sinonimul this
2. Propritati:
Value - stocheaza valoarea curenta a obiectului pe parcursul executiei formularului. Pentru obiecte de tip lista, aceasta proprietate preia valoarea evenimentului curent selectat. Pentru obiectele legate la o sursa de date, aceasta proprietate are aceeasi valoare ca si valoarea curenta a sursei de date. Valorile permise pentru proprietatea value sunt date in tabelul de mai jos:
Control |
Posibile tipuri de date pentru proprietatea Value |
Check box |
Integer, logical, numeric |
Combo box |
Character integer numeric |
Command group |
Character integer numeric |
Edit box |
Character memo |
Grid |
Character numeric |
List box |
Character numeric integer |
Option button |
Integer logical numeric |
Option group |
Character integer numeric |
Spinner |
Currency integer numeric |
Text box |
Orice tip |
Obs. In cadrul selectiei unui element din grupurile de tip option group sau command group, proprietatea value ia ca valoare numarul de ordine al butonului selectat.
Control Source specifica sursa de date a unui obiect legat si poate fi un camp al unei tabele sau o variabila. Valoarea curenta a sursei este afisata in controlul respectiv, iar o eventuala modificare a valorii obiectului antreneaza modificarea valorii sursei de date.
RowSource se intalneste la controalele combo box si list box - specifica sursa pentru elementele ce vor popula o lista
RowSourceType - dedicata setarii tipului sursei elementelor unui obiect de tip lista. Tipul ales trebuie sa fie obligatoriu compatibil cu sursa specificata in RowSource. Tabelul de mai jos prezinta variante posibile ale acestei proprietati.
Varianta |
Semnificatie |
1 Value |
Pentru valori introduse direct in rowsource separate prin virgula |
2 Alias |
Specificarea campurilor unei tabele. RowSource va contine in acest caz numele tabelei (vor fi luate in considerare toate campurile) |
3 SQL Statement |
Specificarea unei fraze select - sql ca si rowsource. Fraza respectiva trebuie sa aiba ca rezultat un cursor sau o tabela si nu poate avea mai mult de 256 de caractere |
4 QUERY (.qpr) |
Specificarea unei proceduri de interogare ce creeaza un cursor sau o tabela. Procedura de interogare trebuie sa existe pe disc sub forma unui fisier cu extensia .qpr |
5 array |
Sursa de populare a listei va fi constituita din elementele unui tablou specificat in rowsource prin nume fara dimensiuni |
6 fields |
Lista este populata numai cu valorile campurilor specificate, utilizand formatul: nume tabela.camp1, camp2, . |
7 files |
Lista de fisiere din directorul curent, ca posibilitatea navigarii prin directoare si chiar a schimbarii discului curent. Pentru filtrarea fisierelor se foloseste o masca de genul *.jpg, nume.*, w??.tmp |
8 structure |
Numele campurilor tabelei specificate in rowsource |
ColumnCount specifica numarul de coloane ce va fi afisat intr-un obiect de tip lista (in cazul combo box, numai la deschiderea listei) sau grid. Daca acest numar este mai mare decat numarul de campuri al sursei de date, ultimele coloane vor fi vide.
ColumnWidths - stabileste dimensiuni pentru coloanele unui obiect de tip lista. Se exprima in pixeli. Daca nu sunt specificate dimensiuni, in cazul mai multor coloane, fiecare linie a listei va fi dimensionata in functie de lungimea valorilor de pe fiecare linie a sursei de date, rezultand uneori un aspect nedorit al listei . Aceasta proprietate se foloseste in combinatie cu ColumnLines.
BoundColumn - specifica a cata coloana, (de la stanga la dreapta, numerotarea incepe cu coloana 1) este legata de sursa de date (Control Source) sau valoarea carei coloane va fi preluata de proprietatea value. Se foloseste doar in cazul in care un obiect de tip lista are mai multe coloane. Oricum indiferent de numarul coloanei legate, obiectul combo-box sau list box va afisa elementul de pe prima coloana, corespunzator liniei curente.
RecordSource - proprietate pe care o regasim numai la controalele de tip grid si specifica sursa de date. Aceasta sursa este bidirectionala: se afiseaza datele tabelei in controlul Grid si totodata, valorile pot fi modificate direct in grid, deplasarea pe alta linie producand actualizarea lor. Fiecare coloana a controlului Grid ar trebui sa fie, la randul ei, legata prin propria proprietate controlsource la o coloana a tabelei sursa. In caz contrar, grid-ul afiseaza coloanele in ordinea in care ele se gasesc in sursa de date.
RecordSourcetype - tipul sursei de date pentru un control Grid. Poate fi una dintre variantele din tabelul de mai jos:
Varianta |
Semnificatie |
1 Alias |
Sursa va fi o tabela din baza de date sau o tabela derivata view |
2 Prompt |
In executie se va deschide o fereastra de dialog pentru ca utilizatorul sa-si aleaga singur tabela sursa. In acest caz proprietatea RecordSource va ramane vida in faza de proiectare. |
3 Query (.qpr) |
procedura de interogare cu extensia .qpr, ce are ca rezultat o tabela sau o tabela temporara |
4 SQL |
Fraza select ce are ca rezultat o tabela permanenta sau temporara |
Name - specifica numele obiectului, folosit pentru a accesa proprietatile si metodele obiectului respectiv. Obiectele din acelasi container nu pot avea acelasi nume.
Caption - specifica textul ce va fi afisat pe obiectul respectiv
Enabled - poate fi .t. sau .f. si determina starea obiectului din punct de vedere al accesibilitatii de catre utilizator (accesibil sau inaccesibil la momentul executiei), obiectul fiind totusi vizibil
Visible - poate fi .t. sau .f., starea avand ca rezultat vizibilitatea sau invizibilitatea obiectului pentru utilizator
SelectOnEntry - poate fi .t. sau .f. indica daca valoarea curenta afisata de obiect va fi sau nu automat selectata in momentul in care acesta primeste controlul (focus-ul) Proprietatea este utila pentru a nu obliga utilizatorul sa stearga mai intai valoarea veche si apoi sa o introduca pe cea noua, din moment ce poate scrie direct peste cea veche.
Tabindex - poate lua numai valori numerice pozitive, de la 1 la n, si indica ordinea in care va fi transferat controlul de la un obiect la altul, in cadrul formularului, in cazul utilizarii exclusive a tastaturii (tab , ctrl+tab). Initial este ordinea in care au fost trasate controalele, dar se poate modifica prin view - tab order . urmand a face un click pe numerele afisate de fiecare control, in noua ordine dorita.
Tab Stop - daca are volarea .f. obiectul nu va primi niciodata controlul in cazul utilizarii tastataturi.
ButtonCount - specifica numarul de butoane disponibile intr-un obiect de tip OptionGroup sau CommandGroup.
TooltipText - specifica textul ce va aparea ca eticheta pentru obiectul respectiv in momentul plimbarii mouse-ului deasupra sa. Necesita starea unei alte proprietati a formularului si anume Show Tips cu valoarea .T.
WindowType - proprietate specifica doar formularului, ce poate avea doua valori Modeless si Modal. Daca proprietatea are valoarea modal, este interzis accesul la alte formulare sau la meniu atata timp cat formularul se afla in executie.
Proprietati specifice obiectelor de tip lista:
Presupunem ca avem un obiect de tip lista cu numele cbotest, cu doua linii si doua coloane cu elementele a11, a12, a21, a22.
ListCount - returneaza numarul de linii din lista de elemente.(exp x=cbotest.listcount ; x=2)
ListItem(nrlinie) - returneaza elementul din lista de pe linia specificata prin nrlinie. Daca lista are mai multe coloane elementul va fi implicit extras de pe prima coloana (exp x=cbotest.listitem(2); x=a21)
List(nrlinie, nrcoloana) - returneaza elementul din lista specificat prin nrlinie si nrcoloana. (exp x=cbotest.list(1,2); x=a12)
ListIndex - desemneaza indexul liniei curente sau care va deveni curenta si prin urmare elementul curent afisat de control (exp cbotest.listindex=2 va determina selectarea liniei 2 din lista iar cbotest va afisa ca valoare curenta a21)
Despre evenimente si metode
Evenimentele si metodele folosite mai des in proiectarea formularelor ar fi urmatoarele:
Init - eveniment - se declanseaza in momentul in care se creeaza un obiect, la lansarea in executie a unui formular
In metoda atasata evenimentului init se pot introduce parametrii formularului prin utilizarea obligatoriu pe prima linie, a sintaxei:
LPARAMETERS param1, param2, .
In astfel de cazuri formularul va trebui lansat cu comanda do form numeformular with valparam1, valparam2,..
Pentru a impiedica crearea unui obiect, in functie de valorile anumitor parametri la momentul executiei, in evenimentul Init se foloseste instructiunea return .f.
Destroy - eveniment - se executul in momentul in care un obiect este distrus (sters de pe ecran si descarcat din memorie, ca de exemplu la inchiderea formularului)
Load - eveniment - se declaseaza inainte de crearea oricarui obiect, deci inaite de evenimentul init, si il regasim numai la nivel de formular
Unload - eveniment - specific doar formularelor, se declanseaza dupa evenimentul destroy
Release - metoda - specifica doar formularelor, se declanseaza la invocare efectiva printr-o linie de cod (thisform.release) si duce la inchiderea formularului (disparitia sa de pe ecran si stergerea din memorie). Declanseaza evenimentele destroy si apoi unload
Active - eveniment - specific formularelor si controalelor de tip PageFrame (cadre de pagina). Se declanseaza la prelucrarea controlului, cand un formular sau un cadru de pagina devine activ in urma actiunii utilizatorului sau dupa aparitia pe ecran a controlului, dar numai ca urmare a invocarii explicite prin cod
Gotfocus - eveniment - se declanseaza in momentul cand un obiect primeste controlul - prin click sau deplasare cu ajutorul tastaturii.
When- eveniment - se declanseaza inainte de gotfocus si este utilizat in general pentru blocarea sau nu a accesului la un obiect in fuctie de anumite conditii. Daca acest eveniment returneaza .f. (in codul sau se scrie return .f.) obiectul nu va primi controlul.
Valid- eveniment - se declanseaza chiar inainte ca un obiect sa piarda controlul si este utilizat in general pentru a nu permite parasirea controlului daca anumite conditii nu au fost indeplinite (spre exp daca datele dintr-un textbox nu sunt valide ca format sau semnificatie) Daca evenimentul returneaza .f. (return .f.) utilizatorul nu poate pleca de pe obiectul respectiv decat dupa introducerea unor date corecte. Conditiile de validare se verifica in metoda asociata, folosind si proprietatea value, chiar in procedura evenimentului valid.
LostFocus - eveniment - se declanseaza cand un obiect pierde controlul la click(sau de la tastatura) pe alt obiect. Are loc dupa evenimentul valid
Setfocus - metoda - controlul va fi predat obiectului specificat (cmbtest.setfocus) Nu poate fi invocata din evenimentul valid.
Refresh - metoda - se declanseaza la invocare explicita printr-o linie de cod si genereaza reactualizarea valorilor afisate de obiecte (Valori stocate in proprietatea value), in functie de valorile curente ale surselor de date. La executia metodei refresh controalele legate la campuri din tabele vor actualiza valorile afisate, in functie de inregistrarea curenta.
Requery - metoda - specifica obiectelor de tip lista, reevalueaza expresia din proprietatea rowsource si actualizeaza lista de elemente a obiectului. Se declanseaza la invocare explicita prin cod.
Click - se declanseaza la un click de mouse sau la apasarea tastei enter ori space pe obiectul curent.
Utilizarea Data Enviroment pentru deschiderea tabelelor
Aceasta se realizeaza prin click dreapta pe formular si alegerea optiunii data enviroment apoi din meniul contextual se alege mai intai optiunea add care va afisa o fereastra ce contine tabelele bazei de date.
Odata adaugate tabelele necesare in data enviroment, este important de stabilit daca acestea trebuie deschise in mod exclusiv sau in mod partajat (shared). Setarea implicita a proprietatii exclusive este .f. Ea nu trebuie shimbata daca lucram intr-un mediu multiutilizator, deoarece nimeni nu ar mai putea folosi tabelele respective pana cand nu se termina lucru cu acest formular. Daca se lucreaza doar in regim monoutilizator la o firma mica, avand un singur calculator putem folosi starea Exclusive=.t., mai ales daca se doreste ca la iesirea din formular, sa elimine toate inregistrarile marcate pentru stergere in sesiunea de lucru curenta (comanda pack cere mod de lucru exclusive)
Ce facem cu Pack daca suntem constransi sa folosim modul de lucru partajat. O solutie este sa renuntam la comanda pack din formular urmand sa concepem o procedura adecvata care:
incearca sa deschida tabelele in mod exclusiv
executa comanda pack pe tabelele unde deschiderea exclusiva a reusit
Copyright © 2025 - Toate drepturile rezervate