Download as pdf or txt
Download as pdf or txt
You are on page 1of 417

KUZMINA JEKATYERINA DR.

TAMS PTER TTH BERTALAN

Programozzunk

Visual Basic
rendszerben!
LEKTOR

TTH BERTALAN

COMPUTERBOOKS BUDAPEST, 2006

A knyv ksztse sorn a Szerz s a Kiad a legnagyobb gondossggal jrtak el. Ennek ellenre hibk el fordulsa nem kizrhat. Az ismeretanyag felhasznlsnak kvetkezmnyeirt sem a Kiad, sem a Szerz felel ssget nem vllalnak. A knyv az Oktatsi Minisztrium tmogatsval, a Fels oktatsi Plyzatok Irodja ltal lebonyolitott Fels oktatsi Tanknyv- s Szakknyvtmogaiisi Plyzat Oktatsi keretben jelent meg Minisztrium Minden jog fenntartva. Jelen knyvet, vagy annak rszleteit a Kiad engedlye nlkl brmilyen formban, vagy eszkzzel reproduklni, trolni, kzlni tilos.

Kuzmina Jekatyerina, dr. Tams Pter, Tth Bertalan, 2003

ISBN: 963 61 8 308 2

Kiad. ComputerBooks Kiad Kft 1126 Budapest Tartsay Vilmos u. 12 Telefon/fax. 3753-591, 3751-564 Email: info@computerbooks.hu http:www.computerbooks.hu bortterv: Szkely Edith

Tar talomj egyzk


ELOSZO ............................................................................................... 1

1. BEVEZETS ................................................................................... 5 2. A VISUAL BASIC NYELV .....................................................................7


2.1. A Visual Basic nyelv elemei .............................................................................................7 2.1.1. A nyelv jelkszlete .....................................................................................................7 2.1.2. Kulcsszavak ................................................................................................................7 2.1.3. A program sorai ..........................................................................................................9 2.1.4. Azonostk................................................................................................................10 2.1.5. Szmok .....................................................................................................................10 2.1.6. Szvegkonstansok ....................................................................................................11 2.1.7. Operandusok.............................................................................................................12 2.1.8. Opertorok................................................................................................................12 2.1.9. Kifejezsek ...............................................................................................................12 2.1.10. A programoz megjegyzsei a programban ........................................................... 12 2.2. A Visual Basic alkalmazsok felptse ......................................................................... 13 2.2.1. Grafikus felhasznli fellet alkalmazs ksztse ................................................. 14 2.2.2. Ablak nlkli Visual Basic alkalmazs ksztse......................................................\5 2.2.3. A Visual Basic programmodulok felptse.............................................................. 16 2.2.4. A minimlis Visual Basic alkalmazs ...................................................................... 17 2.3. Vltozk, konstansok s adattpusok ............................................................................ 19 2.3.1. Vltozk deklarcija............................................................................................... 19 2.3.1.1. A Private, a Public s a Static vltoz-deklarcik ....................................... 20 2.3.1.2. A Deftpus utastsok ................................................................................... 20 2.3.1.3. Implicit deklarci........................................................................................ 2! 2.3.2. Konstansok a Visual Basic-ben................................................................................ 22 2.3.3. Adattpusok .............................................................................................................. 25 2.3.3.1. Egsz tpusok................................................................................................ 26 2.3.3.2.Vals tpusok ................................................................................................. 27 2.3.3.3. A karaktersorozat-tpusok ............................................................................ 28 2.3.3.4. A varins tpus.............................................................................................. 30 2.3.3.5. Statikus tmbk ............................................................................................ 31 2.3.3.6. Dinamikus tmbk ....................................................................................... 33 2.3.3.7. A felhasznli tpus ...................................................................................... 35 2.3.3.8. Objektum-referencia..................................................................................... 37 2.3.4. Tpusazonosts s tpuskonverzi ........................................................................... 38 2.3.4.1. Tpusok azonostsa ..................................................................................... 38 2.3.4.2. Tpuskonverzik........................................................................................... 39

TARTALOM JEGYZEK

2.4. Visual Basic kifejezsek................................................................................................. 42 2.4.1. Egy- s ktoperandus mveietek............................................................................ 42 2.4.2. Els bbsgi szablyok............................................................................................... 42 2.4.3. A mveletek csoportostsa ..................................................................................... 43 2.4.3.1. Aritmetikai m veletek.................................................................................. 43 2.4.3.2. Logikai mveletek ....................................................................................... 45 2.4.3.3. Bitenknt vgzett logikai mveletek............................................................. 47 2.4.3.4. sszehasonlt (relcis) mveletek............................................................. 48 2.4.4. Mveletek karaktersorozatokkal ..............................................................................49 2.4.5. Mveletek id - s dtumadatokkal ...........................................................................55 2.4.6. Az osztly-hivatkozs opertor - Is ..........................................................................56 2.5. Utastsok s vezrlsi szerkezetek ................................................................................57 2.5.1. Szekvencia................................................................................................................57 2.5.1.1. Az rtkad utasts ......................................................................................57 2.5.1.2. Eljrshvs ...................................................................................................59 2.5.1.3.AWith utasts ...............................................................................................59 2.5.1.4.Tovbbi szekvencia-elemek............................................................................60 2.5.2. Szelekci............... ,..................................................................................................61 2.5.2.1. Az If utasts .................................................................................................61 2.5.2.2. A Select Case utasts ...................................................................................65 2.5.2.3. A Goto s Gosub utastsok ..........................................................................67 2.5.3. Iterci......................................................................................................................70 2.5.3.1. A For...Next utasts ...................................................................................70 2.5.3.2. A ForEach...Next utasts ...........................................................................73 2.5.3.3. A Do...Loop utastsok ................................................................................73 2.5.3.4. A While...Wend utasts ............................................................................75 2.6. Alprogramok ksztse s hasznlata............................................................................79 2.6.1. Az alprogramok szerkezete s helye a Visual Basic programban ............................8 I 2.6.1.1. Kilps az aiprogrambl ...............................................................................83 2.6.2. Fggvnyek s eljrsok ..........................................................................................83 2.6.2.1. Eljrsok ....................................................................................................... 84 2.6.2.2. Fggvnyek................................................................................................... 84 2.6.2.3. A fggvnyek s az eljrsok sszehasonltsa ............................................ 85 2.6.2.4. Rekurzv alprogramok .................................................................................. 86 2.6.3. Vltozk az alprogramokban..................................................................................... 87 2.6.3.1. Loklis deklarcik ...................................................................................... 87 2.6.3.2. Modulszint deklarcik............................................................................... 88 2.6.3.3. A vltoznevek rvnyessgi tartomnya (hatkre)................................... 89

TARTALOMJEGYZK

2.6.4. Az alprogramok paramterei ................................................................................... 89 2.6.4.1. rtkparamterek - az rtk szerinti paramtertads .................................. 90 2.6.4.2. Referencia-paramterek, a referencia szerinti paramtertads ................... 91 2.6.4.3. A paramterek s a fggvnyrtkek tpusa ..................................................93 2.6.4.4. Opcionlis argumentumok ............................................................................97 2.6.4.5. Tetsz leges szm argumentum hasznlata ..................................................98 2.6.4.6. Nevestett argumentumok hasznlata ............................................................99 2.6.4.7. DLL-ben trolt alprogramok hvsa ..............................................................99 2.6.4.8. A CallByNameO fggvny .........................................................................102 2.6.5. zleti s pnzgyi szmtsok ................................................................................103 2.7. Objektumok a Visual Basic-ben ..................................................................................106 2.7.1. Az objektumok felptse.......................................................................................107 2.7.2. Az el re elksztett objektumosztlyok pldnyai .................................................107 2.7.2.1. Formmsolatok ltrehozsa ........................................................................ 108 2.7.2.2. Vezrl eiemek tmbje ................................................................................109 2.7.2.3. Objektumok gy jtemnye (kollekcija, collection).................................... I 10 2.7.2.4. Rendszerobjektumok s -gy jtemnyek ..................................................... 112 2.7.3. Objektumok ltrehozsa a program futsa sorn.....................................................113 2.7.3.1. Windows alatt regisztrlt osztlyok elrse................................................. ! 13 2.7.3.2. Sajt osztlyok definilsa ......................................................................... 114

3. A VISUAL BASIC MINT A WINDOWS PROGRAMOZS ALAPESZKZE................................................................................................... 121


3.1. Esemnyvezrelt prograinpts.................................................................................. 121 3.1.1. Az alkalmazsok szerkezete................................................................................... 121 3.1.2. A projekt ................................................................................................................ 124 3.1.3. A Visual Basic integrlt fejleszt i krnyezete ....................................................... 125 3.1.3.1 Windows alkalmazs rsa Visual Basic-ben ............................................... 127 3.2. A form az alkalmazsok ablaka s krnyezete .......................................................... 128 3.2.1. Az rlap tulajdonsgai ........................................................................................... 128 3.2.2. A Form objektum metdusai ................................................................................. 128 3.2.3. A form esemnyei .................................................................................................. 130 3.2.4 Az App objektum.................................................................................................... 134 3.2.5 A Screen objektum ................................................................................................. 135 3.3 A vezrl elemek hasznlata...........................................................................................136 3.3.1. A vezrl k csoportostsa....................................................................................... 136 3.3.1.1. Alapvezrlk .............................................................................................. 136 3.3.1.2. ActiveX-vezrl k ........................................................................................138 3.3.2. A vezrlkr l ltalban.......................................................................................... 144 3.3.2.1. A vezrl k kzs tulajdonsgai...................................................................144 3.3.2.2. A vezrl k m kdtetse programbl ......................................................... 148 3.3.2.3. A vezrlk esemnyei .................................................................................151 3.3.2.4. A Frame (keret) vezrl ............................................................................. 152

TARTALOMJEGYZK

3.3.3. Az alapvezrl k hasznlata................................................................................... 153 3.3.3.1. A Label (cmke) vezrl ............................................................................ 153 3.3.3.2. A TextBox (szvegmez ) vezrl .............................................................. 155 3.3.3.3. A CommandButton (parancsgomb) vezrl ................................................157 3.3.3.4. A CheckBox (jell ngyzet) vezrl ..........................................................159 3.3.3.5. Az OptionButton (vlasztgomb) vezrl ..................................................161 3.3.3.6. A ListBox (lista) vezrl .............................................................................162 3.3.3.7. A ComboBox (kombinlt lista) vezrl ......................................................166 3.3.3.8. A ScrollBar (grgetsv) vezrl k ..............................................................168 3.3.3.9. Menk.........................................................................................................169 3.4. ActiveX-vezrl k hasznlata .......................................................................................175 3.4.1. A RichTextBox (b vtett szvegmez ) vezrl ......................................................175 3.4.2. A MaskEdBox (adatbeviteli sablon) vezrl ..........................................................177 3.4.3. Az UpDown (lptet ) vezrl ................................................................................178 3.4.4. A Slider (csszka) vezrl .....................................................................................180 3.4.5. A ProgressBar (munkafolyamat-kijelz ) vezrl ................................................... 182 3.4.6. Az MSFlexGrid (rugalmas tblzat) vezrl .......................................................... 184 3.5. Vczrl tmbk, objektumgy jtemnyek.................................................................... 188 3.5.1. Vezrltmbk hasznlata ..................................................................................... 188 3.5.2. Objektumgy jtemnyek hasznlata........................................................................ 191

4. PRBESZDABLAKOK, SDI S MDI ALKALMAZSOK..........................193


4.1. Prbeszdablakok hasznlata ..................................................................................... 194 4.1.1. A prbeszdablakok megjelentse s tulajdonsgaik ............................................ 196 4.1.2. Specilis prbeszdablakok.................................................................................... 198 4.1.2.1. Nvjegy (About Dialog) prbeszdablak.................................................... 198 4.1.2.2. Bejelenkezs (Log In Dialog) prbeszdablak............................................ 198 4.1.2.3. Opcik belltsa (Options Dialg) prbeszdablak ................................... 199 4..2.4. Logkp (Splash Screen)............................................................................ 200 4.1.2.5. Napi tippek (TipOfDay) prbeszdablak.................................................. 201 4.1.2.6. Tovbbi beptett prbeszdablakok........................................................... 201 4.1.2.7. InputBox s MsgBox prbeszdablakok hasznlata ................................... 20 4.1.2.8. ltalnos prbeszdablak hasznlata.......................................................... 205 4.2. A Visual Basic alkalmazskszt varzsl hasznlata ............................................. 209 4.3. Prhuzamos munka tbb dokumentummal (MDI alkalmazsok) ........................... 214 4.3.1. MDI alkalmazsok ksztse ................................................................................. 215 4.3.2. MDI gyermekablakok elrendezse......................................................................... 216 4.3.3. Az MDI ablakok meni ......................................................................................... 216 4.3.4. A Toolbar vezrl .................................................................................................. 217 4.3.5. MDI alkalmazs ksztse ..................................................................................... 218

5. A VISUAL BASIC GRAFIKUS LEHET SGEI, MULTIMDIA ................ 229


5.1. Alapfogalmak............................................................................................................... 230 5.1.1. Koordinta-rendszerek .......................................................................................... 230 5.1.1.1. lland lptk koordinta-rendszerek......................................................23 1 5.1.1.2. Felhasznli lptk koordinta-rendszerek ...............................................232 5.1.1.3. A koordinta-rendszerek kezd pontja.........................................................234 5.1.2. Sznek.....................................................................................................................236

TARTALOMJEGYZK

5.1.3. Rajzolsi md.........................................................................................................236 5.1.4. Vonalvastagsg s vonaltpus................................................................................. 238 5.1.5. Akifestsi stlus ..................................................................................................... 241 5.1.6. Bitkpek................................................................................................................. 241 5.1.6.1. A Picture objektum..................................................................................... 242 5.1.6.2. Bitkpek betltse s kimentse................................................................. 243 5.1.7. Bet tpusok ............................................................................................................ 243 5.1.8. A hardvereszkzk adatai...................................................................................... 245 5.2. Grafikus vezrl k hasznlata...................................................................................... 247 5.2.1. Vonalhzs a Line vezrl vel................................................................................ 247 5.2.2. Alakzatok rajzolsa a Shape vezrl vel................................................................. 248 5.2.3. Bitkpek hasznlata az Image vezrl vel............................................................... 250 5.3. Rajzols grafikus metdusokkal .................................................................................253 5.3.1. Rajzols a grafikus objektumok ablakban ........................................................... 254 5.3.1.1. jrafests - a Paint esemny s a Refresh metdus ...................................254 5.3.1.2. lland grafika, az AutoRedraw tulajdonsg .............................................254 5.3.1.3. Az rvnytelen terletek kezelse - a ClipControIs tulajdonsg.................255 5.3.1.4. Az AutoRedraw, a ClipControIs s a rtegek ..............................................255 5.3.1.5. A rajzols mdjnak belltsa, az aktulis pozci .....................................256 5.3.2. Grafikus metdusok................................................................................................256 5.3.2.1. Az ablak tartalmnak trlse.......................................................................256 5.3.2.2. Pontok megjelentse ..................................................................................257 5.3.2.3. Egyenes vonal alakzatok rajzolsa............................................................257 5.2.3.1. Grbevonal alakzatok rajzolsa ................................................................258 5.2.3.2. Szveges informcik megjelentse ..........................................................258 5.2.3.3. Kpek megjelentse ...................................................................................260 5.3.3. Kapcsolat az GDI-vel .............................................................................................262 5.4. Nyomtats......................................................................................................................264 5.4.1. A nyomtatk jellemz i ...........................................................................................265 5.4.1.1. A nyomtats min sge................................................................................265 5.4.1.2. Paprbeltsok .......................................................................................... 265 5.4.1.3. Hardveradatok.............................................................................................266 5.4.2. Az form nyomtatsa ............................................................................................... 267 5.4.3. Nyomtats futs kzben ......................................................................................... 267 5.5. Programkszts grafikus metdusokkal..................................................................... 269 5.5.1. Programkszts grafikus metdusokkal................................................................ 269 5.5.2. Bitkpek er forrsban ............................................................................................ 274 5.5.3. Az MSChart komponens........................................................................................ 277 5.6. A Visual Basic mint multimdis fejleszt eszkz ....................................................... 281 5.6.1. Mdiallomnyok lejtszsa az MMControl segtsgvel ..................................... 282 5.6.2. AVI llomnyok megjelentse az Animation komponenssel................................ 286 5.6.3. WAV llomnyban trolt hangok lejtszsa API segtsgvel .............................. 287 5.6.4. Animcikszts az ImageList vezrl vel ............................................................ 288 5.6.5. Animci a PictureClip vezrl vel ......................................................................... 291

TA1TA LOM JEGYZEK

6. ALKALMAZSOK KZTTI ADATKAPCSOLATOK ............................... 295


6.1. A vglap hasznlata.......................................................................................... -....... 295 6.2. A dinamikus adatcsere (DDE)..................................................................................... 298 6.2.1. A hlzati kapcsolatok-NetDDE......................................................................... 299 6.2.2. DDE hasznlata a Visual Basic-ben ...................................................................... 299 6.3. Az OLE-trol csatolt dokumentumok kezelsre.................................................... 307 6.4. Az OLE vidd s dobd (drag and drop) lehet sgei ..................................................... 310 6.5. ActiveX-komponensek................................................................................................. 313 6.5.1. Az OLE-, az ActiveX- s aCOM-technolgia alapjai........................................... 313 6.5.1.1. Alapfogalmak............................................................................................. 313 6.5.1.2. A komponensek tpusai.............................................................................. 313 6.5.1.3. Tulajdonsgok, metdusok s esemnyek ................................................. 314 6.5.1.4. Szrmaztatsi lehet sgek .......................................................................... 315 6.5.1.5. A kapcsoldsi fellet (interface),s a regisztrci ................................... 3 17 6.5.2. nll kdkomponensek - az OLE-automatizmus ................................................. 318 6.5.2.1. OLE-automatzmus a Microsoft alkalmazsokban ......................................319 6.5.3. Programon belli ActiveX-kdkomponensek.........................................................324 6.5.4. ActiveX-vezrlk ksztse ....................................................................................330 6.5.5. ActiveX-dokumentumok ksztse.........................................................................340

7. A VISUAL BASIC ADATKEZELSI LEHET SGEI................................... 347


7.1. Hagyomnyos llomnykezels ...................................................................................347 7.1.1. Szekvencilis llomnyok......................................................................................349 7.1.2. Tetsz leges elrs llomnyok .............................................................................352 7.1.3. Binris llomnyok.................................................................................................355 7.1.4. Elrsi korltozsok ...............................................................................................355 7.2. Objektumos llomnykezels - File System Oojects .................................................357 7.3. Adatbzis-kezel alkalmazsok ksztse................................................................... 362 7.3.1. Az adatbzisokrl rviden .....................................................................................362 7.3.2. Adatbzis-kezels ADO (Active Dala Objects) segtsgvel..................................365 7.3.2.1. Adatkezels az Enterprise eszkzk segtsgvel .......................................366 7.3.2.2. Adatkezels az ADOdc vezrlelem felhasznlsval................................37 I 3.7.3.1. Adatelrs az ADODB.Recordset objektum segtsgvel...........................373 7.3.3. Adatbzis-kezels hagyomnyos" (nem ADO-alap) vezrl elemekkel.............375 7.3.3.1. A Data vezrl elem ....................................................................................375 7.3.3.2. Az adatkapcsolt vezrlk hasznlata...........................................................377 7.3.4. A Data Form Wizard hasznlata.............................................................................379 7.3.5. A DataReport jelentskszt hasznlata................................................................385 7.3.6. Az DAO objektummodell alkalmazsa ..................................................................389

8. WEB-ALKALMAZSOK FEJLESZTSE ........................................................399


8.1 Webbngsz alkalmazs ksztse .............................................................................. 400 8.2. DHTML alkalmazsok ksztse ................................................................................ 403 8.3 HS-alkalmazsok ksztse........................................................................................... 407 8.4. VBScript begyazsa HTML dokumentumokba........................................................ 411 8.5. Internet Transfer vezrl elem ..................................................................................... 413 8.6. Winsock - TCP/IP-illeszt kapu.................................................................................... 414

TARTALOMJEGYZK

IRODALOMJEGYZK ................................................................................... 417 TRGYMUTAT ........................................................................................... 419 Fl.LOCALSQL(CD) F2. A FORMAT FGGVNY (CD) F3. SGRENDSZER KSZTSE VISUAL BASIC ALKALMAZSOKHOZ (CD) F4. VISUAL BASIC 6 KULCSSZAVAK CSOPORTOSTSA (CD)

El sz
A Microsoft Visual Basic 6.0 rendszer segtsgvel a 32-bites Windows rendszerek (95/98/NT/XP) al fejleszthetnk alkalmazsokat. A Visual Basic programok objektumokra plnek, s az egyes programrszek esemnyvezrelten m kdnek. Az alkalmazs ksztsekor a modulris programpts elvt kvetjk, s el re elksztett pt elemeket (komponenseket) hasznlunk. A Microsoft a fkuszba lltotta a Visual Basic rendszert, ami alkalmas lett az egyszer alkalmazi programok fejlesztsre, akr valamelyik nagy Microsoft termk a WinWord vagy az Excel felgyelete alatt trtn munkra, akr a professzionlis felhasznlsra pldul jrafelhasznlhat programkomponensek fejlesztsre. A Visual Basic-ben majdnem mindent meg lehet oldani, knnyen gyorsan s hatkonyan. A fentiek tmren sszegzik a Visual Basic azon jellegzetessgeit, melyek meglte biztostja, hogy napjainkra a Visual Basic az egyik leghatkonyabb s legegyszer bb alkalmazs-fejleszt rendszerr n tte ki magt. A Visual Basic programnyelv Az esemnyvezrelt programkd kialaktshoz a Visual Basic nyelvet hasznljuk. Az elnevezsben a Basic sz egy tbb mint 30 vvel ezel tt szletett programozsi nyelvetjell. Az eredeti BASIC (Beginner's All-purpose Symbolic Instruction Code) nyelvet a Dartmouth College tanrai dolgoztk ki 1964-ben, azzal a cllal, hogy a dikokat programozsra oktassk. A nyelv igazi virgzst a 70-es vekben rte el, amikor a mikroszmtgpek alapvet programozsi s rendszernyelvv lpett el . A 80-as vekben az tartotta letben, hogy a Microsoft a GW-Basic, illetve ks bb a QBasic nyelvet beptette az MS-DOS opercis rendszerbe. Termszetesen a Basic nyelv az vek sorn egyre b vlt, azonban alapvet jellegzetessgei (kis er forrsigny, egyszer en megtanulhat stb.), korltai (interpreteres, nem tmogatja a korszer programozsi mdszereket stb.) megmaradtak. A Windows 3.1 rendszer megjelense utn a Basic programozk lelkesen fogadtk a Visual Basic 1.0 1991-es megjelenst. Ez a nyelv azonban mr nem az MS-DOS alatt hasznlt QBasic nyelv volt, br tovbbvitte annak bevlt megoldsait. A Visual Basic a kezdetekt l fogva egy vizulis fejleszt rendszerre pl objektumalap nyelv volt. A Windows alkalmazsok ksztse azltal vlt gyorss s egyszer v, pldul a C-nyelv fejlesztshez kpest, hogy a programoz ksz pt elemeket (komponenseket) hasznlva alakthatja ki sajt alkalmazst. Ezen pt elemek

ELOSZO

(.VBX) modulok hasznlata sokkal kevesebb ismeretet ignyelt, mint a hagyomnyos API-t (alkalmazs-programozi felletet) hasznl fejleszts. A kezdetekt l fogva a Visual Basic programok szemre vetettk a ksz alkalmazsok relatv lassbb m kdst. Ennek oka, hogy a fejleszt rendszer a fordts sorn nem gpi kdot lltott el , hanem egy pszeudo kdot (P-kd), amelyet dinamikusan szerkeszthet knyvtrban (DLL) trolt interpreter rtelmezett. Ugyancsak korltozta a fejleszt munkjt, hogy a VBX komponenseket csak a Visual C++ rendszerrel lehetett el lltani. Az vek folyamn a Visual Basic nyelv egyre b vlt s lassan a Microsoft cg technolgiai megoldsainak lettemnyesv vlt. Ez azt jelenti, hogy komponensek segtsgvel a kezd Windows-programozk is felhasznlhatjk a legbonyolultabb Windows alatti megoldsokat. Az albbi tblzatban sszefoglaltuk a Visual Basic rendszer fejl dst, a tblzatban nem jelezzk a fejleszt i krnyezet folyamatos b vtst: Visual Basic 1.0, 1991 VBX komponensek. Visual Basic 2.0, 1992 mg tbb VBX komponens. Visual Basic 3.0, 1993 kt vltozat (Standard s Professional Edition), adatbzis-kezels DAO (Database Access Objects), JET (Jo int Engine Technology) adatbzismotor, ODBC (Open Database Connectivity) nyitott adatbzis-kapcsolat, Crystal Report riportkszt , a VBA {Visual Basic for Applications) megjelense az Excel rendszerben. Visual Basic 4.0, 1995 hrom vltozat (32 -bites Standard, 16- s 32 -bites Professional s Enterprise Edition), 16-bites VBX, s 32-bites OCX komponensek hasznlata, az OLE-automatizci (automation) tmogatsa, adatbzis-kezels: adatkapcsolt (Data Bound) vezrl k, tvoli adatobjektu mok (RDO) s tvoli adatvezrl k (RCO) gyfl-kiszolgl rendszerek ki alaktshoz, erforrsfjlok hasznlatnak tmogatsa, Help-fordt, Sajt osztlyok (class) ksztse s trolsa a .CLS osztlymodulban, a VB s a VBA verzik kompatibilitsnak biztostsa, a VBScript nyelv megjelense, nyelvi elemek: public s private deklarcik, with utasts stb.

EL SZ

Visual Basic 5.0, 1997 hrom 32-bites vltozat (Learning, Professional s Enterprise Edition), ActiveX-vezrl k el lltsnak lehet sge (.CTL modulok), vlasztsi lehet sg a P-kd s a natv (gpi) kd futtathat llomnyok ksztse kztt, Internet elrst biztost komponensek, egy sor fejlesztst segt jdonsg (varzslk, nyomkvets tmogatsa, s g megjelense a program bersnl stb.) nyelvi elemek: cnum konstansok, addressof opertor stb. Visual Basic 6.0, 1998 adatbzis-kezels: ActiveX adatobjektumok (ADO), automatikus adatkapcsols, adatkrnyezet-tervez , adatriport -tervez , tbbszint adatel rs, Internet: WebClass s dinamikus HTML-lapok tervezsnek tmogatsa. Visual Basic.NET, 2002 megjult nyelv, a Visual Basic j helyet foglal el a programnyelvek kztt.

1. Bevezets
A Visuai Basic rendszer a ma hasznlatos programozsi feladatok minden terletn hatkonyan alkalmazhat fejleszt eszkz. A programok ksztshez szksges ismeretanyag akr tbb ktetet is megtolthet, ahogy ez az angol nyelv szakirodalombl is lthat. Mir l szl a knyv? A knyv, melyet az Olvas a kezben tart, els sorban a kezd s kzphalad programozk ignyeinek megfelel en, programozsi megoldsokkal, s alapvet Windows alkalmazsfejlesztsi krdsekkel foglalkozik. Rviden tekintsk t mi tallhat a knyvben! A Visuai Basic objektumalap programnyelv. Br a Visuai Basic rendszerben komolyabb programozsi el tanulmnyok nlkl is lehet alkalmazst kszteni, a programozk a nyelv ismerete nlkl nem juthatnak messzire. A msodik fejezet teljes egszben a Visuai Basic nyelv lehet sgeivel foglalkozik. A fejezet felptse kveti a hagyomnyos, programnyelvekkel foglalkoz knyvek tematikjt: a nyelvi elemekkel val ismerkeds utn a programok szerkezete s felptse kerl trgyalsra. Az alapokat az adattpusok s a vltozk trgyalsa kveti. A programok adatfeldolgoz tevkenysge m veletekkel, kifejezsek kirtkelsvel valsul meg. Nem maradhatnak ki a nyelvi lersbl az alapvet I/O funkcik s a programutastsok sem. A Visuai Basic strukturlt programozsi nyelv, amely a modulris programozst is tmogatja. Az alprogramok ismertetse kln alfejezetbe kerlt. A nyelvi lerst a Visuai Basic objektumalap megoldsainak bemutatsa zrja. A knyv slypontjt a Visuai Basic Windows programozsi lehet sgeit bemutat fejezetek kpezik. A harmadik fejezetben az Olvas megismerkedhet a Windows programozs eszkztrval: az alkalmazsok m kdsvel, a formmal ( rlappal) - az alkalmazsok alapobjektumaival. A Windows alkalmazsokban az n. vezrl k tartjk a kapcsolatot a felhasznl s a program kztt. A Visuai Basic rendszerben az jrafelhasznlhat programelemek, a komponensek biztostjk a vezrl k objektum-alap kezelst. A harmadik fejezet az alapvezrl k (menk, gombok, szvegszerkeszt k, listk, id zt k) s a specilis clra hasznlhat komponensek hasznlatra vonatkoz ismeretek trhza. A fejezetet nhny halad szint programozsi megolds zrja. Kln fejezetet foglalkozik az alkalmazs- s a prbeszdablakok kialaktsnak lehet sgeivel. A negyedik fejezetben megismerheti az Olvas a Visuai Basic tbbablakos alkalmazsok ltrehozsra szolgl eszkzeit.

FEJEZET

Mivel a Windows grafikus felhasznli fellet opercis rendszer, alapvet szerepe van a grafika megjelentsnek. A grafikus megjelents programozshoz a Visual Basic jelent s tmogatst nyjt. Az tdik fejezet bemutatja a rendszerben hasznlhat alapvet grafikus megoldsokat, a grafikus vezrl ket. A grafikhoz kapcsoldan a rendszer multimdis lehet sgeinek bemutatsa is az tdik fejezetben kapott helyet. A knyv msodik - inkbb kzphaladknak szl - fele bevezeti az Olvast a Visual Basic specilis lehet sgeinek hasznlatba. A hatodik fejezet az alkalmazsok kzti kapcsolatokkal foglalkozik. Szba kerl a hagyomnyos vglap, a Microsoft ltal mr nem tmogatott, de igen elterjedt DDE (Dynatnic Data Exchange), illetve az OLE klnbz aspektusai a COM-, DCOM technolgia, az ActiveX elemek hasznlata s ksztse A knyv hetedik fejezete a Visual Basic adatkezelsi lehet sgeit gy jti csokorba. A hagyomnyos szemllet (fjl-alap) adatkezels mellett kitr a napjainkban egyre terjed adatbzis-szemllet megoldsokra is. Jelen knyvben a helyi (asztali) relcis adatbzis-kezelsi megoldsokkal ismerkedhet meg az Olvas. A nyolcadik fejezet a Visuai Basic Internetes lehet sgei kzl ismertet nhnyat. Az Internet programozsnak bemutatsa nem a teljessgre, hanem a lehet sgek rvid ttekintsre trekszik. Pap rtakarkos sgi okokbl a CD-mellkleten kapott helyet nhny - a rendszerhez kapcsold - tmakr, mint pldul az SQL nyelv lehet sgeinek bemutatsa, a Format fggvny rszletei stb. Hogyan hasznljuk a knyvet s az, elektronikus pldatrat? Jelen knyv tanknyv s pldatr egyben. A lnyegesebb fejezetekhez kapcsoldan az elsajttott ismeretek begyakorlst, elmlytst clz feladatok a CD-n tallhatk. Az CD tesztprogramjval (a \Teszt knyvtrban), a krdsekre adott vlaszokkal, illetve a vlaszhoz szksges informcik sszegy jtsvel az Olvas lemrheti, hogy mennyire figyelmesen olvasta el a fejezeteket. A CD-n megoldand programozsi feladatok tallhatk, az elksztett programok fellelhet k a CD-mellket \Feladatok" knyvtrban, fejezetenknt, illetve alfejezetenknt csoportostva. A feladatkirsokat - alfejezetenknt - a Feladatok.pdf llomny, az elksztett forrsnyelv programokat a feladat nevnek megfelel alknyvtrak tartalmazzk. Mint ahogy mr sz volt arrl, a CD-mellkleten mg olyan informcik is tallhatk, amelyek ugyan a knyv rszei, de csak elektronikus formban rhet k el. Az ilyen fejezeteket trol PDF-llomnyokat a CD lemez "\Konyv" knyvtra tartalmazza.

2. A Visual Basic nyelv


A Visual Ba.sic rendszer programnyelve tmogatja a programok strukturlt-, modulris- fejlesztst, valamint a Windows (ActiveX) komponensek hasznlatt a gyors alkalmazsfejlesztsi keretrendszerben.

2.1. A Visual Basic nyelv elemei


Miel tt a Visual Basic nyelv programozsnak rszleteit vizsglnnk, tekintsk t azokat az alapvet szablyokat, amelyeket be kell tartanunk a programfejleszts sorn! 2.1.1. A nyelv jelkszlete A Visual Basic - a Java-hoz hasonlan - tmogatja Windows rendszer teljes unicode (l-bites) jelkszletnek hasznlatt. Ez szmunkra azt jelenti, hogy a programunkban kes magyarsggal" nevezhetjk el a vltozinkat, alprogramjainkat. Termszetesen ez a megllapts csak a bet kre s a decimlis szmjegyekre vonatkozik, hisz az egyb karakterek (rsjelek) az unicode kdtbla n. ASCII (7-bites) rsztbljbl kerlnek ki:

A Visual Basic-ben bizonyos karakterprok specilis jelentst hordoznak: <= >= <> Az ilyen specilis szimblumok esetn fontos a karakterek megadsi sorrendje. A nyelv nem engedi meg az =<, =>, >< stb. szimblumok hasznlatt. Hibajelzst kapunk akkor is, ha ezekben a jelekben a karakterek kz szkzt tesznk (< =). 2.1.2. Kulcsszavak A Visual Basic kulcsszavak nyelv utastsaiban s deklarciiban szerepl szavakat nevezzk, vagyis a nyelv alapszkincst. A kulcsszavak egy rszt, az n. foglalt szavakat csak a nyelvben rgztett szablyoknak megfelel en szabad hasznlni. Az albbiakban sszefoglaltuk a Visual Basic nyelv foglalt szavait, melyeket a fejleszt rendszer tsznezve, kiemelve jelent meg a forrsprogramban:

2 FEJEZET

A Visual Basic nyelvre jellemz a kulcsszavak nagy szma. Az albbi tblzat azokat a kulcsszavakat trolja, melyeket sajt nvknt is felhasznlhatunk - azonban ez nem ajnlott:

A VISUAL BASIC NYELV

A foglalt szavakat a knyvnk szvegben vastagon szedtk. A Visual Basic nem klnbzteti meg a kis- s a nagybet ket a nevekben, gy a programban a kulcsszavakat tetsz leges mdon megadhatjuk. 2.1.3. A program sorai A Visual Basic program az l nyelvekhez hasonlan mondatokbl, programsorokbl pl fel. A program sorai a fordtnak szl lersokat (deklarcikat) s vgrehajthat utastsokat egyarnt tartalmazhatnak. (A programsorok maximlis hossza 1023 karakter.) Mr az elejn fontos megjegyeznk, hogy vgrehajthat utastsokat tartalmaz sorok csak alprogramoknak hvott programegysgekben szerepelhetnek. Az ilyen programsorok numerikus, vagy alfanumerikus cmkvel is kezd dhetnek:
1223 Print "Visual Basic utasts" Kiiras7: Print "Visual Basic utasts"

Az alfanumerikus cmkk ksztse sorn, az azonostkra vonatkoz szablyokat kell figyelembe vennnk. A cmkket a ks bb bemutatsra kerl goto s gosub utastsokban hasznljuk. (Mindkt utasts megszaktja a program vgrehajtsnak folyamatt, s a vezrlst tadja az utastsban megadott cmkvel megjellt programsorra.) ltalban egy sorban egy deklarcit/utastst helyeznk el. Azonban el fordulhat, hogy egy utastst tbb sorban kell megadnunk az n. folytatsor jellst hasznlva, ami egy szkzb l s egy alhzsjelb l ( _ ) ll.
Dim x As Byte, y As Long, _ z As Double

Nha a msik megoldsra is szksge lehet, amikor egy sorban tbb utastst, vagy deklarcit adunk meg kett sponttal elvlasztva egymstl:
Dim x As Byte: Dim y As Long: Dim z As Double

A kulcsszavakon kvl a programsorok mg szmos ms sszetev t is tartalmaznak. Az utastsok trgyalsa el tt, meg kell ismerkednnk az azonostk fogalmval, klnbz tpus llandk brzolsval, a mveletek vgrehajtshoz szksges m veleti jelekkel s a program m kdst magyarz megjegyzsekkel.

2. FEJEZET

2.1.4. Azonostk A Visual Basic programban az ltalunk ltrehozott elemeknek (vltozknak, konstansoknak, tpusoknak, eljrsoknak, fggvnyeknek, moduloknak) nevet kell adni, hogy hivatkozni tudjunk rjuk. Termszetesen a nvnek egyedinek kell lennie, pldul nem adhatjuk ugyanazt a nevet egy vltoznak s egy fggvnynek. Az ltalunk megadott neveket (azonostkat) a program klnbz sszetev inek azonostsra hasznljuk. A Visual Basic azonostk (nevek) legfeljebb 255 karakter hosszak lehetnek. Mint emltettk, az azonostk kpzse sorn a teljes Unicode karakterkszletet bet it hasznlhatjuk. Az azonost azonban csak bet vel kezd dhet, s nem tartalmazhat szkzt. Az els karakter utn tovbbi bet k vagy szmok kvetkezhetnek. Hasonlan a foglalt szavakhoz, az azonostkban sem klnbzteti meg a rendszer a kis- s nagybet ket. Kln felhvjuk a figyelmet arra, hogy nem szabad azonostknt foglalt szavakat hasznlni! Nzznk nhny helyes azonostt! (rdemes figyelni a tbb szbl ll nevek rsmdjra, illetve a magyar jellsrendszer alkalmazsra.) A Microsoft cgnl magyar jellsrendszernek elnevezett nvmegadsi mdszer azt jelenti, hogy az azonostk olyan kisbet kkel kezd dnek, melyek utalnak azok tpusra.
intSzmll AEgytthat txtGyok Adatll cmdSzmol HunForint dbl Eredmny EuroPnztr

A Visual Basic fejleszt rendszer az ltalunk megadott neveket abban a formban kis- nagybet s rsmdban - jelenti meg, ahogy azt deklarltuk. Ez azrt lehetsges, mivel a fejleszt rendszer a bert programsorokat azonnal feldolgozza, bels kdd alaktja, gy a szintaktikai (helyesrsi) hibk mr sor <Ener> billenty vel val lezrsa utn kiderlnek. 2.1.5. Szmok A Visual Basic nyelvben egsz s vals szmokat egyarnt hasznlhatunk. A programban elhelyezett szmrtkeket szmkonstansnak (llandnak) nevezzk, melyek megadsra a matematiktl nmileg eltr szablyok vonatkoznak. Egsz szm megadsa az el jellel (a pozitv el jel elhagyhat) s az azt kvet szmjegyekkel trtnik:
7 -23 +12 2003

Az egsz szmokat hexadecimlis s oktlis szmrendszerben is megadhatjuk: &H160D03B&, &04410.

A V1SUAL BASIC NYELV

A szm el tt ll &H jelzi, hogy tizenhatos, a &O pedig, hogy nyolcas szmrendszert hasznlunk. (A szmkonstans mgtt ll % jel a rvid, mg a & jel pedig a hossz egszet jell.) A fejleszt rendszer a bert szm nagysgtl fgg en automatikusan rvid vagy hossz egssz teszi az llandt. A vals szmokat tizedes trtknt (pldul 123.45) s hatvnykitev s alakban (1.2345E2) egyarnt felrhatjuk. (A programban szmok megadsakor nem tizedes vessz t, hanem tizedes pontot hasznlunk.) A hatvnykitev s konstansok az albbi elemekb l plnek fel:

A megadsban a hatvnyjel (az E vagy e bet ) 10 hatvnyt jelli (a kitev ben a pozitv el jelet nem ktelez hasznlni). Az elmondottak alapjn a pldban megadott 1.2345E+02 szm a matematikai jellsekkel felrva vagy -123,45. A fejleszt rendszer a bert vals szmokat vagy tizedes trtt alaktja, vagy ha tl nagy/kicsi a kitev , norml alakban rja fel. A bert vals szmhoz tpust is rendelhetnk, tudva azt, hogy az alaptpus a ktszeres (double) pontossg tpus. A ktszeres pontossg jelzsre a # jelet, mg az egyszeres (single) pontossghoz a ! (felkilt) jelet hasznljuk: 3.14159265$, 1223.779!. 2.1.6. Szvegkonstansok A Visual Basie kln figyelmet fordt a szvegek megadsra, feldolgozsra s trolsra. A programozsi nyelvekben a szvegeket ltalban karaktersorozatnak, stringnek hvjk. Knyvnkben a karaktersorozat s a (magyarostott) sztring szavakat szinonim szavakknt hasznljuk. A szvegkonstanst (sztringkonstanst) idz jelek ("") kztt kell megadni. Ha szvegen bell idz jel szerepel, akkor azt duplzzuk (pldul "Azt mondta: ""Ne menj oda!"""). Ha a szvegkonstans semmit sem tartalmaz az idz jelek kztt (""), akkor n. res sztrngr l beszlnk. A sztring hossza az aposztrfok kztt megadott karakterek szmnak felel meg. Pldul, a
"Lafenita"

karaktersorozat hossza 8 karakter. Visual Basic-ben a karakterek (egykarakteres sztringek) megadsra is az idz jeleket hasznljuk: "N", "L". Fontos megjegyeznnk, hogy a karaktersorozat-konstansok megadsnl nem hasznlhatunk folytatsort.

2. FEJEZET______________________________________________________________________________________

2.1.7. Opcrandusok A kifejezsekben szerepl vltozkat, konstansokat (szmokat, karaktersorozatokat stb.) s fggvnyhvsokat operandusoknak nevezzk.
a + b*c/Sqr( x ) + 1 2 . 2 3

A fenti aritmetikai kifejezs operandusai: az a, b, c s x vltozk, az Sqr() fggvnyhvs (gykvons fggvny), valamint az 12.34 lland. 2.1.8. Opertorok A kifejezsekben szerepl vltozkat, konstansokat s fggvnyhvsokat sszekapcsol m veleti jeleket opertoroknak nevezzk. Az opertorok jellhetnek aritmetikai (+, -, /, * stb.) s logikai m veleteket (And, Or stb.), illetve relcikat (<, >, <= stb.). Az opertorokkal s a m veletek kztti els bbsgi szablyokkal a ks bbiekben rszletesen foglalkozunk.
a + b*c/Sqr{x)+12.23

A fenti aritmetikai kifejezs opertorai; a +,*, / aritmetikai m veleti jelek. 2.1.9. Kifejezsek A kifejezs opertorok s operandusok sorozatbl pl fel. A kifejezseket kt alapvet csoportjt az aritmetikai (a + 2.3 * Sin(y)) s a logikai kifejezsek (x < 2 And y > 3) alkotjk. Az aritmetikai kifejezs kirtkelsnek eredmnye mindig egy szmrtk, mg a logikai kifejezs rtke igaz (True) vagy hamis (False) lehet. 2.1.10. A programoz megjegyzsei a programban A program utastsai kztt brhol, tetsz leges hosszsg megjegyzst, magyarzatot helyezhetnk el. A megjegyzseket a Rem utasts segtsgve], illetve az egyszeres idz jel utn adhatjuk meg:
Rem Pi rtknek szmtsa Print 4 * Atn(l): Rem Pi rtke ' Pi rtknek szmtsa Print 4 * Atn(l) ' Pi rtke

Mindkt mdszer esetn a megjegyzs a programsor vgig tart.

AZ VISUAL BASIC NYELV

2.2. A Visual Basic alkalmazsok felptse


A Visual Basic programok szerkezete szorosan kt dik a Windows rendszerhez. gy miel tt megismerkednnk a Windows alkalmazsok el lltst segt programfelptssel, tisztznunk kell nhny alapvet fogalmat. Kicsit visszamegynk az id ben, a QuickBasic vilgba. Az egyprogramos, egyfelhasznls MS-DOS opercis rendszer al ksztett alkalmazsok az indtsuk utn tvettk a szmtgp (kperny , processzor, memria stb.) vezrlst az opercis rendszert l. Ez az llapot mindaddig fennmaradt, mg ki nem lptnk a programbl. Mint ismeretes, a Microsoft Windows opercis rendszerek tbbsge ugyan tovbbra is egy felhasznls, azonban mindegyik vltozat kpes tbb program prhuzamos futtatsra. Ha egy szmtgpen tbb alkalmazs fut egyszerre, akkor azoknak meg kell osztozni a szmtgp er forrsain (processzor, memria, perifrik stb.). Ezt gy kell tennik, hogy a felhasznl szmra egyrtelm legyen, hogy ppen melyik alkalmazssal van kapcsolatban. A kperny megosztst, egymst fed , kerettel hatrolt kpernyterletek (ablakok, windows) bevezetsvel oldottk meg. Az alkalmazsok nagy tbbsge rendelkezik legalbb egy ablakkal (f ablak), amelyen keresztl informcikat jelent meg a felhasznl szmra. A sok ablak kzl azonban egyszerre csak egy, az aktv ablak fogadja a felhasznli beavatkozsokat (billenty k letse, egrmozgats stb.). Az aktv ablak fejsora megjelensben s sznben eltr a tbbi ablaktl. Tovbbi feladat a perifrik s az alkalmazsok kztti kapcsolat megteremtse. Ehhez szintn a Windows rendszerre kell tmaszkodnunk, hisz a perifrikkal az illeszt programokon keresztl tartja a kapcsolatot. Az illeszt programok zenetek kldsvel kzvettik a Windows fel a perifrin bekvetkezett esemnyeket (pldul billenty letse, egrgomb lenyomsa stb.). Mivel a fut alkalmazsok nem kpesek azonnal reaglni a bekvetkezett esemnyekre, a Windows egy rendszerszint zenetsorba gy jti az zeneteket. Innen aztn bizonyos id elteltvel a futtat rendszer tovbbtja azokat az ppen fut alkalmazs zenetsorba. Ebb l a sorbl az alkalmazs zenetkzvett rsze kiemeli az zeneteket, s tadja az ablakhoz tartoz programrszeknek (zenetkezel knek, esemnykezelknek.) Mint ahogy a ks bbiekben ltni fogjuk, az esemnyek kezelsekhez szksges programrszeket n. esemnykezel eljrsok formjban magunk rjuk meg.

2. FEJEZET

2.2.1. Grafikus felhasznli fellet alkalmazs ksztse A Windows alkalmazsok alapm kdsnek tisztzsa utn tovbblphetnk. A Visual Basic rendszert els sorban a Windows alatt fut, grafikus felhasznli fellet (Graphical User Interface - GUI) alkalmazsok ltrehozsra hasznljuk. A Visual Basic fejleszt rendszere a legels vltozatoktl kezdve, az n. komponensekre alapozva biztostotta a gyors, hatkony alkalmazsfejlesztst. Ezekre az pt elemekre tmaszkodva, hasznlva a beptett tudsukat", alapvet en megvltozott a programfejleszts menete. Az alkalmazsok tervezse sorn egyik legkrlmenyesebb feladat a felhasznli fellet kialaktsa volt. Komponensek hasznlatval ez a feladat knyelmesen s gyorsan elvgezhet : 1. El szr a fejleszt rendszerrel kzljk, hogy Windows alkalmazst kvnunk k szteni: FilelNew Project/'Standard Exei'OK. 2. Ezt kvet en a formon (az ablak fejleszts alatti modelljn, rlapon) elhelyezzk az eszkztrbl (toolbox) kivlasztott vezrl elemeket, pldul cmkt (Label), szvegmez t (TextBox) s parancsgombot (CommandButton).

2.1. bra A program fejleszts alatti ablaka 3.

Harmadik lpsben a Properties Window" segtsgvel belltjuk az egyes elemek, komponensek tulajdonsgait (Caption, Font, Text stb). A tulajdonsgok meghatrozzk a vezrlelemek (vezrl k) megjelenst s m kdst.

2.2. bra A program ablaka a tulajdonsgok belltsa utn

AZ VISUAL BASIC NYELV

4. A fenti lpsek sorn a vizulis programfejleszts eszkztrt hasznltuk. Most azonban Visual Basic nyelven kell megrnunk a parancsgomb esemnykezel eljrst. (Ktszer kattintva a parancsgombon, a fejleszt rendszer tvlt a kd szerkeszt be, s elkszti az CommandljOlick() esemnykezel eljrs vzt.) Egyetlen feladatunk maradt, a fejleszts sorn keletkezett programegysgek fjlba mentse. Mivel tbb llomny is ltrejn, ajnlott kln mappt nyitnunk szmukra.

2.3. bra Az esemnykezel eljrs a kdszerkeszt ben

Mivel az elkszlt alkalmazs tbb modulbl pl fel, szksg van egy informcis llomnyra, melyet Visual Basic projektnek (VBP) hvunk. A modulok alaprtelmezs szerinti neveit hasznlva az albbi llomnyok keletkeztek a ments sorn:
Projectl.vbp Forrm1.frm Forml.frx Szveges projektllomny - a fejleszt rendszer rja. Az ablakhoz tartoz n. formmodul, amely az ablak lerst s az esemnykezel eljrsok kdjt trolja szveges formban. Ez az llomny csak akkor keletkezik, ha valamelyik vezrl binris adatokat trol (pldul kpet).

2.2.2. Ablak nlkli Visual Basic alkalmazs ksztse A Visual Basic 6 nem tmogatja a szveges fellet , n. konzol-alkalmazsok ltrehozst. Van azonban egy lehet sg, melynek segtsgvel ablak nlkli alkalmazsokat kszthetnk. Nzzk lpsenknt az ilyen alkalmazsok kialaktst!

2- FEJEZET

1. El szr kzljk a fejleszt rendszerrel, hogy Windows alkalmazst kvnunk k szteni: FilelNew Project/Standard ExelOK. 2. Ezt kvet en eltvoltjuk a projektb l a formmodult (Project/Remove Form.}), s egy n. Basic modult vesznk fel helyette (Project/Add Module/Module). 3. A Basic modul valjban egy tiszta" Visual Basic programmodul, gy egyb l a kdszerkeszt be jutunk, ahol meg kell rnunk a program indtshoz szksges Main() eljrst.

2.4. bra A Main() eljrs a kdszerkeszt ben

2.2.3. A Visual Basic programmodulok felptse Brmelyik megoldst vlasztjuk is fenti alkalmazstpusok kzl, mindenkppen Visual Basic nyelven kell a program kdjt elksztennk. ltalban elmondhatjuk, hogy a Visual Basic programmodulok alapegysgei az alprogramok (eljrsok s fggvnyek). Amg vgrehajthat utastsokat csak az alprogramokon bell hasznlhatunk, addig a deklarcikat az alprogramokon kvl (modulszinten), illetve bell (loklisan) egyarnt megadhatjuk (2.5. bra). A programmodulok nem vezrlkz kapcsold rszeit a kdszerkeszt a (General) (ltalnos) szval jelli. Ezen bell vlaszthatunk a (nem esemnykezel ) eljrsok s a fggvnyek, illetve a (Declarations) (deklarcik) kztt. A (Declarations) rszben az Options utastsokkal a Visual Basic fordt/rtelmez m kdst szablyozhatjuk. A Dim, Private, Public, Const s Type utastsokkal megvltoztathat tartalm trolkat (vltozkat), nvvel elltott llandkat (konstansokat) valamint sajt tpusokat hozhatunk ltre.

AZ VtSUAL BASIC NYELV

2.5. bra A Visual Basic programmodulok ltalnos felptse

2.2,4. A minimlis Visual Basic alkalmazs A fejezet tovbbi rszeiben megismerkednk a Visual Basic nyelv elemeivel s hasznlatval. Az elmondottakat pldaprogramok segtsgvel tesszk rthet v, melyekben nhny vezrl elemet is hasznlunk. A teljessg ignye nlkl tekintsk t a felhasznlt komponensek ltalunk alkalmazott tulajdonsgait s esemnyeit!

2. FEJEZET

Vegyk sorra a program az alapvet adatbeviteli s adatmegjelentsi lehet sgeket! A szksges vgrehajthat utastsokat egy parancsgomb lenyomshoz kapcsoljuk, a m veletek eredmnyt a 2.6. brn tanulmnyozhatjuk.

2.6. bra Egyszer adat megjelentsi lehet sgek

Adat be krs re a szvegmez t, illetve az InputBox() fggvnyt hasznlhatjuk:

A VISUAL BASIC NYELV

2.3. Vltozk, konstansok s adattpusok


A Visual Basic programban a klnfle (szmok, szvegek stb.) adatokat vltozkban troljuk. Minden vltozhoz tartozik egy adattpus (rviden tpus), amely el rja a szmra lefoglaland memria-terlet mrett, s a vltozban trolt adat rtelmezst. A lefoglalt trteriilet tartalmazza a vltoz aktulis rtkt, ami a program futsa sorn meg is vltozhat. Ha megvizsgljuk egy vltoz tartalmt, akkor pillanatnyi (aktulis) rtkr l beszlnk. A programban a vltozkra nvvel hivatkozunk, ezrt minden vltozt azonostval kell elltni. Az n. vltoz-azonostk kialaktsra az azonostk kpzsre vonatkoz szablyok rvnyesek. Az adattpus meghatrozza, hogy egy vltoz milyen rtket vehet fel, s milyen m veletek vgezhet k rajta. Ugyancsak adatok trolsra hasznljuk a konstansokat, azonban a konstans nevhez kapcsolt rtk nem vltoztathat meg. A konstansok hasznlatval javthatjuk a programunk olvashatsgt, ttekinthet sgt. Mind a vltoz deklarcija, mind pedig a konstansok ksztse sorn adattpusokat hasznlunk. Visual Basc-ben az alaprtelmezs szerinti adattpus a Variant, amely mindig a trolt adat tpusv alakul. A fejezet tovbbi rszeiben hasznljuk mg az Integer tpust is, amely az egsz szmok tpusa. 2.3.1. Vltozk deklarcija A vltoz nevnek s tpusnak sszerendelst a vltoz deklarcijnak (lersnak) nevezzk. Visual Basic-ben a deklarci valjban definci is egyben, hisz a lers mellett a fordt helyet foglal a vltoz szmra a memriban. (Ezt a kt fogaimat rokon rtelm szavakknt hasznljuk.) A Visual Basic programban a vltozk defincija nem ktelez , a fordtprogram az ltalunk nem deklarlt vltozkat automatikusan varins (Variant) tpusknt kezeli. A program hibtlansga szempontjbl azonban akkor jrunk el helyesen, ha minden vltozt magunk deklarlunk. A modulok elejn elhelyezett Option Explicit utastssal intzkedhetnk a ktelez deklarcirl. Az utasts megadsa utn a program futsa Variable not defined" hibazenettel megszakad, ha deklarlatlan vltozt tall a fordtprogram. Az Option Explicit utasts megadsval a vltozk deklarcijt ktelez v tesszk a programmodulban. A vltozk lerst a programmodul deklarcis - (General) / (Declarations) - rszben - az eljrsok s a fggvnyek el tt -, illetve az alprogramokon bell brhoz elhelyezhetjk. Egyetlen felttel, hogy a vltozt az els felhasznls el tt definilnunk kell. A Visuaf Basic deklarcis utastsnak ltalnos formja:

2. FEJEZET

Az utastsban a vltoz nevt - az As foglalt szval elvlasztva - kveti a vltoz tpusa. Egyetlen Dim sorban tbb vltozt is szerepeltethetnk vessz vel elvlasztva, azonban minden egyes vltoz tpust kln meg kell adnunk:
Dim a As Integer, b As Integer Dim x As Integer

Ha a deklarciban csak a vltoz neve szerepel, akkor ez egyenrtk az As Variant tpussal trtn lerssal. Az albbi pldban mindkt vltoz varins tpus lesz:
Dim m, n As Variant

Felhvjuk a figyelmet arra, hogy a Visual Basic nem tmogatja a vltozk ltalunk kijellt kezd rtkkel val elltst. Ehelyett minden vltoz terlete automatikusan 0 rtk bjtokkal tlt dik fel, gy a vltozk kezd rtke 0 ("") lesz. 2.3.1.1. A Private, a Public s a Static vltoz-deklarcik A Dim kulcssz helyett a modulszint deklarcikban (General) a Private s a Public kulcsszavakat is hasznlhatjuk. Az alprogramokon kvl a Dim s a Private deklarcik azonos hatsak. Segtsgkkel a modulszint vltozk elrhet sgt a modulra korltozzuk - a modul sajt vltozi lesznek:
Private na As Integer, ta As Integer

A fentiekkel ellenttben, a Public deklarci felhasznlsval a modulszint vltozinkat a projekt sszes modulja szmra nyilvnoss tehetjk:
Public an As Integer, at As Integer

Az alprogramok szintjn a Dim utasts mellet a Static utastst is hasznlhatjuk, az n. loklis (helyi) vltozk deklarlsra. A loklis vltozk jellegzetessge, hogy elrhet sgk a deklarcit tartalmaz alprogramra korltozdik.
Sub Eljrs() Dim nv As Integer Static sv As Integer
i

End Sub

A pldban szerepl nv vltoz az eljrs minden hvsakor jra ltrejn, mg az sv vltoz a hvsok kztt is meg rzi rtkt (statikus vltoz). 2.3.1.2. A Deftpus utastsok A modulok szintjn a vltoz- s paramternevek kezd bet je alapjn is szablyozhatjuk az automatikus deklarci m kdst. A ks bb bemutatsra kerl tpusoknak

A VISUAL BASIC NYELV

megfelel en a Defxxx utastsnak klnbz vltozatai lteznek: DefBool, DefByte, Deflnt, DefLng, DefCur, DefSng, DefDbl, DefDec, DefDate, DefStr, DefObj, DefVar. Az utastsok m kdst az egsz tpust el r Deflnt kapcsn mutatjuk be. Az utastst, melynek szintaxisa:
Deflnt bet intervallum [, bet intervallum] . . .

a modul deklarcis rszben kell elhelyeznnk. A bet intervallum helyn egyetlen bet vagy kt, mnuszjellel elvlasztott bet ll. Az albbi deklarci utn minden olyan vltoz tpusa egsz lesz, amelynek neve N bet vel, vagy I s K kz es bet vel kezd dik:
Deflnt I-K, N

Vigyznunk kell arra, hogy a klnbz tpusokkal kijellt bet intervallumoknak ne legyen kzs rsze. A ktelez deklarci el rsa utn, a Defxxx utastsokon tlmen en a deklarcis utastsok (Dim, Public, Private, Static) valamelyikt is hasznlnunk kell, a tpus kijellse nlkl:
Option Explicit Deflnt I-K, N Public iLap, nAta

A Defxxx automatikus deklarcik hatsa nem terjed ki a deklarcis utastsokban tpusnvvel lert nevekre. Az albbi pldban az nAta vltoz tpusa nem egsz, hanem vals (Double) lesz:
Deflnt I-K, N Private nAta As Double

2.3.1.3. Implicit deklarci A Visual Basic-ben nhny karakter tpust jell. A tpusjell karakterek nevek (konstansok) vgn val megadsval, a nevet az els felhasznls sorn deklarljuk.

2. FEJEZET

Ktelez lers esetn, a nevet a felhasznls el tt egy deklarcis utastsban is szerepeltetnnk kell, a tpusnv megadsa nlkl. Az albbi pldban egy egsz s egy varins tpus vltozt deklarlunk:

A pldbl is lthat, hogy a tpusjell karaktert csak a ler utastsban, illetve az els felhasznls sorn szksges megadnunk. 2.3.2. Konstansok a Visual Basic-ben A konstansnevek olyan azonostval (nvvel) elltott rtkek, amelyek nem vltoznak meg a program futsa sorn. (Kvetkezskppen konstansnevek nem szerepelhetnek az rtkad utasts bal oldaln!) A konstans-defincikat a modul deklarcis rszben, vagy valamelyik alprogramban a const foglalt sz utn adjuk meg. A definciban az egyenl sgjel bal oldaln szerepel a konstans neve, a jobb oldaln pedig a hozzrendelni kvnt rtk (konstans kifejezs). A konstansnevet minden olyan rtkhez definilhatunk, amit a programban konstans rtkknt is megadhatunk.

Amennyiben nem adjuk meg a tpust, a fordt a konstanskifejezs rtke alapjn lltja be a tpust. Az albbi pldban a Tel konstans tpusa Integer lesz:

A VISUAL BASIC NYELV

Egyarnt kszthetnk egsz s vals numerikus, szveges, logikai s dtum konstansokat:


Const Const Const Const Const Maxlnt As Long = 32767 Bevet As Currency = 12231979.0409 Udv = "dvzllek dics lovag." Vlasz = False, Husvet = #4/20/2003#

Konstansnevek hasznlatval programunk olvashatbb vlik, s bizonyos vltoztatsok is knnyebben elvgezhet k. Konstansnevek alkalmazst els sorban az albbi esetekben ajnljuk: - Ha egy konstans rtk gyakran el fordul a programban, pldul:
const eszam = 2.718282, szokoz = " "

A konstans rtkt a ks bbiekben (a forrsprogramban) egy msik rtkre k vnjuk vltoztatni. Amennyiben a krdses konstans a programban tbb helyen is el fordul, akkor a mdosts lnyegesen egyszer bb s biztonsgosabb kons tans-definci hasznlatval. Pldul:
const maxn = 12

Gyakran van szksg arra, hogy egymssal logikailag kapcsold egsz konstansokat hozzunk ltre, pldul egy krdsre adhat lehetsges vlaszok:
Const nem = 0, igen = 1, taln = 2

A Visual Basic nyelv az ilyen, s ms hasonl feladatok megoldsra az enum utasts hasznlatt javasolja, melynek segtsgvel n. felsorolsokat kszthetnk:
[Public | Private] Enum nv tagnv [= konstanskifejezs] tagnv [= konstanskifejezs] End Enum

Tekintsk a felsorolsok hasznlatval kapcsolatos szablyokat! A felsorols defincijt a modul deklarcis rszben kell elhelyeznnk. A keletkez tpusnvnek (nv) megfelel , illetve a tagnevek ler tpus a hosz-sz egsz (Long). Ha a konstanskifejezst nem adjuk meg, akkor az els tag rtke 0 lesz, az utna kvetkez tagok rtke pedig eggyel nagyobb lesz a megel z tag rtknl. A tagok rtke futs kzben nem mdosthat. Az albbi felsorols a fenti konstans-defincit helyettesti, annyi klnbsggel, hogy most egy Vlaszok tpus is ltrejn:

2. FEJEZET Enum Vlaszok nem igen taln End Enum

A kvetkez pldban nhny ASCII vezrl karakter kdjt troljuk felsorolsban, angol s magyar elnevezseket hasznlva:

A Visual Basic fejleszt rendszerben egy sor el re definilt konstans segti az alkalmazsunk olvashatbb ttelt. Ezeket a konstansokat, a Visual Basic ms elemeivel egytt az Object Browser (View/Obejct Browser) ablakban tanulmnyozhatjuk (2.7. bra).

2.7. A Visual Basic rendszer Object Browser prbeszdablaka

A VISUAL BASIC NYELV

Mind a vltozk, mind pedig a konstansok lersa szorosan sszefgg a nyelv tpusaival, melyek legfontosabb adatait a 2.8a. s a 2.8b. brkon lthat tblzatban foglaltuk ssze. 2.3.3. Adattpusok Azon adattpusokat, melyek kzs jellemz je, hogy a velk deklarlt vltozk egyszerre csak egyetlen adatot (egy szmot, egy szveget stb.) trolnak, egyszer vagy elemi tpusoknak nevezzk. Ebbe a csoportba tartozik a Visual Basic tpusainak tbbsge. Nhny tpus tbb adat egyidej trolst is lehet v teszi. Amennyiben ezek az adatelemek azonos tpusak, akkor tmbt kell hasznlnunk. Ha az azonban az adatok tpusa klnbz , az n. felhasznli tpust (Type) kell segtsgl hvnunk.
Adattpus Memriaigny 1 bjt Byte 2 bjt Boolean 2 bjt Integer 4 bjt Long 4 bjt Single 8 bjt Double 8 bjt Currency 14 bjt Decimai 8 bjt Date 4 bjt Object String (dinamikus) 10 bjt + sztring hossza String (rgztett hossz) A sztring hossza Variant (szm) 16 bjt Variant (szveg) 22 bjt + a sztring hossza 2.8a. bra A Visual Basic 6 nyelv adattpusai s azok trignye

2. FEJEZET

2.8b. bra A Visual Basic 6 nyelv adattpusai s a tpusok rtkkszlete

El szr azokkal az egyszer adattpusokkal foglalkozunk, amelyek numerikus adatokat, szmokat trolnak. A numerikus adatokat trol vltozkkal aritmetikai m veleteket vgezhetnk. 2.3.3.1. Egsz tpusok A Visual Basic-ben tbbfle el re definilt egsz tpus hasznlhat. Ezek mind egsz szmokat trolnak, de rtkkszletk s helyfoglalsuk klnbz . Az albbi tblzatban sszefoglaltuk az egyes tpusokhoz tartoz rtkkszletet s trolsi hosszat.

A VISUAL BASIC NYELV

Logikai informcik trolsa A logikai (Boolean) tpus vltozkat logikai rtkek trolsra, s logikai mveletek vgzsre hasznljuk. A (16-bites) logikai vltozk csak ktfle rtket vehetnek fel: True (igaz) s False (hamis). Numerikus kifejezsekben a True -/, a False pedig 0 rtkkel jelenik meg. 2.3.3.2. Vals tpusok Vals szmok trolsra szintn tbb tpust hasznlhatunk, melyek jellemz it az albbi tblzatban foglaltuk ssze.

A szoksos lebeg pontos (Single, Double) vals tpusokon tlmen en szlnunk kell a Currency s a Decimai tpusokrl. Mindkt tpus egsz szmokban trolja az rtkt, gy jl hasznlhatk nagy pontossg szmtsok vgzshez. A Currency tpus esetn az egsz szm 64-bites, s a trolt szm a vals szm tzezerszerese. Ezzel a megoldssal n. fixpontos trols valsul meg, melyben az egsz rsz 15-jegy , mg a tizedes pont utn mindig 4 jegy ll. Az adattpus bevezetsnek clja, hogy pnzgyi szmtsoknl a kerektsi hibk minimlisak legyenek. Hasonlan m kdik a Decimai tpus is, azzal a klnbsggel, hogy a trols 96-biten trtnik, s a 28 jegyen bell a tizedes pont helye nem rgztett (lebeg"). A Decimai tpus csak a varins tpuson bell hasznlhat, mint ahogy az albbi programrszlet is mutatja:

Tudnunk kell azonban, hogy a napjainkban hasznlt processzorok a Single s a Double tpus adatok hasznlatt tmogatjk. Ezrt a msik kt vals tpussal vgzett szmtsok elg id ignyesek.

2. FEJEZET

Dtum s id trolsa a Date tpus

Az adatkezel alkalmazsok a klnbz esemnyekhez, m veletekhez ltalban id pontot is kapcsolnak. Visual Basic-ben az id pontok (magyar belltsok esetn v.h.nap ra:perc:msodperc) trolst Date tpus vltozkban vgezhetjk. Az idpontvltozk valjban 8-bjtos vals rtkeket trolnak. A vals szm egsz rsze 1899. december 30. ta eltelt napok szmt tartalmazza, mg a trtrsz az eltelt id t trolja a 24-rs nap trtrszeknt:
Date rtk 0 1.5 -18917.25 29212.75 Dtum 1899.12.30. 1899.12.31. 1848.03.15. 1979.12.23. Id 0:00:00 12.00:00 6:00:00 18:00:00

Ezzel a mdszerrel a dtumokat 100. janur 1. s 9999. december 31. kztt, mg az id t 0:00:00 s 23:59:59 kztt adhatjuk meg. (Ha a megadott vszm 0 s 29 kz esik, akkor azt automatikusan 2000 s 2029 kztti vnek veszi rendszer, mg a 30-99 rtkeknek 1930-1999 vek felelnek meg.) Egy adott id pontot tbbflekppen is bellthatunk. Dtumkonstans esetn az angol dtum/id formtumot kell hasznlnunk, mg szvegb l talaktva a Windows rendszer belltsai szerint kell megadnunk az id pontot:

Egy sor fggvny s utasts segti az aktulis dtum- s id pontadatok kezelst:

2.3.3.3. A karaktersorozat-tpusok A string tpus vltozkat szvegek trolsra hasznljuk. A Visual Basic a 16-bites Unicode kdtblnak megfelel en trolja a karaktersorozatokat:

A VISUAL BASIC NYELV

ltalban nem kell foglalkoznunk a szvegtrols mdjval, azonban nhny esetben a bjtos karakterelrs is szksges lehet. Ezrt a sztringkezel fggvnyek tbbsge, mint pldul a karaktersorozat hosszt visszaad fggvny is, kt vltozatban ltezik. A Len() fggvny az Unicode kdols karakterek szmt adja vissza, mg a LenB() fggvny a karaktersorozat bjtokban kifejezett mretvel tr vissza. Visual Basic-ben kt tpus is segti a szvegek trolst.

A rgztett hosszsg (statikus) sztring ltrehozsakor meg kell adnunk a hosszat, ami ks bb nem vltoztathat meg:
Dim ss As String * 12

A ltrehozs utn a karaktersorozat 0-kd karaktereket tartalmaz, azonban az els rtkads sorn a fel nem hasznlt karakterek szkzkkel tlt dnek fel. Ha a megadott hossznl hosszabb sztringgel inicializljuk a vltozt, a felesleges" karakterek elvesznek:

A vltoz hosszg (dinamikus) karaktersorozatok esetn a karaktersorozat hossza mindig akkora, amekkorra ppen szksg van a megadott szveg trolshoz. A dinamikus karaktersorozatot res sztringgel inicializlja a rendszer.

A Visual Basic-ben nincs kln karaktertpus, ezrt az egykarakteres sztringeket hasznljuk a karakterek helyett. A sztringet karakterenknt a Mid() fggvny, illetve utasts segtsgvel rhetjk el. A karaktereket 1-t l kezdve sorszmozzuk:

2. FEJEZET

2.3.3.4. A varins tpus A Visual Basic alaprtelmezs szerinti tpusa a Variant, ami lehet v teszi, hogy ugyanazon vltozban klnbz tpus adatokat troljunk. Az els ltsra knyelmes megoldsrt azonban tbb lefoglalt memrival s lassbb programfutssal kell fizetnnk. Ugyancsak gondot jelenthet, hogy a varins vltoz tartalmt a Visual Basic szksg szerint ms tpusv alaktja. Az albbi plda jl rzkelteti a problmt:

A varins tpus vltoz aktulis tpusrl a TypeName() s a VarType() fggvnyek segtsgvel kaphatunk informcit. A TypeName() fggvny karaktersorozatban adja vissza a paramterknt megadott (tetsz leges tpus) vltoz vagy konstans tpusnak nevt, mg a VarType(). fggvny a tpust jellemz sorszmmal tr vissza:
Konstans vbEmpty vbNull vblnteger vbLong vbSingle vbDouble vbCurrency vbDate vbString vbObject vbError vbBoolean vbVariant vbDataObject vbDecimal vbByte vb UserDefinedType vbArray Ertek 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 36 8192 A vltoz tartalmnak tpusa Empty (inicializlatlan) Null (rvnytelen adat) Integer Long Single Double Currency Date String Object Error (sikertelen konverzi) Boolean Variant (varins elemek tmbje) Adatelr objektum Decimai Byte Felhasznl ltal definilt tpus varins Tmb

Specilis rtkek (varins altpusok) jelzik, hogy a varins vltoz nem kapott mg rtket (Empty), a tartalma semmilyen tpusknt sem rtelmezhet (Null), illetve rtke sikertelen tpus-talakts sorn jtt ltre (Error).

A VISUAL BASIC NYELV

A varins tpus vltoz ltrehozs utni kezd rtke az Empty, amely numerikus kifejezsekben 0-knt, mg sztringkifejezsekben res karaktersorozatknt"" viselkedik. 2.3.3.5. Statikus tmbk A tmb adott darabszm, azonos tpus elemet tartalmaz adattpus. A tmb tpus vltozk (tmbk) elemeit egy sorszm, az n. index segtsgvel rjk el. A deklarcikban (Dim, Public, Private, Static) a tmb nevt kerek zrjelek kztt kvetik az indexekre vonatkoz informcik, majd az As sz utn az elemek tpusa ll:
Dim tmbnv(fels _indexhatr) As elemtpus

vagy
Dim tmbnv(als_indehatr To fels _indexhatr) As elemtpus

Az elemtpus meghatrozza, hogy a tmb elemei milyen adatokat tartalmaznak. Az elemek tpusa lehet egyszer vagy akr a felhasznl ltal definilt tpus is. Amennyiben csak a fels indexhatrt adjuk meg, az als indexhatr 0 (alaprtelmezs) vagy 1 lesz, a modul deklarcis rszben elhelyezett Option Base utastsban belltott rtknek megfelel en:
Option Base {0 | 1}

A fenti szintaxis alapjn csak egydimenzis (egy kiterjeds ) tmbket kszthetnk, azonban a Visual Basic a tbbdimenzis tmbk hasznlatt is tmogatja. Tbbdimenzis tmb deklarcijban az indexhatrokat vessz vel tagolva adjuk meg. (A ktfle indextartomny-kijell mdszer akr vegyesen is alkalmazhat.) Az egydimenzis tmbt vektornak, mg a ktdimenzis tmbt mtrixnak is szoks nevezni. (A tmbk mretre s a dimenzik szmra a rendelkezsre ll memria szab korltot.) Nzznk nhny pldt a tmbk defincijra!
Dim v(l To 12) As Integer Dim m(1 To 7, 1 To 7) As Integer Dim s(3, -5 To 5, 4)

Az elemeket az indexek segtsgvel rhetjk el:

2. FEJEZET

A LBound() s az UBound() fggvnyek segtsgvel lekrdezhetjk a tmbdimenzik als, illetve fels indexhatrt. A tmbelemek programozott (ciklusos) elrsnl ezt a mdszert ajnlott hasznlni.
LBound(tmbnv [, dimenzi]) ULBound(tmbnv [, dimenzi])

Ha dimenzi sorszmt elhagyjuk, akkor az els dimenzira vonatkoznak a visszaadott rtkek:

A tmbk a memria egy-egy folytonos terletn helyezkednek el. Az egydimenzis tmb esetn az elemek egyszer en az indexek nvekv sorrendjben kvetik egymst. Tbbdimenzis tmb elemeinek trolsa esetn mindig el szr a legutols index fut krbe, majd az utols el tti stb. A fent bemutatott tmbk n. statikus tmbk, melyek mrete a deklarci sorn d l el, s ez a mret nem vltoztathat meg. A kvetkez rszben a dinamikus (tmretezhet ) tmbk hasznlatval ismerkednk meg. Miel tt tovbb mennnk, szlnunk kell az Erase utastsrl, melynek segtsgvel a statikus tmbt lenullzhatjuk", azaz a tmb elemeit az alaprtelmezs szerinti kezd rtkekkel tlthetjk fel:
Erase tmbnvl [, tmbnv2 ...]

A VISUAL BASIC NYELV

Felhvjuk a figyelmet arra, hogy a Visual Basic nem rtelmezi a statikus tmbk kztti rtkads m velett. Varins elem tmbt tartalmaz varins vltoz Egydimenzis varinstmbt tbbflekppen is ltrehozhatunk. Egyrszt hasznlhatjuk a fentiekben ismertetett megoldsokat, msrszt viszont segtsgl hvhatjuk az Array() fggvnyt:
Option Base 0 Private Sub Commandl_Click() Dim vl(0 To 2) As Variant Dim v2 As Variant, v3 vl(0) = 7 vl(l) = "Lafenita" vl(2) = 19.791223 v2 = vl v3 = Array(7, "Lafenita", 19.791223) End Sub

Az Array() fggvny ltal visszaadott varins tmb als indexhatra az Option Base belltstl fgg en 0 vagy / lesz. A megolds nagy el nye, hogy az j tmb elemeinek kezd rtket adhatunk, htrnya viszont, hogy a tmb elemei Variant tpusak lesznek. Az gy ltrehozott tmb tulajdonkppen egy dinamikus tmb, amelyre a kvetkez fejezet megjegyzsei vonatkoznak. Az Array() fggvny segtsgvel tbbdimenzis tmbt is ltrehozhatunk, azonban az elemekre a szoksostl eltr mdon kell hivatkoznunk:
Option Base 1 Private Sub Commandl_Click () Dim vm As Variant vm = Array(Array( 2, 13, 7), _ Array(30, 12, 9)) Print vm(l)(1) ' 2 Print vm(2) (3) ' 9 End Sub

2.3.3.6. Dinamikus tmbk A dinamikus tmb mrett - ellenttben a mr ismertetett statikus tmbkkel -, nem a fordts, hanem a futs sorn kell belltanunk. A dinamikus tmb brmikor tmretezhet , illetve trlhet .

2. FEJEZET

A dinamikus tmb deklarcija a tmb nevt, res indextartomnyt s az elemek tpust tartalmazza:
Dim dt() As Integer

A deklarcit a modulon bell brhol megadhatjuk, azonban a mretez s trl utastsokat alprogramon bell kell elhelyeznnk. A deklarci sorn csak egy hivatkozs jn ltre, magt a tmbt futs kzben kell ltrehoznunk a Redim utasts felhasznlsval:
ReDim d t ( l To 12) As Integer

vagy
ReDim dt(1 To 12)

A fenti utasts hatsra a memriban ltrejn a 12 egsz tpus elemet tartalmaz tmb, amelynek minden eleme 0 lesz. Az elemeket a szoksos indexelssel rhetjk el. Felhvjuk a figyelmet arra, hogy mretmegads sorn a tmb elemeinek tpusa nem vltoztathat meg. A Redim utasts ismtelt alkalmazsval a tmbt brmikor tmretezhetjk. Az tmretezs sorn dnthetnk arrl, hogy a mr meglv elemek rtkt meg rizzk (preserve), vagy sem. Ha az elemek meg rzse mellett dntnk, akkor az tmretezs sorn csak az utols dimenzihoz tartoz indextartomny fels hatrt mdosthatjuk, s termszetesen a dimenzik szmt is meg kell riznnk:
ReDim Preserve dt(1 To 23) ' nveljk

vagy
ReDim Preserve dt(l To 7) ' cskkentjk

Ha tmb mrett cskkentjk, akkor a kikerl elemek vgleg elvesznek, az rtkmeg rzs csak a megmarad elemekre vonatkozik. Amennyiben az tmretezs sorn nem kvnjuk meg rizni a tmb elemeit, a dimenziszm s az indextartomnyok is szabadon mdosthatk - az elemtpus azonban nem:
ReDim dt(-5 To 5, 12 To 2 3 )

A VISUAL BASIC NYELV

Amikor befejeztk a tmbbel val munkt, az Erase utastssal felszabadthatjuk a lefoglalt memria-terletet.
Erase dt

Vgezetl nzznk nhny megjegyzst a dinamikus tmbkkel kapcsolatosan! Az elmondottak Variant vltozban trolt dinamikus tmbre is vonatkoznak:

Alprogramon bell a Redim utasts a dinamikus tmb deklarcijt is elvgzi:

- Az azonos elemtpus dinamikus tmbk kztt hasznlhat az rtkads m velete. Az rtkads sorn, a bal oldalon szerepl dinamikus tmb tveszi a jobb oldalon megadott tmb mreteit s elemeit. A utasts jobb oldaln azonos tpus statikus tmb is szerepelhet.

2.3.3.7. A felhasznli tpus A felhasznl ltal definilt tpus, olyan sszetett adatszerkezet, amelyben tetsz leges szm, klnbz tulajdonsg (tpus) rsz szerepelhet. A tpusdeklarcit a Type s az End Type foglalt szavak kztti sorokban kell elhelyeznnk a modul deklarcis rszben. A kt foglalt sz kztt a kznsges vltozkhoz hasonl mdon definiljuk a tpus elemeit (mez it) (egyet, egy sorban). Pldul, a naptrbejegyzst a Type segtsgvel a kvetkez kppen rhatjuk le:

2. FEJEZET

A Type defincit a formmodulon bell csak private (modulszint ), mg a Basic modulban tetsz leges private/public elrssel szerepeltethetjk. A dtum tpus felhasznlsval vltozkat deklarlhatunk, melyeknek alprogramon bell rtket is adhatunk. A vltoz neve utn ponttal elvlasztva hivatkozunk az egyes mez kre:

Kt azonos-, felhasznli tpus vltoz (struktra) kztti rtkads mindig elvgezhet mez nknt, azonban sokkal hatkonyabb megoldshoz jutunk, ha a struktra azonostjra vonatkoz egyetlen rtkad utastsban msoljuk t a mez k tartalmt. A fenti pldt folytatva Hsvt msnapjt az albbiak szerint definilhatjuk:
husvet2 = husvetl husvet2.nap = 2 1

Klnbz tpus struktrk kztt is elvgezhet az adatterlet msolsnak m velete az LSet utasts felhasznlsval. A msolt bjtok szmt a Len(vltoznv 1) s a Len(vltoznv2) kifejezsek minimuma adja. Az elmondottakat az albbi plda szemllteti:

A VISUAL BASIC NYELV

2.3.3.8. Objektum-referencia A Visual Basic objektumalap nyelv, ami azt jelenti, hogy az objektum-orientltsg kvetelmnyeinek csak rszben tesz eleget. A Visual Basic alkalmazsok ksztse sorn lpten-nyomon objektumokat (pldul a vezrl ket) hasznlunk. Az objektumok tpust osztlynak nevezzk. Az osztlymodul (.CLS) segtsgvel sajt magunk is kszthetnk osztlyokat. Az osztlyok a felhasznli tpusokhoz hasonlan tartalmaz adatmez ket, azonban ezek elrse korltozhat. Az adatokon tlmen en tallunk bennk alprogramokat is, melyeket metdusnak, illetve tulajdonsgnak hvunk. Az osztlytpussal objektumokat kszthetnk, melyekre val hivatkozst n. objektum-referencia vltozkban trolja a Visual Basic. Az albbi pldban a Control objektumhoz ksztnk referencit, mellyel aztn a formon szerepl szvegmez re hivatkozunk, s hasznljuk azt:

Az objektum-referencinak val rtkadst a Set kulcsszval kell bevezetnnk. Amennyiben meg kvnjuk szntetni az objektum s a referencia kztti kapcsolatot, az rtkads jobb oldaln a Nothing (semmi) rtket kell szerepeltetni. A fenti pldban a deklarci sorn csak az objektum-referencia jtt ltre. A deklarci specilis formjt hasznlva azonban a referencival egytt az objektumpldnyt is el llthatjuk:

A pldban ltrehozzuk az StdFont bet kszlet-osztly egy pldnyt (objektumt), melyre aztn az objref referencival hivatkozunk. Az objektumot ks bb a szvegmez hz rendeljk, majd pedig elengedjk.

2. FEJEZET

2.3.4. Tpusazonosts s tpuskonverzi Mint lttuk a Visual Basic tpusossgrl, vagyis arrl, hogy a tpusok, deklarcik hasznlata mennyire tudatos kell legyen a programoz rszr l, magunk intzkedhetnk (Option Explicit). Ennek ellenre btran kijelenthetjk, hogy a Visual Basic nagyon rugalmasan kezeli a klnbz tpusok kztti hatrokat, s egy sor olyan tpustalakts is automatikusan elvgez, melynek eredmnye nem mindig fedi az elvrsainkat.

A tpusok ilyen md megkzeltse mindig is sajtja volt a Basic nyelvnek, azonban a Visual Basic nyelv egy sor olyan eszkzt tartalmaz, melyek segtsgvel, kis odafigyelssel, keznkben tarthatjuk a klnbz tpus adatok talaktst. 2.3.4.1. Tpusok azonostsa Egy vltoz, illetve konstans tpust tbbfle mdon is megtudhatjuk. Az els kzenfekv megolds, a mr bemutatott TypeName() fggvny hasznlata, amelyik karaktersorozatban adja vissza az argumentumban szerepl rtk tpust:

Mint ahogy a Variant tpusnl emltettk, a VarType() fggvnyt is sikeresen alkalmazhatjuk egy adott kifejezs tpusnak meghatrozshoz:

Bizonyos tpusok ellen rzsre kln fggvnyeket tallunk a Visual Basic-ben, melyek True rtkkel jelzik, ha az argumentum tpusa megegyezik a vizsglt tpussal, vagy azz konvertlhat:

A VISUAL BASIC NYELV

Fggvny lsArray (vltoznv) IsDate (kifejezs) IsEmpty (kifejezs) IsError( kifejezs) IsNull(kifejezs) IsMissing(argumentumnv) isNumeric(kifejezs) IsObject(azonost)

A vizsglat trgya tmb dtum inicializlatlan varins varins hiba varins rvnytelen adat hinyz argumentum numerikus objektum

Kln vizsglati mdszert biztost a nyelv az objektumpldnyok osztlynak beazonostsra. A


TypeOf Forrni Is Form

kifejezs rtke csak akkor igaz , ha a Forrni ablakot jell. (A Visual Basic objektumokkal kln fejezetben foglalkozunk.) 2.3.4.2. Tpuskonverzik A Visual Basic nyelv majdnem minden tpust kpes majdnem minden tpuss automatikusan talaktani - nagyon kevs esetben kapunk Type mismatch" hibazenetet. Ajnlott azonban ezeket az automatikus tpuskonverzikat felgyeletnk al vonni. Ennek mdja, hogy megfelel talakt fggvnyeket alkalmazunk. A Windows rendszer csak szveges informcik kezelsre kpes, gy a bejv szmadatokat megfelel mdon numerikus rtkk kell alaktanunk, illetve a kirni kvnt rtkekb l karaktersorozatot kell ksztennk. Az albbi tblzatban sszefoglaltuk s rviden jellemeztk a klnbz talakt fggvnyeket. Karaktersorozat talaktsa szmm
Val(sztring)

A fggvny megadja a sztringben trolt egsz vagy vals szm rtkt. Vals szm esetben csak a tizedes pontot fogadja el. Amennyiben nem sikerl az talakts, 0 rtkkel tr vissza. Tetsz leges kifejezs (sztring is) talaktsa Byte, Integer, Long, illetve Single, Double, Currency valamint varins Decimai tpusv. Az talaktst a Windows helyi belltsainak figyelembevtelvel vgzik a fggvnyek. Amennyiben a konverzi sikertelen, hiba lp fel a programban, amit megfelel eszkzkkel kezelhetnk.

CByte (kifejezs) Cint(kifejezs) CLng(kifejezs) CSng(kifejezs) CDbl(kifejezs) CCur(kifejezs) CDec(kifejezs) Asc(sztring) AscB(sztring) AscW(sztring)

A fggvny megadja a sztring els karakternek kdjt (B-bjtjt).

2. FEJEZET

Szmok talaktsa karaktersorozatt: Str(szm)


A fggvnyek az argumentumukban szerepl egsz vagy vals szmot karaktersorozatt alaktjk. Vals szm esetben csak a tizedes pontot fogadjk el. Tetsz leges kifejezs karaktersorozatt val talaktsa. Az talaktst a Windows helyi belltsainak figyelembevtelvel vgzi a fggvny. Amennyiben a konverzi sikertelen, hiba lp fel a programban, amit megfelel eszkzkkel kezelhetnk. Egykarakteres sztring el lltsa a karakterkd (B-ANSI, W-Unicode) alapjn. A kifejezs talaktsa hexadecimlis karaktersorozatt. A kifejezs talaktsa oktlis karaktersorozatt.

CStr(kifejezs)

Chr(kd) ChrB(kd) ChrW(kd) Hex(kifejezs) Oct(kifejezs)

Kln kell szlnunk a Format() fggvnyr l, melynek segtsgvel szmokat s dtumokat formtum alapjn alakthatunk karaktersorozatt. A fggvny hasznlatnak formja:
Format{kifejezs[, formtuml, htels nap[, vels ht]]])

A fggvny hvsakor felhasznlhat formtumelemeket a CD-mellkleten tallhat F2. fggelkben foglaltuk ssze. Dtummal/id vel kapcsolatos talaktsok
CDate(kifejezs) Tetsz leges kifejezs talaktsa Date tpusv. Az talaktst a Windows helyi belltsainak figyelembevtelvel vgzi a fggvny. Amennyiben a konverzi sikertelen, hiba lp fel a programban. Tetsz leges - ltalban sztring - kifejezs talaktsa dtumm. Dtum el lltsa a megadott sszetev kb l. A v lekrdezse a dtumbl. A hnap lekrdezse a dtumbl. A nap lekrdezse a dtumbl. A ht napjnak lekrdezse a dtumbl (1 - vasrnap). Tetsz leges - ltalban sztring - kifejezs talaktsa id v. Id el lltsa a megadott sszetev kb l. Az ra lekrdezse az id b l. A perc lekrdezse az id b l. A msodperc lekrdezse az id b l.

DateValue(kifejezs) DateSerial(v, h, nap) Year(dtum) Month(dtum) Day(dtum) WeekDay(dtum[, els ]) TimeValue(kifejezs) TimeSerial(ra, perc, mp) Hour(id ) Minute(id ) Second(id )

A VISUAL BASIC NYELV

Vals szm talaktsa egsz szmm

CInt(vals szm) A legkzelebbi egsz szmm val alakts. CLng(vals szm) (_3.6->-4, -3.1-4-3, 3.6-4, 3.1-43) Round (szm) Fix(vals szm) Kerekts a legkzelebbi egsz szmm (-3.6--4, -3.1>-3, 3.6-44, 3.1-H>3) Egsz szmm val alakts a trtrsz levgsval. Negatv szm esetn az els nagyobb vagy egyenl egsszel tr vissza: Sgn(szm)*Int(Abs(szm)) (3.6->-3, -3.1-^-3, 3.6-43, 3.1-43) Egsz szmm val alakts a trtrsz levgsval. Negatv szm esetn az els kisebb vagy egyenl egsszel tr vissza. (-3.6->-4, -3.1-4-4, 3.6^3, 3.1-43)

Int(vals szm)

Egyb konverzik CBool(kifejezs) CVar(kifejezs) Tetsz leges kifejezs talaktsa Boolean tpus rtkk. Tetsz leges kifejezs talaktsa Variant tpus rtkk.

2. FEJEZET

2.4. Visual Basic kifejezsek


A kifejezsek opertorok s operandusok sorozatbl llnak. Az operandusok azok az adatok, amelyekkel a mveleteket vgezzk. Opertoroknak nevezzk a klnfle m veleti jeleket, amelyek sszekapcsoljk a kifejezsben szerepl operandusokat (vltozkat, konstansokat s fggvnyhvsokat). 2.4.1. Egy- s ktoperandus m veletek A m veleteket csoportosthatjuk az operandusok szma szerint. Ennek alapjn a Visual Basic-ben minden m velet egy- vagy ktoperandus. Azt a m veleti jelet, amely az egyetlen operandusa el tt szerepel, n. egyoperandus (unary) opertornak nevezzk:
opertor operandus

Ilyen m velet pldul az el jelvlts:


-a

Amennyiben az operandusok kzrefogjk a m veletei jelet, gy n. ktoperandus (binary) m veletr l (s opertorrl) beszlnk:
operadusl opertor opera.ndu.s2

Ktoperandus

m veletek pldul, az sszeads s a szorzs:


a + b ' kt vltoz sszege x * 2 ' egy vltoz s egy konstans szorzata

2.4.2. Els bbsgi szablyok Az n. els bbsgi (precedencia) szablyok pontosan meghatrozzk a kifejezsekben a m veletek kirtkelsi sorrendjt. A kirtkels sorrend alapjn a m veleteket hrom csoportba soroljuk. Az els bbsg a csoportok kztt, illetve a csoportokon bell egyarnt rgztett, a 2.9. albbi brnak megfelel en: (Az brn a nyilak a nagyobb precedencia irnyba mutatnak.) A kifejezsek kirtkelsnl a kvetkez szablyokat veszi figyelembe a fordtprogram: 1. Kt klnbz precedencij opertor esetn el szr a magasabb precedenci j opertor ltal el rt m velet hajtdik vgre: 3+4*5>23 (s nem 55!) 2. Az azonos precedencij opertorok a felrsuk sorrendjben (balrl jobbra haladva) rtkel dnek ki. 15+6-9>12 3. A zrjelezs megvltoztatja a m veletek kirtkelsi sorrendjt. El szr min dig a (legbels ) zrjelben megadott m veletek hajtdnak vgre. (3+4)*5>35 (s nem 23!)

A VISUAL BASIC NYELV

2.9. bra A Visual Basic opertotok precedencija

2.4.3. A m veletek csoportostsa A Visual Basic nyelvben bizonyos opertorokhoz tbbfle m veletet is trsul. Pldul a + opertor egyarnt jellhet el jelet, sszeadst vagy sztringek sszekapcsolst. Azt, hogy egy opertor az adott m veletben mit is jell, az operandusok szma s tpusa hatrozza meg. A m veleteket az operandusok tpusa alapjn az albbi csoportokba sorolhatjuk: aritmetikai m veletek, sszehasonlt m veletek (relcik), logikai m veletek, bitenknt vgzett logikai m veletek, sztringek sszekapcsolsa. 2.4.3.1. Aritmetikai mveletek Az aritmetikai m veleteket az aritmetikai kifejezsekben hasznljuk. Az ilyen m veletek operandusai egyarnt lehetnek egsz s vals tpusak. Az eredmny tpusa fgg az operandusok tpustl.

2. FEJEZET

Nhny - mveletekre vonatkoz szably is megfogalmazhat: Ha az a+b, a-b, a*b m veleteknl mindkt operandus egsz tpus, akkor az eredmny is egsz tpus lesz, ha brmelyik vals, akkor az eredmny vals tpus lesz. Az a/b s aAb kifejezsek eredmnye mindig vals, mg akkor is, ha mindkt operandus egsz tpus. (A hatvnyozs mindig Double tpus eredmnyt ad.) A csak egsz tpus operandusokra rtelmezett \ s mod mveletek eredmnye mindig egsz tpus. A \ az egsz szmok osztsakor keletkez hnyadost, mg a mod a maradkot szolgltatja. A mveletek elvgzse el tt az operandusokat azonos tpusv alaktja a fordt. A konverzi mindig a nagyobb", pontosabb tpus irnyba trtnik. (Kivve a hatvnyozst, ahol mindig Double lesz az operandusok tpusa, s a szorzs/osztst, ahol szintn legfeljebb Double tpus az eredmny.) Nzznk nhny pldt a tpusjell karakterek felhasznlsval!

Matematikai fggvnyek hasznlata Matematikai kpletekben az ismertetett aritmetikai opertorokon tlmen en gyakran matematikai fggvnyek is szerepelnek. A Visual Basic nyelv egy sor matematikai fggvnyt is tartalmaz. A 2.10. brn lthat tblzatban sszefoglaltuk a fontosabb matematikai fggvnyekhez kapcsold ismereteket.

A VISUAL BASIC NYELV

2.10. bra Matematikai fggvnyek

2.4.3.2. Logikai m veletek A Visual Basic nyelv bizonyos utastsaiban logikai kifejezsek segtsgvel szablyozzuk az utasts vgrehajtst. A logikai kifejezsek ltalban logikai m veletekkel sszekapcsolt sszehasonltsokat (relcikat) tartalmaznak, amelyeket ks bb trgyalunk. A Boolean tpus operandusokat logikai opertorokkal sszekapcsolva olyan kifejezshez jutunk, melynek tpusa szintn Boolean. Ennl fogva a logikai kifejezsek kirtkelsnek eredmnye csak True vagy False lehet. A logikai opertorokat s az egyes mveletek precedenciaszintjt az albbi tblzatban tanulmnyozhatjuk.

Az egyoperandus (Not) s a ktoperandus (And, Or, Xor, Eqv, Imp) logikai m veletek m kdst n. igazsgtblk segtsgvel szoks jellemezni. A tblzatokbl kiolvashat, hogy adott operandusrtkek esetn mi lesz a m velet eredmnye.

2. FEJEZET

Not A

A tagads azt jelenti, hogy a Not opertor mgtt megadott operandus rtke az ellenkez jre vltozik.

A And B

A logikai S m velet csak akkor ad igaz eredmnyt, ha mindkt operandus (A s B) rtke igaz.

A Or B

A logikai VAGY m velet igaz eredmnyt ad, ha a kt operandus kzl legalbb az egyik igaz.

A Xor B

A logikai kizr VAGY m velet akkor ad igaz eredmnyt, ha a kt operandus kzl pontosan az egyik rtke igaz.

A Eqv B

Az ekvivalencia m velet akkor ad igaz eredmnyt, ha a kt operandus azonos logikai rtk .

A VISUAL BASIC NYELV

A Imp B

Az logikai implikci m velet a True>False tmenet kivtelvel mindig igaz eredmnyt ad.

2.4.3.3. Bitenknt vgzett logikai m veletek A bitenknt elvgzett logikai m veletek segtsgvel az egsz tpus rtkek bitjeit kzvetlenl kezelhetjk. A m veletekben szerepl operandusok s az eredmny egyarnt egsz tpusak. A bitenknti opertorok megegyeznek a logikai opertorokkal, azonban Boolean tpus operandusok helyett egsz szmok bitjein vgzik el a m veleteket. A m veletek megrtsben az el z fejezet igazsgtbli is segtsgnkre lehetnek, ha a True bejegyzst 7-re, a False rtket pedig O-ra cserljk. A Visual Basic a bitenknti logikai m veletek vgzst egyarnt biztostja 1-, 2- s 4bjtos egszekre. Nzznk pldt az egyes mveletekre Byte tpus adatok felhasznlsval! A m veleteket gpi brzolsukkal magyarzzuk. A Not (bitenknti tagads) m velet az operandus minden bitjt ellentettjre vltoztatja. Ez azt jelenti, hogy ahol 7 volt, ott 0 lesz, ahol pedig 0 volt, ott 7 lesz.

Az. And (bitenknti S) m velet a kt operandust bitenknt sszehasonltja, s ahol mindkt helyen 7 volt, ott 7, klnben pedig 0 lesz az eredmnyben.

Az Or (bitenknti VAGY) m velet eredmnyben ott lesz 7-es bit, ahol valamelyik operandusban 7 volt, s csak ott lesz 0, ahol mindkett ben 0 llt.

2. FEJEZET

A Xor (bitenknti kizr vagy) m velet eredmnynek bitjei csak akkor lesznek 1 rtk ek, ha az operandusok azonos helyen ll bitjei klnbz ek.

Az Eqv (bitenknti ekvivalencia) mvelet eredmnynek bitjei csak akkor lesznek l rtk ek, ha az operandusok azonos helyen ll bitjei azonosak.

Az Imp (bitenknti implikci) m velet eredmnynek bitjei az 1-0 prosts kivtelvel 1 rtk ek lesznek.

2.4.3.4. sszehasonlt (relcis) mveletek A relcis m veletek klnfle egymssal kompatibilis tpus kifejezsek (aritmetikai, szveges stb.) sszehasonltsra szolglnak. Az sszehasonlts eredmnye igaz (true), ha a relci teljesl, s hamis (false) ellenkez esetben. Az opertorok mindegyike ktoperandus.

A relcis opertorokat leggyakrabban klnbz matematikai felttelek felrshoz hasznljuk. Pldul, annak eldntsre, hogy a vals x vltoz rtke kisebb-e, mint 5, az albbi kifejezs hasznlhat:
x < -5

Ha azt kvnjuk megvizsglni, hogy x a [-5,5) intervallumban helyezkedik-e el, a matematikai felrst (-5<x <5) nem tudjuk egy az egyben alkalmazni, hiszen az mindig

A VISUAL BASIC NYELV

True rtket ad. A kpletet elolvasva azonban hasznlhat megfogalmazshoz jutunk, nevezetesen: "x nagyobb egyenl , mint -5 s kisebb, mint 5":

Amennyiben arra vagyunk kvncsiak, hogy x kvl esik-e a fenti intervallumon, akkor az eddigiek ismeretben tbbfle mdon is felrhatjuk a felttelt. Els lehet sgknt tagadjuk a bent van-e" vizsglat felttelt:

Matematikai logikban jrtas olvask a tagadst elvgezhetik az ott megismert szablyok alapjn, nevezetesen: a relcik megfordulnak s az Or-bl And, az And-b l pedig Or lesz:

Vals szmok esetn kln ki keli trnnk az azonossg vizsglatra. Mivel a vals szmok tbbsgt csak adott pontossggal brzolja a szmtgp, el fordulhat, hogy kt szmunkra azonosnak t n szmot a program klnbz nek rtelmez. Ennek okt a szmtsok s az brzols hibjban kell keresni. gy pldul, ha az x szmolt vals rtket tartalmaz, s azt kvnjuk megnzni, hogy ez nulla-e vagy sem, akkor az albbi megoldsok kzl a msodik hasznlata javasolt:

A kt utols opertorrl mg nem szltunk, melyek kzl a lik opertorral a kvetkez rszben ismerkednk meg. 2.4.4. M veletek karaktersorozatokkal A Visual Basic opertorokkal s fggvnyekkel tmogatja a karaktersorozatokkal val munkavgzst. Karaktersorozatok sszef zse Az opertorok aritmetikai csoportjban tallhat a sztringek sszef zst megvalst m velet {&). A m velet eredmnyeknt keletkez karaktersorozatba egyms utn bemsoldik az operandusok rtke:
"A vizsga" & " eredmnye: " & CStr(5)> "A vizsga eredmnye: 5"

2. FEJEZET

Megjegyezzk, hogy az sszef zs m velete a + opertorral is elvgezhet , azonban a varins tpus vltozkkal vgzett m veletek egyrtelm v ttele rdekben a & opertor hasznlata javasolt. Karaktersorozatok sszehasonltsa A relcis opertorok karaktersorozatok sszehasonltsra is felhasznlhatk. Ekkor az sszehasonlts a karakterek kdja alapjn trtnik. Pldul, az "A" < "B" felttel azrt igaz, mivel az Asc("A") (65) kisebb, mint az Asc("B") (66). A relcis opertorok sztringekre szintn alkalmazhatk. Az sszehasonlts ekkor a megfelel helyen ll karakterek pronknt trtn sszevetsvel trtnik. A vizsglat akkor fejez dik be, ha az ppen sszehasonltott karakterpr klnbz karakterekb l ll, vagy ha az egyik sztring elfogy". Az els esetben az a sztring a kisebb", amelyik a prbl kisebb kd karaktert tartalmazza:

Az albbi esetben az a sztring a kisebb", amelyik rvidebb volt: Ha nincs eltr karakterpr a kt sztringben, s egyik karaktersorozat sem r vget korbban, akkor a kt sztring azonos:

Az sszehasonlts mdjt modulonknt az Option Compare utastssal szablyozhatjuk, ahol a Binary az alaprtelmezs szerinti opci: A rendszer a kijellt opcinak megfelel en definilja a karakterek rendezettsgt. A Windows rendszerben a kdlapok ltal definilt, tipikus binris rendezsi sorrend az albbi:

A Text opci belltsa utn a sorrend alapvet en megvltozik, s majdnem - nincsenek benne a kett s bet k - megfelel a magyar ABC-nek:

A VISUAL BASIC NYELV

A Like opertor hasznlata Gyakran van szksg arra, hogy egy bejv karaktersorozatrl eldntsk, megfelel-e a formai kvetelmnyeknek (telefonszm, rendszm stb.). A Visual Basic a Like opertorral knyelmes megoldst biztost az ilyen s hasonl vizsglatok elvgzsre:

A mintasztringben az albbi jellseket hasznlhatjuk:

Az opertor karakterenknt vgighalad a bal oldali karaktersorozaton, s megvizsglja, hogy megfelelnek-e a karakterek a mintasztringben szerepl el rsnak. Ha a vizsglat sorn ellentmondst fedez fel, False lesz a kifejezs rtke, ha minden megfelel volt, akkor pedig True. Nzznk nhny pldt a Like opertor hasznlatra (Option Compare Binary bellts esetn)!

Karaktersorozat-kezel fggvnyek s utastsok A Visual Basic a karaktersorozatok feldolgozst segt fggvnyek gazdag kszletvel rendelkezik. Az albbi tblzatban sszefoglaltuk ezeket a fggvnyeket, rviden jellemezve a m kdsket.

2. FEJEZET

A fggvnyek hasznlatval kapcsolatosan az albbi megjegyzseket kel tennnk: A B" bet vel vgz d nev fggvnyek az Unicode kdols karakterek helyett, bjtosan rik el a feldolgozand karaktersorozatot. Az opcionlis sorrend paramter az sszehasonltsnl alkalmazott karaktersorrendet jelli ki. Ha a paramtert nem adjuk meg, a 1 az alaprtelmezett rtk. A lehetsges rtkeket az albbi tblzat tartalmazza:

A V1SUAL BASIC NYELV

A fenti ttekints utn nhny fggvnnyel s mvelettel rszletesebben, pldk felhasznlsval is megismerkednk.

A trim fggvnyek segtsgvel karaktersorozat vgeir l egyszer en eltvolthatjuk a szkzket. Ezek a fggvnyek nagyon hasznosak rgztett hosszsg karaktersorozatok hasznlata esetn.

2. FEJEZET

Vgezetl megnzzk formtumt:

a Format()

fggvny

nhny,

gyakran

hasznlt

A fggvnyeken tlmen en hrom utasts is segti a karaktersorozatokkal val munkavgzst. Mindhrom utasts ltez karaktersorozat valamely rsznek fellrsra hasznlhat. A Mid utastssal tetsz leges pozcitl kezdve, tetsz leges darabszm karaktert fellrhatunk. Az LSet utasts a karaktersorozat bal oldaltl, mg az RSet a vgt l helyezi el a megadott karaktersorozat karaktereit, a tbbi helyet pedig szkzzel tltik fel.

A VISUAL BASIC NYELV

2.4.5. M veletek id - s dtumadatokkal Az el z fejezetben mr megismerkedtnk a Date tpussal, s a hozz kapcsold konverzis fggvnyekkel. A Visual Basic azonban tovbbi hasznos fggvnyeket is tartalmaz. A dtum s id brzolsbl kvetkezik, hogy a szoksos sszehasonlt m veletek Date tpus rtkekkel is jl m kdnek:

A DateAdd() fggvny segtsgvel, vekkel("yyyy"), hnapokkal ("m"), napokkal ("d"), rkkal ("h"), percekkel ("n") s msodpercekkel ("s") mdosthatjuk a megadott id pontot.

ADateDiffO fggvny vekben ("yyyy"), hnapokban ("m"), napokban ("d"), rkban {"h"), percekben ("n") vagy msodpercekben ("s") mondja meg a kt megadott id pont kztti klnbsget.

A DatePart() fggvny segtsgvel a megadott dtumot sszetev ire - v ("yyyy"), h ("m"), nap ("d"), ra ("h"), perc ("n") vagy msodperc ("s") - bonthatjuk.

2. FEJEZET

2.4.6. Az osztly-hivatkozs opertor - Is Az Is sszehasonlt opertorral eldnthetjk, hogy kt klnbz osztly-hivatkozs ugyanarra az objektumra hivatkozik-e.

Az Is opertort a TypeOf kulcsszval egytt alkalmazva, a hivatkozott objektum tpust (osztlyt) ellen rizhetjk:

A VISUAL BASIC NYELV

2.5. Utastsok s vezrlsi szerkezetek Az el z fejezetekben szerepl pldaprogramok utastsok sorozatbl {szekvencia) pltek fel. A program futsa sorn egyik utasts a msik utn vgrehajtdott. Azonban vannak olyan esetek, ahol a vgrehajts folyamatt valamilyen felttelt l fgg en szt kell gaztatni (szelekci), illetve valamilyen tevkenysget tbbszr egyms utn kell vgrehajtani (iterci). A Visual Basic vezrlsi szerkezetei segtsgvel a vzolt feladatokat a legklnbz bb mdon oldhatjuk meg.
2.5.1. Szekvencia

Az albbi egyszer utastsok segtsgvel egyetlen lpsben elvgezhet m veleteket rhatunk el a programunk szmra. A szekvencinak hvott programszerkezet ilyen egyszer utastsok sorozatbl ll. 2.5.1.1. Az rtkad utasts Taln a leggyakrabban hasznlt Visual Basic utasts az rtkads, melynek sorn az egyenl sgjel bal oldaln ll vltoz felveszi a jobb oldalon megadott kifejezs rtkt:
[Let] vltoznv - kifejezs

Az eredeti Basic nyelvb l rklt Let (legyen) kulcssz hasznlata nem ktelez . Amennyiben a bal s a jobb oldal tpusa klnbzik, a fordt automatikusan elvgzi a szksges talaktsokat. Futs kzben csak akkor kapunk "Type mismatch" hibazenetet, ha a konverzi sikertelen volt. Ennek ellenre javasoljuk, hogy az ilyen esetekben is magunk rjuk el a szksgesnek tlt talaktsokat:

A numerikus rtkads sorn gyakran el fordul hiba a tlcsorduls (Overflow). Ekkor a bal oldali vltozban nem fr el a jobb oldalon megadott kifejezs rtke:

2. FEJEZET

Egyetlen megolds a problmra, ha nagyobb rtkkszlettel rendelkez tpust vlasztunk a deklarls sorn (a pldban ez lehet a Long tpus). Az albbi programrszletben az rtkad utasts klnbz formira lthatunk pldt:

A Visual Basic tmogatja a felhasznli tpus (Type) vltozk kztti rtkadst is. Azonos tpus vltozk esetn a Let is alkalmazhat, azonban klnbz tpus struktrk kztt csak az LSet rtkads a megengedett:

A VISUAL BASIC NYELV

Objektum-referencia tpus vltoznak csak a Set utastssal adhatunk rtket:

2.5.1.2. Eljrshvs Az eljrs olyan nvvel elltott programrsz, amely egy adott tevkenysgsorozatot sszefog. Az eljrshvs folyamn a hvott programrsz vgrehajtdik, majd a vezrls visszakerl a hvs utni utastsra. A hvs lehetsges formi:

Az albbi pldban az MsgBox() fggvnyt hvjuk eljrsknt, mivel csak a benne megvalstott tevkenysgre van szksgnk:

Visual Basic-ben az eljrsok nagy rsze valamilyen komponensen (objektumon) bell definilt metdus. Az elmondottak a metdushvsokra is rvnyesek, annyi klnbsggel, hogy a metdus nevt min steni kell az objektum nevvel, vagyis az objektum nevt ponttal elvlasztva meg kell adni a metdus neve el tt:

2.5.1.3.A With utasts A With utasts az ltala kijellt utastssorozatban megknnyti a felhasznli tpus vltozk, illetve az objektumok mez ire, tulajdonsgaira s metdusaira val hivatkozst. Az utasts ltalnos formja:

A strukra.mez nv, illetve objektum.elemnv hivatkozs helyett a With utastson bell elegend csak a ponttal kezd d mez -, illetve elemnevet megadni. A mez k (elemek) ekkor automatikusan az utastsban megadott vltozhoz tartoznak. A kvetkez programrszek, mind felhasznli tpus vltoz, mind pedig objektum esetn bemutatjk a With utasts alkalmazst:

2. FEJEZET

Az albbi pldban gombnyoms hatsra tmretezzk a TextJ szvegmez t, s belltjuk nhny tulajdonsgt:

2.5.1.4. Tovbbi szekvencia-elemek A Visual Basic-re jellemz az utastsok gazdag trhza - a programozsi nyelvek kzl a Visual Basic rendelkezik a legtbb utastssal. Ennl fogva csak a legfontosabbak bemutatsra szortkozhatunk. A program futst tbbflekppen is szablyozhatjuk:
End Stop Azonnal megszaktja a program futst. A fejleszt rendszerben futtatva az alkalmazst, felfggeszti annak futst, azonban a RunlContinue menponttal futs folytathat. .Exe fjll fordtott program esetben egy zenetablak jelzi az utasts vgrehajtst, s a program befejezi m kdst. Az utastsknt hasznlt fggvny egy esemny feldolgozsnak idejre tadja a vezrlst az opercis rendszernek. Hasznlata esetn a programunk ugyan las- j sabban m kdik, azonban a formok fogadjk a bevatkozsainkat.

DoEvents()

A VISUAL BASIC NYELV

A Windows rendszerhez kapcsold utastsok, fggvnyek:

2.5.2. Szelekci Az egyszer bb programok felptse olyan, hogy a sikeres m kdshez elegend a program sorait egyms utn vgrehajtani. Ha azonban a programunkat rzkenny" szeretnnk tenni a futs kzben bekvetkez esemnyekre (mint pldul egy kifejezs kirtkelsnek eredmnye vagy hibs bemeneti adat), akkor szksgess vlik ezen esetek ltrejttnek vizsglata. Attl fgg en, hogy milyen esemny lp fel, a programunk ms s ms ton halad tovbb - elgazik". A Visual Basic nyelvben az alkalmazs futsnak elgaztatsra feltteles utastsokat s fggvnyeket hasznlunk, melyek segtsgvel elrhetjk, hogy a vizsglt felttel eredmnyt l fgg en a programunk egyik vagy msik rsze m kdjn. 2.5.2.1. Az If utasts Az If...Then...Else utasts segtsgvel egy-, kt- vagy tbbirny feltteles elgazst is programozhatunk. Az If utasts rvid alakjai n. legazst (egyirny elgazst) valstanak meg (2.11. bra). A rvid alak csak a Then (akkor) gat tartalmazza. Az If utasts hagyomnyos formjban az utastsokat kett sponttal kell tagolnunk:

2. FEJEZET

Gyakrabban hasznljuk azonban az utasts blokkostott vltozatt, ahol a Then kulcssz mgtt semmi sem llhat:
If felttel Then utasts(ok) End If

Ha a felttel nem teljesl, akkor a vezrls egyszer en taddik az If utastst kvet utastsra.

2.11. bra Az If-Then utasts folyamatbrja

Az albbi pldban hibajelzst adunk, s kiugrunk az eljrsbl, ha beolvasott adat nem alakthat szmm:

Az Else (klnben) g bevezetsvel akkor is el rhatunk vgrehajtand utastsokat, ha a felttel nem teljesl (2.12. bra).

Ha a felttel rtke igaz (True), akkor a Then utni akkor_utastsok, ha pedig hamis (False), akkor az Else utni klnben_utastsok hajtdnak vgre.

A VISUAL BASIC NYELV

2.12. bra Az lf-Then-Else utasts folyamatbrja

Nzznk egy pldt az If...Then...EIse utasts hasznlatra! Az albbi programrszlet el llt kt (ts) lottszmot s megjelenti a kisebbet:

Az If segtsgvel tetsz leges szm elgazst is bepthetnk a programunkba, ha megadjuk az Elself rszeket:

Az albbi pldban msodfok egyismeretlenes egyenlet megoldsa sorn, a diszkriminns alapjn dntjk el, hogy hny gyke van az egyenletnek. (Az els fok tag egytthatjt s a szabad tagot, valamint ezek el jelt vletlenszer en lltjuk el .)

2. FEJEZET

Az Uf() fggvny Vannak esetek, amikor egy kifejezs rtkt valamilyen felttelt l fgg en kell meghatrozni. Ilyenkor az If utasts kiss krlmnyes, helyette az IIf () fggvny hasznlatajavasolt:

Ha a. felttel igaz, akkor a fggvny az igazrsz kifejezs rtkvel, ellenkez esetben pedig a hamisrsz kifejezs rtkvel tr vissza. Legyen a feladat kt szm kzl a nagyobb megkeresse. A megolds If utastssal:

A megolds az IIf() fggvny alkalmazsval:

Az IIf() fggvnyt tetsz leges, alaptpus argumentummal hvhatjuk, pldul karaktersorozattal:

A VISUAL BASIC NYELV

2.5.2.2. A Select Case utasts A Select Case utasts alternatv megoldst biztost programunk tbbirny elgaztatsnak megvalstsra (12.13. bra). A Visual Basic nyelvben ez az utasts az If utastst minden esetben kpes helyettesteni, gy ltalban vlaszthatunk, hogy melyik szerkezetet is hasznljuk. Az utasts felptse:

2.13. bra A Select-Case utasts folyamatbrja

Amennyiben a numerikus vagy String tpus tesztkifejezs rtke megegyezik a felsorolt Case kifejezsek valamelyiknek rtkvel, akkor a vezrls Case sor utni utastsokra addik, majd azok vgrehajtst kvet en, az End Select utni programsorra kerl. Ellenkez esetben a Case Else sort kvet utastsok vgrehajtsa kvetkezik.

2. FEJEZET

A kifejezslistban a kifejezseket klnbz mdon adhatjuk meg:

Nzznk nhny pldt az elmondottak bemutatsra! Az albbi programrszben a vletlen osztlyzatot magyarul jelentjk meg.

A kvetkez pldban a megadott azonostrl az els karaktere alapjn eldntjk, hogy Visual Basic nv, vagy szm:

A VISUAL BASIC NYELV

Vgezetl rjuk t a msodfok egyenlet megoldsban hasznlt If-es felttelt Select Case utastss!

Az Choose() fggvny Egyszer bb esetekben, amikor valamilyen rtket kell egy index fggvnyben kivlasztani, hatkonyabb megoldshoz jutunk a Choose() fggvny alkalmazsval:

A fggvny egy egsz tpus sorszmot, s varins tpus kifejezslistt vr a hvsa sorn. (Felhvjuk a figyelmet arra, hogy a lista els elemnek sorszma /.) Az albbi pldban a ht napjainak nevt vlasztjuk ki a Choose() fggvny segtsgvel:

A kvetkez pldban a decimlis szmnak megfelel hexadecimlis szmjegyet lltjuk el sztringknt:

2.5.2.3. A Goto s Gosub utastsok A Goto s a Gosub utastsokat manapsg csak ritkn hasznljuk. Azokat a mveleteket, amelyeket az eredeti Basic nyelvben csak segtsgkkel lehetett megvalstani, a Visual Basic j programstruktrkkal fedi le.

2. FEJEZET

A Goto utasts felttel nlkli vezrlstadst valst meg az utastsban szerepl cmkvel megjellt programsorra:
Goto cmke cmke:

(A cmkk megadsrl a 2.1. fejezetben szltunk.) A Visual Basic-ben mindig el lehet kerlni a Goto utasts hasznlatt. Akkor szp egy program felptse, ha nem tartalmaz Goto utastst, amely a programot ttekinthetetlenn teheti. Az el bbiekben elmondottak rvnyesek a Gosub utastsra is, annyi klnbsggel, hogy vissza lehet trni a Gosub utni utastsra a Return utasts megadsval:
Gosub cmke cmke: Return. Mindkt

utastssal csak az ket tartalmaz alprogramon bell

lehet ugrani". A Goto elfogadott alkalmazst jeleni, ha valamilyen felttel teljeslse esetn az alprogram vgre adjuk a vezrlst. Termszetesen ez a megolds is helyettesthet If-es szerkezettel, ami ltalban bonyolultabb programstruktrt eredmnyez:

A kvetkez pldban a szmtst csak akkor vgezzk el, ha a megadott szm pozitv:

A VISUAL BASIC NYEL

A Goto s a Gosub utastsoknak is ltezik tbbirny programelgazst tmogat vltozata:


On kifejezs GoTo cmkelista On kifejezs GoSub cmkelista

A numerikus kifejezs rtke (1..255) alapjn d l el, hogy a cmkelista melyik cmkjre addik t a vezrls. Termszetesen ezek az utastsok is csak kompatibilitsi megfontolsok miatt tallhatk meg a Visual Basic-ben. Az utastsok m kdst az albbi pldk szemlltetik. A parancsgomb minden lenyomsakor a 3, 23 s 123 szmok valamelyike jelenik meg a formon:

A kvetkez pldban az n rtkvel vezrelve, mindig ms-ms fggvny rtkt szmtjuk ki:

2. FEJEZET

2.5.3. Iterci Programozs sorn gyakran tallkozunk olyan feladattal, amikor egy tevkenysget egyms utn tbbszr kell vgrehajtani. Az ilyen ismtl d tevkenysgek programnyelven trtn megfogalmazsra hasznljuk a ciklusutastsokat. Az Visual Basic nyelv a ciklusok szervezst tbb ciklusutastssal is tmogatja. Ha el re (a ciklusba val belps el tt) ismerjk az ismtlsek szmt, akkor a For ...Next utasts hasznlata javasolt. Amennyiben a ciklust valamilyen felttel vezrli (vagyis az ismtlsek szma attl fgg, hogy mikor vlik a felttel igazz vagy hamiss), akkor a Do.. .Loop (While... Wend) utastst hasznljuk. A ciklusokat szoks a belpsi (illetve kilpsi) felttel ellen rzsnek helye alapjn is csoportostani. A Visual Basic ciklusok kzl a For.. .Next, a Do While.. .Loop, a Do Until...Loop s a While...Wend a ciklusmag vgrehajtsa el tt tesztel (elltesztel ciklus), mg a Do .. .Loop While, Do .. .Loop Until a ciklusmag lefutsa utn ellen rzi a felttelt (htultesztel ciklus). 2.5.3.1. A For...Next utasts A For...Next utastst akkor hasznljuk, ha valamilyen szmsorozat mentn vgezzk az ismtlseket. Az utastst egy n. numerikus (egsz vagy vals) ciklusvltoz vezrli, amely a megadott lpsekkel vgigmegy a kezd - s a vgrtk kztti intervallumon. Az ismtls lell, ha a ciklusvltoz tllp a vgrtken. Ha nem adjuk meg a lpskzt, akkor az 7 rtket hasznlja a ciklus.

2.14. bra A For...Next ciklus m kdse nvekv ciklusvltoz esetn

A V1SUAL BASIC NYELV

A For utasts els formja (az n. nvekv ciklus, amikor a lpskz csak akkor hajtja vgre a ciklusmag utastsait, ha a kezd rtk < vgrtk. A ciklusvltoz indulskor felveszi a kezd rtket, s minden lefuts utn nveli az rtkt a lpskzzel. A ciklus akkor fejezi be m kdst, ha a ciklusvltoz rtke tllpi a vgrtket (2.14.bra). (Ha lpskz 0, akkor vgtelen ciklust kapunk!) A For utasts msik formja (az n. cskken ciklus, amikor a lpskz < 0) csak akkor kezd el m kdni, ha teljesl a kezd rtk > vgrtk felttel. Az albbiakban mindkt megoldsra lthatunk pldt. A bal oldali ciklus 1-t l 10 kitev ig kirja 2 hatvnyait, mg a jobb oldali 10-t l l-ig fut:

A For...Next ciklus alkalmazsnak fontos terlete a tmbk kezelse. Az albbi pldban vletlen szmokkal tltnk fel egy ktdimenzis tmbt, majd megjelentjk a tmb tartalmt a formon. A megoldshoz ciklusban-ciklust (n. egymsba gyazott ciklusokat) hasznltunk.

Amennyiben az egymsba gyazott For utastsokat zr Next kulcsszavak kztt nem helyezkedik el ms utasts, akkor a kt ciklus vgt sszevonhatjuk egyetlen Next s a ciklusvltozk bellr l-kifel halad listjnak megadsval:

2. FEJEZET

A kvetkez pldban egy egsz vektor elemeit ciklusok felhasznlsval nvekv sorrendbe rendezzk. A 12 elem tmb pros index elemeit negatv, mg a pratlan index elemeit nem negatv vletlen szmokkal tljk fel.

Vannak esetek, amikor a ciklusvltoz rtkre a ciklusbl val kilps utn is szksgnk van. ltalban rossz gyakorlat, ha ciklusbl kiugorva (Exit For) felhasznljuk a ciklusvltoz aktulis rtkt. Ehelyett egy tovbbi vltoz bevezetsvel meg rizhetjk a szksges rtket. Az elmondottakat szemllteti a kt szm legnagyobb kzs osztjt, illetve legkisebb kzs tbbszrst megkeres programrszlet:

A VISUAL BASIC NYELV

2.5.3.2. A For Each...Next utasts A For Each...Next utasts lehet v teszi, hogy a tmbben vagy kollekciban trolt adatokat indexek hasznlata nlkl bejrjuk:

A ciklus csak Variant, vagy valamilyen objektum tpus (pldul Object) vltozval (elem) m kdik. Az albbi pldban megkeressk egy ktdimenzis tmb legnagyobb elemt (a kollekcikkal az objektumokat trgyal fejezetben foglalkozunk):

2.5.3.3. A Do... Loop utastsok Ha ciklusszervezs sorn nem ismerjk az ismtlsek szmt, akkor a feltteles ciklusutastsok egyikt kell hasznlnunk. Az esetek tbbsgben a programozsi feladat brmelyik feltteles ciklussal megoldhat. Ha azonban a megadott utastsokat legalbb egyszer vgre kell hajtani, akkor Do...Loop ciklus htultesztel vltozatnak hasznlata javasolt. Ellenkez esetben a Do...Loop elltesztel vltozatval, vagy a While.Wend ciklussal rjk el clunkat.

2. FEJEZET

A Do...Loop elnevezs valjban ngy klnbz ciklust jell. Mint emltettk ltezik ell-, illetve htultesztel vltozata:

Minkt vltozatban az Exit Do utastst segtsgvel kiugorhatunk a ciklusbl a Loop sor utni utastsra. A While s az Until kulcsszavak kztti klnbsg a felttel rtelUntil felttel mezsben keresend . Magyarul elg nehz egy szval kifejezni a klnbsget, hisz mindkt angol sz jelentse: mg, amg. Krlrva azonban az eltrs jl rzkelhet , vagyis a ciklus addig fut, amg a felttel igaz (belpsi felttel - belp, ha igaz). Amikor a felttel hamisra vlt, a ciklus befejezi m kdst. amg a felttel igaz nem lesz. Amikor a felttel igazra vlt, a ciklus befejezi m kdst (kilpsi felttel - kilp, ha igaz). Ha ugyanazt a feladatot oldjuk meg a While s az Until feltteles ciklus alkalmazsval, akkor a ktfle felttel egyms ellentettje (Not) lesz. A 2.15. s 2.16.brkon lthat a Do.. .Loop ciklus ell- s htultesztel vltozatainak folyamatbrja.

While felttel

2.75. bra A Do...Loop ciklus elltesztel vltozatnak folyamatbrja

2.76. bra A Do...Loop ciklus htultesztel vltozatnak folyamatbrja

A VISUAL BASIC NYELV

Az albbi programrszletekben 1-t l 20-ig sszegezzk az egsz szmokat:

Az albbi pldkban szintn 1-t l 20-ig sszegezzk az egsz szmokat, azonban most htultesztekl s ciklusok segtsgvel:

2.5.3.4. A While...Wend utasts A While.. .Wend utasts (2.17. bra) csak a rgebbi Basic verzikkal val kompatibilits fenntartsa rdekben maradt meg a Visual Basic-ben. Ritkn hasznljuk, hisz teljes egszben helyettesti a Do While.. .Loop ciklusutasts.
While felttel [utastsok] Wend

2.77. bra A While... Wend ciklus folyamatbrja

2. FEJEZET

A teljessg kedvrt ksztsk el a szmokat 1-t l 20-ig sszegz ciklusunk While .. .Wend vltozatt is!

2.5.4. A hibakezels utastsai


A Visual Basic lehet v teszi, hogy felkszljnk azokra az esetekre, amikor egy hiba, megszaktja a program futst. A programunkban elklntve kezelhetjk azokat az utastscsoportokat, amelyek vgrehajtsakor nem keletkezik hiba. De azt is megmondhatjuk, hogy mi trtnjen a klnbz hibk esetn (On Error utastsok). A Err.Raise() fggvnyt hibk ltalunk trtn kivltsra hasznlhatjuk. Mr az elejn fontos leszgeznnk, hogy a futs kzbeni hibafigyels hatkre az On Error utastst tartalmaz alprogramra (Sub/Function/Property) terjed. Az alprogrambl kilpve (Exit Sub/Function/Property), a figyels megszakad. Ennek alapjn a hibafigyelst tartalmaz alprogram ltalnos felptse (egyel re csak esemnykezel eljrsokat hasznlunk):

A VISUAL BASIC NYELV

Az On Error s a Resume egyarnt klnbz lehet sgeket biztost szmunkra.


On Error GoTo cmke On Error Resume Next On Error GoTo 0

Futs kzbeni hiba esetn a megadott cmke utni sorra addik a vezrls. El rja, hogy hiba esetn kzvetlenl a hibt okoz utasts utn ll utastssal folytatdjon a program futsa. Minden hibafigyelst letilt az alprogramban.

Hiba fellpse esetn a Resume utastssal intzkedhetnk a teend kr l:


Resume [0]

Amennyiben a hiba a hibakezel t tartalmaz alprogramban lpett fel, akkor a vezrls a hibt okoz utastsra kerl. Ha azonban a hiba egy hvott eljrsban keletkezett, akkor a program futsa az eljrst utoljra hv utastssal folytatdik. Resume Next Amennyiben a hiba a hibakezel t tartalmaz alprogramban lpett fel, akkor a vezrls a hibt okoz utasts utni utastsra kerl. Ha azonban a hiba egy hvott eljrsban keletkezett, akkor a program futsa az eljrst utoljra hv utasts utni utastssal folytatdik. (Hatsa, mint az On Error Resume Next utasts.) A program futsa a Resume cmke megadott cmkvel megjellt utastssal folytatdik.

A hibk feldertsben segtsgnkre lehet az Err objektum, melynek tulajdonsgai informcit hordoznak az aktulis hibrl:
Err.Description Err.Number Err.Source Err.HelpFile Err.HelpContext

A hiba angol nyelv lersa. A hiba kdja A hiba forrsa - az alkalmazs vagy az objektum neve, amelyben a hiba keletkezett. A hibt ler sgfjl A hibt ler sgfejezet

A Err.Clear() metdus segtsgve trlhetjk az Err objektum tulajdonsgait. Az Err.Raise() hvssal pedig kivlthatjuk a tulajdonsgokban belltott hibt:

Amennyiben sajt hibt kvnunk definilni, a hibakdot a vbObjectError + sajtkd formban kell megadnunk.

2. FEJEZET

Nzznk meg nhny tovbbi hibakezelssel kapcsolatos lehet sget! A tpusoknl emltettk, hogy a Variant tpus rtke Error is lehet. Ezt az rtket - sorszmmal kiegsztve - mi is ltrehozhatjuk a CVErr() fggvny segtsgvel:
Dim hiba hiba = CVErr(2 003)

A fejleszt rendszerben a Debug objektumot hasznlhatjuk futs kzbeni inform cik megjelentsre. A Debug.Print() metdusval a Debug ablakban jelenthe tnk meg informcikat, mg a Debug.Assert() metdus 0 rtk argumentummal val hvsakor a program futsa a Debug.Assert utastson megszakad (mint a Stop). A Debug utastsokat egyszer en eltvolthatjuk a programbl, ha hasznljuk a feltteles fordts direktvit: #Const, #If...Then...Else. Az albbi pldban a nyomkvets konstans 1 rtke esetn a Debug.Print utasts is vgrehajtdik, azonban mg ms rtk belltsa esetn kimarad a programbl.
#Const nyomkvets = 1 Private Sub Commandl_Click() Dim a As Integer a = CInt(Rnd() * 2003) #If nyomkvets = 1 Then Debug.Print a #End If a = a + 1 End Sub

Az albbi tblzatban sszefoglaltunk nhny hibakdot, azonban sokkal tbbet kpes a hibafigyel rendszer elkapni". (Az els 1000 hibakd a Visual Basic rendszer.)
Hibakd 5 6 7 9 10 11 13 14 16 17 18 28 51 52 53 Hibalers Invalid procedure call Overflow Out of memory Subscript out of range This array is fixed or temporarily locked Division by zero Type mismatch Out of string space Expression too complex Can't perform requested operation User interrupt occurred Out of stack space Internal error Bad file name or number File not found Hibakd 54 55 57 58 59 61 62 63 67 68 70 71 74 75 76 Hibalers Bad file mode File already open Device I/O error File already exists Bad record length Disk full Input pst end of file Bad record number Too many files Device unavailable Permission denied Disk not ready Can't rename with different drive Path/File access error Path not found

A VISUAL BASIC NYELV

2.6. Alprogramok ksztse s hasznlata


A programozs sorn gyakran tallkozunk olyan szitucival, amikor ugyanazt a tevkenysget a program klnbz pontjn kell elvgezni. Eddigi ismereteink alapjn a tevkenysghez tartoz programrszek ismtelt megrsval (msolsval) oldhatjuk meg a feladatot. A msols kvetkeztben azonban nagymret , ttekinthetetlen s nehezen mdosthat programhoz jutunk. Az igazi megoldst csak az alprogramok bevezetse nyjt. Az alprogram olyan nvvel elltott utastsblokk, amelyet valamilyen konkrt feladat elvgzsre ksztnk. Az alprogramot a program klnbz helyeir l a neve segtsgvel aktivizljuk (hvjuk). Az alprogram a hvs hatsra vgrehajtja a benne rgztett feladatot, majd visszaadja a vezrlst a hv programrsznek. A hvs hatsra a vezrls a hvott alprogramhoz kerl, s mindaddig ott is marad, amg az alprogram be nem fejezi m kdst. Ezt kvet en a vezrls visszakerl a hv alprogramhoz, az eljrshvst kvet utastsra. A fent lert m kdst jl szemllteti a 2.18. bra.

2.18. bra Az alprogramhvs menete

Az albbiakban sszefoglaljuk az alprogramok hasznlatnak el nyeit: Az alprogramban megvalstott m velet ismtelt elvgzshez elegend az alprogramot jra meghvni. A tevkenysget ler programrsz csak egy pldnyban szerepel a programban, gy a programunk olvashatbb s ttekinthet bb lesz. Ugyancsak egyszer v s biztonsgoss vlik a programrsz mdostsa s javtsa, hiszen csak egyetlen helyen kell azt elvgezni.

2. FEJEZET

Az alprogram a strukturlt programozsi nyelvek egyik legfontosabb szer kezeti eleme. Az alprogramok s a fellr l-lefel" (top/down) programter vezsi mdszer segtsgvel bonyolultabb feladatok is egyszer en kezelhe t k, s jl programozhatok. Az alprogramokkal a monolitikus (egyetlen blokkbl ll, sok utastst tar talmaz) programszerkezet helyett modulrisan pthetjk fel programun kat. A program pt elemei ebben az esetben az alprogramok, gy ezt a mdszert m velet-orientltnak is szoks nevezni. Ha van egy alprogramunk, akkor ltalban nem azt krdezzk, hogy hogyan m kdik, hanem azt hogy mire hasznlhat. Minden alprogram rendelkezik egy sajt bels (loklis) vilggal, s egy jl definilt kapcsoldsi felletet (interfszt) mu tat a klvilg fel. A modulris programpts sorn az sem jelent probl mt, ha a klnbz alprogramokat ms s ms programoz kszti. A fel hasznlshoz elegend az interfszek ismerete.

Az Visual Basic nyelven az alprogramokat eljrsok (Sub), fggvnyek (Function) s tulajdonsgok (Property Set/Get) formjban llthatjuk el . Ebben a fejezetben csak az els kt megoldssal foglalkozunk, azonban az ismertek tbbsgt minden tovbbi nlkl alkalmazhatjuk a tulajdonsgok esetn is. Az alprogramokra a nevkkel hivatkozunk. Eljrsnak hvjuk az olyan alprogramokat, amelyek esetn a nv csupn azonostja azt a programrszt, amelyikre a vezrls kerl. A fggvnyek nevkkel - mintha vltozk lennnek - rtket is szolgltatnak, amelyeket kifejezsekben hasznlhatunk. Az alprogramok s a hv program kztti kapcsolatot az gynevezett paramterek szolgltatjk. A paramterek szmt s tpust az alprogram definilja, azonban a hv program hasznlja adatcserre. (A paramterek olyan bels vltozi az alprogramnak, amelyek kvlr l, a hvs sorn kapnak rtket.) A nyelv beptett eljrsainak s fggvnyeinek egy rszvel mr tallkoztunk, pldul a kirst aprint() eljrs (metdus) segtsgvel vgeztk, s szmok ngyzetgyknek kiszmtsra az sqr() fggvnyt hasznltuk. Ahhoz, hogy klnbz rtkeket tudjunk megjelentetni a kperny n, illetve hogy klnbz szmok gykt szmtsuk, a print() s az sqr() alprogramok hvsakor argumentumokat (hvsi paramtereket) kellett megadnunk:
Print "2 ngyzetgyke: "; Print Sqr(2)

Termszetesen vannak paramter nlkli alprogramok is, amelyek mindig ugyanazt i tevkenysget vgzik. Ilyen pldul az aktulis id pontot ad Now() fggvny:
Print now()

A VISUAL BASIC NYELV

A kvetkez kben megismerkednk az n. felhasznl ltal definilt eljrsok s fggvnyek ksztsvel s hasznlatval. Kln rszben tisztzzuk a paramterek tadsval kapcsolatos krdseket.

2.19. bra A Visual Basic programmodul felptse

2.6.1. Az alprogramok szerkezete s helye a Visual Basic programban A Visual Basic nyelvvel val ismerkedsnk legelejn tisztztuk, hogy minden azonostt a felhasznls helye el tt deklarlni kell. Ez a szably valamelyest mdosul az eljrsok s a fggvnyek neve esetn. A Visual Basic ugyanis nem rendelkezik kln alprogram-deklarcis lehet sggel - ezt a feladatot maga a fejleszt rendszer vgzi el. Amikor berunk egy programsort, azonnal bels kdra fordtja, mindenfle informcis tblzatokat ptve. Ezeket hasznlva aztn segt neknk, amikor egy alprogramot hvunk, objektumot vagy felhasznli tpus vltozt deklarlunk, hasznlunk. Ez az oka annak, hogy az eljrsokat s a fggvnyeket tetsz leges sorrendben elhelyezhetjk a programmodulokban. (2.19. bra).

2. FEJEZET

Az albbi pldban sszegeznk kt, a felhasznl ltal megadott szmot, majd kirjuk az eredmnyt. Minden rszfeladatot kln alprogrammal oldottunk meg. Az esemnykezel eljrs gyakorlatilag csak az alprogramok hvst tartalmazza:

A Visual Basic programmodulon bell minden alprogram azonos (modul) szinten helyezkedik el (2.20. bra). Az alprogramok el tt tallhat a modul deklarcis rsze {GenerliDeclarations), ahova a modulszint deklarcikat helyezzk. Az alprogramokon bell a (loklis) deklarcikat s a vgrehajthat utastsokat tetsz leges sor-! rendben megadhatjuk.

2.6.1.1. Az alprogramok elhet sge (hatkre)


A fggvnyek s az eljrsok elrhet sgt is szablyozhatjuk a Sub/Function kulcsszavak el tt elhelyezett Public/Private szavakkal. Alaphelyzetben az alprogramok Public, teht projectszint elrhet sggel rendelkeznek. Az elrhet sget a Private deklarcival a modulra korltozhatjuk. A Static szt hasznlva, az alprogram minden vltozjt statikuss tehetjk.

A VISUAL BASIC NYELV

2.20. bra A programmodul szerkezete A fggvnyeket s eljrsokat akkor rhetjk el pusztn a nevk megadsval, ha azonos modulban szerepelnek a hvst tartalmaz alprogrammal, vagy Basic modulban nyilvnos elrssel deklarltuk. Form- s osztlymodulokban elhelyezked Public alprogramok ms modulbl val hvsakor az alprogram nevt a modul nevvel min steni kell:

2.6.1.1. Kilps az alprogrambl Az eljrsok (Sub...End Sub) s a fggvnyek (Function ...End Function) trzse tartalmazza azokat a Visual Basic utastsokat, amelyek az alprogram hvsakor vgrehajtdnak. Ha mskppen nem intzkednk, az alprogramok akkor fejezik be m kdsket, amikor az utols utasts is vgrehajtdott. Vannak azonban olyan esetek, amikor - bizonyos felttelek teljeslse esetn - korbban ki kell lpnnk az alprogrambl. Ekkor kt lehet sg kzl vlaszthatunk. Az els esetben a Goto utastssal a vezrlst az alprogram vgre irnythatjuk. Egyszer bb s ttekinthet bb lehet sget knlnak azonban az Exit Sub s az Exit Function utastsok, melyek elrsvel a vezrls azonnal visszakerl a hv alprogramhoz. 2.6.2. Fggvnyek s eljrsok A Visual Basic nyelvben alprogramokat eljrsknt (Sub) s fggvnyknt (Function) egyarnt kszthetnk. A ktfle alprogram kztt nincs lnyegi klnbsg, az alkalmazsuk mdja hatrozza meg, hogy melyiket vlasztjuk.

2. FEJEZET

2.6.2.1. Eljrsok A Visual Basic nyelvben eljrsnak (Sub) hvjuk azokat a nvvel elltott programrszeket, amelyek egy-egy jl krlhatrolhat feladat (rszfeladat) megoldsra kszlnek. Az eljrsok felptsnek ltalnos alakja:

Az eljrs fejlcben a Sub foglalt sz utn meg kell adni az alprogram azonostjt (nevt), amit a paramterek deklarcija kvet (amennyiben van paramtere az eljrsnak). Az eljrsnv kpzsre a vltoznevekre vonatkoz szablyok rvnyesek. Az eljrst az eljrsnv segtsgvel aktivizljuk (hvjuk). Az eljrshvs nll Visual Basic utasts, melynek ltalnos formi:

vagy

Pldaknt tekintsk a Uzenet() szvegmegjelent eljrst:

2.6.2.2. Fggvnyek A programozsi gyakorlatban gyakran el fordul, hogy bizonyos feladatok (szmtsok) elvgzsnek egyetlen rtk az eredmnye, amit ltalban kifejezsekben kvnunk felhasznlni. Az ilyen feladatok eljrsok segtsgvel mindig megoldhatk, hiszen az rtket referencia-paramterben visszaadhatjuk a hv program valamely vltozjnak. A visszaadott vltoz mr szerepelhet tovbbi szmtsokban s sszehasonltsokban. A Visual Basic nyelv rendelkezik olyan eszkzzel, amely lehet v teszi, hogy az egyetlen rtket visszaad alprogramokat a matematikban megszokott mdon fggvnyknt hvjuk. A visszaadott rtkr l magban az alprogramban kell gondoskodnunk, a fggvny nevt, mint vltozt hasznlva az rtkad utasts bal oldaln.

A VISUAL BASIC NYELV

Ezek utn nzzk meg a fggvnyek ltalnos felptst!

Ha nem adjuk meg a fggvny tpust, akkor az alaprtelmezett Variant tpus rvnyesl. A fggvnyhvst ltalban kifejezsekben szerepeltetjk:

Pldaknt tekintsk szgek cotangensnek meghatrozsra a ctg() fggvnyt, jl lthatk a fggvnyhasznlat el nyei (nem tr dtnk azzal, hogy a fggvny rtelmezsi tartomnya nem tartalmazza az sszes vals szmot):

Fggvnyek eljrsszer hvsa A fggvnyek egy rszben a fggvnyrtk csak kiegszt informcikat hordoz az elvgezett tevkenysg sikeressgr l. Amennyiben nincs szksgnk erre az informcira, a fggvnyeket eljrsknt is hvhatjuk. Ekkor a fel nem dolgozott fggvnyrtk elvsz. A ctg() fggvnynket is hvhatjuk ily mdon (persze ennek semmi rtelme) :

2.6.2.3. A fggvnyek s az eljrsok sszehasonltsa A fggvnyek sok mindenben (pldul a paramterezs, a loklis deklarcik hasznlata stb.) hasonltanak az eljrsokra, azonban hrom lnyeges dologban klnbznek is t lk: 1. Minden fggvny a nevvel rtket ad vissza. A fggvnyrtk tpust (a fggvny tpust) a fggvny fejlcben kell rgztetni. A Visual Basic az egsz, vals, karaktersorozat, dtum, dinamikus tmb, osztly-referencia, varins s felhasznli tpus fggvnyek ksztst tmogatja.

2. FEJEZET

2. 3.

Az eljrshvsok nll utastsai a Visual Basic nyelvnek. Ezzel szemben a fggvnyhvs csak kifejezsben szerepelhet. A fggvnyrtk visszaadsrl magunknak kell gondoskodni. A fggvnyb l val kilps el tt a fggvny nevt (mint kznsges vltozt) az rtkads bal oldaln hasznlva definilhatjuk a visszatrsi rtket.

2.6.2.4. Rekurzv alprogramok A matematikban lehet sg van bizonyos adatok s m veletek rekurzv definilsra. A rekurzv algoritmusokban a soron kvetkez lpshez az el z lpsek elvgzsekor kapott eredmnyeket hasznljuk fel. A programozsi nyelvekben a rekurzirl akkor beszlnk, amikor egy alprogram sajt magt hvja (nrekurzi), vagy ha kt (vagy j tbb) alprogram felvltva hvja egymst (klcsns rekurzi). A rekurzv problmk rekurzv alprogrammal viszonylag egyszer en megoldhatk azonban ez a megolds ltalban id - s memriaignyes. Minden rekurzv problmnak ltezik iteratv megoldsa, amely ltalban nehezebben programozhat, de tbb szempontbl hatkonyabb a rekurzv megoldsnl. A rekurzv algoritmus ltalban rvidebb s ttekinthet bb, mint az iteratv (ciklusos) megolds. Ez a megllapts azonban csak a programrsra rvnyes. A program fut. sa sorn az alprogram minden jabb hvsakor jabb memria-terlet kerl lefoglalsra a veremben a paramterek s a loklis vltozk szmra, ami a memria elfogyshoz vezethet. Az ismtl d hvsok msik kellemetlen kvetkezmnye a szmtsi id jelent s nvekedse. A rekurzv alprogramok ksztskor mindig mrlegelni kell a megolds memria- s id ignyt. Ha egy feladat rekurzv megoldsnak ltezik egy viszonylag jl programozhat iteratv prja, akkor mindig az utbbi hasznlata javasolt. A rekurzv m kds jl tanulmnyozhat a faktorilis szmts algoritmusn, melynek nem rekurzv defincija: n!=l-2-3-...-(n-l)-n. El szr ez alapjn ksztsk el a faktorilist szmt fggvnyt!

A Currency tpus alkalmazsval is legfeljebb 17! rtkt tudjuk kiszmolni.

A VISUAL BASIC NYELV

A faktorilis rekurzv defincija:

A rekurzv definci felhasznlsval 4! kiszmtsnak lpsei:

A fenti szmtsi menetet megvalst Visual Basic fggvny:

A fenti pldban az n=0 felttel a rekurzi befejezsnek felttele. Ekkor az utoljra hvott fggvnypldny 1 rtket ad vissza. Ezt kvet en a hvsi lnc tagjai sorban visszatrnek a megfelel rszeredmnnyel. Utoljra a lnc els eleme, az ltalunk hvott fggvny fejezi be m kdst, megadva a kvnt faktorilis-rtket. 2.6.3. Vltozk az alprogramokban A programoknak, mint lttuk, vannak vltozi, s az alprogramokban is deklarlhatunk vltozkat. Miel tt egy Visual Basic programelemet (konstanst, vltozt, alprogramot, tpust stb.) felhasznlnnk, kt krdsre kell vlaszt keresnnk: Mikor jn ltre, s mikor sz nik meg a programelem? A program mely rszeib l rhet el (lthat") a programelem azonostja? Az els krdsre a vlaszt a vltozk lettartama, mg a msodikra az azonostk rvnyessgi tartomnya (hatkre) adja. 2.6.3.1. Loklis deklarcik Az alprogramokon bell helyi (loklis) konstansokat s vltozkat deklarlhatunk, melyek kvlr l (ms alprogrambl) nem rhet k el. A Dim utastssal deklarlt loklis vltozk, a paramterekhez hasonlan csak az alprogram hvsakor jnnek ltre, s megsz nnek, ha kilpnk az alprogrambl.

2. FEJEZET

A programozsi nyelvek a loklis vltozkat egy specilisan kezelt adatterleten, a veremben (stack) troljk. Ezzel szemben a modul szintjn ltrehozott vltozk a program adatterletn helyezkednek el, s statikus lettartamak. A statikus lettartam vltozk a program indtsakor jnnek ltre, s csak a programbl val kilpskor semmislnek meg. A Visual Basic-ben olyan loklis (statikus) vltozkat is ltrehozhatunk, melyek a hvsok kztt is meg rzik az rtkket. Az ilyen tulajdonsg vltozkat a Static utastsban kell deklarlnunk. Ha a Static kulcsszt az alprogram el tt szerepeltetjk, akkor minden loklis vltoz statikus lettartam lesz. A statikus vltozk 0 ("", Empty) kezd rtket kapnak a program indtsakor. A statikus vltozk globlis lettartammal rendelkeznek, vagyis a program futsa alatt vgig lteznek. Az albbi eljrs minden hvskor 2 jabb egsz kitev j hatvnyt jelenti meg:

Felhvjuk a figyelmet arra, hogy az kitev s a hatvny vltozk a 0 rtket egyetlenegyszer, a program indtsakor veszik fel. Az eljrsba val belpskor a deklarci nem vltoztatja el z leg felvett rtkket. 2.6.3.2. Modulszint deklarcik A modul szinten deklarlt azonostk globlis lettartammal rendelkeznek, vagyis a program futsa alatt vgig lteznek. Az azonostk hatkre azonban mr fgg a deklarci mdjtl. A Private nevek csak a modulban rhet k el, mg a Public azonostk a projekt minden moduljbl felhasznlhatk. Az alprogramokkal val adatcsere egyik lehetsges eszkze a Private vltozk hasznlata, amennyiben nem deklarljuk ezeket a neveket az alprogramon bell. Az el z KettoHatvnyO eljrshoz ksztsnk egy inicializl eljrst, amely jraindtja a hatvnyok kirst! A megoldshoz Basic modult hasznlunk:

A VISUAL BASIC NYELV

2.6.3.3. A vltoznevek rvnyessgi tartomnya (hatkre) Az azonostk rvnyessgi tartomnya a Visual Basic program azon rszeit jelli, ahonnan elrhetjk az azonostval jellt programelemet. Ahhoz, hogy a programon bell helyesen hasznljuk az azonostinkat, az albbi szablyokat kell szem el tt tartanunk: 1. Minden azonostt a felhasznls helye el tt deklarlni kell. (Kivtelt kpez nek az alprogramok.) 2. Az alprogramon bell deklarlt azonostk hatkre a deklarcit tartalmaz alprogramot jelenti. A modul szintjn deklarlt programelemek hatkre a Public s a Private kulcsszavak hasznlattl fgg. A Private deklarcival ltrehozott azonostk hatkre a deklarcit tartalmaz modulra terjed ki, mg a Public azonostk rvnyessgi tartomnya a teljes projekt. 3. Egy programegysgen bell minden elemet egyedi azonostval (nvvel) kell elltnunk. A modulszint neveket az alprogramok ugyanolyan nev azonosti elfedik (elrhetetlenn teszik), azonban a Public azonostk a modulnvvel min stve elrhet k maradnak. 4. Ugyanazzal a nvvel klnbz programegysgekben klnbz elemeket deklarlhatunk. 5. Ha a sajt kszts alprogram neve megegyezik valamelyik Visual Basic alprogram nevvel, akkor a Visual Basic eljrs vagy fggvny elrhetetlenn vlik abbl a modulbl, amelyik a sajt alprogram defincijt tartalmazza. Megjegyezzk, hogy a foglalt szavakkal definilt alprogramok (pldul UBound()) nevt nem hasznlhatjuk sajt clra. 2.6.4. Az alprogramok paramterei A hv alprogram s az hvott alprogram kztt adatokat is kzvetthetnk, a paramterek segtsgvel. A paramtereket az alprogram fejlcben a nv utn, kerek zrjelek kztt kell deklarlnunk. A paramterek lehet v teszik, hogy ugyanazt a programrszt kicsit mskppen, ms adatokkal hasznljuk. A paramterek az alprogramok olyan helyi vltozi, amelyek a hvs sorn kvlr l kapnak rtket. Kszthetnk olyan alprogramokat is, amelyeknek nincsenek paramterei. A paramter nlkli alprogramok ltalban mindig ugyanazt a m veletet vgzik. Pldul, az albbi eljrs minden hvskor ugyanazt a szveget jelenti meg:

2. FEJEZET

Az alprogramok hasznlatban rejl el nyk teljes kiaknzshoz szksgnk van a paramterekre. A paramterek egy rsze bemen paramterknt, csak egyirny informcitadst tesz lehet a hv s a hvott kztt - ezek az rtk szerint tadott paramterek (ByVal). A paramterek msik csoportja tmogatja a ktirny informcicsert - ezek a referencia szerint tadott paramterek (ByRef). Ha a alprogram paramtersorban nem adjuk meg az tads mdjt jell kulcsszavakat, akkor a referencia szerinti tadst alkalmazza a Visual Basic. (A ks bbi Visual Basic.NET rendszerben a ByVal az alaprtelmezett tadsi md.) 2.6.4.1. rtkparamterek - az rtk szerinti paramtertads Az alprogramok fejlcben szerepl paramtereket meghatrozzk, hogy az alprogram hvsakor hny s milyen tpus adatot (hvsi paramtert, argumentumot) kell megadnunk. Az alprogramok trzsben a paramterekre, mint helyi (loklis) vltozkra hivatkozhatunk. A paramterek deklarcijt a vltozdeklarcihoz hasonlan kell megadni: a paramternevet az As szval elvlasztva kveti a tpus. rtkparamter esetn a nv el tt a ByVal foglalt szt kell szerepeltetnk:

Ha tbb paramtert hasznlunk, akkor az egyes paramter-lersok kz vessz t kell tennnk:

Visual Basic-ben a tmb s a felhasznli tpus paramtereket csak referencival adhatjuk t alprogramnak. A fenti eljrsok fejlceiben megadott paramterek mindegyike rtkparamter. Az rtkparamter csak egyirny adatcsert tesz lehet v a hv alprogram s a hvott eljrs kztt. Eljrshvskor minden egyes argumentum rtke a paramterlista azonos helyn ll paramterbe msoldik. Az eljrson bell az tadott rtkeket a paramteren keresztl rhetjk el, s hasznlhatjuk fel.

A VISUAL BASIC NYELV

A Visual Basic az eljrs hvsakor ellen rzi, hogy az argumentumok s a paramterek szma megegyezik-e, s a tpusok talakthatk-e. Ha a paramterek szma klnbz , vagy ha a kt tpus nem rtkads-kompatibilis (ami enyhbb a tpusazonossg felttelnl), akkor hibajelzst kapunk. A szablyokat figyelembe vve az Megjelenti) eljrst klnbz argumentumokkal (konstanssal, vltozval, kifejezssel) hvhatjuk:

Vizsgljuk meg, mi is trtnik a memriban a paramtertads sorn! rtkparamter hasznlata esetn az adattrol terleten ltrejn a paramterlistban megadott tpus s nev loklis vltoz, amelybe tmsoldik az argumentum rtke. Ezrt nevezzk ezt a m kdst rtk szerinti paramtertadsnak. Ha az argumentum egy vltoz, akkor az alprogram hvsa utn kt megegyez rtk , de egymstl fggetlen vltoz van jelen a memriban. A fent vzolt m kdsnek van azonban egy mellkhatsa", amely a mdszer javra rhat. Mivel az alprogramon bell az argumentumknt megadott vltoz msolatval dolgozunk, a bels " vltoztatsok nincsenek hatssal a kls " vltoz rtkre. 2.6.4.2. Referencia-paramterek, a referencia szerinti paramtertads A programozs sorn gyakran tallkozhatunk olyan feladatokkal, amikor egy alprogram a paramterein vgez m veleteket (pldul cskkenti, nveli vagy felcserli azokat). Ekkor a bemen (egyirny) rtkparamterek hasznlatval nem rjk el a clunkat, hiszen az ilyen paramtereken elvgzett m veletek hatsa csak az alprogramon bell rzkelhet . Megoldst az n. referencia-paramterek bevezetse jelenti. A referencia-paramter ktirny adatcsert biztost a hv alprogram s a hvott alprogram kztt. Az alprogramok paramterlistjn brmelyik rtkparamtert referencia-paramterr alakthatjuk, ha a paramter neve el a ByRef foglalt szt tesszk, illetve ha nem tesznk semmit. Pldul az albbi beolvas() eljrs vals szmot kr be a felhasznltl:

2. FEJEZET

Hvskor a beolvasott szmot az argumentumknt megadott (adat) vltozban kapjuk:

A referencia-paramtert gy lehet elkpzelni, hogy az alprogram hvsakor maga az argumentumknt megadott vltoz (nem pedig annak rtke) addik t az alprogramnak. Az alprogram hvsakor a referencia-paramternek megfelel argumentumban ltalban vltozt adunk meg. Amennyiben konstanst, vagy kifejezst hasznlunk, a Visual Basic ltrehoz egy munkavltozt, s belemsolja a megadott rtket, majd tadja a vltozt az alprogramnak:

Nagyon fontos megkts, hogy a megadott vltoz tpusnak meg kell egyeznie, a kifejezs tpusnak pedig kompatibilisnek kell lennie a paramter-lersban hasznlt tpussal. Pldaknt rjunk egy eljrst, amely felcserli kt egsz vltoz rtkt:

A VISUAL BASIC NYELV

A referencia-paramter szmra a rendszer mindssze 4 bjtot foglal le a stacken, fggetlenl a paramter tpustl. Hvskor ebbe a 4 bjtba az argumentumknt megadott vltoz cme kerl. Innen szrmazik a refrencia/hivatkozs szerinti paramtertads" elnevezs. Amikor az alprogramon bell egy referencia-paramterre hivatkozunk, akkor a cm felhasznlsval az eredeti vltoz memria-terlett rjk el. Ez a megolds rendkvl gyors s a memriaignye is elhanyagolhat. Azonban mindig szem el tt kell tartani azt, hogy a referencia-paramter rtknek mdostsval a hvskor hasznlt vltoz rtkt is megvltoztatjuk. 2.6.4.3. A paramterek s a fggvnyrtkek tpusa Az alprogramok fejlcben referencia-paramterknt tetsz leges tpus paramtert definilhatunk. Az rtkparamterek esetn azonban nem hasznlhatjuk a tmb- s a felhasznli tpust.
Numerikus tpus

Taln a legegyszer bb megoldsok kz tartozik, amikor szmokkal, numerikus vltozkkal m veleteket vgz alprogramokat ksztnk. (Ide sorolhatjuk a dtum tpust is.) A fejezet pldinak tbbsge ebbe a kategriba tartozik, gy jabb eljrsok s fggvnyek ksztst l eltekintnk.
String tpus

A szvegfeldolgozshoz szorosan kt dnek a klnbz karaktersorozat-kezel alprogramok. Az el z fejezetekben lttuk, hogy a Visual Basic gazdag kszlett biztostja az ilyen eljrsoknak s fggvnyeknek. Az albbi pldban a megadott karaktersorozat karaktereit szkzkkel tagoljuk, mintegy szthzzuk a szveget:

2. FEJEZET

A feladatot megold SzethuzE() eljrs referenciaknt kapja meg a szveget, amellyel dolgozunk. A SzethuzF() fggvny azonban rtkknt jut a karaktersorozathoz, amelyet aztn feldolgoz, segd vltoz bevezetsvel. Felhasznli tpus Felhasznli tpus vltozt csak referencival adhatunk t alprogramak. Az albbi pldban komplex szmok sszeadst valstottuk meg. Mivel a Visual Basic tmogatja az azonos tpus struktrk kztti rtkads m velett, fggvnyknt is megoldottuk a feladatot:

Mivel a sajt alprogramokat s tpust is a formmodulban definiltuk, szksg volt a Private el rs hasznlatra.

A VISUAL BASIC NYELV

Tmbk

A Visual Basic knyelmes eszkzket biztost a tmbk alprogramokban trtn feldolgozsra. Az albbi fggvny kiszmtja a megadott (tetsz leges mret ) egydimenzis tmb elemeinek sszegt. A fggvnyt statikus, illetve dinamikus tmbbel egyarnt hvtuk.

Tbbdimenzis tmbk kezelse is hasonl egyszer sggel vgezhet . Az albbi eljrs a megadott ngyzetes mtrixok elemit nullzza, kivve a ftlt, ahova egyeket tesz:

2. FEJEZET

A Visual Basic 6 j lehet sge, hogy tmbt visszaad fggvnyeket is kszthetnk. Miel tt ezt megtennnk, ismerkedjnk meg az egyetlen tmbrtk Visual Basic fggvnnyel (Split()), amely egy szveget adott karakterek mentn sztdarabol!

Amennyiben csak a szveget adjuk meg, akkor alapbellts szerint a teljes sztringet szkzknl sztvgja, s kzben a Option Compare bellts alapjn hasonltja a karaktereket.

Az albbi pldban fggvnyrtkknt megkapjuk egy ngyzetes mtrix f tljnak elemeit:

A V1SUAL BASIC NYELV

2.6.4.4. Opcionlis argumentumok Az Optional kulcsszval az eljrsok s a fggvnyek paramtereit opcionliss tehetjk. Ha egy paramter opcionlis, akkor mindegyik utna kvetkez paramternek is opcionlisnak kell lennie. Az opcionlis paramtereket ajnlott kezd rtkkel elltnunk. Ellenkez esetben a Visual Basic a szoksos kezd rtket (0, "" stb.) adja szmukra. Kivtelt kpeznek a Variant tpus opcionlis paramterek, melyek hinyz" (Missing) jelz bitjnek rtke 1 lesz, ha nem kapnak rtket. Ezt a jelz bitet az IsMissing() fggvnnyel tesztelhetjk. Amennyiben az alprogram hvsakor az opcionlis paramtereknek nem adunk rtket, a rendszer automatikusan a megadott kezd rtket hasznlja. Nzznk nhny pldt az elmondottak altmasztsra!

A fenti Opcis eljrs minden paramtere opcionlis, gy jl tanulmnyozhatjuk az argumentumok s az opcionlis paramterek kapcsolatt:

A hromszg terlett meghatroz fggvnyben kln kezeljk a derkszg hromszgeket, hisz ebben az esetben a kt befogbl is meghatrozhat a terlet (Terulet(6, 8)). (ltalnos esetben a Heron-kpletet hasznljuk a szmtshoz - Terulet(6, 8, 10).)

2. FEJEZET

Vgezetl nzznk egy pldt az IsMissing() fggvny alkalmazsra!

2.6.4.5. Tetsz leges szm argumentum hasznlata A Visual Basic olyan alprogramok ksztst is megengedi, melyek hvsakor tetsz leges szm argumentumot megadhatunk. Ehhez egy varinstmb-paramtert kell definilnunk a ParamArray kulcsszt kvet en. Az albbi fggvnyt vltoz szm, egsz argumentum sszegzsre hasznlhatjuk:

A fggvny lehetsges hvsa:

Amennyiben ktelez paramtereket is meg kvnunk adni a paramterlistban, akkor azokat a ParamArray el kell helyeznnk:

(Fontos megjegyeznnk, hogy a ParamArray deklarci referencia szerinti tadst valst meg.)

A VISUAL BASIC NYELV

2.6.4.6. Nevestett argumentumok hasznlata A Visual Basic tbb beptett fggvny, utasts s metdus hvsakor tmogatja a nevestett argumentumok hasznlatt. A nevestett argumentumok segtsgvel az argumentumokat (nhnyat vagy mindegyiket) tetsz leges sorrendben megadhatjuk. A nevestett argumentumok alkalmazshoz ismernnk kell a paramterneveket, pldul az InputBox() fggvny esetn:

A paramternevek ismeretben nevestett argumentumokkal is hvhatjuk az InputBox() fggvnyt. Hvsakor az argumentumlistban a paramter neve utn legyen egyenl (:=) jellel elvlasztva adjuk meg az argumentum rtkt:

Termszetes sajt kszts alprogramok hvsakor is hasznlhatjuk a nevestett argumentumokat:

2.6.4.7. DLL-ben trolt alprogramok hvsa A Visual Basic alkalmazsunkat ms nyelveken ksztett, dinamikusan szerkeszthet knyvtrakban (DLL) trolt alprogramokkal is kiegszthetjk. Ezeket a kls eljrsokat s fggvnyeket a Declare utastsban, modulszinten kell deklarlnunk:

2. FEJEZET

ahol az arg.lista a mr megismert elemekb l pl fel:

Egyetlen eltrs az eddigiekhez kpest, hogy az As Any tpusmegadst is alkalmazhat-j juk a tpusellen rzs letiltsa rdekben. A Windows alkalmazs-programozi fellethez (API-hoz) kapcsold deklarcik el lltsban a Visual Basic rendszerrel teleptett ,API Text Viewer" program lehet segtsgnkre. Az alkalmazs ablakbl a kivlasztott deklarcikat a programunkba msolhatjuk, pldul:

(A deklarci a formmodulban csak Private elrssel, mg a Basic modulban tetsz leges elrssel megadhat.) A fggvnyt tbbflekppen is hvhatjuk:

Az AddressOf opertor alkalmazsa Az API-hvsok egy rsze valamilyen ltalunk megrt eljrs vagy fggvny mutatjt vrja argumentumknt. Ilyen esetekben az alprogram neve el tt az AddressOf opertorral jelezzk, hogy hvs helyett csupn a cmet kell tadni. (Csak Basic modulban nyilvnos elrssel definilt fggvny cmt adhatjuk t ms alprogramnak.) Az albbi pldban lekrdezzk, s listaablakba tltjk a Windows rendszer ltal hasznlt bet tpusokat. Basic modul tartalmazza az API-hvsokhoz szksges deklarcikat, illetve a sajt alprogramunkat. Az EnumFontFamilies() API-fggvnynek argumentumknt adjuk t az enumBetuTipus() fggvnynk cmt.

A VISUAL BASIC NYELV

' Az API-fggvnyek ltal hasznlt adatstruktrk Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfltalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName(LF_FACESIZE) As Byte
End Type

Type NEWTEXTMETRIC tmHeight As Long tmAscent As Long tmDescent As Long tmlnternalLeading As Long tmExternalLeading As Long tmAveCharWidth As Long tmMaxCharWidth As Long tmWeight As Long tmOverhang As Long tmDigitizedAspectX As Long tmDigitizedAspectY As Long tmFirstChar As Byte tmLastChar As Byte tmDefaultChar As Byte tmBreakChar As Byte tmltalic As Byte tmUnderlined As Byte tmStruckOut As Byte tmPitchAndFamily As Byte tmCharSet As Byte ntmFlags As Long ntmSizeEM As Long ntmCellHeight As Long ntmAveWidth As Long
End Type

' Az API-fggvny deklarcija Declare Function EnumFontFamilies Lib "gdi32" _ Alias "EnumFontFamiliesA" (ByVal hDC As Long, ByVal lpszFamily As String, _ ByVal lpEnumFontFamProc As Long, LParam As Any) As Long

2. FEJEZET

A formmodul esemnykezel eljrsbl hvjuk az EnumFontFamilies() fggvnyt:

2.6.4.8. A CallByNameO fggvny A CallByName() fggvny rugalmas lehet sget biztost a Visual Basic objektummodulok nyilvnos metdusainak hvsra, tulajdonsgainak lekrdezsre s belltsra:

A hvstpus meghatrozza, hogy milyen m veletet kvnunk elvgezni a fggvny segtsgvel:

(A Property Get/Let/Set alprogramokat a kvetkez alfejezetben ismertetjk.) Nzznk nhny pldt a jl ismert vezrl k felhasznlsval!

A VISUAL BASIC NYELV

A CallByName() fggvny paramtersorban a hvni kvnt alprogram nevt karaktersorozatban kell megadni, gy sokrt bb felhasznlsra ad lehet sget, mint a kzvetlen hvs. Az albbi pldban a formon tallhat sszes vezrl t {120, 230) vektorral elmozgatjuk:

2.6.5. zleti s pnzgyi szmtsok Az alprogramokkal foglalkoz fejezet vgn sszefoglaljuk az zleti s pnzgyi szmtsokat segt fggvnyeket. A zleti s pnzgyi fggvnyek egyik csoportjt az rtkcskkens-szmtsi mdszereken alapul fggvnyek kpezik. A SLN() fggvny az id arnyos lineris lersi mdszer szerint kiszmtott amortizcis sszeget adja vissza. Ehhez a fggvny hrom paramternek segtsgvel t kell adni az lleszkz brutt rtkt, a tervezett maradvnyrteket, illetve az amortizcis lettartamot. A DDB() fggvny segtsgvel az venknti amortizcis sszegeket az n. ktszeres maradvnycskkent lersi mdszer szerint llapthatjuk meg. Ez egy gyorstott rtkcskkensi eljrs, amely az eszkz kezd rtke (bruttrtk), maradvnyrtke s a tervezett lersi lettartama (az amortizcis id ) alapjn szmol. A csoport harmadik fggvnye, a SYD() az vek szmjegyeinek sszege" nven ismert mdszert hasznlja a lers sszegnek megllaptsra. Ez a gyorstott eljrson alapul fggvny ugyanazon paramterek megadst ignyli, mint a DDB() fggvny. A gazdasgi szmtsok azon tmakrt, amelybe a befektetsek, illetve tbb id szakon (v, hnap stb.) keresztl vrhat pnzramlsok (cash flow) jelen-, foly- s jv beli rtknek megllaptsa is tartozik, a Pmt(), a PPmt(), az IPmt(), a NPer(), a PV(), a FV() s a NPV() fggvnyek kpviselik. A Pmt() (Payment) fggvny segtsgvel a befektetsb l szrmaz, adott id szakon keresztl trtn pnzramls (klcsnk rtkelsnl a teljesen amortizlt kamatsszeg) mrtkt szmthatjuk ki. A fggvny paramtereiben a pnzramlsi id szakok szmnak megadsn kvl a befektets jelen- s jv beli rtkt, a diszkontlshoz hasznlt rtt (illetve kamatlbat), illetve a kifizetsek id szak eleji vagy id szak vgi voltt is jelezni kell.

2. FEJEZET

A PPmt() (Period Payment) s az IPmt() (Interest Payment) fggvnyek segtsgvel a Pmt() fggvny ltal visszaadott rtk t ke- s kamatsszetev re bonthat szt. A PPmt() az egy adott id szakban esedkes pnzramls t kersznek, az IPmt() fggvny pedig a pnzramls kamatrsznek szmtst vgzi. Mind a kt fggvny a befektets jelen- s jv beni (becslt) rtkb l, a diszkontlshoz hasznlt rtbl, a kamatfizetsek id szak eleji vagy id szak vgi folystsbl, illetve a figyelembe vett id szakok szmbl indul ki. A kiszmtott sszegek a sorszmmal megadott id szakra vonatkoznak. A NPer() (Number of Periods) fggvnyt a pnzramlsi id szakok szmnak meg-j alaptsra hasznlhatjuk, az ismert diszkontrta, a befektets jelen- s jv rtke, azj id szakonknt azonos pnzramlsok egysgsszege, illetve a pnzramls id szak eleji vagy vgi volta alapjn. A PV() (Present Value) fggvny segtsgvel kiszmthatjuk, mennyi a befektets jelenrtke, ha adva van a befektets vrhat jv beli rtke, illetve a befektets m kdsnek kvetkeztben megadott szm id szakon keresztl kapott, azonos bevteli sszegek nagysga. A fggvny egyik paramterben meg kell adni a diszkontrtt, egy msikban pedig azt, hogy a pnzramlsok az id szak elejn vagy a vgn trtnnek. Az FV() (Future Value) fggvny a mostani befektets vrhat jv beli rtkt adja vissza. A fggvny paramterei - egy kivtelvel - teljesen megegyeznek a PV(j fggvny paramtereivel (azaz milyen id szakon keresztl jvedelmez a befektets, mekkora az egy id szakra jut pnzramls mrtke, a kifizetsek az id szak elejn vagy vgn esedkesek, illetve milyen rtt hasznlunk a diszkontlshoz). Az egyetlen eltr paramter a befektets rtke, amely a FV() fggvny esetn a befektets bekerlsi (jelen-), a PV() fggvny esetn pedig a befektets becslt jv beni rtkt tartalmazza. A NPV() (Net Present Value) fggvny megadja a tbb ven keresztl vrhat, klnbz sszeg pnzramlsok (cash flow) jelenrtkt. A fggvny els paramtere a diszkontlshoz alkalmazott rta, a msodik paramter egy tmb, amelynek elemei az egyes id szakokra becslt sszegeket tartalmazzk. A fggvny utols paramtere azt jelzi, hogy a kifizetsek az id szak elejn vagy vgn trtnnek-e. A gazdasgossg-szmts egyik legfontosabb mozzanata a megtrlsi rta becslse, illetve a kamatlb-szmts, melyek elvgzshez az Rate() s az IRR() fggvnyeket hasznlhatjuk.

A V1SUAL BASIC NYELV

ARatef) {Internl Rate) fggvny segtsgvel a befektets bels rtjt szmolhatjuk ki, vagyis a befektets jvedelmez sgi id szakaira azonos mrtkben sztkent" rtamutatt. A rtamutatt a befektets jelen- s jv beli rtkb l, az id szakonknti id szak elejn vagy vgn folystand - azonos bevteli sszegek nagysgbl, illetve az id szakok szmbl vezethetjk le. Az IRR() {Internl Rate of Return) fggvny a befektets bels megtrlsi rtjt szmolja ki abban az esetben, ha a befektetsb l szrmaz bevtelek nagysga id szakfgg . Ebben az esetben a fggvnynek egy olyan tmbt kell tadni (a msodik paramterben), melynek elemei a befektetssel jr pnzramlsok rtkei, gy az els (0-dik) elemnek negatvnak kell lennie, jelezve azt, hogy a befektets bekerlsi gy pnzkiadssal jr - rtkr l van sz. A fggvny msodik paramtert a megtrlsi rta becslt rtknek megadsra hasznljuk. Abban az esetben, ha kt klnbz rtval szmolunk a kt irny pnzramls esetben, az IRR() fggvny helyett az MIRR() {Modified Internl Rate of Return) fggvnyt kell alkamaznunk.

2. FEJEZET

2.7. Objektumok a Visual Basic-ben


Miel tt hozzltnnk a Visual Basic rendszerben trtn alkalmazs-fejlesztshez, rdemes ttekinteni azokat a programnyelvi megoldsokat, amelyeket lpten-nyomon hasznlni fogunk. A Visual Basic alkalmazs teljes mrtkben olyan programegysgekre pl, amit objektumnak neveznk. Klasszikus megfogalmazs szerint az objektumok adatokat s az adatokon m veletek vgzsre hasznlhat programkdot tartalmaznak (sszepts, encapsulation). Az objektumpdnyok ltrehozsnl hasznlt adattpusokat osztlyoknak (class) nevezzk, mely osztlyok egymsbl szrmaztathatk (rkls, inheritance). A szrmaztatott osztlybl ksztett objektumok az st l eltr tulajdonsgokkal rendelkezhetnek, s mskpp is viselkedhetnek (polymorphism). Azokat a nyelveket, amelyek mindhrom megoldssal rendelkeznek objektum-orientlt nyelveknek hvjuk. Mivel a Visual Basic az rklst a sz hagyomnyos rtelmben nem tmogatja, objektum-alap nyelvknt szoks emlegetni. A Visual Basic-ben az objektumok programozott kialaktsnak eszkzei a klnbz specilis modulok, a formmodul (.FRM), az osztlymodul (.CLS) s a vezrl modul (.CTL). Sok olyan objektumot hasznlunk, amelyeket valamilyen minta alapjn fejlesztskorjnnek ltre (vezrl -objektumok). Az objektumok msik rsze az alkalmazs futsa sorn keletkezik (kdobjektumok).

AVISUALBASIC NYELV

2.7.1. Az objektumok felptse Az objektumok ltalban adatokat s programkdot tartalmaznak. Az adatok tbbsge nem rhet el kzvetlenl (Private) - az rtkadshoz s az rtk lekrdezshez specilis alprogramokat kell hasznlnunk. Az ilyen alprogramok neve az objektum tulajdonsgaknt (property) jelenik meg. Az objektumban definilt (Public) eljrsokat s fggvnyeket metdusoknak (methods) hvjuk. A Windows alatti programfejlesztssel sszhangban, a Visual Basic objektumok esemnyekkel (events) is rendelkezhetnek, melyek kezel jt az objektum felhasznljnak kell megrnia. Ezek alapjn az objektumok ltalnos felptse a 2.21 brn lthat. 2.7.2. Az el re elksztett objektumosztlyok pldnyai A vizulis programpts sorn a rendszer bizonyos "gyri" sszetev it (vezrl elemeket) a formmodul rlapjra helyezve ksztjk el a programunk felhasznli fellett. A form maga is egy objektum, amely ms objektumok trolsra kpes (kontner-objektum). Pldaknt tekintsk egy olyan alkalmazs formmoduljt, amely a parancsgomb megnyomsakor szveget jelent meg szvegmez ben! A fejleszts sorn az albbi tulajdonsgokat vltoztattuk meg:

A parancsgombon ktszer kattintva az egr bal gombjval a kdszerkeszt be jutunk, ahol megrhatjuk az egr alaprtelmezs szerinti esemnyhez (kattints, Click) tartoz esemnykezel eljrst. Az eljrs nevt a rendszer lltja el a vezrl elem s az esemny nevb l: Command1_Click. Az rlap szabad terletn kattintva ktszer az egrrel a Form_Load nev esemnykezel t rhatjuk meg. Az rlap, illetve az rlapra helyezett vezrl elemek esemnykezel eljrsait a formmodul tartalmazza:

2. FEJEZET

A programban az objektumokra a nevk felhasznlsval hivatkozhatunk (Commandl, Textl, Forrni stb). Az objektum tulajdonsgait s metdusait a pont (.),! illetve a with utasts segtsgvel rhetjk el. Az el z tblzatnak megfelel belltsokat a programbl is elvgezhetjk a Form_Load esemnykezel eljrsban:

Az utastsok ttekinthet bb vlnak a With utasts hasznlatval:

A form neve (Form]) helyett aMe (n) hivatkozst is hasznlhatjuk:

Mivel a formmodulon bell alaprtelmezs szerint minden hivatkozs az adott rlapra vonatkozik, a form nevt el is hagyhatjuk:

2.7.2.1. Formmsolatok ltrehozsa A Visual Basic lehet v teszi, hogy a mr ltez objektumpldnyok msolatait kpezzk. A fenti pldt gy mdostjuk, hogy a Ltrehoz gomb megnyomsakor az rlapunk jabb msolata jelenjen meg, melyet a Megszntet gombbal trlhetnk. Az j formobjektumra trtn hivatkozsokhoz egy globlis f2 vltozt definilunk:
Dim f2 As Form1

AVISUALBASIC NYELV

(A Visual Basic-ben az objektum neve valjban csak egy hivatkozst trol az objektumpldnyra - referencia-objektummodell.) A Ltrehoz parancsgomb esemnykezel eljrsban ltrehozzuk az j pldnyt, melynek referencijt az/2 vltozba tltjk. (Az objektumhivatkozsok trolsra a set alapszval kezd d rtkadsok szolglnak.) Az j ablakot az el z pldny mell helyezzk, majd betltjk s megjelentjk. (A Show() metdus a Load utasts nlkl is betlti az objektumot s megjelenti az ablakot. A Load utastst nmagban a form nem lthat mdon (httrben) trtn betltsre hasznlhatjuk.)

Ha a megnyomott gombbal azonos ablakban elhelyezked Megszntet parancsgombot hasznljuk, akkor az j ablak elt nik. Az objektumpldnyt az Unload utasts s a Nothing (semmi) rtk megadsval szntetjk meg:

Megjegyezzk, hogy az albbi kt utasts

egyetlen utastss is talakthat:

Az As New deklarciban a referencia s a hivatkozott objektumpldny is ltrejn.


2.7.2.2. Vezrlelemek tmbje

Vezrl tmbk ltrehozsval az rlapon elhelyezett vezrl objektumok tbbszrzsre is van lehet sg. Az el z pldnkat gy mdostjuk, hogy a Ltrehoz nyomgomb megnyomsakor ltrehozunk egy msik szvegmez t, amit a Trl gombbal meg is szntetnk. A megoldshoz a Textl objektumok egyelem vezrl tmbb kell

2. FEJEZET

alaktanunk az Index tulajdonsgnak val rtkadssal (0). Ekkor termszetesen a kirshoz hasznlt parancsgomb esemnykezel jt is mdostanunk kell:

Az l-es index (msodik) szvegmez ltrehozst, megjelentst, illetve trlst az albbi kt eljrs tartalmazza:

2.7.2.3. Objektumok gy jtemnye (kollekcija, collection) Mint ismeretes a tmbkben csak azonos tpus objektumokat trolhatunk. Bizonyos esetekben szksg lehet arra, hogy klnbz tpus objektumokat logikailag egytt kezeljnk. A megoldst a Collection tpus objektum adja, amellyel rendezett objektumhalmazokat hozhatunk ltre. A gy jtemnyhez j elemet az Add() metdussal adhatunk, mg egy adott index elemet a Remove() metdussal tvolthatunk el. Az Item() metdus az elemek elrsre szolgl. Az objektum-gy jtemny deklarcija:

A kollekciban ngy rgztett elemet helyeznk el, azonban az tdiket dinamikusan hozzuk ltre s szntetjk meg. A gy jtemny feltltse:

Az tdik elemet a ltrehozsa utn adjuk hozz a kollekcihoz:


Private Sub Command2_Click()

AVISUALBASIC NYELV

A kollekci elemei a megadott kulcs, illetve az index alapjn egyarnt elrhet k. Az elemek indexelse 1-t l indul, s az jabb elemek beillesztse sorn egyesvel nvekszik. Az Add() metdus megfelel nevestett paramtereinek hasznlatval a beilleszts helyt is megadhatjuk, pldul beszrs els elemknt: beilleszts a harmadik elem utn: A Trl gomb megnyomsakor a "Szvegl" kulcs ( 5.) elemet eltvoltjuk:

Kirskor minden TextBox tpus vezrl be szveget helyeznk:

Egy kollekciban trolt objektum tulajdonsgait s metdusait tbbflekppen is elrhetjk. A kollekci Item() metdust akkor hasznljuk, ha ismerjk az elem indext (pldul 4): Ha az objektumhoz szvegkulcsot (pldul SzvegO) is megadtunk a gy jtemnybe val bevitelkor, akkor az albbi hrom lehet sg kzl brmelyiket felhasznlhatjuk:

2. FEJEZET

Az albbi pldban a kollekci Item() metdust s Count tulajdonsgt hasznljuk a TextBox tpus elemek megtallshoz:

2.7.2.4. Rendszerobjektumok s -gy jtemnyek A Visual Basic rendszer egy sor objektumot s kollekcit pt fel a fut alkalmazs szmra. A objektumok egy rsze a Windows rendszer elemeinek elrst tmogatja (nyomtatk, vglap, kperny stb.), ms rsze pedig a (Visual Basic) alkalmazssal ll kapcsolatban. Az albbi tblzatban sszefoglaltuk az egyes objektumok ltal nyjtott lehet sgeket. App - alkalmazs-objektum Az alkalmazs adatait tartalmazza. Az alkalmazs fjlneve (EXEName), elrsi tvonala (Path), lerja (hlnstance), verziszma (Major, Minor) stb. ClipBoard - vglapobjektum Metdusokat tartalmaz a vglap kezelshez (Clear() - trls, GetDataf) adatlekrs, SetData() - adattvitel stb.) Debug - nyomkvet -objektum A Visual Basic fejleszt i krnyezetben futtatva a programot, futs idej informcikatjelenthetnk meg (a.Print() metdussal) egy munka-ablakban. Printer - az alaprtelmezs szerinti nyomtat objektuma A nyomtat objektumra trtn rajzols (Line(), Circle() stb.), szvegrs (Print()) esetn az eredmny papron jelenik meg. Screen - kperny objektum A teljes kperny adatait tartalmazza: mretek (Width, Height), bet tpusok szma (FontCount), a bet tpusnevek tmbje (Fonts), az aktv form (ActiveForm), az aktv vezrl elem (ActiveControl) stb. Form - rlapok gy jtemnye Az alkalmazshoz kapcsolt formobjektumok kollekcija.

AVISUALBASIC NYELV

Printers - nyomtatk gy jtemnye A Windows rendszerben fellelhet nyomtatk (objektumnak) kollekcija. Formx.Controls - vezrl elemek gy jtemnye A Formx rlapon tallhat vezrl objektumok kollekcija. A FormxActiveControl tulajdonsg azonostja azt az elemet, amelyik fogadja a felhasznli beavatkozsokat (azaz rendelkezik az input fkusszal). Az albbi pldban az alkalmazs indulsakor az alkalmazs ablakt a kperny kzepre igaztjuk, s az sszes bet tpus nevt egy listaablakba tltjk:

2.7.3. Objektumok ltrehozsa a program futsa sorn A Visual Basic programban hasznlt objektumok egy rsze - a regisztrlt ActiveX komponensek - a Windows rendszer adottsgainak megfelel en futs kzben is ltrehozhatk. Ugyancsak programbl frhetnk hozz a sajt magunk ltal ksztett osztlymodulokban (.CLS) trolt osztlyokhoz. 2.7.3.1. Windows alatt regisztrlt osztlyok elrse Az osztlyok elrshez a fejleszt i krnyezetben is el kell vgeznnk bizonyos belltsokat. A Project/References menpont kivlasztsakor megjelen prbeszdablakban ki kell jellnnk a Windows alatt regisztrlt hivatkozsok kzl azokat, amelyekre szksgnk van. (Ilyen hivatkozsokat tartalmaz pldul a Microsoft DAO 3.6 object Library llomny.) Ezt kvet en deklarlhatjuk az objetum-hivatkozs vltozt:

Az objektumpldny ltrehozshoz a New kulcsszt hasznljuk:

Az objektumpldny trlse is a megszokott mdon trtnik:

A fenti lpsekkel n. korai ktssel {early binding) hoztuk ltre az adattbladefincis objektumot. Ez a megolds ltalban gyorsabb programot eredmnyez, mint a kvetkez kben bemutatsra kerl , a ks i ktsre (late binding) pl megoldsok.

2. FEJEZET

Az objektumokat a CreateObject() fggvnnyel is ltrehozhatunk. Az albbi pldban hibafigyels mellett adattbla-definci objektumot hozunk ltre, s szntetnk meg:

Az objektumok sokkal vltozatosabb elrsre hasznlhatjuk a GetObject() fggvnyt. Az el z vel azonos eredmnyhez vezet az albbi programrszlet:
On Error Resume Next Dim Word As Object Set Word = GetObject("","Word.A pplication") If Err.Number > 0 Then MsgBox "Az objektum nem jtt ltre!" Err.Clear Else Set Word = Nothing End If

A GetObject() fggvny els paramterben objektumokat trol llomny (pldul egy Excel tbla, egy Word dokumentum) neve is megadhat. A msodik paramtert vagy elhagyjuk, vagy a fjlban tallhat objektumok kzl vlasztunk ki vele egyet. 2.7.3.2. Sajt osztlyok definilsa A Visual Basic 4 verzitl kezd d en sajt osztlyt is ltrehozhatunk a .CLS kiterjeszts osztlymodulban. Osztlymodult a projekthez a Project/Add Class Module menpont segtsgvel adhatunk, kt lehet sg kzl vlasztva. A Class Module ikonon kattintva az osztly resen jn ltre, melyet sajt magunk tlthetnk fel. A VB Class Builder vlaszts esetn elindul egy osztlykszt alkalmazs, amely hatkony segtsget nyjt az osztly el lltshoz. A Class Builder alkalmazs futtatsnak eredmnyeknt ltrejnnek az osztly legfontosabb elemei (megjegyzsekkel elltva), melyet aztn fel kell tltennk tartalommal. Az albbi pldban egy olyan (Plda) osztlyt definiltunk, amely egy tulajdonsggal, egy metdussal s egy esemnnyel rendelkezik.

AVISUALBASIC NYELV

2.22. bra A plda osztlya

Az osztlykszt ltal ltrehozott forrskd, az angol nyelv megjegyzsek trlse utn:


Private mvarTulajdonsg As Integer Public Event Esemny(paraml As Integer) Public Function Metdus(paraml As Long) As Double End Function Public Property Let Tulajdonsg(ByVal vData As Integer) mvarTulajdonsg = vData End Property Public Property Get Tulajdonsg() As Integer Tulajdonsg = mvarTulajdonsg End Property

Ebb l a kis pldbl is jl lthat, hogy a tulajdonsgok hasznlatnak clja, az osztly private adattagjnak ellen rztt elrse. A tulajdonsgnak trtn rtkadskor a Property Let (object tpus adat esetn a Property Set) eljrs hvdik meg. A tulajdonsg olvassakor pedig a Property Get fggvny aktivizldik. B vtsk a Metdus eljrst az esemnyt kivlt kddal!
Public Function Metdus(paraml As Long) As Double RaiseEvent Esemny(paraml / mvarTulajdonsg) End Function

2. FEJEZET

A Plda osztlyt hasznl formmodulban a WithEvents deklarcival jelezzk, hogy a ltrehozott objektumhoz esemny tartozik. (Az esemnyt kezel eljrs (sub) nevt Objektumnv_Esemnynv formban kell megadnunk.)
Dim WithEvents Objektum As Plda Private Sub Objektum_Esemny(a As Integer) Print a End Sub

Az rlap betltsekor ltrehozzuk az objektumpldnyt, s belltjuk az objektum tulajdonsgt:


Private Sub Form_Load() Set Objektum = New Plda Objektum.Tulaj donsg = 2003 End Sub

Az rlapobjektum trlsekor megsemmistjk az objektumot.


Private Sub Form_Unload(Cancel As Integer) Set Objektum = Nothing End Sub

A nyomgomb megnyomsakor meghvjuk az objektum metdust, amelyben kivltjuk az esemnyt:


Private Sub Commandl_Click() Objektum.Metdus (Rnd * 100000) End Sub

Az osztlyok Initialize esemnynek kezel jben megadhatjuk azt az utastssori amit kzvetlenl az objektum ltrehozsa utn hajt vgre a rendszer. A Terminate esemny kezel je pedig kzvetlenl az objektum megsemmistse el tt hvdik meg. Vgezetl nzznk egy egyszer szmolgp programot! A form csak a felhasznl felletet biztostja (2.23. bra), mg a m veleteket a SzmolOsztly osztly objektuma vgzi. A szamol.cls llomny tartalmazza az osztly defincijt. Az osztlyban egyarnt tallunk sajt adattagokat s metdust, esemnyeket valamint klnba elrhet sggel rendelkez tulajdonsgokat:

AVISUALBASIC NYELV Rem private adattagok Private mvara As Double, mvarb As Double Private mvarc As Double, mvarop As String Rem esemnyek deklarcija Public Event j eredmny(ByVal Eredmny As Double) Public Event Hiba(Hibakd As String) Rem A szmtst vgz eljrs Private Sub M velet() On Error Resume Next mvarc = 0 Select Case mvarop Case "+" mvarc = mvara + mvarb Case "-" mvarc = mvara - mvarb
Case *"

mvarc = mvara * mvarb Case "/" mvarc = mvara / mvarb Case Else RaiseEvent Hiba("OP") End Select If Err.Number > 0 Then RaiseEvent Hiba(Err.Description) Err.Clear Else RaiseEvent j eredmny(mvarc) End If End Sub Rem a m velet csak rhat Public Property Let op(ByVal vData As String) mvarop = vData M velet End Property Rem a szmts eredmnye csak olvashat Public Property Get c() As Double c = mvarc End Property Rem a msodik operandus csak rhat Public Property Let b(ByVal vData As Double) mvarb = vData M velet End Property Rem az els operandus csak rhat Public Property Let a(ByVal vData As Double) mvara = vData M velet End Property

2. FEJEZET

2.23. bra A szmolgp alkalmazs ablaka

A formmodulban elksztjk a SzmolOsztly objektumt, megrjuk az esemnykezel eljrsokat, valamint a tulajdonsgokon keresztl kommuniklunk az objektummal:
Rem az esemnyekkel rendelkez objektum deklarlsa Dim WithEvents Szmolgp As SzmolOsztly Rem az objektum ltrehozsa s megsemmistse Private Sub Form_Load() Set Szmolgp = New SzmolOsztly Szmolgp.op = "+" End Sub Private Sub Form_Unload(Cancel As Integer) Set Szmolgp = Nothing End Sub Rem a szvegmez k tartalmnak vltozsrl rtestjk az Rem objektumot Private Sub Textl_Change() On Error Resume Next Szmolgp.a = CDbl(Textl.Text) ' egyik operandus End Sub Private Sub Text2_Change() On Error Resume Next Szmolgp.b = CDbl(Text2.Text) ' msik operandus End Sub Private Sub Text3_Change() Text3.BackColor = vbWhite Szmolgp.op = Text3.Text ' opertor End Sub

A VISUAL BASIC NYELV Rem az objektum esemnykezel eljrsai Private Sub Szmolgp_jEredmny(ByVal c As Double) Text4.BackColor = vbWhite Text4.Text = Format(c, "### ### ###0.0####### ") End Sub Private Sub Szmolgp_Hiba(h As String) Beep If h = "OP" Then Text3.BackColor = vbRed Else Text4.BackColor = vbRed Text4.Text = h End If End Sub

3. A Visual Basic mint a Windows programozs alapeszkze


Miutn megismerkedtnk az alkalmazskszts lehet sgeivel, vizsgljuk meg a Visual Basic-et, mint Windows alkalmazsok fejleszt eszkzt! A programozk manapsg annak alapjn tlnek meg egy rendszert, hogy milyen mdon hasznlhat specilis alkalmazs-fejlesztsi clokra, mint pldul adatbzisok kezelse, multimdis alkalmazsok ltrehozsa, vagy az Internet lehet sgeinek kiaknzsa. Miel tt e krdsek rszletes vizsglatba fognnk, tekintsk t, hogyan lehet a Visual Basicben Windows alkalmazst kszteni! A Windows alkalmazsok egyttm kdnek az opercis rendszerrel - elengedhetetlen teht, hogy legalbb egyszer stett kpnk legyen arrl, hogyan m kdik a Windows, mi trtnik a programok futsa kzben. Az alkalmazsok rendszerint ablakokat nyitnak", s az ablakok adjk a program s a felhasznl kzti kapcsolat munkaterlett. A felhasznlk az ablakokban elhelyezett vezrl elemek segtsgvel kommuniklnak az alkalmazssal. Vezrl elemekkel kzlnk informcit a programmal, adatokat adunk meg, illetve jelezzk egyb, az alkalmazs hasznlatra vonatkoz szndkainkat. A program is hasznlhat vezrl elemeket adatainak s informciinak ablakokban val megjelentsre.

3.1. Esemnyvezrelt programpts


El szr lssuk, hogyan m kdnek az alkalmazsok a Windows rendszer felgyelete alatt! 3.1.1. Az alkalmazsok szerkezete A programok futtatsa szempontjbl vizsglva a Windows m kdst, a rendszer az albbi alapfunkcikat ltja el: a programok indtsa s lelltsa, a programok futsnak temezse, a felhasznl beavatkozsnak megfelel jelzs tovbbtsa a feldolgoz programrszekhez, a program ablaknak megjelentse. Ha egy programot elindtunk, a Windows betlti a megfelel futtathat {exe) llomnyt, ezek utn a program nem nllan, hanem az opercis rendszerrel egyttm kdve vgzi feladatt.

A Windows tbbprogramos opercis rendszer - ennek megfelel en tmogatja tbb alkalmazs prhuzamos m kdst. A Windows 95, a Windows 98, a Windows 2000, a Millennium, az NT s az XP el re meghatrozott stratgia szerint osztja fel az er forrsokat a programok kztt. Az alkalmazsok - a szmukra biztostott id szeletekben - a tbbi programtl fggetlenl futnak. A Windows alkalmazsok m kdst a 3.1. brn szemlltetjk.

3.1. bra A Windows alkalmazsok szerkezete

El szr az opercis rendszer oldalrl, majd a program szempontjbl vizsgljuk meg a m kdst. A felhasznl minden egyes tnykedse, a perifriaelemek adatkrse s -kzlse n. zenet formjban jelenik meg a Windows rendszerben. A perifria-esemnyeket a Windows el szr egy bemeneti sorban trolja, majd ezek alapjn ltrehozza a programoknak sznt zeneteket, melyeket a feldolgozsig - programonknt kln vrakoz sorokban {zenetsor) helyez el. Minden alkalmazs csak a sajt zenetsorval foglalkozik, a rendszer ltal szmra biztostott id tartamban. Arra is van lehet sg, hogy kzvetlenl, az zenetsorokat megkerlve, a programhoz kldjnk zeneteket.

Az alkalmazsok az zenetek feldolgozsa sorn a megfelel programelemek aktivizlsval reaglnak az zenetekre. Ez azonban nem kzvetlenl trtnik, hanem az alkalmazs a feldolgozott zenetet jbl a Windows fel tovbbtja, az opercis rendszerre bzva a feldolgoz programelem aktivizlst {zenet-tovbbts). A Windows - mint grafikus fellet opercis rendszer - az egyes programok ablakainak megjelentsr l is gondoskodik, a feldolgozott zeneteknek megfelel mdon. A programok oldalrl vizsglva a rendszer m kdst, az alkalmazsok alapfunkcii az albbiakban foglalhatk ssze: az alkalmazs er forrsainak lefoglalsa, a program zenetsorban trolt zenetek figyelse a program futsa sorn, annak meghatrozsa, hogy miknt reagljon az alkalmazs a klnbz Windows zenetekre. Az alkalmazs nmaga definilja a szmra szksges er forrsokat. Rendszerint a programok hozzk ltre ablakukat, melyet a Windows megfelel mdon megjelent, megteremtve ezzel a kapcsolatot a felhasznlval. A fentiek alapjn elmondhatjuk, hogy minden Windows alkalmazsnak van egy jl elklnl rsze, az zenet-kzvett , amelynek feladata az zenetek olvassa a megfelel zenetsorbl s azok kzvettse - a Windows segtsgvel - a feldolgozst vgz programrszekhez. Ms szavakkal azt is mondhatjuk, hogy a program - az zenetkzvett - egy olyan ciklus, amelyb l csak akkor lpnk ki, ha az alkalmazs futst lelltjuk. Az alkalmazsoknak vannak olyan rszei, melyek aktivizlst a Windows-ra bzzuk. Ezen rszek dolgozzk fel az zeneteket, s gondoskodnak a program megfelel m kdsr l, az ablakok megjelentsr l. Termszetesen minden zenet adatokat tartalmaz arrl, hogy mi trtnt a perifrin, valamint arrl is, hogy az esemny mikor s hol kvetkezett be. Ezen adatok alapjn a program azonosthatja a trtnseket. Szerencsre a Visual Basic rendszerben nincs szksgnk arra, hogy a fenti bonyolult m kdst sajt magunk valstsuk meg, erre a rendszer egyszer megoldst knl. A rendszer magt az alkalmazs, illetve az alkalmazs ablakt objektumknt modellezi. Amikor egy Windows alkalmazst ksztnk, akkor a fejleszt i krnyezet el lltja az ablak modelljt, melyet a fejleszts sorn rlapnak hvunk.

3.1.2. A projekt Miel tt rszleteiben megvizsglnnk, hogyan modellezi a Visual Basic a Windows alkalmazsok szerkezett, tisztzzuk a projekt fogalmt! Ha Visual Basic-ben programozunk, akkor n. projekteket ksztnk. A projekt azon llomnyok halmaza, amelyek szksgesek az alkalmazs ltrehozshoz. A fjlok egy rsze forrsnyelv program. Hasznlunk binrisan kdolt adatokat - er forrsokat (pldul bitkpek, szveges adatok, billenty zet-gyorstk, menk stb.) - melyek a program adatait troljk az exe-llomnyban. Az emltett fjlok a program tervezse sorn jnnek ltre. A projektet fordthatjuk a memriba, illetve ltrehozhatunk futtathat programot is. Az esetek tbbsgben a futtathat projekt hromfajta modult tartalmaz: 1. Formmodul az rlappal egytt automatikusan ltrejn. Ez trolja az rlap s az r lapon elhelyezett vezrl k tulajdonsgaira belltott kezd rtkeket, tovbb az esemnykezel eljrsokat. Egy projekt tbb rlapmodult is tartalmazhat. (Az .FRM a forrskdot, az .FRX pedig a binris adatokat trolja.) 2. Osztlymodul, objektumosztlyok ltrehozsra szolgl. Ebben a modulban olyan ltalnos cl objektumot definilunk, melyhez nem tartozik grafikus felhasznli fellet. Egy osztlymodulban csak egy objektumtpus definilhat, viszont egy projektben tbb osztlymodul is szerepelhet. 3. Modul, a projekt globlis vltozit, konstansait s BASIC nyelv alprogramjait tar talmazza. A hagyomnyos modulris programfejleszts eleme. Egy projekt tbb BASIC modult is tartalmazhat. Minden programmodul kln llomnyba kerl. A projekthez rendelt llomnyok tartalmra a fjl kiterjesztse utal.
Kiterjeszts FRM FRX VBP BAS CTL CTX CLS HLP LOG RES llomnytpus rlap forrsfjl. rlap binris llomny. Visual Basic projekt fjl. Modul forrs llomny. ActiveX felhasznli vezrl elem forrsfjl. ActiveX felhasznli vezrl elem binris llomny. Osztlymodul forrsfjl. Sg llomny. Hibazenet fjl. Szveges, grafikus er forrsokat tartalmaz fjl.

3.1.3. A Visual Basic integrlt fejleszt i krnyezete Amikor elindtjuk a Visual Basic rendszert el szr arrl kell dntennk, hogy milyen projektet ksztnk.

3.2. bra A Visual Basic projekt tpusnak k vlasztsa

A fejleszt i krnyezet tbb ablakbl pl fel. A kperny fels rszn tallhat a men. Az eszkzsorbl a fontosabb menpontok ikonon val kattintssal azonnal elrhet k.

3.3. bra A Visual Basic menje s eszkzsora

Mint mr emltettk a programban az ablak modellje egy objektum. Ez az objektum kezeli az ablakban elhelyezked vezrl k esemnyeit, s meghatrozza az ablak tpust. A Visual Basic rendszerben ezt az ablakobjektumot a Form kpviseli, amelyet a tovbbiakban formnak vagy rlapnak (munkaablaknak) neveznk. A formot a fejleszts alatt is ltjuk. Szintn a fejleszt rendszer rsze a program rsra szolgl szvegszerkeszt .

3.4. bra A form a fejleszt i krnyezetben s a program szvegszerkeszt je

A formra klnbz , els sorban I/O clokat szolgl objektumok pldnyait, komponenst, vezrl elemet helyezhetnk. A fejleszt rendszerhez tartozik a vezrl elemek ikonjait tartalmaz eszkzkszlet (Toolbox).

3.5. bra A Visual Basic eszkzkszlete

3.6. bra A projekttallz

A projektallz ablak az ppen megnyitott projektek hierarchikus, szerkezeti listjt jelenti meg. Az ablak cmsvja jelzi, hogy egyetlen projekttel vagy projektcsoporttal dolgozunk-e.

A tulajdonsgok ablakban llthatjuk be az rlap s a rajta elhelyezked vezrl elemek tulajdonsgait. A legrdl menb l vlasztjuk ki az aktulis objektumot, melynek tulajdonsgait a tblzatban bellthatjuk.

3.6. bra A projekttallz

3.1.3.1 Windows alkalmazs rsa Visual Basic-ben A fentiekben mr lttuk, hogy a Visual Basic objektumokbl rakja ssze az alkalmazst. Az objektumok tulajdonsgai hatrozzk meg a programelemek viselkedst, az objektumok esemnyei pedig a Windows zenetek kezelsvel foglalkoznak. Lttuk, hogy a Visual Basic rendszerben a ltrejv Forrni rlaphoz tartozik egy kdszerkeszt ablak, melyben elhelyezzk az alkalmazs m kdtetshez szksges programkdot, illetve a klnfle esemnykezel eljrsokat.

3.7. bra Esemnykezel a kdsz.erkesztben

A projekttallz ablak fejlcben hrom nyomgomb tallhat, a nyomgombok segtsgvel vlthatunk a programkd s a grafikus modell kztt:
Kd megjelentse

ViewlCode menpont kivlasztsval, vagy a "View Code" nyomgomb megnyomsval a program kdjra vltunk. A View\Object, a <Shift+F7> vagy a "View Object" nyomgomb megnyomsval a program grafikus modelljre kapcsolunk t. A "Toggle Folders" ikonra kattintva a projektsszetev k listjnak ktfle megjelentsi mdja - a modulok csoportostva, vagy anlkl - kztt vlaszthatunk.

Objektum megjelentse Mappk ki- s bekapcsolsa

3.2. A form az alkalmazsok ablaka s krnyezete


A Form objektum kitntetett szereppel rendelkezik az alkalmazsok ltrehozsa s futtatsa tekintetben. Megjelentve a formot (Show()), a felhasznli m veleteket fogad alkalmazsablak vagy prbeszdablak lesz bel le. 3.2.1. Az rlap tulajdonsgai A form tulajdonsgait tbbflekppen is csoportosthatjuk. Az els szempont szerinti csoportostsnl a Tulajdonsgok ablakban hasznlt kategrikat mutatjuk be: A Position (pozci) csoport elemei a formhoz tartoz ablak mreteit (width, height) s elhelyezkedst (left, top) jellik ki. A Scale (sklzs) csoportban tallhat tulajdonsgok az ablakra fesztett logikai koordinta-rendszert, s a koordinta-egysgeket definiljk (ScaleMode, ScaleWidth, ScaleHeight). Az Appearance kategriba sorolt tulajdonsgok az ablak megjelenst szablyozzk. Megadhat a fejlc szvege (Caption), a httr, az el tr s a kifests szne (BackColor, ForeColor, FillColor), a httrbe helyezett kp (Picture) stb. A Behavior csoportba az ablak viselkedst meghatroz tulajdonsgok tartoznak. Az ablak lehet lthat (Visible) s engedlyezett (Enabled). Bellthat a rajzolsi md (DrawMode), a vonal stlusa (DrawStyle) s vas tagsga (DrawWidth). Kln csoportokat alkotnak a bet tpust (Font) s a dinamikus adatcsert (DDE) meghatroz tulajdonsgok. A Misc (egyb) csoportba vegyes tulajdonsgok kerltek. A formobjektum neve (Name), az ablak ikonja (Icon), az egrmutat (MousePointer) stb. szintn bellthatk.

A tulajdonsgok egy rsze csak a fejlesztsi fzisban vltoztathat meg (pldul Name), a tbbsg azonban fejleszts alatt s a program futsa sorn egyarnt felhasznlhat. A csak futs alatt elrhet tulajdonsgok lehetnek csak olvashatk (pldul hDC, hWnd), illetve rhatk s olvashatk (pldul CurrentX, CurrentY). 3.2.2. A Form objektum metdusai A metdusok az objektumokhoz tartoz nyilvnos (Public) alprogramokat jellnek. A metdusokat a tulajdonsgokhoz hasonlan az objektum nevvel min stennk kell, vagyis meg kell mondanunk, melyik objektumpldnyon kvnjuk a m veletet elvgezni. A metdusokat csak a Visual Basic programbl aktivizlhatjuk.

A form metdusainak tbbsge az ablakban val megjelentst tmogatjk- az ablak tartalmnak trlse (Cls), frisstse (Refresh), szveg kirsa (Print) alakzatok rajzolsa (Point, Pset, Line, Circle stb.), bitkp megjelentse (PaintPicture) Ms metdusok az ablak Windows rendszerben trtn vezrlsre szolglnak- az ablak thelyezse (Move), elrejtse (Hide), megjelentse (Show), fkuszlsa (SetFocus) A metdusok eljrsok (PopupMenu, PrntForm, Scale stb.) s fggvnyek egyarnt'lehetnek {Point, TextWidth, TextHeight, ScaleX, ScaleY stb.) A FMETODUS alkalmazsban a Bet mret parancsgomb megnyomsakor vletlen bet mrettel es sznnel az ablak kzepre rjuk a "Visual Basic 6" szveget A megoldsban a kirst a formobjektum egy bels eljrsban (Kzprer) valstottuk meg. (A fejleszts sorn az eljrst a kdablakban a Tools/Add Procedure menpont segtsgvel, illetve kzzel egyarnt elhelyezhetjk.) A parancsgomb esemnykezel eljrsbl aktivizljuk a kirst:

3.8. bra A form bet mretei

A kirst vgz eljrs:


Rem a paramterknt kapott szveget a form kzepre rja Private Sub Kzprer(Szveg As String) Dim SzvegX As Integer, SzvegY As Integer 1 az ablak trlse Me.Cls ' a kirand szveg befoglal mretei SzvegX = TextWidth(Szveg) SzvegY = TextHeight(Szveg) 1 a kirs pozcijnak belltsa CurrentX = (ScaleWidth - SzvegX) / 2 CurrentY = (ScaleHeight - SzvegY) / 2 ' a szveg kirsa Form1.Print Szveg End Sub

Ha azt szeretnnk, hogy az ablak mretnek megvltozsakor is kzpen maradjon a szveg, akkor az tmretezs esemny kezel jt is meg kell rnunk. (Ezt a kezel t a kdba helyezhetjk, ha a kdszerkeszt ablak fels sornak bal oldali listjbl kivlasztjuk a Form elemet, majd kattintunk a jobb oldali lista Resize bejegyzsn.)
Private Sub Form_Resize() Kzprer "Visual Basic 6" End Sub

3.2.3. A form esemnyei Mr az el z pldban is lttuk, hogy az ablak megfelel m kdtetshez hasznlnunk kellett a Form objektum azon kpessgt, hogy bizonyos esemnyekre vlaszknt ltalunk megrt eljrsokat aktivizl. Az rlap esemnykezel eljrsainak nevt a rendszer alaktja ki FormJEsemny formban. Az esemnyek egyarnt lehetnek paramterezettek (Unload, MouseMove stb.), vagy paramter nlkliek {Load, Resize stb.). A Visual Basic nyelv szempontjbl az esemnyek kezel i eljrsok, amelyeket szksg esetn magunk is meghvhatunk. Az esemnyek tbbsge a felhasznli beavatkozs eredmnyeknt jnnek ltre, azonban nhny esemny a Windows rendszer m kdsvel kapcsolatos. Az alkalmazs ablaknak megjelenst egy sor esemny ksri:
Esemny Initialize Load Resize Activate Paint Jelents az objektum ltrehozsa, a formobjektum betltse, az objektumhoz tartoz ablak mreteinek belltsa, az ablak aktvv vlsa, a rendszer jrafesti az ablak tartalmt.

A kilpsi folyamat lpseit szintn esemnyek jelzik:


Esemny QueryUnLoad Unload Terminate Jelents jelzi, hogy az ablakot szeretnk lezrni, az ablak objektumt szeretnk trlni a memribl, az objektum megsemmistse.

A QueryUnload, illetve az Unload esemnyek Cancel paramternek true rtkre lltsval a kilpst megszakthatjuk. (A QueryUnload esetn mg a Windows-bl val kilps is megszakad.) Ez a megolds csak akkor m kdik, ha a programunkat nem az end utastssal lltjuk le. A Load esemny kezel jt az rlap inicializlsra hasznljuk, hisz csak egyszer hvdik meg. Az Activate esemny minden olyan esetben ltrejn, amikor a formhoz tartoz ablak aktvv vlik. Ha egy msik ablak lesz aktv, akkor a Deactivate esemny keletkezik. A GotFocus s a LostFocus esemnyek az el z kt esemnyhez hasonl mdon az inputfkusz megkapsrl, illetve elvesztsr l tudstanak. ( rlap esetn csak akkor keletkeznek, ha az rlapon nincsenek aktv vizulis vezrl elemek.) A Resize esemny az ablak tmretezskor, mg a Paint esemny az ablak jrafestsekor keletkezik. A felhasznl ltal vgzett m veletek kzl legfontosabbak az egrrel (mouse) kapcsolatos esemnyek. Az egeret mozgathatjuk (MouseMove), az egrgombokat lenyomhatjuk (MouseDown), illetve felengedhetjk (MouseUp). Az zenetek paramterei lnyeges informcikat hordoznak: Button az als hrom bit egy-egy egrgombot jell, bal oldali (0. bit), jobb oldali (1. bit) s kzps (2. bit), Shift az n. shift-billenty k llapott jelli a billenty zeten <Shift> (0. bit), <Ctrl> (1. bit) s <Alt> (2. bit), X, Y az egr koordinti az esemny keletkezsekor. A fenti egresemnyek jl definilt sorozata szintn esemnyeket hoz ltre. Ilyen esemnyek az egrrel val kattints (Click) s duplakattints (DblClick). A billenty k billenty zeten val letst ktflekppen is feldolgozhatjuk. A billenty ket egyarnt felhasznlhatjuk vezrlsre s karakterforrsknt. Az els esetben a KeyDown s a KeyUp esemnyeket alkalmazzuk, mely esemnyek egymsutnja KeyPress esemnyt hoz ltre. Fontos megjegyeznnk, ha az rlapon aktv vezrl k

helyezkednek el, akkor a billenty zet esemnyei nem jutnak el a formhoz, hiszen kzvetlenl a fkuszban tallhat vezrl hz irnyulnak. Ahhoz, hogy a form rtesljn a billenty zet esemnyeir l, a KeyPreview tulajdonsg rtkt true-ra kell lltanunk. A KeyDown s a KeyUp esemnyek paramterknt egy billenty azonostt {KeyCode) s a shift-billenty k llapott (Shift) kapjk. (A billenty t konstansok segtsgvel azonosthatjuk, pldul az <F1> billenty kdja vbKeyFI). A KeyPress esemny paramtere a lenyomott billenty k ltal ltrehozott karakter ASCII-kdja (KeyAscii). A FORMEVENT alkalmazsban minl tbb formesemny kezelse volt a clunk. A form betltsekor belltjuk a tulajdonsgokat, s az ablakot a kperny kzepre mozgatjuk:
Private Sub Form_Load() KeyPreview = True BackColor = vbBlue Textl.Text = "" Me.Move (Screen.Width - Width) / 2, _ (Screen.Height - Height) / 2 End Sub

A Kilps parancsgomb zenetkezel eljrsa:


Private Sub Commandl_Click() Unload Me End Sub

A <Shift+Esc> billenty k hatsra is kilpnk a programbl:


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode = vbKeyEscape) And ((Shift And vbShiftMask) > 0) Then Commandl_Click End If End Sub

Kilpskor megkrdezzk a felhasznlt, hogy valban ki akar-e lpni az alkalmazsbl:


Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) Dim Vlasz As Integer, Fejlc As String Dim Stlus As String, zenet As String

zenet = "Valban ki akar lpni ?" Stlus = vbYesNo + vbExclamation + vbDefaultButton2 Fejlc = "Figyelem" Vlasz = MsgBox(zenet, Stlus, Fejlc) If Vlasz = vbNo Then Cancel = True Textl.SetFocus Else Cancel = False End If End Sub

3.9. bra A QueryUnload esemny MsgBox hvsa

Csak a hexadecimlis szmjegyek jutnak el a szvegmez hz:


Private Sub Form_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) If (KeyAscii > 47 And KeyAscii < 58) Or _ (KeyAscii >= Asc("A") And KeyAscii <= A s c ( " F " ) ) Then Else KeyAscii = 0 End If End Sub

A Ctrl+bal egrgomb kombincival megvltoztatjuk a szvegmez httrsznt:


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If (Button = vbLeftButton) And (Shift And vbCtrlMask > 0) Then Textl.BackColor = RGB(256 * Rnd, 256 * Rnd, 256 * Rnd) End If End Sub

Ha az egeret lenyomott jobb egrgombbal mozgatjuk, akkor viszi magval a parancsgombot:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If (Button = vbRightButton) Then Commandl.Left = X Commandl.Top = Y End If End Sub

Az ablakot srga sznnel bekeretezzk az jrarajzols sorn:


Private Sub Form_Paint() DrawWidth = 1 0 Line (0, 0)-(ScaleWidth, ScaleHeight), vbYellow, B End Sub

Atmretezs esetn az ablakot a kperny kzepre, mindkt vezrl t pedig vzszintesen az ablak kzepre mozgatjuk:
Private Sub Form_Resize() On Error Resume Next 1 az ablak tartalmnak jrarajzolsa Refresh Me.Move (Screen.Width - Width) / 2, _ (Screen.Height - Height) / 2 With Textl .Move (Me.Width - .Width) / 2, (Me.Height - .Height) / 3 End With With Commandl .Move (Me.Width - .Width) / 2, 2 * (Me.Height - .Height) / 3 End With End Sub

Miutn tisztztuk a form alapvet jellegzetessgeit, vizsgljuk meg hogyan tarthat a kapcsolat a programmal s annak krnyezetvel! 3.2.4 Az App objektum A Windows alkalmazsok ksztshez a Visual Basic az App objektumot definilja. Az App tulajdonsgai megteremtik a Windows rendszer s az alkalmazs kzti kapcsolatot. Az EXE llomny nevt (elrsi ttal) tartalmazza a string tpus EXEName tulajdonsg. Az aktulisan hasznlt sgllomny nevt pedig a (string tpus) HelpFile tulajdonsg trolja.

3.2.5 A Screen objektum A Screen objektum felhasznlsval informcikat szerezznk a kperny r l: Egy adott pillanatban az alkalmazsnak egyetlen ablaka s ennek egyetlen vezrl je fogadhatja csak a felhasznli beavatkozsokat. A Screen objektum ActiveForm s ActiveControl jellemz i azonostjk ezeket az elemeket. Sokszor szksgnk lehet a kperny fizikai mreteire s felbontsra. A Height jellemz a kperny magassgt, a Width jellemz a szlessgt szolgltatja pixelben. A Windows rendszer adatai kzl is sokat megtallunk a Screen jellemz i kztt. Az alkalmazs aktulis egrkurzort trolja a MousePointer - egsz t pus - tulajdonsg. A Fonts jellemz t hasznlhatjuk a kperny n megjelent het fontcsaldok lekrdezsre.

3.3 A vezrl elemek hasznlata


A Visual Basic rendszerben vezrl knek nevezzk azokat a (vizulis s nem-vizulis) pt elemeket (komponenseket), amelyeket az rlapra (formra) helyezve el lltjuk a alkalmazs felhasznli fellett. 3.3.1. A vezrl k csoportostsa A vezrl elemeket kt csoportba sorolhatjuk, az alap- s az ActiveX-vezrl k csoportjba. Mindkt csoportba tartoz komponensek esetn, a hatkony felhasznlsa rdekben hrom krdsre kell ismernnk a vlaszt: Milyen tulajdonsgokkal (properties) rendelkezik a vezrl ? Mely metdusok (methods) segtik a vezrl vel trtn m veletvgzst? Mely esemnyek (events) kezelsben van segtsgnkre a vezrl elem? 3.3.1.1. Alapvezrl k Az alapvezrl k, melyek ikonjt a 3.10. brn lthatjuk, minden Visual Basic programbl elrhet k. A nyl-mutat akkor vlik kijelltt, ha egyetlen vezrl t sem jellnk ki az eszkztron. Ekkor az egr segtsgvel az rlapon elhelyezett vezrl k pozcijt s mrett mdosthatjuk. Az alapvezrl k megknnytik a felhasznli adatok kezelst, s nagyfok interaktivitst biztostanak a programnak: adatbeviteli felletet nyjtanak a felhasznlnak {input), megjelentik a program adatait {output), illetve esemnyek bekvetkeztnek jelzsvel "l v" teszik az alkalmazsunkat.

3.10. bra Alapvezrl k az eszkztron

Az albbi tblzatban sszefoglaltuk az egyes vezrl khz tartoz osztlyokat:

Vezrl Kpmez

Osztly PictureBox

Lers Bitkp, ikon, metafjl, JPEG s GIF formtum fjlokban trolt kpet jelent meg bekeretezve. A formhoz hasonlan grafika megjelentsre is hasznlhat. Felirat megjelentsre alkalmas. Adatbevitelre hasznlhat szvegszerkeszt vezrl . Keretbe foglalt vezrl csoport ltrehozsra alkalmas elem. Nyomgomb, szveggel a tetejn. Ki- s bekapcsolhat jell ngyzet, oldaln szveggel. Ki- s bekapcsolhat vlasztgomb, oldaln szveggel. Grgethet ttelek listja. A listaablak s a szvegszerkeszt vezrl sszeptse nllan megjelen vzszintes grget sv nllan megjelen fgg leges grget sv A belltott id lejrtakor periodikus esemnyt hoz ltre (nem lthat elem). A Windows rendszerben elrhet lemezmeghajtkat listban jelenti meg. Knyvtrak hierarchikus listjt jelenti meg. A Path tulajdonsgban megadott knyvtr llomnyainak nevt jelenti meg.

Cmke

Label TextBox Frame CommandButton CheckBox OptionButton ListBox ComboBox HScrollBar VScrollBar Timer DriveListBox DirListBox FileListBox

Szvegmez

Keret

Parancsgomb

Jell ngyzet

Vlasztgomb

Lista

Kombinltlista Vzszintes grget sv Fgg leges grget sv Id zt

Meghajtlista

Knyvtrlista

llomnylista

Vezrl Alakzat Vonal Kp

Osztly Shape Line Image

Lers Hatfle geometriai alakzat megjelentsre hasznlhat vezrl . Egyeneseket jelent meg. Bitkp, ikon, metafjl, JPEG vagy GIF formtum fjlokban trolt kpet jelent meg keret nlkl. Lehet v teszi az adatbzisban trolt adatokhoz trtn hozzfrst, s a rekordok kztti mozgst. Ms alkalmazs ltal kezelt OLE-objektumok megjelentsre alkalmas.

Adat OLE-

Data

kontner

OLE

3.3.1.2. ActiveX-vezrl k A Visual Basic egy sor 32-bites vezrl elemmel rendelkezik, amelyek .OCX kiterjeszts fjlokban tallhatk. Ezeket a Windows alatt regisztrlt ActiveX-komponenseket az albbi mdon kapcsolhatjuk a Visual Basic projekthez: A Projec / Components... menpont kivlasztsakor, illetve a <Ctrl+T> gyor stbillenty k letsekor megjelenik a Components prbeszdablak. A prbe szdablak elemeinek felhasznlsval adhatunk az ppen nyitott projekthez s az eszkztrhoz vezrl ket. A Components prbeszdablakban hrom flet tallunk: a Controls lapon a vezrl elemek, a Designers lapon a tervez k, a Insertable Objects lapon pe dig a beilleszthet objektumok listja jelenik meg.

Pldaknt adjuk az eszkztrhoz a RichTextBox szvegszerkeszt vezrl t! Jelljk ki a "Microsoft Rich Textbox Control 6.0" ttelt a Components prbeszdablakban!

3.11. bra A teleptett komponensek

Az Alkalmaz nyomgomb megnyomsa utn a RichTextBox vezrl elrhet v vlik a Visual Basic rendszer szmra. Kivlaszthatjuk a RichTextBox vezrl t tartalmaz RICHTX32.OCX llomnyt is a Browse nyomgomb megnyomsval megjelen "Add ActiveX Control" listaablakbl kijellssel, s a Megnyits gomb megnyomsval.

3.12. bra A komponensek betltse a System32 knyvtrbl

Az albbiakban - a teljessg ignye nlkl - sszefoglaljuk a leggyakrabban hasznlt ActiveX-vezrl ket, a komponenst trol .OCX llomnyok szerinti csoportostsban. A MSMCTL.OCX fjlban trolt komponensek {Microsoft Windows Common Controls):
Vezrl Flsv Osztly TabStrip Svban elhelyezett, fleket tartalmaz vezrl , amelyet ltalban lapozshoz hasznlunk. Nyomgombokbl ll, eszkzsvot megvalst vezrl . A f ablak szlein megjelen sv, amely klnbz informcikat tartalmazhat Munkafolyamat el rehaladtnak kijelzsre szolgl, balrl jobbra kitlt d tglalapknt jelenik meg Adatok hierarchikus (fastruktrj) megjelentsre hasznlhat. Minden csomponthoz rendelhet cmke s bitkp. Listltem objektumokat ngyfle nzetben jelent meg. Kpkollekcik kialaktst segt vezrl . A kpeket ms ltalnos vezrl k hasznljk. Adott tartomnyba es rtk kivlasztst segt komponens Kpek kombinlt listban val megjelentse

Eszkzsv

ToolBar

llapotsor

StatusBar

Munkafolyamatkijelz

ProgressBar

Hierarchikus megjelent

TreeView

Listamegjelent

ListView

Kplista

ImageList

Csszka

Slider

Kpkombinlt lista

ImageCombo

Az MSCOMCT232.OCX fjl komponensei (Microsoft Windows Common Controls2):


Vezrl Animci

Osztly Animation

Lers A tmrtetlen s az RLE mdszerrel tmrtett hang nlkli .AVI-llomnyok lejtszsra alkalmas vezrl elem. A kt nyilat mutat lptet vezrl vel nvelhetnk vagy cskkenhetnk ms vezrl ben trolt rtkeket. Naptr hnap bontsban. Dtum kivlasztsa Sk csszka

Lptet

UpDown

Naptr

MonthView

Napvlaszt

DTPicker

Sk csszka

FlatScrollBar

A COMDLG32.OCX llomnyban trolt komponens {Microsoft Common Dialog


Control):
Vezrl ltalnos prbeszdablak

Osztly CommonDialog

Lers Lehet v teszi a Windows ltalnos prbeszdablakainak egyszer elrst.

A DBGRID32.OCX llomny komponense {Microsoft Data Bound Grid Control):


Vezrl Adatkapcsolt tblzat

Osztly
DBGrid

Lers Lehet v teszi Recordset objektumhoz tartoz adattbla megjelentst s kezelst.

A DBLIST32.OCX llomnyban trolt komponensek {Microsoft Data Bound List


Controls):
Vezrl Adatkapcsolt lista

Osztly DBList

Lers A Recordset objektumhoz tartoz adattbla mez jnek (oszlopnak) listaablakban val megjelentsre szolgl.

Vezrl Adatkapcsolt kombinlt lista

Osztly DBCombo

Lers Az adattbla mez jnek (oszlopnak) lenyfl kombinlt listaablakban val megjelentsre s kezelsre hasznlhat.

Az MCI32.OCX fjl komponense (Microsoft Multimedia Control):


Vezrl Multimdia Osztly MMControl Lers Multimdia adatok (kp, hang, animci stb.) lejtszst, s a lejtszs vezrlst vgzi.

Az MSCHRT20.OCX llomny komponense (Microsoft Chart Control):


Vezrl Diagram Osztly MSChart Lers Tmogatja klnbz grafikonok megjelentst adattblban trolt adatokbl.

Az MSCOMM32.OCX fjlban trolt komponens (Microsoft Comm Control):


Vezrl Kommunikci

Osztly MSComm

Lers Segti a soros porton trtn , illetve modemes kommunikcira pl alkalmazsok ksztst.

Az MSFLXGRD.OCX llomny komponense (Microsoft FlexGrid Control):


Vezrl Rugalmas tblzat Osztly MSFlexGrid Lers Adatok tblzatos kezelsre, illetve Recordset adattbla megjelentsre hasznlhat vezrl .

Az MSINET.OCX llomny komponense (Microsoft Internet Transfer Control):


Vezrl Internet adattviv Osztly Inet Lers A HTTP s az FTP internet protokollokra pl vezrl elem.

Az MSMAPI32.OCX llomny komponensei {Microsoft MAPI Controls):


Vezrl MAPI-kapcsolat MAPI-iizenetek Osztly MAPISession MAPIMessages Lers Az zenetkzvett API-hoz pt ki kapcsolatot. zenetek kldst s fogadst tmogat vezrl elem.

Az MSMASK32.OCX llomny komponense {Microsoft Masked Edit Control):


Vezrl Adatbeviteli sablon

Osztly MaskEdBox

Lers Minta alapjn trtn adatbevitelt megvalst vezrl elem.

Az MSRDC20.OCX llomny komponense (Microsoft RemoteData Control):


Vezrl Tvoli adat

Osztly MSRDC

Lers Tvoli ODBC adatforrs adatainak elrst lehet v tev vezrl .

A MSWINSCK.OCX fjl komponense {Microsoft Winsock Control):


Vezrl Winsock

Osztly Winsock

Lers Tvoli gpek kztti adatcsert tesz lehet v az UDP, illetve a TCP protokollok felhasznlsval.

A RICHTX32.OCX llomny komponense {Microsoft Rich Textbox Control):


Vezrl B vtett szvegmez

Osztly RichTextBox

Lers A TextBox-n\ b vebb szvegformzsi lehet sgeket biztost vezrl .

A SYSINFO.OCX llomny komponense {Microsoft Syslnfo Control):


Vezrl
Rendszeri nfo

Osztly Syslnfo

Lers
A vezrl lehet v teszi, hogy programunkat felksztsk bizonyos rendszerszint esemnyek kezelsre.

A TABCTL32.OCX fjl komponense {Microsoft Tabbed Dialog Control):

Vezrl Fles prbeszdablak

Osztly SSTab

Lers Tbb - fl segtsgvel kivlasztha-t lapot tartalmaz prbeszdablak ksztst segt komponens.

3.3.2. A vezrl kr l ltalban Az el z fejezetben felsorakoztatott vezrl elemek alapvet en klnbznek egymstl, hiszen ms-ms cllal kszltek. Ha azonban megvizsgljuk a vezrl k tulajdonsgait, metdusait s esemnyeit, egy sor azonossgot (hasonlsgot) fedezhetnk fel. A fejezet kvetkez rszben ppen ezekre az azonossgokra helyezzk a hangslyt, s csak ezutn trnk r az egyes vezrl k specilis lehet sgeinek bemutatsra. 3.3.2.1. A vezrl k kzs tulajdonsgai A vezrl elemek - a formhoz hasonlan - tulajdonsgokkal rendelkeznek, melyek segtsgvel a fejleszts s a program futsa sorn egyarnt bellthatjuk, illetve lekrdezhetjk a vezrl k jellemz adatait. A tulajdonsgok tbbsge vezrl nknt ms s ms, azonban van nhny olyan jellemz , amellyel minden vezrl rendelkezik. A vezrl k neve A vezrl k nevt a Name tulajdonsg trolja. A nv bet vel kezd dik s legfeljebb 40 karakter hossz lehet. A Name tulajdonsgot csak a tervezs ideje alatt llthatjuk be. A belltott nv az esemnykezel eljrsok nevben is megjelenik. Amikor egy vezrl t a formra helyeznk, akkor a Visual Basic automatikusan elnevezi a ltrejv objektumot. A nvben ltalban a komponens neve (vagy annak rvidtett vltozata) szerepel egy sorszmmal kiegsztve (LabelJ, Timer2, Text3 stb.). A vezrl k elhelyezkedse A vezrl elemek elhelyezkedst a befoglal tglalapjuk bal fels sarknak koordinti {Top, Left), szlessge (Width) s magassga (Height) hatrozzk meg. Amikor a vezrl t a formra helyezzk, ezek a jellemz k automatikusan rtket kapnak. A fenti tulajdonsgokat a program tervezse sorn, s futs kzben egyarnt bellthatjuk. A belltott mretek a vezrl t tartalmaz ablakban definilt koordinta-rendszerben s egysgben rtend k. Alaprtelmezs szerint a Form ScaleMode tulajdonsga vbTwips rtk . (A twip egy kperny fggetlen egysg, a nyomtatk logikai pontmretnek hszada. A nyomtatk logikai pontmrete a logikai inch (2,54 cm) hetvenketted rsze, teht a twip 1/1440 logikai inch, illetve 1/567 logikai cm. A logikai sz arra utal, hogy a kperny n egy 567 twip hossz vonal kinyomtatva 1 centimteres lesz.)

Navigls a vezrl k kztt

A vezrl k tbbsge kpes az input fkusz fogadsra, amit egrrel, vagy a <Tab> billenty megnyomsval thelyezhetnk. Ahhoz hogy r tudjunk tabullni a vezrl re a TabStop tulajdonsgnak True rtket kell adnunk. A tabulls sorrendjt a Tablndex tulajdonsg hatrozza meg - a 0 index elem kerl el szr a fkuszba. Gyors segtsg a vezrl hasznlathoz A vezrl elemek string tpus ToolTipText tulajdonsgban trolt szveg megjelenik egy kis ablakban a vezrl mellett, ha az egrrel rpozcionlunk a vezrl re, majd megllunk pr pillanatig.
A vezrl k megjelense

A vizulis vezrl elemek lehetnek lthatak - ez az alaprtelmezs -, s lehetnek rejtettek. Ezen kt llapot egyike brmikor bellthat, hiszen a vezrl t jellemz adatok a memriban troldnak. A lthatsgot a Boolean tpus Visible tulajdonsg rtke dnti el: True esetn a vezrl lthat, False esetn pedig rejtett. A Boolean tpus Enabled tulajdonsg rtke engedlyezi (True) vagy tiltja (False) a vezrl m kdtetst. A letiltott vezrl lthat ugyan, azonban szne szrke, s nem fogadja a felhasznli beavatkozsokat. AzAppearance tulajdonsg ktfle rtket vehet fel: 0 - Fiat rtk esetn az vezrl httere fehr, s skbeli a megjelentse, I - 3D rtk esetn szrke a httr, s az brzols trbeli.

3.13. bra A vezrl k 2D-3D megjelense

Az alapvezrl k egy rsze a szoksos Windows-os m kdsen tlmen en specilis lehet sgekkel is rendelkezik, melyeket a Style tulajdonsg alaprtknek (0 -Standard) megvltoztatsval rhetnk el. Az albbi brn a vezrl ket szabvnyos, illetve mdostott formban lthatjuk:

3.14. bra Szabvnyos s nem szabvnyos vezrl stlus

A vezrl k bet tpusa A Windows rendszerben a megjelent -eszkzkn a karakterek klnbz bet tpussal szerepelhetnek. A vezrl k esetn az alaprtelmezs szerinti MS Sans Serif bet tpust Norml stlusban s 8 pontos mretben hasznljuk. Ha el akarunk trni az alaprtelmezst l, akkor mdostanunk kell a Font tulajdonsgot. A fejleszt i krnyezetben a bet tpus megvltoztatshoz el szr ki kell vlasztanunk a Font tulajdonsgot a Properties ablakban, majd kattintanunk kell a gombon. Ekkor megjelenik a Bet tpus prbeszdablak, amelyben megvltoztathatjuk a bet k tpust, stlust, mrett stb.

3.15. bra Vezrl k bet tpusnak belltsa Vezrl k adattrolja

Minden vezrl rendelkezik egy string tpus Tag tulajdonsggal, amely adattrolknt hasznlhat, pldul objektum azonostsra is szolglhat.
Vezrl t tartalmaz s szl azonostsa

Minden vezrl informcit tartalmaz a kontnerobjektumrl, melynek azonostsra a futs kzben rhat/olvashat Container tulajdonsg szolgl (PictureBox vagy Frame), futs kzben csak olvashat Parent tulajdonsg a szl t azonostja. Az albbi pldban a vezrl n tlmen en a vezrl szl formjt is elrjk:
Public Sub Bellt(Vezrl As Control) Vezrl .Caption = "VB 6" Vezrl .Parent.Caption = "VB 6" End Sub

Vezrl k tmbje - az Index tulajdonsg A Visual Basic lehet v teszi, hogy a vezrl ket tmbbe rendezzk. A vezrl tmb az azonos tpus s nev vezrl k olyan rendezett halmaza, ahol a vezrl knek sajt tulajdonsgaik vannak, az esemnyek kezelsre szolgl eljrsokat azonban kzsen hasznljk.

Minden vezrl tpusnak van egy Index tulajdonsga. Ha ennek az Index tulajdonsgnak a tervezs sorn nem adunk rtket, akkor a vezrl t egyszer vezrl knt hasznljuk. Ha azonban a tervezs sorn az Index tulajdonsgnak tetsz leges nem negatv egsz rtket adunk, akkor ett l kezdve a vezrl k tmbjt definiltuk, s a vezrl kkel, mint tmbelemekkel dolgozunk. A tervezs sorn vezrl tmbt a vglap segtsgvel is ltrehozhatunk. Ha egy vezrl elemet kijellnk, s a vglapra msoljuk, majd onnan visszamsoljuk, figyelmeztet zenetet kapunk, hogy csak akkor hasznlhatunk kt azonos nev vezrl t, ha azok egy vezrl tmb elemei. A ltrehozott vezrl tmb elemeit a tervezs sorn gy kezelhetjk, mintha mindegyik nll vezrl lenne. A nevk azonos, az Index tulajdonsgnak mindegyik esetben ms rtke van, egyb tulajdonsgaik klnbz ek is lehetnek. A vezrl tmb minden eleme az egyes esemnyekhez ugyanazt az esemnykezel eljrst hasznlja, s minden esemnykezel nek van egy Index paramtere, amely arrl informl, hogy melyik tmbelemhez tartozik az esemny. Vezrl tmbk dinamikus kezelse Sokszor nem tudjuk el re, hogy hny vezrl re lesz szksgnk. A vezrl tmbk felhasznlsval a program futsa sorn is ltrehozhatunk j vezrl elemeket. Ehhez azonban a vezrl tmb egy elemt mr a tervezs alatt el kell helyezni az rlapon. Futs kzben a Load utastst hasznljuk az j tmbelem ltrehozsra:
Load objektum

Az gy betlttt objektum elhelyezkedst s lthatsgt

magunk definilhatjuk. A vezrl tmbk hasznlata lehet v teszi a memria dinamikus kezelst is. A Load utastshoz hasonlan az UnLoad utastst hasznlhatjuk a vezrl tmb elemeinek megszntetsre:
Unload objektum

3.3.2.2. A vezrl k m kdtetse programbl A vezrl k tbbsge rendelkezik metdusokkal (a vezrl be ptett, kvlr l hvhat alprogramokkal), melyek felhasznlsval bizonyos m veletek elvgzst krhetjk a vezrl t l. A metdusok hvsnak ltalnos formja eljrs esetn:
objektum.Metdus argumentumok listja call objektum.Metdus(argumentumok listja)

fggvny esetn:
vltoz = objektum.Metdus(argumentumok 1istja)

Az albbi tblzatban sszegy jtttk az ltalnosan hasznlhat metdusokat, kln figyelmet szentelve a ZOrder metdus bemutatsra. Metdus Drag Move Refresh SetFocus ZOrder Lers Elkezdi, befejezi vagy megszaktja a vezrl drag and drop (vidd s dobd) mdszerrel trtn thelyezst. A vezrl elem thelyezsre, illetve tmretezsre hasznlhat. Krhetjk a vezrl teljes jrarajzolst. Ablakkal rendelkez vezrl elem esetn a vezrl re helyezi a fkuszt. Fedsben lev vezrl elemek megjelentsi sorrendjt definilhatjuk.

Vezrl k egymson (ZOrder) A formokon hrom grafikus rteget hasznlunk a megjelents sorn. A leghts a httr, amelyen a grafikus metdusok dolgoznak, a kzps n grafikus vezrl k foglalnak helyet, vgl a legfels , amely a tbbi vezrl t tartalmazza. A hrom rteget egyms el tt kell elkpzelni. Ez pldul azt jelenti, hogy minden nem cmke tpus vezrl takarja a cmkket s minden (nem tltsz) cmke takarja a htteret. Amikor a vezrl ket az rlapra helyezzk, megadjuk azok - rtegen belli - takarsi sorrendjt is, hisz a ks bb felhelyezett vezrl kerl legfellre. Ugyancsak hasznlhatjuk a vezrl k felbukkan menjnek "Bring to Front" s "Send to Back" menpontjait. (Az el bbi a kivlasztott vezrl t az sszes tbbi fl helyezi, mg az utbbi az sszes tbbi al.) A program futsa sorn minden vezrl esetben a ZOrder metdust hvhatjuk a vezrl k alulra, illetve fellre helyezsre.
objektum.ZOrder [pozci]

A metdus az objektumot a pozci egsz tpus paramternek megfelel en helyezi el a rtegen. Ha a paramter hinyzik, vagy rtke 0, akkor az objektum fellre kerl, ha 1, akkor alulra.

Pldaknt rjunk programot, amely az ablakban szvegeket jelent meg, s kpes a megjelentett szvegeket egyms fl helyezni! A ltvny kedvrt helyezzk a szvegeket gombokra! A feladat megoldst az SZKEVER alkalmazst, amelynek futsi ablaka:

3.75. bra A ZOrder hasznlata

A megoldsban a szveget tartalmaz gombokat vezrl tmbben a Load utasts segtsgvel hozzuk ltre, illetve az Unload utastssal trljk. A globlisan deklarlt hny vltoz a parancsgombok szma-1 rtket tartalmazza:
Private hny As Integer

A form tltsekor engedlyezzk, illetve tiltjuk a tlt gombokat, valamint belltjuk az els szveges gomb feliratt:
Private Sub Form_Load() Form1.Caption = "Szvegkevers" hny = 0 Szveg(hny).Caption = "Szveg" & CStr(hny) Levesz.Enabled = False ' nem lehet trlni Kever.Enabled = False ' nem lehet keverni End Sub

j gombot helyezhetnk fel a Hozzad parancsgomb megnyomsval:


Private Sub Hozzad_Click() hny = hny +1 Levesz.Enabled = True Load Szveg(hny) Szveg(hny).Visible = True Szveg(hny).Top = Szveg(hny Szveg(hny Szveg(hny).Left = Szveg(hny Szveg(hny 'a szmll lptetse ' lehet trlni ' j gomb ltrehozsa ' a gomb lthat 1).Top + _ l).Height / 2 1).Left + _ 1).Width / 8

Szveg(hny).Caption = "Szveg" & CStr(hny) ' maximum 8 parancsgombot hozhatunk ltre if hny = 7 Then Hozzad.Enabled = False Kever.Enabled = True End Sub

Levehetnk gombot a Levesz parancsgomb megnyomsval:


Private Sub Levesz_Click() Unload Szveg(hny) hny = hny - 1 If hny = 0 Then Levesz.Enabled = False Kever.Enabled = False End If If hny < 7 Then Hozzad.Enabled = True End If End Sub ' trls 'a szmll belltsa ' nem lehet trlni

' lehet tlteni

A Zorder metdust hasznljuk a kevershez:


Private Sub Kever_Click() Dim i As Integer For i = 0 To hny sorrend

'

vletlenszer en vltozik a

Sz v e g ( i ) .ZOr d e r Cl nt (Rnd)
Next i Forrni.Refresh

End Sub

3.3.2.3. A vezrl k esemnyei A vezrl k esemnyeit a formhoz hasonlan esemnykezel eljrsokban dolgozhatjuk fel. Az esemnykezel eljrsok neve a vezrl objektum nevb l s az esemny nevb l tev dik ssze, a nv kt szava kztt pedig alhzs karakter ll:
Private Sub Commandl_Click() Beep End Sub Private Sub Commandl_KeyDown(KeyCode As Integer, Shift As Integer) ' ha az <X> billenty t nyomtk le If KeyCode = vbKeyX Then Commandl_Click End Sub

A vezrl k tbbsge rendelkezik egy n. alaprtelmezs szerinti (leggyakrabban hasznlt) esemnnyel. Ezen esemny kezel jt egyszer en megrhatjuk, ha a fejleszt i krnyezetben az egr bal gombjval ktszer kattintunk az rlapra helyezett vezrl n.

Nhny vezrl alaprtelmezs szerinti esemnye:


Vezrl elem ComboBox CommandButton Data PictureBox TextBox Timer Esemny Change Click Validate Click Change Timer

Azon vezrl k, amelyek birtokolhatjk az inputfkuszt, esemnnyel jelzik annak megszerzst (GotFocus), illetve elvesztst (LostFocus). A fkusszal rendelkez vezrl billenty zet- s karakteresemnyek ltrehozsval jelzi, ha a felhasznl billenty ket t le a billenty zeten. Billenty lenyomst a KeyDown, felengedst a KeyUp, mg a karakter keletkezst a KeyPress esemny jelzi. Mindhrom esemny kezelse a form azonos nev esemnyeivel megegyez mdon trtnik. A Windows rendszerben a felhasznli m veletek tbbsgt az egrrel vgezzk. Az egr mozgatst (MouseMove), az egr gombjainak lenyomst (MouseDown), illetve felengedst (MouseUp) egresemnyek formjban jelzi az a vezrl , melynek felletn az egrmutat elhelyezkedett az esemny keletkezsnek pillanatban. Mindhrom esemny kezelst a form egresemnyeihez hasonl mdon vgezhetjk. A fenti egresemnyek hatsra a Windows rendszer jabb esemnyeket hoz ltre, melyek kezelse sokkal egyszer bb. A bal egrgomb felengedsekor a Click esemny, mg a bal egrgombbal val duplakattintskor aDblClick esemny keletkezik. 3.3.2.4. A Frame (keret) vezrl A Frame vezrl segtsgvel bekeretezett vezrl csoportokat alakthatunk ki. A keret tglalapknt jelenik meg, amelynek bal fels sarknl egy fejlc {Caption) is lthat. A kereten bell elhelyezett vezrl k - a pozcijuk megtartsa mellett a keret mozgatsval - egyetlen elemknt mozgathatk. A keretbe thzott vezrl csak ltszlag tartozik a kerethez, a kereten bellre csak j vezrl ltrehozsval helyezhetnk el tovbbi vezrl ket. A keret vezrl neve (Name) s fejlce (Caption) a formra trtn felhelyezs utn automatikusan Framel lesz. A kereten bell klnbz vezrl elemeket helyezhetnk el:

3.16. bra A keret

3.3.3. Az alapvezrl k hasznlata Az albbiakban ttekintjk a felhasznli fellet kialaktshoz hasznlt alapvezrl kkel kapcsolatos ismereteket. 3.3.3.1. A Label (cmke) vezrl A cmke vagy felirat (Label) vezrl szvegek megjelentsre szolgl. Ennek megfelel en alapvet tulajdonsgai a feliratok elhelyezkedsvel, s a szveg megjelentsi mdjnak belltsval kapcsolatosak. A cmkket ltalban szvegmez k vagy ms vezrl k azonostsra, megjellsre hasznljuk, a vezrl fl vagy mell helyezve a cmkt. Mivel a cmke nem ablakos vezrl , ezrt nem lehet a fkuszt rhelyezni. A cmkk - a formokhoz hasonlan reaglhatnak az egresemnyekre (egrmozgatsra, egr gombjainak megnyomsra, kattintsra s dupla kattintsra.) A cmkk nhny tulajdonsga: A cmke szvegt a Caption tulajdonsg tartalmazza. A fejlcben az & (ampersand) mgtti karakter alhzva jelenik meg, ha a UseMnemonic tu lajdonsg True rtk . A BackStyle tulajdonsg rtke alaphelyzetben 1 (Opaque), ami azt jelli, hogy a cmke nem tltsz, mg 0 esetn tltsz lesz (Transparent).

A BorderStyle tulajdonsggal bellthatjuk azt is, hogy legyen-e kerete a cmknek vagy sem: Labell vezrl : nincs keret (0 - None) Labell vezrl : van keret (I - Fixed Single) A Font tulajdonsggal klnfle bet tpust, bet stlust s bet mretet lltha tunk be. Ha a cmke befoglal tglalapjt a kvnt mretre szthzzuk, a szveget vz szintesen igazthatjuk az Alignment tulajdonsg kzvetkez rtkeivel: 0 vbLeftJustify - balra, 1 vbRightJ ustify -jobbra, 2 vbCenter - kzpre igazt. A cmke mrete automatikusan a megjelentett szveg hosszhoz s magass ghoz igazodik, ha az AutoSize tulajdonsgot True rtkre lltjuk, False r tk esetn a cmke rgztett mret lesz.

A LABELl pldban klnbz rtkekre lltottuk a BackStyle s az Alignment rtkt.


Private Sub Form_Load() Labell.BackStyle = vbOpaque Labell.Alignment = vbLeftJustify Labell.BorderStyle =vbFixedSingle Label2.BackStyle = vbOpaque Label2.Alignment = vbCenter Labell.BorderStyle =vbFixedSingle Label3.BackStyle = vbOpaque Label3.Alignment = vbRightJustify Labell.BorderStyle =vbFixedSingle End Sub

3.17. bra Klnbz Label belltsok

3.3.3.2. A TextBox (szvegmez ) vezrl A TextBox egyszer szvegszerkesztsi feladatok elltsra hasznlhat.

3.18. bra A szvegmez

A szvegmez nek nincs felirata, a szvegmez neve (Name) alaprtelmezs szerint a megjelenik szvegszerkeszt -ablakban. Az albbiakban sszefoglaljuk a szvegmez tulajdonsgait: A Text tulajdonsg tartalmazza a szveget. A MultiLine tulajdonsg False rtke esetn a szvegmez egysoros, hoszszabb szveget begpelve esetn a vezrl automatikusan grgeti a szveget vzszintes irnyban. Ha a tulajdonsg rtkt True-ra lltjuk, akkor az ablak tbbsoros zemmdban m kdik, s a szveget a szkzknl trdeli. A ve zrl a szveget fgg legesen gy mozgatja, hogy az aktulis sor mindig az ablakban maradjon. Ha a Locked tulajdonsg rtke False, a szveg szerkeszthet , True esetn a szveg csak olvashat. Ha a MaxLength jellemz rtke 0, akkor nem korltozzuk a szvegszer keszt be rt szveg hosszt. Egysoros szvegszerkeszt esetben csak a me mria korltozza a berhat szveget, tbbsoros szvegszerkeszt esetn azonban maximlisan 32 KBjt lehet a szveg hossza. Ha nem nulla rtket adunk a MaxLength tulajdonsgnak, akkor ez a szm a szvegszerkeszt be rt karakterek maximlis szmt jelli. Az Alignment tulajdonsg belltsnak csak a MultiLine tulajdonsg True rtke mellett van rtelme, hogy a szveg 0 vbLeftJustify balra, / vbRightJustify jobbra vagy 2 vbCenterkzpre igaztva jelenjen meg.

Ha a szvegszerkeszt tbbsoros, akkor hasznlhatunk vzszintes, vagy fgg leges, illetve mindkt irny grget svot az ablakban, melyet a ScrollBar tu lajdonsg mellett llthatunk be. A futs kzben a tulajdonsg rtke csak le krdezhet . A tulajdonsg lehetsges rtkei: 0 vbSBNone Nincsenek grget svok (ez az alaprtelmezs). 1 vbHorizontal Csak vzszintes grget sv jelenik meg. 2 vbVertical Csak fgg leges grget sv jelenik meg. 3 vbBoth A vzszintes s a fgg leges grget sv is megjelenik. A vezrl ltal megjelentett szveg a PasswordChar string tartalmtl fgg. Ha a PasswordChar res string (""), akkor a vezrl a hagyomnyos mdon m kdik, klnben a bert karakter jelenik meg a gpelt szveg nyomn, ek kor jelsz begpelsre alkalmas. Ha van kivlasztott szveg, akkor a SelStart annak a szvegen belli kezd pozcijt tartalmazza 0-tl szmozva. Ha nincs kivlasztott szveg, akkor a kurzor pozicionlsra hasznlhat. A SelLength tulajdonsg a kivlasztott szveg hossznak lekrdezsre, illet ve belltsra szolgl. A SelText tulajdonsg tartalmazza a kivlasztott szveget. Ha rtket adunk a SelText tulajdonsgnak, akkor a vezrl ltal kivlasztott szveget a program az j szveggel vltja fel, ezt megoldsknt hasznlhatjuk szvegek beszr sra.

Pldaknt olvassunk be egy nagybet s 11 karakteres jelszt, majd jelezzk az elfogadst, illetve ha hibs a megads! A jelsz ablakban csillag karaktereket rjunk vissza! A feladat megoldst a JELSZ alkalmazs tartalmazza.

3.19. bra A jelsz megads

A form betltsekor meghvd Form_Load esemnykezel eljrsban a modul szintjn deklarlt Titok sztringet feltltjk a jelszval, valamint belltjuk a Jelsz szvegmez tulajdonsgait. A PasswordChar tulajdonsg rtkt '*' karakterre lltjuk. A

MaxLength a begpelhet szveg maximlis hosszt hatrozza meg. Az zenet szvegmez Locked tulajdonsgnak True rtkre lltsval az ablak tartalmt a felhasznl nem vltoztathatja meg.
Private Sub Form_Load() Left = 1440 Top = 1005 Jelsz.PasswordChar = "*" Jelsz.MaxLength = 12 zenet.Locked = True titok = "VISUAL BASIC" End Sub

Mr a "Jelsz" ablakba bert els karakter hatsra is meghvdik a Jelsz_Change esemnykezel eljrs, amely a Jelsz szvegmez ben megadott jelszt sszehasonltja a Titok vltoz tartalmval, majd az sszehasonlts eredmnyt megjelenti az "zenet" ablakban.
Private Sub Jelsz_Change() If UCase(Jelsz.Text) = titok Then zenet.Text = "Elfogadva !" Else zenet.Text = "Hibs jelsz !" End If End Sub

3.3.3.3. A CommandButton (parancsgomb) vezrl A parancsgomb olyan vezrl , amely a nyomgombok m kdst szimullja. Ha a felhasznl az egrrel megnyomja, akkor lenyomdik, s az egrgomb elengedsekor kiugrik eredeti helyzetbe. A felhasznl parancsgombok megnyomsval egyszer en kezdemnyezheti a klnfle rszfeladatok vgrehajtst, mint pldul prbeszdablak lezrsa {Kilps, Bezr, OK, Cancel, Yes, No stb.). A parancsgomb megnyomsakor vgrehajthat tevkenysget a megnyoms (Click) esemnyt feldolgoz esemnykezel eljrsban kell elhelyeznnk. A formra az els CommandButton vezrl t felhelyezve, a vezrl neve s felirata
Command1 lesz:

3.20. bra A parancsgomb

A nyomgombon val kett s kattintssal a Command1_Click esemnykezel eljrs vza automatikusan berdik a form kdszerkeszt ablakba:
Private Sub Commandl_Click() End Sub

Az itt megrt programrszlet a nyomgomb lenyomsakor automatikusan vgrehajtdik. Megfelel belltssal bizonyos billenty k lenyomsval is Click esemnyt hozhatunk ltre: Lehet sg van arra, hogy az inputfkuszt a <Tab> billenty vel egyik vezrl r l a msikra vigyk. Ennek a szablyozsra hasznlhat a Tablndex s a TabStop tulajdonsgok. A vezrl k automatikusan 0-tl kezdve egy sorsz mot kapnak a formon val elhelyezskor. Minden rlapon csak egy parancsgomb lehet, amelynek a Default tulajdons ga igaz rtk . A Default parancsgomb az <Enter> billenty megnyomsakor is Click esemnyt generl. Fontos, hogy a form betltsekor a Default nyom gomb Tablndex tulajdonsga 0 rtk legyen. A Cancel tulajdonsg hasonl a Default tulajdonsghoz, mivel minden rla pon csak egy parancsgomb lehet, amelynek Cancel tulajdonsga True rtk . Ebben az esetben az <Esc> billenty megnyomsa esetn a szban forg pa rancsgomb Click esemnye jn ltre. A nyomgomb kpet is tartalmazhat {Picture tulajdonsg), mely kpeket kln-kln definilhatjuk a gomb lenyomott (DownPicture) s inaktv (DisabledPicture) llapotra is. Az albbi pldaprogramban kijelezzk a parancsgomb GotFocus s LostFocus esemnynek keletkezst. {FKUSZ) A "Fkuszvizsgl" parancsgombon val kattintskor hvdik meg az albbi eljrs:
Private Sub Commandl_Click() Textl.Text = "Click" End Sub

A Command1_GotFocus esemnykezel eljrs akkor hvdik meg, amikor "Fkuszvizsgl" parancsgomb megkapja a fkuszt, pldul a bal egrgombot lenyomjuk rajta vagy a <Tab> billenty t hasznlhatjuk.
Private Sub Commandl_GotFocus() Textl.Text = "GotFocus" End Sub

A Commandl _LostFocus esemnykezel eljrs akkor hvdik meg, amikor "Fkuszvizsgl" parancsgomb elveszti a fkuszt, pldul, ha a szvegmez ablakn kattintunk az egrrel.
Private Sub Commandl_LostFocusi Textl.Text = "LostFocus" End Sub

3.21. bra A fkuszvizsgl 3.3.3.4. A CheckBox (jell ngyzet) vezrl A jell ngyzet vezrl {CheckBox) kt- vagy hromllapot lehet. A harmadik llapot kezelst csak sajt llapot-nyilvntartssal lehet programozni. A jell ngyzet alakja kikapcsolt llapotban egy res ngyzet, mg a bekapcsolt llapott a (pipa) jelzi. Hatrozatlan llapotban a jell ngyzet szrkv vlik:

A CheckBox osztly vezrl ket a rendszer a Checkl, Check2 stb. nvvel hozza ltre. A jell ngyzet vezrl ben a ngyzet s a szveg elhelyezkedst az Alignment tulajdonsg szablyozza. Az alaprtelmezs szerinti rtk (0 - vbLeftJustify) hatsra a ngyzet a szveg bal oldaln helyezkedik el. A tulajdonsgot (1 - vbRightJustify) rtkre lltva, a szveg a ngyzet jobb oldalra kerl.

A jell ngyzet Value tulajdonsga az albbi rtkeket veheti fel: 0 - vbUnchecked (jelletlen), / - vbChecked (jellt), 2 vbGrayed (szrke) lehet. Pldaknt jelezzk ki szveges formban a keretben elhelyezett ktllapot jell ngyzetek llapott! A feladat megoldst a JELOLO2 alkalmazs tartalmazza, melynek a kiindulsi ablaka:
3 . 2 2. bra Jell ngyzetek

A "Sznes/Fekete-Fehr" jell ngyzet kivlasztsakor meghvd Szin_Click esemnykezel eljrs a jell ngyzet llapott a mellette lv (Textl) ablakba rja.
Private Sub Szn_Click() If Szn.Value = vbChecked Then Textl.Text = "Sznes" Else Textl.Text = "Fekete-Fehr" End If End Sub

A "Mret:(kicsi, nagy)" jell ngyzet kivlasztsakor meghvd Mret_Click esemnykezel eljrs a jell ngyzet llapott a mellette lv (Text2) ablakba rja.
Private Sub Mret_Click() Select Case Mret.Value Case vbChecked Text2.Text = "kicsi" Case vbUnCheked Text2.Text = "nagy" End Select End Sub

A "Be/Ki" jell ngyzet kivlasztsakor meghvd esemnykezel eljrs a jell ngyzet llapott a mellette lv (Text3) ablakba rja.
Private Sub BeKi_Click() If BeKi.Value = vbChecked Then Text3.Text = "Be" Else Text3.Text = "Ki" End If End Sub

3.3.3.5. Az OptionButton (vlasztgomb) vezrl A vlasztgombok (OptionButton) kt llapottal rendelkeznek:

bekapcsolt llapotban a Value tulajdonsg True rtk , s a kr kzepn egy fekete pont jelenik meg. kikapcsolt llapotban a Value rtke False, a kr pedig res

Ha az Alignment tulajdonsgot l-re (vbRightJustify-ra) lltjuk, a szvegt l jobbra tallhat a gomb. Az alaprtelmezs a 0 (vbLeftJustify), vagyis a szvegt l balra helyezkedik el a gomb. Csoportos vlasztgomb A vlasztgombokat ltalban csoportba szervezve hasznljuk. Csoportos kialaktshoz az OptionButton vezrl ket a Frame vezrl felletre kell helyeznnk. A vlasztgombok csoportosthatk, s a jell ngyzettel ellenttben egyetlen csoportban csak egy vlasztgomb lehet bekapcsolt llapotban. Ha a csoportban bekapcsolunk egy msik vlasztgombot, akkor az addig bekapcsolt gomb kikapcsolt llapotba kerl. Ha nem hasznljuk a Frame vezrl t, akkor a form csoportost. Az albbi pldban kt klnll csoportba szervezett vlasztgombokat kezelnk. A csoporthoz kapcsold szvegmez ben kijelezzk a csoport bekapcsolt vlasztgombjnak nevt. (VALASZT2)

3.23. bra Csoportos vlasztgombok

A vlasztgombokon val kattintskor meghvd esemnykezel eljrsokban megjelentjk a bekapcsolt gombot azonost szveget. Pldul, a "Gomb1" esetben:
Private Sub Gombl_Click() If Gombi Then Textl.Text = "Csoportl: Gomb1" End If End Sub

3.3.3.6. A ListBox (lista) vezrl A listavezrl t (ListBox) egy egsz szmbl tev dik a formra helyezve, az objektum neve "List" szbl s ssze.

A listavezrl k string tpus elemeket trolnak s jelentenek meg. A formra helyezett listavezrl nhny fontos tulajdonsgnak alaprtkei: Tulajdonsg Name Columns List Sorted Style rtke Listl
0 -

False Standard

Lersa a listaobjektum neve (az els listaablak) esetn, a listaablak egyetlen oszlopot tartalmaz, a lista kezd elemei itt is megadhatk, a lista elemei nem rendezettek, a listaablak sztringknt jelenti meg az sszes ttelt.

List tulajdonsg legrdthet ablakban a listba elemeket vihetnk fel a <Ctrl>+ <Enter> billenty kkel zrva a sorokat.

3.24. bra Listaablak

Az albbiakban sszefoglaljuk a listavezrlre vonatkoz tulajdonsgokat: A Columns rtke a tbboszlopos listaablakban a vzszintes grgets nlkl lthat oszlopok szmt hatrozza meg. A List tartalmazza a lista elemeit. A ListIndex jelzi, hogy melyik elemet vlasztottk ki, -1 esetn nincs kiv lasztott elem. (az els elem sorszma 0)

A MultiSelect belltsval Simple (1) esetn egy ttel, Extended (2) esetn egynl tbb ttel is kivlaszthat a listaablakbl. A <Ctrl> billenty s az egr bal gombjnak segtsgvel tbb nem egyms melletti ttelt is kivlaszt hatunk, a <Shift> billenty s az egr bal gombjval pedig a kezd - s vg ttelek kztti ttelsor is kijellhet . Alaphelyzetben nincs tbbszrs kivlaszts. A Selected logikai tmb tartalmazza a kivlasztott elemeket. A Sorted tulajdonsg hatrozza meg, hogy a listaablakban rendezettek-e az elemek. False az alaprtelmezs, True esetn pedig az elemek rendezettek.

A listavezrl k elemei string tpusak. Az elemek trolsra a List sztringtmb tulajdonsg szolgl. A tmb elemei nulltl kezd d sorszmot kapnak, a listaelemek szmt pedig a ListCount integer tpus tulajdonsg trolja. A listhoz j elemet adhatunk hozz a
lista.Addltem elem[, index]

metdussal. Az index megadsval az elem az adott index pozcira kerl, ha pedig elhagyjuk az index megadst, akkor a lista vgre. Adott sorszm elem a Removeltem metdussal trlhet , mg az sszes elemet a Clear metdus hvsval tvolthatjuk el. A Newindex tulajdonsg az utoljra listba tett eleme indext tartalmazza. Az ItemData tmb lehet v teszi, hogy a lista elemeihez kiegszt numerikus (egsz) adatot kapcsoljunk. Az albbi pldban egy tbbszrs elemkivlaszts s egy egyszeres kivlaszts listaablak egymssal kommunikl. (LISTAI)

3.25. bra Egyszeres s tbbszrs kivlasztsa listaablakok

A "Ttelek 1" listra vonatkoz tbbszrs kivlasztst jelent MultiSelect tulajdonsgot Extended-re, a "Ttelek 2" lista esetn pedig az egyszeres kivlasztst jelent None rtkre lltjuk. A "Ttelek J" lista ttelei nem rendezettek, (a Sorted tulajdonsga False, - ami az alaprtelmezs). A "Ttelek 2" lista elemei rendezettek lesznek, mivel a Sorted tulajdonsgot True-ra lltottuk a fejleszts sorn. A Form_Load esemnykezel eljrsban belltjuk az ablak bal fels sarknak koordintit, valamint a "Ttelek 1" listba tesznk nhny ttelt.
Private Sub Form_Load() ' a "Ttelek 1" lista feltltse Ttelekl.List(0) = "D. ttel" Ttelekl.List(1) = "X. ttel" Ttelekl.List(2) = "C. ttel" Ttelekl.List(3) = "A. ttel" Ttelekl.List(4) = "k. ttel" ' az ablak bal fels sarknak koordinti Left = 1440 Top = 1005 End Sub

A "Hozzad" parancsgomb megnyomsakor a szvegmez ben megadott szveget a "Ttelek /" listaablakba helyezzk. Az esemnykezel eljrs csak olyan ttelt helyez a listba, amely mg nem szerepelt benne.
Private Sub HozzAd_Click() Dim i As Integer, j As Integer j = 0 If Len(Ttel.Text) > 0 Then For i = 0 To Ttelekl.ListCount - 1 ' az j ttel keresse a listban If Ttelekl.List(i) = Ttel.Text Then j = 1 End If Next i If j = 0 Then ' ha az j ttel nincs a listban, ' az j ttel a lista vgre kerl Ttelekl.Addltem Ttel.Text End If End If Ttel.Text = "" Ttel.SetFocus End Sub

Az "ssz.es" parancsgomb megnyomsakor a "Ttelek 7" lista teljes tartalmt tmsoljuk a "Ttelek 2" listba.

Private Sub sszes_Click() Dim i As Integer 1 a "Ttelek 2" lista eleminek trlse Ttelek2.Clear For i = 0 To Ttelekl.ListCount - 1 ' a "Ttelek 1" lista minden elemnek tmsolsa a "Ttelek 2" listba Ttelek2.Addltem Ttelekl.List(i) Next i Ttel = "" Ttel.SetFocus End Sub

Az "Vlaszt" parancsgomb megnyomsakor a "Ttelek /" lista kivlasztott elemeit tmsoljuk a "Ttelek 2" listba.
Private Sub Vlaszt_Click() Dim i As Integer ' a "Ttelek 2" lista elemeinek trlse Ttelek2.Clear 1 a "Ttelek 1" lista kivlasztott elemei 1 a "Ttelek 2" listaablakban is megjelennek For i = 0 To Ttelekl.ListCount - 1 If Ttelekl.Selected(i) Then Ttelek2.Addltem Ttelekl.List(i) End If Next i Ttel = " " Ttel.SetFocus End Sub

A "Trls" parancsgomb megnyomsakor a "Ttelek 7" lista teljes tartalmt trljk.


Private Sub Trlsl_Click() ' a "Ttelek 1" listaablak trlse Ttelekl.Clear Ttel = " " Ttel.SetFocus End Sub

A "Trls >>" parancsgomb megnyomsakor a "Ttelek 2" lista teljes tartalmt trljk.
Private Sub Trls2_Click() ' a "Ttelek 2" lista elemeinek trlse Ttelek2.Clear Ttel = "" Ttel.SetFocus End Sub

3.3.3.7. A ComboBox (kombinlt lista) vezrl A ComboBox kombinlt lista egy TextBox szvegmez s egy ListBox lista sszeptsb l szrmazik. Nhny fontos jellemz je: Futsi id ben az Addltem metdussal ttelt adhatunk a listhoz, a RemoveItem metdussal pedig ttelt trlhetnk a listbl. A List, a Listlndex s a ListCount tulajdonsgokat a lista vezrl hz hasonl an hasznlhatjuk. Hromfle kombinlt lista kzl vlaszthatunk a Style tulajdonsg rtknek belltsval: Az egyszer kombinlt lista (vbComboSimple - 0): listaablak mindig megjele nik, s a szvegmez ablak tartalma mdosthat. Jellemz je, hogy rgztett listamrettel rendelkezik, s nem lehet becsukni. A legrdl kombinlt lista (vbComboDropdown - 1) : m kdse annyiban tr el az egyszer kombinlt listtl, hogy a listaablak nem jelenik meg automatikusan. A listaablak megjelenthet a szvegmez oldaln tallhat le nyl nyomgombon val kattintssal. A lenyl lista {vbComboDropdownList - 2): annyiban tr el a legrdl kom binlt listtl, hogy a szvegmez tartalma csak listaelem vlasztsval mdo sthat. ltalban akkor hasznljuk, ha a felhasznlnak csak adott elemek kzl kell vlasztania. A kombinlt lista vezrl (ComboBox) Combol nven jelenik meg az rlapon. Alaprtelmezs szerint a Name s a Text tulajdonsgok rtke Combol, a Style rtke pedig vbComboDropdown. Az albbi, egyszer , kombinlt lista m kdst bemutat pldaprogramban (3.26. bra) lehet sg van elemek hozzadsra (Hozzad), trlsre (Tteltrls), illetve az sszes elem trlsre (Trls). (COMBO0)

3.26. bra Kombinlt lista

A Form_Load esemnykezel eljrsban feltltjk a kombinlt listt s trljk a szvegmez tartalmt.


Private Sub Form_Load() Ttelek.List(0) = "1. ttel" Ttelek.List(1) = "2. ttel" Ttelek.Text = "" End Sub

A "Hozzad" parancsgomb megnyomsakor a "Ttelek" szvegmez be rt szveget a listhoz, amennyiben mg nem szerepelt benne.
Private Sub Hozzad_Click() Dim Tallt As Boolean, i As Integer Tallt = False ' ha a szvegmez nem res If Len(Ttelek.Text) > 0 Then For i = 0 To Ttelek.ListCount - 1 1 az j ttel keresse a listban If Ttelek.List(i) = Ttelek.Text Then Tallt = True End If Next i If Not Tallt Then ' ha nincs ilyen ttel, az j elem 1 bekerl a listba Ttelek.Addltem Ttelek.Text End If End If Ttelek.Text = "" Ttelek.SetFocus End Sub

A "Tteltrls" parancsgomb megnyomsakor a kijellt listaelemet a Removeltem metdussal trljk. (A kijellt ttel indext a Itemlndex tulajdonsg tartalmazza).
Private Sub Tteltrls_Click() Dim Ind As Integer Ind = Ttelek.Listlndex If Ind >= 0 Then ' ha van kivlasztott ttel, azt trljk Ttlek.Removeltem Ind End If Ttelek.Text = "" Ttelek.SetFocus End Sub

A "Trls" parancsgomb megnyomsakor trljk a kombinlt lista elemeit.


Private Sub Trls_Click() Ttelek.Clear ' fkusz rlltsa a kombinlt listra Ttelek.SetFocus End Sub

.3.3.8. A ScrollBar (grget sv) vezrl k A grget svban egy tglalap alak csszka helyezkedik el, melyet az egr s a billenty zet segtsgvel hromflekppen mozgathatunk. Els lpsknt az egrrel a csszkt megragadjuk, s tetsz leges pozciba mozgatjuk. A msik kt mdszerrel a csszka adott lpsnagysggal mozgathat. Ktfle lpsnagysg ltezik, egy kisebb (soronknti) s egy nagyobb (oldalanknti), melyek mrete bellthat. A grget sv mindkt vgn egy-egy kifel mutat nyl tallhat, amelyen val kattints a soronknti lpsnagysgnak megfelel en a csszka nyl irnyba trtn elmozdulst eredmnyezi. Ugyanarre az eredmnyre vezet a nyl billenty k megnyomsa is. Ha a sv belsejben kattintunk vagy a PgUp, PGDn gombokat hasznljuk, az oldalanknti lpsnagysgnak megfelel en mozdul el a csszka. A grget sv rendelkezik kezd - s vgpozcival, amelyekhez viszonytva szmtja ki a rendszer a csszka pozcijt:

A grget sv nhny fontos tulajdonsga: Min a grget sv kezdeti pozcija (alaprtke 0). Max a grget sv vgpozcijhoz tartoz rtk (alaprtke 32767). SmallChange kis lpsnagysggal (soronknt) mozog a csszka (alaprtke 1 ). LargeChange nagy lpsnagysggal (oldalanknt) mozog a csszka (alapr tke 1). Value a csszka aktulis pozcijt trolja. A grget svok a csszka pozcijnak megvltoztatst Change esemny jelzi. Az albbi pldban a vzszintes s a fgg leges grget svok Change esemnyeit kezeljk. (SCROLL1) A from betltsekor belltjuk a ktfle grget sv m kdsi paramtereit.
Private Sub Form_Load () ' a vzszintes grget sv belltsa HScrolll.Min = 0 HScrolll.Max = 50 HScrolll.SmallChange = 1 HScrolll.LargeChange = 10

' a fgg leges grget sv belltsa VScrolll.Min = 0 VScrolll.Max = 100 VScrolll.SmallChange = 2 VScrolll.LargeChange = 20 End Sub

3.27. bra Csszkk hasznlata

A "Vzszintes grget sv" (HScrolll) grget sv m kdtetsekor meghvd HScrolU Change esemnykezel eljrsban s a VScrolll_Change esemnykezel eljrsban kijelezzk a csszka pozcijt:
Private Sub HScrolll_Change() Text2.Text = CStr(HScrolll.Value) End. Sub Private Sub VScrolll__change () Text4.Text = CStr(VScrolll.Value) End Sub

3.3.3.9. Menk
A legtbb Windows alkalmazs menket hasznl a programok klnfle rszfeladatainak vgrehajtshoz. Az ablakoz krnyezetben egy menpont kivlasztsa hasonl az egrkattintshoz: mivel ezek mind felhasznl ltal kezdemnyezett esemnyek Az alkalmazs menpontjai almenket is tartalmazhatnak. Egy menpont kivlasztsa tbbfle mdon trtnhet: Az <F10> funkcibillenty vel a f menbe lphetnk, majd a kurzorvezrl blenty kkel mozoghatunk az almenkn, s az <Enter> billenty vel vlaszt hatjuk ki a megfelel alment. Az <Alr> billenty s a menpont alhzssal jellt bet jnek egyttes let svel, majd az almenpont alhzsval jellt bet jnek letsvel.

(Ha a menelem nevben valamelyik bet el az & karaktert gpeljk, akkor az a bet alhzva jelenik meg, s a menelem kivlaszt bet knt funkcio nl.) A menponthoz rendelt gyorstbillenty k megnyomsval. A bal oldali egrgombbal a menponton val kattintssal.

A Visual Basic rendszerben a ment is vezrl elemknt kezelhetjk. Menk ltrehozsa Pldaknt olyan menrendszert terveznk, melynek f menje a Men, kt almenje: a "Szveg rsa" s a " Kilps". A "Szveg rsa" menpont is kt almenvel rendelkezik. A "Kisbet s szveg" menponthoz az <FJ> gyorstbillenty , a "Nagybet s szveg" menponthoz pedig az <F2> gyorstbillenty tartozik. (MENU0) A Visual Basic fejleszt i rendszerben a Tools\Menu Editor... menpont kivlasztsakor, illetve vagy a <Ctrl+E> gyorstbillentyk lenyomsnak hatsra megjelenik a menszerkeszt ablaka. A Caption tulajdonsgnak az &Men s a Name tulajdonsgnak szintn a Men azonostt adjuk. I s a (balra nyl) gomb megnyomsval belltjuk az almen helyt, majd a Caption sorba berjuk a "&Szveg rsa" szveget, majd a Name tulajdonsgnak a Szveglrs azonostt adjuk. s a (jobbra nyl) gomb megnyomsval belltjuk a kvetkez almen helyt. A "Kisbet s szveg" a menponthoz az <F1> gyorstbillentyt rendeljk. A gyorstbillenty menponthoz val rendelse a ShortCut tulajdonsghoz tartoz legrdl listaablakbl trtn vlasztssal vgezhet el. A kivlasztott gyorstbillenty a menpont mellett is megjelenik. A "Nagybet s szveg" menponthoz pedig az <F2> gyorstbillenty t rendeljk. s a (balra nyl) gomb megnyomsval folytathatjuk az el z almen felptst, s berjuk a "&Kilps" mencmkt s a Kilps azonostt.

3.28. bra A mentervez

A Run\Start menpont kivlasztsval futtathatjuk a programot.

3.29. bra A men

Termszetesen a program a kivlasztott menpontokra nem reagl, hiszen mg nem rtunk hozz esemnykezel eljrsokat. Kilpni is csak a Windows rendszerben szoksos mdon tudunk (lezr gombra val kattints, a vezrl men segtsgvel), vagy a vezrl men gombon.

A fejleszt rendszerben a "Kisbet s szveg" menponton kattintva megjelenik a Kisbet s_Click esemnykezel eljrs, ahol belltjuk a szveg aktulis pozcijt (a ScaleMode alaprtelmezsknt vbTwips), majd a Print metdussal kirjuk a kisbet s szveget.
Private Sub Kisbet s_Click() 1 a kirs pozcija CurrentX = 500 CurrentY = 500 Print "visual basic" End Sub

Hasonlan megrjuk a "Nagybet s szveg" menpont Nagybet s_Click esemnykezel eljrst.


Private Sub Nagybet s_Click() ' a kirs pozcija CurrentX = 500 CurrentY = 1000 Print "VISUL BASIC" End Sub

Mdosthatjuk a megtervezett ment gy, hogy a "Kilps" menpont el vlasztvonalat tegynk be. Ehhez elindtjuk a menszerkeszt t, kivlasztjuk azt a menpontot amely el be szeretnnk szrni az vlasztvonalat, majd megnyomjuk az Insert {Beszrs) gombot. Ezt kvet en (mnusz) jelet runk az res menhelyhez tartoz Caption mez be, a Name tulajdonsgot pedig tetsz leges rtkre lltjuk. Felbukkan menk Menket felbukkan {popup) menknt is megjelenthetnk, ehhez nincs ms dolgunk, mint a PopupMenu metdust a men azonostjval {Men) s a felbukkans helynek X,Y koordintival aktivlni. Az albbi {POPUP) pldaprogramban a felbukkan men hrom menponttal rendelkezik:
Els Msodik Trls

A Tools\Menu Editor... menpontot kivlasztva el szr egy f ment hozzuk ltre, pldul Men nven, melynek Visible tulajdonsgt nem kell kivlasztani, hogy a men ne legyen lthat.

Ezt kvet en elksztjk az "Els " menpontot a Caption s a Name tulajdonsg belltsval, valamint a jobbra nyl gomb megnyomsval. Ennek a menpontnak a Visible tulajdonsgt a lthatsg miatt ktelez en ki kell vlasztani, klnben a menben nem jelenik meg. Hasonlkppen ltrehozzuk a tbbi menpontot is.

3.30. bra A felbukkan men ksztse

Kilpve a Men Editor...-bl a Form1 ablakban a ltrehozott men nem jelenik meg. A pldban a jobb egrgomb felengedsekor a PopupMenu metdust a felbukkan men azonostjval (Men) s az egr X, Y koordintival hvjuk, gy a felbukkan men abban a pozciban fog megjelenni.
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu Men, , X, Y End Sub

A kdszerkeszt ablak objektumlistjbl sorra kivlasztjuk a felbukkan men menpontjait kpvisel objektumokat s a Click esemnyt, majd megrjuk az esemnykezel eljrsokat. A felbukkan menb l az "Els " menpont kivlasztsakor az "Els " szveg jelenik meg.

Private Sub Els _Click() 1 a kirs pozcijnak belltsa CurrentX = 1 0 CurrentY = 10 ' szveg kirsa Print "Els " End Sub

A "Msodik" menpont kivlasztsakor a "Msodik" szveget a (10,30) koordintj pontban jelentjk meg:
Private Sub Msodik_Click() 1 a kirs pozcijnak belltsa CurrentX = 1 0 CurrentY = 3 0 1 szveg kirsa Print "Msodik" End Sub

3.3J. bra A felbukkan men

A "Trls" menpont kivlasztsakor meghvjuk a Cls metdust, amely az ablak trlst eredmnyezi:
Private Sub Trls_Click() Refresh End Sub

3.4. ActiveX-vezrl k hasznlata


Ebben a rszben bemutatunk nhny ActiveX-vezrl t, amelyek felhasznlsval az alapvezrl kre pl felhasznli fellet lehet sgei egyszer en kib vtethet k. 3.4.1. A RichTextBox (b vtett szvegmez ) vezrl A RichTextBox ActiveX szvegszerkeszt vezrl m kdse hasonl a TextBox szvegmez m kdshez, azonban a RichTextBox szvegmez tbb lehet sget tartalmaz: hasznlatval a szoksosnl tbb szvegformzsi lehet sg ll rendelkez snkre, alkalmas 64 Kbjtnl nagyobb mret szvegek kezelsre, tartalmt llomnybl beolvashatjuk (LoadFile), illetve lemezre menthetjk (SaveFile) mind ASCII, mind pedig RTF formtumban, a teljes szveget vagy a kivlasztott szveget a SelPrint metdussal kirathat juk, a RightMargin tulajdonsggal belltjuk az ablakban lv szveg jobb oldali margjt. Pldaknt (RTEXT1) a RichTextBox felhasznlsval tbbsoros szveget trolunk s kezelnk (3.32. bra).

3.32. bra A RichTextBox szvegszerkeszt

A form betltsekor belltjuk a RichTextBoxl szvegmez jobb margjt, s ablakot szveggel tltjk fel.

Private Sub Form_Load() ' a jobb marg belltsa RichTextBoxl.RightMargin = 2 ' a szvegszerkeszt szveggel val feltltse RichTextBoxl.Text = "ComputerBooks "Kis- s Nagykereskedelmi Bolt "1126 Budapest, "Tartsay Vilmos utca 12." End Sub

" & _ " & _ " & _

Az "r" parancsgomb megnyomsakor a "Szveg" szvegmez tartalmt trjuk a RichTextBoxl vezrl be.
Private Sub r__Click() RichTextBoxl.Text = Textl.Text Textl.Text = Textl.SetFocus End Sub

Az "Olvas" parancsgomb megnyomsakor a RichTextBoxl vezrl tartalmt tmsoljuk a "Szveg" szvegmez be.
Private Sub 01vas_Click() Textl.Text = RichTextBoxl.Text Textl.SetFocus End Sub

Az "Szveghossz" parancsgomb megnyomsakor a RichTextBoxl vezrl ben trolt szveg karaktereinek szmt megjelentjk a "Szveg" szvegmez ben.
Private Sub Szveghossz_Click() Textl.Text = CStr(Len(RichTextBoxl.Text)) Textl.SetFocus End Sub

Az "Trls" nyomgomb megnyomsakor trljk a vezrl k tartalmt, s a fkuszt a "Szveg" szvegmez re lltjuk.
Private Sub Trls_Click() RichTextBoxl.Text = "" Textl.Text = "" Textl.SetFocus End Sub

3.4.2. A MaskEdBox (adatbeviteli sablon) vezrl A MaskEdBox vezrl lehet v teszi az adatok minta (sablon) szerinti beolvasst. A maszkban elhelyezett # jelek hatrozzk meg a berand karakterek helyt s szmt. A tagolst pedig pldul - (kt jel) vagy I (fgg leges el vlasztvonal) elhelyezsvel adhatjuk meg. Az adatbeviteli maszkot a vezrl Mask tulajdonsgban kell megadnunk, pldul dtum bevitelhez az albbi maszkot hasznlhatjuk:
MaskEdBoxl.Mask = "####-##-##"

A MASKED alkalmazsban adatbeviteli sablont hasznlunk szemlyi adatok bevitelhez.

3.33. bra A MaskEdit hasznlata

A form betltskor feltltjk a szvegmez ket belltjuk a maszkokat.


Private Sub Form_Load() ' aZ adatok betltse Textl.Text = "KISS ANTNIA" Text3.Text = "BUDAPEST" Text2.Text = "KAKUKK UTCA" Text5.Text = "14/B" ' mask belltsa MaskEdBoxl.Mask = "####-##-##" MaskEdBoxl.Text = "2003-05-01" MaskEdBox3.Mask = "####" MaskEdBox3.Text = "1234" MaskEdBox2.Mask = "#-###-####" MaskEdBox2.Text = "3-123-4567" End Sub

3.4.3. Az UpDown (lptet ) vezrl A lptet vezrl adott kezd - s vgrtk kztt egyesvel nvel, illetve cskkent egy rtket, a nyilakon val kattintsnak megfelel en. A vezrl fontosabb tulajdonsgai: A BuddyControl tulajdonsg segtsgvel hozzrendelhetjk a lptet vezr l t egy msik vezrl hz, pldul szvegmez hz (Textl). Ha az AutoBuddy tulajdonsgnak True rtket adunk, akkor automatikusan az a vezrl kapcsoldik a lptet vezrl hz, amely a tabultorsorrendben kzvetlenl a lptet el tt ll. A SyncBuddy tulajdonsg True rtke esetn az UpDown vezrl Value rt ke taddik & BuddyControl tulajdonsgban megadott vezrl nek. Az Alignment tulajdonsg helyezi a lptet vezrl t a szvegszerkeszt jobb (1 - cdAHgnmentRighf), illetve bal oldalra (0 - cc2AlignmentLeft). Az Orientation tulajdonsg belltja, hogy a vezrl fgg leges (0 - cdOrientationVertical) (ez az alaprtelmezs), vagy vzszintes (1 - cdOrientationHorizontal) elhelyezkeds legyen. A Min s a Max tulajdonsgok a lptett rtk hatrainak belltsra szolgl nak. Ha a vezrl a lptets sorn elri a maximumot, akkor lell. Ha azt akarjuk, hogy ellr l szmlljon, akkor a Wrap tulajdonsgot True rtkre kell llta ni. A lptet vezrl esetn a fenti tulajdonsgok az albbi alaprtkkel rendelkeznek: az Orientation cc2OrientationVertical (fgg leges), a Min rtke 0, a Max rtke 10 s a Wrap rtke False. Pldaknt fgg leges s vzszintes lptet vezrl ket hasznlunk, melyek rtkt szvegmez ben jelezzk ki! (UPDOWN1) A kijellt UpDown3 fgg leges lptet vezrl hz hozzkapcsoljuk a Text3 szvegmez t a BuddyControl tulajdonsg segtsgvel (3.34. bra). Hasonlan az UpDown2 vezrl t s a Text2 szvegmez bal oldalhoz kapcsoljuk.

3.34. bra Az UpDown vezrl hasznlata

A form betltsekor a lptet vezrl knek s a kijelzsre szolgl szvegmez nek adunk kezd rtket.
Private Sub Form_Load() 1 a szvegmez k csak olvashatk Textl.Locked = True Text2.Locked = True Text3.Locked = True 1 az UpDownl vezrl alapllapota UpDownl.Min = 0 UpDownl.Max = 1 0 ' a Textl szvegmez alapllapota Text1.Text = CStr(UpDownl.Min) UpDownl.Value = UpDownl.Min ' az UpDown2 vezrl alapllapota UpDown2.Min = 0 UpDown2.Max = 2 0 UpDown2.Value = UpDown2.Min ' UpDown3 vezrl alapllapota UpDown3.Min = 0 UpDown3.Max = 7 UpDown3.Value = UpDown3.Min End Sub

Az UpDownl vezrln val kattintskor meghvd UpDownl_Change esemnykezel eljrsban a vezrl pozcijt az "1. lptet vezrl " felirat szvegmez be rjuk.
Private Sub UpDownl_Change() ' az UpDownl vezrl llapotnak kijelzse Textl.Text = UpDownl.Value End Sub

3.4.4. A Slider (csszka) vezrl A Slider ActiveX-vezrl egy tglalapbl s egy jelz b l ll. A tglalap a bellts hatrait definilja, s a jelz vel egytt a vezrl aktulis rtkt mutatja. Tulajdonkppen ez egy rtkvltoztat eszkz, amit ktflekppen is m kdtethetnk: megragadjuk a jelz t s mozgatjuk, a tglalap rzkeny terletn kattintunk, programbl vezrelve. A Slider lnyeges tulajdonsgai: A Min s a Max tulajdonsgok segtsgvel az als s a fels rtkhatrt llt hatjuk be. Alaprtelmezs szerint a Min rtke 1 s nMax rtke 10. A TickFrequency tulajdonsggal a osztskzt definilhatjuk. A SelectRange tulajdonsg True rtkre lltsa utn egy tartomnyt jellhe tnk ki a csszkn. A tartomny kezdett a SelStart a tartomny tulajdonsg definilja, mg a SelLength tulajdonsggal a tartomny hossza adhat meg. (A tartomnyt kk sv jelzi a csszkn.). A TickStyle tulajdonsg meghatrozza, hogy a jelz merre mutasson, illetve a tglalap oldaln hol legyenek az osztsok: o A tulajdonsg alaprtke sldBottomRight (0) - ekkor a jelz a tglalap jobb felre mutat, o sldTopLeft (1) belltsnl a jelz a tglalap bal felre mutat, o sldBoth (2) esetn a tglalap minkt oldaln van oszts s a jelz nek nincs cscsa, o sldNoTicks (3) nincs oszts. Az Orientation tulajdonsg rtke alaprtelmezs szerint sldHorizontal (0), vagyis a tglalap vzszintes fekvs , a sldVertical (1) pedig a fgg leges elhe lyezkedst rja el . A Value tulajdonsga tartalmazza a jelz aktulis pozcijhoz tartoz rt ket. Alaprtelmezs szerint a jelz egyesvel mozog a kurzorbillenty kkel vez relve. A lpsnagysgot mdosthatjuk a SmallChange tulajdonsg bellt sval. A LargeChange tulajdonsg rtke hatrozza a <PgUp>, illetve a <PgDown> billenty kkel val vezrls, illetve az egrkattints lpskzt.

A csszka nhny metdusa: GetNumTicks metdussal lekrdezhet a Max s a Min pozcik kztti osz tsok szma. A ClearSel metdussal trlhetjk a kijellt tartomnyt a csszkn, a SelStart tulajdonsg felveszi a Value tulajdonsg rtkt, s a SelLength jellemz r tke 0 lesz. A csszkn val egrkattints hatsra a Click esemny, mg a csszka mozgatsakor a Scroll esemny keletkezik, amely megel zi a Click esemny keletkezst. A vzszintes s fgg leges csszka hasznlatt a SLIDER1 alkalmazs szemllteti, melynek kiindul ablaka a 3.35. brn lthat.

3.35. bra Az Slider vezrl k hasznlata

A BellitTrl eljrsban a Slider vezrl k Value tulajdonsgt a paramterknt tadott rtkre lltjuk, s a kijelzsre szolgl szvegmez k tartalmt trljk.
Public Sub BelltTrl(rtk) Slider vezrl k belltsa Sliderl.Value = rtk Slider2.Value = rtk Slider3.Value = rtk Slider4.Value = rtk Slider5.Value = rtk Slider6.Value = rtk
1

' a szvegmez k tartalmnak trlse Textl.Text = "" Text2.Text = "" Text3.Text = "" ' a szvegmez k csak olvashatak Textl.Locked = True Text2.Locked = True Text3.Locked = True End Sub

A form betltsekor a Minimum_Click eljrs hvsval alaphelyetbe lltjuk a csszkkat s a szvegmez ket. A "Minimum" parancsgomb megnyomsakor az sszes Slider vezrl Value tulajdonsgt a minimumra (0) lltjuk, s ezt az rtket kijelezzk a "Minimum" gombhoz tartoz szvegmez ben (Text1).
Private Sub Minimum_Click() BelltTrl (0) Textl.Text = "0" End Sub

A "Kzp" parancsgomb megnyomsakor minden csszka Value tulajdonsgt a kzprtkre (5) lltjuk, amit a "Kzp" gombhoz tartoz szvegmez be (Text2) is berunk.
Private Sub Kzp_Click() BelltTrl (5) Text2.Text = "5" End Sub

A "Maximum" parancsgomb megnyomsakor az sszes Slider vezrl Value tulajdonsgt a maximumra (10) lltjuk, s a pozcihoz tartoz rtket a "Maximum" gombhoz tartoz szvegmez be (Text3) is berjuk.
Private Sub Maximum_Click() BelltTrl (10) Text3.Text = "10" End Sub

3.4.5. A ProgressBar (munkafolyamat-kijelz ) vezrl A ProgressBar ActiveX-vezrl hosszadalmas mvelet menetnek kijelzst teszi lehet v. A ProgressBar egy tglalap alak terlet, amely balrl jobbra tlt dik, s amit hosszabb m velet esetn ciklusban vagy httrmveletknt is hasznlhatunk.

A vezrl fontosabb tulajdonsgai: A Value tulajdonsg szolgl a munkafolyamat-kijelz alapllapotnak bell tsra, valamint a futsi id ben nyomon kveti az rtknvekedst. A Min s a Max tulajdonsgok a Value tulajdonsg minimlis s maximlis rtkhatrt definiljk. Az Align tulajdonsg rtkt l fgg en: o vbAlignNone (0) nincs rgztett belltsa, o vbAlignTop (1) a form tetejn, o vbAlignBottom (2) a form aljn, o vbAlignLeft (3) a form bal oldaln, o vbAlignRight (4) a form jobb oldaln jelenik meg. Az alaprtelmezs szerinti belltsok:
Tulajdonsg Min Max Align Name rtk 0 100 vbAlignNone ProgressBarl

A vezrl m kdst a PROGR alkalmazs szemllteti. Az "Indt" parancsgomb megnyomsakor ProgressBarl vezrl ciklusvltoz rtkvel nveljk. Value rtkt az i

Private Sub Indt_Click() Dim i As Integer, j As Integer, k As Integer For i = 1 To 100 For j = 1 To 5000 DoEvents ' nem foglaljuk le a rendszert k = i + j ' m veletvgzs Next j ProgressBarl.Value = i Textl.Text = CStr(i) Next i End Sub

3.36 bra Az ProgressBar jelzi a folyamat llapott

3.4.6. Az MSFlexGrid (rugalmas tblzat) vezrl Az alkalmazs adatainak tblzatos megjelentsvel ltalban ttekinthet bb felhasznli felletet hozhatunk ltre. A Visual Basic 6 kt "tblzatos" ActiveX-komponenst is tartalmaz: a DBGrid vezrl egy adatkapcsolt tblzat, amit els sorban adatbzis-tblk hoz hasznlunk, az MSFlexGrid vezrl egyarnt alkalmas adatbzis-tblk s kznsges adatok tblzatos megjelentsre. Az MSFlexGrid tblzat sorainak szmt a Rows, az oszlopainak szmt pedig a Cols tulajdonsg tartalmazza. A sorok s az oszlopok fejlceknt hasznlt rgztett cellk szmt a FixedRows s a FixedCols tulajdonsgok hatrozzk meg (mindkt jellemz alaprtke 1). A tblzat oszlopainak szlessgt a RowHeight() tmb, a sorok magassgt pedig a ColWidth() tmb elemeinek trtn rtkadssal llthatjuk be. Az egyes cellkba rtket hrom rtkadssal adhatunk, az albbi pldnak megfelel en:
With MSFlexGridl .Row =1 .Col =1 .Text = "VBasic" End With ' a z oszlop sorszma 0..Rows-1 'a sor sorszma O..Cols-l ' az rtk

A CellAlignment tulajdonsggal a celln belli igazts mdjt definilhatjuk a program futsa sorn:

Az MSFlexGrid bemutatsra kszlt pldaprogramban menb l vlasztva egy 10-es sszeadtbla, illetve egy 10-es szorztbla jelenik meg. (A feladat megoldst az MTABLAK alknyvtrban az MTGR1D alkalmazs tartalmazza.) A form betltsekor inicializljuk az MSFlexGrid vezrl elemet.
Private Sub Form_Load() Dim x As Integer, y As Integer With MatGrid ' a rcs 11x11 cella mret .Cols = 11 .Rows = 11 1 nem engedjk tmretezni .AllowUserResizing = 0 ' a rgztett cellk bet - s httrszne .ForeColorFixed = vbWhite .BackColorFixed = vbBlue .Font.Size = 9 1 a cellk mrete 350x350 egysg For x = 0 To 10 .ColWidth(x) = 350 .RowHeight(x) = 350 Next 1 a teljes rcs mrete, figyelembe vve az 1 elvlasztvonalak vastagsgt .Width = 11 * 354 .Height = .Width

a rgztett cellk feltltse 1..10 szmokkal For x = 1 To 10 .Col = 0 .Row = x .Text = CStr(x) .Col = x .Row = 0 .Text = CStr(x) Next End With End Sub

Az sszeads menpont kivlasztsakor feltltjk az sszeadtblt.


Private Sub sszeads_Click() Dim x As Integer, y As Integer With MatGrid 1 a feltltst fekete-fehr mdban vgezzk .BackColor = &HFFFFFF .ForeColor = &H80000012 ' a + jelet a bal fels cellba tesszk ' kzpre igaztva. .Col = 0 .Row = 0 .CellAlignment = flexAlignCenterCenter .Text = "+" ' a cellk feltltse For x = 1 To 10 For y = 1 To 10 .Col = y .Row = x .Text = CStr(x + y) Next y, x ' a feltlts utn sznt vltunk .BackColor = &HC0FFC0 .ForeColor = vbMagenta End With End Sub

A Szorzs menpont kivlasztsakor feltltjk az szorztblt.


Private Sub Szorzs_Click() Dim x As Integer, y As Integer With MatGrid 1 a feltltst fekete-fehr mdban vgezzk .BackColor = &HFFFFFF .ForeColor = &H80000012 ' a * jelet a bal fels cellba tesszk 1 kzpre igaztva .Col = 0 .Row = 0 .CellAlignment = flexAlignCenterCenter .Text = "*"

' a cellk feltltse For x = 1 To 10 For y = 1 To 10 .Col = y .Row = x .Text = CStr(x * y) Next y, x ' a feltlts utn sznt vltunk .BackColor = &HC0FFFF .ForeColor = vbRed End With End Sub

A programbl val kilps el tt jvhagyatjuk a vlasztst:


Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) If MsgBox("Valban ki akar lpni?", vbYesNo + _ vbExclamation, "Figyelem!") = vbNo Then Cancel = True End If End Sub

Ahhoz, hogy QueryUnload esemny keletkezzen, a programbl nem szabad az end utastssal kilpni:
Private Sub Kilps_Click() Unload Me End Sub

3.37. bra Szorztbla az MSFlexFrid vezrl vel

3.5. Vezrl tmbk, objektumgy jtemnyek


A fejezet utols rszben nhny olyan alkalmazst mutatunk be, amelyek lehet v teszik a vezrl k dinamikus hasznlatt. 3.5.1. Vezrl tmbk hasznlata A vezrl tmb hasznlatnak bemutatshoz digitlis lottszelvnyt ksztsnk a parancsgombok tmbbe szervezsvel. A feladat megoldshoz 90 parancsgombot helyeznk el az ablakban. Ilyen nagyszm vezrl kezelse csak vezrl tmb alkalmazsval kpzelhet el, a parancsgombok futs kzbeni ltrehozsval. A feladat megoldsaknt ltrejtt alkalmazs (LOTTI) ablakban a nyomgombok elhelyezkedst s m kdst a 3.38. bra szemllteti.

3.38. bra Lottszelvny gombtmbbel

A feladat megoldsa sorn a db Byte tpus vltozt modulszinten deklarljuk.

Az rlap betltsekor felhelyezzk a formra a 90 lottgombot, s belltjuk a tulajdonsgokat:


Private Sub Form_Load() Dim i As Integer, j As Integer, k As Integer LottFrm.ScaleMode = vbPixels k = 0 For i = 0 To 5 For j = 0 To 14 k = k + 1 Load LottGomb(k) With LottGomb(k) .Visible = True ' a gomb szmtott helye .Width = 2 8 .Height = 25 .Left = LottFrm.ScaleWidth/2-(8-j)*(.Width+3)+ 16 .Top = LottFrm.ScaleHeight/2-(3-i)*(.Height+2)+12 ' a gomb feliratnak megadsa .Caption = Format(k, "##") .Visible = True End With Next j, i ' a bet tpus mretnek belltsa 10 pontra, 1 a Tag tulajdonsg nullzsa Trl End Sub

A Trl eljrsban a gombokat kiindulsi llapotba visszk:


Private Sub Trl() Dim i As Integer For i = 1 To 90 With LottGomb(i) .Tag = 0 .Font.Size = 10 .Font.Bold = False End With Next i End Sub

Kilps az Unload esemny aktivizlsval:


Private Sub Command2_Click() Unload LottFrm End Sub

Az ablak lezrsakor gondoskodunk a gombok megszntetsr l:


Private Sub Form_Unload(Cancel As Integer) Dim i As Integer For i = 1 To 90 Unload LottGomb(i) Next i End Sub

A lott szmgombjain, illetve az "j szelvny" gombon val kattints hatsra meghvd esemnykezel eljrs:
Private Sub LottGorab_Click(index As Integer) If index = 0 Then ' j szelvny j Szelvny Else 1 lottszm Lottszm index End If End Sub

A lottgombok kzs esemnykezel eljrsa:


Private Sub Lottszm(index As Integer) Command2.SetFocus With LottGomb(index) If LottGomb(index).Tag = 1 Then 'kivlasztott volt .Font.Bold = False .Tag = 0 db = db - 1 Else 'nem volt kivlasztva If db >= 5 Then Beep Exit Sub End If .Font.Bold = True .Tag = 1 db = db + 1 End If End With End Sub

j szelvny kitltse el tt elvgezzk a szksges inicializcis lpseket


Private Sub j Szelvny() Trl db = 0 End Sub

3.5.2. Objektumgy jtemnyek hasznlata Megoldhatjuk a lottszelvny feladatot objektumgy jtemnnyel is. A feladat megoldst a LOTTO2 alknyvtr tartalmazza. Az albbiakban csak azokat az eljrsokat ismertetjk, amelyek lnyegesen eltrnek a LOTTI feladat megoldsban hasznltaktl. Az objektumgy jtemnyeket klnsen jellemz programsorokat alhzssal jelltk A LottSzmK kollekcit globlisan hozzuk ltre, hisz tbb alprogrambl is el szeretnnk rni a benne trolt parancsgomb-objektumokat. (Megjegyezzk, hogy a LottGomb tmb is ltrejn a Visual Basic sajtos objektumkezelsi technikjnak kvetkeztben. A kollekci hasznlatnak el nye az egyszer bb kezelhet sgben rejlik.)
Dim LottSzmK As New Collection Dim db As Byte

Az rlap betltsekor tltjk fel az objektum-gy jtemnyt. Az elemek kollekcihoz adsa sorn a lottszmot indexknt s kulcsknt hasznljuk:
Private Sub Form_Load() Dim i As Integer, j As Integer, k As Integer LottFrm.ScaleMode = vbPixels k = 0 For i = 0 To 5 For j = 0 To 14 k = k + 1 Load LottGomb(k) LottSzmK.Add Item:=LottGomb(k), Key:=CStr(k) With LottSzmK.Item(k) .Visible = True .Width = 2 8 .Height = 25 .Left = LottFrm.ScaleWidth/2-(8-j)*(.Width+3)+16 .Top = LottFrm.ScaleHeight/2-(3-i)*(.Height+2)+12 .Caption = Format(k, "##") .Visible = True End With Next j, i Trl End Sub

A gombok kiindulsi llapotba val lltsa sorn For Each ciklussal jrjuk be a kollekci elemeit:

Private Sub Trl() Dim szmg As Object For Each szmg In LottSzmK With szmg .Tag = 0 .Font.Size = 10 .Font.Bold = False End With Next End Sub

Az ablak lezrsakor gondoskodunk a gombok s a kollekci megszntetsr l:


Private Sub Form_Unload(Cancel As Integer) Dim i As Integer For i = 1 To LottSzmK.Count Unload LottSzmK.Item(CStr(i)) LottSzmK.Remove 1 Next i Set LottSzmK = Nothing End Sub

A lottgombok kzs esemnykezel eljrsban index alapjn rjk el a gy jtemny elemeit:


Private Sub Lottszm(index As Integer) Command2.SetFocus With LottSzmK.Item(index) If .Tag = 1 Then .Font.Bold = False .Tag = 0 db = db 1 Else If db >= 5 Then Beep Exit Sub End If .Font.Bold = True .Tag = 1 db = db + 1 End If End With End Sub

'kivlasztott volt

'nem volt kivlasztva.

4. Prbeszdablakok, SDI s MDI alkalmazsok


Egy alkalmazs tbb formot is tartalmazhat, amelyek kzl egy az alkalmazs f ablaka, mg a tovbbi formok prbeszd- vagy gyermekablakok, amelyek esemnyek hatsra (pldul menpontok kivlasztsakor) jelennek meg. Prbeszdablaknak nevezzk az alkalmazs valamely esemnyhez kapcsolhatan, csak tmenetileg megjelen ablakt, melynek clja felhasznlval egy adott tmakrben trtn informcicsere. A prbeszdablakok feladata pldul adatmegads, opcik kivlasztsa programok, specilis zeneteinek, informciinak megjelentse. A prbeszdablakok az alkalmazssal s a felhasznlval val kapcsolattarts szempontjbl kt csoportba sorolhatk. Modlisnak nevezzk azokat a prbeszdablakokat, amelyek ha megjelennek, nem engedik, hogy a felhasznl hozzfrjen az alkalmazs f ablakhoz egszen addig, mg a prbeszdablakot be nem zrta. A nem modlis prbeszdablakok gy jelennek meg, hogy a felhasznlnak lehet sge van visszatrni az alkalmazs f ablakhoz, s abban dolgozni a prbeszdablak bezrsa nlkl. Amellett, hogy a prbeszdablakokat magunk is elkszthetjk, a Visual Basic egy sor el re elksztett prbeszdablakot knl arra, hogy beptsk programunkba. Ilyenek pldul a nvjegy-, bejelentkezs, opcis, figyelmeztet stb. prbeszdablakok. A Windows rendszer rsze egy sor olyan prbeszdablak, amelyekkel az alkalmazsokban lpten-nyomon tallkozunk. (Fjlnyits s -ments, nyomtats, szn- s bet tpus belltsa stb.) Ezeket ltalnos prbeszdablakoknak (Common Dialogs) nevezzk, amelyek szintn felhasznlhatk a Visual Basic alkalmazsokbl. Gyakran tallkozhatunk specilis tulajdonsgokkal rendelkez Windows alkalmazsokkal, amelyek clja, hogy informcit jelentsenek meg, illetve mdostsanak az ablak aktv terletn. Az informci alatt ebben az esetben szveges adatok, szmadatok, kpek, hangok vagy mozgkpek halmazt rtjk. Ezeket a klnbz jelleg informcikat tartalmaz halmazt szoks kapcsolt dokumentumnak nevezni. A dokumentum sz informcitrolsra utal, mg a kapcsolt sz a dokumentum klnbz akr tbb program ltal el lltott - rszekb l val felptst jelli.

4. FEJEZET

Ha egy alkalmazs az ablaknak aktv terletn egyszerre csak egy dokumentumot jelent meg, akkor azt SDI alkalmazsnak, ablakt pedig SDI ablaknak nevezzk a Single Document Interface (egydokumentumos fellet) kifejezs alapjn. Az SDI programok ltalban szabvnyos dokumentumkezel menket, eszkz- s llapotsort is tartalmaznak. Az SDI alkalmazsokkal s ablakokkal ellenttben az MDI (Multiple Document Interface) olyan specilis lehet sg a Windows rendszerekben, amely lehet v teszi, hogy egyetlen alkalmazs felgyelete alatt egyszerre tbb - az alkalmazs ablakn bell megjelen - gyermekablakba kerljenek a dokumentumok, s azokkal prhuzamosan dolgozzunk. rdemes kiemelni a Windows Intz tpus programokat, amelyek egy vagy tbb ablakos felhasznli felletn specilis elemek (llomnyok, knyvtrak s lemezek) hierarchikus trolsi rendszert kezelhetjk. A Visual Basic alkalmazskszt varzslja (Application Wizard) segtsgvel a fenti hrom alkalmazstpus brmelyikt knnyedn el llthatjuk.

4.1. Prbeszdablakok hasznlata


A File\New Project menpont kivlasztsakor a New Project prbeszdablakbl a Standard EXE ikont kivlasztva megjelenik Form1 ablak, amely ltalban az alkalmazs f ablaka. A program m kdtetshez szksges adatok beolvasst, a feladat vgrehajtshoz fontos informcik megadst a menpontok kivlasztsakor megjelen prbeszdablakokban vgezzk. A prbeszdablakokat egy jabb rlapon tervezhetjk meg. A projekthez a Projec\Add Form menpont kivlasztsval az Add Form prbeszdablak jelenik meg. Az ikonnal kivlasztott ablaktpust a Megnyits gomb megnyomsval tlthetjk be. Egy projektben termszetesen tbb rlap is szerepelhet. gy sorra ltrejnnek a Form2, Form3... Formn rlapok, amelyek alkalmasak a prbeszdablakok megtervezsre (4.1. bra). Bizonyos programrszeket rdemes grafikus fellet nlkl, tiszta Basic kdban elhelyezni - erre hasznlhatjuk a Basic modult. A Project\Add Module menpont kivlasztsakor megjelenik az Add Module prbeszdablak, ahonnan a Module ikon kivlasztsa s a Megnyits nyomgomb megnyomsa utn ltre jn a Module1 programmodul (kdmodul), amelyhez nem tartozik grafikus ablak.

4.1. bra Az Add Form prbeszdablak

A modulok feladata a vltozdeklarcik s alprorgramdefincik trolsa. A modul is bekerl a projektbe a formhoz hasonlan. Project\Projectl Properties menpont kijellsvel megjelen prbeszdablak General lapjn kivlaszthatjuk az alkalmazs f ablakt a Startup Object kombinlt listbl. ltalban a Forrni rlap tartalmazza az alkalmazs f ablakt. (4.2. bra) A File\Save Project As... menpont segtsgvel lemezre mentjk a projekt tartalmt. A fjlok trolsa a Project ablakban grafikusan szemlltetett fn alulrl felfel haladva, a ltrehozskor kapott alaprtelmezs szerinti nven trtnik. (A modul neve szintn megvltoztathat.)

4.2. bra A projekt tulajdonsgai

A projektet a File\Open Project... menpont kivlasztsra megjelen Open Project prbeszdablakbl trtn vlasztssal tlthetjk be. 4.1.1. A prbeszdablakok megjelentse s tulajdonsgaik A prbeszdablakok megjelentsnek bemutatshoz egy menvezrelt programot ksztnk (DIALOG!), amely egy modlis s egy nem modlis prbeszdablakot jelent meg. A feladathoz a Forrni ablakban megtervezzk a program menrendszert a Men Editor segtsgvel.

4.3. bra A f ablak

A prbeszdablak feladatbl addik, hogy minimalizl s maximalizl gombokra nincs szksge, s t ltalban a mrete sem vltoztathat meg. Ehhez elegend a BorderStyle tulajdonsgt 3 - Fixed Dialog rtkre lltani, ekkor csak a lezr gombja marad meg az ablaknak. (Az ablak alaprtelmezs szerinti kerete 2 - Sizeable, vagyis vltoztathat mret .) A Forrni ablakot modlis, mg a Forms rlapot nem-modlis prbeszdablakknt jelentjk meg. Mindkt form tartalmaz egy-egy Bezr" felirat gombot, melyekkel bezrjuk a prbeszdablakokat. A modlis s a nem modlis prbeszdablak megjelentshez a Show metdust a megfelel paramterrel hvjuk:
Objektum.Show [stlus][,formtulajdonos]

ahol a stlus az ablak modalitst hatrozza meg. Ennek alaprtelmezs szerinti rtke vbModeless (0), amely a nem modlis ablakot jelli, vbModal (/) esetn az ablak modlis lesz. A formtulajdonos paramtert nem ktelez megadni. A Visual Basic formok esetn a tulajdonost a Me kulcssz jelli. Egy modlis prbeszdablakbl megnyitott msodik modlis prbeszdablak bezrsakor a programkdban a
Me.Hide

helyett a hasznlhatjuk a
Me.Visible = False

rtkadst is. A "Modlis prbeszdablak" menpont esemnykezel eljrsban a Form2 ablakot modlisan jelentjk meg.
Private Sub Modlis_Click() Form2.Show vbModal End Sub

A "Nem modlis prbeszdablak" menpont esemnykezel eljrsval az Form3 ablakot nem modlis prbeszdablakknt jelentjk meg.
Private Sub NemModlis_Click() Form3.Show End Sub

4.1.2. Specilis prbeszdablakok A Pioject [Add Form menpont kivlasztsakor specilis prbeszdablakok is rendelkezsnkre llnak, melyek kzl nhnyat pldaprogrammal illusztrlunk. 4.1.2.1. Nvjegy (About Dialog) prbeszdablak A Nvjegy prbeszdablakot megjelent menpont ltalban a program Help vagy a Sg menjnek utols menpontja. Pldul Visual Basic esetn a Help men "About Microsoft Visual Basic..." menpontjval jelenthetjk meg ezt az informcis ablakot. A nvjegy prbeszdablak ltalban a program nevt, a Copyright-ra vonatkoz informcikat s az alkalmazs rvid lerst tartalmazza. Az "About Dialog" betltsekor az "About MyApp" felirat prbeszdablak jelenik meg:

4.4. bra Az About prbeszdablak

A prbeszdablakban lv hrom Label tpus vezrl elem (lblTitle, lblVersion, lblDisclainer) Caption tulajdonsgt fellrhatjuk sajt szvegnkkel. A "Rendszer Info" parancsgomb a rendszerr l ad felvilgostst. 4.1.2.2. Bejelenkezs (Log In Dialog) prbeszdablak A "Bejelentkezs" prbeszdablak alkalmazsa akkor fontos, ha nem engedjk meg, hogy a programot illetktelen szemlyek is hasznljk. A "Log In Dialo" betltsekor megjelenik a Login felirat prbeszdablak:

4.5. bra A bejelentkez ablak

Termszetesen itt is mdosthatjuk az ablak cmkjt (Login), illetve a kt Label vezrl elem Caption tulajdonsgt (User Name s a Password). A felhasznli nv s a jelsz sorban megadott szvegeket a txtUserName s a txtPassword beviteli mez k Text tulajdonsga teszi hozzfrhet . 4.1.2.3. Opcik belltsa (Options Dialog) prbeszdablak Az opcik belltsa prbeszdablak ltalban tbb fllel rendelkezik. A flek azonostja jelzi, hogy a klnfle belltsok mire vonatkoznak. Pldul, a Visual Basic fejleszt i krnyezetben a Project/Projektnv Properties menpont kivlasztsakor is ilyen prbeszdablak jelenik meg. A form "Options Dialog" projekthez val hozzadsa utn megjelen tartalmaz. rlap ngy flet

4.6. bra Opcillt prbeszdablak

A prbeszdablakban elhelyezett TabStrip tpus vezrl elem tulajdonsgainak mdostshoz el szr ki kell jellnnk a vezrl elemet (pldul egrkattintssal). Ezt kvet en a View\Property Pages menpont hatsra megjelen prbeszdablakban adhatjuk meg a szksges belltsokat. A megjelen "Property Pages" prbeszdablakban sokfle mdostsi lehet sg ll rendelkezsnkre (4.7. bra). A Style kombinlt lista segtsgvel a flek helyett nyomgombok jelenthet k meg. A Tabs lapon az Index lltsval hozzfrhetnk a klnbz lapokhoz, ahol megvltoztathatjuk a fl feliratt {Caption), beszrhatunk (Insert Tab), illetve trlhetnk (Remove Tab) fleket. A Fonts lapon a prbeszdablak bet tpust, a Picture lapon pedig az egrkurzort llthatjuk be.

4.7. bra Az opcillt prbeszdablak tulajdonsgai

4.1.2.4. Logkp (Splash Screen) A logkp program-, cg-, verzi- s licensz informcikat tartalmaz, s ltalban a program betltsekor jelenik meg. A felhasznl miutn elolvasta a megjelen informcikat, a prbeszdablak kzepn kattintva az egrrel futtathatja tovbb a programot. A "Splash Screen" rlapon a klnfle informcikat tartalmaz Label vezrl elemeket rhatjuk fell:
lblLicenseTo lblVersion lblCompanyProduct lblCopyright lblProductName lblCompany lblPlatForm lblWarning

A logknt hasznlhat a "Splash Screen" rlap kiindulsi llapota:

4.8. bra A logkp

4.1.2.5. Napi tippek (Tip Of Day) prbeszdablak A napi tippek prbeszdablak a program betltse utn jelenik meg, s vletlenszer en javaslatokat ad, amennyiben a felhasznl l ezzel a lehet sggel. A "Tip Of Day" prbeszdablak megjelensi formja:

4.9. bra Napi tippek

A prbeszdablakot betltve egy sor alprogram is rendelkezsnkre ll. A LoadTips fggvny beolvassa a tippek szvegt (alaphelyzetben a TIPOFDAY.TXT llomnybl, a tippek szvegt kln sorokban elhelyezve). Az rlap DoNextTip eljrsa biztostja a tippeket vletlenszer en vagy ciklikusan. A tipp prbeszdablakban a jell ngyzet trlsvel a tippek tbbet nem jelennek meg. A prbeszdablak a SaveSetting s GetSetting hvsokkal a Windows rendszer regisztrcis adatbzisba rja a vlasztst. 4.1.2.6. Tovbbi beptett prbeszdablakok Amint azt a 4.1 brn is lthatjuk tovbbi el re elksztett prbeszdablakmintk is rendelkezsnkre llnak. A Dialog prbeszdablak egyszer form OK s Cancel gombokkal, melyek hasznlata semmi jdonsgot nem rejt. Az ODBC Login prbeszdablak az adatbzisokkal val kapcsolatot biztost ODBC Open Data Base Conection elem paramtereinek belltst teszi lehet v. (Az adatbzisokkal knyvnk 7. fejezetben foglalkozunk.) A Web Broser prbeszdablak egy Internet bngsz t valst meg. (Az Internetes kapcsolatokkal a knyv 8. fejezete foglalkozik.) 4.1.2.7. InputBox s MsgBox prbeszdablakok hasznlata A Windows alkalmazsok a klnbz m veletek elvgzsre prbeszdablakokat hasznlnak. A prbeszdablakok tbbsge sajt tervezs , azonban a gyakran el fordul feladatok elvgzre el re elksztett prbeszdablakokat is megjelenthetnk. A

Visual Basic adatbeviteli prbeszdablaka (InputBox) segtsgvel szveges adatokat krhetnk be a felhasznltl. (Az ablakban elhelyezked nyomgombok angol nyelv ek.) A Windows rendszer prbeszdablakai, mint pldul az zenetablak (MessageBox) vagy az ltalnos prbeszdablakok (Common Dialogs) a Windows vltozatnak megfelel nyelv nyomgomb-feliratokat tartalmaznak. Az adatbeviteli prbeszdablakot a Visual Basic InputBox fggvnynek segtsgvel rhetjk el.

4.10. bra Az InputBox adatbeviteli ptrbeszdablak

A fggvny paramtereknt definilhatjuk az egy vagy tbb soros adatbekr szveget, az ablak fejlct s az alaprtelmezs szerinti inputadatot. A fggvny az adatmez be rt szveggel tr vissza, ha OK nyomgombbal zrjuk le az ablakot, illetve res sztringet ad rtkl a Cancel gombbal val kilps esetn. Az InputBox fggvny paramterezse:
InputBox(krds[,cm][,alaprtk] [,xpos] [,ypos] [,sgfj 1,sgtma])

Paramter krds

Lers A krds paramterben adjuk meg a prbeszdablakban megjelen tjkoztat szveget, melynek maximlis hossza 1024 karakter. A krds kocsi vissza (Chr(13)) s soremels (Chr(10)) karaktereket is tartalmazhat. A opcionlis cm paramter hatrozza meg a prbeszdablak fejlct. Ha a paramtert elhagyjuk, akkor az alkalmazs neve jelenik meg a cmsorban. Az opcionlis alaprtk paramterben megadott sztring a prbeszdablak szvegbeviteli mez jben jelenik meg, Az opcionlis xpos, ypos paramterek a prbeszdablak bal fels sarknak koordintit tartalmazzk twip egysgekben. Ha az xpos paramter hinyzik, a prbeszdablak vzszintes irnyban a kperny kzepre kerl. Ha az ypos paramter nincs megadva, akkor a kperny fels szlt l kb. egyharmad tvolsgra pozcionlva jelenik meg a prbeszdablak. Az opcionlis sgfjl s a sgtma paramterekkel - melyeket csak egytt lehet megadni (illetve elhagyni) - sgt rendelhetnk a prbeszdablakhoz. Ha a fenti kt paramtert megadjuk, akkor a Help nyomgomb automatikusan megjelenik a prbeszdablakban.

cm alaprtk xpos,ypos

sgfjl, sgtma

A prbeszdablak OK gombjnak lenyomsakor, illetve az <Enter> billenty letsekor a fggvny a szvegmez tartalmt adja vissza eredmnyl. A Cancel nyomgomb megnyomsakor a fggvny visszatrsi rtke res sztring (""). A Windows rendszer zenet-megjelent prbeszdablaka az MsgBox fggvny hvsval rhet el a Visual Basic alkalmazsokbl:

4.11. bra Az MsgBox yenetablak

Az MsgBox fggvny hvsakor megadhatjuk az zenet szvegt, a prbeszdablak fejlct s az ablakban megjelentend ikont s nyomgombokat. A fggvny visszatrsi rtke a felhasznl ltal kivlasztott nyomgombot azonostja. Az MsgBox fggvny paramterezse:
MsgBox(zenet[,gombok] [,cm] [,sgfj,sgtma])

A paramterek kzl az zenet hasznlata teljes egszben megegyezik az InputBox fggvny krds paramternek hasznlatval. A cm, a sgfjl, s a sgtma paramterek megadsra vonatkoz szablyok szintn megegyeznek az InputBox fggvny azonos nev paramtereinl elmondottakkal. A gombok paramter rtke hatrozza meg, hogy milyen ikon s milyen nyomgombok jelennek meg a prbeszdablakban. Az ablak modalitrsl s az alaprtelmezs szerinti nyomgombrl szintn a paramter rtke dnt. A gombok paramter rtkt az albbi csoportok konstansait logikai vagy (or, +) m velettel sszekapcsolva lltjuk ssze.
Konstans vbOKOnly vbOKCancel vbAbortRetrylgnore vbYesNoCancel vbYesNo vbRetryCancel vbMsgBoxHelpButton rtk 0 1 2 3 4 5 16384 Nyomgomb(ok) OK (alaprtelmezs) OK, Mgse Megszakts, Ismt, Tovbb Igen, Nem, Mgse Igen, Nem Ismt, Mgse Sg

Konstans vbCritical vbQuestion vbExclamation vblnformation Konstans vbDefaultButtonl vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 Konstans vbApplicationModal

rtk 16 32 48 64 rtk 0 256 512 768 rtk 0

Ikon

Alaprtelmezett nyomgomb az els gomb (alaprtelmezs), a msodik gomb, a harmadik gomb, a negyedik gomb. Modalits Alkalmazs szint modalits. A prbeszdablak valamelyik gombjnak lenyomsa szksges ahhoz, hogy az aktulis program vgrehajtsa folytatdjon (alaprtelmezs). Rendszermodalits. Amg a felhasznl a prbeszdablakban nem nyom le egy gombot, addig minden alkalmazs futsa felfggeszt dik.

vbSystemModal

4096

A prbeszdablak nyomgombjai kzl valamelyiket lenyomva az MsgBox fggvny az albbi rtkek egyikt adja eredmnyl:
Konstans vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo rtk 1 2 3 4 5 6 7 Lenyomott gomb OK Cancel Abort Retry Ignore Yes No

4.1.2.8. ltalnos prbeszdablak hasznlata A CommonDialog tpus vezrl k olyan ltalnos prbeszdablakok, amelyeket a Windows rendszer hasznl llomnyok megnyitsra, mentsre, nyomtatsra, sznek s bet tpusok kivlasztsra, valamint a sgrendszer kezelsre. Ha a projektnk eszkztra nem tartalmazza a CommonDialog ActiveX-komponens ikonjt, akkor azt a Project\Components Controls lapjn trtn vlasztssal tehetjk fel oda. A komponens teljes neve Microsoft Common Dialog Control 6.0". A CommonDialog nem-vizulis komponens, gy az rlapon egy olyan ikon jelli, amely nem mretezhet t. A CommonDialog vezrl Action tulajdonsgnak rtke az albbi tblzat szerint vltozhat:
rtk 0 1 2 3 4 5 6 Lers Nincs tevkenysg. A Megnyits prbeszdablak megjelentse. A Ments msknt prbeszdablak megjelentse. A Szn prbeszdablak megjelentse. A Bet tpus prbeszdablak megjelentse. A Nyomtats prbeszdablak megjelentse. A WINHLP32.EXE futtatsa.

A CommonDialog vezrl metdusok hasznlatval jelenti meg az ltalnos prbeszdablakokat.


Metdus ShowOpen ShowSave ShowColor ShowFont ShowPrinter Show Help Megjelentett prbeszdablak Megnyits Ments msknt Szn Bet tpus Nyomtats A Windows sgrendszert aktivizlja

A megjelen prbeszdablakbl a felhasznl jvhagyssal (OK, Megnyits stb.), vagy a Mgse gombbal lphet ki. A felhasznl vlasztst hibakezelssel (OnError) vagy a CancelError tulajdonsg rtkvel kezelhetjk. A CancelError tulajdonsg True rtke esetn hiba keletkezik, ha a Mgse gombot nyomja meg a felhasznl. A CommonDialog komponens tulajdonsgait a dialgusablak megjelensnek s m kdsnek belltsra, illetve a felhasznli beavatkozs eredmnynek kiolvassra hasznlhatjuk.

Az llomnykezel prbeszdablakok esetn az initDir a kezdeti knyvtrat, a Filter s a Filterlndex a kivlaszthat llomnyokat tartalmazza. A FileName a kivlasztott llomny nevt trolja. Fontkezel prbeszdablak hasznlatnl a Fontxxx tulajdonsgok a bet tpust jellik, hasonlan a Help esetn a Helpxxx a sgparamtereket rgzti. Nyomtats esetn az Orientation a paprirnyt, a Copies a msolatok szmt, a FromPage s a ToPage a nyomtatand oldalhatrokat tartalmazza. A sznbellt prbeszdablak esetn a Color tulajdonsgot hasznlhatjuk. rdemes szt ejteni a Flags tulajdonsgrl. Az llomnykezel prbeszdablakok esetn a Flags tulajdonsg a tbbszrs vlasztst, a kiterjesztsek kezelst s a vlaszts milyensgt szablyozza. Fontkezelsnl a fontok jellegzetessgeit, illetve a nyomtat- s a kperny vlasztst. Sznkezels sorn pedig a prbeszdablak tpust, mg nyomtatskor a nyomtatsi belltsokat szablyozza. Az albbi pldaprogram (CDIALOG) bemutatja a hatfle ltalnos prbeszdablak hasznlatt.

4.12. bra Plda a CommonDialog hasznlatra

Az alkalmazs ablaka hat parancsgombot tartalmaz, melyek megnyomsakor megjelenik a megfelel prbeszdablak. A programbl jl lthatk a prbeszdablakok hasznlathoz szksges tulajdonsgok. A "Szn" parancsgomb esemnykezel eljrsban belltjuk a "Szn" prbeszdablak fontosabb tulajdonsgait s megjelentjk az ablakot.

Private Sub Szn_Click() ' a "Mgsem" vlasztssal trtn kilps kezelse CommonDialogl.CancelError = True On Error GoTo Hiba ' belltja a Flags tulajdonsgot CommonDialogl.Flags = cdlCCRGBInit ' megjelenti a Color prbeszdablakot CommonDialogl.ShowColor ' a kivlasztott sznre lltja be a Forrni httert Forrm1.BackColor = CommonDialogl.Color Exit Sub Hiba: ' a "Mgsem" gomb megnyomsa Exit Sub End Sub

A "Megnyits" parancsgomb esemnykezel eljrsa a "Megnyits" prbeszdablakot jelenti meg:


Private Sub Megnyits_Click() CommonDialogl.CancelError = True On Error GoTo Hiba ' a "Megnyits" prbeszdablak megjelentse CommonDialogl.ShowOpen Exit Sub Hiba: Exit Sub End Sub

A "Ments msknt" parancsgomb esemnykezel prbeszdablakot jelenti meg:

eljrsa a "Ments msknt"

Private Sub Ments_Click() CommonDialogl.CancelError = True On Error GoTo Hiba ' a "Ments msknt" prbeszdablak megjelentse CommonDialog1.ShowSave Exit Sub Hiba: Exit Sub End Sub

A "Bet tpus" parancsgomb esemnykezel eljrsa a "Bet tpus" prbeszdablakot jelenti meg. A kivlasztott bet tpussal szveget rhatunk a parancsgomb melletti szvegmez be.

Private Sub Bet tpus_Click () CommonDialogl.CancelError = True On Error GoTo Hiba ' a Flags tulajdonsg belltsa CommonDialogl.Flags = cdlCFEffects Or cdlCFBoth ' a "Bet tpus" prbeszdablak megjelentse CommonDialogl.ShowFont Textl.Font.Name = CommonDialogl.FontName Textl.Font.Size = CommonDialogl.FontSize Textl.Font.Bold = CommonDialogl.FontBold Textl.Font.Italic = CommonDialogl.Fontltalic Textl.Font.Underline = CommonDialogl.FontUnderline Textl.FontStrikethru = CommonDialogl.FontStrikethru Textl.ForeColor = CommonDialogl.Color Exit Sub Hiba: Exit Sub End Sub

A "Nyomtats" parancsgomb esemnykezel eljrsa a "Nyomtats" prbeszdablakot jelenti meg. A programrszlet mdostsa lehet v teszi a nyomtats m kdtetst:
Private Sub Nyomtats_Click() Dim BeginPage, EndPage, NumCopies, i CommonDialogl.CancelError = True On Error GoTo Hiba ' a "Nyomtats" prbeszdablak megjelentse CommonDialogl.ShowPrinter ' a felhasznl ltal kivlasztott rtkek BeginPage = CommonDialogl.FromPage EndPage = CommonDialogl.ToPage NumCopies = CommonDialogl.Copies For i = 1 To NumCopies ' a nyomtatsi utastsok helye Next i Exit Sub Hiba: Exit Sub End Sub

A "Sg" parancsgomb esemnykezel eljrsa megjelenti a Visual Basic sgrendszernek ablakt.


Private Sub Sg_Click() CommonDialogl.CancelError = True On Error GoTo Hiba CommonDialogl.HelpFile = "VB6.HLP" CommonDialogl.HelpCommand = cdlHelpContents CommonDialogl.ShowHelp Exit Sub Hiba: Exit Sub End Sub

4.2. A Visual Basic alkalmazskszt varzsl hasznlata Amikor j projektet nyitunk hasznlhatjuk az alkalmazskszt (Application Wizard). varzslt

4.13. bra Az alkalmazskszt varzsl aktivizlsa

Az els az alkalmazskszt bejelentkez kpe ahol el zetesen eltrolt wizard profile (.rwp) belltsokat is megnyithatunk.

4.14. bra Az alkalmazskszt varzsl bejelentkezse

4.15. bra Elksztett felhasznln felletek

Dnthetnk arrl, hogy a szabvnyos menpontok kzl melyek kerljenek az alkalmazsra.

4.16. bra Menbellts

A kvetkez lps az eszkztr kialaktsa.

4.17. bra Eszkztr kialakts

A programokhoz az adatokat (kpeket, idzeteket) trolhatjuk egy kln elksztett er forrsllomnyban. Ezt az er forrsllomnyt hasonlan a programokhoz forrsnyelven lehet elkszteni (RC kiterjeszts llomnyban), majd er forrs-fordtval le kell fordtani .RES kiterjeszts llomnny, amelyet knnyen be lehet pteni a programba. Az er forrsfjlok alkalmazsnak el nye akkor jelentkezik, ha az alkalmazsok nyelvfgg (angol, magyar,...) kpeket s szvegeket jelentenek meg. Ebben az esetben a program jabb vltozathoz elegend csak az er forrsllomnyt lecserlni.

4.18. bra Er forrsok

A Visual Basic is tartalmaz egy er forrsfordt programot (RC.EXE), amely a Visual Basic teleptse utn a Wizards alknyvtrban tallhat. Az alkalmazskszt varzsl lehet v teszi, hogy adatainkat er forrs-llomnyban troljuk. Felszerelhetjk programunkat Internet kapcsolattal is, s ha kapcsoldunk, akkor a honlap cmt is definilhatjuk.

4.19. bra Internet kapcsolatok

Knnyen hozzf zhetjk a programhoz a mr ismert bejelentkez kperny t, jelsz-, bellt s nvjegy prbeszdablakokat is. Emellett mg specilis formsablonokat (Form Templates) is illeszthetnk a projektbe.

4.20. bra Szabvnyos formok beillesztse

Ugyangy jrhatunk el az adatbzis lekrdez formokkal is.

4.21. bra Adatbzisrlapok beillesztse

Ezzel gyakorlatilag kszen is vagyunk

4.22. bra A "varzslat" befejezse

4.3. Prhuzamos munka tbb dokumentummal (MDI alkalmazsok)


Az MDI (Multiple-Document nterface) az Microsoft Windows rendszerek olyan specilis megoldsa, amely lehet v teszi, hogy egyszerre tbb ablakban jelentsnk meg adatokat, grafikt stb., s azokkal prhuzamosan dolgozzunk. Tekintsk t el szr az MDI jellegzetessgeit! Az MDI program ablaka a szoksos. Ennek az ablaknak lehet fejlce, lehetnek meni, az ablak mretei vltoztathatk s aktivizlhat a rendszermen is az ablak zrsra, minimalizlsra, maximalizlsra stb. Az ablak aktv terlete a munkaterlet. Azonban ltalban ezen a terleten kzvetlenl semmifle informci nem jelenik meg. Az informcik - dokumentumok - gyermekablakokban lthatk. Az alkalmazsban kezelt dokumentumok kzl pontosan egy az aktv, azaz a felhasznl az aktv dokumentummal dolgozik. Az MDI biztostja az aktv dokumentum kivlasztsnak lehet sgt. Az MDI programban alkalmazott gyermekablakok is hagyomnyos ablakok (fejlccel, rendszermenvel stb.). Lnyeges azonban, hogy a gyermekablakoknak nincs sajt menjk. A dokumentumablakokban is a szl ablak menjt hasznljuk. Az MDI-ben hasznlt gyermekablakok (dokumentumok) gy minimalizlhatk, hogy az ablak fejlce a tlca helyett a szl ablak aktv terletnek als rszre kerl. A dokumentumablak maximalizlhat is. Ebben az esetben a dokumentumablak fejlce elt nik s az alkalmazs ablakban, a fejlcszveg kiegsztseknt jelenik meg. Maximalizlt dokumentumablak esetn a rendszermen aktivizl gombja s az ablak mreteit visszallt gomb a szl ablak mensorba kerlnek, azonban a dokumentumablakra vonatkoznak. Termszetesen billenty zetr l is kezelhet k a dokumentumablakok. A dokumentumablakok hasznlata sorn ltalnos szably, hogy ahol a hagyomnyos ablakoknl az <Alt> billenty t hasznltuk, ott a dokumentumok esetn a <Ctrl> billenty t kell hasznlnunk. Pldul, a <Ctrl+F4> zrja a dokumentumablakot, a <Ctrl+F6> vltogatja az aktv dokumentumot. A rendszerment a hagyomnyos ablakok esetben az <Alt + sz.kz> billenty kkel kellett aktivizlni, a dokumentumok esetn ugyanezt az <Alt + plusz> billenty kkel tehetjk meg.

Ha a billenty zetet hasznljuk a menben val pozicionlsra, akkor azt tapasztalhatjuk, hogy a szl ablak rendszerment aktivizl gombja alatt a dokumentum rendszerment aktivizl gombja helyezkedik el. A program kpes megvltoztatni a ment, mikzben ms s ms dokumentumablak vlik aktvv, s t ha nincs aktv dokumentum, akkor olyan men jelenik meg, amelyben csak a dokumentum nyitsa menpont aktivizlhat. Az MDI alkalmazsok jellegzetessge, hogy legfels mensorban tallhatunk egy Window nev menpontot. Ez a menpont hagyomnyosan a menk kzl az utols, a Help menpontot leszmtva. Ennek a mennek az ablakok elrendezse a clja. Az ablakok lehetnek tlapoltuk (cascade) vagy mozaik elrendezs ek (tile). Ugyanennek a mennek menpontjaiknt jelennek meg a dokumentumablakok nevei, gy menb l is kivlaszthatjuk az aktv dokumentumot. 4.3.1. MDI alkalmazsok ksztse Az alkalmazs tervezsekor felvehetnk egy MDI szl ablakot, mint munkaablakot, a Project men Add MDI Form menpontjval. A projektekben legfeljebb egy MDI Form rlap lehet, ezrt a feltlts utn a menpont szrkre vlt. Az MDI alkalmazsok indul ablaka az MDI Form, ezt be kell lltanunk a Project properties prbeszdablak General lapjn, a Startup Object listn. Az MDI rlap termszetesen nem lehet egyttal gyermekablak is, teht nincs MDIChild tulajdonsga. Mivel nem feladata a grafika megjelentse, ezrt nem talljuk meg az AutoRedraw, BorderStyle, ClipControls, ControlBox, CorrentX, CurrentY, DrawStyle, DrawMode, DrawWidth, FillColor, FillStyle, Fontxxx, ForeColor, hDC, Image, s a ScaleMode, ScaleTop, ScaleLeft tulajdonsgokat sem. Az MDI ablakok esetben nem tilthatjuk le a menket (NegotiateMenu), megtehetjk azonban ugyanezt az eszkzsorral (NegotiateToolbar). Az MDI formrl nem vehetjk le a mretszablyoz gombokat, nincs MaxButton, MinButton jellemz je. Nem llthatjuk be azt, hogy az ablak minimalizlva megjelenjen-e a tlcn (ShowInTaskbar). Az MDI ablakokban nem gombokat jelentnk meg, nincs rtelme teht a KeyPreview jellemz vel szablyozni a billenty zet s a gombok, illetve a form kapcsolatt. Vgl MDI munkaablakhoz nem rendelhetnk sggombot, mivel nincs WhatsThisButton tulajdonsga. Az MDI form jellegzetessge az AutoShowChildren logikai tulajdonsg, amely arrl intzkedik, hogy tltskor megjelenjenek-e a gyermekek, vagy a programbl jelenthetjk meg azokat a Show metdussal.

A ScrollBars futs kzben csak olvashat - az MDI ablakok esetben logikai - tulajdonsg segtsgvel grget svokat is szerelhetnk" az ablakra, arra az esetre, ha a gyermekek rszei az ablak keretein kvlre kerlnek s gy nem ltszanak. Ha a tulajdonsg rtke igaz (ez az alapbellts), akkor az ablaknak van vzszintes, vagy fgg leges, vagy akr mindkt irny grget svja. Az alkalmazsban szksgnk lesz legalbb egy gyermekablakra. Ehhez egy norml rlap MDIChild tulajdonsgt igazra kell lltani. Az MDI alkalmazsokban hasznlhatunk nem gyermekablakokat is, ezek termszetesen az MDI szl t l fggetlenl modlis prbeszdablakknt m kdtethet k. Ha megnzzk a projektablakot, akkor lthatjuk, hogy ms jelet kap az MDI form, az MDI gyermek s a hagyomnyos munkaablak. Az MDI ablak ActiveForm tulajdonsga azonostja az aktv gyermekablakot. 4.3.2. MDI gyermekablakok elrendezse Az MDI gyermekablakokat tbbflekppen is elrendezhetjk a szl ablakban. A gyermekablakok termszetesen tmretezhet k a szl ablak terletn bell, van azonban nhny alapelrendezs. A gyermekek lehetnek krtyalapszer en egymson, a szl ablakot kitltve egyms mellett vzszintes-, illetve fgg leges osztssal, vgl lehet mindegyik minimlis. Az Arrange metdust hasznlhatjuk az alapelrendezsek vgrehajtsra.
MDIszl .Arrange elrendezs

A metdus az MDIszl objektumon az elrendezs konstansnak megfelel en m kdik. Lehetsges rtkek:


vb Cascade vbTileHorizontal vbTileVertical vbArrangelcons 0 1 23 A nem minimalizlt ablakok tlapolva. A nem minimalizlt ablakok egyms mellett vzszintes osztssal. A nem minimalizlt ablakok egyms mellett fgg leges osztssal. A minimalizlt gyermekeket rendezi.

4.3.3. Az MDI ablakok meni Az MDI szl ablak valamelyik menelemt kijellhetjk arra, hogy a megnyitott gyermekek nevei az adott menben jelenjenek meg, mghozz gy, hogy az aktv gyermekablak is ki van piplva. A felhasznl a gyermekablakok menjt is hasznlhatja a gyermekek aktivizlsra. Az MDIForm meninek WindowList logikai tulajdonsgt a program tervezsekor llthatjuk csak be, s legfeljebb egy menelemre lehet csak igaz (err l a fejleszt i krnyezet gondoskodik).

4.3.4. A Toolbar vezrl A Toolbar vezrl az ablakok eszkztrnak funkciit testesti meg, amely az ActiveX-vezrl k kztt MSCOMCTL.OCX llomnyban tallhat. Hasznlathoz a komponensek kz be kell tlteni a Microsoft Common Controls vezrl ket. A vezrl gomb (Button) objektumok kollekcijt tartalmazza, mely gombokhoz szvegeket (a Caption tulajdonsg) vagy ImageList-be gy jttt kpeket (Image tulajdonsg) rendelhetnk, megnyomsukhoz pedig klnbz funkcikat kapcsolhatunk. Minden gombhoz hozzrendelhetnk egy sztringet, amelyet a Key tulajdonsgba rva egyrtelm en azonostja a gombot. Ezt a sztringet hasznlhatjuk aztn a gombok megklnbztetsre, hiszen minden eszkztrgomb megnyomsa ugyanazt a ButtonClick esemnyt aktivizlja. (Az Index alkalmazsa a gombok trendezhet sge miatt nem egyrtelm !) A Toolbar ltal kezelt objektumokat tervezs alatt a tulajdonsglapon (View\Property Pages) rhetjk el.

4.23. bra A ToolBar tulajdonsgai

Futs kzben az Add s Remove metdussal mdosthatjuk az eszkzsor elemeit. Kiemelt jelent sggel br a Button objektum Style tulajdonsga, melyet belltva tbrButtonGroup rtkre, csoportba foglalhatunk gombokat, illetve a tbrPlaceHolder rtkre, melynek szerepe, hogy helyet biztostson ms objektumoknak (pldul ComboBox) az eszkzsoron.

Akr tervezs alatt, akr programkddal, minden egyes gombhoz egy szveget rendelhetnk a ToolTipText tulajdonsggal. Ha a ShowTips tulajdonsgot igazra lltjuk, akkor ha az egrmutat a gombon id zik, akkor a ToolTipText szvege automatikusan megjelenik. Ha a Toolbar AllowCustomize tulajdonsga igaz, akkor - az eszkztron val dupla kattintssal - futs kzben helyezhetnk el ksztett gombokat az eszkztrra (Hozzads), illetve vehetnk le onnan (Eltvolts) az Eszkztr testreszabsa prbeszdablak felhasznlsval. A gombok megnevezst a Button objektumok Description tulajdonsga tartalmazza. A prbeszdablak Sg gombja a Toolbar objektum HelpFile s HelpContextlD tulajdonsgaival aktivizlhat.

4.23. bra Az eszkztr testreszabsa futs kzben

A Customize Toolbar prbeszdablak programbl is megjelenthet a Toolbar objektum Customize metdusval. A belltsok megvltozsakor a Toolbar objektum Change esemnye aktivldik, melyben a SaveToolbar s a RestoreToolBar metdusokat hasznlhatjuk a pillanatnyi llapotok elmentsre, illetve visszalltsra. 4.3.5. MDI alkalmazs ksztse Pldaknt olyan MDI-alkalmazst ksztnk, amely ktfle grafikus gyermekablak megjelentsre, kezelsre hasznlhat. A megoldsban az egyik ablakot firkapaprnak, msik ablakot pedig rajzlapnak, hvjuk. A firkapapron az egeret lenyomott bal gombbal mozgatva vonalakat rajzolhatunk. A rajzlapon grafikus objektumokat - ellipszisszeletet, ellipsziscikket, ellipszist, poligont, tglalapot, lekerektett tglalapot s vonalat -jelenthetnk meg el re belltott pozcikban.

Az MDI projekt elksztshez egy "standard EXE" projektbe helyezzk az MDI szl ablakot, a hagyomnyos rlapot pedig eltvolthatjuk onnan. A Project Properties prbeszdablak General lapjn belltjuk, hogy az MDIForm1 (ezt a nevet kapja a rendszert l az MDI szl ) legyen az indtskor betlttt objektum. Az AutoShowChildren tulajdonsgot hamisra lltjuk. Kt MDIChild tpus rlapot is ksztnk, az egyiket Firkapaprnak, a msikat pedig Rajzlapnak hvjuk. A Firkapapr Autoredraw tulajdonsgt igazra lltjuk, hogy ne kelljen tr dni az jrarajzolssal. El szr elksztjk az MDIForml formot. A keretablak httrsznt llthatv teszszk, ehhez globlisan deklarljuk a szneket tartalmaz tmbt:
Private szintmb As Variant

Eszkztrat is tesznk a keretablakra. Miel tt segtsgknt felhelyeznnk egy ImageList tpus vezrl t (ImageList1), melynek bitkp elemeit sorra feltltjk az el re elksztett RESOURCE.RES er forrsllomnybl, gy z djnk meg arrl, hogy a Microsoft Common Controls vezrl ket betltttk-e! Az er forrs forrsnyelv vltozata hrom bitkpet tartalmaz:

tdefine IDB_BITMAP3 3 #define IDB_BITMAP2 2 #define IDB_BITMAPl 1 IDB_BITMAP1 BITMAP "openl.bmp" IDB_BITMAP2 BITMAP "open2.bmp" IDB_BITMAP3 BITMAP "exit.bmp"

Egy ToolBar vezrl t is a formra helyeznk (ToolBarl). Ennek ImageList tulajdonsgt az lmageListl objektumhoz rendeljk, s mr is nekilthatunk a gombok elksztshez. El szr egy helykz gombot tesznk fel, majd sorra hrom nyomgombot "nyitl", "nyit2", "Exit" kulcsokkal. Ugyanezeket a kulcsokat hasznltuk az lmageListl feltltsekor, gy ezekkel hivatkozhatunk a bitkpekre is. Minden egyes gombhoz hozzrendelnk egy tippszveget (ToolTipText) s egy megnevezst (Description). A ToolBarl vezrl re felhelyeznk egy ComboBox vezrl t. A kombinlt lista megjelentsre egy Placeholder tpus gombot ksztnk, melynek mreteit megfelel en belltva, megjelentjk benne a sznekkel feltlttt ComboBoxl vezrl t. A form tltsekor intzkednk arrl, hogy a Nvjegy prbeszdablak - megjelenskor - a kperny kzepre kerljn.

Private Sub MDIForm_Load() 'A szntmb feltltse szintmb = Array(vbApplicationWorkspace, vbBlack, _ vbBlue, vbRed, vbwhite) Dim imgX As ListImage 'A kpek feltltse az ImageList vezrl be Set imgX = ImageListl .Listlmages. _ Add(, "nyitl", LoadResPicture(1, vbResBitmap)) Set imgX = ImageListl.Listlmages. _ Add(, "nyit2", LoadResPicture(2, vbResBitmap)) Set imgX = ImageListl.Listlmages. _ Add(, "Exit", LoadResPicture(3 , vbResBitmap)) Toolbarl.ImageList = ImageListl ' Objektumvltoz a Toolbar-hoz Dim btnX As Button ' A hrom objektumnak megfelel gomb hozzadsa a ' kollekcihoz ' A Description s a ToolTipText tulajd.-kat is belltjuk Toolbarl.Buttons.Add , , , tbrSeparator ' A kulcs "nyitl" Set btnX = Toolbarl.Buttons.Add(, "nyitl", , _ tbrDefault, "nyitl") btnX.ToolTipText = "j firkapapr" btnX.Description = btnX.ToolTipText ' A kulcs "nyit2" Set btnX = Toolbarl.Buttons.Add(, "nyit2", , _ tbrDefault, "nyit2") btnX.ToolTipText = "j rajzlap" btnX.Description = btnX.ToolTipText ' A kulcs "exit" Set btnX = Toolbarl.Buttons.Add(, "Exit", , _ tbrDefault , "Exit") btnX.ToolTipText = "Kilps" btnX.Description = btnX.ToolTipText Set btnX = Toolbarl.Buttons.Add(, , , tbrSeparator) ' A szneket tartalmaz ComboBox egy Placeholder stlus ' gombra kerl. A kulcs "combol" Set btnX = Toolbarl.Buttons.Add(, "combol", , _ tbrPlaceholder) btnX.Width = 1500 ' a Placeholder szlessgnek ' belltsa Show

' A Combol objektumot a megjelents utn igaztjuk a ' PlaceHolder stlus gombhoz a kulcs "combol" With Combol .Width = Toolbarl.Buttons("combol").Width .top = Toolbarl.Buttons("combol").top .left = Toolbarl.Buttons("combol").left .Addltem "Norml" ' A sznek feltltse .Addltem "Fekete" .Addltem "Kk" .Addltem "Piros" .Addltem "Fehr" .Listlndex = 0 End With About.top = (Screen.Height - About.Height) / 2 About.left = (Screen.Width - About.Width) / 2 End Sub

Brmelyik eszkztrgomb megnyomsakor, ugyanaz az esemny kerl aktivizlsra, s a kulcsok alapjn dnthetjk el, melyik a megnyomott gomb.
Private Sub Toolbarl_ButtonClick(ByVal Button As ComctlLib.Button) ' Az eszkztron gombnyoms trtnt Select Case Button.Key 'j firkapapr gomb Case Is = "nyitl" jpapr 'j rajzlap gomb Case Is = "nyit2" jraj zlap ' Kilps gomb Case Is = "Exit" ' Kilps End End Select End Sub _

Akr j firkapaprt, akr j rajzlapot ksztnk a megtervezett form egy j pldnyt kell ltrehoznunk. Erre szolglnak az albbi eljrsok.
Sub jpapr() ' j firkapapr ltrehozsa Dim X As Form Set X = New Firkapapr X.Show End Sub Sub j rajzlap () ' j rajzlap ltrehozsa Dim X As Form Set X = New Rajzlap X.Show End Sub

Az eszkztr kombinlt listja segtsgvel bellthatjuk az MDlForm ablak httrsznt.


Private Sub Combol_Click() MDIForml.BackColor = szintmb(Combol.Listlndex) End Sub

A "Fjl" men "j firkapapr", "j rajzlap" s "Kilps" pontjnak kezelse megegyezik a nyomgombnl megismertekkel.
Private Sub openl_Click() ' j firkapapr nyitsa jpapr End Sub Private Sub open2__Click () ' j rajzlap nyitsa jraj zlap End Sub Private Sub Exit_Click() ' A kilps a programbl End End Sub

Bezrhatjuk az aktv ablakot a "Bezr" menponttal. Ha nincs aktv ablak, akkor is aktivizlhatjuk a letltst, mert a hibakezels gondoskodik a zavartalan folytatsrl.
Private Sub bezr_Click() ' Az aktv MDIChild zrsa, ha nincs ilyen ne legyen ' hibazenet On Error Resume Next Unload MDIForml.ActiveForm End Sub

A ,Ablakok" menbe kerlnek a gyermekablak-elrendez hvsok. Az "Ablakok" men ad otthont a megnyitott ablakok listjnak is (WindowList tulajdonsg):
Private Sub Egymsmell_Click() Egymsalatti ablakok Arrange vbTileHorizontal End Sub Private Sub Egymsra_Click() ' Egymsralapolt ablakok Arrange vbCascade End Sub Private Sub Mindikon_Click() ' Az ikonok rendezse Arrange vbArrangelcons End Sub
1

A Nvjegy menvel aktivizlhatjuk a Nvjegy modlis prbeszdablakot.


Private Sub Nvjegy_Click() 'A nvjegy dialgus megjelentse About.Show vbModal End Sub

A tovbbiakban az ablakokban val megjelentssel foglalkozunk. Ha van aktv MDIChild ablak, akkor a Fjl men utn s az Ablakok el bekel dik egy menpont. Ha firkapaprt hasznlunk, akkor a "Firkapapr/Trls" menponttal lehet trlni az aktulis paprt. (Ne feledjk, hogy a firkapapr AutoRedraw tpus). Ha nem a firkapapr az aktv, akkor a "Firkapapr/Trls" nem lthat.
Private Sub Trls_Click() MDIForml.ActiveForm.Cls End Sub

Miel tt bemutatnnk, hogyan m kdik a firkapapr, vizsgljuk meg, hogy a Rajzlappal kapcsolatosan hogyan hasznljuk a menket! A rajzlap klnbz alakzatokat jelent meg, s egyszerre tbb rajzlap is lehet az MDI-alkalmazsban, melyek ms s ms alakzatot tartalmaznak. Ehhez a m kdshez kell illeszkednie a menelemeknek is. Ha a Rajzlap modulban Public mdon deklarlunk logikai vltozkat, akkor azok ms modulokbl is elrhet k s minden egyes rajzlappldnynl nllan ltrejnnek. Ezeket a vltozkat a megjelent objektum nevb l szrmaztatjuk egy "b" bet mg helyezsvel. Pldul a vonal megjelentst szablyoz vltoz a Vonalb. Ezek utn csak arra van szksgnk, hogy a menelem kijelltsgt s a logikai vltozt sszehangoljuk. Ezt egyarnt meg kell tennnk a menpont kivlasztsakor, illetve az MDI-gyermek aktivizlsakor. Az Ellipszis men
Private Sub Ellipszis_Click() ' Ha az ellipszisrajzol menpontot kivlasztjuk, akkor 'a menpont ' az aktulis MDIChild ablakhoz kapcsoldan ' kijelltsgt vlt. Ellipszis.Checked = Not Ellipszis.Checked ' Az aktiv ablak ellipszisb vltozja tartalmazza az ' informcit, hogy van-e az ablakban ellipszis MDIForml.ActiveForm.ellipszisb = Ellipszis.Checked ' jra kell festeni az aktv ablakot MDIForml.ActiveForm.Refresh End Sub

Mivel ugyanilyen az "ellipszicikk", az "ellipszisszelet", a "lekerektett tgla", a "poligon", a "tglalap" s a "vonal" menpont is, csak az utolst mutatjuk be.

Private Sub Vonal_Click() ' fia a vonalhz ment kivlasztjuk, akkor a -menpont az ' aktulis MDIChild ablakhoz kapcsoldan kijelltsget vlt. Vonal.Checked = Not Vonal.Checked ' Az aktiv ablak vonalb vltozja tartalmazza az ' informcit, hogy van-e az ablakban vonal MDIForml.ActiveForm.vonalb = Vonal.Checked ' jra kell festeni az aktv ablakot MDIForml.ActiveForm.Refresh End Sub

Azt is bellthatjuk, hogy egy rajzlapon minden elem rajta legyen, vagy egyik sem. Ennek belltsra a rajzlapMenu eljrst hasznljuk, melynek paramtere {llt) hatrozza meg a belltst, illetve a trlst.
Sub rajzlapMenu(llt As Boolean) ' Segdeljrs a menk s a rajzlaphoz kttt vltozk ' belltsra Ellipszis.Checked = llt MDIForml.ActiveForm.ellipszisb = Ellipszis.Checked Ellipszisszelet.Checked = llt MDIForml.ActiveForm.ellipszisszb = _ Ellipszisszelet.Checked Ellipsziscikk.Checked = llt MDIForml.ActiveForm.ellipsziscb = Ellipsziscikk.Checked Poligon.Checked = llt MDIForml.ActiveForm.poligonb = Poligon.Checked Tglalap.Checked = llt MDIForml.ActiveForm.tglalapb = Tglalap.Checked kertegla.Checked = llt MDIForml.ActiveForm.kerteglab = kertegla.Checked Vonal.Checked = llt MDIForml.ActiveForm.vonalb = Vonal.Checked MDIForml.ActiveForm.Refresh End Sub

gy a menelemek ugyanazt az eljrst aktivizljk:


Private Sub sszes_Click() ' Az sszes elem a rajzlapra kerl rajzlapMenu (True) End Sub Private Sub Semelyik_Click() ' Semelyik elem sem kerl a rajzlapra rajzlapMenu (False) End Sub

A firkapaprokat kezel modulban aktivlskor gondoskodunk arrl, hogy a Trls men jelenjen meg.

Private Sub Form_Activate() ' A paprtrlst lehet v tev men lthatv ttele MDIForml.Firka.Visible = True End Sub

Amikor a firkapapr elveszti a fkuszt vagy megsz nik, elrejtjk a ment.


Private Sub Form_LostFocus() ' A paprtrls men rejtse MDIForml.Firka.Visible = False End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ' A paprtrls men rejtse MDIForml.Firka.Visible = False End Sub

Ha lenyomjuk az egr bal oldali gombjt j vonalat kezdnk


Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ' A firkavonalak kezdete CurrentX = X CurrentY = Y End Sub

s hzzuk, ameddig le van nyomva a gomb.


Private Sub Form_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then Line -(X, Y) End If End Sub

A rajzlap modulban globlisan deklarljuk a pldnyhoz kttt rajzolst vezrl logikai vltozkat.
Public vonalb, tglalapb, ellipszisb, ellipsziscb, _ ellipszisszb, kerteglab, poligonb As Boolean

A lekerektett tglalap rajzolsa s a poligonkifests GDI hvssal trtnik


Private Declare Function RoundRect Lib "gdi32" ( _ ByVal hdc As Long, ByVal XI As Long, _ ByVal Yl As Long, ByVal X2 As Long, _ ByVal Y2 As Long, ByVal X3 As Long, _ ByVal Y3 As Long) As Long Private Declare Function FloodFill Lib "gdi32" ( _ ByVal hdc As Long, ByVal x As Long, _ ByVal y As Long, ByVal crColor As Long) As Long

A rajzlapmen megjelentse s elrejtse hasonl a firkapaprhoz. Aktivizlskor a ment a logikai vltozknak megfelel en kell belltani, amit a menllt eljrs vgez.
Private Sub Form_Activate() ' A rajzok men lthatv ttele menllt MDIForml.Rajzok.Visible = True End Sub Private Sub Form_LostFocus() ' A rajzok men rejtse MDIForml.Rajzok.Visible = True End Sub Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) ' A rajzok men rejtse MDIForml.Rajzok.Visible = True End Sub Sub menlltf) ' A men belltsa a rajzlaphoz kttt logikai ' vltozk alapjn MDIForml.Vonal.Checked = vonalb MDIForml.Tglalap.Checked = tglalapb MDIForml.Ellipszis.Checked = ellipszisb MDIForml.Ellipsziscikk.Checked = ellipsziscb MDIForml.Ellipszisszelet.Checked = ellipszisszb MDIForml.kertegla.Checked = kerteglab MDIForml.Poligon.Checked = poligonb End Sub

A kirajzols a pldnyhoz kttt Paint esemnyben trtnik a logikai vltozknak megfelel en. Az ablak inicializlsakor belltjuk a szksges rajzolsi paramtereket.
Private Sub Form_Initialize() ForeColor = vbBlack FillColor = vbWhite FillStyle = vbSolid End Sub Private Sub Form_Paint() If ellipszisb Then ' ellipszis Circle (100, 100), 80, , , , 2 End If If ellipszisszb Then ' ellipszisszelet Circle (100, 70), 60, , -pi / 3, -4 * pi / 3, 0.5 End If If ellipsziscb Then ' ellipsziscikk Circle (200, 120), 80, , -pi / 5, -pi / 8, 0.4 End If

If poligonb Then ' sokszg Line (5, 5)-(20, 5) Line -(20, 20) Line -(10, 20) Line -(5, 10) Line -(5, 5) ' kifestes FloodFill hDC, 10, 15, ForeColor End If If tglalapb Then ' tglalap Line (60, 160)-(400, 180), , B End If If kerteglab Then ' lekerektett sark tglalap API hvs RoundRect hDC, 200, 10, 300, 110, 80, 30 End If If vonalb Then ' vonalhzs Line (75, 20)-(195, 56) End If End Sub

4.24. bra MDI plda

5. A Visual Basic grafikus lehet sgei, multimdia


Az alapszint Windows-programozs elengedhetetlen kellke a grafikus megjelents. Ennek megfelel en jelen fejezetben kitrnk a grafikus rendszer felptsre s a lehet sgeivel kapcsolatos krdsekre is. A Windows-ban a grafikus megjelentst grafikus alprogramrendszer vgzi, melynek neve GDI (Graphics Device Interface). A GDI eszkzvezrl programokon keresztl kezeli a grafikus perifrikat. Ezltal lehet v vlik, hogy a Windows programokban a klnbz grafikus eszkzket (kperny , nyomtat, rajzgp) egysgesen hasznljuk. A GDI grafikus alprogramrendszer felismeri az aktulis perifria lehet sgeit, s ennek megfelel en m kdik. Pldul, ha egy kperny vezrl nek van grafikus trsprocesszora, amely maga vgzi bizonyos alakzatok megjelentst, akkor ezt a lehet sget a GDI kihasznlja. A Visual Basic objektumok ugyan elfedik a GDI programozsi fellett, azonban API-hvsokkal tetsz leges GDI-fggvnyt elrhetnk. A fejezetben els sorban a Visual Basic lehet sgekre tmaszkodunk, azonban a pldkban kzvetlen GDIhvsok is szerepelnek. Az egyik legfontosabb grafikus elem a program ablakt kpvisel form objektum. A formon hrom grafikus rteget hasznlunk a megjelentskor. A leghts a httr, amelyen metdusok segtsgvel kszthetnk brkat. (Ugyanezek a grafikus metdusok hasznlhatk pldul Printer objektumok esetn is, a nyomtat programozsra.) A kzps tltsz rtegen a cmkket s specilis grafikus vezrl ket helyezhetnk el. Specilis grafikus vezrl k pldul a kpvezrl (Image) s a kpmez (PictureBox), amelyek - a formhoz hasonlan - kpek megjelentsre hasznlhatk. A kpmez re grafikus metdusokkal ugyangy rajzolhatunk, mint magra a formra, tovbb a kerethez hasonlan ms vezrl k troljaknt is alkalmazhat. A kzps szint vezrl i eltakarjk a httr grafikjt. A vezrl k tbbsge a legfels tltsz rtegen foglal helyet. Az vezrl k, amennyiben nem tltszak takarjk az als kt rteget. (Azonos szinten elhelyezked vezrl k takarsi sorrendjt a ZOrder metdussal vltoztathatjuk meg.) Miel tt rszletesen trgyalnnk a Visual Basic braksztsi lehet sgeit, tisztznunk kell nhny alapfogalmat.

5.1. Alapfogalmak
A Visual Basic csak a ktdimenzis grafikt tmogatja, teht a rtegeken minden megjelentend pontnak csak kt koordintja van. Ha a felhasznl trbeli brt szeretne megjelenteni, akkor annak az aktulis rteg skjba val lekpezsr l magnak kell gondoskodnia. A grafikus alkalmazsok tervezsekor dntennk kell arrl, hogy milyen koordintarendszerben dolgozunk. A tvolsgok megadsra hasznlhatunk pldul kppont {pixel) egysgeket, azonban arra is van lehet sgnk, hogy sajt virtulis" tvolsgdimenzikat alkalmazzunk, s gy a konkrt hardvereszkzt l fggetlenl rjuk meg a programunkat. A sznek kezelsekor, a Visual Basic lehet sgeit hasznlva nem kell foglalkoznunk a konkrt hardver-kialaktssal. Egy kevs sznnel rendelkez grafikus eszkz esetn a programunkban definilt szneket a GDI automatikusan rnyalatokkal helyettesti. A kperny , amely a grafikus megjelents leggyakoribb eszkze, raszteres tpus eszkz. Ez azt jelenti, hogy mindenfle megjelents, pldul a vonalhzs is, kperny pontonknt trtnik. Ha egy adott szn vonalat hzunk, akkor a vonal pontjai olyan kperny pontokban jelennek meg, amelyeknek mr van egy meghatrozott szne. A rajzolsi md azt az eljrst jelenti, amellyel rajzols kzben meghatrozzuk, hogyan keverje a rendszer a megjelentend sznt s a httr sznt. Hasonl krds az is, hogy egy adott alakzat kifestsnl milyen mintt hasznljunk. Amikor a grafikus eszkzre vonalat hzunk - akr vezrl k, akr metdusok segtsgvel -, akkor megadhatjuk, hogy a vonal milyen vastag s milyen mintzat legyen. Br a Visual Basic grafikus adottsgait hardverfggetlen mdon hasznljuk, sokszor szksgnk lehet arra, hogy a konkrt megjelent - kperny vagy nyomtat - adatait ismerjk. Lehet sgnk van arra is, hogy az aktulis adatokat lekrdezve a specilis eszkzreszabott grafikus alkalmazst ksztsnk. 5.1.1. Koordinta-rendszerek Tetsz leges bra, kp ltrehozshoz a megjelent skfellet pontjait kell megadnunk, amihez szksgnk van egy koordinta-rendszerre. Rgztennk kell a koordinta-rendszer kezd pontjt a konkrt megjelent eszkz egy fizikailag ltez pontjhoz. El kell dnteni azt is, hogy az ltalunk hasznlt koordinta-rendszernek milyen egysgei vannak. Ezek utn a pontok koordintit mindig a fenti mdon meghatrozott koordinta-rendszerben rtelmezzk. Egy pont (x,y) koordintinak megadsa egyrtelm en definilja, hogy a pont hol jelenik meg a fizikai megjelent eszkzn.

Alaprtelmezs szerint a form koordinta-rendszernek origja az ablak aktv terletnek bal fels sarkban helyezkedik el, az x-tengely jobbra, az y-tengely lefel mutat, a koordinta-egysgek pedig a mr megismert twip (1/1440 inch).

5.1. bra Koordintarendszerek

A grafikus vezrl k {Form, Printer vagy PictureBox) koordinta-rendszernek egysgeit s felhasznlsi mdjt bellthatjuk, illetve lekrdezhetjk a ScaleMode egsz tpus tulajdonsggal. A ScaleMode jellemz szoros klcsnhatsban van az aktulis grafikus vezrl aktv terletnek szlessgt meghatroz ScaleWidth, s a magassgt meghatroz ScaleHeight tulajdonsgokkal. A aktv terlet bal fels sarknak koordintit a ScaleLeft s a ScaleTop tulajdonsgok definiljk, az 5.1. brn lthat mdon. A ScaleMode tulajdonsg kt, min sgileg klnbz belltsi lehet sggel rendelkezik. Az egyik eset a felhasznli lptk koordinta-rendszer, amikor a tulajdonsg rtke vb User (0). A msik az lland lptk koordinta-rendszer, amikor a ScaleMode jellemz rtke nem 0. 5.1.1.1. lland lptk koordinta-rendszerek El szr vizsgljuk meg az lland lptk koordinta-rendszerek belltsi lehet sgeit! A ScaleMode tulajdonsg lehetsges rtkei:

Konstans VbTwips VbPoints VbPixels

rtk Jelents 1 Az x- s az y-tengely egysgei egyarnt a twip (alapbellts). A tengelyek egysgei pontok (1/72 inch). 2 Pa. egysgek pixelek, azaz a konkrt hard3 vereszkzn megjelenthet legkisebb egysg (fgg a kperny , illetve a nyomtat felbontstl. 4 5 6 7 Karakteres felbonts. A vzszintes egysg 120 twip, a fgg leges 240 twip. Mindkt tengelyen az egysg az inch. A millimter mindkt tengely egysge. A tengelyek egysge a centimter

VbCharacters Vblnches VbMillimeters VbCentimeters

Felmerl a krds, hogyan trtnik pldul a millimteregysgek belltsa. A GDI lekrdezi az eszkzvezrl programot az aktulis eszkz milyensgr l, s ennek alapjn lltja be az ltalunk kvnt rtket. Termszetesen az rtkek gyakran hozzvet legesek, mert ha pldul egy egyszer grafikus krtyt hasznlunk, s a kperny mretr l nincs informcink, akkor ugyanaz a millimter-bellts eltr kpet eredmnyez egy 15- s egy 19-

colos kperny n. Ha a ScaleMode tulajdonsgnak nullnl nagyobb rtket adunk, akkor a ScaleHeight s a ScaleWidth jellemz k rtke automatikusan az aktulis eszkz j egysgekben mrt magassgt s szlessgt veszi fel, valamint a ScaleTop s ScaleWidth tulajdonsgok rtke 0 lesz (a koordinta-rendszernk az ablak bal fels sarkba kerl). 5.1.1.2. Felhasznli lptk koordinta-rendszerek Ha a form (kpmez vagy nyomtat) ScaleMode jellemz jt vbUser (0) rtkre lltjuk, akkor magunk definilhatjuk a koordinta-rendszer jellemz it a ScaleHeight, ScaleWidth, ScaleLeft s ScaleTop tulajdonsgoknak val rtkadssal. Ha azonban el szr a ScaleHeight, ScaleWidth, ScaleLeft vagy ScaleTop jellemz k brmelyiknek rtket adunk, akkor a ScaleMode tulajdonsg rke automatikusan 0 lesz. A ScaleHeight, illetve a ScaleWidth tulajdonsgok belltsakor a rendszer az ablak aktulis mrete alapjn hatrozza meg a koordinta-rendszer pillanatnyi lptkt gy, hogy az ablak aktv terletnek magassga ppen ScaleHeight, szlessge pedig ScaleWidth rtk lesz. A belltskor a szmrtk nagysgval a lptket, az el jelvel pedig a koordinta-tengelyek irnyt adhatjuk meg. A pozitv el jel az alapbellts szerinti koordinta-tengely irnyokat (jobbra, le), mg a negatv a fordtott irnyokat lltja be (balra fel). Ha az ablakot a felhasznli koordinta-rendszer defincija utn tmretezzk, a mrettulajdonsgok rtke megvltozik ugyan, azonban a lptk nem.

A fentiek jobb megrtse miatt ksztsnk alkalmazst, melynek ablakban a lptkekt l fgg s r sg tglalaphlt jelentnk meg! (A feladat megoldst a CD mellkleten a KOCKS alkalmazs tartalmazza.) A megolds sorn a menelemeket programbl tltjk. A rajzols lptkt a menvlasztsnak megfelel en llaptjuk meg. A program futs kzbeni ablaka:

5.2. bra A koordinta-rendszerek hasznlata

A formmodul globlis deklarcii:


Option Base 0 Private Lptkek As Variant Private lps As Single

A form betltsekor a Lptkek Variant tpus vltozbl sztringtmbt ksztnk, feltltjk a menelemeket s a mencmeket. (Tervezskor elksztettk a Lptk men egyetlen indexelt elemt a Lptkek(0)-T).
Private Sub Form_Load() Dim i As Integer Form1.Caption = "Mretek" Lptkek = Array("Felhasznl", "100 Twip", "10 Pont", _ "10 Pixel", "Karakter", "Inch", _ "Millimter", "Centimter") For i = 0 To 7 If i > 0 Then Load Lptktmb(i) Lptktmb(i).Caption = Lptkek(i) Next i Lptktmb(1).Checked = True ' alapbellts Form1.ScaleMode = 1 lps = 100 End Sub

A menelemeken val kattints esemnyeit egyetlen eljrs kezeli, amelynek Index paramtere azonostja a kivlasztott menpontot:

Private Sub Lptktmb_Click(Index As Integer) Dim i As Integer For i = 0 To 7 Lptktmb (i) .Checked = False Next i Forml.ScaleMode = Index Lptktmb(Index).Checked = True 'A lpskz a vlasztott lptkt l fgg If Index > 0 Then If Index > 3 Then lps = 1 Else If Index > 1 Then lps = 10 Else lps = 100 End If End If Else
ScaleWidth = 2 0 ScaleHeight = 10 lps = 1 End If

Forml.Refresh End Sub

A tglalaphl rajzolsa a belltsoknak megfelel en trtnik


Private Sub Form_Paint() Dim x As Single, y As Single x = 0 While x < ScaleWidth Line (x, 0)-(x, ScaleHeight) x = x + lps Wend y = 0 While y < ScaleHeight Line (0, y)-(ScaleWidth, y) y = y + lps Wend End Sub

5.1.1.3. A koordinta-rendszerek kezd pontja A ScaleLeft s ScaleTop tulajdonsgok belltsval kzvetett mdon adjuk meg a koordinta-rendszernk kezd pontjt. A bellts utn az ablak aktv terletnek bal fels sarka ppen a (ScaleLeft,ScaleTop) koordintj pontban lesz. Lekrdezskor a fenti jellemz k az aktv terlet bal fels sarknak koordintit szolgltatjk az aktulis koordinta-rendszerben.

A Scale ScaleX s ScaleY metdusok hasznlata A koordintarendszer kijellsre a Scale metdust is hasznlhatjuk: [objektum]
.Scale [(x1, y1) (x2, y2)]

Ha a Scale metdust paramterek nlkl hvjuk, akkor a megadott objektum koordinta-rendszere alaphelyzetbe kerl. Amennyiben a koordinta-rtkeket is specifikljuk, akkor a felhasznli koordinta-rendszerben az aktv ablakterlet bal fels sarknak koordinti (xl,yl), a jobb als sarok koordinti pedig (x2,y2) lesznek. A ScaleX s ScaleY fggvnymetdusokat hasznlhatjuk arra, hogy a vzszintes s a fgg leges tvolsgadatokat tszmoljuk egyik koordinta-rendszerb l a msikba:
[objektum] . ScaleX (szlessg-, [sklbl, sklba])

[objektum] . ScaleY (magassg, [sklbl, sklba])

A szlessg s a magassg paramterek a konvertland tvolsgadatokat tartalmazzk. A sklbl s a sklba paramterek a ScaleMode jellemz nl megismert rtkekkel hatrozzk meg a lptkeket. jdonsg, hogy hasznlhatjuk a
| VbHimetric
8

A tengelyek egysge a szzadmillimter

egysget is. Ha elhagyjuk a sklamegadst, akkor vbHimetric -> vbTwips konverzi trtnik. A metdusok visszatrsi rtke az tszmolt mret. rdemes megjegyezni, hogy ugyanezeket a metdusokat hasznlhatjuk vezrl k helyzetnek s mreteinek meghatrozsra is a
VbContainerPosition VbContainerSize 9 A vezrl helye 10 A vezrl mrete.

paramterekkel. Amennyiben azt szeretnnk elrni, hogy a programban a koordinta-rendszer kezd pontja a form bal als sarkban legyen, az x-tengely jobbra, az y-tengely felfel mutasson, a koordinta-egysgek pedig millimteresek legyenek, akkor az albbi utastsokat kell megadnunk (pldul a Form_Load eljrsban):
Form1.ScaleMode = vbMillimeters

Az utasts hatsra a koordinta-rendszer kezd pontja az ablak bal fels sarkba kerl, az x-tengely jobbra, az y-tengely pedig lefel mutat. Fordtsuk meg az y-tengelyt! Ehhez t kell trnnk felhasznli koordinta-rendszere, amit egyszer en megtehetnk a ScaleHeight el jelnek tlltsval:

Form1.ScaleHeight = -Form1.ScaleHeight

Vgl vigyk a koordintarendszert az ablak bal als sarkba!


Form1.ScaleTop = -Form1.ScaleHeight

5.1.2. Sznek
A Visual Basic a sznek azonostsra 4-bjtos egsz szmokat (long) hasznl. A piros, a kk s a zld alapsznek intenzitsa 0 s 255 kztt vltozhat, s hrom - klnbz intenzits - alapszn (RGB) keversvel llthatunk el szneket. A sznek jellemzsre szolgl ngybjtos egsz als bjtja a zld, a msodik a kk s a harmadik a piros sszetev rtkt hatrozza meg. (A legfels bjt rtke 0.) Ha teht a piros sszetev intenzitsnak hexadecimlis rtke &HE0, a zld &H2A s a kk &H6F, akkor az ilyen mdon definilt szn megadsra az &HE02A6F hexadecimlis szmot hasznlhatjuk. A sznek megadsakor j szolglatot tehetnek a vbxxx sznkonstansok is, pldul a vbRed piros, a vbBlue kk s gy tovbb. A QBColor fggvny a Quick Basic rendszer sznazonostit Visual Basic sznekk konvertlja. A hrom alapsznb l keverhetnk sznt az RGB fggvnnyel, melynek paramterei a piros (red), zld (green) s a kk (blue) sznek intenzitsa. A Windows opercis rendszer ltal hasznlt rendszersznek azonostsra (a vezrl pult belltsainak megfelel en) szintn szmokat hasznlunk. Ezek a sznek szintn ngybjtos egszekkel azonosthatk, azonban ebben az esetben a legfels bjt rtke 8. Pldul a msodik rendszerszn (az aktv ablak cmsora) azonostsra a &H8000002 konstanst hasznlhatjuk. Termszetesen ezen konstansoknak is vannak azonostik, mint pldul a vbActiveTitleBar az aktv cmsor szne, vagy a vbButtonFace a rendszer gombszne. A grafikus objektumok sznezsi jellemz it a httrszn (BackColor), az el trszn (ForeColor), az alakzatok hatrnak a szne (BorderColor), valamint a kifestett alakzatok szne (FillColor) tulajdonsgokkal llthatjuk be, a fenti szndefincik valamelyikt hasznlva. 5.1.3. Rajzolsi md A grafikus vezrl rajzolsi mdjt (rsmdjt) meghatroz DrawMode tulajdonsg dnt arrl, hogy a vezrl brja milyen mdon jelenjen meg a vezrl t tartalmaz ablakban. Ha grafikus vezrl n metdusokkal rajzolunk, akkor a DrawMode tulajdonsg az alakzatok megjelensi mdjt is szablyozza.

A kperny tpustl fgg, hogy a megjelen kppontok (pixelek) sznt milyen mdon kdolja a rendszer. A DrawMode tulajdonsg rtke egy egsz szm (1 s 16 kztt), amely logikai mveletet definil. Akrmilyen tpus kperny vel is van dolgunk, a kppontok sznt a httr s a rajzeszkz sznrtkei kztt vgrehajtott (el re megadott) bitenknti logikai m velet eredmnye hatrozza meg. A DrawMode tulajdonsg lehetsges rtkeit az angol elnevezsekkel egytt az albbi tblzat tartalmazza (a rajzeszkz sznt T, a httr sznt pedig H jelli):
Konstans vbBlackness vbNotMergePen rtk 1 2 Lers A rajzolt pontok szne fekete, akrmi is van a httren. A rajzeszkz sznt s a httr sznt vagy mvelettel sszevetve, majd az eredmnyt neglva keletkezik a kppont szne. not(7orH) A rajzeszkz sznnek inverze s a httr szne s m velettel kombinlva hatrozza meg a kppont sznt, (not T) and H A rajzeszkz sznnek inverze lesz a rajzszn.

vbMaskNotPen

vbNotCopyPen vbMaskPenNot

4 5

not 7
A rajzeszkz szne s a httr sznnek inverze s mvelettel sszevetve hatrozza meg a kppont sznt. T and (not H) A megjelen szn a httrszn inverze lesz.

vblnvert vbXorPen

6 7

not//
Ha rajzeszkz sznvel s a httrsznnel kizr vagy m veletet vgznk, akkor kapjuk meg a raj sznt. T xor H A rajzeszkz sznt s a httr sznt s m velettel sszevetve, majd az eredmnyt invertlva keletkezik a kppont szne, not (T and H) A rajzeszkz s a httr szne - s m velettel kombinlva - hatrozza meg a kppont sznt. T

vbNotMaskPen

vbMaskPen

and H
vbNotXorPen 10 A rajzeszkz sznvel s a httr sznnel kizr vagy m veletet vgznk, majd az eredmnyt negljuk, akkor meg kapjuk a rajzsznt. not(T xor

H)
vbNop 11 Nincs logikai mvelet, azaz a httrszn vltozatlan marad.

Konstans vbMergeNotPen

rtk 12

Lers A rajzeszkz sznnek inverze s a httr szne vagy m velettel sszevetve hatrozza meg a kppont sznt, (not T) or H A rajzeszkz szne lesz a kppont szne (alapbellts). T A rajzeszkz szne s a httr sznnek inverze vagy m veletet kombinlva hatrozza meg a kppont sznt. T or (not H) A rajzeszkz sznvel s a httrsznnel vagy m veletet vgezve kapjuk meg a rajz sznt.

vbCopyPen vbMergePenNot

13
14

vbMergePen

15

TorH
vbWhiteness. 16 A rajzolt pontok szne, akrmi is van a httren, fehr.

5.1.4. Vonalvastagsg s vonaltpus Amikor egy brra vonalat hzunk, nem csak azt kell megadnunk, hogy milyen szn legyen a vonal, hogyan fogjon a toll a papron, hanem azt is, hogy milyen vastag vonalat szeretnnk hzni s milyen mintzattal. Ha metdusokkal rajzolunk, akkor a grafikus trolobjektum {Form, PictureBox) DrawWidth tulajdonsgval llthatjuk be a vonalhz metdusok ltal hasznlt vonalvastagsgot. A tulajdonsg, melynek rtke 1 s 32767 kztt vltozhat, a vonalvastagsgot pixelben (!) definilja. Hasonl a helyzet a grafikus vezrl k (Line, Shape) BorderWidth tulajdonsgval, amely a vezrl k vonalainak vastagsgt szintn pixel (!) egysgekben hatrozza meg. (Apr gyakorlati jelent sggel nem br klnbsg, hogy a BorderWidth tulajdonsg rtke 1 s 8192 kztt vltozhat.) A grafikus metdusokkal trtn rajzolshoz a grafikus objektum DrawStyle tulajdonsgval adhatjuk meg a rajzolt vonal tpust (mintzatt). A DrawWidth s a DrawStyle jellemz k belltsa klcsnhatsban van egymssal. Ha a vonalvastagsg nagyobb, mint egy, akkor a szaggatott-, a pontokbl ll-, a pont- s a dupla-pontvonal egyarnt folyamatos vonalnak ltszik. A Line s a Shape grafikus objektumok esetn a rajzolt vonal tpust a BorderStyle tulajdonsg definilja. Hasonlan sszefggenek a BorderWidth s a BorderStyle jellemz k. Ha a vonalvastagsg nagyobb mint 1, akkor csak a vbSolid (/) s a vblnsideSolid (6) belltsoknak van rtelme, hiszen minden egyb bellts folyamatos vonalat eredmnyez.

A DrawStyle esetben a vonaltpus belltst az albbi tblzat szerint alakthatjuk:


Konstans vbSolid vbDash vbDot vbDashDot vbDashDotDot vbnvisible VbInsideSolid rtk 0 I 2 3 4 Lers Folyamatos vonal (alapbellts). Szaggatott vonal Pontokbl ll vonal. Pontvonal. Pontvonal dupla pontokkal. tltsz vonal A vonaltpus lltsnak akkor van szerepe, amikor az alakzatokat 1 pixelnl vastagabb vonallal hzzuk. Az aktulis bellts esetn a vonalvastagsg az alakzat belseje fel n .

5
6

A BorderStyle konstansai nmileg eltrnek a fentiekt l:


Konstans vbTransparent vbBSSolid vbBSDash vbBSDot vbBSDashDot vbBSDashDotDot vbBSInsideSolid rtk 0 1 2 3 4 5 6 Lers tltsz vonal Folyamatos vonal (alapbellts) Szaggatott vonal Pontokbl ll vonal Pontvonal Pontvonal dupla pontokkal A vonaltpus lltsnak akkor van szerepe, ha az alakzatokat 1 pixelnl vastagabb vonallal hzzuk. Az aktulis bellts esetn a vonalvastagsg az alakzat belseje fel nvekszik.

Pldaknt ksztnk egy olyan alkalmazst (SZNES), melynek ablakban minden egrkattintsra egy tglalap jelenik meg. A tglalap egyik sarka az el z tglalap sarka, a msik pedig az egrmutat pozcija kattintskor. Minden egyes kattintskor vletlenszer en vltoztatjuk a rajzsznt, a rajzolsi mdot s a tglalapot hatrol vonal tpust. A formmodulban a Rajzmd vltozt az alprogramokon kvl (modulszinten) deklarltuk:
Private RajzMd As Integer

A vltozt a Form_Load esemnykezel eljrsban inicializljuk:


Private Sub Form_Load() RajzMd = 0 End Sub

A egrgombok lenyomsakor aktivizld Form_MouseDown eljrsban tglalapokat rajzolunk:


Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Dim xO As Single, yO As Single ForeColor = QBColor(Int(Rnd * 15)) ' vletlenszer rajzszn RajzMd = ((RajzMd + 1) Mod 16) + 1 ' rajzolsi md DrawMode = Raj zMd xO = CurrentX ' aktulis rajzpozci yO = CurrentY Line -(X, Y), , BF ' festett tglalap rajzols If Rnd < 0.5 Then ' vonalvastagsg DrawWidth = 1 Else DrawWidth = Rnd * 10 + 1 ' vastagvonal End If DrawStyle = Int(Rnd * 6) 'a vonaltpus DrawMode = vbBlackness Line (xO, yO)-(X, Y), , B ' tglalaphatr rajzolsa End. Sub

Az alkalmazs futs kzbeni ablaka:

5.3. bra A sznek hasznlata

5.1.5. A kifestsi stlus A rajzolsi mddal s a sznezssel rokon tulajdonsg a vezrl k kifestsi stlusa (FillStyle), melynek segtsgvel bellthatjuk, illetve lekrdezhetjk a rajzolt alakzat kifestshez hasznlt fest mintv. A FillStyle tulajdonsg a grafikus vezrl k esetn a vezrl kifestsre vonatkozik, grafikus trolk esetn pedig a grafikus metdusok m kdst szablyozza. A kifests sznt a FillColor tulajdonsg rtke definilja. A FillStyle jellemz lehetsges rtkei:
Konstans vbFSSolid. vbFSTransparent vbHorizontalLine vbVerticalLine vb UpwardDiagonal vbDownwardDiagonal vbCross vbDiagonalCross 5.1.6. Bitkpek rtk 0 1 2 3 4 5 6 7 Lers Teljes kifests. Nincs kifests, az alakzat tltsz (alapbellts) Sraffozs vzszintes vonalakkal. Sraffozs fgg leges vonalakkal. Sraffozs ferde - balrl jobbra felfel mutat - vonalakkal. Sraffozs ferde - balrl jobbra lefel mutat - vonalakkal. Kereszt-sraffozs. Kereszt-sraffozs ferde vonalakkal.

A kperny n val megjelentsnek alapeszkze a bitkp. A bitkp egy sznskla (a felhasznlhat sznek listjval), s egy tglalapalak kperny rsz minden egyes pontjhoz sznt rendel sznsklaindexek sorozata Ennek alapjn brmely kpet (kprszletet) - mint adatsort - llomnyban trolhatunk, illetve betlthetnk onnan a memriba s megjelenthetnk. A Windows rendszerben a kpek trolsra tbbfle llomnyformtumot hasznlhatunk. Azokat a bitkpeket, amelyek az adott kperny kialakts tulajdonsgait kihasznlva rjk le a kpeket eszkzfgg bitkpeknek nevezzk. Ezeket rendszerint .BMP kiterjeszts llomnyokban talljuk. Lerhat kp kperny fggetlen mdon is, az ilyen bitkpeket .DIB kiterjeszts llomnyok hordozzk. Az ikonok s az egrkurzorok specilis mret bitkpek, melyek trolsra a Windows .ICO, illetve .CUR kiterjeszts llomnyokat hasznl. Hatkony kptrolsi lehet sget biztostanak a szabvnyos .GIF s JPG formtumok. Rgzthetnk kpeket gy is, hogy nem magt a kpet - annak pontjait - troljuk, hanem a kp ltrehozshoz szksges rajzm veleteket (pldul azt, hogy honnan hova

hzunk vonalat s milyen sznbelltssal stb.). Az ilyen mdon elksztett kpeket metafjloknak hvjuk, s .WMF, illetve .EMF kiterjeszts llomnyokban troljuk. Vgl rdemes megjegyezni, hogy a Windows alkalmazsok a memriba tlthet formtumban is hasznlhatnak kpi adatokat. Az ilyen adatokat er forrsoknak nevezzk. A lefordtott er forrsokat tartalmaz llomnyok szoksos kiterjesztse .RES. Minden kperny n megjelen grafikus objektumnak egy memriban trolt bitkp feleltethet meg, legyen az a form httere vagy a parancsgombokon lthat kp stb. A grafikus objektumok esetn ezt a bitkpet kicserlhetjk, s az Image objektum kivtelvel erre a bitkpre rajzolhatunk is (az Image-nek nincs Paint esemnye). 5.1.6.1. A Picture objektum A Picture objektum a bitkpek memriban val trolsnak eszkze, amit a vezrl elemek bitkpet ler tulajdonsgainak belltsra hasznlunk. A Picture objektumok ugyangy kezelhet k mint az eddig megismert vezrl objektumok, pldul akr tmbbe is szervezhet k. Termszetesen a Picture objektumnak is vannak informcihordoz tulajdonsgai. Mivel a bitkp egy pixelekb l sszelltott tglalap alak kperny rszlet, ezrt legfontosabb jellemz i a magassg (Height) s a szlessg (Width). Lttuk, hogy a kpadatok trolsra tbb lehet sg is knlkozik. A feltlttt Picture objektum csak olvashat Type tulajdonsga adja meg a kp lersnak mdjt:
Konstans vbPicTypeNone vbPicTypeBitmap vbPicTypeMetafile vbPicTypelcon vbPicTypeEMetafile rtk 0] 2 3 4 Lers res kp bitkp (.BMP) metafile (.WMF) ikon (.ICO) b vtett metafjl (.EMF)

A bitkp s annak palettja (logikai paletta) egyarnt memria-objektumok. Az API a memria-objektumok azonostsra egsz szmokat (handler) hasznl. A Picture objektum ltal megtestestett bitkp lerjt a Handle, a paletta lerjt pedig hPal tulajdonsg trolja.

5.1.6.2. Bitkpek betltse s kimentse A LoadPicture fggvnyt hasznlhatjuk arra, hogy llomnyban trolt kpet a Picture objektumba, illetve a grafikus vezrl k Picture tulajdonsgba tltsnk.
LoadPicturel[sztringkifejezs})

A sztringkifejezs a kpllomnyt azonostja. Ha argumentum nlkl hvjuk a fggvnyt, akkor ez a grafikus objektum trlst jelenti. A Visual Basic 6 rendszerben a LoadPicture fggvny a szokvnyos Windows alatti grafikus formtumokon tlmen en GIF- s JPG-tpus kpfjlok felolvassra is alkalmas. Az albbi pldban a Picture tpus X memria-objektumot hasznljuk kp trolsra s a vezrl k bitkpeinek belltsra.
Dim X As Picture Set X = LoadPicture("KEP.BMP") Set PictureBoxl.Picture = X

Kzvetlenl a vezrl elemhez is rendelhetjk a betlttt kpet:


Set PictureBoxl.Picture = LoadPicture("KEP.BMP")

Ha a vezrl bitkpt trlni akarjuk, nincs ms dolgunk, mint argumentum nlkl meghvni a LoadPicture fggvnyt:
Set Picturel.Picture = LoadPicture

rdemes megjegyezni, hogy er forrsbl a LoadResPicture fggvny segtsgvel tlthetnk bitkpet, megadva az er forrsban trolt kp azonostszmt s tpust. A Picture s Image tulajdonsgokba betlttt bitkp (.BMP) formtumban llomnyba is menthet
SavePicture kp, sztringkifejezs

Pldul a form htternek kimentse:


SavePicture Form1.Image, "c:\FormKep.bmp"

5.1.7. Bet tpusok A karakterekhez Windows rendszerben n. fontcsaldbl vlaszthatunk megjelensi formt (typeface), mint pldul a Courier, Helv, TmsRmn stb. A karakterek mretnek jellemzsre a pontot (az inch 1/72-ed rszt) hasznljuk. Egy karaktertpus adott mrett nevezik bet tpusnak nevezzk. A Windows az adott mretben torztssal kpes bet tpusokat ltrehozni. A d lt bet ket (italic) egyszer en gy hozza ltre, hogy a

karakter pontjai a bzisvonalon vltozatlanok maradnak, mg a karakter tbbi rsze a bzisvonaltl val tvolsg fggvnyben elcsszik (a karakter megd l). A flkvr bet k (bold) egyszer en a vonalak (stroke) megvastagtsval szrmaztathatk. Nyilvnval, hogy egyszer en ltrehozhatk alhzott {underlined) s thzott (strikeout) karakterek, a megfelel helyre hzott vzszintes vonallal. A Visual Basic a fontok slyt (Weight) hasznlja a karakterek feketesgnek jellemzsre. A 400-as slyrtk a norml s a d lt bet k sajtja, a 700 pedig a flkvr bet k. Amikor egy konkrt fizikai eszkzt hasznlunk, nem lehetnk biztosak abban, hogy az ltalunk kivlasztott karakterkszlet egyltaln megvalsthat-e az adott eszkzn. A GDI - egy pontozsi rendszer alapjn - vlasztja ki a hasznlni kvnt bet tpushoz legjobban illeszked , az adott eszkzn hasznlhat bet tpust. A vezrl k s a grafikt megjelenteni kpes objektumok kzl a Form s a PictureBox tulajdonsgai kztt szerepel a Font jellemz , amelynek rtke Font tpus objektum-hivatkozs lehet. Az elvont Font - bet tpust definil - objektum tulajdonsgaival bet tpusokat definilhatunk. A Font tpus vltozk tartalmt a vezrl k Font tulajdonsgnak rtkeknt is megadhatjuk. A Font tpus objektumok Name tulajdonsga a fontcsald nevt, a Size pedig a karakterek pontokban mrt mrett hatrozzk meg. A Bold s Italic jellemz k a kvrsget s a bet k dntst szablyozzk, mg a StrikeTrought s Underline az thzottsgrl s az alhzottsgrl gondoskodnak. A Weight jellemz a feketesgr l intzkedik. Ezt a jellemz t a tervezs alatt - a bet tpus-vlaszt prbeszdablakban - nem llthatjuk kzvetlenl, hanem a rendszer maga lltja be. Futs kzben tetsz leges rtket kaphat, a rendszer azonban kerekt. Ha 550-nl kisebb szmot adunk meg, akkor 400 lesz a jellemz rtke egybknt 700. j Font tpus objektumot az StdFont tpussal hozhatunk ltre. Pldul a form Label1 vezrl jnek bet tpust llthatjuk, ha egy az StdFont alapjn ltrehozott Font tpus objektummal inicializljuk:
Dim X As New StdFont X.Bold = True X.Name = "Arial" Set Labell.Font = X

5.1.8. A hardvereszkzk adatai A grafikus megjelents alapeszkzei a kperny s a nyomtat. A Visual Basic Screen objektumnak clja az, hogy magba foglalja az aktulis kperny adatait, illetve, hogy a kperny n elhelyezked ablakokat, vezrl ket kezeljk, valamint az ablakon kvl az egrkurzort belltsuk. A Screen objektum ActiveForm tulajdonsgnak segtsgvel megtudhatjuk, hogy melyik az ppen aktv ablak. Ennek a jellemz nek els sorban a tbb ablakot kezel MDI {Multiple Document Interface) - alkalmazsok esetn van jelent sge. Hasonl a helyzet az ActiveControl tulajdonsggal, ami tervezs alatt nem rhet el, s futs kzben is csak olvashat. A tulajdonsg rtke arra a vezrl re hivatkozik, amelyik az inputfkuszt birtokolja. A Screen objektum FontCount s Fonts tulajdonsgai a kperny n aktulisan megjelenthet bet tpusok szmt s nevt hatrozzk meg. Hasonlan a formokhoz s a vezrl khz a Width s a Height tulajdonsgok a kperny mreteit szolgltatjk twip-ekben. Jl hasznlhatk ezek a jellemz k az ablakok kperny n val elhelyezsre. A kperny felbontsrl is kpet kaphatunk a Screen objektum TwipsPerPixelsX s TwipsPerPixelsY tulajdonsgainak lekrdezsvel. Ezek a tulajdonsgok megadjk, hogy egy kppont hny twip szlessg , illetve magassg. A TwipsPerPixelsX s TwipsPerPixelsY jellemz k akkor is jl felhasznlhatk, amikor a Windows API grafikus alprogramjait hvjuk, mivel azok alaprtelmezs szerint pixelben dolgoznak. A Screen objektum MousePointer tulajdonsga segtsgvel az alkalmazshoz tartoz ablakokban az egrmutatt egysgesen megvltoztathatjuk. A nyomtats lehet sgeivel kln fejezetben foglalkozunk, ahol rszletesen trgyaljuk a Printer - az aktulis nyomtatt megtestest - objektum tulajdonsgait, illetve a Printers kollekcit, amely a rendszerben elrhet nyomtatobjektumok gy jtemnye. A kperny vel vont prhuzam kedvrt nzznk meg most nhny, a nyomtat lehet sgeit tartalmaz adatot! A. Printer objektum ColorMode tulajdonsga adja meg, hogy sznes (vbPRCMColor, 2), vagy fekete fehr (vbPRCMMonochrome -1) nyomtatval van dolgunk.

A nyomtatk esetben futs kzben, a Printer objektum tulajdonsgai kzl is lekrdezhet k a nyomtatn megjelenthet bet tpusok szma (FontCount) s a bet tpusobjektumok (Fonts). A papr mrete lekrdezhet vagy bellthat - twipsekben (Height s Width). A nyomtat felbontsrl szolgltatnak informcit a TwipsPerPixelsX, s a TwipsPerPixelsY tulajdonsgok Informldhatunk a nyomtatn belltott papr mretr l is a PaperSize jellemz segtsgvel. Nhny paprmretet definil konstans:
Konstans vbPRPSLetter vbPRPSA3 vbPRPSA4 VbPRPSUser rtk 1 89 256 Lers 8 1 /2x11 inch, A3, 297 x 420 mm, A4, 210x297 mm, a felhasznl adja meg.

Ha a Width s a Height tulajdonsgot magunk adjuk meg, akkor a PaperSize jellemz automatikusan felveszi a vbPRPSUser rtket.

5.2. Grafikus vezrl k hasznlata


Az alkalmazs ablakban grafika megjelentsre, specilis grafikus vezrl ket is hasznlhatunk. Mr volt sz arrl, hogy a grafikus vezrl k az ablak httere el tt, azonban a hagyomnyos vezrl k mgtt, a kzps rtegre kerlnek. Ezltal takarjk a htteret, azonban elrejt znek a hagyomnyos vezrl k mgtt. A kzps rteg ngy alapvet vezrl je:
Line Shape Image Label egyenes vonalak, vonalas s kifestett alakzatok, bitkpek, szvegek megjelentse.

A grafikus vezrl k hasznlata - egyik oldalrl nzve - nagyon kellemes, mert mr a tervezs folyamn kialakthatjuk brinkat, s ha a program futsa kzben dinamikusan vltoz grafikt szeretnnk ltni, akkor err l egyszer en gondoskodhatunk a vezrl k tulajdonsgainak megfelel belltsval. Ugyanakkor ms vezrl kkel ellenttben a grafikus vezrl k nem jelenhetnek meg vezrl k felett, hacsak nem hasznlunk egy kztes trol-objektumot. A grafikus vezrl k nem birtokolhatjk az inputfkuszt, s nem lehetnek trol objektumok. 5.2.1. Vonalhzs a Line vezrl vel A Line vezrl egyetlen feladata egyenes vonalak megjelentse, ennek megfelel en a vezrl nek nincsenek esemnyei. A grafikus trol (form, kpmez ) koordinta-rendszerben a vonal kezd pontjt az X1, Y1, vgpontjt pedig az X2, Y2 tulajdonsgok hatrozzk meg. A jellemz k rtkt a fejleszts sorn s futs kzben egyarnt megvltoztathatjuk. A Line vezrl is rendelkezik a vezrl k alaptulajdonsgaival (Index, Name, Parent, Tag). A Line tpus objektumokbl is szervezhetnk tmbt az Index jellemz segtsgvel. A vonal sznt a BorderColor tulajdonsg rtke hatrozza meg (az 5.1.2. fejezetben lertaknak megfelel en). A vonaltpust s a vonalvastagsgot a BorderStyle s a BorderWidth tulajdonsgokkal szablyozhatjuk pontosan gy, ahogy azt az 5.1.4. fejezetben lertuk. A rajzols mdjt a DrawMode jellemz definilja, melynek hasznlatt s lehetsges rtkeit az 5.1.3. fejezetben ismertettk. A Line vezrl esetben a ZOrder metdus a kzps rtegen val pozci meghatrozst vgzi. A Refresh metdus segtsgvel pedig jrarajzolhatjuk a vonalat.

5.2.2. Alakzatok rajzolsa a Shape vezrl vel A Shape (alakzat) vezrl t tglalapok, krk, ellipszisek, lekerektett tglalapok stb, krvonalnak, vagy kifestett terletnek rajzolsra hasznlhatjuk. Az alakzatoknak a Line vezrl khz hasonlan nincsenek esemnyei. Az alakzat Shape tulajdonsga dnti el, hogy milyen alakzat jelenik meg. Az albbi tblzat a lehetsges belltsokat tartalmazza:
Konstans vbShapeRectangle vbShapeSquare vbShapeOval vbShapeCircle vbShapeRoundedRectangle vbShapeRoundedSquare rtk 0 1 2 3 4 5 Lers tglalap (alapbellts), ngyzet, ellipszis, kr, lekerektett tglalap, lekerektett ngyzet.

A Shape vezrl esetn - mint a vezrl k tbbsgnl - az elhelyezkedst a Le/f, Top, Height s Width tulajdonsgok hatrozzk meg. Minden egyes Shape bellts esetn kzppontosan szimmetrikus alakzatot kapunk, amelynek kzppontja a vezrl kzppontjba kerl. Tglalap esetn a vezrl sarkai egyttal a tglalap sarkai. Ha ngyzetet rajzolunk, akkor a ngyzet lnek hossza a vezrl rvidebb oldalnak hosszval egyezik meg. Ellipszis esetn az ellipszis f tengelyei megegyeznek a vezrl szimmetriatengelyeivel. Ha a krt vlasztjuk, akkor a kr tmr je s a vezrl rvidebb lnek hossza azonos. A lekerektett ngyzet s tglalap esetn a lekerekts sugara nagyjbl a rvidebb oldal tizede. Az alakzatot hatrol krvonal megrajzolshoz hasznlt vonal tpusa, szne s vastagsga a BorderStyle, BorderColor s BorderWidth tulajdonsgok segtsgvel llthat be. A DrawMode tulajdonsg pedig rajzolsi mdot definilja. Rajzolhatunk kifestett alakzatokat is a fest mintt a FillStyle, a fest sznt pedig a FillColor tulajdonsg rtkvel megadva. A BackStyle tulajdonsg belltsval - a Label vezrl khz hasonlan - dnthetnk arrl, hogy az alakzat takarja a htteret (Opaque), vagy tltsz (Transpareni) legyen. Ha az alakzat takarja a htteret, akkor az alakzat alapszne a BackColor tulajdonsg belltstl fgg. A Shape vezrl esetn a ZOrder s a Refresh metdusok mellett - a vezrl k trgyalsa sorn mr megismert - Move metdust is hasznlhatjuk az alakzat mozgatsra.

Ha az ablakban egy labdt szeretnnk pattogtatni, akkor a feladatot legegyszer bben gy oldhatjuk meg, hogy az ablakban egy Shape vezrl ltal megtestestett labdt mozgatunk. Ahhoz, hogy a programunk kpes legyen esemnyvezrelt animcira, egy id zt (Timer) vezrl t is kell hasznlnunk, melynek az Enabled tulajdonsgt igazra lltva, mris "ketyeg" az ra. Az id zt Interval tulajdonsgban megadott ezredmsodpercenknt "t" az ra. Az rats esetnkben azt jelenti, hogy a Windows meghvja a Timer1_Timer esemnykezel eljrst, ahol intzkedhetnk a labda mozgatsrl. A tervezsi sorn az rlapon elhelyeztnk egy cmkt {Labell) nagy kk bet kkel kirt "Vezrl garfika" felirattal. A labdt megtestest Shape vezrl neve Labda, mely tulajdonsgait form ltrehozsakor lltjuk be. A labdt a "Format\Order\Bring to Front" menpont segtsgvel a szveg el tettk. A modulban globlisan deklarljuk a dx, dy elmozdulsokat.
Private dx As Integer, dy As Integer

A form objektum ltrehozsakor meghvd esemnykezel eljrsban gondoskodunk a Labda jellemz inek belltsrl:
Private Sub Form_Load () dx = 100 dy = 100 'a labda formjnak s sznnek megadsa Labda.Shape = vbShapeCircle Labda.BorderColor = vbRed Labda.FillColor = vbRed End Sub

A labda mozgatsakor az x- s az y-irny elmozdulsokat {dx, dy), id egysgenknt hozzadunk a labda aktulis pozcijhoz. A labda mozgatsrl az id zt ltal kivltott esemnyek kezelsekor gondoskodunk. Megvizsgljuk, hogy a labda a falnak tkztt-e, s ha igen, akkor megfordtjuk a megfelel sebessgkomponenst.
Private Sub Timerl_Timer() If (Labda.Left + Labda.Width + dx > Form1.ScaleWidth) _ Or (Labda.Left + dx < 0) Then dx = -dx End If If (Labda.Top + Labda.Height + dy > Form1.ScaleHeight) _ Or (Labda.Top + dy < 0) Then dy = -dy End If Labda.Top = Labda.Top + dy Labda.Left = Labda.Left + dx End Sub

Az ablak tmretezsekor kzpre helyezzk a labdt s a szveget:


Private Sub Form_Resize() Labda.Left = (Forml.ScaleWidth - Labda.Width) / 2 Labda.Top = (Forml.ScaleHeight - Labda.Height) / 2 Labell.Left = (Forml.ScaleWidth - Labell.Width) / 2 Labell.Top = (Forml.ScaleHeight - Labell.Height) / 2 End Sub

A feladat teljes megoldst a CD LABDA alknyvtra tartalmazza.

5.4. bra Pattog labda Shape vezrl vel

5.2.3. Bitkpek hasznlata az Image vezrl vel A bitkpek megjelentsre szolgl legegyszer bb eszkz az Image (kp) vezrl . A kpvezrl nek is els dleges feladata a grafikus megjelents, azonban az alapvezrl khz hasonlan, a Line s a Shape vezrl kkel ellenttben, a kpen trtnt esemnyek kezelst is tmogatja. Az Image objektum a - szintn kpek megjelentsre szolgl - PictureBox lehet sgeinek csupn egy rszvel rendelkezik, azonban a gyorsabb kpmegjelentssel krptolja a programozt a kevesebb programozsi lehet sgrt. Az Image vezrl megjelenst szablyoz tulajdonsgok kzl a single tpus Left, Top, Height, Width jellemz k a kp - ablakon belli - elhelyezkedst definiljk, a Boolean tpus Visible tulajdonsg pedig a lthatsgot vezrli. Az Image rendelkezik tovbb a skbeli/trbeli megjelenst vezrl Appearance tulajdonsggal. A keretet meghatroz BorderStyle jellemz lehetsges rtkei is a tbbi vezrl nek megfelel en alakulnak ( None (0) - nincs keret, "Fixed Single" (/) - vkony vonal a keret). Mint minden vezrl , az Image is gyermekablakknt jelenik meg, ezrt van Parent tulajdonsga a szl -, s Container tulajdonsga a trolobjektum azonostsra. A kpvezrl ms vezrl k troljaknt nem hasznlhat.

Mint a vezrl knl ltalban a felhasznli beavatkozsok ltal kivltott esemnyek fogadsa letilthat az Enabled tulajdonsggal. Az Image objektum megjelense a jellemz lltsval nem vltozik. Az Image vezrl elhelyezkedsnek megvltoztatsra a Move metdust is hasznlhatjuk. A Refresh metdus jrarajzolja a kpet, melynek kzps rtegen val elhelyezkedst a Zorder metdus szablyozza. Az Image objektum ltal megjelentett kpet a Picture tulajdonsg trolja. A kpet futs kzben a LoadPicture fggvny segtsgvel definilhatjuk (illetve er forrsbl a LoadResPicture fggvnnyel tlthetjk be). Fejlesztsi fzisban a tulajdonsgablak Picture rovatban szerepl ... gomb megnyomsa utn, az ltalnos fjlnyitsi ablak segtsgvel vlaszthatjuk ki a kpllomnyt. Felmerl a krds, hogy a vezrl mrete s a betlttt bitkp mrete milyen klcsnhatsban van egymssal. Ha a Boolean tpus Stretch tulajdonsgot igazra lltjuk, akkor a bitkp olyan mdon torzul, hogy kitltse az kpvezrl ablakt. Alapbellts szerint a Stretch jellemz False rtk , ami azt jelenti, hogy vezrl ablaka felveszi a kp mreteit. A labda mozgatshoz hasonlan, az Image vezrl vel rajzfilmszer animcit is kszthetnk. A pldaprogram (FIGURA) ablaka:

5.5. bra Animci az Image vezrl vel

A megoldsban az rlap Caption tulajdonsgnak rtke Kpanimci, az Appearance tulajdonsg pedig Flat. Az rlapra felhelyezett Image1 s Image2 vezrl k az IMAG1.BMP, illetve az IMAG2.BMP bitkpllomnyokat tartalmazzk. A form tltsekor egymsra helyezzk a kt bitkpet s megfelel mret re lltjuk az alkalmazs f ablakt! Indulskor az egyik kp lthat a msik azonban nem. A kpek lthatsgnak vltst egy id zt t l vezrelve vgezzk, melyet szintn elhelyeztnk az rlapon.
Private Sub Form_Load() Image2.Left = Imagel.Left Image2.Top = Image1.Top Form1.Width = Image1.Width + 2 * Imagel.Left _ + (Form1.Width - Form1.ScaleWidth) Form1.Height = Imagel.Height + 2 * Imagel.Top _ + (Form1.Height - Form1.ScaleHeight) Imagel.Visible = True Image2.Visible = False End Sub

Az id zt vltja a kpek lthatsgt:


Private Sub Timerl__Timer () Imagel.Visible = Not Imagel.Visible Image2.Visible = Not Image2.Visible End Sub

5.3. Rajzols grafikus metdusokkal


A grafikus alakzatok megjelentsnek - az eddigiekben megismertekt l eltr - msik tja a grafikus metdusok hasznlata a formon val megjelentsre. Ekkor a megjelen grafika leghts rtege a form httere, amelyre rajzolhatunk. A grafikus metdusokat alkalmazva a program kdjban dnthetnk arrl, hogy mi jelenjen meg az ablakban. Ilyen mdon tbbet kell programoznunk, brink azonban sokkal dinamikusabb vlhatnak. A formhoz hasonlan a kzps rtegen elhelyezked PictureBox (kpmez ) vezrl ablakban is rajzolhatunk metdusokkal. Ha rszletesebben megvizsgljuk a Form s a PictureBox objektumokat, akkor azt talljuk, hogy a grafikus megjelents szempontjbl egyenrtk ek. A grafikus metdusok mindkt objektum esetn azonos mdon m kdik. Ha a PictureBox vezrl Boolean tpus AutoSize tulajdonsgnak rtke True, akkor a kpmez mretei - ugyangy, mint ahogy azt az Image vezrl nl lttuk automatikusan igazodnak a megjelentett kphez. Ha azonban az AutoSize rtke False, akkor a kpmez mretei nem fggenek a megjelentett bitkpt l. (Felhvjuk a figyelmet arra, hogy ellenttben az Image vezrl vel, a PictureBox vezrl nek nincs Stretch tulajdonsga.) A PictureBox elhelyezkedst az Align tulajdonsggal is szablyozhatjuk, melynek klnbz rtkeivel a kpmez t a szl ablak szleihez igazthatjuk:
Konstans vbAlignNone vbAlignTop 23 vbAlignBottom 4 vbAlignLeft rtk 01 Lers a kpmez elhelyezkedst a tervezs alatt megadott pozci hatrozza meg, a kpmez a szl ablak fels szlhez igazodik, s szlessge (Width) azonos lesz a szl ablak aktv terletnek szlessgvel (ScaleWidth), a kpmez a szl ablak als szlhez igazodik, s szlessge (Width) azonos lesz a szl ablak aktv terletnek szlessgvel (ScaleWidth), a kpmez a szl ablak bal szlhez igazodik, s magassga (Height) azonos lesz a szl ablak aktv terletnek magassgval (ScaleHeight), a kpmez a szl ablak jobb szlhez igazodik, s magassga (Height) azonos lesz a szl ablak aktv terletnek magassgval (ScaleHeight).

vbAlignRight

A Printer objektumok segtsgvel nyomtatst vgezhetnk. A nyomtatsi lehet sgekkel a ks bbiekben rszletesen foglalkozunk.

5.3.1. Rajzols a grafikus objektumok ablakban Miel tt rszletesen trgyalnnk a grafika ksztsnek fogsait, ismerkedjnk meg a I Windows kperny n val megjelentsnek alapelveivel! 5.3.1.1. jrafests - a Paint esemny s a Refresh metdus A Windows felgyelete alatt egyszerre tbb alkalmazs is m kdhet, melyek felhasznli fellete ablakokban jelenik meg. Az ablakok mrete s pozcija megvltozhat, az egyik ablak rszben vagy egszen elfedheti a msikat. Alaphelyzetben minden -a grafikus objektum ablakban trtn - vltozskor Paint esemny jn ltre, amely ar- ra szolgl, hogy az esemnykezel jrarajzolja az ablaknak azt a rszt, amelyik a vltozsig lthatatlan volt. Az ablakok frisstend terleteit maga a Windows rendszer jegyzi meg. Ha azt szeretnnk, hogy a grafikus objektum ltal megjelentett kpet az alkalmazs frisstse, akkor grafikus metdusainkat a Paint esemnyt kezel eljrsba kell helyeznnk! Magunk is frissthetjk az ablak tartalmt - amennyiben a Paint esemny kezelse sorn rajzolunk - a Refresh metdus segtsgvel:
objektum.Refresh

A metdus hvsa az objektumhoz tartoz ablak teljes fellett rvnytelenti, s a Windows meghvja az objektum Paint esemnynek kezel jt. 5.3.1.2. lland grafika, az AutoRedraw tulajdonsg Az Form s a PictureBox objektumoknak egyarnt van egy AutoRedraw Boolean tpus tulajdonsga. A tulajdonsg alapbelltsa False, ami azt jelli, hogy az ablak kifestsekor Paint esemny keletkezik. Ha a rajzmveletek a Paint esemny kezel jn kvl helyezkednek el, akkor a kvetkez frisstskor az ablak tartalma (rszben vagy teljesen) trl dik. Ha az AutoRedraw tulajdonsgot True rtkre lltjuk, akkor a programunk lefoglal egy memriaterletet, s minden egyes grafikus metdus erre a memriaterletre kszti el a "kpzeletbeli" rajzot. Ezek utn az ablak tartalmnak frisstse nem a Paint esemny kezel jben trtnik, hanem egyszer en a memriban trolt kp alapjn. (Ilyenkor nem is keletkezik Paint esemny!) rdemes megjegyezni, hogy az AutoRedraw tulajdonsg rtke futs kzben is megvltoztathat, gy vegyesen hasznlhatjuk az lland grafikt s a Paint esemnyt. Az lland grafika ltrehozsakor a grafikus metdusok egy nem lthat bitkpre rajzolnak, s a rendszer ezt a bitkpet hasznlja jrarajzolskor. Programbl a bitkpet a grafikus objektumok Image jellemz jvel azonosthatjuk.

5.3.1.3. Az rvnytelen terletek kezelse - a ClipControls tulajdonsg Ha a Paint esemnyt hasznljuk az ablak jrafestsre, dnthetnk arrl, hogy az ablak mreteinek nvelsekor az egsz ablak legyen-e jrafestve vagy csak az j terletek. Az Form s a PictureBox objektumok egyarnt rendelkeznek egy Boolean tpus - futs kzben csak olvashat - ClipControls tulajdonsggal. A tulajdonsg alaprtke True, gy az ablakmret nvekedskor a Paint esemny kifesti az objektumhoz tartoz teljes ablakot. Ebben az esetben a Windows a nem grafikus vezrl k ltal elfoglalt terletet automatikusan rvnyesti, ezrt ezeken a terleteken nincs jrarajzol s. Ha a ClipControls tulajdonsg rtke False, akkor mretnvekeds esetn a Paint csak az j terletek jrafestsr l gondoskodik, s az jrafests vgbemegy a nemgrafikus vezrl k mgtt is. Mivel a Form tartalmazhat PictureBox objektumot, ezrt a kt grafikus objektumon az ellenkez ClipControls belltsa zavarokat okozhat. Kerljk az ilyen eseteket! 5.3.1.4. Az AutoRedraw, a ClipControls s a rtegek Az AutoRedraw s a ClipControls tulajdonsgok belltsai - attl fgg en, hogy a Paint esemny kezelsekor hvunk-e grafikus metdusokat vagy sem - megvltoztathatjk a hrom egyms mgtti grafikus rteg hasznlatnak mdjt. Az albbi tblzatban sszegeztk a klnfle belltsok hatst sszegzi:
AutoRedraw True True False False ClipContols True False True True Grafikus metdusok nincs esemny nincs esemny igen nem Rtegek hasznlata norml, norml, a kifestskor nincsenek kivgott rszek, norml, a nem grafikus vezrl k vannak ell, a grafikus vezrlk s a metdusok bri keverten jelennek meg (*), norml csak azokra a pontokra, amelyek el z leg fedettek voltak, vagy az ablak mreteinek nvekedse miatt jelentek meg, a vezrl k s a grafikus metdusok bri keverednek a rtegeken (*)

False

False

igen

False

False

nem

Lehet leg kerljk a fenti tblzatban csillaggal (*) jellt eseteket!

5.3.1.5. A rajzols mdjnak belltsa, az aktulis pozci Tudjuk, hogy az objektumok elhelyezkedst a Left, Top, Height s Width tulajdonsgok hatrozzk meg. A ScaleLeft, ScaleTop, ScaleHeight s ScaleWidth tulajdonsgok, valamint a ScaleMode jellemz rtke pedig meghatrozza a lekpezst. A BackColor az ablak htternek szne, melynek belltsa trli a feliratokat s az lland grafikt. A ForeColor tulajdonsg a feliratok s az rajzok sznt, mg a FillColor a kifestett alakzatok mintjnak sznt hatrozza meg. A grafikus metdusok ltal hasznlt rajzolsi mdot a DrawMode tulajdonsg definilja. A kifestett alakzatok mintjt a FillStyle tulajdonsg segtsgvel llthatjuk be. A vonalak esetn a vonaltpus (DrawStyle) s a vonalvastagsg (DrawWidth) is bellthat. A Font tulajdonsg a kirt szveg bet tpust szablyozza. A grafikus objektumok metdusaival trtn rajzols vektoros jelleg , ami azt jelenti, hogy a kperny re is gy rajzolunk, mintha rajzgpre ksztennk rajzot. A kperny esetn is hasznlhatunk egy aktulis tollpozcit, amelyet az alkalmazott grafikus metdus mdost. Az aktulis pozcit a grafikus objektum CurrentX s CurrentY tulajdonsgai tartalmazzk, illetve az aktulis tollpozcit (felemelt tollal mozgs a rajzgpnl) a jellemz k belltsval magunk is mdosthatjuk. Az aktulis pozci minden esetben a belltott koordinta-rendszerben rtelmezett. 5.3.2. Grafikus metdusok A grafikus metdusokat hasznlva trlhetjk grafikus objektumaink ablakt, pontokat rajzolhatunk, illetve lekrdezhetjk adott kppont sznt. Hasznlhatjuk a metdusokat egyenes vonalak-, kifestett tglalapok-, ellipszisvek- s kifestett ellipszisek cikkeinek s szeleteinek kirajzolsra. Kln metdusok szolglnak a szveges informcik s a bitkprszletek megjelentsre.

5.3.2.1. Az ablak tartalmnak trlse


A Cls metdust hasznlhatjuk a futs kzben ltrehozott rajzok trlsre:
[objektum.]Cls

Ha az AutoRedraw tulajdonsg rtke True, akkor a Cls hvsakor csak az lland rajzolt grafika t nik el. Ha a Cls metdust AutoRedraw=False belltssal alkalmazzuk, akkor az csak a nem lland grafikt trli. A Cls metdus a CurrentX s CurrentY tulajdonsgokat egyarnt 0-ra lltja.

5.3.2.2. Pontok megjelentse A grafikus objektumok (Form, PictureBox) tetsz leges pontjnak sznt lekrdezhetjk a Point metdussal:
[objektum.]Point(x, y)

A metdus visszatrsi rtke egy Long tpus egsz szm, amely az adott pont RGBszneit adja meg. Ha az objektum ablakn kvli pontot adunk meg, akkor a fggvny visszatrsi rtk -1. Az x s az y paramterek a grafikus objektum ablaknak bels pontjt definiljk, az aktulis koordinta-rendszerben. Pontokat - illetve kifestett krket - rajzolhatunk a PSet metdussal:
[objektum.]PSet [Step] (x, y)[, szn]

A Step kulcssz nlkl az x s y paramterek a krdses pont kzppontjnak koordintit definiljk az aktulis koordinta-rendszerben. Ha Step kulcsszt is megadjuk, akkor az x s az y paramterek a CurrentX s a CurrentY koordintj ponthoz viszonytott (relatv) tvolsgokat jellnek. Ha nem adjuk meg szn paramtert, akkor a ForeColor bellts rvnyesl. A megrajzolt pont mrett a.DrawWidth tulajdonsg hatrozza meg. A DrawMode s a DrawStyle belltsok definiljk a pont rajzolsnak s festsnek mdjt. A metdus a CurrentX s a CurrentY tulajdonsgokat a pont kzppontjra lltja. 5.3.2.3. Egyenes vonal alakzatok rajzolsa A Line metdussal vonalakat s tglalapokat jelenthetnk meg:

A Step kulcssz megadsa esetn a kulcsszt kvet koordintk a (CurrentX, CurrentY) koordintj ponthoz viszonytott tvolsgokat jellnek. Ha az alakzat kezd pontjt (xl,yl) nem adjuk meg, akkor az aktulis pontbl hzunk vonalat. Az alakzat vgpontjt kijell (x2,y2) paramterek megadsa ktelez . Termszetesen minden koordinta az aktulis koordinta-rendszerben rtelmezett. Ha nem a ForeColor belltst szeretnnk hasznlni, akkor a szn paramterrel magunk adhatunk meg rajzsznt. A B kapcsol dnti el, hogy milyen alakzatot rajzolunk. Ha nem hasznljuk a B-t, akkor a metdus vonalszakaszt jelent meg. A B hasznlata esetn egy kifestett tglalap jelenik meg a kezd - s vgpont ltal meghatrozott tellenes sarokpontokkal, a FillColor s a FillStyle belltsoknak megfelel en. Az F kapcsol csak a B-vel egytt hasznlhatjuk, s hatsra a megadott sznne\ kifestett tglalapot rajzol

metdus. A rajzols sorn felhasznlt vonalvastagsgot a DrawWidth tulajdonsg hatrozza meg. Termszetesen a rajzols mdjra hatssal van a DrawMode s a DrawStyle jellemz k rtke. A metdus a vgpontba helyezi az aktulis rajzpozcit. 5.2.3.4. Grbevonal alakzatok rajzolsa Krlapot, krvet, krcikket, vagy krb l torztott ellipszislapot, ellipszisvet s ellipsziscikket rajzolhatunk a Circle metdussal:
[objektum. ]Circle [Step] (x, y) , sugr [, szn _ [, kezdet[, vg [, aspektus]]]]

Az x s y paramterek a megrajzoland alakzat kzppontjt hatrozzk meg, az aktulis koordinta-rendszerben. (A Step kulcssz hasznlata esetn a kzppontot az aktulis pozcihoz viszonytva (relatvan) adjuk meg.) A sugr paramter definilja a megrajzoland alakzat aktulis lptkben mrt sugart. A hzott vonal sznt a szn paramterrel definilhatjuk. Ha nem adunk meg sznt, akkor a ForeColor lesz a vonal szne. Ha nem teljes krt vagy ellipszist szeretnnk rajzolni, akkor a kezdet s a vg paramterekkel az v kezd - s a vgpontjnak - radinban mrt - kzpponti szgt adhatjuk meg. Ha negatv szgeket hasznlunk, akkor a metdus a szg abszolt rtkt veszi s megrajzolja az adott ponthoz csatlakoz sugrt is. (A szgeket az ramutat jrsval ellenttes irnyban kell rtelmezni.). Az aspektus paramter a deformlt kr - ellipszis - fgg leges s vzszintes tengelyeinek arnyt lltja be. A paramter alaprtke 1, ami a krhz tartozik. Az vvonal tpust s vastagsgt a DrawStyle s a DrawWidth tulajdonsgok hatrozzk meg. A zrt alakzatok kifestsekor a FillColor s a FillStyle belltsok rvnyeslnek. A Circle metdus a kzppontra lltja az aktulis pontot. 5.2.3.5. Szveges informcik megjelentse Az bet tpus-belltsokat hasznlva a Print metdus segtsgvel szvegeket jelenthetnk meg grafikus objektumok ablakban:
[objektum.]Print [[Spc(n) | Tab(n)] kifejezs [karpoz]]

A metdus paramtereknt adjuk meg kirand adatokat (kifejezs). A metdus a kirst a (CurrentX, CurrentY) pozciban kezdi. A kirand kifejezs el tt hasznlhatjuk a Spc fggvnyt, amely n szm szkzt helyez el a kirt szveg el tt. A Tab fggvnnyel tbb oszloppal - karakterrel -jobbra kezdhetjk a kirst. (Kirskor az adott bet tpus tlagos karakterszlessgnek felel meg egy oszlop.) Ha a Tab fggvnyben nem hasznlunk paramtert, akkor a kirs jobbra, az aktulis pozcihoz

kpest legkzelebbi tabultorpozcin kezd dik. (A tabultorpozcik 14 oszloponknt helyezkednek el.) A Print metdussal a paramterben megadott adatot rhatjuk ki, amely lehet egy vagy akr tbb egymstl elvlasztott - sztring-, illetve numerikus kifejezs. Ha tbb elemet jelentnk meg, akkor elvlasztjelknt a pontosvessz t (;), a szkzt s a vessz t (,) egyarnt hasznlhatjuk. Az els kt esetben a kvetkez adatelem kirsa az adott sorban, a kvetkez karakterpozcitl folytatdik, mg az utbbi esetben a kvetkez tabultorpozcitl. A karpoz a kirs folytatsnak mdjt definilja, vagyis meghatrozza, hogyan vegye figyelembe a Print metdus a CurrentX s CurrentY tulajdonsgok rtkt. Ha a karpoz helyn pontosvessz (;) ll, akkor a kvetkez kirs kzvetlenl a jelenlegi kirs mg kerl. A karpoz jelzs helyn hasznlhatjuk a Tab fggvnyt s a vessz t (,) is a kvetkez kirs helynek meghatrozsra. Ha a karpoz jelet elhagyjuk, akkor a kvetkez sorba kerl az aktulis pont. A proporcionlis karakterek hasznlata miatt a szveges informcik megjelentse a nyomtatsi kp megtervezse - nem egyszer feladat. Nagy segtsg lehet a nyomtatskor, ha tudjuk azt, hogy a klnbz szvegek mekkora helyet foglalnak el a megjelent eszkzn. Akirand szveg szlessgt lekrdezhetjk a TextWidth metdussal:
[objektum.]TextWidth(sztring)

A metdus visszatrsi rtke a paramterknt tadott sztring szlessge az adott objektum (a form, ha nem adjuk meg) koordinta-rendszernek egysgeiben mrve. rdemes megjegyezni, hogy ha a sztring tbbsoros szveget tartalmaz, akkor a metdus visszatrsi rtke a leghosszabb sor szlessge. Hasonl mdon hasznlhatjuk a szveg magassgt meghatroz TextHeight metdust:
[objektum.]TextHeight(sztring)

A TextHeight metdus figyelembe veszi a bet tpusban definilt sorkz adatokat is. Ha a szveg tbbsoros, akkor a teljes szveg megjelentshez szksges magassg a visszatrsi rtk. Gyakori problma a numerikus adatok szveges informciknt trtn megjelentse. Gondoljunk csak a pldul a tizedesvessz hz trtn igazts, illetve dtumok kirsnak nehzsgeire. Munknk sorn nagy segtsget nyjthat a Format fggvny, melynek feladata a megjelentsre sznt informcik megadott clok szerinti sztringg alaktsa:
Format(kifejezs[, formtum])

A fggvny a megadott numerikus, szveg- vagy dtumkifejezst alaktja t a formtum defincinak megfelel en. A formtumsztr'mg definilja az informci kirsnak mdjt. 5.2.3.6. Kpek megjelentse A grafikus objektumok ablaknak adott pozcijban kpet, illetve kprszletet jelenthetnk meg a PaintPicture metdus segtsgvel:
[objektum.]PaintPicture kp, xl, yl[ , szll[, mag1 _ [, x2[, y2[, szl2[, mag2[, m velet]]]]]]]

A kp megjelentse valjban bitkp msolst jelenti, ahol a msols clja a {Form, PictureBox) objektum ablaka, forrsa pedig a kp paramterrel kijellt bitkp. Forrsknt megadhatjuk a form, a kpmez {PictureBox), illetve a kpvezrl {Image) htterbe betlttt kpet {Picture) is. A form s a kpmez esetn, az AutoRedraw - True bellts mellett, a grafikus metdusok hasznlatnak eredmnye is msolhat az Image tulajdonsg felhasznlsval. Az clablakban a msolt kp bal fels sarknak koordintit (az aktulis koordintarendszerben) az x1 s y1 paramterek hatrozzk meg. Amennyiben nem adjuk meg a msolt kp szlessgt {szeli) s magassgt {mag1), akkor a kp torztsmentesen jelenik meg a clablakban. Ha azonban megadjuk a szeli s mag1 paramtereket, akkor az eredeti kp mretei s az ltalunk megadott mretek viszonya hatrozza meg a torzts mrtkt. Arra is van lehet sgnk, hogy kpeknek csak egy rszt msoljuk. Ehhez az x2, y2 paramterekkel ki kell jellnnk a msoland kprszlet bal fels sarkt, a szli s mag2 paramterekkel pedig a mreteit. Ilyenkor termszetesen a torzts a szli, szli, illetve a mag1 s mag1 rtkek arnytl fgg. Azt, hogy a msolskor - esetleges torztskor - mi trtnjen az egymsra kerl bitekkel, a m velet paramterrel definilhatjuk. A msols sorn a clablak tartalma s a bitkp mellett a clablak fest mintjnak {FillColor, FillStyle) bitjeit is figyelembe vehetjk. Jelljk a fest mintt definil bitkpet (ecsetet) "E" , a forrs bitkpet - "F" s a clterleten lv kpet - "C" bet kkel! A felhasznlhat m veleteket az albbi tblzatban foglaltuk ssze:

Konstans vbDstInvert vbMergeCopy

Logikai m velet not (C) E and F

Magyarzat Invertlja a cl bitkpet. Az ecset s a forrs bitjeit logikai "s" m velettel sszekapcsolva keletkezik a msolt bitkp. A forrs inverze s a clterlet "vagy" m velettel val sszekapcsolsval keletkezik a msolt kp. A forrs inverze a msols eredmnye. A forrs bitkp s a clterlet "vagy" m velettel val sszevetsnek inverze a msolt kp. Az ecset mintja a msolt kp. Az ecset s a clterlet "kizr vagy" m velettel sszevetve adja a msols eredmnyt. A msolt kp az ecset, a forrs inverze s a clterlet "vagy" mvelettel val sszekapcsolsbl addik. A forrs s a cl logikai "s" m velettel val sszevetse adja az eredmnyt. A forrs msoldik. A forrs s a cl inverze "s" mvelettel kapcsoldva adja a msolt kpet. A forrs s a cl "kizr vagy" m velettel sszekapcsolva keletkezik az eredmny. A forrs s a cl "vagy" mvelettel val sszekapcsolsbl addik az eredmny.

vbMergePaint

(not F) or C

vbNotSrcCopy vbNotSrcErase

not(F) not(F or C)

vbPatCopy vbPatlnvert

E E xor C

vbPatPaint

E or (not F) or C

vbSrcAnd vbSrcCopy vbSrcErase vbSrcInvert vbSrcPaint

F and C F F and(not C) F xor C ForC

Az albbi pldban a Forrni ablakot ngyzethlval tltjk fel:


Private Sub Commandl_Click () With Forml .AutoRedraw = False .FillColor = vbBlue .FillStyle = vbCross .PaintPicture .Image, 0, 0, , , , , , , End With End Sub

vbPatCopy

5.3.3. Kapcsolat az GDI-vel A GDI (Graphic Device Interface) a Windows grafikus alprogramrendszere, amelynek feladata a megjelents. A GDI rsze tbb szz megjelentshez hasznlhat fggvny s tbb ezer tpusdefinci s konstans. A Visual Basic hasznlata sorn nem tallkozunk a GDI elemeivel, mivel a grafikus objektumok tulajdonsgai s metdusai elfedik azokat. Lehet sgnk van azonban arra, hogy programunkbl GDI-fggvnyt aktivizljunk. Els knt ismerkedjnk meg az eszkzkapcsolat fogalmval! A GDI hardverfggetlen mdon hasznlja a perifrikat. Teszi ezt gy, hogy akrmilyen perifrirl is van sz, ltrehoz a memriban egy objektumot, amelyik objektum tartalmazza a megjelent eszkz jellemz it s rajzi lehet sgeit. Ezek utn a GDI-fggvnyekkel trtn rajzols a ltrehozott eszkzkapcsolaton keresztl, arra hivatkozva, trtnik. A Windows rendszer feladata, hogy az aktulis perifriakezel programot hozzrendelje a ltrehozott eszkzkapcsolathoz. Ha befejeztk a rajzolst, akkor lebontjuk a ltrehozott memria-objektumot. Az eszkzkapcsolatszer memriaelemeket egy szmmal jellemezhetjk. Ezt a szmot lernak (handler) hvjuk. A megjelent eszkzre val rajzolshoz szksges eszkzkapcsolatrl a Visual Basic grafikus objektumok {Form, PictureBox s a Printer) is tudnak, mindegyiknek van egy hDC (handler of Device Context) tulajdonsga, melynek segtsgvel az eszkzkapcsolat elrhet , s a GDI API (Application Programming Interface) fggvnyei aktivizlhatk. A rszletesebb magyarzat helyett nzznk meg egy pldt! A GDI fggvnyei kztt van egy olyan, amelynek segtsgvel egy el z leg megrajzolt zrt terlet kifesthet . A FloodFill fggvny paramtere az eszkzkapcsolat, a pont, amely krl adott szn zrt alakzaton bell trtnik a kifests az aktulis fest sznnel s -mintval. A formmodulban a FloodFill GDI fggvnyt az albbi mdon deklarlhatjuk:
Private Declare Function FloodFill Lib "gdi32" _ (ByVal hdc As Long, __ ByVal x As Long, ByVal y As Long, _ ByVal crColor As Long) As Long

A kvetkez pldban a FloodFill fggvny segtsgvel egy krt kifestnk:

Private Sub Commandl_Click() Dim x As Long, y As Long ' kk kr rajzolsa Circle (1500, 2000), 500, vbBlue ' a fest szn s a fest minta FillColor = vbYellow FillStyle = vbDiagonalCross ' a kk kr kisznezse, x s y a kr kzppontja ' pixel egysgekben x = ScaleX(1500, vbTwips, vbPixels) y = ScaleY(2000, vbTwips, vbPixels) FloodFill hdc, x, y, vbBlue End Sub

A Windows API deklarcikat, tpusokat s konstansokat egyszer en elhelyezhetjk a Visual Basic alkalmazsunkban az API Text Viewer" program segtsgvel. (2.6 fejezet)

5.4. Nyomtats
A Windows felgyelete alatt a nyomtatk s a rajzgpek is eszkzfggetlenl m kdnek. Ez azt jelenti, hogy nem kell foglalkozni kommunikcis protokollokkal s vezrl szekvencikkal. Vgeredmnyben ugyanazokat a grafikus funkcikat hasznlhatjuk papron val megjelentsre, mint amelyeket a kperny s megjelentsnl hasznltunk. Termszetesen a papron val nyomtatskor felmerl egy sor olyan problma, amelyekkel a kperny esetn nem kellett foglalkozni. A nyomtatk s a rajzgpek lehetnek kikapcsolt llapotban, vagy az is el fordulhat, hogy nincs bef zve papr. Nem minden nyomtat hasznlhat grafika nyomtatsra. A rajzgpek els sorban vektoros grafika megjelentsre alkalmasak. Figyelembe kell venni azt, hogy a papron val megjelents lassbb, mint a kperny re trtn rajzols. A kperny n az trajzols nem okoz problmt, a papron viszont lapot kell vltani. A Visual Basic a Printer objektumot hasznlja a nyomtatk megszemlyestsre". A Printer grafikus objektum, melynek grafikus metdusaival a nyomtats ugyangy trtnik, mint a formon val megjelents. Alaphelyzetben a Printer a Windows rendszer aktulis nyomtatjt modellezi. A Windows rendszerben egyszerre tbb nyomtatt is telepthetnk, melyek kzl az egyik az aktulis. A Printers kollekci a rendszerben elrhet sszes nyomtatt tartalmazza:
Printers(index)

A kollekcinak Printers.Count darab Printer tpus eleme van 0-tl Printers.Count-1ig sorszmozva. Ezek kzl magunk is vlaszthatunk aktu-lis nyomtatt, ha a Printer objektum-referencival a megfelel elemre hivatkozunk:
Set Printer = Printers( 3 )

Az alapnyomtatt a Vezrl pult (Control Panel) Nyomtatk mappjban is kivlaszthatjuk. Ha a Printer objektum TrackDefault tulajdonsga True rtk , akkor a Visual Basic alkalmazs is ezt a belltst hasznlja. Az aktulis nyomtatt ktflekppen is hasznlhatjuk. Lehet sg van arra, hogy a form ablakt lenyomatknt jelentsk meg a nyomtatn (PrintForm). Termszetesen sokkal ignyesebb grafikt is ltrehozhatunk a papron a grafikus metdusok segtsgvel. (A nyomtats vgt az EndDoc hvssal jelezzk, j lapot pedig a NewPage metdus hvsval kezdhetnk.)

5.4.1. A nyomtatk jellemz i A nyomtatk specilis grafikus megjelentsre alkalmas eszkzk. Mivel m kdsk eltr a kperny t l, ezrt a nyomtatt modellez Printer objektum a grafikus objektumokkal kapcsolatban megismert tulajdonsgok mellett egy sor - eddig ismeretlen jellemz vel br, amelyeket csak futs kzben rhetnk el. rdemes megjegyezni azt is, hogy a tulajdonsgok rtelmezse a nyomtat gyrtja ltal ksztett vezrl programtl fgg, ezrt nem biztos, hogy minden nyomtattpusra rvnyesek az albbiak. 5.4.1.1. A nyomtats min sge A ColorMode tulajdonsggal bellthatjuk, illetve lekrdezhetjk, hogy a nyomtat sznes (vbPRCMColor) vagy fekete-fehr (vbPRCMMonochrome) zemmdban m kdik-e. A nyomtat felbontst lekrdezhetjk, illetve bellthatjuk a PrintQuality tulajdonsg segtsgvel. Ha a tulajdonsg rtke pozitv, akkor az a dpi (dot per inch) felbontst r el a nyomtat szmra. A vbPRPQ... konstansok negatvak s el re meghatrozott felbontst takarnak:
Konstans vbPRPQDraft vbPRPQLow vbPRPQMedium vbPRPQHigh rtk -1 -2 Jelents vzlatkszt felbonts, kis felbonts, kzepes felbonts, nagy felbonts.

-3
-4

A TwipsPerPixelX s a TwipsPerPixelY tulajdonsgok rtkb l azt is megtudhatjuk, hogy a nyomtat egy pontja hny twipnek felel meg vzszintes s fgg leges irnyban. A nyomtats sorn nagythatjuk vagy kicsinythetjk az brt a Zoom tulajdonsg megadsval. A tulajdonsg a nagytst szzalkos formban tartalmazza, azaz a tnyleges sklafaktor Zoom/100. 5.4.1.2. Paprbelltsok A nyomtatk paprlapokra rnak. A nyomtatn belltott lapmretet a PaperSize numerikus tulajdonsg trolja. Az el re definilt vbPRPS... konstansok szabvnyos lapmreteket azonostanak.

Konstans vbPRPSLetter vbPRPSA3 vbPRPSA4 vbPRPSA5 vbPRPSUser

rtk 1 8 9 11 256

Jelents Levl, 8 1 / 2 x 1 1 inch, A3, 297 x 420 mm, A4, 210x297 mm, A5, 148 x 210 mm, A felhasznl ltal megadott Height s . i Width mretek belltsa esetn automatikusan ez lesz az rtk.

Az Orientation tulajdonsg hatrozza meg, hogy portr (vbPRORPortrait) vagy tjkp (vbPRORLandscape) llsban van-e a papr a nyomtatban. A programkszts kzben el fordulhat, hogy programunkat fel szeretnnk kszteni a lapozsra. A nyomtat papradagol szerkezetnek numerikus tulajdonsga a PaperBin. A klnbz papradagolsi megoldsokat a vbPRBN... konstansokkal jellemezhetjk.
Konstans vbPRBNManual vbPRBNAuto VbPRBNTractor rtk 47 8 Jelents Kzi lapadagols. A papr automatikusan jn az aktulis trolbl (alaprtelmezs). A papr a leporell-tovbbtbl jn.

A nyomtatott pldnyok szmt a Copies tulajdonsg belltsval adhatjuk meg. Vannak nyomtatk, amelyek kpesek a papr mindkt oldalra nyomtatni. A Duplex tulajdonsga meghatrozza, hogyan m kdjn a ktoldalas nyomtats. Konstans vbPRDPSimplex vbPRDPHorizontal vbPRDPVertical rtk 1 23 Jelents Egyoldalas nyomtats. Ktoldalas nyomtats vzsz. lapfordtssal. Ktoldalas nyomtats fgg lapfordtssal.

5.4.1.3. Hardveradatok A Printer objektum tulajdonsgainak felhasznlsval az aktulis nyomtat hardveradatait is lekrdezhetjk. A DeviceName a kivlasztott nyomtat, a DriverName pedig a vezrl program nevt adja meg. A Port tulajdonsgbl megtudhatjuk, hogy melyik adatkapun (LPTx, COMMx) keresztl csatlakozik a nyomtat a szmtgphez.

5.4.2. Az form nyomtatsa Az aktulis, illetve a megadott objektum ablakrl, nyomtatott msolatot kszthetnk a PrintForm metdus hvsval:
objektum.PrintForm

A metdus a megadott objektum sszes lthat vezrl jt s bitkpt kinyomtatja. A metdusokkal ltrehozott grafikus elemek kzl azonban csak azokat, amelyeket az AutoRedraw=True bellts utn rajzoltunk. 5.4.3. Nyomtats futs kzben A Printer is grafikus objektum, gy nem meglep , hogy a Scale... tulajdonsgokkal megadhat a sajt koordinta-rendszere, tovbb a lapmretek is bellthatk s lekrdezhet k a Height s Width jellemz kkel. A rajzolsi md a DrawMode, DrawStyle, DrawWidth s FillStyle tulajdonsgokkal, a sznezs a FillColor s ForeColor jellemz kkel pont ugyangy llthatk, mint a form s a kpmez objektumok esetn. A kirsok adatainak belltsra ugyanazok a Font... tulajdonsgok hasznlhatk, mint a kperny n megjelent objektumok esetn. Az brk elksztshez is ugyanazokat a metdusokat hasznlhatjuk (kivtel a Cls), s t ugyangy elrhet az aktulis tollpozci (CurrentX, CurrentY) s az eszkzkapcsolat (hDC). Ha a nyomtats sorn szeretnnk kihasznlni a grafikus rendszer hardverfggetlensgt, akkor a legjobb, ha a grafikus adatokat megjelent alprogramot hardverfggetlenl ksztjk el. A hardverfggetlen eljrst az ablak kifestsekor (a Paint esemny kezel jb l) a formobjektum, nyomtatskor pedig a nyomtatobjektum paramterrel aktivizljuk. A nyomtatra val rajzolskor automatikusan megnylik egy nyomtatoldal. Lehet sgnk van arra, hogy tbboldalas dokumentumot nyomtassunk, ekkor a lapozshoz a NewPage metdust kell hvnunk:
objektum.NewPage

A metdus hvsakor a nyomtat befejezi az ppen nyomtatott oldalt, s j oldalt kezd (a CurrentX s CurrentY jellemz k rtke 0 lesz). A Page jellemz a nyomtatott oldalakat szmllja. A NewPage hvsakor a oldalszm eggyel n . Tudnunk kell azonban, ha szvegnyomtats sorn (Print) meghaladjuk az egy oldalra nyomtathat mennyisget, a nyomtat automatikusan lapot dob.

Ha befejeztk a nyomtatst, akkor az EndDoc metdus hvsa elkldi ezt az informcit a nyomtat fel:
objektum.EndDoc

Az alkalmazsbl val kilps sorn az EndDoc metdus automatikusan meghvdik. A KillDoc metdust a nyomtats megszaktsra hasznlhatjuk:
objektum.KillDoc

5.5. Programkszts grafikus metdusokkal


Az elmondottak jobb megrtst nhny kidolgozott pldaprogrammal segtjk. Bemutatjuk grafikus megoldsok hasznlatt, a bitkpek er forrsbl val elrst, valamint az MSChart komponenssel trtn grafikonrajzolst 5.5.1. Programkszts grafikus metdusokkal A grafikus metdusok hasznlatt s a nyomtatsi lehet sgeket egy sszetett pldn keresztl mutatjuk be. A pldaprogramban krn legrdl kr adott pontja ltal lert plyt jelentjk meg. A feladat matematikai oldalt nem rszletezzk, gy csak annyit kell tudnunk, hogy a krk illetve a pont adatait lptethet szvegmez vel adhatjuk meg, amit a TextBox s az UpDown komponensek sszeptsvel lltottuk el . Dvel jelltk a rgztett kr sugart, mg a grdl kr s a rajta lev pont adatait az A s B jel vezrl kkel llthatjuk be.

5.6. bra Program grafikus metdusokkal

A program vezrlshez hasznlt ablakelemeket egy kerettel hatrolt terleten (Frame) bell helyeztk el. A pldaprogramot a KORONKOR alkalmazs tartalmazza, mely f ablakt definil form betltsekor elvgezzk a szksges inicializcis lpseket:

Private Sub Form_Load() 1 az ablak mozgatsa a kperny kzepre Forrni.Left = (Screen.Width - Form1.Width) / 2 Form1.Top = (Screen.Height - Form1.Height) / 2 ScaleMode = vbPixels ' kpontokkal dolgozunk Rajzszn = QBColor(lO) ' a kiindulsi rajzszn CommonDialogl.Color = Rajzszn Rajzolni = igen ' meg kell jelenteni a rajzot End Sub

Az esemnykezel k kztti adatcserre olyan modulszint vltozkat hasznlunk, amelyek csak a formmodulbl rhet k el:
Private Rajzszin As Long Private Rajzolni As Boolean

A rajzolst vgz Grdt eljrst kln modul (GORDUL.BAS) tartalmazza. Ahhoz, hogy tetsz leges objektumra rajzolni tudjunk, a rajzols eszkzt (Eszkz) paramterknt kapja az eljrs. Ugyancsak paramterekben adjuk t a grgets adatait (a, b, c), a rajzterlet kzppontjnak (ex, cy) koordintit s a rajzsznt.
Sub Grdt(Eszkz As Object, a As Integer, b As Integer, _ d As Integer, ex As Long, cy As Long, Rajzszn As Long) Const Szgoszts = 64& Const pi = 3.14159265 Dim rab As Long, Vonalszm As Long, i As Long Dim alfa As Double, bta As Double, dalfa As Double Dim aperb As Double, xpt As Double, ypt As Double
1 hiba esetn hangjelzst adunk s kiugrunk az eljrsbl On Error GoTo HibaTrtnt rab = a - b: alfa = 0# dalfa = pi / Szgoszts: aperb = a / b Vonalszm = 2 * Szgoszts * (b \ Lnko(a, b)) Eszkz.CurrentX = rab + d + ex Eszkz.CurrentY = cy For i = 1 To Vonalszm alfa = alfa + dalfa bta = alfa * aperb xpt = rab * Cos(alfa) + d * Cos(bta) ypt = rab * Sin(alfa) - d * Sin(bta) Eszkz.Line -(xpt + ex, ypt + cy) Next i Exit Sub HibaTrtnt: Beep End Sub

A Grdt eljrst a program klnbz pontjairl hvjuk. A program ablakba az ablak jrafestsekor rajzolunk (ha az ablak tartalmt nem trltk):

Private Sub Form_Paint() If Rajzolni Then Forrni .ForeColor = Rajzszn Grdt Forrni, Cint(Textl.Text), Cint(Text2.Text), _ Cint(Text3.Text),_ (ScaleWidth + Framel.Width) / 2, ScaleHeight / 2, Rajzszn End If End Sub

A Rajzolni vltoz rtkt igenre, lltjuk a Rajzols" parancsgomb megnyomsakor, a sznvlaszts utn, az UpDown vezrl k lptetsekor, illetve az ablak tmretezsekor. A "Sznvlaszts" parancsgomb megnyomsakor meghvd eljrsban a Szn ltalnos prbeszdablakot jelentjk meg:
Private Sub SznGomb__Click () ' a Mgse gombbal val kilps kezelshez CommonDialogl.CancelError = True On Error GoTo Mgse ' belpskor az el z szn aktuliss ttele CommonDialogl.Flags = cdlCCRGBInit 1 a Szn prbeszdablak megjelentse CommonDialogl.ShowColor ' a kivlasztott szn Rajzszn = CommonDialogl.Color Rajzolni = igen Form1.Refresh Exit Sub Mgse: End Sub

Ugyancsak a Grdt eljrst hvjuk a nyomtatra trtn rajzolskor. Ekkor a rajz jellemz it gy alaktjuk, hogy a rajz jl elfrjen a papron. A nyomtats paramtereit a Nyomtats szabvnyos prbeszdablak segtsgvel llthatjuk be.
Private Sub NyomtatsGomb_Click() Dim ex As Long, cy As Long Dim sx As Single, sy As Single Dim SklaTnyez As Integer Dim Felirat As String CommonDialogl.CancelError = True On Error GoTo Mgse ' a Nyomtats prbeszdablak megjelentse CommonDialogl.ShowPrinter

A program futsnak sebessge nvelhet , ha a vonalak kirajzolst a Line metdus helyett Windows-rendszerhvssal vgezzk. A feladat GDI-hvsokra pl megoldst a KORONKOR.API alknyvtr tartalmazza. A Grdt eljrst lnyegesen meg kell vltoztatnunk. Az ablakot s a nyomtatt az eszkzlerval azonostjuk (hDC). A rajzsznt az eszkzhz rendelt szn definilja, gy a Rajzszn paramtert elhagyjuk.

On Error GoTo HibaTrtnt rab = a - b: alfa = 0# dalfa = pi / Szgoszts: aperb = a / b Vonalszm = 2 * Szgoszts * (b \ Lnko(a, b)) MoveToEx DC, CLng(rab + d) + ex, cy, pt For i = 1 To Vonalszm alfa = alfa + dalfa bta = alfa * aperb xpt = rab * Cos(alfa) + d * Cos(bta) ypt = rab * Sin(alfa) - d * Sin(beta) LineTo DC, CLng(xpt) + ex, CLng(ypt) + cy Next i Exit Sub HibaTrtnt: Beep End Sub

A felhasznlt GDI-fggvnyek deklarcijt a modul ltalnos (General) rsze tartalmazza:


Type POINTAPI x As Long y As Long End Type Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, _ ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, _ ByVal x As Long, ByVal y As Long) As Long Dim pt As POINTAPI

A gyorsts rszben abbl szrmazik, hogy ezek a fggvnyek ellenttben a Line metdussal egsz paramterekkel dolgoznak, msrszt pedig sokkal kevesebb ellen rzst vgeznek. A formmodulban a hvs mellett a sklzsi mdot is meg kell vltoztatnunk, igazodva az alaprtelmezs szerint sklzshoz, melynek egysge ablak esetn a kppont (pixel), mg nyomtat esetn a tzedmillimter. Az j Grdt eljrs hvsa a Form_Paint esemnykezel eljrsbl:
Private Sub Form_Paint() If Rajzolni Then Form1.ForeColor = Rajzszn Grdt Form1.hdc, Cint(Textl.Text), Cint(Text2.Text), _ Cint(Text3.Text), (ScaleWidth + Framel.Width) / 2, ScaleHeight / 2 End If End Sub

illetve a Nyomtats" parancsgomb esemnykezel jb l:


Private Sub NyomtatsGomb_Click() Dim ex As Long, cy As Long Dim sx As Single, sy As Single Dim SklaTnyez As Integer Dim Felirat As String CommonDialogl.CancelError = True On Error GoTo Mgse CommonDialogl.ShowPrinter ' a Nyomtats prbeszdablak With Printer ' a paramterek kijelzse .ScaleMode = vbMillimeters Felirat = "A=" & Textl.Text & " B=" + Text2.Text & _ D=" + Text3.Text .Font.Size = 14 sy = Cint(.ScaleHeight - 2 * .TextHeght(Felirat)) sx = (.ScaleWidth - .TextWidth(Felirat)) / 2 .CurrentX = sx .CurrentY = sy Printer.Print Felirat ' az bra megrajzolsa a nyomtatn ' az ablak s a papr pixelarnynak belltsa If .Orientation = vbPRORPortrait Then sx = .ScaleX(.ScaleWidth, vbMillimeters, vbPixels) SklaTnyez = CInt(sx / Form1.ScaleWidth) Else sy = .ScaleY(.ScaleHeight, vbMillimeters, vbPixels) SklaTnyez = CInt(sy / Forml.ScaleWidth) End If 1 az API-hvasokban LoMetrc (tizedmillimteres) sklt ' hasznlunk ex = .ScaleX(.ScaleWidth, vbMillimeters, vbHimetric) / 20 cy = .ScaleY(.ScaleHeight, vbMillimeters, vbHimetric)/ 2 0 Grdt Printer.hdc, Cint(Textl.Text) * SklaTnyez , _ Cint(Text2.Text) * SklaTnyez , _ Cint(Text3.Text) * SklaTnyez , _ ex + 200, cy + 200 Printer.EndDoc End With Exit Sub Mgse: ' a felhasznl a Mgse gombot nyomta meg End Sub

5.5.2. Bitkpek er forrsban Ksztsnk programot, amely krtyalapokat jelent meg az ablakban, s kpes a megjelentett lapokat megkeverni! Ksztsk el a krtyalapok bitkpt tartalmaz er forrsllomnyt (RESURCE.RC), amelyben minden bitkphez egy sorszmot 1-8 rendelnk!

#define IDB_BITMAP8 8 #define IDB_BITMAP7 7 #define IDB_BITMAP6 6 #define IDB_BITMAP5 5 #define IDB_BITMAP4 4 #define IDB_BITMAP3 3 #define IDB_BITMAP2 2 #define IDB_BITMAP1 1 IDB_BITMAPl BITMAP "pikkA.bmp" IDB_BITMAP2 BITMAP "pikkK.bmp" IDB_BITMAP3 BITMAP "korA.bmp" IDB_BITMAP4 BITMAP "korK.bmp" IDB_BITMAP5 BITMAP "karoA.bmp" IDB_BITMAP6 BITMAP "karoK.bmp" IDB_BITMAP7 BITMAP "treffA.bmp" IDB_BITMAP8 BITMAP "treffK.bmp"

Ezt a fjlt egy 32-bites er forrsfordtval t kell alaktani binris er forrslomannya (RES). (Ilyen fordtprogram a Visual Basic CD-lemezn is tallhat a \TOOLS \RESOURCE knyvtrban. Az RC.EXE programot parancssorban tvonalXRC resource.rc formban kell hasznlni.) A RESOURCE.RES binris er forrsfjlt bepthetjk a projektbe a Project men Add File... menpontjval. Az er forrs Related Documents-knt megjelenik a projektablakban. Ezek utn helyezznk a formra hrom parancsgombot a krtyalapok hozzadsnak, levtelnek s keversnek kezdemnyezsre, valamint az Image tpus elemeket tartalmaz Krtya kptmb 0 index elemt! A modulszinten deklarlt hny vltoz az asztalon lv " krtyk szma-1 rtket tartalmaz:
Private hny As Integer

A form tltsekor megfelel en engedlyezzk, illetve letiltjuk a gombokat, valamint betltjk a pikk sz bitkpt:
Private Sub Form_Load() Form1.Caption = "Krtya kevers" hny = 0 'A pikk sz feltltse 'A vezrl tmb elemnek kpe az er forrsbl Krtya(hny).Picture = LoadResPicture(hny + 1, vbResBitmap) Levesz.Enabled = False 'Nem lehet trlni Kever.Enabled = False 'Nem lehet keverni End Sub

Hzhatunk krtyt a paklibl - ha van mg - a Hozzad" parancsgombbal:


Private Sub Hozzad_Click() hny = hny +1 'A szmll belltsa Levesz.Enabled = True 'Lehet trlni Load Krtya(hny) 'Krtya tlts Krtya(hny).Visible = True 'A gomb lthat Krtya(hny).Top = Krtya(hny - 1).Top + _ Krtya(hny - 1).Height / 10 Krtya(hny).Left = Krtya(hny - 1).Left + _ Krtya(hny - 1).Width / 10 Krtya(hny).Picture = LoadResPicture(hny + 1, vbResBitmap) 'Nincs tbb krtyalap If hny = 7 Then Hozzad.Enabled = False Kever.Enabled = True End Sub

Eldobhatunk krtyt a Levesz" parancsgomb megnyomsval:


Private Sub Levesz_Click() Unload Krtya(hny) hny = hny - 1 If hny = 0 Then Levesz.Enabled = False Kever.Enabled = False Knd If If hny < 7 Then 'Lehet tlteni Hozzad.Enabled = True End If End Sub 'Trls 'A szmll belltsa 'Nem lehet trlni

Vezrl kr l lvn sz a ZOrder metdust hasznlhatjuk a kevershez,


Private Sub Kever_Click() Dim i As Integer 'Vletlenszer en vltozik a sorrend For i = 0 To hny Krtya(i).ZOrder Clnt(Rnd) Next i End Sub

Az sszekevert krtyalapok az alkalmazs ablakban:

5.7. bra Kpek er forrsbl

5.5.3. Az MSChart komponens Alkalmazst ksztnk, amely vletlenszer en el lltott adatokat klnbz tpus diagramokban jelent meg! A feladat megoldshoz (amit a CHART knyvtr tartalmaz) az MSChart ActiveX-komponenst hasznljuk. Ha ez nincs az eszkzeink kztt, akkor el szr be kell tltennk a Microsoft Chart Control 6.0 (OLEDB) komponenst! A komponens 2- s 3-dimenziban grafikusan jelent meg ktdimenzis adattmbt. Az adattmb mrett a RowCount s ColumnCount tulajdonsgok rgztik. Az MSChart komponens legfontosabb tulajdonsgai a ChartData s a DataGrid, melyek a megjelentend adatokkal val kapcsolatot testestik meg. A ChartData tulajdonsg lehet sget biztost arra, hogy megjelentsk egy Variant tpus adattmb adatait, ahol a tmb szls " elemei (valamelyik index 1) a vltoz-kategrikat tartalmazzk.
Dim X(1 To 3, 1 To 3) As Variant MSChart2.RowCount = 3 MSChart2.ColumnCount = 3 For i = 1 To 3 For j = 1 To 3 X(i, j) = i * j Next Next X(l, 2) = "egy" X(l, 3) = "kett " X(2, 1) = "EGY" X(3 , 1) = "KETT " MSChart2.ChartData = X

A Chart adatait a DataGrid tulajdonsg segtsgvel is kezelhetjk. Ez a jellemz egy DataGrid tpus objektum, mely szintn egy ngyzetes adattmbbel hozhat kapcsolatba. Az adattmb mreteit itt is a RowCount s ColumnCount tulajdonsgok rgztik, amelyek rtkei (megjelents kzben) a SetSize metdussal mdosthatk. Az adatokhoz hozzfrhetnk a SetData s a GetData metdusokkal. Az adatokat vletlenszer en is feltlthetjk a RandomDataFill metdus segtsgvel. A ChartType tulajdonsg hatrozza meg, hogy milyen mdon jelenik meg a diagram. A Chart komponens egyttm kdik a felhasznlval, esemnyekkel reagl a felhasznl tevkenysgre. Ha a felhasznl adatsort vlaszt a grafikonon (egy kattints), akkor a MSChart1_SeriesSelected esemnykezel indul el, ha a felhasznl pontot vlaszt, akkor a MSChart1_PointSelected esemnykezel aktivizldik. E rvid ttekints utn elegend informci ll rendelkezsnkre ahhoz, hogy megoldjuk a feladatot. A CHART alkalmazs ablaknak tartalma futs kzben:

5.8. bra Grafikonrajzols

Deklarljunk kt, Variant tpus vltozval azonostott tmbt, amelyek az ltalunk hasznlni kvnt diagramtpusokat, s az egyes tpusoknak megfelel konstansokat tartalmazzk!

Dim tpuskonstans As Variant, tpusnv As Variant

A form ltrehozsakor feltltjk elemekkel a tmbket, majd hozzadjuk a Tpus kombinlt listhoz a diagramneveket.
Private Sub Form_Load() Const sorcimkk = 6 Const oszlopcimkk = 6 Const sorok = 6 Const oszlopok = 6 Dim i As Integer ' A 3D-s bra forgathat az egrrel, ha a Ctrl lenyomott MSChartl.AllowDynamicRotation = True ' A diagramtpusok konstansai tpuskonstans = Array(VtChChartType3dBar, _ VtChChartType3dLine, _ VtChChartType3dArea, _ VtChChartType3dStep, _ VtChChartType2dBar, _ VtChChartType2dLine, _ VtChChartType2dArea, _ VtChChartType2dStep, _ VtChChartType2dPie) ' A diagramtpusok nevei tpusnv = Array("3D Bar", "3D Line", "3D Area", "3D Step", "2D Bar", "2D Line", _ "2D Area", "2D Step", "2D Pie") ' A Tpus kombinlt lista feltltse a tpusnevekkel For i = 0 To 8 Tpus.Addltem tpusnv(i) Next i Tpus.Listlndex = 0 MSChartl.chartType = VtChChartType3dBar 1 A mretek belltsa s az adatok feltltse az adatrccsal With MSChartl.DataGrid .SetSize sorcimkk, oszlopcimkk, sorok, oszlopok .RandomDataF i11 For i = 1 To 6 .ColumnLabel(i, 1) = CStr(i) + ". oszlop" .RowLabel(i, 1) = CStr(i) + ". sor" Next i End With End Sub

A Feltlt parancsgomb megnyomsakor vletlenszer en feltltjk a Chart komponens adatait:


Private Sub Feltlt_Click() 1 Feltlts vletlenszer adatokkal MSChartl.DataGrid.RandomDataFill End Sub

Ha a kombinlt listrl diagramtpust vlasztunk, akkor a vlasztsnak megfelel en belltjuk az MSChartl vezrl diagramjnak tpust. A 2D-s diagramok a msodik dimenzit feliratokkal jelentik meg.
Private Sub Tpus_Click() ' Diagramtpus-vlaszts MSChartl.chartType = tpuskonstans(Tpus.Listlndex) MSChartl.Legend.Location.Visible = False ' Ha 2D-s a diagram, akkor felrat is van If Tpus.Listlndex > 3 Then MSChartl.Legend.Location.Visible = True End If End Sub

Az egrkattintssal kivlasztott adatpont rtkt szvegesen megjelentjk.


Private Sub MSChartl_PointSelected(Series As Integer, _ DataPont As Integer, MouseFlags As Integer, Cancel As Integer) Dim a As Double ' Ha egy adatot vlasztunk, akkor a rcs adata leolvashat MSChartl.DataGrid.GetData DataPoint, Series, a, 0 ' Megjelentjk a kivlasztott adatot Labell.Caption = "Az rtk: " + CStr(a) End Sub

Ha nem egy adatpontot, hanem egy adatsort vlasztunk, akkor az rtk kirst eltntetjk:
Private Sub MSChartl_SeriesSelected(Series As Integer, _ MouseFlags As Integer, Cancel As Integer) ' Ha adatsor vlasztunk az rtk kirsa elt nik Labell.Caption = "" End Sub

5.6. A Visual Basic mint multimdis fejleszt eszkz


A multimdia programozsa alatt els sorban a gpnkben fellelhet multimdis eszkzk (WAV-alap audioeszkzk, MIDI-eszkzk, CD-lejtsz, digitlis videolejtsz stb.) hasznlatt rtjk. A Visual Basic szmos pt elemet tartalmaz a fenti eszkzkn vgezhet m veletek tmogatsra, mint pldul az AVI-fjlok lejtszst vgz Animation vezrl elem. Kln emltst rdemel a tetsz leges mdiatpussal kapcsolatos feladatok elvgzsre alkalmas MMControl {Microsoft Multimedia Control) ms nven MCI-vezrl elem. A Visual Basic komponensei kzl gyakorlatilag brmelyiket hasznlhatjuk egyszer grafikus mdiaeszkzknt, hiszen pldul a Form, az Image vagy a PictureBox grafikus metdusait alkalmazva kpeket s kpsorozatokat jelenthetnk meg, mozgathatjuk ezeket, vltoztathatjuk a mretket stb. (Egy ilyen felhasznlsi mdra ltunk pldt a CD-n a Panorma feladat megoldsban). A fenti lehet sgeken kvl ltezik egy sor API-fggvny, amely segtsgvel megszlaltathatjuk" a multimdia-eszkzket, vezrelhetjk a multimdia-llomnyok lejtszst s felvtelt. Ezen fggvnyek alkotjk a Windows rendszer mdiakezel fellett {MCI, Media Control Interface), s egysgesen (eszkzfggetlen mdon) kezelik az sszes multimdia-eszkzt (az audio- s video-perifrikat). Az MCI-fggvnyeket kt csoportba sorolhatjuk: az alacsony (ezek vannak tbbsgben), illetve a magas szint programozst tmogat fggvnyek csoportjba. Mint ltalban, az alacsony szint fggvnyek segtsgvel bonyolultabb feladatokat is megoldhatunk (pldul mixels). Ennek ra a hosszabb programfejlesztsi id s a fejlesztshez szksges ismeretanyag nagy mennyisge (fggvnyek, sszetett adatstruktrk, argumentumok, mlyebb hardverismeretek). A mindssze ht darab magas szint MCI-fggvny {mciGetCreatorTask, mciGetDevicelD, mciGetErrorString, mciGetYieldProc, mciSendCommand, mciSendString, mciSetYieldProc) elrejti a programoz el l - az egyszer bb programok ksztshez nem is szksges - rszleteket, s gyakorlatilag ugyanazokat a lehet sgeket biztostja, mint az alacsony szint fggvnyek. A rendszer minden magas szint hvst alacsony szint hvsokk alakt. A magas szint fggvnyeket is megklnbztethetjk aszerint, hogy paramterknt parancszenetet {Command-Message Interface) vagy parancssztringet {CommandString Interface) vrnak. A rendszer a parancssztring paramter fggvnyhvsokat parancszenetes fggvnyhvsokk alaktja.

Vgl megemltjk mg a magas szint programozst kpvisel MessageBeep, sndPlaySound s PlaySound API-fggvnyeket, amelyek a .WAV-llomnyok lejtszst indtjk. A hrom fggvny kzl a PlaySound a tudja a legtbbet. A MessageBeep ezzel szemben kizrlag csak a rendszerben el re definilt hangfjlokat kpes megszlaltatni. 5.6.1. Mdiallomnyok lejtszsa az MMControl segtsgvel Els knt az MMControl komponenst hasznljuk tetsz leges mediafile feldolgozsra (MCI_ESZK alkalmazs). A program ablaknak futs kzbeni kpn jl lthat a lejtszst vezrl gombsor. A vezrl gombok kzl azok vilgtanak, amelyek ppen hasznlhatk. A gombok ismertetst l eltekintnk, hisz a legtbb hang- s videolejtsz berendezsen is megtalljuk ket.

5.9. bra AVI lejtszsa az MMControl segtsgvel

Az alkalmazs ablaknak kialaktsa sorn az albbi vezrl ket helyeztk az rlapra:


Vezrl tpus CommonDialog CommandButton MMControl Objektumnv dlgOpen gmbNyits mciLejtsz Az alkalmazs clja fjlvlaszts, a fjl vlaszts indtsa, a lejtszs vezrlse.

A form betltsekor felparamterezzk az MMControl s a CommonDialog vezrl ket. A form trlsekor pedig gondoskodunk a lejtszs meglltsrl:

Private Sub Form_Load() ' Az mciLejtsz gombjainak llapota a vezrl llapotnak ' megfelel en automatikusan vltozik mciLejtsz.AutoEnable = True 1 A Record gomb tiltsa mciLejtsz.RecordVisible = False ' A fjltpusok belltsa dlgOpen.Filter = "(*.avi) *.avi|(*.wav)|*.wav|(*.mid," & _ " *.rmi) *.mid;*.rmi|Audio CD player" & _ "(*.cda) *.cda|Minden fjl ( * . *) | *.* " ' Hibajelzs a Mgse gomb hasznlata esetn dlgOpen.CancelError = True End Sub Private Sub Form_Unload(Cancel As Integer) With mciLejtsz 1 Ha mg folyik a lejtszs, meglltjuk azt If .Mode = mciModePlay Then .Command = "Stop" ' Az eszkz lezrsa .Command = "Close" End With End Sub

A lejtszshoz, a Nyits parancsgomb megnyomsa utn, ki kell vlasztanunk a kvnt (*.AVI, .WAV, *.MID stb.) tpus llomnyt a Megnyits ltalnos prbeszdablakbl. Az ,Audio CD player" fjltpus vlasztsa esetn a zenei CD-n trolt zeneszmok jelennek meg. Pldul a negyedik dal kivlasztsa utn elindul a lejtszs, melynek adatait az alkalmazs ablakban lthatjuk: A Nyits parancsgombon val kattintskor meghvd esemnykezel eljrsban a Megnyits prbeszdablakbl vlasztjuk ki a lejtszand llomnyt. A fjl kiterjesztsnek fggvnyben ms s ms alprogram vgzi az MCI-eszkz belltst s megnyitst:
Private Sub gmbNyits_Click() Dim kiterjeszts As String ' A StatusUpdate esemny generlsnak tiltsa mciLejtsz.Updatelnterval = 0 1 A lejtszand llomny kivlaszts a Megnyits ablakbl On Error GoTo MCI_ERRORl dlgOpen.ShowOpen On Error GoTo 0 With mciLejtsz 1 Ha mg folyik az el z lejtszs, meglltjuk azt If .Mode = mciModePlay Then .Command = "stop" ' Ha az ezkz nyitva van, lezrjuk If Not .Mode = mciModeNotOpen Then .Command = "close" End With FeliratokTrlse ' A kivlasztott fjl kiterjesztsnek megllaptsa kiterjeszts = Right(dlgOpen.filename, 3)

Select Case UCase(kiterjeszts) Case "cda" CDlejtsz Case "wav" WAVhang Case "mid", "rmi" MIDIzene Case "avi" AVIanimci Case Else MsgBox ("Sajnlom, ezt a fjlt nem tudom lejtszani")
Erid Select

Exit Sub ' az eljrs vge MCI_ERRORl: End Sub

Az albbi alprogramok a nevknek megfelel mdiafjl lejtszst vezrlik:


Private Sub CDlejtsz() Dim trackNo As Long EszkzNyits "CDAudio", "", 10 1 A kivlasztott zenesvra val pozicionls trackNo = Val(Left(Right(dlgOpen.filename, 6), 2)) Pozicionls (trackNo) ' Feliratozs j SzmAdatai End Sub Private Sub WAVhang() EszkzNyits "WaveAudio", dlgOpen.filename, 0 ' A hangfjl hossznak kirsa lblSzmHossz.Caption = Str(mciLejtsz.Length / 1000) _ & " msodperc" FjlNvFelirsa End Sub Private Sub MIDIzene() Dim Perc As Long, Msodperc As Long EszkzNyits "Sequencer", dlgOpen.filename, 0 Perc = (mciLejtsz.Length / 1000) \ 60 Msodperc = (mciLejtsz.Length / 1000) Mod 60 ' A szm hossznak kirsa lblSzmHossz.Caption = Felirat(hossz, Perc, Msodperc) FjlNvFelirsa End Sub Private Sub AVIanimci() EszkzNyits "AVIVideo", dlgOpen.filename, 3 ' A fjl kpkockkban mrt hossznak kirsa lblSzmHossz.Caption = "A fjl " & Str(mciLejtsz.Length) & " keretb l ll" FjlNvFelirsa End Sub

A fenti eljrsokbl hvott alprogramok mindegyiknek bemutatstl eltekintnk, azonban az EszkzNyits eljrst rdemes tanulmnyozni.
Private Sub EszkzNyits(EszkzTpus As String, _ Fjlnv As String, Id Formatum As Long) With mciLejtsz ' A lejtsz tpusnak belltsa .DeviceType = EszkzTpus Lejtszand fjl nevnek belltsa .filename = Fjlnv Eszkznyits .Command = "Open" A lejtszs kzbeni informcikrs adatformtumnak belltsa .TimeFormat = Id Formatum End With End Sub

Az MMControl vezrl hasznlata esetn gondoskodnunk kell a vezrl gombsor engedlyezett gombjainak esemnykezel eljrsairl is. Pldul, a ! {lejtszs) gomb megnyomsakor az eszkz llapotfigyelsi gyakorisgt egy msodpercre lltjuk:
Private Sub mciLejtsz_PlayClick(Cancel As Integer) mciLejtsz. Updatelnterval = 1000 End Sub

Az MCI-vezrl llapotnak vltozst a StatusUpdate esemny feldolgozsval kvethetjk nyomon, az Updatelnterval tulajdonsgban belltott id kznknt:
Private Sub mciLejtsz_StatusUpdate() Dim Perc As Long, Msodperc As Long With mciLejtsz ' Feliratok frisstse Select Case .DeviceType Case "CDAudio" Perc = (.Position Mod &H10000) \ &H100 Msodperc = (.Position Mod &H10000 * &H100) \ &H10000 lblElteltld .Caption = Felirat(id , Perc, Msodperc) Exit Sub Case "Sequencer" Perc = (.Position / 1000) \ 60 Msodperc = (.Position / 1000) Mod 60 lblElteltld .Caption = Felirat(id , Perc, Msodperc) Case "WaveAudio", "AVIVideo" lblElteltld .Caption = "" End Select 1 A mdiahordoz fjl (nem CD!) vgnek elrse esetben 1 visszapozcionlunk a fjl elejre If (Not .Mode = mciModePlay) And (.Position = .Length) Then Pozicionls (0) End If End With End Sub

5.6.2. AVI llomnyok megjelentse az Animation komponenssel Ha AVI llomnyokat szeretnnk megjelenteni, akkor hasznlhatjuk az Animation komponenst is. (ANIMACIO pldaprogram) Az Animacio alkalmazs m kdse hasonl az el z feladathoz. A "Nyits" parancsgomb megnyomsakor megjelen Megnyits prbeszdablakbl kivlasztjuk a megjelentend AVI-llomnyt, majd lejtsszuk azt. Felhvjuk a figyelmet arra, hogy a felhasznlt Animation pt elem csak kis mret , hang nlkli, s egyszer szerkezet AVI-fjlok megjelentsre alkalmas. Az alkalmazs futskzbeni ablaka:

5.10. bra AVI lejtszsa az Animation segtsgvel

A program elksztshez el szr fel kell tennnk az eszkztrra az ltalnos prbeszdablakok (COMDLG32.OCX) s az animci (COMCT232.OCX) ActiveXvezrl k ikonjt (ProjectComponents). Ezt kvet en az ikonok segtsgvel a fenti kt vezrl t az alkalmazsunk rlapjra helyezzk. Az animcis vezrl nl el rjuk, hogy a kpek a vezrl terletnek kzepre kerljenek (Center=True). A form betltsekor engedlyezzk, hogy az ltalnos prbeszdablakbl Mgse nyomgombbal val kilpskor hibaesemny keletkezzen:
Private Sub Form_Load() cdlgOpen.CancelError = True End Sub

A Nyits" parancsgomb megnyomsakor aktvv vl esemnykezel eljrsban megjelentjk a Megnyits prbeszdablakot, majd a kivlasztott AVI-llomnnyal elindtjuk a lejtszst.

Private Sub cmdNyits_Click() 1 a Megnyits prbeszdablak kezelse cdlgOpen.Filter = "avi (*.avi)|*.avi" On Error GoTo Hibal cdlgOpen.ShowOpen On Error GoTo 0 ' az automatikus lejtszsindts belltsa aniAVILejtsz.AutoPlay = True 1 a Megnyits prbeszdablakban kivlasztott fjl lejtszsa aniAVILejtsz.Open cdlgOpen.filename Exit Sub Hibal: ' Hibakezels: kilps az alprogrambl Exit Sub End Sub

5.6.3. WAV llomnyban trolt hangok lejtszsa API segtsgvel WAV tpus hangllomnyokat a Windows API hasznlatval is lejtszhatjuk. A WAV_HANG pldaprogram ablakban az API-fgg vny khez egy-egy parancsgomb tartozik, melyeket megnyomva aktivizljuk a kivlasztott fggvnyt. A formmodulban helyeztk el a fggvnyek private deklarciit, melyeket az "API Text Viewer" alkalmazssal lltottunk el :
Private Declare Function PlaySound Lib "winmm.dll" _ Alias "PlaySoundA" (ByVal lpszName As String, _ ByVal hModule As Long, ByVal dwFlags As Long) As Long Private Declare Function sndPlaySound Lib "winitvm.dll" _ Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _ ByVal uFlags As Long) As Long Private Declare Function MessageBeep Lib "user32" _ (ByVal wType As Long) As Long

A Nyits" parancsgomb megnyomsakor ltalnos prbeszdablakban bekrjk a lejtszani kvnt llomny nevt:
Private Sub cmdNyits_Click() cdlgNyits.Filter = "(*.wav)|*.wav" cdlgNyits.ShowOpen ' A fjlnevet hasznl fggvnyhvsokat megvalst ' parancsgombok engedlyezse cmd_PlaySound.Enabled = True cmd_sndPlaySound.Enabled = True ' A parancsgombok feliratanak vltoztatsa cmd_PlaySound.Caption = "PlaySound: " & cdlgNyits.FileTitle cmd_sndPlaySound.Caption = "sndPlaySound: " & _ cdlgNyits.FileTitle End Sub

A hangllomnyok lejtszst a parancsgombokkal kezdemnyezhetjk:


Private Sub cmd_PlaySound_Click() PlaySound cdlgNyits.filename, 0, 0 End Sub Private Sub cmd_sndPlaySound_Click() sndPlaySound cdlgNyits.filename, 0 End Sub

A kt msik fggvnyt l eltr en a MessageBeep fggvny egy hangtpust vr paramterknt, amely a Windows rendszerben belltott WAV-hangok kzl jell ki egyet (Vezrl pult/Hangok).
Private Sub cmd_MessageBeep_Click() MessageBeep 0 End Sub

5.6.4. Animcikszts az ImageList vezrl vel Ha az a feladatunk, hogy kpet mozgassunk, hasznlhatjuk az ImageList vezrl t. A CD MOZGOSZO pldaprogramban egy kpet s egy ikont animlunk, tovbb egy szveget mozgatunk. A feladat megoldshoz a kplista (ImageList) ActiveX-vezrl kt pldnyt hasznljuk. (Az ImageList vezrl t el z leg fel kell venni az eszkztrra.) Az alkalmazs rlapjn elhelyezett Image vezrl ben az id zt diktlta temben egyenknt megjelentjk a kplista elemeit. Az alkalmazs futs kzbeni ablaka:

5.1 Lbra A kp forog, a szveg mozog

A feladat megoldsa sorn az albbi vezrl k kerltek fel az rlapra:


Vezrl tpus CommandButton Image ImageList ImageList Label Timer Objektumnv cmdStart imgForgKp imilkon imlKp lblSzveg tmrId zt Felhasznls indtja az animcit, megjelenti a kplistbl az aktulis kpet, az ikonanimcihoz trol bitkpeket, a kpanimcihoz trol bitkpeket, a mozgatott szveget tartalmazza, a kpcsere temt adja.

Az animcihoz el szr el lltjuk az azonos mret bitkpeket, majd ezeket betltjk a megfelel kplista vezrl be. A betltst a kplista tulajdonsglapjain (View \ Property Pages) vgezhetjk el. A kplistban minden kpnek van sorszma {Index), amelyet a kpre val hivatkozshoz hasznlunk.

5.12. bra Az ImageList kpei

A form betltsekor a kp vezrl ben megjelentjk a kplista els elemt:


Private Sub Form_Load() di = 1 dj = 1 imgForgKp.Picture = imlKp.Listlmages.Item(1).Picture End Sub

Az animci a Start parancsgomb megnyomsval indthat, s Stop gombbal brmikor megllthat:


Private Sub cmdStart_Click() Const szStop = "Stop", szStart = "Start" Static bolNemEls As Boolean 1 Els alkalommal tlltjuk a felirat szvegt If Not bolNemEls Then lblSzveg.Caption = "Ez a szveg mozog ! * * bolNemEls = True End If

"

' Minden ms esetben a parancsgomb felirattl fgg en ' lltjuk a mozgst engedlyez kapcsol rtkt s a ' parancsgomb feliratt If cmdStart.Caption = szStop Then tmrld zt .Enabled = False cmdStart.Caption = szStart Else tmrld zt .Enabled = True cmdStart.Caption = szStop End If End Sub

A kpeket s a szveget az id zt minden lefutsnl lptetjk:


Private Sub tmrId zt _Timer() MozgSzveg MozgKp Mozglkon End Sub

A szveg lptetst vgz eljrsban a szveg els bet jt a szveg vgre msoljuk:
Private Sub MozgSzveg() Dim bet As String bet = Left(lblSzveg.Caption, 1) lblSzveg.Caption = Right(lblSzveg.Caption & bet , _ Len(lblSzveg.Caption)) End Sub

Kp animcijakor a Lpkeds eljrssal megkeressk a kvetkez kp indext, majd a kpmez Picture tulajdonsgnak tlltsval megjelentjk a kpet:
Private Sub MozgKp() Static i As Integer Lpkeds i, di, imlKp imgForgKp.Picture = imlKp.Listlmages(i).Picture End Sub

A kp animcijhoz hasonlan oldottuk meg az ikon animcijt. A klnbsg csak annyi, hogy a kvetkez kpet a form Icon tulajdonsghoz rendeljk. (Megjegyezzk, hogy az ikon a rendszergombon s a tlcn is forog.)
Private Sub MozgIkon() Static j As Integer Lpkeds j, dj, imlIkon frmMozgSzveg.Icon = imlIkon.ListImages(j).Picture End Sub

Vgezetl nzzk az indexek lptetst vgz eljrst!

Private Sub Lpkeds(i As Integer, El jelesEgy As Integer, List As ImageList) i = i + El jelesEgy 1 Ha elrtk a kpsorozat utols kpkockjt If i = List.Listlmages.Count + 1 Then 1 Visszalps az utols el tti kpkockra i = List.Listlmages.Count - 1 ' A forgsirny vltsa El jelesEgy = El jelesEgy * (-1) End If 1 Ha elrtk az els kpkockt If i = 0 Then 1 Az indexet a msodik kpkockra lltjuk i = 2 ' A forgs irny vltsa El jelesEgy = El jelesEgy * (-1) End If End Sub

5.6.5. Animci a PictureClip vezrl vel A PictureClip segtsgvel trtn animcis feladat megoldst (KUTYAFUT) alkalmazs tartalmazza. A megoldsban minden egyes kpsorozathoz kln PictureClip ActiveX-vezrl t tettnk fel az rlapra (egy pclKp nev tmbbe szervezve). A vezrl Picture tulajdonsgban megadott bitkp rcsozsval megadhatjuk az egyenknt elrhet kpterletek - kpkockk - szmt. A rcsozs paramtereit a vezrl Cols (oszlopok szma) s Rows (sorok szma) tulajdonsgban kell belltani. A vezrl tulajdonsglapjai segtsgvel knyelmesen hozzfrhetnk a szksges tulajdonsgokhoz:

5.13. bra A PictureClip tulajdonsglapja

A kpek referencijt a program futsa sorn a PictureClip vezrl kb l a picKeret tmb megfelel kpmez jbe msoljuk. A kpcsere temt egy id zt tmrId zt ) adja. Az alkalmazs m kdst kt parancsgombbal vezrelhetjk: az egyik gomb helybenfutst szimull (cmdHelyben), a msik pedig a futs s a meglls llapotokat vltogatja (cmdFuts). Az alkalmazs ablaka fut cicval, kutyussal s emberrel:

5.14. bra Animci a PictureClip vezrl vel

A form betltsekor mindhrom kpsorozat els elemt a kpmez kbe msoljuk, s kezd rtkkel ltjuk el a program elemeit:
Private Dim i ' A For Sub Form_Load() As Integer keretekben megjelentend els kpkockk belltsa i = 0 To FutkSzma - 1 picKeret(i).Picture = pclKp(i).GraphicCell(0) Next i ' A "Futs/llj!" parancsgomb feliratozsa cmdFuts.Caption = szFuts ' A lpstvolsg (egysgnyi eltols -pixelben megadva) Lps(0) = 4 ' kutyus Lps(1) = -3 ' ember Lps(2) = -1 ' cica End Sub

A felhasznlt kt parancsgomb esemnykezel eljrsban a program m kdst vezrl modulszint vltozk belltsait adjuk meg:
Private Sub cmdFuts_Click() If cmdFuts.Caption = szFuts Then cmdFuts.Caption = szllj bolFuts = True ' a futs engedlyezse Else cmdFuts.Caption = szFuts bolFuts = False ' a futs tiltsa bolHelyben = False ' a helybenfuts tiltsa End If End Sub

Private Sub cmdHelyben_Click() bolHelyben = True bolFuts = False End Sub

Az id zt esemnykezel eljrsban a kpkockk vltsn kvl a kpmez k mozgatst is vgezzk. A mozgatsi sebessget a Lps() tmb elemei hatrozzk meg kpmez nknt.
Private Sub tmrId zt _Timer() Const El re = 1, Helyben = 0 ' Ha futs van engedlyezve, vltjuk a kpkockkat s ' mozgatjuk a kpmez ket If bolFuts Then Futs El re ' Ha helyben futs van engedlyezve, csak a kpkockkat ' vltogatjuk. A kpmez k ekkor 0 sebessggel mozognak. If bolHelyben Then Futs Helyben End Sub

A Futs eljrsban minden egyes kp esetn elvgezzk a kpvltst:


Private Sub Futs(Hogyan As Integer) Static Kpkocka(2) As Integer Dim i As Integer For i = 0 To FutkSzma - 1 Kpvlts Kpkocka(i), picKeret(i), pclKp(i), _ Lps(i) * Hogyan Next i End Sub

A Kpvlts eljrsban a kvetkez kpkockt a kpmez hz rendeljk:


Private Sub Kpvlts(i As Integer, picKeret As PictureBox, _ pclKp As PictureClip, Lps As Integer) 1 A kpkockk sorszmt jelz szmll rotcis nvelse ' 1-t l a bitkp rcsozsval kapott kpkocka szmig i = i + 1 If i = pclKp.Cols * pclKp.Rows Then i = 0 1 A kvetkez sorszm kpkocka "vettse" a kpmez be picKeret.Picture = pclKp.GraphicCell(i) 1 A kpmez vzszintes eltolsa egy adott lpstvolsggal picKeret.Left = picKeret.Left + Lps ' Az ablak hatrain kvlre kiszaladt kpmez ' "visszaterelse" a programablak terletre
If picKeret.Left > frmKutyus.ScaleWidth + 2 0 Then picKeret.Left = frmKutyus.ScaleLeft end

if If picKeret.Left + picKeret.Width < 0 Then picKeret.Left = frmKutyus.ScaleWidth end if End Sub

6. Alkalmazsok kztti adatkapcsolatok


A Windows opercis rendszerek (95, 98 s az NT, 2000, XP) teljes egszben a processzor vdett zemmdjt hasznljk. A memriacmzs lertbla segtsgvel trtnik oly mdon, hogy egy alkalmazs memriaterlete nem rhet el egy msik alkalmazsbl. Ez a tny megnehezti az alkalmazsok egymssal val kommunikcijt. Az vek sorn a Microsoft cg klnbz adatkapcsolati technolgikat fejlesztett ki az alkalmazsok kztti adatforgalom megvalstsra: Az alkalmazsok kzti adatcsere alapvet eszkze a vglap (clipboard), ami kor a Windows egyik alapeleme, a USER32 modul jtssza a posts szerept. A vglap statikus adatforgalmi lehet sgeit b vti a DDE (Dynamic Data Exchange), amikor az adatok forgalmazst az alkalmazsok kztt - rgztett forgatknyvet kvet - zenetcsomagokkal vezrelhetjk.

Mr Windows 3.l-ben megjelent a csatolt dokumentum fogalma, amikor egyetlen dokumentum tbbfle informcit tartalmaz (szveg, kp, hang, vi deo), s a klnbz dokumentumelemeket ms s ms alkalmazs kezeli. Ez a megolds az objektumkapcsols s -begyazs (OLE - Object Linking and Embedding). Az OLE klnbz verzii egyre inkbb a programok gyfl kiszolgl jelleg egyttm kdst clozzk, pldul a kiszolgl progra mozsa az gyfl alkalmazsokbl (OLE automation). Napjainkban az OLE nem csupn egy bet sz, hanem a Microsoft cg alkal mazsok kztti egyttm kdsi technolgija. Ez magban foglalja az egyttm kd vezrl ket, melyeknek hagyomnyos neve az OCX volt, de ma mr ActiveX vezrl knek hvjuk ket. A ma olyan sokat hallhat COM (Component Object Model) technolgia sem ms, mint az OLE objektum szint megvalstsa.

6.1. A vglap hasznlata


A sznfalak mgtt a vglap hasznlata gy trtnik, hogy az alkalmazs egy globlis memriablokkot hoz ltre, s annak lerjt tadja a vglapnak (User32). Ezek utn az alkalmazsnak nem kell tbbet gondoskodni a memriablokkrl. A vglap tbbfle formtumot kpes kezelni, s minden formtumbl egyet trolni. A formtumok azonostsra a Visual Basic rendszerben konstansok szolglnak.

Konstans vb CFLink vbCFText vbCFRTF vbCFBitmap vbCFMetafile vbCFDIB vbCFPalette

rtk &HBF00 I &HBF01 2389

Lers DDE kapcsolati informci Szveges informci RichText formtum Bitkp llomny (.bmp) Metafile (.wmf) Eszkzfggetlen bitkp (DIB) Sznpaletta

A Visual Basic rendszerben a vglap hasznlatra vonatkoz segdeszkzk a Clipboard objektumhoz kapcsoldnak. A
Clipboard.GetFormat (formtum)

metdus hvsakor a fenti tblzatnak megfelel konstanst paramterknt hasznlva megtudhatjuk, hogy az adott formtumban van-e adat a vglapon. A Clipboard objektum Clear metdusval trlhetjk a vglap tartalmt. Szveges adatokat helyezhetnk el a vglapon a
Clipboard.SetText szveg, formtum

metdussal, ahol a szveg valamilyen sztringkifejezs, & formtum pedig valamelyik szveges tpuskonstans (vbCFLink, vbCFText, vbCFRTF). Hasonlan a
Clipboard.GetText (formtum)

metdus a megadott formtum, vglapon trolt szveggel tr vissza. Teljesen analg mdon hasznlhatk
Clipboard.SetData adat, formtum Clipboard.GetData (formtum)

metdusok, kpes informcik esetn (bitkp, metafjl, DIB, paletta). Pldaknt ksztsnk programot (VAGOLAP), amely egy PictureBox, illetve egy TextBox vezrl be msolja a vglap tartalmt, attl fgg en, hogy mi van a vglapon! Az alkalmazs ablaka mindssze ngy pt elemet tartalmaz (kt parancsgombot, egy kpmez t s egy szvegmez t):

6.1. bra Kp s szveg a vglapon

Ha mozog az egr az ablakon frisstjk a vglap-informcikat:


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Mi van a vglapon Vglap_kp.Enabled = Clipboard.GetFormat(vbCFBitmap) Or _ Clipboard.GetFormat(vbCFMetafile) Or _ Clipboard.GetFormat(vbCFDIB) Vglap_szveg.Enabled = Clipboard.GetFormat(vbCFText) End Sub

A kp letltse:
Private Sub Vglap_kp_Click() If Clipboard.GetFormat(vbCFBitmap) Then Kp.Picture = Clipboard.GetData(vbCFBitmap) Elself Clipboard.GetFormat(vbCFMetafile) Then Kp.Picture = Clipboard.GetData(vbCFMetafile) Elself Clipboard.GetFormat(vbCFDIB) Then Kp.Picture = Clipboard.GetData(vbCFDIB) End If End Sub

A szveg letltse:
Private Sub Vglap_szveg_Click() Szveg.Text = Clipboard.GetText(vbCFText) End Sub

6.2. A dinamikus adatcsere (DDE)


Windows alatt a DDE (Dynamic Data Exchange), a dinamikus adatkapcsolatok lehet sge az egyik leghatkonyabb eszkz a fut alkalmazsok kztti kommunikcira. A DDE hasznlata sorn programok kommuniklnak egymssal. Kiszolglnak {server) hvjuk azt az alkalmazst, amelyik kldi az informcit, s gyflnek {client) azt, amelyik fogadja. A DDE-kapcsolatot mindig az gyfl program kezdemnyezi, s az adatkapcsolat ltrejtte utn a kiszolgl biztostja az adatokat. Egyetlen kiszolgl tbb gyflprogram fel kldhet zenetet, s egyetlen gyflalkalmazs tbb kiszolgltl kaphat zenetet. A DDE-kapcsolatban lv alkalmazi programok n. m veletcsomagokat (transaction) kldzgetnek egymsnak. A m veletcsomag, amely az zenethez hasonl Windows fogalom, egy konstansbl s kapcsold paramterekb l pl fel. Az gyfl- s a kiszolgl-alkalmazsok kommunikcija sorn az adatok hrom kategrijt klnbztethetjk meg, amelyeket sztringekkel jellemezhetnk: Az alkalmazs, szolgltats neve. Ez leggyakrabban a kiszolgl alkalmazi program neve (application name, service name). Az adatok (cmszval jellemzett) tmakrkbe csoportosthatk. A tmakr cmt tartalmaz sztringet hasznljuk a tmakr azonostsra (topic). Minden egyes tmakrben tbb adat is lehet, amely adatoknak szintn lehet nevk, melyet az n. ttelsztringben trolunk (item). A DDE-kapcsolat tbbfle protokoll szerint kezelhet : A "hideg" kapcsolat lnyege, hogy az gyflprogram krsre a kiszolgl megadja a krt informcikat. A "forr" kapcsolat a hidegt l eltr en arra hasznlhat, hogy az gyfl specifiklja azokat az adatokat, amelyekre szksge van, s a kiszolgl ezeket mindig elkldi, amikor az adatok megvltoznak. A "meleg" kapcsolat az el z kt kapcsolati lehet sg kombincija. Az gyfl felkri a kiszolglt adatszolgltatsra, amely ezt kvet en csak az adat vltozsrl rtesti az gyfelet. gy az gyfl dnthet arrl, hogy lekri-e vagy sem a megvltozott adatot. A DDE- kapcsolat sorn tbbirny kommunikcit is megvalsthatunk, az albbi lehet sgeknek megfelel en: Adatkrs A kapcsolat ezen mdja megfelel a hagyomnyos "hideg" kapcsolatnak. Az adatkrst az gyfl a kiszolglnak szl zenet elkldsvel kezdemnyezi.

Adatklds Az gyflprogram fel l is lehet adatokat kldeni a kiszolglknak. A kiszolgl ekkor tjkoztatja az gyfelet, hogy fogadta-e az adatot. rtests Ezzel az zenetcsomag-tpussal azt lehet elrni, hogy az gyfl s a kiszolgl kztt megteremtett kapcsolat sorn a kiszolgl rendszeresen rtesti az gyfelet a krt adatrl (az adat megvltozsakor). Ez a kapcsolat mindaddig rvnyben marad, amg a az gyfl meg nem szaktja azt. Az ilyen tpus kapcsolatnak, a hagyomnyos zenetvezrelt DDE-kommunikcinak megfelel en, kt mdja van. A "forr" kapcsolat esetn a kiszolgl azonnal megkldi a megvltozott adatot, mg a "meleg" kapcsolat esetn csak rtesti az gyfelet a vltozsrl, de nem kldi az adatot, amg az gyfl nem kri azt. Parancs Arra is van lehet sg, hogy a kliens parancsot kldjn a kiszolglnak. Szinkron s aszinkron zenetcsomagok Az zenetcsomagok szinkron s aszinkron mdon egyarnt kezelhet k. Szinkron kapcsolat esetn definilhat egy vrakozsi id (TimeOut), ameddig az gyfl vr a kiszolglra. Az aszinkron zenetcsomag kldse esetben nincs vrakozs. 6.2.1. A hlzati kapcsolatok - NetDDE A NetDDE technolgia lehet v teszi, hogy a DDE-technolgit hlzaton keresztl alkalmazzuk. A NetDDE-gynkprogram kommunikl az sszes loklis DDE-alkalmazssal, s kt gp gynkprogramjai a NetBIOS segtsgvel tartjk egymssal a kapcsolatot. A NetDDE hasznlata esetn a kiszolglnv-tmakrnv prok egy nll megnevezst kapnak (pldul MyDDEShare$), amely bekerl a NetDDEShare adatbzisba (regisztrci). Szksges tovbb, hogy a programban a kiszolglnv (pl. \\gpnv\NDDE$) s a tmakrnv (MyDDEShare$) regisztrlt logikai nevek legyenek. A ttelneveket ugyangy hasznlhatjuk, mint a loklis esetben. 6.2.2. DDE hasznlata a Visual Basic-ben A Visual Basic-ben a szolgltats nevt s a trsalgs tmjt a kiszolgl hatrozza meg. A programokban az adatszolgltatst a formhoz kapcsolhatjuk. Azt, hogy a form adatszolgltatknt mkdik-e vagy sem a LinkMode tulajdonsg hatrozza meg. Ha a form LinkMode tulajdonsga a tervezs sorn None rtkre van lltva (vbLinkNone), akkor a program ablaka nem vesz rszt az adatforgalomban. Ha a tervezs sorn a LinkMode tulajdonsgot Source-re lltjuk (vbLinkSource), akkor a program

ablaka rszt vehet a DDE adatforgalomban. Az gyfl s a kiszolgl kztti tnyleges adatcserhez az gyfl programban be kell lltani a kommunikci adatait (a szolgltats neve, tmakre s ttele). Tisztznunk kell, hogyan kezelheti az gyflprogram a kommunikci adatait. A Visual Basic esetben a szolgltats neve megegyezik az alkalmazs kiterjeszts nlkli nevvel, a tmakrt a kiszolgl program hatrozza meg. A fejleszts alatt a projekt nevt hasznlhatjuk szolgltatsnvknt. Ha nem intzkednk a tmakrr l, akkor az a form neve lesz. A tteleket, amelyben a kiszolgl kommuniklni kpes az egyes vezrl k (pldul a Label, a PictureBox, vagy TextBox) tartalmazhatjk. Ezek a vezrl k definilhatjk a ttel nevt (ha ez elmarad, akkor a vezrl neve lesz a ttel neve is). rdemes megjegyezni, hogy a Microsoft cg programjai ltalban DDE kiszolglk s gyfelek egyttal. Pldul az Excel esetben a tmakr az llomny neve, a ttel pedig a cella cme (pldul R1C1 az angol verziban, S1O1 a magyarban). A kiszolgl programban a form LinkMode s LinkTopic tulajdonsgainak segtsgvel adhatjuk meg a kommunikci adatait. Ha a program futsa kzben tesszk ezt, akkor a bellts idejre ki kell kapcsolni a kommunikcis lehet sget.
Forrni.LinkMode = vbLinkNone Forrni.LinkTopic = "sajt" 'sajt tmakr Forrni.LinkMode = vbLinkSource

Ha a kiszolgl program fut, akkor az gyflalkalmazs az, amelyik felptheti a kommunikcis kapcsolatot. A kapcsolatot az gyflprogramban a vezrl khz ktve lehet felpteni a LinkMode LinkTopic s Linkltem tulajdonsgok felhasznlsval. A vezrl k LinkMode tulajdonsgnak rtke dnti el, hogy milyen a kapcsolat
rtk vbLinkNone vbLinkAutomatic vbLinkManual vbLinkNotify 0 1 2 3 Kapcsolat Nincs DDE kapcsolat, A VB automatikusnak nevezi a "forr" kapcsolatot, manulisnak a "hideget", s rtest jelleg nek a "meleget".

A kiszolglprogram vezrl iben csak kikapcsolt {vbLinkNone) llapotban lehet lltani a DDE adatokat. Az gyflprogramban a LinkTopic tulajdonsg a szerver nevt s a tmakr nevt tartalmazza a "I" elvlasztjellel tagolva. A Linkltem tulajdonsg pedig a ttelt jelli ki. A paramterezs utn ltrehozhatjuk a kapcsolatot a LinkMode megfelel belltsval.
Textl.LinkMode Textl.LinkTopic Textl.Linkltem Textl.LinkMode = = = = vbLinkNone "Kiszolg|Form1" "Textl" vbLinkAutomatic

Esemnyek is kapcsoldnak a DDE trsalgshoz. A kiszolgl ablaka, illetve az gyfl vezrl i a kapcsolat felvtelr l a LinkOpen, lezrsrl a LinkClose esemnyben rteslnek. Hibakezelsi lehet sgnk is van, hiba esetn a LinkError esemny keletkezik. Ha az gyfl vbLinkNotify mdon kapcsoldik a kiszolglhoz, akkor az gyfl vezrl inek LinkNotify esemnykezel je kapja meg a vezrlst s a megvltozott rtkeket letlthetjk az gyfl vezrl inek LinkRequest metdusval. Ha a kapcsolat vbLinkAutomatic, akkor az gyfl vezrl jnek tartalma (kp, szveg) automatikusan a kiszolgl megfelel vezrl jnek tartalmt veszi fel. A fenti megoldsok els sorban a hagyomnyos, a kiszolgltl az gyfl fel irnyul adatforgalmat tmogatjk. Lehet sg van a fordtott kapcsolatokra is. A vezrl k LinkPoke metdusa a vezrl tartalmt a kiszolgl megfelel ttelbe rja. Megtehetjk azt is, hogy parancsot kldnk a kiszolglnak a vezrl LinkExecute metdusval
vezrl .LinkExecute parancs

A parancsklds a kiszolgln egy LinkExecute esemnyt hoz ltre, mely paramtereknt kapjuk a parancsot:
Sub Form_LinkExecute (Parancs As String, nyugta As Integer)

nyugta paramternek val 0 rtkadssal nyugtzzuk a parancsot. Pldaknt ksztsnk DDE-kapcsolaton alapul gyfl-kiszolgl alkalmazst, amely kt szmot sszead! A kiszolgl- s az gyflprogram egyarnt a CD mellklet DDE1 alknyvtrban tallhat. A kiszolglprogram a Szerver, a tmakre pedig a szumma nevet viseli. A form neve sszead. A program hrom szvegmez (TextBox) vezrl t tartalmaz (A, B s C). Az A s B vezrl k az gyflt l LinkPoke metdussal kapjk az adatokat. Ha az adatok vltoznak, a vezrl k rtknek szmm konvertlsa (A_rtk, B_rtk) s sszeadsa (C_rtk) utn az eredmnyt a C szvegmez be tesszk. A C vezrl "forr" kapcsolatban ll az gyfllel. Modulszint deklarcik:
Private A_rtk, B_rtk, C_rtk As Double

A program betltsekor inicializljuk a vezrl ket s a DDE kapcsolatokat:


Private Sub Form_Load() ' A kiszolgl ablaknak helye sszead.Left = Screen.Width / 2 - sszead.Width sszead.Top = Screen.Height / 2 - sszead.Height / 2 A_rtk = 0 B_rtk = 0 C_rtk = 0 sszead.LinkMode = vbLinkNone sszead.LinkTopic = "szumma" ' sajt tmakr belltsa sszead.LinkMode = vbLinkSource End Sub

Az A s a B szvegmez k brmelyiknek megvltozsakor az sszeg a C szvegmez be kerl.


Private Sub A_Change() ' Ha az A szvegmez tartalma vltozik A_rtk = CDbl(A.Text) C_rtk = A_rtk + B_rtk C.Text = CStr (C_rtk) End Sub Private Sub B_Change() ' Ha a B szvegmez vltozik B_rtk = CDbl(B.Text) C_rtk = A_rtk + B_rtk C.Text = CStr(C_rtk) End Sub

Amikor az gyfl kilp, lellsi parancsot kld a kiszolglnak, amit az nyugtz.


Private Sub Form__LinkExecute(CmdStr As String, Cancel As Integer) ' Ha lellsi parancs rkezik az gyflt l kilpnk Cancel = 0 Unload Me End Sub

Az gyflprogram (Kliens) kt vezrl je az A s a B tartalmazza az sszeadand adatokat. Ezeket a kiszolgl megfelel A s B vezrl ihez ktjk vbLinkManual kapcsolattal. A C tartalmazza az eredmnyt ez "forr" kapcsolatban ll a szerver C vezrl jvel. A Microsoft Windows Common Controls betltse utn az AUD s a BUD UpDown vezrl ket hozzkapcsolhatjuk az A s B vezrl khz. Gondoskodunk arrl is, hogy a kiszolgl az gyfllel egytt induljon el.

Private Sub Form_Load() ' Az aktulis knyvtrbl elindtja a Szerver programot Shell App.Path & "\SZERVER.EXE", vbNormalFocus ' A Kliens ablak helye Kliens.Left = Screen.Width / 2 Kliens.Top = Screen.Height / 2 ' Kikapcsolva a DDE kapcsolatot az A szvegmez ' program szumma tmakrhez csatlakozik A.LinkMode = 0 A.LinkTopic = "Szerver|szumma" ' A Szerver programon szintn az A szvegmez ' prbeszd tmjt A.Linkltem = "A" a Szerver

tartalmazza a

' Elg a manulis kapcsolat, hiszen a kliens kldi az adatot A.LinkMode = vbLinkManual ' Kikapcsolva a DDE kapcsolatot a B szvegmez ' program szumma tmakrhez csatlakozik B.LinkMode = 0 B.LinkTopic = "Szerver|szumma" ' A Szerver programon szintn a B szvegmez 1 prbeszd tmjt B.Linkltem = "B" a Szerver

tartalmazza a

' Elg a manulis kapcsolat, hiszen a kliens kldi az adatot B.LinkMode = vbLinkManual ' Kikapcsolva a DDE kapcsolatot a C szvegmez ' program szumma tmakrhez csatlakozik C.LinkMode = 0 C.LinkTopic = "Szerver|szumma" ' A Szerver programon szintn a C szvegmez prbeszd tmjt C.Linkltem = "C" a Szerver

tartalmazza a '

' Automatikus kapcsolattal a szerver azonnal kldi az ' sszeads eredmnyt C.LinkMode = vbLinkAutomatic ' Kezdeti rtk belltsok A.Text = 0 B.Text = 0 C.Text = 0

' Az AUD UpDown vezrl t sszekapcsoljuk az A vezrl vel AUD.Max = 32767 AUD.Min = -32768 AUD.BuddyControl = A AUD.AutoBuddy = True AUD.SyncBuddy = True ' A BUD UpDown vezrl t sszekapcsoljuk a B vezrl vel BUD.Max = 32767 BUD.Min = -32768 BUD.BuddyControl = B BUD.AutoBuddy = True BUD.SyncBuddy = True End Sub

Az A s B szvegmez tartalmt (csak egsz szmokat) vltozs esetn kldjk a kiszolglnak.


Private Sub A_Change() On Error GoTo Hiba Dim ia As Integer ia = Clnt(A.Text) A.LinkPoke Hiba: End Sub Private Sub B_Change() On Error GoTo Hiba Dim ib As Integer ib = Clnt(B.Text) B.LinkPoke Hiba: End Sub

Kikapcsolskor lelltjuk a kiszolglt is a Stop zenettel.


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) B.LinkMode = 0 C.LinkMode = 0 A.LinkExecute "Stop" A.LinkMode = 0 End Sub

A programok munka kzben: 6 . 2 . b ra DDE sszead

rdemes elkszteni a DDE-kapcsolaton alapul gyfl alkalmazst, melynek kiszolglja az Excel kt szmot sszead! A program a CD-n a DDE2 knyvtrban tallhat. Hasonlan pthetjk fel a kiszolgl alkalmazst, azonban nem hozzuk ltre a kapcsolatot, csak elindtjuk az Excelt. Ha megprblnnk a form tltsekor megnyitni a kapcsolatot is, nem biztos, hogy az Excel-nek lenne elg ideje megnyitni a munkalapot az els zenet el tt. A Shell fggvny hvsakor be kell rnunk az EXCEL.EXE elrsi tvonalt. Erre a Regiszt modul regisztrcis adatbzist lekrdez rutinjt hasznljuk. A Shell fggvny visszatrsi rtke a modulban globlisan deklarlt RV, amit az elindtott program azonostsra hasznlhatunk. Az aktulis_llomny sztring tartalmazza az Excel munkalap teljes fjlnevt.
Private RV As Double Private aktlis_llomny As String Private Sub Form_Load() Dim Excelpath As String aktlis_llomny = "" aktlis_llomny = App.Path + "\" aktlis_llomny = aktlisllomny + "[Munkaf.xls]Munkai" ' Nem engedlyezzk a vezrl ket, csak ha van kapcsolat A.Enabled = False B.Enabled = False C.Enabled = False AUD.Enabled = False BUD.Enabled = False If Not GetKeyValue(HKEY_LOCAL_MACHINE, _ "SOFTWARE\Microsoft\Office\8.0\Excel\InstallRoot" , _ "Path", Excelpath) Then RV = MsgBox("Nincs Excel", vbYes + vbCritical) End End If ' Az Excel indtsa az elrsi t megadsval RV = Shell(Excelpath + "\Excel " + aktlis_llomny, _ vbMinimizedFocus) ' Kezdeti rtk belltsok A.Text = 0 B.Text = 0 C.Text = 0 ' Az AUD UpDown vezrl t sszekapcsoljuk az A szvegmez vel AUD.Max = 32767 AUD.Min = -32768 AUD.AutoBuddy = True AUD.BuddyControl = A AUD.SyncBuddy = True ' A BUD UpDown vezrl t sszekapcsoljuk a B szvegmez vel BUD.Max = 32161 BUD.Min = -32768 BUD.AutoBuddy = True BUD.BuddyControl = B BUD.SyncBuddy = True End Sub

A kapcsolatot a Kapcsolds parancsgombbal nyitjuk meg, addig a vezrl k nem engedlyezettek.


Private Sub Kapcsolds_Click() A.LinkMode = vbLinkNone A.LinkTopic = "Excel|" + aktlis_llomny A.Linkltem = "S101" A.LinkMode = vbLinkManual ' Manulis kapcsolat az adatokkal B.LinkMode = vbLinkNone B.LinkTopic = "Excel|" + aktlis_llomny B.Linkltem = "S201" B.LinkMode = vbLinkManual ' Manulis kapcsolat az adatokkal C.LinkMode = vbLinkNone C.LinkTopic = "Excel|" + aktlis_llomny C.Linkltem = "S3O1" C.LinkMode = vbLinkAutomatic ' Automatikus kapcsolat az _ eredmnnyel A.LinkPoke B.LinkPoke A.Enabled = True B.Enabled = True C.Enabled = True AUD.Enabled = True BUD.Enabled = True End Sub

Ha az A vagy a B szvegmez tartalma megvltozik, az rtket elkldjk az Excelnek.


Private Sub A_Change() ' Ha van kapcsolat kldnk If A.LinkMode <> vbLinkNone Then A.LinkPoke End If End Sub Private Sub B_Change() ' Ha van kapcsolat kldnk If B.LinkMode <> vbLinkNone Then B.LinkPoke End If End Sub

A C csak olvashat szvegmez tartalmazza az sszeads eredmnyt.


Private Sub C_Change() On Error GoTo Ki C.Text = CStr(Cint(C.Text)) Exit Sub Ki: End Sub

6.3. bra Az Excel vgzi az sszeadst

6.3. Az OLE-trol csatolt dokumentumok kezelsre


A Visual Basic alkalmazsokban az OLE-komponenssel valsthatk meg az OLE hagyomnyos objektumkapcsolsi s -begyazsi funkcii. A komponens InsertObjDlg metdust hasznljuk a begyazott, illetve a kapcsolt objektumok kivlasztsra. Az OLETypeAllowed tulajdonsg rtke hatrozza meg, hogy begyazott (vbOLEEmbedded -1), vagy kapcsolt {vbOLELinked - 0) vagy mind a ktfle dokumentumot (vbOLEEither - 2) hasznlunk. A CreateLink s a CreateEmbed metdusok hasznlhatk arra, hogy egy dokumentumrsz, vagy egy kiszolgl osztlya kapcsolt vagy beptett objektumknt szerepeljen. Ezek a metdusok belltjk a SourceDoc, Sourceltem, illetve Class tulajdonsgokat, s feleslegess teszik az el z verzik Action jellemz jt. Pldaknt ksztsnk olyan alkalmazst (OLECONT), amelyben az OLE-kontner brmilyen OLE-kiszolgl ltal kezelt objektumot kpes magba fogadni! A megolds elksztshez egy - a VB Application Wizard ltal el lltott - SDI alkalmazs vzbl indulunk ki. Az SDI alkalmazsban csak a Fjl ment hasznlunk Megnyit, Bezr s Kilp menpontokkal. A menhz kapcsoldan az eszkzsvon gyorstgombokat m kdtetnk. Az OLE-szervert a fejleszts alatt a vezrl terletn belli kett s kattints hatsra megjelen prbeszdablakbl vlaszthatjuk ki:

6.4. bra Az OLE trol tltse

Ugyanez a prbeszdablak jelenik meg, a fut alkalmazs Fjl/Megnyit... menpontjnak, illetve a megfelel eszkzgombjnak kivlasztsakor is, amikor a megjelentst az InsertObjDlg metdus hvsa vgzi. Feltettnk egy "Ms" parancsgombot is az rlapra, hogy az inputfkuszt tvehesse az OLE-troltl. Az SDI alkalmazsnak megfelel en a f program a Module l-ben.
Public fMainForm As frmMain Sub Main() Set fMainForm = New frmMain fMainForm.Show End Sub

Az SDI-eszkztr men s gombkezelsrt hasznljuk.


Private Sub mnuNyits_Click() ' Az objektumot begyaz, illetve kapcsol prbeszd OLE1.InsertObjDlg End Sub Private Sub mnuZrs_Click() ' A begyazott, illetve csatolt objektum trlse OLE1.Delete End Sub Private Sub mnuKilps_Click() ' A programbl val kilps End End Sub

Private Sub OLEl_DblClick() ' Az objektumot begyaz, illetve kapcsol prbeszd mnuNyits_Click End Sub Private Sub tbToolBar_ButtonClick(ByVal Button As ComctlLib.Button) ' Az SDI eszkzsor ' !!! Csak hrom gomb az imllcons-ban is Select Case Button.Key Case "Nyits" mnuNyits_Click Case "Zrs" mnuZrs_Click Case "Kilps" mnuKilps_Click End Select End Sub

Az alkalmazs ablaknak tmretezsekor hozzigaztjuk az OLE-trol mreteit az ablak mreteihez.


Private Sub Form_Resize() ' Az ablak mretnek vltozsakor az OLE trol mrete is vltozik OLEl.Left = 0 OLEl.Top = tbToolBar.Height OLEl.Width = fMainForm.ScaleWidth - Ms.Width OLEl.Height = fMainForm.ScaleHeight - tbToolBar.Height - sbStatusBar.Height Ms.Top = OLEl.Top Ms.Left = OLEl.Width Ms.Height = OLEl.Height End Sub

6.5. bra Az Excel az OLE kontnerben

6.4. Az OLE vidd s dobd (drag and drop) lehet sgei


A Visual Basic vezrl k tbbsgt hozzkapcsolhatjuk az OLE-hez, vidd s dobd" lehet sgeket klcsnzve nekik. A komponensek DragMode jellemz je hatrozza meg, hogy milyen mdon hasznlhatjuk a vidd s dobd" megoldst. A vbAutomatic (1) md esetn a komponens automatikusan az OLE felgyelete al kerl, mg a vbManual (0) esetn ezt a
Drag akci

metdus hvsval rhetjk el, illetve szntethetjk meg az

akci rtkt l fgg en


Akcikonstans vbCancel vbBeginDrag vbEndDrag 0 1 2 Tevkenysg Megsznteti az objektum vonszolst Megindtja az objektum vitelt Ledobja az objektumot

A vezrl k rendelkeznek egy DragOver s egy DragDrop esemnnyel, melyek paramterei informcit tartalmaznak a vezrl felett thzott, illetve a vezrl re dobott objektumrl. Mikzben egy vezrl n tvisznk egy msikat, az utbbi megvltoztathatja az egrkurzort a vonszolt objektum Draglcon tulajdonsgnak megfelel en. Ha ledobjuk a mozgatott komponenst, akkor a cl DragDrop rtestst kap. Ksztsnk egy olyan alkalmazst (DRAGDROP), amely kt listaablakot jelent meg! Mindkt ablakbl a listaelemek a fogd s vidd" megoldssal thelyezhet k a msikba! Szksgnk van kt ikonra annak jellsre, hogy ledobhatjuk-e az objektumot, vagy sem. Ezeket az ikonokat er forrsban troljuk.
#define IDI_ICON2 2 #define IDI_ICON1 1 IDI_ICON1 ICON "Draglpg.ico" IDI_IC0N2 ICON "Trffcl3.ico"

Tervezskor az rlapra kt listaablakot helyeznk, melyek fogd s vidd" tulajdonsgait a form ltrehozsakor lltjuk be:
Private Sub Form_Load() Dim i As Integer ' A vezrl ket gy lltjuk, hogy ki lehessen vlasztani ' elemet List1.DragMode = vbManual List2.DragMode = vbManual

' Az elemek feltltse For i = 1 To 9 Listl.Addltem "Adat" + CStr(i) Next i End Sub

Mindkt listaablak esetn az egrgomb megnyomsra indtjuk a vonszolst, mert gy elemet is tudunk vlasztani. Ha lenyomjuk az egrgombot, akkor elemet vlasztunk s vonszoljuk
Private Sub Listl_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Listl.Drag vbBeginDrag End Sub Private Sub List2_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) List2.Drag vbBeginDrag End Sub

A hzott objektumot az ablakban nem szabad ledobni csak a listkon


Private Sub Form_DragOver(Source As Control, X As Single, _ Y As Single, State As Integer) ' Az ablakban nem szabad ledobni Source.Draglcon = LoadResPicture(2, vbResIcon) End Sub Private Sub Listl_DragOver(Source As Control, X As Single, _ Y As Single, State As Integer) ' A listra r lehet dobni Source.Draglcon = LoadResPicture(1, vbResIcon) End Sub Private Sub List2_Drag0ver(Source As Control, X As Single, _ Y As Single, State As Integer) ' A listra r lehet dobni Source.Draglcon = LoadResPicture(1, vbResIcon) End Sub

Ledobaskor a listkat trendezzk.


Private Sub Listl_DragDrop(Source As Control, X As Single, _ Y As Single) ' a ledobs kezelse Source.Drag vbEndDrag If (Source = List2) And (List2.Listlndex > -1) Then Listl.Addltem List2.List(List2.Listlndex) List2.Removeltem List2.Listlndex End If End Sub

Private Sub List2_DragDrop(Source As Centr l, X As Single, _ Y As Single) ' a ledobs kezelse Source.Drag vbEndDrag If (Source = Listl) And (Listl.Listlndex > -1) Then List2.AddItem Listl.List(Listl.Listlndex) Listl.Removeltem Listl.Listlndex End If End Sub Private Sub Form_DragDrop (Source As Control, x As Single, _ Y As Single) ' a ledobs kezelse Source.Drag vbEndDrag End Sub

6.6. bra A drag and drop m kds

6.5. ActiveX-komponensek
Az ActiveX-komponens kifejezs .EXE, .DLL vagy .OCX kiterjeszts llomnyokban trolt, tbbszr felhasznlhat, futtathat programkdot jell. Az ActiveX-komponensek f jellemz je az a technolgia, amely lehet v teszi, hogy a klnbz eszkzkkel kszlt szoftverelemeket alkalmazsunkban egytt hasznljuk. 6.5.1. Az OLE-, az ActiveX- s a COM-technolgia alapjai Az OLE az elmlt vek sorn folyamatosan talakult. A csatolt dokumentumok kezelse mellett egyre fontosabb szerepet kapott az a megolds, amely biztostja az aktv programelemek, vezrl k felhasznlst, mg az Interneten keresztl is - ezt a szoftvertechnolgiai megoldst a Microsoft cg szhasznlatval ActiveX-nek nevezzk. 6.5.1.1. Alapfogalmak Napjainkban az OLE elnevezs egy olyan technolgit takar, amely lehet v teszi, hogy kt klnll alkalmazsmodul egy specilisan kialaktott kapcsoldsi felleten keresztl kommunikljon egymssal. A kt alkalmazs a kommunikci szempontjbl egyenrtk , azonban azt az alkalmazst, amelyik megteremti a kommunikci alapfeltteleit kiszolglnak {server) nevezzk, a msikat pedig gyflnek (client). A kiszolgl ltal felptett kapcsoldsi fellet egy vagy tbb kapcsolati {interface) objektumbl ll, melyeken keresztl az gyfl alkalmazsokbl elrhetjk a kiszolgl lehet sgeit. A COM {Component Object Model) definilja a kapcsoldsi fellet kialaktsnak s elrsnek szablyait mdjait. Az ActiveX az OLE'-automatizmus olyan tovbbfejlesztsnek tekinthet , amelyben a kialaktott szoftverkomponensek esemnyekr l is rtestik az gyfelet, gy aszinkron kapcsolat pthet a kiszolgl s a kliens kztt, valamint a vezrl k a programokba mr a fejleszts sorn bepthet k, s az Internet bngsz ben is megjelenthet k. 6.5.1.2. A komponensek tpusai A komponenseket (sszetev ket, pt elemeket) a felhasznlk (gyfelek) szempontjbl kt nagy csoportra oszthatjuk: Programon bellinek {in-process) nevezzk azokat a komponenseket, amelyek az gyfl programszljban m kdnek. Ilyenek a DLL- s az OCX-komponensek. A programon belli komponensekkel knnyebb, gyorsabb a kapcso lattarts, hasznlatuk azonban kizrlagos. Az nll {out-of-process) programban m kd komponensek EXE-llomnyban tallhatk, ezekkel nehezebb a kapcsolat kialaktsa, azonban akr tbb program is hasznlhatja ket.

A felhasznls mdja szerint hrom csoportra oszthatjuk a komponenseket: Programon belli (ActiveX DLL), vagy kvli (ActiveX EXE) kiszolglprog ramok az aktv kdkomponensek, melyek kapcsoldsi fellett a kliens prog ram hasznlja. A programba pthet felhasznli komponensek az aktv vezrl k (ActiveXvezrl k - OCX), amelyeket egy jl definilt kapcsoldsi felleten keresztl rnk el. A aktv vezrl ket a UserControl objektumra ptve hromflekp pen alakthatjuk ki: kszthetnk vezrl t gy, hogy a kapcsoldsi felletr l s a megjelen tsr l egyarnt magunk gondoskodunk, tovbbfejleszthetjk egy meglv vezrl megjelenst s kapcsolatait, tbb meglv vezrl b l j vezrl t hozhatunk ltre. Specilis programon belli (ActiveX Document DLL) vagy programon kvli (ActiveX Document.EXE) kiszolglprogramok az aktv dokumentumok, melyeket az Internet Bngsz mint trol hasznl l " informcik megjelentsre. A komponensek osztlyokat (Class) definilnak, melyeket hasznlva objektumpldnyokat kszthetnk (ltalban ezt az gyfl teszi). Az objektumok tulajdonsgai s metdusai szolglnak az adatok forgalmazsra, azonban az esemnyek kezelsr l is gondoskodhatunk. A kiszolgl projektjben az osztlyokat ClassModule-ok tartalmazzk (egy modul - egy osztly). Az osztlymodulok osztlyaiban definiljuk azokat a metdusokat, tulajdonsgokat s esemnyeket, amellyel a kapcsolati objektumot fel szeretnnk ruhzni. 6.5.1.3. Tulajdonsgok, metdusok s esemnyek Minden osztly alapvet en kt esemnnyel rendelkezik. Az egyik kzvetlenl az objektumpldny ltrehozsa utn (Initialize), a msik pedig a pldny trlse el tt (Terminate) jelentkezik. Termszetesen magunk is definilhatunk metdusokat, tulajdonsgokat s esemnyeket az osztlyokban. A defincikat sajt kzzel is berhatjuk a modulba, de hasznlhatjuk a Tools men Add Procedure menpontja kivlasztsakor megjelen prbeszdablak lehet sgeit is (6.7. bra).

6.7. bra Az AddProcedure prbeszdablak

Knyelmes felletet nyjt az osztly megtervezshez a Visual Basic Class Builder kiegsztse, amit a ProjectlAdd Class Module menpont kivlasztsakor megjelen prbeszdablakbl a VB Class Buildert elem kijellsvel indthatunk el:

6.8. bra A ClassBuilder prbeszdablak

Az elksztett osztlyokat a projekt ms moduljaibl azonnal felhasznlhatjuk. ActiveX-projekt esetn a definilt osztly csak regisztrci utn rhet el. Az alkalmazsok a regisztrlt osztlyra hivatkozva ltrehozhatjk sajt objektumpldnyaikat megteremtve ezzel a kapcsolatot az ActiveX-komponenssel. 6.5.1.4. Szrmaztatsi lehet sgek Az AktiveX-vezrl k Boolean tpus Public tulajdonsga azt szablyozza, hogy megoszthat-e a komponens ms alkalmazsokkal.

A kiszolgl programban azAcriveX-komponensek osztlymoduljnak Instancing jellemz je hatrozza meg, hogy milyen lehet sgeink vannak a pldnyok ltrehozsakor.
Tulajdonsgrtk Private PublicNotCreatable Sing le Use Jelents Ms alkalmazsok nem jogosultak pldnyt ltrehozni. Ms alkalmazsok csak akkor hasznlhatjk az osztlyt, ha a komponens hozza ltre az objektumot. Az gyfl szrmaztathat objektumokat. Minden szrmaztatott objektum j pldnyt indtja el a programnak (DLL esetn nem hasznlhat) A SingleUse lehet sgen tlmen en a tulajdonsgok s a metdusok gy hasznlhatk, mint a kznsges globlis alprogramok. Az gyfl szrmaztathat objektumokat. A komponens egyetlen pldnya tbb objektum szrmaztatsra hasznlhat. A MultiUse lehet sgen tlmen en a tulajdonsgok s a metdusok gy hasznlhatk, mint a kznsges globlis alprogramok. (Az objektum pldnya automatikusan ltrejn.)

GlobalSingie Use MultiUse GlobalMultiUse

Az albbi tblzatban sszefoglaltuk a hasznlhat tulajdonsgrtkeket a klnbz tpus projektek esetn.


Tulajdonsgrtk Private PublicNotCreatable Sing le Use GlobalSingleUse Multi Use GlobalMultiUseX ActiveX Exe X X X X X X ActiveX DLL X X ActiveX Contol X X Standard EXE X

X X

Az osztly, mint adattpus felhasznlsval magunknak kell ltrehozni a kapcsolati objektum pldnyt. A kapcsolat kiptshez szksges objektum ktflekppen is megszlethet. Dnthetnk gy, hogy a pldnyt korai ktssel (early binding) hozzuk ltre. Ez azt jelenti, hogy a ktst a fordts kzben alaktjuk ki:
Dim objNew As New SzerverProj.Class 1 Hivatkozs az objektumra objNew.Metdus Set objNew = Nothing 'Megszntets

A msik lehet sg, amikor a futs kzben teremtjk meg a kapcsolatot, ez a ks i kts (late binding):

Dim objNew As Object Set objNew = CreateObject("SzerverProj.Class") 'Hivatkozs az objektumra objNew.Metdus Set objNew = Nothing 'Megszntets

A komponensekre val hivatkozsok megsz nsvel a Windows rendszer automatikusan trli a komponens kdjt a memribl. 6.5.1.5. A kapcsoldsi fellet (interface),s a regisztrci Az gyfl a ltrehozott objektummal a kapcsoldsi (kapcsolati) felleten (interface) keresztl tartja a kapcsolatot. A kapcsoldsi fellet nem ms, mint tulajdonsgok, metdusok s esemnyek halmaza. Minden osztlynak van egy alaprtelmezs szerinti kapcsoldsi fellete, amely az sszes tulajdonsgot s metdust tartalmazza. Azok az osztlyok, amelyb l szrmaztatott objektumok esemnyeket is kldenek, esemnykld kapcsoldsi fellettel is rendelkeznek. A kapcsoldsi felletek tdefinilhatok, mdosthatk, azonban az tlagos felhasznl ritkn l ezekkel a lehet sgekkel. (A kapcsolati felleteket lerst n. tpusknyvtrak tartalmazzk.) Az ActiveX-komponensek hasznlatt a 32-bites Windows opercis rendszerek a regisztrcis adatbzis segtsgvel tmogatjk. Minden egyes felhasznlhat osztlynak s kapcsolati felletnek egyedi azonostval elltott bejegyzse van az adatbzisban. Ezt a 128-bites azonostt GUID-nek (Global Unique Identifier - globlis egyedi azonostnak) hvjuk. A programon kvli ActiveX-komponenseket tartalmaz EXE-programok els indtskor elksztik s bejegyzik a regisztrcis adatbzisba a kapcsolati objektumok adatait. Ha trlni szeretnnk a regisztrcis bejegyzst, akkor a kiszolglprogramot parancssorbl az /unregserver kapcsolval kell elindtanunk. A programon belli ActiveX-komponenseket szintn regisztrlni kell. A DLL-komponenseket a RegSvr32, az OCX-komponenseket pedig a RegOcx32 programmal regisztrlhatjuk, illetve trlhetjk a regisztrci bejegyzst:
Regisztrls: Trls: REGSVR32nv.DLL REGSVR32 /u nv. DLL REGOCX32 nv.OCX REGOCX32 /u nv. OCX

A fenti segdprogramok megtallhatk a telept CD-n.

6.5.2. nll kdkomponensek - az OLE-automatizmus Kdkomponensnek nevezzk azokat az pt elemeket, amelyeknek nincs megjelen grafikus felletk. A kdkomponensek olyan objektumknyvtrak, melyek osztlyaibl objektumokat hozhatunk ltre. A ltrehozott objektumok tulajdonsgait, metdusait s esemnyeit hasznljuk az gyflalkalmazsokbl. Pldaknt ksztsnk kdkomponens hasznlatra alapozott gyfl-kiszolgl programprost, melynek kiszolglja az gyfl ltal meghatrozott kt szm sszeadsra biztost egy metdust! A feladat kirsnak megfelel gyfelet KLIENSP.VBP, a kiszolglt pedig a SUMMAP.VBP projekt tartalmazza a CD mellklet az AXEXE alknyvtrban. Nzzk a feladat megoldsnak lpseit! Ksztsk el el szr a kiszolgl programot! Nyissunk meg egy ActiveX EXE tpus alkalmazst s a Summa osztlymodulban (SUMMA.CLS) definiljuk az sszead fggvnyt!
Public Function Meg(a As Integer, b As Integer) As Integer ' Az sszead fggvny Meg = a + b End Function.

lltsuk az osztly Instancing tulajdonsgt '5 -MultiUse' rtk re! Mg az sem szksges, hogy a kiszolglprogramnak ablaka legyen. A lefordtott programot elindtva megtrtnik a regisztrci. Ha a kiszolgl nincs regisztrlva (a regisztrci parancssorbl a SummaP /unregserver paranccsal trlhet ), akkor az gyflprogram hibajelzst ad: "ActiveX component can't create object". Ksztsk el az gyflprogramot! El szr modulszinten deklarlnunk kell egy objektumvltozt a kapcsolati objektum egy pldnyhoz.
1

A kapcsolati objektum pldnya Dim objNew As Object

A form tltsekor ltrehozzuk az objektumpldnyt:


Private Sub Form_Load() 1 Az objektumpldny ltrehozsa ks i ktssel Set objNew = CreateObject("SummaP.Summa") End Sub

Az adatokat, a korbban ismertetett pldkhoz hasonlan, TextBox vezrl kben troljuk (A, B), melyekhez UpDown vezrl ket csatlakoztattunk (AUD, BUD). Az A s B szvegmez k brmelyiknek megvltozsakor meghvjuk a kapcsolati objektum sszead fggvnymetdust, s az eredmnyt a C szvegmez be helyezzk:

Private Sub A_Change() ' Csak egsz szmokat kezelnk On Error Resume Next ' Vltozskor a kiszolgl fggvnye adja ssze az adatokat C.Text = CStr(objNew.Meg(Cint(A.Text), Cint(B.Text))) End Sub Private Sub B_Change() 1 Csak egsz szmokat kezelnk On Error Resume Next ' Vltozskor a kiszolgl fggvnye adja ssze az adatokat C.Text = CStr(objNew.Meg(Cint(A.Text), Cint(B.Text))) End Sub

Amikor kilpnk a programbl, megszntetjk az objektumpldnyt:


Private Sub Form_Unload(Cancel As Integer) ' Az objektumpldny trlse Set objNew = Nothing End Sub

6.9. bra Kdkomponenst hasznl kliens

Az gyflprogramot tbbszr elindtva tapasztalni fogjuk, hogy egyetlen SummaP kiszolgl tbb gyfelet is kiszolgl (az Instancing=MultiUse bellts kvetkeztben). Megfigyelhetjk, hogy a kiszolgl futsa automatikusan megszakad, amikor az utols gyfelet is bezrtuk. 6.5.2.1. OLE-automatizmus a Microsoft alkalmazsokban A Microsoft alkalmazi programok szintn tartalmaznak OLE-automatizmus kapcsolati objektumokat, amelyeknek egy-egy pldnyt magunk is ltrehozhatjuk programunkban. Ezen objektumpldnyokon keresztl elrhetnk Word-dokumentumokat, Excel-tblkat stb. Amikor a Microsoft alkalmazsok OLE-automatizmust hasznljuk, akkor dnthetnk arrl, hogy a Visual Basic for Application lehet sgeit alkalmazzuk-e az alkalmazsok programozsra, vagy a hagyomnyos makrnyelvet. Ez utbbi megoldsnak el nye, hogy rgebbi (Word, Excel) verzik esetn is m kdik a programunk.

Pldaknt egy olyan alkalmazst mutatunk be, amely a Word segtsgvel elkszt egy Dokumentumot, majd llomnyban trolja, s kinyomtatja azt, tovbb az Excel lehet sgeit hasznlva tanulmnyi tlagot szmol az egyes tantrgyak jegyeib l. (A megoldst tartalmaz WordExc.vbp projektet a WEX knyvtrban tallhatjuk meg. Az alkalmazs f ablakban (F form) ngy nyomgombot helyeztnk el: cmdWord, cmdWordVBA, cmdExcel s cmdKilps. A cmdKilps gombbal kilphetnk az alkalmazsbl:
Private Sub cmdKilps_Click() Unload Me End Sub

A F form ablakban a cmdWord parancsgomb megnyomsakor elksztjk a Word alkalmazs WordBasic OLE-automatizmus objektumnak egy pldnyt (objWord). Ennek segtsgvel hasznlhatjuk a FileNew WordBasic parancsot egy j llomny ltrehozsra, s a Bold s Italic parancsokat a bet tpus belltsra. Az Insert paranccsal szrhatunk be szveget a dokumentumba, a FilePrint paranccsal nyomtatunk, a FileSaveAs paranccsal pedig llomnyba mentnk, mg a FileClose paranccsal lezrjuk a dokumentumot. A hasznlat vgn ne felejtsk el felszabadtani az objektumot! (rdemes megjegyezni, hogy ha a program a nyomtatssal valamilyen okbl tl sokat bbel dik", akkor a ments elmarad.)

6.10. bra A Word s az Excel hasznlata OLE-automatizmussal

Private Sub cmdWord_Click() ' A WordBasic hasznlata Dim crlf As String crlf = Chr(13) & Chr(lO) Dim objWord As Object Set objWord = CreateObject("Word.Basic") objWord.FileNewDefault objWord.Bold objWord.Insert "ComputerBooks:" & crlf & crlf objWord.Bold objWord.Italic objWord.Insert "Programozzunk" & crlf objWord.Italic objWord.Insert "Visual Basic 6.0 rendszerben!" & crlf objWord.FilePrint objWord.FileSaveAs "VB6Konyv.DOC" objWord.FileClose Set objWord = Nothing End Sub

Ugyanezt a m veletsort a WordBasic hasznlata helyett a Visual Basic for Application segtsgvel is megvalsthatjuk. A klnbsg a kt megolds kztt az, hogy mg az el bbi mintegy 900 parancsot tartalmaz rendezetlenl, addig a VBA objektumok hierarchijra pl, mely objektumok metdusok s tulajdonsgok formjban tartalmazzk a Word programozsi lehet sgeit.
Private Sub cmdWordVBA_Click() ' A Visual Basic for Word hasznlata Dim crlf As String crlf = Chr(13) & Chr(lO) Dim objWord As Object Set objWord = CreateObject("Word.Application") objWord.Documents.Add objWord.Selection.Font.Bold = True objWord.Selection.InsertAfter Text:= _ "ComputerBooks:" & crlf & crlf objWord.Selection.Font.Bold = True objWord.Selection.Font.Italic = True objWord.Selection.InsertAfter Text:= __ "Programozzunk" & crlf objWord.Selection.Font.Bold = False objWord.Selection.Font.Italic = True objWord.Selection.InsertAfter Text:= _ "Visual Basic 6.0 rendszerben!" & crlf objWord.ActiveDocument.PrintOut objWord.ActiveDocument.SaveAs App.Path + "WB6Konyv.DOC" Set objWord = Nothing End Sub

6.7/. bra Az OLE automatizmussal ltrehozott Word dokumentum

A jegyek tlagnak szmtsra ksztsnk egy nll prbeszdablakot (ExcelFrm), amit a cmdExcel parancsgomb megnyomsakor jelentnk meg:
Private Sub cmdExcel_Click() ExcelFrm.Show Knd Sub

Az objektumpldnyt az Excel.frm llomnyban modulszinten deklarljuk:


Dim objExcel As Object

A txtOsztlyzat tmb elemei tartalmazzk az egyes tantrgyak osztlyzatait, melyeket az ablak tltsekor vletlenszer en belltunk:
Private Sub Form_Load() Dim i As Integer 1 Az osztlyzatok vletlenszer el lltsa Randomize For i = 0 To 7 txtOsztlyzat(i).Text = CStr(Int((4 * Rnd) + 2 ) ) Next End Sub

Az aktv cmdSzmts parancsgomb megnyomsval egy Excel munkalapot (Sheet) aktivizlunk. Lthatv tesszk az Excel ablakot (Application.Visible), feltltjk a cellkat (Application.Cells), megadjuk a cellk formtumt, vgl az tlagszmtshoz az Average fggvnyt hasznljuk. Ezek utn kilphetnk, illetve menthetjk a tblt.
Private Sub cmdSzmts_Click () ' Excel munkafzet Set objExcel = CreateObject("Excel.Sheet") ' Az Excelt lthatv tesszk objExcel.Application.Visible = True

With objExcel .Application.cells(1, 1).ColumnWidth = 2 * _ .Application.cells(1, 2).ColumnWidth 'Az alkatrsznevek feltltse For i = 1 To 8 .Application.cells(i, l).Value = lblTantrgy(i).Caption Next Application.cells(10, 1).Value = lbltlag.Caption Application.cells(10, l).Font.Bold = True Application.cells(9, 2).Value = " --------------- " 'Az rtkek feltltse For i = 1 To 8 .Application.cells(i, 2).Value = txtOsztlyzat(i - l).Text Next ' A szmtshoz hasznlt kplet megadsa .Application.cells(10, 2).Formula = "=Average(Bl:B8)" .Application.cells(10, 2).Font.Bold = True .Application.cells(10, 2).Font.Italic = True 1 A szmts eredmnye lblsszesen = .Application.cells(10, 2).Value 1 Az Excelt lthatatlann tesszk .Application.Visible = False End With ExcelFrm.Show cmdSzmts.Enabled = False cmdKilps.Enabled = True cmdMents.Enabled = True End Sub

612. bra tlagszmts OLE automatizmussal ltrehozott Excel-tblval

Az elkszlt munkafzet tartalmt a SaveAs Excel-paranccsal fjlba menthetjk:


Private Sub cmdMents_Click() 1 az j munkafzet fjlba mentse objExcel.SaveAs "Szmitgp.XLS" End Sub

6.13. bra Az tlagszmt Excel tbla

Kilpskor le kell zrni az Excel-t, meg kell szntetni a kapcsolati objektum pldnyt, le kell venni a prbeszdablakot, s aktivizlni kell a f ablakot.
Private Sub cmdKilps_Click() ' az Excel lezrsa objExcel.Application.Quit ' az objektum megszntetse Set objExcel = Nothing 1 az ablak megszntetse Unload Me F Form.Show End Sub

6.5.3. Programon belli ActiveX-kdkomponensek A kdkomponenst gy is elkszthetjk, hogy az sszeadst a tulajdonsgainak vltozsakor automatikusan elvgezze, majd rtestse az gyflprogramot az eredmny megvltozsrl.

Ksztsnk kdkomponens hasznlatra alapozott gyfl-kiszolgl programprost, melynek kiszolglja DLL-knt bepl az gyflbe! A kiszolgl az gyfl ltal megadott kt szmot sszeadja s rtesti az gyfelet az eredmnyr l. Az alkalmazs megoldsa sorn az "ActiveX DLL" projektet a PRJOSSZE.VBP llomnyban, a tesztel "Standard EXE" projektet pedig a PRJPROBA.VBP fjlban troljuk, mg a kt projektb l ll csoport lerst a OSSZE.VBG llomny tartalmazza. A projektekhez tartoz fjlokat az AxDLL knyvtr tartalmazza. A PRJPROBA alkalmazs futs kzbeni ablaka:

6.14. bra Az sszead DLL kiszolgl tesztje

Ksztsk el el szr az sszead osztlyt! Ehhez ltre kell hoznunk egy j "ActiveX DLL" projektet, melynek CMOSSZE.CLS llomnyban trolt osztly neve cmsszead. Az osztly hrom tulajdonsggal rendelkezik a_rtk, b_rtk s c_rtk, melyekhez sorra az ma_rtk, mb_rtk s mc_rtk private vltozkat rendeljk. Az a_rtk s b_rtk rhat-olvashat tulajdonsgok, gy meg kell rnunk az rtkadst {let) s a lekrdezst (get) vgz alprogramokat. Ezt egyszer begpelssel is megtehetjk, azonban gyorsabban clhoz rnk, ha a Tools / Add Procedure" menpont kivlasztsakor megjelen ADD Pocedure" prbeszdablak lehet sgeit

6.15. bra Tulajdonsgkezel megadsa az AddProcedure prbeszdablakkal

hasznljuk.

A tulajdonsg nevnek megadsa s a Property vlasztgomb bejellse utn lezrva az ablakot, az osztlymodulba bekerl a Let s a Get alprogramok vza. Az osztly ezen alprogramjai hvdnak meg amikor az objektumpldny megadott tulajdonsgnak rtkt belltjuk, illetve amikor lekrdezzk. A c_rtk tulajdonsgnak nem akarunk kvlr l rtket adni, ezrt elg a Get alprogramot definilni. Szeretnnk, ha az sszeadandk vltozsval az sszeads automatikusan megtrtnne, ezrt egy esemnyt is definilunk, melyet a tulajdonsgrtkek vltozsakor aktivizlunk (RaiseEvent). Az esemny kezelst az gyflprogram vgzi.
' Private vltozk a tulajdonsg trolsra Private ma_rtk, mb_rtk, mc_rtk As Integer ' Az esemny deklarcija Public Event cChange()
1

Az a_rtk tulajdonsg lekrdezse Public Property Get a_rtk() As Variant a_rtk = ma_rtk End Property
1 Az a_rtk tulajdonsg belltsa Public Property Let a_rtk(ByVal vNewValue As Variant) ma_rtk = vNewValue mc_rtk = ma_rtk + mb_rtk ' A c_rtk vltozott esemny hvsa RaiseEvent cChange End Property ' A b_rtk tulajdonsg lekrdezse Public Property Get b_rtk() As Variant b_rtk = mb_rtk End Property

' A b_rtk tulajdonsg belltsa Public Property Let b_rtk(ByVal vNewValue As Variant) mb_rtk = vNewValue mc_rtk = ma_rtk + mb_rtk ' A c__rtk vltozott esemny RaiseEvent cChange End Property A c_rtk tulajdonsg lekrdezse Public Property Get c_rtk() As Variant c_rtk = mc_rtk End Property
1

(Felhvjuk a figyelmet arra, hogy nem vltoztattuk meg a programban az Add Procedure funkci ltal felknlt Variant tpusokat, pedig megtehettk volna, hisz egsz szmokkal dolgozunk.) Ezzel be is fejeztk az ActiveX DLL ltrehozst - miel tt azonban tovbblpnnk rdemes tesztelni a komponens m kdst. Ksztsk el a AxtiveX DLL komponens tesztprogramjt! Az aktv pt elemek tesztelsre j lehet sget knl a Visual Basic 6 rendszer az n. projektcsoport kialaktsval. A csoport egyik tagja a komponens projektje, a msik tagja pedig a tesztel "Standard EXE" projekt. A File\Add Project menpont segtsgvel adjuk a "Standard EXE" tpus tesztel projektet {prjProbaOsszead - PRJPROBA.VBP) az "ActiveX DLL" projekthez (prjsszead - PRJOSSZE.VBP). Az gy kialaktott projektcsoportot a File\Save Project Group As menpont felhasznlsval menthetjk lemezre (OSSZE.VBG). A Project Explorer ablak prjProbaOsszead elemn kattintva a jobb egrgombbal felbukkan egy menben, melynek segtsgvel bellthatjuk, hogy a kijellt a projekttel induljon a programcsoport (Set as StartUp). Ha kivlasztjuk a Projec/References menpontot, akkor lthatjuk, hogy a prjsszead hivatkozs is szerepel a projektben.

6.76. bra A projekthivatkozsok ablaka

Ha a kdablakban megnyomjuk az <F2> billenty t, vagy kivlasztjuk a View men Object Browser menpontjt, akkor a cmsszead osztly tulajdonsgait s esemnyeit (interface) tanulmnyozhatjuk az objektumbngsz ben:

6.77. bra Az sszead osztly elemei

Az elkszlt tesztprogram hasonl a mr bemutatott gyflalkalmazsokhoz. Most azonban az sszead komponens pldnyra hivatkoz vltozt a WithEvents kulcsszval kell deklarlni, mivel esemnye is van.
' A cmsszead-nak esemnye is van!!! Private WithEvents instsszead As cmsszead

A Form_Load esemnykezel eljrsban belltjuk az adatbevitel s a megjelents kezdeti rtkeit, s ltrehozzuk az objektumpldnyt:
Private Sub Form_Load() 1 A pldny ltrehozsa Set instsszead = New cmsszead ' A konverzis hiba kezels On Error Resume Next 1 Kezdeti belltsok instsszead.a_rtk = Cint(Textl.Text) instsszead.b_rtk = Cint(Text2.Text) 1 A lptet belltsa UpDownl.Value = Cint(Textl.Text) UpDown2.Value = Cint(Text2.Text) End Sub

A form megsz nsekor a hivatkozst is megszntetjk:


Private Sub Form_Unload(Cancel As Integer) 1 A pldny megszntetse Set instsszead = Nothing End Sub

A cChange esemny jelzi, hogy megvltozott a c_rtk tulajdonsgban trolt sszeg:


Private Sub instsszead_cChange() 1 A cChange esemny kezel je Text3.Text = CStr(instsszead.c_rtk) End Sub

Ha az sszeadandok vltoznak a cmsszead komponens pldnynak tulajdonsgai is megvltoznak:


Private Sub Textl_Change() ' Konverzis hiba kezels On Error Resume Next ' Tulajdonsg belltsa instsszead.a_rtk = Cint(Textl.Text) ' A lptet belltsa UpDownl.Value = Cint(Textl.Text) End Sub Private Sub Text2_Change() ' Konverzis hiba kezels On Error Resume Next 1 Tulajdonsg belltsa instsszead.b_rtk = Cint(Text2.Text) ' A lptet belltsa UpDown2.Value = Cint(Text2.Text) End Sub

A lptet vezrl ket sszehangoljuk a szvegmez kkel:


Private Sub UpDownl_Change() ' A lptet esemny Textl.Text = CStr(UpDownl.Value) End Sub Private Sub UpDown2_Change() 1 A lptet esemny Text2.Text = CStr(UpDown2.Value) End Sub

Ezek utn kln elkszthetjk (File\Make...) az aktv knyvtrmodult (PRJOSSZE.DLL), amit a lefordtott tesztprogrambl (PRJPROBA.EXE) hasznlunk. A Visual Basic rendszer automatikusan regisztrlja a ltrehozott komponenst, azonban ezt magunk is megtehetjk a RegSvr32 program segtsgvel.

6.5.4. ActiveX-vezrl k ksztse Ksztsnk el szr egy olyan ActiveX-vezrl t, melynek megjelensr l - kerek nyomgombot jelent meg felirattal - s kapcsoldsi felleteir l teljes egszben magunk gondoskodunk! Legyen a gombnak Caption tulajdonsga s Click esemnye! A megoldsban szerepl projekteket a CD mellkleten az AXGOMB knyvtr tartalmazza. Az aktv vezrl projektje a GOMB.VBP, a tesztel alkalmazs projektje TESZTP.VBP, a projektcsoport lerja pedig a GOMBT.VBG. El szr ksztsnk egy j "ActiveX Control" tpus projektet! Nevezzk t a projektet Gombp-re, s troljuk a GOMB.VBP llomnyban. Az ActiveX-komponensek a felhasznl ltal ksztett vezrl ket tartalmaznak (UserControls). A UserControl objektum a felhasznli vezrl k alappldnya olyan tulajdonsgokkal, esemnyekkel s metdusokkal, amelyeket megvltoztathatunk, illetve kiegszthetnk. A projekt megnyitskor egyetlen ilyen tallhat a projektben UserControll nven, amit ha trolunk, a USERCONTROL 1 .CTL llomnyba kerl. Nevezzk t a vezrl nket Gomb-ra s troljuk a GOMB.CTL llomnyban! A vezrl nek a formhoz hasonlan rlapja van, amelyen a programokhoz hasonlan tervezhetjk meg a vezrl fellett s m kdst. A vezrl , hasonlan az eddig megismert komponensekhez, a kapcsoldsi felleten (interface) keresztl tartja a kapcsolatot az gyflprogrammal. A vezrl m kdsnek tesztelsre egy tesztp projektet is ksztnk, amelyet a vezrl projekttel kzs csoportban trolunk. A szksges lpseket az el z rszben ismertetett mdon vgezzk el. Amikor az egyik projektben tervezett vezrl t egy msik (tesztel ) projekt fejlesztsekor hasznlni szeretnnk, a fejleszt i krnyezetben futnia kell az ppen tervezs alatt ll vezrl egy pldnynak. A Visual Basic olyan mdon hidalja t ezt a ltszlagos ellentmondst, hogy a vezrl automatikusan aktvv vlik a fejleszt i krnyezetben, ha lezrjuk az rlapjt tartalmaz ablakot. Ezt kvet en gy hasznlhatjuk a fejleszts alatt ll vezrl t, mint minden ms regisztrlt ActiveX-vezrl t. Ha a fejleszts alatt ll vezrl rlapjt tartalmaz ablak nyitva van, akkor a vezrl nem fut, gy a megjelentsi informcik sem llnak a rendszer rendelkezsre (a vezrl terlete vonalkzottan jelenik meg 6.18 bra). A vezrl elksztshez el szr vlasszuk ki a Gomb bejegyzst a projektlapon. lltsuk be a vezrl alaprtelmezs szerinti mreteit (Height, Width) egyarnt 615 twipre (ez lesz a gomb alap mrete). A ToolBoxBitmap tulajdonsg hatrozza meg, hogy a vezrl nk milyen mdon jelenik meg az eszkztron (esetnkben a GOMB.BMP llomnyban trolt, kerek gombot szimbolizl bitkp adja a vezrl ikonjt).

6.18. bra A vezrl tervezs alatt

Az gyflprogramban mskppen kell megjelenteni a kerek gombot lenyomott, illetve felengedett llapotban - az llapot jellemzsre a lenyomott vltozt hasznljuk. A Caption tulajdonsg rtknek trolsra az stCaption sztring szolgl. A szgszmtsokhoz szksgnk van a pi konstansra. A gomb lenyomst a felhasznl fel a Click esemnnyel jelezzk.
Private Const pi As Single = 3.1415 Private stCaption As String Private lenyomott As Boolean Public Event Click()

A Caption tulajdonsg rsra s olvassra szolgl alprogramok:


' A Caption tulajdonsg olvassa Public Property Get Caption() As String Caption = stCaption End Property ' A Caption tulajdonsg- belltsa Public Property Let Caption(ByVal vNewValue As String) stCaption = vNewValue End Property

Amikor egy ActiveX vezrl t az alkalmazsunk fejlesztsekor hasznlunk, akkor a vezrl egy pldnya birtokolja a tulajdonsgokat. Amikor azonban elindtjuk a programot, akkor a fejleszt i ablak zrsval a fejlesztshez hasznlt pldny megsz nik ltezni, s egy j pldny jn ltre. Gondoskodnunk kell a fejleszts sorn belltott tulajdonsgok tvitelr l a futs alatt ltez objektumnak. Erre a clra tulajdonsgtska (PropertyBag) objektum hasznlhat, amely a tulajdonsgrtkeket trolja. Segtsgvel a felhasznli vezrl k tulajdonsgainak rtke a memribl llomnyba rhat, illetve onnan visszaolvashat (a felhasznli vezrl k esetn .CTL s a .CTX fjlok).

A tulajdonsgtska a ReadProperties s a WriteProperties esemnyeken keresztl rhet el. A WriteProperties esemny az objektumpldny megsz nsekor aktivizldik, mg a ReadProperties esemny a pldny ltrejttekor. A PropertyBag objektum ReadProperty s WriteProperty metdusait hasznlhatjuk a megnevezett tulajdonsg trolsra s kiolvassra:
' A felirat kiolvassa a trolt jellemz k kzl Private Sub UserControl_ReadProperties(PropBag As PropertyBag) stCaption = PropBag.ReadProperty("Caption") End Sub ' A felirat bersa a trolt jellemz k kz Private Sub UserControl_WriteProperties(PropBag As PropertyBag) PropBag.WriteProperty "Caption", stCaption End Sub

A feladat megoldsa sorn azt szeretnnk elrni, hogy a vezrl egy kerek gomb legyen. Amikor tervezs kzben tmretezzk a vezrl t, vagy ha futs kzben mdostjuk a mreteit, a gomb tmr jt az aktulis Height s Width jellemz k kzl a kisebb hatrozza meg. Kt rtk kzl a kisebbet a MinF bels fggvny adja meg:
Private Function MinF(a As Single, b As Single) As Single 1 Kt vals szm kzl a kisebb a visszatrsi rtk If a < b Then MinF = a Else MinF = b End If End Function

Az objektumpldnyok (vezrl pldnyok) ltrejttt az Initialize esemny jelzi. Az esemny kezel jben bellthatjuk a rajzolshoz szksges alapadatokat:
Private Sub UserControl_Initialize() 1 A lekpezsi md belltsa rajzolshoz ScaleMode = vbPixels ' A felirat szne ForeColor = vbButtonText ' A kifestes szne FillColor = vbButtonFace 1 A gomb mg nincs lenyomva lenyomott = False End Sub

Az Initialize esemny minden egyes j a vezrl pldny ltrehozsakor aktivizldik. Az InitProperties esemny azonban csak akkor, amikor a vezrl t a formra tesszk. Az utbbi esetben az Extender objektumot hasznlhatjuk arra, hogy az objektumpldny nem igazn a pldnyhoz kttt tulajdonsgaihoz (pldul Name, Top, Left stb.) hozzfrjnk:

Private Sub UserControl_InitProperties() 1 A cm alaprtke a vezrl neve stCaption = Extender.Name End Sub

A fenti belltsnak ksznhet en a Gomb tpus objektum minden egyes pldnynak felirata megegyezik a vezrl nevvel Gombi, Gombi stb. A UserControl megjelentsr l a formokhoz hasonlan {Autoredraw = False esetn) a Paint esemnyben gondoskodhatunk. A gomb rajzt kifestett krrel s vekkel lltjuk el , azonban az rnykolst is meg kell oldanunk a gomb lenyomsakor.
Private Sub UserControl_Paint() Dim ex As Single, cy As Single, r As Single, lx As Single, _ ly As Single 1 A gomb kzppontjnak koordinti ex = ScaleWidth \ 2 cy = ScaleHeight \ 2 1 A gomb sugara r = MinF(cx, cy) 1 A gombfelirat koordinti lx = TextWidth(stCaption) \ 2 ly = TextHeight(stCaption) \ 2 1 A krvonal Circle (ex, cy), r if lenyomott Then 1 A gomb kirajzolsa lenyomott llapotban Circle (ex, cy), r - 1, vb3DShadow Circle (ex, cy), r - 2, vb3DShadow, pi / 2, 5 * pi / 4 CurrentX = ex - lx + 1 CurrentY = cy - ly + 1 Print stCaption Else ' A gomb kirajzolsa felengedett llapotban Circle (ex, cy), r - 1, vb3DHighlight, pi / 4, pi Circle (ex, cy), r 2, vb3DHighlight, pi / 2, 5 * pi / 4 Circle (ex, cy), r 1, vbButtonShadow, 0, pi / 4 Circle (ex, cy), r - 1, vbButtonShadow, 5 * pi / 4, 2 * pi Circle (ex, cy), r + 1, vbButtonShadow, 0, pi / 4 Circle (ex, cy), r + 1, vbButtonShadow, 5 * pi / 4, 2 * pi CurrentX = ex - lx CurrentY = cy - ly Print stCaption End If End Sub

Ahhoz, hogy a gomb zenjen a megnyomsakor, tudnunk kell, hogy mikor kattint a felhasznl a kr belsejben az egr bal oldali gombjval:

Private Sub UserControl_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Dim ex As Single, cy As Single, r As Single ' Gombnyoms figyelse a MouseDown esemnyben If Button = vbLeftButton Then 1 Ha a bal egrgombbal a kerek gombon kattintunk, ' akkor lenyomott ex = ScaleWidth \ 2 cy = ScaleHeight \ 2 r = MinF(cx, cy) tav = 0 On Error Resume Next ' A gykvons veszlyes tav = Sqr((X - ex) * (X - ex) + (Y - cy) * (Y - cy)) If tav < r Then lenyomott = True Refresh End If End If End Sub Private Sub UserControl_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) ' A lenyomott bal egrgomb felengedse esemnyt hoz ltre If lenyomott And (Button = vbLeftButton) Then lenyomott = False Refresh RaiseEvent Click End If End Sub

Ha becsukjuk a Gomb rlapjt tartalmaz ablakokat, akkor az eszkztron kivlaszthatv vlik a vezrl :

6.79. bra ActiveX vazrl a ToolBoxban

A kerek gomb vezrl t feltehetjk a tesztprojekt rlapjra akr tbb pldnyban is. A pldnyok nevei a vezrl k nevnek megfelel en Gombi, Gombi stb. lesznek. A gombokat a tervezs folyamn, de akr futs kzben is, tmretezhetjk.

6.20. bra ActiveX vazrl k a farmon

Tegynk fel egy gombot az rlapra, melynek felirata Gomb1! A gomblenyoms esemny kezel jben hangot adunk:
Private Sub Gombl_Click() ' A kerek gomb megnyomsa Beep End Sub

A projektcsoportbl a Gombp projektet aktulisnak vlasztva, a File\Make menponttal elkszthetjk a vezrl t tartalmaz OCX-llomnyt. Ms programban val felhasznlshoz a Regocx32 segdprogrammal kezelhetjk a regisztrcis adatbzis vonatkoz bejegyzseit. Ha azonban olyan programelemeket is hasznltunk a vezrl ben, amelyek a Visual Basic rszei, akkor clszer telept kszletet ltrehozni s azt telepteni. A Visual Basic 6 rendszerben megsprolhatjuk a projektcsoport ltrehozst, az ActiveX Control projektet indtva a vezrl az Explorerben is tesztelhet .

6.27. bra ActiveX vazrl tesztelse

Termszetesen nem csak magunk rajzolhatunk ActiveX-vezrl ket, hanem mr meglv vezrl kb l is felpthetjk azokat. Ksztsk el az sszeadgpet" ActiveX-vezrl formjban is! A megoldst a CD mellkleten az AXSUM knyvtr tartalmazza. Az "ActiveX Control" projekt a SZUMMAP.VBP llomnyban, mg a vezrl m kdst bemutat "Standard EXE" alkalmazs projektje a SZUMMAT.VBP fjlban tallhat. A kt projektb l felptett projektcsoportot a SZUMMAT.VBG llomny tartalmazza:

6.22. bra A Szummat projektcsoport

A felhasznli vezrl rlapjra helyezznk egy A, egy B s egy C nev szvegmez t! Az els kett tartalmazza az sszeadandkat, a harmadik pedig az sszeget. Tegyk fel az UDA s UDB lptet ket is! Az utbbiakat a BodyControl tulajdonsgon keresztl kapcsoljuk ssze az A s a B vezrl kkel! Tovbbi el rs, hogy lehessen kivlasztani a httrsznt, ha a <Ctrl> billenty lenyomsa utn az egrrel a vezrl terletn kattintunk! Ehhez tegynk fel egy Shape vezrl t (Shapel), melynek BackStyle tulajdonsga 1-Opaque rtk ! Ugyancsak helyezznk az rlapra egy a CommonDialogl, ltalnos prbeszdablakokat kezel vezrl t! lltsuk CommonDialogl vezrl CancelError tulajdonsgt True rtk re, hogy a kilpst kezelni tudjuk!

6.23. bra Az sszead komponens

A keretszlessg rtkt az adat konstans hatrozza meg:


Const adat = 10 0

A Szumma ActiveX-vezrl ad otthont a rhelyezett vezrl knek. Ha a vezrl nk mrete vltozik, akkor a rhelyezett vezrl ket is tmretezzk:
Private Sub UserControl_Resize() 1 A mretminimum 1500*1500 If Height < 1500 Then Height = 1500 Exit Sub End If If Width < 1500 Then Width = 1500 Exit Sub End If Shapel.Left = 0 Shapel.Top = 0 Shapel.Width = Width Shapel.Height = Height A.Width = Width - 2 * adat B.Width = Width - 2 * adat C.Width = Width - 2 * adat A.Height = (Height - 4 * adat) / 3 A.Left = adat A.Top = adat UDA.Height = A.Height UDA.Left = A.Width + adat - UDA.Width UDA.Top = A.Top B.Height = A.Height B.Left = adat B.Top = A.Top + A.Height + adat UDB.Height = A.Height UDB.Left = B.Width + adat - UDB.Width UDB.Top = B.Top C.Left = adat C.Height = A.Height C.Top = B.Top + B.Height + adat End Sub

A kezdeti rtkek belltst a vezrl pldny ltrejtte utn vgezzk el:


Private Sub UserControl_Initialize() 1 Kezdeti belltsok UDA.Value = Clnt(A.Text) UDB.Value = Clnt(B.Text) End Sub

Az sszeadgp" funkcionlis vezrl inek m kdst mr jl ismerjk:


Private Sub A_Change() ' A tpushibk kisz rse On Error Resume Next ' Ha az A tartalma vltozik C.Text = CStr(Cint(A.Text) + Cint(B.Text)) UDA.Value = Cint(A.Text) End Sub Private Sub B_Change() ' A tpushibk kisz rse On Error Resume Next ' Ha a B tartalma vltozik C.Text = CStr(Cint(A.Text) + Cint(B.Text)) UDB.Value = Cint(B.Text) End Sub Private Sub UDA_Change() ' Ha az A lptet vltozik A.Text = CStr(UDA.Value) End Sub Private Sub UDB_Change() ' Ha a B lptet vltozik B.Text = CStr(UDB.Value) End Sub

Ksztsnk egy eljrst, amelyet az egrgombok felengedsekor aktivizlunk a MouseUp esemny Shift paramtervel! Az eljrsban megvizsgljuk, hogy a <Ctrl> billenty lenyomott-e, s ha igen, akkor megjelentjk a Szn prbeszdablakot. A prbeszdablakban kivlasztott szn lesz a kifest alakzat httrszne:
Public Sub gomb(Shift As Integer) On Error GoTo ki If Shift And vbCtrlMask = vbCtrlMask Then 1 Ha a CTRL meg van nyomva Szndialgus CommonDialogl.ShowColor Shapel.BackColor = CommonDialogl.Color 'a httrszn belltsa End If ki: End Sub

A Szumma vezrl s rhelyezett vezrl k MouseUp esemnynek keletkezsekor a gomb eljrst hvjuk a Shift paramterrel:
Private Sub UserControl_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) gomb (Shift) End Sub

Private Sub A_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) gomb (Shift) End Sub Private Sub B_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Egrgomb nyoms a vezrl n gomb (Shift) End Sub Private Sub C_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Egrgomb nyoms a vezrl n gomb (Shift) End Sub Private Sub UDA_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) gomb (Shift) End Sub Private Sub UDB_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) gomb (Shift) End Sub

A UserControl rlapot tartalmaz ablak bezrsa utn azonnal hasznlhatjuk Szumma vezrl nket. A tesztel alkalmazsban semmilyen kdot sem kell rnunk, csak a vezrl t kell az alkalmazs rlapjra felhelyeznnk. Az albbi bra tansga szerint a tesztprojekt hrom pldnyban hasznlja az sszead vezrl t.

6.24. bra Az sszead komponensek hasznlata

6.5.5. ActiveX-dokumentumok ksztse A Visual Basic ActiveX-dokumentuma egy specilis formban elksztett dokumentum, melyet a csatlakoz ActiveX-komponens a Microsoft Internet Explorer bng- i sz ben jelent meg. A Visual Basic UserDocument objektuma - az AxtiveX-dokumentum alapja - megtvesztsig hasonlt a Form objektumhoz, nhny alapvet klnbsgt l eltekintve. A UserDocument objektum nem kezeli az aktivlssal (Activate, Deactivate), megsz nssel (Unload) s DDE-vel {LinkOpen, LinkClose) kapcsolatos esemnyeket. Megtalljuk azonban az ActiveX-komponenseknl megismert esemnyeket (InitProperties, ReadProperties, WriteProperties), s rendelkezik a megjelentssel kapcsolatos esemnyekkel is (Hide, Show). Alapvet tulajdonsga a UserDocument objektumnak a HyperLink, mely egy Hyper- ) Link tpus objektum referencija. Ez utbbi az Interneten val bolyongs alapvet eszkze. A HyperLink objektum NavigateTo metdust hasznlhatjuk arra, hogy segtsgvel egy megadott URL-f (Uniform Resource Locator - egysges er forrs cmazonost) tltsnk a bngsz be. Hasznlhatjuk a HyperLink objektum GoBack s GoForward metdusait is a lpkedshez. Menket is csatlakoztathatunk az ActiveX-dokumentumhoz. A felptett men NegotiateMenu s NegotiatePosition tulajdonsgai hatrozzk meg, hogyan pl be a dokumentum menje a bngsz menjbe. Pldaknt ksztsnk ActiveX-dokumentumot, melyet Web-laprl indtva knyvmegrendelsi llomnyt llt ssze! A megolds megvalst llomnyokat az AXDOKU knyvtr tartalmazza. El szr ksztsnk egy j "ActiveX Document EXE" projektet. A projekt neve legyen Megrend (MEGREND.VBP)! A projektben a USERDOC.DOB llomny trolja a UserDoc objektumot.

6.25. bra Az Active-X dokumentum projekt

A UserDoc objektum rlapjn ugyangy dolgozhatunk, mint a Form rlapjn. Tegynk fel kt cmkt a "Cm:" s "Pldny:" cmszavak megjelentsre! A List1 lista tartalmazza majd a knyvcmeket, a Listl pedig a pldnyszmokat. Ez utbbi csak a megjelentsre szolgl (Enabled=False). A pldnyszmok kitltsre sszeptnk egy szvegmez t s egy lptet vezrl t. Az gy keletkezett vezrl k helyt a kivlasztott knyvcmnek megfelel en mdostjuk, s a trolt rtk megvltozsakor a pldnyszmlistt programbl frisstjk. A jvhagyshoz s a kilpshez ksztsnk egy OK s egy Mgse parancsgombot! Az Initialize esemny keletkezsekor ADAT.DAT llomnybl tltjk fel a Listl listt elemekkel. Ugyancsak itt gondoskodunk arrl, hogy legyen kivlasztott knyvcm, s ezzel egy sorban, a List2 lista el tt, helyezkedjen el az adatbekrst vgz vezrl elem.
Private Sub UserDocument_Initialize() Dim InputData As String ' Hibakezels On Error Resume Next 1 Alapadatok olvassa llomnybl Open App.Path + "\Adat.dat" For Input As #1 Do While Not EOF(l) Line Input #1, InputData Listl.Addltem InputData List2.Addltem "0" pld.Height = Int(Listl.Height / 6) UpDownl.Height = pld.Height Loop Close #1
1 Az els elem a kivlasztott Listl.Listlndex = 0 1 Az adatbekr vezrl pozicionlsa pld.Left = List2.Left + 25 If Listl.ListCount > 5 Then 1 Attl fgg a szlessg, hogy van-e lptet vezrl pld.Width = List2.Width - UpDownl.Width - 50 UpDownl.Left = List2.Left - 25 + List2.Width _ - 2 * UpDownl.Width Else pld.Width = List2.Width - 50 UpDownl.Left = List2.Left - 25 + List2.Width - UpDownl.Width End If ' az adatbekr legfellre kerl pld.ZOrder UpDownl.ZOrder End Sub

A knyvcm kivlasztsakor az adatbekr mozog, s tartalma is vltozik.


Private Sub Listl_Click() ' Az adatbekr mozgatsa, ha az akt. listaelem vltozik pld.Top = Listl.Top + (Listl.Listlndex - Listl.Topindex) _ * Int(Listl.Height / 6) UpDownl.Top = pld.Top pld.Text = List2.List(Listl.Listlndex) End Sub

A lista grgetsekor kiss bonyolultabb a helyzet, mert figyelni kell a hatrra rkezst, s a kivlasztott cmet a hatrnak megfelel en kell vltoztatni.
Private Sub Listl_Scroll() ' Az adatbekr mozgatsa grgetskor If Listl.Listlndex < Listl.Topindex Then Listl.Listlndex = _ Listl.Topindex If Listl.ListIndex>Listl.Topindex + 5 Then Listl.Listlndex = _ Listl.Topindex + 5 List2.Topindex = Listl.Topindex pld.Text = List2.List(Listl.Listlndex) pld.Top = Listl.Top + (Listl.Listlndex - Listl.Topindex) _ * Int(Listl.Height / 6) UpDownl.Top = pld.Top End Sub

Mr tbbszr ptettnk ssze szmot tartalmaz szvegmez t a lptet -vezrl vel:


Private Sub pld_Change() On Error Resume Next UpDownl.Value = Cint(pld.Text) List2.List(Listl.Listlndex) = pld.Text End Sub Private Sub UpDownl_Change() pld.Text = CStr(UpDownl.Value) End Sub

A "Mgse" parancsgomb megnyomsval egyszer en visszatrnk a hv URL-hez:


Private Sub Mgse_Click() 1 Viszatrs a hvhoz Hyperlink.GoBack End Sub

Az "OK" parancsgomb megnyomsa utn a belltott pldnyszmokat a knyvcmmel egytt a MEGR.DAT llomnyba mentjk, majd visszatrnk a hv URL-hez.

Private Sub OK_Click() Dim i As Integer 1 Hibakezels On Error Resume Next ' Az adatok llomnyba mentse Open App.Path + "\Megr.dat" For Output As #1 For i = 0 To Listl.ListCount - 1 If Cint(List2.List(i)) <> 0 Then Print #1, Listl.List(i); Tab; List2.List(i); "pld." End If Next i Close #1 1 Viszatrs a hvhoz Hyperlink.GoBack End Sub

_ Tab;

Ha elksztjk a MEGREND.EXE llomnyt (File\Make), akkor ltrejn a MEGREND.VBD dokumentum is. A MEGREND.EXE program futtatsval regisztrlhatjuk a megjelent kiszolglt, ezutn hivatkozhatunk a doku-mentumra. Az ActiveX-dokumentum felhasznlst bemutat HTML-dokumentumot, a ComputerBooks Kft. cmlapja alapjn ksztettk el (CBSTART.HTM). Ebben elhelyezzk a USERDOC.VBD llomnyra hivatkoz a Megrendels referencit:
<a href="userdoc.vbd">Megrendels</a>

6.26. bra Az Active-X dokumentum aktivlsa

Ha a megrendels hivatkozst vlasztjuk megjelenik az ActiveX- dokumentum.

6.27. bra Az Active-X dokumentum

Dolgozzuk t egy kicsit a cmlapot! A Megrendels hivatkozs helyett ptsnk be egy kerek gombot megjelent ActiveX-vezrl t! Ne felejtsk el a GOMB.OCX vezrl t regisztrlni, mert az URL-hivatkozik a megfelel azonostszmra (GUID)! A gombnyoms esemnyt VBScript eljrs segtsgvel kezeljk, azonban szembe kell nznnk az ActiveX-vezrl beptsvel kapcsolatos biztonsgi problmkkal. A CBSTARTO.HTM llomny csak a gomb beptsben klnbzik az el z t l.
<object id="Gomb" name="Gomb" classid="clsid:D912BC16-4713-HD2-B503-00E02 9189488" align="baseline" border="0" width="80" height="60"><param name="Caption" value="Megrendels"> </object>

<script language="VBScript"> < ! -sub gomb_click() Navigate "UserDoc.vbd" end sub - >

</scriptxbr>

6.28. bra Active-X vezrl az Active-X dokumentumban

7. A Visual Basic adatkezelsi lehet sgei


ltalnosan elmondhat, hogy a programok adataik nagy rszt lemezen trolt llomnyokbl veszik, illetve a futs eredmnyt fjlokban troljk. A Visual Basic tbb szinten tmogatja a lemezen trolt adatok kezelst, feldolgozst. Az adatainkat, a hagyomnyos informci-feldolgozs elveinek megfelel en, klnbz tpus s elrhet sg llomnyokban trolhatjuk. A fjlok kezelst a Visual Basic nyelv utastsainak s fggvnyeinek segtsgvel vgezhetjk. Sokkal komolyabb adatfeldolgozsi lehet sgeket biztost szmunkra az adatbzisszemllet informcifeldolgozs. Ennek alapjt a Visual Basic rendszerben a Microsoft Jet Database Engine (adatbzismotor) 3.6-es verzija kpezi. Az adatbzismotort az alkalmazsbl az objektumalap DAO {Data Access Object) programozsi modell objektumain keresztl rjk el. Tovbb nveli lehet sgeinket az ODBC (Open DataBase Connectivity) technolgia alkalmazsa, melynek segtsgvel tbb szmtgpen prhuzamosan m kd gyfl-kiszolgl alkalmazsok hozhatk ltre. Az ODBC API-ra pl objektumrendszer az RDO (Remote Data Objects) A Visual Basic 6.0-ban az adatbzis-kezels j eszkze az ADO {ActiveX Data Objects) is hasznlhat. Az ADO clja, hogy gyors, hatkony adatelrs valsuljon meg mind loklis, mind hlzatos, mind pedig Internetes elrs esetn. Az ADO a Microsoft cg alacsony szint adatbzis-interfszre, az OLE DB-re pl. A fejezetben el szr sszefoglaljuk a hagyomnyos fjlkezelssel kapcsolatos ismereteket, majd pedig bemutatjuk az adatbzis-kezels eszkztrt.

7.1. Hagyomnyos llomnykezels


A Visual Basic-ben a fjlokat hrom csoportba sorolhatjuk, az llomnyok tartalma s elrsk mdja szerint: A szekvencilis (szveges) fjlok sorvge {Chr(10) & Chr(13)) jelekkel tagolt szvegsorokbl llnak, amely sorok csak egyms utn rhet k el. Az ilyen l lomnyok adatait kiolvashatjuk (Input), fjlba rhatjuk (Output), de lehet sg van jabb adatok hozzf zsre is (Append) A tetsz leges elrs (Random) llomnyok azonos bjtmret binris re kordok sorozatt troljk llnak. A tetsz leges elrs azt jelenti, hogy az llo mny adatait a megnyits utn, tetsz leges rekordpozcitl kezdve olvashat juk, illetve rhatjuk. A binris (Binary) elrs fjlok olyan specilis, kzvetlen-elrs llom nyok, melyek esetben a hozzfrs egysge a bjt.

Az elrsi mdtl fggetlenl az llomnyok kezelse a fjlnyitssal (Open) kezd dik. A sikeres llomnynyits utn kvetkezhet a fjl adatainak elrse: rsa, olvassa, esetleg pozicionlst (Seek) kvet en. A munka vgeztvel megszaktjuk a kapcsolatot a fjllal, lezrjuk (Close) azt. Az llomnyok az opercis rendszer szintjn lteznek. A Visual Basic programok a nyitott llomnyokat egy fjlszm (1-511) segtsgvel azonostjk. A fizikai llomnyok s a fjlszm sszerendelse a fjl sikeres megnyitsakor megy vgbe, s egszen a lezrsig tart. A szabad fjlszm megadsrl a program rjnak kell gondoskodnia, pldul a FreeFile() fggvny hvsval. Az albbiakban tblzatosn sszefoglaltuk a Visual Basic azon utastsait s fggvnyeit, amelyeket llomnyok s knyvtrak kezelshez hasznlhatunk. Knyvtrak s llomnyok (megnyits nlkli) kezelse:
ChDir strtvonal ChDrive strmeghajt CurDir[(strmeghajt)] Dir[(strtvonal [, attribtumok])] FileCopy strforrsfjl, strclfjl FileDateTime (strtvonal) FileLen (strtvonal) GetAttr( strtvonal) Kill strtvonal MkDir strtvonal Name strtvonalrgi As strtvonalj RmDir strtvonal SetAttr strtvonal, attribtumok knyvtr vltsa, meghajt vltsa, az aktulis elrsi t lekrdezse, adott feltteleknek megfelel fjlnv keresse, llomnymsols, fjl id /dtum lekrdezse, az llomny bjthossznak lekrdezse, fjl- s knyvtr-attribtumok lekrdezse, llomny trlse, knyvtr ltrehozsa, llomny/knyvtr tnevezse, knyvtr trlse, fjl- s knyvtr-attribtumok belltsa.

Mindhrom megnyitsi md esetn hasznlhat fggvnyek s utastsok:


EOF(fjlszm) FileAttr(fjlszm, visszatpus) FreeFile() Loc(fjlszm) LOF(fjlszm) Reset Seek(fjlszm) Seek [#]fjlszm, pozci a fjlvg elrsnek (true) vizsglata, az llomny elrsi mdjnak lekrdezse, szabad fjlszm krse, az aktulis fjlpozci lekrdezse, a megnyitott llomny bjtban kifejezett mretnek lekrdezse, az sszes nyitott fjl lezrsa, a kvetkez m velet pozcijnak lekrdezse, a kvetkez m velet pozcijnak belltsa.

Az albbi tblzatban sszefoglaltuk a klnbz fjltpusok esetn alkalmazhat fggvnyeket s utastsokat a:

(A tblzatban fejlcben az S bet a szekvencilis, az R a tetsz leges elrs , a B pedig a binris elrs llomnyt jelli.) 7.1.1. Szekvencilis llomnyok Szekvencilis fjlok esetn mr a megnyitskor el kell dntennk, hogy milyen mdon kvnjuk az llomny elrni:
O pe n f j l n v F or Input As [ # ] f jl sz m [ Le n=re k o rd h o ssz ]

Output Append

1-511

1-32767

Olvassra (Input) csak ltez llomny nyithatunk meg, rs (Output) s hozzrs (Append) esetn azonban a rendszer megnyits el tt ltrehozza a fjlt, ha az nem ltezik. Amennyiben a programunk ltal kirt - klnbz tpus - adatokat szeretnnk visszaolvasni a szveges llomnybl, akkor a kirsra a Write utastst ajnlott hasznlni, mivel ebben az esetben a beolvass egyszer en elvgezhet az Input# utastssal. A Write utasts az adatelemeket vessz vel tagolja, a szveget idz jelelek kz, a dtumot s a logikai rtket pedig # jelek kz helyezi. Az albbi pldban j szekvencilis llomny hozunk ltre:

Private Sub Commandl_Click() Dim fsz As Integer fsz = FreeFile() 1 Kirs az llomnyba Open App.Path & "\Szoveg.txt" For Output As fsz Dim Nev As String, Kor As Integer, _ Hitel As Currency, Dtum As Date, Nem As Boolean Nev = "Lafenita" Kor = 3 0 Write #fsz, Nev, Kor, 125500.5, Now, True Close #fsz ' Visszaolvass Open App.Path & "\Szoveg.txt" For Input As fsz Input #fsz, Nev, Kor, Hitel, Dtum, Nem Close #fsz End Sub

Nzzk meg a ltrehozott szvegsort a Szoveg.txt llomnyban, amely a programunk knyvtrban (App.Path) jtt ltre!
"Lafenita",30,125500.5,#2003-04-20 09:13:0 9#,#TRUE#

Ha a szveges llomnyt soronknt dolgozzuk fel a Line Input# utastssal vagy az Input() fggvnnyel, akkor az llomny a Print# utastssal is ltrehozhatjuk. A Print# utasts egy sorformzsi lehet sggel rendelkezik, melyeket pldkon keresztl mutatunk be:

A adatsorba helyezett vessz vagy Tab kulcssz a kvetkez tabultorpozciba helyezi az adatot (14 pozcinknt). A Tab(pozci) hvssal kijellhetjk a pozcit mg az Spc(darab) hvssal adott szm szkzt helyezhetnk a sorba. Az albbi pldban ltalnos prbeszdablak segtsgvel krjk be a szveges llomny nevt. A fjl tartalmt soronknt egyetlen karaktersorozatt f zzk ssze, majd a tbbsoros szvegszerkeszt ablakba msoljuk. Az alkalmazs ablaka az 7.1. brn lthat.

7.1. bra A fjlnzeget alkalmazs ablaka


Option Explicit
1

El kszletek Private Sub Form_Load() With CommonDialogl .CancelError = True .FileName = "" .InitDir = App.Path .Filter = "Szvegfjl (*.txt)|*.txt|Minden fjl (*.*)|*.*|" .Filterlndex = 0 End With Textl.Locked = True Textl.Text = "" 1 Fejleszts alatt belltott tulajdonsgok ' Textl.MultiLine = True ' Textl.ScrollBars = vbBoth End Sub Private Sub Commandl_Click() On Error GoTo kilp CommonDialogl.FileName = "" CommonDialogl.ShowOpen Dim fsz As Integer Dim Sor As String ' A fjl mrete nem lehet nagyobb mint amit a TextBox ' megenged If FileLen(CommonDialogl.FileName) > 32000 Then Err.Raise vbObjectError + 1000, , _ "Tl nagy az llomny mrete!" Exit Sub End If

Textl.Text = " " fsz = FreeFile Open CommonDialogl.FileName For Input As fsz Do While Not EOF(fsz) Line Input #fsz, Sor Textl.Text = Textl.Text & Sor & Chr(13) & Chr(lO) DoEvents Loop Close fsz Forml.Caption = CommonDialogl.FileName Exit Sub kilp: MsgBox Err.Description, vbOKOnly, "Hibazenet" End Sub

A beolvass sokkal gyorsabb tehet az Input() fggvny felhasznlsval. Ehhez a fenti program Open s Close utastsok kztti rszt egyetlen sorral kell helyettestennk:
Textl.Text = Input(LOF(fsz), fsz)

7.1.2. Tetsz leges elrs llomnyok A Random fjlokat azonos tpus adatok trolsra hasznljuk. A fjlban trolt adatelemeket szoksos elnevezse a rekord, melynek maximlis hossza 32767 bjt. A tetsz leges hozzfrs arra utal, hogy a fjl megnyitsa utn rsi s olvassi m veleteket egyarnt vgezhetnk A fjlnyits utasts ebben az esetben:
Open fjlnv For Random As fjlszm Len = rekordhossz

Az llomnyban a rekordok (1-t l indul) sorszmmal rendelkeznek, melyeket az aktulis rekordpozci kijellsre (Seek) hasznlhatunk. A fjlba a
Put [#] fjlszm, [rekordszm], kifejezs

utastssal rhatjuk a megadott kifejezs rtkt, az olvassra pedig a


Get [#] fjlszm, [rekordszm], vltoz

utastst hasznljuk. A m velet a rekordszm paramterrel kijellt rekordra vonatkozik (kzvetlen elrs). Ha elhagyjuk ezt a paramtert, akkor a rekordokat egyms utn rhatjuk, illetve olvashatjuk (soros elrs). A fjlban a bejegyzsek ugyanolyan formban troldnak, mint ahogy a memriban.

Amennyiben egy nem ltez pozcira runk adatot, az llomny automatikusan megn a m veletben szerepl rekordig. Az albbi programrszlet bemutatja az rsi, az olvassi valamint a pozicionlsi m veleteket.
1. 2. 3. 4. 5. ? 24 36 Dim a As Integer, b As Integer Open "C:\adatok.dat" For Random As 1 Len = Len(a) a = 60

?
60 Put #1, 5, a 'seek #1, 2 'Put #1, , 24 .Put #1, , 36 "Get #1, 2, a kGet #1, , b

adatokdat

close #1

Az albbi pldban el szr egy statikus tmbt runk Random fjlba, majd a kirt elemeket mdostjuk, vgl pedig visszaolvassuk a tmbt:
Private Sub Commandl_Click() Dim dt(l To 10) As Double, i As Integer Dim TLen As Integer TLen = Len(dt(l)) * (UBound(dt) - LBound(dt) + 1) For i = 1 To 10 dt(i) = 2 A i Next i ' A tmb fjlba rsa Open "C:\tomb.dat" For Random As 1 Len = TLen Put #1, , dt Close #1 ' A fjl minden elemnek 1-gyel val nvelse Dim a As Double Open "C:\tomb.dat" For Random As 1 Len = Len(a) Do While Not EOF(l) Get #1, , a If EOF(l) Then Exit Do Put #1, Seek(l) - 1, a + 1 Loop Close #1 1 A tmb visszaolvassa a fjlbl Open "C:\tomb.dat" For Random As 1 Len = TLen Get #1, , dt Close #1 For i = 1 To 10 Print dt(i) Next i End Sub

A fentiekhez hasonlan menthetjk fjlba a rgztett hosszsg karaktersorozatokat is. Amennyiben dinamikus sztringeket, vagy dinamikus tmbket kvnunk fjlba rni, akkor a vltozhoz tartoz informcis (ler) blokk mrett is be kell szmolni a rekordhosszba (ami 2 bjt, illetve 2+8*dimenziszm bjt).

A kvetkez sszetettebb pldban komplex szmokat trolunk kzvetlen elrs llomnyban. Az alkalmazs futs kzbeni ablaka a 7.2. brn lthat
Private Type cplx re As Double im As Double End Type Private Sub btnFeltolt_Click() Randomize On Error Resume Next Dim c As cplx, i As Integer Kill App.Path & "\komplex.dat" Open App.Path & "\komplex.dat" For Random As 7 Len = Len(c) For i = 1 To 12 + Cint(23 * Rnd) ere = Cint (99 * Rnd) c.im = Cint(99 * Rnd) Put #7, , c Next i Close 7 Listl.Clear Textl.Text = "" End Sub Private Sub btnLekerdez_Click() Dim c As cplx, db As Integer Open App.Path & "\komplex.dat" For Random As 17 Len = Len(c) Listl.Clear db = 0 Do While Not EOF(17) Get #17, , c If EOF(17) Then Exit Do Listl.Addltem Format(c.re, "00") & " + " & __ Format(c.im, "00") & "i" db = db + 1 Loop Close 17 Caption = "Rekodszm: " & CStr(db) End Sub Private Sub btnOsszeg_Click() Dim c As cplx, se As cplx Open App.Path & "\komplex.dat" For Random As 2 Len = Len(c) sere = 0 sc.im = 0 Do While Not EOF(2) Get #2, , c If EOF(2) Then Exit Do sere

= sere + c.re sc.im = sc.im + c.im Loop Close 2 Textl.Text = Str(sere) & " + " & Str(sc.im) & "i"
End Sub

7.2. bra A komplex rekordokat kezel alkalmazs ablaka

7.1.3. Binris llomnyok A binris elrssel tetsz leges szerkezet fjl tartalmt feldolgozhatjuk. A megnyitshoz hasznlhat Open utasts alakja:
Open fjlnv For Binary As fjlszm

A binris elrs sorn a fjl tetsz leges bjtpozcijtl kezdve akrhny szm bjtot rhatunk, illetve olvashatunk. Az llomnyba val rshoz a mr megismert Put utastst, mg az olvasshoz a Get utasts s az Input() fggvnyt hasznlhatjuk. Az albbi pldban a megadott llomny 23. pozcijtl kezdve 12 karaktert olvasunk a Szo vltozba:
Private Sub Commandl_Click() Open "c:\ComputerBooks.txt" For Binary As 2 Dim Szo As String Szo = String(12, " ") ' 1.vltozat Get 2, 23, Szo Szo = String(12, " ") ' 2 .vltozat Seek 2, 23 Szo = Input(12, 2) Close #2 End Sub

7.1.4. Elrsi korltozsok


Az Open utasts teljes formjt hasznlva bizonyos korltozsokat lptethetnk rvnybe:
Open fnv For nyitsi_md Access elrsi_md hozzfrs _ As fsz [Len=rekordhossz]

Az Access sz utn megadhatjuk, hogy a Random s Binary fjlnyits esetn milyen fjlm veleteket engedlyeznk: Read - olvass, Write - rs, ReadWrite - rs s olvass (alaprtelmezs). A hozzfrs paramterrel tbbprogramos krnyezetben el rhatjuk, hogy ms fut folyamatok hogyan frhetnek hozz a programunk ltal megnyitott llomnyhoz. A paramter lehetsges rtkei: Shared - megosztjuk a fjlunkat, Lock Read - tiltjuk a fjl olvasst, Lock Write - tiltjuk a fjl rst, illetve Lock Read Write - tiltjuk a fjlhoz val hozzfrst. Arra is van lehet sg, hogy a megnyitott llomnyok egy rszt zroljuk ms alkalmazsok el l (Lock), illetve a zrolst megszntessk (Unlock)
Lock [#]fjlszm, rekord | [kezd pozci] To vgpozci Unlock [#]fjlszm[,rekord | [kezd pozci] To vgpozci]

7.2. Objektumos llomnykezels - File System Objects


A Visual Basic 6.0-bl elrhetjk s hasznlhatjuk a Windows opercis rendszer ltal biztostott knyvtr (mappa)- s fjlkezel objektumokat, melyek sszefoglal neve a File System Objects (FSO), vagyis llomnyrendszer-objektumok. Felhvjuk a figyelmet arra, hogy az FSO csak a szveges llomnyok (adatdfolyamok - streamek) kezelst tmogatja. Az FSO hasznlathoz a Visual Basic fejleszt rendszerben engedlyeznnk kell a "Microsoft Scripting Runtime" knyvtr elrst: a Project/References menvlaszts hatsra megjelen prbeszdablakban. Az albbi tblzatban sszefoglaltuk a Scripting Runtime objektummodell objektumait. A Dictionary objektum kivtelvel a tbbiek az FSO objektummodell elemei:
Objektum _________ Lers _____________________________________________ Dictionary (sztr) A csoport egyik jdonsga, melynek segtsgvel kulcsokkal elltott adatokat kezelhetnk. FileSystemObject A csoport legfontosabb objektuma, melynek metdusaival meghajtkat, knyvtrakat s llomnyokat egyarnt kezelhetnk. Hasznlatval a rendszerhez kapcsold meghajtkrl (merevlemez, CD-ROM stb.) kaphatunk informcit. Lehet v teszi a knyvtrakkal (mappk) vgzett m veleteket. Tmogatja az llomnyokkal kapcsolatos m veleteket.

Drive (meghajt) Folder (mappa) File (llomny)

TextStream

Lehet v teszi a szvegfjlok kezelst.

Az objektumok hierarchijt a 7.3. brn lthatjuk, ahol az ellipszisben szerepl nevek objektumok, mg a tglalapban szerepl k gy jtemnyek. Lssunk el szr egy pldt a Dictionary objektum hasznlatra, hisz ez nem igazn tartozik a fjlkezels tmakrhez, azonban az elhelyezkedse miatt itt ismertetjk!
Private Sub Commandl_Click() Dim Szotar As Dictionary, Kulcs As Variant Dim Elem As String Set Szotar = New Dictionary Szotar.Add "cat", "macska" Szotar.Add "dog", "kutya" Szotar.Add "bird", "madr" Szotar.Add "horse", "l" Szotar.Add "elephant", "elefnt" Szotar.Add "frog", "bka" For Each Kulcs In Szotar Elem = Szotar.Item(Kulcs) Print Kulcs, Elem Next Set Szotar = Nothing End Sub

7.3. bra A Scripting Runtime modell objektumainak hierarchija

A Dictionary objektum metdusai: Add(), ExistsQ, Items(), Keys(), Remove(), RemoveAll(), illetve tulajdonsgai: Count, Item, Key, CompareMode. Az FSO objektummodellben val programozs sorn az albbi hrom lpst kell elvgeznnk: 1. Ltre kell hoznunk egy FileSystemObject objektumot. Ezt ktflekppen is el vgezhetjk:
Dim fso As FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject")

vagy
Dim fso As New FileSystemObject

2. Hasznlnunk kell a ltrehozott objektum metdusait. 3. El kell rnnk az objektum tulajdonsgait. A lehet sgek ttekintse el tt nzznk egy pldaprogramot, amelyben a megadott szveges llomny tartalmt listba msoljuk!

Private Sub Command1_click() Dim fso As FileSystemObject, tf As TextStream Dim fnev As String, sor As String fnev = "c:\ComputerBooks.txt" Listl.Clear Set fso = CreateObject("Scripting.FileSystemObject") Set tf = fso.OpenTextFile(fnev, ForReading) Do While tf.AtEndOfStream <> True sor = tf.readLine Listl.Addltem sor Loop tf .Close Set tf = Nothing Set fso = Nothing End Sub

Az albbiakban rviden sszefoglaljuk az egyes objektumok hasznlatval kapcsolatos ismereteket. A FileSystemObject objektum Az FSO objektumok kzl ez az egyetlen, amelyik kvlr l is elrhet , vagyis a deklarciban a New kulcssz utn is megadhat. Az objektum tulajdonsga a szmtgp meghajtirl informcit trol Drive objektumok Drives gy jtemnye. A metdusai a legklnbz bb m veletek vgzst tmogatjk:
BuildPathO CreateFolder() DeleteFolder() FolderExists() GetDrive() GetFile() GetParentFolderName() MoveFileO A Drive objektum CopyFile() CreateTextFile() DriveExists() GetAbsolutePathNameO GetDriveName() GetFileNameO GetSpecialFolder() MoveFolder() CopyFolder() DeleteFile() FileExists() GetBaseName() GetExtensionName() GetFolder() GetTempName() OpenTextFile()

A Drive objektum a szmtgphez csatlakoztatott tetsz leges meghajtrl trol informcikat. Nem rendelkezik metdussal, csak az albbi tulajdonsgokkal: AvailableSpace, DriveLetter, DriveType, FileSystem, FreeSpace, IsReady, Path, RootFolder, SerialNumber, ShareName, TotalSize, VolumeName A Drive objektumok gy jtemnye a Drives kollekci, melynek kt tulajdonsga a
Count s az Item.

A Folder objektum A Folder objektum lehet v teszi, hogy a mappk adatait lekrdezzk, s m veleteket vgezznk a knyvtrakkal. Az albbi tblzatban sszefoglaltuk a knyvtrmveleteket:
Mvelet ___________________________________Metdus ___________________________ Mappa ltrehozsa; FileSystemObject.CreateFolder() Mappa trlse; Folder.Delete() FileSystemObject.DeleteFolder() Mappa thelyezse; Folder.Move() FileSystemObject.MoveFolder() Mappa msolsa; Folder.Copy() FileSystem Object. CopyFolder() A mappa nevnek lekrdezse; Folder.Name() Mappa ltezsnek vizsglata ; FileSystemObject.FolderExists() Ltez Folder obj. pldnynak lekrdezse; FileSystemObject.GetFolder() A szl mappa nevnek lekrdezse; FileSystemObject.GetParentFolderNaine() A rendszermappk tvonalnak lekrdezse; FileSystemObject.GetSpecialFolder()

A Folder objektum tovbbi metdusa a CreateTextFile(), melynek segtsgvel szvegfjlt hozhatunk ltre a mappban. Az objektum tulajdonsgai informcit hordoznak a mapprl: Attributes, DateCreated, DateLastAccessed, DateLastModified, Drive, Files, IsRootFolder, Name, ParentFolder, Path, ShortName, ShortPath, Size, SubFolders, Type A Folder objektumok gy jtemnye a Folders kollekci, amely a szoksos Count s Item tulajdonsgok mellet az AddFolder() metdussal is rendelkezik. A File objektum, A File objektum egy lemezllomnyt reprezentl, amelyr l informcikat a tulajdonsgok szolgltatnak: Attributes, DateCreated, DateLastAccessed, DateLastModified, Drive, Name, ParentFolder, Path, ShortName, ShortPath, Size, Type. Az objektum metdusai a szoksos megnyits nlkli fjlm veleteket tmogatjk: Copy(), Delete(), Move(), OpenAsTextStream(). A Files gy jtemny-objektum a Folder objektum Files tulajdonsga ltal visszaadott File objektumok trolja. A Folder objektum ltal kijellt knyvtr minden bejegyzse bekerl ebbe a gy jtemnybe, amelyet aztn a For Each ... Next utastssal dolgozhatunk fel. A Files kollekci Count tulajdonsga a fjlbejegyzsek szmrl informl, mg az Item tulajdonsga a File objektumot trolja.

A TextStream objektum A szveges llomny rsi s olvassi m veletei a TextStream objektumon keresztl valsulnak meg. Az objektum metdusai a szoksos fjlm veleteken tlmen en, nhny rdekes megoldst is tmogatnak: Close(), Read(), ReadAll(), ReadLine(), Skip(), SkipLine(), Write(), WriteBlankLines(), WriteLine(). Az objektum tulajdonsgai: AtEndOfLine, AtEndOfStream, Column, Line.

7.3. Adatbzis-kezel alkalmazsok ksztse


A Visual Basic rendszerben az adatbzisok elrsre hrom fellet - az adatok elrsre s kezelsre hasznlt hrom objektummodell - kzl vlaszthatunk. Ezek az Active Data Objects {ADO), a Remote Data Objects (RDO) s a Data Access Objects (DAO). A felsorolt adatelrsi felletekb l a legfiatalabb" s egyben a legegyszer bben hasznlhat az ADO, amely radsul kevsb merev s kttt objektummodell, mint az RDO s a DAO. Az ADO a Microsoft cg Universal Data Access (UDA) technolgijnak rsze, amely azon relcis s nem relcis felpts adatforrsok gyors elrshez biztost nyelvfggetlen s knnyen hasznlhat API-t, amelyekhez ltezik egy UDA-kompatibilis illeszt program. A UDA-t a Microsoft Data Access Components (MDAC) felhasznlsval valstjk meg, amely komponens-gy jtemny a kvetkez ket foglalja magban: az Active Data Objects (ADO) nevet visel MDAC alkalmazs-programozsi felletet (API-t), a rendszerszint kapcsoldsi felletet, az OLE DB-t. Ez olyan COM kapcso ld felletek (interface) gy jtemnye, amely tetsz leges adatforrs szmra (a relcis adatbzisoktl kezdve, a fjlrendszerekig) biztostja az sszes szksges adatelrsi lehet sget, a rgebbi verzikkal szembeni kompatibilits fenntartshoz szksges ODBC-t (Open Database Connectivity). Az ADO az OLE DB adatelrsi technolgin alapul, melynek segtsgvel az alkalmazsunkbl tetsz leges adatforrst elrhetnk - legyen sz relcis vagy nem relcis adatbzisokrl, e-mail- vagy fjlrendszerekr l, szvegekr l, grafikrl stb. Az ADO-t gy terveztk, hogy minimalizljk a hlzati terhelst az Interneten keresztl zajl adatcsere-folyamatokban. A hatkonysg mellett az ADO el nye az is, hogy az el djeinl knnyebben megtanulhat szemantikval rendelkezik. j alkalmazsok ksztshez mindenkppen az ADO-t rdemes vlasztani, de a kompatibilitsi szempontok miatt - gondoljunk csak a rgebben rt programok tovbbfejlesztsre - a Visual Basic 6.0 tovbbra is tmogatja az RDO-t s a DAO-t. 7.3.1. Az adatbzisokrl rviden A napjainkra kialakult adatbzismodellek kzl a Visual Basic a legelterjedtebb, a relcis adatbzisok kezelst tmogatja. A relcis adatbzist tblzatok (adattblk, tables) alkotjk, melyek kztt klnbz kapcsolatokat (relcikat) definilhatunk.

A tblzatban az oszlopok (mez k, fields) szma el re meghatrozott, mg a sorok szmra nincs ilyen megkts. A tblzat sorait bejegyzsnek, vagy rekordnak (record) nevezzk - egy adott tblzaton bell minden rekord azonos szerkezet . A rekordokban trolt adatokhoz mez nknt is hozzfrhetnk. Az adatfeldolgozs sorn az adattbla rekordjait rjk el, melyek kzl egy - az aktulis rekord -jelli, hogy ppen hol tart a feldolgozs. Az aktulis rekordon bell a fentiekhez hasonl megfontolsok alapjn aktulis mez r l is beszlhetnk. Az adatkezels vgrehajtsa sorn egy adott tblban minden id pillanatban pontosan egy rekord, illetve a rekordon bell egy mez az aktulis.

7.4. bra Adattblk megjelentse a Visual Data Manager programmal

A Visual Basic rendszer egy sor beptett eszkzt tartalmaz az adatbzis-kezel alkalmazsok kialaktsnak tmogatsra. Adatbzisok ltrehozshoz s mdostshoz az Add-Ins men Visual Data Manager menpontjval indthat Vizulis adatmenedzser alkalmazst hasznlhatjuk. Az adattblhoz kapcsold felhasznli fellet kialaktsban a Project I Add Form I VB Data Form Wizard (Adat rlap-varzsl) lehet sgeire tmaszkodhatunk. Az adatfeldolgozs eredmnyeknt jelentst kszthetnk, melynek ltrehozst a Project I Add Data Report Designer menpont vlasztsval kezdemnyezhetjk. A 7.4. brn a PROGRAM.MDB adatbzisbl a Visual Data Manager program segtsgvel megjelentett adattblk lthatk.

Az albbiakban el szr megismerkednk a Visual Basic alatti adatbzis-kezels fogalomkrvel, majd feladatok kit zsvel s megoldsval bemutatjuk az adatbzisokkal val munkavgzs eszkzeit. Az adatbzis-m veltek tbbsge valamilyen lekrdezs jelleg m velet, melynek sorn a trolt adatok kzl kivlasztjuk a szmunkra informcit hordoz bejegyzseket. Az adatlekrs elvgzsre a relcis adatbzis-kezel rendszerek gyakran az SQL-i {Structured Query Language), a strukturlt lekrdez nyelvet hasznljk. Br az SQL nyelvnek ltezik szabvnyostott vltozata, a legtbb rendszer mgis sajt nyelvjrssal rendelkezik, kiegsztve, mdostva a szabvnyt. A gyorsabb adatelrs (adatkeress) msik, kevsb rugalmas mdszere az indextblk hasznlata. Ekkor az adattbla azon mez ihez, - amelyek rtke alapjn adatot keresnk a tblbl indextblt ksztnk. Az indextbla a mez rtkek szerinti rendezettsgben tartalmazza az adattbla adott oszlopnak adatait, gy a keress gyorsabb lesz. Az adatbzisokat kt csoportba szoks sorolni. Loklis (helyi) adatbzisrl beszlnk, amikor az adattblk sajt szmtgpnk, vagy a loklis hlzatunk llomny-kiszolgljnak (file-server) merevlemezn helyezkednek el. Ebben az esetben az adatbzism veleteket kzvetlenl a szmtgpnkn fut alkalmazs vgzi. Sokkal nagyobb teljestmny programrendszerek kialaktsra van lehet sg, ha az adatbzis adatait egy tvoli kiszolgln troljuk, amelyet a helyi alkalmazsunkkal prhuzamosan m kd adatbzis-kiszolgl (database-server) alkalmazs kezel. A Visual Basic rendszerben az adatbzisokat hrom csoportba soroljuk: Visual Basic adatbzisok - ms nven natv adatbzisok - valjban Microsoft Access adatbzisokat jellnek, melyeket kzvetlenl a Jet adatbzismotor kezel. Kls adatbzisok - a legelterjedtebb formtum ISAM (index-szekvencilis) adatbzisok: Btrieve, dBASE, Microsoft FoxPro s Paradox. A felsorolt adat bzisokon kvl a Visual Basic az n. szvegfjl adatbzisok, tovbb a Microsoft Excel s Lotus 1-2-3 munkalapok kezelsre is kpes. ODBC adatbzisok - Az ODBC (Open Database Connectivity) felhasznl sval kezelt gyfl-kiszolgl adatbzisok, mint pldul a Microsoft SQL Server, vagy az Oracle.

Vgezetl tisztznunk kell az adatbzis-kezelssel kapcsolatos gyfl/kiszolgl (kliens/szerver, client/server) alkalmazsok fogalmt, amely egy specilis adatbzisfelptst takar! A kiszolgl alatt egy olyan kzponti szmtgpet rtnk, ahol az adatok troldnak, s amely tetsz leges szm gyfl szmra elrhet . Az gyfelek olyan alkalmazsok, amelyek a kiszolgln keresztl frnek hozz az adatbzisban trolt adatokhoz.

Az ilyen felpts esetn, amikor a nagy mennyisg adat trolsa s kezelse kzpontostott, lehet v vlik az optimalizlt adatelrs kialaktsa, tbb ugyanarra az adatra vonatkoz, egyidej adatlekrs kezelse, a szmtgpes hardver kltsgeinek cskkense (hiszen nem kell minden hova gyors szmtgp). ltalban az gyfl- s a kiszolgl alkalmazsok elklntett, hlzatba kapcsolt szmtgpeken m kdnek, de akr egyetlen szmtgpen is futtathatk. 7.3.2. Adatbzis-kezels ADO (Active Data Objects) segtsgvel Minden adatbzis-kezel alkalmazsban el kell vgezni a kvetkez lpsek sorozatt: az adatbzissal val kapcsolat megteremtse, az adatok lekrdezse a kapcsolaton keresztl, az adatok rendezse, az adatok megjelentse. A Visual Basic klnbz verziiban jabb s jabb eszkzk kerltek bevezetsre a fenti feladatkrk elvgzsre: DAO a VB3-ban, RDO a VB4-ben, ODBCDirect a VB5-ben. A VB6-ban az j adatelrsi mechanizmus, az ADO - Active Data Objects, illetve egy sor adatbzis-hasznlatot megknnyt eszkz is megjelent. A Visual Basic 6.0 rendszerben az adatbzis-kezels a kvetkez brn felsorolt eszkzk s technolgik segtsgvel valsul meg:

7.5. bra Adatbzisok kezelse a Visual Basic 6.0 Enterprise vltozatban

7.3.2.1. Adatkezels az Enterprise eszkzk segtsgvel A 7.5. brn lthat Data rteg az adatbzisokat, illetve az n. vizulis adatbziskezel eszkzket, a Microsoft Visual Data Tools-t reprezentlja. Ezeket, a Visual Basic 6.0 Enterprise verzijba integrlt eszkzket programrskor a Data View (View / Data View Window) ablakon keresztl rhetjk el, gy az ltalnos adatbziskezel mveleteket a Visual Basic-b l val kilps nlkl is elvgezhetjk. A Visual Basic 6.0 j adatkezel krnyezete (Data Environment) segtsgvel olyan tbbszr felhasznlhat (tbb projektben, ms fejleszt eszkzkben, a Weben) adatelr komponenseket hozhatunk ltre, amelyek automatikusan kihasznljk az adatktsi szolgltats {Data Binding) el nyeit. Ebb l az adatkezel krnyezetb l az alkotelemek egyszer thzssal tvehet k. Ilyen mdon az adatokat nem csak a Visual Basic rlapjn jelenthetjk meg az ADO/OLE DB alap adatmegjelent vezrl elemekkel (DataList, DataCombo, DataGrid, Chart, Hierarchical FlexGrid, DataRepeater), hanem hierarchikus jelentseket is kszthetnk a Report Writer alkalmazs segtsgvel. A Data Environment krnyezetben az adatforrs s az adatfelhasznlk kztt a hd szerept az ADO (ActiveX Data Objects 2.0), az ActiveX-adatobjektumok jtsszk. Mivel az ADO segtsgvel legklnbz bb adatbzisokhoz is hozzfrhetnk, a kapcsolat sikeressge az adatszolgltat helyes kivlasztsn, illetve kezelsn mlik. A kiszolglk kzti klnbsgek a kvetkez terleteket rintik: a kapcsolat paramtereinek helyes megadsa a ConnectionString tulaj donsgon keresztl, az adatlekrdezs milyensgt ler Command objektum hasznlata, a Recordset objektum eltr viselkedse a klnbz adatszolgltatk esetn. A Visual Basic 6 Enterprise vltozatban ksztett pldn keresztl ismerkedjnk meg a Data Environment krnyezet, illetve a fentiekben felsorolt objektumok s tulajdonsgok hasznlatval! Egy (Standard EXE) projekthez a Data Environment szerkeszt t a Project I Add Data Environment men segtsgvel adhatjuk hozz. A kvetkez lpsben definilni kell a hasznlni kvnt adatbzissal val kapcsolatot ler paramtereket, azaz ssze kell lltani a ConnectionString tulajdonsg tartalmt. Ehhez kattintsunk jobb oldali egrgombbal a Data Environment ablakban lthat Connectionl bejegyzsen, majd a megjelen menb l vlasszuk ki a Properties pontot. A megnyl Adatkapcsolat tulajdonsgai prbeszdablak els lapjn - a felajnlott listbl - ki kell vlasztanunk a megfelel adatbzis-szolgltatt (pldul, a Microsoft Access adatbzis elrshez a Microsoft Jet 4,0 OLE DB Provider bejegyzst).

7.6. bra Adatkapcsolatok tulajdonsgai

A kvetkez , Kapcsolat lapon, - amelynek konkrt tartalma fgg az els lapon elvgzett vlasztstl -, meg kell adni az adatbzis nevt, a bejelentkezsre vonatkoz belltsokat, illetve az elrhet sghez szksges tovbbi informcikat (pldul az adatbzis-kiszolgl neve). Vgl a Kapcsolat tesztelse gombon val kattintssal tesztelhetjk az adatbzis elrhet sgt. A Specilis lapon megadhatjuk az adatbzis-elrs tpust (pldul csak olvassra, rsra, vagy korltozs nlkli). A Mind lapon pedig egytt megtekinthetjk az sszes belltst, illetve (kattintva az rtk szerkesztse gombon) szerkeszthetjk a paramterek rtkt.

7.7. bra Adatkapcsolatok tesztelse

Az adatbzissal val kapcsolat ltrehozsa utn ssze kell lltanunk az adatok lekrdezsre irnyul parancsot, azaz ltre kell hoznunk egy Command objektumot. Ehhez a jobb oldali egrgombbal kattintsunk a Data Environment ablakban lthat Connectionl bejegyzsen, majd a megjelen menb l vlasszuk ki az Add Command parancsot, vagy kattintsunk az Add Command gombon a prbeszdablak eszkzsorn!
7.8. bra Lekrdezs kezdemnyezse

Ezek utn hasonl mdon kattintsunk a Connectionl alatt megjelent Command] bejegyzsen, majd pedig a Properties menponton! A megjelen Commandl tulajdonsgai prbeszdablak General lapjn lltsuk be a 7.9. brn lthat rtkeket! (A pldban a Visual Basic rendszerrel egytt teleptett C:\Program FilesWicrosoft Visual Studio\VB98\ BIBUO.MDB adatbzist hasznltuk.)
7.9. bra Lekrdezs sszelltsa

Ahhoz, hogy megjelentsk a lekrdezsben belltott Authors adattblt, szksgnk van egy tblzatos adatmegjelent vezrl elemre, a Microsoft Hierarchical FlexGrid komponensre. A vezrl elemet a Components prbeszdablak {Project I Components) Controls lapjn kell bejellni. Az OK gombon val kattints utn az eszkzpalettn megjelenik az MSHFlexGrid komponens iknja melynek segtsgvel a szoksos mdon helyezhetjk r a vezrl elemet az alkalmazsunk rlapjra (Form1). Ahhoz, hogy sszekapcsoljuk a megjelent vezrl elemet az adatszolgltat krnyezettel, be kell lltani annak DataSource tulajdonsgt a DataEnvironment objektum nevre (pldul DataEnvironment]). Azt pedig, hogy az adatszolgltat objektum melyik lekrdezs eredmnyt szolgltassa a megjelent komponensek, az MSHFlexGrid vezrl elem DataMember tulajdonsgban kell megadni a megfelel Command objektum nevvel (a pldnkban most csak egyet hoztunk ltre, a Command1-et).

7.10. bra Az MSHFlexGrid vezrl beptse

Ezek utn lltsuk t a MSHFlexGrid vezrl elem FixedCols tulajdonsgnak rtkt 1-r l 0-ra (eltntetve ezzel a tblzat sorai el tt megjelen szrke oszlopot, amelyben pldul a sorszmokat jelenthetnnk meg)! Az AllowUserResizing tulajdonsg rtke pedig legyen 2 (engedlyezve a felhasznlnak a tblzatsorok tmretezst). Az alkalmazst elindtva az adatrcsban megjelennek az adattbla sorai (7.11. bra).
7.] Lbra Az MSHFlexGrid adatai

Ha az egsz adattbla helyett csak egy SQL-lekrdezs segtsgvel sszelltott rszre van szksgnk, akkor a Commandl tulajdonsgai prbeszdablak General lapjn a Database Object helyett hasznljuk az SQL Statement szvegmez t, ahova berhatjuk a megfelel SQL-utastst! (Az utastst az SQL Builder - SQL-szerkeszt segtsgvel is sszellthatjuk). (A lekrdezs eredmnyt a 7.12. brn lthatjuk.) Ahogy mr korbban is emltettk, a Visual Basic rendszerben tallunk mg egy nagyon knyelmes eszkzt az adatkezels megknnytsre - a DataView ablakot (View I Data View Window). Ebben az ablakban j adatkapcsolatokat (DataLinks) hozhatunk ltre, kattintva az eszkzsor Add New Data Link gombjn, s megismtelve a mr bemutatott adatbzis-kapcsolat ltestsi lpseket. Az elemek egyszer thzssal tvihet k a DataEnvironment ablakba, elksztve ezzel egy jabb lekrdezsi utastst.

7.12. bra Az SQL lekrdezs hasznlata

A pldnkban hozzunk ltre egy jabb kapcsolatot a Microsoft Jet 4.0 OLE DB Provider szolgltatn keresztl a C:\Program Files\Microsoft Visual Studio\ VB98\ NWIND.MDB adatbzissal! Majd hzzuk t a Data View ablakbl a Customers tblt (a DataEnvironment ablakba), s lltsuk t a MSHFlexGrid vezrl elem DataMember tulajdonsgt Commandl-rl Customers-re, majd indtsuk el ismt az alkalmazst! Abban az esetben, ha nincs szksgnk arra, hogy a lekrdezs eredmnye tblzatos formban jelenjen meg, a DataEnvironment ablakbl egyszer en thzhatjuk az rlapra a szksges tblzatmez ket. Ekkor az rlapon automatikusan ltrejn a Label s Text vezrl pros a mez nv s az rtk megjelentsre. A Text vezrl elem DataSource, DataMember s DataField (adatmez ) tulajdonsgai ilyenkor automatikusan felveszik a kapcsolatot ler rtkeket.

7.13. bra A DataView hasznlata

7.3.2.2. Adatkezels azADOdc vezrl elem felhasznlsval Az albbiakban bemutatsra kerl megolds a Visual Basic 6 Enterprise s Professional verziiban egyarnt rendelkezsnkre ll. Az adatbzissal az Adodc {Microsoft ADO Data Control 6.0) vezrl elem segtsgvel is ltesthetnk kapcsolatot. Ebben az esetben a kapcsolatot a vezrl elem ConnectionString tulajdonsgn keresztl kell lernunk a mr megismert prbeszdablak lapjainak felhasznlsval. A RecordSource tulajdonsg segtsgvel pedig meg kell adni a lekrdez utastst (egy teljes adattblt krnk-e, vagy pedig egy SQL-utasts vgrehajtst stb.)

7.14. bra Az ADOdc hasznlata

Az rlapon elhelyezett adatmegjelent komponensek (pldul Text) DataSource tulajdonsgban meg kell adni az Adodc vezrl elem nevt, a DataField tulajdonsgban pedig a megjelentend adatmez t.

7.15. bra A megjelent vezrl k tulajdonsgai

Az adatkezel alkalmazsunk ksztst gy is elkezdhetjk, hogy a szabvnyos EXE project helyett az a adatprojektet (File I New Project I Data Project) vlasztjuk, gy az rlapon kvl a kszl alkalmazsunk rszt kpezi egy DataEnvironment s egy beszmol ksztsre szolgl DataReport objektum is (a beszmolk ksztsr l kln alfejezetben szlunk):

7.76. bra A Data project ablaka

3.7.3.3. Adatelrs az ADODB.Recordset objektum segtsgvel Vgl ismerkedjnk meg a Recordset objektum hasznlatval! A Recordset objektum az adatlekrdezs eredmnyt tartalmazza (az sszes sort - rows, s az sszes mez t -fields), de azon bell egy id ben mindig csak egy rekordra (egy sorra) mutat. A Recordset objektum viselkedse er sen fgg attl, hogy milyen adatszolgltatn keresztl, illetve milyen krnyezetb l (gyfl, szerver, Internet Explorer stb.) rjk el az adatbzist. Bizonyos esetekben a Recordset objektum bizonyos metdusai nem m kdnek. (A Recordset nhny metdusa: MoveFirst, MoveLast, MoveNext, MovePrevious, AddNew, Update, Delete, UpdateBatch.) A Recordset objektum ltrehozshoz vagy az ADOR.Recordset (Microsoft Internet Explorer-re\ egytt kerl a rendszerbe), vagy pedig az ADODB.Recordset (ADO-val egytt kerl a rendszerbe) osztlyokat hasznlhatjuk. Az objektum hasznlatnak megismerse rdekben helyezznk el az rlapon egy MSFlexGrid vezrl elemet, s adjuk meg a kvetkez sorokat a Form betltsekor vgrehajtd esemnykezel eljrsban!

7.17. bra A Recordset objektum hasznlata

Private Sub Form_Load() Dim db_file As String Dim statement As String Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim c As Integer Dim r As Integer Dim col_wid() As Single Dim field_wid As Single ' Adatbzis-fjlnv megadsa db_file = App.Path If Right$(db_file, 1) <> "\" Then db_file = db_file & db file = db_file & "books.mdb"

' Kapcsolat-objektum ltrehozsa s a kapcsolat megnyitsa Set conn = New ADODB.Connection conn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & db_file & ";" & _ "Persist Security Info=False" conn.Open ' Az SQL lekrdezs sszelltsa statement = "SELECT * FROM Books ORDER BY Title" ' A lekrdezsi parancs vgrehajtsa, azaz ' a Recordset objektum ltrehozsa Set rs = conn.Execute(statement, , adCmdText) ' A MSFlexGrid objektum sorainak s oszlopainak a szma MSFlexGridl.Rows = 2 MSFlexGridl.FixedRows = 1 MSFlexGridl.FixedCols = 0 ' Az oszlopok megcmezse MSFlexGridl.Rows = 1 MSFlexGridl.Cols = rs.Fields.Count ReDim col_wid(0 To rs.Fields.Count - 1) For c = 0 To rs.Fields.Count - 1 MSFlexGridl.TextMatrix(0, c) = rs.Fields(c).Name col_wid(c) = TextWidth(rs.Fields(c).Name) Next c ' A sorok rtkeinek a megjelentse r = 1 Do While Not rs.EOF MSFlexGridl.Rows = MSFlexGridl.Rows + 1 For c = 0 To rs.Fields.Count - 1 MSFlexGridl.TextMatrix(r, c) = rs.Fields(c).Value ' Oszlopszlessg-tszmts field_wid = TextWidth(rs.Fields(c).Value) If col_wid(c) < field_wid Then col_wid(c) = field_wid Next c rs.MoveNext r = r + 1 Loop ' A Recordset, illetve a kapcsolat lezrsa rs.Close conn.Close ' Oszlopszlessg igaztsa For c = 0 To MSFlexGridl.Cols - 1 MSFlexGridl.ColWidth(c) = col_wid(c) + 240 Next c End Sub

A fenti programot az ADOFLEXGRID aknyvtar tartalmazza.

7.3.3. Adatbzis-kezels hagyomnyos" (nem ADO-alap) vezrl elemekkel Az adatbzis-kezel alkalmazsok tervezsekor kiindulhatunk mr meglv adatbzisbl, vagy j adatbzist is kszthetnk. Az adattblkat a Visual Data Manager alkalmazst hasznlva (Add-Ins I Visual Data Manager) hozhatjuk ltre, s tlthetjk fel adatokkal. A fejezet tovbbi feladataiban hasznlt adatbzisok a megolds knyvtrnak ADATOK alknyvtrban helyezkednek el, amelyre a programbl a kvetkez kppen hivatkozhatunk:
App.Path & "\..\ADATOK".

A szabadon hasznlhat programok adatbzist kt formtumban is megadtuk. A PROGRAM.MDB llomny az Access, a DBProg knyvtr pedig a Dbase vltozatot tartalmazza. A 7.18 brn a PROGRAM. MDB adatbzis Gy jtemny tbljnak szerkezete tanulmnyozhat.

7.7S. bra A PROGRAM.MDB Gy jtemny tblja

7.3.3.1. A Data vezrl elem A Data vezrl elem - hasonlan az ADO esetben hasznlt ADO Data Control-hoz kapcsolatot teremt a szoksos vezrl elemek s az adatbzis adattblja kztt, de csak a Microsoft Jet vagy az ODBCDirect adatforrsok esetn. Az rlapra helyezve az adatvezrl t, egy gombsort kapunk:

7.79. bra A Data vezrl gombsora

A gombok felhasznlsval az adattblban mozoghatunk, kijellve ezzel az aktulis rekordot. Az egyes gombok jelentst, a gombnyomsnak megfelel mveletet - angol nevvel egytt - az albbi tblzatban foglaltuk ssze:
MoveFirst MovePrevious MoveNext MoveLast pozicionls az adattbla els rekordjra, pozicionls az adattbla el z rekordjra, pozicionls az adattbla kvetkez rekordjra, pozicionls az adattbla utols rekordjra.

Az adatvezrl s az adatbzis sszerendelse az albbi tulajdonsgok felhasznlsval valsthat meg: DatabaseName Az elrni kvnt adatbzis neve, ami lehet knyvtrnv (Dbase adatbzis esetn), vagy fjlnv (Access adatbzisoknl). Az adatbzis nevt a fejleszts alatt s a program futsa sorn egyarnt bellthatjuk. Connect Az elrni kvnt adatbzis tpust definilja {Access, Excel, FoxPro, Lotus, Paradox, Text stb. alaprtke Access). RecordSource A rekordforrs tulajdonsg egy adattblt rendel az adatvezrl hz. Mr emltettk, hogy egy adatvezrl vel egyszerre csak egy adattblt kezelhetnk. A kezelt adattbla lehet egy adatbzis fizikai adattblja, de lehet akr egy SQL-lekrdezs eredmnyeknt keletkezett tbla is. RecordsetType A rekordkszlet tpust adhatjuk meg a tulajdonsg segtsgvel. A lehetsges rtkeket az albbi tblzat tartalmazza:
Konstans vbRSTypeTable vbRSTypeDynaset vbRSTypeSnapshot rtk 0 12 Tpus adattbla tpus, dinamikus tpus (alaprtelmezs), pillanatfelvtel tpus.

A tbla tpus Recordset objektumok az adatbzistblk programkdbeli megjelensi formi. Segtsgkkel az adatbzis kijellt adattbljnak rekord jait mdosthatjuk, trlhetjk, s j rekordokat vihetnk fel. A dinamikus tpus Recordset objektumok olyan, egy vagy tbb adatbzis tblbl ltrehozott - lekrdezs-eredmnyhalmazok, amelyekben lehet sg van a rekordok megvltoztatsra, trlsre s j rekordok felvitelre. Ms felhasznlk ltal az alaptblkban vgzett mdostsok (szerkeszts, trls, j rekord felvitele) szintn megjelennek a dinamikus rekordkszletben. A pillanatfelvtel tpus Recordset objektumok rekordkszlet-msolatot tar talmaznak, melyet adatkeressre s jelentsek ksztshez hasznlhatunk. Egyszerre tbb tblbl is tartalmazhatnak adatokat, de az adatokat nem lehet frissteni.

A ReadOnly tulajdonsgnak igaz rtket adva, a rekordok csak olvashatk lesznek. A Caption tulajdonsggal a vezrl gombok kztt megjelen feliratot adhatjuk meg. A pldaadatbzisok elrshez a tulajdonsgrtkeket programbl is bellthatjuk:
With Datl .DatabaseName = App.Path & "\..\Adatok\program.mdb" .RecordSource = "Gy jtemny" .RecordsetType = vbRSTypeDynaset .Connect = "Access" .Caption = "Programgy jtemny" .ReadOnly = False End With With Datl .DatabaseName = App.Path & "\..\Adatok\DBProg" .RecordSource = "SELECT Fjlnv, Mret " & _ "FROM Program WHERE Mret < 65536" .RecordsetType = vbRSTypeSnapShot .Connect = "DBase III" .Caption = "Programok" End With

7.3.3.2. Az adatkapcsolt vezrl k hasznlata Az adatkapcsolt vezrl k - bizonyos tulajdonsgok belltsa utn - kzvetlenl az aktulis adatbzisrekorddal kerlnek kapcsolatba. Ha az ilyen vezrl rtke megvltozik, akkor rekordvltskor a megvltozott adat az adatbzisba is bekerl. Az adatkapcsolshoz hasznlt jellemz k:
DataSource DataField DataChanged Annak az adatforrs-vezrl nek a nevt tartalmazza, melynek rekordkszletvel a vezrl kapcsolatban ll. Annak az adatmez nek a neve, amellyel ltrejn a kzvetlen kapcsolat. A tulajdonsg True rtkkel jelzi, ha a vezrl ben trolt rtk klnbzik az adatrekordban trolt rtkt l. (A tulajdonsg rtke szksg esetn be is llthat.)

A vezrl k tbbsge rendelkezik a fenti hrom tulajdonsggal (CheckBox, ComboBox, DBCombo, DBGrid, DBList, Image, Label, ListBox, Masked Edit, PictureBox, ProgressBar, RichTextBox.) Az adatforrs-vezrl s az adatkapcsolt vezrl k segtsgvel egyetlen programsor megrsa nlkl is kszthetnk adatbzis-kezel alkalmazsokat. Hrom adatkapcsolt ActiveX-vezrl lehet sgeit kln is megvizsgljuk. A DBGrid vezrl ben az adatrekordok egy tblzat soraiban jelenthet k meg. A DBGrid vezrl elem DataSource tulajdonsga kijelli azt az adatforrsvezrl t, melynek tbljt a DBGrid megjelenti.
7 . 2 0. bra A DBGrid

A DBCombo s a DBList vezrl k az adattbla egy-egy oszlopnak trolsra hasznlhatk. A DBList s a DBCombo (Dblist32.ocx) vezrl k kt egymssal relciban ll adattbla (adatforrs: DataSource s RowSource) alapjn jelenti meg a ListField tulajdonsgban definilt adatoszlopot. A kt tbla kapcsolata a DataField s a BoundColumn mez kn keresztl valsul meg. A Selectedltem tulajdonsg a listbl kivlasztott mez rtket tartalmazza, mg a kapcsolt adat a BoundText tulajdonsgbl tudhat meg. (Az adatforrsra hivatkoz tulajdonsgokat mindhrom vezrl nl a fejleszts sorn kell belltanunk.) Az albbi pldban (DBGRCB) a PROGRAM.MDB adatbzis Gy jtemny tbljhoz kt vezrl elemet kapcsoltunk. Egy DBCombo vezrl ben a fjlneveket jelentjk meg, melyekhez kapcsolt knyvtrnv alapjn frisstjk a DBGrid vezrl elem tartalmt.

7.21. bra Kapcsolt vezrl k

Az alkalmazs m kdshez szksges belltsok egy rszt a fejleszts folyamn kell megadnunk, mg a tbbir l az rlap betltsekor is gondoskodhatunk:
Private Sub Form_Load() With Data1 .DatabaseName = App.Path & "\..\Adatok\program.mdb" .RecordSource = "Gy jtemny" .RecordsetType = 2 .Connect = "Access" .Caption = "Programok" End With With Data2 .DatabaseName = App.Path & "\..\Adatok\program.mdb" .RecordSource = "Gy jtemny" .RecordsetType = 1 .Connect = "Access" .Caption = "Informci" End With A fejleszts sorn belltott tulajdonsgok ' DBGridl.DataSource <= Datal ' DBCombol.DataSource <= Datal ' DBCombol.RowSource <= Data2 DBCombol.DataField = "Knyvtr" DBCombol.BoundColumn = "Knyvtr" DBCombol.ListField = "Fjlnv" End Sub

Az adatkapcsolt kombinlt listban trtnt vltozst jelz esemnykezel eljrsban frisstjk a vezrl k tartalmt:
Private Sub DBCombol_Click(Area As Integer) Dim sgl As String sql = "Select Fjlnv, Knyvtr from Gy jtemny WHERE " & _ "Gy jtemny.Knyvtr = " & Chr(34) & DBCombol.BoundText & __ Chr(34) Datal.RecordSource = sql Datal.Refresh Data2.Refresh End Sub

7.3.4. A Data Form Wizard hasznlata Az adat rlap-varzsl segtsgvel egyszer en llthatunk el adatok bevitelre s mdostsra hasznlhat prbeszdablakokat. A varzslt a Visual Basic Project I Add From menpontjn val kattints utn megjelen ablakbl vlaszthatjuk ki.

Az indts utn a Next> nyomgombbal lpkedve, vgig kell haladnunk a megjelen ablakokon. El szr az adatbzis tpust kell kivlasztanunk:

7.22. bra Az, adatbzis tpusa

A kvetkez lpsben megadjuk az adatbzisunkat:

7.23. bra Az adatbzis megadsa

Ezt kvet en egyrszt meg kell adni az ltrejv rlap feliratt, msrszt pedig ki kell vlasztani az adatbzis- rlap tpust (egyrekordos, tblzatos, sszetett, mester-rszletes, HFlexGrid-ve pl , illetve grafikonos). Ugyancsak itt definilhatjuk az adatelrs (adatkts) tpust is (ADO Data Control, ADO Code s Data Class lehet sg):

7.24. bra Az adatbzis rlap tpusa

A kvetkez lpsben - az adatforrs megadsa utn - kijellhetjk azokat a mez ket, amelyeket fel akarunk tenni az rlapra. Megmondhatjuk tovbb, hogy melyik mez szerint legyenek rendezettek a rekordok, s a mez k sorrendjt is definilhatjuk:

7.25. bra Mez vlaszts

A kvetkez prbeszdablakokban meg kell adni az rlapon megjelen vezrl ket s azoknak a fontosabb tulajdonsgait. (A komponensek szma s a kinzete eltr lesz a kivlasztott rlaptpustl fgg en.) Az utols prbeszdablakban a Finish gombon kattintva elkszl az alkalmazsunk rlapja, melynek lehetsges vltozatait a 7.27. brn lthatjuk.

7.26. bra Vezrl k az rlapon

Egyrekordos rlap

HFlexGrid-es rlap
7.27. bra Klnbz rlaptpusok

Grafikonos rlap

A adat rlap-varzsl segtsgvel elksztett rlapokat egyetlen alkalmazss ptettk ssze, melyet a DBFWIZ alknyvtrban troltunk Az rlapra utlag felhelyezett parancsgombok gyakran hasznlt feladatokat ltnak el:
' Add - j rekod hozzadsa Private Sub cmdAdd_Click() datPrimaryRS.Recordset.AddNew End Sub ' Dele te - az aktulis rekord trlse Private Sub cmdDelete_Click() With datPrimaryRS.Recordset .Delete .MoveNext If .EOF Then .MoveLast End With End Sub 1 Refresh - az adatbzis jranyitsa Private Sub cmdRefresh_Click() 1 Csak tbbfelhasznls alkalmazsokban van r szksg datPrimaryRS.Refresh End Sub ' Update - az adattbla frisstse Private Sub cmdUpdate_Click() datPrimaryRS.UpdateRecord datPrimaryRS.Recordset.Bookmark = datPrimaryRS.Recordset.LastModified End Sub ' Close - a form lezrsa Private Sub cmdClose_Click() Screen.MousePointer = vbDefault Unload Me End Sub

Az adatvezrl Validate (rvnyests) esemnynek kezel jben jvhagyhatjuk az egyes adatbzis-m veleteket:
Private Sub datPrimaryRS_Validate(Action As Integer, Save As Integer) Select Case Action Case vbDataActionMoveFirst Case vbDataActionMovePrevious Case vbDataActionMoveNext Case vbDataActionMoveLast Case vbDataActionAddNew Case vbDataActionUpdate Case vbDataActionDelete Case vbDataActionFind Case vbDataActionBookmark Case vbDataActionClose Screen.MousePointer = vbDefault End Select Screen.MousePointer = vbHourglass End Sub

A varzsl ltal ksztett alkalmazsokb] is jl ltszik, hogy az adatmveletek tbbsgt az adatvezrl Recordset tulajdonsgn keresztl vgezzk. A Recordset egy DAO-objektum, amelyet hasznlva az adatvezrl nlkl is kszthetnk adatbzis-kezel alkalmazsokat. Pldaknt ksztsnk kezel i felletet a PROGRAM.MDB adatbzishoz, az adat rlapvarzsl hasznlata nlkl! A feladat megoldsa a DB1 alknyvtrban tallhat. A megoldsba a szoksos adatbzism veleteken tlmen en egy egyszer keresst is beptettnk.

7.28. bra A plda megjelense

Az rlap betltsekor gondoskodunk az adatvezrl s az llapotsor inicializlsrl:


Private Sub Form_Load() ' az adatvezrl szne datAdat.BackColor = RGB(192, 192, 192) ' az adatbzis helynek megadsa datAdat.DatabaseName = App.Path & "\..\Adatok\program.mdb" 1 az adattbla kijellse datAdat.RecordSource = "Gy jtemny" ' dinamikus adatkszletet hasznlunk datAdat.RecordsetType = vbRSTypeDynaset datAdat.Refresh ' A Recordset feltltse datAdat.Recordset.MoveLast datAdat.Recordset.MoveFirst ' az llapotsor inicializlsa sbllapotsor.Panels(1).Text = "Adatbzis: " & _ UCase("Adatbzis.mdb") 1 tiltjuk a Frissts gombot cmdM velet(3).Enabled = False End Sub

Ha brmelyik szvegmez tartalma megvltozik, engedlyezzk a Frissts parancsgomb hasznlatt:


Private Sub txtAdatmez _Change(Index As Integer) cmdM velet(3).Enabled = True End Sub

Az aktulis rekord pozcijnak megvltozsakor kijelezzk az j pozcit:


Private Sub datAdat_Reposition() Dim s As String With datAdat.Recordset s = Trim(CStr(.AbsolutePosition + 1)) & "/" & _ Trim(CStr(.RecordCount)) sbllapotsor.Panels(2).Text = " Rekord: " & s End With End Sub

A parancsgombokat tmbbe szerveztk, gy a gombnyoms esemnyhez egyetlen esemnykezel eljrs tartozik:


Private Sub cmdM velet_Click(Index As Integer) Dim s As String, re As Long, ap As Long On Error Resume Next With datAdat.Recordset ap = .AbsolutePosition re = .RecordCount Select Case Index Case 0: ' fjlnv keresse Dim fn As String fn = InputBox("Krem a nvrszletet:") datAdat.Recordset.MoveFirst datAdat.Recordset.FindFirst "Fjlnv lik '" & fn & "*'" Case 1: ' j res rekord hozzadsa .AddNew ' a dtumot mi rjuk be txtAdatmez (4).Text = CStr(Date) txtAdatmez (1).SetFocus ' engedlyezzk a frissts gombot cmdM velet(3).Enabled = True .MoveLast ' ugrs az utols rekordra Case 2: .Edit ' az aktulis rekord mdostsa txtAdatmez (1).SetFocus ' engedlyezzk a Frissts gombot cmdM velet(3).Enabled = True Case 3: .UpdateRecord ' a mdostott rekord felrsa az ' adattblba ' tiltjuk a Frissts gombot cmdM velet(3).Enabled = False

Case 4: .Delete ' az aktulis rekord trlse If ap + 1 <> re Then .MoveNext ' ugrs a kvetkez rekordra Else .MoveLast ' ugrs az utols rekordra End If End Select 1 az aktulis rekord sorszmnak kijelzse s = Trim(CStr(.AbsolutePosition + 1)) & "/" & _ Trim(CStr(.RecordCount)) sbllapotsor.Panels(2).Text = " Rekord: " & s End With End Sub

7.3.5. A DataReport jelentskszt hasznlata Az adatfeldolgozsi folyamat fontos rsze az adatokbl nyert informcik ttekinthet , dokumentlhat formban trtn megjelentse. A Visual Basic rendszernek rsze a DataReport vizulis jelentstervez , melynek segtsgvel gyorsan kszthetnk szveges-, illetve grafikont tartalmaz beszmolkat. A beszmol ksztse a Project I Add Data Report menpont kivlasztsval indthat el. Indts utn megjelenik a projekthez hozzadott jelentstervez ablaka.

7.29. bra A DataReport fellete

A jelentstervez ablakban lthat 5 sv rendeltetse a kvetkez :


Report Header Page Header Details Page Footer Report Footer A beszmol cme (csak egyszer jelenik meg a beszmol legelejn). A beszmol fejlce (minden oldalon lthat, kivve az els oldalt). Az adatbzisbl kiolvasott adatok megjelentsre szolgl sv. A beszmol lbjegyzete (minden oldalon lthat). A beszmol vgn egyszer megjelen rsz.

A jelentstervez projekthez val hozzadst kvet en az eszkzpaletta (ToolBox) j, DataReport panellel b vl, amely tartalmazza a beszmol rlapjn elhelyezhet vezrl elemeket. A RptLabel, RptTextBox, Rptlmage, RptLine s a RptShape vezrl elemek rendeltetse megegyezik a hasonl nev szabvnyos vezrl elemekvel. jdonsgnak - a General panelen tallhat objektumokhoz kpest - a RptFunction vezrl elem szmt, amelynek segtsgvel a beszmolban szmtsok eredmnye is elhelyezhet . A DataReport hasznlatnak megismershez a Visual Basic Enterprise verzijban ksztsnk egy j projektet (File I New Project I Standart EXE)\ A Project \ References prbeszdablakon keresztl jelljk be & Microsoft ActiveX Data Objects 2.x Library-ra val hivatkozst. Adjuk hozz a projekthez a jelentstervez t (Project I Add Data Report) a Visual Data Manager (Add-Ins men) segtsgvel, hozzunk ltre egy j Access adatbzist, s mentsk el a DataReport.MDB nven. Az adatbzis egyetlen tblPeople tbljnak szerkezete:
Mez nv ID FirstName LastName Age City Tpus AutoNumber (PRIMARY KEY) Text Text Integer Text Hossz 15 15 15

Az adatbzist tltsk fel adatokkal s mentsk el DataReport.mdb nven! Ezek utn a jelentstervez ben a Report Header svon helyezznk el kt RptLabel vezrl elemet! Az egyiknek a Caption tulajdonsgt lltsuk be az letkor szerinti lekrdezs eredmnye" szvegre, a msiknak a Name tulajdonsgt pedig iblRHeader-re, majd formzzuk a vezrl elemeket az Alignment, a ForeColor, a Font stb. tulajdonsgok segtsgvel!

A PageHeader svban hasonl mdon helyezznk el 3 darab RptLabel vezrl elemet a tblzat oszlopainak a feliratozsra, a Details svban pedig 4 darab RptTextBox vezrl elemet a lekrdezett adatok megjelentsre! A RptTextBox vezrl elemek DataField tulajdonsgban gpeljk be a megfelel tblzatmez nevt (sorban LastName, FirstName, Age s City)\ A tblzat fejlct hzzuk al" egy a PageHeader svban elhelyezett RptShape vezrl elemmel (Height - 45, BackColor - vbBlack, BorderStyle - rptBSSolid)\ A PageFooter svra nem lesz szksgnk, ezrt kapcsoljuk ki a megjelentst a Visible tulajdonsg False-ra val tlltsval! A ReportFooter svon pedig helyezznk el egy Tallatok szma:" felirat RptLabel s egy RptFunction vezrl elemet! Az RptFunction vezrl elem FunctionType tulajdonsga megadja azt a fggvnyt, amelyet a vezrl elem a DataField tulajdonsg segtsgvel megadott adatmez rtkeire alkalmaz:
A FunctionType lehetsges rtkei 0 - rptFuncSum I - rptFuncAve 2 - rptFuncMin 3 - rptFuncMax 4 - rptFuncRCnt 5 - rptFuncVCnt 6 - rptFuncSDEV 7 - rptFuncSERR Lers sszeg tlag A legkisebb rtk A legnagyobb rtk A lekrdezsre visszaadott sorok szma Nulltl eltr rtkek szma Standard eloszls Standard hiba

A pldnkban lltsuk be a RptFunction vezrl elem FunctionType tulajdonsgt 4re, a DataField tulajdonsg rtkt pedig *-ra. Ezek utn helyezzk el az alkalmazsunk rlapjn a jobb oldali brn lthat vezrl elemeket, lltsuk be a lekrdezsi tartomny hatrait megad szvegmez k Name tulajdonsgt txtForm s txtTo-ra! Ezt kvet en a Beszmol megjelents" felirat gombra kattintva adjuk meg az esemnykezel ben az albbi sorokat!
Private Sub cmdShowReport_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "C:\ DataReport.mdb" .Open End With

With rs .ActiveConnection = cn .LockType = adLockReadOnly .CursorType = adOpenDynamic 'SQL-lekrdezs sszelltsa: .Source = "SELECT * FROM tblPeople WHERE Age>=" & _ txtFrom & " AND Age<=" & txtTo & " ORDER BY ID ASC" .Open End With 'kapcsolat ltrehozsa a DataReport s az adatszolgltat kztt Set DataReportl.DataSource = rs 'a beszmol fejlcben megjelen felirat DataReportl.Sections("Section4").Controls("lblRHeader").Caption _ = txtFrom & " vesekt l " & txtTo & " vesekig" 'a beszmol megjelentse DataReportl.Show 1 'a Recordset s a Connection objektumok megszntetse Set rs = Nothing Set cn = Nothing End Sub

7.30. bra A lekrdezs a DataReport felletn

A ksz jelentst programfuts sorn kinyomtathatjuk a Print illetve elmenthetjk HTML vagy TXT formtumban az Export gvel.

gombon kattintva, gomb segts-

7.31. bra Az exportlt jelents

7.3.6. Az DAO objektummodell alkalmazsa A DAO {Data Access Objects) lehet v teszi, hogy a Visual Basic programozsi nyelvet hasznlva hozzfrjnk helyi s tvoli adatbzisokban trolt adatokhoz. A DAO objektumok biztostjk az adatbzis objektumainak valamint szerkezetnek ltrehozst, mdostst s kezelst. A DAO-objektumok s -gy jtemnyek az adatbziselemek jellemz it ler tulajdonsgokkal s a tulajdonsgok kezelsre hasznlhat metdusokkal rendelkeznek. A Microsoft Jet adatbzismotor munkaterben elhelyezked objektumok s gy jtemnyek egyttesen alkotjk az adatbzis-szerkezet hierarchikus modelljt (a DAO objektummodell). A Visual Basic programbl az adatbzisokat ezen modell segtsgvel kezeljk. A hierarchia nhny fontosabb elemt a kvetkez tblzat tartalmazza:

Gy jtemny Databases Fields Indexes QueryDefs Recordsets Relations TableDefs Workspaces

Objektum Database DBEngine Field Index QueryDef Recordset Relation TableDef Workspace

Lers Megnyitott adatbzis. A Microsoft Jet adatbzismotor. Egy oszlop az adattblban, a lekrdezsben stb. Index. Trolt lekrdezs-definci. Az alaptbla vagy a lekrdezs rekordjai. A tblk s lekrdezsek mez i kztti kapcsolat. Elmentett tbladefinci. A Microsoft Jet adatbzis-motor munkatere.

Pldaknt ksztsnk alkalmazst a PROGRAM.MDB adatbzis VisualBasic nak adatvezrl nlkli felolvassra! A feladat megoldst a DBVIEW alkalmazs tartalmazza.

7.32. bra Adattblk adatvezrl k nlkl

Az adatokat ktflekppen olvassuk fel, bemutatva a mez hivatkozsok megadsi mdjait. A bal oldali parancsgomb esemnykezel eljrsban ltrehozzuk, hasznljuk majd megszntetjk a DAO-objektumokat:
Private Sub cmdBal_Click() ' DAO objektumok deklarcija Dim wrkJet As Workspace Dim Dbase As Database Dim RcSetl As Recordset

' DAO objektumpdnyok ltrehozsa Set wrkJet = CreateWorkspace("", "adrain", "", dbUseJet) Set Dbase = wrkJet.OpenDatabase(App.Path & _ "\..\adatok\program.mdb") Set RcSetl = Dbase.OpenRecordset("Visualbasic", _ dbOpenDynaset, dbReadOnly) Az adattbla rekordjainak felolvassa Listl.Clear Do While Not RcSetl.EOF Listl.Addltem Format(RcSetl(1), "!@@@@@@@@@@@@ ")&Chr$(9) _ & Format(RcSetl.Mret, "##########") & Chr$(9) & Chr$(9) & Format(RcSetl!Dtum, "yyyy.mm.dd.") RcSetl.MoveNext LOOP ' A DAO objektumok lezrsa. Set wrkJet = Nothing Set Dbase = Nothing Set RcSetl = Nothing End Sub
1

A jobb oldali parancsgomb m kdse sokban hasonlt a bal oldali gomb m kdsre:
Private Sub cmdJobb_Click()
1

DAO objektumok deklarcija Dim wrkJet As Workspace Dim Dbase As Database Dim RcSet2 As Recordset ' DAO objektumpdnyok ltrehozsa Set wrkJet = CreateWorkspace("", "admin", " " , dbUseJet) Set Dbase = wrkJet.OpenDatabase(App.Path & _ "\..\adatok\program.mdb") Set RcSet2 = Dbase.OpenRecordset( _ "SELECT * FROM VisualBasic WHERE [Mret]<99999 ORDER" & _ " by [Dtum]", dbOpenDynaset, dbReadOnly) 1 Az adattbla rekordjanak felolvassa Listl.Clear Do While Not RcSet2.E0F Listl.Addltem Format(RcSet2(1), "!@@@@@@@@@@@(a ")&chr$(9) & Format(RcSet2.Fields("Mret"), "##########") &_ Chr$(9) & Chr$(9) & Format(RcSet2("Dtum"), _ "yyyy.mm.dd.") RcSet2.MoveNext Loop

A DAO objektumok lezrsa RcSet2.Close Dbase.Close wrkJet.Close End Sub

Msik pldaknt ksztsnk alkalmazst, amely DAO-objektumok felhasznlsval adatbzist hoz ltre! A feladat megoldst a DBCREATE.VBP projekt tartalmazza, a DBCRUSE alknyvtrban. Ugyancsak itt tallhat - az elksztett adatbzist tesztel - DBUSE.VBP program is. A DBCREATE alkalmazs f ablaka csak parancsgombokat tartalmaz (7.33. bra). A form modulszint vltozi:
Dim dbNv As String Dim wrkDefault As Workspace

7.33. bra Adatbziskezels DAO-val

Egyetlen adattblt tartalmaz j adatbzis ltrehozsa:


Private Sub Adatbzis_Click() Dim dbnew As Database Dim tdNew As New TableDef ' Egy j adattbla Dim IxNew As New Index ' Egy j indextbla ' Hrom j adatmez Dim fldl As New Field Dim fld2 As New Field Dim fld3 As New Field Set wrkDefault = DBEngine.Workspaces(0) ' Ellen rizzk, hogy ltezik-e az j adatbzis nevvel ' azonos nev fjl On Error Resume Next If Dir(dbNv) <> "" Then Kill dbNv ' Az j adatbzis ltrehozsa Set dbnew = wrkDefault.CreateDatabase(dbNv, dbLangGeneral, dbVersion3 0) If dbnew Is Nothing Then MsgBox " Az adatbzis nem jtt ltre!" Exit Sub End If If Err <> 0 Then MsgBox "Hiba: " & Err & "/" & Error(Err) End If

On. Error GoTo 0 1 Az adattbla ltrehozsa tdNew.Name = "ru" 1 1. mez fldl.Name = "Azonost" fldl.Type = dbLong tdNew.Fields.Append fldl ' 2. mez fld2.Name = "Megnevezs" fld2.Type = dbText fld2.Size = 30 tdNew.Fields.Append fld2 ' 3. mez fld3.Name = "Mennyisg" fld3.Type = dbLong tdNew.Fields.Append fld3 ' Indexels az Azonost alapjn IxNew.Name = "Azonost_Index" IxNew.Fields = "Azonost" IxNew.Primary = True tdNew.Indexes.Append IxNew ' Az adattbla objektum hozzadsa a Tabledefs kollekcihoz dbnew.TableDefs.Append tdNew dbnew.Close Set tdNew = Nothing Set IxNew = Nothing Set fldl = Nothing Set fld2 = Nothing Set fld3 = Nothing Adatbzis.Enabled = False End Sub

Az adatbzis b vtse j adattblval:


Private Sub Adattbla_Click() Set wrkDefault = DBEngine.Workspaces(0) Dim dbnew As Database Set dbnew = wrkDefault.OpenDatabase(dbNv, True)
1

Egy j adattbla Dim tdNew As New TableDef ' Egy j indextbla Dim IxNew As New Index ' Kt j adatmez Dim fldl As New Field Dim fld2 As New Field

A tbla neve tdNew.Name = "Termel " 1 1. mez fldl.Name = "Azonost" fldl.Type = dbLong tdNew.Fields.Append fldl ' 2. mez fld2.Name = "Cg" fld2.Type = dbText fld2.Size = 30 tdNew.Fields.Append fld2
1

Indexels az Azonost alapjn IxNew.Name = "Azonosit_Index" IxNew.Fields = "Azonost" IxNew.Primary = True tdNew.Indexes.Append IxNew ' A TblaDef objektum hozzadsa a Tabledefs kollekcihoz dbnew.TableDefs.Append tdNew dbnew.Close Set tdNew = Nothing Set IxNew = Nothing Set fldl = Nothing Set fld2 = Nothing Adattbla.Enabled = False End Sub

Egy rekord bersa az adatbzisba:


Private Sub Rekord_Click() Set wrkDefault = DBEngine.Workspaces(0) Dim dbnew As Database 'Az adatbzis megnyitsa Set dbnew = wrkDefault.OpenDatabase(dbNv, True) Dim rsRset As Recordset 'Az adattbla megnyitsa Set rsRset = dbnew.OpenRecordset("ru", dbOpenDynaset) ' j rekord felvitele rsRset.AddNew rsRset("Azonost") = "1" rsRset("Megnevezs") = "Alma" rsRset("Mennyisg") = "15" rsRset.Update rsRset.Close dbnew.Close Rekord.Enabled = False End Sub

A form betltsekor belltjuk az adatbzis elrsi tvonalt:


Private Sub Form_Load() dbNv = App.Path & "\Test.mdb" End Sub

Ha a fenti program sikeresen lefutott, akkor egy olyan Access adatbzis jtt ltre, amely kt adattblt tartalmaz, s ezek egyikben egy rekord is tallhat. Vgezetl nzzk meg az adatbzis tesztelst s kezelst vgz DBUSE alkalmazst! Az adatbzis mindkt tbljban az Azonost mez t hasznljuk a rekordok azonostsra, illetve bizonyos relcik megvalstsra. Ennek a mez nek a programban az x_ID vltozk felelnek meg.

7.34. bra Az adatbzis hasznlata

Az "j ru" felvitele menpont kivlasztsakor meghvd esemnykezel eljrsban megkeressk az els szabad azonostt, amelyet egy j rekordba tesznk. Ezt kvet en megkeressk az j rekordot, s aktuliss tesszk:

Private Sub cmdjru_Click() Dim D_ID As Integer If Data1.Recordset.RecordCount = 0 Then D_ID = 1 Else Do D_ID = D_ID + 1 Data1.Recordset.FindFirst "Azonost=" & D_ID Loop Until Data1.Recordset.NoMatch End If Data1.Recordset.AddNew Data1.Recordset.Fields("Azonost") = D_ID Data1.Recordset.Update Data1.Refresh Data1.Recordset.FindFirst "Azonost=" & D_ID Text2.SetFocus End Sub

j termel felvitele esetn az aktulis rurekord azonostjt hasznljuk a termel rekordjban is. A tovbbi lpsek megegyeznek az ru felvitelekor hasznltakkal:
Private Sub cmdjtermel _Click() Dim B_ID As Integer On Error Resume Next B_ID = Datl.Recordset.Fields("Azonost") Data2.Recordset.AddNew Data2.Recordset.Fields("Azonost") = B_ID Data2.Recordset.Update If Err = 0 Then Text5.SetFocus Data2.Refresh Data2.Recordset.FindFirst "Azonost=" & B_ID Else Beep Text2.SetFocus Data2.Recordset.MoveFirst End If End Sub

Az ruk sszmennyisge az rurekordok Mennyisg mez jnek sszegzst jelenti. Az sszegzst egy ciklusban vgezzk, amely a tbla minden rekordjn vgigfut.
Private Sub cmdsszesen_Click() On Error Resume Next Dim sum As Long sum = 0 Data1.Recordset.MoveFirst Do Until Data1.Recordset.EOF sum = sum + Data1.Recordset.Fields("Mennyisg") Data1.Recordset.MoveNext Loop Label3.Caption = sum Data1.Recordset.MoveFirst On Error GoTo 0 End Sub

Az ru trlse esetn az aktulis rurekordot trljk, majd a kvetkez rekordra pozcionlunk. A trlt rekord azonostjt hasznlva megnzzk, hogy a termel k kztt van-e ilyen azonostj bejegyzs. Ha tallunk ilyen rekordot, akkor azt is trljk.
Private Sub cmdruTrls_Click() Dim D_ID As Integer On Error Resume Next 'ru trlse D_ID = Data1.Recordset.Fields("Azonost") Datal.Recordset.Delete Datal.Recordset.MoveNext 'Utols rekord trlse If Datal.Recordset.EOF Then Datal.Recordset.MoveLast End If
1 Termel trlse Data2.Recordset.FindFirst "Azonost" & D_ID If Not Datal.Recordset.NoMatch Then Data2.Recordset.Delete Data2.Recordset.MoveNext ' Utols rekord trlse If Data2.Recordset.EOF Then Data2.Recordset.MoveLast End If End If End Sub

A termel trlse vlaszts esetn csak a termel rekordjt szntetjk meg:


Private Sub cmdTermel Trlse_Click() On Error Resume Next Data2.Recordset.Delete Data2.Recordset.MoveNext Az utols rekord trlse If Data2.Recordset.EOF Then Data2.Recordset.MoveLast End If End Sub
1

Az rlap betltsekor gondoskodunk az adatvezrl k inicializlsrl:


Private Sub Form_Load() On Error Resume Next Datal.DatabaseName = App.Path & "\test.mdb" Data2.DatabaseName = App.Path & "\test.mdb" Datl.Recordset.MoveLast A_ID = Datal.Recordset.Fields("Azonost") End Sub

8. Web-alkalmazsok fejlesztse
A vilg szmtgpes hlzatainak sszekapcsolsval ltrejtt Internet tbb funkcija kzl az egyik, hogy hozzfrst biztost a szmtgpeken trolt dokumentumokhoz (WWW - World Wide Web). Az elrni kvnt dokumentumokat a vilghlzat WWWkiszolglin specilis formban kell elhelyezni (HTML - HyperText Markup Language, hiperszveg-lernyelv). A HTML-dokumentumok megtekintshez valamilyen internetes gyflprogramot (webbngsz t) kell hasznlnunk. A Visual Basic rendszer ktfajta Internet-alkalmazs ksztst tmogatja: az IIS (Microsoft Internet Information Server) s aDHTML (Dynamic HTML) alapt. A webszerver oldalon fut IIS-alkalmazs az ASP (Active Server Pages) objektummodellre pl. Ez lehet v teszi a webszerver s a bngsz kztt cserlt adatok s a felhasznli folyamatok (session) kezelst. Az IIS-alkalmzasoknak a webszerver adja t a bngsz t l kapott krsekben trolt informcit, amelynek feldolgozsa sorn a Visual Basic program egy vlasz-karaktersorozatot llt ssze (n. dinamikusan sszelltott weboldalkdot), amelyet visszaad a webszervernek, illetve azon keresztl vgs sorban a bngsz nek. A webbngsz ltal megjelentett weboldalak (HTML-dokumentumok) nem csak statikus informcit trolnak, hanem n. parancsnyelven (script) programrszleteket is tartalmazhatnak, amelyeket a bngsz program futtatni kpes. A Microsoft Internet Explorer bngsz program ltal ismert" parancsnyelvek kzl az egyik a Visual Basic rszhalmaza, a VBScript. A VBScript lehet v teszi, hogy bizonyos HTMLelemek s weboldalba beptett ActiveX-vezrl k tulajdonsgait, metdusait elrjk, illetve esemnyeiket kezeljk. A Visual Basic segtsgvel ltrehozott DHTML alkalmazsok a HTML-dokumentumba beptett, s az Internet Explorer bngsz 4.0 vagy rgebbi verzii ltal is futtathat programkdok. Ezek az alkalmazsok a Dynamic HTML (DHTML) objektummodellt hasznljk a HTML-oldalon lv elemek kezelshez. A kt megemltett alkalmazstpuson kvl a Visual Basic olyan eszkzket is knl az Internet lehet sgeinek kiaknzsra, mint a WebBrowser vezrl elem, amelyet elhelyezve alkalmazsunk rlapjn HTML-oldalakat jelenthetnk meg, illetve az Interneten hasznlhat ActiveX-elemek ltrehozsa. Az ActiveX-elemek esetn egyarnt kszthetnk weboldalba bepthet objektumokat, amelyek m kdtetst a bngsz vgzi, illetve webszerver oldalon telepthet elemeket. A tovbbi lehet sgek kzl megemlthetjk mg a mr ismert ActiveX-kdkomponenseket s ActiveX-

Dokumentumokat, illetve az Internet Transfer s a WinSock vezrl elemeket is (a FTP, az FTP s a Gopher protokollok, illetve a UDP s a TCP protokollok hasznlathoz).
Megjegyzs: Az ActiveX-dokumentum fogalom egyszerre jell egy specilis formban elksztett dokumentumot s egy megjelentsi feladattal rendelkez ActiveXkomponenst. Az ActiveX-dokumentum nem kpes nll letre, a bngsz program m kdteti azt. Az OLE-automatizmus nagyon hasonlt az ActiveX-dokumentutnok bngsz ben val megjelenshez. Pldul, ha egy HTML-dokumentumbl egy Word-dokumentumra hivatkozunk, akkor a bngsz ben a regisztrlt WORD.EXE OLE-kiszolgl jelenti meg az informcit. Az ActiveX-Dokumentum projekt esetn a Visual Basic a Windows alkalmazsokhoz hasonl dokumentumot kszt vezrl kkel s menkkel, illetve egy EXE- vagy DLL-komponenst is ltrehoz, amely regisztrls utn alkalmas a dokumentum bngsz ben val megjelentsre.

8.1 Webbngsz alkalmazs ksztse


A hlzati alkalmazsok fejlesztse mindig felttelezi, hogy az adatokat szolgltat (server), illetve az adatokat megjelent (client) program elklnl egymstl, s ltalban klnbz gpeken futnak. A kt program kztti kapcsolatokat, illetve az tadott informci formjt az n. kommunikcis protokoll rja le. A webbngsz az Internet World Wide Web szolgltatsnak adatmegjelent eszkze. A webbngsz a hlzati kapcsolat gyfl (client) oldaln, azaz loklis gpen fut, s az esetek tbbsgben HTML-formtum szveges fjlokat kr le a kapcsolat kiszolgl oldaln (tvoli gpen) fut szerveralkalmazstl. A letlttt fjlokat a webbngsz megjelenti sajt a ablakban. A kt gp kztti kommunikci HTTPprotokoll szerint zajlik, HTTP-krsek (request) s vlaszok (response) formjban. Sajt webbngsz ltrehozshoz a WebBrowser vezrl elemre van szksgnk. A WebBrowser tulajdonsgain s metdusain keresztl a SHDOCVW.DLL-ben (Microsoft Shell Doc Object and Control Library) definilt, IWebBrowser2 nevet visel kapcsold felletet (interface) rhetjk el. gy a WebBrowser vezrl elemmel egy ActiveX-elemet kapcsolunk az alkalmazsunkhoz, amelyen keresztl kihasznlhatjuk az Internet Explorer 4-nl nem rgebbi verzik lehet sgeit. Egy egyszer webbngsz program rshoz indtsuk el az j alkalmazs ksztst (File I New Project I Standart EXE), s helyezznk el az rlapon egy WebBrowser vezrl elemet, amelyet el z leg felvettnk az eszkzpalettra! Helyezznk el az rlapon egy ComboBox s egy CommandButton vezrl elemet! A ComboBox vezrl elem Text tulajdonsgnak rtkt lltsuk be valamilyen URL-re (Universal Resource Locator, pldul http://www.computerbooks.hu/).

A Button vezrl elem Caption tulajdonsgt lltsuk Ugrs-ra! Kattintsunk dupln az Ugrs nyomgombon, s az esemnykezel be rjuk be a kvetkez sort:
WebBrowser1.Navigate Combol.Text

Indtsuk el az

alkalmazst, s kattintsunk az Ugrs nyomgombon! A WebBrowser objektum Navigate metdusa arra szolgl, hogy HTTP-protokollnak megfelel en elrjk s letltsk a paramterknt megadott URL ltal kijellt er forrst. Ha olyan forrs elrsre van szksgnk, amelynek lel helyt nem lehet URLalakban megadni, a Navigate2 metdust (a metdus URL paramternek tpusa: OleVariant) kell hasznlnunk. A Navigate s Navigate2 metdusokon kvl a WebBrowser tbb ms metdussal is rendelkezik, amelyeknek azonban csak egy rsze hvhat kzvetlenl az alkalmazsbl. Ezeket a kzvetlenl hvhat metdusokat az albbi tblzat tartalmazza:
Metdusok ExecWB Lers Egy Microsoft Automation objektum ltal rtelmezhet utasts vgrehajtsa (az utasts elrhet sgnek lekrdezsre a QueryStatusWB metdus hasznlhat). A megltogatott weboldalak listjban az aktulishoz kpest eggyel el bb ll weboldal betltse. A megltogatott weboldalak listjban kvetkez helyen ll weboldal betltse (ha egyszer sem lptk vissza a GoBack metdussal, a lista vgn llunk, gy nincs hov lpnnk a GoForward segtsgvel). A Registry HKEY_CURRENT_USERfrSoftwareWicrosoJNnternet ExplorerXMain szekcijban a StartPage kulcs alatt bejegyzett weboldal betltse (a Registry-be val bers akkor trtnik, ha pldul az Internet Explorer-ben kijelljk a kezd weboldalt). A Registry HKEY_CURRENT_USERS\Software\Microsoft\Internet Explorer\Man szekcijban a SearchPage kulcs alatt bejegyzett weboldal betltse. A megadott URL vagy tvonal ltal jellt er forrs elrse. A megadott er forrs elrse. Informci lekrse a webbngsz ltal tmogatott utastsokrl (lsd mg az ExecWB metdust). az aktulisan betlttt dokumentum frisstse (a metdus mindig a pragma:nocache cmsort kldi el) Az aktulisan betlttt dokumentum frisstse. A letlts, a keress, illetve a dinamikus elemek m kdsnek meglltsa.

GoBack GoForward

GoHome

GoSearch

Navigate Navigate2 QueryStatusWB Refresh Refresh2 Stop

A kvetkez brn a bngsz nk kt b vtett vltozata lthat, melyek forrskdjt a knyv CD-mellkletn tallja meg az Olvas.

8.1. bra A webbngsz b vtett vltozatai

8.2. DHTML alkalmazsok ksztse


A legegyszer bb alakjban a DHTML-alkalmazs egy olyan HTML-oldal, amely Visual Basic kdot s a Dynamic HTML objektummodellt hasznl a weboldalon trtn esemnyek feldolgozsra, belertve a felhasznli adatbevitelt (egrmozgats, kattints, rtkmegads mez kn keresztl stb.) s a bngsz sajt esemnyeit (oldal betltse, kpletlts stb.). A DHTML-alkalmazs a lefordtott Visual Basic kd s a dinamikus HTML egyfle keverke, amelynek lnyege, hogy az esemnyek feldolgozsa - az oldal letltst s a bngsz ben val megjelentst kvet en - teljes egszben a felhasznli gpen trtnik. Egy bonyolultabb felpts DHTML-alkalmazsban a kvetkez feladatokat vgezhetjk el: az oldalon elhelyezett inputelemeken keresztl megadott adatok elkldse, adatbzis lekrdezs cljbl, a weboldal megjelensnek megvltoztatsa, jabb HTML-elemek ltrehozsa az oldalon, vlaszul a felhasznli krsek re. A DHTML-alkalmazsokat ugyanazokra a clokra hasznlhatjuk, mint a kliensoldali parancskdokat (scripts), bizonyos mrtkig cskkentve a webszerver terheltsgt azokkal a mveletekkel, amelyeket a bngsz t futtat gpen is elvgezhetnk. Mivel a DHTML-alkalmazsok a Microsoft cg bngsz jben (Internet Explorer 4.x s jabb) implementlt dokumentum-objektummodelljt hasznljk, illetve tartalmaznak a rendszerbe bepl ActiveX-objektumokat is, ms bngsz kben nem jelenthet k meg. Egy j DHTML alkalmazs ksztst a File / New Project / DHTML Application vlasztssal kezdjk el. A vlaszts hatsra ltrejn az alkalmazsunk kerete, amelyben megtallhatjuk a m kdshez szksges alapkdokat tartalmaz modDHTML modult s DHTMLPage weboldal-szerkeszt t, amelynek bal oldali panelje a kszl HTML-dokumentum elemhierarchijt jelenti meg. A jobb oldali panelben pedig vizulisan szerkeszthetjk weboldalunkat: szveget gpelhetnk s formzhatunk a szerkeszt eszkzpaletta segtsgvel, illetve a Visual Basic eszkzpalettjrl HTMLelemeket (gombokat, listaelemeket, kpeket) helyezhetnk el a weboldalunk rlapjn".

5.2. bra A DHTML alkalmazsa afejlesz i krnyezetben

A HTML-lerelemek (tags) tulajdonsgai egyrszt megjelennek a Properties ablakban, msrszt a Property Pages prbeszdablakban (jobb oldali egrkattints a HTML-lerelem nevn a szerkeszt bal oldali paneljben, utna pedig Properties...). Ezek segtsgvel bellthatjuk a lerelemek tulajdonsgait.

HTML-elemek tulajdonsgai

Ha jl kiismerjk magunkat a HTML-kd kzvetlen szerkesztsben, akkor mentsk el a kdot kln HTML-fjlba (kattintva a "DHTML Page Designer Properties" gombon)! A Launch Editor gombon kattintva a jegyzettmb alkalmazsban is szerkeszthetjk a weboldal kdjt. A weboldalon elhelyezett vezrl elemek esemnykezel eljrsait ugyangy rhetjk el, mind a szabvnyos alkalmazsoknl. Az esemnykezel megjelenik ha dupln kattintunk az rlapon elhelyezett objektumon, vagy pedig a HTML-lerelem nevn jobb gombbal kattintunk a szerkeszt bal paneljben, majd pedigkivlasztjuk a View Code menpontot vlasztjuk. Pldul, a 8.2 brn is lthat nyomgomb onclick esemnykezel jt trhatjuk gy, hogy vltozzon a weboldal httrszne:
Private Function Buttonl_onclick() As Boolean If TextFieldl.Value = "piros" Then Document.bgColor = "red" Else Document.bgColor = "white" End If End Function

A tbbi esemny esetn a - az ismert mdon - a kdablak fels rszben elhelyezett listkbl kell vlasztanunk. Az esemnyek kezelse teljesen megegyezik a DHTML-nl s kliensoldali parancskdoknl. Ha az alkalmazsunkban tbb weboldalra van szksg, kattintsunk a jobb oldali egrgombbal a Project - DHTML Project" ablakban lthat Designers bejegyzsen, s vlasszuk ki az Add menpont DHTML Page pontjt! Az alkalmazs fordtsa s futtatsa utn jelentsk meg az Add-In Manager prbeszdablakot (Add-Ins I Add-In Manager) s tltsk be a "Paackage and Deployment Wizard" varzslt! Ennek segtsgvel a szksges .dll s ms fjlokat az Internetr l letlthet , s a bngsz ltal kezelhet .cab (cabinet) llomnny tmrthetjk ssze. (Az llomny kitmrtse utn a bngsz automatikusan telepti rendszernkbe a .cab fjlban tallt komponenseket.)

8.4. bra Az Add-lnn Manager

A varzsl elindtsa utn (Add-Ins / Package and Deployment Wizard) a megjelen prbeszdablak els lapjn kattintsunk a Package gombon, a kvetkez lapon pedig a listban az Internet Package soron! Ezek utn meg kell adnunk a .cab fjl ltrehozsi helyt (loklis vagy tvoli gpen), illetve azt, hogy az alkalmazs futtatshoz szksges fjlok kzl melyek pljenek be a .cab llomnyba s melyeket kell majd a bngsz nek kln letltenie a Microsoft webszerverr l vagy ms helyr l. Az llomny ltrehozsa utn egy jelentst kapunk, amelyet el is menthetnk. Ha megnzzk a weboldalunk kdjt, akkor szrevehetjk, hogy a HTML-dokumentumhoz a ltrejtt ActriveX-objektum, amely magban rejti a DHTML alkalmazsunk funkcionalitst, az <objectx/object> HTML-lerelem segtsgvel kapcsoldik. A lerelem classid paramtere tartalmazza az objektum rendszernkbe bejegyzett azonostjt:
<!--METADATA TYPE="MsHtmlPageDesigner" startspan--> <object id="DHTMLPagel" classid="clsid:4A2B82DC-57 86-4B97-A81D-lA89CD48D418" width=0 height=O> </object> <!--METADATA TYPE="MsHtmlPageDesigner" endspan>

Utols lpsknt kattintsunk a Package and Deployment Wizard" prbeszdablak Deploy gombjn, s kldjk fel az sszelltott .cab s HTML-llomnyokat a webszerverre vagy egy mappba a loklis gpnkn, s jelentsk meg a vgleges helyr l az sszelltott ActiveX-objektumot tartalmaz weboldalt!
8 . 5 . b r a A DHTML alkalmazsra pl weboldal megjelense

8.3 IIS-alkalmazsok ksztse


Az IIS-alkalmazsok Visual Basic-ben lefordtott programkdbl s HTML utastsokbl plnek fel. Ezek az alkalmazsok az Internet Information Server (IIS) programot, a Microsoft web- s FTP-szervert futtat szmtgpeken helyezkedhetnek el. Amikor a webszerver krst kap egy bngsz t l, amelynek teljestshez szksg van az IIS alkalmazs futtatsra, tovbbtja az alkalmazsnak a bngsz t l kapott adatokat, s a kd lefutsa utn visszakldi az alkalmazs ltal sszelltott vlaszt. Egy egyszer IIS-alkalmazs egy HTML-oldalt kld vissza a bngsz nek vlaszul az gyfl krsre. Bonyolultabb esetben az alkalmazs: a kapott adatok alapjn egy adatbzishoz intzett lekrdezst hajt vgre, s a vlaszt annak eredmnyb l lltja ssze, a vlaszt gy lltja ssze, hogy ksz HTML-dokumentumok (sablonok) bizo nyos rszeit helyettesti dinamikusan sszelltott tartalommal, a vlaszkdba a weboldalon megjelen vezrl objektumokat pt be, az ese mnyket feldolgoz kliensoldali parancskddal egytt. Az IIS-alkalmazs egy olyan ActiveX-DLL, amelyb l elrhetjk az ASP-objektumokat (Response, Request stb.), s amelynek ltrehozshoz HTML-sablonokat is hasznlhatunk. Mivel az IIS-alkalmazsok webszerveroldali parancskdot tartalmaz ASP (Active Server Pages) fjlok formjban jnnek ltre, gy csak a Microsoft IIS webszerverrel egytt m kdhetnek. A DHTML-alkalmazsokkal szemben - mivel itt minden m veletet a szervergp vgez - a kliens oldalon nem szksges, hogy az Internet Explorert hasznljuk. (Termszetesen ez csak addig igaz, ameddig figyelnk a HTMLdokumentum sszelltsnl arra, hogy n. keresztbngsz s megoldsokat alkalmazzunk). Egy j IIS-alkalmazs ksztst a File I New Project I IIS Application vlasztssal kezdhetjk el. A ltrejv alkalmazskeret tartalmaz egy WebClass szerkeszt t (a szerkeszt ablaka a Project ablakbl nylik, ha ktszer kattintunk a WebClass I bejegyzsen). A WebClass egy olyan Visual Basic komponens, amely a webszerverre kerl azzal a cllal, hogy vlaszoljon a bngsz krseire. A WebClass mindegyik pldnya egyetlen klienssel ll kapcsolatban - vagy egy krs erejig, vagy pedig tbb krsen t (session). A Properties ablakban lthat StateManagement tulajdonsg tlltsval elrjk, hogy a WebClass pldnya a bngsz t l kapott els krs feldolgozsa utn ne msoldjon ki automatikusan a szerver memrijbl (ami az alaprtelmezs). Ebben az esetben az objektum megsz nst vagy az ASP folyamat vge (Session timeout), vagy a WebClass Releaselnstance metdusnak hvsa idzi el .

Miel tt az alkalmazshoz hozzadnnk a Webltem objektumokat, el kell mentennk a mg res projektet. Ezek utn kattintsunk jobb oldali egrgombbal a HTML Templates Webltems" bejegyzsen, s adjunk a projekthez annyi HTML Template s Custom Webltem objektumot, amennyire szksgnk van! Ezt kvet en utn rjuk meg a kdot a projektnk sszes Standard, Template s Custom esemnye szmra! (A Standard esemnykezel hinyban az ASP-fjl alap URL-je nem fog vlaszolni a Webltem nv megadsa nlkl.) Az IIS-alkalmazsban a bngsz t l kapott krseket feldolgoz esemnykezel k ltalban a kvetkez mveleteket vgzik: a HTML-sablon tartalmnak kldse a bngsz nek (sablon nlkl dinamiku san sszelltott weboldal), tirnyts ms weboldalra vagy ms Webltem-re az alkalmazson bell, adatbzissal val kapcsolat megteremtse, az adatbzis lekrdezse s az ada tok HTML-vlasz formjban val kldse a bngsz nek, a HTML-sablonokban lv sablonelemek helyettestse adatokkal, a bngsz t l kapott felhasznli adatok feldolgozsa.

8.9. bra Az IIS-alkalmazs a fejleszt i krnyezetben

Futtassuk a ksz alkalmazsunkat, s teszteljk m kdst klnbz bngsz kben, majd fordtsuk le a projektnket (File / Make Project.dll), s kldjk fel az sszelltott fjlokat a webszerverre (Adds-In / Package and Deployment Wizard / Deploy)!

8.4. VBScript begyazsa HTML dokumentumokba


A VBScript segtsgvel a webbngsz ltal futathat Visual Basic forrskdot helyezhetnk el a HTML-llomny trzsben. A Visual Basic parancskdot a <script language="VBScript"> s az </script> HTML-lerelemek, illetve a <!-- s --> megjegyzsjelek kztt hozhatjuk ltre. A VBScript programokban csak Variant tpus vltozkat hasznlhatunk. Pldaknt, a VBScript segtsgvel ksztsk m kd HTML-lapot, amely egy szvegmez ben bekrt felhasznli adatot gombnyomsra egy msik szvegmez be helyezi, illetve megjelenti a mai dtumot s az aktulis id t! A VBSCRIPT knyvtrban tallhat HTML-dokumentumban (VBSPELDA.HTM) alaktsunk ki egy rlapot (<form></form>) s helyezznk el benne kt szveges s egy nyomgomb vezrl t!
<input type="text" size="2" name="Textl"> -cinput type="button" name="Buttonl" value="tvisz"> <input type="text" size="2" name="Text2">

rjuk meg VBScript formjban a gombnyoms esemnyt kezel elj-

rst

Buttonl_OnClick

nven!

Gombnyomskor megvizsgljuk a Textl szvegmez tartalmt, s ha nem res, tvisszk az rtket a Text2-be, egybknt a Text2 szvegmez be kirjuk az "res" zenetet. Ezt kvet en helyezzk el a rvid dvzlst, a mai dtumot s aktulis id t kir VBSCRIPT parancskdot a HTML-dokumentumban!
8.10. bra VBScript alap HTML oldal megjelentse

8.6. Winsock - TCP/IP-illeszt kapu


A Winsock vezrl elem segtsgvel programunkban definilhatjuk az IP felett elhelyezked , a TCP s a UDP protokollok szerint foly kommunikci alapvet programabsztrakcijt, az n. kliensoldali, illetve szerveroldali illeszt kaput (socket). (A protokoll belltsa a Protocol tulajdonsg segtsgvel trtnik.) Programozi szempontbl az illeszt kapu az alkalmazsok kztt megvalstott hlzati kapcsolat programbeli lerja, amely tbbek kztt a kapcsolat egyik vgn tallhat szmtgp IP-cmt s a krt szolgltatsnak megfelel , illetve a programunk ltal lefoglalt port azonostjt trolja. A kapcsolatba lp kt program gy hasznlja sajt illeszt kapujt, mint egy kzvetlen bejratot a kapcsolat msik vgn tallhat programhoz: rajta keresztl bekopoghat" a msikhoz, rhat az illeszt kapura, illetve leolvashatja rla a megrkezett zeneteket. A kiszolgl oldalon fut alkalmazs ltalban szolgltatst (pldul Hypertext Transfer Protocol - HTTP, vagy a File Transfer Protocol - FTP) nyjt az gyfl alkalmazsoknak. A szolgltatsok jellshez n. portszmokat hasznlnak. A kiszolgl oldalt reprezentl program illeszt kapuja az n. figyel vagy hallgat {listening connection) llapotban vrakozik a kijellt porton (a Winsock Listen metdusa), amelyen fogadja az gyfloldalon fut program kapcsolatteremtsi krseit. A kiszolgl s az gyfl kztt ltrejtt kapcsolat utn a figyel vgpont szerveroldali vgpontt vlik (server connection), s az gyflvgponttal (client connection) megegyez kpessgekkel rendelkezik, illetve azonos tpus esemnyeket kap. Az illeszt kapuk megvalstshoz a kiszolgl alkalmazsnak ismernie kell az aktulis gyfllel kialaktott kapcsolatot jell port szmt (LocalePort tulajdonsg). Az gyflalkalmazsnak pedig szksge van a kiszolgl IP-cmre (RemoteHost tulajdonsg) s az elrni kvnt szolgltats portszmra (RemotePort tulajdonsg). Az IP (Internet Protocoll) cmek az Internetre kttt szmtgpeket jellik, s xxx.xxx.xxx.xxx alakak (ahol az xxx a 0..255 tartomnyba es decimlis szmot jell). Minden IP-cmhez hozzrendelhet egy vagy tbb szveges nv is, az n. DNSnv (pldul http://www.computerbooks.hu/). (Fordtva is igaz: egy nv mgtt tbb IP-cm is rejt zhet.) A portszmok ltalban a figyel vgpont jellegt, vagy az ltala nyjtott szolgltatst jellik. Az gyfelalkalmazsok legtbbszr a szabvnyos protokollokhoz hozzrendelt n. kzismert portokon (well-known ports) keresztl lpnek kapcsolatba a kiszolglval. A portok szmai - a portok ellen rizhet sge rdekben - a UNIX opercis rendszer szuperfelhasznli jogosultsgi tartomnybl kerlnek ki (1024-nl kisebb szmok).

A kvetkez tblzat nhny kzismert port szmt tartalmazza: Port 21 23 25 79 80 Szolgltats FTP Telnet SMTP (Interneten keresztl foly levelezs protokollja) Finger HTTP

Ahhoz, hogy a kiszolgl alkalmazs jabb krseket fogadhasson a kijellt porton, a kapcsolat ltrejtte utn az gyflalkalmazsok dinamikusan kijellt portokat (dynamically-allocatedports) kapnak a kiszolgl alkalmazstl, amelyeket 1024-nl nagyobb szmokat jellnek. gy a kiszolgl oldalrl a port az gyfelet, azaz a ltrejtt hlzati kapcsolatot azonostja. A dinamikusan kijellt portoknl a szmvlaszts megint csak a UNIX-rendszer szablyainak rksge: a 1024-nl nagyobb tartomny az alacsony jogosultsg felhasznlkat jelli, s az gyflalkalmazsokat ltalban ppen ebbe a kategriba tartoz vgfelhasznlk futtatjk. A Winsock vezrl elem hasznlata esetben az Connect s Close metdus hvsval megnyithatjuk, illetve bezrhatjuk az illeszt kaput. A GetData, PeekData s a SendData metdusok segtsgvel informcis adatcsomagokat kldhetnk, illetve fogadhatunk. A klnbz kommunikcis esemnyeket pedig a ConnectionRequest, Connect, DataArrival, SendProgress, SendComplete, Error, Close stb. esemnyek kezel jben dolgozhatjuk fel.

Irodalomjegyzk

Steven Holzner Visual Basic .NET Fekete Knyv The Coriolis Group, 2002. Perfact Pro Kft, 2002. Microsoft Visual Basic 6.0 Programozi kziknyv Microsoft Press .,1998 Cmeron Wakefield VB.NET Developers Guide Syngress Publishing Inc., 2001 Paul Lomax VB & VBA in a nutshell O'Reilly, 1998 Brian Siler, JeffSpotts Using Visual Basic 6 Que, 1998 Gary Cornell, Troy Strain Visual Basic 4 Tippek s trkkk Panem-McGraw-Hill., 1997 Demeter Ibolya Visual Basic 6.0 Lpsr l lpsre Panem, 1999 Demeter Ibolya Visual Basic 6.0 Lpsr l lpsre 2. Panem, 2000

Dvid I. Schneider An Introduction to Programming Using Visual Basic 5.0 Prentice Hall, 1998 Pter G. Aitken Programozs Visual Basic 6 nyelven Kk Knyv The Coriolis Group, 1998. Kiskapu Kft., 1999 Pter G. Aitken PC Poche Microsoft Visual Basic 6 Data Becker GMBH, 1998 Micro Application, 1998 Benk Tiborn Programozsi feladatok s algoritmusok Visual Basic rendszerben ComputerBooks, 2003 Kris Janisa, hars Klander Tippek a Visual Basichez Jamsa Press, 1997 Kossuth Kiad, 1998 Bruce McKinny HardCore Visual Basic Microsoft Press, 1995

.
010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101

You might also like