Sunteți pe pagina 1din 8

Curs 05 – Baze de date

Meniuri în VFP
Din perspectiva contactului cu utilizatorul, punctul de plecare sau poarta către funcţionalitatea practică a unei aplicaţii, prin
obiecte cum sunt formularele sau rapoartele, presupune existenţa unui element de interfaţă care să concentreze şi să structureze căile
de acces în „universul” sistemului. În etapa de dezvoltare, instrumentul Project Manager asigură navigarea şi accesul la
structurile interne ce formează aplicaţia. În etapa de exploatare, cel mai des folosite instrumente de acces şi navigare către sau prin
structura funcţională a aplicaţiei sunt meniurile însoţite eventual de bare de instrumente personalizate. Meniul integrează de fapt
toate celelalte elemente de interfaţă şi defineşte pentru utilizator trăsăturile sau caracteristicile generale ale aplicaţiei.

1. Crearea meniurilor folosind generatorul de meniuri al Visual FoxPro


Pentru construirea unui meniu nu ne vom „adânci” în sintaxe de comenzi specifice, ci vom merge pe o cale mult mai simplă,
propusă de mediul VFP prin instrumentul Menu Designer (asistentul de proiectare a meniurilor). Este adevărat, la „începuturile"
FoxPro-ului, singura modalitate de a defini opţiunile unui meniu, modul de structurare a acestora şi acţiunile ce urmau să aibă loc la
selectarea uneia dintre ele era scrierea unui program în care se invocau comenzi de genul DEFINE PAD, DEFINE POPUP,
DEFINE BAR, ON SELECTION BAR şi altele de acest gen. Mai târziu a fost integrat în FoxPro un strămoş al generatorului de
meniuri de astăzi şi anume Menu Builder, a cărui sarcină era crearea programului-sursă pentru definirea meniului şi compilarea
lui. în Visual FoxPro, instrumentul Menu Designer are aceeaşi sarcină ca şi predecesorul lui, rezultatul final concretizându-se în
principal într-un fişier cu extensia .MPR (programul--sursă) şi un fişier .MNX (forma compilată).
Procesul de creare a unui meniu pentru întreaga aplicaţiei sau doar pentru o componentă a ei poate fi structurat în cinci etape:
1. Planificarea şi proiectarea meniului, adică luarea deciziei asupra structurii generale - sau, altfel spus, „care sunt
submeniurile şi opţiunile acestora ?".
2. Crearea efectivă a meniurilor şi submeniurilor, adică declararea, folosind Menu Designer, a titlurilor opţiunilor din
bara principală, a opţiunilor corespunzătoare submeniurilor ş.a.m.d.
3. Specificarea acţiunilor ce vor fi declanşate prin selectarea opţiunilor meniului, care ar putea însemna afişarea formularelor,
rapoartelor sau lansarea în execuţie a unor proceduri ce realizează sarcini specifice. În plus, se poate include o secvenţă de
cod pentru iniţializarea mediului înainte de activarea propriu-zisă a meniului sau a unei secvenţe de cod pentru restabilirea
- „curăţarea" - mediului după părăsirea meniului (dezactivarea/ştergerea lui din memorie).
4. Generarea programului (a secvenţei de comenzi DEFINE PAD, DEFINE POPOUP, DEFINE BAR, ON
SELECTION BAR corespunzătoare componentei meniului din cadrul proiectului aplicaţiei).
5. Rularea şi testarea programului generat anterior.

1.1. Planificarea meniului aplicaţiei


