Professional Documents
Culture Documents
Ivica Kartelo - Visual Basic 6 Objekti PDF
Ivica Kartelo - Visual Basic 6 Objekti PDF
Ivica Kartelo - Visual Basic 6 Objekti PDF
Visual Basic
6 objekti
II
Autor:
Ivica Kartelo, dipl. ing.
Urednik:
Ivica Kartelo
Naslov:
Visual Basic 6 objekti
Nakladnik:
kola E-92 d.o.o.
0RVHND6SOLW
Fax/Tel.: 021 569-777, 021 569-333, E-mail: skola-e-92@st.tel.hr
web: http://www.e92.hr
Za nakladnika:
5XLFD.DUWHOR0DUXLGLSOLXU
Tisak:
Kartular Split
3ULSUHPDVORJD]DWLVDNLJUDILNRREOLNRYDQMHRPRWD
Ivica Kartelo
Lektor:
,YDQ-%RNRYLSURI
8RYRMNQML]LSRMDYOMXMHVHQHNROLNR]DWLHQLK]QDNRYDLQD]LYDLMDMHXSRUDED
RJUDQLHQD]DNRQRP3RSLVWLK]QDNRYDLQD]LYDNDRLQMLKRYLKYODVQLNDQDOD]LVH
kod nakladnika.
Ivica Kartelo
I izdanje/Naklada: 500 kom.
6SOLWYHOMDD
Sva imena firmi, osoba, proizvoda i usluga koja se pojavljuju u knjizi i u
primjerima koji prate knjigu na Internetu su izmiljena.
Autor i Nakladnik ne snose odgovornost za posljedice koritenja ove knjige, niti
]DPRHELWQHSRJUHNHQDVWDOHXSURFHVXVWYDUDQMDNQMLJH2YRVHRGQRVLNDNRQD
knjigu, tako i na pohranjene datoteke na Internetu.
III
IV
Sadraj
6DGUDM
VII
Internet............................................................................................................. VIII
Lekcija 1 Classes
-1-
Hijerarhija objekata................................................................................. - 2 Kolekcije................................................................................................. - 2 Handling Errors....................................................................................... - 8 Inline Error Handling.............................................................................. - 9 Lekcija 2 Primjer naeg osobnog objekta tipa kolekcije
- 11 -
Deklariranje naeg objekta kolekcije .................................................... - 11 Punjenje naeg objekta kolekcije s Item-ima........................................ - 12 Kolekcija i For...Each petlja ................................................................. - 14 Argumenti Before i After...................................................................... - 16 8NODQMDQMH,WHPDL]NROHNFLMHSRPRXPHWRGH5HPRYH ..................... - 18 Kontrola Array je podvrsta objekta tipa kolekcija ................................ - 19 Lekcija 3 Objekt Global
- 22 -
- 25 -
Ugradimo kolekcije umjesto array-a .......................................................... - 25 Najprije izmijenimo izgled dokumenta cjenik.txt................................. - 25 8LWDMPRFMHQLNW[WXREMHNWWLSDNROHNFLMH ........................................... - 26 Izmjene kda u subproceduri cmdPonisti_Click()XYRHQMHPREMHNW
varijabli ................................................................................................. - 33 Lekcija 5 Ivamar i objekt App
- 36 V
Rad na projektu Ivamar ................................................................................. - 36 6SULMHLPRSRNUHWDQMHGYDSURJUDPD,YDPDUH[H ...................................... - 36 Svojstvo Path objekta App.................................................................... - 38 Lekcija 6 Ivamar i Kolekcija Printers
- 40 -
- 44 -
Kreiranje novog svojstva forme u projektu Ivamar....................................... - 44 Lekcija 8 Ivamar i nova forma
- 56 -
Dodavanje kontrola formi..................................................................... - 56 Pisanje dokumenta 'tezina.txt'............................................................... - 58 Kodiranje forme.................................................................................... - 59 Dohvat nove forme s glavne forme....................................................... - 61 Lekcija 9 Ivamar i osobni objekt Knjiga
- 62 -
Kreiranje objekta Knjiga ............................................................................ - 62 Kreiranje class modula Knjiga.............................................................. - 62 Kreiranje svojstava class modula Knjiga.............................................. - 63 Kreiranje varijabli Private u class modulu Knjiga................................ - 63 Kreiranje procedure Initialize ............................................................... - 64 Kreiranje procedura Let i Get class modula Knjige.............................. - 66 Spajanje programa na objekt Knjiga ............................................................. - 67 Promjene u glavnom obrascu radi ugradnje objekta Knjiga ...................... - 68 5DDQMHLXPLUDQMHREMHNDWD.QMLJDXSURMHNWX,YDPDU ........................ - 68 Promjena objekta Knjiga kada korisnik odabere novi naslov............... - 70 Promjene kda u proceduri optKom_Click .......................................... - 72 Promjene u proceduri cmdIzracunaj ..................................................... - 73 Unitavanje objekt varijabli Knjiga ...................................................... - 75 /HNFLMD'RGDYDQMHGRJDDMDSURMHNWX,YDPDU
VI
- 77 -
- 85 -
Svojstva objekta Tezina ........................................................................ - 85 .RGLUDQMHGRJDDMSURFHGXUH,QLWLDOL]HFODVVPRGXOD7H]LQD ............... - 86 Kreiranje svojstava class modula Tezina.............................................. - 87 Ugradnja objekta Tezina u program Ivamar ......................................... - 88 /HNFLMD.ROHNFLMD1DUXGED
- 90 -
Kreiranje class modula 'Narudzba'........................................................ - 90 Kreiranje varijabli Private u class modulu Narudzba ........................... - 91 .{GLUDQMHGRJDDMSURFHGXUD,QLWLDOL]HL7HUPLQDWH ............................. - 91 Kodiranje metoda class modula Narudzba ........................................... - 92 Analiza .................................................................................................. - 93 Kreiranje metode Item class modula Narudzba .................................... - 95 Kreiranje metode Remove class modula Narudzbenica ....................... - 95 Kreiranje metode Count class modula Narudzba.................................. - 96 Kreiranje metode NewEnum class modula Narudzbe .......................... - 96 Kreiranje metode Ukupno class modula Narudzba .............................. - 98 Promijenimo kd u sekciji General Declarations forme frmGlavniObrazac101 Promjene u proceduri Click kontrola check box chkFormatKnjige ... - 102 Promjene kda u proceduri Click kontrole lstKnjige ......................... - 104 Promjene u proceduri Click kontrole optKom.................................... - 105 Promjene u proceduri Form_QueryUnload......................................... - 106 Promjene u proceduri cmdPonisti_Click ............................................ - 107 Promjene kda procedure Click kontrole cmdIzracunaj..................... - 108 Analiza ................................................................................................ - 110 VII
- 111 -
Dodavanje referencije u Word Object Library.................................... - 112 Promjene kda metode Ukupno u kolekciji Narudzba ....................... - 113 Dodavanje svojstva Popust class modulu Narudzba .......................... - 116 Analiza................................................................................................ - 116 Ugradnja kontrole cmdKupujem na glavnu formu ............................. - 117 3URPMHQHXFPG,]UDFXQDMUDGLXNOMXHQMDYLGOMLYRVWLJXPEDFPG.XSXMHP117 U cmdPonisti sakrijmo gumb Kupujem ............................................. - 118 7LVNDQMHQDUXGEH............................................................................... - 118 Lekcija 14 ActiveX komponente Ivamar - Excel
- 129 -
Pravljenje ActiveX komponente od naeg class modula Tezina ........ - 129 Kreiranje projekta ActiveX.DLL ........................................................ - 131 Analiza................................................................................................ - 133 Novi projekt STANDARD.EXE i komponenta IvamarTezina.DLL.. - 133 Excel i naa komponenta ActiveX.DLL ............................................. - 137 Na kraju......................................................................................................... - 140 -
VIII
Internet
Programski kd projekta Ivamar napravljenog u knjizi Visual Basic 6
Ova knjiga je nastavak knjige Visual Basic 6. Svi koji su kupili prvu knjigu imaju
napravljenu aplikaciju Ivamar. Oni koji nisu kupili prvu knjigu mogu tu aplikaciju
VNLQXWLV,QWHUQHWDMHUHLPWUHEDWL]DUDGSRRYRMNQML]L
http://www.e92.hr/ivamar.htm
Na navedenoj URL moete skinuti ivamar.zip. Kad kopirate datoteku ivamar.zip
(35 kb) na svoje raunalo u njojete nai cijeli projekt Ivamar i sve potrebno za
njegov rad:
,YDPDU9LVXDO%DVLF3URMHFWQHNRPSDMOLUDQ0RHWHJDXLWDWLX9LVXDO
Basic i kopirati kd.
-DYD6FULSWMSJ9LVXDO%DVLFMSJ+70/MSJWULJUDILNHGDWRWHNHPRUDWH
pohraniti u mapu C:\Ivamar\.
,]YUQDLOLSURJUDPVNDGDWRWHNDLYDPDUH[H0RHWHMHSRKUDQLWLJGMHHOLWH
Zaporka za izlaz: 1234.
6YHJRUHQDYHGHQHGDWRWHNHRVLPLYDPDUH[HDPRHWHLQMXNRSLUDMWHXPDSX
NRMXVWHSUHWKRGQRNUHLUDOLLLMLMHSXW&?,YDPDUQDYDHPUDXQDOX
IX
U ovoj knjizi mijenjate Visual Basic Project Ivamar, napravljen u knjizi Visual
%DVLFWDNRWRHLVWLELWLREMHNWQLMLQHJRGRVDGD
Programski kd projekta Ivamar napravljenog u ovoj knjizi
&LMHOL9LVXDO%DVLFN{GSURMHNWD,YDPDUNUHLUDQRJXRYRMNQML]LHWHQDLQD
Internetu na URL:
http://www.e92.hr/ivamarobjektno.htm
XI
Lekcija 1
Classes
U knjizi Visual Basic 6 gradili smo aplikaciju Ivamar od "temelja
GRNURYDSRPRXNRQWUROD.RQWUROHVPRX]LPDOLV7RRO%R[D
to su kontrole?
.RQWUROHVXREMHNWLNRMLJUDGHVXHOMHQDHDSOLNDFLMH7RVXHOMHMH
:LQGRZVVXHOMH*GMHMHQDSLVDQN{GWLKNRQWUROD"
Kd kontrola koje vidimo na Tool Box-u je napisan u modulima
koje je Microsoft nazvao classes0LWHPRGXOHQHPRHPRYLGMHWL
SDLKQHPRHPRQLWLPLMHQMDWL
0HXWLPPLPRHPRQDSUDYLWLQDHFODVVHVPRGXOHNRPSDMOLUDWL
ih u ActiveX kontroleLXLQLWLLKYLGOMLYLPQD7RRO%R[XNDRWR
VPRWRXLQLOLVNRQWURORP&RPPRQ'LDORJXNQML]L9LVXDO%DVLF
6.
Tool Box
U prvoj knjizi o Visual Basicu koristili smo kontrole, mijenjali njihova svojstva,
NRGLUDOLQMLKRYHGRJDDMSURFHGXUH.RQWUROHVXJRWRYLXJUDHQLREMHNWLLMHVX
FODVVPRGXOHQDSUDYLOL0LFURVRIWRYLSURJUDPHUL8RYRMHPRNQML]LQDSUDYLWL
VYRMHREMHNWHRGQXOH3LVDWHPRQDHFODVVPRGXOH1DLPREMHNWLPDHPR
NUHLUDWLVYRMVWYDPHWRGHLGRJDDMHSUHPDSRWUHEL7HNHPRXRYRMNQML]L
upoznati pravu sliku objektno orijentiranog programiranja i njegove prednosti
SUHGNODVLQLPVWUXNWXUQLPSURJUDPLUDQMHP
HPXWRNDGQDDDSOLNDFLMD,YDPDULEH]WLKREMHNDWDGREURUDGL"=DWRHPR
SUDYLWLVYRMHREMHNWHLXJUDLYDWLLKX,YDPDU"
=DWRWRHVH]QDWQRSRMHGQRVWDYQLWLFLMHOLN{GSURMHNWD,YDPDURODNDWL
RGUDYDQMHLXQDSUHHQMHSURMHNWD7RHWHVYHPRLGRLYMHWLLQDQDHPSURMHNWX
,YDPDUNRMLMHWHNGMHOLYHOLNLKNRUSRUDFLMVNLKSURMHNDWD8YHOLNLPMHSURMHNWLPD
objektno orijentirano programiranjeGRQLMHORYHOLNHXWHGH1H]QDLWRXYLMHN
PDQMHNRGLUDQMDLDNRMHLWRMHGQRRGSRVWLJQXDSRVHEQRNRGYHOLNLKSURMHNDWD
2EMHNWQRRULMHQWLUDQRSURJUDPLUDQMHMHSULMHVYHJDXQLMHORYLHORJLNRJUHGDX
FMHORNXSQLN{G+LMHUDUKLMDREMHNDWDRPRJXDYDODNLGRKYDWVNXSLQHREMHNDWD
SUHNRQDGUHHQRJREMHNWD6GUXJHVWUDQHFMHORYLWRVWREMHNWDLILOR]RILMD
VYHVYRMH
QRVLPVDVRERP
RPRJXDYDHWDQMHREMHNDWDNDNRXQXWDUMHGQHDSOLNDFLMHWDNRL
L]PHXSRHOMLYLHDSOLNDFLMD
To je dovelo do eksplozije radnih mjesta na kojima se 'proizvode' objekti po
QDUXGEL1D]LYDMXVH$FWLYH;NRPSRQHQWH3RMDYRP,QWHUQHWDPQRJLVXQDL
programeri ostali u svom rodnom gradu i proizvode komponente za svjetsko
WULWHVRIWZDUHD
8RYRMNQML]LLPLHPRQDSUDYLWLVYRMH$FWLYH;NRPSRQHQWHLLVSUREDWLLKXUDGX
s Wordom, Excelom i naom Visual Basic aplikacijom.
Hijerarhija objekata
Visual Basic je hijerarhija objekata koja se najbolje vidi u dot notaciji. Postoje
XJUDHQLREMHNWLLRQLNRMHHPRPLQDSUDYLWL8JUDHQLREMHNWLVXQDSULPMHU
NRQWUROHLIRUPHDXRYRMNQML]LHPRQDSUDYLWLLVYRMHREMHNWH
6YDNLREMHNWLPDVYRMHPMHVWRXKLMHUDUKLML6YDNDIRUPDQDSULPMHUPRHLPDWL
YLHNRQWUROD2EMHNW
)RUP
MHQDGUHHQREMHNWLPDNRQWUROD6YDNDIRUPDLPD
VYRMHNRQWUROH,]PHXQMLKSRVWRMLMRMHGDQREMHNWControls. Svim formama u
MHGQRMDSOLNDFLMLMHQDGUHHQREMHNWForms.
Forms i ControlsVXXJUDHQLREMHNWLWLSDNROHNFLMH
Kolekcije
Collection (kolekcija) je objekt. Objekt tipa kolekcije ima jedno svojstvo
(property) imenovano s Count i tri metode: Add, Item i Remove. Visual Basic
DXWRPDWVNLQDNRQSRNUHWDQMDDSOLNDFLMHNUHLUDVSHFLILQHNROHNFLMHPHXNRMLPDL
)RUPVL&RQWUROV7HXJUDHQHNROHNFLMHVHQD]LYDMXkolekcije sustava.
8NQML]L9LVXDO%DVLFVPRUDGLOLVDUUD\LPDSDQDPVHQDPHHSLWDQMHXHPX
VHUD]OLNXMHNROHNFLMDRGDUUD\D5D]OLNDMHXVOMHGHHP
$UUD\QLMHREMHNWMHUQHPDQLWLMHGQRVYRMVWYRPHWRGXLOLGRJDDM7RMH
jedna struktura.
ODQRYLNROHNFLMHPRJXELWLUD]OLLWRJWLSD1DSULPMHUNROHNFLMD&RQWUROV
LPD]DODQRYHVYHNRQWUROHQDMHGQRMIRUPLFRPPDQGEXWWRQRSWLRQ
button itd.
$UUD\PRHVDGUDYDWLSRGDWNHLVWRJWLSD1DSULPMHUDUUD\VDPRRG
kontrola check box, samo od kontrola option button itd.
,NROHNFLMDLDUUD\EURMHVYRMHODQRYHRGQXOHDLQGHNVLUDQMHODQRYDWLP
EURMHYLPDMHMHGLQLQDLQGRKYDDQMDLVWLKXDUUD\X
8NROHNFLMLVYDNLODQLPDVYRM.H\MHGLQVWYHQLNOMX'RKYDDQMHODQRYD
SRPRXMHGLQVWYHQRJNOMXDMHPQRJREROMHUMHHQMHQHJRSRPRXEURMHYD
QDDGUHVHREMHNDWDODQRYDNROHNFLMH
3RND]LYD]DX]LPDVYHJDHWLULEDMWDELWDUDXQDOQHPHPRULMH5$0D
Primjer.
1. Pokrenite Visual Basic i otvorite novi projekt Standard.EXE.
2. Na Form1 ugradite po jednu kontrolu option button, check box, command
button i list box:
3. Pokrenimo projekt.
4. Pauzirajmo projekt.
5. U prozor Immediate tipkajmo ? Form1.Controls.Count i pritisnimo Enter:
'RELOLVPRUH]XOWDWMHUNROHNFLMD&RQWUROVVDGUL,WHPD3RMHGDQ,WHP
za svaku kontrolu na formi Form1.
6. Zaustavite Projekt1.
7. Obriite list box.
8. Pokrenite projekt.
9. Pauzirajte projekt.
10. 3RQRYLWHLVWLLVSLVXSUR]RUX,PPHGLDWHLGRELWHWHEURM
Svojstva svakog Item-a u kolekciji
6YDNL,WHPXNROHNFLMLLPDVYRMEURM%URMHYLSRLQMXVQXORPNDRNRGDUUD\D
1DSULPMHUHOLPR]QDWLVYRMVWYR1DPHSUYRJ,WHPDXNROHNFLML
Pokrenemo projekt, pauziramo projekt, u prozor Immediate napiemo
")RUP&RQWUROV1DPHLSULWLVQHPR(QWHU'RELWHPR
3URJUDPHUPRHVYRMLPN{GRPPLMHQMDWLVYRMVWYDNRQWUROD]DYULMHPHUDGD
aplikacije.
1DSULPMHU]DYULMHPHSDX]HWLSNDMWHVOMHGHLN{GXSUR]RU,PPHGLDWHLL]DVYDNRJ
retka pritisnite Enter:
3RNUHQLWHSURMHNWLNRQWUROHHLPDWLQRYHYULMHGQRVWLVYRMLKVYRMVWDYD&DSWLRQ
0RHPRVORERGQRUHLNDNRVXNROHNFLMHL]PLOMHQHUDGLSHWOMHFor...Each, koja
HRELLVYH,WHPHXNROHNFLML-HNROHNFLMDGRYROMQD]DSHWOMX"1LMH3RUHG
NROHNFLMHLQMHQLK,WHPD]DSHWOMX)RU(DFKMHSRWUHEQDMRLYDULMDEOD%XGXLGD
MHNROHNFLMDREMHNWQMHQLODQRYLVXREMHNWLSDVHLYDULMDEODQD]LYDobjekt
varijabla.
Objekt varijabla
'RNVWDQGDUGQDYDULMDEODVDGULQHNXYULMHGQRVWREMHNWYDULMDEODMHLVWRWRL,WHP
XNROHNFLML2EMHNWYDULMDEODQHVDGULNRQWUROXQHJRUHIHUHQFLMXNRMDSRND]XMHQD
tu kontrolu. U petlji For...Each objekt varijabla je jo udaljenija od objekta jer
5
SRND]XMHQD,WHPXNROHNFLMLD,WHPSRND]XMHQDREMHNW3RND]XMXLQD,WHPHX
NROHNFLMLREMHNWYDULMDEODHXSHWOML)RU(DFKSURLVYH,WHPH
Napravite novi projekt s ovim kontrolama:
HOLPRSURPLMHQLWLVYRMVWYR&DSWLRQVYLPNRQWURODPDQDIRUPL
1. U Click proceduru kontrole Command1 tipkajte ovaj kd:
Private Sub Command1_Click()
Dim objKartelo As Control
Dim intBrojac As Integer
For Each objKartelo In Form1.Controls
objKartelo.Caption = "Kontrola " & intBrojac
intBrojac = intBrojac + 1
Next
End Sub
2. Pokrenite projekt.
3. Pritisnite tipku mia na Comand1. Javlja se greka:
5. Program je pao unutar petlje. Zato? Kontrola Text Box nema svojstvo
Caption i program je stao.
6. Zaustavite projekt i ubacite ovaj kd:
Private Sub Command1_Click()
Dim objKartelo As Control
Dim intBrojac As Integer
For Each objKartelo In Form1.Controls
If TypeOf objKartelo Is CommandButton Or _
TypeOf objKartelo Is CheckBox Or _
7
Analiza
10
Lekcija 2
Primjer naeg
osobnog objekta
tipa kolekcije
1DSUDYLWHPRDSOLNDFLMXSRPRXNRMHHPRXVYDNRPWUHQXWNXPRLVD]QDWL
NROLNRVWUDQLFDLPDSRMHGLQDNQMLJDXQDRMQDNODGL7DNRHUHPRPRLVD]QDWLL
XNXSDQEURMVWUDQLFDVYLKNQMLJD]DMHGQR1DSUDYLWHPRREMHNWNROHNFLMXLGRGDWL
PXQDHNQMLJHWDNRWRHPRQDMSULMHSLVDWLEURMVWUDQLFDFUWLFDQDVORYNQMLJH
3LVDQMHEURMDQDSRHWNXQHNRJVWULQJDMHGREDUWULNNDGQDPWDMEURMWUHEDX
PDWHPDWLNLPRSHUDFLMDPD3RPRXIXQNFLMH9DO9LVXDO%DVLFHJDL]GYRMLWLRG
RVWDORJVWULQJDLNRULVWLWLNDREURMWDPRJGMHWRHOLPR
Deklariranje naeg objekta kolekcije
1. Pokrenite novi projekt s jednom formom i na njoj dvije kontrole command
button.
11
2. 8VHNFLMX*HQHUDO'HFODUDWLRQVWLSNDMWHVOMHGHLN{G
Option Explicit
Private m_colKnjige As New Collection
Analiza
'HNODULUDOLVPRREMHNW.QMLJHX*HQHUDO'HFODUDWLRQV]DWRWRHELWLGRKYDWOMLYL]
VYLKSURFHGXUDXIRUPLPRGXOX'RGDFLLVSUHGLPHQD.QMLJHPBFRO]QDHGDMH
objekt na razini modula (m), tip kolekcije (col). Ta 'predslova' ispred imena
REMHNWDVXUH]XOWDWGRJRYRUDPHXSURJUDPHULPD.{GWDNRSRVWDMHUD]XPOMLYLML
kako autoru, tako i nasljednicima. Nismo deklarirali tip objekta jer objekt
NROHNFLMDPRHSULPLWLUD]OLLWHWLSRYHSRGDWDND
Gornjom deklaracijom smo ugradili instancu objekta tip Collection. Instanca ima
VYHRVRELQHXJUDHQRJSUHGORNDXJUDHQRJFODVVPRGXODCollectionSRLMRM
'slici i prilici' je 'instancirana'.
.DRWRVPRNUHLUDOL)RUPQDRVQRYXXJUDHQRJFODVVPRGXODForm, kao to
VPRNUHLUDOLGYLMHNRQWUROHFRPPDQGEXWWRQQDRVQRYLXJUDHQRJFODVVPRGXOD
CommandButton, tako smo kreirali i objekt m_colKnjige na osnovi class modula
Collection.
Form1, Command1, Command2 i m_colKnjige su instance svojih class modula i
LPDMXRVRELQHWLKFODVVPRGXOD)RUP&RPPDQG&RPPDQGL]PHXRVWDORJ
SRVHEQLVXLSRWRPHWRVXYLGOMLYLLPDMXVYRMHSRMDYQHREOLNHXJUDILNRP
VXHOMXQDHJSURMHNWD7RQDREMHNWPBFRO.QMLJHQHPD1HVXGMHOXMHX
JUDILNRPVXHOMXQHJRVDPRXN{GXL]DVFHQH
12
Class modul Collection prenosi na instance svoje svojstvo Count i sve svoje
PHWRGHPHXNRMLPDMHLPHWRGD$GG8JUDHQDPHWRGDAddNRMDVOXL]D
GRGDYDQMH,WHPDNROHNFLMLSUHQLMHWDMHLXJUDHQDXQDXLQVWDQFXFODVVPRGXOD
Collection, u objekt m_colKnjige. Sintaksa kdiranja metode Add je:
Add (Item As Variant [, Key As String] [, Before As
Variant] [, After As Variant]
ODQNRMHJSUYRJGRGDWHNROHNFLMLLPDWHEURMLWDNRUHGRPLWG'RNMH
$UUD\ED]LUDQQDLWGNROHNFLMHSRLQMXV$NRHOLPRQHNL,WHPGRGDWL
SULMHLOLSRVOLMHQHNRJGUXJRJ,WHPDWDGHPRNRULVWLWLDUJXPHQWH%HIRUHL$IWHU
8QDHPVOXDMXVPRGRGDOLHVW,WHPDNROHNFLMLPBFRO.QMLJH3UYL,WHPMH
pohranjen pod brojem 1, a zadnji pod brojem 6.
6LQWDNVDN{GLUDQMDMHVOMHGHD1DMSULMHSLHPRLPHREMHNWDNROHNFLMH
PBFRO.QMLJHSDWRNXRYGMHVHWRNDQDHQJOHVNRPQH]RYH
SRLQW
QHJR
GRW
SD
se po tome ovakvo kdiranje naziva dot notacija). Sljedi razmaknica pa Item kojeg
HOLPRGRGDWL8QDHPVOXDMXMH,WHPVWULQJQDSULPMHU:RUGSD]DWRLGH
pod navodnicima.
,WHP:RUGHELWLSRKUDQMHQSRGEURMHP7RMHWDNRVQDLPREMHNWLPD
0HXWLPVYLXJUDHQLREMHNWLNROHNFLMHPHXNRMLPDVXLNROHNFLMH)RUPVL
&RQWUROVVXED]LUDQHQDQXOL7DUD]OLNDXEURMHQMX,WHPDL]PHXXJUDHQLKL
QDLKNROHNFLMDMHUDGLEU]RJL]ODHQMDQRYLKYHU]LMDSURJUDPD8JUDHQHNROHNFLMH
su postojale prije nego su uvedene osobne kolekcije i baziraju se na nuli od svog
nastanka. Poto je puno lake upravljati s brojenjem od 1, kod osobnih kolekcija
13
VHSUHORQDED]LUDQREURMHQMH8WRPVOXDMXHVYRMVWYR&RXQWL]EDFLWLXNXSDQ
EURM,WHPDXQDRMNROHNFLML.DGHOLPRVD]QDWLNROLNR,WHPDLPDXQHNRM
XJUDHQRMNROHNFLMLPRUDPRVYRMVWYR&RXQWXPDQMLWL]D&RXQW
m_colKnjige.Add "145-Word"
Gornji kd je dovoljan za dodavanje Item-a kolekciji. Mi smo imali ovaj kd:
m_colKnjige.Add "145-Word", "Word"
to je ono u nastavku? Ono u nastavku je opcijski argument Key. To je podatak
po kojem se pojedini Item razlikuje od svih ostalih Item-a u kolekciji. Njegova
uloga je ista onoj koju ima ID (identifikacijska oznaka) pojedinog zapisa u
bazama podataka.
1DPDHELWLSXQRODNHSR]YDWLQHNL,WHPSRQMHJRYRPDUJXPHQWX.H\QHJRSR
broju lake je pozvati knjigu Word po njenom naslovu Word nego po njenom
broju 1. Osim toga brojevi se stalno mijenjaju kako briemo i dodajemo nove
naslove u kolekciju, a Key je uvijek isti.
Provjerimo:
Pokrenite projekt, pritisnite Command1, pauzirajte i u prozoru immediate tipkajte:
? m_colKnjige(1)
Pritisnite Enter.
Ili
14
,PDPRREMHNWPBFRO.QMLJH3RPRXSHWOMH)RU(DFKHOLPRGRKYDWLWLVYDNRJ
ODQD,WHPNROHNFLMHUHGRPMHGQRJSRMHGQRJ=DWDMSRVDRMHXYMHNSRWUHEQR
GHNODULUDWLREMHNWYDULMDEOXWRVPRLXLQLOL
Dim objItem As Variant
2EMHNWYDULMDEOXVPRGHNODULUDOLJHQHULNLWLSRPQDMYLHUD]LQHYDULDQW
Ta varijabla je dalje koritena u For...Each petlji za dohvat svih Item-a:
Dim intBrojac As Integer
For Each objItem In m_colKnjige
intBrojac = intBrojac + Val(objItem)
Form1.Print objItem
Next
I na kraju smo iskoristili jedino svojstvo koje ima kolekcija svojstvo Count za
dohvat ukupnog broja stranica:
Form1.Print
Form1.Print "Ukupno stranica: " & intBrojac & _
" u " & m_colKnjige.Count & " knjiga."
15
Pokrenite projekt.
1DSUYLSRJOHG]QDDMQLMLKUD]OLNDL]PHXNROHNFLMDLDUUD\DNDRGDQHPD
0HXWLPNDGGXEOMHXHPRXREMHNWQRRULMHQWLUDQRSURJUDPLUDQMHUD]OLNHVX
ogromne. Jednostavno, array nije objekt a kolekcija jest i kao takva je
nezamjenjiva u objektno orijentiranom pristupu.
Jo neto o argumentu Key. Ukoliko bismo kolekciji dodali novi Item i zabunom
SLVDOL.H\NRMLYHSRVWRMLXNROHNFLMLNDGSRNUHQHPRSURJUDPLRGDEHUHPR
&RPPDQGGRELWHPRSRUXNX
Run-time error '457':
Thiskey is already associated with an element of this collection
'DNOHGRJDDVHLVWRWRLXED]DPDSRGDWDND6XVWDYQDVWLWLRGPRJXHJ
ponavljanja argumenta Key.
Argumenti Before i After
5. U Click proceduru kontrole Command1 dodajte kd u zasjenjenom retku:
Private Sub Command1_Click()
m_colKnjige.Add "145-Word", "Word"
m_colKnjige.Add "161-Excel", "Excel"
m_colKnjige.Add "272-Access", "Access"
16
%LORMHRYRN{GLUDQMHSRPRXDUJXPHQWD%HIRUH
7. =DXVWDYLWHSURMHNWLN{GLUDMWHSRPRXDUJXPHQWD$IWHUNRULVWHLEURM
Itema-a:
Private Sub Command1_Click()
m_colKnjige.Add "145-Word", "Word"
m_colKnjige.Add "161-Excel", "Excel"
m_colKnjige.Add "272-Access", "Access"
m_colKnjige.Add "184-FronPage", "FrontPage"
m_colKnjige.Add "234-Internet", "Internet"
m_colKnjige.Add "108-C", "C"
m_colKnjige.Add "61-WEB KREATOR", "Web kreator", , 1
17
End Sub
8. Pokrenite projekt, odaberite gumb Command1 pa Command2:
%LORMHRYRN{GLUDQMHSRPRXDUJXPHQWD$IWHU
8NODQMDQMH,WHPDL]NROHNFLMHSRPRXPHWRGH5HPRYH
9. U proceduru Click kontrole Command1 tipkajte kd u zasjenjenom retku:
Private Sub Command1_Click()
m_colKnjige.Add "145-Word", "Word"
m_colKnjige.Add "161-Excel", "Excel"
m_colKnjige.Add "272-Access", "Access"
m_colKnjige.Add "184-FronPage", "FrontPage"
m_colKnjige.Add "234-Internet", "Internet"
m_colKnjige.Add "108-C", "C"
m_colKnjige.Add "61-WEB KREATOR", "Web kreator", , 1
m_colKnjige.Remove 2
End Sub
10. Pokrenite projekt, odaberite gumb Command1 pa Command2:
18
11. Nema knjige WEB KREATOR koja se pojavljivala na poziciji Item-a broj
2.
Analiza
1DOLVWLVXHWULPHWRGHREMHNWDNRQWUROHDUUD\0HWRGH&RXQWL,WHPVX
jednake metodama Count i Item u svakoj kolekciji.
5. Nastavimo tipkati: ? Check1.Count i Enter:
20
'DNOHNRQWUROD$UUD\MHWDNRHUMHGQDYUVWDREMHNWDNROHNFLMHLWRXJUDHQRJ
objekta kolekcije array.
21
Lekcija 3
Objekt Global
1DVDPRPYUKXKLMHUDUKLMHXJUDHQLKVXVWDYQLKREMHNDWDX9LVXDO%DVLFXMHREMHNW
*OREDO6YRMVWYDWRJREMHNWDNDRLVYDNRJGUXJRJDPRHPRYLGMHWLXGLMDORJX
Object Browser.
1. Kreirajte novi projekt Standard.EXE.
2. View/Object Browser.
3. Tipkajte globalXSROMHWUDLWHOMDLSULWLVQLWH(QWHU
22
LRWYRULWHVHOLVWDELEOLRWHNDNRMHLPDVYDNL9LVXDO%DVLF
to su to biblioteke ili 'libraries'?
Biblioteke su svi class moduli koje su micrososftovi programeri ugradili u
9LVXDO%DVLFLQDNRMLPDSRLYDMXVYLXJUDHQLREMHNWLRGQDMYLHJ*OREDO
GRQDMQLHJ
6YHRSFLMHSURJUDPD9LVXDO%DVLFLPDMXHWLULRVQRYQHELEOLRWHNHVWGROH
Vb, VBA i VBRUN.
23
8NRGLUDQMXQDHJSURMHNWD,YDPDUVXVUHVWHPRVHVPQRJLPXJUDHQLP
REMHNWLPDDSUDYLWHPRLVYRMHREMHNWH
24
Lekcija 4
Rad na projektu
Ivamar kolekcije
Ugradimo kolekcije umjesto array-a
Najprije izmijenimo izgled dokumenta cjenik.txt
1. Otvorite cjenik.txt.
2. Ta datoteka trenutno izgleda ovako:
3. .DNRELVHRYDGDWRWHNDODNHXLWDODXNROHNFLMXSRQRYQRMHSDOMLYR
tipkajte u ovakav oblik:
25
4. 3RKUDQLWHFMHQLNW[WSRPRXQDUHGEH)LOH6DYH
2YDNRQDSLVDQFMHQLNVDGULVYHREMHNWHX]DVHEQLPUHGFLPD-HGDQUHGDN
jedan objekt.
8LWDMPRFMHQLNW[WXREMHNWWLSDNROHNFLMH
1. Otvorite projekt Ivamar.
2. Promijenite kd u sekciji General Declaration ovako:
Option Explicit
Private m_intKom As Integer
Private m_lngBojaPozadine As Long
Private m_blnPrikazDatuma As Boolean
Private m_colCijenaFormata As New Collection
3. Gornji zasjenjeni redak je novonapisani redak. Taj je redak zamijenio
VOMHGHHUHWNHNRMHVWHREULVDOL
Private m_curCijenaCourseware() As Integer
Private m_curCijenaElearning() As Integer
Private m_curCijenaCdRom() As Integer
Private m_curCijenaPapir() As Integer
Private m_curCijenaSve() As Integer
26
5. ...odaberite CitajCjenik.
6. Unesite promjene u kdu kao u dolje zasjenjenim redcima:
Public Sub CitajCjenik()
On Error GoTo JaSeMoguNositiSOvim
Dim strProvjera As String
Dim strKnjige As String
Dim strResurs As String
Dim curCijena As Currency
Open "C:\Ivamar\cjenik.txt" For Input As #1
Do While Not EOF(1)
Input #1, strKnjige, strResurs, curCijena
m_colCijenaFormata.Add Item:=curCijena,
_
Key:=strKnjige & strResurs
If strKnjige <> strProvjera Then
lstKnjige.AddItem strKnjige
strProvjera = strKnjige
End If
Loop
7. Sada promijenite kd u proceduri cmdIzracunaj_Click():
Private Sub cmdIzracunaj_Click()
'Deklariram varijable
Dim curIznos As Currency
Dim curCijenaCourseware As Currency
Dim curCijenaElearning As Currency
Dim curCijenaCdRom As Currency
27
curCijenaElearning
Else
'Zbrojimo cijene i pomnozimo s kolicinom
'i dobit cemo ukupan iznos narudzbe
curIznos = (((curCijenaCourseware +
curCijenaCdRom _
+ curCijenaPapir) * m_intKom) +
curCijenaElearning)
End If
'Ako je iznos veci od nula, prikazi cijenu i
'ucini label vidljivim
If curIznos > 0 Then
lblCijena.Caption = "Ukupan iznos je " & _
Format(curIznos, "###,###.00")
lblCijena.Visible = True
End If
End Sub
8. Pohranite Ivamar i provjerite kako radi. Radi kao to je i radio!
Analiza
6DGDHPRUHGRPDQDOL]LUDWLVYHSURPMHQHXN{GX3RHOLVPRRGVHNFLMH*HQHUDO
Declarations. Deklarirali smo objekt kolekciju:
Private m_colCijenaFormata As New Collection
2YDNROHNFLMDHSRKUDQLWLVYHFLMHQHIRUPDWDNQMLJD.ROHNFLMXVPRGHNODULUDOLX
VHNFLML*HQHUDO'HFODUDWLRQVMHUHPRMHGRKYDDWLVUD]QLKPMHVWDXDSOLNDFLML
Nakon deklaracije objekta kolekcije, promijenili smo kd subprocedure
&LWDM&MHQLN7DVHVXESURFHGXUDSR]LYDQDNRQXLWDYDQMDIRUPH2QDLWDFLMHQHL]
datoteke cjenik.txt, popunjava list box lstKnjige i cijene stavlja na raspolaganje
svim ostalim mjestima u aplikaciji Ivamar.
%XGXLGDMHVDGUDMGDWRWHNHFMHQLNW[WSUHREOLNRYDQVXESURFHGXULVPR
SURPLMHQLOLLQSXWXOD]QHQDUHGEH9LHQHPDWULUHWNDLHVWVWXSDFD]DXLWDYDQMH
nego 15 redaka i tri stupca. Svaki format knjige ima svoj redak. Svaki redak ima
definirano ime knjige u prvom stupcu slijeva, naziv formata u drugom stupcu i
30
FLMHQXXWUHHPVWXSFX=DWRQDN{GQDNRQRWYDUDQMDGDWRWHNHFMHQLNW[WWUHED
VDPRWULYDULMDEOHNRMLPDHVHSULGRGDYDWLYULMHGQRVWLWULMXVWXSDFD
Input #1, strKnjige, strResurs, curCijena
7RQHELIXQNFLRQLUDORGDQLVPRVWDYLOL]DUH]HL]PHXSROMDXGDWRWHFLFMHQLNW[W
6OMHGHLUHGDNXSHWOML'R:KLOH1RWL]YUDYD$GGPHWRGXNROHNFLMH
m_colCijenaFormata.Add Item:=curCijena,
_
Key:=strKnjige & strResurs
Ovdje smo koristili nazive argumenata i tako eksplicitno definirali argumente
kolekcije Item i Key. Argumentu Item smo dodijelili cijene, a argumentu Key smo
dodijelili "zbroj" (concatenate) stringova strKnjige & strResurs, tj. naslov knjige i
QD]LYIRUPDWD7DNRHPRSRPRXMHGLQVWYHQRJNOMXDXNROHNFLMLQDSULPMHU
"JavaScript Papir", u svakom trenutku saznati cijenu. Dokaz:
1. Pokrenite Ivamar.
2. Pauzirajte Ivamar.
+70/&RXUVHZDUH"2YHVORHQLFHVXXSUDYRDUJXPHQWL.H\XNROHNFLML
PBFRO&LMHQD)RUPDWD,]MHGQDLPRYDULMDEOXFXU&LMHQD&RXUVHZDUHVNROHNFLMRP
PBFRO&LMHQD)RUPDWDLDUJXPHQWRP.H\X]DJUDGL%XGXLGDMH.H\VORHQLFDRG
QDVORYDNQMLJHLQD]LYDIRUPDWDSRVOXLOLVPRVHVYRMVWYRP7H[WOLVWER[D
OVW.QMLJH6YRMVWYR7H[WNRQWUROHOVW.QMLJHVDGULQDVORYHNQMLJDSDMHWRMHGDQ
pribrojnik u zbroju (lstKnjige.Text & "Courseware"), a drugi je pribrojnik naziv
formata Courseware. Naziv formata je string i ide pod navodnicima.
curCijenaCourseware =
m_colCijenaFormata(lstKnjige.Text & "Courseware") * _
chkFormatKnjige(0).Value
1DLVWLQDLQGROD]LPRGRFLMHQDRVWDOLK.QMLJD)RUPDWD
curCijenaElearning =
m_colCijenaFormata(lstKnjige.Text & "E-learning") * _
chkFormatKnjige(1).Value
curCijenaCdRom = m_colCijenaFormata(lstKnjige.Text
& "CD-ROM") * _
chkFormatKnjige(2).Value
curCijenaPapir = m_colCijenaFormata(lstKnjige.Text
& "Papir") * _
chkFormatKnjige(3).Value
curCijenaSve = m_colCijenaFormata(lstKnjige.Text &
"Komplet")
Ostatak kda u ovoj subproceduri nije promijenjen.
Izmjene kda u subproceduri cmdPonisti_Click()XYRHQMHP
objekt varijabli
3RPRXJXPEDFPG3RQLVWLSRQLWDYDPRRGDELUIRUPDWDLNROLLQH)RUPDWLVX
DUUD\NRQWUROD&KHFN%R[DNROLLQDMHDUUD\NRQWUROD2SWLRQ%XWWRQ
0DQLSXODFLMXVRYLPDUUD\LPDHPRSRMHGQRVWDYQLWLSRPRXREMHNWYDULMDEOL
3URJUDPHEUHUDGLWL
1. Otvorite projekt Ivamar.
2. 8VXESURFHGXULFPG3RQLVWLB&OLFNQDSUDYLWHVOMHGHHL]PMHQH
33
Umjesto "listanja" kroz strukturu array-a, deklarirali smo dvije objekt varijable:
Dim chkObjekt As CheckBox
Dim optObjekt As OptionButton
3UYXREMHNWYDULMDEOXVPRGHNODULUDOLNDRWLS&KHFN%R[MHUHUHIHUHQFLUDWL
kontrole Check Box u array-u chkFormatKnjige.
'UXJXREMHNWYDULMDEOXVPRGHNODULUDOLNDRWLS2SWLRQ%XWWRQMHUHUHIHUHQFLUDWL
kontrole Option Button u array-u optKom.
3RPRXSHWOML)RU(DFK1H[W
For Each chkObjekt In chkFormatKnjige
chkObjekt.Value = 0
Next
34
35
Lekcija 5 Ivamar
i objekt App
Rad na projektu Ivamar
6SULMHLPRSRNUHWDQMHGYDSURJUDPD,YDPDUH[H
1. Otvorite projekt Ivamar.
2. 1DSUDYLWHVOMHGHHSURPMHQHXN{GXSURFHGXUH)RUPB/RDG
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "Aplikacija Ivamar je vec pokrenuta i
radi."
Unload Me
Exit Sub
End If
Call CitajRegistry
Call CitajCjenik
If m_blnPrikazDatuma Then
Call mnuDatumIVrijemeUkljuci_Click
Else
Call mnuDatumIVrijemeIskljuci_Click
End If
frmGlavniObrazac.BackColor = m_lngBojaPozadine
Open "C:\Ivamar\cjenik.txt" For Input As #1
End Sub
36
3. Pohranite Ivamar.
4. Ako vaa verzija Visual Basica ima naredbu File/Make Ivamar.exe,
odaberite tu naredbu i napravite programsku datoteku Ivamar.exe i
pohranite je u mapu C:\Ivamar.
5. Otvorite Windows Explorer i pokrenite program Ivamar s dva pritiska
tipke mia na datoteku C:\Ivamar\Ivamar.exe.
6. 3RQRYLWHNRUDNLGRELWHWHREDYLMHVW$SOLNDFLMD,YDPDUMHYH
pokrenuta i radi.
Ukoliko radite na Working Model Edition Visual Basic koji nema naredbu Make
H[HXYLMHNPRHWHRYRLVSUREDWLVPRMRPL]YUQRPGDWRWHNRP,YDPDUH[H
napravljenoj po knjizi Visual Basic 6, koju ste skinuli s Web-a.
,GRNMH]DWXL]YUQXGDWRWHNXLVYHSULSDGDMXHGDWRWHNHFMHQLNLGUELORYDQR
GRVOMHGQRVHGUDWLORNDFLMH&?,YDPDUXVNRURHPRQDXLWLNRGLUDWLSUHPRWHQMH
takve obveze.
Analiza
8VWUXNWXUL,)7+(1SURYMHUDYDPRGDOLDSOLNDFLMDYHUDGL7RSURYMHUDYDPR
SRPRXVYRMVWYD3UHY,QVWDQFHNRMHLPDREMHNW$SS
If App.PrevInstance = True Then
$NRMHJRUQMDWYUGQMDLVWLQLWDWDGDHVHL]YULWLVOMHGHH
MsgBox "Aplikacija Ivamar je vec pokrenuta i
radi."
3RVODWHVHSRUXND$SOLNDFLMD,YDPDUMHYHSRNUHQXWDLUDGL6OLMHGLQDUHGED
RVOREDDQMDPHPRULMHRGJODYQHIRUPH
Unload Me
,VDGDVOLMHGLQHWRQHRELQRDOLMHWDNR,DNRMHQDUHHQRGDIRUPDQDSXVWL
memoriju, ukoliko u kdu koji slijedi nakon End If postoji naredba povezana s
QHNLPVYRMVWYRPIRUPHIRUPDHVHSRQRYRXLWDWL8QDHPVOXDMXSRVWRML
QDUHGED]DVYRMVWYR%DFN&RORULGRLHGRSRQRYQRJXLWDYDQMDIRUPH2QGD
slijedi ponovo provjera i zatvaranje forme, pa opet otvaranje i tako ukrug.
Da se to ne bi dogodilo, moramo pisati naredbu...
Exit Sub
NRMRPVSUHDYDPRVYDNRGDOMQMHL]YUDYDQMHN{GD7HNQDNRQWHQDUHGEHVOLMHGL
zatvaranje strukture If:
End If
37
Ivamar iz te nove mape Kartelo i pokrenite program. Sve radi kao i prije.
Kada program zatvarate naredbom Program/Izlaz, zaporka je 1234.
6. Vratite datoteke tamo gdje su prije bile u C:\Ivamar.
Analiza
39
Lekcija 6 Ivamar
i Kolekcija
Printers
Objekt Global ima svojstva Printer i Printers. Svojstvo Printer jest objekt koji
SUHGVWDYOMDGHIDXOWSLVDDVYRMVWYR3ULQWHUVMHNROHNFLMDNRMDVDGULSRGDWNH
,WHPRVYLPSLVDLPDNRMLVXXJUDHQLQDUDXQDOX
$NRRWYRULWH9LHZ2EMHFW%URZVHUSDXSROMH]DWUDHQMHXSLHWHJOREDOL
SULWLVQHWH(QWHUXSROMX0HPEHUVRI
*OREDO
GRELWHWHVYDVYRMVWYDLPHWRGHNRMH
ima objekt Global. U popisu vidimo i svojstva Printer i Printers.
40
'RNVYRMVWYR3ULQWHUNRULVWLPRNDGDL]QDHDSOLNDFLMHHOLPRWLVNDWLQDGHIDXOW
SLVDNROHNFLMX3ULQWHUVNRULVWLPRNDGDHOLPRWLVNDWLQDQHNLGUXJLSLVDXNROLNR
ih ima vie.
Primjer 1. kolekcije Printers:
Private Sub Command1_Click()
Dim objPisac As Printer
For Each objPisac In Printers
Form1.Print objPisac.DeviceName
Next
41
End Sub
.DGDSRNUHQHPRRYDMSURMHNWLSULWLVQHPRJXPE&RPPDQGGRELWHPRLVSLV
VYLKSLVDDSULMDYOMHQLKQDHPUDXQDOX
43
Lekcija 7 Ivamar
i osobna
svojstva forme
Kreiranje novog svojstva forme u projektu Ivamar
1. Otvorite Ivamar.
2. Unesite promjene u sekciji General Declarations, kao to je zasjenjeno u
VOMHGHHPN{GX
Option Explicit
Public Kom As Integer
Private m_lngBojaPozadine As Long
Private m_blnPrikazDatuma As Boolean
Private m_colCijenaFormata As New Collection
3. =DWLPQDSUDYLWHVOMHGHHSURPMHQHXVXESURFHGXULRSW.RPB&OLFN
Private Sub optKom_Click(Index As Integer)
frmGlavniObrazac.Kom = Index
End Sub
4. Napravite promjene kao to su ove u zasjenjenim redcima u subproceduri
cmdIzracunaj_Click:
'Kad korisnik odabere E-learning
'upozorimo ga da uvijek ide samo jedan
'bez obzira odabere li kupac jedan ili dva kompleta
'formata knjige
44
If chkFormatKnjige(1).Value = 1 And
frmGlavniObrazac.Kom > 1 Then
MsgBox "Kupovina je ogranicena na 1 e-learning po "
& _
"narudzbi." & vbCrLf & _
"Cijena je tome prilagodjena"
End If
...
...
'Kad kupac odabere sve formate jednog naslova,
obavijestimo ga o popustu
If chkFormatKnjige(0).Value = 1 And _
chkFormatKnjige(2).Value = 1 And _
chkFormatKnjige(3).Value = 1 Then
MsgBox "Iznos ukljucuje popust za kupovinu
kompleta"
curIznos = (curCijenaSve *
frmGlavniObrazac.Kom) + _
curCijenaElearning
Else
'Zbrojimo cijene i pomnozimo s kolicinom
'i dobit cemo ukupan iznos narudzbe
curIznos = (((curCijenaCourseware +
curCijenaCdRom _
+ curCijenaPapir) * frmGlavniObrazac.Kom) +
curCijenaElearning)
End If
...
...
5. Pohranite promjene.
6. Pokrenite program.
7. ,]DLWHL]SURJUDPDSRPRXQDUHGEH3URJUDP,]OD]]DSRUND
45
Analiza
Ovdje smo integer varijablu m_intKom zamijenili svojstvom forme Kom. Novo
VYRMVWYRSRQDRMHOMLGRGDMHVHIRUPLXVHNFLML*HQHUDO'HFODUDWLRQRYDNYRP
deklaracijom:
Public Kom As Integer
.OMXQDULMHNRMDGHILQLUD.RPNDRVYRMVWYRIRUPHMHVW
3XEOLF
1DNRQRYH
GHNODUDFLMHVYDNLSXWNDGDEXGHPRWLSNDOLIUP*ODYQL2EUD]DFLSULWLVQXOLWRNX
GRWQRWDFLMDSRMDYLWHVHSDGDMXLL]ERUQLNVSRSLVRPVYLKVYRMVWDYDPHWRGDL
GRJDDMDREMHNWDIUP*ODYQL2EUD]DF8WRPSRSLVXHRGVDGDELWLLVYRMVWYR.RP
7HUPLQRORJLMD9LVXDO%DVLFDVYHWRMHXSRSLVXQD]LYDMRL
PHPEHUV
ODQRYL
6YDNLREMHNWLPDVYRMHODQRYH7NRVXWLODQRYL"7RVXVYRMVWYDPHWRGHL
GRJDDML
Sva druga mjesta u kdu projekta, na kojima se pojavljivala varijabla m_intKom,
PRUDPRSURQDLLWXYDULMDEOX]DPLMHQLWLVD.RPVYRMVWYRPIRUPH
Najzanimljiviji je ovaj kd:
frmGlavniObrazac.Kom = Index
6YRMVWYR.RPIRUPHVPRL]MHGQDLOLVWXLPVYRMVWYRP,QGH[7RVPRLSULMH
XLQLOLVYDULMDEORP6YRMVWYR.RPLYDULMDEODPBLQW.RP]DX]LPDMXMHGQDNR
mjesta u memoriji. I Kom i m_intKom su SRND]LYDLQDWXHVYRMVWYR,QGH[LVWRJ
VXWLSDLQWHJHUL]DX]LPDMXNDRLVYLSRND]LYDLWHNEDMWDLOLELWDPHPRULMH
3URJUDPQHHUDGLWLEUHQLVPRXWHGLMHOLQDUHVXUVLPDQLWLXNROLLQLN{GD
8HPXMHRQGDSUHGQRVWsvojstva koje uvijek pripada nekom objektu, u ovom
VOXDMXIRUPLXRGQRVXQDvarijablu koja nikom ne pripada, osim to ima svoje
SRGUXMHGMHORYDQMD"
Programeru je olakan posao jer se lake snalazi za vrijeme izrade programa, za
YULMHPHL]PMHQDQDSURJUDPXL]DYULMHPHGXJRJRGLQMHJRGUDYDQMDL
XQDSUHLYDQMDSURJUDPD1RYLHSURJUDPHUWUHEDWLPQRJRPDQMHYUHPHQD]D
upoznavanje programa.
Zato?
1HREMHNWQRSURJUDPLUDQMHSRVWDYOMDXVUHGLWH]DGDWDN3URJUDPHUSLWDQDUXLWHOMD
.RMHSRVORYHHYDSURJUDPUDGLWL",RQGDVH]DGDFLQLXKLMHUDUKLMVNL2G
JODYQRJLQDMRSHQLWLMHJ]DGDWNDSUHPDQDMVLWQLMLP&LMHOLSURJUDPMHKLMHUDUKLMD
zadataka, ali kada imate milijun zadataka u jednom programu, onda je to anarhija
XNRMRMVHLDXWRUQDNRQQHNRJYUHPHQDWHNRVQDOD]L=DWDNYHSURJUDPHPRHPR
UHLGDVX]DGDQRFHQWULUDQL
46
$XWRUSURJUDPDLYLXREMHNWQRPVYLMHWX2EMHNWLVXXVUHGLWX=DGDFLVXWHN
SRVORYLNRMLSULSDGDMXREMHNWX2EMHNWLPRJXLYMHWLVDPRVWDOQREH]]DGDWDNDDOL
]DGDFLQHSRVWRMHEH]REMHNWD6YLMHWXNRMHPLYLPRMHREMHNWQRFHQWULUDQ
Vratimo se naem primjeru.
FormaMHREMHNWNRMHJPRHPRXVSRUHGLWLVYODVQLNRPSRVORYQRJSURVWRUD
.RQNUHWQRXQDHPVOXDMXVYODVQLNRPWUJRYLQH8WUJRYLQLVHQDOD]HREMHNWLD
na formi se nalaze objekti kontrole. U trgovinu ulaze kupci i obavjetavaju
YODVQLNDRNROLLQLNRMXHOHNXSLWL8WRPWUHQXWNXWDNROLLQDVWRMLJGMHMHVW,]
XVWDNXSFDL]OD]HULMHLQDSULPMHUGYDLXOD]HXXKRSDXPR]DNYODVQLND7R
QDWRVHRGQRVLGYDMRMHXYLMHNQHSRPLQRXVNODGLWX.XSDFMHPRJDR
SRGLJQXWLGYDSUVWDLYODVQLNELSUHNRRLMXLVYRJPR]JDLPDRLQIRUPDFLMXGYD
9ODVQLNXMH]DWRWRLPDRVRELQXVOXKD9ODVQLNYLGL]DWRWRLPDRVRELQXYLGD
U programerskom svijetu osobine sluha i vida zvali bi SRND]LYDLPD A mogli su
ih isto tako zvati i osjetilimaWRYLHNDGDVDPUDGLRQDRGUDYDQMXLQGXVWULMVNLK
SRVWURMHQMDSRND]LYDHVPR]YDOLVHQ]RULPDWRXSULMHYRGXL]QDLRVMHWLOLPD
%LOLVXWRVWUXMQLSUHNLGDLDVWUXMDMHPRJODELWL]UDQDHOHNWULQDKLGUDXOLQD
svjetlosna itd.) koji bi na dodir pokretnog dijela stroja promijenili svoje stanje, pa
ELVWUXMDSUHVWDODLOLSRHODWHL7DMHSURPMHQDVWDQMDVWUXMHELODSRND]LYD
VOMHGHHPXUHDMXLWG
Vlasnika i trgovinu zvali bismo objektom forma. Kupac bi igrao ulogu kontrole
2SWLRQ%XWWRQ)RUPLVPRXJUDGLOLVYRMVWYRRVRELQX.RPSRPRXNRMHH
"vidjeti" stanje kontroliranog svojstva Index.
Svojstvo Index je uvijek na istom mjestu u memoriji. To je svojstvo "zapakirano"
XREMHNWNRMHPXSULSDGDLQHRGYDMDVHRGVYRJREMHNWDQLWLVHNRSLUDXPQRDYD
QDGUXJDPMHVWD2QRQHHWDHWDMXVDPRSRJOHGLLOLSRND]LYDLSRLQWHULNRML
ne troe toliko memoriju. Objekt kontrola Option Button ima svojstvo Index i
doputa svim drugim objektima da "vide" to njegovo svojstvo Index.
$NRWLGUXJLREMHNWLQHPDMXRVMHWLORSRND]LYD]DYLGMHWL,QGH[WRQLMHQMLKRY
SUREOHP$NRLPWRRVMHWLORWUHEDXJUDGLWHLPJDSURJUDPHU
A kada programer ugradi osjetilo objektu, to je osjetilo zauzelo 8 bajta (32 bita)
PHPRULMHQDQHNRMPHPRULMVNRMDGUHVLLQLWDQHRVMHD8JUDGQMDMHREDYOMHQD
SRSUDYLOXDRYGMHRQRJODVLIRUPLHWHGRGDWLRVRELQXSURSHUWLHVWDNRWRHWH
u sekciju General Declaration napisati kd: Public razmaknica ime osobine
razmaknica As razmaknica tip osobine.
Public Kom As Integer
.DGDVPRYHWROLNRQD]LYDGDOLRVRELQLGDMPRMRMLQD]LYSULMDPQLN6DGDMH
SRWUHEQRSRYXLLFXGRRGDLOMDD.DNRWRLQLPR"WRHOLPRSULPLWLRYLP
47
SULMDPQLNRP"HOLPRSULPLWLVLJQDORGVYRMVWYD,QGH[LMHMHVYRMVWYR,QGH["2G
kontrole Option Button. Kontrola Option Button ima vie i sve se nalaze u array-u
optKom.
3URJUDPHURGOD]LGRDUUD\DRSW.RPLVSDMDVHSRPRXN{GDXRQRP
zasjenjenom retku:
Private Sub optKom_Click(Index As Integer)
frmGlavniObrazac.Kom = Index
End Sub
Evo nas ponovo kod najzanimljivijeg dijela kda:
frmGlavniObrazac.Kom = Index
frmGlavniObrazac.KomMHVYRMVWYR.RP=DKYDOMXMXL'RWQRWDFLMLVYHVH
]QDLQLWNRYLHXFLMHORMDSOLNDFLMLQHPDWDNYRLPH0RHVH]YDWL.RPDOLFLMHOL
MHQD]LYVSULSDGDMXLPREMHNWRPMHGLQVWYHQ2EMHNWIRUPDLMHMHLPH
frmGlavniObrazac ima svojstvo Kom. Sintaksa je: ime objektaWRNDNRMDVH
ovdje naziva Dot) ime svojstva.
WRVHGRJDDQDNRQJRUQMHJN{GDXNRMHPXVXGYDVYRMVWYDSRYH]DQD]QDNRP
jednakosti? Svako svojstvo, Kom i svojstvo Index, imaju svoje mjesto u memoriji.
1DWLPPMHVWLPDSRVWRMHQHNLVDGUDMLQHNHYULMHGQRVWL9DOXH6YDNRVYRMVWYRVH
GULVYRJYODVQLNDREMHNWDLQLNDGJDQHQDSXWD'DOLVDGDNDGDVXVSRMHQD
(znakom jednakosti) mjesta (adrese) u memoriji, vrijedi "zakon spojenih posuda"?
Ako je epruveta na adresi Index bila nalivena do razine 100, a epruveta na adresi
.RPGRUD]LQHKRHOLVHQDNRQRYHMHGQDGEHUD]LQHL]MHGQDLWLSDHL.RP
GRELWLUD]LQX"1HH$NRDGUHVD,QGH[VDGULYULMHGQRVWGDOLHVDGDL
DGUHVD.RPVDGUDYDWLYULMHGQRVW1HH
$GUHVHXPHPRULMLLPDMXVYDNDVYRMHVDGUDMHLGDOMH6DGUDMDGUHVH,QGH[VHQH
NRSLUDQLWLSUHPMHWDXDGUHVX.RP.RPMHRNRSRPRXNRMHJDIRUPDYLGL
VDGUDM,QGH[D=DUWRQLMHGRYROMQR".DGDPLQHWRYLGLPRRQGDVHWRQLMHIL]LNL
SUHPMHVWLORXQDXJODYX8QDRMJODYLMHVOLNDWRJDWRYLGLPR,GRNPLPRHPR
vidjeti cijeli grad ako smo dovoljno visoko, slika toga grada u naem mozgu
]DX]LPDWHNMHGQXPROHNXOXDPRGDQLWLMHGQXDNRXWRPWUHQXWNXPLVOLPRQD
QHWRGUXJRSDVOLNHJUDGDQLVPRQLWLVYMHVQL.RQWDNWSRVWRMLLDNRHOLPR
PRHPRVYRMHPLVOLXVPMHULWLQDVOLNXJUDGD
$RQGDQDLXREODFLLJUDGVHQHYLGL6DPRVHXMHEXNDJUDGD7RELVWDQMH
]QDLORGDREMHNWJUDGQHPDVYRMVWYRVOLNDQHJRVDPRVYRMVWYREXND8]DOXG
MHWRPLLPDPRVYRMVWYRRLNDGDJUDGQHPDVYRMVWYRVOLND8QDHPHVH
programu to dogoditi ako obriemo redak...
48
frmGlavniObrazac.Kom = Index
WRPLQDUDYQRQHHPRXLQLWL
Idemo dalje!
Obavijest o stanju na gore spomenutoj adresi Index potrebna je jo nekim
objektima i mjestima na formi. U stvari, forma je vlasnik ili rukovoditelj kojem
osobno i ne treba taj podatak o stanju svojstva Index.
7DMSRGDWDNWUHEDGMHODWQLNXNRMLVMHGL]DEODJDMQRPLNRMLHL]UDXQDWLXNXSQX
cijenu, te dati popust i sl.
Na naoj formi je uloga blagajnika pripala kontroli cmdIzracunaj.
Tko govori kontroli cmdIzracunaj kakvo je stanje na memorijskoj adresi Index?
'DOLGLUHNWQRNRQWUROD2SWLRQ%XWWRQLMHMH,QGH[VYRMVWYR"1H2EMHNWL
cmdIzracunaj i Option Button ne komuniciraju izravno, nego preko svog
QDGUHHQRJUXNRYRGLWHOMDIRUPHIUP*ODYQL2EUD]DF
Na svim mjestima u proceduri cmdIzracunaj (konkretno na tri mjesta), gdje je
SRWUHEDQSRGDWDNWRQRJEURMDVDGUHVH,QGH[SURJUDPHUMHXJUDGLRSULMDPQLN
VOLNHVHQ]RURVMHWLORSRND]LYDSRLQWHUfrmGlavniObrazac.Kom , a nije
GRYHRLOLNRSLUDRIL]LNLWDMWRQLEURMQDVYDWDPMHVWD
(YHVOLNRYLWRJSULND]DJRUQMHJREMDQMHQMDXORJHSRND]LYDDSRLQWHUDXREMHNWQR
orijentiranom programiranju:
49
Index-e u kontrolama Option Button motri kamera 24 sata na dan. Kamera alje
sliku anteni koja je postavljena na vrhu forme. Antena je primopredajna i alje
VOLNXIRUPLDOLLVYLPRVWDOLPREMHNWLPDQDIRUPL%XGXLGDMHVOLNDSRWUHEQD
samo kontroli Izracunaj, i to na tri mjesta, to su tamo stavljena tri TV prijamnika!
,]JRUQMHMHSULHQDSURVWRQHYMHURMDWQRNROLNRMHREMHNWQRRULMHQWLUDQR
SURJUDPLUDQMHLVWRYMHWQRUHDOQRPVYLMHWXXNRMHPLYLPRWRVHWLHGLMHODSULHR
SRND]LYDLPDRVMHWLOLPDWDMHSULDYULMHGLODLNRGXSRUDEHYDULMDEOLXQH
REMHNWQRPSURJUDPLUDQMX9DULMDEOHLVYRMVWYDLSRND]LYDLVXMHGQRWHLVWRV
JOHGLWDXSUDYOMDQMDUHVXUVLPDUDXQDOD,MHGQLLGUXJLVOXHGDVHPHPRULMDQH
RSWHUHWLSRQRYOMHQLPVDGUDMLPD
1HSUHPMHWDMXVHVDGUDMLQHJRLQIRUPDFLMHRVDGUDMLPD2GYLMDVH
NRPXQLNDFLMD2EMHNWLPHXVREQRNRPXQLFLUDMXEDNDRXUHDOQRPVYLMHWX
.RPXQLFLUDMXNDRLOMXGLSRPRXRVMHWLODWMVYRMVWDYD
3URJUDPPRHPRXVSRUHGLWLLVILUPRPXNRMRMSRVWRMLRUJDQL]DFLMD
komuniciranja. Ne svatko sa svakim "bez veze", nego po nekoj profesionalnoj
KLMHUDUKLMVNRMVWUXNWXUL7DNRLQDIRUPLNRMHOLVOLQRVWLULMHLfirma i forma!) ne
NRPXQLFLUDVYDWNRVDVYDNLPEH]YH]HQHJRWDNRHUSRQHNRMKLMHUDUKLMVNRM
strukturi.
50
8RVWDORPNRPXQLNDFLMVNLJOHGDQRWORFUWJUDGRYDL]JOHGDNDRVDH8VUHGLQL
VYDNHVWDQLFHVDDMHDQWHQD6YLPRELWHOLSULPDMXVLJQDORGRQHDQWHQHQDLMRMVH
VWDQLFLVDDQDOD]H9ODVQLFLPRELWHODVXREMHNWLNRMLLPDMXVYRMVWYR
PRELWHO
D
VDHMHforma koja ima svojstvo 'antena'.
3RVWRMLLNRPXQLNDFLMDSUHNRUDGLRSULPRSUHGDMQLNDJGMHQHPDVDDL]DMHGQLNLK
DQWHQDDOLMHWRSUHYODGDQDLGDOHNRVNXSOMDYDULMDQWDNRPXQLFLUDQMD1DMNUDH
UHHQRXWHGDQDUHVXUVLPDLUDXQDODLSURJUDPHUDLNRULVQLNDMHVWUD]ORJ]DWRLX
QDHPSURJUDPXLPDPR]DMHGQLNHDQWHQHDQLVPRGRYHOLXL]UDYQXYH]X
optKom s cmdIzracunaj.
-RQHWRPRUDPRUDVSUDYLWLRNRRYHMHGQDGEHQHWRLVSUDYLWLLGRGDWLJRUQMHP
objanjenju.
frmGlavniObrazac.Kom = Index
S lijeve i s desne strane jednakosti su svojstva koja pripadaju svako svom objektu.
3UHWSRVWDYLPRDOL]DWRSUHWSRVWDYOMDWLNDGDPRHPRHNVSHULPHQWLUDWL3RNUHQXR
VDP,YDPDURGDEUDR2SWLRQ%XWWRQLXNOMXLRSDX]X8SUR]RUX,PPHGLDWHVDP
tipkao...
?frmGlavniObrazac.Kom
...pa pritisnuo enter i dobio rezultat...
2
3RQRYRVDPSRNUHQXRSURJUDPRGDEUDR2SWLRQ%XWRQLXNOMXLRSDX]X1DNRQ
istog upita u prozoru Immediate sam dobio rezultat 1.
Rezultati su u redu i sukladni su gornjem objanjenju kda:
frmGlavniObrazac.Kom = Index
$OLWRHVHGRJRGLWLDNRVDGDXRYRPWUHQXWNXQDNRQWRMHSURJUDPL]YULR
JRUQMXMHGQDGEXL]QHNRJUD]ORJDGRHGREULVDQMDJRUQMHMHGQDGEH"3DMD
PRJXREULVDWLWXMHGQDGEXVDGDLWRVDPXLQLR3RNUHQXRVDPSURJUDPSRQRYR
i bez diranja ga ponovo pauzirao.
8SLVDRVDPSRQRYRLVWLXSLWLGRELRWUHLUH]XOWDWNDRLRQDMSUHWKRGQLWRMHX
UHGXEXGXLGDQLVDPQLWDPLMHQMDRMHUQLVDPVPLREXGXLGDELSURJUDPUDGL
obrisanog retka stao.
51
6YRMVWYDVXSRND]LYDLLLPDMXVYRMHPMHVWRXPHPRULMLDVWYDUQHYULMHGQRVWL
svojstava imaju neko drugo mjesto u memoriji.
Ovo me sada podsjetilo na SUHDFHX:LQGRZVJUDILNRPRNUXHQMX'RNXPHQW
VHQDOD]LQHJGMHQDGLVNXDOLVHLQMHJRYSUHDFQDOD]LQHJGMHQDGLVNX3UHDFMH
VDPRSXWRND]NRMLSRND]XMHSUHPDGRNXPHQWX3UHDFMHGRNXPHQWXNRMHPMH
VDPR]DSLVDQSXWGRL]YRUQRJGRNXPHQWD%H]RE]LUDNROLNR
WHDN
ELRRULJLQDOQL
GRNXPHQWSUHDFMHXYLMHNMHGQDNR
WHDN
$NRXVYRMRMVWUXNWXULPDSDHOLPRQD
YLHPMHVWDLPDWLQHNLGRNXPHQW]DUQLMHEROMHNRSLUDWLSUHDFHLUD]PMHVWLWLLKQD
vie mjesta umjesto tekog dokumenta. Osim utede na prostoru, utedjeli smo i
53
QDEROMRMRUJDQL]DFLML.DGDELVPRLPDOLYLHNRSLMDRULJLQDODNDNRHPR]QDWL
koji je original?
6YRMVWYR.RPMHQDMSULMHSRND]LYDORQDIL]LNXDGUHVXVYRMVWYD.RP1DNRQWRMH
SURJUDPL]YULRMHGQDGEX
frmGlavniObrazac.Kom = Index
VYRMVWYR.RPSRND]XMHQDIL]LNXORNDFLMXVYRMVWYD,QGH[
7RMHSUDYDSULDNRMDVHGRJDDL]DSR]RUQLFHL]DRYRJMHGQRJUHWNDN{GD
frmGlavniObrazac.Kom = Index
,PDMRQHWR1DJRUQMRMVOLFLVDPSUHNULLR6YRMVWYR.RP1DNRQGHNODULUDQMD
VYRMVWYD.RPX*HQHUDO'HFODUDWLRQVVWYRUHQMHSRND]LYDQDVYRMVWYR.RP7DM
SRND]LYDSRND]XMHQDQLWDVYHGRNQHQDSLHPRN{G
IUP*ODYQL2EUD]DF.RP QHNRMSRHWQRMYULMHGQRVWL
0LWRQLVPRQDSLVDOLRGPDKSDVHQLWLQH]DX]LPDIL]LNLGUXJDDGUHVDX
PHPRULML0LVPRWXMHGQDGEXQDSLVDOLWHNXDUUD\X
frmGlavniObrazac.Kom = Index
Tek kada korisnik aplikacije odabere neki od Option Button u array-u, program
L]YUDYDJRUQMXMHGQDGEX1LWDGDVHQH]DX]LPDSRVHEQDQRYDDGUHVD]DIL]LNL
VPMHWDMYULMHGQRVWL.RP1HPDSRWUHEHMHUJRUQMDMHGQDGEDXVPMHUDYD
SRND]LYD.RPSUHPDVYRMVWYX,QGH[8QDHPSULPMHUXSRVHEQLSURVWRU]D
VYRMVWYR.RPVHQLNDGLQHVWYDUDMHUFLMHORYULMHPHUDGDDSOLNDFLMHSRND]LYD
svojstvo Kom pokazuje na Index.
=DKYDOMXMXLSRND]LYDLPDLWHNDNRVHWHGLQDPHPRULMLLRPRJXDYDEULUDG
aplikacije. Jasno, da bi se utedjelo, programer mora znati to se deava iza
SR]RUQLFH7DGDSURJUDPHUQHHSLVDWLN{GNRMLH]DX]LPDWLQRYHDGUHVHX
PHPRULMLNDRUH]HUYDFLMX]DQHNDEXGXDGRJDDQMD0QRJDGRJDDQMDVHLQH
moraju dogoditi, pa zato onda unaprijed zauzimati prostore. Treba pisati
WHGOMLYLN{GNRMLH]DX]LPDWLQRYHDGUHVHWHNXWUHQXWNXNDGDVHGRJDDML
dogode.
3ULPMHUWHGOMLYRJN{GD1DNRQGHNODUDFLMHVYRMVWYDLOLYDULMDEOHPRHPRXYLMHN
GHILQLUDWLLSRHWQHYULMHGQRVWLWHRVRELQHLOLYDULMDEOH8MHGQRPUHWNXGHNODULUDPR
RVRELQXLOLYDULMDEOXLWDMUHGDNNDRVYDNLSRND]LYD]DX]HRMHXPHPRULMLSURVWRU
od 4 bajta. Nije se automatski zauzela (rezervirala) i neka adresa za stvarnu
YULMHGQRVWNRMDHPRGDGRLWLMHNRPUDGDSURJUDPD3RVWRMLVDPRSRND]LYD
VYRMVWYDQDVYRMVWYRNRMHJXPHPRULMLMRQHPD3RND]LYDNRMLQRVLLPH
"svojstvo Kom" i koji nikad i ne mora dobiti svoje originalno svojstvo s
54
RULJLQDOQRPPHPRULMVNRPDGUHVRPLRULJLQDOQRPVWYDUQRPIL]LNRPYULMHGQRX
L]UDHQRPXPMHUQRMMHGLQLFLbajtima.
2QGDXVOMHGHHPUHWNX]DGDPRSRHWQXYULMHGQRVWWHRVRELQHLOLYDULMDEOH7HNMH
taj redak zauzeo drugu adresu na koju je smjestio onu vrijednost s desne strane
MHGQDGEHWMSRHWQXYULMHGQRVW=DNOMXDNQHGDYDMPRSRHWQHYULMHGQRVWLDNR
WRQLMHSRWUHEQR'DYDMPRLKWREOLHGRJDDMXNRMHPVXSRWUHEQHDNDGDJRGMH
PRJXHSUHSXVWLPRWR]DX]HHGUXJHDGUHVHVDPRPGRJDDMX1DNRQWRVH
GRJDDMGRJRGLRGUXJDDGUHVDMH]DX]HWD-DVQRLYRWQLFLNOXVWHGUXJHDGUHVH
WDNRHUWUHEDELWLGXJRQROLNRNROLNRMHSRWUHEQR$NRQHWUHED]DQHNHEXGXH
UDGQMHSURJUDPDSURJUDPHUPRUDQDSLVDWLN{GNRMLHREULVDWLVDGUDMLRVORERGLWL
memorijsku adresu.
55
Lekcija 8 Ivamar
i nova forma
1. Otvorite Ivamar.
2. Odaberite Project/Add Form.
3. 3ULWLVQLWHWLSNXPLDGYDSXWDQD)RUP8VXHOMX9LVXDO%DVLFDQD]LYDVH
IDE) se otvorila forma Form1.
4. U prozoru Properties promijenite svojstvo Name u frmTezinaKnjige.
5. 2GDEHULWH6DYHX)LOHQDPHREULLWH
IUP
1HNDGDWRWHQRLPHIRUPHEXGH
TezinaKnjige. Pohranite formu u C:\Ivamar. Save.
Dodavanje kontrola formi
1. Nastavljamo raditi na projektu Ivamar.
2. U prozoru Project Explorer pritisnite tipku mia dva puta na formu
TezinaKnjige.
3. Na formu ugradite kontrole Frame, List Box, Command Button i Label,
kao na slici:
56
4. 3URPLMHQLWHVYRMVWYDIRUPLSUHPDVOMHGHRMWDEOLFL
Svojstvo
Vrijednost
Name
frmTezinaKnjige
BorderStyle
1-Fixed Single
Caption
Tezine knjiga
ControlBox
False
Height
4425
MaxButton
False
MinButton
False
Moveable
False
StartUpPosition
2-CenterScreen
Width
3870
5. 3URPLMHQLWHVYRMVWYDNRQWUROL)UDPHSUHPDVOMHGHRMWDEOLFL
Svojstvo
Vrijednost
Name
fraTezina
Caption
Oznacite knjigu
6. 3URPLMHQLWHVYRMVWYDNRQWUROL/LVWSUHPDVOMHGHRMWDEOLFL
57
Svojstvo
Vrijednost
Name
lstTezina
7. 3URPMHQLWHVYRMVWYDNRQWUROL&RPPDQGSUHPDVOMHGHRMWDEOLFL
Svojstvo
Vrijednost
Name
cmdIzadji
Caption
Default
True
8. 3URPLMHQLWHVYRMVWYDNRQWUROL/DEHOSUHPDVOMHGHRMWDEOLFL
Svojstvo
Vrijednost
Name
lblTezina
Caption
(prazno)
AutoSize
True
9. Pohranite Ivamar.
Pisanje dokumenta 'tezina.txt'
1. 81RWHSDGXQDSLLWHWHLQHSRMHGLQLKNQMLJDLIRUPDWD
2. 7HNVWMHVORHQSRDEHFHGL3RKUDQLWHGRNXPHQWSRGLPHQRPtezina.txt u
mapu C:\Ivamar.
58
Kodiranje forme
1. Nastavljamo raditi na formi TezinaKnjige.
2. 'RGDMWHVOMHGHLUHGDNN{GDXVHNFLMX*HQHUDO'HFODUDWLRQV
Option Explicit
Private m_colTezineKnjiga As New Collection
3. Sada kodirajte proceduru Form_Load() ovako:
Private Sub Form_Load()
On Error GoTo Preskoci
Dim strKnjigaFormat As String
Dim intTezina As Integer
If App.Path = "\" Then
Open App.Path & "tezina.txt" For Input As #1
Else
Open App.Path & "\tezina.txt" For Input As #1
End If
Do While Not EOF(1)
Input #1, strKnjigaFormat, intTezina
m_colTezineKnjiga.Add Item:=intTezina
lstTezina.AddItem strKnjigaFormat
Loop
Close #1
Exit Sub
Preskoci:
Select Case Err.Number
Case 53
End Sub
7. Pohranite Ivamar.
Dohvat nove forme s glavne forme
1. Otvorite projekt Ivamar i formu GlavniObrazac u dizajn pogledu.
2. Ugradite kontrolu Command1 kao na slici dolje:
61
Lekcija 9 Ivamar
i osobni objekt
Knjiga
Kreiranje objekta Knjiga
Kreiranje class modula Knjiga
1. Otvorite projekt Ivamar.
2. Project/Add Class Module.
3. Pritisnite tipku mia dva puta na Class Module.
4. )LRWYRULWHVHSUR]RU3URSHUWLHV]DFODVV
5. Tipkajte Knjiga umjesto svojstva Name Class1.
62
6. 3RKUDQLWHXPDSX&?,YDPDUSRGLPHQRP.QMLJDDHNVWHQ]LMDH
automatski biti .css.
7. Otvorite prozor Project Explorer. Projekt Ivamar sada ima dvije forme i
jedan class modul.
Knjiga
Svojstva
Naslov
Format
Kolicina
Cijena
63
LYRWQLYLMHNYDULMDEOLXFODVVPRGXOXMHGQDNMHRQRPHXIRUPL'HNODULUDOLVPR
HWLULYDULMDEOHEXGXDHWLULVYRMVWYDREMHNWD.QMLJH'HNODULUDOLVPRLYDULMDEOX
NROHNFLMXPBFRO&LMHQD.QMLJHXNRMXHVHXLWDWLFLMHQHL]GDWRWHNH&MHQLNW[W6YH
smo deklarirali u sekciji General Declarations jer se mora dogoditi prije
LQLFLMDOL]DFLMHLOLURHQMDREMHNWD8SURFHGXUL,QLWLDOL]HXLWDWHVHSRGDFLL]
datoteke Cjenik.txt.
8QDHPSURMHNWXXVYDNRPWUHQXWNXPRHSRVWRMDWLRGQXODGRQDMYLHHWLUL
objekta Knjiga. Kada korisnik pritisne tipku mia na Check Box u okviru Formati
NQMLJHREMHNW.QMLJDHVHURGLWLXLXPHPRULMXNDGDNRULVQLNLVNOMXLWDM
&KHFN%R[REMHNWHXPULMHWLL]DLL]PHPRULMH$NRNRULVQLNRGDEHUHHWLUL
&KHFN%R[LPDWHPRHWLULREMHNWD.QMLJDXPHPRULML
6YDNLREMHNW.QMLJDLPDWHSRVHEQRXLWDQHSRGDWNHL]YDQMVNHGDWRWHNH
&MHQLNW[WHWLULREMHNWDHWLULXLWDYDQMDSRGDWDNDQDHWLULPMHVWDXPHPRULML
isti podaci Cjenik.txt. Zato ne bismo napisali malo kda izvan objekata u kojem
ELVHXLWDOLSRGDFLL]YDQMVNRJGRNXPHQWD&MHQLNW[WL]DX]HOLMHGQRPMHVWRX
memoriji. Svi objekti koji se inicijaliziraju tada bi kontaktirali to jedno mjesto u
memoriji. To bi bilo u suprotnosti s objektno orijentiranim programiranjem. To bi
bio hibrid proceduralnog i objektnog programiranja. Objekt ne bi bio samostalan i
mobilan u druge aplikacije i procedure, jer bi ovisio o tom vanjskom kdu ili bi ga
dijelili kolegama s dodatnim uputama za vanjski kd.
Kreiranje procedure Initialize
1. Nastavljate raditi na class modulu Knjiga u projektu Ivamar.
2. 1DSLLWHVOMHGHLN{GXGRJDDMSURFHGXUX&ODVVB,QLWLDOL]H
Private Sub Class_Initialize()
On Error GoTo Preskoci
Dim strProvjera As String
Dim strNaslov As String
Dim strFormat As String
Dim curCijena As Currency
64
Analiza
*RUQMLN{GMHJRWRYRLGHQWLDQN{GXXSURFHGXUL&LWDM&MHQLNXJODYQRMIRUPL7R
MH]DWRWRUDGLLVWLSRVDRXLWDYDFLMHQHL]GDWRWHNHFMHQLNW[WXNROHNFLMX
PBFRO&LMHQD.QMLJH%XGXLGDMHNROHNFLMDGHNODULUDQDXVHNFLML*HQHUDO
'HFODUDWLRQVFODVVPRGXODSRGDFLHELWLGRVWXSQLVYDNRMSURFHGXULXFODVV
modulu.
,SDNQHHPRREULVDWLN{GNRMLXLWDYDSRGDWNHVGRNXPHQWDFMHQLNW[WXJODYQRP
REUDVFX7DMN{GHRVWDWLUDGLSXQMHQMDSRGDFLPDNRQWUROHOVW.QMLJH3RQRYRVH
SRVORYLXLWDYDQMDSRGDWDNDSRQDYOMDMXDOLWRMHXYMHWVDPRVWDOQRVWLLQHRYLVQRVWL
objekata.
Kreiranje procedura Let i Get class modula Knjige
1. Nastavljate raditi na class modulu Knjiga.
2. 7LSNDMWH]DVYDNRVYRMVWYRVOMHGHLN{GXVHNFLMX*HQHUDO
3. Za svojstvo Naslov:
Property Let Naslov(ByVal strNovi As String)
m_strNaslov = strNovi
End Property
Property Get Naslov() As String
Naslov = m_strNaslov
End Property
4. Za svojstvo Format:
Property Get Format() As String
Format = m_strFormat
End Property
Property Let Format(ByVal strNovi As String)
66
m_strFormat = strNovi
End Property
5. =DVYRMVWYR.ROLLQD
Property Let Kolicina(ByVal intNovi As Integer)
If m_strFormat = "E-learning" Then
m_intKolicina = 1
Else
m_intKolicina = intNovi
End If
End Property
Property Get Kolicina() As Integer
Kolicina = m_intKolicina
End Property
6. Za svojstvo Cijena:
Property Get Cijena() As Currency
m_curCijena = m_colCijenaKnjige(m_strNaslov &
m_strFormat)
Cijena = m_curCijena
End Property
7. Pohranite Ivamar.
Analiza
2EMHNW.QMLJDMHQDSUDYOMHQ1DSUDYLOLVPRPXLHWLULVYRMVWYD
67
'HNODULUDOLVPRHWLULREMHNWYDULMDEOH=DVYDNLIRUPDWNQMLJHSRMHGQDREMHNW
varijabla. Kada korisnik odabere jednu kontrolu Check Box, stvoreni su preduvjeti
]DUDDQMHMHGQRJREMHNWD.QMLJD2EMHNW.QMLJDHVHLQLFLMDOL]LUDWLLOLroditi tek
NDGDSULWLVQHPRJXPEFPG,]UDXQDM
5DDQMHLXPLUDQMHREMHNDWD.QMLJDXSURMHNWX,YDPDU
1. Nastavljamo raditi na kdu forme GlavniObrazac.
2. Otvorite proceduru chkFormatKnjige_Click i tipkajte ovaj kd:
Private Sub chkFormatKnjige_Click(Index As Integer)
Select Case Index
Case 0:
68
If chkFormatKnjige(Index).Value = 1 Then
Set m_knjCourseware = New Knjiga
m_knjCourseware.Naslov = lstKnjige.Text
m_knjCourseware.Format = "Courseware"
m_knjCourseware.Kolicina = frmGlavniObrazac.Kom
Else
Set m_knjCourseware = Nothing
End If
Case 1:
If chkFormatKnjige(Index).Value = 1 Then
Set m_knjElearning = New Knjiga
m_knjElearning.Naslov = lstKnjige.Text
m_knjElearning.Format = "E-learning"
m_knjElearning.Kolicina = frmGlavniObrazac.Kom
Else
Set m_knjElearning = Nothing
End If
Case 2:
If chkFormatKnjige(Index).Value = 1 Then
Set m_knjCDROM = New Knjiga
m_knjCDROM.Naslov = lstKnjige.Text
m_knjCDROM.Format = "CD-ROM"
m_knjCDROM.Kolicina = frmGlavniObrazac.Kom
Else
Set m_knjCDROM = Nothing
End If
Case 3:
If chkFormatKnjige(Index).Value = 1 Then
69
HPXVOXLJRUQMLN{G"6OXLVOMHGHHPRGDEUDOLVPRQDVORYNQMLJHRGDEUDOLVPR
IRUPDWHLNROLLQX7DGDVPRVHSUHGRPLVOLOLLSULWLVQXOLWLSNXPLDQDGUXJLQDVORY
NQMLJHXNRQWUROLOVW.QMLJH'RJRGLRVHGRJDDMOVW.QMLJHB&OLFN,VWRLPHQDH
procedura sada provjeriti koji su formati odabrani, tj. koje kontrole Check Box
imaju Value = 1.
7RVPRULMHLOLSRPRXREMHNWYDULMDEOHFKN2EMHNWLSHWOMH6HOHFW&DVH
Case 1
]QDLXSUDYR9DOXH
If chkObjekt.Caption = "Courseware" Then
m_knjCourseware.Naslov = lstKnjige.Text
End If
Preko strukture If...Then objektima se postavlja svojstvo 'Naslov' na vrijednost
novoizabranog naslova knjige u lstKnjige (lstKnjige.Text). Kontrola List Box ima
svojstvo Text samo za vrijeme rada (run-time) programa.
71
72
Analiza
*RUQMLMHN{GLVWLNDRRQDMXOVW.QMLJHVDPRVHPLMHQMDVYRMVWYR.ROLLQDXPMHVWR
svojstva Naslov.
Promjene u proceduri cmdIzracunaj
1. 3URPLMHQLWH]DVMHQMHQRXSURFHGXULFPG,]UDFXQDMB&OLFN7ULWRNLFH]QDH
QHSURPLMHQMHQSUHVNRHQGLRN{GD
Private Sub cmdIzracunaj_Click()
On Error GoTo Preskoci
...
'Sad imamo sve elemente za racunanje ukupnog iznosa
'Izracunajmo cijenu svakom formatu pojedine knjige
curCijenaCourseware = m_knjCourseware.Cijena
curCijenaElearning = m_knjElearning.Cijena
curCijenaCdRom = m_knjCDROM.Cijena
curCijenaPapir = m_knjPapir.Cijena
curCijenaSve = m_colCijenaFormata(lstKnjige.Text &
"Komplet")
'Kad kupac odabere sve formate jednog naslova
obavijestimo ga o popustu
If chkFormatKnjige(0).Value = 1 And _
chkFormatKnjige(2).Value = 1 And _
chkFormatKnjige(3).Value = 1 Then
MsgBox "Iznos ukljucuje popust za kupovinu
kompleta"
curIznos = (curCijenaSve *
frmGlavniObrazac.Kom) + _
73
curCijenaElearning
Else
'Zbrojimo cijene i pomnozimo s kolicinom
'i dobit cemo ukupan iznos narudzbe
curIznos = (((curCijenaCourseware +
curCijenaCdRom _
+ curCijenaPapir) * frmGlavniObrazac.Kom) +
curCijenaElearning)
End If
'Ako je iznos veci od nula, prikazi cijenu i
'ucini label vidljivim
If curIznos > 0 Then
lblCijena.Caption = "Ukupan iznos je " & _
Format(curIznos, "###,###.00")
lblCijena.Visible = True
End If
Exit Sub
Preskoci:
Select Case Err.Number
Case 91
Resume Next
Case Else
MsgBox Err.Number & ": " & Err.Description
Resume Next
End Select
End Sub
2. Pohranite Ivamar.
3. 6DGDPRHWHLVSUREDWLQRYLN{G3RNUHQLWH,YDPDULSURYMHULWHUDG
aplikacije.
4. ,]DLWHL],YDPDUSRPRXQDUHGEH3URJUDP,]OD]L]DSRUNH
74
Analiza
3UYDMHQRYRVWXYRHQMHN{GDHUURUKDQGOHU
On Error GoTo Preskoci
... i na kraju ovog kda:
Preskoci:
Select Case Err.Number
Case 91
Resume Next
Case Else
MsgBox Err.Number & ": " & Err.Description
Resume Next
End Select
(UURUKDQGOHUMHXYHGHQUDGLSURPMHQHXYRHQMDFLMHQD
curCijenaCourseware = m_knjCourseware.Cijena
curCijenaElearning = m_knjElearning.Cijena
curCijenaCdRom = m_knjCDROM.Cijena
curCijenaPapir = m_knjPapir.Cijena
6YDNLREMHNW.QMLJDXLWDYDFLMHQXSRVHEQRXVYRMHVYRMVWYR
&LMHQD
6DGDMH
VYDNRMYDULMDEOLQDOLMHYRMVWUDQLMHGQDGEHSULGRGDQDYULMHGQRVWVYRMVWYD
&LMHQD
1DYHGHQDVXVYDHWLULREMHNWDLDNRNXSDFQHPRUDRGDEUDWLVYHHWLULNRQWUROH
Check Box.
1HSRVWRMHLREMHNWHL]D]YDWLJUHNX(UURU2EMHFW5HIHUHQFH1RW6HW
$OLNDFLMDHSDVWL(UURUKDQGOHUVPRXYHOL]DSUHPRWHQMHWHJUHNH
Unitavanje objekt varijabli Knjiga
1. Nastavljamo raditi na formi frmGlavniObrazac.
2. 7LSNDMWHVOMHGHLN{GXSURFHGXUX)RUPB4XHU\8QORDG
Private Sub Form_QueryUnload(Cancel As Integer,
UnloadMode As Integer)
75
2YRMHHNVSOLFLWDQQDLQLHQMDPHPRULMHRGVYLKPRJXLKUHIHUHQFLMDREMHNW
varijabli, u trenutku neposredno pred zatvaranje forme GlavniObrazac.
Zatvaranjem forme ne moraju se osloboditi i adrese u memoriji raznih referencija.
Zato je ovaj kd dobra praksa.
76
Lekcija 10
Dodavanje
dogaaja
projektu Ivamar
.RGLUDQMHGRJDDMDXFODVVPRGXOX.QMLJDFOV
.RGLUDWHPRMHGDQGRJDDMXQXWDUREMHNWD.QMLJD
1. Otvorite projekt Ivamar.
2. U Project Exploreru dva puta pritisnite tipku mia na class modul
Knjiga.cls.
3. .{GLUDMWHVOMHGHHSURPMHQHXN{GXVHNFLMH*HQHUDO'HFODUDWLRQV
Promjene su u zasjenjenim redcima.
Option Explicit
Public Event PromjenaPodataka(Podatak As String,
Vrijednost As Variant)
Private m_strNaslov As String
Private m_strFormat As String
Private m_intKolicina As Integer
Private m_curCijena As Currency
4. Promijenite kd u proceduri Property Let svojstva Naslov:
Property Let Naslov(ByVal strNovi As String)
77
m_strNaslov = strNovi
RaiseEvent PromjenaPodataka("Naslov", m_strNaslov)
End Property
5. Promijenite kd u proceduri Property Let svojstva Format:
Property Let Format(ByVal strNovi As String)
m_strFormat = strNovi
RaiseEvent PromjenaPodataka("Format", m_strFormat)
End Property
6. Promijenite kd u proceduri Property Let svojstva Kolicina:
Property Let Kolicina(ByVal intNovi As Integer)
If m_strFormat = "E-learning" Then
m_intKolicina = 1
Else
m_intKolicina = intNovi
End If
RaiseEvent PromjenaPodataka("Kolicina", m_intKolicina)
End Property
7. 'RGDMWHVOMHGHLN{GQDSRHWDNGRJDDMDSURFHGXUHInitialize:
Private Sub Class_Initialize()
Debug.Print "Objekt Knjiga je rodjen..."
On Error GoTo Preskoci
78
8. 'RGDMWHVOMHGHLN{GGRJDDMSURFHGXUHTerminate:
Private Sub Class_Terminate()
Debug.Print "Objekt Knjiga je umro..."
End Sub
9. Pohranite Ivamar.
Analiza
'RJDDMVHGHNODULUDSRPRXNOMXQLKULMHLPublic i Event...
Public Event PromjenaPodataka(Podatak As String,
Vrijednost As Variant)
0MHVWRGHNODUDFLMHMHVHNFLMD*HQHUDO'HFODUDWLRQV'RJDDMHELWLQD
raspolaganju svim procedurama unutar class modula.
,QWHJUDFLMDGRJDDMDX,YDPDU
3URJUDPMRQLMHXVWDQMXUHDJLUDWLQDGRJDDM3URPMHQD3RGDWDND%LWHWHNNDGD
promijenimo kd deklaracije objekta Knjiga u glavnoj formi.
1. Otvorite Ivamar.
2. Otvorite formu frmGlavniObrazac u prozoru Code.
3. 3URPLMHQLWHN{GGHNODUDFLMHHWLULPRJXDREMHNWD.QMLJD
Option Explicit
Public Kom As Integer
Private m_lngBojaPozadine As Long
Private m_blnPrikazDatuma As Boolean
Private m_colCijenaFormata As New Collection
Private WithEvents m_knjCourseware As Knjiga
Private WithEvents m_knjElearning As Knjiga
Private WithEvents m_knjCDROM As Knjiga
Private WithEvents m_knjPapir As Knjiga
79
4. 3RKUDQLWH,YDPDU3RNUHQLWHSURJUDP-RQHPDUHDNFLMHQDQDGRJDDM
3RWUHEQRMHQDSLVDWLUHDNFLMXQDSLVDWLN{GXGRJDDMSURFHGXUL
PromjenaPodataka.
Analiza
.OMXQDULMH:LWK(YHQWVMHMHGLQDSURPMHQDXN{GXGHNODUDFLMHVYDNRJRGHWLUL
PRJXDREMHNWD.QMLJD
.RGLUDQMHGRJDDMD3URPMHQD3RGDWDND
1. Otvorite formu frmGlavniObrazac.
2. Pritisnite tipku mia na polje Object i u popisu objekata, pored kontrola,
SRMDYLWHVHLQDLREMHNWL.QMLJD2EMHNWLVXGRVSMHOLXWXOLVWXQDNRQ
XYRHQMDNOMXQHULMHL:LWK(YHQWVXGHNODUDFLMXREMHNDWD.QMLJD
3. 3ULWLVQLWHWLSNXPLDQDREMHNWPBNQM&'5208SROMX3URFHGXUHHVH
DXWRPDWVNLSRMDYLWLMHGLQDGRJDDMSURFHGXUD3URPMHQD3RGDWDND
4. 'RGDMWHRYDMN{GXGRJDDMSURFHGXUXPBNQM&'520B3URPMHQD3RGDWDND
Private Sub m_knjCDROM_PromjenaPodataka(Podatak As
String, Vrijednost As Variant)
Debug.Print "Svojstvo " & Podatak & " se
promijenilo u: " & Vrijednost
End Sub
5. 'RGDMWHRYDMN{GXGRJDDMSURFHGXUX
m_knjElearning_PromjenaPodataka:
Private Sub m_knjElearning_PromjenaPodataka(Podatak As
String, Vrijednost As Variant)
80
81
Analiza
Kada smo odabrali naslov knjige Visual Basic u list box, objekt se nije stvorio. Tek kada smo
odabrali check box, objekt se rodio. Zato?
Pogledajmo proceduru...
Private Sub chkFormatKnjige_Click(Index As Integer)
Select Case Index
Case 0:
If chkFormatKnjige(Index).Value = 1 Then
Set m_knjCourseware = New Knjiga
m_knjCourseware.Naslov = lstKnjige.Text
m_knjCourseware.Format = "Courseware"
m_knjCourseware.Kolicina = frmGlavniObrazac.Kom
Else
Set m_knjCourseware = Nothing
End If
... i u njoj redak...
Set m_knjCourseware = New Knjiga
Tek je ova naredba stvorilaQRYLREMHNWPBNQM&RXUVHZDUH2YGMHVXNOMXQHGYLMH
ULMHLSet i New2YHGYLMHNOMXQHULMHL]DMHGQRXJRUQMRMVLQWDNVLNUHLUDMXQRYL
objekt na temelju class modula Knjiga.
Ovako smo deklarirali objekte u sekciji General Declarations...
Private WithEvents m_knjCourseware As Knjiga
Private WithEvents m_knjElearning As Knjiga
Private WithEvents m_knjCDROM As Knjiga
Private WithEvents m_knjPapir As Knjiga
... a nismo ovako...
Private WithEvents m_knjCourseware As New Knjiga
Private WithEvents m_knjElearning As New Knjiga
Private WithEvents m_knjCDROM As New Knjiga
Private WithEvents m_knjPapir As New Knjiga
Zato?
82
=DWRWRSUYLQDLQGHNODULUDQMDREMHNWDQHVWYDUDWDMREMHNWWMQH]DX]LPDPMHVWR
u memoriji kao rezervaciju za objekt. Zato bi se ikakav prostor u memoriji
]DX]LPDRXQDSULMHG"$WRVHGRJDDNDGDXN{GXSLHPRNOMXQXULMHNew. Kada
ELVPRNRULVWLOL1HZVYDHWLULREMHNWDELVHrodila jo u sekciji General
Declarations, zauzela neka mjesta u memoriji i bila na raspolaganju svim
procedurama u aplikaciji. U memoriji bi ostali sve dok se aplikacija ne bi
zatvorila, tj. do onih naredbi u trenutku zatvaranja aplikacije (glavne forme
frmGlavniObrazac):
Set m_knjCourseware = Nothing
Set m_knjElearning = Nothing
Set m_knjCDROM = Nothing
Set m_knjPapir = Nothing
%XGXLGDQLVPRNRULVWLOLULMH1HZXGHNODUDFLMLREMHNWLQLVXQDVWDOL.DGDH
QDVWDWL"2EMHNWHVHroditi kad program izvri naredbu:
Set m_knjCourseware = New Knjiga
.OMXQHULMHL6HWL1HZVX]DPMHQD]DVDPRMHGQXNOMXQXULMH1HZX
GHNODUDFLML*GMHHPRSLVDWLQDUHGEX6HW1HZRYLVLRWRPHJGMHVPDWUDPR
SRWUHEQLPUDDQMHREMHNWD8SULPMHUX,YDPDUWXVPRQDUHGEXVWDYLOLXSURFHGXUX
GRJDDMD&OLFNDUUD\DFKN)RUPDW.QMLJH.DGDVPRSULWLVQXOLWLSNXPLDQDFKHFN
box Courseware, rodio VHREMHNWPBNQM&RXUVHZDUHNDRLQDLFDREMHNWDSUHGORND
Knjiga.
'RJDDVHGRJDDM,QLWLDOL]HXLMRMSURFHGXULVPRQDSLVDOL
Private Sub Class_Initialize()
Debug.Print "Objekt Knjiga je rodjen..."
Nakon ispisa ...
Objekt Knjiga je rodjen...
... dolazi do ispisa vrijednosti svojstava nastalog objekta...
Objekt Knjiga je URHQ...
Svojstvo Naslov se promijenilo u: VisualBasic
Svojstvo Format se promijenilo u: Courseware
Svojstvo Kolicina se promijenilo u: 0
2YD]DGQMDWULUHWNDSRVOMHGLFDVXQDHJGRJDDMD3URPMHQD3RGDWDNDNRMLVH
LQLFLUDXSURFHGXUDPD/HWVYRMVWDYD1DVORY)RUPDWL.ROLFLQDSRPRXQDUHGEH
RaiseEvent:
83
84
Lekcija 11
Gradnja objekta
"Paket"
8. Otvorite projekt Ivamar.
9. Project/Add Class Module.
10. Pritisnite dva puta tipku mia na Class Module.
11. )LRWYRULWHVHSUR]RU3URSHUWLHV]DFODVV
12. Tipkajte Tezina umjesto svojstva Name Class1.
13. 3RKUDQLWHXPDSX&?,YDPDUSRGLPHQRP7H]LQDDHNVWHQ]LMDH
automatski biti .css.
14. Otvorite prozor Project Explorer. Projekt Ivamar sada ima dvije forme i
dva class modula.
Svojstva objekta Tezina
2EMHNWX7H]LQDHPRGDWLGYDVYRMVWYD1DVORY.QMLJHL7H]LQD.QMLJH
1. Nastavite raditi na class modulu Tezina.
2. 'RGDMWHVOMHGHLN{GXVHNFLMX*HQHUDO'HFODUDWLRQV
Option Explicit
Private m_strNaslovKnjige As String
Private m_intTezinaKnjige As Integer
Private m_colTezineKnjiga As New Collection
3. Pohranite Ivamar.
85
.RGLUDQMHGRJDDMSURFHGXUH,QLWLDOL]HFODVVPRGXOD7H]LQD
1. 'RGDMWHVOMHGHLN{GSURFHGXUL,QLWLDOL]H
Private Sub Class_Initialize()
On Error GoTo Preskoci
Dim strNaslovKnjige As String
Dim intTezinaKnjige As Integer
If App.Path = "\" Then
Open App.Path & "Tezina.txt" For Input As #1
Else
Open App.Path & "\Tezina.txt" For Input As #1
End If
Do While Not EOF(1)
Input #1, strNaslovKnjige, intTezinaKnjige
m_colTezineKnjiga.Add Item:=intTezinaKnjige,
Key:=strNaslovKnjige
Loop
Close #1
Exit Sub
Preskoci:
Select Case Err.Number
Case 53
MsgBox "Aplikacija ne moze pronaci " & _
"Tezina.txt. Pohranite datoteku " & vbCrLf & _
"Tezina.txt u mapu u kojoj je " & _
"projekt Ivamar na lokalnom disku."
Unload Me
86
Exit Sub
Case Else
MsgBox "Neocekivana greska. Program se prekida.
Kontaktirajte dobavljaca."
Unload frmGlavniObrazac
Exit Sub
End Select
End Sub
2. Pohranite Ivamar.
Analiza
Ovaj kd u class modulu Tezina jednak je onom kdu u proceduri Load forme
frmTezinaKnjige. Mogao sam ga doslovce prepisati, ali nisam kako se ne bi
dovodilo u neku vezu. Ovaj kd u Initialize class modula Tezina ima za cilj
NUHLUDWLNROHNFLMXPBFRO7H]LQH.QMLJDLXWXNROHNFLMXXLWDWLSRGDWNHL]YDQMVNH
GDWRWHNH7H]LQDW[W2YDNROHNFLMDMHXQXWDUFODVVPRGXODLLQLFODVVPRGXO
samostojnim i neovisnim o vanjskom programskom kdu.
1HHPRREULVDWLQLRQDMN{GXSURFHGXUL/RDGIRUPHIUP7H]LQD.QMLJHMHURQ
VOXL]DSXQMHQMHWHNVWRPOLVWER[OVW7H]LQD.DGDSURJUDPNUHQHSURFHGXUDNRMD
SULSDGDIRUPLXLWDWHWHNVWXOLVWER[L]YDQMVNRJGRNXPHQWD7H]LQDW[W
&ODVVPRGXOHWDNRHUXLWDWLSRGDWNHL]LVWRJGRNXPHQWD7H]LQDW[WXVYRMX
kolekciju i programu ih ponuditi preko svojstava class modula.
Kreiranje svojstava class modula Tezina
1. Nastavite raditi na class modulu Tezina.
2. Kreirajte procedure svojstva NaslovKnjige. Procedura Get:
Property Get NaslovKnjige() As String
NaslovKnjige = m_strNaslovKnjige
End Property
3. Procedura Let:
Property Let NaslovKnjige(ByVal strNovi As String)
m_strNaslovKnjige = strNovi
End Property
87
88
Analiza
)RUPDIUP7H]LQH.QMLJDVDGDNRULVWLREMHNW7H]LQD]DUDXQDQMHWHLQHNQMLJD
Korisniku je svejedno. On ne vidi nikakave promjene. Programeru nije svejedno.
Programeru je sada puno lake. U proceduri Click kontrole lstTezina on mora
samo deklarirati instancu objekta Tezina:
Dim tezNovi As New Tezina
Zatim postaviti svojstvo NaslovKnjige objekta Tezina na vrijednost svojstva Text
objekta list box lstTezina:
tezNovi.NaslovKnjige = lstTezina.Text
Na kraju, u svojstvu Caption objekta label lblTezina, 'zbrojiti' ili 'concatenating'
vrijednosti svojstava Text i TezinaKnjige:
lblTezina.Caption = "Tezina knjige " & _
lstTezina.Text & " je: " & tezNovi.TezinaKnjige & "
gr."
End Sub
89
Lekcija 12
Kolekcija
Narudba
1DSUDYLWHPRNROHNFLMX
1DUXG]ED
7DHQDPNROHNFLMDRODNDWLPDQLSXODFLMXV
objektima 'Knjiga'.
3RLQMHPRVED]LQLPFODVVPRGXORPNRMLHELWL
SUHGORDN
NROHNFLMH
1DUXG]ED
Kreiranje class modula 'Narudzba'
1. Otvorite Ivamar.
2. Project/Add class module.
3. Pritisnite dva puta tipku mia na Add Class Module.
4. F4.
5. Promijenite svojstvo Name: Class1 u Name: Narudzba.
&ODVVPRGXO1DUXG]EDMHNUHLUDQ6DGDJDWUHEDLVSXQLWLN{GRP3RLQMHPRV
deklariranjem varijabli Private.
Kreiranje varijabli Private u class modulu Narudzba
1. Nastavljamo raditi na class modulu Narudzba.
2. 7LSNDMWHVOMHGHLN{GXVHNFLMX*HQHUDO'HFODUDWLRQV
Option Explicit
Private m_colNarudzba As New Collection
Private m_intPopust As Integer
3. Pohranite Ivamar.
Analiza
End Sub
6. 7LSNDMWHVOMHGHLN{GXGRJDDMSURFHGXUX7HUPLQDWH
Private Sub Class_Terminate()
Debug.Print "Objekt je umro."
End Sub
7. Pohranite Ivamar.
Kodiranje metoda class modula Narudzba
Metoda Add:
End Sub
Analiza
Pogledajmo najprije zaglavlje Add procedure:
Public Sub Add(ByVal strKnjigaNaslov As String, _
ByVal strKnjigaFormat As String, ByVal intKnjigaKom _
As Integer)
Metoda Add pripada objektu Narudzba. Ta metoda "instantiate" ili inicijalizira ili
stvara objekte Knjiga, stvara referencije prema objektima Knjiga i te referencije
pohranjuje u Item-e kolekcije Narudzba. Zato metoda Add treba informacije o
REMHNWXNRMLLQLFLMDOL]LUD7HHLQIRUPDFLMHGRELWLSUHNRWULDUJXPHQWD
strKnjigaNaslov, strKnjigaFormat, intKnjigaKom.
Nazivi ovih argumenata su po vaoj volji i prvi se put pojavljuju u aplikaciji.
Nemate nikakvih obveza oko ovih naziva, kao to bi bilo, na primjer, prepisati
WRQHQD]LYHVYRMVWDYDREMHNWD.QMLJDLVO2YRVXDUJXPHQWLNRMHVPRXJUDGLOLX
metodu Add, a koji pripadaju samo toj metodi ( metoda je vlasnitvo objekta
Narudzba).
Slijedi deklaracija varijable objekta:
Dim objKnjiga As New Knjiga
9DULMDEODREM.QMLJDHELWLSRND]LYDLOLSRLQWHULUHIHUHQFLMDQDREMHNW.QMLJDX
prijelaznom vremenu koje traje dok ta referencija ne postane jedan Item objekta
Narudzba.
8VOMHGHDWULUHWNDN{GDSUHQRVLPRYULMHGQRVWLVYRMVWYDREMHNWD.QMLJD1DVORY
Format, Kolicina) na argumente metode Add:
objKnjiga.Naslov = strKnjigaNaslov
objKnjiga.Format = strKnjigaFormat
objKnjiga.Kolicina = intKnjigaKom
Slijedi redak kda u kojem se kreira jedan Item objekta kolekcije Narudzba:
m_colNarudzba.Add objKnjiga, strKnjigaNaslov &
strKnjigaFormat
Iz gornjega retka proizlazi da je Item: = objKnjiga, a da je Key: = strKnjigaNaslov
VWU.QMLJD)RUPDW.H\MHDUJXPHQWNROHNFLMHSRPRXNRMHJDPRHPR
MHGQR]QDQRGRKYDWLWLVYDNRJODQDNROHNFLMH3UHPDJRUQMRMNRQVWUXNFLML
93
]EUDMDQMD
DUJXPHQDWDVWU.QMLJD1DVORY VWU.QMLJD)RUPDWSURL]OD]HVOMHGHL
NOMXHYL.H\-DYD6FULSW&'520-DYD6FULSW3DSLULWG
$VDGDPRUDPRGHILQLUDWLWRXSRVORYDQMXWUJRYLQH]QDLNRPSOHWQDNRMLVH
daje popust:
If strKnjigaFormat = "Courseware" Or strKnjigaFormat =
_
"CD-ROM" Or strKnjigaFormat = "Papir" Then
U ovom kdu provjeravamo da li je kreiran ijedan objekt Knjiga kojeg je vlasnik
WUJRYLQHXNOMXLRXNRPSOHW
$NRMHNUHLUDQELORNRMLREMHNWL]NRPSOHWDLOLSDNVYLL]YULWHVHRYDMN{G
m_intPopust = m_intPopust + 1
End If
9DULMDEODPBLQW3RSXVWHVHSRYHDWL]D%XGXLGDMHQMHQDSRHWQD
YULMHGQRVWSRGHIDXOWXSULVXVWYRREMHNWDL]NRPSOHWDELWHMDYOMHQRRVWDOLP
GLMHORYLPDSURJUDPDSRYHDQMHPYDULMDEOHPBLQW3RSXVW]D
9DULMDEODPBLQW3RSXVWLYLRQROLNRNROLNRLSURFHGXUDWMFODVVPRGXO7D
YDULMDEODMH3ULYDWHWR]QDLXSUDYRWR$NRNRULVQLNRGDEHUHVYDWULIRUPDWD
NQMLJHNRMLXOD]HXNRPSOHWRYDSURFHGXUD$GGHVHSRQRYLWLWULSXWD]DVYDNL
REMHNWMHGDQSXWLYDULMDEODPBLQW3RSXVWHELWLMHGQDND
.DVQLMHNDGDXRYRPFODVVPRGXOXGRHGRUDXQDQMDXNXSQHFLMHQHYRGLWHPR
UDXQDRYULMHGQRVWLYDULMDEOHPBLQW3RSXVW$NRMRMMHYULMHGQRVWNXSDFH
dobiti popust.
%XGXLGDHXNXSQXFLMHQXL]UDXQDWLREMHNWNROHNFLMD1DUXG]EDXQXWDUVHEH
RWSDVWHYHLGLRVDGDQMHJN{GDXSURFHGXUL&OLFNNRQWUROHFPG,]UDFXQDMQD
glavnom obrascu.
.DGDHPHWRGD$GGELWLL]YUHQD"0HWRGD$GGHRGUDGLWLVYDNLSXWNDGD
kupac odabere Format knjige (check box na frmGlavniObrazac) i svaki put kada
odabere naslov knjige u list box (lstKnjige.Text). Argument 'Key' u kolekciji se ne
PRHPLMHQMDWL0RHVHVDPRREULVDWLFLMHOL,WHPLRQGDGRGDWLQRYL,WHPVQRYLP
Key.
$NRMHNXSDFRGDEUDR9LVXDO%DVLF(OHDUQLQJ$GGPHWRGDHLQLFLMDOL]LUDWLQRYL
,WHPXNROHNFLMLLMLH.H\ELWL9LVXDO%DVLF(/HDUQLQJ8NROLNRVHNXSDFVDGD
SUHGRPLVOLLRGDEHUH-DYD6FULSWQHSRVWRMLPRJXQRVWSURPMHQHVDPRDUJXPHQWD
.H\X-DYD6FULSW(OHDUQLQJQHJRVHPRUDREULVDWLFLMHOLODQNROHNFLMHLGRGDWL
QRYLODQLMLMH.H\-DYD6FULSW(OHDUQLQJ
94
,VWRVHGRJDDLNDGDNXSDFRGDEHUH9LVXDO%DVLFL(OHDUQLQJSDSURPLMHQL
PLOMHQMHLRGDEHUH3DSLU2EULVDWHVHFLMHOLODQNROHNFLMHLNUHLUDWLQRYLODQ
,WHPVQRYLPNOMXHP.H\
Kreiranje metode Item class modula Narudzba
1. Nastavljamo raditi na class modulu Narudzba.
2. .UHLUDMWHPHWRGX,WHPWLSNDMWHVOMHGHLN{GXFODVVPRGXO1DUXG]ED
Public Function Item(ByVal strKnjigaNaslov As String, _
strKnjigaFormat As String) As Knjiga
Set Item = m_colNarudzba.Item(strKnjigaNaslov &
strKnjigaFormat)
End Function
3. Pohranite Ivamar.
Analiza
0HWRGD,WHPWUHEDGYDDUJXPHQWD1DVORYL)RUPDW]DSURQDODHQMHRGUHHQRJ
ODQDNROHNFLMH=EURMHQLWLDUJXPHQWLSUHGVWDYOMDMXMHGLQVWYHQLNOMX.H\
argument kolekcije.
Kreiranje metode Remove class modula Narudzbenica
1. Nastavljamo kodirati class modul Narudzbenica.
2. Tipkajte ovaj kd u class modul Narudzbenica:
Public Sub Remove(ByVal strKnjigaNaslov As String, _
ByVal strKnjigaFormat As String)
m_colNarudzba.Remove strKnjigaNaslov & strKnjigaFormat
If strKnjigaFormat = "Courseware" Or strKnjigaFormat =
_
"CD-ROM" Or strKnjigaFormat = "Papir" Then
m_intPopust = m_intPopust - 1
End If
95
End Sub
3. Pohranite Ivamar.
Analiza
0HWRGD5HPRYHHELWLL]YUHQDNDGDJRGVHNRULVQLNSUHGRPLVOLLLVNOMXLFKHFN
ER[)RUPDWNQMLJHNRMHJMHELRXNOMXLRLNDGDJRGSURPLMHQLQDVORYNQMLJHXOLVW
box.
3RWRVXODQRYLNROHNFLMHMHGQR]QDQRLGHQWLILFLUDQLVDUJXPHQWRP.H\NRMLVH
ovdje sastoji od Naslov i Format, u zaglavlju metode smo naveli dva argumenta
koja se odnose na Naslov i Format.
Slijedi naredba Remove.
Tu je i kd istovjetan onome u proceduri Add, If...Then, samo to se sada od
varijable m_intPopust oduzima broj 1.
Kreiranje metode Count class modula Narudzba
1. Nastavljamo kodirati class modul Narudzbenica.
2. Tipkajte ovaj kd u class modul Narudzbenica:
Public Function Count() As Long
Count = m_colNarudzba.Count
End Function
3. Pohranite Ivamar.
Analiza
0MHVWRXSURJUDPXNRMHSR]RYHRYXPHWRGX&RXQWGRELWH]EURMODQRYD
kolekcije m_colNarudzba.
Kreiranje metode NewEnum class modula Narudzbe
1. Nastavljamo raditi na class modulu Narudzba.
2. 8FODVVPRGXO1DUXG]EDGRGDMWHVOMHGHLN{G
Public Function NewEnum() As IUnknown
96
4. Pohranite Ivamar.
Analiza
0HWRGD1HZ(QXPRPRJXDYDQDPNRQVWUXNFLMXSHWOMH)RU(DFK1H[WQDG
svakom kolekcijom, pa tako i naom m_colNarudzba. Radi one crtice 'Shift+-'...
Set NewEnum = m_colNarudzba.[_NewEnum]
LVSUHGULMHLB1HZ(QXPSRWUHEQRMHVWDYLWLNXWQH]DJUDGH3RVWDYNH
L
+LGH
WKLVPHPEHU
VXSRYH]DQHVDVXHOMHPL]DQDHSRWUHEHPRUDMXELWLWDNR
postavljene. Detaljnije objanjenje prelazi okvire ove knjige.
97
98
3RQLPRRG]DJODYOMDIXQNFLMH
Public Function Ukupno(strNaslov As String, _
intKolicina As Integer)
'DELVHL]UDXQDODXNXSQDFLMHQDSRWUHEQDVXGYDDUJXPHQWD-HGDQDUJXPHQWMH
]DGXHQQDWRMHNXSOMHQRDGUXJLDUJXPHQWQDNROLNRMHWRJDNXSOMHQR
Slijedi kd u kojemu deklariramo prvu objekt varijablu:
Dim objUkupno As Knjiga
Objekt varijabla objUkupno nam treba za prolaz kroz petlju For...Each u kolekciji
m_colNarudzba.
6OMHGHDYDULMDEOD
Dim curElearningCijena As Currency
... nam treba radi poslovne politike trgovca. Kada kupac odabere sva 4 formata
QHNHNQMLJHLXNOMXLRSFLMXNRPFLMHQDVYDNRJIRUPDWDHELWLSRPQRHQDV
RVLPIRUPDWD(OHDUQLQJ6YDNLNXSDFPRHNXSLWLIRUPDWHNQMLJHSRGYD
komada, osim formata E-learning. Taj se format uvijek prodaje samo jedan komad
jednom kupcu.
U kdu koji slijedi provjeravamo koliko objekata Knjiga ima u kolekciji
Narudzba:
If m_colNarudzba.Count = 0 Then
Ukupno = 0
Exit Function
End If
$NRMHPHWRGD&RXQW ]QDLGDNXSDFQLMHQLWDRGDEUDRLXNXSQDMHFLMHQD
nula. Program ne treba dalje prolaziti preostale retke funkcije nego napustiti
funkciju, i zato je kodirana naredba Exit Function.
6OMHGHLN{G
For Each objUkupno In m_colNarudzba
99
100
&ODVVPRGXO.QMLJDMHYHXLWDRFMHQLNW[WSDXVHELLPDLUHWNH.RPSOHW=DWR
HPRVYRMVWYR)RUPDWQRYRJREMHNWDREM8NXSQRL]MHGQDLWLV.RPSOHW
objUkupno.Format = "Komplet"
DVYRMVWYR1DVORYHPRL]MHGQDLWLVDUJXPHQWRPVWU1DVORY
objUkupno.Naslov = strNaslov
.DGDLPDPRFLMHQXNRPSOHWDSRWUHEQRMXMHSRPQRLWHVNROLLQRPLWRP
umnoku dodati cijenu 'iznimke' curElearning...
Ukupno = (objUkupno.Cijena * intKolicina) + _
curElearningCijena
End If
,QDNUDMXMRVDPRQDUHGED]DRVOREDDQMHPSURVWRUDXPHPRULMLEULVDQMHREMHNW
varijable):
Set objUkupno = Nothing
Objekt kolekcija Narudzba je napravljen. Sada ga jo moramo ugraditi u nau
aplikaciju Ivamar.
Promijenimo kd u sekciji General Declarations forme
frmGlavniObrazac
1. Otvorite frmGlavniObrazac u prozoru Code.
101
2. ,]PLMHQLWHN{GX*HQHUDO'HFODUDWLRQVVXNODGQRRVMHQHQLPUHGFLPD'YD
RVMHQHQDUHWNDVX]DPLMHQLODHWLULYDULMDEOH3ULYDWH
Option Explicit
Public Kom As Integer
Private m_lngBojaPozadine As Long
Private m_blnPrikazDatuma As Boolean
Private m_colCijenaFormata As New Collection
Private m_objNarudzba As New Narudzba
Private m_strStariNaslov As String
3. Pohranite Ivamar.
Analiza
frmGlavniObrazac.Kom
Else
m_objNarudzba.Remove lstKnjige.Text,
chkFormatKnjige(Index).Caption
End If
End Sub
3. Pohranite Ivamar.
Analiza
2YXSURFHGXUXSRNUHHYULMHGQRVWVYRMVWYD9DOXHMHGQHRGNRQWURODFKHFN
box. Ako kupac pritisne tipku mia na check box, metoda Add doda jedan objekt
.QMLJDXNROHNFLMX1DUXG]ED.RMLHWRRELMHNWELWLRYLVLRYULMHGQRVWLPDNRMHH
SULMHLSUHNRDUJXPHQDWD6YRMVWYR1DVORYEXGXHJREMHNWDMHGQDNRMHYULMHGQRVWL
VYRMVWYD7H[WNRQWUROHOVW.QMLJH6YRMVWYR)RUPDWEXGXHJREMHNWD.QMLJD
jednako je svojstvu Caption kontrole check box na koju je kupac pritisnuo tipku
PLD6YRMVWYR.ROLFLQDEXGXHJREMHNWD.QMLJDMHGQDNRMHVYRMVWYX.RPIRUPH
IUP*ODYQL2EUD]DF7ULDUJXPHQWDPHWRGH$GGHWDNRSUHQLMHWLREMHNWLPD.QMLJD
RGJRYDUDMXHYULMHGQRVWL]DQMLKRYDVYRMVWYD1DVORY)RUPDW.ROLFLQD0HWRGD
$GGNROHNFLMH1DUXG]EDHNUHLUDWLREMHNWH.QMLJDSULYUHPHQHREMHNWYDULMDEOH
koje pokazuju na objekte Knjiga, zatim kreirati Item-e koji pokazuju na objekte
.QMLJDLQDNRQWRJDREULVDWLSULYUHPHQHREMHNWYDULMDEOHNDRQHSRWUHEQHEXGXL
GDVX,WHPLSUHX]HOLQMLKRYXXORJXSRND]LYDDQDREMHNWH.QMLJD
If chkFormatKnjige(Index).Value = 1 Then
m_objNarudzba.Add lstKnjige.Text,
chkFormatKnjige(Index).Caption, _
frmGlavniObrazac.Kom
$NRVHNXSDFSUHGRPLVOLLLVNOMXLQHNXNRQWUROXFKHFNER[QDVWXSDPHWRGD
Remove...
Else
m_objNarudzba.Remove lstKnjige.Text,
chkFormatKnjige(Index).Caption
End If
NRMDHSRPRXNOMXD.H\SURQDL,WHPNRMLWUHEDREULVDWL$]DNOMX.H\MH
potrebno preko argumenata dobiti naslov knjige (lstKnjige.Text) i naziv formata
(chkFormatKnjige(Index).Caption).
103
Analiza
Kada kupac pritisne tipku mia na neki naslov u kontroli lstKnjige, programu je to
nalog za stvaranje novih objekata u kolekciji Narudzba. Ali prije nego to stvori
QRYHREMHNWHSURJUDPHSURYMHULWLGDOLXNROHNFLMLYHSRVWRMHREMHNWL7R
provjerava preko vrijednosti svojstva Value svakog od kontrola check box:
If chkObjekt.Value = 1 Then
$NRMHWDYULMHGQRVWMHGQDND]QDLGDSRVWRMLREMHNWLMLMH.H\SRYH]DQVD
starim naslovom knjige i svojstvom Caption kontrole check box, i da taj objekt
treba ukloniti (Remove) iz kolekcije:
m_objNarudzba.Remove m_strStariNaslov,
chkObjekt.Caption
Nakon to je stari objekt Knjiga uklonjen iz kolekcije, u kolekciju Narudzba treba
GRGDWLQRYLREMHNWLMLH.H\ELWLSRYH]DQVDVYRMVWYRP7H[WNRQWUROHOVW.QMLJHL
VYRMVWYRP&DSWLRQLVWHRQHNRQWUROHFKHFNER[LMHMHVYRMVWYR9DOXHMHGQDNR
m_objNarudzba.Add lstKnjige.Text,
chkObjekt.Caption, _
frmGlavniObrazac.Kom
End If
Next
Nakon to je gornja petlja prola kroz sve kontrole check box na formi, obrisala
stare Item-e u kolekciji i kreirala nove Item-e, slijedi redak...
m_strStariNaslov = lstKnjige.Text
XNRMHPHSURJUDPYULMHGQRVWVYRMVWYD7H[WNRQWUROHOVW.QMLJHSRKUDQLWLX
YDULMDEOXPBVWU6WDUL1DVORYLYRWQLYLMHNRYHYDULMDEOHMHNROLNRLFLMHOHIRUPH
GlavniObrazac.
Promjene u proceduri Click kontrole optKom
1. Nastavljamo kdirati frmGlavniObrazac.
2. Promijenite proceduru optKom_Click:
Private Sub optKom_Click(Index As Integer)
frmGlavniObrazac.Kom = Index
Dim chkObjekt As CheckBox
For Each chkObjekt In chkFormatKnjige
105
If chkObjekt.Value = 1 Then
m_objNarudzba.Item(lstKnjige.Text,
chkObjekt.Caption).Kolicina _
= frmGlavniObrazac.Kom
End If
Next
End Sub
3. Pohranite Ivamar.
Analiza
2YGMHVPRSRPRXPHWRGH,WHPNROHNFLMH1DUXG]EDSURPLMHQLOLVYRMVWYR
.ROLFLQDREMHNWD.QMLJDSRVWRMHHJODQDNROHNFLMH=DWRVYRMVWYR.ROLFLQD
SRVWRMHLPODQRYLPDNROHNFLMHPRHPRSURPLMHQLWLQDRYDMQDLQEH]EULVDQMDL
SRQRYQHNUHDFLMHFLMHORJREMHNWDDWRQLVPRPRJOLXVOXDMXVYRMVWYD1DVORY"
Zato to je svojstvo Naslov objekta Knjiga dio argumenta Key, za razliku od
svojstva Kolicina, koje to nije.
Promjene u proceduri Form_QueryUnload
1. Nastavljamo kdirati frmGlavniObrazac.
2. Promijenite proceduru Form_QueryUnload:
Private Sub Form_QueryUnload(Cancel As Integer,
UnloadMode As Integer)
Set m_objNarudzba = Nothing
End Sub
3. Pohranite Ivamar.
Analiza
8PMHVWRHWLULUHWNDSRVHEQR]DVYDNLREMHNW.QMLJDVDGDLPDPRVDPRMHGDQ
redak kda...
Set m_objNarudzba = Nothing
SRPRXNRMHJDXNODQMDPRVYHREMHNWH.QMLJDXNROHNFLML1DUXG]EDXWUHQXWNX
kada se glavni obrazac zatvara.
106
m_strStariNaslov = ""
...za ponitenje varijable m_strStariNaslov.
Zato je potrebna ta promjena pozicije retka kda: lstKnjige.ListIndex = -1?
Taj redak kda ponitava odabir naslova u kontroli lstKnjige. Ako je on na
SRHWNXSURFHGXUHNDRSULMHSRQLWLWHRGDELUQDVORYDLQHHVHPRLGRJRGLWL
metoda Remove u kolekciji Narudzba.
Procedura Click ovog gumba Ponisti stavlja vrijednosti svojstava Value kontrola
FKHFNER[QDQXOX7RMHRNLGD]DPHWRGX5HPRYHXSURFHGXUL&OLFNNRQWUROD
FKHFNER[0HWRGD5HPRYHVHPRHGRJRGLWLVDPRDNRGRELMHYDOMDQHYULMHGQRVWL
preko oba svoja argumenta. Jedna vrijednost jest i naslov knjige, i te vrijednosti ne
bi bilo kada bi kd koji ponitava tu vrijednost bio na vrhu procedure.
Promjene kda procedure Click kontrole cmdIzracunaj
1. Nastavljamo kodirati frmGlavniObrazac.
2. 8QHVLWHVOMHGHHSURPMHQH
Private Sub cmdIzracunaj_Click()
Dim curUkupno As Currency
'Da li je korisnik odabrao naslov knjige?
If lstKnjige.Text = "" Then
MsgBox "Morate odabrati naslov knjige"
Exit Sub
End If
'Da li je korisnik odabrao jedan ili vie formata
knjige?
If chkFormatKnjige(0).Value = 0 And _
chkFormatKnjige(1).Value = 0 And _
chkFormatKnjige(2).Value = 0 And _
chkFormatKnjige(3).Value = 0 Then
MsgBox "Morate odabrati jedan ili vie " & _
"formata knjige"
Exit Sub
108
End If
'Da li je korisnik odabrao kolicinu?
If optKom(1).Value = False And _
optKom(2).Value = False Then
MsgBox "Morate odabrati kolicinu"
Exit Sub
End If
'Kad korisnik odabere E-learning
'upozorimo ga da uvijek ide samo jedan
'bez obzira odabere li kupac jedan ili dva kompleta
'formata knjige
If chkFormatKnjige(1).Value = 1 And
frmGlavniObrazac.Kom > 1 Then
MsgBox "Kupovina je ogranicena na 1 e-learning po "
& _
"narudzbi." & vbCrLf & _
"Cijena je tome prilagodjena"
End If
'Sad imamo sve elemente za racunanje ukupnog iznosa
'Izracunajmo cijenu svakom formatu pojedine knjige
curUkupno = m_objNarudzba.Ukupno(lstKnjige.Text, _
frmGlavniObrazac.Kom)
'Ako je iznos veci od nula, prikazi cijenu i
'ucini label vidljivim
If curUkupno > 0 Then
lblCijena.Caption = "Ukupan iznos je " & _
Format(curUkupno, "###,###.00")
lblCijena.Visible = True
End If
109
End Sub
3. Pohranite Ivamar. Pokrenite Ivamar. Ukoliko sve radi kao i ranije, uspjeli
ste ispisati novi kd bez greke. Program/Izlaz, zaporka: 1, 2, 3, 4.
Analiza
3URFHGXUDVHGRVWDVPDQMLODDOLWRMHSXQRYDQLMHSRMHGQRVWDYLODGRNUDMQRVWL
1LMHSRWUHEQRUDXQDWLFLMHQXNDRSULMHQLMHSRWUHEDQN{G]DSUHPRWDYDQMH
greaka. Dovoljna je jedna varijabla...
Dim curUkupno As Currency
LN{GXNRMHPXWRMYDULMDEOLSULGUXXMHPRYULMHGQRVWNRMXHL]EDFLWLPHWRGD
Ukupno class modula Narudzba...
curUkupno = m_objNarudzba.Ukupno(lstKnjige.Text, _
frmGlavniObrazac.Kom)
Funkcija 'Ukupno' ima dva argumenta. Ti argumenti joj moraju prenijeti
vrijednost svojstva Text kontrole lstKnjige (Naslov knjige) te vrijednost svojstva
Kom forme frmGlavniObrazac.
&LMHODORJLNDSURUDXQDFLMHQDMHXJUDHQDXREMHNWH.QMLJDL1DUXG]ED7DORJLND
]DWRYLHQLMHSRWUHEQDXSURFHGXULNRQWUROHFPG,]UDFXQDM1DWDMQDLQREMHNWL
SRVWDMXWRMHPRJXHYLHVDPRVWRMDQLQHRYLVQLRYDQMVNRPN{GXDVGUXJH
strane taj vanjski kd postaje krajnje jednostavan i nezahtjevan.
110
Lekcija 13
ActiveX
komponente
Ivamar Word
ActiveX komponente su class moduli kompajlirani i kao takvi stavljeni na
UDVSRODJDQMHNXSFX.XSDFQHPRHYLGMHWLN{GSDJDQHPRHQLPLMHQMDWL
$FWLYH;NRPSRQHQWHQDMHHQHPDMXVYRMHYLGOMLYRVXHOMHNDRWRVXIRUPH
6DGUHREMHNWHLYDQMVNRPVYLMHWXQXGHVYRMVWYDPHWRGHLGRJDDMHWLKREMHNDWD
$FWLYH;NRPSRQHQWHVOXH]DL]JUDGQMXGUXJLKDSOLNDFLMDLOL]DREDYOMDQMHQHNLK
funkcija.
8RYRMLVOMHGHRMOHNFLMLQDSUDYLWHPRVYRMH$FWLYH;NRPSRQHQWH3RPRX
$FWLYH;NRPSRQHQWHHPRWLVNDWLQDUXGEXL]DSOLNDFLMH,YDPDUX0LFURVRIW
:RUGXDRQGDHPRRGQDHJFODVVPRGXOD7H]LQDQDSUDYLWL$FWLYH;
komponentu i vidjeti kako ta ona radi s Excelom.
3RVWRMLHWLULWLSD$FWLYH;NRPSRQHQWL7RVX
ActiveX DLL
ActiveX EXE
ActiveX Document
ActiveX Controls
Predmet ove knjige su prve dvije: ActiveX DLL i ActiveX EXE. Obje se kreiraju
QDLGHQWLDQQDLQSDNDGQDSUDYLWHMHGQXLVWLPSRVWXSNRPPRHWHQDSUDYLWLL
GUXJX8HPXMHUD]OLNDL]PHXWLKGYLMX$FWLYH;NRPSRQHQWL"5D]OLNDMHX
VOMHGHHP
111
2VWDOHRVRELQHVXLPMHGQDNHDRGQRVHVHQDPRJXQRVWRGDELUDUHLPDUDGDJGMH
-HGQDNRPSRQHQWDRSVOXXMHYLHDSOLNDFLMDLVWRYUHPHQR.ROLNRJRGVH
DSOLNDFLMDLVWRYUHPHQRRWYRULLSR]RYHNRPSRQHQWXXPHPRULMXHVH
XLWDWLVDPRMHGQDNRPSRQHQWD
-HGQDNRPSRQHQWDRSVOXXMHVDPRMHGQXDSOLNDFLMX.ROLNRJRGVH
DSOLNDFLMDLVWRYUHPHQRRWYRULLSR]RYHNRPSRQHQWXWROLNRHVHSXWDX
PHPRULMXXLWDWLLNRPSRQHQWD
112
End Function
3. Pohranite projekt Ivamar.
Analiza
End If
Sve se ovo dogodilo nakon to je kupac pritisnuo kontrolu cmdIzracunaj. Najprije
se pojavila poruka, pa ukupna cijena na formi. Kada se ta ista metoda Ukupno
bude ponovo izvravala radi ispisa u Wordu, odgovor na ovaj kd...
If IsMissing(blnPoruka) Then
ELWHQHJDWLYDQLWLMHORVWUXNWXUH,IVHQHHL]YHVWL
blnPoruka = True
End If
SDDUJXPHQWEOQ3RUXNDQHHELWL
7UXH
LSRUXNDVHQHHSRQRYRL]YHVWL
Dodavanje svojstva Popust class modulu Narudzba
8WLVNDQRMHPRQDUXGELQDYHVWLLQIRUPDFLMXNDNRMHXFLMHQXXNOMXHQLSRSXVW
ako je kupac odabrao komplet. Zato je potrebno napraviti svojstvo Popust
kolekciji Narudzba, kako bi se taj podatak mogao koristiti u kdu izvan class
modula.
1. Otvoren je class modul Narudzba.
2. .UHLUDMWHVYRMVWYR3RSXVWFODVVPRGXOD1DUXG]EDSRPRXRYRJN{GD
Property Get Popust() As Boolean
If m_intPopust = 3 Then
Popust = True
Else
Popust = False
End If
End Property
3. Pohranite Ivamar.
Analiza
1LVPRPRUDOLGHNODULUDWLPRGXOYDULMDEOXPBLQW3RSXVWMHUMHLVWDYHGHNODULUDQDX
General Declarations.
1DMSULMHVPRGHNODULUDOLVYRMVWYR3RSXVWNDRWLSSRGDWDND%RROHDQWR]QDLGDH
YUDDWL7UXHLOL)DOVH
116
120
Background:=False, PrintToFile:=False
.ActiveWindow.Close savechanges:=False
End With
wdApp.Application.Quit
Set objKnjiga = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
lblCijena.Caption = strTiskam
lblCijena.BackColor = strBoja
End Sub
3. Pohranite Ivamar. Pokrenite Ivamar.
Napomena: U pisanju ovoga kda pomogao mi je Word i njegov Macro
5HFRUGHU2WYRULRVDP:RUGLXNOMXLR0DFUR5HFRUGHU7RROV0DFUR5HFRUG
1HZ0DFUR8VOMHGHHPNRUDNXPDFURXVDPGDRLPH
1DUXG]ED
LRGDEUDR2.
Tada sam napisao ovakav dokument:
122
=DXVWDYLRVDP0DFURSRPRXQDUHGEH7RROV0DFUR6WRS5HFRUGLQJ0DFUR
2GDEUDRVDPSRQRYRQDUHGEX7RROV0DFUR0DFURV2]QDLRPDFUR
1DUXG]ED
L
SULWLVQXRJXPE(GLW2WYRULRVHHGLWRU0LFURVRIW9LVXDO%DVLFLGHQWLQRJVXHOMD
NDRLVXHOMHQDHJDODWD9LVXDO%DVLF2YGMHMHULMHR9%$9LVXDO%DVLFIRU
$SSOLFDWLRQD9%L9%$VHRGOLQRUD]XPLMX.RSLUDRVDPFLMHOLN{GSURFHGXUH
Sub Narudzba() u proceduru Click kontrole cmdKupujem. Tada sam utipkao
SURPMHQHNRMHVX]QDDMQHDOLQH]DKWLMHYDMXSXQRYUHPHQD
Analiza
125
.Selection.ParagraphFormat.TabStops.Add
Position:=CentimetersToPoints(3.39) _
, Alignment:=wdAlignTabLeft,
Leader:=wdTabLeaderSpaces
.Selection.TypeText Text:=vbTab & "Kom"
.Selection.ParagraphFormat.TabStops.Add
Position:=CentimetersToPoints(7.2), _
Alignment:=wdAlignTabLeft,
Leader:=wdTabLeaderSpaces
.Selection.TypeText Text:=vbTab & "Cijena"
.Selection.ParagraphFormat.TabStops.Add
Position:=CentimetersToPoints(11.64 _
), Alignment:=wdAlignTabLeft,
Leader:=wdTabLeaderSpaces
.Selection.TypeText Text:=vbTab & "Iznos"
.Selection.TypeParagraph
.Selection.TypeParagraph
.Selection.Font.Bold = wdToggle
'Petlja za prolaze od objekta do objekta u
kolekciji Narudzba
Slijedi petlja For Each nad objekt kolekcijom m_objNarudzba...
For Each objKnjiga In m_objNarudzba
%LWHLVSLVDQDVYRMVWYD)RUPDWVYDNRJREMHNWD.QMLJDXQXWDUNROHNFLMH1DUXG]ED
Prvi prolaz petlje upisuje svojstvo Format prvog objekta Knjiga, drugi prolaz
SHWOMHGUXJRJREMHNWD.QMLJDLWDNRUHGRP3HWOMDHSURLRQROLNRSXWDNROLNRLPD
objekata Knjiga u kolekciji m_objNarudzba. Isto vrijedi i za ispis ostalih svojstava
objekata Knjiga - Kolicina i Cijena...
.Selection.TypeText Text:=objKnjiga.Format & vbTab
.Selection.TypeText Text:=Str(objKnjiga.Kolicina) &
vbTab
.Selection.TypeText Text:=Str(objKnjiga.Cijena) &
vbTab
.Selection.TypeText Text:=Str(objKnjiga.Cijena *
objKnjiga.Kolicina)
126
.Selection.TypeParagraph
Next
Ispis 100 crtica...
.Selection.TypeText Text:=String(100, "-")
Enter...
.Selection.TypeParagraph
7UL7DEVWRSDLYULMHGQRVWNRMXHL]EDFLWLPHWRGD8NXSQR
.Selection.TypeText Text:=vbTab & vbTab & vbTab & _
m_objNarudzba.Ukupno(lstKnjige.Text,
frmGlavniObrazac.Kom, False)
Enter...
.Selection.TypeParagraph
Koristimo svojstvo Popust za If strukturu u kojoj provjeravamo je li kupac
ostvario uvjete...
If m_objNarudzba.Popust = True Then
Ako je ostvario, slijedi ispis u Word dokumentu...
.Selection.TypeText Text:="U cijenu je uracunat
popust " & _
"na kupovinu kompleta. Hvala to " & _
"ste kupovali kod nas."
End If
'Tiskanje narudzbe
6OLMHGLN{GQDUHGEDSLVDXNRMLMHSULMDYOMHQNDRWHNXLXYDHPUDXQDOX8NROLNR
ELVWHHOMHOLYLGMHWLGRNXPHQWDQHLWLVNDWLJDRYDMN{GVWDYLWHXNRPHQWDU
dodavanjem apostrofa ispred redaka.
.Application.PrintOut FileName:="",
Range:=wdPrintAllDocument, _
Item:=wdPrintDocumentContent, Copies:=1,
Pages:="", _
PageType:=wdPrintAllPages, Collate:=True, _
127
Background:=False, PrintToFile:=False
.ActiveWindow.Close savechanges:=False
Posao na dokumentu Worda je zavren. Slijedi kraj strukture With...
End With
Zatvaramo Word...
wdApp.Application.Quit
Ponitavamo objekt varijable...
Set objKnjiga = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
9UDDPRVYRMVWYDNRQWUROHODEHOOEO&LMHQDQDSRHWQDVWDQMD
lblCijena.Caption = strTiskam
lblCijena.BackColor = strBoja
End Sub
128
Lekcija 14
ActiveX
komponente
Ivamar - Excel
Pravljenje ActiveX komponente od naeg class modula Tezina
1. Otvorite Ivamar.
2. Otvorite class modul Tezina.
3. 8QHVLWHSURPMHQHXN{GXR]QDHQHVMHQRP
Private Sub Class_Initialize()
On Error GoTo Preskoci
Dim strNaslovKnjige As String
Dim intTezinaKnjige As Integer
If App.Path = "\" Then
Open App.Path & "Tezina.txt" For Input As #1
Else
Open App.Path & "\Tezina.txt" For Input As #1
End If
Do While Not EOF(1)
129
Novost je...
Err.Raise Number:=vbObjectError + 512 + 1, _
Description:="Nije pronadjen dokument
Tezina.txt"
8JUDHQLREMHNWErr ima metodu Raise7DHPHWRGDSULMDYLWLJUHNXSURJUDPX
koji koristi ActiveX komponentu. Na tom je programu dalje, tj. na njegovu
SURJUDPHUXWRHLQLWLVWRPJUHNRP9DQRMHGDSURJUDPHUPRHSULPLWL
poruku o greci unutar ActiveX komponente.
130
=DWRVPRL]PLVOLOLQHNLQDEURMJUHNHSD]HLGDVHWDMEURMQHSRNORSLVYH
SRVWRMHLPEURMHYLPDX9LVXDO%DVLFX.DGDELVHSRNORSLRSRUXNDQHELL]LODL]
komponente i aplikacija koja koristi komponentu bi pala.
8VNRURHPRYLGMHWLNDNRHVHVWRPJUHNRPQRVLWLQDN{GX([FHOX
Kreiranje projekta ActiveX.DLL
1. File/New Project.
2. Pritisnite dva puta tipku mia na ActiveX DLL.
3. View/Project Explorer.
4. Pritisnite desnu tipku mia na Class1.
5. 8VNUDHQRPL]ERUQLNXRGDEHULWH5HPRYHFODVV
6. No.
6DGDHPRGRGDWLFODVVPRGXO7H]LQDX$FWLYH;'//
7. 3URMHFW$GG&ODVV0RGXOH([LVWLQJSURQDLWHPRGXO7H]LQD
8. Pritisnite dva puta tipku mia na class modul Tezina i isti se kopirao u
ActiveX.DLL.
131
9. 2]QDLWHFODVVPRGXO7H]LQDX$FWLYH;'//SULWLVQLWH)GDVHRWYRUL
prozor Properties.
10. Promijenite svojstvo Instancing od Private u MultiUse.
12. OK.
13. .RPSDMOLUDMWHYDXNRPSRQHQWXSRPRXQDUHGEH)LOH0DNH
IvamarTezina.dll.
132
17. Save.
Analiza
1DSUDYLOLVPRNRPSRQHQWX$FWLYH;'//7RMHSXWNRMLXYLMHNPRHWHSRQRYLWL
0MHVWRSRKUDQMLYDQMDNRPSRQHQWH$FWLYH;'//NDRL$FWLYH;(;(QLMHYDQR
3RKUDQMXMHWHQDORNDOQRPGLVNXJGMHHOLWH8WUHQXWNXSRKUDQMLYDQMD:LQGRZV
5HJLVWU\H]DSLVDWLSXWGRYDHNRPSRQHQWH7DNRHVYHDSOLNDFLMHQDYDHP
UDXQDOXNRMHSRGUDYDMXWHKQRORJLMX$FWLYH;YLGMHWLX5HIHUHQFHVYDX
komponentu.
Iz toga proizlazi da ne smijemo mijenjati mjesto na kojem je komponenta
pohranjena.
A sada iskoristimo nau komponentu ActiveX.DLL, najprije u nekom novom
projektu, a onda i u Excelu.
Novi projekt STANDARD.EXE i komponenta IvamarTezina.DLL
1. Pokrenite novi projekt Standard.EXE i na formu dodajte kontrolu
command button.
133
3. OK.
4. Pritisnite dva puta tipku mia na kontrolu command button i tipkajte ovaj
kd:
Private Sub Command1_Click()
Dim objTezina As New IvamarTezina.Tezina
objTezina.NaslovKnjige = "HTMLCDROM"
MsgBox "Tezina ovog formata knjige je " & _
objTezina.TezinaKnjige
Set objTezina = Nothing
End Sub
5. Pohranite projekt u mapu C:\Ivamar pod imenom Test komponente i
imenom forme Test komponente ActiveX.
6. Pokrenite projekt. Pritisnite Command1.
134
2YRMHRHNLYDQDSRUXNDMHUREMHNWXNRPSRQHQWLQLMHSURQDDRSRWUHEQX
datoteku Tezina.txt.
9. Unesite 'error handler' u svoj projekt:
Private Sub Command1_Click()
On Error GoTo Preskoci
Dim objTezina As New IvamarTezina.Tezina
objTezina.NaslovKnjige = "HTMLCDROM"
MsgBox "Tezina ovog formata knjige je " & _
objTezina.TezinaKnjige
Set objTezina = Nothing
Exit Sub
135
Preskoci:
Select Case Err.Number
Case -2147220991 'Datoteka nije nadjena
MsgBox "Program Ivamar nije pronasao datoteku. " &
_
"Pohranite datoteku Tezina.txt u istu mapu " &
_
"u kojoj je i Ivamar."
Unload Me
Exit Sub
Case Else
MsgBox "Neocekivana greska. Kontaktirajte
dobavljaca."
Unload Me
Exit Sub
End Select
End Sub
10. Pohranite projekt Test komponente.
11. Pritisnite Command1.
12. OK.
Programer projekta Test komponente tako se nosi s grekama u naoj komponenti
ActiveX.DLL.
13. Ponovo promijenite naziv datoteke u originalni Tezina.txt.
Analiza
Kako programer zna da naa komponenta stvara greku "File Not Found"?
Case -2147220991 'Datoteka nije nadjena
136
6. 8NOMXLWHQDXNRPSRQHQWX$FWLYH;'//,YDPDU7H]LQD
7. OK.
8. Insert/Module u Visual Basic Editoru.
9. Tipkajte ovaj kd u modul Visual Basic Editor:
Sub Tezina()
Dim objTezina As New IvamarTezina.Tezina
Dim intBrojac As Integer
Range("A1").Select
ActiveCell.FormulaR1C1 = "Ivamar - tezine pojedinih
knjiga i formata"
Range("A1").Font.Bold = True
For intBrojac = 4 To 18
Range("A" & intBrojac).Select
objTezina.NaslovKnjige = ActiveCell.FormulaR1C1
Range("B" & intBrojac).Select
ActiveCell.FormulaR1C1 = objTezina.TezinaKnjige
Next intBrojac
Set objTezina = Nothing
End Sub
10. Zatvorite Visual Basic Editor i vratite se u Excel.
11. 2GDEHULWH7RROV0DFUR0DFURVR]QDLWHPDNUR7H]LQD5XQ
12. .RPSRQHQWD$FWLYH;'//,YDPDU7H]LQDMHL]EDFLODVYHWHLQHQD
SUHGYLHQRPMHVWRX([FHOX
138
Analiza
141