Documente Academic
Documente Profesional
Documente Cultură
Laborator Pce Edusoft
Laborator Pce Edusoft
EduSoft 2005
Redactor: Iulian Marius FURDU
004.42
Editura EduSoft
600065 Bacău, str. 9 Mai, nr. 82, sc. C, ap. 13
E-mail: contact@edusoft.ro, Web: www.edusoft.ro
ISBN 973-87496-1-1
2
Bogdan Pătruţ (coordonator)
Andreea Schmidt • Anca Ioana Capră • Mirela Vărnav
Claudiu Căuneac • Cătălin Ciocoiu • Ionel Butucaru
PROGRAMAREA
CALCULATOARELOR
ELECTRONICE
Îndrumar pentru laborator
EduSoft 2005
3
Bogdan Pătruţ
Bogdan a absolvit Facultatea de Informatica din Universitatea "Al. I. Cuza" Iaşi în
1994. Este lector drd. la Universitatea din Bacau, Catedra de Matematică-Fizică-
Informatică, unde ţine cursuri de Programarea calculatoarelor electronice, Sisteme
expert de gestiune şi Sisteme informatice de asistare a deciziei la studenţii de la
contabilitate şi informatică de gestiune. A publicat 11 cărţi (9 la Editura Teora), a
publicat peste 25 articole ştiinţifice de specialitate şi este coautor al unei invenţii
brevetate OSIM şi a unui contract de cercetare CNCSIS. Este pasionat de
informatică, pictură şi familia sa. Adresa e-mail: bogdan@ub.ro
Andreea Schmidt
Andreea a absolvit Colegiul National “Gh.Vranceanu”, profilul matematica-
informatica, intensiv engleza. In prezent este studenta la Universitatea din Bacau,
specializarea Contabilitate si Informatica de Gestiune, anul II. Este pasionata de sport,
literatura si nu in ultimul rand de informatica. Poate fi contactată la adresa
andreea_schmidt@yahoo.com
Ciocoiu Catalin
Catalin este absolvent al Colegiului Teoretic “Henri Coanda”, sectia matematica-
informatica. In prezent este student la Universitatea Bacau, Facultatea de Stiinte
Economice, sectia Contabilitate si Informatica de Gestiune. Este pasionat de
informatica si tot ce este nou in domeniul IT&C. Adresa de e-mail este:
ciocoiu_catalin@k.ro
Ionel Butucaru
Iubeste viata, karate-ul, natura, stiintele exacte si jocurile PC. Ionel a
terminat liceul “Dumitru Mangeron” la matematica-fizica. In prezent este
student la Univesitatea din Bacau, la Contabilitate si Informatica de
Gestiune. Un campion neintrecut la mancare, dar totusi reuseste sa se
mentina in forma.
Adresa sa de e-mail este: ionutz84_sos@yahoo.com.
4
Cuprins
Mărturisire 6
Bibliografie 166
5
Mărturisire
Am început această carte ca pe o glumă. În stilul vorbelor pe care le arunc de multe ori la curs, ca
să-i încurajez pe studenţii mei să lucreze (sau alteori ca să-i sperii puţin!), am spus la una dintre
întâlnirile mele cu studenţii anului II Contabilitate şi Informatică de Gestiune, 2005: "Nu vreţi să
mă ajutaţi să scriem o culegere de aplicaţii în Visual Basic? Cine mă ajută va lua 10 la examen.".
Nu (cred că) era prima dată când lansasem o asemenea invitaţie studenţilor mei, dar de fiecare
dată se întâmpla la fel: nimeni nu era interesat, din diverse motive: fie că nu doreau pur şi simplu
să ia 10, fie că nu doreau să muncească, fie că nu credeau că sunt ei în stare să realizeze aşa ceva
(mai ales că de abia începusem să predau materia respectivă), fie că nu credeau că mă voi ţine de
cuvânt, fie că nu le repetam sau nu le spuneam într-un mod convingător acest lucru. Nu ştiu dacă
eu însumi credeam că pot face o carte împreună cu studenţii mei. Mărturisesc faptul că nu credeam
că se poate aşa ceva în Universitatea Bacău. Dar iată că în anul II CIG din 2005 am avut surpriza
să întâlnesc tineri ambiţioşi, conduşi de dorinţa de a lua 10 (nu ştiu), sau de pasiunea pentru ceea
ce se întrezarea a fi programarea în Visual Basic (aş vrea să fie aşa). Cu ei am realizat această
culegere de probleme. Ea va servi, în primul rând, colegilor lor, nu puţini la număr, care au picat
examenul şi care au timp la dispoziţie o vară întreagă să o studieze. Ar putea fi considerat un gest
frumos din partea celor mai buni, pentru cei mai puţini buni.
De fapt, această culegere e scrisă de ei. Eu nu am făcut decât sî o tehnoredactez, să mai corectez pe
ici pe colo şi, fireşte, să coordonez acest colectiv tânăr. Aşa că, daţi-mi voie să mă numesc
coordonator al cărţii (în fond asta ar trebui să fie un profesor, nu-i aşa?).
În rest, autorii au 19-20 ani şi sunt tineri ca şi voi, cândva "luptători" cu programarea în Visual
Basic şi poartă nume obişnuite: Andreea, Anca, Mirela, Cătălin, Claudiu şi Ionel. Dar vă asigur
că sunt nişte tineri care mi-au făcut o impresie bună neobişnuită!
Bogdan Pătruţ,
martie 2005
6
Introducere in Visual Basic prin exemple (Bogdan)
După aceasta, Visual Basic va arăta ca în figura următoare, în care am pus în evidenţă principalele
elemente care ne interesează pentru dezvoltarea unor aplicaţii simple.
7
1. Remarcaţi că sunteţi în faza de
2. Butoanele de
pornire şi
6. Controalele ce vor fi
amplasate pe forma ta şi vor 7. Tabelul cu proprietăţţile
fi programate de tine formei sau ale controalelor
de pe ea
Aşadar, urmăreşte cu atenţie cele 6 zone din mediul VB5, fiecare având importanţa ei şi mai târziu
vei înţelege mai bine la ce ajută fiecare.
Deocamdată îţi spun că un program (aplicaţie sau proiect) VB este compus din una sau mai multe
forme. Acestea sunt ferestre ca cele din Windows, aşa cum arată şi forma ta Form1, din centrul
ecranului (vezi zona 4). Deocamdată vom realiza împreună programe ce vor folosi doar o singură
formă, dar dacă te vei descurca bine vom trece şi la programe cu mai multe forme. Structura
proiectului tău se prezintă în zona 5. Pe forme pot fi amplasate diferite obiecte, precum butoane de
comandă, casete de text, liste derulante sau tot felul de alte elemente de interfaţă pe care le-ai
întâlnit în mai toate aplicaţiile din Windows (vezi zona 6). Vom numi aceste obiecte controale. Ele,
ca şi forma, dealtfel, pot fi personalizate, stabilind diferite valori pentru proprietăţile lor, precum
culoare, font, poziţie (vezi zona 7). Pentru ca ele să acţioneze în sensul dorit de tine, va trebui să le
ataşăm anumite proceduri sau subrutine, adică mici bucăţi de cod, adică de program, scrise în
Visual Basic.
Dacă vrei să faci trecerea de la vizualizarea interfeţei la vizualizarea codului şi înapoi, va trebui să
apeşi pe butoanele din zona 3.
Aplicaţia ta este deja funcţională, dacă o vei porni:vei avea o fereastră simplă, forma Form1, pe
care o poţi muta, redimensiona şi închide, ca orice fereastră din Windows. Deocamdată eşti în faza
de proiectare (design), iar de acest lucru îţi poţi da seama în mai multe feluri. În zona 1 apare scris,
printre altele, cuvântul "design". Pe de altă parte, Form1 are o serie de puncte pe ea, care nu sunt
altceva decât punctele fixe ale unei grile, care te poate ajuta la amplasarea mai exactă a controalelor
pe formă. În plus, în zona 2, butonul Start (ce seamănă cu butonul Play de la orice casetofon) este
activ, pe când celelalte două nu.
Dacă vrei să porneşti aplicaţia, trebuie să acţionezi pe butonul Start sau pe tasta F5. Cuvântul
"design" din zona 1 va fi înlocuit de cuvântul "run" (deci aplicaţia rulează), grila de pe Form1 va
dispărea, iar butonul Start va deveni inactiv, dar se vor activa celelalte două butoane (ne interesează
8
butonul End). Abia acum poţi muta sau redimensiona fereastra ta, iar dacă vrei să opreşti
programul, vei apăsa pe butonul End din zona 2 sau pe X-ul din colţul dreapta-sus al ferestrei
Form1.
Hai să facem ca atunci când apeşi pe butonul acesta să apară un mesaj, cu textul "Bună ziua!". Ei
bine, ca să determinăm calculatorul/programul să se comporte aşa, va trebui să ştii că atunci când
acţionezi într-un fel sau altul (de exemplu prin click de mouse) pe un control sau pe o formă, VB
înţelege că ai produs un anumit eveniment. Un asemenea eveniment se numeşte Click şi se produce
atunci când tu apeşi simplu cu mouse-ul pe butonul Command1. Pentru a-l face pe calculator să
reacţioneze la Click-ul utilizatorului pe butonul Command1, va trebui să scriem o subrutină, numită
chiar Command1_Click. Aceasta va fi o bucată de cod în VB ce va conţine o secvenţă de
instrucţiuni, prin care se precizează ce anume trebuie să execute calculatorul/programul, de fiecare
dată când se execută Click pe butonul Command1.
Subrutina va începe cu Private Sub urmată de numele ei (Command1_Click) şi se va încheia cu End
Sub.
9
Pentru a o scrie, trebuie ca programul tău să fie oprit. Apoi vei alege din zona 2 primul buton (View
Code) şi vei face click pe el. Deasupra paginii albe care va apărea stau două liste (în prima scrie
(general), iar în a doua (declarations)). Alege din prima controlul cu pricina, adică butonul de
comandă Command1, iar în a doua va apărea automat cel mai frecvent eveniment asupra unui buton
de comandă, adică evenimentul Click (dacă vei derula lista, vei observa că sunt mult mai multe
evenimente acolo, dar pe tine deocamdată doar Click te interesează).
După aceea scrie acest text, ca în figura de mai jos, apasă pe View Object (în zona 2) şi vei vedea că
butonul reacţionează la apăsarea ta.
La apăsarea butonului, vei obţine următoarea casetă de mesaj (denumirea procedurii MsgBox
tocmai de acolo vine), în care vbInformation este o constantă numerică ce simbolizează semnul de
informaţie din casetă. Opreşte programul şi încearcă şi vbExclamation sau vbCritical pentru a vedea
efectul.
Dacă eşti în faza de proiectare şi vrei să ajungi mai repede la codul asociat unui anumit obiect, poţi
să faci dublu-click pe respectivul obiect; de exemplu, dacă ai dat View Object şi execuţi dublu-click
pe butonul Command1, vei ajunge la subrutina Command1_Click, fără să mai acţionezi tu pe View
Code (în zona 2).
10
3. Un salut special pentru tine!
Vom încerca să complicăm puţin exemplul anterior, astfel încât VB să te salute special pe tine sau
pe cineva, al cărui nume să fie scris într-o casetă de text. Hai să amplasăm, aşadar, sub butonul
nostru o casetă de text. Priveşte zona 6 şi alege de acolo simbolul care conţine un "ab" (TextBox).
Desenează caseta de text sub butonul Command1 şi apoi denumeşte această casetă Persoana,
modificând proprietatea (Name) (prima din lista lui Text1). Şterge apoi conţinutul din interiorul
casetei de text, care era trecut cu valoarea Text1 la proprietatea Text a acestei casete de text.
Această casetă
de text se
numea Text1,
acum se
E momentul să ştii că dacă ai un obiect (formă sau control) care se numeşte X şi el are o
proprietatea P, pentru a face referinţă la valoarea proprietăţii P a obiectului X va trebui să notezi
acest lucru, în programul tău, prin X.P. Astfel, proprietatea Caption a butonului Command1 (care
are valoarea Salut) se notează prin Command1.Caption, iar proprietatea Text a casetei de text
Persoana prin Persoana.Text. Textul din interiorul casetei de text Persoana va trebui "adăugat" sau,
mai bine zis, alipit (concatenat) salutului nostru, din subrutina Command1_Click. Aşadar, pentru ca
să primim un salut pentru persoana al cărei nume va fi scris în caseta Persoana (în timpul
funcţionării programului), va trebui să modificăm subrutina Command1_Click astfel:
Ce se va obţine? Dacă porneşti programul şi scrii în caseta de text Diana, vei obţine, la apăsarea
butonului Command1 un salut special pentru Diana:
11
Aşadar, simbolul matematic + înseamnă, când este vorba despre texte, concatenare, adică alipirea
unor texte. Probabil ai observat deja că textele (şirurile de caractere) constante (precum "Bună ziua"
sau "Salutare") se scriu între ghilimele (şi nu apostrofuri, ca de exemplu în limbajul Pascal). Dacă
nu vei introduce nimic în caseta de text, atunci nu te aştepta decât la un salut ca cel de mai înainte.
Astfel, Persoana.Text va fi considerat şirul vid (fără nimic în el) şi va avea valoarea notată prin "".
De data aceasta, te rog să amplasezi pe forma ta trei casete de text (fără text în ele), fie ele
Operand1, Operand2 şi Rezultat (denumeşte-le aşa modificând proprietăţile Name de la fiecare),
precum şi patru butoane, pe care te rog să le denumeşti ButonPlus, ButonMinus, ButonOri şi
ButonSupra, pentru a avea nume mai sugestive pentru cele patru butoane corespunzătoare celor
patru operaţii aritmetice pe care vrem să le implementăm în programul nostru.
Modifică şi proprietăţile Caption de la fiecare din cele patru butoane, punând pe ele simbolurile +, -,
x şi :. Dacă ţi se pare că aceste simboluri sunt prea mici pentru butoanele pe care apar, nu ai decât să
te foloseşti de proprietatea Font şi să le măreşti sau să le evidenţiezi (cu Bold).
12
Ataşează primului buton, cel pentru adunare (ButonPlus) următoarea subrutină, care vrea să adune
numărul ce va fi scris în caseta Operand1 cu cel din caseta Operand2 şi să pună rezultatul în caseta
Rezultat.
Acum porneşte programul, introdu un număr în caseta Operand1, un altul în caseta Operand2, apasă
pe butonul de adunare şi... vei constata că numerele nu se adună corect.
Dacă observi cu atenţie, ele sunt considerate ca nişte texte care se "adună" precum textele, adică se
concatenează. Acest lucru este firesc, deoarece Visual Basic interpretează conţinuturile celor două
casete de text (Operand1 şi Operand2) ca fiind texte (şiruri de caractere sau date de tip String) şi
nicidecum numere. Pentru ca totul să meargă aşa cum ne-am propus, adică să adăugăm numere, va
trebui ca să convertim aceste texte la valorile numerice corespunzătoare, cu alte cuvinte să
"scoatem" ghilimelele de la "20" şi "45", pentru a obţine 20 şi 45, deci şi suma lor 65 şi nu 2045.
De "scoaterea" ghilimelelor se ocupă funcţia Val, iar de "punerea lor" se ocupă funcţia inversă ei,
numită Str. Corect ar fi să scriem aşa:
Rezultat.Text=Str(Val(Operand1.Text)+Val(Operand2.Text)), dar conversia de la valoarea
numerică la textul necesar casetei Rezultat se face automat, aşadar e suficient să înlocuim subrutina
greşită de mai sus cu cea corectă de mai jos:
13
Acum nu ne rămâne decăt să realizăm şi celelalte trei subrutine asemănătoare, pentru ButonMinus,
ButonOri şi ButonSupra:
Indiferent cum aţi notat Caption-urile de pe cele două butoane pentru înmulţire şi împărţire, când va
trebui să scrieţi codul veţi folosi * pentru înmulţire şi / pentru împărţire.
Totul pare acum OK, dar încearcă să împarţi un număr oarecare la 0! Vei obţine un mesaj de eroare,
apoi apasă pe End (şi nu pe Debug!). E normal, deoarece nu are sens împărţirea la zero. Aşadar,
trebuie să testăm dacă nu cumva se încearcă o împărţire la zero, iar dacă împărţitorul ar fi 0 să nu se
mai realitzeze împărţirea, ci să afişăm un mesaj de eroare, într-o casetă de mesaj.
sau, echivalent:
14
5. Butoane de opţiune şi cadre
Să începem un nou proiect, în care vom amplasa patru butoane de opţiune (Option Button):
Option1, Option2, Option3 şi Option4, ale căror Caption-uri vor fi respectiv feminin, masculin,
nefumator şi fumator. Dacă amplasaţi cele patru butoane de opţiune în cadrul formei, veţi observa,
la rularea programului, că nu puteţi alege două din ele simultan, cum ar fi feminin şi nefumător, dar
ar fi normal să se poată aşa ceva.
Atunci ştergeţi cele patru opţiuni şi desenaţi două cadre (Frame), în care veţi grupa căte două
opţiunile, iar cadrelor le veţi pune Caption-urile "Sex" şi respectiv "Fumator?", ca în figura
următoare. Mai mult, alegeţi valoarea True pentru proprietatea Value a lui Option1 şi a lui Option3,
deci pentru "feminin" şi "nefumator". De data aceasta, vom putea alege, de exemplu, o femeie
nefumătoare.. Mai adaugă şi un buton de comandă Command1 şi o casetă de text Text1, ca în figura
următoare:
15
Option Option
Option
Option
Command
Text1
Ne propunem în continuare să scriem subrutina care atunci când executăm click pe butonul
Command1 (cu Caption="Cel fel de om esti?") să primim răspunsul corespunzător în caseta de texte
Text1. De exemplu, pentru situaţia din figura anterioară ar trebui să obţinem "Esti o femeie
nefumatoare.".
Nu este greu, dacă folosim două instrucţiuni IF imbricate (una într-alta). De remarcat că primul
ELSE va corespunde ultimului IF ş.a.m.d.! Pentru a referi proprietatea Value pentru opţiunile
Option1, Option2 ş.c.l, vom scrie Option1.Value, Option2.Value etc. Acestea pot avea valori
boolene, deci pot fi True (adevărat) sau False (fals). Discuţia celor patru cazuri se va face mai întâi
după sex, iar apoi după faptul dacă persoana respectivă fumează sau nu.
Comentariile sunt scrise cu apostrof în faţă şi ele sunt ignorate de VB; au doar rolul de a ne face pe
noi să urmărim mai bine programul pe care l-am scris.
16
6. Casete de validare
Următorul proiect ne va spune ce pasiuni avem, după ce noi le vom selecta (bifa) dintr-un şir de
patru pasiuni disponibile: literatura, muzica, sportul şi excursiile. Acestea vor fi reprezentate de
patru casete de validare (Check Box), pe care le vom amplasa pe forma noastră şi se vor numi
Check1, Check2, Check3, respectiv Check4.
Să le păstrăm denumirile originale şi să le stabilim valorile pentru proprietăţile Caption ca fiind:
literatura, muzica, sportul şi, respectiv, excursiile. Completează forma cu un buton de comandă
(Command1, având Caption-ul "Ce pasiuni ai?"), precum şi cu o casetă de text Text1, fără text în
interiorul ei (Text=""). Caută proprietatea MultiLine pentru caseta de text Text1 şi stabileşte-i
valoarea la True, astfel încât textul va apărea acolo pe mai multe linii (dacă va fi cazul).
Când vei porni programul, vei constata că poţi alege 0, 1, 2, 3 sau chiar toate cele patru pasiuni,
ceea ce nu se putea în cazul butoanelor de opţiune. O altă deosebire între casetele de validare
(CheckBox) şi butoanele de opţiune (OptionButton) este că acestea din urmă aveau Value de tip
Boolean (cu False şi True), pe când casetele de validare au Value de tip Integer, cu una din valorile
0 = nemarcat, 1 = marcat, 2 = gri, inactiv. Aşadar, dacă vrem să spunem, de exemplu, că am marcat
(bifat) caseta de validare Check1, vom scrie Check1.Value=1.
17
Vrem ca la apăsarea butonului de comandă să ne apară în caseta Text1 un text de forma: "Pasiunile
tale sunt literatura, sportul,". Sunt prea multe posibilităţi de a selecta sau nu cele patru pasiuni (mai
precis sunt 16 variante), ca să facem o discuţie cu IF-THEN-ELSE, aşa că vom folosi patru IF-uri
(fără ELSE), pentru a vedea dacă fiecare din cele patru casete de validare este bifată sau nu. Daca
este, atunci Caption-ul ei va fi lipit unui şir de caractere T, iniţial vid.
Subrutina va fi:
7. Vector de controale
Programul anterior are un mic dezavantaj evident: apar patru instrucţiuni foarte asemănătoare scrise
una sub alta, iar dacă am avea 20 de pasiuni Check1... Check20, ar trebui să scriem practic o
instrucţiune de 20 de ori, cu mici modificări de numere de la un rând la altul. Mai firesc ar fi să
putem vorbi despre un vector de 4 sau 20 asemenea casete de validare, în loc de 4 sau 20 de casete
de validare distincte. Un vector grupează date de acelaşi fel, iar Visual Basic ne permite să grupăm
chiar şi controale de acelaşi fel (în principiu numerotarea indicilor se face de la zero şi se păstrează
în proprietatea Index a fiecărui control din vector, în parte). Cel mai simplu mod de a crea un vector
de controale este următorul:
amplasăm primul control şi-i dăm numele pe care vrem să-l aibă vectorul;
selectăm controlul şi îl copiem în Clipboard (Edit->Copy)
apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) şi răspundem afirmativ la întrebarea
dacă vrem să creăm un vector de controale.
În cazul nostru, vom amplasa prima casetă de validare, o vom numi Check, iar apoi cu o comandă
Copy şi 3 comenzi Paste vom crea restul elementelor din vector. Prima componentă a vectorului va
18
fi caseta Check(0) (are Index=0), iar celelalte Check(1), Check(2) şi Check(3). La componenta
Check(1) vom fi întrebaţi aşa şi vom răspunde prin Yes:
Acum putem să adăugăm şi celelalte controale (butonul Command1 şi caseta Text1), iar codul
butonului, pentru evenimentul Click, va fi următorul, mult mai elegant:
Check(0)
Check(1)
Comman
Check(2)
Check(3)
Text1
Deocamdată te rog să amplasezi în forma ta o listă simplă şi să scrii mai multe elemente în ea,
fiecare pe un singur rând. Aceste elemente vor fi nişte denumiri de fructe şi vor fi scrise în
proprietatea List, separate de Ctrl+Enter. La final, vei apăsa Enter.
Noi am scris următoarele valori: mere, pere, portocale, caise, ananas, visine,. cirese, prune, gutui,
zmeura, capsuni, piersici, dar lista ne afişează doar primele care încap şi automat creează o bară de
derulare, pentru a permite vizualizarea şi celorlalte elemente (itemi) din listă, în timpul rulării
programului:
19
Observă că fructele apare în ordinea în care au fost introduse de noi, dar poate vrei ca ele să apară în
ordine alfabetică. Pentru asta va trebui să modifici proprietatea Sorted a listei, din valoarea False în
valoarea True. Fructele vor apărea ordonate alfabetic (crescător) în timpul rulării programului. De
asemenea, dacă vrei să poţi alege mai multe fructe simultan, va trebui să schimbi valoarea
proprietăţii MultiSelect, de la 0 la 1 sau 2.
În continuare să facem un mic program care, la acţionarea listei prin click (mai precis a unui
element din ea, selectat sau nu), să ni se afişeze într-o casetă de text Text1 acel element. Trebuie să-
ţi spun că există proprietatea Text pe care o au listele şi care păstrează întotdeauna ultimul element
din listă pe care s-a făcut click. Astfel, dacă MultiSelect=0, atunci acesta este elementul selectat, dar
pentru MultiSelect=1 sau MultiSelect=2, va fi doar ultimul element pe care s-a executat Click, ce
poate fi selectat sau deselectat înapoi.
Iată programul:
20
End Sub
Lista Fructe
Acesta este
ultimul element
pe care s-a
executat Click
Caseta de
text Text1
În continuare micşorează puţin caseta de texte Text1, apoi amplasează între listă şi Text1 un buton
de comandă Command1, aşa cum se vede în figura de mai jos.
Şterge codul subrutinei List1_Click, apoi ataşează butonului Command1 şi evenimentului Click
următoarea subrutină:
Efectul va fi următorul: vei selecta mai multe fructe din listă, iar când vei apăsa pe buton, numărul
lor va apărea în caseta de text Text1.
21
Hai să-ţi explic cum funcţionează această subrutină. În primul rând, trebuie să ştii că numărul de
elemente dintr-o listă (de exemplu din lista Fructe) se stochează în proprietatea ListCount. Această
proprietate nu poate fi accesată în faza proiectării, din tabelul de proprietăţi, dar poate fi folosită de
programator în cod. Elementele listei se păstrează în proprietatea List, care este o proprietate de tip
vector (de şiruri de caractere) şi sunt numerotate începând de la 0. Aşadar, primul fruct din lista
noastră va fi Fructe.List(0), al doilea Fructe.List(1), al treilea Fructe.List(2) ş.a.m.d, iar cum
numărul lor este Fructe.ListCount, ultimul va fi Fructe.List(Fructe.ListCount-1).
Similară proprietăţii List este şi proprietatea Selected, care este tot un vector, de valori logice
(boolene), Fructe.Selected(i) = True însemnând că fructul (elementul) respectiv este selectat, iar
Fructe.Selected(i) = False însemnând că nu. Subrutina anterioară parcurge cu instrucţiunea FOR
lista Fructe şi, de fiecare dată când găseşte un element selectat, creşte cu o unitate variabila n (iniţial
aceasta fiind 0), iar la final depune valoarea n în caseta de text Text1, n reprezentând acum câte
elemente s-au selectat.
De asemenea, dacă amplasăm o casetă de text Text2 şi vrem ca să fie adăugat elementul din ea, la
click pe un buton Command2, va trebui să scriem subrutina:
Să amplasăm în forma noastră aceste controale (Command2, Text2), precum şi încă o listă, numită
Salata, şi un nou buton de comandă numit Command3, ca în figura de mai jos.
22
caseta de
text Text2 Comman
noua listă
lista Fructe Salata
Vrem ca la acţionarea butonului Command3, toate elementele care au fost selectate în lista Fructe să
fie trecute în lista Salata.
Ea funcţionează astfel: se parcurge lista Fructe şi fiecare element i care este selectat
(Fructe.Selected(i) = True) se adaugă listei Salata (prin Salata.AddItem Fructe.List(i)).
Iată şi rezultatul:
23
10. Un joc cu imagini şi cronometre
În continuare ne propunem să realizăm un joc simplu, în care trebuie să omorâm, prin click de
mouse, nişte muşte care apar în cinci zone ale formei noastre (în cele patru colţuri şi în centru).
Muştele apar la un anumit interval de timp, iar dacă nu le "strivim", vor dispărea după acelaşi
interval de timp. Dacă, însă, vom executa click pe ele, cât timp stau vii pe ecran, le vom omorâ,
vom câştiga un punct şi apoi vor dispărea.
Pentru a implementa un asemenea joc, avem nevoie de următoarele noi controale: imagini (Image),
pentru a reprezenta muştele, şi cronometre (Timer) pentru a ţine evidenţa intervalelor de timp şi a
apariţiei/dispariţiei muştelor). De fapt, chiar dacă jucătorul va avea impresia că apar mai multe
muşte, noi vom folosi cinci controale de tip Image, în care vom avea fie imaginea unei muşte vii, fie
a unei muşte moarte, fie nimic, cu sensul că în zona respectivă nu a apărut în acel moment nici o
muscă. De asemenea, vom folosi proprietatea Tag pentru a stoca starea muştelor: 0 = lipsă, 1 = vie,
2 = moartă. Proprietatea Tag este comună tuturor controalelor şi este folosită pentru a stoca o
informaţie suplimentară asociată respectivului control.
Vom folosi două fişiere cu imagini, numite "muscav.jpg" pentru musca vie, respectiv "muscam.jpg"
pentru cea moartă. Un control de tip Image are o proprietate Picture în care se stochează imaginea
propriu-zisă. Acolo trebuie încărcatî imaginea dintr-un fişier, folosind funcţia LoadPicture. Astfel,
dacă avem o muscă de indice Index, vom scrie Musca(Index).Picture =
LoadPicture(App.Path+"\muscav.jpg") pentru a încărca imaginea cu musca vie în Musca(Index).
App.Path semnifică calea aplicaţiei noastre, adică directorul în care am salvat proiectul nostru
Visual Basic.
Să începem proiectarea interfeţei jocului nostru: mai întâi amplasăm o imagine în centrul ecranului,
pe care o denumim Musca. Controlul de tip Image, respectiv cronometru arată astfel:
Apoi, aşa cum am multiplicat casetele de text dintr-o secţiune anterioară, vom multiplica imaginea
noastră, folosind Copy şi Paste, formând un vector de imagini, celelalte patru componente ale
vectorului fiind amplasate în colţurile formei. Astfel, prima imagine va avea Index-ul 0, iar celelalte
patru vor avea Index-ul 1, 2, 3 şi respectiv 4, aşa ca în imaginea de mai jos:
Musca(1)
Musca(2)
Musca(0)
24
Musca(3) Musca(4)
Apoi vom amplasa un cronometru în dreptul imaginii din centru, îl vom denumi Crono şi, cu Copy
şi Paste îl vom multiplica de 4 ori, creând un vector. Iată rezultatul:
Crono(1) Crono(2)
Crono(3) Crono(4)
Crono(0)
Aceste cronometre sunt un exemplu de controale "invizibile", în sensul că ele funcţionează fără ca
să ni se înfăţişeze în vreun fel anume, de aceea poziţia lor nici nu contează. Ele vor "dispărea"
imediat ce vom porni programul.
Cronometrele au o singură proprietate importantă numită Interval. Este intervalul de timp după care
intră în acţiune. După fiecare Interval milisecunde apare evenimentul Timer asupra cronometrulului
şi noi trebuie să spunem ce vrem ca să se întâmple la fiecare astfel de "tic" al cronometrului. Fireşte,
dacă musca asociată nu este pe ecran, atunci ea va apărea vie, iar dacă este (vie sau moartă) va
dispărea.
O altă subrutină pe care va trebui să o realizăm este asociată muştelor şi evenimentului Click, prin
care noi încercăm să omorâm muştele. Dacă facem click pe o muscă vie, atunci o omorâm, iar dacă
musca nu este facem click degeaba. Tot degeaba facem click şi pe o imagine cu o muscă moartă,
deoarece nu putem omorâ o muscă de două ori.
Vorbim de muşte vii şi moarte, dar vom avea nevoie de cele două fişiere în care să le păstrăm
imaginile lor. Ori le desenăm noi, ori face rost de ele într-un fel sau altul, sau de imagini similare.
Iată imaginile folosite de mine:
muscav.jpg muscam.jpg
Acum e momentul să scriem codul aplicaţiei noastre. În primul rând trebuie să scriem subrutina
Form_Load, care este lansată în execuţie la pornirea aplicaţiei, adică la încărcarea formei. Aici vom
25
face iniţializările necesare. La început nu este nici o muscă pe ecran, iar cronometrele vor avea
anumite valori pentru intervale.
În continuare vom scrie subrutina asociată trecerii intervalului de timp pentru un cronometru. Deşi
sunt cinci cronometre, vom scrie doar o singură subrutină, care va avea ca argument indicele
cronometrului. În această subrutină trebuie să descriem faptul că dacă musca respectivă nu este pe
ecran, atunci ea să apară pe ecran vie, iar dacă este pe ecran (vie sau moartă) să dispară.
Ultima subrutină va descrie ce se întâmplă când se execută click pe o muscă. Dacă este vie va fi
omorâtă, iar dacă e deja moartă sau nu, nu se va întâmpla nimic. Dacă vrem ca să existe un punctaj
care să crească la fiecare muscă omorâtă, atunci va trebui să declarăm ca fiind globală variabila
punctaj. La (General)(Declarations) vom scrie:
Dim punctaj as Integer.
Restul modificărilor le vei face tu! Ar fi bine ca, periodic, punctajul să fie reprezentat într-o
etichetă, iar durata jocului să fie controlată de un alt cronometru.
26
Un asemenea joc este prezentat în cartea mea "Aplicaţii în Visual Basic", apărută la Editura Teora,
Bucureşti, 1998-2003.
11. Tabele
Un control foarte util în dezvoltarea multor aplicaţii este Microsoft Flex Grid. Acest control nu
poate fi găsit de la bun început în bara de instrumente din partea stângă a mediului Visual Basic. El
trebuie adăugat în felul următor: din meniul VB alegi opţiunea Project, apoi Components... şi vei
obţine o listă de alte componente ce pot fi adăugate la Toolbox, pentru proiectul tău. Alege din listă
Microsoft Flex Grid şi bifează în dreptul acestei componente, apoi apasă pe butonul OK. În
Toolbox va apărea simbolul controlului acesta:
Apoi vei putea amplasa un tabel (care iniţial va fi denumit MSFlexGrid1, dar noi îl vom redenumi
T, de la tabel). Iniţial are două rânduri şi două coloane, dar putem modifica proprietăţile Rows şi
Cols pentru a modifica numărul de rânduri, respectiv de coloane. Te rog să alegi valoarea 10 pentru
Rows şi 5 pentru Cols. De fapt, rândurile sunt numerotate începând cu 0 şi până la T.Rows-1, iar
coloanele de la 0 la T.Cols-1. Observi că primul rând şi prima coloană sunt gri. Ele sunt, de fapt,
fixe, inaccesibile evenimentelor Click sau KeyPress. Şi numărul de rânduri, respectiv coloane fixe
se poate schimba, cu ajutorul proprietăţilor FixedRows şi FixedCols.
27
Proprietăţi foarte importante sunt Row = rândul curent, Col = coloana curentă şi Text = textul din
celula curentă. Dacă vrem să punem în celula (căsuţa) de pe rândul 2 şi coloana 3 informaţia (textul)
"ABC" vom scrie următoarea secvenţă de trei atribuiri:
T.Row = 2
T.Col = 3
T.Text = "ABC"
O altă modalitate mult mai simplă va folosi proprietatea TextMatrix, care este o matrice a tuturor
textelor din tabel. Astfel, acelaşi lucru se poate scrie mai simplu:
T.TextMatrix(2,3)="ABC".
Vei observa că toate rândurile au aceeaşi înălţime şi toate coloanele au aceeaşi lăţime. Cu
RowHeight şi ColWidth poţi să modifici valorile, aceste proprietăţi fiind vectori. De exemplu, prin
atribuirea T.ColWidth(0) = T.ColWidth(0) / 2 vom înjumătăţi grosimea primei coloane.
Proprietatea AllowUserResizing are diferite valori ce permit utilizatorului să redimensioneze
rândurile/coloanele tabelului.
În continuare vom prezenta o mică subrutină care apelează la evenimentul KeyPress pentru a scrie
în celulele tabelului T. Apoi vom folosi această subrutină în cadrul unui program care va calcula
mediile unor studenţi, a căror nume apar în coloana 1, iar notele la teorie şi la practică în coloanele
2 şi 3.
28
Private Sub Command1_Click()
For i = 1 To T.Rows - 1
If T.TextMatrix(i, 1) <> "" Then
x = Val(T.TextMatrix(i, 2))
y = Val(T.TextMatrix(i, 3))
T.TextMatrix(i, 4) = (x + y) / 2
End If
Next i
End Sub
29
12. Grafice
Ar fi interesant să putem reprezenta grafic notele şi mediile acestor studenţi. Pentru aceasta vom
folosi un alt control, pe care îl adăugăm în aceeaşi manieră ca şi pe FlexGrid. Se numeşte Microsoft
Chart Control şi are proprietăţi asemănătoare controlului Ms Flex Grid, numai că, în loc de Col
apare Column, în loc de Cols apare ColumnCount, în loc de Rows apare RowCount şi în loc de Text
apare Data. Fireşte mai apar şi alte proprietăţi, dar te las să le descoperi singur.
Amplasează un control Ms Chart în forma ta, alături de tabelul T, alegând pentru acesta
Columns=3, Rows=9. Denumeşte graficul G şi modifică la True valoarea proprietăţii RandomFill.
Apoi amplasează butonul Command2 şi asociază-i codul de mai jos, care va reprezenta grafic datele
din tabelul T. Din păcate Ms Chart nu are o proprietate de genul lui TextMatrix, aşa că va trebui să
lucrăm cu Row, Column şi Data. După ce scrii subrutina de mai jos, adaugă la subrutina
Form_Load linia:
Command2_Click.
30
13. Fişiere text - să salvăm şi să restaurăm datele
Cu Open cale + nume fişier For Output as #număr putem crea/deschide pentru scriere un fişier text
cu numele şi calea precizate, asociindu-i numărul 1. Orice referire la acest fişier se va face prin
intermediul numărului 1. Pentru ca să operăm simultan cu un al doilea fişier, va trebui să folosim un
alt număr întreg.
Pentru a adăuga la datele existente altele, va trebui ca fişierul text să se deschidă prin:
Open cale + nume fişier For Append as #număr.
Închiderea unui fişier deschis pentru citire/scriere/adăugare se face prin Close #număr.
Scrierea de date se face cu Print #număr, expresiile_de_scris, iar citirea cu Input #număr,
variabilele_de_citit (pentru numere) sau cu Line Input #număr, variabilele_de_citit (pentru şiruri de
caractere).
31
Completând programul nostru cu cele două butoane (Command3, Command4), ca în figura de mai
sus, şi scriind subrutinele de mai jos vom putea salva şi restaura datele salvate din fişierul text
TABEL.TXT:
32
14. Ordonarea datelor din tabel
În sfârşit, să adăugăm aplicaţiei noastre încă două butoane, unul pentru a ordona elevii alfabetic
(crecător după nume), iar unul pentru ordonarea descrescătoare după medii a elevilor. Ambele
subrutinte vor folosi metoda de ordonare prin selecţie directă. Detalii despre metodele de sortare pot
fi găsite în cursul meu de Programarea calculatoarelor electronice.
33
aux = T.TextMatrix(i, k)
T.TextMatrix(i, k) = T.TextMatrix(j, k)
T.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
End Sub
Programul poate fi îmbunătăţit în mai multe moduri: pentru a permite un număr variabil de elevi,
pentru a cere utilizatorului numele fişierului în care să se salveze datele sau de unde să se restaureze
datele şi multe altele.
34
Capitolul 1. Programe simple cu butoane de comandă şi
casete de text (Andreea, Cătalin)
Andreea
1. Realizati un program care sa calculeze,la apasarea butonului "Buton", logaritmul unui numar
oarecare scris intr-o casuta de text "Numar". Rezultatul sa se afiseze intr-o alta casuta de text,
numita "Rezultat".
Rezolvare.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.
Subrutina care calculeaza logaritmul unui numar este urmatoarea:
Private Sub Buton_Click()
Rezultat.Text = Log(Numar.Text)
End Sub
2. Realizati un program care sa calculeze, la apasarea butonului "Buton", media aritmetica dintre 2
numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta
casuta de text numita "Rezultat".
Rezolvare.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.
Subrutina care calculeaza media aritmetica dintre 2 numere este urmatoarea:
Private Sub Buton_Click()
Rezultat.Text = (Val(a.Text) + Val(b.Text)) / 2
End Sub
35
3. Realizati un program care sa calculeze, la apasarea butonului "Buton", media armonica dintre 2
numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta
casuta de text numita "Rezultat".
Rezolvare.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.
Subrutina care calculeaza media armonica dintre 2 numere este urmatoarea:
Private Sub Buton_Click()
Rezultat.Text = 2 / ((Val(1 / Val(a.Text))) + (Val(1 / Val(b.Text))))
End Sub
4. Realizati un program care sa calculeze, la apasarea butonului "Buton", media patratica dintre 2
numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta
casuta de text numita "Rezultat".
Rezolvare.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.
36
Subrutina care calculeaza media patratica dintre 2 numere este urmatoarea:
Private Sub Buton_Click()
Rezultat.Text = Sqr(((Val(a.Text) * Val(a.Text)) + _
(Val(b.Text) * Val(b.Text))) / 2)
End Sub
5. Realizati un program care sa calculeze, la apasarea butonului "Buton", media geometrica dintre 2
numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta
casuta de text numita "Rezultat".
Rezolvare.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption.
Subrutina care calculeaza media geometrica dintre 2 numere este urmatoarea:
Private Sub Buton_Click()
Rezultat.Text = Sqr(Val(a.Text) * Val(b.Text))
End Sub
37
Capitolul 2. Programe simple (Mirela, Ionuţ, Catalin)
Mirela
1. Realizati un program care sa calculeze la banca BCR dobanda la luna, suma depusa+dobanda si
comisionul retinut pentru depozit.
Rezolvare
Private Sub Command1_Click()
Text2.Text = (Text1.Text) * (1.1 / 100)
Text3.Text = Val(Text1.Text) + Val(Text2.Text)
Text4.Text = (Text1.Text) * (0.05 / 100)
End Sub
2. Faceti un program care sa calculeze cat reprezinta un procent dat dintr-o suma
data.
Rezolvare:
38
3. Realizati un program care sub comanda unui buton sa afiseze caracterizarea unei persoane in
urma bifarii a doua butoane ce corespund unor caracteristici sumare.
Rezolvare:
39
4. Incercati sa faceti un program care sa descrie compatibilitatea dintre doua zodii dupa ce au fost
bifate butoanele de optiune aferente zodiilor respective.
Rezolvare:
40
ElseIf Option2.Value = True And Option13.Value = True Then
Text1.Text = "Puteti obtine mari succese in acesta formula, daca va iubiti cu
adevarat."
ElseIf Option2.Value = True And Option14.Value = True Then
Text1.Text = "Daca eliminati gelozia si secretele, viitorul va apartine."
ElseIf Option2.Value = True And Option15.Value = True Then
Text1.Text = "Singura relatie posibila este cea profesionala. In rest, nu va
puteti intelege si nici aproba."
ElseIf Option2.Value = True And Option16.Value = True Then
Text1.Text = "Daca nu vreti sa-i faceti rau, lasati-o in pace si uitati ca
v-ati intalnit."
ElseIf Option2.Value = True And Option17.Value = True Then
Text1.Text = "Aceasta relatie este un fel de competitie, in nici un caz un
parteneriat."
ElseIf Option2.Value = True And Option18.Value = True Then
Text1.Text = "Cea mai buna relatie! Nu ezitati!"
ElseIf Option2.Value = True And Option19.Value = True Then
Text1.Text = "O relatie palida si rece. Nu veti fi satisfacut nici unul, nici
celalalt."
ElseIf Option2.Value = True And Option20.Value = True Then
Text1.Text = "Daca renuntati la agresivitate, atunci lucrurile vor decurge
normal. Dar fericirea este departe."
ElseIf Option2.Value = True And Option21.Value = True Then
Text1.Text = "Daca Taurul nu va fi tentat sa aiba secrete, atunci relatia va
fi una extraordinara"
ElseIf Option2.Value = True And Option22.Value = True Then
Text1.Text = "O relatie prospera din toate punctele de vedere."
ElseIf Option2.Value = True And Option23.Value = True Then
Text1.Text = "Desi aveti unele gusturi comune, armonia legaturii d-voastra se
va compromite rapid."
ElseIf Option2.Value = True And Option24.Value = True Then
Text1.Text = "Relatia este bazata pe intelegere si poate decurge linistit si
armonios, daca nu sunteti prea pretentiosi."
ElseIf Option3.Value = True And Option13.Value = True Then
Text1.Text = "Doi oameni tari, inteligenti, dar excesiv de imprastiati.
Cadeti de acord mai intai asupra scopului comun."
ElseIf Option3.Value = True And Option14.Value = True Then
Text1.Text = "Daca o veti convinge sa fie la fel de altruista ca d-voastra,
va fi bine. Daca nu, atunci mai bine nu! "
ElseIf Option3.Value = True And Option15.Value = True Then
Text1.Text = "Este omul de care simtiti atata nevoie, din toate punctele de
vedere! Dar s-ar putea sa nu reusiti un camin impreuna, pt ca nu aveti timp pt
aceasta. "
ElseIf Option3.Value = True And Option16.Value = True Then
Text1.Text = "O pereche intr-adevar ideala. Spuneti da fara sa clipiti!"
ElseIf Option3.Value = True And Option17.Value = True Then
Text1.Text = "Fericirea e la un pas, armonia e ca si instalata...daca scapati
de orgoliul dominarii"
ElseIf Option3.Value = True And Option18.Value = True Then
Text1.Text = "Da, se poate. Dar pregatiti-va, ca aveti de tras!"
ElseIf Option3.Value = True And Option19.Value = True Then
Text1.Text = "Cooperare, afinitati pe toata linia. Nu veti regreta
niciodata!"
ElseIf Option3.Value = True And Option20.Value = True Then
Text1.Text = "O uniune conditionata. Sunteti prea critic cu slabiciunile ei.
Daca o veti intelege, rasplata va fi dubla!"
ElseIf Option3.Value = True And Option21.Value = True Then
Text1.Text = "Va risipiti degeaba energia. Fericirea cu de-a sila nu se
poate!"
ElseIf Option3.Value = True And Option22.Value = True Then
Text1.Text = "Este o partenera vesnic obosita si nervoasa. Nu va va aduce
fericirea dorita."
ElseIf Option3.Value = True And Option23.Value = True Then
41
Text1.Text = "Perechea ideala! Nu va speriati daca ea face primul pas, dar
nu-i place timiditatea d-voastra."
ElseIf Option3.Value = True And Option24.Value = True Then
Text1.Text = "Fericirea va ramane o necunoscuta pt d-voastra."
ElseIf Option4.Value = True And Option13.Value = True Then
Text1.Text = "Foarte greu se va realiza aceasta legatura, dar nu este
imposibil."
ElseIf Option4.Value = True And Option14.Value = True Then
Text1.Text = "Relatia nu este chiar romantica, dar poate fi profitabila pt
ambii nativi, pt ca Taurul da dovada de multa inteligenta."
ElseIf Option4.Value = True And Option15.Value = True Then
Text1.Text = "O combinatie de mare succes. Racul se va simti ocrotita de
energicul Gemeni, care va fi foarte magulit de rolul sau."
ElseIf Option4.Value = True And Option16.Value = True Then
Text1.Text = "Va veti intelege foarte bine atat timp cat o veti lasa pe ea sa
conduca jocurile de culise."
ElseIf Option4.Value = True And Option17.Value = True Then
Text1.Text = "Cea mai profitabila este legatura profesionala. In rest, doar
daca doriti sa aveti o aventura..."
ElseIf Option4.Value = True And Option18.Value = True Then
Text1.Text = "O astfel de relatie nu straluceste prin nimic pt ca cei doi
nativi au dorinte si intentii destul de diferite. Mai aveti timp sa va
razganditi."
ElseIf Option4.Value = True And Option19.Value = True Then
Text1.Text = "Din capul locului trebuie sa spuneti nu. Altfel, trebuie sa va
asteptati la o viata incolora, inodora si insipida."
ElseIf Option4.Value = True And Option20.Value = True Then
Text1.Text = "O relatie perfecta atat timp cat femeia Scorpion nu va fi
ranita. Ea este mult mai sensibila decat d-voastra. De aceea trebuie sa fiti
foarte atenti la ceea ce spuneti si ce faceti."
ElseIf Option4.Value = True And Option21.Value = True Then
Text1.Text = "Relatia in sine poate avea si partile ei bune, dar numai
dragostea nu este suficienta. Nu au conflicte prea mari, dar nici prea multe
interese comune."
ElseIf Option4.Value = True And Option22.Value = True Then
Text1.Text = "La inceput poate exista un mare sentiment de prietenie, dar, cu
timpul, acesta se va stinge, ajungandu-se la o indiferenta totala."
ElseIf Option4.Value = True And Option23.Value = True Then
Text1.Text = "Nu aveti sanse de reusita pt ca firea d-voastra nu accepta
senzatiile tari pe care le cauta tot timpul Varsatorul."
ElseIf Option4.Value = True And Option24.Value = True Then
Text1.Text = "O relatie excelenta, in care fericirea si prosperitatea vor fi
la ordinea zilei"
ElseIf Option5.Value = True And Option13.Value = True Then
Text1.Text = "Daca cuvantul perfectiune ar avea un superlativ, acesta ar
defini relatia d-voastra. Iubirea si intelegerea dintre d-voastra sunt rar
intalnite in alte situatii."
ElseIf Option5.Value = True And Option14.Value = True Then
Text1.Text = "Veselia si superficialitate Leului dau de cap seriosului si
profundului nativ Taur, asa ca cel mai bine este sa va opriti la timp."
ElseIf Option5.Value = True And Option15.Value = True Then
Text1.Text = "Aveti toate sansele de fericire. Este una dintre cele mai
stabile relatii."
ElseIf Option5.Value = True And Option16.Value = True Then
Text1.Text = "O relatie greu de imaginat. Ironia si duritatea Leului il
ranesc prea mult pe fragilul si sesibilul Rac. "
ElseIf Option5.Value = True And Option17.Value = True Then
Text1.Text = "Daca veti sti sa va menajati reciproc orgoliul, veti avea un
mariaj de vis."
ElseIf Option5.Value = True And Option18.Value = True Then
Text1.Text = "Cu toata admiratia pe care o poate avea Fecioara fata de Leu,
cel mai bine ar fi sa pastrati distanta. "
ElseIf Option5.Value = True And Option19.Value = True Then
42
Text1.Text = "Chiar daca aveti multe lucruri in comun, in special
inteligenta, aveti putine sanse de succes impreuna pt ca sunteti foarte diferiti
temperamental."
ElseIf Option5.Value = True And Option20.Value = True Then
Text1.Text = "O relatie palida, care nu are prea mult viitor, avand in vedere
exigentele Leului."
ElseIf Option5.Value = True And Option21.Value = True Then
Text1.Text = "Daca veti face unele concesii de ambele parti, o astfel de
relatie poate fi armonioasa, chiar fericita."
ElseIf Option5.Value = True And Option22.Value = True Then
Text1.Text = "Cel mai bine ar fi sa ramaneti prieteni pt ca sunteti destul de
diferiti temperamental. "
ElseIf Option5.Value = True And Option23.Value = True Then
Text1.Text = "Nu este o relatie fericita, pt ca va suspectati reciproc si nu
sunteti de acord nici macar asupra obiectivelor comune. "
ElseIf Option5.Value = True And Option24.Value = True Then
Text1.Text = "Poate exista o astfel de relatie, dar ea nu va ajunge niciodata
la incandescenta."
ElseIf Option6.Value = True And Option13.Value = True Then
Text1.Text = "O relatie excelenta, intre doi oameni activi si materialisti.
Vi se prevad mari realizari in casnicie. "
ElseIf Option6.Value = True And Option14.Value = True Then
Text1.Text = "Chiar daca vor exista unele dificultati de comunicare, veti
reusi sa le depasiti si sa aveti o casnicie fericita si de durata."
ElseIf Option6.Value = True And Option15.Value = True Then
Text1.Text = "Dragostea incipienta se va topi cu timpul si nu vor ramane
decat regrete."
ElseIf Option6.Value = True And Option16.Value = True Then
Text1.Text = "Va iritati unul pe altul si este greu de crezut ca veti ramane
prea mult timp impreuna."
ElseIf Option6.Value = True And Option17.Value = True Then
Text1.Text = "Singurul domeniu in care puteti sta alaturi este cel
profesional. Si nici acolo nu este sigur."
ElseIf Option6.Value = True And Option18.Value = True Then
Text1.Text = "Daca veti lasa la o parte luptele pt suprematie, ati putea avea
sanse de reusita."
ElseIf Option6.Value = True And Option19.Value = True Then
Text1.Text = "Iubirea initiala se va stinge cu timpul pt ca nu veti reusi sa
va descoperiti sufletele unul in fata celuilalt."
ElseIf Option4.Value = True And Option20.Value = True Then
Text1.Text = "Desi ea are nevoie de mintea d-voastra, nu veti putea comunica
prea bine fiindca sunteti foarte diferiti sentimental."
ElseIf Option6.Value = True And Option21.Value = True Then
Text1.Text = "Nentelegerile dintre d-voastra, care au la baza diferenta
temperamentala, nu vor reusi decat sa distruga un eventual sentiment de
dragoste."
ElseIf Option6.Value = True And Option22.Value = True Then
Text1.Text = "O combinatie splendida, bazata pe intelegere, iubire si
armonie."
ElseIf Option6.Value = True And Option23.Value = True Then
Text1.Text = "Amandoi sunteti inzestrati cu spirite combative, iar hartuiala
va fi la ordinea zilei. Mai bine nu!"
ElseIf Option6.Value = True And Option24.Value = True Then
Text1.Text = "Intre d-voastra nu exista nici un fel de compatibilitate
sentimentala, poate cel mult una profesionala."
ElseIf Option7.Value = True And Option13.Value = True Then
Text1.Text = "Nu va potriviti sub nici un aspect. Aceasta aventura nu poate
avea un final fericit. Mai e timp sa va razganditi."
ElseIf Option7.Value = True And Option14.Value = True Then
Text1.Text = "Relatie mediocra, fara mari furtuni, dar si fara stralucire.
Daca iubirea dintre voi va fi suficient de mare, atunci ati avea oarecare sanse
de reusita."
ElseIf Option7.Value = True And Option15.Value = True Then
43
Text1.Text = "Sunteti complementari din toate punctele de vedere. Mariajul
este o chestiune de timp."
ElseIf Option7.Value = True And Option16.Value = True Then
Text1.Text = "Sansele sunt de 50 %. Iubirea initiala ar putea sa se piarda pe
drum sau sa devina foarte viguroasa in timp."
ElseIf Option7.Value = True And Option17.Value = True Then
Text1.Text = "O relatie sentimentala este prea putin probabila pt ca Leul
considera ca aveti o fire cam labila. "
ElseIf Option7.Value = True And Option18.Value = True Then
Text1.Text = "Nu va agreati in mod deosebit, dar, daca vreti neaparat sa
incercati, nu aveti decat. S-ar putea sa iesiti cam jumuliti."
ElseIf Option7.Value = True And Option19.Value = True Then
Text1.Text = "Sunt sanse mari de reusita, daca veti reusi sa vorbiti pe
aceeasi lungime de unda!"
ElseIf Option7.Value = True And Option20.Value = True Then
Text1.Text = "Va cam enervati unul pe altul si, daca nu veti da dovada de mai
multa intelegere reciproca, va veti desparti dupa un timp."
ElseIf Option7.Value = True And Option21.Value = True Then
Text1.Text = "Pe zi ce trece, relatia voastra va deveni tot mai puternica."
ElseIf Option7.Value = True And Option22.Value = True Then
Text1.Text = "Vorbiti limbi diferite, dar puteti ajunge la un oarecare
consens, daca veti fi mai concesiv cu ea. Totusi, relatia nu va atinge cote prea
inalte."
ElseIf Option7.Value = True And Option23.Value = True Then
Text1.Text = "Va asteapta clipe minunate impreuna. Sunteti o pereche de mare
succes!"
ElseIf Option7.Value = True And Option24.Value = True Then
Text1.Text = "O legatura durabila, puternica si fericita."
ElseIf Option8.Value = True And Option13.Value = True Then
Text1.Text = "Mare noroc ca v-ati intalnit! Aveti toate sansele de fericire."
ElseIf Option8.Value = True And Option14.Value = True Then
Text1.Text = "Chiar daca veti incerca imposibilul, aceasta relatie nu are
sorti de izbanda. Veti cheltui timp si energie degeaba."
ElseIf Option8.Value = True And Option15.Value = True Then
Text1.Text = "Este o relatie modesta, mai putin din punct de vedere
profesional, unde veti colabora excelent. Din pacate, este prea putin."
ElseIf Option8.Value = True And Option16.Value = True Then
Text1.Text = "O relatie excelenta, ambii nativi potrivindu-se din toate
punctele de vedere. Casa de piatra!"
ElseIf Option8.Value = True And Option17.Value = True Then
Text1.Text = "Chiar daca va respectati reciproc, nu reusiti sa comunicati pe
plan sentimental. Opriti-va la timp!"
ElseIf Option8.Value = True And Option18.Value = True Then
Text1.Text = "Compromisuri peste compromisuri! Nu aceasta este calea spre
fericire!"
ElseIf Option8.Value = True And Option19.Value = True Then
Text1.Text = "Nimic nu va sta in cale! Intre voi este o potrivire perfecta. "
ElseIf Option8.Value = True And Option20.Value = True Then
Text1.Text = "Agonie si extaz! Acestea sunt coordonatele unei astfel de
relatii. Daca aveti nervii tari, atunci puteti sa incercati!"
ElseIf Option8.Value = True And Option21.Value = True Then
Text1.Text = "Aceasta relatie este cat se poate de anodina. Nu straluceste
prin nimic, dar nici nu se remarca prin ceva deosebit. Daca va place linistea si
anonimatul, atunci v-ati gasit perechea ideala!"
ElseIf Option8.Value = True And Option22.Value = True Then
Text1.Text = "Chiar daca exista dificultati de comunicare la inceput, cu
timpul veti reusi sa le depasiti si sa formati o pereche foarte bine sudata."
ElseIf Option8.Value = True And Option23.Value = True Then
Text1.Text = "Intr-adevar, ati gasit femeia potrivita! Veti avea o relatie
completa, atat in plan sentimental, cat si profesional."
ElseIf Option8.Value = True And Option24.Value = True Then
Text1.Text = "Cu toate ca sunteti compatibili,dupa un timp ati putea avea
mari disensiuni asupra unor probleme grave, pe care ati tot amanat sa le
rezolvati."
44
ElseIf Option9.Value = True And Option13.Value = True Then
Text1.Text = "Daca nu va produceti necazuri unul altuia, o astfel de pereche
nu va intalni nici o piedica in viata. Putina rabdare si fericirea si multumirea
vor veni!"
ElseIf Option9.Value = True And Option14.Value = True Then
Text1.Text = "Posesivi si materialisti in aceeasi masura, vor reusi sa aiba o
relatie excelenta, bazata pe admiratie."
ElseIf Option9.Value = True And Option15.Value = True Then
Text1.Text = "Nici macar sa nu va ganditi! Sunteti atat de diferiti, incat nu
merita efortul."
ElseIf Option9.Value = True And Option16.Value = True Then
Text1.Text = "Daca aveti suficienti bani pt a satisface capriciile unei
astfel de sotii, precum si o rabdare colosala, n-aveti decat sa incercati!"
ElseIf Option9.Value = True And Option17.Value = True Then
Text1.Text = "Pt cei din jurul d-voastra, fericirea si bunastarea pe care le
veti avea sunt de invidiat."
ElseIf Option9.Value = True And Option18.Value = True Then
Text1.Text = "Cel mai bine ar fi sa nu va intalniti! Cu firea ei analitica si
extrem de critica, nu veti avea nici macar o ora linistita."
ElseIf Option9.Value = True And Option19.Value = True Then
Text1.Text = "Daca sunteti dispus la compromisuri si nu va deranjeaza
banalitatea, puteti incerca!"
ElseIf Option9.Value = True And Option20.Value = True Then
Text1.Text = "Amandoi sunteti plini de viata, dar, pt a avea o casnicie
fericita, trebuie sa aveti si o motivatie concreta. Altfel, numarul divorturilor
va creste cu inca unul."
ElseIf Option9.Value = True And Option21.Value = True Then
Text1.Text = "O relatie afectuoasa si constiincioasa: ambii fiind doi oameni
foarte calculati, arareori se vor intalni cu pasiunea."
ElseIf Option9.Value = True And Option22.Value = True Then
Text1.Text = "Da! Iata o relatie extrem de fericita pt ambii parteneri."
ElseIf Option9.Value = True And Option23.Value = True Then
Text1.Text = "O relatie armonioasa si reusita, daca ea va avea mai mult tact,
iar el va fi mai putin critic."
ElseIf Option9.Value = True And Option24.Value = True Then
Text1.Text = "Cu toate ca sunteti legati afectiv, sinceritatea sentimentelor
nu ii va ajuta prea mult."
ElseIf Option10.Value = True And Option13.Value = True Then
Text1.Text = "Ambii au caractere deosebit de puternice, dar pot convetui
pasnic avand in vedere respectul reciproc de care dau dovada."
ElseIf Option10.Value = True And Option14.Value = True Then
Text1.Text = "Este una din cele mai bune legaturi posibile. Veti forma o
echipa redutabila si un cuplu fericit."
ElseIf Option10.Value = True And Option15.Value = True Then
Text1.Text = "Cel mai bine este sa fiti doar prieteni. Singura colaborare
posibila este cea in plan profesional."
ElseIf Option10.Value = True And Option16.Value = True Then
Text1.Text = "Nici macar sa nu incercati! Sunteti cu mult prea diferiti!"
ElseIf Option10.Value = True And Option17.Value = True Then
Text1.Text = "Nu este o legatura prea grozava. Leul il scoate din sarite pe
Capricorn, care poate sa izbucneasca, producand adevarate dezastre in jur."
ElseIf Option10.Value = True And Option18.Value = True Then
Text1.Text = "Daca relatia cu un Taur este cotata ca foarte buna, aflati ca
cea cu o nativa a zodiei Fecioara este exceptionala! Intelegerea dintre cei doi
este totala."
ElseIf Option10.Value = True And Option19.Value = True Then
Text1.Text = "Nu aveti prea multe de impartit, astfel incat relatia dintre d-
voastra va fi, in cel mai bun caz, mediocra. "
ElseIf Option10.Value = True And Option20.Value = True Then
Text1.Text = "Nimic nu pare sa va atraga unul spre celalalt, dar, daca
reusiti sa va cunoasteti unul pe celalalt, putetispune ca a dat norocul peste d-
voastra!"
ElseIf Option10.Value = True And Option21.Value = True Then
45
Text1.Text = "Un mariaj de exceptie! Armonie, liniste, intelegere, succes.
Dar, pt ca exista si un mic 'dar', este posibil la un moment dat ca Capricornul
sa fie iritat de oportunismul Sagetatorului. "
ElseIf Option10.Value = True And Option22.Value = True Then
Text1.Text = "In general, relatia va fi dominata de sentimentul prieteniei.
Poate exista un mariaj gen 'cooperare', dar nu pe termen lung. Daca totusi vreti
sa izbanditi, stabiliti mai intai cine e 'seful'!"
ElseIf Option10.Value = True And Option23.Value = True Then
Text1.Text = "Pt inceput, Capricornul ar putea fi fascinat de personalitatea
Varsatorului. Dar vraja sa va sfarama repede, pt ca Capricornul va fi iritat de
manifestarile libertine ale Varsatorului."
ElseIf Option10.Value = True And Option24.Value = True Then
Text1.Text = "Intre cei doi nativi pot exista animozitati, dar vor fi in
stare sa treaca peste ele. Totusi, cele mai bune raporturi intre Capricorn si
Pesti sunt cele in plan profesional. "
ElseIf Option11.Value = True And Option13.Value = True Then
Text1.Text = "Daca stabiliti de la inceput cine este seful, atunci aveti
sanse."
ElseIf Option11.Value = True And Option14.Value = True Then
Text1.Text = "Puteti fi fascinat de un 'Taur', dar nu pt mult timp. Au loc
prea multe certuri intre d-voastra."
ElseIf Option11.Value = True And Option15.Value = True Then
Text1.Text = "Ati gasit combinatia ideala. Spuneti 'da' fara nici un fel de
ezitare!"
ElseIf Option11.Value = True And Option16.Value = True Then
Text1.Text = "Daca veti da dovada de diplomatie si de maleabilitate, puteti
deveni un cuplu de invidiat."
ElseIf Option11.Value = True And Option17.Value = True Then
Text1.Text = "Poate exista o atractie la inceput, dar conflictele apar rapid
si nu pot fi aplanate. Despartirea este iminenta."
ElseIf Option11.Value = True And Option18.Value = True Then
Text1.Text = "Nu comunicati bine si aveti interese diferite. Nu prea aveti
sanse de reusita."
ElseIf Option11.Value = True And Option19.Value = True Then
Text1.Text = "O legatura de aur! Nu putem decat sa va dorim viata lunga."
ElseIf Option11.Value = True And Option20.Value = True Then
Text1.Text = "O astfel de relatie nu poate fi decat foarte buna sau foarte
proasta, cale de mijloc nu exista."
ElseIf Option11.Value = True And Option21.Value = True Then
Text1.Text = "Ceva nu se leaga intre voi. Poate ar fi bine sa renuntati."
ElseIf Option11.Value = True And Option22.Value = True Then
Text1.Text = "Cel mai bine este sa nu va intalniti. Sunteti atat de diferiti,
incat, oricat de mult credeti ca va iubiti, tot nu veti reusi."
ElseIf Option11.Value = True And Option23.Value = True Then
Text1.Text = "Singura d-voastra problema ar fi banii. Daca reusiti sa tineti
bine fraiele compartimentului financiar, atunci veti avea o relatie minunata."
ElseIf Option11.Value = True And Option24.Value = True Then
Text1.Text = "Cam greu, dar este totusi posibil, daca reusiti sa gasiti calea
de mijloc."
ElseIf Option12.Value = True And Option13.Value = True Then
Text1.Text = "Oricat de surprinzatoare ar parea, o astfel de relatie este
totusi posibila, in ciuda diferentelor notabile intre caracterele celor doi."
ElseIf Option12.Value = True And Option14.Value = True Then
Text1.Text = "Chiar daca sunteti construiti la fel, comunicarea merge foarte
prost. Unul dintre voi ar trebui sa cedeze."
ElseIf Option12.Value = True And Option15.Value = True Then
Text1.Text = "Conflictele dintre d-voastra vor face deliciul vecinilor. Este
o pierdere de timp incercarea de a mentine o astfel de relatie."
ElseIf Option12.Value = True And Option16.Value = True Then
Text1.Text = "Este relatia ideala din toate punctele de vedere. Veti fi
fericiti impreuna si veti avea multe reusite."
ElseIf Option12.Value = True And Option17.Value = True Then
Text1.Text = "Chiar nu aveti nici un punct comun. Este mai bine sa spuneti
'NU' de la bun inceput."
46
ElseIf Option12.Value = True And Option18.Value = True Then
Text1.Text = "Veti cauta sa va dominati reciproc, reusind sa produceti doar
dezastre. Cel mai bine este sa va vedeti fiecare de drum."
ElseIf Option12.Value = True And Option19.Value = True Then
Text1.Text = "Raporturile dintre d-voastra sunt excelente. Comunicati foarte
bine si veti avea foarte multe realizari."
ElseIf Option12.Value = True And Option20.Value = True Then
Text1.Text = "Este una din cele mai bune relatii ale Pestelui. Intre d-
voastra chiar poate exista iubirea."
ElseIf Option12.Value = True And Option21.Value = True Then
Text1.Text = "Predomina sentimentul de prietenie si de respect reciproc.
Dragostea nu este punctul forte al acestei relatii."
ElseIf Option12.Value = True And Option22.Value = True Then
Text1.Text = "Puteti sa va gasiti multe puncte comune de interes, dar, pt ca
legatura sa reziste, sentimentele trebuie sa fie foarte puternice."
ElseIf Option12.Value = True And Option23.Value = True Then
Text1.Text = "Numai diplomatia Pestelui nu este suficienta pt a avea o
relatie armonioasa. Lipseste increderea intre parteneri."
ElseIf Option12.Value = True And Option24.Value = True Then
Text1.Text = "Daca partenerii nu s-ar miorlai atat si ar fi mai atenti la
nevoile celuilalt, atunci relatia ar putea merge foarte bine. "
End If
End Sub
5. Realizati un program care sa scrie intr-o caseta de text lunile cand se culeg fructele selectate din
lista de tip Combo.
Rezolvare:
47
Private Sub Command1_Click()
If fructe.Text = "alune" Then
Text1.Text = "se culeg in luna august"
ElseIf fructe.Text = "mere" Then
Text1.Text = "se culeg vara si toamna in functie de soiul lor"
ElseIf fructe.Text = "pere" Then
Text1.Text = "se culeg vara si toamna in functie de soiul lor "
ElseIf fructe.Text = "struguri" Then
Text1.Text = "se culeg in lunile: august, septembrie si octombrie"
ElseIf fructe.Text = "gutui" Then
Text1.Text = "se culeg in noiembrie"
ElseIf fructe.Text = "prune" Then
Text1.Text = "se culeg in lunile: septembrie, octombrie"
ElseIf fructe.Text = "perje" Then
Text1.Text = "se culeg in lunile: septembrie, octombrie"
ElseIf fructe.Text = "cirese" Then
Text1.Text = "se culeg in lunile: mai, iunie"
ElseIf fructe.Text = "visine" Then
Text1.Text = "se culeg la sfarsitul lunii iunie"
ElseIf fructe.Text = "piersici" Then
Text1.Text = "se culeg in luna iulie"
ElseIf fructe.Text = "caise" Then
Text1.Text = "se culeg in luna iulie"
ElseIf fructe.Text = "zarzare" Then
Text1.Text = "se culeg in luna iulie"
ElseIf fructe.Text = "pepeni" Then
Text1.Text = "se culeg in luna august"
ElseIf fructe.Text = "capsuni" Then
Text1.Text = "se culeg in lunile: iunie,iulie"
ElseIf fructe.Text = "fragi" Then
Text1.Text = "se culeg in lunile: iunie,iulie"
ElseIf fructe.Text = "zmeura" Then
Text1.Text = "se culege in luna august"
ElseIf fructe.Text = "nuci" Then
Text1.Text = "se culeg in luna octombrie"
ElseIf fructe.Text = "mure" Then
Text1.Text = "se culeg la sfarsitul lunii octombrie"
ElseIf fructe.Text = "dude" Then
Text1.Text = "se culeg in lunile: iunie,iulie"
End If
End Sub
48
6. Faceti un program care sa calculeze echivalentul in lei a celor 5 monede (euro, lira sterlina, $
american, $ australian, $ canadian). Tot in acest program realizati un meniu care sa incarce o a doua
forma in care sa fie scris cursul zilei al valutei.
Rezolvare:
49
Private Sub Command4_Click()
Text6.Text = Text5.Text * 22000
End Sub
Codul lui Form2 va fi cel de mai jos. Evident, valorile se vor modifica din program, in
functie de cursul valutare al zilei respective.
7. Realizati un program care dupa scrierea oricarei luni a anului intr-o caseta de text si la tastarea
butonului de comanda sa afiseze denumirea populara corespunzatoare lunii respective.
Rezolvare:
50
Text2.Text = "Martisor"
ElseIf Text1.Text = "aprilie" Then
Text2.Text = "Prier"
ElseIf Text1.Text = "mai" Then
Text2.Text = "Florar"
ElseIf Text1.Text = "iunie" Then
Text2.Text = "Ciresar"
ElseIf Text1.Text = "iulie" Then
Text2.Text = "Cuptor"
ElseIf Text1.Text = "august" Then
Text2.Text = "Gustar"
ElseIf Text1.Text = "septembrie" Then
Text2.Text = "Rapciune "
ElseIf Text1.Text = "Octombrie" Then
Text2.Text = "Brumarel"
ElseIf Text1.Text = "noiembrie" Then
Text2.Text = "Brumar"
ElseIf Text1.Text = "decembrie" Then
Text2.Text = "Undrea"
End If
End Sub
Rezolvare:
Rezolvare:
51
If b.Text = 0 Then
If Val(c.Text) = 0 Then
MsgBox "identitate 0=0", vbInformation
Else
MsgBox "egalitate imposibila", vbInformation
End If
Else
x.Text = Val(-c.Text) / Val(b.Text)
End If
Else
delta.Text = Val(b.Text) * Val(b.Text) - 4 * Val(a.Text) * Val(c.Text)
End If
If Val(delta.Text) > 0 Then
x1.Text = (-Val(b.Text) - Val(Sqr(delta.Text))) / (2 * Val(a.Text))
x2.Text = (-Val(b.Text) + Val(Sqr(delta.Text))) / (2 * Val(a.Text))
Else
If Val(delta.Text) = 0 Then
x.Text = -Val(b.Text) / (2 * Val(a.Text))
Else
MsgBox "Ecuatia nu are solutii", vbInformation, "Atentie!!!"
End If
End If
End Sub
10. Realizati un program care sa afiseze intr-o caseta de text informatii ce particularizeaza fiecare
tara selectata din lista de tip Combo.
Rezolvare:
52
Text1.Text = "tara prin care trece meridianul de 0 grade (Greendwich)"
ElseIf tara.Text = "Franta" Then
Text1.Text = "este renumita prin Turnul Eiffel (peste 300m)"
ElseIf tara.Text = "Italia" Then
Text1.Text = "aici se gaseste orasul laguna (Venetia)"
ElseIf tara.Text = "Romania" Then
Text1.Text = "se remarca prin Delta Dunarii-cea mai bogata delta in flora
si fauna din Europa"
ElseIf tara.Text = "Turcia" Then
Text1.Text = "se afla orasul Istambul, situat pe doua continente"
ElseIf tara.Text = "Egipt" Then
Text1.Text = "tara piramidelor"
ElseIf tara.Text = "Etiopia" Then
Text1.Text = "tara eucaliptilor"
ElseIf tara.Text = "Nigeria" Then
Text1.Text = "este cea mai populata tara africana"
ElseIf tara.Text = "R.D. Congo" Then
Text1.Text = "tara diamantelor"
ElseIf tara.Text = "Africa de Sud" Then
Text1.Text = "tara aurului"
ElseIf tara.Text = "Norvegia" Then
Text1.Text = "tara fiordurilor abisale"
End If
End Sub
11. Sa se faca un program care sub comanda unui buton sa deschida o caseta de preluare a datelor
de la utilizator referitoare la greutatea unei persoane, iar la apasarea butonului OK sa se deschida o
caseta in care sa scrie: “Greutatea d-voastra este de…” cate kg au fost scrise in caseta anterioara.
Rezolvare:
12. Sa se realizeze un program care sa scrie intr-o caseta de text tarile in care se vorbeste limba
selectata din lista de tip Combo.
Rezolvare:
53
Private Sub Command1_Click()
If limbi.Text = "araba" Then
Text1.Text = "Emiratele Arabe Unite, Oman, Siria, Israel, Iordania, Yemen,
Arabia Saudita, Egipt, Sudan, Etiopia,Tunisia, Maroc"
ElseIf limbi.Text = "engleza" Then
Text1.Text = "U.K., S.U.A., Canada, Australia, Noua Zeelanda, Africa de Sud,
Guyana Engleza"
ElseIf limbi.Text = "chineza" Then
Text1.Text = "China, Taiwan, Hong Kong"
ElseIf limbi.Text = "franceza" Then
Text1.Text = "Franta, Canada, Elvetia, Guyana Franceza"
ElseIf limbi.Text = "hindi" Then
Text1.Text = "India, Bhutan, Bangladesh, Sri Lanka"
ElseIf limbi.Text = "indoneza" Then
Text1.Text = "Indonezia, Madagascar, Filipine, Malaysia, Brunei"
ElseIf limbi.Text = "japoneza" Then
Text1.Text = "Japonia"
ElseIf limbi.Text = "papuana" Then
Text1.Text = "Papua-Noua Guinee, Australia"
ElseIf limbi.Text = "persana" Then
Text1.Text = "Iran, Afghanistan, Pakistan"
ElseIf limbi.Text = "portugheza" Then
Text1.Text = "Brazilia, Portugalia"
ElseIf limbi.Text = "somaleza" Then
Text1.Text = "Somalia, Djibouti, Kenya"
ElseIf limbi.Text = "spaniola" Then
Text1.Text = "Spania, Mexic, Venezuela, Columbia, Ecuador, Peru, Chile,
Argentina, Paraguay, Uruguay, Panama, Costa Rica, Cuba"
ElseIf limbi.Text = "swahili" Then
Text1.Text = "Camerun, R.D. Congo, Gabon, Congo, Uganda, Tanzania, Zambia,
Mozambic, Malawi, Angola, Ruanda, Burundi"
ElseIf limbi.Text = "turca" Then
Text1.Text = "Turcia"
End If
End Sub
14. Sa se realizeze un program sub comanda unui buton Sfat care la apasarea lui sa scrie pe el: “Un
mar pe zi te scuteste de mers la doctor”.
Rezolvare:
Private Sub buton_Click()
buton.Caption = "Un mar pe zi te scuteste de mers la doctor"
End Sub
15. Sa se faca un program care sa scrie intr-o caseta de text continentul aferent tarii selectate din
lista de tip Combo.
Rezolvare:
54
Private Sub Command1_click()
If tari.Text = "Angola" Then
Text1.Text = "esti african"
ElseIf tari.Text = "Suedia" Then
Text1.Text = "esti european"
ElseIf tari.Text = "S.U.A." Then
Text1.Text = "esti din America de Nord"
ElseIf tari.Text = "Arabia Saudita" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Argentina" Then
Text1.Text = "esti din America de Sud"
ElseIf tari.Text = "Australia" Then
Text1.Text = "esti australian"
ElseIf tari.Text = "Bolivia" Then
Text1.Text = "esti din America de Sud"
ElseIf tari.Text = "Bulgaria" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Canada" Then
Text1.Text = "esti din America de Nord"
ElseIf tari.Text = "Chile" Then
Text1.Text = "esti din America de Sud"
ElseIf tari.Text = "China" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Columbia" Then
Text1.Text = "esti din America de Sud"
ElseIf tari.Text = "Congo" Then
Text1.Text = "esti african"
ElseIf tari.Text = "Danemarca" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Egipt" Then
Text1.Text = "esti african"
ElseIf tari.Text = "Etiopia" Then
Text1.Text = "esti african"
ElseIf tari.Text = "Franta" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Grecia" Then
Text1.Text = "esti european"
ElseIf tari.Text = "India" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Indonezia" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Irak" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Iran" Then
Text1.Text = "esti asiatic"
55
ElseIf tari.Text = "Italia" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Japonia" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Libia" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Norvegia." Then
Text1.Text = "esti european"
ElseIf tari.Text = "Maroc" Then
Text1.Text = "esti african"
ElseIf tari.Text = "Mexic" Then
Text1.Text = "esti din America Centrala"
ElseIf tari.Text = "Mongolia" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Peru" Then
Text1.Text = "esti din America de Sud"
ElseIf tari.Text = "Polonia" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Romania" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Rusia" Then
Text1.Text = "esti european daca locuiesti in vestul Muntilor Ural si
asiatic daca locuiesti in estul lor"
ElseIf tari.Text = "Sudan" Then
Text1.Text = "esti african"
ElseIf tari.Text = "Spania" Then
Text1.Text = "esti european"
ElseIf tari.Text = "Turcia" Then
Text1.Text = "esti asiatic"
ElseIf tari.Text = "Venezuela" Then
Text1.Text = "esti din America de Sud"
End If
End Sub
16. Faceti un program care sub comanda unui buton sa deschida o caseta de preluare a datelor de la
utilizator referitoare la varsta unei persoane, iar la apasarea butonului OK sa se deschida o caseta in
care scrie: “Aveti varsta de…” cati ani au fost scrisi in caseta anterioara.
Rezolvare:
17. Sa se faca un program care sa afiseze intr-o eticheta valoarea atinsa la executie pe o bara de
derulare verticala. Aceasta valoare reprezinta data de nastere a unei persoane. In acelasi timp sa
scrie intr-o caseta se text: “Ziua d-voastra de nastere este…” respectiva data aleasa.
Rezolvare:
Amplasati pe forma o caseta de text si o bara de derulare verticala, pentru care stabiliti proprietatea
min la valoarea 1 si max la valoarea 31. Apoi scrieti urmatoarea subrutina:
56
Label1.Caption = VScroll1.Value
Text1.Text = "Ziua dumneavoastra de nastere este " & Label1.Caption
End Sub
18. Sa se realizeze un program care la apasarea unui buton sa afiseze intr-o caseta de text denumirea
in zodiacul chinezesc si caracteristicile zodiei scrise
Rezolvare:
Dupa ce pe forma veti amplasa trei casete de text (Text1 - pentru zodia clasica (zodiac european),
Text2 pentru caracteristici si Text3 pentru zodia din zodiacul chinezesc) si un buton Command1,
veti scrie urmatorul cod:
57
Text2.Text = "Barbatul este: sincer, bine intentionat, foarte mandru, ii
place sa contrazica. Femeia este: energica, ordonata, discreta, amabila si
exigenta."
ElseIf Text1.Text = "balanta" Then
Text2.Text = "Barbatul este: inzestrat cu un suflet nobil, onest, amabil,
reprezinta o permanenta atractie pt femei. Femeia este: naturala, calda, fara
inhibitii."
ElseIf Text1.Text = "scorpion" Then
Text2.Text = "Barbatul este: cinstit, simplu, hotarat, curajos, viril,
plin de energie si altruist. Femeia este: modesta si rezervata, risipitoare si
vulnerabila la deceptii."
ElseIf Text1.Text = "sagetator" Then
Text2.Text = "Barbatul este: muncitor, econom, ambitios, lacom si
zgarcit. Femeia este: zgarcita si buna gospodina."
ElseIf Text1.Text = "capricorn" Then
Text2.Text = "Barbatul este: calm, metodic, rabdator, neobosit,
incapatanat si introvertit.Femeia este: gospodina, harnica si devotata familiei,
fidela si responsabila."
ElseIf Text1.Text = "varsator" Then
Text2.Text = "Barbatul este: dinamic, impulsiv, curajos, tenace,
razbunator si optimist.Femeia este: mondena si cocheta, geloasa si posesiva,
sensibila, romantica si pasionala."
ElseIf Text1.Text = "pesti" Then
Text2.Text = "Barbatul este: discret, linistit, introvertit, egoist,
oportunist, lenes si snob. Femeia este: intelegatoare, placuta si rafinata si
materialista"
End If
End Sub
Mirela şi Ionuţ
Rezolvare:
Private Sub Command1_Click()
x = 0
For i = 0 To List1.ListCount
x = x + Val(List1.List(i))
Next i
Text1.Text = Str(x)
End Sub
58
List1.Clear
End Sub
20. Realizati un program care sub comanda unui buton sa afiseze intr-o caseta de text culoarea
corespunzatoare amestecului rezultat in urma bifarii a doua butoane de optiune ce corespund celor
doua culori. Tot aici scrieti un program care sub comanda unui buton sa arate culoarea scrisa in
caseta de text.
Rezolvare:
21. Scrieti un program care la derularea barei orizontale de derulare sa afiseze intr-o eticheta
valoarea ce se modifica mereu. Aceasta valoare reprezinta anul nasterii unei persoane 'Tot acest
59
program sa scrie intr-o caseta de text: "Sunteti nascut(a) in anul...". Pe aceasta forma scrieti o
subrutina sub comanda unui buton care sa scrie intr-o caseta de text varsta persoanei respective.
Rezolvare:
22. Scrieti un program care in urma bifarii catorva casete de validare si la comanda unui buton sa
apara intr-o caseta de text un text de forma: "Culorile tale preferate sunt: roz, alb..."; si daca nici o
caseta de validare nu este bifata sa afiseze: "Culorile tale preferate nu se afla printre cele listate?".
Rezolvare:
Private Sub Command1_Click()
If Check1(0).Value = 1 Then T = T + Check1(0).Caption + ", "
If Check1(1).Value = 1 Then T = T + Check1(1).Caption + ", "
If Check1(2).Value = 1 Then T = T + Check1(2).Caption + ", "
If Check1(3).Value = 1 Then T = T + Check1(3).Caption + ", "
If Check1(4).Value = 1 Then T = T + Check1(4).Caption + ", "
If Check1(5).Value = 1 Then T = T + Check1(5).Caption + ", "
If Check1(6).Value = 1 Then T = T + Check1(6).Caption + ", "
If Check1(7).Value = 1 Then T = T + Check1(7).Caption + ", "
If Check1(8).Value = 1 Then T = T + Check1(8).Caption + ", "
If Check1(9).Value = 1 Then T = T + Check1(9).Caption + ". "
If T = "" Then
Text1.Text = "Culorile tale preferate nu sunt printre cele listate?"
Else
Text1.Text = "Culorile tale preferate sunt: " + T
End If
End Sub
60
23. Realizati un program sa afiseze in caption-ul unui buton de optiune daca un numar este sau nu
divizibil cu 3 si/sau 5, iar rezultatele impartirii la 3 si 5 sa le afiseze in doua casete de text.
Rezolvare:
Private Sub Command1_Click()
If Text1.Text = "" Then
MsgBox "Introduceti numarul", vbCritical, "Eroare"
Else
If Text1.Text Mod 3 = 0 Then
Text2.Text = Text1.Text / 3
Else
Text2.Text = ""
End If
If Text2.Text <> "" Then
Option1.Caption = "Este divizibil cu 3"
Option1.Value = True
Else
Option1.Caption = "Nu-i divizibil cu 3"
Option1.Value = False
End If
End If
End Sub
Private Sub Command2_Click()
If Text1.Text = "" Then
MsgBox "Introduceti numarul", vbCritical, "Eroare"
Else
If Text1.Text Mod 5 = 0 Then
Text3.Text = Text1.Text / 5
Else
Text3.Text = ""
End If
If Text3.Text <> "" Then
Option1.Caption = "Este divizibil cu 5"
Option1.Value = True
Else
Option1.Caption = "Nu-i divizibil cu 5"
Option1.Value = False
End If
End If
End Sub
61
24. 'Scrieti un program care sa afiseze intr-o eticheta valoarea atinsa la executie pe o bara de
derulare orizontala. In acelasi timp sa scrie in caption-ul unei casete de validare daca numarul este
par sau impar si pentru numerele pare sa bifeze caseta iar pentru cele impare nu.
Rezolvare:
Private Sub HScroll1_Change()
Label1.Caption = HScroll1.Value
If Val(Label1.Caption) Mod 2 = 0 Then
Check1.Value = 1
Else
Check1.Value = 0
End If
If Check1.Value = 1 Then
Check1.Caption = "Este numar par."
Else
Check1.Caption = "Este numar impar."
End If
If Val(Label1.Caption) = 0 Then
Check1.Caption = "Este numar nul."
End If
End Sub
62
25. Faceti un program care sa sorteze conturile de venituri si cheltuieli si sa le aseze in liste
separate.
Rezolvare:
Rezolvare:
27. Realizati un program care in urma selectarii prefixului, cuvantului radacina si sufixului, si la
comanda unui buton sa afiseze cuvantul nou format intr-o caseta de text.
63
Text1.Text = "imbatranesc"
ElseIf cuvrad.Text = "batran" And sufix.Text = "esc" Then
Text1.Text = "batranesc"
ElseIf cuvrad.Text = "batran" And sufix.Text = "este" Then
Text1.Text = "batraneste"
ElseIf cuvrad.Text = "batran" And sufix.Text = "ete" Then
Text1.Text = "batranete"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "it" Then
Text1.Text = "inflorit"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "este"
Then
Text1.Text = "infloreste"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "nein") And sufix.Text = "it"
Then
Text1.Text = "neinflorit"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "esc" Then
Text1.Text = "infloresc"
ElseIf cuvrad.Text = "flor" And sufix.Text = "icica" Then
Text1.Text = "floricica"
ElseIf cuvrad.Text = "flor" And sufix.Text = "ar" Then
Text1.Text = "florar"
ElseIf cuvrad.Text = "flor" And sufix.Text = "areasa" Then
Text1.Text = "florareasa"
ElseIf cuvrad.Text = "flor" And sufix.Text = "icele" Then
Text1.Text = "floricele"
End If
28. Realizati un program care in urma selectarii prefixului, cuvantului radacina si sufixului, si la
comanda unui buton sa afiseze cuvantul nou format intr-o caseta de text.
Rezolvare
Private Sub Command1_Click()
If (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "it" Then
Text1.Text = "imbatranit"
ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it"
Then
Text1.Text = "neimbatranit"
ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it"
Then
Text1.Text = "neimbatranit"
ElseIf (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "esc"
Then
Text1.Text = "imbatranesc"
ElseIf cuvrad.Text = "batran" And sufix.Text = "esc" Then
Text1.Text = "batranesc"
ElseIf cuvrad.Text = "batran" And sufix.Text = "este" Then
Text1.Text = "batraneste"
ElseIf cuvrad.Text = "batran" And sufix.Text = "ete" Then
Text1.Text = "batranete"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "it" Then
Text1.Text = "inflorit"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "este"
Then
Text1.Text = "infloreste"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "nein") And sufix.Text = "it"
Then
64
Text1.Text = "neinflorit"
ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "esc" Then
Text1.Text = "infloresc"
ElseIf cuvrad.Text = "flor" And sufix.Text = "icica" Then
Text1.Text = "floricica"
ElseIf cuvrad.Text = "flor" And sufix.Text = "ar" Then
Text1.Text = "florar"
ElseIf cuvrad.Text = "flor" And sufix.Text = "areasa" Then
Text1.Text = "florareasa"
ElseIf cuvrad.Text = "flor" And sufix.Text = "icele" Then
Text1.Text = "floricele"
End If
Cătălin:
Rezolvare
65
inaltimea = Val(Text3.Text)
aria = (baza_mica + baza_mare) * inaltimea / 2
Text4.Text = aria
End Sub
Rezolvare:
Rezolvare
66
32. Aria si perimetrul cercului in functie de lungimea razei.
Rezolvare:
Rezolvare:
67
34. Aria paralelogramului
Rezolvare
35. Scrieti un program pentru a calcula, in functie de un numar natural n introdus de la tastatura,
urmatoarele sume si produse:
S1 = 1+3+5+...+(2n-1)
S2 = 1x2 + 2x3 + 3x4 + ... + nx(n+1)
S3 = 1/1 + 1/.2 + 1/3 + ... + 1/n (S3 este numar real!)
P1 = 1x2x3x...xn (n!)
P2 = 1x3x5x...x(2n-1)
P3 = 1 x 1/2 x 3 x 1/4 x .... (n factori, P3 este numar real!)
Rezolvare
Amplasati in forma programului o caseta de text Text1 pentru introducerea valorii lui n si cate o
caseta de text, Text2...Text7 pentru fiecare din valorile ce trebuie calculate. In final, amplasati un
buton de comanda Command1 si scrieti urmatoarea subrutina: In loc de tipul Integer se poate folosi
tipul Long (pentru numere intregi mai lungi, iar in loc de Single tipul Double pentru o precizie mai
buna a numerelor reale).
68
S2=0
For i=1 to n
S2=S2+i*(i+1)
Next i
S3=0
For i=1 to n
S3=S2+1/i
Next i
P1=1
For i=1 to n
P1=P1*i
Next i
P2=1
For i=1 to n
P2=P2*(2*i-1)
Next i
P3=1
For i=1 to n
If i Mod 2 = 1 Then
P3=P3*1/i
Else
P3=P3*i
End If
Next i
Text2.Text=S1
Text3.Text=S2
Text4.Text=S3
Text5.Text=P1
Text6.Text=P2
Text7.Text=P3
End If
69
Capitolul 3. Programe cu liste, casete de validare,
butoane de opţiune şi tabele (Anca, Andreea)
Anca
Rezolvare:
2. O forma contine:
• un vector de controale Check1 cu 6 componente, fiind etichetate cu denumiri din sport
• un buton Buton1 cu Caption-ul “Ce sporturi practici?”
• o caseta de text Text1
70
Sa se scrie subrutina asociata evenimentului Click pe butonul Buton1 care afiseaza in caseta de text
sporturile selectate, separate prin virgule.
Rezolvare
Private Sub Buton1_Click()
x = ""
For i = 0 To 5
If Check1(i).Value = 1 Then
x = x + Check1(i).Caption + ","
End If
Next i
Text1.Text = "Practici " + x
End Sub
3. Sa se scrie un program care sa calculeze suma cu TVA, stiindu-se suma fara TVA si avand
posibilitatea de a alege cota de impunere (19% sau 9%).
Rezolvare:
Private Sub Command1_Click()
If Option1.Value = True Then
x = 0.09 * Text1.Text
Else
x = 0.19 * Text1.Text
End If
Text2.Text = Val(Text1.Text) + x
End Sub
71
Text1
Option1
Option2
Command1
Text2
4. O forma contine:
• un tabel T
• 2 casete de text: Text1 si Text2
• 2 etichete: Label 1 si Label 2
• un buton Command1 cu Caption-ul “Afiseaza anotimpul”
Tabelul are doua coloane, prima coloana contine nume de flori, iar a doua coloana numele
anotimpului in care infloreste floarea respectiva. Sa se scrie subrutina asociata evenimentului Click
pe butonul Command1 care, la introducerea in caseta de text Text1 a unui nume de floare , sa
afiseze in caseta de text Text2 anotimpul in care aceasta infloreste sau, daca floarea nu exista in
tabel sa afiseze acest lucru.
Rezolvare:
Private Sub Command1_Click()
gasit = False
For i = 1 To T.Rows - 1
If T.TextMatrix(i, 0) = Text1.Text Then
Text2.Text = T.TextMatrix(i, 1)
gasit = True
End If
Next i
If gasit = False Then
Text2.Text = "Nu exista aceasta floare"
End If
End Sub
72
If KeyAscii >= 32 Then
T.Text = T.Text + Chr$(KeyAscii)
End If
End If
End Sub
5. O forma contine:
• un tabel T
• o lista List1
• o caseta de text Text1
• un buton Command1 cu Caption-ul “Afiseaza”
In tabel se vor trece nume de autori intr-o coloana si operele acestora in cealalta. Sa se scrie
subrutina care, la apasarea butonului Command1, sa afiseze in lista List1 toate operele autorului
trecut in caseta Text1.
Rezolvare:
73
gasit = False
For i = 1 To T.Rows - 1
If Left(T.TextMatrix(i, 1), Len(Text1.Text)) = Text1.Text Then
List1.AddItem T.TextMatrix(i, 2)
gasit = True
End If
Next i
If gasit = False Then
List1.AddItem "Acest scriitor nu figureaza in biblioteca"
End If
End Sub
6. Sa se scrie un program care sa calculeze media ponderata intre doua note pentru n elevi, prima
nota avand ponderea 25%, iar a doua 75%.
Rezolvare:
Vom folosi un tabel de tip MS Flex Grid, cu 5 coloane (una pentru numarul curent, una
pentru numele elevilor, coloanele 2 si 3 pentru notele elevilor, iar ultima coloana pentru mediile
ponderate).
74
Tabel.TextMatrix(i, 0) = i
Next i
End Sub
7. O forma contine:
• un tabel denumit Tabel (cu 6 coloane si 10 randuri) ce contine date despre masini: marca,
modelul, capacitatea cilindrica, combustibilul si pretul
• 2 controale de tip Combo, unul pentru alegerea marcii si al doilea pentru model
• lista List1
• un buton Command1
Sa se scrie subrutina care, la apasarea butonului Command1, sa afiseze in lista List1 toate
autoturismele avand marca si modelul specificate si toate informatiile despre acestea.
Rezolvare:
Private Sub Command1_Click()
gasit = False
For i = 1 To Agenda.Rows - 1
If Left(Agenda.TextMatrix(i, 1), Len(Text1.Text)) = Text1.Text Then
75
List1.AddItem Agenda.TextMatrix(i, 1)
List1.AddItem Agenda.TextMatrix(i, 2)
gasit = True
End If
Next i
If gasit = False Then
List1.AddItem "Aceasta persoana nu este in agenda!"
End If
End Sub
9. O forma contine:
• un control de tip Combo care contine toate lunile anului
• caseta de text
• un buton de comanda
Sa se scrie subrutina care permite alegerea unei luni si afiseaza, la apasarea butonului, anotimpul
din care face parte luna respectiva.
Rezolvare:
76
Select Case Combo1.Text
Case "ianuarie", "februarie", "decembrie"
Text1.Text = "iarna"
Case "martie", "aprilie", "mai"
Text1.Text = "primavara"
Case "iunie", "iulie", "august"
Text1.Text = "vara"
Case Else
Text1.Text = "toamna"
End Select
End Sub
10. Sa se realizeze un program sub forma unui dictionar roman-englez, putandu-se alege dintr-o
lista cuvinte in limba romana, acestea fiind traduse in limba engleza.
Rezolvare
Private Sub Command1_Click()
Select Case Combo1.Text
Case "mar"
Text1.Text = "apple"
Case "masina"
Text1.Text = "car"
Case "cal"
Text1.Text = "horse"
Case "pisica"
Text1.Text = "cat"
Case "casa"
Text1.Text = "house"
Case "paine"
Text1.Text = "bread"
Case "caine"
Text1.Text = "dog"
End Select
End Sub
77
11. O forma contine doua controale de tip Combo, cu ajutorul carora se poate selecta data nasterii
(ziua si luna), afisandu-se zodia.
Rezolvare
Private Sub Buton1_Click()
Select Case Combo2.Text
Case "ianuarie"
Select Case Combo1.Text
Case 1 To 20
Text1.Text = "capricorn"
Case Else
Text1.Text = "varsator"
End Select
Case "februarie"
Select Case Val(Combo1.Text)
Case 1 To 19
Text1.Text = "varsator"
Case Else
Text1.Text = "pesti"
End Select
Case "martie"
Select Case Val(Combo1.Text)
Case 1 To 20
Text1.Text = "pesti"
Case Else
Text1.Text = "berbec"
End Select
Case "aprilie"
Select Case Val(Combo1.Text)
Case 1 To 20
Text1.Text = "berbec"
Case Else
Text1.Text = "taur"
End Select
Case "mai"
Select Case Val(Combo1.Text)
Case 1 To 21
Text1.Text = "taur"
Case Else
Text1.Text = "gemeni"
End Select
Case "iunie"
78
Select Case Val(Combo1.Text)
Case 1 To 21
Text1.Text = "gemeni"
Case Else
Text1.Text = "rac"
End Select
Case "iulie"
Select Case Val(Combo1.Text)
Case 1 To 23
Text1.Text = "rac"
Case Else
Text1.Text = "leu"
End Select
Case "august"
Select Case Val(Combo1.Text)
Case 1 To 23
Text1.Text = "leu"
Case Else
Text1.Text = "fecioara"
End Select
Case "septembrie"
Select Case Val(Combo1.Text)
Case 1 To 23
Text1.Text = "fecioara"
Case Else
Text1.Text = "balanta"
End Select
Case "octombrie"
Select Case Val(Combo1.Text)
Case 1 To 23
Text1.Text = "balanta"
Case Else
Text1.Text = "scorpion"
End Select
Case "noiembrie"
Select Case Val(Combo1.Text)
Case 1 To 22
Text1.Text = "scorpion"
Case Else
Text1.Text = "sagetator"
End Select
Case "decembrie"
Select Case Val(Combo1.Text)
Case 1 To 22
Text1.Text = "sagetator"
Case Else
Text1.Text = "capricorn"
End Select
End Select
End Sub
79
12. O forma contine:
• doua liste: List1 si List2
• caseta de text Text1
• un buton Command1
Lista List1 contine nume de persoane. Sa se scrie subrutina asociata evenimentului Click pe
butonul Command1 care sa afiseze in lista List2 toate numele care incep cu litera specificata in
caseta de text.
Rezolvare
13. Sa se realizeze un program care afiseaza zodia in zodiacul chinezesc, in functie de anul nasterii,
folosindu-se butoane de optiune.
Rezolvare
80
Text1.Text = "Tigru"
Case 3
Text1.Text = "Iepure"
Case 4
Text1.Text = "Dragon"
Case 5
Text1.Text = "Sarpe"
Case 6
Text1.Text = "Cal"
Case 7
Text1.Text = "Capra"
Case 8
Text1.Text = "Maimuta"
Case 9
Text1.Text = "Cocos"
Case 10
Text1.Text = "Caine"
Case 11
Text1.Text = "Porc"
End Select
End If
Next i
End Sub
14. Sa se scrie un program care afiseaza zodia in zodiacul chinezesc, folosindu-se, de aceasta data,
un control de tip Combo, care sa permita alegerea anului nasterii.
81
Rezolvare
Rezolvare
82
Next i
End Sub
16. Sa se realizeze un program care sa permita alegerea unui judet din lista Combo1 si sa afiseze in
caseta de text Text1 resedinta de judet, la apasarea butonului Command1.
Rezolvare
83
Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in caseta
Text1 continentul pe care se afla tara respectiva.
Rezolvare
Rezolvare
19. Sa se realizeze un program care sa afiseze intr-o lista alimentele cu putine calorii folosite intr-un
regim de slabit, repartizate pe principalele mese ale zilei.
Rezolvare
84
List1.AddItem "Salata de cruditati"
Case "Cina"
List1.AddItem "Pui fara piele fiert"
List1.AddItem "Salata de cruditati"
End Select
End Sub
20. Sa se realizeze un program care sa afiseze intr-o lista cele mai importante orase dintr-o tara, tara
alegandu-se dintr-o lista de tip Combo.
Rezolvare
85
21. O forma contine trei butoane de optiune cu numele unor sporturi. Sa se realizeze un program
care sa afiseze intr-o lista accesoriile necesare practicarii sportului selectat.
Rezolvare
86
22. O forma contine:
• 3 butoane de optiune: Meniul1, Meniul2, Meniul3
• lista
• un buton
Sa se scrie subrutina asociata evenimentului Click pe buton care sa afiseze in lista felurile de
mancare continute de meniul selectat.
Rezolvare
87
23. Sa se realizeze un program care sa afiseze greutatea unei lingurite dintr-un anumit ingredient,
folosind butoane de optiune.
Rezolvare
88
Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa realizeze media,
aritmetica sau geometrica, in functie de butonul de optiune ales, a celor doua numere situate pe
acelasi rand si sa o afiseze pe a treia coloana a tabelului.
Rezolvare
Private Sub t_KeyPress(KeyAscii As Integer)
If (KeyAscii = 8) And (T.Text <> "") Then
L = Len(T.Text)
T.Text = Left(T.Text, L - 1)
Else
If KeyAscii >= 32 Then
T.Text = T.Text + Chr$(KeyAscii)
End If
End If
End Sub
89
26. Realizati un program care sa afiseze suma elementelor dintr-o lista intr-o caseta de text.
Rezolvare
27. Scrieti un program care sa afiseze intr-o caseta de text elementul maxim dintr-o lista.
Rezolvare
28. Scrieti un program care sa caute un element intr-o lista si sa afiseze intr-o caseta de text daca
acesta exista in lista sau nu.
90
Rezolvare
Rezolvare
91
List1.AddItem "hectogram"
List1.AddItem "kilogram"
List2.Clear
List2.AddItem "decigram"
List2.AddItem "centigram"
List2.AddItem "miligram"
End Sub
Rezolvare
Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda care sa transforme suma
din caseta Text1, din lei in valuta aleasa din lista.
92
Rezolvare
Rezolvare
Rezolvare
93
Next i
Else
For j = 1 To T.Rows - 1
T.TextMatrix(j, 1) = Val(T.TextMatrix(j, 0)) / 2
Next j
End If
End Sub
34. Sa se scrie un program care sa clasifice produse dupa un cod numeric, in functie de felul
produsului, cum ar fi: alimentara, cosmetice, chimice, imbracaminte, incaltaminte.
Rezolvare
94
End If
End If
End If
End If
End If
Next i
End Sub
95
35.Sa se realizeze un program pt farmacii care sa arate ce medicamente sunt compensate, cu cit sunt
compensate, sau gratuite.
Rezolvare
Private Sub Command1_Click()
Open App.Path + "\tabel1.txt" For Output As #1
For i = 1 To T.Rows - 1
For j = 1 To T.Cols - 1
Print #1, T.TextMatrix(i, j)
Next j
Next i
Close #1
End Sub
96
L = Len(T.Text)
T.Text = Left(T.Text, L - 1)
Else
If KeyAscii >= 32 Then
T.Text = T.Text + Chr$(KeyAscii)
End If
End If
End Sub
36. Realizati un program care sa calculeze numarul destinului in functie de numele persoanei,
adunand cifrele corespunzatoare literelor din nume, astfel:
1 2 3 4 5 6 7 8 9
A B C D E F G H I
J K L M N O P Q R
S T U V W X Y Z
Daca se obtine un numar din mai multe cifre, acestea vor fi adunate pana se va obtine un numar
simplu (dintr-o singura cifra).
97
Rezolvare
37. Realizati un program care sa descompuna numerele in mii, sute, zeci si unitati.
98
Rezolvare:
Amplasati in forma dumneavoastra un buton de comanda Command1 si o caseta de text Text1, unde
se va introduce (la rularea programului) numarul respectiv (de exemplu 3452). Nu se va putea
introduce aici un numar cu mai mult de 4 cifre (subrutina va afisa un mesaj corespuznator).
Amplasati, apoi, pe forma inca patru casete de text (Text2, Text3, Text4 si Text5) corespunzatoare
cifrei miilor, sutelor, zecilor si unitatilor. Scrieti urmatorul cod:
38. Realizati un program care sa afiseze in doua liste diferite vocalele si consoanele dintr-un
cuvant.
Rezolvare:
Private Sub Command1_Click()
For i = 1 To Len(Text1.Text)
j = Left(Text1.Text, i)
k = Right(j, 1)
Select Case k
Case "a", "e", "i", "o", "u", "A", "E", "I", "O", "U"
Vocale.AddItem k
Case Else
Consoane.AddItem k
End Select
Next i
End Sub
39. O forma contine o bara de derulare cu valori intre 1 si 100. Sa se scrie subrutina asociata
evenimentului click pe butonul Command1 care sa afiseze in caseta de text Text1 patratul valorii
selectate prin intermediul barei de derulare.
Rezolvare:
99
Andreea
40. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita
"NumerePozitive", care contine numere pozitive, doar numerele mai mici de 10. Aceste numere sa
fie afisate intr-o alta lista, denumita "MaiMiciDeZece" care este goala la inceput.
Rezolvare.
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin
Ctrl+Enter.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
MaiMiciDeZece.Clear
For i = 0 To NumerePozitive.ListCount - 1
If NumerePozitive.List(i) < 10 Then
MaiMiciDeZece.AddItem NumerePozitive.List(i)
End If
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Clear = Sterge elementele din lista
List(i) = Elementul din lista de pe pozitia i
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
41. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita
"Numere", care contine numere pozitive si negative, doar numerele negative. Aceste numere sa fie
afisate intr-o alta lista, denumita "NumereNegative" care este goala la inceput.
Rezolvare.
100
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numerele pozitive si negative la proprietatea "List", separate
prin Ctrl+Enter.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
NumereNegative.Clear
For i = 0 To Numere.ListCount - 1
If Numere.List(i) < 0 Then
NumereNegative.AddItem Numere.List(i)
End If
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Clear = Sterge elementele din lista
List(i) = Elementul din lista de pe pozitia i
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
42. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita
"Numere", care contine numere pozitive si negative, doar numerele negative, si modulul acestor
numere sa fie afisat intr-o alta lista, denumita "ModulNumere" care este goala la inceput.
Rezolvare.
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numerele pozitive si negative la proprietatea "List", separate
prin Ctrl+Enter.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
ModulNumere.Clear
For i = 0 To Numere.ListCount - 1
If Numere.List(i) < 0 Then
ModulNumere.AddItem Abs(Numere.List(i))
End If
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Clear = Sterge elementele din lista
101
List(i) = Elementul din lista de pe pozitia i
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
43. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita
"NumerePozitive", care contine numere pozitive, doar numerele pare. Aceste numere sa fie afisate
intr-o alta lista, denumita "NumerePare" care este goala la inceput.
Rezolvare.
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin
Ctrl+Enter.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
NumerePare.Clear
For i = 0 To NumerePozitive.ListCount - 1
If NumerePozitive.List(i) Mod 2 = 0 Then
NumerePare.AddItem NumerePozitive.List(i)
End If
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Clear = Sterge elementele din lista
List(i) = Elementul din lista de pe pozitia i
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
44. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita
"NumerePozitive", care contine numere pozitive, doar numerele impare. Aceste numere sa fie
afisate intr-o alta lista, denumita "NumereImpare" care este goala la inceput.
Rezolvare.
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin
Ctrl+Enter.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
NumereImpare.Clear
For i = 0 To NumerePozitive.ListCount - 1
If NumerePozitive.List(i) Mod 2 <> 0 Then
NumereImpare.AddItem NumerePozitive.List(i)
End If
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Clear = Sterge elementele din lista
List(i) = Elementul din lista de pe pozitia i
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
45. Amplasati intr-o forma o eticheta pe care sa scrie: "Nota dumneavoastra este mai mare sau egala
cu 5?", 2 casete de validare numite "DA", respectiv "NU" si in care sa scrie "DA", respectiv "NU",
102
si o caseta de text, numita "Rezultat". Realizati un program care, la validarea casetei "DA" sa
afiseze in caseta de text, textul "Felicitari!Ati promovat examenul!" iar la validarea casetei "NU" sa
fie afisat textul "Ne pare rau dar trebuie sa mai studiati!Ati picat examenul!".
Rezolvare.
Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor
folosind proprietatea "Caption" din tabelul de proprietati din dreapta.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de
denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption".
Subrutinele corespunzatoare casetelor de validare "DA", respectiv "NU" sunt urmatoarele:
Private Sub DA_Click()
If DA.Value = 1 Then
NU.Value = 0
Rezultat.Text = "Felicitari!Ati promovat examenul!"
End If
End Sub
46. Amplasati intr-o forma o eticheta pe care sa scrie: "2+5*(6-9/3)/lg10=17 ?", 2 casete de validare
numite "DA", respectiv "NU" si in care sa scrie "DA", respectiv "NU", si o caseta de text, numita
"Rezultat". Realizati un program care, la validarea casetei "DA" sa afiseze in caseta de text, textul
"Raspunsul este corect" iar la validarea casetei "NU" sa fie afisat textul "Raspunsul este incorect".
Rezolvare.
Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor
folosind proprietatea "Caption" din tabelul de proprietati din dreapta.
103
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de
denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption".
Subrutinele corespunzatoare casetelor de validare "DA", respectiv "NU" sunt urmatoarele:
Private Sub DA_Click()
If DA.Value = 1 Then
NU.Value = 0
Rezultat.Text = "Raspunsul este corect."
End If
End Sub
47. Realizati un vector cu 5 casete de validare, care sa se numeasca "Check" si scrieti in interiorul
fiecareia diferite materii de studiu, cum ar fi: Programarea calculatoarelor, Statistica, Contabilitate
finaciara, Finante publice, etc. Amplasati apoi un buton numit "Buton" si pe care sa scrie: "Ce
materii preferati?" si o casuta de text, numita "Rezultat". Creati o subrutina care, la efectuarea unui
click pe buton, sa afiseze in casuta de text: "Materiile tale preferate sunt:" + materiile
corespunzatoare casutelor bifate.
Rezolvare.
Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de
validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi
readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca
vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar
celelalte Check(1), Check(2), Check(3) si Check(4).
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
104
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
R = ""
For i = 0 To 4
If Check(i).Value = 1 Then R = R + Check(i).Caption + ", "
Next i
Rezultat.Text = "Materiile tale preferate sunt: " + R
End Sub
unde:
Check(i).Value = 1 - casutele sunt marcate
Check(i).Caption = continutul casetelor, aflat la proprietatea Caption
48. Realizati un vector cu 8 casete de validare, care sa se numeasca "Check" si scrieti in interiorul
fiecareia diferite fructe, cum ar fi: ananas, piersici, mere, pere, etc. Amplasati apoi un buton numit
"Buton" si pe care sa scrie: " Salata de fructe va contine:" si o lista, numita "Salata", care sa nu aiba
nici un element. Realizati o subrutina care, la apasarea butonului, sa adauge in lista fructele
corespunzatoare casetelor bifate.
Rezolvare.
Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de
validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi
readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca
vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar
celelalte Check(1), Check(2), Check(3), Check(4), Check(5), Check(6) si Check(7).
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name".
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
Salata.Clear
For i = 0 To 7
If Check(i).Value = 1 Then
Salata.AddItem Check(i).Caption
End If
105
Next i
End Sub
unde:
Check(i).Value = 1 - casutele sunt marcate
Check(i).Caption = continutul casetelor, aflat la proprietatea Caption
Clear = Sterge elementele din lista
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
49. Realizati un vector cu 9 casete de validare, care sa se numeasca "Check" si scrieti in interiorul
fiecareia diferite nume de persoane. Amplasati apoi un buton care sa se numeasca "Buton' si pe care
sa scrie "Prietenii mei sunt:". Adaugati formei un tabel care sa aiba la inceput o coloana si nici un
rand. Creati o subrutina care, la apasarea butonului, sa adauge in tabel numele corespunzatoare
casetelor bifate.
Rezolvare.
Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de
validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi
readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca
vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar
celelalte Check(1), Check(2), Check(3), Check(4), Check(5), Check(6), Check(7) si Check(8).
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul
Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a
mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project,
apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din
lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In
Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie
denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols
pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si
nici un rand). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata
proprietatea FixedCols cu valoarea "0".
106
Subrutina este urmatoarea:
Private Sub Buton_Click()
k = 0
T.Rows = 1
For i = 0 To 8
If Check(i).Value = 1 Then
k = k + 1
T.Rows = k
T.TextMatrix(k - 1, 0) = Check(i).Caption
End If
Next i
End Sub
unde:
T.Rows = numarul de randuri
T.TextMatrix(k-1,0) = celula corespunzatoare randului k-1 si coloanei 0
Check(i).Value = 1 - casutele sunt marcate
Check(i).Caption = continutul casetelor, aflat la proprietatea Caption
50. Amplasati intr-o forma o eticheta pe care sa scrie: "Ce bauturi va plac mai mult?", 2 butoane de
optiune pe care sa scrie "bauturile racoritoare", respectiv "bauturile alcoolice" si o casuta de text,
numita "Rezultat" care sa fie goala la inceput. Realizati un program care sa afiseze in casuta de text:
"Sunteti o persoana care prefera bauturile racoritoare in locul celor alcoolice. Foarte bine!", daca
primul buton de optiune este selectat, si respectiv textul: "Atentie! Consumul excesiv de alcool
dauneaza grav sanatatii! daca al doilea buton de optiune este selectat.
Rezolvare.
Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor
folosind proprietatea "Caption" din tabelul de proprietati din dreapta.
Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se
denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".
107
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Subrutinele corespunzatoare butoanelor de optiune "Option1", respectiv "Option2" sunt:
Private Sub Option1_Click()
If Option1.Value = True Then
Rezultat.Text = "Sunteti o persoana care prefera bauturile" + _
" racoritoare in locul celor alcoolice. Foarte bine!"
End If
End Sub
51. Desenati 3 cadre si puneti-le Caption-urile "Sex", "Statut" si respectiv "Copii". Grupati in
fiecare cadru cate 2 butoane de optiune, pe care scrieti in ordine: "feminin", "masculin", "casatorit",
"necasatorit", "da", "nu". Amplasati apoi un buton numit "Buton" si pe care sa scrie:"Ce fel de om
esti:" si o casuta de text, numita "Rezultat" care sa fie goala la inceput. Creati subrutina care, la
apasrea butonului, sa afiseze un text corespunzator butoanelor de optiune selectate.
Rezolvare.
Cadrele se creeaza cu ajutorul controlului "Frame" din Toolbox, iar in antetul lor se scrie la
proprietatea "Caption".
Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se
denumesc la proprietatea "Name"
si se scrie in interiorul lor la proprietatea "caption".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se
denumesc la proprietatea Name.
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
108
Subrutina este urmatoarea:
Private Sub Buton_Click()
If Option1.Value = True Then
If Option3.Value = True Then
If Option5.Value = True Then
Rezultat.Text = "Esti o femeie casatorita, care are copii."
Else
Rezultat.Text = "Esti o femeie casatorita, care nu are copii."
End If
Else
If Option5.Value = True Then
Rezultat.Text = "Esti o femeie necasatorita, care are copii."
Else
Rezultat.Text = "Esti o femeie necasatorita, care nu are copii."
End If
End If
Else
If Option3.Value = True Then
If Option5.Value = True Then
Rezultat.Text = "Esti un barbat casatorit, care are copii."
Else
Rezultat.Text = "Esti un barbat casatorit, care nu are copii."
End If
Else
If Option5.Value = True Then
Rezultat.Text = "Esti un barbat necasatorit, care are copii."
Else
Rezultat.Text = "Esti un barbat necasatorit, care nu are copii."
End If
End If
End If
End Sub
unde:
Option1.Value = True - butonul de optiune este selectat
Option1.value = False - butonul de optiune nu este selectat
53. Amplasati intr-o forma un buton care sa senumeasca "Buton" si pe care sa scrie "Executa", 2
butoane de optiune pe care sa scrie "Adauga element", respectiv "Sterge element", o casuta de text
numita "Fructe" si o lista simpla care sa se numeasca "Salata" si care sa contina cateva nume de
fructe. Realizati un program care, la apasarea butonului, sa adauge in lista numele fructului scris in
casuta de text, daca este selectat butonul "Option1", si sa il stearga din lista, daca este selectat
butonul "Option2".
Rezolvare.
Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se
denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".
Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la
proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din
dreapta.
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numele de fructe la proprietatea "List", separate prin
Ctrl+Enter, iar la final apasati Enter.
Subrutina care ofera solutia de rezolvare a programului este urmatoarea:
Private Sub Buton_Click()
If Option1.Value = True Then
Salata.AddItem Fructe.Text
Else
For i = 0 To Salata.ListCount - 1
If Salata.List(i) = Fructe.Text Then
Salata.RemoveItem i
End If
Next i
End If
End Sub
unde:
Option1.Value = True - butonul de optiune este selectat
Option1.value = False - butonul de optiune nu este selectat
110
lista.AddItem elem = Adauga elementul "elem" la lista "lista"
lista.RemoveItem i = Sterge elementul de pe pozitia i din lista "lista"
ListCount = Numarul elementelor din lista
List(i) = Elementul din lista de pe pozitia i
54. Amplasati 2 butoane de optiune, 2 casete de validare si un buton, numit "Buton" si pe care sa
scrie "Bifeaza". Realizati un program care, la apasarea butonului, sa bifeze prima caseta de validare,
daca a fost selectat primul buton de optiune, respectiv a doua caseta, daca a fost selectat cel de-al
doilea buton de optiune (casetele de validare nu trebuie sa fie bifate in acelasi timp).
Rezolvare.
Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se
denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de
denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption".
Subrutina este urmatoarea:
Private Sub Buton_Click()
If Option1.Value = True Then
Check1.Value = 1
Check2.Value = 0
Else
Check2.Value = 1
Check1.Value = 0
End If
End Sub
unde:
Option1.Value = True - butonul de optiune este selectat
Option1.value = False - butonul de optiune nu este selectat
CheckBox.Value = 0 - caseta este nemarcata
= 1 - caseta este marcata
= 2 - caseta este inactiva
55. Realizati un tabel, numit "T", care sa aiba o coloana si 7 randuri.Apoi amplasati un buton, care
sa se numeasca "Buton" si pe care sa scrie "Suma cifrelor pare". Scrieti in primele 6 randuri diferite
cifre pare si impare. Creati un program care, la apasarea butonului sa calculeze in ultimul rand al
tabelului suma cifrelor pare din randurile precedente.
111
Rezolvare.
Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul
Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a
mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project,
apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din
lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In
Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie
denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols
pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si 7
randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate
proprietatile FixedCols si FixedRows cu valoarea "0".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load()
T.TextMatrix(0, 0) = 5
T.TextMatrix(1, 0) = 15
T.TextMatrix(2, 0) = 456
T.TextMatrix(3, 0) = 258
T.TextMatrix(4, 0) = 48
T.TextMatrix(5, 0) = 36
End Sub
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
s = 0
For i = 0 To T.Rows - 1
If Val(T.TextMatrix(i, 0)) Mod 2 = 0 Then
s = s + Val(T.TextMatrix(i, 0))
End If
Next i
T.TextMatrix(6, 0) = s
End Sub
unde:
T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0
T.Rows = numarul de randuri al tabelului
x mod y = restul impartirii lui x la y
56. Realizati un tabel, numit "T", care sa aiba o coloana si 7 randuri.Apoi amplasati un buton, care
sa se numeasca "Buton" si pe care sa scrie "Produsul cifrelor impare". Scrieti in primele 6 randuri
diferite cifre pare si impare. Creati un program care, la apasarea butonului sa calculeze in ultimul
rand al tabelului produsul cifrelor impare din randurile precedente.
112
Rezolvare.
Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul
Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a
mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project,
apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din
lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In
Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie
denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols
pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si 7
randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate
proprietatile FixedCols si FixedRows cu valoarea "0".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load()
T.TextMatrix(0, 0) = 5
T.TextMatrix(1, 0) = 15
T.TextMatrix(2, 0) = 456
T.TextMatrix(3, 0) = 258
T.TextMatrix(4, 0) = 48
T.TextMatrix(5, 0) = 36
End Sub
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
p = 1
For i = 0 To T.Rows - 1
If Val(T.TextMatrix(i, 0)) Mod 2 <> 0 Then
p = p * Val(T.TextMatrix(i, 0))
End If
Next i
T.TextMatrix(6, 0) = p
End Sub
unde:
T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0
T.Rows = numarul de randuri al tabelului
x mod y = restul impartirii lui x la y
57. Realizati un tabel, numit "T", care sa aiba 2 coloane si 4 randuri.Apoi amplasati un buton, care
sa se numeasca "Buton" si pe care sa scrie "Executa". Scrieti in cele 4 randuri diferite cifre. Creati
113
un program care, la apasarea butonului sa afiseze, in cea de-a doua coloana, cifrele din prima
coloana dar cu semnul "-".
Rezolvare.
Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul
Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a
mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project,
apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din
lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In
Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie
denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols
pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 2 coloane si 4
randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate
proprietatile FixedCols si FixedRows cu valoarea "0".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load()
T.TextMatrix(0, 0) = 5
T.TextMatrix(1, 0) = 15
T.TextMatrix(2, 0) = 456
T.TextMatrix(3, 0) = 258
End Sub
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
For i = 0 To T.Rows - 1
T.TextMatrix(i, 1) = -T.TextMatrix(i, 0)
Next i
End Sub
unde:
T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0
T.Rows = numarul de randuri al tabelului
58. Amplasati, intr-o forma, o lista simpla, care sa se numeasca "Animale" si care sa contina diferite
nume de animale. Creati posibilitatea de a selecta mai multe elemente din lista. Adaugati un tabel,
numit "T" care sa contina, la inceput, o coloana si nici un rand (coloana nu trebuie sa fie fixa) si un
buton, numit "Buton" si pe care sa scrie "Executa". Realizati un program care, la apasarea
butonului, sa afiseze pe randurile tabelului elementele selectate din lista. Tabelul trebuie sa
contina atatea randuri, cate elemente au fost selectate.
114
Rezolvare.
O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti numele de animale la proprietatea "List", separate prin
Ctrl+Enter, iar la final apasati Enter. pentru a selecta mai multe elemente din lista trebuie
modificata proprietatea "Multiselect" cu valoarea "1-Simple".
Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul
Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a
mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project,
apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din
lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In
Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie
denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols
pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si
nici un rand). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata
proprietatea FixedCols cu valoarea "0".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
Subrutina este urmatoarea:
Private Sub Buton_Click()
k = 0
T.Rows = 1
For i = 0 To T.Rows - 1
For j = 0 To Animale.ListCount - 1
If Animale.Selected(j) = True Then
k = k + 1
T.Rows = k
T.TextMatrix(k - 1, 0) = Animale.List(j)
End If
Next j
Next i
End Sub
unde:
T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0
T.Rows = numarul de randuri al tabelului
ListCount = Numarul elementelor din lista
List(j) = Elementul din lista de pe pozitia i
Lista.Selected(j)=True - elementul de pe pozitia j din lista este selectat
59. Realizati un tabel, numit "N", care sa contina o coloana si 6 randuri si scrieti in fiecare rand
diverse nume de persoane.Amplasati un alt tabel, "T", care sa aiba la inceput o coloana si nici un
rand, si un buton, numit "Buton" si pe care sa scrie "Executa". Realizati un program care, la
115
apasarea butonului, sa afiseze in tabelul "T", doar numele care incep cu litera "A". Tabelul trebuie
sa contina atatea randuri, cate nume incep cu "A".
Rezolvare.
Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul
Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a
mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project,
apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din
lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In
Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie
denumit "T" sau "N") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si
Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul "T" trebuie sa contina o
coloana si nici un rand, iar "N" trebuie sa aiba o coloana si 6 randuri). Coloana este fixa la inceput.
Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0".
Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se
denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption".
Pentru a scrie in randurile tabelului "N" trebuie folosita urmatoarea subrutina asociata
formei:
Private Sub Form_Load()
N.TextMatrix(0, 0) = "Ana": N.TextMatrix(1, 0) = "Alina"
N.TextMatrix(2, 0) = "Diana": N.TextMatrix(3, 0) = "Andrei"
N.TextMatrix(4, 0) = "Bianca": N.TextMatrix(5, 0) = "Radu"
End Sub
Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click()
k = 0
T.Rows = 1
For i = 0 To T.Rows - 1
For j = 0 To N.Rows - 1
If Left(N.TextMatrix(j, 0), 1) = "A" Then
k = k + 1
T.Rows = k
T.TextMatrix(k - 1, 0) = N.TextMatrix(j, 0)
End If
Next j
Next i
End Sub
unde:
T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0
T.Rows = numarul de randuri al tabelului
Left(N.TextMatrix(j, 0), 1) = "A" - prima litera a cuvantului scris pe randul j, coloana 0 din
tabelul "N" este "A"
116
Capitolul 4. Programe diverse (Anca, Cătălin, Ionuţ)
Anca
1. Realizati un program care sa contina un tabel cu produse si pretul acestora si sa afiseze cate
bucati din fiecare produs pot fi cumparate cu o anumita suma inscrisa intr-o caseta de text.
Rezolvare:
117
T.Text = T.Text + Chr$(KeyAscii)
End If
End If
End Sub
Rezolvare
118
3. O forma contine
- un tabel cu nume de persoane, varsta si sexul acestora
- doua butoane de optiune: “Femeie” si “Barbat”
- doua liste de tip combo pentru varsta minima si maxima
- o lista
Realizati o subrutina care sa afiseze in lista persoanele care corespund descrierii.
Rezolvare:
Command2
Combo1 List1
Option1
Combo2
Option2 Command1
119
Next j
End If
End If
End Sub
4. O forma contine un tabel cu nume de domnitori si anii de domnie si o lista de tip combo cu
numele tuturor domnitorilor. Realizati o subrutina asociata evenimentului click pe butonul
Command1 care sa afiseze intr-o caseta de text anii de domnie ai domnitorului selectat din lista.
Rezolvare:
120
Private Sub Command2_Click()
For i = 1 To T.Rows - 1
If T.TextMatrix(i, 1) = Combo1.Text Then
Text1.Text = T.TextMatrix(i, 2)
End If
Next i
End Sub
121
Cătălin
5. Sa se realizeze un program care sa contina o bila (realizata prin controlul Shape) colorata, care la
pornirea programului sa aiba o miscare diagonala, ca pe o masa de biliard: la lovirea oricareia din
cele patru margini ale formei, bila se va reflecta sub acelasi unghi, conform legii reflexiei.
Rezolvare
6. Sa se realizeze un program asemanatori celui anterior, dar bila sa nu aiba decat o miscare de sus
in jos si inapoi.
Rezolvare:
7. Sa se realizeze un program asemanatori celui anterior, dar bila sa aiba o miscare pe orizontala, de
la stanga la dreapta si inapoi.
122
Rezolvare:
8. Sa se realizeze un program care sa afiseze la deschidere un calculator compus din sapte butoane:
"C" - sterge,"+" - aduna,"/" - imparte,"x"- inmulteste, "-" - scade, "R"- radical, "%" - procent si trei
casete de text. In primele doua sa se introduca de catre utilizator operanzii (numere), iar in a treia sa
se afiseze rezultatul! La fiecare apasare de buton operatia atribuita acestuia sa aiba loc iar cifrele din
primele casete de text sa se stearga. Iar la fiecare operatie care nu se poate realiza sa se afiseze
motivul!
Rezolvare:
123
Else
r.Text = Val(a.Text) / Val(b.Text)
End If
End Sub
9. Sa se realizeze un program care sa determine relatia de mai mare sau mai mic intre doua numere.
Rezolvare:
Amplasati trei casete de text, a si b pentru operanzi si r pentru rezultat si butonul de comanda
compara. Scrieti urmatorul cod:
10. Scrieti un program care, folosind un cronometru, sa alterneze textul de pe un buton de comanda.
La apasarea butonul de comanda, se va afisa Caption-ul acelui buton.
Rezolvare
Amplasati pe forma un cronometru (Timer1) si un buton de comanda Command1. La proprietatea
Intrerval a lui Timer1 scrieti, de exemplu, valoarea 1000 (pentru o secunda). Valoarea 0 inseamna
nefunctionarea cronometrului, deci va trebui sa scrieti o valoare intreaga mai mare ca zero.
124
If Command1.Caption = "PRIMUL TEXT" Then
Command1.Caption = "AL DOILEA TEXT"
Else
Command1.Caption = "PRIMUL TEXT"
End If
End Sub
11. Scrieti un program care sa alterneze continutul unei casete cu imagine, la fiecare secunda.
Rezolvare
Sa consideram trei fisiere JPG, numite "unu.jpg", "doi.jpg" si "trei.jpg". Evident, in locul lor ar
putea fi alte fisiere JPG. Amplasam un control de tip Image si un cronometru. Cronometrul Timer1
va avea Interval=1000 (reprezentand o secunda). In proprietatea Tag a lui Image1 vom scrie 1, iar in
proprietatea Picture vom incarca prima imagine ("unu.jpg").
12. Scrieti un program care sa determine care este cel mai mic element dintr-o lista de numere
intregi.
Rezolvare
Fie lista L, avand elementele deja puse in ea (fie in etapa de proiectare a programului, fie in urma
apelarii metodei AddItem, din program). Pentru a determina cel mai mic element al listei, vom
folosi urmatorul algoritm (atasat unui buton de comanda Command1):
125
Ionuţ
13. Realizaţi un program care, pentru un număr natural cu valoarea maximă 100, îl scrie în cuvinte.
Rezolvare
126
c = "douazeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 3 Then
If Text1.Text = "0" Then
Y = "treizeci"
Else
c = "treizeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 4 Then
If Text1.Text = "0" Then
Y = "patruzeci"
Else
c = "patruzeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 5 Then
If Text1.Text = "0" Then
Y = "cincizeci"
Else
c = "cincizeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 6 Then
If Text1.Text = "0" Then
Y = "saizeci"
Else
c = "saizeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 7 Then
If Text1.Text = "0" Then
Y = "saptezeci"
Else
c = "saptezeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 8 Then
If Text1.Text = "0" Then
Y = "optzeci"
Else
c = "optzeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 9 Then
If Text1.Text = "0" Then
Y = "nouazeci"
Else
c = "nouazeci si"
Y = c + " " + z.Text
End If
ElseIf Text3.Text = 10 Then
Y = "o suta"
End If
End If
End If
Command1.Enabled = False
End Sub
127
X.SetFocus
End Sub
14. Realizati un program care, la incercarea apasarii unui buton, acesta sa fuga din calea mouse-
ului.
15. Realizati un program care sa determine, in functie de talie, varsta si sex, masa ideala a unei
persoane.
128
Rezolvare
Vom realiza programul cu intrebarile structurate in 4 forme, astfel:
Form1:
Form2:
129
Form2.Visible = False
Load Form3
Form3.Visible = True
End If
End Sub
Form3
End Sub
Form4:
Private Sub Command1_Click()
Unload Form4
Unload Form3
Unload Form2
Unload Form1
End Sub
130
16. Acelasi program, ca la 15, dar totul intr-o singura fereastra (dupa una cu explicatii).
Rezolvare:
Form1
Private Sub Command1_Click()
If Text1.Text = "" Or Text2.Text = "" Then
MsgBox "Introdu datele in casetele de text!!!"
Else
If Option1.Value = True Then
Label4.Caption = 50 + 0.75 * (Text1.Text - 150) + (Text2.Text -
20) / 4
ElseIf Option2.Value = True Then
Label4.Caption = 50 + 0.75 * (Text1.Text - 150) + (Text2.Text -
20) / 4 - 10
Else
MsgBox "Alege sexul?", vbOKOnly, "Ai sarit o etapa!!!"
End If
End If
If Val(Label4.Caption) < 0 Then
MsgBox "Am mentionat ca programul functioneaza la persoanele peste
150 de cm!!!", vbCritical, "EROARE!"
Text1.Text = ""
Label4.Caption = ""
Text1.SetFocus
End If
End Sub
131
Form2 (prima care va porni)
Private Sub Command1_Click()
Unload Form2
Load Form1
Form1.Visible = True
End Sub
17. Scrieri un program in care, prin intermediul unor butoane de optiune, dintr-o forma, sa se
modifice o alta forma.
Rezolvare:
Form1
Private Sub Command1_Click()
Load Form2
Form2.Visible = True
End Sub
132
Form2
18. Dintr-o forma, prin intermediul unor butoane, sa se deplaseze o alta forma.
133
Rezolvare
Form1
End Sub
Form2
Private Sub Command1_Click()
Unload Form2
End Sub
End Sub
134
135
Capitolul 5. Programe cu elemente avansate ale
mediului Visual Basic (Claudiu)
1. Sa se creeze un vector de controale Shape.
Rezolvare
Programul este un exemplu de folosire a unui vector de controale.Pentru crearea unui vector
de controale la momentul executiei trebuie numai scris numarului de ordine al unui control de la
care vrem sa pornim sa facem vectorul, in cazul programului Shape(0).Urmatoarele controale se
incarca prin intermediul instructiunii Load. Proprietatea Shape a controlui Shape are 6 valori fiecare
indicand o anumita forma geometrica a controlului.Proprietatea FillStyle determina modul in care
este colorat controlul, opac, transparent, sau cu diferite linii.
Controalele sunt mutate pentru a nu se suprapune.
Private Sub Form_Load()
Shape(0).FillStyle = 0
Shape(0).FillColor = vbGreen
Shape(0).Shape = 0
For i = 1 To 5
Load Shape(i)
Shape(i).Shape = i
Shape(i).FillStyle = 0
Shape(i).FillColor = vbMagenta
Shape(i).Top = Shape(i - 1).Top + 500
Shape(i).Left = Shape(i - 1).Left + i / 2 * 300
Shape(i).Visible = True
Next i
End Sub
2 Sa se scrie un program care sa deseneze o elipsa ale carei semiaxe sunt date de utilizator.
Rezolvare:
Programul arata modul de lucru cu instructiunea Circle, instructiune care poate desena si
elipse dar trebuie specificat aspectul, adica raportul dintre lungimea celor 2 semiaxe.
Programul nu masoara dimensiunile in twips ci in centimetrii, acest lucru se face prin
intermediul instructiunii:
Scale (-3540, 2505)-(3540, -2505)
Cu ajutorul evenimentelor GotFocus a casetelor de text, in care trebuie introduse
dimensiunile semiaxelor, casetele devin goale daca se vrea introducerea a noi dimensiuni a
semiaxelor.
136
Dim a, b As Byte
Dim aspect As Single
137
3. Sa se scrie un program care sa mute o forma folosind proprietatile Left si Top.
Rezolvare:
Programul foloseste functia Rnd care returneaza un numar aleatoriu.Acest numar e folosit
pentru a determina pozitia la care se muta form-ul.Form-ul se muta la fiecare 250 de milisecunde,
acest lucru se face prin intermediul unui control Timer.Functia Rnd returneaza urmatorul numar
aleatoriu pornind de la numarul anterior generat, pentru a evita acest lucru se foloseste instructiunea
Randomize care face ca functia Rnd sa returneze un numar aleatoriu pornind de la ceasul
sistemului.
138
4. Sa se creeze un program care sa afiseze numele autorilor din tabelul Authors al bazei de date
BIBLIO intr-o caseta de text.Sa se foloseasca un control Data.
Rezolvare:
Se amplaseaza pe forma un control de tip Data (cu numele Data1), apoi se realizeaza
conexiune cu baza de date respective, stabilind proprietatile corespunzatoare ale acestui control, asa
cum rezulta din urmatoarele figuri.
Programul leaga prin cod o caseta de text de o baza de date.Pentru a lega baza de date se
foloseste un control Data care furnizeaza datele necesare controlului caseta de text.Legarea casetei
de text de controlul Data se face prin atribuirea proprietatii DataSource ca valoare numelui
controlului Data si proprietatii DataField ca valoare numele campului tabelul bazei de date de care
vrem sa ne legam.
Proprietatii Connect a controlului Data ii atribuim ca valoare tipul de baza de data de care
dorim se ne legam, in cazul programului Access, proprietatii DatabaseName ii atribuim ca valoare
calea si numele fisierului ce contine baza de date,proprietatii RecordSource i se atribuie ca valoare
numele tabelului din baza de date ce ne intereseaza.
Toate aceste lucruri se pot face fara a scrie nici o linie de cod, toate valorile date fiind scrise
in fereastra de proprietati.
5. Sa se creeze un program care sa afiseze intr-un tabel MSFlexgrid continutul tabelului Authors din
baza de date BIBLIO.
Rezolvare
Amplasati un control Data si un tabel MSFlexGrid corespunzator (10 randuri si 5 coloane).
139
Dupa ce realizati conexiune cu baza de date, ca la programul anterior, scrieti urmatorul cod:
Private Sub Form_Load()
Data1.DatabaseName = "C:\Program Files\DevStudio\VB\BIBLIO.MDB"
Data1.RecordSource = "Authors"
End Sub
Programul contine un control MSFlexGrid care este legat de baza de date BIBLIO, baza de
date ce este furnizata cu limbajul de programare Visual Basic si are scop didactic.
Legarea unui tabel de o baza de date se face prin intermediul unui control data.Prin
intermediul proprietatii DataBaseName a contolului data se specifica baza de date de care sa se lege
controlul.
Data1.DatabaseName = "C:\Program Files\DevStudio\VB\BIBLIO.MDB"
Proprietati RecordSource i se da ca valoare numele tabelului din cadrul bazei de date cu care vrem
sa legam controlul data:
Data1.RecordSource = "Authors"
Mai sunt si alte 2 proprietati ale controlului Data care nu pot fi specificate la momentul executiei,
deci nu pot fi stabilite prin cod, ci trebuie stabilite la momentul scrieri programului.In fereastra de
proprietati, in dreptul proprietatii RecordsetType se alege Dynaset si in dreptul proprietatii Connect
se alege Acces, acesta fiind tipul bazei de date de care se leaga controlul.Controlului MSFlexgrid
trebuie sa aiba ca valoare a proprietatii DataSource numele controlului Data pe care il folosim
pentru a ne lega de o baza de date.
6. Sa se scrie un program care sa afiseze la apasarea unui buton un text peste o imagine continuta
intr-o caseta cu imagine.
Rezolvare
Picture1
Command1
140
Private Sub Command1_Click()a
Picture1.CurrentX = 600
Picture1.CurrentY = 1700
Picture1.FontSize = 12
Picture1.ForeColor = RGB(255, 255, 255)
Picture1.Print "Scriu pe o caseta cu imagine"
Command1.Visible = False
End Sub
Rezolvare
Programul arata modul in care se foloseste evenimentul DragDrop al unui form.Controlul
folosit pentru demonstrare este un buton a carei proprietate DragMode are valoarea 1.Aceasta
valoare face ca controlul sa poata fi mutat foarte simplu fara a fi nevoie sa se scrie cod pentru
fiecare eveniment in parte (Drag si apoi Drop), dar ii afecteaza modul de comportare in cazul
evenimentului click.Mutarea propriu-zisa a controlului se face cu ajutorul metodei Move.Procedura
evenimentului DragDrop deja ne da controlul asupra caruia are loc acest eveniment si deasemenea
si pozitia in care a fost eliberat controlul prin variabilele X si Y.Pentru ca miscarea sa fie naturala
controlul este mutat astfel incat mijlocul sau ( X - Source.Width / 2), (Y - Source.Height / 2) sa
corespunda locului in care se afla pointerul mouse-ului in momentul in care a fost eliberat.
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Move (X - Source.Width / 2), (Y - Source.Height / 2)
End Sub
8. Sa se scrie un program care sa sesiseze cand un control este miscat peste un alt control, dar sa nu
permita mutarea acelui control.
Rezolvare
141
Label1
Command1
Label2 (initial Label3
Caption="")
9. Sa se scrie un program care sa contina doua casete de text si care sa permita mutarea textului
selectat dintr-o caseta de text in alta.
Rezolvare:
Private Sub Form_Load()
Text1.OLEDragMode = 1
Text1.OLEDropMode = 2
Text2.OLEDragMode = 1
Text2.OLEDropMode = 2
End Sub
10. Sa se creeze o clasa care sa aiba o proprietate care sa contina un numar, si o metoda care sa
calculeze aria unui cerc de raza egala cu valoarea retinuta in proprietate.Sa se foloseasca clasa in
cadrul unui program care sa calculeze aria unui cerc de raza data.
Rezolvare
Amplasati in partea de sus a formei un control Picture1 de tip PictureBox, peste care suprapuneti
trei controale de tip Image (Image1, Image2 si Image3):
142
Private Sub Image2_Click()
MsgBox ("A fost apasat al doilea 'buton'")
End Sub
Programul arata modul in care se poate construi o bara de instrumente.S-a folosit un control
Picture care a fost folosit ca container pentru alte 3 controale Image.Fiecarui control Image i-a fost
atribuita cate o imagine specificandu-se calea fisierului care contine imaginea pe care am dorit s-o
afisam pe „buton”.Operatia ce ar trebui sa fie determinata de apasarea unui anumit buton se faca
prin intermediul evenimentului click al controlului Image.
Controlul Picture s-a folosit doar pentru o mai usoara manipulare a controalelor Image.
12. Sa se scrie un program care sa contina doua casete de text si sa nu permita mutarea textului
selectat dintr-o caseta de text in alta
Rezolvare:
Private Sub Form_Load()
Text1.OLEDragMode = 1
Text1.OLEDropMode = 2
Text2.OLEDragMode = 1
Text2.OLEDropMode = 0
End Sub
13. Sa se scrie un program care sa permita in timpul executiei alegerea obiectului ce va fi inserat
intr-un container OLE.
Rezolvare
Amplasati pe forma un control OLE cu numele OLE1 si un buton de comanda Command1. Scrieti
apoi codul urmator:
Private Sub Command1_Click()
OLE1.InsertObjDlg
OLE1.SizeMode = 2
End Sub
14. Sa se scrie un program care sa permita cautarea printre fisierele din calculator, si care la
selectarea unuia sa afiseze un mesaj.
Rezolvare
143
Private Sub File1_Click()
MsgBox "Ati selectat un fisier"
End Sub
15. Sa se scrie un program care sa permita cautarea printre fisierele din calculator, si care la
selectarea unuia sa afiseze un mesaj care sa contina numele fisierului ales, precum si directorul, si
unitatea de disc in care se afla.
Rezolvare
16. Sa se scrie un program care sa caute un fisier dupa nume odata ce a fost selectat directorul sau
subdirectorul in care se afla fisierul.
Rezolvare
Dim i As Integer
Dim gasit As Boolean
144
i = i + 1
Loop
End Sub
Programe comentate
17. Programul arata modul in care poate fi folosit un control numit CommonDialog. Acest control
poate fi folosit pentru a selecta un anumit fisier si a returna calea acestuia.
Metoda ShowOpen arata fereastra prin care se poate selecta fisierul dorit, iar proprietatea
FileName returneaza calea si numele fisierului ales.
Proprietatea Filter permite selectarea fisierelor ce sunt afisate dupa extensia lor:
CommonDialog1.Filter = "Fisiere text (.txt)|*.txt"
caracterul „|” separa o scurta descriere Fisiere text (.txt) de modul de specificare a extensiei
dorite *.txt.
Private Sub Form_Load()
CommonDialog1.Filter = "Fisiere text (.txt)|*.txt"
CommonDialog1.ShowOpen
Text1.Text = CommonDialog1.filename
End Sub
145
18. Programul permite alegerea si afisarea unei imagini, dar deseneaza deasupra ei o linie.Grosimea
liniei e stabilita prin intermediul proprietatii Drawidth.Proprietatea DrawStyle determina modul in
care se vor vedea elementele grafice desenate pe controlul Picture.Proprietatea AutoRedraw daca
are valoarea True face ca elementele grafice suprapuse peste o imagine sa fie pastrate in memorie si
ca acestea sa-si pastreze proportiile fata de dimensiunea controlului daca dimensiunea acestuia se
schimba.Daca proprietatea are valoarea False elementele grafice sunt doar desenate pe ecran si nu
sunt pastrate in memorie in timpul rularii programului.
Desenarea liniei se face prin intermediul instructiunii Line:
Command1.Visible = False
146
Picture1.AutoSize = True
CommonDialog1.Filter = "Fisiere ce contin imagini (*.jpg)|*.jpg"
CommonDialog1.ShowOpen
Set Picture1.Picture = LoadPicture(CommonDialog1.filename)
Picture1.AutoRedraw = True
Picture1.DrawStyle = vbSolid
Picture1.DrawWidth = 3
Picture1.Line (400, 1000)-(10400, 1000)
Command1.Visible = False
End Sub
19. Programul afiseaza o imagine selectata de utilizator si la apasarea unui buton scrie un text
deasupra ei.Stabilirea locului in care se va scrie textul se face prin instructiunile:
Picture1.CurrentX = 600
Picture1.CurrentY = 1700
Dimensiunea literelor se face prin intermediul proprietatii FontSize si scrierea efective se
face prin intermediul metodei Print.Valoarea proprietatii AutoSize este True, deci controlul Picture
este redimensionat automat la dimensiunea imaginii.
20. Programul leaga un fisier ales de utilizator de un container OLE.Containerul OLE poate fi legat
sau poate contine diferite obiecte inserabile.Tipurile obiectelor ce pot fi inserate in containerele
OLE sau legate de acestea pot fi selectate in momentul crearii programului sau pot fi alese prin cod
in momentul executiei.
Programul leaga un obiect inserabil prin cod in momentul executiei programului.Controlul
CommonDialog e folosit pentru a da o mai mare flexibilitate programului.Metoda CreateLink a
containerului OLE are nevoie de calea fisierului ce va fi legat de control si pentru a furniza aceasta
cale este folosita proprietatea FileName a controlului CommonDialog.
La apasarea butonului formul pe care se afla containerul isi mareste dimensiunile la
dimensiunile ecranului, pentru a face acest lucru este folosit obiectl Screen.Form-ul este aliniat cu
ecranul prin modificarea proprietatilor Left si Top, iar containerul OLE este marit si pozitionat
exact peste form.Programul insa dupa afisarea fisierului legat in containerul OLE nu sterge butonul.
147
End Sub
Programul arata modul in care sunt afisate obiectele legate in containerul OLE cand este
modificata proprietatea SizeMode.Valoarea 0 obiectul este „taiat” de marginile containerului,1
obiectul este intins sa corespunda dimensiunilor containerului, dar nu se pastreaza proportiile
originale, 2 containerul este redimensionat pentru a afisa in totalitate obiectul, 3 obiectul este
redimensionat pentu a incapea in container, dar se are grija sa se pastreze proportiile originale.
In program pentru a se referi la form-ul curent este folosit cuvantul rezervat Me.
21. Programul permite vizualizarea unui fisier ales de utilizator ce contine o imagine.In caseta cu
lista a fisierelor sunt afisate numai fisierele care au extensii folosite pentru fisiere ce contin imagini,
acest lucru se face prin atribuirea unei valori proprietatii Pattern
File1.Pattern = "*.bmp;*.ico;*.wmf;*.emf"
Programul are deasemenea si un sistem de tratare a erorilor, adica cand are loc o eroare ea
este intrceptata si in loc de opri programul se executa o anumita sectiune de cod.Semnalarea unui
astfel de sistem se face prin instruciunea:
On Error GoTo tratareerori
unde tratareerori este o eticheta.Dupa sfarsitul procedurii in care este folosit acest sistem se scrie
codul care va fi executat daca se intercepeaza o eroare.In cazul programului exista cod de tratare a 2
erori, daca nu exista nici o discheta in unitate, sau unitatea nu functioneaza, si unitatea nu
exista.Exista si un al treilea caz, cand apare o alta eroare, dar acest caz e tratat doar prin afisarea
numarului si descrierea erorii.
Instructiunea Resume face ca programul sa reia instructiunea in timpul careia a aparut
eroarea, Resume Next face ca programul sa reia instructiunea urmatoare celei in timpul executiei
careia a aparut eroarea.
148
Instructiunea Stop opreste derularea programului dar nu il descarca din memorie si nici nu
sterge valoarea vreunei variabile.
Err este un obiect care contine informatii despre erorile aparute in timpul executiei,
informatii ce pot fi obtinute prin intermediul proprietatilor Number si Description.
Dim a As String
Dim nr As Integer
149
Private Sub File1_Click()
nr = File1.ListIndex
a = File1.List(nr)
MsgBox File1.Path & "\" & a
numefis = File1.Path & "\" & a
Image1.Picture = LoadPicture(numefis)
End Sub
23. Visual Basic permite selectarea obiectului ce va fi inserat intr-un container OLE si de catre
utilizator, acest lucru se face cu ajutorul metodei InsertObjDlg.
24. Programul permite utilizatorului inserarea intr-un container OLE a obiectului inserabil pe care il
doreste si deasemenea permite salvarea obiectului intr-un fisier ales tot de catre el.
Salvarea obiectului dintr-un container OLE se face cu ajutorul metodei SaveToFile, daca
obiectul e legat se pastreaza numai legatura se pastreaza, daca obiectul e inserat se pastreaza tot.
Deschiderea unui fisier se face prin instructiunea Open urmata de calea si numele fisierului,
apoi se scrie modul de acces la fisier.In cazul programului fisierul e deschis pentru orice tip de
acces, si de scriere si de citire.Dupa modul de deschidere al fisierului trebuie specificat numarul de
ordine al fisierului.Un fisier odata de a fost deschis nu trebuie uitat a fi inchis prin instructiunea:
Close #1
150
Private Sub Command1_Click()
CommonDialog1.ShowOpen
Open CommonDialog1.filename For Random As #1
OLE1.SaveToFile 1: Close #1
End Sub
Private Sub Form_Load()
Command1.Caption = "Salveaza"
OLE1.InsertObjDlg
OLE1.AppIsRunning = True
End Sub
25. Progamul contine doua containere OLE si intr-unul dintre ele este incorporat un obiect inserabil
de tip Paint.Picture, deci poate fi creata o imagine de tip bitmap.Primele doua ghilimele din
instructiunea de mai jos sunt necesare pentru a specifica ca obiectul inserat nu se creeaza plecand de
la un fisier deja existent, ci se creeaza un obiect incorporat vid de tip Paint.Picture. Obiectul inserat
este activat prin intermediul metodei DoVerb.
OLE1.CreateEmbed "", "Paint.Picture"
Programul permite salvarea desenului creat, precum si vizualizarea desenului salvat intr-un
fisier ales de utilizator si care trebuie sa existe inainte de a incerca salvarea obiectului.
Private Sub Command2_Click()
OLE2.Visible = True
CommonDialog1.ShowOpen
Open CommonDialog1.filename For Binary As #1
OLE2.ReadFromFile 1
Close #1
End Sub
151
Capitolul 6. O aplicaţie concretă, pas cu pas (Andreea)
Paşii de urmat pentru crearea unui program în Visual Basic, pentru recomandarea
tratamentelor pentru diferite afecţiuni:
1. Denumiti forma in care lucrati: "Medicamente" si scrieti in antetul formei: "Spune NU durerii".
2. Realizati un tabel care sa se numeasca: "M" si care sa contina 6 coloane si 51 de randuri, dintre
care prima coloana si primul rand sa fie fixe.(Daca controlul Microsoft Flex Grid nu se gaseste de la
bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in
felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte
componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul
acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.)
3. Adaugati in partea de sus a tabelului o eticheta pe care sa scrie: "Lista Medicamente:". Mariti si
ingrosati literele, apoi schimbati-le culoarea.
5. Scrieti in randul fix urmatoarele cuvinte care vor reprezenta capurile de tabel:
Coloana 1-"Nr.crt"
Coloana 2-"Denumire"
Coloana 3-"Prezentare"
Coloana 4-"Tara/Firma"
Coloana 5-"Indicatii"
Coloana 6-"Contraindicatii".
Numerotati fiecare rand in celulele din prima coloana.
7. Realizati 2 butoane: unul care sa permita adaugarea unui rand la tabel care se va numi:
"AdaugaRand" si pe care sa scrie "+" si unul care sa realizeze stergerea unui rand din tabel, care sa
se numeasca: "StergeRand" si pe care sa scrie: "-".(Randul adaugat trebuie sa fie numerotat
corespunzator)
8. Realizati un buton cu ajutorul caruia sa salvati datele inregistrate in tabel care sa se numeasca:
"Salveaza" si pe care sa scrie: "Salveaza datele" si un alt buton prin care sa incarcati datele care sa
aiba numele: "Incarca" si pe care sa scrie: "Incarca datele".
10. Pentru a facilita utilizarea programului creati posibilitatea de a incarca datele automat la
apasarea butonului Start.
11. Realizati o subrutina care sa permita ordonarea alfabetica a datelor din fiecare coloana.
152
12. Amplasati in forma o lista simpla care sa contina tipurile de forme de prezentare ale
medicamentelor inregistrate. Lista sa se numeasca: "Prez", sa fie de tip CheckBox iar elementele
sale sa se poata ordona alfabetic.Adaugati in partea de sus a listei o eticheta pe care sa scrie: "Forme
de prezentare".
13. Realizati 2 butoane: unul care sa permita bifarea tuturor casutelor din lista, care sa se numeasca
"BifeazaToate" si pe care sa se afle semnul: "+" si un buton care sa realizeze deselectarea tuturor
casutelor bifate, care sa se numeasca: "DeselecteazaToate" si pe care sa scrie: "-".
14. Realizati o lista care sa contina toate afectiunile pe care le-ati trecut in tabel la categoria
Indicatii", lista care sa se numeasca: "Afectiuni", iar elementele sale sa fie ordonate alfabetic.Creati
posibilitatea de a selecta mai multe elemente din lista. Adaugati in partea de sus a listei o eticheta pe
care sa scrie:"Selectati afectiunile".
15. Amplasati 2 butoane: unul care sa permita selectarea tuturor elementelor din lista de afectiuni,
sa se numeasca: "Selecteaza" si pe care sa se afle semnul: "+" si un buton care sa realizeze
deselectarea tuturor elementelor, sa se numeasca: "Deselecteaza" si pe care sa scrie: "-".
16. Realizati un tabel care sa se numeasca: "T" si care sa contina 6 coloane si un rand fix. Creati
posibilitatea de a mari sau micsora celulele cu ajutorul mouse-ului.
18. Scrieti in randul fix urmatoarele cuvinte care vor reprezenta capurile de tabel:
Coloana 1-"Nr.crt"
Coloana 2-"Denumire"
Coloana 3-"Prezentare"
Coloana 4-"Tara/Firma"
Coloana 5-"Indicatii"
Coloana 6-"Contraindicatii".
20. Creati o subrutina care sa permita, la actionarea butonului Tratament si dupa selectarea formelor
de prezentare si a afectiunilor, afisarea medicamentelor si a caracteristicilor lor (prezente in tabelul
M) corespunzatoare afectiunilor selectate.
21. Scrieti subrutina care realizeaza ordonarea alfabetica a tuturor coloanelor din tabelul: "T".
22. Amplasati o eticheta in partea de jos a aplicatiei care sa contina urmatoarea atentionare:
ATENTIE: Aceasta aplicatie ofera informatii despre posibilele tratamente ale unor afectiuni, dar
NU inlocuieste sfatul medicului!".
24. Realizati un buton care sa se numeasca: "End" si pe care sa scrie: "Iesire", care sa realizeze
iesirea din program.
153
Rezolvări
2. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid. Initial tabelul va fi numit
"MSFlexGrid1" (trebuie denumit "M") si va avea 2 randuri si 2 coloane, dar putem modifica
proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul
trebuie sa contina 51 de randuri si 6 coloane).Prima coloana si primul rand sunt fixe de la inceput.
4. La inceput toate coloanele au aceeasi latime. Cu ColWidth se pot modifica valorile, aceasta
proprietate fiind un vector. De exemplu, prin atribuirea M.ColWidth(0)=M.ColWidth(0)/2 se va
injumatati grosimea primei coloane, respectiv, prin atribuirea M.ColWidth(1)=M.ColWidth(1)*2 se
va dubla grosimea celei de-a doua coloane.
5. Pentru a scrie in randul fix trebuie folosita proprietatea TextMatrix. De exemplu, prin atribuirea
M.TextMatrix(0,0)="Nr.crt", in celula corespunzatoare primului rand si primei coloane va scrie
"Nr.crt".
Pentru a numerota fiecare rand se utilizeaza instructiunea repetitiva cu contor, "For", astfel:
For i = 1 To M.Rows - 1
M.TextMatrix(i, 0) = i
Next i
154
6. Subrutina care realizeaza scrierea in tabelul "M", apeland la evenimentul KeyPress, este
urmatoarea:
Private Sub M_KeyPress(KeyAscii As Integer)
If (KeyAscii = 8) And (M.Text <> "") Then
L = Len(M.Text)
M.Text = Left(M.Text, L - 1)
Else
If KeyAscii >= 32 Then
M.Text = M.Text + Chr$(KeyAscii)
End If
End If
End Sub
155
Open App.Path + "\tabel.txt" For Output As #1
Print #1, M.Rows
For i = 0 To M.Rows - 1
For j = 0 To M.Cols - 1
Print #1, M.TextMatrix(i, j)
Next j
Next i
Close #1
End Sub
Pentru a deschide fisierul in vederea citirii de date din el se foloseste : Open cale + nume
fisier For Input as #numar. Citirea de date se face cu Input #numar, variabilele_de_citit (pentru
numere) sau cu Line Input #numar, variabilele_de_citit (pentru siruri de caractere). Inchiderea unui
fisier deschis pentru citire se face prin Close #numar.
Subrutina care realizeaza incarcarea datelor este urmatoarea:
Private Sub Incarca_Click()
Open App.Path + "\tabel.txt" For Input As #1
Input #1, x
M.Rows = x
For i = 0 To M.Rows - 1
For j = 0 To M.Cols - 1
Line Input #1, s
M.TextMatrix(i, j) = s
Next j
Next i
Close #1
End Sub
9. Posibilitatea de a mari sau micsora celulele din tabel cu ajutorul mouse-ului se creeaza cu
proprietatea AllowUserResizing care are diferite valori ce permit utilizatorului sa redimensioneze
randurile/coloanele tabelului.
10. Pentru ca datele sa se incarce automat, adaugati la codul atasat formei urmatoarul text:
156
Incarca_Click
11. Cu ajutorul urmatoarei subrutine se pot ordona alfabetic toate coloanele tabelului "M" prin
efectuarea unui simplu Click pe fiecare coloana. S-a folosit instructiunea de selectie multipla Case
si metoda de ordonare prin selectie directa.
Exemplu general: metoda consta in determinarea la fiecare pas i din cei n-1, a celui mai mic
element dintre X(i), X(i+1), X(i+2),…X(n), care va ocupa pozitia i. Asadar, in fiecare pas i vom
compara pe X(i) cu elementele X(j), cu j de la i+1 la n, iar ori de cate ori se gaseste un element X(j)
mai mare decat X(i), cele doua elemente se interschimba. Prin urmare, la pasul i are loc o selectie
directa a elementului ce va ocupa pozitia a i-a in vectorul ordonat.
Private Sub M_Click()
Select Case M.Col
Case 1:
For i = 1 To M.Rows - 2
For j = i + 1 To M.Rows - 1
If M.TextMatrix(i, 1) > M.TextMatrix(j, 1) Then
For k = 1 To 5
aux = M.TextMatrix(i, k)
M.TextMatrix(i, k) = M.TextMatrix(j, k)
M.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 2:
For i = 1 To M.Rows - 2
For j = i + 1 To M.Rows - 1
If M.TextMatrix(i, 2) > M.TextMatrix(j, 2) Then
For k = 1 To 5
aux = M.TextMatrix(i, k)
M.TextMatrix(i, k) = M.TextMatrix(j, k)
M.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
157
Case 3:
For i = 1 To M.Rows - 2
For j = i + 1 To M.Rows - 1
If M.TextMatrix(i, 3) > M.TextMatrix(j, 3) Then
For k = 1 To 5
aux = M.TextMatrix(i, k)
M.TextMatrix(i, k) = M.TextMatrix(j, k)
M.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 4:
For i = 1 To M.Rows - 2
For j = i + 1 To M.Rows - 1
If M.TextMatrix(i, 4) > M.TextMatrix(j, 4) Then
For k = 1 To 5
aux = M.TextMatrix(i, k)
M.TextMatrix(i, k) = M.TextMatrix(j, k)
M.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 5:
For i = 1 To M.Rows - 2
For j = i + 1 To M.Rows - 1
If M.TextMatrix(i, 5) > M.TextMatrix(j, 5) Then
For k = 1 To 5
aux = M.TextMatrix(i, k)
M.TextMatrix(i, k) = M.TextMatrix(j, k)
M.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
End Select
End Sub
158
12. Lista simpla o puteti amplasa cu ajutorul controlului ListBox din Toolbox. Denumirea listei se
realizeaza la proprietatea "Name", modificati proprietatea "Sorted" cu valoarea True si proprietatea
"Style" cu valoarea 1-CheckBox. Scrieti tipurile de forme de prezentare ale medicamentelor la
proprietatea List, separate de Ctrl+Enter. La final apasati Enter.
Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor
folosind proprietatea "Caption" din tabelul de proprietati din dreapta.
13. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc
la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".
Aceasta subrutina permite bifarea tuturor casutelor din lista cu forme de prezentare prin
actionarea butonului "BifeazaToate".
Private Sub BifeazaToate_Click()
For i = 0 To Prez.ListCount - 1
Prez.Selected(i) = True
Next i
End Sub
Urmatoarea subrutina permite deselctarea tuturor casutelor din lista cu forme de prezentare,
la apasarea butonului "DeselecteazaToate".
Private Sub DeselecteazaToate_Click()
For i = 0 To Prez.ListCount - 1
Prez.Selected(i) = False
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Selected() = Vector numerotat incepand cu 0, cu valori de tip Boolean ce contine True dca
elementul este selectat, respectiv False, daca nu este selectat.
14. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste
folosind proprietatea "Name". Scrieti afectiunile la proprietatea List, separate prin Ctrl+Enter, iar la
final apasati Enter. Modificati proprietatea "Sorted" cu valoarea True pentru ca elementele sa se
159
ordoneze alfabetic. Posibilitatea de a selecta mai multe elemente din lista se poate crea, modificand
proprietatea "MultiSelect" cu valoarea 1-Simple.
Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor
folosind proprietatea "Caption" din tabelul de proprietati din dreapta.
15. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc
la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".
Aceasta subrutina permite selectarea tuturor elementelor din lista de afectiuni prin
actionarea asupra butonului "Selecteaza".
Private Sub Selecteaza_Click()
For i = 0 To Afectiuni.ListCount - 1
Afectiuni.Selected(i) = True
Next i
End Sub
Urmatoarea subrutina permite deselectarea tuturor elementelor selectate din lista de afectiuni
prin actionarea asupra butonului "Deselecteaza".
Private Sub Deselecteaza_Click()
For i = 0 To Afectiuni.ListCount - 1
Afectiuni.Selected(i) = False
Next i
End Sub
unde:
ListCount = Numarul elementelor din lista
Selected() = Vector numerotat incepand cu 0, cu valori de tip Boolean ce contine True dca
elementul este selectat, respectiv False, daca nu este selectat.
16. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid. Initial tabelul va fi numit
"MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica
proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul
trebuie sa contina 1 rand si 6 coloane). Numarul de randuri, respectiv coloane fixe se poate
schimba, cu ajutorul proprietatilor FixedRows si FixedCols.
160
Posibilitatea de a mari sau micsora celulele din tabel cu ajutorul mouse-ului se creeaza cu
proprietatea AllowUserResizing care are diferite valori ce permit utilizatorului sa redimensioneze
randurile/coloanele tabelului.
17. La inceput toate coloanele au aceeasi latime. Cu ColWidth se pot modifica valorile, aceasta
proprietate fiind un vector. De exemplu, prin atribuirea M.ColWidth(0)=M.ColWidth(0)/2 se va
injumatati grosimea primei coloane, respectiv, prin atribuirea M.ColWidth(1)=M.ColWidth(1)*2 se
va dubla grosimea celei de-a doua coloane.
18. Pentru a scrie in randul fix trebuie folosita proprietatea TextMatrix. De exemplu, prin atribuirea
M.TextMatrix(0,0)="Nr.crt", in celula corespunzatoare primului rand si primei coloane va scrie
"Nr.crt".
19. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc
la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".
20. Pentru a crea o astfel de subrutina avem nevoie mai intai de o functie care sa vada daca este
marcat vreun element din lista cu forme de prezentare. Aceasta functie este:
Function EsteMarcat(ByVal s As String)
ok = False
For i = 0 To Prez.ListCount - 1
If Prez.List(i) = s And Prez.Selected(i) = True Then
ok = True
161
End If
Next i
EsteMarcat = ok
End Function
Subrutina care permite, la actionarea butonului Tratament si dupa selectarea formelor de
prezentare si a afectiunilor, afisarea medicamentelor si a caracteristicilor corespunzatoare
afectiunilor selectate este urmatoarea:
Private Sub Tratament_Click()
n = Afectiuni.ListCount
k = 0: T.Rows = 1
For j = 0 To n - 1
If Afectiuni.Selected(j) = True Then
For i = 1 To M.Rows - 1
If InStr(M.TextMatrix(i, 4), Afectiuni.List(j)) <> 0 And _
EsteMarcat(M.TextMatrix(i, 2)) Then
k = k + 1
T.Rows = k + 1
T.TextMatrix(k, 0) = k
T.TextMatrix(k, 1) = M.TextMatrix(i, 1)
T.TextMatrix(k, 2) = M.TextMatrix(i, 2)
T.TextMatrix(k, 3) = M.TextMatrix(i, 3)
T.TextMatrix(k, 4) = M.TextMatrix(i, 4)
T.TextMatrix(k, 5) = M.TextMatrix(i, 5)
End If
Next i
End If
Next j
End Sub
unde:
InStr(S,L) = 0, daca L nu se afla in S
= pozitia in care se afla L in S.
162
21. Cu ajutorul urmatoarei subrutine se pot ordona alfabetic toate coloanele tabelului "T" prin
efectuarea unui simplu Click pe fiecare coloana. S-a folosit instructiunea de selectie multipla Case
si metoda de ordonare prin selectie directa.
Exemplu general: metoda consta in determinarea la fiecare pas i din cei n-1, a celui mai mic
element dintre X(i), X(i+1), X(i+2),…X(n), care va ocupa pozitia i. Asadar, in fiecare pas i vom
compara pe X(i) cu elementele X(j), cu j de la i+1 la n, iar ori de cate ori se gaseste un element X(j)
mai mare decat X(i), cele doua elemente se interschimba. Prin urmare, la pasul i are loc o selectie
directa a elementului ce va ocupa pozitia a i-a in vectorul ordonat.
Private Sub T_Click()
Select Case T.Col
Case 1:
For i = 1 To T.Rows - 2
For j = i + 1 To T.Rows - 1
If T.TextMatrix(i, 1) > T.TextMatrix(j, 1) Then
For k = 1 To 5
aux = T.TextMatrix(i, k)
T.TextMatrix(i, k) = T.TextMatrix(j, k)
T.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 2:
For i = 1 To T.Rows - 2
For j = i + 1 To T.Rows - 1
163
If T.TextMatrix(i, 2) > T.TextMatrix(j, 2) Then
For k = 1 To 5
aux = T.TextMatrix(i, k)
T.TextMatrix(i, k) = T.TextMatrix(j, k)
T.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 3:
For i = 1 To T.Rows - 2
For j = i + 1 To T.Rows - 1
If T.TextMatrix(i, 3) > T.TextMatrix(j, 3) Then
For k = 1 To 5
aux = T.TextMatrix(i, k)
T.TextMatrix(i, k) = T.TextMatrix(j, k)
T.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 4:
For i = 1 To T.Rows - 2
For j = i + 1 To T.Rows - 1
If T.TextMatrix(i, 4) > T.TextMatrix(j, 4) Then
For k = 1 To 5
aux = T.TextMatrix(i, k)
T.TextMatrix(i, k) = T.TextMatrix(j, k)
T.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
Case 5:
For i = 1 To T.Rows - 2
For j = i + 1 To T.Rows - 1
If T.TextMatrix(i, 5) > T.TextMatrix(j, 5) Then
For k = 1 To 5
aux = T.TextMatrix(i, k)
T.TextMatrix(i, k) = T.TextMatrix(j, k)
T.TextMatrix(j, k) = aux
Next k
End If
Next j
Next i
End Select
End Sub
22. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor
folosind proprietatea "Caption" din tabelul de proprietati din dreapta.
23. Schimbarea culorii de fundal a formei se realizeaza cu ajutorul proprietatii BackColor din
tabelul de proprietati din dreapta.
24. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc
la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption".
Urmatoarea subrutina realizeaza iesirea din program prin actionarea butonului "End".
Private Sub End_Click()
End
End Sub
164
165
Bibliografie
3. Luminita Fanaru, Ioan Brava – Visual Basic. Primii pasi si urmatorii, Editura
Polirom, Iasi, 2003
166