You are on page 1of 18

1.

Uvod u programski jezik Visual Basic


(v.6)
Uvod
Evo da malo kompenziram prevagu C i C++ programera na ovom forumu odlucio sam
napisati pokoji vodic za Visual Basic programski jezik. Ovdje cemo govoriti u prvom redu o
VB-u verziji 6 iako ce se vecina sadrzaja moci primjeniti i na nize verzije. Nazalost,
vjerojatno ce samo dio sadrzaja raditi u slucaju VB.net-a.

Zelio sam napraviti kratke, jednostavne vodice koje bi citatelji jednostvano probavili ali
nazalost, shvatio sam da za to nisam sposoban. Moj programerski nacin razmisljanja
sprijacava me da izostavim ista bitno ili da radim neke skracene verzije za apsolutne
pocetnike. Pokusat cu vodice uciniti sto preglednijim da nemorate citati sve vec samo ono sto
vas zanima iako moram predloziti da sve makar jednom prodjete. Pa sretno vam bilo!

Ovo je inicijalna verzija vodica. Neke stvari vjerojatno nisu precizno definirane, neke su
mozda i netocne. Zelio sam pokriti sto vishe podrucja pa nisam imao zivaca previshe stvari
provjeravati i posteno formulirati. Komentari i kritike su i vise nego dobrodosli. Pomoci ce
ove vodice uciniti sto boljima. Pa cemo iztlacit Scompanya da mijenja. A stas Scompany sam
si se u to uvalio... :D

Kratka povijest VB-a


Prva verzija Visual Basica je proizvedena 1987g. od naravno Microsofta. Uspjesno su spojili
svoj vjerojatno jedini kompletno razvijeni proizvod tog doba, programski jezik Basic sa
grafickim vizulanim okruzenjem vecinom pobranim od Applea u kombinaciji sa objektno
orijentiranim modelom. To je prvi programski jezik takvog tipa za PC, sposoban u par minuta
uraditi zadatke za koje bi koristenjem ostalih konzolnih jezika trebalo par sati ako ne i dana.
Jednostavna cinjenica da se GUI programa stvarao u letu jednostavnim bacanjem kontrola na
formu, u kombinaciji sa jednostavnoscu sintakse Basic programskog jezika bila je razlog
zasto VB poslije verzije 2.0 postaje najbrze rastuci programski jezik u svijetu.

Par cinjenica o VB-u:

* VB je programski jezik koji cete najlakse nauciti. Njegova sintaksa je toliko jednostavna i
lako pamtljiva da se neke naredbe mogu jednostavno pogoditi. Pazite, jednom kad iskusite
VB-ovu sintaksu sve ostale sintakse izgledaju odvratno.

* VB-ova jednostavnost je otisla tako daleko da su neke slozenije stvari (iako rijetko
potrebne) puno teze za izvesti (ali ne nemoguce).

* VB vam toliko olaksava posao programiranja da neke stvari koje bi morali znati u drugim
programskim jezicima necete uopce nauciti.

* VB od programera zahtjeva vrlo malo znanja i za izvedbu vrlo kompliciranih stvari jer
vecinu posla obavlja sam. Danak ovakvog pristupa mogu biti sporije performanse. Ako pak
zelite zaobici VB-ovo uplitanje i pomaganje morat cete cesto raspolagati vecim znanjem nego
kod ostalih programskih jezika.
* VB nije samo kompajler nego je ujedno i interpreter. To znaci da osim sto se od programa
moze napraviti izvrsna verzija (npr. EXE) koja ce se moci pokrenuti, program je sposoban
izvrsiti kod i bez samog procesa kompajliranja. To je korisna stvar kod samog programiranja
jer VB pokusava izvrsavati vash kod dok ga pishete pa vas moze izvjestiti o pogresci odmah
nakon sto ju ucinite. Takodjer je testiranje programa brze i jednostavnije.

* VB programi nisu sposobni sami raditi na racunalu bez tzv. "runtime modula". radi se o par
datoteka koje cete nazalost morati ukljuciti u instalaciju vaseg programa programa ako ga
namjeravate distribuirati ili se pouzdati u to da je korisnik dovoljno inteligentan da ih skine
sam (u sto nemojte racunati). Nesto slicno kao sa .net programima koji zahtijevaju .net
framework da bi radili.

Moj zakljucak o VB-u


VB je u stvari kao droga. Lako se navucete a kad ste ga jednom okusili sve ostalo vas
frustrira.
Slicno kao situacija izmedju grafickog okruzenja i konzolnog. Konzolno moze biti bolje i
fleksibilnije ali u vecini slucajeva frustrira jer zahtijeva nepotrebne akcije da bi se postigao
isti cilj.

"Hello World" aplikacija


Ok, sad kad smo to razjasnili krenimo na "Hello World" aplikaciju. To je savrseni primjer
razlike izmedju VB-a i vecine ostalih programskih jezika. C programeri vjerojatno sad
ocekuju par redaka koda sa inportovima librarija, kompajliranje programa te pokretanje,
nakon cega ce iskociti konzola sa ispisom "Hello World".

