Foxpro
Formatul de afisare si citireFormatul de afisare sau introducere a unei date reprezinta o deschiere simbolica a modului in care o data este afisata pe dispozitivul de iesire sau este citita de la tastatura. Formatul se descrie prin doua clauze: PICTURE, FUNCTION urmate de un sir de coduri. Codurile FUNCTION se refera la toate caracterele din format, iar codurile din PICTURE se refera la un singur caracter, cel de pe pozitia codului. De exemplu: afisarea numarului 1234 depinde de sablonul deschis in clauza PICTURE, astfel: picture 999 . > va determina trunchierea numarului picture 99, 999 . >determina introducerea separatorilor: 1, 234 Sablonul este util la introducerea de valori din exterior controland tipul datei. De exemplu, daca trebuie sa citim numai cifre, atunci sablonul pus in comanda care realizeaza citirea va avea sablonul 99999 pentru ca, in caz de introducere a unui caracter nenumeric, sa se avertizeze sonor eroarea. Coduri de sablon pentru PICTURE
Coduri de functie pentru clauza FUNCTION
Comenzile ? si ??Comanda de afisare pe care am folosit-o pana acum este ?/??. Ea poate avea si clauze de specificare a formatului. In format general comanda ?/?? este: ?/?? <exp> [PICTURE <sablon>][FUNCTION <functie>] [AT <coloana>] [, <exp> [PICTURE <sablon>][FUNCTION <functie>][AT <coloana>]..] [STYLE <tip-caracter>] Se afiseaza valorile unei expresii sau a mai multora, conform clauzelor care le insotesc: PICTURE <sablon> defineste restrictii si formatul de afisare a fiecarui caracter din expresie: FUNCTION <functii> specifica formatul global pentru expresie. Clauza AT <coloana> defineste coloana unde se va afisa expresia. Clauza STYLE <tip-caracter> este o optiune pentru imprimanta definind stilul de imprimare. Ambele comenzi folosesc ca punc de referinta in calculul coordonatelor de afisare, pozitia curenta a cursorului. Comanda ?? incepe afesarea datelor exact de la pozitia cursorului, pe cand comanda ? incepe afisarea datelor de la inceputul primei linii care urmeaza celei pe care se afla cursorul. Daca imprimanta nu suporta stilul specificat, atunci optiunea se ignora. Stilul este dat printr-o litera: B: pentru caractere ingrosate; I: pentru caractere italice; U: pentru subliniere; R: pentru indexare sus; L: pentru indexare jos. Exemple: 32 ? Salutari din ?? Bucuresti Salutari din Bucuresti ? 2 + 3 = , 2 + 3 2 + 3 = 5 Observatie: Afisarea se face in mod implicit pe ecran, dar poate fi dirijata si catre imprimanta daca exista comanda de activare a imprimantei (comutator ON). Comanda de activare/dezactivare a imprimantei este: SET PRINTER ON /OFF Comanda @ SAYEste o alta comanda de afisare cu format: @ <linie,coloana> SAY <exp> [PICTURE <sablon>][FUNCTION <functie>][[OPEN] WINDOW <nume-fereastra>] [COLOR <per-color>] Comanda afiseaza valoarea expresiei <exp> incepand din punctul de coordonate <linie>, <coloana> conform sablonului dat in clauza PICTURE, si/sau a functiei din FUNCTION. Clauza WINDOW permite afisarea intr-o fereastra anterior definita a unui camp memo. Clauza COLOR stabileste atributele culoare sub forma <ink>/<paper>. Exemplu: alfa = Lucrez in FoxPro @ 10 ,10 SAY alfa @ 12 ,10 SAY alfa SIZE 2 , 10 efectul este urmatorul: prima comanda: Lucrez in FoxPro a doua comanda: Lucrez in FoxPro Exemplu: CLEAR mesaj = la multi ani ! @ 10 ,10 SAY mesaj PICTURE ' ! xxxxxxxxxxxxx ' La multi ani ! @ 12 ,10 SAY mesaj FUNCTION ' ! ' LA MULTI ANI ! @ 13 ,10 SAY mesaj PICTURE ' ! xx ! xxxxx ! xxxx ' La Multi Ani ! @ 14 ,10 SAY 2 / 3 PICTURE ' 99 . 9999 ' @ 15 ,10 SAY ' alternative ' FUNCTION ' ! x ! x ! x ! x ! x ' AlTeRnAtIv Urmatoarele formate sunt echivalente : PICTURE ' aaaaaa ' FUNCTION ' ! ' PICTURE ' ' FUNCTION ' a ! ' PICTURE ' @ ! aaaaaa ' PICTURE ' @ a !!!!!! ' Exemplu: CLEAR nume = ' ' prenume = ' ' data_n = data_cas = @ 10 ,10 GET nume @ 10 ,10 GET prenume @ 10 ,10 GET data_n @ 10 ,10 GET data_cas DISABLE NOTE acest camp este doar afisat dar nu poate fi accesat datirita clauzei ; DISABLE READ Exemplu: CLEAR STORE 0 TO a , b @ 10 ,10 GET a PICTURE ' 9999 ' @ 10 ,10 GET b PICTURE ' 9999 ' WHEN a<> 0 NOTE al doilea numar va fi citit doar daca primul este diferit de zero READ Exemplu: CLEAR data_n = @ 10 ,10 GET data_n ; MESSAGE ' Data nasterii in format ll / zz / aa ' READ ? ' Nascut la ' , data_n Exemplu: pentru citirea unei valori numerice , situata intre 0 si 19 , se va folosi urmatoarea secventa: CLEAR a = 0 @ 10 ,10 GET a RANGE 0, 19 READ iar pentru citirea unei date calendaristice, anterioara datei de 1 ianuarie 1970, se va folosi: data = @ 10 ,10 GET data RANGE READ Exemplu: CLEAR a = 0 b = SPACE ( 5 ) c = '1 2 3 4 5 6 7 ' @ 10 ,10 GET a SIZE 1 , 4 && se va citi pe 4 caractere @ 11 ,10 GET b SIZE 1 , 7 && se va citi pe 7 caractere @ 12 ,10 GET c SIZE 1 , 5 NOTE citirea se va face intr-o fereastra de 5 caractere, campul de ; 7 caractere defiland in aceasta fereastra READ CLEAR @ 10 ,10 GET a PICTURE ' 99999 ' SIZE 1 , 7 && se va citi pe 5 caractere @ 11 ,10 GET b PICTURE ' xxxxxx ' SIZE 1 , 4 NOTE pe ecran se va edita in 4 caractere, campul GET de ; 7 caractere defiland in aceasta fereastra READ CLEAR Exemplu: CLEAR a = 0 b = 0 c = 0 @ 10 ,10 SAY ' Introduceti numerele ' @ 11 ,15 GET a PICTURE ' 99999 ' @ 11 ,10 GET b PICTURE ' 99999 ' VALID a < b NOTE se primeste numai o valoare mai mare decat cea anterioara @ 13 ,15 GET c PICTURE ' 99999 ' VALID c < c READ suma = a + b + c @ 14 ,15 SAY suma PICTURE ' 99999 ' Exemplu: se vor citi datele personale ale unui salariat, in vederea unor prelucrari ulterioare SET TALK OFF CLEAR nume = SPACE ( 10 ) prenume = SPACE ( 15 ) data_n = strada = SPACE ( 15 ) nr = 0 localitate = SPACE ( 15 ) @ 5 ,10 SAY ' Introduceti numele ' @ 5 ,40 GET nume PICTURE REPLICATE (' x ' , 10) @ 6 ,10 SAY ' Introduceti prenumele ' @ 6 ,40 GET prenume PICTURE REPLICATE (' x ' , 15) @ 7 ,10 SAY ' data nasterii ' @ 7 ,40 GET data_n FUNCTION ' d ' RANGE @ 8 ,10 SAY ' Introduceti strada ' @ 8 ,40 GET strada PICTURE REPLICATE (' x ' , 15) @ 9 ,10 SAY ' numarul ' @ 9 ,40 GET nr RANGE 1 , 999 PICTURE @ 10 ,10 SAY ' Introduceti localitate ' @ 10 ,40 GET localitate PICTURE REPLICATE (' x ' , 15) FUNCTION READ O comanda SAY si o comanda GET pot fi grupate, formand o singura comanda : CLEAR @ 10 ,10 SAY ' Introduceti un numar ' GET a DEFAULT 0 PICTURE ' 99999 ' READ @ 15 ,10 SAY ' Ati introdus numarul ' ?? a Exemplu: se citesc doua numere strct pozitive, de maxim doua cifre, astfel incat primul numar sa fie mai mic decat al doilea, iar suma lor sa fie egala cu 11. o prima varianta de rezolvare a acestei probleme este reprezentata de urmatorul porgram: SET TALK OFF CLEAR a = 0 b = 0 ? ' Introduceti 2 numere strict pozitive care insumate sa dea 11' @ 10 ,10 SAY ' Introduceti primul numar ' GET a PICTURE ' 99 ' VALID a > b @ 11 ,10 SAY ' Introduceti al doilea numar ' GET b PICTURE ' 99 ' ; VALID a < b and a + b = 11 and b > 0 READ ? a , ' < '' , b , ' si ' , a , ' + ', b , ' = ' , a + b Acest program testeaza datele introduse de utilizator prin clauza VALID la nivelul comenzilor GET. Daca, din greseala, utilizatorul introduce 11 ca valoare a primului numar, la citirea celui de al doilea numar nu mai exeista nici o posibilitate de a corecta eroare anterioara. Daca se incearca introducerea valorii 0 pentru cel de-al doilea numar (singura care corespunde conditiei a + b = 11), clauza VALID a celei de-a doua comenzi GET se opune acestui lucru ( trebuie ca b> 0 si a < b ). Nu se va permite nici macar trecerea la campul GET anterior pentru a corecta eroarea si a introduce o alta valoare pentru primul numar. Programul trebuie incheiat printr-o apasare a tastei Esc , dupa care se poate reexecuta, pentru introducerea altor valori. Problema aceasta isi gaseste o rezolvare mai buna prin folosirea unei clauze VALID la nivelul comanzii READ, avand, spre exemplu, urmatoarea varianta de program: SET TALK OFF CLEAR a = 0 b = 0 ? ' Introduceti 2 numere strict pozitive care insumate sa dea 11' @ 10 ,10 SAY ' Introduceti primul numar ' GET a PICTURE ' 99 ' VALID a > 0 @ 11 ,10 SAY ' Introduceti al doilea numar ' GET b PICTURE ' 99 ' VALID b > 0 READ VALID a < b and a + b = 11 ? a , ' < '' , b , ' si ' , a , ' + ', b , ' = ' , a + b In acest caz, daca pentru primul numar se introduce valoarea 11, iar pentru cel de-al doilea numar valoarea 1, se va reveni in ultimul camp GET. In acest moment se pot modifica ambele valori ale celor doua variabile, testarea conditiilor a +b = 11 si a < b facandu-se numai la iesirea din comanda READ. CLEAR a = 0 b = 0 @ 10 ,10 SAY ' Introduceti primul numar ' GET a @ 11 ,10 SAY ' Introduceti al doilea numar ' GET b READ && citirea incepe cu cel de-al doilea numar ? a + b Exemplu: se vor citi patru numere, pozitive, aflate in progresie aritmetica, dupa care se va afisa suma acestora: SET TALK OFF CLEAR a = 0 b = 0 c = 0 d = 0 @ 10 ,10 SAY ' Introduceti numar 1 ' GET a PICTURE ' 99 ' VALID a >= 0 @ 11 ,10 SAY ' Introduceti numar 2 ' GET b PICTURE ' 99 ' VALID b >= 0 @ 12 ,10 SAY ' Introduceti numar 3 ' GET c PICTURE ' 99 ' VALID c >= 0 @ 13 ,10 SAY ' Introduceti numar 4 ' GET d PICTURE ' 99 ' VALID d >= 0 READ OBJECT 2 TIMEOUT 5 NUMOUSE VALID a + d = b + c COLOR , R+/BG ? ' uma este :' , a + b +c + d Citirea incepe cu cel de-al doilea numar ( OBJECT 2 ), mouse-ul nu poate fi folosit pentru selectarea campurilor ( NOMOUSE ), iar timpul maxim de gandire al utilizatorului este 5 secunde ( TIMEOUT 5 ). Culorile folosite pentru campurile GET sunt : cerneala rosie pe fond albastru deschis. Conditia ca numerele sa fie in progresie aritmetica este data in clauza VALID a comenzii READ ( a + b = c + d ). Observatie: Afisarea expresiilor are loc implicit pe ecran dar poate fi directionata si catre imprimanta, daca aceasta este activata prin comanda SET PRINTER ON sau catre un fisier de tip text. O comanda necesara este SET DEVICE.
Comanda directioneaza efectul comenzilor de afisare catre imprimanta, ecran, sau fisier de tip text. Caracteristicile de culoare ale mediului FoxPro pot fi retinute in fisierul FOXUSER.DBF sub numele unui set de culori. Un set de culori este o combinatie de 24 scheme de culori, fiecare schema descriind un anumit obiect al mediului Fox: ferestre utilizator, fereastra BROWSE, meniuri si submeniuri, zona de mesaje, etc. O schema de culori va avea un numar de perechi de culori (maxim 10) pentru a defini elementele obiectului respectiv. De exemplu, schema de culori pentru fereastra BROWSE va trebui sa contina perechile de culori pentru definirea cadrului, a interiorului, a numelui de camp, a informatiilor selectate, a mesajelor. Intr-o schema, perechile de culori de forma <ink>/<paper> sunt separate prin virgula si au o pozitie semnificativa. Setul de culori curent poate fi modificat indicandu-se schema ce se modifica prin comanda:
unde <list-per-cul> specifica lista de perechi de culori care vor forma schema cu numar <nr1>. Comanda de salvare pe disc in fisierul FOXUSER a schemei curente sub numele <nume-set>.
Incarcarea unui set de culori din fisierul FOXUSER.DBF, salvat anterior, pentru a desemna setul curent se face prin comanda:
Crearea unui set de culori precum si salvarea pe disc se poate realiza si interactiv, prin meniul WINDOW/COLOR.
|