Prin urmare, înainte de a începe propriu-zis construirea meniului aplicaţiei, este recomandabil, la fel ca în cazul formularelor sau
rapoartelor, schiţarea submeniurilor principale şi opţiunilor acestora, din cel puţin două motive: (1) structurarea opţiunilor din meniu
în aşa fel încât să reflecte o anumită logică funcţională, uşor de înţeles din partea utilizatorilor care vor exploata efectiv aplicaţia; şi
(2) luarea în considerare a tuturor funcţiilor aplicaţiei, pentru a se evita omiterea accidentală a unei componente, compilate şi deci
parte integrată în sistem, dar imposibil de accesat.
Fără a avea pretenţia că ar fi cea mai bună structură funcţională (o mare importanţă aici o are partea de analiză şi proiectare care
ar trebui să evidenţieze principalele funcţii sau „cazuri de utilizare" ale sistemului), propunem următorul format pentru meniul
principal al aplicaţiei : □ meniul-bară va fi compus din următoarele submeniuri:
• Nomenclatoare - care va permite accesul către formularele ce actualizează datele din tabelele de referinţă cum sunt
Persoane, Clienti sau Produse;
• Operaţiuni - care va permite accesul la formularele responsabile de principalele tranzacţii economice deservite prin
aplicaţie, adică facturări şi încasări;
• Liste/Informaţii - care va cuprinde o serie de opţiuni prin care utilizatorul va avea acces la informaţiile necesare din sistem.
Prin urmare, vor fi invocate în primul rând rapoartele predefinite (parametrizate sau nu) sau alte obiecte grafice cum ar fi, de
exemplu, diagramele tip chart;
• Administrare/Configurare - care va fi alcătuit dintr-o serie de opţiuni ce vor avea legătură cu întreţinerea bazei de date
(crearea copiilor de siguranţă/arhivarea şi refacerea/restaurarea bazei de date şi indecşilor - problemă acută în VFP) şi
configurarea mediului software/hardware în care rezidă aplicaţia (reţea, imprimantă etc);
• Asistenţă - care va constitui o punte către sistemul de help al aplicaţiei;

1
Curs 05 – Baze de date

• Ieşire - care va desemna căile prin care se poate părăsi aplicaţia.

Schema de bază a meniului principal ar putea arăta ca în figura 1.

Nomenclatoare Operaţiuni Liste/Inform. Admin./Config. Asistentă Ieşire


Persoane Facturari Lista clienti Admin. BD Conţinut şi index |
Produse Incasari Lista facturi Config. Retea
Clienti Raport vânzări Config.
Alte informatii
Figura 1. Schema iniţială a meniului principal

1.2. Crearea/definirea meniului principal şi submeniurilor corespunzătoare


Lansarea generatorului de meniuri al VFP se poate face în două moduri. Pe de o parte, din Project Manager se poate selecta
din tab-ul Other nodul Menus (în cazul în care se doreşte modificarea unui meniu deja creat, se expandează acest nod şi se
selectează numele acestuia) şi apoi se „apasă" butonul New (sau Modify, pentru un meniu existent). Pe de altă parte, se poate
executa comanda CREATE MENU din fereastra de comenzi a VFP.
Atenţie! Din fereastra ce se lansează după apelarea butonului New se va merge pe varianta Menu.
Lucrul cu instrumentul Menu Designer este relativ simplu, principala dificultate (oarecum) fiind dispunerea viitoarelor
opţiuni din bara principală într-o coloană verticală şi nu orizontală (vezi figura 2).

Figura 2. Lansarea instrumentului Menu Designer

2
Curs 05 – Baze de date

Definirea efectivă a meniului începe mai întâi cu bara principală (Nomenclatoare, Opţiuni, Liste...), care va înlocui în
momentul execuţiei meniul sistem (File, Edit, View…). Astfel, în coloana Prompt a Menu Designer-ului se vor
consemna titlurile care vor desemna opţiunile ce vor forma meniul principal, iar în coloana Result se va specifica ce acţiune va
avea loc ca urmare a selecţiei fiecărei opţiuni. Lista derulantă din fiecare linie a coloanei Result poate lua una dintre următoarele
valori:
• Submenu - permite crearea unui submeniu care va fi activat în urma selecţiei respectivei opţiuni (în coloana din dreapta va
apărea un buton Create, prin „apăsarea" căruia se va deschide calea către specificarea unui submeniu);
• Command - permite specificarea în coloana din dreapta a unei comenzi VFP obişnuite, care va fi executată în urma
selectării opţiunii curente;
• Procedure - permite specificarea codului-sursă pentru un program VFP care va fi lansat în execuţie ca urmare a selectării
respectivei opţiuni (în coloana din dreapta va apărea un buton Create, acţionarea acestuia determinând lansarea unei
ferestre de editare cod-sursă);
• Pad Name - numele intern al unei opţiuni.
Revenind în contextul exemplului nostru, în coloana Prompt se vor specifica titlurile: Nomenclatoare, Operaţiuni,
Liste/Informatii, Admin/Configurare, Asistenta, Iesire. Pentru toate aceste titluri se va specifica drept
rezultat Submenu, cu excepţia opţiunii Iesire, pentru care se va specifica Command, iar pe coloana a treia se va scrie deocamdată
instrucţiunea SET SYSMENU TO DEFAULT, din raţiuni de simplificare a procesului de testare-depanare. Această instrucţiune
determină revenirea la meniul principal al sistemului Visual FoxPro. Ulterior, în faza finală, se poate înlocui această comandă cu
instrucţiunea QUIT, care determină părăsirea efectivă şi imediată a mediului VFP.
Trecerea pe nivelul următor în definirea unei opţiuni din meniul-bară se face apăsând butonul CREATE sau EDIT (pentru
revenirea într-un submeniu creat anterior). În lista combinată situată în colţul dreapta-sus a Menu Designer-ului şi etichetată Menu
Level va apărea numele submeniului ale cărui opţiuni sunt create/editate la un moment dat. Această listă permite revenirea pe
nivelul (nivelurile) anterioare. Prin urmare, navigarea printre submeniurile aplicaţiei se poate realiza în Menu Designer prin
butoanele CREATE/EDIT (în adâncime) şi prin lista Menu Level (înapoi) - vezi figura 3.

Figura 3. Calea de navigare de pe un nivel superior pe un nivel inferior (meniu - submeniu) şi invers

3
Curs 05 – Baze de date

Ţinând cont de aceste precizări, se pot implementa cu uşurinţă în Menu Designer specificaţiile din tabelul 1.

Tabelul 1. Specificaţii pentru meniul aplicaţiei


Titlu opţiune sau submeniu Rezultat

Meniul-bară Submenu
Nomenclatoare Submenu
Persoane Command do form frmPersoane
Produse Command do form frmProduse
Clienti Command do form frmClienti
Operatiuni Submenu
Facturari Command do form FrmLiniiFact
Incasari Command WAIT WINDOW "Under construction"
Liste/Informatii Submenu
Lista clientilor Command report form rep_clienti preview
Lista facturilor Command report form rep_facturi_clienti preview
Lista vinzarilor pe clienti Command report form rap_dinamic preview
Informatii din facturi Command do form frmtree_list
Administrare/Configurare Submenu
Administrare BD Submenu
Refacere indecsi Command do refacere_indecsi
Verificare indecsi Command do restrictii_referentiale_macro
Copie de siguranta BD Command WAIT WINDOW "Under construction"
Restaurare BD Command WAIT WINDOW "Under construction"
Configurare retea Command WAIT WINDOW "Under construction"
Configurare imprimanta Submenu
Imprimanta Bar # _mfi_sysprint
Pagina Bar # H_mfi_pgset
Asistenta Submenu
Conţinut şi index Command HELP
Despre Command WAIT WINDOW "Under construction"
Iesire Command SET SYSMENU TO DEFAULT

Se poate trage cu uşurinţă concluzia că specificaţiile de mai sus sunt caracteristice unei etape intermediare în dezvoltarea
aplicaţiei; opţiunile cu rezultatul WAIT WINDOW “Under Construction” semnifică faptul că „încă se mai lucrează" şi pot fi
incluse eventual într-un prototip de evaluare-testare din partea utilizatorilor, nicidecum în faza finală de livrare.

1.3. Căi suplimentare de acces de la tastatură la opţiunile din meniu şi separarea opţiunilor în cadrul
submeniurilor

În faza de proiectare-planificare, pentru o împărţire judicioasă a opţiunilor, se poate cere împărţirea acestora în grupuri chiar în
interiorul submeniului din care fac parte, fără a se recurge la noi subniveluri (nu se recomandă crearea a mai mult de trei-patru
niveluri
consecutive). De asemenea, pentru apelarea rapidă a opţiunilor celor mai des folosite se recomandă să li se asocieze
combinaţii de taste cu rol de chei de acces.
Accesul opţiunilor din meniu se poate face în două moduri: (a) la nivelul submeniului şi (b) shortcut-uri de la tastatură, fără
să fie necesară navigarea până la nivelul submeniului din care face parte opţiunea vizată.
Asocierea unei chei de acces a unui submeniu sau opţiuni se realizează introducând simbolurile „\<” înaintea literei care va
juca acest rol. Spre exemplificare, vezi figura 4.

4
Curs 05 – Baze de date

Figura 4. Transpunerea unei chei de acces în bara de meniu la „runtime”

Definirea unei combinaţii de taste care să acceseze direct o opţiune din meniu, fără să fie necesară o navigare explicită, se
realizează astfel (vezi figura 5):
1. Se selectează numele opţiunii respective (coloana Prompt).
2. Se acţionează butonul din coloana Options pentru activarea dialogului Prompt Options.
3. Se selectează căsuţa Key Label şi se apasă combinaţia de taste dorită pentru activarea respectivei opţiuni.
4. în căsuţa Key Text se specifică textul care va însoţi în meniu numele opţiunii respective.

5
Curs 05 – Baze de date

Figura 5. Crearea unui shortcutde la tastatură şi transpunerea „runtime"


Împărţirea în grupuri distincte a opţiunilor care formează un submeniu este posibilă introducând în fereastra
de editare a Menu Designer-ului a unei opţiuni suplimentare pentru care este precizat ca titlu (în coloana
Prompt) şirul „\-", după cum se exemplifică în figura 6.

6
Curs 05 – Baze de date

Figura 6. Separarea opţiunilor unui submeniu

1.4. Includerea în meniul aplicaţiei a unor submeniuri system

În anumite situaţii, pentru definirea unor sarcini specifice ale aplicaţiei este necesară „împrumutarea" unor funcţionalităţi
proprii sistemului Visual FoxPro. în exemplul nostru, pentru definirea parametrilor de configurare ai imprimantei sau pentru
definirea unor parametri referitori la aşezarea în pagină este utilă invocarea în meniul aplicaţiei a opţiunilor corespunzătoare din
meniul system al mediului Visual FoxPro. în acest sens, dacă revenim în tabelul 1, vom observa că opţiunile
Administrare\Configurare—>Conf igurare Imprimantă —>Imprimanta şi Administrare\Configurare—>Configurare
Imprimantă —> Pagina au ca rezultat Bar# cu __mfi_sysprint, respectiv __mfi_pgset.

7
Curs 05 – Baze de date

Figura 7. Invocarea unor meniuri system ca opţiuni ale meniului aplicaţiei

Cele două variabile nu reprezintă altceva decât numele intern al opţiunilor File—>Print şi File—>Page
Setup ale meniului standard VFP (msysmenu).
În MSDN Library - Menu menu, Visual FoxPro system (internal) pot fi găsite numele interne ale tuturor opţiunilor şi
submeniurilor care formează meniul system VFP. De asemenea, aceste nume interne pot fi afişate şi folosind funcţia SYS(2013).

1.5. Dezactivarea opţiunilor dintr-un meniu


La execuţie, există situaţii în care este necesară dezactivarea unor opţiuni sau submeniuri, sau activarea acestora numai în
funcţie de anumite condiţii. în general, acest lucru este util atunci când se construieşte o politică de securitate pentru aplicaţie,
astfel încât activarea opţiunilor care formează meniul să fie făcută în funcţie de numele utilizatorilor care lucrează la un
moment dat sau în funcţie de privilegiile/drepturile asociate acestora.
În exemplul nostru, ar fi necesară o astfel de funcţionalitate pentru a se evita afişarea mesajelor Under construction
pe care le-am asociat iniţial opţiunilor aflate încă „în lucru”.
Această funcţionalitate poate fi realizată întorcându-ne în fereastra Prompt Option apelând-o pentru opţiunile vizate să aibă
un asemenea comportament. în această fereastră se poate remarca existenţa rubricii Skip For. Dacă expresia specificată în
această rubrică este evaluată ca fiind .T., respectiva opţiune va fi dezactivată; dacă însă este evaluată ca fiind .F., opţiunea va fi
activată (vezi figura 8).

Figura 8. Dezactivarea unor opţiuni sau submeniuri