E pa nebi ishlo. VB se davno odrekao konzole. Da, moguce je napraviti konzolnu aplikaciju
ciji bi rezultat bio slican onome u C-u ali je za to potrebno koristiti Windowsov API
(programsko sucelje OS-a) i to je prilicno slozen zadatak za VB. Daleko izvan opsega ovog
vodica. Eto primjera da je VB ponekad slozeniji od C-a i zahtijeva vece znanje. Naravno
"Hello World" aplikaciju mozemo izvesti i na nacin pristupaciji VB-u:

Private Sub Form_Activate()


Print "Hello World"
End Sub

Ovo je vjerojatno najjednostavniji nacin za izvedbu ovog zadatka. Po izvrsavanju programa


otvorit ce se forma na kojoj ce pisati "Hello World".

Objasnjenje koda:
Prva linija je deklaracija funkcije koja se u objektno orijentiranom programiranju strucno
zove "event" (dogadjaj). Event se izvrsava u odredjenom trenutku izvrsavanja programa,
obicno kada se ispuni neki unaprijed zadani uvjet. Ovaj event je clan objektne skupine naziva
"Form" te se zove "Activate". Izvrsava se nakon sto je forma ucitana te prikazana. Tek onda je
moguce pisati na formu.
Drugi red odradjuje samo pisanje. VB sam donosi pretpostavku da zelite pisati na formu kojoj
je ovaj kod dodijeljen.
Zadnji red oznacuje zavrsetak ove event-funkcije.

2. Visual Basic IDE (programsko okruzenje)


Uvod
U ovom vodicu nudim turisticki obilazak VB-ovih prozorcica, menija, opcija... uglavnom
svega vrijednog spomena. Predlazem Vam da ovo procitate jer cete se inace tesko snaci kroz
sumu prozorcica u VB-u. Vjerovali ili ne svaki od njih ima svrhu. Standardni layout je
prilicno dobro slozen i predlazem vam da ga ne mijenjate iako to naravno ostaje na vama.

Cim pokrenete VB izletava Vam prozorcic naslovljen : "New Project" Tu imate donekle sirok
izbor templatea koji sluze kao temelji za razlicite projekte. Alfa i Omega, a i odbaran po
defaultu jest Standard EXE projekt. I uistinu on je pogodan za vecinu aplikacija. Njega cete
uvijek koristiti kroz moje vodice osim ako kazem suprotno. Otvorite novi projekt.

Prvi pogled na VB IDE:

Atrakcije:

Meni i traka s alatima


Na vrhu imamo Meni VB-a i traku sa alatima. Kao i kod vecine aplikacija Meni sadrzi ama
bash sve. Bez obzira zelite li spremiti projekt, vratiti prozorcic koji ste slucajno izgasili,
promjeniti font, bla, bla Meni je covjek za vas. Ispod Menija je traka sa alatima. U osnovi
precica na neke od koristenijih opcija menija sa zgodnim slicicama. Mozete tu dodavati ili
brisati stvarcice. Bazveze ta traka. Nisam ni znao da je tu... Samo zauzima prostor. Ajmo
dalje...

Project Explorer
E ovo je vec nesto korisno... Ovdje imamo neke stvarcice poslozene u hierarhiji stabla. Tu se
nalaze svi moduli koje koristimo u projektu. Kao sto vidite tu imamo dva elementa. Svaki
element je prikazan diskretnom ikonicom koja sluzi kako bi se lako prepoznavali razliciti
tipovi modula te sa dvije "rijeci" u formatu x(y). x predstavlja ime elementa dok je y ime
datoteke u koju je spremljen.
E sad mi imamo dva takva elementa.
Projekt1 - U stvari ni nije modul. Sluzi samo kao korjenski element te predstavlja nas projekt.
S time se ne previshe zamarati
Form1 - E je vec nesto konkretno. Cesto vidjena Windowsova forma.

Properties Explorer
E ovaj nam prozorcic vec pruza obilje informacija.
U vrhu imamo combobox (drop-down lista) u kojem pise Form1 Form. Form1 predstavlja ime
nase forme vec spomenute u objasnjenu Project Explorera. Form je tip ovog objekta. U ovom
comboboxu se nalaze sve kontrole koje postoje u projektu. Za sad je to samo nasa forma.
Podatci u tablici ispod prikazuju sva svojstva trenutno odabrane kontrole iz gore spomenutog
comboboxa, odnosno momentalno nase forme Form1. Tu imate svasta: od naslova forme do
boje pozadine. Igrajte se malo s time. Ne grize.
Na dnu je kratko tekstualno objasnjenje trenutno odabranog svojstva.

Form Layout
Najnepotrebniji prozorcic u VB-u! Zaboravite odmah na njega. Jedino sto on pruza jest
precizirat pocetnu poziciju forme na ekranu i to cini strahovito neprecizno.
Toolbox
Tu imamo puno lipih stvari. Sve kontrole koje su dostupne u vasem projektu. Kontrole su
objekti koji se stavljaju na formu a sluze vecinom za interakciju sa korisnikom. Primjeri
kontrola su npr. gumbici, polja za unos teksta, prekidaci, natpisi... Odaberete ih i trpate na
formu prikazanu u Form Designeru. Potom vrdajte po njihovim svojstvima u Properties
Exploreru. Necu ih posebno objasnjavati - bar ne u ovom vodicu. Eksperimentirajte.

