MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI - Skripta za vanredne učenike – (Četvrti razred – VB) Travnik, 2008. Sadržaj 1. UVOD 6 Pokretanje Visual Basica-a Prvi pogled na radno okruženje Toolbox Project explorer Osobine - Properties Form Layout Postavljanje kontrola na formu Pokretanje programa Dodavanje programskog koda 2. OSNOVE DIZAJNIRANJA 18 Uvod Form Kontrole Pristupne tipke Formatiranje Podešavanje osobina u fazi rada programa Izbornici / Meniji 3. OSNOVE PISANJA PROGRAMSKOG KODA 30 Uvod Prozor za pisanje programskog koda – View Code Event procedure Opće procedure / funkcije Parametarske procedure Funkcije Načini prikaza procedura / funkcija Neke važniji događaji Message i Input box Provjera sintakse Auto Member liste Duge linije programskog koda 4. VARIJABLE 44 Deklaracije varijbli Tipovi varijabli DIM ključna riječ Nazivi varijabli Dodjeljivanje vrijednosti varijablama Inicijaliziranje varijabli 4 Pisanje izraza u naredbama pridruživanja Pravila redoslijeda izvršavanja operacija Operacije sa nizovima riječi (stringovima) Nizovi Jednodimenzionalni nizovi Višedimenzionalni nizovi Dinmiački nizovi Korisnički definirani tipovi 5. OSNOVNE NAREDBE 55 Uslovni izrazi Logička poređenja Logičke operacije NOT AND OR XOR EQV IMP Redoslijed izvršavanja Naredbe odlučivanja IF naredba SELECT CASE naredba Programske petlje DO petlja FOR petlja Naredbe za grafički prikaz Naredba LINE Naredba CIRCLE API Funkcije 6. RAD SA DATOTEKAMA PODATAKA 70 Uvod Datoteke sa slučajnim pristupom Postupak rada sa datotekama sa slučajnim pristupom Otvaranje datoteka sa slučajnim pristupom Upisivanje podataka Čitanje podataka Pozicioniranje na željeni red unutar datoteke podataka Tekstualne datoteke Kreiranje i otvaranje tekstualnih datoteka Upisivanje podataka Čitanje podataka Zatvaranje tekstualnih datoteka 5 1. UVOD Pokretanje Visual Basica-a U tekstu će se koristiti primjeri i uputstva vezana za Visual Basic 6.0 (VB) koji se isporučuje od strane Microsoft-a kao dio većeg i kompletnijeg paketa programa namijenjenih razvoju aplikacija pod nazivom Visual Studio 6.0. Gotovo sve rečeno moguće je primjeniti kako za starije varijante VB-a tako i za novije inačice ovog programskog jezika. Slika 1.1 – Pokretanje Visual Basic-a 6 Nakon instalacije Visual Basica, program je u Windows-ima moguće jednostavno pokrenuti korištenjem izbora Start – All Programs – Microsoft Visual Studio 6.0 – Microsoft Visual Basic 6.0, kao što je to i pokazano na Slici 1.1. Prvi prozor koji se pojavljuje na ekranu nakon pokretanja Visual Basic-a je prozor New Project, slika 1.2.- Project je termin kojim se označava svaki program koji se kreira u Visual Basic-u. Slika 1.2 – Prozor New Project U ovisnosti od postavki vezanih za pokretanje Visual Basica-a moguće je da se prozor New Project i ne pojavi nakon prvog pokretanja te da se automatski otvori novi podrazumijevani tip projekta (uobičajeno je da je to Strandard EXE tip projekta). Prozor New Project sadrži tri kartice: New, Existing i Recent. - Na kartici New nalaze se opcije za započinjanje različitih vrsta novih projekata u Visual Basic-u. - Preko kartice Existing moguće je nastaviti prethodno započeti projekat koji je prethodno spašen. - Kartica Recent omogućava pokretanje projekata na kojima se radilo tokom prethodnih nekoliko pokretanja Visual Basic-a na datom računaru. 7 Slika 1.3 – Radna površina Visual Basica-a U svrhu savladavanja osnova Visual Basic-a sasvim je dovoljno da se koristi „standardna“ vrsta projekata pa je samo potrebno na kartici New izabrati opciju Standard EXE čime će se konačno pokrenuti radna površina Visual Basic-a, prikazana na slici 1.3. Tokom savladavanja programiranja i dizajniranja u Visual Basic-u ovo će biti uobičajen način pokretanja novih projekata. Moguće je na prozoru New Project uključiti opciju Don’t show this dialog in the future čime će se spriječiti pokretanje ovog prozora svaki kasniji put prilikom pokretanja Visual Basic-a. U ovom slučaju, svaki put kada se pokrene Visual Basic automatski će se otvoriti novi projekat tipa Standard EXE. Reaktiviranje pokretanja prozora New Project moguće je izborom opcije Promts for project option koja se nalazi na ekranu Options na kartici Environment. Ovaj prozor se pokreće preko izbornika Tools – Options. Prvi pogled na radno okruženje Kao što se moglo vidjeti na slici 3, Visual Basic radno okruženje sastoji se od nekoliko različitih elemenata koji omogućavaju rad na svim koracima neophodnim u razvoju jednog projekta. Na lijevoj strani prozora nalazi se Toolbox, dok se na desnoj strani nalaze Project Explorer, Properties i Form Layout vertikalno poredani jedan iznad drugog: - Toolbox sadrži kolekciju sličica koje predstavljaju kontrole koje se standardno koriste u svakom Windows programu, - Project Explorer prikazuje trenutni sadržaj projekta, sve elemente od kojih se projekat sastoji, 8 - Properties prozor sadrži listu osobina određene kontrole ili objekta i omogućava na brz način promjenu tih osobina te - Form Layout omogućava jednostavno određivanje položaja prilikom pojavljivanja pojedinih prozora u programu. Inicijalno ovi elementi radnog okruženja se nalaze na pozicijama koje su upravo objašnjene. Međutim, svaki od ovih elemenata može se po želji pomijerati i podešavati po veličini tako da se zadovolje specifični zahtjevi tokom dizajniranja projekta. Svaki od ovih elemenata Visual Basica bit će u kasnijim koracima detaljno objašnjen. Svi su predstavljeni preko vlastitih prozora na radnoj površini Visual Basic-a, a moguće ih je jednostavno dodati ili ukloniti sa radne površine. Uklanjanje se vrši jednostavno klikom na X u gornjem desnom uglu odgovarajućeg prozora. Dodavanje prozora jednog od ova četiri elementa radnog okruženja je moguće korištenjem istoimene opcije na izborniku View: - Project Explorer ili CRTL+R, - Properties ili F4, - Form Layout Window te - Toolbox, kao što je to vidljivo na slici 1.4. Slika 1.4 – Opcije na izborniku View 9 Projekat se sastoji od nekoliko tipova datoteka koje predstavljaju osnovne elemente projekta kao što su formovi (forms), moduli, izvještaji, ali i datoteke koje kreira sam projekat i koje ne sadrže direktno dizajnerske niti programske elemente. Dakle, jedam jednostavniji projekat se sastoji od: - Formova (forms) - Prozori koji omogućavaju kreiranje grafičkog dijela programa i koji olakšavaju interakciju između korisnika i programa. Alati koji se nalaze na toolbox-u se koriste za kreiranje grafičkog sadržaja formova. Svaki form takođe sadrži i programski kod koji se izvršava u ovisnosti od mjesta na kome se kod nalazi. Kod se može posebno kreirati u okviru forma, ali i posebno za kontrole koje se nalaze na form-u i izvršavati se u ovisnosti od događaja kojem se ovaj kod pridružuje. Svaki form se u Windows-u spašava kao posebna datoteka podataka sa ekstenzijom FRM. Opciono form može da ima i dodatnu datoteku sa nastavkom FRX u kojoj se pohranjuju neke specifičnosti vezane za posmatrani form. - Moduli (modules) - Posebni elementi projekta koji služe samo za smještaj programskog koda. Najčešće se koriste za kreiranje općih funkcija i procedura koje se neovisno koriste u više dijelova projekta. Spašavaju se u datoteke podataka sa nastavcima BAS. - Izvještaji (data reports) - Elementi projekta koji služe za generisanje različitih izvještaja pripremljenih za štampanje. Spašavaju se u datoteke podataka sa nastavcima DSR. - Projektna datoteka (project file) - Čuva podatke o svim ostalim datotekama i objektima koji se koriste u projektu. Visual Basic spašava ovu datoteku sa nastavkom VBP,Visual Basic Project. Pokretanje projekta je moguće i direktno kroz Windows Explorer dvostrukim klikom na ovu datoteku. Toolbox Osnovne alatke iz toolbox-a, prikazane na slici 1.5, su one koje se i najčešće koriste u svakodnevnom dizajniranju. Treba napomenuti da su prikazane samo najosnovnije i najčešće korištene kontrole te da je moguće dodavanje i korištenje još mnogo specifičnih, ali i ne tako često korištenih kontrola. Slika 1.5 – Toolbox – Alatke (kontrole) 10 Tabela 1.1 - Osnovne kontrole i njihova namjena PictureBox – Kao što samo ime govori služi za smještaj i prikaz slika. Label – Ispis odgovrajućeg teksta, samostalno kao informacija ili češće kao objašnjenje uz neku drugu kontrolu. TextBox – Direktan unos teksta. Ulazni podaci bilo u obliku običnog teksta ili u numeričkom obliku se unose u program korištenjem ove kontrole. Frame – Logičko objedinjavanje nekoliko istovrsnih kontrola u jednu cjelinu. Najčešće se koristi za logičko i vizuelno objedinjavanje više kontrola tipa OptionButton ili CheckBox. CommandButton – Komandno dugme, služi za pokretanje neke aktivnosti, npr. za potvrđivanje unosa podataka (vjerovatno najčešće korišteno OK dugme), zatvaranja ili otvaranja prozora itd. Kontrola koja se nalazi na gotovo svakoj formi. CheckBox – Uključivanje odnosno isključivanje pojedinih opcija. Razlikuje se logički od OptionButton-a (poznatog i kao RadioButton) zbog načina korištenja: koristi se u situaciji gdje je moguće odabrati više odgovora. Koristi se često u bloku unutar kontrole Frame. OptionButton – Uključivanje odnosno isključivanje jedne od opcija u grupi. Koristi se najčešće zajedno sa kontrolom Frame. Pri ovome kontrola Frame ograničava prostor na kome samo jedna od postojećih OptionButton kontrola može biti uključena u jednom trenutku. Ukoliko se ne koristi kontrola Frame onda je opseg zajedničkog djelovanja kontrole form na kome se kontrole nalaze. ComboBox – Izbor jedne od ponuđenih opcija iz padajuće liste ili upis podatka, slično kao kod TextBox-a. Odavde i naziv Combo jer je moguće podesiti osobine tako da je moguć jedan (izbor jedne od opcija) ili drugi (upis teksta ili numeričkih podataka) način unosa podataka. Takođe je moguće izvršiti i ograničenje na samo izbor ponuđenih podataka. Kombinacija između TextBox-a i ListBox-a. ListBox –Izbor više od jednog ponuđenog podatka za dalju obradu. HScrollBar – Horizontalni klizač. Koristi se za grafičko zadavanje numeričkih podataka ili za horizontalnu kontrolu / pomjeranje grafike VScrollBar – Vertikalni klizač. Koristi se za grafičko zadavanje numeričkih podataka ili za vertikalnu kontrolu / pomjeranje grafike Timer – Omogućava vremensko izvršavanje odgovarajuće aktivnosti u vremenskim koracima koji se zadaju u veličini milisekundi. DriveListBox – Izbor lokalnih jedinica / drive-ova. Nešto zastarjala kontrola jer postoje univerzalniji načini i bolje kontrole za pristup hardveru računara. DirListBox – Pregled direktorija (folder-a) na lokalnom računaru FileListBox – Pregled datoteka na odabranom direktoriju (folder-u). Kontrola se najčešće koristi zajedno sa DirListBox-om i DriveListBox-om. Shape – Direktno iscrtavanje osnovnih geometrijskih oblika: pravougaonika, kvadrata, elipsi i krugova. Line – Iscrtavanje obične linije. Image – Kontrola slična kontroli PictureBox - prikaz slika odnosno fotografija. Data – Kontrola za rad sa podacima iz baza podataka. OLE – Kontrola koja omogućuje ubacivanje bilo koje druge Windows datoteke: video klipa, excel dijagrama, word dokumenta... 11 Project explorer Kao što je već rečeno, svaki se Visual Basic projekat u fazi dizajniranja i programiranja sastoji se od nekoliko različitih tipova objekata: formova, modula, izvještaja itd. Dizajn i programski kod svakog od ovih objekata spašava se u Windows-u u okviru jedne ili više datoteka. Svaki prozor koji sadrži projekat, a koji se kreira pomoću objekta form, posjeduje datoteku sa nastavkom FRM. Eventualno, ako se na formi nalaze i neke posebne kontrole moguće je da jedan form (prozor), pored FRM datoteke, ima i još jednu datoteku sa nastavkom FRX. Na isti način, moduli, u koji se upisuje isključivo programski kod spašavaju taj kod u datoteke tipa BAS. Objekat koji omogućava pravljenje izvještaja, DataReport spašava se u datoteke sa nastavkom DSR. Project Explorer je prozor koji unutar razvojnog okruženja Visual Basica, slično kao i Windows Explorer unutar Windows-a, hijerarhijski prikazuje pojedine objekte koji su uključeni u projekat. Na slici 6 prikazan je primjer izgleda Project Explorera u koji su dodana dva forma, jedan MDI form, jedan modul i jedan izvještaj. Potrebno je napomenuti da objektima na slici nisu data imena kao što to nalaže pravilo profesionalnog programiranja. U zagradi se nalazi naziv datoteke u kojoj je smješten opis dizajna i programski kod objekta. Slika 1.6 - Primjer Project Explorer-a Dva osnovna tipa formi su: obični form i MDI form. U jednom projektu može biti više običnih formova, ali može da se kreira samo jedan MDI form. Skraćenica MDI dolazi od engleskog trermina Multi Document Interface i označava program u kome se svi prozori (formovi) otvaraju unutar MDI forme i ne prikazuju se zasebno na Windows traci - taskbar-u. Da bi neki form bio dio MDI forme i da se otvara samo unutar ovog glavnog prozora programa potrebno je da se postavi osobina forma MDIChild na True. Suprotan termin od MDI je SDI koji označava Single Document Interface i u ovom slučaju svaka forma u projektu, grafički se ponaša zasebno iako logički i programski djeluju kao jedna cjelina. Dodavanje objekata u projekat se vrši preko izbora Project sa glavnog izbornika (menija), slika 1.7. 12 Slika 1.7 - Izbornik Project Dodavanje objekata se vrši korištenjem odgovarajućih opcija za dodavanje (Add Form, Add MDI Form, Add Module...). Na slici je evidentno da opcija Add MDI Form nije dostupna tj. da nije moguće dodati MDI formu. Razlog je u činjenici da je u projekat već dodana jedna MDI forma, što se i vidi na Project Explorer-u na slici 6. Prilikom dodavanja nekog od objekata u projekat, Visual Basic nudi izbor nekoliko podvrsta za gotovo svaki objekat. Podvrste su obično, do nekog nivoa, dizajnirani specifični prozori koji se standardizirano koriste u Windows aplikacijama, npr. Splash Screen, About Dialog, Tip of the Day itd Specijalne vrste prozora, tipa message box-a i input-box-a, su definirane unutar Visual Basica pa za njih nije potrebno definiranje posebnih formi, odnosno datoteka, o njima će biti govora kasnije. Spašavanje projekta se svodi na spašavanje svih datoteka koje predstavljaju sve korištene objekte: formove, module, izvještaje itd. Prilikom spašavanja projekta po prvi put otvarat će se prozori Save As... koji će zahtijevat izbor direktorija za spašavanje i upisivanje naziva datoteka za svaki objekat posebno, te na kraju i za sam projekat kada se definira dirketorij i naziv projektne VBP datoteke. 13 Osobine - Properties Svaki element projekta, form, modul, svaka kontrola koja se nalazi na formu posjeduje grupu osobina (properties). Ove osobine se u najvećoj mjeri zadavaju u fazi dizajniranja, ali se takođe mogu mijenjati i tokom izvođenja programa, ukoliko se promjena osobine definira u programskom kodu. U fazi dizajniranja osobine se podešavaju u prozoru Properties i to tako da se prvo označi željeni objekt / kontrola te se onda pređe ne podešavanje pojedinih osobina tog objekta / kontrole. Slika 1.8 - Prozor Properties Najvažnija osobina svakog objekta ili kontrole je njegovo ime (Name). Ovo ime objekta / kontrole se koristi svaki put kada se radi manipulacija sa podacima koje objekat / kontrola sadrži ili kada se mijenja neka osobina objekta / kontrole. Svaki put kada se doda neka kontrola na form, Visual Basic automatski dodjeljuje podrazumijevano ime toj kontroli npr Command1, Check1... U cilju kvalitenog i jasnog pisanja programskog koda preporučuje se promjena ovih default imena koje daje Visual Basic i davanje odgovarajucih i prepoznatljivih imena svakoj kotroli. Imenovanje kontrola, slično kao i deklariranje varijabli je prilično definirano i postoje pravila koja se proporučuju. Neka od ovih pravila bit će kasnije i prezentirana. Prozor Properties nudi dva načina prikaza i organizacije osobina: alfabetski i po kategorijama. Odgovarajući prikazi su odijeljeni preko zasebnih kartica. Prilikom označavanja bilo koje od osobina u dnu prozora se ispisuje i kratko objašnjenje o tome šta označena osobina određuje. 14 Form Layout Pomoću prozora Form Layout moguće je definirati tačno mjesto pojavljivanja forme na ekranu. Prozor omogućuje veoma jednostavan način određivanja pozicije forme: dovoljno je kliknuti na formu unutar Form Layout-a i držeći lijevu tipku mišu povući form na željeni položaj. Na slici 9 prikazan je izgled Form Layout-a sa jednim MDI formom i dva obična forma od kojih je jedan, Form1, MDI Child tip. Slika 1.9 - Prozor Form Layout Postavljanje kontrola na formu Postavljanje kontrole na form je veoma jednostavan zadatak: dovoljan je dvostruki klik na željenu kontrolu u Toolbox-u i Visual Basic će automatski dodati tu kontrolu na trenutno aktivni form. Drugi način je da se jednom klikne na odgovarajuću kontrolu u Toolbox-u i da se nakon toga držeći lijevu tipku na mišu napravi pravougaonik na formi. Nakon što se napravi pravougaonik na formi otpuštanjuem lijeve tipke na mišu odabrana kontrola će da se pozicionira na formi dobijajući oblik jednak dimenzijama označenog pravougaonika. Pokretanje programa Program se može pokrenuti u bilo kome trenutku na jedan od slijedeća tri načina: - Pritiskom funkcijske tipke F5 - Izborom opcije Start sa menija Run - Klikom na plavi trokutić na traci sa alatima. S obzirom da jedna projekat / program gotovo uvijek ima više od jedne forme potrebno je definirati i koja se to forma inicijalno prva pojavljuje tokom pokretanja projekta / programa. Pored forme može se odabrati i posebna procedura pod nazivom Main koja će se prva izvršiti tokom pokretanja projekta / programa. U okviru ove procedure moguće je programski definirati pojavljivanje inicijalne forme. 15 Slika 1.10 – Osobine projekta Određivanje inicijalnog pokretanja se određuje korištenjem prozora Projekt Ime Properties na izborniku Project, slika 1.10. Opcija se uvijek nalazi na dnu liste opcija te u ovisnosti od naziva trenutnog projekta ima i odgovarajući naziv (umjesto Project Ime stoji stvarni naziv projekta + Properties.). U listi opcija Startup Object nalazi se spisak svih formi koje su dodane u projekat te procedura Sub Main. Odabirom željene forme podešava se koja će se forma prva prikazati nakon pokretanja programa. Proceduru Sub Main potrebno je kreirati u jednom od javnih modula te ukoliko se ona odabere da bude Startup objekt onda je potrebno unutar ove procedure upisati odgovarajući programski kod koji će da se izvrši pokretanjem programa. Dodavanje programskog koda Programski kod se u Visual Basic-u dodjeljuje pojedinim događajima (Events) za svaku kontrolu na formi, odnosno piše se zasebno u okviru posebnih, općih procedura ili funkcija koje se mogu pozivati sa različitih mjesta. Svaka kontrola posjeduje vlastiti skup mogućih događaja, npr. Click, DblClick, MouseUp, MouseDown, MouseMove itd. Kod koji se upiše unutar odgovarajućeg događaja izvršava se samo ako se taj događaj desi tokom izvođenja programa, npr. kod unutar događaja Click izvršava se samo ako se tokom izvođenja programa klikne na kontrolu kojoj je pod tim događajem upisan programski kod. Za otvaranje prozora za pisanje koda dovoljan dvostruki klik na neku od kontrola na formi ili pak samo dvostruki klik na formu. Takođe je moguće kretanje između objekta i koda pomoću izbornika View gdje se na prva dva mjesta nalaze opcije Code i Object. 16 Slika 1.11 – Prozor za pisanje programskog koda Prozor u kome se piše programski kod sastoji se od tri dijela: - glavnog centralnog dijela za pisanje koda, - liste u gornjem lijevom uglu koja služi za izbor kontrole za koju se želi pisati programski kod - liste u gornjem desnom uglu koja služi za izbor događaja (event-a) za koji se definira kod. U ovisnosti od vrste kontrole mijenja se i broj i vrsta događaja koji se mogu odabrati za pisanje programskog koda, tako npr. događaji Change i Validate postoje kod kontrole TextBox, ali ne postoje kod kontrole CommandButton. Sama forma za sebe posjeduje grupu događaja za koje se može definirati programski kod, npr. za događaj Load koji se izvršava prilikom učitavanja forme ili događaj te npr. Unload prilikom zatvaranje forme. Svaki programski kod unutar nekog od događaja predstavlja proceduru za sebe. Visual Basic automatski prilikom otvaranja bilo kog događaja ispisuje zaglavlje procedure sa Private Sub i kraj procedure sa End Sub.Cijeli programski kod namijenjen za izvršavanje prilikom datog događaja mora da se nalazi unutar ova dva reda programskog koda. U listi u gornjem lijevom uglu, pored svih kontrola koje su dodane na formu nalazi se i opcija (General). Ova opcija otvara prostor za deklariranje liste varijabli i konstanti koje se mogu koristiti u svim procedurama unutar programskog koda koji pripada posmatranoj formi. Takođe omogućava pristup kreiranim slobodnim procedurama ili funkcijama koje su definirane na nivou forme. Pristup tim procedurama i funkcijama je moguć preko opcija koje se prikazuju u listi na desnoj strani. 17 2. OSNOVE DIZAJNIRANJA Uvod Korisničko okruženje se može definirati kao skup svih grafički predstavljenih objekata i proceduralnih tehnika kojima se definira interakcija između programa i korisnika. Način na koji program dobija informacije od korisnika, način prikaza i izbora različitih opcija, različite mogućnosti korištenja tastature i miša, informacije koje program prikazuje korisniku – sve su ovo elementi koje dizajner programa treba da ima na umu tokom procesa dizajniranja korisničkog, grafičkog okruženja. Visual Basic, za razliku od svog prethodnika Basic-a ima na raspolaganju veoma jednostavne i moćne alate za kreiranje ugodnog korisničkog okruženja. Čak i osnovne alatke koje nudi Toolbox omogućavaju ispunjavanje većine uslova neophodnih za kreiranje zadovoljavajućeg okruženja. Sve kontrole na Toolbox-u su intuitivne, korištene u svim Windows aplikacijama i što je najbitinije sve su spremne za korištenje. Dovoljno je samo da se postave na formu i da se podese neki osnovni parametri i kontrole se mogu koristiti. U ovom dijelu će se pokazati neki osnovnni elementi grafičkog okruženja i kako se koriste u fazi dizajniranja. Form Koristi se kao podloga za smještaj svih ostalih kontrola koji pripadaju jednoj logičkoj cjelini i koji se pojavljuju kao zaseban prozor u okviru jednog programa. Kao što je već ranije rečeno u osnovi postoje dvije osnovne vrste formi: - Obični form i - MDI form. U jednom projektu može da bude samo jedna MDI forma i ona služi isključivo kao kontajner za sve ostale forme (forme-djeca). Obična forma posjeduje osobinu MDIChild koja određuje da li će se posmatrana forma u programu pojavljivati samostalno (MDIChild=False) ili će se pojavljivati unutar MDI Forme (MDIChild=True). 18 Potrebno je napomenuti da se na MDI Formu ne mogu direktno postaviti nikakve kontrole osim: PictureBox-a, Timer-a i kontrole Data. Postavljanje kontrola moguće je samo indirektno korištenjem PictureBox-a u koji se onda mogu postavljati ostale kontrole. Najčešće se ova tehnika koristi za postavljanje različitih toolbar-ova na MDI Formu. Osnovna svojstva (properties) koje treba podesiti za ovu vrstu objekta su: - Name, naziv objekta, najbitnija odrednica jer se za pozivanje bilo koje osobine forma u programskom kodu mora koristiti naziv objekta (kontrole). Napomena: Najčešće se naziv objekta / kontrole sastoji iz dva dijela: 1. prefiksa koji odgovara vrsti kontrole i 2. dijela naziva koji asocira na svrhu kontrole. Standardni prefiks za objekat Form je frm i strogo se preporučuje da se uvijek koristi kod davanja naziva za ovaj objekat. Nastavak u nazivu forma, a koji se može sastojati i od više riječi (bez razmaka), trebalo bi da se uvijek definira tako da svaka riječ počinje sa prvim velikim slovom, npr frmProracunNaponaLuka. Ovakav način davanja imena objektima / kontrolama je veoma koristan poslije tokom faze programiranja. Naime, tokom pisanje koda, u situacijama kada se poziva neki objekt / kontrola korištenjem njenog imena, izvodi se uvijek malim slovima, u prethodnom primjeru kodira se frmproracunnaponaluka. Nakon završetka ispisivanja reda programskog koda, pritiskom na tipku Enter, ukoliko je ispravno ispisano ime objekta / kontrole, Visual Basic automatski pretvara mala u velika slova na mjestima gdje je to ranije određeno nazivom objekta / kontrole, u prethodnom slučaju slova p, n i l se prevode u P, N i L što omogućava brzu kontrolu korišenja imena objekta / kontrole tokom faze pisanje programskog koda. - BackColor, podešavanje boje pozadine forma. Standardna je Button Face (&H8000000F&) za obični form, dok je za MDI Form to Application Workspace (&H8000000C&). Ukoliko to namjena programa specifično ne zahtijeva, ne preporučuje se suviše često mijenjanje boje pozadine pojedinih formi, a pogotovo ne velika šarolikost i veliki kontrasti. - BorderStyle, podešavanje vrste granične linije forma i načina promjene veličine. Podrazumijevana vrijednost je 2 – Sizable koja korisniku omogućava promjenu veličine dimenzija forma. Ostale vrijednosti koje mogu da se koriste: o None – bez ikakve granice / granične linije o Fixed Single – sa graničnom linijom, ali nije moguće da se vrši promjena veličine forma. U ovom slučaju kontrolna dugmad za Minimiziranje i Restore / Maksimiziranje nisu dostupna na title traci. o Fixed Dialog, slično kao i Fixed Single o Fixed ToolWindow, slično kao i Fixed Single, uz razliku da ControlBox, sličica lijevo od Captiona, natpisa na title traci, nije vidljiva. o Sizable ToolWindow, za razliku od Fixed ToolWindow-a, moguća je promjena dimenzija forma korištenjem miša. - Caption, natis na title traci forma. - DrawMode – Određuje način grafičkog prikazivanja na formi. Podrazumijevana vrijednost je 13 – Copy Pen. 19 - DrawStyle – Definira se vrsta linija za grafičke objekte. DrawWidth – Definira se širina linija grafičkih objekata. - Font – Izbor vrste, boje i veličine korištenog fonta na samoj formi. - Height i Width – Visina i širina forma. - HelpContextID – Broj reference u help datoteci. Svako poglavlje u help datotekama posjeduje jedinstveni identifikator – ContextID. Prilikom pritiska na tipku F1 trenutno aktivna kontrola ili form (ona kontrola ili form koji u tom trenutku imaju fokus), poziva help datoteku i prikazuje poglavlje koje ima ContextID jednak broju koji se nalazi definiran u osobinama posmatranog objekta / kontrole. Pretpostavlja se da postoji odgovarajuća help datoteka, u suprotnom se ništa ne događa. - ControBox, MaxButton i MinButton – Određuje se da li će form da ima ControlBox, sličicu sa opcijama (Restore, Move, Size, Minimize, Maximize i Close) u gornjem lijevom uglu, te opcije za maksimiziranje odnosno minimiziranje forme (sličice u gornjem desnom uglu forme). Slika 2.1 – ControlBox - Moveable – svojstvo kojim se određuje da li korisnik uopće može pomijerati formu. - MDIChild – Određuje se da li je forma sastavni dio postojeće MDI forme (True) ili se forma pojavljuje kao samostalan objekt van MDI forme - kontejnera. - MousePointer – Omogućava definiranje pokazivanja miša u trenucima kada se pokazivač nalazi iznad forme. Ukoliko se za svaku kontrolu koja se nalazi na formi ne definiraju posebne vrijednosti ove osobine onda je pokazivač identičan iznad forme i iznad kontrola. - ScaleMode – Određuje se mjerna jedinica koja će se korititi za form i za sve kontrole na formu. Podrazumijevana mjerna jedinica je Twips, što predstavlja 1/20 dio jednog inča (25.4 mm). - ShownInTaskBar – Određuje se da li će se prilikom aktiviranja i prikazivanja forma pojaviti kartica koja označava taj form na TaskBar-u. U slučaju kada je forma MDIChild onda se kartica bez obzira na sve ne pojavljuje na TaskBar-u. - Left i Top – Definira se položaj forma u odnosu na koordinatni početak koji polazi iz gornjeg desnog ugla monitora. - Visible i Enabled – Kontrole kojima se može onemogućiti prikaz forme (Visible = False) odnosno kojom se može prikazati forma ili se može onemogućiti svaki rad sa formom jer postaje neaktivna (Enabled = False) iako je vidljiva. 20 - WindowState – Omogućava se inicijalni prikaz forme u 0 - normalnom načinu kako je to definisano osobinama Height, Width, Left i Top, odnosno pomoću osobine StartUpPosition, 1 - minimiziranu na TaskBar-u ili 2 - maksimiziranu preko cijelog ekrana. Kontrole Najbitnija odrednica svake kontrole je njen naziv (Name). Na isti način kao što je to pokazano u slučaju formova, i kod kontrola se preporučuje slijediti određena pravila kod davanja imena, prije svega se to odnosi na korištenje odgovarajućih prefiksa. U Tabeli 2.1 date su preporuke za davanje prefiksa za najčešće korištene kontrole u Visual Basic-u. Tabela 2.1 – Prporuke za korištenje prefiksa u davanju imena kontrolama Oznaka kontrole Naziv kontrole Prefiks ComboBox cbo Check Box chk Command Button cmd Data dat Directory List Box dir Drive List Box drv File List Box fil Frame fra Horizontal Scroll Bar hsb Image img Label lbl Line lin List Box lst Option Button opt Picture Box pic Shape shp Timer tmr Text Box Vertical Scroll Bar txt vsb OLE Contqiner ole 21 Kontrole mogu da budu i indeksirane. To znači da se na jednom formu, za više, obično kontrola iste vrste, koristi isto ime, pri čemu se kontrole razlikuju u osobini Index. Na ovaj način se može formirati grupa (niz) kontrola koje se razlikuju samo u brojčanoj vrijednosti Index-a što može biti kasnije tokom faze programiranja veoma korisno, npr. prilikom korištenja u različitim programskim petljama. Zajedničke osobine gotovo za sve kontrole odnose se na definiranje izgleda i položaja na formu. Za definiranje veličine kontrola podešavaju se svojstva Height (visina) i Width (širina). Podrazumijevana mjerna jedinica u Visual Basicu je twips (dvadeseti dio jednog inča), pa se i vrijednosti za visinu i širinu daju u twips-ovima. U cilju dizjaniranja što profesionalnijeg izgleda potrebno je koristiti u cijelom programu što je moguće standardnije vrijednosti za visine i širine. Kao primjer može poslužiti kontrola CommandButton, koja se najčešće koristi za potvrdu unosa podataka ili pokretanje odgovarajućih aktivnosti. Dimenzije kontrole bi trebalo da su jednoobrazne u cijelom programu, odnosno na svim formama koje se koriste. U slučaju korištenja mjerne jedinice Twips preporučuje se visina između 350 i 400, a širina između 1000 i 1200. Položaj na formi se definira osobinama Left i Top. Vrijednost Left definira udaljenost lijevog ruba kontrole u odnosu na lijevi dio forma, dok se pomoću vrijednosti Top određuje udaljenost gorenjeg ruba kontrole od gornjeg ruba forma. Potrebno je biti oprezan sa mijenjanjem vrste, veličine i boje korištenih fontova jer to može da bude neprofesionalno. Preporuka je da se koriste standardni fontovi kao što je npr. MS Sans Serif, veličine 8. Pomoću opsobine TabStop se određuje da li neka kontrola može dobiti fokus korištenjem tipke Tab na tastaturi. Podrazumijevana vrijednost ove osobine za sve kontrole je True, što označava da svaka kontrola može da dobije fokus jednostavnim korištenjem tipke Tab. Redoslijed prebacivanja fokusa sa jedne na drugu kontrolu se definiše pomoću osobine TabInex. Svaka kontrola na jednoj formi mora da ima jedinstvenu brojčanu vrijednost ove osobine. Prilikom učitavanja i prikazivanja forme, kontrola sa najnižim TabIndex-om, (0 je najmanji broj koji se može pripisati ovoj osobini), preuzima fokus na sebe. Korištenjem tipke Tab na tastaturi fokus prelazi na slijedeću kontrolu koji ima slijedeći redni broj i tako redom, naravno pod uslovom da je osobina TabStop = True. Skrivanje kontrole na formu može da se omogući korištenjem osobine Visible. Postavljanjem vrijednosti False ove osobine za neku kontrolu na formi omogućava nestajanje kontrole sa forme. Drugi, češće korišteni način, da se onemogući pristup kontroli je korištenje osobine Enabled. Postavljanjem vrijednosti ove osobine na False kontrola ostaje vidljiva na formi, ali pristup kontroli više nije moguć, niti pomoću miša niti pomoću tastature. Pristupne tipke Pojedine kontrole koje imaju svojstvo Caption (natpis) mogu iskoristiti svojstvo brzog pristupa, dobijanja fokusa i promjene vrijednosti korištenjem kombinacije ALT tipke i jedne od tipki koja se definira za svaku kontrolu posebno. Primjer kontrola koje imaju osobine Caption su CommandButton, CheckBox i OptionButton. 22 Za omogućavanje ovog brzog pristupa dovoljno je u natpisu (Caption-u) bilo koje od kontrola iskoristiti jedno jedinstveno slovo ispred kojeg se upiše znak & (ampersand, and). Na ovaj način slovo ispred kojeg se upiše ampersand, ispisuje se sa crticom ispod. Na primjer u slučaju CommandButton-a sa natpisom OK, ako se želi brzi pristup kombinacijom tipki ALT + O potrebno je u osobini Caption unijeti slijedeće: &OK čime se na kontroli ispisuje OK, (podvučeno slovo O). Slično vrijedi i u slučaju kreiranja menija o čemu će biti riječi kasnije. Formatiranje U cilju jednostavnijeg podešavanja položaja pojedinih kontrola na formu moguć je prikaz zamišljene rešetke, Grid-a po cijeloj površini forma koja omogućuje pomjeranje kontrola u koracima koje određuje korak rešetke. Zamišljena rešetka se grafički predočava mrežom tačaka koje imaju unaprijed definirana rastojanja pri čemu vertikalni i horizontalni razmak tačaka ne mora da bude jednak. Opcije za uključivanje, isključivanje i podešavanje rastojanja rešetke je moguće definirati na Tools – Options... na kartici General, slika 2.2 Slika 2.2 – Podešavanje zamišljene rešetke – Grid-a Uključivanje / isključivanje rešetke ostvaruje se preko Check Box- a „Show Grid“ koji se nalazi u okviru Form Grid Settings. Horizonatalno rastojanje tačaka rešetke se podešava u polju Width, a vertikalno u polju Height. Numerička rastojanja za gustoću rešetke se zadaju u Twips-ima. Check Box „Align Controls to Grid“ se koristi za forsiranje pomjeranja kontrola prema položaju tačaka rešetke, tako da ukoliko se uključi ova opcija kontrole mogu zauzimati samo položaje koje određuje rešetka i u skokovima koji odgovaraju rastojanju između pojedinih tačaka rešetke. Za brzo i jednostavno raspoređivanje kontrola na formi može učinkovito da pomognu opcije na izborniku Format koje su prikazane na slici 2.3. 23 Slika 2.3 – Izbornik Format Većina opcija sa liste prikazane na slici 2.3 ima dodatnu skupinu daljih opcija – alata pomoću kojih se brzo i efikasno mogu podesiti veličine i položaj kontrola na formu. U svakom koraku potrebno je prvo da se označe kontrole na koje se želi primjeniti neki od alata te nakon toga odabrati alat / aktivnost za formatiranje. Označavanje kontrola se najbrže ostvaruje tako što se grupa kontrola označi prevlačenjem miša uz pritisnutu lijevu tipku. Opcije Align omogućavaju poravnavanje označenih kontrola i to tako da se poravnaju: lijeve strane (Lefts), po vertikalnoj sredini (Centers) i desne strane (Rights), zatim gornji rubovi (Tops), po horizontalnoj srednini (Middles) i donji rubovi (Bottoms), te na kraju moguće je poravnavanje po tačkama zamišljene rešetke (to Grid). Slika 2.4a – Međusobnom poravnavanje kontrola Opcije Make Same Size omogućavaju brzo podešavanje identičnih veličina više kontrola i to širine (Width), visine (Height) odnosno obje dimenzije (Both). Slika 2.4b – Podešavanje dimenzija više kontrola 24 Opcije Horizontal i Vertical Spacing omogućavaju podešavanje međusobnog rastojanja između više označenih kontrola. Opcije Make Equal će razmaknuti kontrole tako da su razmaknute međusobno na jednaka rastojanja, Increase i Decrease će povećati odnosno smanjiti međusobno rastojanje za vrijednost definiranu gustinom tačaka zamišljene rešetke, dok će opcija Remove da ukloni rastojanja između kontrola tako da se početak jedne kontrole podudara sa krajem druge itd. Slika 2.4c – Podešavanje rastojanja između kontrola Opcije Center in Form sadrže dvije mogućnosti Horizontally i Vertically pomoću koji se može kontrola ili više njih pozicionirati u horizontalni odnosno vertikalni centar forma. Opcije Order omogućavaju hijerarhijski raspored kontrola, stavljanje jedne kontrole na drugu Bring to Front ili obratno Send to Back. Nakon što se kontrole razmjeste na formu u zadovoljavajućem rasporedu,uključivanje opcije Lock Controls će onemogućiti slučajno pomjeranje bilo koje kontrole na formu što nekada može da bude veoma korisno. Opcija se obično koristi na kraju faze formatiranja kada se ne želi više mijenjati položaj kontrola. Podešavanje osobina u fazi rada programa Sve do sada rečeno odnosilo se na podešavanje osobina i formatiranje u tzv. design fazi. Promjena osobina bilo koje kontrole ili forma, pored ovoga, može da se izvrši takođe i tokom faze rada (korištenja) programa (runtime). U ovu svrhu potrebno je da se osobine mijenjaju i podešavaju korištenjem programskog koda. Tokom rada, osobine kontrola se mogu mijenjati posebnim naredbama u programskom kodu. Ovo se postiže naredbama koje odgovarajućim svojstvima pridružuju odgovarajuće vrijednosti. Principijelno naredna je u obliku: nazivKontrole.osobina = vrijednost Naziv kontrole i osobina se uvijek odvajaju tačkom. Izbornici / Meniji Dodavanje, mijenjanje i podešavanje izbornika / menija na formu se može lako uraditi korištenjem Menu Editora koji se otvara izborom istoimene opcije na izborniku Tools. Da bi opcija bila dostupna potrebno je da bude aktivan design prikaz forma na kome se žele izgraditi izbornici / meniji. Na slici 2.5 prikazan je prozor Menu Editor-a. 25 Slika 2.5 - Menu Editor Za dodavanje novog izbornika / menija potrebno je definirati slijedeće elemente: Caption - Naziv izbornika / menija odnosno opcije koje se pojavljuje na listi opcija izbornika / menija. Linija razgraničenja u listi opcija se formira na način da se u polje Caption unese crtica "-". Name - Naziv izbornika / menija odnosno opcije. Naziv se koristi samo za pristup event proceduri izbornika / menija u programskom kodu, odnosno za pozivanje kontrole i ne pojavljuje se nigdje na meniju ili opciji menija tokom faze korištenja programa. Index - Omogućava kreiranje grupe izbornika / menija sa istim imenom koje se razlikuju u Indeks-u. Shortcut - Kombinacija tipki za pristup opciji izbornika / menija. Checked - Omogućava pojavljivanje Check Box-a lijevo od naslova opcije u izborniku / meniju. Enabled - Omogućava da se izbornik / meni ili opcija na izborniku / meniju pojavi ali i da bude nedostupan za rad. Visible - Omogućava pojavljivanje odnosno skrivanje izbornika / menija ili opcije na izborniku / meniju. WindowList - Omogućava pojavljivanje u izborniku / meniju otvorenih MDI Child formi u jednoj MDI aplikaciji. Desna Strelica - Pomjera selektovani izbornik / meni desno, odnosno opciju jedan nivo niže u hijerarhijskoj strukturi svaki put kada se klikne na strelicu. Moguće je definirati maksimalno 4 podnivoa u sastavu izbornika / menija. Svaka uvučena stavka predstavlja listu opcija ili pod-menija stavke koja je hijerarhijski manje uvučena i nalazi se iznad nje u listi. 26 Lijeva Strelica - Pomjera selektovani izbornik / meni odnosno opciju jedan nivo više svaki put kada se klikne na strelicu. Strelica gore - Pomjera selektovani izbornik / meni odnosno opciju jedno mjesto gore, zadržava nivo opcije. Strelica dole - Pomjera selektovani izbornik / meni jedno mjesto dole, zadržava nivo opcije Next - Pomjera selekciju na slijedeću liniju u listi izbornika / menija. Insert - Insertuje slobodnu liniju iznad označenog izbornika / menija u listi izbornika / menija Delete - Briše trenutno označenu liniju u listi izbornika / menija. U donjem dijelu prozora Menu Editor nalazi se hijerarhijska lista svih definiranih izbornika / menija u takozvanom Menu List-u. Kao primjer pokazat će se izgradnja jednostavnog izbornika / menija (File) sa standardnim opcijama (New, Open, Save, Save As.., Print i Exit). Bit će korištena jedna MDI Forma i dvije forme Test1 i Test2 koje su MDI djeca-forme. Slično kao kod kontrola i objekata i kod davanja imena izbornicima / menijima i opcijama na izbornicima / menijima dobro je slijediti određenu logiku. Korištenje prefiksa u davanju imena se strogo peporučuje. Pri ovome se preporučuje stavljanje prefiksa men ispred naziva top-level izbornika / menija te prefika mi (menu item) ispred opcija iz liste za svaki top-level izbornik / meni. U listu izbornika / menija su dodane slijedeći podaci: - Meni File, sa nazivom menFile. Položaj izbornika / menija u listi menija je krajnje lijevo i to označava da se radi o top-level izborniku / meniju, odnosno izborniku / meniju koji se nalazi na traci sa izbornicima / menijima i koji ima set vlastitih opcija. Opcija WindowList je uključena samo za ovaj top level što omogućuje prikaz trenutno otvorenih formova-djece u okviru izbornika / menija tokom faze korištenja programa. Ukoliko nema aktivnih formovadjece lista je prazna. - Opcija New, sa nazivom miNew, te sa uključenim Shortcut-om: CTRL+N. - Opcija Open, sa nazivom miOpen, te sa uključenim Shortcut-om: CTRL+O. - Linija razgraničenja, upisuje se jednostavno crtica "-" u Caption i daje se proizvoljno, jedinstveno ime u polje Name. - Opcija Save, sa nazivom miSave, te sa uključenim Shortcut-om: CTRL+S. - Opcija Save As..., sa nazivom miSaveAs, bez Shortcuta-a. - Linija razgraničenja, upisuje se jednostavno crtica "-" u Caption i daje se proizvoljno, jedinstveno ime u polje Name. - Opcija Print, sa nazivom miPrint, te sa uključenim Shortcut-om: CTRL+P - Linija razgraničenja, upisuje se jednostavno crtica "-" u Caption i daje se proizvoljno, jedinstveno ime u polje Name. - Opcija Exit, sa nazivom miExit, te sa uključenim Shortcut-om: CTRL+E. 27 Sve opcije u okviru menija, osim top-level menija, su pomaknute za jedno mjesto udesno korištenjem desne strelice i time je označena pripadnost opcija meniju ispod koga se hijerarthijski opcije nalaze. Izgled Menu Editor-a, sa podacima podešenim na prethodno objašnjeni način je prikazan na slici 2.6. Slika 2.6 - Menu Editor za izbornik File Izbornik / meni File dobijen na prethodno opisani način prikazan je na slici 2.7. Slika 2.7 - Izgled izbornika / menija File 28 S obzirom da u programu nije bila otvorena niti jedna forma-dijete to se na izborniku / meniju File nije pojavila lista otvorenih formi-djece. Na slici 2.8 prikazan je izgled izbornika / menija File nakon što su učitane i prikazane dvije forme-djeca (Test1 i Test2). Uočavaju se dodatne opcije u listi, te uz formu Test2 pokazan je check box koji označava da je ta forma trenutno aktivna. Slika 2.8 - Izbornik / meni File sa listom otvorenih prozora Svaki izbornik / meni i opcija iz liste predstavlja kontrolu na formi. Stoga svaki izbornik / meni i opcija iz liste automatski dobijaju svoje mjesto u listi kontrola, pa je za svaku ovu kontrolu moguće definirati prograsmki kod unutar vlastite event procedure. Izbornik / meni i opcije imaju definiranu samo jednu event proceduru: Click. Unutar ove event procedure potrebno je upisati programski kod koji se izvršava svaki put kada korisnik odabere neku od opcija iz izbornika / menija. 29 3. OSNOVE PISANJA PROGRAMSKOG KODA Uvod Nakon planiranja i izrade grafičkog okruženja, podešavanja osobina kontrola i formatiranja istih, naredni korak u izradi programa u Visual Basic-u je pisanje programskog koda. Pojedinačni dijelovi programskog koda, procedure, u krajnjem određuju koje sve aktivnosti je moguće izvršiti korištenjem programa. Iako je pisanje programskog koda, vjerovatno najzahtjevniji dio projekta, Visual Basic-ove event procedure omogućavaju jednostavnije organiziranje i kontrolu programskog koda. Prozor za pisanje programskog koda – View Code Dva su najčešće korištena načina otvaranja prozora za pisanje programskog koda: - Korištenjem Project Explorer-a. Potrebno je prvo označiti form u kojem se želi kreirati nova procedura. Nakon izbora forma, potrebno je kliknuti na View Code button u gornjem lijevom uglu Project Explorer-a, kao što je to prikazano na slici 3.1. - Dvostukim klikom na kontolu za koju se želi kreirati nova event procedura (takođe je moguće označiti kontrolu i pritisnuti funkcijsku tipku F7).. Slika 3.1 – Aktiviranje prozora za pisanje programskog koda Prilikom prvog otvaranja prozora za pisanje koda Visual Basic otvara podrazumijevanu (default) event proceduru koja ovisi od odabrane kontrole te automatski dodaje prvu i zadnju liniju programskog koda. Ukoliko već postoji napisan programski kod unutar neke od event procedura onda se otvara jedna od procedura sa programskim kodom. Kretanje između event 30 procedura se vrši jednostavnim odabirom event procedure iz padajuće liste koja se nalazi u gornjem desnom uglu prozora za upis programskog koda. Slika 3.2 – Izbor event procedure za kontrolu cmdOK Na slici 3.2 prikazan je primjer sa event procedurama za kontrolu cmdOK, na formu frmStart, projekta Test, (podaci se mogu uočiti na title bar-u prozora). Event procedure Event procedure omogućavaju da program na unaprijed određeni način odgovori na aktivnosti koje korisnik programa izvodi. Ako korisnik klikne na komandno dugme, odabere jednu od ponuđenih opcija, promjeni postavku ili upiše neki podatak, programski kod unutar odgovarajuće event procedure određuje odgovor programa na tu aktivnost korisnika. Poznavajući ovo, moguće je jednostavno iskoristiti mogućnosti event procedura za kreiranje programa. Opći koraci koji su neophodni za pisanje programskog koda unutar event procedure su slijedeći: - odrediti objekat / kontrolu za koju se želi programirati aktivnost programa, - odrediti događaj (event) za koji se očekuje da se dogodi nad posmatranim objektom / kontrolom i - napisati programski kod koji određuje aktivnost programa kada korisnik prouzroči taj događaj. Naziv event procedure za neki određeni objekat / kontrolu je kombinacija dvije ključne riječi: - naziv objekta / kontrole - naziv koji Visual Basic daje određenom događaju (event-u). Ove dvije ključne riječi su razmaknute donjom crtom ( _ ), pa potpuni naziv event procedure je određen kao: 31 NazivKontrole_NazivDogađaja Na primjer, neka se na formi nalazi komandno dugme (CommandButton) za potvrdu unosa podataka OK čiji naziv je, u skladu sa prethodno usvojenom konvencijom, cmdOK. Osnovna event procedura za ovu kontrolu je Click. Programski kod napisan unutar ove procedure izvršava se ukoliko korisnik tokom izvršavanja programa klikne na kontrolu (komandno dugme). Puni naziv event procedure za ovu kontrolu u posmatranom slučaju je: cmdOK_Click. Opće procedure / funkcije Pored procedura koje se izvršavaju usljed pokretanja nekog događaja odnosno izvršavanja aktivnosti od strane korisnika (event procedure) unutar jednog forma mogu da se definiraju i opće procedure odnosno funkcije koje se mogu programski pozivati iz bilo koje druge procedure / funkcije. Kreiranje općih procedura i funkcija u okviru jednog forma moguće je ostvariti na dva načina: - pomoću prozora Add Procedure... koji se nalazi na izborniku Tools i koji je aktivan samo kada je otvoren prozor za upisivanje programskog koda, slika 3.3. - direktnim upisom procedure u (General) sekciju u prozoru za upisivanje programskog koda, slika 3.4. Slika 3.3 – Dodavanje općih procedura / funkcija Za dodavanje nove opće procedure unutar forma potrebno je odabrati naziv za proceduru koji se upisuje u text-box Name. Kod imenovanja procedura dobro je slijediti princip sličan kao kod imenovanja kontrola i objekata te korištiti prefikse ispred opisnog naziva procedura. Uobičajeno je da se ispred naziva procedure dodaje prefiks proc, a ispred funkcije fun. Za kreiranje procedure potrebno je u okviru Type odabrati opciju Sub, a za funkciju opciju Function. Ostale dvije vrste procedura koje služe za definiranje novih eventa odnosno događaja izlaze iz dosega ovog kratkog uvoda u Visual Basic. U okviru Scope definira se područje važenja procedure / funkcije, pri čemu su Public procedure dostupne za korištenje na nivou cijelog projekta, dok su procedure označene sa Private dostupne samo u matičnom formu, tj. mogu se samo pozivati iz drugih procedura unutar istog forma. 32 Puni naziv procedure predstavljen je u obliku: NazivForma.NazivProcedure odnosno NazivForma.NazivFunkcije Pozivanje procedure / funkcije iz druge procedure, event procedure ili funkcije unutar istog forma moguće je korištenjem samo naziva procedure / funkcije bez korištenja naziva forma. Ovo važi za obje vrste i Public i Private procedura / funkcija. Međutim, pozivanje procedure / funkcije koja se nalazi u jednom formu iz nekog drugog forma zahtijeva korištenje punog naziva procedure: NazivForma.NazivProcedure / NazivForma.NazivFunkcije. U ovom slučaju je moguće pozvati samo Public procedure / funkcije. Slika 3.4 – Sekcija General Kreiranje procedura odnosno funkcija moguće je i manuelnim unosom naziva procedure u sekciji (General) – (Declarations). Na primjer, ako se želi dodati procedura procTest, potrebno je upisati slijedeće: Public Sub procTest te nakon toga pritisnuti tipku Enter. Visual Basic će da doda otvorenu i zatvorenu zagradu „()“ nakon naziva procedure te će dodati End Sub liniju programskog koda u drugoj liniji ispod naziva procedure. Dobit će se slijedeće: Public Sub procTest() End Sub Programski kod je potrebno, kao što je već rečeno, dodati između naziva procedure i linije End Sub koja označava kraj procedure. U slučaju dodavanja funkcije potrebno je umjesto riječi Sub koristiti riječ Function, tada će se umjesto End Sub pojaviti End Function. 33 U lijevom gornjem uglu prozora za unos programskog koda nalazi se padajuća lista u kojoj se nalazi lista svih postojećih kontrola na formu, objekt Form i sekcija (General). Svaka kontrola je predstavljena svojim imenom koji je prethodno tokom faze dizajniranja zadan u okviru osobina svake od kontrola korištenih na formu. Potrebno je uočiti da se u listi objekat form, iako posjeduje vlastito ime, određeno tokom faze dizajniranja objekata, uvijek pojavljuje samo kao Form, a nikada pod definiranim imenom. Inače se unutar objekta form može napraviti refenenca na sam objekt korištenjem ključne riječi ME. Izborom bilo koje kontrole, ili form-a kao objekta, u desnom gornjem uglu formira se spisak mogućih događaja (eventa). Za svaku vrstu kontrole postoji jedinstven, ali donekle različit spisak mogućih eventa. Neki od event-a se pojavljuju u više vrsta kontrola dok su neki specifični za određene kontrole. Naprimjer, za objekt Form, spoecifične event procedure su Load i Unload koje se izvršavaju prilikom učitavanja odnosno zatvaranja forma. Sekcija (General) služi za dvije namjene: - za smještaj varijabli koje imaju područje važnosti u cijelom području programskog koda u okviru form-u, u okviru sekcije (Declarations). - za smještaj općih procedura / funkcija. Izborom sekcije (General) u listi u desnom gornjem uglu formira se spisak svih kreiranih općih procedura / funkcija te sekcija (Declarations) koja sadrži listu varijabli koje su deklarirane za korištenje na nivou programskog modula aktivnog forma. Parametarske procedure U nazivima općih procedura odnosno funkcija, kako se to moglo vidjeti, dodaju se na kraju naziva procedure / funkcije zagrade (). Ukoliko unutar zagrada nema ništa, tj u deklaraciji procedure / funkcije postoji samo otvorena i zatvorena zagrada, radi se o procedurama bez parametara odnosnu funkcijama bez parametara. Definiranjem parametara unutar zagrada definiraju se tzv. parametarske procedure odnosno funkcije. Uobičajeni način proslijeđivanja parametata u Visual Basicu, slično kao i u drugim programskim jezicima, jeste njihovo nizanje u popis u kojem su međusobno odvojeni zarezima. Na primjer, ako se želi kreirati javna procedura u kojoj se žele koristiti vrijednosti osnovnih RGB boja onda bi zaglavlje procedure moglo da izgleda ovako: Public Sub procBojaPozadine(paramRed, paramGreen, paramBlue) Parametri se mogu definirati i kojeg su tipa, a ako se ostavi bez definicije tipa onda se smatra da su tipa Variant. O tipovima varijabli bit će riječi kasnije. Uz pretpostavku da pomenuta procedura podešava boju objekta picTest na formu koji ima naziv FormA, onda bi kompletna procedura mogla da ima slijdeći izgled: Public Sub procBojaPozadine(paramRed, paramGreen, paramBlue) FormA.picTest.BackColor=RGB(paramRed, paramGreen, paramBlue) End Sub 34 Pozivanje procedure zahtijeva definiranje vrijednosti parametara koji figuriraju u proceduri. U prethodnom primjeru svaki puta kada se pozove procedura procBojaPozadine potrebno je da se proslijede numeričke vrijednosti koje se pridružuju parametrima definiranim u nazivu funkcije i to baš tim redom, npr. procBojaPozadine 255, 0, 0 Ova naredba će da izvrši promjenu boje pozadine kontrole picTest u crveno. Pozivanjem procedure, proslijeđivanjem samo vrijednosti, zadata je vrijednost parametra paramRed od 255, dok su parametri paramGreen i paramBlue dobili vrijednosti 0. Prilikom pozivanja procedure, na ovaj način, uvijek mora da se pazi na poredak parametara i proslijeđenih vrijednosti i mora da se proslijedi tačno onoliko vrijednosti koliko ima parametara. Postoj način da se i ne pazi na poredak parametara prilikom pozivanja procedure / funkcije. Taj način zahtijeva de se eksplicitno povežu nazivi parametara i vrijednosti koja se proslijeđuje pojedinom parametru. U prethodnom primjeru isti učinak bi se dobio slijedećim pozivom procedure: procBojaPozadine paramGreen:=0, paramBlue:=0, paramRed:=255 Na ovaj način nije bitan poredak (parametar paramRed iako je u deklaraciji procedure nalazi na prvom mjestu u pozivu procedure nalazi se na zadnjem) jer se prilikom pozivanja procedure eksplicitno zadaju vrijednosti parametara. Potrebno je i dalje da se za svaki parametar zadaju vrijednosti inače će nastupiti greška. Ovdje se dolazi do situacije da je potrebno da se omogući kreiraje parametarskih procedura / funkcija koje mogu biti definirane na način da nije uvijek neophodno da se proslijede vrijednosti za sve paramete. Ovakve procedure / funkcije je moguće definirati i u tom slučaju se radi o procedurama / funkcijama sa neobaveznim (Optional) parametrima. Primjer deklaracija parametarske procedure sa neobaveznim parametrima bi bila slijdeća: Public Sub procBojaPozadine(Optional paramRed, Optional paramGreen, Optional paramBlue) Deklaracijom procedure na ovaj način omogućeno je da se proceduri proslijede vrijednosti za samo neki od parametara. Prvo pravilo je da se modifikator Optional može proslijediti samo parametrima tipa Variant. Drugo pravilo kaže da se u deklaraciji procedure ili funkcije u kojoj se nalaze neobavezni parametri oni se moraju u nizu pojavljivati na kraju. Dakle nije moguće deklariranje obaveznog parametra nakon neobaveznog. Još dvije ključne riječi mogu da se nađu u parametarskim listama: ByVal i ByRef. Ove dvije ključne riječi određuju mehanizam proslijeđivanja vrijednosti parametrima ukoliko se proslijeđuju vrijednosti varijabli u pozivu procedure. Ukoliko se ispred parametra iskoristi ključna riječ ByVal, parametar procedure će dobiti samo vrijednost varijable u tom trenutku. Svaka promjena parametra unutar procedure neće imati uticaja na vrijednost varijable koja je pridružena parametru prilikom poziva procedure / funkcije. Kada se kontrola izvršavanja vrati nazad iz procedure / funkcije varijabla ima istu vrijednost koju je imala prilikom pozivanja procedure / funkcije. 35 Nasuprot ovome, ako se iskoristi ključna riječ ByRef u deklaraciji procedure / funkcije onda će se, u slučaju proslijeđivanja vrijednosti varijable parametru ispred kojeg je iskorištena ova ključna riječ stvari bitno promijeniti. Svaka promjena vrijednosti posmatranog parametra uzrokovat će i direktnu promjenu vrijednosti varijable koja je proslijedila inicijalnu vrijednost tom parametru. Nakon završetka procedure / funkcije varijabla će imati vrijednost koju je imao parametar na kraju izvršavanja procedure a koja može da se bitno razlikuje od vrijednosti prilikom poziva procedure. Funkcije Kao i parametarske procedure i funkcije mogu da sadržavaju parametre: Function NazivFunkcije (paramA as TypeA, paramB as TypeB...) AS TipFunkcije 'Naredbe u okviru proračuna vrijednosti funkcije End Function Funkcija može biti deklarirana, s obzirom na njen doseg (scope) kao javna (Public) ili lokalna (Private) u ovisnosti od potrebe da se funkcija koristi u okviru cijelog projekta ili samo u jednom modulu. Funkcija ima osobinu koja je bitno razlikuje od procedure: ona izračunava određenu vrijednost, poprima tu vrijednost te je pridružuje varijabli iz koje je funkcija pozvana. Funkcija vraća tip onakav kakav je zadan u deklaraciji funkcije. Ako se u deklaraciji funkcije izostavi naglašavanje tipa funkcije onda funkcija vraća vrijednost tipa Variant. Programski kod unutar funkcije obično negdje pri kraju sadrži naredbu u kojoj se na lijevoj strani nalazi naziv funkcije, a na desnoj izraz koji može poprimiti odgovarajuću vrijednost i koji je tipa kao i tip funkcije. Na tom mjestu se i izračunava dakle vrijednost funkcije, na primjer> Private Function NazivFunkcije(paramA As Byte) As Integer ... ‘Programski kod ... NazivFunkcije = izračunatiIzraz End Function Podatke funkcija prima preko argumenata koji su nabrojani u zaglavlju deklaracije funkcije. Na ovaj način funkcije predstavljaju moćno oruđe u rukama programera jer je potrebno da se samo jednom napiše programski kod koji se sa različitim parametrima poziva i time se dobijaju odgovarajući odgovori odnosno vrijednosti od strane funkcije za rayličite ulazne podatke. U Visual Basic-u funkcija se poziva preko izraza u kojem se na lijevoj strani nalazi odgovarajuća varijabla a na desnoj funkcija sa listom parametara koji su najčešće varijable, mogu biti i fiksne vrijednosti, ali uvijek moraju biti istog tipa kao što je to u naglašeno u deklaraciji funkcije: varijablaA = NazivFunkcije (argA, argB,...) 36 Lista argumenata koji se proslijeđuju funkciji, za razliku kada se poziva parametarska procedura, moraju biti zatvoreni unutar zagrada. Funkcija se može pozvati i na način da se samo napiše naziv funkcije koja se poziva, dakle bez pridruživanja vrijednosti, nekoj varijabli, koju funkcija vraća. U tom slučaju izvršava se programski kod unutar funkcija, a izračunata vrijednost se odbacuje. Međutim, ovo je sasvim neprikladan način korištenja funkcija jer je ona prvenstveno namijenjena da izračuna vrijednost za određene parametre i tu vrijednost vrati varijabli. U ovakvom slučaju potrebno je koristiti proceduru umjesto funkcije. Načini prikaza procedura / funkcija Prozor za prikaz programskog koda može da prikazuje procedure u dva načina: - Procedure View način u kome se prikazuje samo jedna procedura u jednom trenutku. Korištenjem tipki PageDown odnosno PageUp moguće je da se kreće od jedne do druge procedure unutar aktivnog forma. - Full Module View, način u kome se u kontinuitetu prikazuju sve postojeće procedure unutar jednog forma. Na slici 3.5 prikazan je primjer izgleda prozora za ovaj način prikaza. Mogu se uočiti tri event procedure: o cmdOK_Click za komandno dugme cmdOK i event proceduru - događaj koji nastupa kada korisnik klikne na dugme; o Form_Load za form frmStart i to za event proceduru – događaj koja se izvršava kada se učita form te o txtData_Change za polje za unos podataka txtData i to za event proceduru - događaj koja se izvršava svaki put kada korisnik promijeni neki podatak u kontroli. Slika 3.5 – Full module view Između procedura može postojati horizontalna linija koja vizualno dijeli pojedine procedure, ako je uključena opcija Procedure Separator na kartici Editor u prozoru Options koji se nalazi na izborniku Tools, slika 3.6. Ovdje se takođe može definirati i podrazumijevani način prikaza procedura. Uključivanjem opcije Default to Full Module View za svaki form će podrazumijevana opcija prikaza biti Full Module View. 37 Slika 3.6 – Tools – Options: Uključivanje opcija za prikaz Prelaz između jednog od dva spomenuta načina prikaza procedura moguće je i korištenjem preklopki u donjem lijevom uglu prozora za pisanje koda. Neke važniji događaji Kao što je već rečeno event procedure se imenuju po principu NazivKontrole_NazivDogađaja. Pri ovome je potrebno obratiti pažnju na činjenicu da ako se nakon upisivanja programskog koda unutar neke od event procedura promijeni naziv kontrole, Visual Basic više neće raspoznati prethodno napisane event procedure za tu kontrolu. Dakle, promjenom naziva kontrole neće se automatski promijeniti naziv event procedure. Srećom, postojeće procedure neće biti obrisane, ali će se podrazumijevati da se radi o općim, a ne o event procedurama pa je potrebno iskopirati postojeći programski kod nazad unutar novoimenovane event procedure. Važniji događaji (event-i) koji je potrebno poznavati i koji se često koriste kod objekta Form su slijedeći: - Load, događaj koji se izvršava svaki put kada se unutar programa pozove prikaz forma. Događaj se izvršava u trenutku učitavanja podataka u memopriju računara o formu, prije negom što se prozor kojim je objekat grafički predstavlje uopće pojavi na ekranu. - Activate, događaj koji nastupa nakon događaja Load, tj. nakon što se podaci o formu učitaju u memoriju i kada se grafički prozor koji predstavlja form pojavi na ekranu. - Unload, događaj koji se aktivira u trenutku brisanja podataka o formu iz memorije računara, ali prije nego što je form nestao sa ekrana. - Terminate, događaj nastupa nakon događaja Unload i to u trenutku kada form nestane sa ekrana. 38 Za kontrolu tipa CommandButton najvažniji događaj za koji je potrebno napisati odgovarajući programski kod je: - Click, Događaj nastupa svaki put kada korisnik klikne na kontrolu. Za kontrolu tipa TextBox koja služi za unos podataka od strane korisnika važni događaji su: - Change, koji nastupa svaki put kada se promijeni neki podatak u kontroli. Potrebno je biti oprezan sa korištenjem jer se event procedura aktivira prilikom promjene samo jednog alfanumeričkog znaka. - Validate, događaj koji je koristan u fazi ispitivanja ispravnosti unesenog podatka u kontroli. Parametar Cancel se koristi da se spriječi unos ili promjena koji ne odgovaraju postavkama za datu kontrolu. Davanje vrijednosti Cancel=True ukoliko unos nije ispravan onemogućava dalji rad u programu i zahtijeva ispravku pogrešno unesenog podatka. - KeyDown, događaj koji se aktivira pritiskom na tipku tastature. Moguće je koristiti KeyCode broj za odabir aktivnosti u ovisnosti od pritisnute tipke. Parametar Shift se može iskoristit za provjeru da li je pritisnuta tipka Shift, ako je Shift=1, odnosno da li je pritisnuta tipka Ctrl, ako je parametar Shift=2. - KeyPress, slično kao o KeyDown, aktivira se pritiskom tipke na tastaturi. - KeyUp, isto kao i KeyDown samo se aktivira nakon što se otpusti pritisnuta tipka na tastaturi. .Za kontrolu tipa Picture koja se najčešće koristi za grafičke prikaze interesantna su tri događaja koja nastaju korištenjem miša i tipki na mišu: - MouseDown je događaj koji se pokreće pritiskom tipke miša, MouseMove nastupa uvijek tokom pomicanja miša nad kontrolom dok event procedura MouseUp nastupa otpuštanjem tipke na mišu. U svakoj od ovih event procedura moguće je pomoću parametara kontrolisati: o Da li je pritisnuta lijeva ili desna tipka miša, za što se koristi parametar Button. Vrijednost ovog parametra od 1 određuje lijevu tipku miša, dok 2 određuje desnu. o Da li je pritisnuta tipka Shift odnosno tipka Control (Ctrl) a što se može odrediti pomoću parametra Shift koji poprima vrijednost 1 za pritisnutu tipku Shift i 2 za pritisnutu tipku Control (Ctrl). o X i Y koordinate na kojima se nalazi pokazivač miša. Pri ovome se razmjera određuje na osnovu vrijednosti osobine ScaleMode, najčešće u Twips-ovima. Pri ovome koordinatni početak polazi iz gornjeg desnog ugla što znači da X koordinata raste od lijeve ka desnoj strani PictureBox-a dok Y koordinata raste od gornje prema donjoj strani kontrole. 39 Message i Input box Često je potrebno prikazati različite poruke korisniku tokom faze korištenja programa. Da se ne bi kreirao poseban form sa porukom Visual Basic ima ugrađenu zgodnu i veoma korisnu osobinu: prozor za poruke, message box, (msgbox). Pozivanje prozora sa porukama je veoma jednostavno. U svom najjednostavnijem obliku sintaksa je slijedeća: MsgBox “Tekst poruke za korisnika!” Na ekranu će se prikazati prozor sa porukom prikazan na slici 3.7. Pored proslijeđivanja teksta poruke moguće je takođe upravljati i sa prikazom komandnih dugmadi (OK, Cancel, Yes, No...) te sa prikazom sličica koje odgovaraju vrsti poruke: informacija, upozorenje ili pak kritična greška. Slika 3.7 – Message box Nešto malo komplikovanija sintaksa naredbe za prozor sa porukama je slijedeća: MsgBox “Tekst poruke za korisnika!”, Dugme1+Dugme2+Sličica Visual Basic nudi nekoliko vrsta dugmadi koja se mogu naći na prozoru sa porukama kao što su: OK (vbOKOnly), OK i Cancel (vbOKCancel), Yes i No (vbYesNo) itd. Isto tako moguće je definirati prozor sa informativnom porukom dodajući sličicu koja simbolizuje informaciju, dodajući u sintaksu poruke (vbInformation), upozorenje (vbExclamation) odnosno kritičnu pogrešku (vbCritical). Na primjer, sintaksa poruke u gornjem slučaju sa dugmadima OK i Cancel te sa sličicom koja simbolizuje informaciju bi bila slijedeća: MsgBox “Tekst poruke za korisnika!”, vbOKCancel+vbInformation Prozor koji se prikazuje na osnovu gore napisane komande je prikazan na slici 3.8. Slika 3.8 – Message box Treći, opcionalni parametar koji se može proslijediti prilikom pozivanja message box-a je naslov koji se ispisuje na naslovnoj traci, title bar-u, prozora za poruke. U ovom slučaju sintaksa za message-box je slijedeća: 40 MsgBox “Tekst poruke za korisnika!”, vbOKCancel+vbInformation, "Test" Ukoliko se ne unese treći parametar za title bar onda se na message box-u ispisuje naziv projekta (programa) koji se zadaje u Project Properties-u. Prozora za poruke može se koristiti i za traženje odluke od strane korisnika za dalje aktivnosti. U slučaju kada se na prozoru nalazi više od jednog dugmeta moguće je odrediti koje dugme je pritisnuto od strane korisnika, odnosno koju odluku je korisnik odabrao. Pritiskom na bilo koje ponuđeno dugme prozor se zatvara, a message box, slično kao i funkcija, vraća vrijednost koja ovisi od pritisnutog dugmeta. Vrijednost koju vrati message box može se pridružiti nekoj varijabli te se na osnovu vrijednosti te varijable može dalje odlučiti smjer izvršavanja programa. Sintaksa je slijedeća: msgResponse = Msgbox ("Poruka",vbYesNo + vbQuestion) U primjeru je sa msgResponse varijabla koja poprima vrijednost u ovisnosti od toga koje dugme je kliknuto na message box-u, Yes ili No u datom primjeru. Za ispitivanje se mogu koristiti konstante vbYes odnosno vbNo. U Tabeli su date vrijednosti koje funkcija MsgBox poprima u ovisnosti od pritisnutog dugmeta. U slučaju korištenja message box-a kao funkcije svi parametri moraju biti unutar zagrada. Tabela 3.1 - Vrijednosti funkcije msgbox Konstanta vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Vrijednost 1 2 3 4 5 6 7 Dugme OK Cancel Abort Retry Ignore Yes No Input Box se često može iskoristiti za upis određenog podatka od strane korisnika te pridruživanje te vrijednosti varijabli. Sintaksa komande za InputBox je slična sintaksi koja se koristi kod message box-a: inputData = InputBox "Tekst poruke","Naslov", inicijalnaVrijednost Prvi parametar ("Tekst poruke") se ispisuje na samom prozoru i služi da se korisniku objasni koja se aktivnost očekuje od njega. Parametar "Naslov" određuje ispis na naslovnoj traci (title bar-u) dok se sa parametrom inicijalnaVrijednost nudi vrijednost koja se prilikom pojavljivanja InputBox-a pojavljuje u polju za upis podatka. Primjer prozora tipa InputBox koji se pojavljuje usljed naredbe: InputBox "Upisite vrijednost", "Podatak", 50 prikazan je na slici 3.9. 41 Slika 3.9 - Input Box Vrijednost koja se upiše u polje pridružuje se varijabli u naredbi za pozivanje InputBox-a, na primjer u slučaju naredbe: vrijednostX = InputBox "Upisite vrijednost", "Podatak", 50 vrijednost koju korisnik upiše pridružuje se varijabli vrijednostX. Provjera sintakse Tokom faze pisanja programskog koda Viual basic editor automatski provjerava sintaksu u svakoj liniji koda. Sintaksa, u programerskom smislu, se može definirati kao skup osnovnih gramatičkih pravila programskog jezika. To je format koji Visual Basic očekuje da bude poštovan u svakoj liniji programskog koda. Ako Visual Basic pronađe da nešto nije u redu u liniji programskog koda, pojavit će se dva neovisna događaja koja će sugerirati grešku: 1. Linija programskog koda koja je pogrešno napisana bit će prikazana crvenom bojom. 2. Prozor sa porukom o grešci će da se pojavi na ekranu, ukratko objašnjavajući u čemu je problem. Koristan način rješavanja problema usljed upisivanja pogrešne sintakse jeste korištenje Visual Basic Help-a. Zgodno je što se pomoć može pozvati samo sa jednim klikom. Potrebno je da se kursor postavi unutar ključne riječi koja se nalazi u liniji programskog koda sa greškom te da se pritisne funkcijska tipka F1. Visual basic prikazuje tekst u kome se objašnjava ispravna sintaksa za tu ključnu riječ. Ispravnost sintakse se takođe može pratiti tokom pisanja koda na način da se ključne riječi i nazivi varijabli pišu malim slovima. Nakon završetka pisanja linije programskog koda pritiskom na tipku Enter Visual Basic provjerava ispravnost korištene sintakse kao i korektno ispisivanje malih i velikih slova u ključnim riječima i nazivima varijabli. Sve ključne riječi i tipovi varijabli se ispisuju u plavoj boji sa prvim velikim slovom. U cilju provjere ispravnog upisivanja naziva varijabli, a pogotovo ako se daju duža opisna imena varijablama, obično sastavljena od dvije ili više riječi, potrebno je da se prva slovo svake riječi u deklaraciji varijable definira sa velikim slovom. Nakom pritiska na tipku Enter na kraju linije programskog koda, bivaju od strane Visual Basic-a pretvorena mala slova u velika, na isti način kao što je to definirano u deklaraciji varijable. 42 Auto Member liste Prilikom pisanja programskog koda često će se desiti da se pojavljuje lista sa opcijama koje se mogu izabrati u datom trenutku. Na osnovu korištenih ključnih riječi u liniji programskog koda Visual Basic određuje koje dalje ključne riječi mogu da se nađu u toj liniji pa nudi listu mogućih opcija. Lista mogućih opcija se sastoji od ključnih riječi koje mogu da se nađu na tom mjestu, tipova varijabli, osobina itd. Ova opcija je veoma korisna prilikom pisanja programskog koda jer se automatski može pratiti ispravnost korištene sintakse. Da bi se pojavljivala lista opcija potrebno je da se uključi opcija Auto List Members na kartici Editor, okvir Code Settings, u prozoru Options koji se nalazi na izborniku Tools, slika 3.6. Duge linije programskog koda Još jedna važna odlika Visual Basic editora je da se često duge linije programskog koda mogu podijeliti u više, kraćih linija koda. Da bi se to ostvarilo potrebno je definirati prelaz sa jedne na drugu liniju koda. To se ostvaruje korištenjem donje crte (underscore character-a) (_) na kraju linije koda za koju se želi nastaviti pisanje u novoj liniji. Na kraju svake linije koda potrebno je koristiti ovaj znak za prelazak na novu liniju koda. Ovo, pored lakšeg pregleda programskog koda u Visual Basic Editoru, takođe može biti korisno za potrebe štampanja programskog koda jer omogućava mnogo bolju čitljivost na štampanoj verziji. 43 4. VARIJABLE Deklaracije varijbli Prije korištenja bilo koje varijable u programskom kodu preporuka je da se varijabla eksplicitno deklarira. Kontrola deklariranja varijabli je moguća korištenjem naredbe OPTION EXPLICIT. Ukoliko se ova naredba nalazi u sastavu forma ili modula onda se unutar tog forma ili modula moraju deklarirati sve varijable koje se koriste. Moguće je od Visual Basica zatražiti da u svaki novi form ili modul automatski ubacuje naredbu OPTION EXPLICIT. U izborniku Tools potrebno je odabrati opciju Options, te na kartici Editor uključiti opciju Require Variable Declaration. Slika 4.1 – Prozor Option – Kartica Editor Deklariranje varijabli se izvodi pomoću tri klučne riječi u Visual Basicu: PUBLIC, PRIVATE i DIM. Prema samom imenu PUBLIC i PRIVATE može se zaključiti i osnovna razlika između ovih dvaju ključnih riječi. PUBLIC se koristi za deklariranje varijabli čije se korištenje namjenjuje unutar cijelog projekta / programa, dok se riječ PRIVATE koristi za deklariranje varijabli čije je korištenje potrebno samo unutar forma ili modula u kojem je varijabla i deklarirana. Pri 44 ovome se varijable koje su namijenjene za korištenje u cijelom projektu / programu, tzv. javne (public) varijable, deklariraju unutar modula dok se unutar formova deklariraju PRIVATE varijable, tj. one varijable koje se koriste samo unutar dotičnog forma. U oba slučaja varijable se deklariraju u okviru sekcije (General) – (Declarations) na način: PUBLIC varijablaX odnosno PRIVATE varijablaX Tipovi varijabli U gornjem primjeru nije definiran tip varijable pa se podrazumijeva da je varijablaX tzv. variant tipa. Variant varijabla može sadržavati bilo koju vrstu podatka, broj, tekst, objekt itd. Pomoću posebnih funkcija je moguće odrediti tip varijable koji je pohranjen u variant varijabli, a tip variant varijable se mijenja prilikom pridruživanja bilo kojeg tipa podatka. Dakle, potrebno je zapamtiti da ako eksplicitno nije definirano kojem tipu varijable pripada deklarirana varijabla onda je ona tipa variant. Ukoliko je moguće unaprijed odrediti tip varijable potrebno je u deklaraciji varijable naglasiti tip varijable. Kao što će se kasnije vidjeti definiranje tipa varijable je korisno jer Visual Basic na taj način efikasnije može da upravlja memorijskim prostorom za smještaj varijabli. Tip varijant zahtijeva uvijek veći memorijski prostor od varijable kojoj je eksplicitno zadat tip. U slučaju poznatog tipa, način deklaracije varijable je slijedeći: PUBLIC varijablaX AS Tip odnosno PRIVATE varijablaX AS Tip pri čemu varijable mogu imati tipove koji su prikazani u Tabeli 4.1. Tabela 4.1 Tip varijable Byte Boolean Integer Long Single Prostor koji zauzima (Byte) 1 2 2 4 4 Double 8 Vrijednosti koje može poprimiti 0 do 255 Tačno (True) ili Netačno (False) Od -32,768 do 32,767 Od -2,147,483,648 do 2,147,483,647 Od -3.402823 . 1038 do -1.401298 . 10-45 za negativne vrijednosti te od 1.401298 . 10-45 do 3.402823 . 1038 za pozitivne vrijednosti Od -1.79769313486232 . 10308 do -4.94065645841247 . 10-324 za negativne vrijednosti te od 4.94065645841247 . 45 Currency 8 Decimal 14 Date Object String konstantne dužine String promjenljive dužine Variant (numeric) Variant (string) 8 4 Dužina niza (broj korištenih znakova) 10 bajtova + dužina niza 16 22+ string length 10-324 do 1.79769313486232 . 10308 za pozitivne vrijednosti Od 922,337,203,685,477.5808 do 922,337,203,685,477.5807 Bez decimalnih mjesta: +/-79,228,162,514,264,337,593,543,950,335 Sa 28 decimalnih mjesta: +/- 7.9228162514264337593543950335 Najmanji mogući broj: +/-0.0000000000000000000000000001 1. Januar 100. do 31. Decembar 9999. Bilo koji objekt Od 1 to približno 65,400 znakova Dužina alfanumeričkog niza se može kretati od 0 do približno 2 milijarde znakova. Bilo koja numerička vrijednost do vrijednosti koju može imati tip Double. Isti rasponi kao u slučaju niza (string-a) promjenljive dužine. DIM ključna riječ Deklariranje varijabli je moguće i korištenjem ključne riječi DIM. U ovisnositi od mjesta gdje je varijabla deklarirana ovisi i područje definiranosti važenja varijable: ako je definirana u sekciji (Declarations) varijabla važi u svim procedurama dotičnog modula, a ako je definirana unutar procedure ili funkcije onda važi samo u toj proceduri odnosno funkciji. Ovo je značajna odlika ključne riječi DIM u odnosu na ključne riječi PUBLIC i PRIVATE, jer se varijable pomoću ključne riječi DIM mogu deklarirati i na nivou procedure odnosno funkcije. Način deklariranja je identičan kao i kod PUBLIC i PRIVATE, pa za variant tip varijable glasi DIM varijablaX odnosno za definirati tip: DIM varijablaX AS Tip Nazivi varijabli I kod davanja imena varijablama postoje preporuke kao što je to slučaj kod imenovanja objekata i kontrola. Postoji samo pravilo da naziv varijable mora da započinje sa slovom. Nekada se je u raznim varijantama BASIC-a koristio princip sufiksa u označavanju tipa varijabli, pa se tako varijablama tipa Integer dodavao sufix % (procenat), varijablama tipa 46 Single ! (uskličnik), varijablama tipa String $ (dolar) itd. Ovaj način se ne koristi kod Visual Basica, ali isto tako niti način davanja prefiksa nije suviše često korišten nit se strogo preporučuje. Najčešće ostaje na programeru da odabere najbolji način deklariranja varijabli koji je dovoljno jasan. Isto tako se u (Declarations) sekciji mogu uz deklariracije varijabli upisati popratni komentari koji opisuju vrstu i namjenu varijabli. Komentari se u Visual Basicu upisuju nakon znaka jednostrukog apostrofa ('). Nakon ovoga znaka Visual Basic ne provjerava sintaksu niti koristi išta što je napisano. Preporučuje se umetanje komentara u svim dijelovima programskog koda jer to omogućava lakšu čitljivost i razumljivost, ne samo za druge osobe nego često i za samog programera. Visual Basic, za razliku od prijašnjih varijanti „običnog“ Basica nema ograničenja u dužini naziva varijable što omogućava davanje naziva varijablama koje mogu biti sastavljene od više riječi i koje direktno opisuju svrhu varijable. Pri ovome je preporuka da se u nazivu varijabli sa više riječi svako prvo slovo u riječi piše velikim slovom. Napomenuti je da nisu dozvoljeni razmaci u imenima varijabli. Dodjeljivanje vrijednosti varijablama Naredbom jednakosti, koja sa lijeve strane ima naziv varijable, a sa desne, izraz koji se može izračunati u tom trenutku ili konkretnu vrijednost, vrši se dodjeljivanje vrijednosti varijablama. nazivVarijable = vrijednost odnosno nazivVarijable = izraz U slučaju kada se sa desne strane nalazi izraz, taj izraz se može pojaviti u bilo kojem formatu koji može poprimiti vrijednost koja odgovara tipu varijable sa lijeve strane. Najjednostavniji primjer je kada se varijabli koja je tipa Byte, Integer, Long, Single ili Double, dakle jedan od numeričkih tipova, pridruži konkretna numerička vrijednost, npr: brojKoraka = 10 Prilikom pridruživanja vrijednosti varijablama potrebno je voditi računa o kojem se tipu varijable radi te da li vrijednost koja se pridružuje pripada području definiranoti tipa varijable. Na primjer, pridruživanje broja većeg od 32,767 varijabli tipa Integer rezultirat će u pogrešci, jer je 32,767 najveći pozitivan broj koji se varijabli tipa Integer može dodijeliti. Pridruživanje varijablama tipa String vrši se na slijedeći način: tekstPoruke = „Pogreška! Unijeli ste pogrešan broj!“ Primjer pridruživanja vrijednosti varijablama korištenjem izraza može biti slijedeći: brojKoraka = pocetniKorak + 1000 * vremenskiKorak U ovom primjeru se na osnovu vrijednosti varijabli pocetniKorak i vremenskiKorak izračunava vrijednost izraza sa lijve strane i ta se vrijednost pridružuje varijabli brojKoraka. 47 U izrazu na desnoj strani može da se pojavi i sama varijabla kojoj se izračunava nova vrijednost. Ovakav izraz je u matematičkom pogledu nemoguć ali je u programerskoim smislu sasvim normalan i više nego često se koristi, na primjer: brojKoraka = brojKoraka + 1 Nakon ove naredbe varijabla će brojKoraka će imati vrijednost koja je za jedan veća od vrijednosti mkoju je varijabla imala proje naredbe. U nekim starijim verzijama Basica naredba pridruživanja je uvijek u sebi uključivala ključnu riječ LET, pa je naredba pridruživanja imala ovakav oblik: LET nazivVarijable = vrijednost odnosno LET nazivVarijable = izraz Inicijaliziranje varijabli Jedna od prvih stvari o kojima se mora voditi računa prilikom pokretanja programa je da li varijable sa kojima će se raditi u programu treba da imaju neke inicijalne vrijednosti. Da bi se ovo ostvarilo potrebno je prilikom pokretanja programa izvršiti inicijaliziranje vrijednosti takvih varijabli. Neke lokalne varijable, sa područjem definiranosti na nivou forma, takođe zahtijevaju neke inicijalne vrijednosti prilikom pokretanja tog forma. U programima se mora definirati form koji se otvara prvi prilikom pokretanja, tzv. start up form. Visual Basic učitava programski kod i dizajn start up forma prilikom pokretanja i uapočinje sa izvršavanjem programa. Programski kod koji je napisan u event proceduri Load start up forma se izvršava kada se form učitava u memoriju. Ovaj proces je idealno mjesto gdje se definiraju inicijalne vrijednosti željenih varijabli. Na isti način se u svakoj ostaloj formi mogu odrediti inicijalne vrijednosti lokalnih varijabli prilikom učitavanja forma u njenoj Load event proceduri. Pisanje izraza u naredbama pridruživanja Kao što se je poznato vrijednost varijable se može definirati korištenjem izraza u kojima je moguće da se izračuna nova vrijednost varijable. Visual basic prvo izračunava vrijednost izraza na lijevoj strani naredbe pridruživanja i nakon toga izračunatu vrijednost pridružuje varijabli. Izračunavanje izraze je moguće korisštenjem različitih operatora uz pomoć kojih se formira aritmetička operacija. Operator je simbol koji predstavlja odgovarajuću operaciju: - Znak ^ predstavlja operaciju stepenovanja kojom se stepenuje broj koji se nalazi ispred operatora na eksponent koji se nalazi iza operatora. Na primjer izraz x^3 predstavlja operaciju stepenovanja na treću potenciju varijable x. - Znak * predstavlja operaciju množenja. - Znak / (slash) predstavlja operaciju dijeljenja pri čemu je broj ispred operatora djeljenik a broj iza operatora djelitelj. Potrebno je voditi računa da je djelitelj različit od nule inače se pojavljuje pogreška tokom izvršavanja programa. - Znak \ (backslash) predstavlja dijeljenje sa rezultatom koji je cijeli broj, tzv. integer dijeljenje. 48 Na primjer izraz 7 \ 3 daje za rezutat 2. I u ovom slučaju djelitelj mora biti različit od nule inače se javlja pogreška. - MOD operator izračunava ostatak cijelog dijeljenja. Na primjer 7 MOD 3 za rezultat daje 1, jer je ostataka dijeljenja 1. Ovo je jedini operator koji je ključna riječ – ostali su obični znakovi. - Znak + je zank operacije dijeljenja, a znak – operacije oduzimanja, ali isto tako se koristi i kao znak za negativne brojeve. Pravila redoslijeda izvršavanja operacija Kada izraz posjeduje više operacija Visual Basic slijedi definirani redoslijed izvršavanja operacija čime određuje koja se operacija izvršava prva i tako redom. Redoslijed izvršavanja operacija je slijedeći: 1. Potenciranje (^) 2. Negacija (-) 3. Množenje (*) i dijeljenje (/) 4. Dijeljenje sa cijelim brojem (\) 5. MOD operacija, ostatak cijelog dijeljenja 6. Sabiranje (+) i oduzimanje (-) Slično kao i u čisto matematičkim izrazima redoslijed izvršavanja operacija se može diktirati korištenjm zagrada. U ovom slučaju se prvo izvršavaju operacije koje su zatvorene unutar zagrada. U slučaju postojanja zagrada unutar zagrada, prvo se izvršavaju izrazi u unutrašnjim zagradama a zatim u korak po korak u vanjskim. Zagrade su zgodan način da se složene operacije i izrazi predstave na čitljiv i lako razumljiv način odnosno u svim situacijama kada programer nije baš sasvim siguran u redoslijed izvođenja operacija. U svakom slučaju uvijek je bolje imati i višak zagrada ali tačan rezutat nego kreirati nečitljiv izraz čime se može dovesti u pitanje ispravnost proračuna. Operacije sa nizovima riječi (stringovima) Visual Basic takođe ima specifične operacije sa ostalim, nenumeričkim tipovima podataka. Na primjer može se koristit operator kojim se vrši sastavljanje više nizova riječi u jedan niz odnosno rečenicu odnosno rečenice. Primjer sastavljanja je slijdeći: msgTitle = “Naslov“ & “ – Objasnjenje” U prethodnom primjeru vrijednost dvaju stringova “Naslov“ i “ – Objasnjenje“ se sastavljaju u jedan string “Naslov – Objasnjenje“ te se pridružuju varijabli msgTitle. U prethodnom izrazu operator sastavljanja dvaju stringova je opoerator &. Interesantno je da se operator & može upotrijebiti i u slučaju kada se jednom stringu pridružuje varijabla koja ima čisto numeričku vrijednost. U tom slučaju se numerička vrijednost tretira čisto kao string pa je stoga i moguće izvršiti spajanje. Pored operatora spajanja & za spajanje stringova se može koristiti i operator +. Međutim ovaj operator se može iskoristiti samo u slučaju spajanja čistih stringova. U slučaju da se pokuša spojiti string 49 sa varijablom koja ima numeričku vrijesnot dobit će se greška tokom faze izvršavanja programa. Nizovi Niz je list, tabela odnosno višedimenzionalni skup podataka koji se predstavljaju istim imenom varijable. Niz ima svojstva koja posjeduje svaka varijabla: svrha mu je čuvanje i predstavljanje podataka i ima područje validnosti koje ovisi od toga koja ključna riječ je korištena (Dim, Private ili Public) te na kojem mjestu je izvršeno deklariranja niza (Declarations sekcija ili zaglavlje procedure / funkcije). Međutim, pored ovih opštih osobina koje ima svaka varijabla jedan niz posjeduje svojstvo da mu se podaci mogu organizirati u jednoj, dvije ili više dimenzija. Svaki podatak unutar jednog niza jedinstveno je određen brojem ili indeksom niza. Pri ovome kod jednodimenzinoalnih nizova postoji indeks sastavljen od jednog broja, kod dvodimenzionalnog niza, tabele, indeks je sastavljen od dva broja koja predstavljaju red i kolonu tabele podataka itd. Visual Basic nudi mmogućnost kreiranja maksimalno 60 dimenzionalnog niza. Jednodimenzionalni nizovi Jednodimenzionalni niz se deklarira koristeći ključne riječi Public, Private ilio Dim u ovisnosti od željenog dosega varijable: PUBLIC nizX(N) AS Tip odnosno PRIVATE nizX(N) AS Tip odnosno DIM nizX(N) AS Tip N je broj koji označava maksimalan predviđeni broj elemenata niza. U principu broj elemenata niza će biti N+1 jer se uzima da je prvi član niza varijabla sa ineksom 0 (nula). U Visual Basicu se podrazumijeva da je prvi član niza predstavljen indeksom 0. Međutim postoji naredba koja omogućuje da definiranje početka indeksiranja od 1. Naredba koja eksplicitno određuje od kojeg broja započinje indeksiranje je naredba OPTION BASE. Naredba se mora upotrijebiti u modulu prije bilo koje deklaracije niza. Oblik naredbe za slučaj definiranja početka indeksiranja od 1 je slijedeći: OPTION BASE 1 Visual Basic dozvoljava takođe kreiranje niza kod kojeg prvi član ima indeks koji je proizvoljan redni broj. Moguće je dakle deklarirati niz kod kojeg se indeksi Nalaze između dva redna broja. Primjer za ovo je: PUBLIC nizX (N to M) AS Tip U ovom primjeru deklarirana je niz pod nazivom nizX koji ima indekse koji polaze od vrijednosti N pa sve do vrijednosti M. 50 Višedimenzionalni nizovi U slučaju višedimenzinoalnih nizova potrebno je za svaku dimenziju da se odrede maksimalne vrijednosti ili raspon indeksa. Za slučaj dvodimenzionalnog niza, kod kojeg se zadaju samo krajnje vrijednostim indeksa deklaracija ima oblik: PUBLIC nizX (N, M) AS Tip U slučaju kreiranja dvodimenzinalnog niza sa indeksima u željenim granicama onda deklaracija ima oblik: PUBLIC nizX (N1 TO N2, M1 TO M2) AS Tip Na isti način višedimenzionalni niz se deklarira na slijedeći način: PUBLIC nizX (N1 TO N2, M1 TO M2, ... W1 TO W2) AS Tip Broj dimenzija je ograničen na 60. Dinački nizovi Kada se deklariše niz u kojem se odredi tačan broj elemenata niza, tzv niz fiksne dužine, onda se nakon toga više, tokom izvođenja programa, ne može mijenati broj elemenata tog niza. Na primjer, ako se definira niz: PUBLIC struja(5) AS SINGLE Ovaj niz ima tačno 6 elemenata tipa single, ako je OPTIOBN BASE podešena na 0 što je podrazumijevana (default) vrijednost, odnosno niz će imati 5 elemenata ako je OPTION BASE podešen na 1. Tokom izvođenja programa broj članova niza se ne može mijenjati. Visual Basic rezervira memorijski prostor za ovaj niz i to tačno onoliko prostora koliko će zauzeti broje elemenata koji je definiran u deklaraciji niza te u ovisnosti od tipa niza. Ovaj rezervirani prostor ostaje nepromijenjen tokom cijelog trajanja rada programa. Nizovi fiksne dužine su dobro rješenje u svim slučajevima kada se unaprijed zna tačan broj elemenata niza. Ali u nekim slučajevima, broj elemenata niza se određuje dinamički tokom faze korištenja programa, tj. može postojati potreba da se broj elemenata mijenja tokom faze izvođenja programa. I ovdje je moguće koristiti niz fiksne dužine koji može da bude tako deklariran da ima veoma mnogo elemenata, odnosno onoliko mnogo koliko zahtjevi programa sigurno neće biti veliki. Ali ovakvo deklariranje niz je neprimjereno crpljenje resursa računara jer se u tom slučaju za sve elemente definira memorijski prostor iako u većini slučajeva taj prostor nikada neće biti korišten. Rješenje u ovakvim slučajevima je da se koriste takozvani dinamički nizovi. Visual Basic rezervira memorijski prostor za dinamičke nizove tokom faze izvršavanja programa i ovaj memorijski prostor može da se mijenja u ovisnosti od broja elemenata u dinamičkom nizu. Deklariranje dinamičkih nizova se vrši na sličan način kao što se to radi sa nizovima fiksne dužine, korištenjem ključnih riječi PUBLIC, PRIVATE ili DIM ispred naziva varijable niza, 51 ali se u zagrade ne upisuje broj kojim se unaprijed definira broj elemenata niza. U prethodnom primjeru, definiranje niza struja, promjenljive dužine bi bilo: PUBLIC struja() AS SINGLE Vrlo važno je da se prije korištenja varijable niza, bilo gdje u programu, koristi ključna riječ REDIM kojom se definira trenutna dužina (broj elemenata niza). Dakle, ako se u prethodnom primjeru želi raditi sa varijablom struja, i to sa prva 3 elementa, bez nultog elementa, potrebno je prije pozivanja varijabli struja(1), struja(2) i struja(3) da se izvrši dinamičko podešavanje dužine niza na slijedeći način: REDIM struja(3) Ako se dalje tokom faze izvršavanja programa ponovo želi promijeniti dužina niza, koristeći ponovo prethodni primjer, ako se želi promijeniti broje elemenata varijable struja sa 3 na 10 moguće je to izvršiti na dva načina: 1. Ponovnim korištenjem iste ključne riječi REDIM i upisivanjem novog ukupnog broja elemenata niza: REDIM struja(10) Na ovaj način se ukupan broj elemenata povećava na 10 (pod pretpostavkom da je OPTION BASE podešen na 1). Međutim, ako su prije korištenja ove naredbe varijable struja(1), struja(2) i struja(3) već bile korištene i imale neke vrijednosti, nakon ove nareddbe redimenzioniranja niza, vrijednosti u ova tri elementa niza se gube. Dakle potrebno je biti oprezan sa redimenzioniranjem niza jer se sve prethodne vrijednosti varijabli poništavaju. Nekada je to i potrebno pa se u tim slučajevima redimenziniranjem prazni memorijski prostor za smještaj novih vrijednosti. 2. Ukoliko se ipak žele zadržati prethodno izračunate vrijednosti u elementima niza, u prethodnom primjeru u elementima niza struja(1), struja(2) i struja(3), a potrebno je da se poveća broj elemenata niza, onda se zajedno sa ključnom riječi REDIM koristi i ključna riječ PRESERVE. Na primjer naredba REDIM PRESERVE struja(10) će sačuvati vrijednosti koje su prethodno pridružene elemenmtima niza i istovremeno povećat će broj elemenata niza na 10. Treba imati na umu da se REDIM naredba može koristiti za podešavanje broj elemenata samo dinamičkog, nikako ne niza fiksne dužine. U nekim slučajevima REDIM naredba se može koristiti i za promjenu broja dimenzija niza. Na primjer, pomoću naredbe REDIM moguće je da se dvodimenzionalni niz promijeni u trodimenzionalni. Ali isto tako ovaj način nije moguć ukoliko se koristi ključna riječ PRESERVE u okviru REDIM naredbe. Ukoliko se koristi ključna riječ PRESERVE onda se može mijenjati broj elemenata niza samo u poslednjoj dimenziji višedimenzionalnog niza. Sve ostale dimenzije višedimenzionalnog niza moraju da ostanu iste ukoliko se žele zadržati vrijednosti elemenata niza. 52
© Copyright 2024 Paperzz