Elemente de Visual Basic

download Elemente de Visual Basic

of 37

Transcript of Elemente de Visual Basic

  • 8/3/2019 Elemente de Visual Basic

    1/37

    Elemente de Visual Basic

    B. Demsoreanu

    Cuprins

    1 Concepte generale 21.1 Constante, variabile, expresii . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Declaratii si conversii de tip. Tablouri . . . . . . . . . . . . . . . . . . . . . . . 61.3 Functii standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2 Structuri de control 10

    2.1 Structuri de decizie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2 Structuri repetitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3 Proceduri generale 133.1 Subprograme de tip subrutina si functie . . . . . . . . . . . . . . . . . . . . . . 133.2 Subprograme de tip GoSub ... Return . . . . . . . . . . . . . . . . . . . . . . 153.3 Rutine de tratare a erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4 Sistemul de I/O. Fisiere 164.1 Casete de dialog predefinite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2 Metoda Print si functia Format . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.3 Fisiere n Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    5 Metode si proprietati grafice n Visual Basic 255.1 Metode grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.2 Specificarea culorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.3 Proprietati grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5.3.1 Procedee de trasare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.3.2 Procedee de umplere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    5.4 Sistemul de coordonate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    A Anexa: o procedura utila pentru reprezentari grafice 31

    1

  • 8/3/2019 Elemente de Visual Basic

    2/37

    Elemente de Visual Basic

    1 Concepte generale

    Avandu-si originea ntr-un limbaj numeric de programare destinat initial ncepatorilor, sistemulVisual Basic a devenit n ultimii ani un limbaj foarte evoluat, destinat n mare masura programariiorientate spre obiecte si dirijate de evenimente (OOED). Beneficiind de o Interfat a Grafica Utili-zator(GUI) performanta, bazata pe sistemul de operare Windows, pot fi dezvoltate relativ usor oserie de aplicatii, pornind de la calcule simple si reprezentari grafice, pana la construct ii de bazede date, sau aplicatii cu interfata multi-document (MDI).

    Desi primele elemente ale limbajului Basic (Beginners All-purpose Symbolic Instruction Code)dateaza nca din 1965, doar ncepand cu anii 80, odata cu dezvoltatea calculatoarelor pe 8 si

    16 biti se poate vorbi de o evolutie semnificativa. Imbunatatirile aduse n prezent limbajului suntconsiderabile, ceea ce l transforma ntr-un instrument modern, deosebit de eficace, pentru dez-voltarea unor aplicatii complexe. Sunt utilizate o serie de concepte de programare structurata,cunoscute si din alte limbaje, dintre care amintim doar structurile de decizie si de ciclare, posi-bilitatea de a lucra cu subprograme si functii externe ca module independente de program, noitipuri de date, variabile globale si locale, etc. Mediul de programare include un editor performantcare semnaleaza orice eroare de sintaxa, posibilitati de depanare interactiva deosebit de eficace,un sistem integrat de help-uri care se poate substitui n buna masura unui manual exhaustiv.

    In cele ce urmeaza vor fi prezentate succint doar elementele strict necesare dezvoltarii uneiaplicatii numerice, urmand ca proprietatile si metodele specifice obiectelor n Visual Basic sa fie

    nsusite de utilizator din literatura de specialitate1,2

    .

    1.1 Constante, variabile, expresii

    Constantele sunt valori care se utilizeaza ntr-un program si care nu se modifica n timpulexecutiei. In Visual Basic pot fi utilizate urmatoarele tipuri de constante :

    Byte : reprezentate pe un octet, cu valori n domeniul 0 255 , adica 0 28 1 ;

    Boolean : reprezentate pe doi octeti cu valorile True si False ;

    1 * * * - Visual Basic 4 Unleashed, Sams Publishing, Indianapolis, 1995.2M. S. Heyman - Essential Visual Basic 4, Sams Publishing, Indianapolis, 1996.

    2

  • 8/3/2019 Elemente de Visual Basic

    3/37

    Integer (ntreg) : reprezentate pe doi octeti, cu valori n domeniul 3276832767 , adica215 215 1 ;

    Long (ntreg lung) : reprezentate pe patru octeti, cu valori n domeniul 2147483648 2147483647 , adica 231 231 1 ;

    Single (real simpla precizie) : reprezentate pe patru octeti, cu valori negative n domeniul3.402823 1038 1.401298 1045 si valori pozitive n domeniul 1.401298 1045 3.402823 1038 ;

    Double (real dubla precizie) : reprezentate pe opt octeti, cu valori negative n domeniul1.79769313486232 10308 4.94065645841247 10324 si valori pozitive n domeniul4.94065645841247 10324 1.79769313486232 10308 ;

    Currency (moneda, valuta) : reprezentate pe opt octeti, cu valori cuprinse n domeniul922337203685477.5808922337203685477.5807 , adica intervalul [2632631] scalatla 10000;

    Date (data) : reprezentate pe opt octeti, cu valori n domeniul #January 1, 100# si#December 31, 9999# ;

    String (sir de caractere) : o succesiune de maximum 32767 caractere ASCII scrise ntreghilimele (") , fiecare caracter ocupand un octet de memorie. Limbajul Basic recunoastesi constanta sir vid de caractere (""). Sistemele pe 32 biti permit siruri avand o lungimemaxima de 2147483647 caractere.

    Pentru a evita unele ambiguitati n descrierea si efectuarea unor operatii cu numere avandreprezentare interna distincta (aritmetica ntreaga este complet diferita de aritmetica n virgulaflotanta), este recomandabila atasarea unor sufixe care sa indice explicit tipul: % - pentru ntreg,& - pentru ntreg lung, ! - pentru real simpla precizie, # - pentru real dubla precizie, @ - pentrumoneda. In cazurile n care nu exista dubii, sufixul va fi eliminat automat de compilator.

    O variabila reprezinta o marime care poate lua diferite valori dintr-o multime data. Variabilaare un tip, un nume si o valoare.

    In afara variabilelor de tip numeric (Byte , Integer , Long , Single , Double , Currency),logic (Boolean), sau data (Date), sistemul recunoaste tipul sir de caractere cu lungime variabila(String) sau fixa (String*n), tipul obiect (Object), tipul nedefinit (Variant), tipul definit deutilizator (Type ... End Type).

    Numele variabilei consta dintr-un sir de maximum 255 de caractere alfanumerice, inclusivcaracterul ( ), primul caracter fiind obligatoriu o litera. Numele unei variabile numerice poate fiurmat de unul din caracterele %, &, !, #, @ care indica tipul variabilei. Numelui unei variabile sirde caractere i se poate atasa sufixul $ . In afara declaratiilor implicite de tip realizate cu ajutorulsufixelor, exista posibilitatea declararii explicite a tipului cu ajutorul instructiunilor Dim , Static ,Public , Private . Valoarea variabilei depinde de tipul ei. Numele unei variabile nu poate fi uncuvant rezervat (instructiune, comanda, cuvant cheie).

    Tipul de date nedefinit este cel prestabilit n Visual Basic, el reprezentand tipul oricarei variabilecare nu a fost declarat explicit sau implicit. O variabila de tip variant poate contine date de

    tip numeric, siruri de caractere, date calendaristice, precum si valorile speciale Empty si Null.

    3

  • 8/3/2019 Elemente de Visual Basic

    4/37

    Ultimele doua entitat i sunt distincte, valoarea Empty indicand ca variabila nu a fost initializata(ea este zero pentru o data numerica, sau are o lungime nula pentru un sir de caractere), iarvaloarea Null corespunde situatiei n care variabila nu contine nici o data valida. Folosirea tipuluivariant asigura o flexibilitate mai mare n manipularea datelor, tipul concret de data continutrezultand din analiza contextului, ceea ce are drept consecinta o oarecare scadere a vitezei decalcul.

    O expresie reprezinta o succesiune de variabile, functii si constante legate ntre ele prinoperatori si paranteze (daca este cazul). Functia reprezinta un subprogram care primeste unasau mai multe valori, efectueaza anumite calcule, rezultatul fiind returnat prin numele functiei.Operatorii specifica operatiile care se efectueaza asupra valorilor operanzilor. In particular, oexpresie se poate reduce la un singur operand.

    a) Expresiile aritmetice consta din operanzi si operatori aritmetici. In Tab. 1 figureaza ope-

    ratorii aritmetici binari n ordinea descrescanda a precedentei acestora. Precedenta operatorilorstabileste prioritatea operatiilor ntr-o succesiune care nu contine paranteze. La precedenta egala,

    Operator Semnificatie

    ^ ridicare la putere (exponentiere)*, / nmultire si mpartire reala

    \ mpartire ntreagaMod restul mpartirii ntregi (modulo)+,- adunare si scadere

    & concatenarea sirurilor de caractere

    Tabelul 1: Operatori aritmetici binari

    operatiile se efectueaza de la stanga la dreapta. Sistemul recunoaste si operatorul minus unar,a carui precedenta este imediat dupa cea a operatorului de ridicare la putere. Este interzisascrierea consecutiva a doi operatori , unica exceptie reprezentand-o operatorul minus unarcare poate fi plasat imediat dupa un operator binar.

    Daca doi operanzi sunt de acelasi tip, si rezultatul va fi de acelasi tip. Daca nsa operanziisunt de tipuri diferite, operandul cu rang mai scazut va fi convertit la tipul operandului cu rangmai nalt, rezultatul avand rangul celui din urma. Operatorul (+) serveste si la concatenarea con-

    stantelor, variabilelor si variant ilor care contin siruri de caractere, nsa operatorul de concatenarerecomandat a fi folosit este (&), deoarece acesta realizeaza concatenarea chiar daca un variantcontine o entitate de tip numeric. In Tab. 1 este trecut si operatorul de concateneare pentrusiruri (&) desi acesta nu este un operator aritmetic, deoarece precedenta sa este inferioara oricaruioperator aritmetic, dar superioara operatorilor de relatie.

    b) Expresiile de relatie consta din expresii aritmetice sau de tip sir de caractere separate prinoperatori de relatie. Operatorii relationali (v. Tab. 2) sunt binari si au toti aceeasi precedenta,dar aceasta este inferioara operatorilor aritmetici si superioara operatorilor logici. Rezultatul uneiexpresii de relatie este o entitate de tip logic (True sau False), dar poate lua si valoarea Null.Daca operanzii nu sunt de acelasi tip, naintea evaluarii expresiei se face convertirea operanzilor

    cu rang mai scazut la operandul cu rang mai ridicat. In cazul operanzilor de tip sir de caractere,

    4

  • 8/3/2019 Elemente de Visual Basic

    5/37

    Operator Semnificatie= egal cu ...

    diferit de . . .< mai mic ca . . .> mai mare ca ...

    = mai mare sau egal cu . . .

    Like sirul este asemenea cu . . .

    Is . . . este . . .

    Tabelul 2: Operatori relationali

    compararea valorilor se face pe baza relatiei de ordine a codurilor ASCII. Operatorul Like servestela compararea unui sir de caractere cu un sablon predefinit. Adresele obiectelor definite n VisualBasic pot fi comparate cu operatorul Is , rezultatul indicand daca operanzii fac sau nu referire laacelasi obiect.

    c) Expresiile logice contin operatori logici si operanzi care trebuie sa fie entitat i de tip logic.Prin exceptie un operand poate fi si o constanta, variabila sau expresie numerica, caz n caredaca are valoarea 0, i se atribuie valoarea logica False, iar pentru orice valoare numerica diferita

    Operator Semnificatie

    Not negatie logicaAnd si logicOr sau logicXor sau excusiv logicEqv echivalenta logicaImp implicatie logica

    Tabelul 3: Operatori logici

    de zero se considera ca are valoarea logica True. Operatorii logici n ordinea precedentei sunt

    prezentati n Tab. 3 . Unicul operator unar este operatorul Not. Daca ambii operanzi sunt de tipnumeric, ei sunt convertiti n ntregi si apoi este efectuata operatia pe biti indicata de operator.

    Utilizarea parantezelor modifica ordinea implicita n care se efectueaza operatiile, ordineasociata cu precedenta operatorului utilizat. Calculul ncepe ntotdeauna cu evaluarea parantezeiavand adancimea cea mai mare.

    Comentariile pot fi evidentiate n fisierul sursa folosind instructiunea Rem sau caracterulapostrof (), care preced textul respectiv. In cazul folosirii instructiunii Rem, aceasta trebuie safie obligator urmata de un spatiu, iar daca nu este prima instructiune de pe o linie, ea trebuieplasata dupa caracterul (:). Spre deosebire de liniile de cod care contin instructiuni executabilesau declaratii, care pot fi continuate pe linia urmatoare prin utilizarea perechii de caractere (_ ),

    liniile care contin comentarii nu beneficiaza de aceasta facilitate.

    5

  • 8/3/2019 Elemente de Visual Basic

    6/37

    In Visual Basic exista posibilitatea de a folosi constante simbolice, prin atribuirea de valoriunor nume. Valorile atribuite constantelor nu pot fi modificate n cursul executiei. Instructiunearespectiva este :

    [{ Public | Private }] Const nume [As tip] = expr [, ...]unde expr poate contine orice alte constante definite anterior, precum si operatii aritmetice cuexceptia celei de ridicare la putere. Cuvintele cheie Public sau Private nu pot fi utilizate decat lanivel de modul si indica domeniul de vizibilitate al constantei, anume n toate modulele proiectului,respectiv doar n modulul de definitie (cazul implicit). Constantele declarate n proceduri au doaro extindere locala. Daca este cazul, prin tip poate fi specificat tipul de data referit de constanta.

    1.2 Declaratii si conversii de tip. Tablouri

    In afara specificatiilor cu ajutorul sufixelor %, &, !, #, @, $, exista posibilitatea de declarare

    implicita a tipului de date utilizand la nivel de modul instructiuni de forma :DefTip lit [, lit] ...

    unde lit este fie o litera, fie un interval de litere n ordine alfabetica, iar n loc de Tip pot figurasimbolurile Bool, Byte, Int, Lng, Sng, Dbl, Cur, Date, Str, Obj, Var, corespondentele de tipfiind evidente. Exemple :

    DefInt I, K: DefLng J: DefLng L-N: DefDbl A-H, O-Z

    O specificatie explicita la nivel de procedura sau de modul, poate modifica oricand specificatiileimplicite.

    Tipul unei variabile poate fi declarat explicit cu ajutorul uneia din instructiunile :Dim numevar [([domvarind])] [As [New] tip] [, ...]

    Static numevar [([domvarind])] [As [New] tip] [, ...]Public numevar [([domvarind])] [As [New] tip] [, ...]

    Private numevar [([domvarind])] [As [New] tip] [, ...]

    unde numevar reprezinta numele variabilei, iar tip poate fi Byte, Boolean, Integer, Long,Single, Double, Currency, Date, STRING[*n ], Object, Variant, sau un tip definit anteriorde utilizator. Nu este necesara declararea tipului daca declaratiile implicite cu sufixe sau cuinstructiunea DefTipdescriu corect tipul variabilei. In absenta oricarei specificatii de tip, numevarva fi de tipul variant. Instructiunile amintite servesc totodata si la alocarea memoriei necesarepentru stocarea datelor. Cuvantul cheie New este folosit doar n cazul n care o variabila estedeclarata ca fiind de tip obiect.

    Domeniul de actiune al variabilelor specificate la nivel de modul cu instruct iunea Dim se extindela toate procedurile continute de modulul respectiv, n schimb variabilele declarate ntr-o procedurasunt locale procedurii respective. Instructiunea Static este folosita numai la nivel de procedurasi are rolul de a specifica explicit faptul ca valorarea variabilei este pastrata n memorie ntre douaapeluri succesive ale procedurii. Daca se doreste memorarea tuturor variabilelor ntre apeluri, nsasiprocedura va trebui declarata cu cuvantul cheie Static . Este recomandabil ca instructiunile Dimsi Static sa figureze n zona de cod de la nceputul unei proceduri. Instructiunile Public(Global n versiunile mai vechi) si Private sunt utilizate la nivel de modul pentru a declaravariabile recunoscute n toate modulele unui proiect, respectiv doar n modulul n care este facutaspecificarea.

    Simultan cu declararea explicita a tipului, are loc si initializarea variabilelor. Variabilele de

    6

  • 8/3/2019 Elemente de Visual Basic

    7/37

    tip numeric sunt initializate cu zero, sirurile de caractere de lungime variabila sunt initializate cusirul vid, sirurile de lungime fixa sunt completate cu caracterul "0", iar variantii sunt initializaticu valoarea Empty .

    Un tablou reprezinta o structura de date n care un numar de variabile de acelasi tip suntorganizate sub acelasi nume. Accesarea unui element al tabloului se face specificand numeleacestuia, precum si pozitia elementului n tablou. Rezervarea memoriei necesare se face utilizanduna din instructiunile mentionate anterior, iar precizarea dimensiunilor si a domeniilor de variatiepentru indici se face cu domvarind care are sintaxa :

    [indmin To] indmax [, ...]

    Daca specificatia indmin To lipseste, atunci indicele primului element este zero. Pentru calcululcu matrice (dar nu numai) se recomanda ca valoarea minima a indicilor sa fie unitatea. Pentrua realiza acest lucru, se va utiliza fie sintaxa completa, fie naintea instructiunii Dim sau a uneiasimilare va fi plasata instructiunea Option Base 1 . Limbajul Visual Basic admite tablouri cu

    maximum 60 de dimensiuni. Elementele unui tablou sunt init ializate automat de sistem folosindregulile mentionate anterior.

    Tablourile pot fi de doua tipuri: a) tablouri cu dimensiuni fixe, pentru care spatiul alo-cat n memorie este fix ; b) tablouri dinamice, pentru care spatiul necesar de memorie estealocat n timpul executiei. Daca specificarea domeniului de variatie pentru indici se face cu con-stante ntregi, atunci tabloul are dimensiuni fixe, iar daca n instructiunile Dim , Public , Privateaceasta specificatie lipseste, instructiunea de declarare a tipului continand doar perechea de pa-ranteze ( ), atunci tabloul este dinamic. Instruct iunea :

    ReDim [Preserve] numevar [(domvarind)] [As tip] [, ...]

    este utilizata pentru dimensionarea sau redimensionarea unui tablou alocat dinamic. Redimen-

    sionarea unui tablou dinamic are ca efect reinit ializarea tuturor valorilor elementelor. Folosireacuvantului cheie Preserve are ca efect pastrarea valorilor stocate n elementele de tablou, darn aceasta situat ie poate fi redimensionat doar domeniul de variat ie a ultimului indice (tablourilesunt stocate n memorie pe linii).

    Incercarea de redimensionare a unui tablou static genereaza un mesaj de eroare. Reinitializareaunui tablou static se poate face cu instruct iunea :

    Erase numetab [, ...].Daca n aceasta instruct iune numetab reprezinta numele unui tablou dinamic, acesta este stersdin memorie, reinitializarea lui fiind posibila doar dupa ce acesta este declarat din nou cu oinstructiune de declarare a tipului.

    In afara tipurilor predefinite, limbajul permite definirea unor variabile de tip utilizator, carepot avea o structura cu mai multe elemente avand tipuri diferite :

    [{ Private | Public}] Type numetipnumeelem [([domvarind])] As tip

    [numeelem [([domvarind])] As tip]

    ...

    End Type

    Aici numetip este numele ales de utilizator, numeelem este un nume de element, iar tip este unuldin tipurile mentionate anterior. Se observa din definitie ca variabilele pot contine si tablouri cudimensiuni fixe sau dinamice. Variabilele de tip utilizator pot fi declarate doar la nivel de modul,

    cuvintele cheie Public sau Private precizand domeniul de vizibilitate al acestora, anume n toate

    7

  • 8/3/2019 Elemente de Visual Basic

    8/37

    modulele, respectiv doar n modulul n care sunt definite. Crearea propriu-zisa a variabilei numevareste realizata cu una din instructiunile Dim , Static , Public , Private , ReDim . Referirea la uncamp al variabilei se face folosind sintaxa cu punct : numevar.numeelem .

    In cazul unei variabile numerice , tipul acesteia i determina precizia, precum siintervalul n care aceasta poate lua valori. Dupa cum s-a mentionat, n cazul unei expresiiaritmetice, daca operanzii sunt de tipuri diferite, sistemul va converti automat operanzii cu rangmai scazut la tipul operanzilor cu rang mai nalt, ordinea fiind Integer , Long , Single , Double .

    In cazul unei instructiuni de atribuire, care are forma generala :[Let] numevar = expr

    unde expr contine o valoare numerica sau un sir care este expresia literala a unui numar, conversiase face ntotdeauna la tipul lui numevar. Daca precizia expreste mai mare decat precizia numevar,are loc o rotunjire a rezultatului evaluarii expresiei. Astfel, daca n particular b! = 3.654, nurma executarii instructiunii a% = b!, variabila a% are valoarea 4 .

    Conversia de tip poate fi realizata si explicit utiliznd functiileCInt(expr) ; CLng(expr) ; CSng(expr) ; CDbl(expr)

    unde argumentul expr, care se evalueaza la o valoare numerica sau la un sir de caracterea cecontine o valoare numerica, trebuie sa se ncadreze n domeniul de valori corepunzator tipului dedata la care se face conversia, tip indicat n numele functiei imediat dupa caracterul C .

    Instructiunea prin care unei variabile sir i se atribuie o valoare numerica genereaza un mesajde eroare. Situatia poate fi evitata prin utilizarea functiei CStr(expr).

    1.3 Functii standard

    Limbajul Basic este destul de sarac n functii matematice . In Tab. 4 este prezentata lista

    Functia Definitia

    Abs(expr) valoarea absolutaInt(expr) trunchiere la intregul imediat inferiorFix(expr) trunchiere la partea ntreagaSgn(expr) functia semn : returneaza 1 sau 0Sqr(expr) radicalLog(expr) logaritmul naturalExp(expr) exponentiala

    Sin(unghi) sinusul unghiuluiCos(unghi) cosinusul unghiuluiTan(unghi) tangenta unghiuluiAtn(expr) lungimea arcului avand tangenta . . .

    Tabelul 4: Functiile matematice ale limbajului

    acestora, unde expr reprezinta o expresie numerica, iar unghi se evalueaza la un unghi exprimatn radiani. Functiile matematice derivate pot fi exprimate prin aceste functii elementare folosindformulele cunoscute.

    8

  • 8/3/2019 Elemente de Visual Basic

    9/37

    Generatorul de numere aleatoare este initializat cu instructiunea :Randomize [expr]

    unde expr este o expresie numerica, n lipsa acesteia initializarea secventei fiind facuta implicitcu functia Timer, care furnizeaza numarul de secunde scurs de la miezul noptii. Generareapropriu-zisa de numere aleatoare distribuite uniform pe intervalul ( 0, 1 ) este facuta cu functiaRnd[(expr)].

    Amintim si cateva din functiile pe siruri de caractere . Extragerea unui subsir dintr-un sirde caractere poate fi realizata cu functiile :

    Left(sir , lung) ; Right(sir , lung) ; Mid(sir , ncep [,lung])Primele doua functii returneaza un subsir de caractere de lungime lung din sirul sir , numaratoareafacandu-se de la capatul din stanga, respectiv de la capatul din dreapta al sirului. Funct ia Midreturneaza un subsir din sir ncepand cu caracterul care are indicele ncep, lungimea sa fiind lungsau, n lipsa, toate caracterele pana la sfarsitul sirului.

    Suprimarea blancurilor de la nceputul sau de la sfarsitul unui sir de caractere se realizeaza cufunctiile :

    LTrim(sir ) ; RTrim(sir )rezultatul fiind un subsir al sirului sir .

    Lungimea unui sir de caractere este data de funct ia:Len({sir | numevar})

    In Visual Basic, functia Len poate admite ca argument si un nume de variabila (inclusiv de tiputilizator), caz n care valoarea returnata de functie reprezinta lungimea n octeti a variabileirespective.

    Convertirea caracterelor dintr-un sir numai la litere mici, respectiv numai la litere majuscule

    se realizeaza cu funct iile :LCase(sir ) ; UCase(sir )

    rezultatul fiind evident un sir de caractere de aceeasi lungime ca a lui sir .Construirea unui sir de lungime specificata format din caractere de acelasi tip se face cu

    functia :String(lung, {codASCII| sir})

    Daca n locul codului ASCII se specifica un sir de caractere, atunci sirul nou creat este formatnumai din primul caracter din specificatia sir . O instructiune asemanatoare care creeaza siruriformate doar din spatii este :

    Space(numsp) .

    Convertirea din codul ASCII n caracterul corespunzator si invers se realizeaza cu funct iile :Chr(codASCII) ; Asc(caract)Cautarea pozitiei unui subsir ntr-un sir dat este realizata de functia:

    InStr([start, ] sir , subsir)

    unde start indica indicele caracterului de unde ncepe cautarea.Functia Val(sir ) returneaza valoarea numerica continuta n sir , inversa acestei functii fiind

    Str(num ).Functiile Date si Time returneaza data si ora sistemului sub forma unor siruri de caractere.

    9

  • 8/3/2019 Elemente de Visual Basic

    10/37

    2 Structuri de control

    2.1 Structuri de decizie

    In cursul executiei este adesea necesar sa se ia o decizie daca se va executa un grup sau altulde instructiuni. Aceasta se realizeaza folosind structura alternativa If-Then-Else :

    If exprcond-1 Then

    blocinstr-1

    [ElseIf exprcond-2 Then

    blocinstr-2]

    ...

    ...

    [Else

    blocinstr-n ]End If

    unde exprcond sunt expresii de tip numeric sau de tip sir de caractere care se evalueaza la Truesau False . Daca una din expresiile conditionale este adevarata, atunci se evalueaza blocul deinstructiuni blocinstr aferent si apoi structura este parasita. Daca nsa niciuna din expresii nu esteadevarata si daca exista instructiunea Else , va fi executat blocul de instruct iuni asociat acesteia.In toate cazurile, executia continua cu prima instructiune care urmeaza structurii alternative.Blocurile de instructiuni pot contine la randul lor structuri alternative de tipul descris mai sus.

    Sistemul recunoaste si instructiunea avand forma prescurtata :If exprcond Then blocinstr-1 [Else blocinstr-2]

    care trebuie scrisa pe o singura linie. Se recomanda utilizarea acestei forme daca blocinstr-1, siblocinstr-2, contin un numar redus de instructiuni, eventual doar cate una singura.

    In cazuri simple poate fi folosita si functia :IIf (exprcond, expr-adev, expr-fals)

    care daca exprcond are valoarea True returneaza expresia aritmetica sau sir expr-adev, iar dacaare valoarea False returneaza expr-fals.

    O structura alternativa mult mai generala care permite luarea unei decizii privind executareaunui anumit bloc de instructiuni n functie de valoarea unei expresii numerice sau de tip sir decaractere, numita selector, este descrisa de structura Select Case. In programele complexeeste preferabila utilizarea acestei structuri mai sugestive, n locul instructiunilor de tip If. Sintaxagenerala a acestei structuri alternative generalizate este :

    Select Case exprselectCase listexpr-1

    blocinstr-1

    [Case listexpr-2

    blocinstr-2]

    ...

    ...

    [Case Else

    blocinstr-n ]

    End Select

    Dupa cum s-a amintit exprselect este o expresie numerica sau de tip sir, n funct ie de valoarea

    10

  • 8/3/2019 Elemente de Visual Basic

    11/37

    careia se va executa un anumit bloc de instructiuni. listexprva contine una sau mai multe expresiicare trebuie sa fie obligatoriu de acelasi tip cu exprselectsi poate avea una din urmatoarele forme :

    expr [, expr] ... ; expr To expr ; Is operatrel exprsau eventual combinatii ale acestora. In ultima forma operatrel este un operator relational carepoate fi < , > , , = , = , precedat obligatoriu de cuvantul cheie Is . Daca valoarea exprselectse ncadreaza n una din listele listexpr, vor fi executate instructiunile din blocul blocinstr asociat,n caz contrar trecandu-se la executarea instructiunilor aferente instructiunii Case Else , dacaaceasta exista.

    In VisualBasic este recunoscta si instructiunea de salt neconditionat :GoTo {linie| etic}

    unde argumentul este numarul liniei unei instructiuni sau o eticheta a unui bloc de instructiuni.Amintim ca eticheta este un identificator urmat obligatoriu de caracterul (:). Sistemul acceptasi instructiunea alternativa mai generala :

    On expr GoTo listaunde expr este o expresie ntreaga care poate lua valori ntre 0 si 255. In functie de valoareanumerica a acestui argument, controlul este transferat blocului de instructiuni asociat unei etichetesau unui numar de linie din lista, n functie de pozitia sa n lista. Daca valoarea lui expreste 0, saudaca ea este mai mare decat numarul de etichete din lista, executia se continua cu instructiuneaurmatoare, iar daca este negativa sau mai mare decat 255, va fi generat un mesaj de eroare.

    2.2 Structuri repetitive

    Structurile repetitive descriu situatiile n care necesitat ile de calcul impun repetarea unui grup

    de instructiuni de un numar controlat de ori.Cea mai ultilizata structura de acest tip este realizata cu instructiunea For ... Next carerealizeaza repetarea unei secvente de instructiuni, numarul de repetari fiind determinat de valorilepe care le poate lua o variabila contor pe un domeniu dat de valori :

    For contor = valinit To valfin [Step pas]

    [blocinstr]

    [Exit For]

    [blocinstr]

    Next [contor]

    Executia ncepe prin atribuirea pentru variabila contora valorii specificate de valinit si se executablocul de instructiuni (daca exista). In continuare valoarea variabilei contor este incrementatacu valoarea pas, daca aceasta exista, n caz contrar valoarea implicita pentru pas fiind unitatea,si daca valoarea rezultata pentru contor este mai mica decat valfin, blocul de instructiuni sereia de la nceput. Procedeul se repeta pana cand valoarea variabilei contor depaseste valoareaspecificata de valfin. Numarul de repetari va fi dat de formula :

    Fix

    valfin valinit

    pas

    + 1

    In versiunile mai vechi ale limbajului Basic, chiar daca valfin < valinit si pas > 0, ciclul ar trebuisa fie executat cel putin o singura data. In Visual Basic el nu se va executa niciodata, deoarecenainte de a se ntra n executie, sistemul evalueaza formula de mai sus si daca rezultatul este

    negativ sau zero, ciclul nu se va mai efectua.

    11

  • 8/3/2019 Elemente de Visual Basic

    12/37

    Sunt admise cicluri incluse unul n altul cu conditia ca variabila de control sa difere de laciclu la ciclu. Ultimul ciclu deschis cu instructiunea For va trebui sa fie primul ciclu nchis cuinstructiunea Next aferenta, s.a.m.d. O singura instructiune Next poate nchide mai multe cicluriincluse, ordinea contoarelor trebuind sa respecte regula ultimul deschis, primul nchis .

    Iesirea fortata dintr-un ciclu descris cu structura For ... Next poate fi realizata cu instructiu-nea Exit For plasata n corpul ciclului, executia programului continuand cu instructiunea imediaturmatoare instructiunii Next .

    Deoarece n practica repetarea unei secvente de instructiuni poate fi determinata nu de valoa-rea numerica a unei variabile contor, ci de modul cum este ndeplinita o conditie a carei valoareeste o entitate de tip logic True sau False, pot fi folosite si structuri repetitive realizate cuinstructiunea Do, avand una din urmatoarele forme :

    Do [{ While | Until } exprcond][blocinstr]

    [Exit Do][blocinstr]

    Loop

    sau:Do

    [blocinstr]

    [Exit Do]

    [blocinstr]

    Loop [{ While | Until } exprcond]Aici exprcond este o expresie relationala sau logica. Ciclul construit cu While se va relua atata

    timp cat exprcond are valoarea True , iar ciclul construit cu Until va fi reluat pana candexprcond primeste valoarea True .

    Intre cele doua sintaxe exista o deosebire esentiala. Daca n primul caz este posibil ca ciclul sanu fie executat niciodata, n functie de valoarea de adevar sau de fals a argumentului exprcond,n cel de al doilea caz, ciclul va fi executat cel putin o singura data, deoarece operatia de testarea reluarii ciclului este facuta dupa parcurgerea blocului de instructiuni.

    O iesire fortata dintr-un astfel de ciclu se poate face cu instructiunea Exit Do, executiaprogramului continuand cu instructiunea imediat urmatoare instructiunii Loop .

    Se observa ca este posibila si structura repetitiva cu sintaxa :Do

    [blocinstr]

    [Exit Do]

    [blocinstr]

    Loop

    Evident, este vorba de un ciclu infinit, executia sa putand fi ntrerupta doar cu o instructiuneExit Do plasata n interiorul blocului de instructiuni care se repeta.

    Pentru a pastra compatibilitatea cu GW-Basic sau Basica, sistemul Visual Basic recunoastesi structura repetitiva :

    While exprcond

    [blocinstr]

    Wend

    unde secventa blocinstr va fi executata atata timp cat exprcond are valoarea True.

    12

  • 8/3/2019 Elemente de Visual Basic

    13/37

    3 Proceduri generale

    Divizarea unui program general Visual Basic n o serie de unitati logice mai mici este impusa

    de satisfacerea a doua cerinte : a) claritate n redactare si usurinta la depanare, n cazul existenteiunor erori de conceptie sau de programare; b) evitarea repetarii unor secvente de cod mai scurtesau mai lungi, daca n cursul executiei acestea trebuie executate de mai multe ori. Procedurilepot fi generale , daca ele comunica aplicatiei modul cum urmeaza sa fie efectuate anumiteactiuni, dar exista si proceduri-eveniment care sunt apelate pentru a rasupunde unor evenimenterecunoscute de un anumit obiect. De obicei procedurile generale sunt grupate n modulele de cod,pentru a fi recunoscute din mai multe puncte ale programului. Ele pot fi subprograme distinctede tip subrutina sau de tip functie, care se pot apela ntre ele, pe ele nsele (proprietatea derecursivitate), sau dintr-o alta unitate de program, dupa niste reguli care vor fi precizate ulterior,dar sistemul este compatibil si cu instructiunile GoSub ... Return preluate din versiunile mai

    vechi, care sunt continute n ntregime ntr-o unitate de program si care pot fi apelate doar ncadrul unitat ii de program care le contin.

    Problema comunicarii ntre programul apelant si subprogram implica existenta unui mecanismde transmitere a valorilor, care are loc dupa niste reguli foarte stricte, care trebuie cunoscute sirespectate de utilizator. Facand abstractie de cazurile cand sunt definite si utilizate variabile siconstante globale (publice), transmisia valorilor are loc prin intermediul unor argumente, numiteactuale daca figureaza n programul apelant, respectiv formale daca figureaza n subprogramulapelat. Transmiterea se poate realiza atat prin adresa , caz n care n subprogram pot fi modificatevalorile argumentelor actuale corespunzatoare din programul apelant, cat si prin valoare , cazn care valorile argumentelor actuale nu se modifica n programul apelant, chiar daca valorile

    argumentelor formale sunt modificate n subprogram.In plus, un subprogram de tip functie vareturna ntotdeauna n programul apelant o valoare, prin specificarea explicita a numelui functiei

    respective, valoare care poate fi folosita fara restrictii n diverse expresii.

    3.1 Subprograme de tip subrutina si functie

    Subprogramele de tip subrutina si cele de tip functie au o forma generala asemanatoare,anume :

    [{ Public | Private }] [Static] Sub numesub (listarg)[blocinstr]

    [Exit Sub]

    [blocinstr]

    End Sub

    respectiv :[{ Public | Private }] [Static] Function numefunc (listarg) [As tip]

    [blocinstr]

    [numefunc = expresie]

    [Exit Function]

    [blocinstr]

    [numefunc = expresie]

    End Function

    Aici Public sau Private indica faptul ca subprogramul poate fi accesat din orice procedura

    13

  • 8/3/2019 Elemente de Visual Basic

    14/37

    a proiectului, respectiv din orice procedura apartinand modulului n care este definita functia.Cuvantul cheie Static specifica faptul ca variabilele locale si pastraza valorile ntre apelurilesuccesive ale procedurii, nefiind nsa afectate variabilele declarate n afara procedurii.

    Daca n ceea ce priveste alegerea numelui subrutinei numesub nu exista restrict ii, deoarecesubprogramul de tip functie returneaza ntotdeauna o valoare prin numefunc, tipul functiei vatrebui declarat explicit prin specificarea tip care poate fi Byte , Boolean , Integer , Long ,Currency , Single , Double , Date , String (numai de lungime variabila), Object , Variant ,sau poate fi precizat implicit atasand numelui unul din sufixele % , & , ! , # , @ , sau folosind oinstructiune DefTip.

    Lista de argumente formale listarg consta din entitati avand forma generala :[Optional] [{ ByVal | ByRef }] [ParamArray] numevar[()] [As tip]

    separate prin virgule. Cuvantul cheie Optional este folosit pentru a indica ca argumentul nueste obligator, nsa n aceasta situat ie toate argumentele care urmeaza n lista trebuie sa fie de

    asemenea optionale si sa fie declarate ca atare. In plus, argumentele optionale nu pot fi decat detipul variant. Parametrii ByVal si ByRef indica faptul ca argumentul este transmis prin valoaresau prin referinta. Numai ultimul argument din listarg poate fi precedat de ParamArray , ceeace indica faptul ca argumentul respectiv este un tablou optional avand elemente de tip variant.Cuvantul cheie ParamArray nu poate fi folosit mpreuna cu Optional , ByVal , sau ByRef .numevar si tip au semnificatiile cunoscute. Daca argumentul formal numevar este un tablou,numelui ales i se poate atasa optional o pereche de paranteze rotunde ( ) .

    Un subprogram de tip subrutina poate fi apelat cu instructiunea :[Call] numesub [[(]listarg[)]]

    Utilizarea cuvantului cheie Call este optionala, dar daca el este folosit, atunci obligator lista

    de argumente actuale listarg, ale carei elemente sunt separate cu virgule, va trebui inclusa ntreparanteze rotunde, chiar daca lista este vida. (Atentie : folosirea acestor paranteze n absenta luiCall este semnalata ca o eroare!) Elementele din listarg pot fi precedate de ByVal sau ByRefpentru a preciza modul de transmitere pentru valorile argumentelor, dar se prefera utilizareaacestor cuvinte cheie n lista argumentelor formale din instructiunile de definitie ale subprogra-melor. Daca argumentul este un nume de tablou declarat ca atare n programul apelant, atunciidentificatorul corespunzator trebuie urmat de o pereche de paranteze ( ).

    Apelul unui subprogram de tip functie se face prin specificarea ntr-o expresie a identificatoruluifunctiei numefunc urmat, daca este cazul, de lista de argumente actuale listarg inclusa ntreparanteze rotunde ( ), valoarea returnata fiind utilizata pentru evaluarea expresiei respective.Din acest motiv, n corpul functiei trebuie sa existe cel putin o instructiune prin care i se atribuievariabilei nume o anumita valoare. Daca o astfel de instructiune lipseste, valoarea returnata estezero daca functia este de tip numeric, sirul nul daca functia este de tip sir de caractere, sau Emptydaca este de tipul variant. Apelul functiei se poate realiza si cu o instructiune Call , nsa n acestcaz nu exista nici o valoare returnata.

    In urma apelului unei proceduri, elementele listei cu argumente actuale sunt puse ncorespondenta cu elementele listei cu argumente formale, orice neconcordanta de ordine si tipfiind semnalata ca o eroare. Transmiterea valorilor se face implicit prin adres a, ceea ce este efici-ent din punctul de vedere al utilizarii memoriei, nsa daca un argument actual este o constanta,o expresie, sau este scris ntre paranteze, atunci transmiterea sa se realizeaza prin valoare, chiardaca nu este facuta nici o specificare explicita. In cazul transmiterii prin adresa, este important

    si efectul colateral al executiei subprogramului, n sensul ca eventuala modificare a valorilor unor

    14

  • 8/3/2019 Elemente de Visual Basic

    15/37

    argumente n subprogram se manifesta si n programul apelant, locat iile de memorie folosite deargumentele formale si cele actuale fiind comune.

    Implicit orice procedura are caracter public, iar valorile variabilelor locale nu sunt memoratentre doua apeluri succesive. Deoarece n Visual Basic sunt permise si proceduri avand caracterde recursivitate, se recomanda folosirea cu mare atentie a declaratiei Static . Instructiunileexecutabile trebuie sa fie continute n totalitate n corpul precedurii, care nu poate contine altedefinitii de proceduri. Instructiuni Exit { Sub | Function} pot fi plasate oriunde n corpulprocedurii si au ca efect imediat parasirea acesteia, executia fiind preluata de instructiunea caresuccede instructiunii apelante.

    Variabilele folosite n subprograme sunt locale daca ele sunt declarate explicit n corpul proce-durii. Restul variabilelor utilizate ntr-o procedura sunt locale doar daca nu figureaza n declaratiiexplicite la un nivel superior, n aceasta ultima situatie fiind nsa posibile conflicte de tip dacaexista similaritati de nume. Pentru a evita ambiguitatile, este recomandabila utilizarea instructiunii

    Option Explicit care obliga declararea explicita a tuturor variabilelor

    3.2 Subprograme de tip GoSub ... Return

    Desi avand sintaxa cea mai simpla, acest tip de subprogram prezinta dezavantajul ca varia-bilele fiind comune atat programului apelant, cat si subprogramului care este continut obligatorn aceeasi unitate de program, este necesara o atent ie deosebita pentru a nu fi modificate unelevalori utilizate si n alte secvente de cod. Forma sa generala este :

    ...

    GoSub etic-1

    ...

    ...

    etic-1:

    [blocinstr]

    Return [etic-2]

    ...

    [etic-2:]...

    unde etic-1 este eticheta sau numarul liniei de nceput a subprogramului, iar etic-2 este etichetasau numarul liniei ncepand de la care continua executia programului, dupa revenirea din sub-program ca urmare a executiei instructiunii Return . Daca etic-2 lipseste, executia continua cuinstructiunea imediat urmatoare instructiunii GoSub .

    Un subprogram de tip subrutina Sub nu poate fi apelat cu o instructiune GoSub si nici nupoate fi parasit cu o instructiune Return .

    O versiune ceva mai generala a instructiunii GoSub este:On expr GoSub lista

    unde expreste o expresie ntreaga cu valori cuprinse ntre 0 si 255. In functie de valoarea numericaa expresiei respective, controlul este transferat blocului de instruct iuni asociat unei etichete sauunui numar de linie din lista, n functie de pozitia sa n lista. Daca expr are valoarea 0 sauo valoare mai mare decat numarul de etichete din lista, executia se continua cu instructiuneaimediat urmatoare, iar daca este negativa sau mai mare decat 255, va fi generat un mesaj de

    eroare.

    15

  • 8/3/2019 Elemente de Visual Basic

    16/37

    3.3 Rutine de tratare a erorilor

    Chiar daca instructiunile unui program sunt corecte din punct de vedere sintactic si semantic,

    este posibil ca n cursul exploatarii programului sa apara erori care pot ntrerupe executia normalasi uneori pot bloca chiar sistemul de operare. Pentru a evita astfel de situatii, utilizatorul are ladispozitie instructiunea :

    On Error { GoTo etic| Resume Next}plasata naintea unei secvente de program care poate genera una sau mai multe erori fatale. Esteindicat ca o astfel de instructiune sa fie plasata chiar la nceputul procedurii. Efectul instructiuniieste determinat de una din cele doua optiuni admise. Daca optiunea este Resume Next, n cazulaparitiei unei erori n executie, programul se reia de la instructiunea imediat urmatoare aceleiacare a generat eroarea. Optiunea GoTo etic transfera executia la o rutina scrisa de utilizator,etic reprezentand eticheta sau numarul primei linii a subprogramului de tratare a erorilor.

    In cadrul rutinei de tratare a erorilor, care trebuie sa se afle n aceeasi unitate de program cuinstructiunea On Error , utilizatorul are posibilitatea de a identifica si afisa codul erorii (continut

    n proprietatea Number a obiectului Err din sistemul Visual Basic), de a afla mesajul de eroareatasat codului (valoarea returnata de functia Error(Err[.Number]) , care coincide cu proprie-tatea Description a obiectului Err) si de a indica ce actiuni vor fi ntreprinse dupa identificareaerorii pentru a evita efectele acesteia. Pentru a reveni n program dupa parcurgerea instructiunilorcontinute n rutina de tratare a erorilor, se poate utiliza instructiunea :

    Resume [{ etic| Next}]unde etic reprezinta eticheta sau numarul de linie al instructiunii din program ncepand de la carese va relua executia. In cazul optiunii Next, executia se reia de la instructiunea imediat urmatoareaceleia care a provocat eroarea. In lipsa oricarei optiuni n instructiunea Resume, executia se reiachiar cu instructiunea care a provocat eroarea, deoarece se presupune ca n cadrul subrutinei detratare a erorilor utilizatorul a facut corecturile necesare pentru ca eroarea sa nu se mai repete(n lipsa unor astfel de corecturi, programul intra ntr-un ciclu infinit!).

    Dezactivarea rutinei de tratare a erorilor se face cu instruct iunea On Error GoTo 0 , ceea cenu nseamna ca daca intervine o eroare, executia este transferata rutinei de tratare a erorilor carencepe cu linia numerotata cu 0 , chiar daca aceasta exista.

    Desi activarea rutinei de tratare a erorilor se face ntr-o secventa de cod plasata la nceputulunei proceduri, codul asociat rutinei este situat de obicei la sfarsitul procedurii, iar pentru a evitaparcurgerea acestuia n absenta interventiei unei erori, se recomanda introducerea unei instructiuniExit { Sub | Function} naintea etichetei care marcheaza nceputul rutinei.

    4 Sistemul de I/O. Fisiere

    Exista o gama suficient de larga de posibilitat i pentru a realiza schimbul de informatii ntreutilizator si un program Visual Basic. Calea cea mai simpla si mai sigura, dar si cea mai putinflexibila, consta n utilizatea unor casete de dialog predefinite modale, care permit continuareaexecutiei numai dupa efectuarea unor actiuni specifice. Ideea poate fi dezvoltata, fiind posibilaproiectarea unor casete de dialog personalizate, care n afara unor casete cu text, pot contine sialte controale care pot comunica date, cum ar fi bare de derulare orizontale si verticale, casetecu lista si combinate, butoane de optiune, spinnere, etc. Rezultatele intermediare si finale pot fi

    16

  • 8/3/2019 Elemente de Visual Basic

    17/37

    afisate n formatul dorit cu metoda Print pe forme, n casete cu imagine, n fereastra Debug,pot fi tiparite la imprimanta, sau pot fi reprezentate grafic. In fine, pentru a putea fi folosite oride cate ori este nevoie, datele si rezultatele pot fi stocate n fisiere pe suport magnetic.

    4.1 Casete de dialog predefinite

    Cea mai simpla metoda de a furniza date unui program Visual Basic si de a afisa uneleinformatii asupra executiei consta n utilizarea casetelor de dialog predefinite cu ajutorul proce-durilor InputBox si MsgBox . Aceste casete de dialog sunt ntotdeauna modale , n sensul caele nu pot fi parasite si programul nu poate fi continuat fara ncuviintarea utilizatorului, care nplus are posibilitat i destul de reduse de influentare asupra dimensiunilor, aspectului si pozitionariiacestora.

    Afisarea unei casete de dialog care contine un mesaj, un titlu, butoane de comanda si o caseta

    de text n care pot fi introduse informatii, cum ar fi un nume sau un numar si care sunt apoireturnate procedurii apelante n vederea prelucrarii, este realizata cu funct ia:

    InputBox(mesaj[, [titlu][,[implicit][,[xpos][,[ypos][, fishelp, nrcontxt]]]]])

    Singurul argument obligatoriu este sirul de caractere mesaj avand maximum 1024 caractere,care pot fi scrise pe linii concatenate cu constanta predefinita vbCrLf (Chr(13)+Chr(10)).Celelalte argumente fiind optionale, daca unele dintre ele sunt omise, ele trebuie nlocuite cuvirgule. Argumentul titlu reprezinta sirul ce urmeaza a fi afisat n bara de titlu a casetei dedialog, n lipsa fiind afisat numele aplicatiei. Valoarea prestabilita returnata de functie daca nu seintroduce nimic de la tastatura si care este afisata n caseta de text este continuta n sirul implicit.Daca se omite acest argument, caseta de text este afisata goala si valoarea implicita returnata

    de functie este sirul vid (""). Argumentele numerice xpos si ypos precizeaza coordonatele ntwips ale coltului din stanga sus n raport cu ecranul. Daca aceste coordonate lipsesc, caseta dedialog va fi centrata pe orizontala la aproximativ o treime din naltimea ecranului. Ultimele douaargumente sunt folosite pentru a pune le dispozit ie asistenta soft dependenta de context, fishelpfiind numele fisierului, iar nrcontxt reprezinta valoarea numerica a referintei de context din fisierasociata cu caseta de dialog. Aceste doua argumente trebuie sa figureze simultan n instructiune,caz n care va fi afisat si butonul de comanda Help, fiind totodata activa si tasta F1.

    Functia returneaza continutul casetei de text prin selectarea butonului OK sau prin apasareatastei Enter. Daca sirul reprezinta un numar, pentru conversie poate fi folosita funct ia Val , avandca argument functia InputBox . Selectarea butonului Cancel are ca efect anularea mesajuluiintrodus, fiind returnat sirul vid.

    Atat functia, cat si subrutina MsgBox afiseaza un mesaj ntr-o caseta de dialog si asteapta cautilizatorul sa selecteze un buton de comanda, n cazul functiei fiind returnata valoarea asociataimplicit butonului respectiv. Sintaxa generala este similara n ambele cazuri :

    MsgBox[(] mesaj[, [butoane][,[titlu][, fishelp, nrcontxt]]][)]

    diferenta constand n modul de apelare. Folosita ca subrutina, apelul poate fi facut specificanddirect numele MsgBox urmat de lista de argumente, fara a fi scrise si parantezele rotunde, iardaca este folosita ca functie, ea trebuie utilizata ntr-o expresie care se evalueaza la o valoarentreaga, fiind obligatorie si includerea argumentelor ntre paranteze rotunde.

    Semnificatiile argumentelor mesaj, titlu, fishelp, nrcontxt, sunt cele prezentate la functiaInputBox , doar argumentul butoane necesitand explicatii. Acesta contine o expresie numerica

    reprezentand suma valorilor care specifica numarul si tipul butoanelor de comanda care urmeaza

    17

  • 8/3/2019 Elemente de Visual Basic

    18/37

    Constanta simbolica Valoare Semnificatie

    vbOKOnly 0 Afiseaza numai butonul OK

    vbOKCancel 1 Afiseaza butoanele OK si CancelvbAbortRetryIgnore 2 Afiseaza butoanele Abort, Retry si IgnorevbYesNoCancel 3 Afiseaza butoanele Yes, No si CancelvbYesNo 4 Afiseaza butoanele Yes si NovbRetryCancel 5 Afiseaza butoanele Retry si CancelvbCritical 16 Afiseaza icoana CriticalvbQuestion 32 Afiseaza icoana semn de ntrebarevbExclamation 48 Afiseaza icoana semn de exclamarevbInformation 64 Afiseaza icoana InformationvbDefaultButton1 0 Este focalizat primul butonvbDefaultButton2 256 Este focalizat al doilea butonvbDefaultButton3 512 Este focalizat al treilea butonvbApplicationModal 0 Caseta este modala pentru aplicatievbSystemModal 4096 Caseta este modala pentru sistem

    Tabelul 5: Valorile numerice ale butoanelor, icoanelor, focalizarii si modalitatii

    a fi afisate, stilul icoanei folosite, identitatea butonului focalizat si caracterul de modalitate alcasetei de dialog (v. Tab. 5). Atunci cand sunt nsumate valorile numerice pentru a obtinecifra finala, poate fi utilizat doar un singur numar din fiecare grup de optiuni. In lipsa, valoarea

    implicita a argumentului butoane este zero.Folosita ca functie, MsgBox returneaza o valoare numerica asociata butonului care este se-

    lectat. Daca n caseta de dialog este afisat si butonul Help, n urma selectiei acestuia nu este

    Valoare Constanta simbolica Semnificatie

    1 vbOK Butonul OK2 vbCancel Butonul Cancel3 vbAbort Butonul Abort4 vbRetry Butonul Retry5 vbIgnore Butonul Ignore

    6 vbYes Butonul Yes7 vbNo Butonul No

    Tabelul 6: Valorile numerice asociate butoanelor de comanda

    returnata nici o valoare, pana cand nu este selectat si unul din butoanele din Tab. 6.Unicul argument obligatoriu, indiferent de versiunea folosita (subrutina sau functie) este sirul

    mesaj. Restul argumentelor este optional, cele lipsa trebuind sa fie nlocuite cu virgule. Utilizatorulnu poate influenta pozitionarea pe ecran a casetei de dialog MsgBox .

    18

  • 8/3/2019 Elemente de Visual Basic

    19/37

    4.2 Metoda Print si functia Format

    Afisarea rezultatelor pe ecran, sau dupa caz tiparirea acestora la imprimanta, se realizeaza

    folosind metoda :[obiect.]Print [listexpr][{ ; | , }]

    unde obiect nu poate fi decat o forma (Form), o caseta cu imagine (PictureBox), imprimanta(Printer), sau fereastra de depanare (Debug), n lipsa obiectul implicit fiind forma curenta. Dacanu este utilizat nici un argument, va fi lasat un rand liber. Argumentul listexpr reprezinta o listade expresii aritmetice sau de tip sir de caractere, care urmeaza sa fie tiparita pe ecran sau laimprimanta. Un element al listei are forma generala :

    [{ Tab[(col)]|Spc(num ) }]{ | ;} expresie[{ | ; | , }]Functia Tab[(col)] indica faptul ca cursorul sau capul de imprimare se va pozitiona pe

    coloana col, sau daca acest argument lipseste, se trece la zona de tabulare urmatoare. Un

    rol asemanator l are functia Spc(num ) care realizeaza un salt de num spatii pe aceeasi linie.Deoarece de obicei sunt folosite la scriere fonturi proport ionale, indicatiile col si num au doar uncaracter orientativ, unitatea de masura a acestora fiind largimea medie a unui caracter specifictipului de font folosit.

    Daca expresie este urmata de (;) sau ( ), elementul ce urmeaza n lista va fi tiparit ncontinuare, iar daca este utilizat caracterul (,) se sare la urmatoarea zona de tabulare (functiaTab fara argument). O zona de tabulare are o latime egala cu de 14 ori largimea medie a unuicaracter.

    In cazul n care instructiunea Print are pe ultima pozitie (;), (,), Tab[(col)], sauSpc(num ), nu se trece la linia urmatoare, cursorul sau capul de imprimare ramanand pe acelasirand n vederea executarii unei eventuale instructiuni de tiparire ulterioare.

    Daca obiectul este Printer, imprimanta trebuie sa fie conectata la calculator, n caz contrarsemnalandu-se un mesaj de eroare.

    Pozitionarea cursorului text pentru scriere poate fi realizata cu instruct iunile :[obiect.]CurrentX = x

    [obiect.]CurrentY = y

    unde x si y sunt valori numerice care specifica coordonatele punctului de inserare pe orizontalasi pe verticala. Inaltimea unui sir de caractere si latimea acestuia pot fi determinate folosindmetodele :

    [obiect.]TextHeight(sir )

    [obiect.]TextWidth(sir)

    valorile returnate fiind exprimate n unitatile de masura stabilite cu proprietatea ScaleMode .Pentru a afisa rezultatele ntr-o forma precizata de utilizator poate fi folosita functia:

    Format(expresie[, format])

    unde expresie reprezinta o expresie valida a carei valoare va fi convertita la un sir de caractereavand format-ul dorit. Argumentul optional format este fie o specificare predefinita standard, fieo expresie sir de caractere definita de utilizator care contine caractere speciale de formatare. Incazul afisarii unei expresii de tip numeric, functia Format fara specificarea de formatare un efectasemanator cu cel al functiei Str(exprnum ) , deosebirea fiind ca la afisarea valorilor pozitive,lipseste spatiul rezervat pentru semn.

    Formatele predefinite standard sunt prezentate n Tab. 7. Simbolurile separatorilor pentru

    mii si pentru zecimale sunt n conformitate cu specificarile din Regional Settings Properties din

    19

  • 8/3/2019 Elemente de Visual Basic

    20/37

    Format standard Semnificatie

    "General Number" Numarul este afisat n forma n care se afla, fara separatori.

    "Fixed" Cel putin o cifra n stanga semnului zecimal, doua zecimale."Standard" Separatori pentru mii, doua cifre zecimale."Currency" Separatori pentru mii, doua cifre zecimale, val. negative n paranteze."Percent" Valoarea nmultita cu 100 , doua cifre zecimale, simbolul % la sfarsit."Scientific" Este folosita notatia stiintifica standard, doua cifre zecimale."Yes/No" O valoare diferita de zero este Yes. Zero este No."True/False" O valoare diferita de zero este True. Zero este False."On/Off" O valoare diferita de zero este On. Zero este Of.

    Tabelul 7: Formatele predefinite standard pentru valorile numerice

    Windows Control Panel. Pentru English (United States) separatorii pentru mii sunt virgulele (,) ,iar separatorul zecimal este punctul (.) .

    Formatele definite de utilizator folosesc caractere speciale de formatare care sunt scrisentre ghilimele (") . Ele determina campul si forma de afisare pentru numere si siruri de caractere.Un format numeric poate avea pana la patru sectiuni separate cu simbolul (;) , din care primaeste obligatorie si daca este unica specificat ie, ea este folosita pentru formatarea tuturor valorilor.Daca formatul are doua sectiuni, prima este folosita pentru valori pozitive si zero, iar cea de adoua pentur valori negative. In cazul a trei sectiuni, prima este folosita pentru valori pozitive, adoua pentru valori negative, iar a treia pentru zero. Daca se adauga si a patra sectiune, ea este

    folosita pentru afisarea valorii Null . Daca o specificat ie de sectiune lipseste, fapt marcat prindoua caractere (;) succesive, sectiunea respectiva foloseste pentru afisare formatul pentru valoripozitive. Formatul utilizator pentru siruri de caractere poate avea doar doua sectiuni separatecu (;) , prima folosita pentru orice date de tip sir, iar cea de a doua, daca exista, este folositadoar pentru afisarea valorii Null si a sirului vid ("") .

    Caracterele speciale de formatare care pot servi la alcatuirea descriptorilor de format nu-merici sunt urmatoarele :

    0 : se afiseaza o cifra sau un zero. Daca expresia contine o cifra n pozitia n care figureaza un 0n sirul descriptor de format, ea va fi afisata ca atare, n caz contrar n pozitia respectiva va fi nscrisun zero. Daca expresia are mai putine cifre decat numarul caracterelor din descriptor, pozitiile

    libere vor fi completate cu zerouri. Daca numarul de zecimale este mai mare decat numarul dezerouri care urmeaza separatorului punct din descriptor, numarul va fi rotunjit corespunzator, iardaca partea ntreaga are mai multe cifre decat cele prevazute, ea fi reprezentata fara modificari.

    # : se afiseaza o cifra sau nimic. Daca expresia contine o cifra n pozitia n care figureazaun # n sirul descriptor de format, ea va fi afisata ca atare, n caz contrar n pozitia respectivanu va fi afisat nimic. Pentru un numar compus din mai multe cifre, efectul este asemanator cucel descris mai sus, unica diferenta fiind aceea ca nu vor mai fi scrise zerourile de la capete dacanumarul de cifre este mai mic decat numarul caracterlor din descriptor.

    . : indica pozitia punctului zecimal. Acesta poate fi plasat n orice pozitie a campului si poateforta tiparirea semnului minus n fata numarului, daca acesta este negativ. Daca este necesar,numerele sunt rotunjite, pentru a fi reprezentate n conformitate cu formatul specificat.

    20

  • 8/3/2019 Elemente de Visual Basic

    21/37

    , : virgulele plasate la stanga punctului zecimal permit separarea grupurilor de cate trei cifresemnificative care alcatuiesc partea ntreaga. Scalarea numarului prin mpartirea lui cu 1000 sirotunjirea acestuia daca este cazul poate fi realizata prin plasarea virgulei la extremitatea dreaptaa partii ntregi (naintea punctului zecimal daca acesta exista). Doua virgule succesive n loculmentionat nseamna scalarea cu 1000000 , etc.

    % : valoarea numerica este nmultita cu 100 si apoi reprezentata n conformitate cu descriptorulspecificat. Simbolul % poate fi plasat oriunde, dar de obicei el figureaza la nceputul sau la sfarsituldescriptorului.

    E- E+ e- e+ : indica scrierea sub forma exponentiala, stiintifica, a numarului care urmeazaa fi afisat. Simbolul + sau - trebuie sa fie urmat cel putin de un caracter 0 sau # , numarulacestor caractere determinand numarul cifrelor de la exponent. Pentru a afisa semnul minus nfata exponentilor negativi se recomanda una din formele E- sau e- , iar pentru a afisa + sau -n functie de semnul exponentului, trebuie folosita forma E+ sau e+ . In functie de numarul de

    caractere # sau 0 din fata simbolului pentru exponent, se face si rotunjirea expresiilor numericereprezentate.

    - + $ ( ) : caractere literale care sunt afisate si plasate identic ca n specificatorul deformat.

    \ : deoarece o serie de caractere au o anumita semnificatie si nu pot fi afisate n forma lorliterala, se recomanda ca orice alt caracter, n afara celor sase amintite mai sus, sa fie precedat(protejat) n descriptorul de format de un caracter backslash (\), daca se doreste afisarea saexplicita. Insusi caracterul (\) poate fi afisat scriind (\\).

    In ceea ce priveste afisarea expresiilor de tip sir de caractere , pot fi utilizate urmatoarelecaractere speciale de formatare :

    @ : se afiseaza un caracter sau un spatiu. Daca expresia sir contine un caracter n pozitian care figureaza un @ n sirul descriptor de format, el va fi afisat ca atare, n caz contrar npozitia respectiva va fi afisat un spatiu. Daca expresia are mai putine caractere decat numarulcaracterelor din descriptor, pozitiile libere vor fi completate cu spatii, sirul fiind aliniat la dreapta.

    & : se afiseaza un caracter sau un nimic. Daca expresia sir contine un caracter n pozitian care figureaza un & n sirul descriptor de format, el va fi afisat ca atare, n caz contrar npozitia respectiva nu va fi afisat nimic. Daca expresia are mai putine caractere decat numarulcaracterelor din descriptor, pozitiile libere vor fi ignorate, sirul fiind aliniat la dreapta.

    < : caracterele majuscule sunt afisate minuscule.> : caracterele minuscule sunt afisate majuscule.! : alinierea se face la stanga .

    Ultimele trei caractere de formatare pot fi plasate oriunde n descriptorul de format. Daca expresiasir contine mai multe caractere decat descriptorul, ea va fi afisata fara a fi trunchiata.

    4.3 Fisiere n Visual Basic

    Metodele si instructiunile prezentate n paragrafele anterioare permit o activitate interactivacu calculatorul, datele fiind citite de la tastatura atunci cand programul o cere, iar rezultatele suntafiste pe ecran, sau tiparite la imprimanta pe masura ce acestea sunt obtinute. Avantajele acestuisistem sunt evidente, utilizatorul avand tot timpul controlul asupra execut iei programului. Pe dealta parte, exista si o serie de dezavantaje, care apar n special cand este manipulat un volum

    mare de date, iar rezultatele obtinute trebuie pastrate fie pentru a putea fi utilizate ca atare, fie

    21

  • 8/3/2019 Elemente de Visual Basic

    22/37

    n vederea unei prelucrari ulterioare. Aceste dezavantaje pot fi eliminate prin utilizarea fisierelor,care reprezinta n general colect ii de date omogene sub aspectul semnificatiei si necesitat ilor deprelucrare, depuse de obicei pe un suport extern de memorare, cum ar fi discurile magnetice.Elementele din care este constituit un fisier se numesc articole, care la randul lor pot fi alcatuitedin mai multe componente, numite campuri.

    Avand n vedere modul de stocare al informatiilor, precum si modul ulterior de acces la acestea,n Visual basic exista trei tipuri de fisiere : fisiere secventiale, fisiere n acces direct (aleator) sifisiere binare.

    Fisierele n acces secvential sunt mai usor de creat decat cele n acces direct, nsa prezintao flexibilitate destul de redusa din punctul de vedere al manipularii datelor continute. Articolelefisierului, reprezentand succesiuni de caractere ANSI de diferite lungimi, sunt nregistrate unuldupa celalalt, accesul la unul din articole fiind posibil doar dupa ce sunt parcurse toate articoleleprecedente, ncepand cu primul articol din fisier.

    Fisierele n acces direct, desi implica pentru construirea lor mai multe etape de programdecat fisierele secventiale, sunt mult mai flexibile, deoarece fiecare articol, de aceasta data delungime fixa, are asociat un numar de ordine n cadrul fisierului. Prin specificarea acestui numar,orice articol continut n fisier poate fi accesat direct n vederea prelucrarii. In plus, aceste fisiereocupa mult mai putin spatiu pe disc, datele fiind memorate ntr-o forma compresata binara.

    Fisierele n acces binar sunt oarecum asemanatoare cu cele n acces direct din punctul devedere al memorarii datelor, nsa nregistrarile nu mai au o lungime fixa, iar campurile nu mai suntde un anumit tip. Este obligatia utilizatorului sa cunoasca succesiunea si lungimea nregistrarilor,pentru a regasi corect datele stocate.

    Un fisier poate fi creat, consultat, sau actualizat, n ultimul caz existand posibilitatea de a se

    adauga sau sterge unele articole, sau de a se modifica campurile unor articole. Pentru a putea firealizata oricare din actiunile enumerate, fisierul va trebui deschis cu instructiunea :

    Open numefis [For mod] [ACCESS acces] [lock] As [#]nrfis [Len = recl]

    In urma executiei instructiunii se aloca un buffer (o zona tampon) prin intermediul caruia serealizeaza operatiile de I/O si se stabileste modul de acces la articolele fisierului.

    Argumentul numefis reprezinta o constanta sau o variabila de tip sir de caractere care continenumele fisierului care urmeaza a fi deschis. Daca acesta nu se gaseste n directorul curent, sirulrespectiv va contine obligatoriu si calea de accesare a fisierului, n conformitate cu regulile stabilitede sistemul de operare.

    Prin intermediul argumentului mod este specificat tipul fisierului, precum si operatia pentrucare acesta este deschis. In cazul fisierelor secventiale, mod poate fi una din clauzele Input ,Output , sau Append , n primele doua cazuri fisierul fiind deschis pe primul articol pentru citiresau scriere, iar n cel de al treilea caz acesta este deschis si pozitionat dupa ultimul articol existent,n vederea extinderii fisierului cu noi articole. Fisierele n acces direct sunt specificate cu clauzaRandom care, n absenta lui mod, reprezinta optiunea implicita si care n lipsa argumentului accespermite deschiderea si consultarea fisierului n ordinea : Read/Write ; Write-only ; Read-only.Daca mod este specificat prin clauza Binary , este deschis un fisier binar, care este de fapt unfisier n acces direct n care toate articolele au lungimea de un octet.

    Argumentul nrfis este o constanta sau expresie ntreaga cu valori cuprinse ntre 1 si 511,numarul respectiv fiind asociat fisierului deschis cu instructiunea Open si care este utilizat detoate celelalte instructiuni de I/O care pe parcursul executiei programului fac referire la fisierul

    numefis.

    22

  • 8/3/2019 Elemente de Visual Basic

    23/37

    Argumentul optional recl reprezinta lungimea nregistrarii si poate fi un ntreg cuprins ntre 1si 32767. In cazul fisierelor n acces direct reclspecifica lungimea unui articol (pentru fisierele des-chise cu clauza Binary acest argument, daca exista, este ignorat), iar pentru fisierele secventialereclspecifica marimea zonei tampon, marime care determina viteza de transfer a datelor. Valorileimplicite pentru recl sunt 128 pentru fisierele n acces direct si 512 pentru fisierele secventiale.

    Argumentele acces si lock sunt specifice lucrului n retea sau n medii multitasking, dacasistemul de operare permite acest lucru si daca fisierele respective sunt accesate simultan de maimulti ultilizatori, sau de alte programe. Pentru argumentul acces sunt permise clauzele Read ,Write si Read Write , iar pentru argumentul lock clauzele admise sunt Shared , Lock Read ,Lock Write si Lock Read Write .

    In majoritatea cazurilor, instructiunea Open este utilizata pentru deschiderea unor fisiere exis-tente, nsa daca numefis nu exista, acesta va fi creat, exceptie facand tentativa de deschidere aunui fisier inexistent cu clauza Input , care este semnalata ca o eroare. O situatie deosebita apare

    n cazul utilizarii clauzei Output, cand daca numefis exista, acesta este distrus si apoi recreatsub acelasi nume si pozit ionat pentru scriere pe primul articol. Daca numefis exista si este dejadeschis de un alt proces si modul de acces specificat n instructiune nu este permis, va fi generatun mesaj de eroare.

    Un fisier deschis cu una din clauzele Input , Random , sau Binary , poate fi exploatat peparcursul executiei programului folosind si alte valori pentru nrfis, definite tot cu ajutorul unorinstructiuni de tip Open , fara ca n prealabil fisierul sa fie nchis. Daca nsa fisierul este deschiscu clauzele Output sau Append , el va trebui mai ntai sa fie nchis si abia ulterior, printr-o nouainstructiune Open, sa i se asocieze un alt numar, daca este necesar.

    Operatia de nchidere a fisierelor se face cu instructiunea :

    Close [[#]nrfis1 [, [#]nrfis2] ... ]In urma utilizarii acestor instructiuni nceteaza orice asociere ntre nrfis si numefis, plasandu-setotodata o marca de sfarsit de fisier (end-of-file) dupa ultimul articol. Utilizarea instructiuniiClose fara argumente are ca efect nchiderea tuturor fisierelor deschise. Acelasi rezultat esteobtinut si cu ajutorul instructiunii Stop care termina executia programului si instructiunii Endcare termina executia programului si transfera totodata controlul interpretorului de comenzi.

    Inchiderea tuturor fisierelor poate fi realizata si cu comenda Reset , care goleste totodata sizona tampon a sistemului. Efectul este identic cu cel al instructiunii Close , daca fisierele se aflape disc.

    Unui fisier i se poate schimba numele cu ajutorul instructiunii :Name numefis1 AS numefis2

    unde numefis1 este numele vechi, iar numefis2 este noul nume de fisier. Un fisier poate fi stersde pe disc cu comanda :

    Kill numefis

    In ambele comenzi mentionate numefis trebuie sa fie de tip sir de caractere si poate contine caleade accesare a fisierului.

    Daca utilizatorul doreste sa afle urmatorul numar de fisier care poate fi utilizat de o instructiuneOpen , poate folosi funct ia:

    FreeFile[({ 0 | 1 })]Daca este folosit argumentul 0 functia returneaza un numar ntre 1 si 255, iar daca este folositargumentul 1 ea returneaza un numar ntre 256 si 511.

    Pentru a asigura o prelucrare corecta si completa a informatiilor continute ntr-un fisier,

    23

  • 8/3/2019 Elemente de Visual Basic

    24/37

    utilizatorul are la dispozitie o serie de functii care sa-i furnizeze informatii privind lungimea fisieruluideschis, pozitia curenta n fisier, sau pozitia marcii de sfarsit de fisier.

    Lungimea n octeti a unui fisier deschis este data de funct ia:LOF(nrfis)

    unde nrfis este numarul asociat fisierului prin instructiunea Open .Pozitia curenta ntr-un fisier deschis este returnata de funct ia:

    Loc(nrfis)

    In cazul fisierelor n acces direct, functia evalueaza numarul ultimei nregistrari scrise sau cititedin momentul deschiderii fisierului, iar n cazul fisierelor secventiale ea returneaza pozitia curentan fisier sub forma unui multiplu ntreg de 128 octeti. Pentru fisierele binare functia furnizeazapozitia ultimului octet scris sau citit.

    Pozitia care urmeaza ntr-un fisier este data de funct ia:Seek(nrfis)

    In cazul fisierelor n acces direct, functia returneaza numarul nregistrarii care urmeaza ultimeioperatii de scriere sau citire. Pentru celorlalte tipuri de fisiere este returnata pozitia octetuluincepand cu care poate fi procesata o operatie de I/O.

    Deoarece orice tentativa de a citi dintr-un fisier secvential dincolo de marca de sfarsit de fisiereste semnalata ca eroare de sistem, cu consecinta imediata a ntreruperii programului, utilizatorulare nevoie de o functie care sa-l informeze cand este citit ultimul articol din fisier. In acest scoppoate fi utilizata funct ia :

    EOF(nrfis)

    care returneaza valoarea True , daca urmatorul articol ce urmeaza a fi citit din fisier este marcade sfarsit de fisier, sau valoarea False n caz contrar.

    In toate cele patru functii amintite mai sus, nu este necesar ca argumentul nrfis sa fie precedatde simbolul (#).

    Instructiunile de I/O prin intermediul carora sunt accesate fisierele secventiale sunt celecunoscute din versiunile mai vechi ale limbajului Basic, fisierele ca atare fiind de tip text si pot ficreate n ultima instanta si cu un banal editor de texte.

    Pentru citirea datelor pot fi utilizate instruct iunile :Input #nrfis, listvar

    Line Input #nrfis, varsir

    iar pentru citirea unui numar n de caractere dintr-un fisier poate fi folosita functia :Input(n, [#]nrfis)

    Cu instructiunea Input # sunt atribuite valori de tip numeric sau de tip sir de caractere vari-abilelor din varlist. La citire ghilimelele (") care delimiteaza sirurile de caractere sunt ignorate.Datele citite trebuie sa respecte ordinea si tipul variabilelor din lista. Daca o variabila este de tipnumeric, iar valoarea citita este de alt tip, variabilei i se atribuie valoarea zero. Citirea marcajuluide sfarsit de fisier produce o eroare. Instructiunea Line Input # citeste succesiv caracterele depe o linie a fisierului, pana cand este ntalnit caracterul CR . Rezultatul citirii, mai putin secventaCR/LF , este atribuit variabilei de tip sir de caractere varsir. Spre deosebire de instructiuneaLine # , functia Input returneaza orice caracter citit, inclusiv virgule, ghilimele ("), spatiile (),caracterele speciale LF si CR , etc.

    Scrierea articolelor ntr-un fisier secvential poate fi realizata utilizand una din instructiunile :Write #nrfis, [listexpr]

    24

  • 8/3/2019 Elemente de Visual Basic

    25/37

    Print #nrfis, [listexpr][{ ; | , }]In vederea unei exploatari ulterioare a fisierului cu o instructiune de tip Input # , se recomandautilizarea formei Write # , deoarece n acest caz valorile nregistrate sunt separate cu delimitatorisub forma de virgule, iar sirurile de caractere sunt incluse ntre ghilimele ("), ultimele caractereinserate pe linie fiind ntotdeauna secventa CR/LF . Argumentele instructiunii Print # coincidcu cele ale metodei Print , ele fiind descrise la pag. 19. Daca listexpr lipseste, iar nrfis esteurmat de o virgula, n fisier este lasata o linie libera.

    Instructiunile de I/O pentru fisierele n acces aleator sunt esential diferite de celementionate mai sus, deoarece toate articolele continute trebuie sa aiba aceeasi lungime. Fiecaruiarticol i poate fi asociat astfel un numar de ordine , care permite identificarea pozitiei sale ncadrul fisierului si prin intermediul caruia pot fi accesate direct informatiile continute n campurilearticolului. Structura unui articol poate fi descrisa utilizand date de tip utilizator , definite cuinstructiunea Type ... End Type si declarate cu una din instructiunile Dim , Redim , Static ,

    Public , Private . Elementele (campurile) unei astfel de structuri pot fi de orice tip acceptatde sistem (Integer , Long , Single , Double , String , etc.), unica restrictie fiind aceea ca elenu pot avea lungimi variabile. In cazul sirurilor de caractere, este necesara precizarea n modobligatoriu a lungimii acestora sub forma String*n . Lungimea totala a articolului, furnizata defunctia Len , va fi specificata n argumentul recl din instructiunea Open (v. pag. 22).

    Instructiunile cu ajutorul carora sunt citite, respectiv scrise, articolele unui fisier n acces directau forma generala :

    GET [#]nrfis, [nrart], numevar

    PUT [#]nrfis, [nrart], numevar

    Aici nrart reprezinta numarul articolului procesat din fisier, n absenta fiind luat n considerare

    articolul imediat urmator celui accesat ntr-o operatie anterioara. Argumentul numevareste folositpentru a specifica numele variabilei de tip utilizator n care este memorat articolul.

    Aceste doua instructiuni pot fi folosite si n cazul fisierelor n acces binar , cu deosebireaca nrart specifica acum numarul octetului cu care ncepe procesarea, iar restrict ia cu privire lautilizarea sirurilor de caractere avand lungime fixa si pierde sensul, deoarece datele nu mai au ostructura anume.

    5 Metode si proprietati grafice n Visual Basic

    In cele ce urmeaza, de fiecare data cand se face referinta la un obiect, daca nu se specifica

    altfel, se ntelege ca este vorba de o forma sau o caseta cu imagine, n lipsa considerandu-se caeste chiar forma curenta.

    5.1 Metode grafice

    Pentru stergerea textului si a graficii n cursul executiei poate fi utilizata metoda :[obiect.]Cls

    Controalele plasate pe forma n faza de proiectare nu sunt afectate. Ca urmare a apelului metodeiCls , cursorul grafic este adus n pozitia (0, 0) .

    Desenarea sau stergerea unui punct pe un obiect se poate realiza cu instructiunea :

    [obiect.]PSet [Step] (x, y) [, culoare]

    25

  • 8/3/2019 Elemente de Visual Basic

    26/37

    unde (x, y) reprezinta coordonatele unde se va desena punctul, iar culoare este un ntreg lungcare reprezinta culoarea RGB n care va fi desenat punctul. Daca este omis ultimul argument,PSet foloseste valoarea curenta a proprietatii ForeColor. Pentru a sterge un punct, valoareaargumentului culoareva fi cea a proprietatii BackColor. Pentru specificarea culorii pot fi folositesi functiile QBColor si RGB. Cuvantul cheie Step, daca figureaza n instructiunea de mai sus,indica faptul ca coordonatele (x, y) sunt relative n raport cu pozitia curenta a cursorului grafic.

    Dimensiunea punctului depinde de valoarea proprietatii DrawWidth . Daca aceasta este 1 , vafi activat un singur pixel, iar daca ea este mai mare ca 1 va fi trasat un cerc centrat pe punctulde coordonate (x, y) avand diametrul egal cu numarul de pixeli specificat. Modul n care estedesenat punctul pe fundal depinde de setarile proprietatilor DrawMode si DrawStyle . Ca urmarea apelului metodei PSet , cursorul grafic este deplasat n pozit ia (x, y) .

    O metoda care permite trasarea de linii si dreptunghiuri este :[obiect.]Line [[Step] (x1, y1 )] - [Step] (x2, y2) [,[culoare][,[B|BF]]]

    Perechea (x1, y1 ) desemneaza coordonatele punctului din care ncepe trasarea liniei, sau alecoltului din stanga sus a dreptunghiului, iar (x2, y2) indica coodonatele punctului unde se terminalinia, sau ale coltului din dreapta jos ale dreptunghiului ; daca (x1, y1 ) lipseste, atunci suntluate n considerare implicit coordonatele ultimului punct desenat. Argumentul optional B sauBF indica faptul ca se va desena un dreptunghi gol sau plin n culoarea setata de argumentulculoare sau, daca acesta lipseste, n culoarea setata anterior sau n cea implicita a proprietatiiForeColor. Daca figureaza argumentul B, dreptunghiul va fi umplut cu modelul si coloareastabilite de proprietatile FillStyle si FillColor, nsa indiferent de valoarea lui FillColor,daca FillStyle are valoarea implicita (adica 1), dreptunghiul trasat este gol. Cuvantul cheieStep, daca este utilizat, indica faptul ca sunt specificate coordonate relative n raport cu ultimul

    punct desenat.Ordinea ultimelor argumente n instructiunea de mai sus trebuie pastrata, asa ncat daca unul

    nu este necesar, el trebuie nlocuit cu o virgula. Latimea n pixeli a liniei depinde de valoareaproprietatii DrawWidth , iar modul n care aceasta este desenata pe fundal depinde de setarileproprietatilor DrawMode si DrawStyle . Ca urmare a apelului metodei Line , cursorul grafic estedeplasat n pozit ia (x2, y2) .

    Instructiunea care permite trasarea unei curbe (cerc, elipsa, sau arc) este :[obiect.]Circle [Step] (x, y), raza [,[culoare][,[start][,[stop][,aspect]]]]

    Primele trei argumente au o semnificatie evidenta, care nu mai necesita explicatii. Argumentelestart si stop reprezinta valorile exprimate n radiani ale unghiurilor de la care se ncepe, respectiv

    la care se va opri trasarea arcului de curba, valorile implicite ale acestor argumente fiind 0 si2, ceea ce corespunde desenarii unei curbe nchise. Daca aceste argumente au valori negative,extremitat ile corespunzatoare arcului de curba vor fi unite de centrul (x, y) cu linii dreapte.Argumentul optional aspect reprezinta raportul dintre semiaxa mare si semiaxa mica, valoareaimplicita a acestuia fiind unitatea, ceea ce corespunde trasarii unui cerc.

    Observatiile anterioare referitoare la ordinea argumentelor optionale, la modul de trasare alliniilor specificat cu proprietatile DrawWidth, DrawMode si DrawStyle, precum si la caracteristicilede umplere (doar pentru figuri nchise!) date de proprietatile FillColor si FillStyle, si pas-treaza valabilitatea. Prin folosirea metodei Circle , cursorul grafic este deplasat n punctul decoordonate (x, y) .

    26

  • 8/3/2019 Elemente de Visual Basic

    27/37

    5.2 Specificarea culorilor

    Proprietatile

    [obiect.]BackColor [= culoare][obiect.]ForeColor [= culoare]

    returneaza sau seteaza culoarea fondului si prim planului obiect-ului sau, daca acesta nu figu-reaza explicit, a formei curente. Identificatorul culoare este un ntreg lung care desemneazaculoarea din schema RGB specifica sistemului WINDOWS si are valori numerice cuprinse ntre0 si 16777215 (&HFFFFFF). Specificarea culorii poate fi facuta folosind constante numerice (deobicei exprimate n sistemul hexazecimal), constante simbolice caracteristice sistemului, sau cuajutorul functiilor QBColor ori RGB. Ultimul octet precizeaza proportia de rosu, penultimul preci-zeaza proportia de verde, iar antepenultimul pe cea de albastru, valorile individuale fiind cuprinsentre 0 si 255 (&HFF). Daca primul octet nu contine valoarea 0, sunt folosite culorile predefinite

    ale sistemului Visual Basic.In faza de proiectare BackColor este setata la valoarea implicitavbWindowBackground, iar ForeColor la valoarea vbWindowText.

    Prin atribuirea unei valori proprietatii BackColor, este sters atat textul, cat si grafica de pe oforma sau o caseta cu imagine, n schimb setarea proprietatii ForeColor lasa nemodificate textulsi imaginea existente, aceasta avand efect doar asupra operatiilor ulterioare.

    Pentru a afla valoarea RGB a culorii unui punct, poate fi apelata metoda :[obiect.]Point (x, y)

    care returneaza valoarea 1 daca punctul se gaseste n afara formei sau casetei cu imagine.

    Functia care returneaza sub forma unui ntreg lung codul RGB asociat unui index de culoareeste :

    QBColor (index)unde argumentul indexeste un ntreg cuprins ntre 0 si 15 . Corespondenta dintre valorile numericesi culorile aferente este prezentata n Tab. 8 si coincide cu numerotarea folosita n limbajele de

    Valoare Culoare Valoare Culoare

    0 negru 8 gri1 albastru 9 albastru deschis2 verde 10 verde deschis3 cyan 11 cyan deschis4 rosu 12 rosu deschis

    5 magenta 13 magenta deschis6 galben 14 galben deschis7 alb 15 alb intens

    Tabelul 8: Culorile asociate valorilor numerice ale argumentului functiei QBColor

    programare care folosesc sistemul de operare DOS.

    O alta functie, avand un efect similar, este :RGB (rosu, verde, albastru)

    unde rosu, verde, albastru sunt numere ntregi cu valori cuprinse ntre 0 si 255 care indica

    proportiile n care culorile primare respective alcatuiesc paleta ce urmeaza a fi afisata pe ecran.

    27

  • 8/3/2019 Elemente de Visual Basic

    28/37

    Culoare rosu verde albastru Cod RGB

    negru 0 0 0 &H000000

    albastru 0 0 255 &H0000FFverde 0 255 0 &H00FF00cyan 0 255 255 &H00FFFFrosu 255 0 0 &HFF0000magenta 255 0 255 &HFF00FFgalben 255 255 0 &HFFFF00alb 255 255 255 &HFFFFFF

    Tabelul 9: Valorile numerice ale argumentelor functiei RGB pentru culorile standard

    In Tab. 9 sunt indicate valorile numerice ale acestor argumente pentru culorile standard, precumsi codurile RGB corespunzatoare.

    5.3 Proprietati grafice

    Setarea sau determinarea pozitiei cursorului grafic la un moment dat poate fi realizata folosindproprietatile :

    [obiect.]CurrentX [= x]

    [obiect.]CurrentY [= y]

    unde x si y sunt numere care specifica valorile pentru coordonata orizontala si cea verticala. Cu

    exceptia coordonatelor definite de utilizator, originea axelor este plasata n coltul din stanga susa unui obiect, sensul pozitiv de crestere fiind de la stanga la dreapta si de sus n jos. Coordo-natele sunt masurate n twips, sau n unitati de masura stabilite cu proprietatile ScaleHeight,ScaleWidth, ScaleLeft, ScaleTop si ScaleMode.

    Folosirea oricareia din metodele grafice implica modificarea automata a valorilor proprietatilorCurrentX si CurrentY n conformitate cu regulile descrise.

    5.3.1 Procedee de trasare

    Proprietatea care seteaza sau returneaza largimea n pixeli a unei linii drepte sau curbe este :[obiect.]DrawWidth [= larg]

    unde larg reprezinta o expresie numerica cu valori cuprinse ntre 1 si 32767 , valoarea sa implicitafiind unitatea. Daca larg> 1 , valorile 1 4 atribuite proprietatii DrawStyle sunt ignorate, fiindtrasata ntotdeauna o linie continua.

    Setarea sau aflarea stilului n care sunt trasate liniile cu metodele grafice este realizata cuajutorul proprietat ii:

    [obiect.]DrawStyle [= stil]

    Aici stileste un numar care precizeaza tipul de linie care urmeaza a fi trasata : continua (stil= 0),ntrerupta (stil = 1), punctata (stil = 2), diverse alte combinatii (2 < stil 6). Implicit, liniatrasata este ntotdeauna continua, ca si atunci cand valoarea proprietatii DrawWidth este diferitade unitate.

    28

  • 8/3/2019 Elemente de Visual Basic

    29/37

    Valoarea care determina modul n care se prezinta rezultatul aplicarii unei metode grafice,este setata sau aflata cu ajutorul proprietat ii:

    [obiect.]DrawMode [= mod]

    unde mod este un ntreg cuprins ntre 1 si 16 care codifica efectele vizulale care pot fi obtinuteprin compararea logica, pixel cu pixel, a culoriilor obiectelor desenate n cursul executiei cu cea afundalului existent.

    5.3.2 Procedee de umplere

    O figura nchisa trasata cu una din metodele grafice Circle sau Line poate fi umpluta cu oculoare specificata de proprietarea,:

    [obiect.]FillColor [= culoare]

    Aici culoareeste un ntreg lung care cont ine codul RGB al culorii dorite. Specificarea culorii poate

    fi facuta folosind constante numerice, constante simbolice caracteristice sistemului Visual Basic,sau cu ajutorul functiilor QBColor ori RGB. Implicit, culoarea setata are valoarea zero, ceea cecorespunde culorii negre. Cu exceptia formelor, valorile setate cu proprietatea FillColor suntignorate, daca proprietatea FillStyle are valoarea implicita (unitatea).

    Modelul care poate fi folosit pentru umplerea unei figuri este precizat de proprietatea :[obiect.]FillStyle [= stil]

    unde stil este un ntreg care precizeaza modelul de umplere cu culoarea stabilita de proprietateaFillColor : plin (stil = 0), transparent (stil = 1), linii orizontale (stil = 2), linii verticale(stil= 3), linii oblice nclinate spre stanga (stil= 4), linii oblice nclinate spre dreapta (stil= 5),linii ncrucisate drepte (stil = 6), linii ncrucisate oblice (stil = 7). Valoarea implicita a variabilei

    stil este unitatea. Daca modelul specificat este cel transparent, proprietatea FillColor esteluata n considerare doar n cazul formelor.

    5.4 Sistemul de coordonate

    Unitatea de masura folosita implicit n sistemul Visual Basic pentru dimensionare, deplasare,sau pentru trasarea unor figuri este twip-ul, care reprezinta 1/20 dintr-un punct tipografic, ceeace nseamna ca 1 inch are 1440 twips, respectiv 1 centimetru are 567 twips. Dimensiunile fizicementionate se refera la marimele obiectelor tiparite la imprimanta si nu la cele vizualizate pemonitor, unde dimensiunea ecranului si rezolutia folosita poate conduce la alte valori.

    Sistemul de coordonate reprezinta o retea bidimensionala care permite localizarea pozitiei unuipunct pe un obiect (forma, caseta cu imagine, imprimanta) folosind o pereche de coordonateavand forma generala :

    (x, y)

    Valoarea x corespunde localizarii unui punct pe axa Ox care, daca nu se specifica altfel, areoriginea la extremitatea din stanga a obiectului si sensul de masurare pozitiv de la stanga ladreapta. Valoarea y precizeaza localizarea unui punct pe axa Oy care implicit are originea laextremitatea superioara a obiectului si sensul de masurare pozitiv de sus n jos. In Visual Basicexista posibilitatea de a modifica originea si directiile axelor, precum si unitatile de masura folositeatat simultan, cat si individual pe fiecare din axe.

    Stabilirea unitatilor de masura ale coordonatelor pe axe poate fi realizata folosind proprietatea :

    [obiect.]ScaleMode [= unit]

    29

  • 8/3/2019 El