Form Designer
E tu se vrshe radovi oko dizajna programa. Prikazuje nasu formu eventualno postojecim
kontrolama koje smo pobacali na nju iz toolboxa.

Sve je to lijepo i krasno, ali gdje je kod???


Ah da... kod. Imamo i to. Kako doci do njega? Pretpostavljam da ima neki gumbic u alatnoj
traci... a mozda i nema :P
Code Editor
Do ovoga obicno dolazimo duplim klikom na neku od kontrola ili formu u Form Designeru.
Npr. dupli klik na formu ce nam prikazati ovaj prozorcic te nam namjestiti defaultnu funkciju
forme (Form_Load) za editiranje.
Na vrhu imamo dva comboboxa. Lijevi sadrzava popis objekata (o objektima drugi put, usput
receno kontrole su tipovi objekata) trenutnog modula odnosno nasu formu i eventualne
kontrole koje ste na nju pobacali. U desnoj se nalazi popis procedura (funkcija) koje pripadaju
odabranom objektu.
Ova dva u stvari nemorate niti koristiti, jedino cemu sluze jest da vam pronadju postojecu
funkciju u hrpi koda ili da vam automatski napisu deklaraciju funkcije.
Ispod imamo polje za unos koda. Tu se nalazi sav kod modula. Tu pisete svoj kod.

Pokretanje programa
Ako ovi vodici ikome pomognu da nesto i izprogramira treba reci i kako se program pokrece.
Kompajliranje nije potrebno ako se radi o testiranju. Samo stisnete tipku F5 ili odaberete Run-
>Start iz menija. Ako zelite kompajirati program onda idete File->Make [ime_projekta].exe iz
menija.

Ovime zavrsavam turisticko putovanje IDE-em VB-a. Nadam se da cete opet letjeti s
nama. :D

3. Tipovi varijabli u Visual Basicu


Uvod
Varijable su rezervirana mjesta u memoriji koja sluze za pohranjivanje podataka. Varijable se
u VB-u mogu deklarirati bilo gdje unutar modula. Znaci nemoraju biti deklarirane prije
ostatka koda.

VB kao programski jezik koji je prilagodjen jednostavnosti koristenja ne zahtijava da se kod


deklaracije same varijable precizira njezin tip. Stovishe VB ne zahtijeva uopce deklaraciju
varijabli. U takvim slucajevima varijablin tip automatski postaje specijalni tip varijable
predvidjen za upravo takve slucajave - "variant". Varijabla tipa variant moze sadrzavati
podatak bilo kojeg tipa (osim objektnih varijabli o cemu necemo u ovom vodicu).
pa zasto onda postoje tipovi varijabli u VB-u? u ovom kratkom vodicu odgovorit cu na to
pitanje i dati objasnjenje svih tipova varijabli.

Variant - svemoguca varijabla


Prilikom deklaracije varijable preciziranjem specificnog tipa (bilo koji osim variant), VB-u
govorimo kao prvo koliki memorijski prostor je potrebno zauzeti za varijablu te kako ju
kasnije tretirati. Iako je "variant" prilicno napredan tip podataka te on vecinu problema oko
tipa varijabli moze automatski rijesiti, za to treba vrsiti razlicite provjere i konverzije sto
usporava rad programa. Kod vecih programa to usporavanje postaje i vishe nego osjetno,
otezava preglednost samog programa te jednostavno nije profesionalno. Takodjer zauzima
vishe memorijskog prostora.

Kako bi izbjegli slucajno izostavljanje deklaracije varijabli, iskusniji programeri od VB-a


traze eksplicitno deklariranje varijabli dodajuci naredbu "Option Explicit" u deklaracijsko
podrucje modula (izvan svih funkcija). Koristenjem Option Explicit naredbe VB ce prijaviti
gresku za svaku koristenu varijablu koja nije deklarirana.

Sintaksa deklaracije varijable u VB-u:

Citat:
Dim ime_varijable as tip_varijable

Prefiks (Dim):
Prefiks koji od VB-a trazi automatsko odredjivanje opsega djelovanja. Za vishe informacija
pogledati vodic "Opsezi djelovanja"

