45
10. POGLAVLJE Programiranje sastavnim dijelovima Trebate li ponekad u va{oj Visual Basic aplikaciji pru`iti istu ra{~lambu i sposobnosti prora~unavanja kakve pru`a Microsoft Excel? Mo`da bi voljeli oblikovati dokumente kori{tenjem alata za oblikovanje Microsoft Worda, ili spremati podatke i upravljati nji- ma kori{tenjem Microsoft Jet mehanizma za baze podataka. Jo{ bolje, biste li voljeli biti u mogu}nosti stvarati ili kupovati standardne sastavne dijelove, pa ih upotreblja- vati u mnogim aplikacijama bez potrebe da ih mijenjate? Sve to i vi{e mo`e se ostvariti gradnjom va{ih aplikacija kori{tenjem ActiveX sastav- nih dijelova. Sastavni dio tipa ActiveX (ActiveX component) je dio programskog koda i podataka koji se mo`e koristiti vi{e puta i s~injen je od jednog ili vi{e objekata stvore- nih kori{tenjem ActiveX tehnologije. Va{e aplikacije mogu upotrebljavati postoje}e sa- stavne dijelove, kao {to su oni koji su uklju~eni u aplikacije Microsoft Office-a, sastav- ne dijelove koda, ActiveX dokumente, ili ActiveX kontrole (prije zvane OLE kontrole) koje pru`aju razni prodava~i. Ili, ako imate Visual Basic, verzije Professional ili Enterprise, mo`ete stvoriti svoje vlastite ActiveX kontrole. Za sastavne dijelove koji podr`avaju povezivanje i umetanje objekata, mo`ete ubaciti objekte u va{e aplikacije bez pisanja ikakvog koda kori{tenjem vidljivog su~elja sa- stavnog dijela. U va{u aplikaciju mo`ete ubaciti objekt koji podr`ava OLE kori{tenjem kontrole OLE spremnika ili dodavanjem klase objekta u alatni okvir. Kako bi potpuno shvatili ActiveX sastavne dijelove, prvo bi se trebali upoznati s na~i- nom rada s klasama, objektima, svojstvima i postupcima, {to je obja{njeno u 9. poglavlju “Programiranje objektima”. Sadr`aj Tipovi ActiveX sastavnih dijelova. Poslu`itelji vrste u-procesu i izvan-procesa. Rad s ActiveX sastavnim dijelovima. Stvaranje pokaziva~a na objekt. Kori{tenje svojstava, postupaka i doga|aja objekta. Otpu{tanje ActiveX sastavnog dijela. Kretanje kroz modele objekata.

10 - programiranje sastavnim dijelovima

Embed Size (px)

DESCRIPTION

Handbook

Citation preview

Page 1: 10 - programiranje sastavnim dijelovima

1 0 . P O G L A V L J E

Programiranje sastavnim dijelovima

Trebate li ponekad u va{oj Visual Basic aplikaciji pru`iti istu ra{~lambu i sposobnostiprora~unavanja kakve pru`a Microsoft Excel? Mo`da bi voljeli oblikovati dokumentekori{tenjem alata za oblikovanje Microsoft Worda, ili spremati podatke i upravljati nji-ma kori{tenjem Microsoft Jet mehanizma za baze podataka. Jo{ bolje, biste li voljelibiti u mogu}nosti stvarati ili kupovati standardne sastavne dijelove, pa ih upotreblja-vati u mnogim aplikacijama bez potrebe da ih mijenjate?

Sve to i vi{e mo`e se ostvariti gradnjom va{ih aplikacija kori{tenjem ActiveX sastav-nih dijelova. Sastavni dio tipa ActiveX (ActiveX component) je dio programskog koda ipodataka koji se mo`e koristiti vi{e puta i s~injen je od jednog ili vi{e objekata stvore-nih kori{tenjem ActiveX tehnologije. Va{e aplikacije mogu upotrebljavati postoje}e sa-stavne dijelove, kao {to su oni koji su uklju~eni u aplikacije Microsoft Office-a, sastav-ne dijelove koda, ActiveX dokumente, ili ActiveX kontrole (prije zvane OLE kontrole)koje pru`aju razni prodava~i. Ili, ako imate Visual Basic, verzije Professional iliEnterprise, mo`ete stvoriti svoje vlastite ActiveX kontrole.

Za sastavne dijelove koji podr`avaju povezivanje i umetanje objekata, mo`ete ubacitiobjekte u va{e aplikacije bez pisanja ikakvog koda kori{tenjem vidljivog su~elja sa-stavnog dijela. U va{u aplikaciju mo`ete ubaciti objekt koji podr`ava OLE kori{tenjemkontrole OLE spremnika ili dodavanjem klase objekta u alatni okvir.

Kako bi potpuno shvatili ActiveX sastavne dijelove, prvo bi se trebali upoznati s na~i-nom rada s klasama, objektima, svojstvima i postupcima, {to je obja{njeno u 9.poglavlju “Programiranje objektima”.

Sadr`aj• Tipovi ActiveX sastavnih dijelova.

• Poslu`itelji vrste u-procesu i izvan-procesa.

• Rad s ActiveX sastavnim dijelovima.

• Stvaranje pokaziva~a na objekt.

• Kori{tenje svojstava, postupaka i doga|aja objekta.

• Otpu{tanje ActiveX sastavnog dijela.

• Kretanje kroz modele objekata.

Page 2: 10 - programiranje sastavnim dijelovima

• Rukovanje pogre{kama tijekom rada u ActiveX sastavnim dijelovima.

• Rukovanje zahtjevima u tijeku za ActiveX sastavni dio.

• Kori{tenje vidljivog su~elja sastavnih dijelova.

Su~elja: Geofact.vbp i Olecont.vbpVe}ina pojmova u ovom poglavlju prikazana je primjerima aplikacija Geofact.vbp iOlecont.vbp. Primjeri aplikacija nalaze se u direktoriju Samples.

Tipovi ActiveX sastavnih dijelovaSastavni dijelovi tipa ActiveX daju vam snagu za sastavljanje usavr{enih aplikacija izdijelova koji ve} postoje. Va{e Visual Basic aplikacije mogu uklju~ivati nekoliko tipo-va ActiveX sastavnih dijelova:

• Aplikacije koje podr`avaju ActiveX tehnologiju, kao Microsoft Excel, MicrosoftWord i Microsoft Access, pribavljaju objekte kojima mo`ete programski upravljatiiz svoje Visual Basic aplikacije. Na primjer, u va{oj aplikaciji mo`ete upotrijebitisvojstva, postupke i doga|aje prora~unske tablice Microsoft Excela, dokumentaMicrosoft Worda ili baze podataka Microsoft Accessa.

• Sastavni dijelovi koda pru`aju biblioteke programabilnih objekata. Na primjer, sa-stavni dio koda mo`e uklju~ivati biblioteku specijaliziranih financijskih funkcija zakorisnike prora~unske tablice, ili elemente korisni~kog su~elja, kao dijalo{ki okviri,koji su zajedni~ki mnogim aplikacijama. Za razliku od objekta u aplikaciji kojaomogu}uje ActiveX tehnologiju, objekt u sastavnom dijelu koda mo`e raditi u istomprocesu kao va{a aplikacija, omogu}uju}i br`i pristup objektu.

• Mo`ete dodati osobine bez potrebe da ih sami stvarate, kori{tenjem ActiveX kontro-la kao sastavnih dijelova. ActiveX kontrole su dostupne od velikog brojaproizvo|a~a i pru`aju puno specijaliziranih osobina, kao prikazivanje kalendara naformi ili ~itanje podataka posebnog oblika.

• ActiveX dokumenti vam omogu}uju stvaranje interaktivnih Internet aplikacija. Mo-`ete stvoriti forme koje }e biti sadr`ane unutar Internet Explorera. ActiveX doku-menti mogu prikazivati okvire s porukama i podre|ene forme te sadr`avati ActiveXkontrole. ActiveX dokumenti mogu tako|er djelovati kao sastavni dijelovi koda. Zauvod korak po korak u ActiveX dokumente, pogledajte 2. dio “Stvaranje ActiveXdokumenta” u vodi~u Microsoft Visual Basic 6.0 Component Tools Guide bibliotekeMicrosoft Visual Basic 6.0 Reference Library, dostupne u Professional i Enterpriseverzijama.

Napomena Kao dodatak Internet aplikacijama koje koriste ActiveX dokumente,mo`ete stvoriti klijentske i poslu`iteljske Internet aplikacije kori{tenjem spajanjakoda Visual Basica i HTML stranica. Pogledajte “Uvod u Internet aplikacije” u 5.dijelu “Gradnja Internet aplikacija” u vodi~u Microsoft Visual Basic 6.0 ComponentTools Guide za vi{e informacija o va{im mogu}nostima kod stvaranja Internet iintranet aplikacija.

II. dio [to mo`ete napraviti s Visual Basicom

500 Vodi~ za programere

Page 3: 10 - programiranje sastavnim dijelovima

Neki ActiveX sastavni dijelovi izvode se u istom procesu kao i va{a aplikacija, dok sedrugi izvode u odvojenom procesu. Za vi{e informacija, pogledajte “Poslu`itelji vrsteu-procesu i izvan-procesa”, u stalnoj pomo}i.

Kao dodatak sastavnim dijelovima u postoje}im aplikacijama koje omogu}uju ActiveXtehnologiju, bibliotekama sastavnih dijelova koda, ActiveX kontrolama i ActiveXdokumentima mo`ete stvoriti svoje vlastite sastavne dijelove. Za vi{e informacija ostvaranju va{ih vlastitih ActiveX sastavnih dijelova, pogledajte “Stvaranje ActiveXsastavnih dijelova” u vodi~u Microsoft Visual Basic 6.0 Component Tools Guide bi-blioteke Microsoft Visual Basic 6.0 Reference Library, dostupne u Professional iEnterprise verzijama.

Poslu`itelji vrste u-procesu i izvan-procesaActiveX sastavni dijelovi sura|uju s va{om aplikacijom – i me|usobno – kroz odnosklijent/poslu`itelj. Klijent je programski kod aplikacije ili sastavni dio koji koristiosobine sastavnog dijela. Poslu`itelj je sastavni dio i njegovi pridru`eni objekti. Naprimjer, pretpostavimo da va{a aplikacija koristi ActiveX kontrolu za pru`anje stan-dardne forme Djelatnik za vi{e aplikacija u va{oj tvrtki. ActiveX kontrola koja pru`aformu Djelatnik je poslu`itelj; aplikacije koje koriste kontrolu su njezini klijenti.

Ovisno o tome kako je ActiveX sastavni dio ostvaren, on se mo`e izvoditi u istom pro-cesu kao i njegova klijentska aplikacija, ili u drugom procesu. Na primjer, ako va{aaplikacija koristi sastavni dio koji je dio aplikacije koja podr`ava ActiveX tehnologiju,izvodi se u odvojenom procesu. Ako je sastavni dio bio ostvaren kao programabilanobjekt u dinami~ki povezivoj biblioteci (datoteka .dll), izvodit }e se u istom procesukao va{a aplikacija.

Op}enito, ako je ActiveX sastavni dio bio ostvaren kao dio izvr{ne datoteke (datoteka.exe), on je poslu`itelj vrste izvan-procesa i izvodi se u svom vlastitom procesu. Ako jebio ostvaren kao dinami~ki poveziva datoteka, on je poslu`itelj u-procesu i izvodi se uistom procesu kao i klijentska aplikacija. Aplikacije koje koriste poslu`itelje vrste u-procesu obi~no se br`e izvode nego one koje koriste poslu`itelje vrste izvan-procesabudu}i da aplikacije ne trebaju prelaziti granice procesa kako bi upotrijebile svojstva,postupke i doga|aje objekta.

Sljede}a tablica prikazuje kako mo`ete ostvariti razli~ite tipove sastavnih dijelova:

sastavni dio vrsta poslu`itelja

Aplikacija koja podr`ava ActiveX izvan-procesa

Sastavni dio koda ili u-procesu ili izvan-procesa

ActiveX kontrola u-procesu

ActiveX dokument ili u-procesu ili izvan-procesa

Upotreba sastavnih dijelova vrste u-procesu je jedan na~in pobolj{avanja izvo|enjava{e aplikacije. Drugi na~in pobolj{avanja izvo|enja je kori{tenje ranog povezivanja.Za vi{e informacija, pogledajte “Ubrzavanje pokaziva~a objekata” kasnije u ovompoglavlju.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 501

Page 4: 10 - programiranje sastavnim dijelovima

Rad s ActiveX sastavnim dijelovimaS objektima koje pru`aju ActiveX sastavni dijelovi radite na uglavnom isti na~in nakoji radite i s ostalim objektima. Pokaziva~ objekta dodjeljujete varijabli, te zatimpi{ete kod koji koristi postupke, svojstva i doga|aje objekta. Me|utim, postoje nekestvari kojih trebate biti svjesni kad radite s objektima koje pru`aju sastavni dijelovi.

Ova tema pru`a pregled najva`nijih poslova za rad s objektima koje pru`aju sastavnidijelovi i primjer je kori{tenja objekata u aplikaciji koja podr`ava ActiveX tehnologiju.Za detalje o svakom poslu, pogledajte pripadaju}u temu opisanu ispod svake stavkeposla.

Kako upotrijebiti ve}inu objekata koje pru`aju ActiveX sastavni dijelovi

1. Stvorite pokaziva~ na objekt kojeg `elite upotrijebiti. Kako }ete to napraviti ovisi otipu objekta te isporu~uje li ActiveX sastavni dio tipsku biblioteku.

Za vi{e informacija Pogledajte “Stvaranje pokaziva~a na objekt”, kasnije uovom poglavlju.

2. Napi{ite programski kod kori{tenjem postupaka, svojstava i doga|aja objekta.

Za vi{e informacija Pogledajte “Kori{tenje svojstava, postupaka i doga|ajaobjekta”, kasnije u ovom poglavlju.

3. Otpustite objekt kad ste gotovi s njegovim kori{tenjem.

Za vi{e informacija Pogledajte “Otpu{tanje ActiveX sastavnog dijela”, kasnijeu ovom poglavlju.

4. Stvorite rukovatelje pogre{kama.

Za vi{e informacija Pogledajte “Rukovanje pogre{kama tijekom rada u ActiveXsastavnim dijelovima”, kasnije u ovom poglavlju.

Na primjer, pretpostavimo da ste stvorili formu s tri okvira s tekstom (Text1, Text2 iText3) i naredbenim gumbom (Command1), te u svom projektu dodali pokaziva~ nabiblioteku Microsoft Excel 8.0 Object Library. Nakon toga mo`ete dodati kod potpro-gramu doga|aja Command1_Click naredbenog gumba koji koristi postupak MicrosoftExcel Formula za zbrajanje dva broja upisana u okvirima Text1 i Text2, prikazuju}irezultat u okviru Text3. Kako bi izbjegli pogre{ku pogre{nog tipa podatka, mo`etemaknuti podrazumijevani tekst u svakom okviru s tekstom tako da njihova svojstvaText postavite na prazan string:

Private Sub Command1_Click()‘ Odre|ivanje varijabli objekta za Microsoft Excel,‘ radnu knjigu te aplikacije i objekte radnog lista.Dim xlApp As Excel.ApplicatonDim xlBook As Excel.WorkbookDim xlSheet As Excel.Worksheet

‘ Dodjela pokaziva~a objekta varijablama.‘ Upotrijebite postupke Add za stvaranje

II. dio [to mo`ete napraviti s Visual Basicom

502 Vodi~ za programere

Page 5: 10 - programiranje sastavnim dijelovima

‘ novih objekata radne knjige i radnog lista.Set xlApp = New Excel.ApplicationSet xlBook = xlApp.Workbooks.AddSet xlSheet = xlBook.Worksheets.Add

‘ Dodjela vrijednosti unesenih u okvire‘ s tekstom }elijama Microsoft Excela.xlSheet.Cells(1, 1).Value = Text1.TextxlSheet.Cells(2, 1).Value = Text2.Text

‘ Upotreba postupka Formula za zbrajanje‘ vrijednosti u Microsoft Excelu.xlSheet.Cells(3, 1).Formula = “=R1C1 + R2C1”Text3.Text = xlSheet.Ceels(3, 1)

‘ Snimanje radnog lista.xlSheet.SaveAs “c:\Temp.xls”

‘ Zatvaranje radne knjige.xlBook.Close

‘ Zatvaranje Microsoft Excela postupkom Quit.xlApp.Quit

‘ Otpu{tanje objekata.Set xlApp = NothingSet xlBook = NothingSet xlSheet = Nothing

End Sub

Zbog jednostavnosti, ovaj primjer ne uklju~uje rukovanje pogre{kama. Me|utim, vrloje preporu~ljivo da uklju~ite rukovanje pogre{kama u aplikacije koje koriste objektepru`ene od ActiveX sastavnih dijelova.

Stvaranje pokaziva~a na objektPrije nego {to u svojoj aplikaciji mo`ete koristiti svojstva, postupke i doga|aje objekta,najprije morate odrediti varijablu objekta, te zatim varijabli dodijeliti pokaziva~ objek-ta. Kako }ete dodijeliti pokaziva~ objekta ovisi o dva ~imbenika:

• Isporu~uje li ActiveX sastavni dio tipsku biblioteku. Tipska biblioteka ActiveX sa-stavnog dijela sadr`i definicije svih objekata koje pru`a sastavni dio, uklju~uju}idefinicije svih dostupnih postupaka, svojstava i doga|aja. Ako ActiveX sastavni diopru`a tipsku biblioteku, u svoj projekt Visual Basica trebate dodati pokaziva~ na tip-sku biblioteku prije nego {to mo`ete upotrebljavati objekte biblioteke.

• vJe li rije~ o objektu najvi{e razine, objektu stvorenom izvana (externally creatableobject) ili ovisnom objektu (dependent object). Pokaziva~ vanjski stvorenom objektumo`ete dodijeliti izravno, dok se pokaziva~i na ovisne objekte dodjeljuju posredno.

Ako je objekt stvoren izvana, pokaziva~ objekta mo`ete dodijeliti varijabli kori{tenjemklju~ne rije~i New, te funkcija CreateObject ili GetObject u izrazu Set izvan sastavnog

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 503

Page 6: 10 - programiranje sastavnim dijelovima

dijela. Ako je objekt ovisan objekt, pokaziva~ objekta dodjeljujete kori{tenjem postup-ka iz objekta vi{e razine u izrazu Set.

U Microsoft Excelu, na primjer, objekt Application je objekt stvoren izvana – mo`etemu dodijeliti pokaziva~ izravno iz va{e Visual Basic aplikacije kori{tenjem klju~nerije~i New, te funkcija CreateObject ili GetObject u izrazu Set. Objekt Range, suprotnotome, je ovisan objekt – dodjeljujete mu pokaziva~ kori{tenjem postupka Cells objektaWorksheet u izrazu Set. Za vi{e informacija o objektima stvorenim izvana i ovisnimobjektima, pogledajte “Kretanje kroz modele objekata”, kasnije u ovom poglavlju.

Ako je klasa objekta uklju~ena u tipsku biblioteku, br`e izvo|enje va{e aplikacijemo`ete posti}i tako da stvorite pokaziva~ objekta upotrebom varijable te odre|eneklase. Ina~e, morate upotrijebiti varijablu op}e klase Object, rezultat ~ega je kasnopovezivanje. Za vi{e informacija, pogledajte “Ubrzavanje pokaziva~a objekata”, kasni-je u ovom poglavlju.

Kako stvoriti pokaziva~ na objekt definiran u tipskoj biblioteci

1. U izborniku Project odaberite References.

2. U dijalo{kom okviru References, odaberite ime ActiveX sastavnog dijela kojisadr`ava objekte koje `elite upotrijebiti u svojoj aplikaciji.

3. Mo`ete upotrijebiti gumb Browse za tra`enje datoteke tipske biblioteke koja sadr`ipotreban objekt. Tipske biblioteke imaju datoteke s nastavcima imena .tlb ili .olb.Izvr{ne datoteke (.exe) i dinami~ki povezive biblioteke (.dll) tako|er mogu pru`ititipske biblioteke, pa mo`ete potra`iti i datoteke s tim nastavcima imena.

Ako niste sigurni podr`ava li aplikacija ActiveX tehnologiju i pru`a li tipsku biblio-teku, poku{ajte dodati pokaziva~ na nju kori{tenjem gumba Browse. Ako pokaziva~ne uspije, Visual Basic }e prikazati poruku pogre{ke “Ne mogu dodati pokaziva~ naozna~enu datoteku” (Can’t add, a reference to the specified file), ukazuju}i da tips-ka biblioteka ne postoji. Za vi{e informacija o radu s objektima koji nisu udru`eni stipskim bibliotekama, pogledajte “Stvaranje pokaziva~a na objekt”, ranije.

4. U izborniku View, odaberite Object Browser kako bi vidjeli pokazanu tipsku bibli-oteku. Odaberite odgovaraju}u tipsku biblioteku s liste Project/Library. U svojojaplikaciji mo`ete upotrijebiti sve objekte, postupke i svojstva ispisana u pretra`i-va~u objekata.

Za vi{e informacija Pogledajte “Pretra`ivanje tipskih biblioteka ActiveX sas-tavnih dijelova”, kasnije u ovom poglavlju.

5. Odredite varijablu objekta klase objekta. Na primjer, mogli bi odrediti varijabluklase Excel.Chart za upu}ivanje na objekt Microsoft Excel Chart.

Dim xlChart As Excel.Chart

Za vi{e informacija Pogledajte “Odre|ivanje varijable objekta”, kasnije u ovompoglavlju.

6. Dodijelite pokaziva~ objekta varijabli kori{tenjem klju~ne rije~i New, funkcijaCreateObject ili GetObject u izrazu Set. Za vi{e informacija, pogledajte “Dodjelapokaziva~a objekta varijabli”, kasnije u ovom poglavlju.

II. dio [to mo`ete napraviti s Visual Basicom

504 Vodi~ za programere

Page 7: 10 - programiranje sastavnim dijelovima

Ako je objekt ovisan objekt, dodijelite pokaziva~ objekta kori{tenjem postupka objektavi{e razine u izrazu Set.

Kako stvoriti pokaziva~ na objekt koji nije definiran u tipskoj biblioteci

1. Odredite varijablu objekta tipom podatka Object.

Budu}i da objekt nije povezan s tipskom bibliotekom, ne}ete mogu}i koristiti pre-tra`iva~ objekata kako bi vidjeli svojstva, postupke i doga|aje objekta. Trebateznati koja svojstva, postupke i doga|aje pru`a objekt, uklju~uju}i sve postupke zastvaranje pokaziva~a na ovisan objekt.

Za vi{e informacija Pogledajte “Odre|ivanje varijable objekta”, kasnije u ovompoglavlju.

2. Dodijelite pokaziva~ objekta varijabli kori{tenjem funkcija CreateObject iliGetObject u izrazu Set. Za vi{e informacija, pogledajte “Dodjela pokaziva~a objektavarijabli”, kasnije u ovom poglavlju.

Ako je objekt ovisan objekt, dodijelite pokaziva~ objekta kori{tenjem postupka objektavi{e razine u izrazu Set.

Nepouzdani pokaziva~i i prednost pokaziva~aKad se u programskom kodu upu}ujete na konstantu ili objekt, Visual Basic tra`i kon-stantu ili klasu objekta u svakoj tipskoj biblioteci odabranoj u dijalo{kom okviru Refe-rences redoslijedom po kojem su tipske biblioteke prikazane. Ako dvije tipske biblio-teke sadr`e konstante ili klase s istim imenima, Visual Basic upotrebljava odre|ivanjepru`eno od tipske biblioteke koja je prije izlistana u okviru Available References.

Slika 10.1 Dijalo{ki okvir References

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 505

Page 8: 10 - programiranje sastavnim dijelovima

Najbolji na~in rukovanja mogu}im nepouzdanim pokaziva~ima je izri~ito odre|ivanjetipske biblioteke koja pru`a konstantu ili klasu kad je upotrebljavate. Na primjer, kon-stanta vbCancel ima razli~ite vrijednosti za tipske biblioteke Visual Basica i VisualBasica za aplikacije. Sljede}i programski kod prikazuje potpuno ozna~ene i nepouz-dane pokaziva~e na konstantu vbCancel:

‘ Ispis konstante vbCancel Visual Basica.Debug.Print “VB.vbCancel = “; VB.vbCancel‘ Ispis konstante vbCancel Visual Basica za aplikacije.Debug.Print “VBA.vbCancel = “; VBA.vbCancel‘ Nepouzdan pokaziva~ ispisuje vrijednost konstante‘ vbCancel koja se prva pojavljuje u najgornjoj‘ tipskoj biblioteci liste Available References.Debug.Print “vbCancel = “; vbCancel

Sljede}i primjer programskog koda prikazuje potpuno ozna~ena i nepouzdana odre-|ivanja za varijablu objekta Application. Ako se u okviru Available References prijepojavi Microsoft Word nego Microsoft Excel, xlApp2 }e biti odre|ena kori{tenjemklase Microsoft Word Application prije nego kori{tenjem klase Microsoft ExcelApplication.

‘ Potpuno ozna~eno odre|ivanje varijable objekta.Dim xlApp1 As Excel.Application‘ Nepouzdano odre|ivanje varijable objekta.Dim xlApp2 As Application

‘ Dodjela pokaziva~a objekta.Set xlApp1 = New Excel.Application‘ Sljede}a linija stvara pogre{ku pogre{nog tipa podatka.Set xlApp2 = xlApp1

Mo`da vam je primamljivo rukovanje mogu}im nepouzdanim pokaziva~ima promje-nom redoslijeda po kojem Visual Basic tra`i pokaziva~e. Dijalo{ki okvir Referencesuklju~uje dva gumba Priority koja vam omogu}uju pomicanje tipske biblioteke premagore u listi, tako da }e njene konstante i klase biti prona|ene prije nego konstante iklase istih imena ni`e u listi. Me|utim, promjena redoslijeda prednosti mo`e uzroko-vati neo~ekivane probleme u va{im aplikacijama ako postoje drugi nepouzdani pokazi-va~i. Op}enito, bolje je izri~ito odrediti tipsku biblioteku u svim pokaziva~ima.

Napomena Sintaksa Excel.Application za ukazivanje na klasu Microsoft ExcelApplication nije podr`ana u verzijama ranijim od Microsoft Excela 97. Kako biukazali na klasu Microsoft Excel Application u Microsoft Excelu 5.0 i MicrosoftExcelu 95, upotrijebite umjesto toga sintaksu [_ExcelApplication]. Na primjer:

Set xlApp = New [_ExcelAplication]

II. dio [to mo`ete napraviti s Visual Basicom

506 Vodi~ za programere

Page 9: 10 - programiranje sastavnim dijelovima

Pretra`ivanje tipskih biblioteka ActiveX sastavnih dijelovaAko ActiveX sastavni dio pru`a tipsku biblioteku, mo`ete upotrijebiti pretra`iva~objekata kako bi vidjeli klase sastavnog dijela, kao i svojstva, postupke, doga|aje ikonstante pridru`ene s objektima svake klase.

Kako vidjeti klase dostupne u tipskoj biblioteci ActiveX sastavnog dijela

1. Ako to do sada niste napravili, dodajte svom projektu Visual Basica pokaziva~ natipsku biblioteku.

Za vi{e informacija Pogledajte “Stvaranje pokaziva~a na objekt”, ranije u ovompoglavlju.

2. Otvorite pretra`iva~ objekata i odaberite ime tipske biblioteke iz listeProject/Library.

Pretra`iva~ objekata }e prikazati dostupne klase u listi Classes.

Slika 10.2 Pretra`iva~ objekata

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 507

Na primjer, kako bi vidjeli klase dostupne u tipskoj biblioteci Data Access Object(DAO), dodajte pokaziva~ na biblioteku u dijalo{kom okviru References, te odaberiteDAO u listi Project/Library pretra`iva~a objekata.

Page 10: 10 - programiranje sastavnim dijelovima

Kako vidjeti elemente klase

• Odaberite ime klase iz liste Classes u pretra`iva~u objekata.

Pretra`iva~ objekata }e prikazati elemente klase u listi Member of.

Ako tra`ite informaciju o pojedinoj klasi ili elementu u tipskoj biblioteci, upotrijebiteosobinu Search pretra`iva~a objekata.

Kako upotrijebiti osobinu Search

• Upi{ite {to tra`ite u okvir Search Text, pa zatim kliknite gumb Search.

Pretra`iva~ objekata }e prikazati okvir Search Results pokazuju}i biblioteke,klase i elemente prona|ene tra`enjem.

Odre|ivanje varijable objektaPrije nego {to mo`ete koristiti svojstva, postupke i doga|aje objekta kojeg pru`aActiveX sastavni dio, najprije morate odrediti varijablu objekta. Na~in na koji odre-–|ujete varijablu objekta ovisi o tome isporu~uje li ActiveX sastavni dio tipsku bib-lioteku ili ne.

Kako odrediti varijablu za objekt definiran u tipskoj biblioteci

1. Dodajte va{em Visual Basic projektu pokaziva~ na tipsku biblioteku. Za vi{e infor-macija o dodavanju pokaziva~a na tipsku biblioteku, pogledajte “Stvaranje pokazi-va~a na objekt”, ranije u ovom poglavlju.

2. Odredite ime klase koju pru`a ta tipska biblioteka u va{em odre|ivanju varijable.Odre|ivanje varijable objekta specifi~ne klase mo`e ubrzati pokaziva~e objekta.Upotrijebite sljede}u sintaksu:

Dim varijabla As [New] klasa

Argument klasa mo`e biti sastavljen od dva dijela, u obliku sastavnidio.klasa.

dio opis

sastavnidio Ime sastavnog dijela koji dobavlja objekt. Izbori su prikazani u listi Project/Library pretra`iva~a objekata.

klasa Ime klase objekta (pru`a ga tipska biblioteka sastavnog dijela). Izbori su prikazani u okviru Classes/Modules pretra`iva~a objekata.

Na primjer, mo`ete odrediti varijablu za objekt Microsoft Excel Chart na jedan odsljede}a sva na~ina:

Dim xlChart As ChartDim xlChart As Excel.Chart

II. dio [to mo`ete napraviti s Visual Basicom

508 Vodi~ za programere

Page 11: 10 - programiranje sastavnim dijelovima

Ako varijablu objekta odredite kori{tenjem klju~ne rije~i New, Visual Basic }e auto-matski stvoriti objekt i dodijeliti pokaziva~ objekta kad prvi put upotrijebite varijablu.Na primjer, sljede}i izrazi dodjeljuju pokaziva~ na novi objekt DAO tablice varijablitxtNarud`be, postavljaju}i svojstvo tablice Name na “Narud`be”:

Dim tdfNarud`be As New TableDeftdfNarud`be.Name = “Narud`be”

Napomena Upotreba varijabli odre|enih kori{tenjem klju~ne rije~i New mo`eusporiti va{u aplikaciju. Svaki put kad Visual Basic otkrije varijablu odre|enu ko-ri{tenjem klju~ne rije~i New, mora ispitati je li pokaziva~ objekta ve} bio dodijeljenvarijabli ili nije.

Kako odrediti varijablu objekta za objekt koji nije definiran u tipskoj biblioteci

• Odredite varijablu objekta op}om klasom Object, kako slijedi:

Dim varijabla As Object

Na primjer, varijabla objSvaki u sljede}em odre|ivanju mo`e biti upotrijebljena zaobjekt Microsoft Excel Chart ili svaki drugi objekt kojeg pru`a ActiveX sastavni dio:

Dim objSvaki As Object

Glavna razlika izme|u odre|ivanja varijable specifi~nom klasom i odre|ivanja vari-jable op}om klasom Object je u tome kako ActiveX povezuje varijablu s objektom.Kad odredite varijablu op}e klase Object, ActiveX mora upotrijebiti kasno poveziva-nje. Kad odredite varijablu objekta s specifi~nom klasom, ActiveX koristi rano povezi-vanje, koje mo`e ubrzati izvo|enje objekta. Za vi{e informacija, pogledajte“Ubrzavanje pokaziva~a objekata”, kasnije u ovom poglavlju.

Za vi{e informacija Za vi{e informacija o odre|ivanju varijabli objekata, pogleda-jte “Naredba Dim” u dijelu Microsoft Visual Basic 6.0 Language Reference bibliotekeMicrosoft Visual Basic 6.0 Reference Library. Za vi{e informacija o dodjeljivanjupokaziva~a objekta varijabli, pogledajte idu}i odlomak “Dodjela pokaziva~a objektavarijabli”.

Dodjela pokaziva~a objekta varijabliNakon {to odredite varijablu objekta, morate dodijeliti pokaziva~ objekta varijabli prijenego {to mo`ete upotrebljavati svojstva, postupke i doga|aje objekta. Novi pokaziva~objekta mo`ete dodijeliti na nekoliko na~ina:

• Ako odredite varijablu kori{tenjem klju~ne rije~i New, Visual Basic }e automatskistvoriti novi pokaziva~ objekta kad prvi put upotrijebite varijablu.

• Pokaziva~ na novi objekt mo`ete dodijeliti u izrazu Set kori{tenjem klju~ne rije~iNew ili funkcije CreateObject.

• Pokaziva~ na novi ili postoje}i objekt mo`ete dodijeliti u izrazu Set kori{tenjemfunkcije GetObject.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 509

Page 12: 10 - programiranje sastavnim dijelovima

Dodjela pokaziva~a objekta kori{tenjem klju~ne rije~i NewAko ActiveX sastavni dio dobavlja tipsku biblioteku, mo`ete upotrijebiti klju~nu rije~New u odre|ivanju varijable ili izraz Set za stvaranje novog objekta i dodjelu pokazi-va~a objekta varijabli objekta.

Ako odredite varijablu objekta s klju~nom rije~i New, Visual Basic }e automatskistvoriti novi objekt kad prvi put upotrijebite varijablu. Za vi{e informacija pogledajte“Odre|ivanje varijable objekta”, u stalnoj pomo}i.

U izrazu Set mo`ete tako|er upotrijebiti klju~nu rije~ New za dodjelu pokaziva~anovom objektu specifi~ne klase. Na primjer, sljede}i izrazi dodjeljuju pokaziva~ nanovi objekt DAO table varijabli tdfNarud`be, postavljaju}i svojstvo Name table na“Narud`be”:

Dim tdfNarud`be As DAO.TableDefSet tdfNarud`be = New DAO.TableDeftdfNarud`be.Name = “Narud`be”

Za vi{e informacija Pogledajte odlomke “Naredba Dim” i “Naredba Set” upriru~niku Microsoft Visual Basic 6.0 Langugage Reference.

Dodjela pokaziva~a objekta kori{tenjem funkcije CreateObjectNeovisno o tome dobavlja li ActiveX sastavni dio tipsku biblioteku ili ne, mo`ete upo-trijebiti funkciju CreateObject u izrazu Set za stvaranje novog objekta i dodjelu poka-ziva~a na objekt varijabli objekta. Kao argument funkcije morate odrediti programskiidentifikator objekta, a objekt kojem `elite pristupiti mora biti stvoren izvana.

Kako dodijeliti pokaziva~ objekta kori{tenjem funkcije CreateObject

• Upotrijebite sljede}u sintaksu za funkciju CreateObject.

Set varijablaobjekta = CreateObject(“progID”, [“imeposlu`itelja”])

Argument progID je obi~no potpuno ozna~eno ime klase iz koje je stvoren objekt; naprimjer, Word.Document. Me|utim, argument progID mo`e biti razli~it od imenaklase. Na primjer, progID za objekt Microsoft Excela je “Sheet” prije nego“Worksheet”. Neobavezni argument imeposlu`itelja mo`e biti odre|en za stvaranjeobjekta na udaljenom ra~unalu putem mre`e. On je dio imena ra~unala u imenu dije-ljenja. Na primjer, s mre`nim dijeljenim imenom \\MojPoslu`itelj\Javno, argumentimeposlu`itelja bio bi “MojPoslu`itelj”.

Sljede}i primjer programskog koda pokre}e Microsoft Excel (ako se Microsoft Excelve} ne izvodi) i uspostavlja varijablu xlApp za upu}ivanje na objekt klase Application.Argument “Excel.Application” potpuno ozna~uje klasu Application kao klasu kojuodre|uje Microsoft Excel:

Dim xlApp As Excel.ApplicationSet xlApp = CreateObject(“Excel.Application”)

Za vi{e informacija Pogledajte “Funkcija CreateObject” u priru~niku MicrosoftVisual Basic 6.0 Langugage Reference.

II. dio [to mo`ete napraviti s Visual Basicom

510 Vodi~ za programere

Page 13: 10 - programiranje sastavnim dijelovima

Dodjela pokaziva~a objekta kori{tenjemfunkcije GetObjectFunkcija GetObject se naj~e{}e koristi za dodjeljivanje pokaziva~a na postoje}i objekt,iako ju tako|er mo`ete upotrijebiti i za dodjeljivanje pokaziva~a na novi objekt.

Kako bi dodijelili pokaziva~ na postoje}i objekt, upotrijebite sljede}u sintaksu.

Set varijablaobjekta = GetObject([imestaze] [, progID])

Argument imestaze mo`e biti staza do postoje}e datoteke, prazan string ili se mo`epotpuno izostaviti. Ako je izostavljena, argument progID je obavezan. Odre|ivanjestaze do postoje}e datoteke uzrokovat }e stvaranje objekta funkcijom GetObject uzkori{tenje informacija spremljenih u datoteci. Kori{tenje praznog stringa kao prvogargumenta uzrokovat }e djelovanje funkcije GetObject kao funkcije CreateObject –stvorit }e novi objekt klase ~iji je programski identifikator jednak argumentu progID.Sljede}a tablica opisuje rezultate kori{tenja funkcije GetObject.

Ako se izvodi ActiveX sastavni dio rezultat

Set X = GetObject( “MojPos.Application”) X upu}uje na postoje}i objekt Application.

Set X = GetObject(“” “MojPos.Object”) X upu}uje na novi, izvana stvoren objekt.

Ako se ne izvodi ActiveX sastavni dio rezultat

Set X = GetObject( “MojPos.Object”) Vra}a se pogre{ka.

Set X = GetObject(“” “MojPos.Object”) Pokre}e se ActiveX sastavni dio (MojPos), te X ukazuje na novi objekt.

Na primjer, varijabla wdApp ukazuje na aplikaciju Microsoft Word koja se izvodi:

Dim wdApp As Word.ApplicationSet wdApp = GetObject(“” “Word.Application”)

Isto kao kod funkcije CreateObject, argument “Word.Application” je programski iden-tifikator za klasu Application odre|en Microsoft Wordom. Ako se izvodi vi{e primjeraMicrosoft Worda, ne mo`ete predskazati na koji }e primjer ukazivati varijabla wdApp.

Va`no Objekt GetObject mo`ete tako|er upotrijebiti za dodjeljivanje pokaziva~ana objekt u slo`enoj datoteci dokumenta. Slo`ena datoteka dokumenta sadr`ipokaziva~e na vi{e tipova objekata. Na primjer, slo`ena datoteka dokumenta mo`esadr`avati prora~unsku tablicu, tekst i slike.

Sljede}i primjer pokre}e aplikaciju prora~unske tablice, ako se ve} ne izvodi, i otvaradatoteku Prihod.xls:

Dim xlBook As Excel.WorkbookSet xlBook = GetObject(“C:\Ra~uni\Prihod.xls”)

Za vi{e informacija Pogledajte “Funkcija GetObject” u priru~niku MicrosoftVisual Basic 6.0 Langugage Reference.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 511

Page 14: 10 - programiranje sastavnim dijelovima

Ubrzavanje pokaziva~a objekataIzvo|enje svojih Visual Basic aplikacija mo`ete u~initi br`im optimiziranjem na~ina nakoji Visual Basic rje{ava pokaziva~e objekata. Na brzinu kojom Visual Basic rukujepokaziva~ima objekata utje~e sljede}e:

• Je li ActiveX sastavni dio ostvaren kao poslu`itelj u-procesu ili poslu`itelj izvan-procesa ili nije.

• Je li pokaziva~ objekta rano povezan ili kasno povezan.

Op}enito, ako je sastavni dio bio ostvaren kao dio izvr{ne datoteke (datoteke .exe), onje poslu`itelj izvan-procesa i izvodi svoj vlastiti proces. Ako je bio ostvaren kao dina-mi~ki poveziva biblioteka, on je poslu`itelj u-procesu i izvodi se u istom procesu kaoklijentska aplikacija.

Aplikacije koje koriste poslu`itelje u-procesu obi~no se izvode br`e od onih koje kori-ste poslu`itelje izvan-procesa zato {to aplikacija ne treba prelaziti granice procesa kakobi koristila svojstva, postupke i doga|aje objekta. Za vi{e informacija u poslu`iteljimau-procesu i izvan-procesa, pogledajte “Poslu`itelji vrste u-procesu i izvan-procesa”,ranije u ovom poglavlju.

Pokaziva~i objekata su rano povezani ako koriste varijable objekta odre|ene kao vari-jable specifi~ne klase. Pokaziva~i objekata su kasno povezani ako koriste varijableobjekata koje su odre|ene kao varijable op}e klase Object. Pokaziva~i objekata kojikoriste varijable za rano povezivanje izvode se br`e od onih koji koriste varijable zakasno povezivanje.

Na primjer, mogli bi dodijeliti pokaziva~ na objekt Excel jednoj od sljede}ih varijabli:

Dim xlApp1 As Excel.ApplicationSet xlApp1 = New Excel.Application

Sim xlApp2 As ObjectSet xlApp2 = CreateObject(“Excel.Application”)

Programski kod koji koristi varijablu xlApp1 je rano povezan i izvodit }e se br`e odkoda koji koristi varijablu xlApp2, koja je kasno povezana.

Kasno povezivanjeKad varijablu odredite s As Object, Visual Basic tijekom prevo|enja ne mo`e ustano-viti koju vrstu pokaziva~a objekta }e varijabla sadr`avati. U takvim okolnostima,Visual Basic mora upotrijebiti kasno povezivanje – zna~i, Visual Basic mora tijekomizvo|enja odrediti ho}e li ili ne}e taj objekt stvarno imati svojstva i postupke koje stekoristili u svom kodu.

Na primjer, Visual Basic }e prevesti sljede}i programski kod bez stvaranja pogre{aka,~ak iako on upu}uje na postupak koji ne postoji, zato {to koristi varijablu objekta skasnim povezivanjem. Varijabla ne provjerava postojanje postupka sve do izvo|enja,kad }e proizvesti pogre{ku:

II. dio [to mo`ete napraviti s Visual Basicom

512 Vodi~ za programere

Page 15: 10 - programiranje sastavnim dijelovima

Dim xlApp As ObjectSet xlApp = CreateObject(“Excel.Application”)xlApp.Nemogu}iPostupak ‘ Postupak koji ne postoji.

Ovaj kod se izvodi sporije od koda koji koristi varijablu objekta s ranim povezivanjemzato {to Visual Basic u prevedenu izvr{nu datoteku mora uklju~iti dodatni kod koji }etijekom izvo|enja utvr|ivati sadr`i li objekt Microsoft Excel Application postupakNemogu}iPostupak ili ne.

Iako je kasno povezivanje najsporiji na~in pozivanja svojstava i postupaka objekta,postoje trenuci kad je neophodno. Na primjer, mo`ete napisati funkciju koja koristivarijablu objekta kako bi djelovala na svaku od razli~itih klasa objekata. Budu}i daunaprijed ne znate koja }e klasa objekta biti dodijeljena varijabli, trebate ju odreditikao varijablu s kasnim povezivanjem kori{tenjem izraza As Object.

Rano povezivanjeAko Visual Basic tijekom prevo|enja mo`e odrediti kojem objektu pripada svojstvo ilipostupak, mo`e rije{iti pokaziva~ na objekt tijekom prevo|enja. Prevedena izvr{nadatoteka sadr`i samo programski kod za pozivanje svojstava, postupaka i doga|ajaobjekta. To se naziva rano povezivanje.

Kad varijablu objekta odredite kori{tenjem klase koja definira objekt, varijabla mo`esadr`avati samo pokaziva~ na objekt te klase. Visual Basic mo`e upotrijebiti ranopovezivanje za svaki kod koji koristi takvu varijablu.

Rano povezivanje dramati~no smanjuje vrijeme potrebno za postavljanje ilidohva}anje vrijednosti svojstva, budu}i da poziv nadgradnje mo`e ~initi zna~ajan dioukupnog vremena. Kod poziva postupaka pobolj{anje ovisi o koli~ini posla koji ~inipostupak. Kratki postupci, gdje je poziv nadgradnje usporediv s vremenom potrebnimza obavljanje posla, imaju najve}u korist.

Kori{tenje svojstava, postupaka i doga|aja objekta

Nakon {to varijabli objekta dodijelite pokaziva~ objekta, mo`ete upotrijebiti varijabluza upravljanje svojstvima i postupcima objekta. Varijablu objekta mo`ete tako|erodrediti kori{tenjem klju~ne rije~i WithEvents te ju upotrijebiti kako bi va{a aplikacijaodgovarala na doga|aje objekta.

Kori{tenje svojstava i postupaka objektaMo`ete upotrijebiti sintaksu objekt.svojstvo za postavljanje i vra}anje vrijednosti svoj-stava ili sintaksu objekt.postupak za kori{tenje postupaka objekta. Na primjer, mogli bipostaviti svojstvo Caption objekta Application kako slijedi:

Dim xlApp As Excel.ApplicationSet xlApp = New Excel.ApplicationxlApp.Caption = “MojPrviObjekt”

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 513

Page 16: 10 - programiranje sastavnim dijelovima

Napomena Sintaksa Excel.Application za ukazivanje na klasu Microsoft ExcelApplication nije podr`ana u verzijama ranijim od Microsoft Excela 97. Kako biukazali na klasu Microsoft Excel Application u Microsoft Excelu 5.0 i MicrosoftExcelu 95, upotrijebite umjesto toga sintaksu [_ExcelApplication]. Na primjer:

Set xlApp = New [_ExcelAplication]

Mo`ete pozvati postupak Quit objekta Microsoft Excel Application na ovaj na~in:

xlApp.Quit

Op}enito, dobra je ideja biti specifi~an koliko je mogu}e kod upu}ivanja na postupkeili svojstva objekata definiranih od ostalih aplikacija ili projekata. Na primjer:

‘ Potpuno ozna~eno ime svojstva postavlja‘ naslov prozora Microsoft Projecta.Dim pjWindow As Project.Window‘ Dobivanje pokaziva~a na prvi objekt prozora.Set pjWindow = ActiveProject.Windows(1)pjWindow.Caption = “Naslov projekta”

‘ Upotrebom neodre|enog imena Visual Basic }e‘ upotrijebiti prvi objekt koji prona|e s svojstvom‘ imena Caption – u ovom slu~aju, Form1.Caption = “Naslov forme Microsoft Form1”

Napomena Ako u va{u Visual Basic aplikaciju trebate uvesti binarne podatke inamjeravate ih dijeliti izme|u aplikacija kori{tenjem ActiveX tehnologije, upotri-jebite matricu tipa Byte za spremanje podataka. Ako binarne podatke dodijelitestringu i zatim poku{ate proslijediti te podatke objektu tipa Automation koji pri-hva}a string, podaci mo`da ne}e biti ispravno pretvoreni. Za vi{e informacija otipovima podataka, pogledajte 5. poglavlje “Osnove programiranja”.

Za vi{e informacija Za vi{e informacija o radu s svojstvima i postupcima objekta,pogledajte 9. poglavlje “Programiranje objektima”.

Odgovaranje na doga|aje objektaKao dodatak odgovaranju na doga|aje koji se pojavljuju kod objekata Visual Basica,va{a aplikacija mo`e odgovoriti na doga|aje u objektu kojeg pru`a ActiveX sastavnidio. Na primjer, va{a Visual Basic aplikacija mo`e prikazati okvir s porukom ako sepojavi doga|aj u radnoj knjizi Microsoft Excela.

Kako bi va{a aplikacija odgovarala na doga|aje objekta, morate dodati programski kodu potprogram doga|aja za objekt. Me|utim, potprogrami doga|aja za objekte kojepru`aju sastavni dijelovi nisu automatski dostupni u Visual Basicu. Najprije morateodrediti varijablu objekta kori{tenjem klju~ne rije~i WithEvents.

Nakon {to odredite varijablu objekta kori{tenjem klju~ne rije~i WithEvents, kodni pro-zor Visual Basica koristi varijablu za prikaz potprograma doga|aja objekta. Nakon to-ga mo`ete dodati kod u te potprograme doga|aja za odgovor na doga|aje objekta. Kadvarijabli dodijelite pokaziva~ objekta, uspostavljate vezu izme|u varijable i objektatijekom izvo|enja aplikacije.

II. dio [to mo`ete napraviti s Visual Basicom

514 Vodi~ za programere

Page 17: 10 - programiranje sastavnim dijelovima

Kako stvoriti potprogram doga|aja za objekt kojeg pru`a sastavni dio

1. Dodajte pokaziva~ na tipsku biblioteku objekta va{em projektu Visual Basica. Zavi{e informacija o dodavanju pokaziva~a na tipsku biblioteku, pogledajte “Stvaranjepokaziva~a na objekt”, ranije u ovom poglavlju.

2. U odjeljku Declarations forme ili modula klase, odredite varijablu objekta kori{ten-jem klju~ne rije~i WithEvents. Na primjer:

Dim WithEvents xlBook As Excel.Workbook

Visual Basic dodaje ime varijable objekta okviru Objects u kodnom prozoru. Kadodaberete ime varijable, Visual Basic prikazuje potprograme doga|aja objekta uokviru s popisom Procedure.

3. Odaberite potprogram doga|aja, te zatim dodajte potprogramu kod kojeg `eliteizvesti svojom aplikacijom kad se doga|aj pojavi.

Na primjer, pretpostavimo da se va{a Visual Basic aplikacija oslanja na podatke pri-kazane u radnoj knjizi Microsoft Excela i da ste ve} s klju~nom rije~i WithEventsodredili varijablu xlBook za radnu knjigu. Kad korisnik poku{a zatvoriti radnu knjigu,mo`ete prikazati poruku i sprije~iti zatvaranje radne knjige dodavanjem sljede}eg pro-gramskog koda potprogramu doga|aja xlBook_BeforeClose u va{oj aplikaciji:

Private Sub xlBook_BeforeClose(Cancel As Boolean)‘ Skrivanje prozora Microsoft Excela‘ tako da poruka bude vidljiva.xlBook.Application.Visible = False‘ Prikaz poruke.MsgBox “Ova radna knjiga mora ostati otvorena.”‘ Pokazivanje prozora Microsoft Excela.xlBook.Application.Visible = True‘ Postavljanje argumenta Cancel potprograma‘ doga|aja na True, za poni{tavanje doga|aja.Cancel = True

End Sub

4. Dodijelite pokaziva~ objekta varijabli objekta odre|enoj klju~nom rije~iWithEvents.

Na primjer, mo`ete dodati sljede}i kod potprogramu doga|aja Form_Load formeVisual Basica za dodjelu pokaziva~a na radnu knjigu Prodaja.xls Microsoft Excelavarijabli xlBook:

Private Sub Form_Load()Set xlBook = GetObject(“Prodaja.xls”)‘ Prikaza prozora Microsoft Excela‘ i prozora radnog lista.xlBook.Application.Visible = TruexlBook.Windows(1).Visible = True

End Sub

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 515

Page 18: 10 - programiranje sastavnim dijelovima

Za vi{e informacija Pogledajte “Naredba Dim” u priru~niku Microsoft VisualBasic 6.0 Langugage Reference.

Otpu{tanje ActiveX sastavnog dijelaKad ste gotovi s kori{tenjem objekta, o~istite sve varijable koje pokazuju na objektkako bi objekt mogao biti otpu{ten iz memorije. Kako bi o~istili varijablu objekta,postavite ju na Nothing. Na primjer:

Dim acApp As Access.ApplicationSet acApp = New Access.ApplicationMsgBox acApp.SysCmd(acSysCmdAccessVer)Set AcApp = Nothing

Varijable objekta se automatski ~iste kad iza|u iz podru~ja. Ako `elite da varijablazadr`i svoju vrijednost kroz potprograme, upotrijebite javne varijable ili varijable narazini forme, ili stvorite potprograme koji vra}aju objekt. Sljede}i kod pokazuje kakobi mogli upotrijebiti javnu varijablu:

Public wdApp As Word.Application...‘ Stvaranje objekta Word i pokretanje Microsoft Worda.Set wdApp = New Word.Application...‘ Microsoft Word se ne}e zatvoriti sve dok se aplikacija‘ ne zavr{i ili dok pokaziva~ ne bude postavljen na Nothing.Set wdApp = Nothing

Tako|er, pripazite da postavite sve pokaziva~e objekata na Nothing kad zavr{avate,~ak i za neovisne objekte. Na primjer:

Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkbookSet xlApp = New Excel.ApplicationSet xlBook = xlApp.Workbooks.AddSet xlApp = Nothing ‘ Pripazite! xlBook bi jo{ uvijek

‘ mogao sadr`avati pokaziva~ objekta.Set xlBook = Nothing ‘ Sad su o~i{}eni svi pokaziva~i.

II. dio [to mo`ete napraviti s Visual Basicom

516 Vodi~ za programere

Page 19: 10 - programiranje sastavnim dijelovima

Kretanje kroz modele objekataKad jednom shvatite kako koristiti objekte koje pru`aju sastavni dijelovi, mo`eteupotrebljavati svaki objekt koji vam sastavni dio izlo`i. Sastavni dijelovi se kre}u upodru~ju od jednostavnih sastavnih dijelova koda ili ActiveX kontrola do velikih sa-stavnih dijelova, kao programska su~elja aplikacija Microsoft Excel i Microsoft DataAccess Object (DAO), koja izla`u puno objekata.

Svaki objekt postoji negdje u hijerarhiji objekata sastavnog dijela, i mo`ete pristupitiobjektima na dva na~ina:

• Izravno, ako je objekt stvoren izvana.

• Posredno, ako je objekt ovisan objekt. Pokaziva~ na njega mo`ete dobiti iz drugogobjekta, vi{eg u hijerarhiji sastavnog dijela.

Najbolji na~in kretanja kroz hijerarhiju objekta je kori{tenje pretra`iva~a objekata (akosastavni dio pru`a biblioteku objekata).

Kretanje kroz hijerarhiju objektaKao {to ste vidjeli, kroz hijerarhiju objekta kre}ete se prema dolje postavljanjempokaziva~a na ovisne objekte kroz objekte stvorene izvana. Mo`ete tako|er upotrijebitipostupak na objekt zbirke kako bi natrag dobili pojedini objekt. Za vi{e informacija,pogledajte “Rad s objektima stvorenim izvana i ovisnim objektima”, kasnije u ovompoglavlju.

Slika 10.3 pokazuje stazu kretanja objekta u aplikaciji Microsoft Excel.

Slika 10.3 Kretanje nadolje u hijerarhiji objekta Microsoft Excel kori{tenjem zbirki

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 517

Aplikacija.Workbooks vra}azbirku Workbooks

Worksheets("Sheet1")vra}a pojedini radni list

Aplikacija

Workbooks Radna knjiga

Karta Karta

Radni list Radni list

Page 20: 10 - programiranje sastavnim dijelovima

Za kretanje natrag prema gore, ve}ina aplikacija koristi svojstva Parent i Application,kao {to je prikazano na slici 10.4

Slika 10.4 Kretanje prema gore u hijerarhiji objekta Microsoft Excel kori{tenjem svojstava Parent i Application

II. dio [to mo`ete napraviti s Visual Basicom

518 Vodi~ za programere

Objekti zbirkeObjekti zbirke su spremnici za grupe drugih objekata. Ti objekti pru`aju jednostavanna~in pra}enja niza objekata koji su istog tipa. Na primjer, zbirci svih objekata tipaMenu u aplikaciji mo`e se pristupiti kori{tenjem objekta zbirke Menus. Sljede}i pro-gramski kod mo`ete upotrijebiti za upu}ivanje na sve radne knjige koje su trenutnou~itane u aplikaciju Microsoft Excel:

Application.Workbooks

Uo~ite da je rije~ Workbooks u mno`ini. Standardan dogovor za davanje imena objek-tima zbirke je mno`ina imena tipa objekta koji ~ini zbirku. Kroz objekte u zbircimo`ete prolaziti koriste}i izraz For Each, kako slijedi:

Dim xlBook As Excel.Workbook...For Each xlBook In Application.Workbooks

‘ Prikaz imena svake radne knjige.MsgBox xlBook.FullName

Next xlBook

Aplikacija

Workbooks Radna knjiga

Karta Karta

Radni list Radni list

Chart.Aplikacija vra}aobjekt tipa Application

Panel.Parent vra}a objekttipa Window

Prozor Prozor

Panel Panel

Dodaci Dodaci

Page 21: 10 - programiranje sastavnim dijelovima

Na pojedine objekte u ve}ini zbirki mo`e se tako|er upu}ivati imenom ili njihovimindeksnim redoslijedom u zbirci. Sljede}i primjer pokazuje kako se mo`ete uputiti naobjekte zbirke Styles s imenima “Normal” “Example” i “Heading”.

xlBook.Styles(“Normal”)xlBook.Styles(“Example”)xlBook.Styles(“Heading”)

Uz pretpostavku da su ovi objekti prva tri objekta u zbirci Styles, te da je zbirka temel-jena na nuli, mo`ete se tako|er uputiti na njih kako slijedi:

xlBook.Styles(1) ‘ Upu}ivanje na objekt Normal Style.xlBook.Styles(2) ‘ Upu}ivanje na objekt Example Style.xlBook.Styles(3) ‘ Upu}ivanje na objekt Heading Style.

Za vi{e informacija Za vi{e informacija o radu s objektima zbirke, pogledajte 9.poglavlje “Programiranje objektima”.

Rad s objektima stvorenim izvana i ovisnim objektimaKako }ete stvoriti pokaziva~ na objekt kojeg pru`a sastavni dio ovisi o tome je liobjekt stvoren izvana ili je ovisan objekt. Mo`ete izravno stvoriti pokaziva~ na objektstvoren izvana; pokaziva~ na ovisan objekt stvarate posredno kori{tenjem postupkaobjekta vi{e razine u hijerarhiji objekata sastavnog dijela.

Objekti stvoreni izvanaVe}ina velikih aplikacija koje podr`avaju ActiveX tehnologiju te drugih ActiveX sas-tavnih dijelova pru`a najvi{e rangiran objekt stvoren izvana u njihovoj hijerarhijiobjekata koji:

• Pru`a pristup ostalim objektima u hijerarhiji.

• Pru`a postupke i svojstva koja utje~u na cijelu aplikaciju.

Na primjer, sve aplikacije Microsoft Officea pru`aju najvi{e rangiran objektApplication. Sljede}i primjer pokazuje kako mo`ete dodijeliti pokaziva~e objektimaApplication Microsoft Excela, Microsoft Worda i Microsoft Accessa:

Dim xlApp As Excel.ApplicationDim wdApp As Word.ApplicationDim acApp As Access.Application

Set xlApp = New Excel.ApplicationSet wdApp = New Word.ApplicationSet acApp = New Access.Application

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 519

Page 22: 10 - programiranje sastavnim dijelovima

Nakon toga mo`ete upotrijebiti te varijable za pristup ovisnim objektima svakeaplikacije te svojstvima i postupcima tih objekata. Za vi{e informacija pogledajte“Stvaranje pokaziva~a na objekt”, ranije u ovom poglavlju.

Napomena Sintaksa Excel.Application za ukazivanje na klasu Microsoft ExcelApplication nije podr`ana u verzijama ranijim od Microsoft Excela 97. Kako biukazali na klasu Microsoft Excel Application u Microsoft Excelu 5.0 i MicrosoftExcelu 95, upotrijebite umjesto toga sintaksu [_ExcelApplication]. Na primjer:

Set xlApp = New [_ExcelApplication]

Kao dodatak ovim najvi{e rangiranim objektima stvorenim izvana, ActiveX sastavnidijelovi mogu tako|er pru`iti objekte stvorene izvana koji su ni`e rangirani u hijerarhi-ji objekata sastavnog dijela. Tim objektima mo`ete pristupiti ili izravno kao objektimastvorenima izvana ili posredno kao objektima ovisnim o objektu najvi{e razinestvorenom izvana. Na primjer, mo`ete stvoriti pokaziva~ na objekt DAO TableDef iliizravno ili posredno:

‘ Izravno stvaranje pokaziva~a na daoTable1.Dim daoTable1 As DAO.TableDefSet daoTable1 = New DAO.TableDefdaoTable1.Name = “Table1”

‘ Posredno stvaranje pokaziva~a na daoTable2,‘ kao objekta ovisnog o objektu DAO DBEngine.Dim daoDBE As DAO.DBEngineDim daoWs As DAO.WorkspaceDim daoDb As DAO.DatabaseDim daoTable2 As DAO.TableDef

Set daoDBE = DAO.DBEngineSet daoWs = daoDBE.Workspaces(0)Set daoDb = daoWs.CreateDatabase(“db1.mdb”, dbLangGeneral)Set daoTable2 = daoDb.CreateTableDef(“Table2”)

Neki objekti pru`aju objekt tipa Application, ali mu daju razli~ito ime. Na primjer,Microsoft Jet mehanizam baza podataka u Microsoft Accessu naziva svoj objektnajvi{e razine imenom DBEngine.

Ovisni objektiPokaziva~ na ovisan objekt mo`ete dobiti samo na jedan na~in – kori{tenjem svojstvaili postupka objekta stvorenog izvana za vra}anje pokaziva~a na ovisan objekt. Ovisniobjekti su ni`e rangirani u hijerarhiji objekata, i mo`e im se pristupati samo kori{ten-jem postupka objekta stvorenog izvana. Na primjer, pretpostavimo da `elite pokaziva~na objekt Button iz Microsoft Excela. Ne mo`ete dobiti pokaziva~ na taj objektkori{tenjem sljede}eg programskog koda (pojavit }e se pogre{ka):

Dim xlButton As Excel.ButtonSet xlButton = New Excel.Button

II. dio [to mo`ete napraviti s Visual Basicom

520 Vodi~ za programere

Page 23: 10 - programiranje sastavnim dijelovima

Umjesto toga, upotrijebite sljede}i kod za dobivanje pokaziva~a na objekt Button:

Dim xlApp As Excel.ApplicationDim xlBook As Excel.WorkbookDim xlSheet As Excel.WorksheetDim xlButton As Excel.Button

Set xlApp = New Excel.ApplicationSet xlBook = xlApp.Workbooks.AddSet xlSheet = xlBook.Worksheets.AddSet xlButton = xlSheet.Buttons.Add(44, 100, 100, 44)

‘ Sad mo`ete koristiti svojstvo objekta Button.xlButton.Caption = “Prvi gumb”

Slika 10.5 prikazuje kako aplikacija Visual Basica dobiva pokaziva~ na objekt Button.

Slika 10.5 Pristupanje ovisnim objektima

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 521

Rukovanje pogre{kama tijekom rada uActiveX sastavnim dijelovima

Programski kod za rukovanje pogre{kama je posebno va`an kad radite s ActiveX sas-tavnim dijelovima, jer se kod u sastavnom dijelu koristi iz va{e Visual Basic aplikacije.Gdje je to mogu}e, trebali bi uklju~iti programski kod za rukovanje pogre{kama kojemo`e izazvati sastavni dio. Na primjer, dobra je praksa potra`iti pogre{ku koja sepojavljuje kad korisnik neo~ekivano zatvori aplikaciju sastavnog dijela:

Function PokreniWord()‘ Pokretanje Microsoft Worda.On Error Goto ZamkaZaPogre{ku

‘ Odre|ivanje varijable tipa Application za Microsoft Word‘ te cjelobrojne varijable za zamku pogre{ke.Dim wdApp As Word.ApplicationDim iPoku{aja As Integer

‘ Dodjela pokaziva~a objekta.Set wdApp = New Word.Application

‘ Otpu{tanje varijable objekta.Set wdApp = Nothing

Exit Function

aplikacija Visual Basica Microsoft Excel

Page 24: 10 - programiranje sastavnim dijelovima

ZamkaZaPogre{ku:‘ Zamka za pogre{ku koja se pojavljuje ako‘ Microsoft Word ne mo`e biti pokrenut.Select Case Err.Number

Case 440 ‘ Pogre{ka automatizacije.iPoku{aja = iPoku{aja + 1‘ Dozvoljavanje najvi{e 6 poku{aja pokretanja Worda.If iPoku{aja < 5 Then

Set wdApp = New Word.ApplicationResume

ElseErr.Raise Number:=VBObjectError + 28765, _Description:= “Ne mogu pokrenuti Word”

End IfCase Else

Err.Raise Number:= Err.NumberEnd Select

End Function

Ako se u prethodnom primjeru pojavi bilo koja osim pogre{ke 440, potprogramprikazuje pogre{ku i o`ivljava pogre{ku. Aplikacija koja pru`a objekt mo`e natragproslijediti svoju vlastitu pogre{ku. U nekim slu~ajevima, aplikacija mo`e upotrijebitiisti kod pogre{ke koji Visual Basic koristi za druga~iju pogre{ku. U takvim slu~ajevi-ma, trebate upotrijebiti izraz On Error Resume Next te provjeriti pogre{ke odmahnakon svake linije koja mo`e uzrokovati pogre{ku. Takav tip provjeravanja pogre{kenaziva se ugra|eno rukovanje pogre{kom (inline error-handling).

Ispitivanje pokaziva~a objekataPrije nego {to upotrijebite varijablu objekta u svom kodu, mo`ete po`eljeti provjeritisadr`ava li varijabla valjan pokaziva~ objekta. Mo`ete utvrditi je li pokaziva~ objektadodijeljen varijabli ili nije upotrebom izraza Is Nothing. Na primjer, sljede}i kod prov-jerava je li pokaziva~ objekta dodijeljen varijabli wdDoc:

If wdDoc Is Nothing Then MsgBox “Nema pokaziva~a objekta.”

Me|utim, izraz Is Nothing ne}e odrediti je li valjan pokaziva~ objekta postao nedostu-pan. Na primjer, ako pokaziva~ objekta Microsoft Word dodijelite varijabli objekta iMicrosoft Word postane nedostupan, varijabla }e i dalje sadr`avati valjan pokaziva~objekta. U takvoj situaciji, upotrijebite svog rukovatelja pogre{kama za hvatanjepogre{ke koja }e se pojaviti kad va{ kod poku{a upotrijebiti varijablu.

Za vi{e informacija Za informacije o pogre{kama koje odre|ena aplikacija mo`eproslijediti natrag, pogledajte dokumentaciju te aplikacije. Za vi{e informacija ohvatanju pogre{aka, pogledajte 13. poglavlje “Tra`enje i obrada pogre{aka”.

II. dio [to mo`ete napraviti s Visual Basicom

522 Vodi~ za programere

Page 25: 10 - programiranje sastavnim dijelovima

Rukovanje zahtjevima u tijeku za ActiveX sastavni dio

Obi~no je potreban samo djeli} sekunde za postavljanje svojstva ili poziv postupkaobjekta. Ponekad, me|utim, va{ zahtjev mo`da ne}e biti odmah zavr{en.

• Ako pozivate postupak Close radne knjige u Microsoft Excelu dok korisnik imaotvoren dijalo{ki okvir, Microsoft Excel signalizira da je zaposlen i ne mo`e izvestiva{ zahtjev. To mo`e voditi u stanje sastavni dio zaposlen (component busy).

• Ako pozivate postupak koji izvodi operaciju duljeg trajanja, kao {to je velikakoli~ina rada baze podataka dok je baza podataka vrlo aktivna, mo`ete poku{atiizvesti drugu operaciju dok prva operacija jo{ uvijek nije rije{ena. To mo`e voditi ustanje zahtjev u tijeku (request pending).

• Ako imate dvije ili vi{e aplikacija koje pozivaju zajedni~ki sastavni dio, jedan pozivmora biti zavr{en prije nego {to drugi mo`e zapo~eti. Sastavni dijelovi rukujutakvim sukobima nizanjem zahtjeva, zna~i, postavljaju}i ih da ~ekaju u redu. Tomo`e tako|er voditi u stanje zahtjeva u tijeku.

Stanje sastavni dio zaposlen sli~i dobivanju signala zauzete linije kod telefonskogpoziva. Znate da se kroz to ne}ete probiti, pa mo`ete spustiti slu{alicu i probatiponovno kasnije.

Stanje zahtjev u tijeku je sli~no situaciji kad uspijete dobiti vezu, ali vas onda osobakoju ste nazvali zadr`i u razgovoru dulje nego {to ste namjeravali. Ako je va{ zahtjevstavljen u niz, tada je zahtjev u tijeku sli~an situaciji kad druga strana podigneslu{alicu i odmah ka`e “Sa~ekajte trenutak, molim”.

Stanje sastavni dio zaposlenSastavni dio mo`e odbiti va{ zahtjev zato {to ima otvoren modalni dijalo{ki okvir, ilizato {to je u tijeku operacija editiranja od korisnika. Na primjer, aplikacija MicrosoftExcel odbija zahtjeve klijentske aplikacije dok se editira }elija prora~unske tablice.

Visual Basic pretpostavlja da je stanje zauze}a privremeno pa i dalje poku{ava poslatizahtjev u odre|enom vremenskom trajanju. Kad to vrijeme istekne, Visual Basicprikazuje dijalo{ki okvir Component Busy, kao {to je prikazano na slici 10.6.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 523

Page 26: 10 - programiranje sastavnim dijelovima

Slika 10.5 Dijalo{ki okvir Component Busy

II. dio [to mo`ete napraviti s Visual Basicom

524 Vodi~ za programere

Korisnik mo`e ponoviti zahtjev, odustati od zahtjeva ili se prebaciti na sastavni dio iispraviti problem (na primjer, otpu{tanjem dijalo{kog okvira). Ako korisnik odabereCancel, izaziva se pogre{ka &h80010001 (RPC_E_CALL_REJECTED) u potprogra-mu koji je podnio zahtjev.

Stanje zahtjev u tijekuJednom kad je sastavni dio prihvatio zahtjev va{e aplikacije, va{a aplikacija mora~ekati sve dok zahtjev ne bude ispunjen. Ako ispunjenje zahtjeva traje dulje vrijeme,korisnik mo`e poku{ati smanjiti va{u aplikaciju ili joj promijeniti veli~inu tako da jemakne s puta.

Nakon isteka kratkog vremenskog razmaka, Visual Basic odgovara na takve zahtjeveprikazivanjem dijaloga Component Request Pending.

Izgled dijalo{kog okvira Component Request Pending je neznatno druga~iji od dijalo-ga Component Busy. Gumb Cancel je onemogu}en, kao {to je prikazano na slici 10.7,budu}i da zahtjev u tijeku ne mo`e biti poni{ten.

Slika 10.7 Dijalo{ki okvir Component Request Pending

Prebacivanje na sastavni dio korisno je samo ako je on zaustavljen zbog prikazivanjaporuke pogre{ke kao rezultata va{eg zahtjeva. To ne bi trebalo biti uobi~ajeno zbiva-nje, zato {to je prikladno pona{anje sastavnog dijela vra}anje stanja pogre{ke aplikacijikoja ga je pozvala.

Page 27: 10 - programiranje sastavnim dijelovima

Za vi{e informacija Za vi{e informacija, pogledajte odlomke “Promjena porukaComponent Busy ili Request Pending” “Nadzor vremenskih razmaka za prekid” i“Izazivanje pogre{ke nakon isteka vremena”, kasnije u ovom poglavlju.

Promjena poruka Component Busy ili Request PendingVisual Basic pru`a dijalo{ke okvire Component Busy i Request Pending kao jedno-stavne unaprijed odre|ene poruke. Postoji puno situacija kad ovi dijalo{ki okvirimo`da ne}e odgovarati va{im potrebama.

• Va{a aplikacija mo`e pozivati postupak objekta kojeg pru`a sastavni dio koji nemakorisni~kog su~elja. Sastavni dijelovi stvoreni kori{tenjem Visual Basica, verzijeProfessional ili Enterprise, na primjer, mogu se izvoditi u pozadini bez vidljivihformi.

• Sastavni dio kojeg pozivate mo`da je stvoren kori{tenjem osobina udaljene automa-tizacije Visual Basica, verzija Enterprise, i mo`e se izvoditi na drugom ra~unalukoje se nalazi na nekoj udaljenosti od korisnika.

• Ako je va{a aplikacija u~itala radnu knjigu Microsoft Excela kori{tenjem funkcijeGetObject, radna knjiga ne}e biti vidljiva kad se korisnik prebaci na MicrosoftExcel. Zapravo, sam Microsoft Excel mo`da ne}e biti vidljiv, i u takvom slu~ajugumb Switch To ne radi ni{ta.

U takvim situacijama, gumb Switch To je neprikladan i mo`e zbuniti korisnika va{eaplikacije. Mo`ete odrediti zamjensku poruku za svako ili oba prekida. Va{e porukebiti }e prikazane u jednostavnom okviru s porukom, bez gumba Switch To.

Za stanje zahtjeva u tijeku, okvir s porukom ima samo gumb OK. Za stanjezaposlenosti sastavnog dijela, pru`eni su gumb OK i gumb Cancel. Ako korisnik pri-tisne gumb Cancel, biti }e izazvana pogre{ka -2147418111 (&h80010001) u potprogra-mu koji je podnio zahtjev.

Sljede}a svojstva objekta App utvr|uju kad }e dijalo{ki okviri Component Busy iliComponent Request Pending biti zamijenjeni okvirom s porukom i omogu}iti vamodre|ivanje teksta i naslova okvira s porukom.

Svojstvo OLEServerBusyMsgTextOdre|uje tekst poruke koji }e biti prikazan kad se pojavi stanje zaposlenosti sastavnogdijela. Odre|ivanje ovog svojstva uzrokuje kori{tenje zamjenskog okvira s porukomumjesto uobi~ajenog dijalo{kog okvira Component Busy.

Svojstvo OLEServerBusyMsgTitleOdre|uje naslov koji }e biti upotrijebljen ako je pribavljena zamjenska poruka za sta-nje zaposlenosti sastavnog dijela (odre|ivanje samo ovog svojstva ne}e uzrokovatikori{tenje zamjenskog okvira s porukom).

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 525

Page 28: 10 - programiranje sastavnim dijelovima

Svojstvo OLERequestPendingMsgTextOdre|uje tekst poruke koji }e biti prikazan kad se pojavi stanje zahtjeva u tijeku.Odre|ivanje ovog svojstva uzrokuje kori{tenje zamjenskog okvira s porukom umjestouobi~ajenog dijalo{kog okvira Component Request Pending.

Svojstvo OLERequestPendingMsgTitleOdre|uje naslov koji }e biti upotrijebljen ako je pribavljena zamjenska poruka za stan-je zahtjeva u tijeku (odre|ivanje samo ovog svojstva ne}e uzrokovati kori{tenje zam-jenskog okvira s porukom).

Sljede}i primjer postavlja naslove i tekstove poruka za oba stanja, sastavni diozaposlen i zahtjev u tijeku, potpuno nadja~avaju}i dijalo{ke okvire Component Busy iComponent Request Pending.

Public Const APP_NASLOV = “Aplikacija Demo”

Private Sub cmdDugiPrijenos_Click()On Error Goto DugiPrijenos_Pogre{ka‘ mo`ete jednom postaviti naslov, u Sub Main.App.OLEServerBusyMsgTitle = APP_NASLOVApp.OLERequestPendingMsgTitle = APP_NASLOV

‘ Tekstovi poruke specifi~ni za taj zahtjev.App.OLEServerBusyMsgText = “Sastavni dio za dugi _

prijenos” & “nije odgovorio. Ako ste ~ekali” _& “vi{e od pet minuta, mo`ete” _& “odustati od ovog zahtjeva” _& “i poku{ati ponovno kasnije.” & vbCrLf _& “Pozovite mre`nog administratora za provjeru” _& “rada sastavnog dijela, ili za prijavu problema.”

App.OLERequestPendingMsgText = “Va{ zahtjev “ _& “se jo{ uvijek izvodi.” & vbCrLf _& “Pozovite mre`nog administratora za provjeru” _& “rada sastavnog dijela, ili za prijavu problema.”

‘ Kod za stvaranje zahtjeva i kori{tenje rezultata...‘ ...

DugiPrijenos_^i{}enje:‘ Kod za izvo|enje potrebnog ~i{}enja...‘ ...Exit Sub

II. dio [to mo`ete napraviti s Visual Basicom

526 Vodi~ za programere

Page 29: 10 - programiranje sastavnim dijelovima

DugiPrijenos_Pogre{ka:If Err.Number = &h80010001 Then

MsgBox “Prijenos poni{ten”Else

‘ Kod za rukovanje drugim pogre{kama.End IfResume DugiPrijenos_^i{}enje

End Sub

Va`no Duljina va{ih poruka mo`e biti ograni~ena operativnim sustavom. Porukes vi{e od tisu}u karaktera duljine mogu se koristiti kad je ciljni operativni sustavWindows NT ili Windows 95/98.

Nadzor vremenskih razmaka za prekidMo`ete postaviti vremenske razmake za prekid koji odre|uju kad }e Visual Basicprikazati dijalo{ke okvire Component Busy i Component Request Pending, kori{ten-jem dvaju svojstava objekta App.

Svojstvo OLEServerBusyTimeoutOdre|uje koliko }e dugo Visual Basic poku{avati va{e zahtjeve automatizacije prijeprikazivanja dijaloga Component Busy. Podrazumijevana vrijednost je 10 000milisekundi (10 sekundi).

Svojstvo OLERequestPendingTimeoutOdre|uje koliko }e dugo Visual Basic ~ekati prije odgovora na klikove mi{em, do-ga|aje pritiska tipke, te ostale doga|aje prikazivanjem dijaloga Component RequestPending. Podrazumijevana vrijednost je 5000 milisekundi (5 sekundi).

Sljede}i primjer pokazuje kako vrijednosti prekida mogu biti prilago|ene i obnovljeneza poziv postupka AnalizaZalihe u zami{ljenom objektu Vo|enjePosla.

Public Sub Odre|ivanjePrekida(ByVal lngSasDioZaposlen As _Long, ByVal lngZahtjevUTijeku As Long)

App.OLEServerBusyTimeout = lngSasDioZaposlenApp.OLERequestPendingTimeout = lngZahtjevUTijeku

End Sub

Public Sub ObnovaPrekida()App.OLEServerBusyTimeout = 10000

App.OLERequestPendingTimeout = 5000End Sub

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 527

Page 30: 10 - programiranje sastavnim dijelovima

Private Sub cmdPunaAnaliza_Click()On Error Goto PunaAnaliza_Pogre{ka‘ Postavljanje vrlo kratkih prekida. Nakon 2 sekunde,‘ korisnik }e biti obavije{ten i pritisci na tipku ili‘ klikovi mi{em }e prikazati dijaloge Component Busy‘ i Component Request Pending.Set Timeouts 2, 2Me.MousePointer = vbHourglassgobjVo|enjePosla.AnalizaZalihe txtZGSjeCode.Text, ATIP_PUN

PunaAnaliza_^i{}enje:Me.MousePointer = vbDefaultResetTimeoutsExit Sub

PunaAnaliza_Pogre{ka:If Err.Number = &h80010001 Then

MsgBox “Analiza poni{tena”Else

‘ Kod za rukovanje drugim pogre{kama...End IfResume PunaAnaliza_^i{}enje

End Sub

Svaki od ovih prekida mo`ete postaviti na vrlo velike vrijednosti, jer se one spremajukao tipovi Long. Na primjer, 86 400 000 milisekundi je dan, koji je jednak neograni-~enom vremenu do prekida. Me|utim, kada to u~inite, riskirate zaglavljivanje svojeaplikacije sve dok sastavni dio ne bude slobodan, ili dok zahtjev u tijeku ne budezavr{en.

Va`no Budu}i da su vrijednosti prekida svojstva objekta App, one tako|er utje~una dokumente koje povezujete ili ume}ete kori{tenjem kontrole OLE spremnika ilialatnog okvira. Ako koristite povezane ili umetnute dokumente i promijenite ovasvojstva za zahtjev automatizacije, dobra je ideja obnoviti vrijednosti nakon toga.

Izazivanje pogre{ke nakon isteka vremenaKod stanja sastavni dio zaposlen, mo`ete zaobi}i i dijalo{ki okvir Component Busy izamjensku poruku postavljanjem svojstva OLEServerBusyRaiseError tipa Booleanobjekta App na True. Visual Basic }e poku{ati izvesti va{ zahtjev u trajanju vremenaodre|enog svojstvom OLEServerBusyTimeout, a zatim }e izazvati pogre{ku u potpro-gramu koji je podnio zahtjev automatizacije, kao da je korisnik pritisnuo gumb Cancelna dijalo{kom okviru Component Busy.

Pogre{ka koja se vra}a je -2147418111 (&h80010001). U rukovatelju pogre{kom zapotprogram mo`ete zatim poduzeti najprikladniju akciju. Na primjer, mogli bi prikazatislo`en dijalo{ki okvir koji korisniku nudi vi{e izbora za ponovni poku{aj ili drugih izbora.

II. dio [to mo`ete napraviti s Visual Basicom

528 Vodi~ za programere

Page 31: 10 - programiranje sastavnim dijelovima

Ovo svojstvo bit }e posebno korisno za sastavne dijelove oblikovane za izvo|enje naudaljenim mre`nim ra~unalima, kori{tenjem osobine udaljene automatizacije VisualBasica, verzija Enterprise. Takav sastavni dio mo`e pozivati druge sastavne dijelove, imora rukovati pogre{kama u tim pozivima bez prikazivanja bilo kakve forme.

Ne postoji odgovaraju}e svojstvo za stanje zahtjeva u tijeku. Kad je jednom sastavnidio prihvatio zahtjev automatizacije, klijentska aplikacija mora ~ekati sve dok zahtjevne bude zavr{en.

Kori{tenje vidljivog su~elja sastavnih dijelovaAko sastavni dio podr`ava povezivanje i umetanje objekata (objekt linking and embed-ding, OLE), mo`ete povezati ili umetnuti objekt u svoju aplikaciju bez pisanja bilokakvog koda kori{tenjem vidljivog su~elja sastavnog dijela. Vidljivo su~elje sastavnogdijela mo`ete upotrijebiti na jedan od dva na~ina:

• Dodavanjem kontrole OLE spremnika va{oj aplikaciji, te zatim ubacivanjem objek-ta u ovu kontrolu.

• Dodavanjem klase objekta alatnom okviru, te zatim dodavanjem objekta te klaseva{oj aplikaciji isto kao {to bi dodali kontrolu na formu.

Ubacivanje objekta s kontrolom OLE spremnikaKontrola OLE spremnika daje vam najve}u fleksibilnost u kori{tenju vidljivog su~eljaobjekta. S kontrolom OLE spremnika, mo`ete:

• Stvoriti oznaku mjesta za objekt u svojoj aplikaciji. Objekt koji se pojavljuje unutarkontrole OLE spremnika mo`ete stvoriti tijekom izvo|enja, ili tijekom izradeaplikacije mo`ete mijenjati objekt koji ste postavili u kontrolu OLE spremnika.

• Stvoriti povezani objekt u va{oj aplikaciji.

• Povezati kontrolu OLE spremnika s bazom podataka.

• Izvesti akciju ako korisnik pomakne, promijeni veli~inu ili a`urira objekt u kontroliOLE spremnika.

• Stvoriti objekte iz podataka koji su kopirani u odlagali{te.

• Prikazati objekte kao ikone.

Kontrola OLE spremnika mo`e istovremeno sadr`avati samo jedan objekt. Postojinekoliko na~ina za stvaranje povezanih ili umetnutih objekata u kontroli OLE spremni-ka – va{ odabir na~ina ovisi o tome stvarate li povezan ili umetnut objekt tijekomizrade ili tijekom izvo|enja aplikacije. Jednom kad ste na svojoj formi stvorili kontroluOLE spremnika, objekt u kontrolu spremnika mo`ete ubaciti:

• Kori{tenjem dijalo{kog okvira Insert Object ili Paste Special. Pogledajte odlomke“Ubacivanje objekata tijekom izrade s kontrolom OLE spremnika” i “Stvaranjeobjekata tijekom izvo|enja s kontrolom OLE spremnika”, kasnije u ovom poglavlju.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 529

Page 32: 10 - programiranje sastavnim dijelovima

• Odre|ivanjem svojstava Class, SourceDoc i SourceItem u prozoru s svojstvima.Pogledajte “Stvaranje objekata tijekom izvo|enja s kontrolom OLE spremnika”,kasnije u ovom poglavlju.

• Pozivanjem postupaka CreateEmbed ili CreateLink. Pogledajte “Stvaranje objekatatijekom izvo|enja s kontrolom OLE spremnika”, kasnije u ovom poglavlju.

Za vi{e informacija Za vi{e informacija o kori{tenju kontrole OLE spremnika,pogledajte “Kori{tenje kontrole OLE spremnika” u 7. poglavlju “Kori{tenje standard-nih kontrola Visual Basica”.

Ubacivanje objekta dodavanjem njegove klase alatnom okviruNa isti na~in kako koristite alatni okvir za dodavanje aplikaciji neke od kontrolaugra|enih u Visual Basic, mo`ete upotrijebiti alatni okvir za dodavanje objekta. Prvo,dodajte klasu objekta alatnom okviru, pa zatim dodajte objekt formi.

Kako alatnom okviru dodati klasu objekta

1. U izborniku Project odaberite Components.

2. U dijalo{kom okviru Components kliknite karticu Insertable Objects.

3. Odaberite klasu koju `elite dodati alatnom okviru, pa kliknite OK. Visual Basic }ealatnom okviru dodati gumb za tu klasu.

Na primjer, kako bi alatnom okviru dodali gumb za radni list Microsoft Excela,odaberite Microsoft Excel Worksheet.

Jednom kad ste dodali klasu objekta alatnom okviru, mo`ete je potegnuti na formukako bi stvorili objekt te klase. Na primjer, nakon {to ste alatnom okviru dodali gumbMicrosoft Excel Worksheet, mo`ete ga potegnuti na formu kako bi stvorili objektradnog lista na formi.

Razlike me|u povezanim i umetnutim objektimaVidljivo su~elje sastavnog dijela koristite za spremanje podataka iz druge aplikacijepovezivanjem ili umetanjem tih podataka u svoju Visual Basic aplikaciju. Temeljnarazlika izme|u povezanog i umetnutog objekta je u mjestu spremanja podataka. Naprimjer, podacima pridru`enima povezanom objektu upravlja aplikacija koja ih je stvo-rila i spremila izvan kontrole OLE spremnika. Podaci pridru`eni umetnutom objektusadr`ani su u kontroli OLE spremnika i mogu biti snimljeni zajedno s va{om VisualBasic aplikacijom.

Kad je stvoren povezan ili umetnut objekt, sadr`i ime aplikacije koja pribavlja objekt,njegove podatke (ili, u slu~aju povezanog objekta, pokaziva~ na podatke) i slikupodataka.

Napomena Kako bi postavili objekt u kontrolu OLE spremnika, sastavni dio kojipru`a objekt mora biti registriran u va{im sistemskim registrima. Kad instalirateaplikaciju koja pribavlja objekte koje `elite koristiti u svom projektu, ta aplikacija bina va{em sustavu trebala registrirati svoju biblioteku objekata tako da se objekti teaplikacije pojavljuju u dijalo{kom okviru Insert Object. Mo`ete upotrijebitiaplikaciju Regedit.exe za tra`enje objekta u sistemskim registrima, ali pripazite dane mijenjate sadr`aje registara.

II. dio [to mo`ete napraviti s Visual Basicom

530 Vodi~ za programere

Page 33: 10 - programiranje sastavnim dijelovima

Povezani objektiKad pove`ete objekt, u svoju aplikaciju ubacujete oznaku mjesta (a ne same stvarnepodatke) za povezan objekt. Na primjer, kad pove`ete niz }elija prora~unske tablice sVisual Basic aplikacijom, podaci pridru`eni s }elijama spremljeni su u drugoj datoteci;u kontroli OLE spremnika nalaze se samo veza prema podacima i slika podataka. Tije-kom rada s va{om Visual Basic aplikacijom, korisnik mo`e aktivirati povezani objekt(dvoklikom na objekt, na primjer), a aplikacija prora~unske tablice }e se automatskipokrenuti. Korisnik zatim mo`e editirati te }elije prora~unske tablice koriste}i aplikaci-ju prora~unske tablice. Kod editiranja povezanog objekta, editiranje se obavlja u odvo-jenom prozoru izvan kontrole OLE spremnika.

Kad je objekt povezan s Visual Basic aplikacijom, trenutni podaci objekta mogu se vi-djeti iz bilo koje aplikacije koja sadr`i veze s tim podacima. Podaci postoje samo najednom mjestu – ActiveX sastavnom dijelu – koji je izvorna aplikacija koja pru`aobjekt. Na primjer, na slici 10.8, Visual Basic sadr`i vezu na aplikaciju Graph. Apli-kacija Microsoft Word tako|er sadr`i vezu na grafikon. Ako su podaci grafikona pro-mijenjeni bilo kojom od ove dvije aplikacije, promijenjeni grafikon }e se pojaviti uobje aplikacije – u Visual Basic aplikaciji i u dokumentu Microsoft Worda.

Slika 10.8 Podacima objekta mo`e se pristupati iz puno razli~itihaplikacija koje sadr`e veze na te podatke

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 531

Visual Basic Application Word for Windows

MS Graph

Linked data

aplikacija Visual Basica Word za Windowse

MS grafikon

povezani podaci

Page 34: 10 - programiranje sastavnim dijelovima

Kao {to mo`ete vidjeti, povezivanje ~ini laganim pra}enje pojedinih informacija kojese pojavljuju u vi{e od jedne aplikacije. Povezivanje je korisno kad `elite odr`avatijedan skup podataka kojima se pristupa iz vi{e aplikacija.

Umetnuti objektiKako bi stvorili umetnuti objekt, mo`ete upotrijebiti kontrolu OLE spremnika ilidodati klasu objekta alatnom okviru. Sa umetnutim objektima, svi podaci pridru`eni sobjektom su kopirani i sadr`ani u kontroli OLE spremnika. Kad snimite sadr`aj kont-role u datoteku, ta datoteka sadr`i ime aplikacije koja je proizvela objekt, podatkeobjekta, te sliku objekta u metadatoteci. Zbog toga, umetnuti objekti mogu znatnopove}ati veli~inu datoteke.

Za razliku od povezanih objekata, nijedna druga aplikacija nema pristup podacima uumetnutom objektu. Umetanje je korisno kad `elite da va{a aplikacija odr`ava podatkekoji su proizvedeni i editirani u drugoj aplikaciji, kao {to je prikazano na slici 10.9.

Slika 10.9 Va{a aplikacija odr`ava podatke za umetnuti objekt

II. dio [to mo`ete napraviti s Visual Basicom

532 Vodi~ za programere

Visual Basic OLE objekt MS grafikon

Kad korisnik aktivira objekt (grafikon), aplikacije spremnika poziva ActiveX sastavnidio koji je stvorio objekt (Microsoft Graph), a podaci objekta se otvaraju za editiranje.Kao dodatak, u aplikaciji spremnika prikazuje se korisni~ko su~elje i sustav izbornikaobjekta tako da korisnik mo`e nadzirati objekt na mjestu. Za vi{e informacija o aktivi-ranju na mjestu, pogledajte “Aktiviranje objekta u kontroli OLE spremnika”, kasnije uovom poglavlju.

Ubacivanje objekata tijekom izrade s kontrolom OLE spremnikaSvaki put kad na formi stvorite kontrolu OLE spremnika, Visual Basic prikazuje dija-lo{ki okvir Insert Object. Taj dijalo{ki okvir, prikazan na slici 10.10, upotrebljavate zaubacivanje povezanih ili umetnutih objekata tijekom izrade aplikacije. Dijalo{ki okvirInsert Object predstavlja listu dostupnih objekata koje mo`ete povezati ili umetnuti usvoju aplikaciju.

Page 35: 10 - programiranje sastavnim dijelovima

Slika 10.10 Dijalo{ki okvir Insert Object

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 533

Kad tijekom izrade aplikacije ubacite objekt u kontrolu OLE spremnika, automatski sepostavljaju svojstva Class, SourceDoc i SourceItem. Ova svojstva ozna~uju aplikacijukoja pribavlja objekt, ime izvorne datoteke te sve specifi~ne podatke koji su povezaniiz te datoteke.

Ubacivanje povezanih objekata tijekom izrade aplikacijeKad ubacite povezan objekt, podaci prikazani u kontroli OLE spremnika postoje najednom mjestu – izvornoj datoteci. Trenutni podaci objekta mogu se vidjeti iz bilo kojeaplikacije koja ima vezu s tim podacima. Kontrola OLE spremnika odr`ava informaci-je o vezi s objektom, kao {to su ime aplikacije koja je pribavila objekt, ime povezanedatoteke te slika povezanih podataka.

Kako ubaciti povezan objekt kori{tenjem dijalo{kog okvira Insert Object

1. Stvorite kontrolu OLE spremnika na formi.

Prikazat }e se dijalo{ki okvir Insert Object. Taj dijalo{ki okvir mo`ete tako|erprikazati u svako vrijeme klikom desnom tipkom mi{a na kontrolu OLE spremni-ka te odabirom naredbe Insert Object.

2. Odaberite gumb izbora Create from File.

3. Odaberite gumb Browse.

Prikazat }e se dijalo{ki okvir Browse.

4. Odaberite datoteku s kojom se `elite povezati.

Page 36: 10 - programiranje sastavnim dijelovima

5. Kliknite Insert za povratak u dijalo{ki okvir Insert Object.

6. Odaberite kontrolnu ku}icu Link u dijalo{kom okviru Insert Object, te odaberiteOK za stvaranje povezanog objekta.

Kad koristite povezani objekt, svaki korisnik koji pokrene va{u aplikaciju mora imatipristup (valjanu stazu) povezanoj datoteci i kopiju aplikacije koja je stvorila datoteku.Ina~e, kad se pokrene va{a aplikacija, prikazat }e se slika originalnih podataka, ali ko-risnik ne}e biti u mogu}nosti mijenjati podatke, niti }e vidjeti promjene koje su napra-vili drugi u povezanim podacima. To mo`e biti va`no ako se va{a aplikacija izvodi umre`i.

Ako va{a aplikacija sadr`i povezani objekt, mogu}e je da }e podaci tog objekta bitipromijenjeni u drugoj aplikaciji dok se va{a aplikacija ne izvodi. Idu}i put kad se va{aaplikacija pokrene, promjene u izvoru ne}e se automatski pojaviti u kontroli OLEspremnika. Kako bi prikazali trenutne podatke u kontroli OLE spremnika, upotrijebitepostupak Update kontrole:

oleObj.Update

Za vi{e informacija Pogledajte “Postupak Update (OLE spremnik)” u biblioteciMicrosoft Visual Basic 6.0 Reference Library.

Ako korisnik `eli snimiti promjene u povezanom objektu, mora ih snimiti iz izbornikaActiveX sastavnog dijela. postupak SaveToFile kontrole OLE spremnika primjenjiv jesamo za umetnute objekte.

Stvaranje umetnutih objekata tijekom izrade aplikacijeKad stvarate umetnuti objekt, mo`ete umetnuti podatke iz datoteke ili stvoriti nov,prazan objekt koje }e kasnije biti popunjen podacima. Kad umetnete podatke izdatoteke, u kontroli OLE spremnika prikazuje se kopija podataka odre|enog objekta.Kad stvorite nov objekt, poziva se aplikacija koja je stvorila taj objekt i mo`ete unijetipodatke u objekt.

U pravilu, umetnute objekte koji prikazuju postoje}e podatke stvarate tijekom izradeaplikacije. To vam omogu}uje pregled podataka objekta onako kako }e biti predstavl-jeni korisniku. Mo`ete pomicati kontrolu OLE spremnika i ostale kontrole na formi teim mijenjati veli~inu kako bi stvorili korisni~ko su~elje va{e aplikacije.

Kako bi prikazali postoje}e podatke u umetnutom objektu, stvorite objekt kori{tenjempostoje}e datoteke kao predlo{ka. Kontrola OLE spremnika tad sadr`i sliku podataka udatoteci. Aplikacija koja prikazuje podatke kori{tenjem umetnutog objekta bit }e ve}aod aplikacije koja prikazuje iste podatke kori{tenjem povezanog objekta, zato jeraplikacija s umetnutim objektom stvarno sadr`i podatke izvorne datoteke.

II. dio [to mo`ete napraviti s Visual Basicom

534 Vodi~ za programere

Page 37: 10 - programiranje sastavnim dijelovima

Kako stvoriti umetnuti objekt kori{tenjem postoje}e datoteke

1. Stvorite kontrolu OLE spremnika na va{oj formi.

Automatski se prikazuje dijalo{ki okvir Insert Object.

2. Odaberite gumb izbora Create from File.

3. Odaberite gumb Browse.

Prikazati }e se dijalo{ki okvir Browse.

4. Odaberite datoteku koju `elite umetnuti.

5. Odaberite Insert za povratak u dijalo{ki okvir Insert Object.

6. U dijalo{kom okviru Insert Object, odaberite OK za stvaranje umetnutog objekta.

Za razliku od podataka u povezanom objektu, podaci u umetnutom objektu nisu posto-jani. Drugim rije~ima, ako `elite da se promjene koje je unio korisnik pojave kad seidu}i put pokrene va{a aplikacija, morate upotrijebiti postupak SaveToFile za snimanjepodataka. Za vi{e informacija o snimanju umetnutih podataka u datoteku, pogledajte“Snimanje i dohva}anje umetnutih podataka”, kasnije u ovom poglavlju.

Stvaranje objekata kori{tenjem dijalo{kogokvira Paste SpecialDrugi na~in stvaranja objekta tijekom izrade aplikacije je kori{tenje dijalo{kog okviraPaste Special (prikazanog na slici 10.11). Ovaj dijalo{ki okvir je koristan ako samo`elite upotrijebiti dio datoteke – na primjer, skup }elija iz prora~unske tablice, ili odlo-mak iz Word dokumenta.

Slika 10.11 Dijalo{ki okvir Paste Special

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 535

Page 38: 10 - programiranje sastavnim dijelovima

Kako stvoriti objekt kori{tenjem dijalo{kog okvira Paste Special

1. Pokrenite aplikaciju koja sadr`i podatke koje `elite povezati ili umetnuti.

2. Odaberite podatke koje `elite povezati ili umetnuti.

3. U izborniku Edit ActiveX sastavnog dijela, odaberite Copy.

Podaci }e se kopirati u odlagali{te.

4. U Visual Basicu, kliknite kontrolu OLE spremnika s desnom tipkom mi{a, iodaberite naredbu Paste Special iz pomo}nog izbornika.

5. Odaberite gumb izbora Paste ako `elite stvoriti umetnuti objekt.

- ili -

Odaberite gumb izbora Paste Link ako `elite stvoriti povezan objekt.

Ako u kontroli ve} postoji objekt koji je umetnut ili povezan, poruka }e vas upitati`elite li obrisati taj postoje}i objekt i stvoriti novi na njegovom mjestu.

1. Odaberite OK za stvaranje objekta.

Stvaranje objekata tijekom izvo|enja s kontrolom OLE spremnikaKako bi tijekom izvo|enja aplikacije stvorili povezan ili umetnut objekt, upotrijebitepostupke i svojstva u programskom kodu. Kontrola OLE spremnika ima niz svojstava ipostupaka koje mo`ete upotrijebiti za upravljanje povezanim ili umetnutim objektima.Za potpunu listu svojstava i postupaka koji se primjenjuju s kontrolom OLE spremni-ka, pogledajte “Kontrola OLE spremnika”, u stalnoj pomo}i.

Kori{tenje svojstva ObjectKori{tenjem svojstva Object kontrole OLE spremnika, tako|er mo`ete koristiti svojst-va i postupke povezanog ili umetnutog objekta. Svojstvo Object dostupno je samotijekom izvo|enja, samo je za ~itanje i sadr`i pokaziva~ na objekt u kontroli OLEspremnika. Upotrijebite to svojstvo za izvo|enje zadataka automatizacije s kontrolomOLE spremnika, uklju~uju}i programsko upravljanje svojstvima i postupcima kojepodr`ava objekt:

strObjIme = oleObj1.Object.Name

Kako bi mogli upotrijebiti ovo svojstvo, kontrola OLE spremnika mora sadr`avatiobjekt koji je programabilan. Za vi{e informacija o programabilnim objektima,pogledajte “Tipovi ActiveX sastavnih dijelova”, u stalnoj pomo}i.

II. dio [to mo`ete napraviti s Visual Basicom

536 Vodi~ za programere

Page 39: 10 - programiranje sastavnim dijelovima

Stvaranje povezanih objekata tijekom izvo|enjaTijekom izvo|enja aplikacije povezani objekt mo`ete stvoriti iz datoteke kori{tenjempostupka CreateLink kontrole OLE spremnika. Ovaj postupak tra`i jedan argument,dokumentizvora, koji je datoteka iz koje je objekt stvoren, i neobavezni argumentstavkaizvora, koji odre|uje podatak iz izvorne datoteke s kojim se `elite povezati.Sljede}i dio programskog koda stvara povezan objekt tijekom izvo|enja:

oleObj1.CreateLink “C:\Excel\Test.xls”

Napomena Ako upotrijebite postupak CreateLink za stvaranje povezanog objek-ta, ne trebate odrediti svojstva Class, SourceDoc i SourceItem u prozoru s svojstvi-ma.

Za vi{e informacija Pogledajte “Postupak CreateLink” u priru~niku MicrosoftVisual Basic 6.0 Langugage Reference.

Stvaranje umetnutih objekata tijekom izvo|enjaKako bi stvorili umetnuti objekt iz datoteke tijekom izvo|enja aplikacije, mo`eteupotrijebiti postupak CreateEmbed. Ovaj postupak ima dva argumenta, dokumentizvo-ra i klasa (koji je neobavezan ako je postavljeno svojstvo SourceDoc).Dokumentizvora odre|uje predlo`ak za objekt, a klasa odre|uje tip objekta. Kad koris-tite postupak CreateEmbed, ne trebate odre|ivati svojstva SourceDoc i Class.

Sljede}i dio programskog koda stvara umetnut objekt kori{tenjem postoje}e datotekekao predlo{ka za objekt.

oleObj1.CreateEmbed “Q1profit.xls”

Za vi{e informacija Pogledajte “Postupak CreateEmbed”, u priru~niku MicrosoftVisual Basic 6.0 Langugage Reference.

Kad stvorite prazan umetnut objekt, dobra je ideja pokrenuti ActiveX sastavni dio koji}e pru`iti podatke za objekt. Mo`ete to napraviti s postupkom DoVerb. To omogu}ujekorisniku da tijekom izvo|enja aplikacije unese bilo kakve podatke. Nakon toga kori-snik mo`e prikazati te nedavno unesene podatke u kontroli OLE spremnika odabiromnaredbe Update ActiveX sastavnog dijela (ta naredba izbornika trebala bi se pojaviti uizborniku File sastavnog dijela).

Kako stvoriti prazan umetnut objekt tijekom izvo|enja aplikacije

1. Upotrijebite postupak CreateEmbed bez odre|ivanja izvornog dokumenta kako bistvorili prazan umetnut objekt. Na primjer, ovaj dio koda ubacuje predlo`ak za radnilist Microsoft Excela u kontrolu OLE spremnika:

oleObj1.CreateEmbed “” “Excel.Sheet”

2. Upotrijebite postupak DoVerb. Podrazumijevan glagol (verb) za postupak DoVerbovisi o aplikaciji. Kod Microsoft Excela, podrazumijevan glagol je Edit.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 537

Page 40: 10 - programiranje sastavnim dijelovima

Na primjer, sljede}i dio programskog koda stvara prazan umetnut objekt te zatimpokre}e aplikaciju koja ga je stvorila kori{tenjem podrazumijevane akcije DoVerb.

oleObj1.CreateEmbed “” “Excel.Sheet”oleObj1.DoVerb -5 ‘ Pokretanje

Pru`anje praznih umetnutih objekata korisno je kod stvaranja aplikacija temeljenih nadokumentima koje koriste raznolike informacije iz razli~itih aplikacija. Za vi{e infor-macija, pogledajte “Dopu{tanje korisniku da odredi objekte tijekom izvo|enja”, u nas-tavku.

Povezivanje baze podataka s kontrolom OLE spremnikaKontrolu OLE spremnika mo`ete povezati s podacima spremljenim u Microsoft Jetmehanizmu za baze podataka ili u bazi podataka Microsoft Access. Mo`ete to po`eljetinapraviti, na primjer, ako imate bazu podataka s tablicom slika djelatnika. Ako su slikespremljene kao objekti, mo`ete ih povezati s kontrolom OLE spremnika i prikazati ihna formi kad se pristupi svakom zapisu s kontrolom podataka. Kako bi povezalipodatke s jednom od tih baza podataka, odredite izvor podataka (ime skupa slogova) usvojstvu DataSource te ime polja iz tog izvora podataka u svojstvu DataField kontroleOLE spremnika. Kod prikazivanja objekta iz baze podataka, kontrola OLE spremnikaomogu}uje korisniku pokretanje, editiranje i a`uriranje objekta. Kao i kod svih kontro-la povezivanja, a`urirani objekt se automatski zapisuje natrag u bazu podataka kad sepromijeni polo`aj zapisa.

Dopu{tanje korisniku da odredi objekte tijekom izvo|enjaPrikazivanjem dijalo{kih okvira Paste Special i Insert Object tijekom izvo|enja, mo`e-te omogu}iti korisniku da stvori razne objekte. Mo`ete to napraviti kad stvarate apli-kaciju temeljenu na dokumentima. U takvoj aplikaciji, korisnik spaja podatke iz raznihaplikacija kako bi stvorio jedan dokument. Na primjer, ta aplikacija mogla bi bitiobradnik teksta u kojem korisnik mo`e unijeti neki tekst te zatim umetnuti prora-~unsku tablicu i grafikon kori{tenjem dijalo{kih okvira Insert Object ili Paste Special.

Postupak InsertObjDlg kontrole OLE spremnika koristite za prikaz dijalo{kog okviraInsert Object, a postupak PasteSpecialDlg mo`ete upotrijebiti za prikaz dijaloga PasteSpecial. Ova dva dijaloga omogu}uju korisniku da odlu~i {to }e biti postavljeno u kon-trolu OLE spremnika.

• Dijalo{ki okvir Insert Object predstavlja listu dostupnih objekata i stvara objekttemeljen na odabiru korisnika.

• Dijalo{ki okvir Paste Special omogu}uje korisniku da ulijepi objekt iz sistemskogodlagali{ta (Clipboard) u kontrolu OLE spremnika.

Ove dijalo{ke okvire mo`ete prikazati tijekom izvo|enja pozivom odgovaraju}eg po-stupka ili doga|aja – na primjer, doga|aja Click izbornika:

II. dio [to mo`ete napraviti s Visual Basicom

538 Vodi~ za programere

Page 41: 10 - programiranje sastavnim dijelovima

Private Sub cmdUbaci_Click()‘ Prikaz dijalo{kog okvira Insert Object.oleObj1.InsertObjDlg‘ Provjera svojstvom OLEType je li objekt stvoren.If oleObj1.OLEType = vbOLENone Then

MsgBox “Objekt nije stvoren.”End If

End Sub

Private Sub oleObj1_Click()‘ Utvr|ivanje mo`e li podatak koji je u odlagali{tu‘ biti ulijepljen u kontrolu OLE spremnika.If oleObj1.PasteOK Then

‘ Prikaz dijalo{kog okvira Paste Special.oleObj1.PasteSpecialDlg‘ Provjera je li objekt stvoren.If oleObj1.OLEType = vbOLENone Then

MsgBox “Objekt nije stvoren.”End If

End IfEnd Sub

Kad se dijalo{ki okvir jednom prika`e, ne trebate pisati dodatni programski kod zastvaranje objekta. Korisnik ~ini odabire u dijalo{kom okviru i odabire OK za stvaranjeobjekta. Ako korisnik poni{ti dijalog, objekt ne}e biti stvoren.

Napomena Prije prikazivanja dijalo{kih okvira Insert Object ili Paste Special,mo`ete po`eljeti ustvrditi vrijednost svojstva OLEType kako bi vidjeli sadr`ava likontrola OLE spremnika povezan objekt, umetnut objekt ili ne sadr`ava ni{ta, kao{to je prikazano u prethodnom primjeru programskog koda.

Konstanta vbOLENone i ostale ugra|ene konstante izlistane su objektnoj biblioteciVisual Basic (VB) u pretra`iva~u objekata.

Odre|ivanje kako se objekt prikazuje u kontroli OLE spremnikaSvojstvo DisplayType kontrole OLE spremnika mo`ete upotrijebiti za nazna~ivanjeho}e li se objekt pojaviti kao ikona (postavite DisplayType = 1), ili }e podaci objektabiti prikazani kao kontrola (postavite DisplayType = 0). Ovo svojstvo tako|er odre|ujestandardnu postavku za kontrolnu ku}icu Display As Icon kad se prika`u dijalo{kiokviri Insert Object i Paste Special tijekom izvo|enja i izrade aplikacije.

Napomena Kad kontrola OLE spremnika jednom sadr`ava objekt, ne mo`etepromijeniti njezin tip prikazivanja. Mo`ete, me|utim, obrisati povezan ili umetnutobjekt, odrediti svojstvo DisplayType, te ubaciti nov objekt.

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 539

Page 42: 10 - programiranje sastavnim dijelovima

Svojstvo SizeMode upotrebljavate za odre|ivanje kako }e ikona objekta ili slika podat-ka biti prikazana u kontroli OLE spremnika kad kontrola nije aktivna u korisni~komsu~elju. Postavke 0 – Clip ili 3 – Zoom re`e vi{ak slike tako da odgovara veli~ini kont-role, ali ne mijenja stvarnu veli~inu slike (mo`da ne}ete vidjeti cijelu sliku kad je editi-rate). Objekt koji je manji od kontrole editira se u podru~ju manjem od kontrole.Objekt ve}i od kontrole popunjava cijelo podru~je spremnika kontrole i mo`e bitiodrezan ako je ve}i od tog podru~ja. Suprotno tome, postavljanje svojstva SizeModena 2 – AutoSize mijenja veli~inu kontrole tako da odgovara veli~ini slike.

Aktiviranje objekta u kontroli OLE spremnikaDok postupak DoVerb kontrole OLE spremnika aktivira objekt tijekom izvo|enjaaplikacije, svojstvo AppIsRunning mo`ete upotrijebiti za odre|ivanje je li aplikacijakoja pribavlja objekt aktivna i izvodi li se. Svojstvo AppIsRunning mo`ete postaviti naTrue kako bi pokrenuli ActiveX sastavni dio, {to }e uzrokovati br`e aktiviranje objeka-ta. Ovo svojstvo mo`ete tako|er postaviti na False kako bi zatvorili aplikaciju ilipoduzeli drugu prikladnu akciju kad objekt izgubi fokus.

Zamjensko aktiviranjeNeki umetnuti objekti mogu biti editirani (aktivirani) iz kontrole OLE spremnika. Tose naziva zamjensko aktiviranje (in-place activation), Budu}i da korisnik mo`e dvaputa kliknuti na objekt u va{oj aplikaciji i sura|ivati s aplikacijom koja pribavljaobjekt, bez prebacivanja na drugu aplikaciju ili prozor.

Za objekte koji podr`avaju zamjensko aktiviranje, mo`ete odrediti svojstvoAutoActivate tako da korisnik mo`e aktivirati objekt u svako vrijeme. Zna~i, kad jesvojstvo AutoActivate kontrole OLE spremnika postavljeno na Double-Click, korisnikmo`e dva puta kliknuti kontrolu kako bi je aktivirao. Va`no je zapamtiti da aktiviranjeobjekta pokre}e aplikaciju tog objekta ako se ona ve} ne izvodi.

Napomena Ako tijekom izvo|enja `elite prikazati izbornike ActiveX sastavnogdijela kad korisnik klikne kontrolu OLE spremnika, morate odrediti bar jednu stav-ku izbornika za formu i postaviti njeno svojstvo Visible na False. To mo`e biti ne-vidljivi izbornik ako ne `elite prikazati ni jedan izbornik. Pogledajte 6. poglavlje“Stvaranje korisni~kog su~elja”, za vi{e informacija o prikazivanju izbornika i alat-nih traka ActiveX sastavnog dijela u aplikaciji spremnika kad je objekt aktivirantijekom izvo|enja te aplikacije.

Odgovaranje na pomicanje i promjenu veli~ine spremnikaKontrola OLE spremnika ima doga|aj ObjectMove, koji se izaziva kad se objekt pri-dru`en s kontrolom OLE spremnika pomakne ili mu se promijeni veli~ina. Argumentidoga|aja ObjectMove predstavljaju koordinate objekta (bez njegovog okvira) unutarspremnika objekta. Ako je objekt maknut s forme, argumenti imaju vrijednosti koje

II. dio [to mo`ete napraviti s Visual Basicom

540 Vodi~ za programere

Page 43: 10 - programiranje sastavnim dijelovima

predstavljaju polo`aje relativne u odnosu na gornji lijevi kut forme. Te vrijednostimogu biti pozitivne ili negativne. Ako su promijenjena svojstva Width ili HeightActiveX sastavnog dijela, o tome }e biti obavije{tena kontrola OLE spremnika.

Doga|aj ObjectMove je jedini na~in na koji kontrola OLE spremnika mo`e ustvrditida je objekt pomican ili mu je promijenjena veli~ina. Doga|aj ObjectMove pojavljujese kad korisnik pomakne ili promijeni veli~inu objektu sadr`anom u kontroli OLEspremnika. Na primjer:

Private Sub oleObj1_ObjectMove(Left As Single, _Top As Single, Width As Single, Height As Single)

‘ Ovaj postupak mijenja veli~inu kontrole OLE‘ spremnika na veli~inu novog objekta.oleObj1.Move oleObj1.Left, oleObj1.Top, Width, Height‘ Ovaj postupak pomi~e kontrolu OLE spremnika‘ na polo`aj novog objekta.oleObj1.Move Left, Top, _oleObj1.Width, oleObj1.Height‘ Ponovno iscrtavanje forme.Me.Refresh

End Sub

Snimanje i dohva}anje umetnutih podatakaPodaci pridru`eni s umetnutim objektom nisu postojani; zna~i, kad se zatvori formakoja sadr`i kontrolu OLE spremnika, sve promjene u podacima pridru`enim tom kon-trolom su izgubljene. Kako bi snimili a`urirane podatke iz objekta u datoteku, upotri-jebite postupak SaveToFile kontrole OLE spremnika. Kad su jednom podaci snimljeniu datoteku, mo`ete otvoriti tu datoteku i obnoviti objekt.

Ako je objekt povezan (OLEType = 0 – Linked), tada se u odre|enu datoteku snimajusamo informacija o vezi i slika podataka. Podatke objekta odr`ava aplikacija koja jestvorila objekt. Ako korisnik `eli snimiti promjene u povezanu datoteku, mora odabratinaredbu Save iz izbornika File ActiveX sastavnog dijela jer je postupak SaveToFileprimjenjiv samo za umetnute objekte.

Ako je objekt umetnut (OLEType = 1 – Embedded), podatke objekta odr`ava kontrolaOLE spremnika i mogu biti snimljeni iz va{e Visual Basic aplikacije.

Objekti u kontroli OLE spremnika mogu biti snimljeni samo u otvorene, binarnedatoteke.

Kako snimiti podatke iz objekta u datoteku

1. Otvorite datoteku u binarnom modu.

2. Upotrijebite postupak SaveToFile.

Potprogram doga|aja cmdSnimiObjekt_Click prikazuje ove korake:

Private Sub cmdSnimiObjekt_Click()Dim BrojDat as Integer

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 541

Page 44: 10 - programiranje sastavnim dijelovima

‘ Dobivanje broja datoteke.BrojDat = FreeFile‘ Otvaranje datoteke u koju se snima.

Open “TEST.OLE” For Binary As #BrojDat‘ Snimanje datoteke.oleObj1.SaveToFile BrojDat‘ Zatvaranje datoteke.Close #BrojDat

End Sub

Kad je objekt jednom snimljen u datoteku, mo`e biti otvoren i prikazan u kontroliOLE spremnika.

Napomena Kad koristite postupke SaveToFile ili ReadFromFile, polo`ajdatoteke se smje{ta odmah iza objekta. Zbog toga, ako snimate vi{e objekata udatoteku, trebate ih ~itati po istom redu kako ste ih snimali.

Kako u~itati podatke iz datoteke u kontrolu OLE spremnika

1. Otvorite datoteku u binarnom modu.

2. Upotrijebite postupak ReadFromFile na objektu.

Potprogram doga|aja cmdOtvoriObjekt_Click prikazuje ove korake:

Private Sub cmdOtvoriObjekt_Click()Dim BrojDat As Integer‘ Dobivanje broja datoteke.BrojDat = FreeFile‘ Otvaranje datoteke.Open “TEST.OLE” For Binary As #BrojDat‘ ^itanje datoteke.oleObj1.ReadFromFile BrojDat‘ Zatvaranje binarne datoteke.Close #BrojDat

End Sub

Doga|aj Updated poziva se svaki put kad je promijenjen sadr`aj objekta. Ovaj doga|ajje koristan za utvr|ivanje jesu li podaci objekta bili mijenjani nakon {to su posljednjiput snimljeni. Kako bi to napravili, postavite op}u varijablu u doga|aju Updated koja}e pokazivati da objekt treba biti snimljen. Kad snimite objekt, obnovite Varijablu.

II. dio [to mo`ete napraviti s Visual Basicom

542 Vodi~ za programere

Page 45: 10 - programiranje sastavnim dijelovima

10. poglavlje Programiranje sastavnim dijelovima

Vodi~ za programere 543