Imena Varijabli:
Imena varijabli u VB-u moraju pocinjati sa slovom. Preporuca se za prva tri slova kratica tipa
radi preglednosti ali to je na vama. Duzina imena varijable nesmije biti duze od 255 znakova.
Varijabla nesmije sadrzavati tocku u imenu niti deklaracijski znak (%, &, !, #, @, $...).

Tipovi varijabli:

Tipovi za pohranu numerickih podataka:

Integer - varijabla velicine 16 bita (2 bytea) predvidjena za pohranjivanje cjelobrojnih


vrijednosti manjeg opsega (deklaracijski znak: %)

Dim intBroj as Integer


intBroj = 1

Long - varijabla velicine 32 bita (4 bytea) predvidjena za pohranjivanje cjelobrojnih


vrijednosti veceg opsega (deklaracijski znak: &)

Dim lngBroj as Long


lngBroj = 1234567890

Single - varijabla velicine 32 bita (4 bytea) predvidjena za pohranjivanje decimalnih


vrijednosti manjeg opsega (deklaracijski znak: !)
Dim sngBroj as Single
sngBroj = 0.1

Double - varijabla velicine 64 bita (8 bytea) predvidjena za pohranjivanje decimalnih


vrijednosti veceg opsega (deklaracijski znak: #)

Dim dblBroj as Double


dblBroj = 0.1234567890

Currency - varijabla velicine 64 bita (8 bytea) predvidjena za novcane kalkulacije i slicno te je


izvjesni krizanac izmedju varijabli predvidjenih za pohranjivanje cjelobrojnih vrijednosti i
decimalnih vrijednosti, takodjer vrlo precizna (deklaracijski znak: @)

Dim curBroj as Currency


curBroj = 1234567890.1234

Tip za pohranu binarnih podataka:

Byte - varijabla velicine 8 bita (1 bytea) te se obicno binarni podatci (podatci koji nisu
specificnog tipa, tip je nepoznat ili nepodrzan od strane programskog jezika) pohranjuju u
polja ovog tipa (deklaracijski znak - ne postoji ?!?!). Vrijednost ove varijable moze biti 0-255.

Dim bytBajt as Byte


bytBajt = 65

Tip za pohranu znakovnih podataka:

String - string je u osnovi polje znakova. postoje dvije vrste stringova: stringovi varijabilne
duzine i stringovi fiksne duzine. stringovi varijabilne duzine mogu sadrzvavati nesto vishe od
2 milijarde znakova (2^31) dok stringovi fiksne duzine mogu sadrzavati 64K znakova (2^16).
(deklaracijski znak: $). Stringovi se u VB-u navode pod znakovima navodnika ("string").

Dim strRijec as String


strRijec = "Ovaj vodic sucks!"

Tip za pohranu vrijednosti istinitosti:

Boolean - jednostavan tip varijable cije vrijednosti mogu biti samo True (istinito) ili False
(neistinito). iako je za sam podatak potrebno samo 1bit u VB-u ova varijabla zauzima 16
bitova (2 bytea).

Dim bDaNe as Boolean


bDaNe = True

Tip za pohranu datumskih i vremenskih vrijednosti:

Date - varijabla velicine 64 bita (6 bytea). Unatoc nazivu on sadzava ne samo podatak o
datumu nego i vremenu. reprezentacija podatka upisanog u ovoj varijabli moze varirati ovisno
o postavkama operativnog sistema na kojem se izvodi.
Dim DatumVrijeme as Date
DatumVrijeme = #10/9/2006 4:53:00 PM#
---

Konstante:
konstante su varijable ciju vrijednost nije moguce mijenjati tijekom izvodjenja programa (run-
time). one su precizno definirane od strane programera tijekom pisanja programa (design-
time) te sluze za definiranje cesto koristenih vrijednosti u programu. pritom programeru
pomazu time sto nemora pamtiti vrijednost same varijable nego simbolicko ime koje je
konstanti dodijelio.

Primjer:

Dim Const dblPi as Double = 3.14159265

---

Konverzije varijabli:
VB ima vrlo napredan nacin tretiranja varijabli pa se vecina konverzija koje su moguce
automatski odvijaju i nije ih potrebno rucno konvertirati za razliku od npr. C programskog
jezika. O konverzijama vishe mozda u nekom od narednih vodica...

4. Grananja i petlje
Uvod
Grananja i petlje se koriste kako bi se prekinuo normalan (slijedni) tok programa.

Grananja se koriste kako bi se skocilo sa jedne naredbe u programu na drugu nakon cega se
tok programa nastavlja normalno izvrsavati sa te druge lokacije. Postoje uvjetna i bezuvjetna
grananja. Ako program naleti na bezuvjetnu petlju izvrsit ce skok na definiranu lokaciju
programa. Uvjetna grananja su pak podijeljena u vishe blokova od kojih svaki ima preciziran
uvjet. Ako uvijet zadovoljava tok programa ulazi u taj blok te izvrsava kod unutar bloka.

Petlje se koriste kako bi se odredjeni dio koda izvrshio vishe puta. I kod petlji postoje uvjetne
i bezuvjetne petlje. Bezuvjetne petlje se izvrsavaju u beskonacnost jer ne postoji uvjet koji bi
uvjetovao izlaz iz petlje pa je potrebno uvrstiti nekakav kod koji bi to omogucio. U suprotnom
se program nece moci prekinuti na normalan nacin. Uvjetne petlje sadrzavaju uvjet koji
odredjuje kada ce se kod unutar petlje prestati izvrsavati i normalan tok programa ponovno
uspostaviti.

Grananja

o GoTo - Naredba bazuvijetnog grananja. Nekad se koristila za skakanje na neki dio


procedure oznacen labelom (broj ili string koji zavrsava znakom dvotocke). Danas
se ne preporuca niti u stvari ima ikakvu korisnu svrhu osim za rjesavanje greski
(error handling) u kombinaciji sa On Error naredbom. Takav pristup sprijecava
program da prekine izvodjenje u slucaju greske te omogucava popravak zabrljanog
kako bi program mogao nastaviti izvodjenje. Resume Next vraca program nakon
izvrsavanja koda za rijesavanje gresaka na naredbu iza one koja je prouzrocila
gresku.

Primjer:

Sub Main()
On Error GoTo ErrorHandler
'kod funkcije
Exit Sub

ErrorHandler:
'kod za baratanje greskama
Resume Next
End Sub

o If...Then grananje - Omogucava stvaranje vishe blokova (grana) uvijetnog


grananja. Svakom bloku je pridruzen uvjet koji mora biti ostvaren kako bi program
po dolasku do grananja usao u blok te izvrsio naredbe unutar bloka.
Definicija bloka (grane) pocinje sa prefiksom (If, ElseIf ili Else), slijedi uvjet bloka
a zavrsava sa kljucnom rijeci "Then" cisto zbog fluidnosti sintakse.
Prvi blok je uvjek definiran sa "If" prefiksom, dok se "ElseIf" prefiks koristi za
naredne.
Moguce je koristiti i prefiks Else za zadnji blok. U takav blok program ulazi ako niti
jedan drugi blok nije zadovoljio uvjet. Zato se uvjet ne definira za ovaj blok.
Nakon definiranja svih blokova naredbom End If se oznacava kraj uvjetnog
grananja.

Primjer:

Dim intBroj as Integer


intBroj = 0

If intBroj > 0 Then


Print "Broj je pozitivan"
ElseIf intBroj < 0 Then
Print "Broj je negativan"
Else
Print "Broj je jednak nuli"
End If

o Select Case grananje - Kao i kod If...Then grananja omogucava stvaranje vishe
blokova uvjetnog grananja. Razlika je u tome sto se uvjet kod Select Case bloka
uvjek vrti oko iste varijable.

Primjer:

Select Case intBroj


Case 0
Print "Broj = 0"
Case Else
Print "Broj razlicit od nule"
End Select

Petlje

o Do...Loop - Bezuvjetna petlja. Kod unutar ove petlje ce se izvrsavati u


beskonacnost. U ovakvom obliku se koristi rijetko, obicno kod graficki zahtjevnih
programa u glavnoj funkciji. Ako se ovakva patlja koristi potrebno je OS-u pruziti
priliku da obavi druge poslove kako nebi doslo do zamrznuca (koristenjem
DoEvents naredbe). O tome mozda jednom drugom prilikom. Od ovakve petlje kao
baze se izvode neke uvjetne petlje dodavanjem uvjeta.

Primjer:
*kad smislim nesto posteno

o Do While...Loop - Uvjetna petlja. Uvjet se provjerava prije izvrsavanja naredbi


unutar petlje. Sve dok je uvjet ispunjen kod unutar petlje se uzastupno izvrsava.
Kada uvijet prestane zadovoljavati program izlazi iz petlje te nastavlja sa
normalnim izvodjenjem programa.

Primjer:

Dim intBroj as Integer


intBroj = -1
Do While intBroj > 0
Print intBroj
intBroj = intBroj - 1
Loop

*kod unutar petlje u ovom primjeru se nece izvrsiti niti jedanput jer uvjet ne
zadovoljava.

o Do...Loop While - Gotovo identicna petlja kao i Do While...Loop petlja. Jedina


razlika je u tome sto ce se ovakva petlja izvrsiti uvjek makar jedanput. Razlog tomu
jest sto se uvjet provjerava na kraju petlje. Evo isti primjer u ovakvoj petlji:

Primjer:

Dim intBroj as Integer


intBroj = -1
Do
Print intBroj
intBroj = intBroj - 1
Loop While intBroj > 0

*u ovom primjeru ce se petlja izvrsiti jedanput iako uvjet petlje od samog pocetka
ne odgovara. to je zato sto ce se uvjet provjeriti tek kada se kod unutar petlje izvrsi
prvi put.
o For...Next - Uvjetna petlja napravljena specificno za ponavljanje naredbi unutar
petlje odredjeni broj puta. Za tu potrebu je potrebno rezervirati jednu varijablu koja
ce sluziti kao brojac. Precizira se pocetna vrijednost brojaca i zavrsna vrijednost.
Moze se precizirati i korak brojaca odnosno za koliko ce se on mijenjati svaki
ciklus. Ako korak nije preciziran brojac se inkrementira za 1 svaki ciklus.

Primjer:

Dim i as Integer
For i = 10 To 1 Step -1
Print i
Next i

*ova petlja ce se izvrsiti 10 puta. u svakom ciklusu ce ispisati jedan broj, pocevsi sa
10 i umanjujuci za 1 svaki ciklus.

o While...Wend - Petlja koja je uvrstana u VB samo zbog kompatibilnosti sa


QBasicom. Ne preporucuje se koristenje ove petlje te je puno sporija od sebi
identicne Do While...Loop petlje koja ju zamijenjuje u VB-u.

5. Funkcije u Visual Basicu


Uvod
Funkcije su logicki podijeljci koda.
Kao i u ostalim programskim jezicima funkcija moze vracati vrijednost a i nemora. Za razliku
od ostalih (barem meni poznatih) jezika takve funkcije u VB-u imaju cak i posebno nazivlje.
Tako se funkcija koja ne vraca vrijednost zove Sub, dok se ona koja vraca zovu Function. Za
razliku od npr. C-a kod VB-a funkcije nemoraju biti poslozene po redu pozivanja u toku
programa. Mijesati po volji.

o Funkcija koja ne vraca vrijednost (Sub):

Private Sub JaaaviSe ()


MsgBox "Tu sam!"
End Sub

U prvom redu imamo deklaraciju funkcije. Prefiks "Private" odredjuje opseg


djelovanja funkcije (za daljnje informacije pogledati vodic "Opsezi djelovanja").
Sub je kljucna rijec koja znaci da se radi o funkciji koja ne vraca vrijednost. () sluze
za odredjivanje ulaznih argumenata funkcije. Ova ih nema sto ne znaci da ih
nemoze imati. Za daljnje informacije bacite pogled na primjer funkcije koja vraca
vrijednost - ovaj dio je isti za obje.
Drugi red je naredba koja izbacuje prozorcic sa porukom. Vishe o tome u clanku
"Msgbox i InputBox".
Treci red oznacava kraj ove funkcije.

Primjer pozivanja ove funkcije:


DajGlas
o Funkcija koja vraca vrijednost (Function):

Function ZbrojiDvaBroja (PrviBroj as Long, DrugiBroj as


Long) as Long
ZbrojiDvaBroja = PrviBroj + DrugiBroj
End Function

U prvom redu je deklaracija funkcije. "Function" je kljucna rijec koja govori da se


radio o funkciji koja vraca vrijednost. Unutar zagrada je popis varijabli i njihovih
tipova koje se moraju proslijediti funkciji odvojenih zarezom. Na kraju je odredjen
tip varijable koju funkcija vraca.
U drugom redu je naredba koja zbraja dvije ulazne varijable te rezultat dodijeljuje
varijabli koju funkcija vraca.
Treci red oznacava kraj funkcije

Primjer pozivanja ove funkcije:


Print ZbrojiDvaBroja (2 , 3)

Prosjedjivanje varijabli.
U VB se pa defaultu (za razliku od C-a) varijable proslijedjuju preko pokazivaca (reference),
odnosno funkciji se ne proslijedjuje vrijednost koju varijabla ima neko memorijska adresa
same varijable. drugim rijecima ne radi se duplikat varijable koju proslijedjujete nego se
barata upravo sa tom varijablom koju ste proslijedili. Zato se mogu desiti greske jer ce bilo
kakve promjene koje cete raditi sa varijablom unutar funkcije ostaju trajne i po povratku u
funkcije iz koje se proslijedila. Ako zelite varijablu proslijediti po vrijednosti trebate koristiti
ByVal prefiks. U nekim slucajevima to moze dobro doci. Npr. zamislimo da nam vrijednost
ulazne varijable treba ostati nepromjenjena u narednom primjeru. Umjesto da koristimo
dodatnu varijablu kako bi sacuvali ulaznu varijablu (cija bi se vrijednost na kraju funkcije
promijenila u 0), koristenjem ByVal prefiksa sacuvavamo njenu vrijednost.

Sub IspisiDoNule (ByVal lngPolaznaVrijednost as Long)


Do
Print lngPolaznaVrijednost
lngPolaznaVrijednost = lngPolaznaVrijednost - 1
Loop While lngPolaznaVrijednost > 0
End Sub

Prisilni izlazak iz funkcije:


Funkcija se normalno izvrshava dok ne dodje do svoga kraja koji oznacavaju "End Sub" ili
"End Function". No moguce je izaci iz funkcije i prije kraja koristenjem naredbi "Exit
Function" ili "Exit Sub". Te naredbe se cesto koriste kao jedan od rezultata grananja.

6. Opsezi djelovanja
Uvod
Ovdje cemo malo govoriti i opsezima djelovanja odnosno dostupnosti: varijabli, funkcija,
struktura te enumeratora. Opsezi djelovanja nemoraju biti strogo definirani no onda to VB
radi umjesto vas dodjeljujuci nekakav difoltni opseg djelovanja. Vecinom se radi o
najmanjem mogucem opsegu djelovanja iz sigurnosnih razloga.
Ako zelite da vasa varijabla, funkcija, definicija strukture ili enumeratora bude dustupna u
sirem rasponu npr. u cijelom vasem projektu trebat cete znati sami odrediti opseg djelovanja.

Naputci:
Strukture i enumeratori moraju biti definirani izvan svih funkcija.

Kao i kod ostalih programskih jezika vrijedi pravilo da se varijabla deklarirana unutar
procedure moze koristiti samo iz te iste procedure. Po izlasku toka programa iz procedure
varijabla prestaje postojati (odnosno memorijski prostor rezerviran za varijablu se oslobadja)
pa se i njezin sadrzaj gubi. Postoji iznimka preciziranjem Stitic prefiksa.

Dim mozemo sluziti kao prefiks za deklariranje varijabli. U tom slucaju opseg varijable je
automatski odredjen. Varijable dekarirane unutra funkcija moramo deklarirati sa prefiksom
Dim (osim ako zelimo da budu staticne) jer je varijabla deklarirana unutar funkcije dostupna
samo iz te funkcije pa prefiksi Private i Public nemaju smisla.

Prefiksi za odredjivanje opsega djelovanja:


Opseg djelovanja varijable, funkcije, strukture ili enumeratora se definira prilikom deklaracije
pomocu jednog od navedenih prefiksa:

Private - opseg djelovanja je ogranicen na maticni modul.


Public - opseg djelovanja unutar cijelog projekta (u svim modulima).

*modul moze biti jedna forma, modul, klasa a vjerojatno i stosta drugo. to je jedan clan
Project Explorera.

Static - specijalan prefiks koji se koristi samo kako bi varijable neke funkcije prezivjele
izlazak iz funkcije u kojoj su deklarirane. ponovnim zvanjem te funkcije varijable su sacuvale
prijasnje vrijednosti. Moze se koristiti pri deklariranju varijabli unutar funkcije ili se moze
koristiti prilikom deklariranja funkcije kako bi se sve varijable te funkcije ucinile
"staticnima".

Public VarijablaDostupnaSvugdje as Integer

Private Sub FunkcijaDostupnaSamoIzModula ()


Static VarijablaDostupnaSamoIzFunkijeAliNeUmire as Long
End Sub

7. Enumeratori, polja i strukture


Enumeratori:
enumeratori se koriste kako bi se definirao specijalan tip varijabli koji je gotovo identican tipu
long s iznimkom sto su neke od mogucih vrijednosti reprezentirane imenom zbog lakseg
snalazenja. u stvari, to je skup konstanti koje sluze zajednickoj svrsi. enumeratori se definiraju
izvan svih funkcija te se kasnije mogu definirati varijable enumeriranog tipa.

Private Enum eBoje


ebCrna = 0
ebBijela = 1
ebCrvena = 2
End Enum

Sub Main()
Dim lngBoje as eBoje

lngBoje = ebBijela 'vrijednost varijable lngBoje


postavljamo na vrijednost 1
End Sub

Polja:
polje je skup varijabli istog tipa. varijable unutar polja su organizirane unutar jedne ili vishe
dimenzija. Znajuci poziciju neke varijable u svim dimenzijama polja moguce je pristupiti toj
varijabli. Svaka dimenzija polja ima preciziranu gornju i donju vrijednost. Postoje dva tipa
polja: polja fiksne velicine i polja dinamicke velicine. Polja dinamicke velicine je moguce
vise puta redimenzionirati (promjeniti velicinu ili broj dimenzija) dok se poljima fiksne
velicine dimenzije i njihove velicine odredjuju prilikom deklaracije i nemogu se kasnije
mijenjati.

o Polja fiksne velicine


primjer deklaracije polja fiksne velicine:

Dim aTablicMnozenja (1 To 10, 1 To 10) as Long

U ovom primjeru smo deklarirali polje koje smo nazvali "aTablicaMnozenja". To je


dvodimenzionalno polje gdje obje dimenzije imaju 10 clanova. Donja granica obje
dimenzije je 1 dok je gornja 10 (1 To 10). Kao sto vidimo deklaracije dimenzija
polja su odvojena zarezom. Ovo polje ima ukupno 100 clanova (10*10). Tip polja
(odnosno varijabli u polju) je Long.

o Polja dinamicke velicine


primjer deklaracije polja dinamicke velicine:

Dim aTablicaMnozenja () as Long

Ovdje smo deklarirali polje pod imenom aTablicaMnozenja. Tip polja je Long dok
dimenzije kao sto vidite nisu odredjene. To VB-u govori da se radi o polju
dinamicke velicine. Redimenzioniranje odnosno odredjivanje broja i velicine
dimenzija vrsi se na sljedeci nacin:

Redimenzioniranje polja dinamicke velicine:

ReDim aTablicaMnozenja (9 , 9)

Ovime dobivamo polje koje je po svemu identicno gornje navedenom polju fiksne
velicine. Znaci imamo dvoje dimenzije od kojih je svaka velicine 10. Zasto? Zato
sto doljnja granica dimenzija nije definirana (unosom samo jednog atributa VB
pretpostavlja da se radi o gornjoj granici) kao u gornjem primjeru (1 To 10). Bez
unesene donje granice VB koristi defaultnu vrijednost koja je 0. Od 0 do 9 imamo
10 vrijednosti isto kao od 1 do 10.
Treba napomenuti da se redimenzioniranjem gubi prijasnji sadrzaj polja. To se
moze izbjeci dodavanjem atributa Preserve

Redim Preserve aTablicaMnozenja (9, 10)

Nazalost, ovakvom upotrebom ReDim funkcije mozemo mijenjeti samo zadnju


dimenziju polja kao u primjeru. Za ostale situacije trebat cete podatke negdje
pohraniti prije redimenzioniranja kako ih nebi zgubili.

Otkrivanje gornjih i donjih granica polja (UBound i LBound)


Vrijednosti gornje i donje granice polja mozemo dobiti dvijema naredbama: LBound i
UBound. Funkcija LBound vraca vrijednost donje granice neke dimenzije nekog polja dok
UBound vraca gornju granicu.

Ubound (aTablicaMnozenja , 1)

vraca gornju granicu prve dimenzije aTablicMnozenja polja.

LBound (aTablicaMnozenja , 2)

vraca donju granicu druge dimenzije aTablicMnozenja polja.

Pristup varijablama u polju


Sve sto nam treba jest vrijednost svake dimenzije polja gdje se varijabla nalazi:

aTablicaMnozenja (3 , 7) = 666

*polja se cesto kombiniraju sa petljama kako bi se u par linija koda proslo sve clanove polja.

Strukture:
Kombiniranjem vishe varijabli razlicitih tipova dobivamo strukture iliti korisnicki definirane
tipove (UDT). Strukture koristimo kada zelimo grupirati vishe povezanih varijabli razlicitih
tipova. Strukturu definiramo unutar Type...End Type bloka na nivou modula odnosno izvan
svih funkcija.

Primjer definiranja strukture:

Type Kontakt
Ime as String
Prezime as String
TelefonskiBroj as String
End Type

Deklaracija varijable strukturno definiranog tipa:

Dim udtMojKontakt as Kontakt

Pristup varijablama unutar strukture:

udtMojKontakt.Ime = "Mirko"
*strukture se cesto koriste u kombinaciji sa poljima. stvara se polje tipa strukture koje se
potom obicno obradjuje petljama. tako bi sa ovakvim primjerom mogli imati sve svoje
kontakte spremljene u jednom polju. takav primjer mozete ocekivati u vodicu sa primjerima.

8. MsgBox i InputBox
Uvod
Ovo su dvije funkcije koje se cesto koriste za testiranje programa. Razlog tomu je sto
zamijenjuju najcesce upotrebljavane kontrole. Gdje god je moguce, koristiti cu ove dvije
funkcije u primjerima kroz vodice. Tako ce i vama biti jednostavnija metoda testiranja
primjera - u vecini slucajeva ce biti dovoljno koristiti copy-paste te samo pokrenuti program.

Msgbox
Funkcija koja izbacuje jednostavni prozorcic sa porukom i jednim ili vishe gumbica pomocu
kojih dobiva korisnikov odgovor. Pauzira normalno izvodjenje programa dok korisnik ne
klikne na neki od ponudjenih gumbica. Nakon korisnikove interakcije prozorcic nestaje te se
izvodjenje programa nastavlja a sama funkcija vraca podatak koji govori koji je gumbic
korisnik kliknuo.

Evo pojednostavljena sintaksa sa najkoristenijim atributima:

MsgBox ( prompt , [buttons] , [title] )

prompt : tu upisete poruku koja ce se pojaviti u prozorcicu. naravno radi se o string tipu
varijable pa se sadrzaj upisuje unutar navodnika ("sadrzaj")
buttons : opcionalno - radi se o jednoj od vrijednosti definiranih kao konstante u VB-u. ovaj
atribut odredjuje izgled i mogucnosti MsgBox prozorcica. Ukoliko nije upisano koristi se
default (vbOKOnly). Navest cu samo one koji odredjuju koji ce gumbici biti prisutni (mislim
da nema potrebe objasnjavati sto koja konstanta znaci): vbOKOnly, vbOKCancel,
vbYesNoCancel, vbYesNo, vbAbortRetryIgnore, vbRetryCancel.
title : opcionalno - naslov prozorcica.

Moguce konstante koje vraca ova funkcija: vbOK, vbCancel, vbAbort, vbRetry, vbIgnore,
vbYes, vbNo.

Private Sub Form_Unload(Cancel As Integer)


Select Case MsgBox("Vrsene su promjene na dokumentu.
Zalite li spremiti prije izlaska?",
vbYesNoCancel, "Potvrdite izlaz iz programa")
Case vbYes
'kod za spremanje dokumenta
Case vbNo
'normalno nastavi gasenje programa
Case vbCancel
Cancel = -1 'obustavi gasenje programa
End Select
End Sub
InputBox
Funkcija koja izbacuje jednostavan prozorcic sa porukom, poljem za korisnikov unos
tekstualnih podataka (textbox) te uvijek dva gumbica: OK i Cancel. Kao i MsBox pauzira
izvodjenje programa sve dok korisnik ne klikne na neki od gumbica. Ako korisnik klikne na
gumbic OK funkcija vraca text koji je korisnik unjeo u polje za unos, a ako se radi o Cancel
gumbicu vraca prazan string ("").

Pojednostavljena sintaksa:

InputBox ( prompt , [title] , [default] )

prompt : poruka koja se pojavljuje u prozorcicu.


title : opcionalno - naslov prozorcica
default : opcionalno - inicijalna vrijednost koja ce biti unesena u polje za unos. preciziranjem
ovoga mozemo razlikovati dali je korisnik kliknuo Cancel gumbic ili je kliknuo OK ali nije
unjeo nikakav tekst.

MsgBox ("Bok " & InputBox("Upisi svoje ime:"))

Ovo je primjer sa ugnijezdjenim funkcijama. Prvo se izvrsava funkcija InputBox te korisnik


upisuje svoje ime. Tek nakon toga se izvrsava MsgBox funkcija koja ispisuje kratak string
spojen sa imenom koje je korisnik upisao u InputBox prozorcic.

You might also like