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 elfordulsa nem kizrhat.
Az ismeretanyag felhasznlsnak kvetkezmnyeirt sem a Kiad, sem a Szerz
felelssget nem vllalnak.
A knyv az Oktatsi Minisztrium tmogatsval, a
Felsoktatsi Plyzatok Irodja ltal lebonyolitott
Felsoktatsi 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. Elsbbsgi szablyok............................................................................................... 42
2.4.3. A mveletek csoportostsa ..................................................................................... 43
2.4.3.1. Aritmetikai mveletek.................................................................................. 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. Tetszleges 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 elre elksztett objektumosztlyok pldnyai .................................................107
2.7.2.1. Formmsolatok ltrehozsa ........................................................................ 108
2.7.2.2. Vezrleiemek tmbje ................................................................................109
2.7.2.3. Objektumok gyjtemnye (kollekcija, collection).................................... I 10
2.7.2.4. Rendszerobjektumok s -gyjtemnyek ..................................................... 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 fejleszti 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 vezrlelemek hasznlata...........................................................................................136
3.3.1. A vezrlk csoportostsa....................................................................................... 136
3.3.1.1. Alapvezrlk .............................................................................................. 136
3.3.1.2. ActiveX-vezrlk ........................................................................................138
3.3.2. A vezrlkrl ltalban.......................................................................................... 144
3.3.2.1. A vezrlk kzs tulajdonsgai...................................................................144
3.3.2.2. A vezrlk mkdtetse programbl ......................................................... 148
3.3.2.3. A vezrlk esemnyei .................................................................................151
3.3.2.4. A Frame (keret) vezrl ............................................................................. 152

TARTALOMJEGYZK

3.3.3. Az alapvezrlk 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 (jellngyzet) 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) vezrlk ..............................................................168
3.3.3.9. Menk.........................................................................................................169
3.4. ActiveX-vezrlk hasznlata .......................................................................................175
3.4.1. A RichTextBox (bvtett 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. Vczrltmbk, objektumgyjtemnyek.................................................................... 188
3.5.1. Vezrltmbk hasznlata ..................................................................................... 188
3.5.2. Objektumgyjtemnyek 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 LEHETSGEI, 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 kezdpontja.........................................................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. Bettpusok ............................................................................................................ 243
5.1.8. A hardvereszkzk adatai...................................................................................... 245
5.2. Grafikus vezrlk hasznlata...................................................................................... 247
5.2.1. Vonalhzs a Line vezrlvel................................................................................ 247
5.2.2. Alakzatok rajzolsa a Shape vezrlvel................................................................. 248
5.2.3. Bitkpek hasznlata az Image vezrlvel............................................................... 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 jellemzi ...........................................................................................265
5.4.1.1. A nyomtats minsge................................................................................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 erforrsban ............................................................................................ 274
5.5.3. Az MSChart komponens........................................................................................ 277
5.6. A Visual Basic mint multimdis fejleszteszkz ....................................................... 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 vezrlvel ............................................................ 288
5.6.5. Animci a PictureClip vezrlvel ......................................................................... 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) lehetsgei ..................................................... 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 lehetsgek .......................................................................... 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 LEHETSGEI................................... 347


7.1. Hagyomnyos llomnykezels ...................................................................................347
7.1.1. Szekvencilis llomnyok......................................................................................349
7.1.2. Tetszleges 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) vezrlelemekkel.............375
7.3.3.1. A Data vezrlelem ....................................................................................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 vezrlelem ..................................................................................... 413
8.6. Winsock - TCP/IP-illesztkapu.................................................................................... 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)

Elsz
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 mkdnek. Az alkalmazs ksztsekor a modulris programpts elvt kvetjk, s elre elksztett ptelemeket (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 legegyszerbb
alkalmazs-fejleszt rendszerr ntte 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 ezeltt 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 ksbb a QBasic
nyelvet beptette az MS-DOS opercis rendszerbe. Termszetesen a Basic nyelv az
vek sorn egyre bvlt, azonban alapvet jellegzetessgei (kis erforrsigny, egyszeren 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 kezdetektl fogva egy vizulis fejlesztrendszerre pl objektumalap nyelv volt. A Windows alkalmazsok ksztse azltal vlt gyorss s egyszerv, pldul a C-nyelv fejlesztshez kpest, hogy a programoz ksz ptelemeket
(komponenseket) hasznlva alakthatja ki sajt alkalmazst. Ezen ptelemek

ELOSZO

(.VBX) modulok hasznlata sokkal kevesebb ismeretet ignyelt, mint a hagyomnyos


API-t (alkalmazs-programozi felletet) hasznl fejleszts. A kezdetektl fogva a
Visual Basic programok szemre vetettk a ksz alkalmazsok relatv lassbb mkdst. Ennek oka, hogy a fejlesztrendszer 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 ellltani.
Az vek folyamn a Visual Basic nyelv egyre bvlt 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 fejldst, a tblzatban nem jelezzk a fejleszti krnyezet folyamatos bvtst:
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) vezrlk, tvoli adatobjektu
mok (RDO) s tvoli adatvezrlk (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.

ELSZ

Visual Basic 5.0, 1997


hrom 32-bites vltozat (Learning, Professional s Enterprise Edition),
ActiveX-vezrlk ellltsnak lehetsge (.CTL modulok),
vlasztsi lehetsg 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 fejleszteszkz. A programok ksztshez szksges ismeretanyag akr tbb ktetet is megtolthet, ahogy ez az angol nyelv szakirodalombl is
lthat.
Mirl szl a knyv?
A knyv, melyet az Olvas a kezben tart, elssorban a kezd s kzphalad programozk ignyeinek megfelelen, 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 eltanulmnyok nlkl is lehet alkalmazst kszteni, a programozk a nyelv ismerete nlkl nem juthatnak messzire. A msodik fejezet teljes egszben a Visuai Basic nyelv lehetsgeivel 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 mveletekkel, 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 lehetsgeit bemutat fejezetek kpezik. A harmadik fejezetben az Olvas megismerkedhet a Windows programozs eszkztrval: az alkalmazsok mkdsvel, a formmal (rlappal) - az alkalmazsok alapobjektumaival. A Windows alkalmazsokban az n. vezrlk tartjk a
kapcsolatot a felhasznl s a program kztt. A Visuai Basic rendszerben az jrafelhasznlhat programelemek, a komponensek biztostjk a vezrlk objektum-alap
kezelst. A harmadik fejezet az alapvezrlk (menk, gombok, szvegszerkesztk,
listk, idztk) 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 lehetsgeivel. 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 jelents tmogatst nyjt. Az tdik fejezet bemutatja a rendszerben hasznlhat alapvet grafikus megoldsokat, a grafikus vezrlket. A grafikhoz kapcsoldan
a rendszer multimdis lehetsgeinek bemutatsa is az tdik fejezetben kapott helyet.
A knyv msodik - inkbb kzphaladknak szl - fele bevezeti az Olvast a Visual
Basic specilis lehetsgeinek 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 lehetsgeit gyjti 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 lehetsgei kzl ismertet nhnyat. Az
Internet programozsnak bemutatsa nem a teljessgre, hanem a lehetsgek rvid
ttekintsre trekszik.
Pap rtakarkos sgi okokbl a CD-mellkleten kapott helyet nhny - a rendszerhez
kapcsold - tmakr, mint pldul az SQL nyelv lehetsgeinek 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 sszegyjtsvel az Olvas lemrheti, hogy
mennyire figyelmesen olvasta el a fejezeteket. A CD-n megoldand programozsi feladatok tallhatk, az elksztett programok fellelhetk 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 rhetk 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


Mieltt 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 betkre 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 megfelelen szabad hasznlni. Az albbiakban sszefoglaltuk a Visual Basic nyelv foglalt szavait, melyeket a fejlesztrendszer 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 nagybetket a nevekben, gy a programban a kulcsszavakat
tetszleges 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 kezddhetnek:
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 ksbb 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 elfordulhat,
hogy egy utastst tbb sorban kell megadnunk az n. folytatsor jellst hasznlva,
ami egy szkzbl s egy alhzsjelbl ( _ ) 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 kettsponttal elvlasztva egymstl:
Dim x As Byte: Dim y As Long: Dim z As Double

A kulcsszavakon kvl a programsorok mg szmos ms sszetevt is tartalmaznak.


Az utastsok trgyalsa eltt, meg kell ismerkednnk az azonostk fogalmval, klnbz tpus llandk brzolsval, a mveletek vgrehajtshoz szksges mveleti jelekkel s a program mkdst 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 sszetevinek azonostsra hasznljuk.
A Visual Basic azonostk (nevek) legfeljebb 255 karakter hosszak lehetnek. Mint
emltettk, az azonostk kpzse sorn a teljes Unicode karakterkszletet betit hasznlhatjuk. Az azonost azonban csak betvel kezddhet, s nem tartalmazhat szkzt.
Az els karakter utn tovbbi betk vagy szmok kvetkezhetnek.
Hasonlan a foglalt szavakhoz, az azonostkban sem klnbzteti meg a rendszer a
kis- s nagybetket. 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 kisbetkkel kezddnek, melyek utalnak azok tpusra.
intSzmll
AEgytthat

txtGyok
Adatll

cmdSzmol
HunForint

dbl Eredmny
EuroPnztr

A Visual Basic fejlesztrendszer az ltalunk megadott neveket abban a formban kis- nagybets rsmdban - jelenti meg, ahogy azt deklarltuk. Ez azrt lehetsges,
mivel a fejlesztrendszer a bert programsorokat azonnal feldolgozza, bels kdd alaktja, gy a szintaktikai (helyesrsi) hibk mr sor <Ener> billentyvel 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 eljellel (a pozitv eljel 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 eltt 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 fejlesztrendszer a bert szm nagysgtl fggen automatikusan rvid vagy hossz egssz teszi az llandt.
A vals szmokat tizedes trtknt (pldul 123.45) s hatvnykitevs alakban
(1.2345E2) egyarnt felrhatjuk. (A programban szmok megadsakor nem tizedes
vesszt, hanem tizedes pontot hasznlunk.) A hatvnykitevs konstansok az albbi
elemekbl plnek fel:

A megadsban a hatvnyjel (az E vagy e bet) 10 hatvnyt jelli (a kitevben a pozitv eljelet nem ktelez hasznlni). Az elmondottak alapjn a pldban megadott 1.2345E+02 szm a matematikai jellsekkel felrva
vagy -123,45.
A fejlesztrendszer 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) idzjelek ("") kztt kell megadni. Ha szvegen bell idzjel szerepel, akkor azt duplzzuk (pldul "Azt mondta: ""Ne menj
oda!"""). Ha a szvegkonstans semmit sem tartalmaz az idzjelek kztt (""), akkor
n. res sztrngrl 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 idzjeleket 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 mveleti jeleket opertoroknak nevezzk.
Az opertorok jellhetnek aritmetikai (+, -, /, * stb.) s logikai mveleteket (And, Or
stb.), illetve relcikat (<, >, <= stb.). Az opertorokkal s a mveletek kztti elsbbsgi szablyokkal a ksbbiekben rszletesen foglalkozunk.
a + b*c/Sqr{x)+12.23

A fenti aritmetikai kifejezs opertorai; a +,*, / aritmetikai mveleti 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, tetszleges hosszsg megjegyzst, magyarzatot
helyezhetnk el. A megjegyzseket a Rem utasts segtsgve], illetve az egyszeres
idzjel 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 ktdik a Windows rendszerhez. gy
mieltt megismerkednnk a Windows alkalmazsok ellltst segt programfelptssel, tisztznunk kell nhny alapvet fogalmat.
Kicsit visszamegynk az idben, 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
rendszertl. 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 erforrsain (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 (fablak), amelyen keresztl informcikat jelent meg a felhasznl szmra. A sok ablak kzl azonban egyszerre csak egy, az aktv ablak fogadja a felhasznli beavatkozsokat (billentyk 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 illesztprogramokon keresztl tartja a kapcsolatot. Az illesztprogramok 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
gyjti az zeneteket. Innen aztn bizonyos id elteltvel a futtat rendszer tovbbtja
azokat az ppen fut alkalmazs zenetsorba. Ebbl a sorbl az alkalmazs zenetkzvett rsze kiemeli az zeneteket, s tadja az ablakhoz tartoz programrszeknek
(zenetkezelknek, esemnykezelknek.) Mint ahogy a ksbbiekben 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 alapmkdsnek tisztzsa utn tovbblphetnk. A
Visual Basic rendszert elssorban a Windows alatt fut, grafikus felhasznli fellet
(Graphical User Interface - GUI) alkalmazsok ltrehozsra hasznljuk. A Visual
Basic fejlesztrendszere a legels vltozatoktl kezdve, az n. komponensekre alapozva biztostotta a gyors, hatkony alkalmazsfejlesztst. Ezekre az ptelemekre tmaszkodva, hasznlva a beptett tudsukat", alapveten 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.

Elszr a fejlesztrendszerrel kzljk, hogy Windows alkalmazst kvnunk k


szteni: FilelNew Project/'Standard Exei'OK.
2. Ezt kveten a formon (az ablak fejleszts alatti modelljn, rlapon) elhelyezzk
az eszkztrbl (toolbox) kivlasztott vezrlelemeket, pldul cmkt (Label),
szvegmezt (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 (vezrlk) megjelenst s mkdst.

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 fejlesztrendszer tvlt a
kd szerkesztbe, 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


kdszerkesztben

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 fejlesztrendszer 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 lehetsg, melynek segtsgvel ablak nlkli alkalmazsokat kszthetnk. Nzzk lpsenknt az ilyen alkalmazsok kialaktst!

2- FEJEZET

1. Elszr kzljk a fejlesztrendszerrel, hogy Windows alkalmazst kvnunk k


szteni: FilelNew Project/Standard ExelOK.
2. Ezt kveten eltvoltjuk a projektbl 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 egybl a
kdszerkesztbe jutunk, ahol meg kell rnunk a program indtshoz szksges
Main() eljrst.

2.4. bra A Main() eljrs a


kdszerkesztben

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
mkdst 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 rthetv, melyekben nhny vezrlelemet 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 lehetsgeket! A


szksges vgrehajthat utastsokat egy parancsgomb lenyomshoz kapcsoljuk, a
mveletek eredmnyt a 2.6. brn tanulmnyozhatjuk.

2.6. bra Egyszer adat megjelentsi


lehetsgek

Adat be krs re a szvegmezt, 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 elrja 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)
rtkrl 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 mveletek vgezhetk rajta.
Ugyancsak adatok trolsra hasznljuk a konstansokat, azonban a konstans nevhez
kapcsolt rtk nem vltoztathat meg. A konstansok hasznlatval javthatjuk a programunk olvashatsgt, ttekinthetsgt.
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 ktelezv tesszk
a programmodulban. A vltozk lerst a programmodul deklarcis - (General) /
(Declarations) - rszben - az eljrsok s a fggvnyek eltt -, illetve az alprogramokon bell brhoz elhelyezhetjk. Egyetlen felttel, hogy a vltozt az els felhasznls
eltt 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 vesszvel 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 kezdrtkkel val elltst. Ehelyett minden vltoz terlete automatikusan 0
rtk bjtokkal tltdik fel, gy a vltozk kezdrtke 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 elrhetsgt 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 elrhetsgk 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 megrzi rtkt (statikus vltoz).
2.3.1.2. A Deftpus utastsok
A modulok szintjn a vltoz- s paramternevek kezdbetje alapjn is szablyozhatjuk az automatikus deklarci mkdst. A ksbb bemutatsra kerl tpusoknak

A VISUAL BASIC NYELV

megfelelen a Defxxx utastsnak klnbz vltozatai lteznek: DefBool, DefByte,


Deflnt, DefLng, DefCur, DefSng, DefDbl, DefDec, DefDate, DefStr, DefObj,
DefVar.
Az utastsok mkdst az egsz tpust elr Deflnt kapcsn mutatjuk be. Az utastst, melynek szintaxisa:
Deflnt betintervallum [, betintervallum] . . .

a modul deklarcis rszben kell elhelyeznnk. A betintervallum helyn egyetlen


bet vagy kt, mnuszjellel elvlasztott bet ll. Az albbi deklarci utn minden
olyan vltoz tpusa egsz lesz, amelynek neve N betvel, vagy I s K kz es betvel kezddik:
Deflnt

I-K,

Vigyznunk kell arra, hogy a klnbz tpusokkal kijellt betintervallumoknak ne


legyen kzs rsze.
A ktelez deklarci elrsa utn, a Defxxx utastsokon tlmenen 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 eltt 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 egyenlsgjel 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 elvgezhetk. Konstansnevek alkalmazst elssorban az albbi
esetekben ajnljuk:
- Ha egy konstans rtk gyakran elfordul a programban, pldul:
const eszam = 2.718282, szokoz = " "

A konstans rtkt a ksbbiekben (a forrsprogramban) egy msik rtkre k


vnjuk vltoztatni. Amennyiben a krdses konstans a programban tbb helyen
is elfordul, akkor a mdosts lnyegesen egyszerbb 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 megelz 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 vezrlkarakter kdjt troljuk felsorolsban,


angol s magyar elnevezseket hasznlva:

A Visual Basic fejlesztrendszerben egy sor elre 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 jellemzje, 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 lehetv 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

Elszr azokkal az egyszer adattpusokkal foglalkozunk, amelyek numerikus adatokat, szmokat trolnak. A numerikus adatokat trol vltozkkal aritmetikai mveleteket vgezhetnk.
2.3.3.1. Egsz tpusok
A Visual Basic-ben tbbfle elre 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 jellemzit az albbi tblzatban foglaltuk ssze.

A szoksos lebegpontos (Single, Double) vals tpusokon tlmenen 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 mkdik 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 idignyesek.

2. FEJEZET

Dtum s id trolsa a Date tpus

Az adatkezel alkalmazsok a klnbz esemnyekhez, mveletekhez ltalban idpontot is kapcsolnak. Visual Basic-ben az idpontok (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
idt 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


idt 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 idpontot tbbflekppen is bellthatunk. Dtumkonstans esetn az angol
dtum/idformtumot kell hasznlnunk, mg szvegbl talaktva a Windows rendszer
belltsai szerint kell megadnunk az idpontot:

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

2.3.3.3. A karaktersorozat-tpusok
A string tpus vltozkat szvegek trolsra hasznljuk. A Visual Basic a 16-bites
Unicode kdtblnak megfelelen 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 ksbb 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 tltdnek 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-tl kezdve sorszmozzuk:

2. FEJEZET

2.3.3.4. A varins tpus


A Visual Basic alaprtelmezs szerinti tpusa a Variant, ami lehetv 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 (tetszleges 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 kezdrtke 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 megfelelen:
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 vesszvel 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 egyszeren az indexek nvekv sorrendjben kvetik egymst.
Tbbdimenzis tmb elemeinek trolsa esetn mindig elszr a legutols index fut
krbe, majd az utols eltti stb.
A fent bemutatott tmbk n. statikus tmbk, melyek mrete a deklarci sorn dl
el, s ez a mret nem vltoztathat meg. A kvetkez rszben a dinamikus (tmretezhet) tmbk hasznlatval ismerkednk meg.
Mieltt tovbb mennnk, szlnunk kell az Erase utastsrl, melynek segtsgvel a
statikus tmbt lenullzhatjuk", azaz a tmb elemeit az alaprtelmezs szerinti kezdrtkekkel tlthetjk fel:
Erase tmbnvl [, tmbnv2 ...]

A VISUAL BASIC NYELV

Felhvjuk a figyelmet arra, hogy a Visual Basic nem rtelmezi a statikus tmbk kztti rtkads mvelett.
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 fggen 0 vagy / lesz. A megolds nagy elnye, hogy az j tmb elemeinek kezdrtket 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 megrizzk
(preserve), vagy sem.
Ha az elemek megrzse 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 rtkmegrzs csak a megmarad elemekre vonatkozik.
Amennyiben az tmretezs sorn nem kvnjuk megrizni 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 mvelete. 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 tetszleges
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 (mezit) (egyet, egy sorban). Pldul, a naptrbejegyzst a Type
segtsgvel a kvetkezkppen rhatjuk le:

2. FEJEZET

A Type defincit a formmodulon bell csak private (modulszint), mg a Basic modulban tetszleges 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 mezkre:

Kt azonos-, felhasznli tpus vltoz (struktra) kztti rtkads mindig elvgezhet meznknt, azonban sokkal hatkonyabb megoldshoz jutunk, ha a struktra
azonostjra vonatkoz egyetlen rtkad utastsban msoljuk t a mezk 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 mvelete 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 vezrlket) hasznlunk. Az objektumok
tpust osztlynak nevezzk. Az osztlymodul (.CLS) segtsgvel sajt magunk is kszthetnk osztlyokat. Az osztlyok a felhasznli tpusokhoz hasonlan tartalmaz
adatmezket, azonban ezek elrse korltozhat. Az adatokon tlmenen 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 szvegmezre 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
elllthatjuk:

A pldban ltrehozzuk az StdFont betkszlet-osztly egy pldnyt (objektumt),


melyre aztn az objref referencival hivatkozunk. Az objektumot ksbb a szvegmezhz 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 rszrl, 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 ellenrzsre 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
rtkekbl 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.

CByte (kifejezs)
Cint(kifejezs)
CLng(kifejezs)
CSng(kifejezs)
CDbl(kifejezs)
CCur(kifejezs)
CDec(kifejezs)

Tetszleges 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.

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.

CStr(kifejezs)

Tetszleges 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.

Chr(kd)
ChrB(kd)
ChrW(kd)

Egykarakteres sztring ellltsa a karakterkd (B-ANSI, W-Unicode)


alapjn.

Hex(kifejezs)
Oct(kifejezs)

A kifejezs talaktsa hexadecimlis karaktersorozatt.


A kifejezs talaktsa oktlis karaktersorozatt.

Kln kell szlnunk a Format() fggvnyrl, melynek segtsgvel szmokat s dtumokat formtum alapjn alakthatunk karaktersorozatt. A fggvny hasznlatnak
formja:
Format{kifejezs[, formtuml, htelsnap[, velsht]]])

A fggvny hvsakor felhasznlhat formtumelemeket a CD-mellkleten


tallhat F2. fggelkben foglaltuk ssze.
Dtummal/idvel kapcsolatos talaktsok
CDate(kifejezs)

Tetszleges kifejezs talaktsa Date tpusv. Az talaktst a


Windows helyi belltsainak figyelembevtelvel vgzi a fggvny. Amennyiben a konverzi sikertelen, hiba lp fel a programban.

DateValue(kifejezs)

Tetszleges - ltalban sztring - kifejezs talaktsa dtumm.

DateSerial(v, h, nap)

Dtum ellltsa a megadott sszetevkbl.

Year(dtum)

A v lekrdezse a dtumbl.

Month(dtum)

A hnap lekrdezse a dtumbl.

Day(dtum)

A nap lekrdezse a dtumbl.

WeekDay(dtum[, els])

A ht napjnak lekrdezse a dtumbl (1 - vasrnap).

TimeValue(kifejezs)

Tetszleges - ltalban sztring - kifejezs talaktsa idv.

TimeSerial(ra, perc, mp)

Id ellltsa a megadott sszetevkbl.

Hour(id)

Az ra lekrdezse az idbl.

Minute(id)

A perc lekrdezse az idbl.

Second(id)

A msodperc lekrdezse az idbl.

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)

Kerekts a legkzelebbi egsz szmm


(-3.6--4, -3.1>-3, 3.6-44, 3.1-H>3)

Fix(vals szm)

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)

Tetszleges kifejezs talaktsa Boolean tpus rtkk.

CVar(kifejezs)

Tetszleges 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 mveleti jeleket, amelyek sszekapcsoljk a kifejezsben szerepl operandusokat (vltozkat, konstansokat s fggvnyhvsokat).
2.4.1. Egy- s ktoperandus mveletek
A mveleteket csoportosthatjuk az operandusok szma szerint. Ennek alapjn a
Visual Basic-ben minden mvelet egy- vagy ktoperandus.
Azt a mveleti jelet, amely az egyetlen operandusa eltt szerepel, n. egyoperandus
(unary) opertornak nevezzk:
opertor operandus

Ilyen mvelet pldul az eljelvlts:


-a

Amennyiben az operandusok kzrefogjk a mveletei jelet, gy n. ktoperandus


(binary) mveletrl (s opertorrl) beszlnk:
operadusl

opertor opera.ndu.s2

Ktoperandus

mveletek pldul, az sszeads s a szorzs:


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

2.4.2. Elsbbsgi szablyok


Az n. elsbbsgi (precedencia) szablyok pontosan meghatrozzk a kifejezsekben
a mveletek kirtkelsi sorrendjt. A kirtkels sorrend alapjn a mveleteket hrom csoportba soroljuk. Az elsbbsg a csoportok kztt, illetve a csoportokon bell
egyarnt rgztett, a 2.9. albbi brnak megfelelen: (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 elszr a magasabb precedenci
j opertor ltal elrt mvelet hajtdik vgre: 3+4*5>23 (s nem 55!)
2. Az azonos precedencij opertorok a felrsuk sorrendjben (balrl jobbra
haladva) rtkeldnek ki. 15+6-9>12
3. A zrjelezs megvltoztatja a mveletek kirtkelsi sorrendjt. Elszr min
dig a (legbels) zrjelben megadott mveletek 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 mveletek csoportostsa


A Visual Basic nyelvben bizonyos opertorokhoz tbbfle mveletet is trsul. Pldul
a + opertor egyarnt jellhet eljelet, sszeadst vagy sztringek sszekapcsolst.
Azt, hogy egy opertor az adott mveletben mit is jell, az operandusok szma s tpusa hatrozza meg.
A mveleteket az operandusok tpusa alapjn az albbi csoportokba sorolhatjuk:
aritmetikai mveletek, sszehasonlt mveletek (relcik), logikai
mveletek, bitenknt vgzett logikai mveletek, sztringek
sszekapcsolsa.
2.4.3.1. Aritmetikai mveletek
Az aritmetikai mveleteket az aritmetikai kifejezsekben hasznljuk. Az ilyen mveletek 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 mveleteknl 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 eltt 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 tlmenen 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 mveletek


A Visual Basic nyelv bizonyos utastsaiban logikai kifejezsek segtsgvel szablyozzuk az utasts vgrehajtst. A logikai kifejezsek ltalban logikai mveletekkel
sszekapcsolt sszehasonltsokat (relcikat) tartalmaznak, amelyeket ksbb 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 mveletek mkdst n. igazsgtblk segtsgvel szoks jellemezni. A tblzatokbl kiolvashat, hogy adott operandusrtkek esetn mi lesz a mvelet eredmnye.

2. FEJEZET

Not A

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

A And B

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

A Or B

A logikai VAGY mvelet igaz eredmnyt ad, ha a kt operandus kzl


legalbb az egyik igaz.

A Xor B

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

A Eqv B

Az ekvivalencia mvelet akkor ad igaz eredmnyt, ha a kt operandus


azonos logikai rtk.

A VISUAL BASIC NYELV

A Imp B

Az logikai implikci mvelet a True>False tmenet kivtelvel mindig


igaz eredmnyt ad.

2.4.3.3. Bitenknt vgzett logikai mveletek


A bitenknt elvgzett logikai mveletek segtsgvel az egsz tpus rtkek bitjeit
kzvetlenl kezelhetjk. A mveletekben 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 mveleteket. A mveletek megrtsben az elz fejezet igazsgtbli is segtsgnkre lehetnek, ha a True bejegyzst 7-re, a False rtket pedig O-ra cserljk.
A Visual Basic a bitenknti logikai mveletek vgzst egyarnt biztostja 1-, 2- s 4bjtos egszekre. Nzznk pldt az egyes mveletekre Byte tpus adatok felhasznlsval! A mveleteket gpi brzolsukkal magyarzzuk.
A Not (bitenknti tagads) mvelet 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) mvelet a kt operandust bitenknt sszehasonltja, s ahol


mindkt helyen 7 volt, ott 7, klnben pedig 0 lesz az eredmnyben.

Az Or (bitenknti VAGY) mvelet eredmnyben ott lesz 7-es bit, ahol valamelyik
operandusban 7 volt, s csak ott lesz 0, ahol mindkettben 0 llt.

2. FEJEZET

A Xor (bitenknti kizr vagy) mvelet eredmnynek bitjei csak akkor lesznek 1 rtkek, ha az operandusok azonos helyen ll bitjei klnbzek.

Az Eqv (bitenknti ekvivalencia) mvelet eredmnynek bitjei csak akkor lesznek l


rtkek, ha az operandusok azonos helyen ll bitjei azonosak.

Az Imp (bitenknti implikci) mvelet eredmnynek bitjei az 1-0 prosts kivtelvel 1 rtkek lesznek.

2.4.3.4. sszehasonlt (relcis) mveletek


A relcis mveletek 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 lehetsgknt
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-bl pedig Or lesz:

Vals szmok esetn kln ki keli trnnk az azonossg vizsglatra. Mivel a vals
szmok tbbsgt csak adott pontossggal brzolja a szmtgp, elfordulhat, hogy
kt szmunkra azonosnak tn szmot a program klnbznek 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. Mveletek karaktersorozatokkal
A Visual Basic opertorokkal s fggvnyekkel tmogatja a karaktersorozatokkal val
munkavgzst.
Karaktersorozatok sszefzse
Az opertorok aritmetikai csoportjban tallhat a sztringek sszefzst megvalst
mvelet {&). A mvelet eredmnyeknt keletkez karaktersorozatba egyms utn bemsoldik az operandusok rtke:
"A vizsga" & " eredmnye: " & CStr(5)> "A vizsga eredmnye: 5"

2. FEJEZET

Megjegyezzk, hogy az sszefzs mvelete a + opertorral is elvgezhet, azonban a


varins tpus vltozkkal vgzett mveletek egyrtelmv 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 fejezdik be, ha az ppen sszehasonltott karakterpr klnbz karakterekbl 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 megfelelen definilja a karakterek rendezettsgt. A
Windows rendszerben a kdlapok ltal definilt, tipikus binris rendezsi sorrend az
albbi:

A Text opci belltsa utn a sorrend alapveten megvltozik, s majdnem - nincsenek benne a ketts betk - 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 elrsnak. 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 mkdsket.

2. FEJEZET

A fggvnyek hasznlatval kapcsolatosan az albbi megjegyzseket kel tennnk:


A B" betvel vgzd 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 vgeirl egyszeren 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 tlmenen hrom utasts is segti a karaktersorozatokkal val munkavgzst. Mindhrom utasts ltez karaktersorozat valamely rsznek fellrsra
hasznlhat. A Mid utastssal tetszleges pozcitl kezdve, tetszleges darabszm
karaktert fellrhatunk. Az LSet utasts a karaktersorozat bal oldaltl, mg az RSet a
vgtl helyezi el a megadott karaktersorozat karaktereit, a tbbi helyet pedig szkzzel tltik fel.

A VISUAL BASIC NYELV

2.4.5. Mveletek id- s dtumadatokkal


Az elz 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 mveletek
Date tpus rtkekkel is jl mkdnek:

A DateAdd() fggvny segtsgvel, vekkel("yyyy"), hnapokkal ("m"), napokkal


("d"), rkkal ("h"), percekkel ("n") s msodpercekkel ("s") mdosthatjuk a megadott idpontot.

ADateDiffO fggvny vekben ("yyyy"), hnapokban ("m"), napokban ("d"), rkban


{"h"), percekben ("n") vagy msodpercekben ("s") mondja meg a kt megadott idpont kztti klnbsget.

A DatePart() fggvny segtsgvel a megadott dtumot sszetevire - 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) ellenrizhetjk:

A VISUAL BASIC NYELV

2.5. Utastsok s vezrlsi szerkezetek


Az elz 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 feltteltl fggen
szt kell gaztatni (szelekci), illetve valamilyen tevkenysget tbbszr egyms utn
kell vgrehajtani (iterci).
A Visual Basic vezrlsi szerkezetei segtsgvel a vzolt feladatokat a legklnbzbb mdon oldhatjuk meg.
2.5.1. Szekvencia

Az albbi egyszer utastsok segtsgvel egyetlen lpsben elvgezhet mveleteket


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
egyenlsgjel bal oldaln ll vltoz felveszi a jobb oldalon megadott kifejezs rtkt:
[Let]

vltoznv - kifejezs

Az eredeti Basic nyelvbl 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 elfordul 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 minsteni kell az objektum nevvel, vagyis az objektum nevt ponttal elvlasztva meg kell adni a metdus neve eltt:

2.5.1.3.A With utasts


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

A strukra.meznv, illetve objektum.elemnv hivatkozs helyett a With utastson


bell elegend csak a ponttal kezdd mez-, illetve elemnevet megadni. A mezk
(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 szvegmezt, 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

DoEvents()

Azonnal megszaktja a program futst.


A fejlesztrendszerben 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
mkdst.
Az utastsknt hasznlt fggvny egy esemny feldolgozsnak idejre tadja a
vezrlst az opercis rendszernek. Hasznlata esetn a programunk ugyan las- j
sabban mkdik, azonban a formok fogadjk a bevatkozsainkat.

A VISUAL BASIC NYELV

A Windows rendszerhez kapcsold utastsok, fggvnyek:

2.5.2. Szelekci
Az egyszerbb programok felptse olyan, hogy a sikeres mkdshez 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 fggen, 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
eredmnytl fggen a programunk egyik vagy msik rsze mkdjn.
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 kettsponttal 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 egyszeren 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 elrhatunk 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 elllt kt (ts) lottszmot s megjelenti a kisebbet:

Az If segtsgvel tetszleges 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 elsfok
tag egytthatjt s a szabad tagot, valamint ezek eljelt vletlenszeren lltjuk el.)

2. FEJEZET

Az Uf() fggvny
Vannak esetek, amikor egy kifejezs rtkt valamilyen feltteltl fggen 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 tetszleges, 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 kveten, 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
Egyszerbb 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 elbbiekben 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 dl 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 mkdst 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 ismtld tevkenysgek programnyelven trtn megfogalmazsra hasznljuk a ciklusutastsokat.
Az Visual Basic nyelv a ciklusok szervezst tbb ciklusutastssal is tmogatja. Ha
elre (a ciklusba val belps eltt) 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 ellenrzsnek 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 eltt tesztel (elltesztel
ciklus), mg a Do .. .Loop While, Do .. .Loop Until a ciklusmag lefutsa utn ellenrzi 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


mkdse 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 kezdrtk < vgrtk. A ciklusvltoz
indulskor felveszi a kezdrtket, s minden lefuts utn nveli az rtkt a
lpskzzel. A ciklus akkor fejezi be mkdst, 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 mkdni, ha teljesl a kezdrtk > vgrtk felttel.
Az albbiakban mindkt megoldsra lthatunk pldt. A bal oldali ciklus 1-tl 10 kitevig kirja 2 hatvnyait, mg a jobb oldali 10-tl 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 bellrl-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 megrizhetjk 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 lehetv teszi, hogy a tmbben vagy kollekciban trolt
adatokat indexek hasznlata nlkl bejrjuk:

A ciklus csak Variant, vagy valamilyen objektum tpus (pldul Object) vltozval
(elem) mkdik.
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:

While felttel

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 mkdst.
amg a felttel igaz nem lesz. Amikor a felttel igazra
vlt, a ciklus befejezi mkdst (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.

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-tl 20-ig sszegezzk az egsz szmokat:

Az albbi pldkban szintn 1-tl 20-ig sszegezzk az egsz szmokat, azonban most
htultesztekls 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-tl 20-ig sszegz ciklusunk


While .. .Wend vltozatt is!

2.5.4. A hibakezels utastsai


A Visual Basic lehetv 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 (egyelre csak esemnykezel
eljrsokat hasznlunk):

A VISUAL BASIC NYELV

Az On Error s a Resume egyarnt klnbz lehetsgeket 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.
Elrja, 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


teendkrl:
Resume [0]

Amennyiben a hiba a hibakezelt 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 hibakezelt 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

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

Err.HelpContext

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 lehetsget!


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 fejlesztrendszerben 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 egyszeren 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

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

52
53

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 helyeirl 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 mkdst. Ezt kveten a vezrls visszakerl a hv alprogramhoz, az eljrshvst kvet utastsra. A fent lert mkdst jl szemllteti a 2.18. bra.

2.18. bra Az
alprogramhvs menete

Az albbiakban sszefoglaljuk az alprogramok hasznlatnak elnyeit:


Az alprogramban megvalstott mvelet ismtelt elvgzshez elegend az
alprogramot jra meghvni. A tevkenysget ler programrsz csak egy
pldnyban szerepel a programban, gy a programunk olvashatbb s ttekinthetbb lesz. Ugyancsak egyszerv 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 fellrl-lefel" (top/down) programter
vezsi mdszer segtsgvel bonyolultabb feladatok is egyszeren kezelhe
tk, s jl programozhatok.
Az alprogramokkal a monolitikus (egyetlen blokkbl ll, sok utastst tar
talmaz) programszerkezet helyett modulrisan pthetjk fel programun
kat. A program ptelemei ebben az esetben az alprogramok, gy ezt a
mdszert mvelet-orientltnak is szoks nevezni. Ha van egy alprogramunk, akkor ltalban nem azt krdezzk, hogy hogyan mkdik, 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 kvlrl, 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 kpernyn, 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 idpontot ad Now() fggvny:
Print now()

A VISUAL BASIC NYELV

A kvetkezkben 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 eltt deklarlni kell. Ez a szably valamelyest mdosul az eljrsok s a fggvnyek neve esetn. A Visual Basic ugyanis nem rendelkezik kln
alprogram-deklarcis lehetsggel - ezt a feladatot maga a fejlesztrendszer 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 tetszleges 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 eltt tallhat a modul deklarcis rsze
{GenerliDeclarations), ahova a modulszint deklarcikat helyezzk. Az alprogramokon bell a (loklis) deklarcikat s a vgrehajthat utastsokat tetszleges sor-!
rendben megadhatjuk.

2.6.1.1. Az alprogramok elhetsge (hatkre)


A fggvnyek s az eljrsok elrhetsgt is szablyozhatjuk a Sub/Function kulcsszavak eltt elhelyezett Public/Private szavakkal. Alaphelyzetben az alprogramok
Public, teht projectszint elrhetsggel rendelkeznek. Az elrhetsget 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 minsteni 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 mkdsket, amikor az utols utasts is vgrehajtdott. Vannak azonban olyan esetek, amikor - bizonyos felttelek teljeslse esetn - korbban ki kell lpnnk az alprogrambl.
Ekkor kt lehetsg kzl vlaszthatunk. Az els esetben a Goto utastssal a vezrlst az alprogram vgre irnythatjuk. Egyszerbb s ttekinthetbb lehetsget 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 elfordul, 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 lehetv teszi, hogy az
egyetlen rtket visszaad alprogramokat a matematikban megszokott mdon fggvnyknt hvjuk. A visszaadott rtkrl 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 elnyei (nem trdtnk 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 sikeressgrl. 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 tlk:
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.

Az eljrshvsok nll utastsai a Visual Basic nyelvnek. Ezzel szemben a


fggvnyhvs csak kifejezsben szerepelhet.

3.

A fggvnyrtk visszaadsrl magunknak kell gondoskodni. A fggvnybl


val kilps eltt a fggvny nevt (mint kznsges vltozt) az rtkads
bal oldaln hasznlva definilhatjuk a visszatrsi rtket.

2.6.2.4. Rekurzv alprogramok


A matematikban lehetsg van bizonyos adatok s mveletek rekurzv definilsra.
A rekurzv algoritmusokban a soron kvetkez lpshez az elz 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 egyszeren 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 ttekinthetbb, 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 ismtld hvsok msik kellemetlen kvetkezmnye a szmtsi id
jelents nvekedse. A rekurzv alprogramok ksztskor mindig mrlegelni kell a
megolds memria- s idignyt. Ha egy feladat rekurzv megoldsnak ltezik egy
viszonylag jl programozhat iteratv prja, akkor mindig az utbbi hasznlata javasolt.
A rekurzv mkds jl tanulmnyozhat a faktorilis szmts algoritmusn, melynek
nem rekurzv defincija: n!=l-2-3-...-(n-l)-n. Elszr 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 kveten a hvsi lnc tagjai sorban
visszatrnek a megfelel rszeredmnnyel. Utoljra a lnc els eleme, az ltalunk hvott fggvny fejezi be mkdst, megadva a kvnt faktorilis-rtket.
2.6.3. Vltozk az alprogramokban
A programoknak, mint lttuk, vannak vltozi, s az alprogramokban is deklarlhatunk vltozkat. Mieltt egy Visual Basic programelemet (konstanst, vltozt, alprogramot, tpust stb.) felhasznlnnk, kt krdsre kell vlaszt keresnnk:
Mikor jn ltre, s mikor sznik meg a programelem?
A program mely rszeibl 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 kvlrl (ms alprogrambl) nem rhetk el. A Dim utastssal deklarlt loklis vltozk, a paramterekhez hasonlan csak az alprogram hvsakor jnnek ltre, s
megsznnek, 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 megrzik az rtkket. Az ilyen tulajdonsg vltozkat a Static utastsban kell deklarlnunk. Ha a Static kulcsszt az alprogram eltt szerepeltetjk, akkor minden loklis vltoz statikus lettartam lesz. A statikus vltozk 0 ("", Empty)
kezdrtket 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 kitevj 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 elzleg 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 rhetk 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 elz 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 eltt tartanunk:
1. Minden azonostt a felhasznls helye eltt 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
minstve elrhetk 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 lehetv teszik, hogy ugyanazt a programrszt kicsit mskppen, ms adatokkal hasznljuk. A paramterek az alprogramok
olyan helyi vltozi, amelyek a hvs sorn kvlrl kapnak rtket.
Kszthetnk olyan alprogramokat is, amelyeknek nincsenek paramterei. A paramter
nlkli alprogramok ltalban mindig ugyanazt a mveletet vgzik. Pldul, az albbi
eljrs minden hvskor ugyanazt a szveget jelenti meg:

2. FEJEZET

Az alprogramok hasznlatban rejl elnyk 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 ksbbi 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 eltt a
ByVal foglalt szt kell szerepeltetnk:

Ha tbb paramtert hasznlunk, akkor az egyes paramter-lersok kz vesszt 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 lehetv 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 ellenrzi, 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 mkdst 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 mkdsnek 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 mveleteket (pldul cskkenti, nveli vagy felcserli azokat). Ekkor a bemen (egyirny) rtkparamterek hasznlatval nem rjk el a clunkat, hiszen az ilyen paramtereken elvgzett mveletek 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
eltt 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 tetszleges tpus paramtert definilhatunk. Az rtkparamterek esetn azonban nem hasznlhatjuk a tmb- s a felhasznli tpust.
Numerikus tpus

Taln a legegyszerbb megoldsok kz tartozik, amikor szmokkal, numerikus vltozkkal mveleteket vgz alprogramokat ksztnk. (Ide sorolhatjuk a dtum tpust
is.) A fejezet pldinak tbbsge ebbe a kategriba tartozik, gy jabb eljrsok s
fggvnyek ksztstl eltekintnk.
String tpus

A szvegfeldolgozshoz szorosan ktdnek a klnbz karaktersorozat-kezel alprogramok. Az elz 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 mvelett, fggvnyknt is megoldottuk a feladatot:

Mivel a sajt alprogramokat s tpust is a formmodulban definiltuk, szksg volt a


Private elrs hasznlatra.

A VISUAL BASIC NYELV

Tmbk

A Visual Basic knyelmes eszkzket biztost a tmbk alprogramokban trtn feldolgozsra.


Az albbi fggvny kiszmtja a megadott (tetszleges mret) egydimenzis tmb
elemeinek sszegt. A fggvnyt statikus, illetve dinamikus tmbbel egyarnt hvtuk.

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

2. FEJEZET

A Visual Basic 6 j lehetsge, hogy tmbt visszaad fggvnyeket is kszthetnk.


Mieltt 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 ftljnak


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 kezdrtkkel elltnunk. Ellenkez esetben a
Visual Basic a szoksos kezdrtket (0, "" stb.) adja szmukra. Kivtelt kpeznek a
Variant tpus opcionlis paramterek, melyek hinyz" (Missing) jelzbitjnek rtke 1 lesz, ha nem kapnak rtket. Ezt a jelzbitet az IsMissing() fggvnnyel tesztelhetjk.
Amennyiben az alprogram hvsakor az opcionlis paramtereknek nem adunk rtket, a rendszer automatikusan a megadott kezdrtket 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. Tetszleges szm argumentum hasznlata


A Visual Basic olyan alprogramok ksztst is megengedi, melyek hvsakor tetszleges szm argumentumot megadhatunk. Ehhez egy varinstmb-paramtert kell definilnunk a ParamArray kulcsszt kveten.
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) tetszleges 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 elemekbl pl fel:

Egyetlen eltrs az eddigiekhez kpest, hogy az As Any tpusmegadst is alkalmazhat-j


juk a tpusellenrzs letiltsa rdekben.
A Windows alkalmazs-programozi fellethez (API-hoz) kapcsold deklarcik
ellltsban 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 tetszleges 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 eltt 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 bettpusokat. 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 lehetsget biztost a Visual Basic objektummodulok nyilvnos metdusainak hvsra, tulajdonsgainak lekrdezsre s belltsra:

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

(A Property Get/Let/Set alprogramokat a kvetkez alfejezetben ismertetjk.)


Nzznk nhny pldt a jl ismert vezrlk felhasznlsval!

A VISUAL BASIC NYELV

A CallByName() fggvny paramtersorban a hvni kvnt alprogram nevt karaktersorozatban kell megadni, gy sokrtbb felhasznlsra ad lehetsget, mint a kzvetlen
hvs. Az albbi pldban a formon tallhat sszes vezrlt {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 idarnyos 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 kezdrtke (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 idszakon (v, hnap stb.) keresztl vrhat pnzramlsok (cash flow) jelen-, foly- s jvbeli 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 befektetsbl szrmaz, adott idszakon
keresztl trtn pnzramls (klcsnk rtkelsnl a teljesen amortizlt kamatsszeg) mrtkt szmthatjuk ki. A fggvny paramtereiben a pnzramlsi idszakok szmnak megadsn kvl a befektets jelen- s jvbeli rtkt, a diszkontlshoz hasznlt rtt (illetve kamatlbat), illetve a kifizetsek idszak eleji vagy idszak
vgi voltt is jelezni kell.

2. FEJEZET

A PPmt() (Period Payment) s az IPmt() (Interest Payment) fggvnyek segtsgvel


a Pmt() fggvny ltal visszaadott rtk tke- s kamatsszetevre bonthat szt. A
PPmt() az egy adott idszakban esedkes pnzramls tkersznek, az IPmt() fggvny pedig a pnzramls kamatrsznek szmtst vgzi. Mind a kt fggvny a befektets jelen- s jvbeni (becslt) rtkbl, a diszkontlshoz hasznlt rtbl, a
kamatfizetsek idszak eleji vagy idszak vgi folystsbl, illetve a figyelembe
vett idszakok szmbl indul ki. A kiszmtott sszegek a sorszmmal megadott idszakra vonatkoznak.
A NPer() (Number of Periods) fggvnyt a pnzramlsi idszakok szmnak meg-j
alaptsra hasznlhatjuk, az ismert diszkontrta, a befektets jelen- s jvrtke, azj
idszakonknt azonos pnzramlsok egysgsszege, illetve a pnzramls idszak
eleji vagy vgi volta alapjn.
A PV() (Present Value) fggvny segtsgvel kiszmthatjuk, mennyi a befektets jelenrtke, ha adva van a befektets vrhat jvbeli rtke, illetve a befektets mkdsnek kvetkeztben megadott szm idszakon keresztl kapott, azonos bevteli
sszegek nagysga. A fggvny egyik paramterben meg kell adni a diszkontrtt,
egy msikban pedig azt, hogy a pnzramlsok az idszak elejn vagy a vgn trtnnek.
Az FV() (Future Value) fggvny a mostani befektets vrhat jvbeli rtkt adja
vissza. A fggvny paramterei - egy kivtelvel - teljesen megegyeznek a PV(j
fggvny paramtereivel (azaz milyen idszakon keresztl jvedelmez a befektets,
mekkora az egy idszakra jut pnzramls mrtke, a kifizetsek az idszak 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 jvbeni 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 idszakokra becslt sszegeket tartalmazzk. A fggvny utols paramtere azt
jelzi, hogy a kifizetsek az idszak 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 jvedelmezsgi idszakaira azonos mrtkben sztkent" rtamutatt. A rtamutatt a befektets jelen- s jvbeli rtkbl, az idszakonknti idszak elejn vagy vgn folystand - azonos bevteli sszegek nagysgbl, illetve az idszakok szmbl vezethetjk le.
Az IRR() {Internl Rate of Return) fggvny a befektets bels megtrlsi rtjt
szmolja ki abban az esetben, ha a befektetsbl szrmaz bevtelek nagysga idszakfgg. 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 - rtkrl 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


Mieltt 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 mveletek
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 stl 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 vezrlmodul
(.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 kezeljt az objektum felhasznljnak kell megrnia. Ezek
alapjn az objektumok ltalnos felptse a 2.21 brn lthat.
2.7.2. Az elre elksztett objektumosztlyok pldnyai
A vizulis programpts sorn a rendszer bizonyos "gyri" sszetevit (vezrlelemeket) 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 szvegmezben! A fejleszts sorn
az albbi tulajdonsgokat vltoztattuk meg:

A parancsgombon ktszer kattintva az egr bal gombjval a kdszerkesztbe jutunk,


ahol megrhatjuk az egr alaprtelmezs szerinti esemnyhez (kattints, Click) tartoz esemnykezel eljrst. Az eljrs nevt a rendszer lltja el a vezrlelem s az
esemny nevbl: Command1_Click. Az rlap szabad terletn kattintva ktszer az
egrrel a Form_Load nev esemnykezelt rhatjuk meg.
Az rlap, illetve az rlapra helyezett vezrlelemek 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 elz tblzatnak megfelel belltsokat a programbl is elvgezhetjk a Form_Load esemnykezel eljrsban:

Az utastsok ttekinthetbb 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 lehetv 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 kezdd rtkadsok szolglnak.) Az j ablakot az elz 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 eltnik. 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

Vezrltmbk ltrehozsval az rlapon elhelyezett vezrlobjektumok tbbszrzsre is van lehetsg. Az elz pldnkat gy mdostjuk, hogy a Ltrehoz nyomgomb megnyomsakor ltrehozunk egy msik szvegmezt, amit a Trl gombbal
meg is szntetnk. A megoldshoz a Textl objektumok egyelem vezrltmbb kell

2. FEJEZET

alaktanunk az Index tulajdonsgnak val rtkadssal (0). Ekkor termszetesen a


kirshoz hasznlt parancsgomb esemnykezeljt is mdostanunk kell:

Az l-es index (msodik) szvegmez ltrehozst, megjelentst, illetve trlst az


albbi kt eljrs tartalmazza:

2.7.2.3. Objektumok gyjtemnye (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 gyjtemnyhez 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-gyjtemny deklarcija:

A kollekciban ngy rgztett elemet helyeznk el, azonban az tdiket dinamikusan


hozzuk ltre s szntetjk meg. A gyjtemny 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 elrhetk. Az


elemek indexelse 1-tl 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 vezrlbe 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 gyjtemnybe
val bevitelkor, akkor az albbi hrom lehetsg 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 -gyjtemnyek


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 lehetsgeket.
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 fejleszti 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 - kpernyobjektum
A teljes kperny adatait tartalmazza: mretek (Width, Height), bettpusok
szma (FontCount), a bettpusnevek tmbje (Fonts), az aktv form (ActiveForm), az aktv vezrlelem (ActiveControl) stb.
Form - rlapok gyjtemnye
Az alkalmazshoz kapcsolt formobjektumok kollekcija.

AVISUALBASIC NYELV

Printers - nyomtatk gyjtemnye


A Windows rendszerben fellelhet nyomtatk (objektumnak) kollekcija.
Formx.Controls - vezrlelemek gyjtemnye
A Formx rlapon tallhat vezrlobjektumok 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 bettpus 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 megfelelen 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 fejleszti 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 kveten 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 kvetkezkben bemutatsra kerl, a ksi 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 elzvel 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 kezdden sajt osztlyt is ltrehozhatunk a .CLS kiterjeszts osztlymodulban. Osztlymodult a projekthez a Project/Add Class Module menpont segtsgvel adhatunk, kt lehetsg 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 ellltshoz. 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

Ebbl a kis pldbl is jl lthat, hogy a tulajdonsgok hasznlatnak clja, az osztly private adattagjnak ellenrztt 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.
Bvtsk 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 kezeljben megadhatjuk azt az utastssori


amit kzvetlenl az objektum ltrehozsa utn hajt vgre a rendszer. A Terminate esemny kezelje pedig kzvetlenl az objektum megsemmistse eltt hvdik meg.
Vgezetl nzznk egy egyszer szmolgp programot! A form csak a felhasznl
felletet biztostja (2.23. bra), mg a mveleteket a SzmolOsztly osztly objektuma
vgzi.
A szamol.cls llomny tartalmazza az osztly defincijt. Az osztlyban egyarnt
tallunk sajt adattagokat s metdust, esemnyeket valamint klnba
elrhetsggel 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 Mvelet() 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 mvelet csak rhat
Public Property Let op(ByVal vData As String)
mvarop = vData
Mvelet
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
Mvelet
End Property
Rem az els operandus csak rhat
Public Property Let a(ByVal vData As Double)
mvara = vData
Mvelet
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 szvegmezk 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 lehetsgeivel, vizsgljuk meg a
Visual Basic-et, mint Windows alkalmazsok fejleszteszkzt! 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 lehetsgeinek kiaknzsa. Mieltt
e krdsek rszletes vizsglatba fognnk, tekintsk t, hogyan lehet a Visual Basicben Windows alkalmazst kszteni!
A Windows alkalmazsok egyttmkdnek az opercis rendszerrel - elengedhetetlen
teht, hogy legalbb egyszerstett kpnk legyen arrl, hogyan mkdik 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
vezrlelemek segtsgvel kommuniklnak az alkalmazssal. Vezrlelemekkel kzlnk informcit a programmal, adatokat adunk meg, illetve jelezzk egyb, az alkalmazs hasznlatra vonatkoz szndkainkat. A program is hasznlhat vezrlelemeket adatainak s informciinak ablakokban val megjelentsre.

3.1. Esemnyvezrelt programpts


Elszr lssuk, hogyan mkdnek az alkalmazsok a Windows rendszer felgyelete
alatt!
3.1.1. Az alkalmazsok szerkezete
A programok futtatsa szempontjbl vizsglva a Windows mkdst, 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 egyttmkdve vgzi feladatt.

A Windows tbbprogramos opercis rendszer - ennek megfelelen tmogatja tbb


alkalmazs prhuzamos mkdst. A Windows 95, a Windows 98, a Windows 2000,
a Millennium, az NT s az XP elre meghatrozott stratgia szerint osztja fel az erforrsokat a programok kztt. Az alkalmazsok - a szmukra biztostott
idszeletekben - a tbbi programtl fggetlenl futnak.
A Windows alkalmazsok mkdst a 3.1. brn szemlltetjk.

3.1. bra A Windows alkalmazsok


szerkezete

Elszr az opercis rendszer oldalrl, majd a program szempontjbl vizsgljuk


meg a mkdst.
A felhasznl minden egyes tnykedse, a perifriaelemek adatkrse s -kzlse n.
zenet formjban jelenik meg a Windows rendszerben. A perifria-esemnyeket a
Windows elszr 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 idtartamban. Arra is van lehetsg, 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 megjelentsrl is gondoskodik, a feldolgozott zeneteknek megfelel mdon.
A programok oldalrl vizsglva a rendszer mkdst, az alkalmazsok alapfunkcii
az albbiakban foglalhatk ssze:
az alkalmazs erforrsainak 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 erforrsokat. 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, amelybl 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 mkdsrl, az ablakok megjelentsrl.
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
mkdst 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 fejleszti krnyezet ellltja az
ablak modelljt, melyet a fejleszts sorn rlapnak hvunk.

3.1.2. A projekt
Mieltt 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 - erforrsokat
(pldul bitkpek, szveges adatok, billentyzet-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 vezrlk tulajdonsgaira belltott kezdrtkeket, 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 vezrlelem forrsfjl.
ActiveX felhasznli vezrlelem binris llomny.
Osztlymodul forrsfjl.
Sg llomny.
Hibazenet fjl.
Szveges, grafikus erforrsokat tartalmaz fjl.

3.1.3. A Visual Basic integrlt fejleszti krnyezete


Amikor elindtjuk a Visual Basic rendszert elszr arrl kell dntennk, hogy milyen
projektet ksztnk.

3.2. bra A Visual Basic projekt tpusnak k


vlasztsa

A fejleszti krnyezet tbb ablakbl pl fel. A kperny fels rszn tallhat a men. Az eszkzsorbl a fontosabb menpontok ikonon val kattintssal azonnal elrhetk.

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 vezrlk 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 fejlesztrendszer rsze a program rsra szolgl
szvegszerkeszt.

3.4. bra A form a fejleszti


krnyezetben s a program szvegszerkesztje

A formra klnbz, elssorban I/O clokat szolgl objektumok pldnyait,


komponenst, vezrlelemet helyezhetnk. A fejlesztrendszerhez tartozik a
vezrlelemek 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 vezrlelemek tulajdonsgait. A legrdl menbl 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 mkdtetshez 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.

Objektum
megjelentse

A View\Object, a <Shift+F7> vagy a "View Object" nyomgomb megnyomsval a program grafikus modelljre kapcsolunk t.
A "Toggle Folders" ikonra kattintva a projektsszetevk listjnak ktfle megjelentsi mdja - a modulok csoportostva,
vagy anlkl - kztt vlaszthatunk.

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 mveleteket fogad alkalmazsablak vagy prbeszdablak lesz belle.
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 eltr 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 bettpust (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 minstennk kell,
vagyis meg kell mondanunk, melyik objektumpldnyon kvnjuk a mveletet
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 Betmret parancsgomb megnyomsakor vletlen
betmrettel 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 betmretei

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 kezeljt is meg kell rnunk. (Ezt a kezelt 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 elz pldban is lttuk, hogy az ablak megfelel mkdtetshez 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 kezeli eljrsok, amelyeket
szksg esetn magunk is meghvhatunk.
Az esemnyek tbbsge a felhasznli beavatkozs eredmnyeknt jnnek ltre, azonban nhny esemny a Windows rendszer mkdsvel 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 mkdik, ha a programunkat
nem az end utastssal lltjuk le.
A Load esemny kezeljt 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 elz kt esemnyhez hasonl mdon az
inputfkusz megkapsrl, illetve elvesztsrl tudstanak. (rlap esetn csak akkor
keletkeznek, ha az rlapon nincsenek aktv vizulis vezrlelemek.)
A Resize esemny az ablak tmretezskor, mg a Paint esemny az ablak jrafestsekor keletkezik.
A felhasznl ltal vgzett mveletek 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-billentyk llapott jelli a billentyzeten <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 billentyk billentyzeten val letst ktflekppen is feldolgozhatjuk. A billentyket 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 vezrlk

helyezkednek el, akkor a billentyzet esemnyei nem jutnak el a formhoz, hiszen


kzvetlenl a fkuszban tallhat vezrlhz irnyulnak. Ahhoz, hogy a form rtesljn a billentyzet esemnyeirl, a KeyPreview tulajdonsg rtkt true-ra kell lltanunk.
A KeyDown s a KeyUp esemnyek paramterknt egy billentyazonostt {KeyCode)
s a shift-billentyk llapott (Shift) kapjk. (A billentyt konstansok segtsgvel
azonosthatjuk, pldul az <F1> billenty kdja vbKeyFI).
A KeyPress esemny paramtere a lenyomott billentyk 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> billentyk 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 szvegmezhz:


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 vezrlt 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 kpernyrl:
Egy adott pillanatban az alkalmazsnak egyetlen ablaka s ennek egyetlen
vezrlje fogadhatja csak a felhasznli beavatkozsokat. A Screen objektum
ActiveForm s ActiveControl jellemzi 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 jellemzi
kztt. Az alkalmazs aktulis egrkurzort trolja a MousePointer - egsz t
pus - tulajdonsg. A Fonts jellemzt hasznlhatjuk a kpernyn megjelent
het fontcsaldok lekrdezsre.

3.3 A vezrlelemek hasznlata


A Visual Basic rendszerben vezrlknek nevezzk azokat a (vizulis s nem-vizulis)
ptelemeket (komponenseket), amelyeket az rlapra (formra) helyezve ellltjuk a
alkalmazs felhasznli fellett.
3.3.1. A vezrlk csoportostsa
A vezrlelemeket kt csoportba sorolhatjuk, az alap- s az ActiveX-vezrlk 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 vezrlvel trtn mveletvgzst?
Mely esemnyek (events) kezelsben van segtsgnkre a vezrlelem?
3.3.1.1. Alapvezrlk
Az alapvezrlk, melyek ikonjt a 3.10. brn lthatjuk, minden Visual Basic programbl elrhetk. A nyl-mutat akkor vlik kijelltt, ha egyetlen vezrlt sem jellnk ki az eszkztron. Ekkor az egr segtsgvel az rlapon elhelyezett vezrlk
pozcijt s mrett mdosthatjuk.
Az alapvezrlk 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 "lv" teszik az alkalmazsunkat.

3.10. bra
Alapvezrlk az eszkztron

Az albbi tblzatban sszefoglaltuk az egyes vezrlkhz tartoz osztlyokat:

Vezrl

Osztly

Lers

PictureBox

Bitkp, ikon, metafjl, JPEG s GIF formtum fjlokban trolt kpet jelent meg
bekeretezve. A formhoz hasonlan grafika
megjelentsre is hasznlhat.

Label

Felirat megjelentsre alkalmas.

TextBox

Adatbevitelre hasznlhat szvegszerkeszt vezrl.

Frame

Keretbe foglalt vezrlcsoport ltrehozsra alkalmas elem.

CommandButton

Nyomgomb, szveggel a tetejn.

CheckBox

Ki- s bekapcsolhat jellngyzet, oldaln szveggel.

OptionButton

Ki- s bekapcsolhat vlasztgomb,


oldaln szveggel.

ListBox

Grgethet ttelek listja.

Kombinltlista

ComboBox

A listaablak s a szvegszerkeszt vezrl


sszeptse

Vzszintes
grgetsv

HScrollBar

nllan megjelen vzszintes grgetsv

Fggleges
grgetsv

VScrollBar

nllan megjelen fggleges grgetsv

Idzt

Timer

A belltott id lejrtakor periodikus


esemnyt hoz ltre (nem lthat elem).

Meghajtlista

DriveListBox

A Windows rendszerben elrhet lemezmeghajtkat listban jelenti meg.

Knyvtrlista

DirListBox

Knyvtrak hierarchikus listjt jelenti


meg.

llomnylista

FileListBox

A Path tulajdonsgban megadott knyvtr


llomnyainak nevt jelenti meg.

Kpmez

Cmke

Szvegmez

Keret

Parancsgomb

Jellngyzet

Vlasztgomb

Lista

Vezrl

Osztly

Lers

Alakzat

Shape

Hatfle geometriai alakzat megjelentsre


hasznlhat vezrl.

Vonal

Line

Kp

Image

Bitkp, ikon, metafjl, JPEG vagy GIF


formtum fjlokban trolt kpet jelent
meg keret nlkl.

Adat OLE-

Data

Lehetv teszi az adatbzisban trolt adatokhoz trtn hozzfrst, s a rekordok


kztti mozgst.

kontner

OLE

Egyeneseket jelent meg.

Ms alkalmazs ltal kezelt OLE-objektumok megjelentsre alkalmas.

3.3.1.2. ActiveX-vezrlk
A Visual Basic egy sor 32-bites vezrlelemmel 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


stbillentyk letsekor megjelenik a Components prbeszdablak. A prbe
szdablak elemeinek felhasznlsval adhatunk az ppen nyitott projekthez s
az eszkztrhoz vezrlket.
A Components prbeszdablakban hrom flet tallunk: a Controls lapon a
vezrlelemek, a Designers lapon a tervezk, a Insertable Objects lapon pe
dig a beilleszthet objektumok listja jelenik meg.

Pldaknt adjuk az eszkztrhoz a RichTextBox szvegszerkeszt vezrlt! 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 elrhetv


vlik a Visual Basic rendszer szmra. Kivlaszthatjuk a RichTextBox vezrlt
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-vezrlket, a komponenst trol .OCX llomnyok szerinti csoportostsban.
A MSMCTL.OCX fjlban trolt komponensek {Microsoft Windows Common
Controls):
Vezrl

Osztly

Flsv

TabStrip

Svban elhelyezett, fleket tartalmaz vezrl, amelyet ltalban lapozshoz hasznlunk.

Eszkzsv

ToolBar

Nyomgombokbl ll, eszkzsvot megvalst vezrl.

llapotsor

StatusBar

A fablak szlein megjelen sv, amely


klnbz informcikat tartalmazhat

Munkafolyamatkijelz

ProgressBar

Munkafolyamat elrehaladtnak kijelzsre szolgl, balrl jobbra kitltd tglalapknt jelenik meg

Hierarchikus
megjelent

TreeView

Adatok hierarchikus (fastruktrj) megjelentsre hasznlhat. Minden csomponthoz rendelhet cmke s bitkp.

Listamegjelent

ListView

Listltem objektumokat ngyfle nzetben


jelent meg.

Kplista

ImageList

Kpkollekcik kialaktst segt vezrl.


A kpeket ms ltalnos vezrlk hasznljk.

Csszka

Slider

Adott tartomnyba es rtk kivlasztst


segt komponens

Kpkombinlt
lista

ImageCombo

Kpek kombinlt listban val megjelentse

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


Vezrl

Osztly

Lers

Animci

Animation

Lptet

UpDown

Naptr

MonthView

A tmrtetlen s az RLE mdszerrel tmrtett hang nlkli .AVI-llomnyok lejtszsra alkalmas vezrlelem.
A kt nyilat mutat lptet vezrlvel nvelhetnk vagy cskkenhetnk ms vezrlben trolt rtkeket. Naptr hnap
bontsban.

Napvlaszt

DTPicker

Dtum kivlasztsa

Sk csszka

FlatScrollBar

Sk csszka

A COMDLG32.OCX llomnyban trolt komponens {Microsoft Common Dialog


Control):
Vezrl

Osztly

Lers

ltalnos
prbeszdablak

CommonDialog

Lehetv teszi a Windows ltalnos prbeszdablakainak egyszer elrst.

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


Vezrl

Osztly

Lers

Adatkapcsolt
tblzat

DBGrid

Lehetv teszi Recordset objektumhoz


tartoz adattbla megjelentst s kezelst.

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


Controls):
Vezrl

Osztly

Lers

Adatkapcsolt lista

DBList

A Recordset objektumhoz tartoz


adattbla mezjnek (oszlopnak)
listaablakban val megjelentsre
szolgl.

Vezrl

Osztly

Lers

Adatkapcsolt
kombinlt lista

DBCombo

Az adattbla mezjnek (oszlopnak)


lenyfl kombinlt listaablakban val
megjelentsre s kezelsre hasznlhat.

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


Vezrl

Osztly

Lers

Multimdia

MMControl

Multimdia adatok (kp, hang, animci


stb.) lejtszst, s a lejtszs vezrlst
vgzi.

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


Vezrl

Osztly

Lers

Diagram

MSChart

Tmogatja klnbz grafikonok megjelentst adattblban trolt adatokbl.

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


Vezrl

Osztly

Lers

Kommunikci

MSComm

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

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


Vezrl

Osztly

Lers

Rugalmas tblzat

MSFlexGrid

Adatok tblzatos kezelsre, illetve


Recordset adattbla megjelentsre
hasznlhat vezrl.

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


Vezrl

Osztly

Lers

Internet
adattviv

Inet

A HTTP s az FTP internet protokollokra pl vezrlelem.

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


Vezrl

Osztly

Lers

MAPI-kapcsolat

MAPISession

Az zenetkzvett API-hoz pt ki kapcsolatot.

MAPI-iizenetek

MAPIMessages

zenetek kldst s fogadst tmogat


vezrlelem.

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


Vezrl

Osztly

Lers

Adatbeviteli
sablon

MaskEdBox

Minta alapjn trtn adatbevitelt megvalst vezrlelem.

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


Vezrl

Osztly

Lers

Tvoli adat

MSRDC

Tvoli ODBC adatforrs adatainak elrst lehetv tev vezrl.

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


Vezrl

Osztly

Lers

Winsock

Winsock

Tvoli gpek kztti adatcsert tesz lehetv az UDP, illetve a TCP protokollok
felhasznlsval.

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


Vezrl

Osztly

Lers

Bvtett
szvegmez

RichTextBox

A TextBox-n\ bvebb szvegformzsi


lehetsgeket biztost vezrl.

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


Vezrl

Osztly

Lers

Rendszeri nfo

Syslnfo

A vezrl lehetv teszi, hogy programunkat felksztsk bizonyos rendszerszint esemnyek kezelsre.

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

Vezrl

Osztly

Lers

Fles
prbeszdablak

SSTab

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

3.3.2. A vezrlkrl ltalban


Az elz fejezetben felsorakoztatott vezrlelemek alapveten klnbznek egymstl, hiszen ms-ms cllal kszltek. Ha azonban megvizsgljuk a vezrlk 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 vezrlk specilis lehetsgeinek bemutatsra.
3.3.2.1. A vezrlk kzs tulajdonsgai
A vezrlelemek - a formhoz hasonlan - tulajdonsgokkal rendelkeznek, melyek segtsgvel a fejleszts s a program futsa sorn egyarnt bellthatjuk, illetve lekrdezhetjk a vezrlk jellemz adatait. A tulajdonsgok tbbsge vezrlnknt ms s
ms, azonban van nhny olyan jellemz, amellyel minden vezrl rendelkezik.
A vezrlk neve
A vezrlk nevt a Name tulajdonsg trolja. A nv betvel kezddik 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 vezrlt 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 vezrlk elhelyezkedse
A vezrlelemek elhelyezkedst a befoglal tglalapjuk bal fels sarknak koordinti {Top, Left), szlessge (Width) s magassga (Height) hatrozzk meg. Amikor a
vezrlt a formra helyezzk, ezek a jellemzk automatikusan rtket kapnak. A fenti
tulajdonsgokat a program tervezse sorn, s futs kzben egyarnt bellthatjuk. A
belltott mretek a vezrlt tartalmaz ablakban definilt koordinta-rendszerben s egysgben rtendk. Alaprtelmezs szerint a Form ScaleMode tulajdonsga vbTwips
rtk. (A twip egy kpernyfggetlen 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 kpernyn egy 567 twip hossz vonal kinyomtatva 1 centimteres lesz.)

Navigls a vezrlk kztt

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

A vizulis vezrlelemek lehetnek lthatak - ez az alaprtelmezs -, s lehetnek rejtettek. Ezen kt llapot egyike brmikor bellthat, hiszen a vezrlt 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 mkdtetst. 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
vezrlk 2D-3D megjelense

Az alapvezrlk egy rsze a szoksos Windows-os mkdsen tlmenen specilis lehetsgekkel is rendelkezik, melyeket a Style tulajdonsg alaprtknek (0 -Standard)
megvltoztatsval rhetnk el. Az albbi brn a vezrlket szabvnyos, illetve mdostott formban lthatjuk:

3.14. bra Szabvnyos s nem szabvnyos


vezrlstlus

A vezrlk bettpusa
A Windows rendszerben a megjelent-eszkzkn a karakterek klnbz bettpussal szerepelhetnek. A vezrlk esetn az alaprtelmezs szerinti MS Sans Serif bettpust Norml stlusban s 8 pontos mretben hasznljuk. Ha el akarunk trni az alaprtelmezstl, akkor mdostanunk kell a Font tulajdonsgot.
A fejleszti krnyezetben a bettpus megvltoztatshoz elszr ki kell vlasztanunk
a Font tulajdonsgot a Properties ablakban, majd kattintanunk kell a
gombon.
Ekkor megjelenik a Bettpus prbeszdablak, amelyben megvltoztathatjuk a betk
tpust, stlust, mrett stb.

3.15. bra Vezrlk


bettpusnak belltsa
Vezrlk adattrolja

Minden vezrl rendelkezik egy string tpus Tag tulajdonsggal, amely adattrolknt hasznlhat, pldul objektum azonostsra is szolglhat.
Vezrlt 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 szlt azonostja. Az albbi pldban a vezrln tlmenen a vezrl szl formjt is elrjk:
Public Sub Bellt(Vezrl As Control)
Vezrl.Caption = "VB 6"
Vezrl.Parent.Caption = "VB 6"
End Sub

Vezrlk tmbje - az Index tulajdonsg


A Visual Basic lehetv teszi, hogy a vezrlket tmbbe rendezzk. A vezrltmb az
azonos tpus s nev vezrlk olyan rendezett halmaza, ahol a vezrlknek sajt tulajdonsgaik vannak, az esemnyek kezelsre szolgl eljrsokat azonban kzsen
hasznljk.

Minden vezrltpusnak van egy Index tulajdonsga. Ha ennek az Index tulajdonsgnak a tervezs sorn nem adunk rtket, akkor a vezrlt egyszer vezrlknt hasznljuk. Ha azonban a tervezs sorn az Index tulajdonsgnak tetszleges nem negatv
egsz rtket adunk, akkor ettl kezdve a vezrlk tmbjt definiltuk, s a vezrlkkel, mint tmbelemekkel dolgozunk.
A tervezs sorn vezrltmbt a vglap segtsgvel is ltrehozhatunk. Ha egy vezrlelemet kijellnk, s a vglapra msoljuk, majd onnan visszamsoljuk, figyelmeztet zenetet kapunk, hogy csak akkor hasznlhatunk kt azonos nev vezrlt, ha
azok egy vezrltmb elemei.
A ltrehozott vezrltmb elemeit a tervezs sorn gy kezelhetjk, mintha mindegyik nll vezrl lenne. A nevk azonos, az Index tulajdonsgnak mindegyik esetben ms rtke van, egyb tulajdonsgaik klnbzek is lehetnek. A vezrltmb
minden eleme az egyes esemnyekhez ugyanazt az esemnykezel eljrst hasznlja,
s minden esemnykezelnek van egy Index paramtere, amely arrl informl, hogy
melyik tmbelemhez tartozik az esemny.
Vezrltmbk dinamikus kezelse
Sokszor nem tudjuk elre, hogy hny vezrlre lesz szksgnk. A vezrltmbk felhasznlsval a program futsa sorn is ltrehozhatunk j vezrlelemeket. Ehhez
azonban a vezrltmb 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 vezrltmbk hasznlata lehetv teszi a memria dinamikus kezelst is. A Load
utastshoz hasonlan az UnLoad utastst hasznlhatjuk a vezrltmb elemeinek
megszntetsre:
Unload

objektum

3.3.2.2. A vezrlk mkdtetse programbl


A vezrlk tbbsge rendelkezik metdusokkal (a vezrlbe ptett, kvlrl hvhat
alprogramokkal), melyek felhasznlsval bizonyos mveletek elvgzst krhetjk a
vezrltl. 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 sszegyjtttk az ltalnosan hasznlhat metdusokat, kln


figyelmet szentelve a ZOrder metdus bemutatsra.
Metdus
Drag

Lers
Elkezdi, befejezi vagy megszaktja a vezrl drag and
drop (vidd s dobd) mdszerrel trtn thelyezst.

Move

A vezrlelem thelyezsre, illetve tmretezsre


hasznlhat.

Refresh

Krhetjk a vezrl teljes jrarajzolst.

SetFocus

Ablakkal rendelkez vezrlelem esetn a vezrlre helyezi a fkuszt.

ZOrder

Fedsben lev vezrlelemek megjelentsi sorrendjt


definilhatjuk.

Vezrlk egymson (ZOrder)


A formokon hrom grafikus rteget hasznlunk a megjelents sorn. A leghts a httr, amelyen a grafikus metdusok dolgoznak, a kzpsn grafikus vezrlk foglalnak
helyet, vgl a legfels, amely a tbbi vezrlt tartalmazza. A hrom rteget egyms
eltt 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 vezrlket az rlapra helyezzk, megadjuk azok - rtegen belli - takarsi
sorrendjt is, hisz a ksbb felhelyezett vezrl kerl legfellre. Ugyancsak hasznlhatjuk a vezrlk felbukkan menjnek "Bring to Front" s "Send to Back" menpontjait. (Az elbbi a kivlasztott vezrlt az sszes tbbi fl helyezi, mg az utbbi
az sszes tbbi al.)
A program futsa sorn minden vezrl esetben a ZOrder metdust hvhatjuk a vezrlk alulra, illetve fellre helyezsre.
objektum.ZOrder

[pozci]

A metdus az objektumot a pozci egsz tpus paramternek megfelelen 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 vezrltmbben 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 tltgombokat, 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

'

vletlenszeren 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 vezrlk esemnyei


A vezrlk esemnyeit a formhoz hasonlan esemnykezel eljrsokban dolgozhatjuk fel. Az esemnykezel eljrsok neve a vezrlobjektum nevbl s az esemny
nevbl tevdik 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> billentyt nyomtk le If
KeyCode = vbKeyX Then Commandl_Click End
Sub

A vezrlk tbbsge rendelkezik egy n. alaprtelmezs szerinti (leggyakrabban hasznlt) esemnnyel. Ezen esemny kezeljt egyszeren megrhatjuk, ha a fejleszti
krnyezetben az egr bal gombjval ktszer kattintunk az rlapra helyezett vezrln.

Nhny vezrl alaprtelmezs szerinti esemnye:


Vezrlelem
ComboBox
CommandButton
Data
PictureBox
TextBox
Timer

Esemny
Change
Click
Validate
Click
Change
Timer

Azon vezrlk, amelyek birtokolhatjk az inputfkuszt, esemnnyel jelzik annak megszerzst (GotFocus), illetve elvesztst (LostFocus).
A fkusszal rendelkez vezrl billentyzet- s karakteresemnyek ltrehozsval jelzi, ha a felhasznl billentyket t le a billentyzeten. 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 mveletek 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 egyszerbb. 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 vezrlcsoportokat alakthatunk ki. A keret tglalapknt jelenik meg, amelynek bal fels sarknl egy fejlc {Caption) is lthat. A kereten bell elhelyezett vezrlk - 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 vezrlket.
A keret vezrl

neve (Name) s fejlce (Caption) a formra trtn felhelyezs


utn automatikusan Framel lesz. A kereten bell klnbz
vezrlelemeket helyezhetnk el:

3.16. bra
A keret

3.3.3. Az alapvezrlk hasznlata


Az albbiakban ttekintjk a felhasznli fellet kialaktshoz hasznlt alapvezrlkkel kapcsolatos ismereteket.
3.3.3.1. A Label (cmke) vezrl
A cmke vagy felirat (Label)
vezrl szvegek megjelentsre szolgl. Ennek
megfelelen alapvet tulajdonsgai a feliratok elhelyezkedsvel, s a szveg megjelentsi mdjnak belltsval kapcsolatosak.
A cmkket ltalban szvegmezk vagy ms vezrlk 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
bettpust, betstlust s betmretet

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 szvegmeznek 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 mkdik, s a szveget a szkzknl trdeli. A ve
zrl a szveget fgglegesen 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
kesztbe 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 szvegszerkesztbe 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 grgetsvot 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 grgetsvok (ez az alaprtelmezs).
1 vbHorizontal
Csak vzszintes grgetsv jelenik meg.
2 vbVertical
Csak fggleges grgetsv jelenik meg.
3 vbBoth
A vzszintes s a fggleges grgetsv is megjelenik.
A vezrl ltal megjelentett szveg a PasswordChar string tartalmtl fgg.
Ha a PasswordChar res string (""), akkor a vezrl a hagyomnyos mdon
mkdik, 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 nagybets 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 szvegmezben 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 mkdst szimullja. Ha a
felhasznl az egrrel megnyomja, akkor lenyomdik, s az egrgomb elengedsekor
kiugrik eredeti helyzetbe.
A felhasznl parancsgombok megnyomsval egyszeren 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
vezrlt felhelyezve, a vezrl neve s felirata
Command1 lesz:

3.20. bra A
parancsgomb

A nyomgombon val ketts 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 billentyk lenyomsval is Click esemnyt hozhatunk
ltre:
Lehetsg van arra, hogy az inputfkuszt a <Tab> billentyvel egyik vezrl
rl a msikra vigyk. Ennek a szablyozsra hasznlhat a Tablndex s a
TabStop tulajdonsgok. A vezrlk 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> billentyt 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 (jellngyzet) vezrl
A jellngyzet vezrl {CheckBox)
kt- vagy hromllapot lehet. A harmadik
llapot kezelst csak sajt llapot-nyilvntartssal lehet programozni.
A jellngyzet alakja kikapcsolt llapotban egy res ngyzet, mg a bekapcsolt llapott a (pipa) jelzi. Hatrozatlan llapotban a jellngyzet szrkv vlik:

A CheckBox osztly vezrlket a rendszer a Checkl, Check2 stb. nvvel hozza ltre.
A jellngyzet vezrlben 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 jellngyzet 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 jellngyzetek llapott!
A feladat megoldst a JELOLO2
alkalmazs tartalmazza, melynek a
kiindulsi ablaka:
3
.
2
2. bra
Jellngyzetek

A "Sznes/Fekete-Fehr" jellngyzet kivlasztsakor meghvd Szin_Click esemnykezel eljrs a jellngyzet 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)" jellngyzet kivlasztsakor meghvd Mret_Click


esemnykezel eljrs a jellngyzet 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" jellngyzet kivlasztsakor meghvd esemnykezel eljrs a jellngyzet 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 szvegtl jobbra tallhat a gomb. Az alaprtelmezs a 0 (vbLeftJustify), vagyis a szvegtl balra helyezkedik el a gomb.
Csoportos vlasztgomb
A vlasztgombokat ltalban csoportba szervezve hasznljuk. Csoportos kialaktshoz az OptionButton vezrlket a Frame vezrl felletre kell helyeznnk. A vlasztgombok csoportosthatk, s a jellngyzettel 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 vezrlt, akkor a form csoportost.
Az albbi pldban kt klnll csoportba szervezett vlasztgombokat kezelnk. A
csoporthoz kapcsold szvegmezben 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 listavezrlt (ListBox)
egy egsz szmbl tevdik

a formra helyezve, az objektum neve "List" szbl s


ssze.

A listavezrlk 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 kezdelemei 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> billentykkel 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 listavezrlk elemei string tpusak. Az elemek trolsra a List sztringtmb tulajdonsg szolgl. A tmb elemei nulltl kezdd 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 lehetv 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 szvegmezben 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 sszeptsbl szrmazik. Nhny fontos jellemzje:
Futsi idben 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 vezrlhz 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. Jellemzje, hogy rgztett
listamrettel rendelkezik, s nem lehet becsukni.
A legrdl kombinlt lista (vbComboDropdown - 1) : mkdse 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 mkdst bemutat
pldaprogramban (3.26. bra)
lehetsg 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" szvegmezbe 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 (grgetsv) vezrlk


A grgetsvban egy tglalap alak csszka helyezkedik el, melyet az egr s a
billentyzet segtsgvel hromflekppen mozgathatunk. Els lpsknt az egrrel a
csszkt megragadjuk, s tetszleges 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 grgetsv
mindkt vgn egy-egy kifel mutat nyl tallhat, amelyen val kattints a soronknti lpsnagysgnak megfelelen a csszka nyl irnyba trtn elmozdulst eredmnyezi. Ugyanarre az eredmnyre vezet a nyl billentyk megnyomsa is. Ha a sv
belsejben kattintunk vagy a PgUp, PGDn gombokat hasznljuk, az oldalanknti lpsnagysgnak megfelelen mozdul el a csszka.
A grgetsv rendelkezik kezd- s vgpozcival, amelyekhez viszonytva szmtja
ki a rendszer a csszka pozcijt:

A grgetsv nhny fontos tulajdonsga:


Min a grgetsv kezdeti pozcija (alaprtke 0).
Max a grgetsv 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 grgetsvok a csszka pozcijnak megvltoztatst Change esemny
jelzi.
Az albbi pldban a vzszintes s a fggleges grgetsvok Change esemnyeit
kezeljk. (SCROLL1)
A from betltsekor belltjuk a ktfle grgetsv mkdsi paramtereit.
Private Sub Form_Load ()
' a vzszintes grgetsv belltsa
HScrolll.Min = 0 HScrolll.Max = 50
HScrolll.SmallChange = 1
HScrolll.LargeChange = 10

' a fggleges grgetsv belltsa


VScrolll.Min = 0 VScrolll.Max = 100
VScrolll.SmallChange = 2
VScrolll.LargeChange = 20 End Sub

3.27. bra Csszkk


hasznlata

A "Vzszintes grgetsv" (HScrolll) grgetsv mkdtetsekor 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> funkcibillentyvel a fmenbe lphetnk, majd a kurzorvezrl
blentykkel mozoghatunk az almenkn, s az <Enter> billentyvel vlaszt
hatjuk ki a megfelel alment.
Az <Alr> billenty s a menpont alhzssal jellt betjnek egyttes let
svel, majd az almenpont alhzsval jellt betjnek letsvel.

(Ha a menelem nevben valamelyik bet el az & karaktert gpeljk, akkor


az a bet alhzva jelenik meg, s a menelem kivlaszt betknt funkcio
nl.)
A menponthoz rendelt gyorstbillentyk megnyomsval.
A bal oldali egrgombbal a menponton val kattintssal.

A Visual Basic rendszerben a ment is vezrlelemknt kezelhetjk.


Menk ltrehozsa
Pldaknt olyan menrendszert terveznk, melynek fmenje a Men, kt almenje: a
"Szveg rsa" s a " Kilps". A "Szveg rsa" menpont is kt almenvel rendelkezik. A "Kisbets szveg" menponthoz az <FJ> gyorstbillenty, a "Nagybets szveg" menponthoz pedig az <F2> gyorstbillenty tartozik. (MENU0)
A Visual Basic fejleszti 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 "Kisbets 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
"Nagybets szveg" menponthoz pedig az <F2> gyorstbillentyt rendeljk.
s a (balra nyl) gomb megnyomsval folytathatjuk az elz 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 vezrlmen segtsgvel), vagy a
vezrlmen gombon.

A fejlesztrendszerben a "Kisbets szveg" menponton kattintva megjelenik a


Kisbets_Click esemnykezel eljrs, ahol belltjuk a szveg aktulis pozcijt (a
ScaleMode alaprtelmezsknt vbTwips), majd a Print metdussal kirjuk a kisbets
szveget.
Private Sub Kisbets_Click()
1
a kirs pozcija
CurrentX = 500
CurrentY = 500
Print "visual basic"
End Sub

Hasonlan megrjuk a "Nagybets szveg" menpont Nagybets_Click esemnykezel eljrst.


Private Sub Nagybets_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 menszerkesztt, kivlasztjuk azt a menpontot
amely el be szeretnnk szrni az vlasztvonalat, majd megnyomjuk az Insert
{Beszrs) gombot. Ezt kveten (mnusz) jelet runk az res menhelyhez tartoz
Caption mezbe, a Name tulajdonsgot pedig tetszleges 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 elszr egy fment hozzuk ltre,


pldul Men nven, melynek Visible tulajdonsgt nem kell kivlasztani, hogy a
men ne legyen lthat.

Ezt kveten 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 ktelezen 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 menbl 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-vezrlk hasznlata


Ebben a rszben bemutatunk nhny ActiveX-vezrlt, amelyek felhasznlsval az
alapvezrlkre pl felhasznli fellet lehetsgei egyszeren kibvtethetk.
3.4.1. A RichTextBox (bvtett szvegmez) vezrl
A RichTextBox
ActiveX szvegszerkeszt vezrl mkdse hasonl a TextBox
szvegmez mkdshez, azonban a RichTextBox szvegmez tbb lehetsget tartalmaz:
hasznlatval a szoksosnl tbb szvegformzsi lehetsg 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 vezrlbe.
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" szvegmezbe.


Private Sub 01vas_Click()
Textl.Text = RichTextBoxl.Text
Textl.SetFocus
End Sub

Az "Szveghossz" parancsgomb megnyomsakor a RichTextBoxl vezrlben trolt


szveg karaktereinek szmt megjelentjk a "Szveg" szvegmezben.
Private Sub Szveghossz_Click()
Textl.Text = CStr(Len(RichTextBoxl.Text))
Textl.SetFocus
End Sub

Az "Trls" nyomgomb megnyomsakor trljk a vezrlk tartalmt, s a fkuszt a


"Szveg" szvegmezre lltjuk.
Private Sub Trls_Click()
RichTextBoxl.Text = ""
Textl.Text = ""
Textl.SetFocus
End Sub

3.4.2. A MaskEdBox (adatbeviteli sablon) vezrl


A MaskEdBox vezrl
lehetv teszi az adatok minta (sablon) szerinti beolvasst. A maszkban elhelyezett # jelek hatrozzk meg a berand karakterek helyt s
szmt. A tagolst pedig pldul - (ktjel) vagy I (fggleges 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 szvegmezket 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 megfelelen.
A vezrl fontosabb tulajdonsgai:
A BuddyControl tulajdonsg segtsgvel hozzrendelhetjk a lptet vezr
lt egy msik vezrlhz, pldul szvegmezhz (Textl).
Ha az AutoBuddy tulajdonsgnak True rtket adunk, akkor automatikusan
az a vezrl kapcsoldik a lptet vezrlhz, amely a tabultorsorrendben
kzvetlenl a lptet eltt ll.
A SyncBuddy tulajdonsg True rtke esetn az UpDown vezrl Value rt
ke taddik & BuddyControl tulajdonsgban megadott vezrlnek.
Az Alignment tulajdonsg helyezi a lptet vezrlt a szvegszerkeszt jobb
(1 - cdAHgnmentRighf), illetve bal oldalra (0 - cc2AlignmentLeft).
Az Orientation tulajdonsg belltja, hogy a vezrl
fggleges (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 ellrl szmlljon, akkor a Wrap tulajdonsgot True rtkre kell llta
ni.
A lptet vezrl esetn a fenti tulajdonsgok az albbi alaprtkkel rendelkeznek: az
Orientation cc2OrientationVertical (fggleges), a Min rtke 0, a Max rtke 10
s a Wrap rtke False.
Pldaknt fggleges s vzszintes lptetvezrlket hasznlunk, melyek rtkt szvegmezben jelezzk ki! (UPDOWN1)
A kijellt UpDown3 fggleges lptet vezrlhz hozzkapcsoljuk a Text3 szvegmezt a BuddyControl tulajdonsg segtsgvel (3.34. bra). Hasonlan az UpDown2
vezrlt s a Text2 szvegmez bal oldalhoz kapcsoljuk.

3.34. bra Az UpDown vezrl


hasznlata

A form betltsekor a lptetvezrlknek s a kijelzsre szolgl szvegmeznek


adunk kezdrtket.
Private Sub Form_Load()
1
a szvegmezk 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 szvegmezbe 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 jelzbl ll. A tglalap a
bellts hatrait definilja, s a jelzvel egytt a vezrl aktulis rtkt mutatja.
Tulajdonkppen ez egy rtkvltoztat eszkz, amit ktflekppen is mkdtethetnk:
megragadjuk a jelzt 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 jelznek
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 fggleges elhe
lyezkedst rja el.
A Value tulajdonsga tartalmazza a jelz aktulis pozcijhoz tartoz rt
ket.
Alaprtelmezs szerint a jelz egyesvel mozog a kurzorbillentykkel vez
relve. A lpsnagysgot mdosthatjuk a SmallChange tulajdonsg bellt
sval.
A LargeChange tulajdonsg rtke hatrozza a <PgUp>, illetve a <PgDown>
billentykkel 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 megelzi a Click esemny keletkezst.
A vzszintes s fggleges csszka hasznlatt a SLIDER1 alkalmazs szemllteti,
melynek kiindul ablaka a 3.35. brn lthat.

3.35. bra Az Slider vezrlk


hasznlata

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

' a szvegmezk tartalmnak trlse


Textl.Text = "" Text2.Text = ""
Text3.Text = ""
' a szvegmezk 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 szvegmezket.


A "Minimum" parancsgomb megnyomsakor az sszes Slider vezrl Value tulajdonsgt a minimumra (0) lltjuk, s ezt az rtket kijelezzk a "Minimum" gombhoz tartoz szvegmezben (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 szvegmezbe (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 szvegmezbe (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 lehetv. A ProgressBar egy tglalap alak terlet, amely balrl jobbra tltdik,
s amit hosszabb mvelet esetn ciklusban vagy httrmveletknt is hasznlhatunk.

A vezrl fontosabb tulajdonsgai:


A Value tulajdonsg szolgl a munkafolyamat-kijelz alapllapotnak bell
tsra, valamint a futsi idben nyomon kveti az rtknvekedst.
A Min s a Max tulajdonsgok a Value tulajdonsg minimlis s maximlis
rtkhatrt definiljk.
Az Align tulajdonsg rtktl fggen:
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 mkdst a PROGR alkalmazs szemllteti.


Az "Indt" parancsgomb megnyomsakor ProgressBarl vezrl Value rtkt az i
ciklusvltoz rtkvel nveljk.
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 ' mveletvgzs 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 ttekinthetbb felhasznli felletet hozhatunk ltre. A Visual Basic 6 kt "tblzatos" ActiveX-komponenst is tartalmaz:
a DBGrid vezrl egy adatkapcsolt tblzat, amit elssorban 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 megfelelen:
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 menbl 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 vezrlelemet.
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 eltt 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 vezrlvel

3.5. Vezrltmbk, objektumgyjtemnyek


A fejezet utols rszben nhny olyan alkalmazst mutatunk be, amelyek lehetv teszik a vezrlk dinamikus hasznlatt.
3.5.1. Vezrltmbk hasznlata
A vezrltmb hasznlatnak bemutatshoz digitlis lottszelvnyt ksztsnk a parancsgombok tmbbe szervezsvel.
A feladat megoldshoz 90 parancsgombot helyeznk el az ablakban. Ilyen nagyszm vezrl kezelse csak vezrltmb alkalmazsval kpzelhet el, a parancsgombok futs kzbeni ltrehozsval.
A feladat megoldsaknt ltrejtt alkalmazs (LOTTI) ablakban a nyomgombok
elhelyezkedst s mkdst 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 bettpus 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 megszntetsrl:


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 eltt elvgezzk a szksges inicializcis lpseket


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

3.5.2. Objektumgyjtemnyek hasznlata


Megoldhatjuk a lottszelvny feladatot objektumgyjtemnnyel is. A feladat megoldst a LOTTO2 alknyvtr tartalmazza. Az albbiakban csak azokat az eljrsokat ismertetjk, amelyek lnyegesen eltrnek a LOTTI feladat megoldsban hasznltaktl. Az objektumgyjtemnyeket 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 elnye az egyszerbb kezelhetsgben rejlik.)
Dim LottSzmK As New Collection
Dim db As Byte

Az rlap betltsekor tltjk fel az objektum-gyjtemnyt. 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 megszntetsrl:


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 gyjtemny


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 fablaka, 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 fablakhoz egszen addig,
mg a prbeszdablakot be nem zrta.
A nem modlis prbeszdablakok gy jelennek meg, hogy a felhasznlnak lehetsge van visszatrni az alkalmazs fablakhoz, s abban dolgozni a prbeszdablak bezrsa nlkl.
Amellett, hogy a prbeszdablakokat magunk is elkszthetjk, a Visual Basic egy sor
elre 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 bettpus 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 ellltott - rszekbl 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 lehetsg a Windows rendszerekben, amely lehetv 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 elllthatjuk.

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 fablaka.
A program mkdtetshez 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 fablakt a Startup Object kombinlt
listbl. ltalban a Forrni rlap tartalmazza az alkalmazs fablakt. (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 fablak

A prbeszdablak feladatbl addik, hogy minimalizl s maximalizl gombokra


nincs szksge, st 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 vezrlelem (lblTitle, lblVersion,


lblDisclainer) Caption tulajdonsgt fellrhatjuk sajt szvegnkkel. A "Rendszer
Info" parancsgomb a rendszerrl 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


vezrlelem Caption tulajdonsgt (User Name s a Password). A felhasznli nv s
a jelsz sorban megadott szvegeket a txtUserName s a txtPassword beviteli mezk
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
fejleszti krnyezetben a Project/Projektnv Properties menpont kivlasztsakor is
ilyen prbeszdablak jelenik meg.
A form "Options Dialog" projekthez val hozzadsa utn megjelen rlap ngy flet
tartalmaz.

4.6. bra Opcillt


prbeszdablak

A prbeszdablakban elhelyezett TabStrip tpus vezrlelem tulajdonsgainak mdostshoz elszr ki kell jellnnk a vezrlelemet (pldul egrkattintssal). Ezt
kveten a View\Property Pages menpont hatsra megjelen prbeszdablakban
adhatjuk meg a szksges belltsokat.
A megjelen "Property Pages" prbeszdablakban sokfle mdostsi lehetsg ll
rendelkezsnkre (4.7. bra).
A Style kombinlt lista segtsgvel a flek helyett nyomgombok jelenthetk 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 bettpust, 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 vezrlelemeket 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 vletlenszeren javaslatokat ad, amennyiben a felhasznl l ezzel a lehetsggel.
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 vletlenszeren vagy ciklikusan. A tipp prbeszdablakban a jellngyzet 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 elre 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 lehetv. (Az adatbzisokkal knyvnk 7. fejezetben foglalkozunk.) A Web Broser prbeszdablak egy Internet bngszt valst
meg. (Az Internetes kapcsolatokkal a knyv 8. fejezete foglalkozik.)
4.1.2.7. InputBox s MsgBox prbeszdablakok hasznlata
A Windows alkalmazsok a klnbz mveletek elvgzsre prbeszdablakokat
hasznlnak. A prbeszdablakok tbbsge sajt tervezs, azonban a gyakran elfordul feladatok elvgzre elre elksztett prbeszdablakokat is megjelenthetnk. A

Visual Basic adatbeviteli prbeszdablaka (InputBox) segtsgvel szveges adatokat


krhetnk be a felhasznltl. (Az ablakban elhelyezked nyomgombok angol nyelvek.) 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 adatmezbe 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.

cm

A opcionlis cm paramter hatrozza meg a prbeszdablak fejlct. Ha a paramtert elhagyjuk, akkor az alkalmazs neve jelenik meg a cmsorban.

alaprtk

Az opcionlis alaprtk paramterben megadott sztring a prbeszdablak szvegbeviteli mezjben jelenik meg,

xpos,ypos

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 szltl kb. egyharmad tvolsgra pozcionlva jelenik meg a prbeszdablak.

sgfjl,

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.

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, +)
mvelettel sszekapcsolva lltjuk ssze.
Konstans

rtk

Nyomgomb(ok)

vbOKOnly
vbOKCancel
vbAbortRetrylgnore
vbYesNoCancel
vbYesNo
vbRetryCancel
vbMsgBoxHelpButton

0
1
2
3
4
5
16384

OK (alaprtelmezs)
OK, Mgse
Megszakts, Ismt, Tovbb
Igen, Nem, Mgse
Igen, Nem
Ismt, Mgse
Sg

Konstans

rtk

vbCritical

16

vbQuestion

32

vbExclamation

48

vblnformation

64

Konstans

Ikon

rtk

Alaprtelmezett nyomgomb

vbDefaultButtonl

az els gomb (alaprtelmezs),

vbDefaultButton2

256

a msodik gomb,

vbDefaultButton3

512

a harmadik gomb,

vbDefaultButton4

768

a negyedik gomb.

Konstans
vbApplicationModal

vbSystemModal

rtk

Modalits

Alkalmazs szint modalits. A prbeszdablak


valamelyik gombjnak lenyomsa szksges
ahhoz, hogy az aktulis program vgrehajtsa
folytatdjon (alaprtelmezs).

4096

Rendszermodalits. Amg a felhasznl a prbeszdablakban nem nyom le egy gombot, addig minden alkalmazs futsa felfggesztdik.

A prbeszdablak nyomgombjai kzl valamelyiket lenyomva az MsgBox fggvny


az albbi rtkek egyikt adja eredmnyl:
Konstans

rtk

Lenyomott gomb

vbOK

OK

vbCancel

Cancel

vbAbort

Abort

vbRetry

Retry

vbIgnore

Ignore

vbYes

Yes

vbNo

No

4.1.2.8. ltalnos prbeszdablak hasznlata


A CommonDialog tpus vezrlk olyan ltalnos prbeszdablakok, amelyeket a
Windows rendszer hasznl llomnyok megnyitsra, mentsre, nyomtatsra, sznek
s bettpusok 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 Bettpus 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
Bettpus
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 mkdsnek 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 bettpust 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 kpernyvlasztst. 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 eljrsa a "Ments msknt"


prbeszdablakot jelenti meg:
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 "Bettpus" parancsgomb esemnykezel eljrsa a "Bettpus" prbeszdablakot


jelenti meg. A kivlasztott bettpussal szveget rhatunk a parancsgomb melletti
szvegmezbe.

Private Sub Bettpus_Click ()


CommonDialogl.CancelError = True On
Error GoTo Hiba ' a Flags
tulajdonsg belltsa
CommonDialogl.Flags = cdlCFEffects Or cdlCFBoth '
a "Bettpus" 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 lehetv teszi a nyomtats mkdtetst:
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 varzslt
(Application Wizard).

4.13. bra Az alkalmazskszt varzsl


aktivizlsa

Az els az alkalmazskszt bejelentkez kpe ahol elzetesen 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


erforrsllomnyban. Ezt az erforrsllomnyt hasonlan a programokhoz forrsnyelven lehet elkszteni (RC kiterjeszts llomnyban), majd erforrs-fordtval le
kell fordtani .RES kiterjeszts llomnny, amelyet knnyen be lehet pteni a
programba. Az erforrsfjlok alkalmazsnak elnye akkor jelentkezik, ha az alkalmazsok nyelvfgg (angol, magyar,...) kpeket s szvegeket jelentenek meg. Ebben
az esetben a program jabb vltozathoz elegend csak az erforrsllomnyt lecserlni.

4.18. bra
Erforrsok

A Visual Basic is tartalmaz egy erforrsfordt programot (RC.EXE), amely a Visual


Basic teleptse utn a Wizards alknyvtrban tallhat. Az alkalmazskszt varzsl lehetv teszi, hogy adatainkat erforrs-llomnyban troljuk.
Felszerelhetjk programunkat Internet kapcsolattal is, s ha kapcsoldunk, akkor a
honlap cmt is definilhatjuk.

4.19. bra Internet


kapcsolatok

Knnyen hozzfzhetjk a programhoz a mr ismert bejelentkez kpernyt, 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 lehetv teszi, hogy egyszerre tbb ablakban jelentsnk
meg adatokat, grafikt stb., s azokkal prhuzamosan dolgozzunk. Tekintsk t elszr 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
lehetsgt.
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
eltnik s az alkalmazs ablakban, a fejlcszveg kiegsztseknt jelenik meg.
Maximalizlt dokumentumablak esetn a rendszermen aktivizl gombja s az ablak
mreteit visszallt gomb a szlablak mensorba kerlnek, azonban a dokumentumablakra vonatkoznak.
Termszetesen billentyzetrl is kezelhetk a dokumentumablakok. A dokumentumablakok hasznlata sorn ltalnos szably, hogy ahol a hagyomnyos ablakoknl az
<Alt> billentyt hasznltuk, ott a dokumentumok esetn a <Ctrl> billentyt 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> billentykkel kellett aktivizlni, a dokumentumok esetn ugyanezt az <Alt +
plusz> billentykkel tehetjk meg.

Ha a billentyzetet hasznljuk a menben val pozicionlsra, akkor azt tapasztalhatjuk, hogy a szlablak rendszerment aktivizl gombja alatt a dokumentum rendszerment aktivizl gombja helyezkedik el. A program kpes megvltoztatni a ment,
mikzben ms s ms dokumentumablak vlik aktvv, st 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 elrendezsek (tile). Ugyanennek a
mennek menpontjaiknt jelennek meg a dokumentumablakok nevei, gy menbl is
kivlaszthatjuk az aktv dokumentumot.
4.3.1. MDI alkalmazsok ksztse
Az alkalmazs tervezsekor felvehetnk egy MDI szlablakot, 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 jellemzje. 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
jellemzvel szablyozni a billentyzet 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 grgetsvokat 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 fggleges, vagy akr mindkt irny grgetsvja.
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 szltl fggetlenl
modlis prbeszdablakknt mkdtethetk. 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 tmretezhetk a szl ablak terletn bell, van
azonban nhny alapelrendezs. A gyermekek lehetnek krtyalapszeren egymson, a
szlablakot kitltve egyms mellett vzszintes-, illetve fggleges osztssal, vgl lehet mindegyik minimlis. Az Arrange metdust hasznlhatjuk az alapelrendezsek
vgrehajtsra.
MDIszl.Arrange elrendezs

A metdus az MDIszl objektumon az elrendezs konstansnak megfelelen mkdik. Lehetsges rtkek:


vb Cascade

vbTileHorizontal

vbTileVertical

23

A nem minimalizlt ablakok tlapolva.


A nem minimalizlt ablakok egyms mellett vzszintes
osztssal. A nem minimalizlt ablakok egyms mellett fggleges
osztssal. A minimalizlt gyermekeket rendezi.

vbArrangelcons

4.3.3. Az MDI ablakok meni


Az MDI szlablak 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 (errl a fejleszti krnyezet gondoskodik).

4.3.4. A Toolbar vezrl


A Toolbar vezrl az ablakok eszkztrnak funkciit testesti meg, amely az
ActiveX-vezrlk kztt MSCOMCTL.OCX llomnyban tallhat. Hasznlathoz a
komponensek kz be kell tlteni a Microsoft Common Controls vezrlket. A
vezrl gomb (Button) objektumok kollekcijt tartalmazza, mely gombokhoz szvegeket (a Caption tulajdonsg) vagy ImageList-be gyjttt kpeket (Image tulajdonsg) rendelhetnk, megnyomsukhoz pedig klnbz funkcikat kapcsolhatunk.
Minden gombhoz hozzrendelhetnk egy sztringet, amelyet a Key tulajdonsgba rva
egyrtelmen 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 trendezhetsge 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 jelentsggel 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 idzik, akkor a ToolTipText szvege automatikusan
megjelenik.
Ha a Toolbar AllowCustomize tulajdonsga igaz, akkor - az eszkztron val dupla
kattintssal - futs kzben helyezhetnk elksztett 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 elre belltott pozcikban.

Az MDI projekt elksztshez egy "standard EXE" projektbe helyezzk az MDI szlablakot, a hagyomnyos rlapot pedig eltvolthatjuk onnan. A Project Properties
prbeszdablak General lapjn belltjuk, hogy az MDIForm1 (ezt a nevet kapja a
rendszertl 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 trdni az jrarajzolssal.
Elszr 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. Mieltt segtsgknt felhelyeznnk egy ImageList tpus vezrlt (ImageList1), melynek bitkp elemeit sorra feltltjk az elre elksztett RESOURCE.RES erforrsllomnybl, gyzdjnk meg arrl, hogy a
Microsoft Common Controls vezrlket betltttk-e!
Az erforrs 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 vezrlt is a formra helyeznk (ToolBarl). Ennek ImageList tulajdonsgt az lmageListl objektumhoz rendeljk, s mr is nekilthatunk a gombok elksztshez. Elszr 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 vezrlre felhelyeznk egy ComboBox vezrlt. A kombinlt lista megjelentsre egy Placeholder tpus gombot ksztnk, melynek mreteit megfelelen
belltva, megjelentjk benne a sznekkel feltlttt ComboBoxl vezrlt.
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 vezrlbe 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

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 bekeldik 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

Mieltt bemutatnnk, hogyan mkdik 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 mkdshez
kell illeszkednie a menelemeknek is. Ha a Rajzlap modulban Public mdon deklarlunk logikai vltozkat, akkor azok ms modulokbl is elrhetk s minden egyes
rajzlappldnynl nllan ltrejnnek. Ezeket a vltozkat a megjelent objektum
nevbl 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 lehetv tev men lthatv ttele
MDIForml.Firka.Visible = True End Sub

Amikor a firkapapr elveszti a fkuszt vagy megsznik, 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 megfelelen 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


megfelelen. 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 lehetsgei, multimdia


Az alapszint Windows-programozs elengedhetetlen kellke a grafikus megjelents.
Ennek megfelelen jelen fejezetben kitrnk a grafikus rendszer felptsre s a lehetsgeivel 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 lehetv vlik, hogy a Windows programokban a
klnbz grafikus eszkzket (kperny, nyomtat, rajzgp) egysgesen hasznljuk.
A GDI grafikus alprogramrendszer felismeri az aktulis perifria lehetsgeit, s ennek megfelelen mkdik. Pldul, ha egy kpernyvezrlnek van grafikus trsprocesszora, amely maga vgzi bizonyos alakzatok megjelentst, akkor ezt a lehetsget a GDI kihasznlja.
A Visual Basic objektumok ugyan elfedik a GDI programozsi fellett, azonban
API-hvsokkal tetszleges GDI-fggvnyt elrhetnk. A fejezetben elssorban a
Visual Basic lehetsgekre 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 vezrlket helyezhetnk
el. Specilis grafikus vezrlk pldul a kpvezrl (Image) s a kpmez (PictureBox), amelyek - a formhoz hasonlan - kpek megjelentsre hasznlhatk. A kpmezre grafikus metdusokkal ugyangy rajzolhatunk, mint magra a formra, tovbb
a kerethez hasonlan ms vezrlk troljaknt is alkalmazhat. A kzps szint vezrli eltakarjk a httr grafikjt.
A vezrlk tbbsge a legfels tltsz rtegen foglal helyet. Az vezrlk,
amennyiben nem tltszak takarjk az als kt rteget. (Azonos szinten elhelyezked
vezrlk takarsi sorrendjt a ZOrder metdussal vltoztathatjuk meg.)
Mieltt rszletesen trgyalnnk a Visual Basic braksztsi lehetsgeit, 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 lekpezsrl 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 lehetsgnk, hogy sajt virtulis" tvolsgdimenzikat alkalmazzunk, s gy a konkrt hardvereszkztl fggetlenl rjuk meg a
programunkat.
A sznek kezelsekor, a Visual Basic lehetsgeit 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, kpernypontonknt trtnik. Ha egy adott szn vonalat hzunk, akkor a vonal pontjai olyan
kpernypontokban 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 vezrlk, 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. Lehetsgnk van arra is, hogy az aktulis adatokat lekrdezve a specilis
eszkzreszabott grafikus alkalmazst ksztsnk.
5.1.1. Koordinta-rendszerek
Tetszleges bra, kp ltrehozshoz a megjelent skfellet pontjait kell megadnunk, amihez szksgnk van egy koordinta-rendszerre. Rgztennk kell a
koordinta-rendszer kezdpontjt 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
egyrtelmen 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 vezrlk {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, minsgileg klnbz belltsi lehetsggel 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
Elszr vizsgljuk meg az lland lptk koordinta-rendszerek belltsi lehetsgeit! 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.

VbCharacters

Vblnches
VbMillimeters
VbCentimeters

5
6
7

Karakteres felbonts. A vzszintes egysg 120


twip, a fggleges 240 twip.
Mindkt tengelyen az egysg az inch.
A millimter mindkt tengely egysge.
A tengelyek egysge a centimter

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

colos kpernyn.
Ha a ScaleMode tulajdonsgnak nullnl nagyobb rtket adunk, akkor a ScaleHeight
s a ScaleWidth jellemzk 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 jellemzjt vbUser (0) rtkre lltjuk, akkor magunk definilhatjuk a koordinta-rendszer jellemzit a ScaleHeight,
ScaleWidth, ScaleLeft s ScaleTop tulajdonsgoknak val rtkadssal. Ha azonban
elszr a ScaleHeight, ScaleWidth, ScaleLeft vagy ScaleTop jellemzk 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 eljelvel pedig a koordinta-tengelyek irnyt adhatjuk meg. A pozitv eljel 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 lptkektl fgg srsg 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 megfelelen 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 lptktl 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 megfelelen 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 kezdpontja


A ScaleLeft s ScaleTop tulajdonsgok belltsval kzvetett mdon adjuk meg a
koordinta-rendszernk kezdpontjt. A bellts utn az ablak aktv terletnek bal
fels sarka ppen a (ScaleLeft,ScaleTop) koordintj pontban lesz. Lekrdezskor a
fenti jellemzk 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
fggleges tvolsgadatokat tszmoljuk egyik koordinta-rendszerbl 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 jellemznl megismert rtkekkel hatrozzk meg a lptkeket. jdonsg, hogy hasznlhatjuk a
| VbHimetric

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 vezrlk 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 kezdpontja 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 kezdpontja 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 egyszeren megtehetnk a ScaleHeight eljelnek 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 alapsznbl 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 vezrlpult belltsainak megfelelen) 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 jellemzit a httrszn (BackColor), az eltrszn
(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 vezrlt tartalmaz ablakban. Ha grafikus vezrln 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 kpernyvel is van dolgunk, a kppontok sznt a httr s a rajzeszkz sznrtkei kztt vgrehajtott (elre
megadott) bitenknti logikai mvelet 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

rtk

Lers

vbBlackness

A rajzolt pontok szne fekete, akrmi is van a


httren.

vbNotMergePen

A rajzeszkz sznt s a httr sznt vagy mvelettel sszevetve, majd az eredmnyt neglva
keletkezik a kppont szne. not(7orH)

vbMaskNotPen

A rajzeszkz sznnek inverze s a httr szne s


mvelettel kombinlva hatrozza meg a kppont
sznt, (not T) and H

vbNotCopyPen

A rajzeszkz sznnek inverze lesz a rajzszn.

vbMaskPenNot

vblnvert

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.

not 7

not//
vbXorPen

vbNotMaskPen

vbMaskPen

vbNotXorPen

10

vbNop

11

Ha rajzeszkz sznvel s a httrsznnel kizr


vagy mveletet vgznk, akkor kapjuk meg a raj
sznt. T xor H
A rajzeszkz sznt s a httr sznt s mvelettel
sszevetve, majd az eredmnyt invertlva
keletkezik a kppont szne, not (T and H)
A rajzeszkz s a httr szne - s mvelettel
kombinlva - hatrozza meg a kppont sznt. T

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

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

Konstans

rtk

Lers

vbMergeNotPen

12

vbCopyPen

13

vbMergePenNot

14

vbMergePen

15

A rajzeszkz sznnek inverze s a httr szne vagy


mvelettel 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
mveletet kombinlva hatrozza meg a kppont
sznt. T or (not H)
A rajzeszkz sznvel s a httrsznnel vagy
mveletet vgezve kapjuk meg a rajz sznt.

vbWhiteness.

16

TorH
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 vezrlk (Line, Shape) BorderWidth tulajdonsgval, amely a vezrlk vonalainak vastagsgt szintn pixel (!) egysgekben hatrozza meg. (Apr
gyakorlati jelentsggel 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 jellemzk 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 jellemzk. 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

5
6

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.

A BorderStyle konstansai nmileg eltrnek a fentiektl:


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 elz tglalap sarka, a msik pedig az egrmutat pozcija kattintskor. Minden egyes kattintskor
vletlenszeren 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 vezrlk kifestsi stlusa
(FillStyle), melynek segtsgvel bellthatjuk, illetve lekrdezhetjk a rajzolt alakzat
kifestshez hasznlt festmintv. A FillStyle tulajdonsg a grafikus vezrlk esetn
a vezrl kifestsre vonatkozik, grafikus trolk esetn pedig a grafikus metdusok
mkdst szablyozza. A kifests sznt a FillColor tulajdonsg rtke definilja. A
FillStyle jellemz lehetsges rtkei:
Konstans

rtk

vbFSSolid.
vbFSTransparent

0
1

vbHorizontalLine
vbVerticalLine
vb UpwardDiagonal

2
3
4

vbDownwardDiagonal

vbCross
vbDiagonalCross

6
7

Lers
Teljes kifests.
Nincs kifests, az alakzat tltsz (alapbellts)
Sraffozs vzszintes vonalakkal.
Sraffozs fggleges vonalakkal.
Sraffozs ferde - balrl jobbra felfel
mutat - vonalakkal.
Sraffozs ferde - balrl jobbra lefel
mutat - vonalakkal.
Kereszt-sraffozs.
Kereszt-sraffozs ferde vonalakkal.

5.1.6. Bitkpek

A kpernyn val megjelentsnek alapeszkze a bitkp. A bitkp egy sznskla (a


felhasznlhat sznek listjval), s egy tglalapalak kpernyrsz 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 kpernykialakts tulajdonsgait kihasznlva rjk le a kpeket eszkzfgg bitkpeknek nevezzk. Ezeket rendszerint .BMP
kiterjeszts llomnyokban talljuk. Lerhat kp kpernyfggetlen 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 lehetsget biztostanak a szabvnyos .GIF s JPG formtumok.
Rgzthetnk kpeket gy is, hogy nem magt a kpet - annak pontjait - troljuk, hanem a kp ltrehozshoz szksges rajzmveleteket (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 erforrsoknak nevezzk. A lefordtott erforrsokat tartalmaz llomnyok szoksos kiterjesztse .RES.
Minden kpernyn 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 vezrlelemek bitkpet ler tulajdonsgainak belltsra hasznlunk. A Picture objektumok
ugyangy kezelhetk mint az eddig megismert vezrl objektumok, pldul akr
tmbbe is szervezhetk. Termszetesen a Picture objektumnak is vannak informcihordoz tulajdonsgai.
Mivel a bitkp egy pixelekbl sszelltott tglalap alak kpernyrszlet, ezrt legfontosabb jellemzi a magassg (Height) s a szlessg (Width). Lttuk, hogy a kpadatok trolsra tbb lehetsg 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) bvtett 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 vezrlk 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 tlmenen GIF- s JPG-tpus kpfjlok felolvassra is alkalmas.
Az albbi pldban a Picture tpus X memria-objektumot hasznljuk kp trolsra
s a vezrlk bitkpeinek belltsra.
Dim X As Picture
Set X = LoadPicture("KEP.BMP")
Set PictureBoxl.Picture = X

Kzvetlenl a vezrlelemhez 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 erforrsbl a LoadResPicture fggvny segtsgvel


tlthetnk bitkpet, megadva az erforrsban 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. Bettpusok
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 bettpusnak nevezzk. A Windows az adott mretben torztssal kpes
bettpusokat ltrehozni. A dlt betket (italic) egyszeren gy hozza ltre, hogy a

karakter pontjai a bzisvonalon vltozatlanok maradnak, mg a karakter tbbi rsze a


bzisvonaltl val tvolsg fggvnyben elcsszik (a karakter megdl). A flkvr
betk (bold) egyszeren a vonalak (stroke) megvastagtsval szrmaztathatk. Nyilvnval, hogy egyszeren 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 dlt betk sajtja, a 700 pedig a flkvr betk.
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 bettpushoz
legjobban illeszked, az adott eszkzn hasznlhat bettpust.
A vezrlk 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 - bettpust definil - objektum tulajdonsgaival bettpusokat definilhatunk. A Font tpus vltozk tartalmt a vezrlk 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 jellemzk a kvrsget s a betk dntst szablyozzk, mg a StrikeTrought
s Underline az thzottsgrl s az alhzottsgrl gondoskodnak. A Weight jellemz
a feketesgrl intzkedik. Ezt a jellemzt a tervezs alatt - a bettpus-vlaszt
prbeszdablakban - nem llthatjuk kzvetlenl, hanem a rendszer maga lltja be.
Futs kzben tetszleges 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 vezrljnek bettpust 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 kpernyn elhelyezked ablakokat, vezrlket kezeljk, valamint az
ablakon kvl az egrkurzort belltsuk.
A Screen objektum ActiveForm tulajdonsgnak segtsgvel megtudhatjuk, hogy
melyik az ppen aktv ablak. Ennek a jellemznek elssorban a tbb ablakot kezel MDI {Multiple Document Interface) - alkalmazsok esetn van jelentsge. Hasonl a
helyzet az ActiveControl tulajdonsggal, ami tervezs alatt nem rhet el, s futs
kzben is csak olvashat. A tulajdonsg rtke arra a vezrlre hivatkozik, amelyik az
inputfkuszt birtokolja.
A Screen objektum FontCount s Fonts tulajdonsgai a kpernyn aktulisan megjelenthet bettpusok szmt s nevt hatrozzk meg.
Hasonlan a formokhoz s a vezrlkhz a Width s a Height tulajdonsgok a kperny mreteit szolgltatjk twip-ekben. Jl hasznlhatk ezek a jellemzk az ablakok
kpernyn 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 jellemzk 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 lehetsgeivel kln fejezetben foglalkozunk, ahol rszletesen trgyaljuk
a Printer - az aktulis nyomtatt megtestest - objektum tulajdonsgait, illetve a
Printers kollekcit, amely a rendszerben elrhet nyomtatobjektumok gyjtemnye.
A kpernyvel vont prhuzam kedvrt nzznk meg most nhny, a nyomtat lehetsgeit 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 lekrdezhetk a nyomtatn megjelenthet bettpusok szma (FontCount) s a bettpusobjektumok (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 mretrl 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 vezrlk hasznlata


Az alkalmazs ablakban grafika megjelentsre, specilis grafikus vezrlket is hasznlhatunk. Mr volt sz arrl, hogy a grafikus vezrlk az ablak httere eltt, azonban
a hagyomnyos vezrlk mgtt, a kzps rtegre kerlnek. Ezltal takarjk a htteret, azonban elrejtznek a hagyomnyos vezrlk mgtt. A kzps rteg ngy alapvet vezrlje:
Line
Shape
Image
Label

egyenes vonalak,
vonalas s kifestett alakzatok,
bitkpek,
szvegek megjelentse.

A grafikus vezrlk 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 errl egyszeren gondoskodhatunk a vezrlk tulajdonsgainak megfelel belltsval.
Ugyanakkor ms vezrlkkel ellenttben a grafikus vezrlk nem jelenhetnek meg vezrlk felett, hacsak nem hasznlunk egy kztes trol-objektumot. A grafikus vezrlk nem birtokolhatjk az inputfkuszt, s nem lehetnek trol objektumok.
5.2.1. Vonalhzs a Line vezrlvel
A Line vezrl egyetlen feladata egyenes vonalak megjelentse, ennek megfelelen a
vezrlnek nincsenek esemnyei.
A grafikus trol (form, kpmez) koordinta-rendszerben a vonal kezdpontjt az
X1, Y1, vgpontjt pedig az X2, Y2 tulajdonsgok hatrozzk meg. A jellemzk rtkt a fejleszts sorn s futs kzben egyarnt megvltoztathatjuk.
A Line vezrl is rendelkezik a vezrlk 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 megfelelen). 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 vezrlvel


A Shape (alakzat) vezrlt tglalapok, krk, ellipszisek, lekerektett tglalapok stb,
krvonalnak, vagy kifestett terletnek rajzolsra hasznlhatjuk. Az alakzatoknak a
Line vezrlkhz 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 vezrlk 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 ftengelyei megegyeznek a vezrl
szimmetriatengelyeivel. Ha a krt vlasztjuk, akkor a kr tmrje 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 festmintt a FillStyle, a festsznt pedig a FillColor
tulajdonsg rtkvel megadva.
A BackStyle tulajdonsg belltsval - a Label vezrlkhz 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 vezrlk trgyalsa sorn mr megismert - Move metdust is hasznlhatjuk az alakzat mozgatsra.

Ha az ablakban egy labdt szeretnnk pattogtatni, akkor a feladatot legegyszerbben


gy oldhatjuk meg, hogy az ablakban egy Shape vezrl ltal megtestestett labdt
mozgatunk. Ahhoz, hogy a programunk kpes legyen esemnyvezrelt animcira,
egy idzt (Timer) vezrlt is kell hasznlnunk, melynek az Enabled tulajdonsgt
igazra lltva, mris "ketyeg" az ra. Az idzt 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 betkkel kirt
"Vezrlgarfika" 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 jellemzinek 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), idegysgenknt


hozzadunk a labda aktulis pozcijhoz. A labda mozgatsrl az idzt 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


vezrlvel

5.2.3. Bitkpek hasznlata az Image vezrlvel


A bitkpek megjelentsre szolgl legegyszerbb eszkz az Image (kp) vezrl. A
kpvezrlnek is elsdleges feladata a grafikus megjelents, azonban az alapvezrlkhz hasonlan, a Line s a Shape vezrlkkel ellenttben, a kpen trtnt esemnyek kezelst is tmogatja. Az Image objektum a - szintn kpek megjelentsre
szolgl - PictureBox lehetsgeinek csupn egy rszvel rendelkezik, azonban a
gyorsabb kpmegjelentssel krptolja a programozt a kevesebb programozsi
lehetsgrt.
Az Image vezrl megjelenst szablyoz tulajdonsgok kzl a single tpus Left,
Top, Height, Width jellemzk 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 vezrlnek megfelelen 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 vezrlk troljaknt nem hasznlhat.

Mint a vezrlknl 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 erforrsbl 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 vezrlvel rajzfilmszer animcit is kszthetnk. A pldaprogram (FIGURA) ablaka:

5.5. bra Animci


az Image vezrlvel

A megoldsban az rlap Caption tulajdonsgnak rtke Kpanimci, az


Appearance tulajdonsg pedig Flat. Az rlapra felhelyezett Image1 s Image2 vezrlk az IMAG1.BMP, illetve az IMAG2.BMP bitkpllomnyokat tartalmazzk. A
form tltsekor egymsra helyezzk a kt bitkpet s megfelel mretre lltjuk az
alkalmazs fablakt! Indulskor az egyik kp lthat a msik azonban nem. A kpek
lthatsgnak vltst egy idzttl 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 idzt 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 megismertektl 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 egyenrtkek. A grafikus metdusok mindkt objektum esetn azonos mdon mkdik.
Ha a PictureBox vezrl Boolean tpus AutoSize tulajdonsgnak rtke True,
akkor a kpmez mretei - ugyangy, mint ahogy azt az Image vezrlnl lttuk automatikusan igazodnak a megjelentett kphez. Ha azonban az AutoSize rtke
False, akkor a kpmez mretei nem fggenek a megjelentett bitkptl. (Felhvjuk a
figyelmet arra, hogy ellenttben az Image vezrlvel, a PictureBox vezrlnek nincs
Stretch tulajdonsga.)
A PictureBox elhelyezkedst az Align tulajdonsggal is szablyozhatjuk, melynek
klnbz rtkeivel a kpmezt a szlablak szleihez igazthatjuk:
Konstans
vbAlignNone

rtk
01

vbAlignTop
23
vbAlignBottom
4
vbAlignLeft

vbAlignRight

Lers
a kpmez elhelyezkedst a tervezs alatt megadott
pozci hatrozza meg, a kpmez a szlablak fels
szlhez igazodik, s szlessge (Width) azonos lesz a
szlablak aktv terletnek szlessgvel
(ScaleWidth), a kpmez a szlablak als szlhez
igazodik, s szlessge (Width) azonos lesz a
szlablak aktv terletnek szlessgvel
(ScaleWidth), a kpmez a szlablak bal szlhez
igazodik, s magassga (Height) azonos lesz a
szlablak aktv terletnek magassgval
(ScaleHeight), a kpmez a szlablak jobb szlhez
igazodik, s magassga (Height) azonos lesz a
szlablak aktv terletnek magassgval
(ScaleHeight).

A Printer objektumok segtsgvel nyomtatst vgezhetnk. A nyomtatsi lehetsgekkel a ksbbiekben rszletesen foglalkozunk.

5.3.1. Rajzols a grafikus objektumok ablakban


Mieltt rszletesen trgyalnnk a grafika ksztsnek fogsait, ismerkedjnk meg a I
Windows kpernyn val megjelentsnek alapelveivel!
5.3.1.1. jrafests - a Paint esemny s a Refresh metdus
A Windows felgyelete alatt egyszerre tbb alkalmazs is mkdhet, 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 kezeljt.
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 kezeljn
kvl helyezkednek el, akkor a kvetkez frisstskor az ablak tartalma (rszben vagy
teljesen) trldik.
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 kezeljben trtnik, hanem egyszeren 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 jellemzjvel 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 vezrlk 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 jrafestsrl gondoskodik, s az jrafests vgbemegy a
nemgrafikus vezrlk 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 fggen, 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

ClipContols

Grafikus metdusok

True
True

True
False

nincs esemny
nincs esemny

False
False

True
True

igen
nem

False

False

igen

False

False

nem

Rtegek hasznlata
norml,
norml, a kifestskor nincsenek
kivgott rszek,
norml,
a nem grafikus vezrlk vannak
ell, a grafikus vezrlk s a
metdusok bri keverten
jelennek meg (*),
norml csak azokra a pontokra,
amelyek elzleg fedettek voltak,
vagy az ablak mreteinek
nvekedse miatt jelentek meg,
a vezrlk s a grafikus
metdusok bri keverednek a
rtegeken (*)

Lehetleg 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 bettpust szablyozza.
A grafikus objektumok metdusaival trtn rajzols vektoros jelleg, ami azt jelenti,
hogy a kpernyre 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 jellemzk 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 tnik 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) tetszleges 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 kezdpontjt (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 megfelelen. 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 jellemzk rtke. A metdus a vgpontba helyezi az aktulis rajzpozcit.
5.2.3.4. Grbevonal alakzatok rajzolsa
Krlapot, krvet, krcikket, vagy krbl 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 - fggleges 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 bettpus-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 eltt hasznlhatjuk a Spc fggvnyt, amely n szm szkzt helyez el a kirt szveg eltt. A Tab
fggvnnyel tbb oszloppal - karakterrel -jobbra kezdhetjk a kirst. (Kirskor az
adott bettpus tlagos karakterszlessgnek felel meg egy oszlop.) Ha a Tab fggvnyben nem hasznlunk paramtert, akkor a kirs jobbra, az aktulis pozcihoz

kpest legkzelebbi tabultorpozcin kezddik. (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 pontosvesszt (;), a szkzt s a
vesszt (,) 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 vesszt (,) 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 bettpusban 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 tizedesvesszhz 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 megfelelen. 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[, mvelet]]]]]]]

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 lehetsgnk, 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 mvelet paramterrel definilhatjuk. A msols sorn a clablak tartalma
s a bitkp mellett a clablak fest mintjnak {FillColor, FillStyle) bitjeit is figyelembe vehetjk. Jelljk a festmintt definil bitkpet (ecsetet) "E" , a forrs bitkpet - "F" s a clterleten lv kpet - "C" betkkel! A felhasznlhat
mveleteket az albbi tblzatban foglaltuk ssze:

Konstans

Logikai mvelet

Magyarzat

vbDstInvert

not (C)

Invertlja a cl bitkpet.

vbMergeCopy

E and F

Az ecset s a forrs bitjeit logikai "s"


mvelettel sszekapcsolva keletkezik a
msolt bitkp.

vbMergePaint

(not F) or C

A forrs inverze s a clterlet "vagy"


mvelettel
val
sszekapcsolsval
keletkezik a msolt kp.

vbNotSrcCopy

not(F)

A forrs inverze a msols eredmnye.

vbNotSrcErase

not(F or C)

A forrs bitkp s a clterlet "vagy"


mvelettel val sszevetsnek inverze a
msolt kp.

vbPatCopy

Az ecset mintja a msolt kp.

vbPatlnvert

E xor C

Az ecset s a clterlet "kizr vagy"


mvelettel sszevetve adja a msols
eredmnyt.

vbPatPaint

E or (not F) or C

A msolt kp az ecset, a forrs inverze s a


clterlet
"vagy"
mvelettel
val
sszekapcsolsbl addik.

vbSrcAnd

F and C

A forrs s a cl logikai "s" mvelettel


val sszevetse adja az eredmnyt.

vbSrcCopy

A forrs msoldik.

vbSrcErase

F and(not C)

A forrs s a cl inverze "s" mvelettel


kapcsoldva adja a msolt kpet.

vbSrcInvert

F xor C

A forrs s a cl "kizr vagy" mvelettel


sszekapcsolva keletkezik az eredmny.

vbSrcPaint

ForC

A forrs s a cl "vagy" mvelettel val


sszekapcsolsbl addik az eredmny.

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. Lehetsgnk van azonban arra, hogy programunkbl GDI-fggvnyt
aktivizljunk.
Elsknt 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 megjelenteszkz jellemzit s rajzi lehetsgeit. 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 megjelenteszkzre 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 elzleg megrajzolt zrt terlet kifesthet. A FloodFill fggvny paramtere az eszkzkapcsolat, a pont, amely krl adott
szn zrt alakzaton bell trtnik a kifests az aktulis festsznnel 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 festszn s a festminta
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 egyszeren 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 mkdnek. Ez azt jelenti, hogy nem kell foglalkozni kommunikcis protokollokkal s vezrl szekvencikkal. Vgeredmnyben ugyanazokat a grafikus funkcikat hasznlhatjuk papron val megjelentsre, mint amelyeket a kpernys 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 elfordulhat, hogy nincs befzve papr. Nem
minden nyomtat hasznlhat grafika nyomtatsra. A rajzgpek elssorban vektoros
grafika megjelentsre alkalmasak. Figyelembe kell venni azt, hogy a papron val
megjelents lassbb, mint a kpernyre trtn rajzols. A kpernyn 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 Vezrlpult (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. Lehetsg 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 jellemzi


A nyomtatk specilis grafikus megjelentsre alkalmas eszkzk. Mivel mkdsk
eltr a kpernytl, ezrt a nyomtatt modellez Printer objektum a grafikus objektumokkal kapcsolatban megismert tulajdonsgok mellett egy sor - eddig ismeretlen jellemzvel br, amelyeket csak futs kzben rhetnk el. rdemes megjegyezni azt is,
hogy a tulajdonsgok rtelmezse a nyomtat gyrtja ltal ksztett vezrlprogramtl fgg, ezrt nem biztos, hogy minden nyomtattpusra rvnyesek az albbiak.
5.4.1.1. A nyomtats minsge
A ColorMode tulajdonsggal bellthatjuk, illetve lekrdezhetjk, hogy a nyomtat
sznes (vbPRCMColor) vagy fekete-fehr (vbPRCMMonochrome) zemmdban mkdik-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 elre meghatrozott felbontst takarnak:
Konstans
vbPRPQDraft
vbPRPQLow
vbPRPQMedium
vbPRPQHigh

rtk
-1
-2

-3
-4

Jelents
vzlatkszt felbonts,
kis felbonts,
kzepes felbonts,
nagy felbonts.

A TwipsPerPixelX s a TwipsPerPixelY tulajdonsgok rtkbl azt is megtudhatjuk,


hogy a nyomtat egy pontja hny twipnek felel meg vzszintes s fggleges 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 elre definilt vbPRPS... konstansok szabvnyos lapmreteket azonostanak.

Konstans

rtk

vbPRPSLetter
vbPRPSA3
vbPRPSA4
vbPRPSA5
vbPRPSUser

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 elfordulhat, 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 mkdjn 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 vezrlprogram 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 vezrljt 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 lekrdezhetk a Height s Width jellemzkkel. A rajzolsi md a DrawMode, DrawStyle,
DrawWidth s FillStyle tulajdonsgokkal, a sznezs a FillColor s ForeColor jellemzkkel pont ugyangy llthatk, mint a form s a kpmez objektumok esetn. A
kirsok adatainak belltsra ugyanazok a Font... tulajdonsgok hasznlhatk, mint
a kpernyn megjelent objektumok esetn. Az brk elksztshez is ugyanazokat a
metdusokat hasznlhatjuk (kivtel a Cls), st 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
kezeljbl) a formobjektum, nyomtatskor pedig a nyomtatobjektum paramterrel
aktivizljuk.
A nyomtatra val rajzolskor automatikusan megnylik egy nyomtatoldal. Lehetsgnk 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 jellemzk 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 erforrsbl val elrst,
valamint az MSChart komponenssel trtn grafikonrajzolst
5.5.1. Programkszts grafikus metdusokkal
A grafikus metdusok hasznlatt s a nyomtatsi lehetsgeket 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 szvegmezvel 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 vezrlkkel 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 fablakt 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 esemnykezelk kztti adatcserre olyan modulszint vltozkat hasznlunk,


amelyek csak a formmodulbl rhetk el:
Private Rajzszin As Long
Private Rajzolni As Boolean

A rajzolst vgz Grdt eljrst kln modul (GORDUL.BAS) tartalmazza. Ahhoz,


hogy tetszleges 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 vezrlk 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 elz 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


jellemzit 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 ellenrzst
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 esemnykezeljbl:


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 erforrsban


Ksztsnk programot, amely krtyalapokat jelent meg az ablakban, s kpes a megjelentett lapokat megkeverni! Ksztsk el a krtyalapok bitkpt tartalmaz erforrsllomnyt (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 erforrsfordtval t kell alaktani binris erforrslomannya


(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 erforrsfjlt bepthetjk a projektbe a Project men
Add File... menpontjval. Az erforrs 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 megfelelen 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 vezrltmb elemnek kpe az erforrsbl
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

Vezrlkrl lvn sz a ZOrder metdust hasznlhatjuk a kevershez,


Private Sub Kever_Click()
Dim i As Integer
'Vletlenszeren 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


erforrsbl

5.5.3. Az MSChart komponens


Alkalmazst ksztnk, amely vletlenszeren ellltott 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 elszr 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 lehetsget 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 vletlenszeren is feltlthetjk a RandomDataFill metdus segtsgvel.
A ChartType tulajdonsg hatrozza meg, hogy milyen mdon jelenik meg a diagram.
A Chart komponens egyttmkdik 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 vletlenszeren 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 megfelelen


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 eltnik
Labell.Caption = "" End Sub

5.6. A Visual Basic mint multimdis fejleszteszkz


A multimdia programozsa alatt elssorban a gpnkben fellelhet multimdis eszkzk (WAV-alap audioeszkzk, MIDI-eszkzk, CD-lejtsz, digitlis videolejtsz stb.) hasznlatt rtjk. A Visual Basic szmos ptelemet tartalmaz a fenti
eszkzkn vgezhet mveletek tmogatsra, mint pldul az AVI-fjlok lejtszst
vgz Animation
vezrlelem. Kln emltst rdemel a tetszleges mdiatpussal
kapcsolatos feladatok elvgzsre alkalmas MMControl {Microsoft Multimedia
Control)
ms nven MCI-vezrlelem.
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 lehetsgeken 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 ell - az egyszerbb programok ksztshez
nem is szksges - rszleteket, s gyakorlatilag ugyanazokat a lehetsgeket 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 elre definilt hangfjlokat kpes
megszlaltatni.
5.6.1. Mdiallomnyok lejtszsa az MMControl segtsgvel
Elsknt az MMControl komponenst hasznljuk tetszleges mediafile feldolgozsra
(MCI_ESZK alkalmazs). A program ablaknak futs kzbeni kpn jl lthat a
lejtszst vezrl gombsor. A vezrlgombok kzl azok vilgtanak, amelyek ppen
hasznlhatk. A gombok ismertetstl 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 vezrlket helyeztk az rlapra:


Vezrltpus

Objektumnv

Az alkalmazs clja

CommonDialog
CommandButton
MMControl

dlgOpen
gmbNyits
mciLejtsz

fjlvlaszts, a fjl
vlaszts indtsa, a
lejtszs vezrlse.

A form betltsekor felparamterezzk az MMControl s a CommonDialog vezrlket. A form trlsekor pedig gondoskodunk a lejtszs meglltsrl:

Private Sub Form_Load()


' Az mciLejtsz gombjainak llapota a vezrl llapotnak
' megfelelen 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 elz 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)
& " keretbl 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, IdFormatum 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 = IdFormatum End
With End Sub

Az MMControl vezrl hasznlata esetn gondoskodnunk kell a vezrlgombsor 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 idkznknt:
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 mkdse hasonl az elz feladathoz. A "Nyits" parancsgomb megnyomsakor megjelen Megnyits prbeszdablakbl kivlasztjuk a megjelentend AVI-llomnyt, majd
lejtsszuk azt. Felhvjuk a figyelmet arra, hogy a felhasznlt Animation ptelem
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 elszr fel kell tennnk az eszkztrra az ltalnos


prbeszdablakok (COMDLG32.OCX) s az animci (COMCT232.OCX) ActiveXvezrlk ikonjt (ProjectComponents). Ezt kveten az ikonok segtsgvel a fenti
kt vezrlt az alkalmazsunk rlapjra helyezzk. Az animcis vezrlnl elrjuk,
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 fggvnytl eltren a MessageBeep fggvny egy hangtpust vr paramterknt, amely a Windows rendszerben belltott WAV-hangok kzl jell ki egyet
(Vezrlpult/Hangok).
Private Sub cmd_MessageBeep_Click()
MessageBeep 0
End Sub

5.6.4. Animcikszts az ImageList vezrlvel


Ha az a feladatunk, hogy kpet mozgassunk, hasznlhatjuk az ImageList vezrlt. 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 vezrlt elzleg fel kell venni az
eszkztrra.) Az alkalmazs rlapjn elhelyezett Image vezrlben az idzt 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 vezrlk kerltek fel az rlapra:


Vezrltpus

Objektumnv

Felhasznls

CommandButton
Image ImageList
ImageList Label
Timer

cmdStart
imgForgKp
imilkon imlKp
lblSzveg
tmrIdzt

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 elszr ellltjuk az azonos mret bitkpeket, majd ezeket betltjk a megfelel kplista vezrlbe. 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 vezrlben 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 fggen


' lltjuk a mozgst engedlyez kapcsol rtkt s a
' parancsgomb feliratt If
cmdStart.Caption = szStop Then
tmrldzt.Enabled = False
cmdStart.Caption = szStart Else
tmrldzt.Enabled = True
cmdStart.Caption = szStop End If End
Sub

A kpeket s a szveget az idzt minden lefutsnl lptetjk:


Private Sub tmrIdzt_Timer()
MozgSzveg
MozgKp
Mozglkon
End Sub

A szveg lptetst vgz eljrsban a szveg els betjt 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, EljelesEgy As Integer,


List As ImageList)
i = i + EljelesEgy
1
Ha elrtk a kpsorozat utols kpkockjt If
i = List.Listlmages.Count + 1 Then
1
Visszalps az utols eltti kpkockra
i = List.Listlmages.Count - 1
' A forgsirny vltsa
EljelesEgy = EljelesEgy * (-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 EljelesEgy =
EljelesEgy * (-1) End If End Sub

5.6.5. Animci a PictureClip vezrlvel


A PictureClip segtsgvel trtn animcis feladat megoldst (KUTYAFUT)
alkalmazs tartalmazza. A megoldsban minden egyes kpsorozathoz kln
PictureClip ActiveX-vezrlt
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 vezrlkbl a picKeret


tmb megfelel kpmezjbe msoljuk. A kpcsere temt egy idzt tmrIdzt)
adja. Az alkalmazs mkdst 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


vezrlvel

A form betltsekor mindhrom kpsorozat els elemt a kpmezkbe msoljuk, s


kezdrtkkel 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 mkdst 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 idzt esemnykezel eljrsban a kpkockk vltsn kvl a kpmezk mozgatst is vgezzk. A mozgatsi sebessget a Lps() tmb elemei hatrozzk meg kpmeznknt.
Private Sub tmrIdzt_Timer()
Const Elre = 1, Helyben = 0
' Ha futs van engedlyezve, vltjuk a kpkockkat s
' mozgatjuk a kpmezket
If bolFuts Then Futs Elre
' Ha helyben futs van engedlyezve, csak a kpkockkat
' vltogatjuk. A kpmezk 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 kpmezhz 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-tl 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 kpmezbe
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 lehetsgeit bvti 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 egyttmkdst clozzk, pldul a kiszolgl progra
mozsa az gyfl alkalmazsokbl (OLE automation).

Napjainkban az OLE nem csupn egy betsz, hanem a Microsoft cg alkal


mazsok kztti egyttmkdsi technolgija. Ez magban foglalja az
egyttmkd vezrlket, melyeknek hagyomnyos neve az OCX volt, de ma
mr ActiveX vezrlknek 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

rtk

Lers

vb CFLink
vbCFText
vbCFRTF
vbCFBitmap
vbCFMetafile
vbCFDIB
vbCFPalette

&HBF00 I
&HBF01
2389

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 vezrlbe msolja a vglap tartalmt, attl fggen, hogy mi van a vglapon! Az alkalmazs ablaka mindssze ngy ptelemet tartalmaz (kt parancsgombot, egy kpmezt s egy szvegmezt):

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 lehetsge 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. mveletcsomagokat (transaction) kldzgetnek egymsnak. A mveletcsomag, amely az zenethez hasonl Windows fogalom, egy konstansbl s kapcsold paramterekbl
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 hidegtl eltren 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 elz kt kapcsolati lehetsg kombincija. Az
gyfl felkri a kiszolglt adatszolgltatsra, amely ezt kveten 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 lehetsgeknek megfelelen:
Adatkrs
A kapcsolat ezen mdja megfelel a hagyomnyos "hideg" kapcsolatnak. Az
adatkrst az gyfl a kiszolglnak szl zenet elkldsvel kezdemnyezi.

Adatklds
Az gyflprogram fell 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 megfelelen, 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 lehetsg, hogy a kliens parancsot kldjn a kiszolglnak.
Szinkron s aszinkron zenetcsomagok
Az zenetcsomagok szinkron s aszinkron mdon egyarnt kezelhetk.
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 lehetv 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 tmakrrl,
akkor az a form neve lesz. A tteleket, amelyben a kiszolgl kommuniklni kpes az
egyes vezrlk (pldul a Label, a PictureBox, vagy TextBox) tartalmazhatjk. Ezek
a vezrlk 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 lehetsget.
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 vezrlkhz ktve lehet
felpteni a LinkMode LinkTopic s Linkltem tulajdonsgok felhasznlsval. A vezrlk LinkMode tulajdonsgnak rtke dnti el, hogy milyen a kapcsolat
rtk

Kapcsolat

vbLinkNone
vbLinkAutomatic
vbLinkManual
vbLinkNotify

0
1
2
3

Nincs DDE kapcsolat, A VB automatikusnak nevezi


a "forr" kapcsolatot, manulisnak a "hideget", s
rtest jellegnek a "meleget".

A kiszolglprogram vezrliben 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 vezrli a kapcsolat felvtelrl a LinkOpen, lezrsrl a LinkClose esemnyben
rteslnek. Hibakezelsi lehetsgnk is van, hiba esetn a LinkError esemny keletkezik.
Ha az gyfl vbLinkNotify mdon kapcsoldik a kiszolglhoz, akkor az gyfl vezrlinek LinkNotify esemnykezelje kapja meg a vezrlst s a megvltozott rtkeket
letlthetjk az gyfl vezrlinek LinkRequest metdusval. Ha a kapcsolat vbLinkAutomatic, akkor az gyfl vezrljnek tartalma (kp, szveg) automatikusan a kiszolgl megfelel vezrljnek tartalmt veszi fel.
A fenti megoldsok elssorban a hagyomnyos, a kiszolgltl az gyfl fel irnyul
adatforgalmat tmogatjk. Lehetsg van a fordtott kapcsolatokra is. A vezrlk
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) vezrlt tartalmaz (A, B
s C). Az A s B vezrlk az gyfltl LinkPoke metdussal kapjk az adatokat. Ha
az adatok vltoznak, a vezrlk rtknek szmm konvertlsa (A_rtk, B_rtk) s
sszeadsa (C_rtk) utn az eredmnyt a C szvegmezbe 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 vezrlket 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 szvegmezk brmelyiknek megvltozsakor az sszeg a C szvegmezbe 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 gyfltl kilpnk
Cancel = 0
Unload Me
End Sub

Az gyflprogram (Kliens) kt vezrlje az A s a B tartalmazza az sszeadand


adatokat. Ezeket a kiszolgl megfelel A s B vezrlihez ktjk vbLinkManual kapcsolattal. A C tartalmazza az eredmnyt ez "forr" kapcsolatban ll a szerver C vezrljvel. A Microsoft Windows Common Controls betltse utn az AUD s a BUD
UpDown vezrlket hozzkapcsolhatjuk az A s B vezrlkhz. 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 a Szerver
' program szumma tmakrhez csatlakozik
A.LinkMode = 0 A.LinkTopic =
"Szerver|szumma"
' A Szerver programon szintn az A szvegmez tartalmazza a
' prbeszd tmjt A.Linkltem = "A"
' Elg a manulis kapcsolat, hiszen a kliens kldi az adatot
A.LinkMode = vbLinkManual
' Kikapcsolva a DDE kapcsolatot a B szvegmez a Szerver
' program szumma tmakrhez csatlakozik
B.LinkMode = 0
B.LinkTopic = "Szerver|szumma"
' A Szerver programon szintn a B szvegmez tartalmazza a
1
prbeszd tmjt
B.Linkltem = "B"
' Elg a manulis kapcsolat, hiszen a kliens kldi az adatot
B.LinkMode = vbLinkManual
' Kikapcsolva a DDE kapcsolatot a C szvegmez a Szerver
' program szumma tmakrhez csatlakozik
C.LinkMode = 0 C.LinkTopic =
"Szerver|szumma"
' A Szerver programon szintn a C szvegmez tartalmazza a '
prbeszd tmjt C.Linkltem = "C"
' 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 vezrlt sszekapcsoljuk az A vezrlvel


AUD.Max = 32767 AUD.Min = -32768 AUD.BuddyControl = A
AUD.AutoBuddy = True AUD.SyncBuddy = True
' A BUD UpDown vezrlt sszekapcsoljuk a B vezrlvel
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 eltt.
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 vezrlket, 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 vezrlt sszekapcsoljuk az A szvegmezvel
AUD.Max = 32767 AUD.Min = -32768 AUD.AutoBuddy = True
AUD.BuddyControl = A AUD.SyncBuddy = True
' A BUD UpDown vezrlt sszekapcsoljuk a B szvegmezvel 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 vezrlk 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 elz verzik Action jellemzjt.
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 ellltott - SDI alkalmazs
vzbl indulunk ki.
Az SDI alkalmazsban csak a Fjl ment hasznlunk Megnyit, Bezr s Kilp menpontokkal. A menhz kapcsoldan az eszkzsvon gyorstgombokat mkdtetnk.
Az OLE-szervert a fejleszts alatt a vezrl terletn belli ketts 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 megfelelen a fprogram 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) lehetsgei


A Visual Basic vezrlk tbbsgt hozzkapcsolhatjuk az OLE-hez, vidd s dobd"
lehetsgeket klcsnzve nekik. A komponensek DragMode jellemzje 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 rtktl fggen


Akcikonstans
vbCancel
vbBeginDrag
vbEndDrag

Tevkenysg
0
1
2

Megsznteti az objektum vonszolst


Megindtja az objektum vitelt
Ledobja az objektumot

A vezrlk rendelkeznek egy DragOver s egy DragDrop esemnnyel, melyek


paramterei informcit tartalmaznak a vezrl felett thzott, illetve a vezrlre dobott objektumrl.
Mikzben egy vezrln tvisznk egy msikat, az utbbi megvltoztathatja az egrkurzort a vonszolt objektum Draglcon tulajdonsgnak megfelelen. 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 thelyezhetk a msikba!
Szksgnk van kt ikonra annak jellsre, hogy ledobhatjuk-e az objektumot, vagy
sem. Ezeket az ikonokat erforrsban 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 vezrlket 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 Centrl, 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 mkds

6.5. ActiveX-komponensek
Az ActiveX-komponens kifejezs .EXE, .DLL vagy .OCX kiterjeszts llomnyokban trolt, tbbszr felhasznlhat, futtathat programkdot jell. Az ActiveX-komponensek f jellemzje az a technolgia, amely lehetv 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, vezrlk 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 lehetv 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 lehetsgeit. 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 esemnyekrl is rtestik az gyfelet, gy aszinkron
kapcsolat pthet a kiszolgl s a kliens kztt, valamint a vezrlk a programokba
mr a fejleszts sorn bepthetk, s az Internet bngszben is megjelenthetk.
6.5.1.2. A komponensek tpusai
A komponenseket (sszetevket, ptelemeket) a felhasznlk (gyfelek) szempontjbl kt nagy csoportra oszthatjuk:
Programon bellinek {in-process) nevezzk azokat a komponenseket, amelyek
az gyfl programszljban mkdnek. 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 mkd 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 vezrlk (ActiveXvezrlk - OCX), amelyeket egy jl definilt kapcsoldsi felleten keresztl
rnk el. A aktv vezrlket a UserControl objektumra ptve hromflekp
pen alakthatjuk ki:
kszthetnk vezrlt gy, hogy a kapcsoldsi felletrl s a megjelen
tsrl egyarnt magunk gondoskodunk,
tovbbfejleszthetjk egy meglv vezrl megjelenst s kapcsolatait,
tbb meglv vezrlbl j vezrlt 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 kezelsrl 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 alapveten kt esemnnyel rendelkezik. Az egyik kzvetlenl az objektumpldny ltrehozsa utn (Initialize), a msik pedig a pldny trlse eltt
(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 lehetsgeit 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 lehetsgek
Az AktiveX-vezrlk Boolean tpus Public tulajdonsga azt szablyozza, hogy megoszthat-e a komponens ms alkalmazsokkal.

A kiszolgl programban azAcriveX-komponensek osztlymoduljnak Instancing jellemzje hatrozza meg, hogy milyen lehetsgeink vannak a pldnyok ltrehozsakor.
Tulajdonsgrtk
Private
PublicNotCreatable
Sing le Use

GlobalSingie Use
MultiUse
GlobalMultiUse

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 lehetsgen tlmenen 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 lehetsgen tlmenen a tulajdonsgok s a metdusok
gy hasznlhatk, mint a kznsges globlis alprogramok. (Az objektum pldnya automatikusan ltrejn.)

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 lehetsg, amikor a futs kzben teremtjk meg a kapcsolatot, ez a ksi 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 megsznsvel 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, amelybl szrmaztatott objektumok esemnyeket is kldenek, esemnykld kapcsoldsi fellettel is rendelkeznek. A kapcsoldsi felletek tdefinilhatok,
mdosthatk, azonban az tlagos felhasznl ritkn l ezekkel a lehetsgekkel. (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 ptelemeket, 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 elszr 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' rtkre!


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! Elszr 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 ksi ktssel
Set objNew = CreateObject("SummaP.Summa")
End Sub

Az adatokat, a korbban ismertetett pldkhoz hasonlan, TextBox vezrlkben troljuk (A, B), melyekhez UpDown vezrlket csatlakoztattunk (AUD, BUD). Az A s B
szvegmezk brmelyiknek megvltozsakor meghvjuk a kapcsolati objektum
sszead fggvnymetdust, s az eredmnyt a C szvegmezbe 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 lehetsgeit
alkalmazzuk-e az alkalmazsok programozsra, vagy a hagyomnyos makrnyelvet.
Ez utbbi megoldsnak elnye, hogy rgebbi (Word, Excel) verzik esetn is
mkdik a programunk.

Pldaknt egy olyan alkalmazst mutatunk be, amely a Word segtsgvel elkszt egy
Dokumentumot, majd llomnyban trolja, s kinyomtatja azt, tovbb az Excel lehetsgeit hasznlva tanulmnyi tlagot szmol az egyes tantrgyak jegyeibl. (A megoldst tartalmaz WordExc.vbp projektet a WEX knyvtrban tallhatjuk meg.
Az alkalmazs fablakban (Fform) ngy nyomgombot helyeztnk el: cmdWord,
cmdWordVBA, cmdExcel s cmdKilps. A cmdKilps gombbal kilphetnk az
alkalmazsbl:
Private Sub cmdKilps_Click()
Unload Me
End Sub

A Fform 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 bettpus 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
bbeldik", 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 mveletsort a WordBasic hasznlata helyett a Visual Basic for


Application segtsgvel is megvalsthatjuk. A klnbsg a kt megolds kztt az,
hogy mg az elbbi mintegy 900 parancsot tartalmaz rendezetlenl, addig a VBA objektumok hierarchijra pl, mely objektumok metdusok s tulajdonsgok formjban tartalmazzk a Word programozsi lehetsgeit.
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 vletlenszeren belltunk:
Private Sub Form_Load()
Dim i As Integer
1
Az osztlyzatok vletlenszer ellltsa
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 fablakot.
Private Sub cmdKilps_Click()
' az Excel lezrsa
objExcel.Application.Quit
' az objektum megszntetse
Set objExcel = Nothing
1
az ablak megszntetse
Unload Me
FForm.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 eredmnyrl.
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 projektbl 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 elszr 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 lehetsgeit

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 kvlrl 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
1

A c_rtk tulajdonsg lekrdezse


Public Property Get c_rtk() As Variant
c_rtk = mc_rtk
End Property

(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 - mieltt azonban tovbblpnnk rdemes tesztelni a komponens mkdst.
Ksztsk el a AxtiveX DLL komponens tesztprogramjt! Az aktv ptelemek tesztelsre j lehetsget 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> billentyt, vagy kivlasztjuk a View men


Object Browser menpontjt, akkor a cmsszead osztly tulajdonsgait s esemnyeit
(interface) tanulmnyozhatjuk az objektumbngszben:

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 megsznsekor 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 kezelje
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 vezrlket sszehangoljuk a szvegmezkkel:


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-vezrlk ksztse


Ksztsnk elszr egy olyan ActiveX-vezrlt, melynek megjelensrl - kerek nyomgombot jelent meg felirattal - s kapcsoldsi felleteirl 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.
Elszr 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 vezrlket tartalmaznak (UserControls). A UserControl objektum a felhasznli vezrlk 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 vezrlnket Gomb-ra s
troljuk a GOMB.CTL llomnyban! A vezrlnek a formhoz hasonlan rlapja van,
amelyen a programokhoz hasonlan tervezhetjk meg a vezrl fellett s mkdst.
A vezrl, hasonlan az eddig megismert komponensekhez, a kapcsoldsi felleten
(interface) keresztl tartja a kapcsolatot az gyflprogrammal. A vezrl mkdsnek tesztelsre egy tesztp projektet is ksztnk, amelyet a vezrlprojekttel kzs
csoportban trolunk. A szksges lpseket az elz rszben ismertetett mdon vgezzk el.
Amikor az egyik projektben tervezett vezrlt egy msik (tesztel) projekt fejlesztsekor hasznlni szeretnnk, a fejleszti 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 fejleszti krnyezetben,
ha lezrjuk az rlapjt tartalmaz ablakot. Ezt kveten gy hasznlhatjuk a fejleszts
alatt ll vezrlt, mint minden ms regisztrlt ActiveX-vezrlt. 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 elszr 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 vezrlnk 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 vezrlt az alkalmazsunk fejlesztsekor hasznlunk, akkor a vezrl egy pldnya birtokolja a tulajdonsgokat. Amikor azonban elindtjuk a programot, akkor a fejleszti ablak zrsval a fejlesztshez hasznlt pldny megsznik ltezni, s egy j pldny jn ltre. Gondoskodnunk kell a fejleszts sorn belltott tulajdonsgok tvitelrl a futs alatt ltez objektumnak. Erre a clra tulajdonsgtska
(PropertyBag) objektum hasznlhat, amely a tulajdonsgrtkeket trolja. Segtsgvel a felhasznli vezrlk tulajdonsgainak rtke a memribl llomnyba rhat, illetve onnan visszaolvashat (a felhasznli vezrlk esetn .CTL s a .CTX
fjlok).

A tulajdonsgtska a ReadProperties s a WriteProperties esemnyeken keresztl


rhet el. A WriteProperties esemny az objektumpldny megsznsekor 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 jellemzk kzl Private Sub
UserControl_ReadProperties(PropBag As PropertyBag)
stCaption = PropBag.ReadProperty("Caption")
End Sub
' A felirat bersa a trolt jellemzk 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 vezrlt, vagy ha futs kzben mdostjuk a mreteit, a gomb tmrjt az aktulis Height s Width jellemzk 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 (vezrlpldnyok) ltrejttt az Initialize esemny jelzi. Az


esemny kezeljben 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 vezrlpldny ltrehozsakor aktivizldik.


Az InitProperties esemny azonban csak akkor, amikor a vezrlt 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 ksznheten a Gomb tpus objektum minden egyes pldnynak felirata megegyezik a vezrl nevvel Gombi, Gombi stb.
A UserControl megjelentsrl 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 vezrlt feltehetjk a tesztprojekt rlapjra akr tbb pldnyban is. A
pldnyok nevei a vezrlk nevnek megfelelen Gombi, Gombi stb. lesznek. A
gombokat a tervezs folyamn, de akr futs kzben is, tmretezhetjk.

6.20. bra ActiveX


vazrlk a farmon

Tegynk fel egy gombot az rlapra, melynek felirata Gomb1! A gomblenyoms esemny kezeljben 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 vezrlt tartalmaz OCX-llomnyt. Ms programban val felhasznlshoz a Regocx32 segdprogrammal kezelhetjk a regisztrcis adatbzis vonatkoz bejegyzseit. Ha azonban olyan programelemeket is hasznltunk a vezrlben, amelyek a Visual Basic rszei, akkor clszer teleptkszletet 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-vezrlket, hanem mr meglv vezrlkbl 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 mkdst bemutat
"Standard EXE" alkalmazs projektje a SZUMMAT.VBP fjlban tallhat. A kt
projektbl 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 szvegmezt!


Az els kett tartalmazza az sszeadandkat, a harmadik pedig az sszeget. Tegyk
fel az UDA s UDB lptetket is! Az utbbiakat a BodyControl tulajdonsgon keresztl kapcsoljuk ssze az A s a B vezrlkkel!
Tovbbi elrs, hogy lehessen kivlasztani a httrsznt, ha a <Ctrl> billenty lenyomsa utn az egrrel a vezrl terletn kattintunk! Ehhez tegynk fel egy Shape vezrlt (Shapel), melynek BackStyle tulajdonsga 1-Opaque rtk! Ugyancsak helyezznk az rlapra egy a CommonDialogl, ltalnos prbeszdablakokat kezel vezrlt! lltsuk CommonDialogl vezrl CancelError tulajdonsgt True rtkre,
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 vezrlknek. Ha a vezrlnk mrete vltozik, akkor a rhelyezett vezrlket 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 vezrlpldny 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 vezrlinek mkdst mr jl ismerjk:


Private Sub A_Change()
' A tpushibk kiszrse 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 kiszrse 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 vezrlk 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 vezrln gomb (Shift)
End Sub
Private Sub C_MouseUp(Button As Integer, Shift As Integer, _ X
As Single, Y As Single)
' Egrgomb nyoms a vezrln 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


vezrlnket. A tesztel alkalmazsban semmilyen kdot sem kell rnunk, csak a vezrlt kell az alkalmazs rlapjra felhelyeznnk. Az albbi bra tansga szerint a tesztprojekt hrom pldnyban hasznlja az sszead vezrlt.

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
szben jelent meg.
A Visual Basic UserDocument objektuma - az AxtiveX-dokumentum alapja - megtvesztsig hasonlt a Form objektumhoz, nhny alapvet klnbsgtl eltekintve. A
UserDocument objektum nem kezeli az aktivlssal (Activate, Deactivate),
megsznssel (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 erforrs cmazonost) tltsnk a bngszbe. 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. Elszr
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 szvegmezt s egy lptetvezrlt. Az gy keletkezett vezrlk helyt a kivlasztott knyvcmnek megfelelen 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 eltt, helyezkedjen el az adatbekrst vgz vezrlelem.
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 lptetvezrl
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 megfelelen 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 szvegmezt a lptet-vezrlvel:


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 egyszeren 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-vezrlt! Ne felejtsk el a GOMB.OCX vezrlt
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 elztl.
<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 lehetsgei


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 megfelelen, klnbz tpus s elrhetsg llomnyokban trolhatjuk. A fjlok kezelst a Visual
Basic nyelv utastsainak s fggvnyeinek segtsgvel vgezhetjk.
Sokkal komolyabb adatfeldolgozsi lehetsgeket 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 lehetsgeinket az ODBC
(Open DataBase Connectivity) technolgia alkalmazsa, melynek segtsgvel tbb
szmtgpen prhuzamosan mkd 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 elszr 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 rhetk el. Az ilyen l
lomnyok adatait kiolvashatjuk (Input), fjlba rhatjuk (Output), de lehetsg
van jabb adatok hozzfzsre is (Append)
A tetszleges elrs (Random) llomnyok azonos bjtmret binris re
kordok sorozatt troljk llnak. A tetszleges elrs azt jelenti, hogy az llo
mny adatait a megnyits utn, tetszleges 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) kezddik. A sikeres llomnynyits utn kvetkezhet a fjl adatainak elrse: rsa, olvassa, esetleg pozicionlst (Seek) kveten. 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 mvelet pozcijnak lekrdezse,
a kvetkez mvelet 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 tetszleges 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

Output
Append

[ # ] f jl sz m

1-511

[ Le n=re k o rd h o ssz ]

1-32767

Olvassra (Input) csak ltez llomny nyithatunk meg, rs (Output) s hozzrs


(Append) esetn azonban a rendszer megnyits eltt 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 egyszeren elvgezhet az Input# utastssal. A
Write utasts az adatelemeket vesszvel tagolja, a szveget idzjelelek 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 lehetsggel 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 fzzk 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

Elkszletek 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. Tetszleges elrs llomnyok


A Random fjlokat azonos tpus adatok trolsra hasznljuk. A fjlban trolt adatelemeket szoksos elnevezse a rekord, melynek maximlis hossza 32767 bjt. A tetszleges hozzfrs arra utal, hogy a fjl megnyitsa utn rsi s olvassi mveleteket
egyarnt vgezhetnk A fjlnyits utasts ebben az esetben:
Open fjlnv For Random As fjlszm Len = rekordhossz

Az llomnyban a rekordok (1-tl 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 mvelet 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 mveletben szerepl rekordig. Az albbi programrszlet bemutatja az rsi, az olvassi valamint a pozicionlsi mveleteket.
1.

2.

24

3.

36

4.

5.

60

Dim a As Integer, b As Integer


Open "C:\adatok.dat" For Random As 1 Len = Len(a) a =
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 elszr 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 tetszleges szerkezet fjl tartalmt feldolgozhatjuk. A megnyitshoz hasznlhat Open utasts alakja:
Open fjlnv For Binary As fjlszm

A binris elrs sorn a fjl tetszleges 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


fjlmveleteket engedlyeznk: Read - olvass, Write - rs, ReadWrite - rs s olvass (alaprtelmezs).
A hozzfrs paramterrel tbbprogramos krnyezetben elrhatjuk, 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 lehetsg, hogy a megnyitott llomnyok egy rszt zroljuk ms alkalmazsok ell (Lock), illetve a zrolst megszntessk
(Unlock)
Lock [#]fjlszm, rekord | [kezdpozci] To vgpozci
Unlock [#]fjlszm[,rekord | [kezdpozci] 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 fejlesztrendszerben 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

Drive (meghajt)

A csoport legfontosabb objektuma, melynek metdusaival


meghajtkat, knyvtrakat s llomnyokat egyarnt kezelhetnk.
Hasznlatval a rendszerhez kapcsold meghajtkrl
(merevlemez, CD-ROM stb.) kaphatunk informcit.

Folder (mappa)

Lehetv teszi a knyvtrakkal (mappk) vgzett mveleteket.

File (llomny)

Tmogatja az llomnyokkal kapcsolatos mveleteket.

TextStream

Lehetv teszi a szvegfjlok kezelst.

Az objektumok hierarchijt a 7.3. brn lthatjuk, ahol az ellipszisben szerepl nevek


objektumok, mg a tglalapban szereplk gyjtemnyek.
Lssunk elszr 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 lehetsgek ttekintse eltt 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 kvlrl is elrhet, vagyis a deklarciban a New kulcssz utn is megadhat. Az objektum tulajdonsga a szmtgp
meghajtirl informcit trol Drive objektumok Drives gyjtemnye. A metdusai a
legklnbzbb mveletek vgzst tmogatjk:
BuildPathO
CreateFolder()
DeleteFolder()
FolderExists()
GetDrive()
GetFile()
GetParentFolderName()
MoveFileO

CopyFile()
CreateTextFile()
DriveExists()
GetAbsolutePathNameO
GetDriveName()
GetFileNameO
GetSpecialFolder()
MoveFolder()

CopyFolder()
DeleteFile()
FileExists()
GetBaseName()
GetExtensionName()
GetFolder()
GetTempName()
OpenTextFile()

A Drive objektum

A Drive objektum a szmtgphez csatlakoztatott tetszleges 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 gyjtemnye a Drives kollekci, melynek kt tulajdonsga a
Count s az Item.

A Folder objektum
A Folder objektum lehetv teszi, hogy a mappk adatait lekrdezzk, s mveleteket
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 szlmappa 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 gyjtemnye 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, amelyrl informcikat a tulajdonsgok szolgltatnak: Attributes, DateCreated, DateLastAccessed, DateLastModified,
Drive, Name, ParentFolder, Path, ShortName, ShortPath, Size, Type. Az objektum
metdusai a szoksos megnyits nlkli fjlmveleteket tmogatjk: Copy(), Delete(),
Move(), OpenAsTextStream().
A Files gyjtemny-objektum a Folder objektum Files tulajdonsga ltal visszaadott
File objektumok trolja. A Folder objektum ltal kijellt knyvtr minden bejegyzse bekerl ebbe a gyjtemnybe, 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 mveletei a TextStream objektumon keresztl
valsulnak meg. Az objektum metdusai a szoksos fjlmveleteken tlmenen, 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 felletekbl a legfiatalabb" s egyben a legegyszerbben
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 illesztprogram. A UDA-t a Microsoft Data Access
Components (MDAC) felhasznlsval valstjk meg, amely komponens-gyjtemny
a kvetkezket 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) gyjtemnye, amely tetszleges adatforrs szmra
(a relcis adatbzisoktl kezdve, a fjlrendszerekig) biztostja az sszes
szksges adatelrsi lehetsget,
a rgebbi verzikkal szembeni kompatibilits fenntartshoz szksges
ODBC-t (Open Database Connectivity).
Az ADO az OLE DB adatelrsi technolgin alapul, melynek segtsgvel az
alkalmazsunkbl tetszleges adatforrst elrhetnk - legyen sz relcis vagy nem
relcis adatbzisokrl, e-mail- vagy fjlrendszerekrl, szvegekrl, grafikrl stb. Az
ADO-t gy terveztk, hogy minimalizljk a hlzati terhelst az Interneten keresztl
zajl adatcsere-folyamatokban. A hatkonysg mellett az ADO elnye az is, hogy az
eldjeinl 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 (mezk, fields) szma elre 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 meznknt 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 mezrl is beszlhetnk. Az adatkezels vgrehajtsa sorn egy adott tblban minden idpillanatban 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 (Adatrlap-varzsl) lehetsgeire 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 elszr megismerkednk a Visual Basic alatti adatbzis-kezels fogalomkrvel, majd feladatok kitzsvel s megoldsval bemutatjuk az adatbzisokkal
val munkavgzs eszkzeit.
Az adatbzis-mveltek tbbsge valamilyen lekrdezs jelleg mvelet, 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 mezihez, - amelyek rtke alapjn adatot keresnk a tblbl indextblt ksztnk. Az indextbla a mezrtkek 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 adatbzismveleteket kzvetlenl a szmtgpnkn fut alkalmazs vgzi. Sokkal nagyobb
teljestmny programrendszerek kialaktsra van lehetsg, ha az adatbzis adatait
egy tvoli kiszolgln troljuk, amelyet a helyi alkalmazsunkkal prhuzamosan mkd 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 tetszleges 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, lehetv 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 mkdnek, 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-bl val kilps nlkl is elvgezhetjk.
A Visual Basic 6.0 j adatkezel krnyezete (Data Environment) segtsgvel olyan
tbbszr felhasznlhat (tbb projektben, ms fejleszteszkzkben, a Weben) adatelr komponenseket hozhatunk ltre, amelyek automatikusan kihasznljk az adatktsi szolgltats {Data Binding) elnyeit. Ebbl az adatkezel krnyezetbl az alkotelemek egyszer thzssal tvehetk. Ilyen mdon az adatokat nem csak a Visual
Basic rlapjn jelenthetjk meg az ADO/OLE DB alap adatmegjelent vezrlelemekkel (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 legklnbzbb 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 szerkesztt 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 menbl 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
elrhetsghez szksges tovbbi informcikat (pldul az adatbzis-kiszolgl neve). Vgl a Kapcsolat tesztelse
gombon val kattintssal tesztelhetjk az
adatbzis elrhetsgt.
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 menbl 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 vezrlelemre, a Microsoft Hierarchical FlexGrid
komponensre. A vezrlelemet 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 vezrlelemet az alkalmazsunk rlapjra
(Form1).
Ahhoz, hogy sszekapcsoljuk a megjelent vezrlelemet 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 vezrlelem 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 vezrlelem FixedCols tulajdonsgnak rtkt 1-rl


0-ra (eltntetve ezzel a tblzat sorai eltt 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 szvegmezt, 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 tvihetk 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 vezrlelem
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 egyszeren thzhatjuk az rlapra a szksges tblzatmezket. Ekkor az rlapon automatikusan ltrejn a Label
s Text vezrlpros a meznv s az rtk megjelentsre. A Text vezrlelem
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 vezrlelem 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) vezrlelem segtsgvel is
ltesthetnk kapcsolatot. Ebben
az esetben a kapcsolatot a vezrlelem 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 vezrlelem nevt, a DataField tulajdonsgban pedig a megjelentend adatmezt.

7.15. bra A
megjelent vezrlk 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 ksztsrl
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 mezt -fields), de azon bell egy
idben mindig csak egy rekordra (egy sorra) mutat.
A Recordset objektum viselkedse ersen fgg attl, hogy milyen adatszolgltatn keresztl, illetve milyen krnyezetbl (gyfl, szerver, Internet Explorer stb.) rjk el az
adatbzist. Bizonyos esetekben a Recordset objektum bizonyos metdusai nem mkdnek. (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 vezrlelemet, 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) vezrlelemekkel


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 kvetkezkppen 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 Gyjtemny tbljnak
szerkezete tanulmnyozhat.

7.7S. bra A
PROGRAM.MDB Gyjtemny tblja

7.3.3.1. A Data vezrlelem


A Data vezrlelem - hasonlan az ADO esetben hasznlt ADO Data Control-hoz kapcsolatot teremt a szoksos vezrlelemek s az adatbzis adattblja kztt, de
csak a Microsoft Jet vagy az ODBCDirect adatforrsok esetn. Az rlapra helyezve az
adatvezrlt, 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

pozicionls az adattbla els rekordjra,

MovePrevious

pozicionls az adattbla elz rekordjra,

MoveNext

pozicionls az adattbla kvetkez rekordjra,

MoveLast

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 adatvezrlhz. Mr emltettk,
hogy egy adatvezrlvel 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 lehetsg
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 vezrlgombok kztt megjelen feliratot adhatjuk meg.
A pldaadatbzisok elrshez a tulajdonsgrtkeket programbl is bellthatjuk:
With Datl
.DatabaseName = App.Path & "\..\Adatok\program.mdb"
.RecordSource = "Gyjtemny"
.RecordsetType = vbRSTypeDynaset
.Connect = "Access"
.Caption = "Programgyjtemny"
.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 vezrlk hasznlata


Az adatkapcsolt vezrlk - 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 jellemzk:
DataSource
DataField
DataChanged

Annak az adatforrs-vezrlnek a nevt tartalmazza, melynek rekordkszletvel a vezrl kapcsolatban ll.


Annak az adatmeznek a neve, amellyel ltrejn a kzvetlen kapcsolat.
A tulajdonsg True rtkkel jelzi, ha a vezrlben trolt rtk klnbzik az adatrekordban trolt rtktl. (A tulajdonsg rtke szksg esetn
be is llthat.)

A vezrlk 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 vezrlk segtsgvel egyetlen programsor
megrsa nlkl is kszthetnk adatbzis-kezel alkalmazsokat.
Hrom adatkapcsolt ActiveX-vezrl lehetsgeit kln is megvizsgljuk.
A DBGrid vezrlben az adatrekordok
egy tblzat soraiban jelenthetk meg. A
DBGrid
vezrlelem
DataSource
tulajdonsga kijelli azt az adatforrsvezrlt, melynek tbljt a DBGrid
megjelenti.
7
.
2
0. bra A
DBGrid

A DBCombo s a DBList vezrlk az adattbla egy-egy oszlopnak trolsra hasznlhatk.


A DBList s a DBCombo (Dblist32.ocx) vezrlk 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 mezkn keresztl valsul meg. A Selectedltem tulajdonsg a listbl kivlasztott mezrtket tartalmazza, mg a kapcsolt adat a BoundText tulajdonsgbl
tudhat meg. (Az adatforrsra hivatkoz tulajdonsgokat mindhrom vezrlnl a fejleszts sorn kell belltanunk.)
Az albbi pldban (DBGRCB) a
PROGRAM.MDB adatbzis Gyjtemny tbljhoz kt vezrlelemet kapcsoltunk. Egy DBCombo
vezrlben a fjlneveket jelentjk
meg, melyekhez kapcsolt knyvtrnv alapjn frisstjk a DBGrid
vezrlelem tartalmt.

7.21. bra
Kapcsolt vezrlk

Az alkalmazs mkdshez szksges belltsok egy rszt a fejleszts folyamn


kell megadnunk, mg a tbbirl az rlap betltsekor is gondoskodhatunk:
Private Sub Form_Load()
With Data1
.DatabaseName = App.Path & "\..\Adatok\program.mdb"
.RecordSource = "Gyjtemny"
.RecordsetType = 2
.Connect = "Access"
.Caption = "Programok"
End With
With Data2
.DatabaseName = App.Path & "\..\Adatok\program.mdb"
.RecordSource = "Gyjtemny"
.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 vezrlk tartalmt:
Private Sub DBCombol_Click(Area As Integer)
Dim sgl As String
sql = "Select Fjlnv, Knyvtr from Gyjtemny WHERE " & _
"Gyjtemny.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 adatrlap-varzsl segtsgvel egyszeren 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. Elszr az adatbzis tpust
kell kivlasztanunk:

7.22. bra Az,


adatbzis tpusa

A kvetkez lpsben megadjuk az adatbzisunkat:

7.23. bra Az
adatbzis megadsa

Ezt kveten 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
lehetsg):

7.24. bra Az
adatbzis rlap tpusa

A kvetkez lpsben - az adatforrs


megadsa utn - kijellhetjk azokat a
mezket, amelyeket fel akarunk tenni az
rlapra. Megmondhatjuk tovbb, hogy
melyik mez szerint legyenek rendezettek
a rekordok, s a mezk sorrendjt is definilhatjuk:

7.25. bra
Mezvlaszts

A kvetkez prbeszdablakokban meg


kell adni az rlapon megjelen vezrlket
s azoknak a fontosabb tulajdonsgait. (A
komponensek szma s a kinzete eltr
lesz a kivlasztott rlaptpustl fggen.)
Az utols prbeszdablakban a Finish
gombon kattintva elkszl az alkalmazsunk rlapja, melynek lehetsges vltozatait a 7.27. brn lthatjuk.

7.26. bra
Vezrlk az rlapon

Egyrekordos rlap

HFlexGrid-es rlap
7.27. bra
Klnbz rlaptpusok

Grafikonos rlap

A adatrlap-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 kezeljben jvhagyhatjuk az


egyes adatbzis-mveleteket:
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 kezeli felletet a PROGRAM.MDB adatbzishoz, az adatrlapvarzsl hasznlata nlkl!
A feladat megoldsa a DB1 alknyvtrban tallhat. A megoldsba a szoksos adatbzismveleteken tlmenen 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 = "Gyjtemny"
' 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
cmdMvelet(3).Enabled = False
End Sub

Ha brmelyik szvegmez tartalma megvltozik, engedlyezzk a Frissts parancsgomb hasznlatt:


Private Sub txtAdatmez_Change(Index As Integer)
cmdMvelet(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 cmdMvelet_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
cmdMvelet(3).Enabled = True .MoveLast
'
ugrs az utols rekordra Case 2:
.Edit
' az aktulis rekord mdostsa
txtAdatmez(1).SetFocus '
engedlyezzk a Frissts gombot
cmdMvelet(3).Enabled = True Case 3:
.UpdateRecord
' a mdostott rekord felrsa az
' adattblba
' tiltjuk a Frissts gombot
cmdMvelet(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 kveten az eszkzpaletta (ToolBox) j, DataReport panellel bvl, amely tartalmazza a beszmol rlapjn elhelyezhet vezrlelemeket. A
RptLabel, RptTextBox, Rptlmage, RptLine s a RptShape
vezrlelemek rendeltetse megegyezik a hasonl nev szabvnyos
vezrlelemekvel. jdonsgnak - a General panelen tallhat
objektumokhoz kpest - a RptFunction vezrlelem 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
jelentstervezt (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:
Meznv
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 jelentstervezben a Report Header svon helyezznk el kt RptLabel
vezrlelemet! Az egyiknek a Caption tulajdonsgt lltsuk be az letkor szerinti
lekrdezs eredmnye" szvegre, a msiknak a Name tulajdonsgt pedig iblRHeader-re, majd formzzuk a vezrlelemeket az Alignment, a ForeColor, a Font
stb. tulajdonsgok segtsgvel!

A PageHeader svban hasonl mdon helyezznk el 3 darab RptLabel vezrlelemet


a tblzat oszlopainak a feliratozsra, a Details svban pedig 4 darab RptTextBox
vezrlelemet a lekrdezett adatok megjelentsre! A RptTextBox vezrlelemek
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 vezrlelemmel (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 vezrlelemet!
Az RptFunction vezrlelem FunctionType tulajdonsga megadja azt a fggvnyt,
amelyet a vezrlelem 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 vezrlelem FunctionType tulajdonsgt 4re, a DataField tulajdonsg rtkt pedig *-ra.
Ezek utn helyezzk el az alkalmazsunk rlapjn a jobb oldali brn lthat vezrlelemeket, lltsuk be a lekrdezsi
tartomny hatrait megad szvegmezk Name tulajdonsgt txtForm s txtTo-ra! Ezt kveten a Beszmol megjelents" felirat gombra kattintva adjuk meg az esemnykezelben 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 & " vesektl " & 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) lehetv 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 -gyjtemnyek az adatbziselemek jellemzit ler tulajdonsgokkal s a tulajdonsgok kezelsre hasznlhat metdusokkal rendelkeznek. A
Microsoft Jet adatbzismotor munkaterben elhelyezked objektumok s gyjtemnyek 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:

Gyjtemny
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 mezi 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


adatvezrlk nlkl

Az adatokat ktflekppen olvassuk fel, bemutatva a mezhivatkozsok 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)
1

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

A jobb oldali parancsgomb mkdse sokban hasonlt a bal oldali gomb mkdsre:
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 fablaka 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) ' Ellenrizzk,
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 bvtse 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 mezt hasznljuk a rekordok azonostsra, illetve bizonyos relcik megvalstsra. Ennek a meznek 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 kveten 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 mezjnek 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 termelk 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 cmdTermelTrlse_Click()
On Error Resume Next
Data2.Recordset.Delete
Data2.Recordset.MoveNext
1

Az utols rekord trlse If


Data2.Recordset.EOF Then
Data2.Recordset.MoveLast End
If End Sub

Az rlap betltsekor gondoskodunk az adatvezrlk 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 (webbngszt) 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 lehetv teszi a webszerver s a bngsz kztt cserlt adatok s a
felhasznli folyamatok (session) kezelst. Az IIS-alkalmzasoknak a webszerver
adja t a bngsztl 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 bngsznek.
A webbngsz ltal megjelentett weboldalak (HTML-dokumentumok) nem csak
statikus informcit trolnak, hanem n. parancsnyelven (script) programrszleteket
is tartalmazhatnak, amelyeket a bngszprogram futtatni kpes. A Microsoft Internet
Explorer bngszprogram ltal ismert" parancsnyelvek kzl az egyik a Visual
Basic rszhalmaza, a VBScript. A VBScript lehetv teszi, hogy bizonyos HTMLelemek s weboldalba beptett ActiveX-vezrlk 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 lehetsgeinek kiaknzsra, mint a WebBrowser vezrlelem, 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 mkdtetst a bngsz vgzi, illetve webszerver oldalon telepthet elemeket. A tovbbi lehetsgek
kzl megemlthetjk mg a mr ismert ActiveX-kdkomponenseket s ActiveX-

Dokumentumokat, illetve az Internet Transfer s a WinSock vezrlelemeket 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 bngszprogram mkdteti azt. Az OLE-automatizmus nagyon hasonlt az ActiveX-dokumentutnok bngszben val megjelenshez. Pldul, ha egy HTML-dokumentumbl egy Word-dokumentumra hivatkozunk, akkor a bngszben a regisztrlt
WORD.EXE OLE-kiszolgl jelenti meg az informcit. Az ActiveX-Dokumentum projekt esetn a Visual Basic a Windows alkalmazsokhoz hasonl
dokumentumot kszt vezrlkkel s menkkel, illetve egy EXE- vagy DLL-komponenst is ltrehoz, amely regisztrls utn alkalmas a dokumentum bngszben
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
vezrlelemre 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 vezrlelemmel
egy ActiveX-elemet kapcsolunk az alkalmazsunkhoz, amelyen keresztl kihasznlhatjuk az Internet Explorer 4-nl nem rgebbi verzik lehetsgeit.
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
vezrlelemet, amelyet elzleg felvettnk az eszkzpalettra! Helyezznk el az rlapon egy ComboBox s egy CommandButton vezrlelemet! A ComboBox
vezrlelem Text tulajdonsgnak rtkt lltsuk be valamilyen URL-re (Universal
Resource Locator, pldul http://www.computerbooks.hu/).

A Button vezrlelem Caption tulajdonsgt lltsuk Ugrs-ra! Kattintsunk dupln az


Ugrs nyomgombon, s az esemnykezelbe 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
megfelelen elrjk s letltsk a paramterknt megadott URL ltal kijellt erforrst. Ha olyan forrs elrsre van szksgnk, amelynek lelhelyt 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

GoBack
GoForward

GoHome

GoSearch

Navigate
Navigate2
QueryStatusWB
Refresh
Refresh2
Stop

Lers
Egy Microsoft Automation objektum ltal rtelmezhet utasts vgrehajtsa (az utasts elrhetsgnek lekrdezsre a QueryStatusWB metdus hasznlhat).
A megltogatott weboldalak listjban az aktulishoz kpest eggyel elbb
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 erforrs elrse.
A megadott erforrs 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 mkdsnek meglltsa.

A kvetkez brn a bngsznk kt bvtett vltozata lthat, melyek forrskdjt a


knyv CD-mellkletn tallja meg az Olvas.

8.1. bra A webbngsz bvtett


vltozatai

8.2. DHTML alkalmazsok ksztse


A legegyszerbb 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 mezkn 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 bngszben val megjelentst kveten - 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 bngszt futtat gpen is elvgezhetnk.
Mivel a DHTML-alkalmazsok a Microsoft cg bngszjben (Internet Explorer 4.x
s jabb) implementlt dokumentum-objektummodelljt hasznljk, illetve tartalmaznak a rendszerbe bepl ActiveX-objektumokat is, ms bngszkben nem jelenthetk 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 mkdshez szksges alapkdokat tartalmaz modDHTML modult s DHTMLPage weboldal-szerkesztt, 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 afejleszi 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 vezrlelemek 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 esemnykezeljt 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 Internetrl 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 bngsznek kln letltenie a Microsoft webszerverrl vagy ms helyrl. 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 helyrl 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 bngsztl, amelynek teljestshez szksg
van az IIS alkalmazs futtatsra, tovbbtja az alkalmazsnak a bngsztl kapott
adatokat, s a kd lefutsa utn visszakldi az alkalmazs ltal sszelltott vlaszt.
Egy egyszer IIS-alkalmazs egy HTML-oldalt kld vissza a bngsznek vlaszul az
gyfl krsre. Bonyolultabb esetben az alkalmazs:
a kapott adatok alapjn egy adatbzishoz intzett lekrdezst hajt vgre, s a
vlaszt annak eredmnybl lltja ssze,
a vlaszt gy lltja ssze, hogy ksz HTML-dokumentumok (sablonok) bizo
nyos rszeit helyettesti dinamikusan sszelltott tartalommal,
a vlaszkdba a weboldalon megjelen vezrlobjektumokat pt be, az ese
mnyket feldolgoz kliensoldali parancskddal egytt.
Az IIS-alkalmazs egy olyan ActiveX-DLL, amelybl 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 mkdhetnek. A DHTML-alkalmazsokkal szemben - mivel itt minden mveletet 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. keresztbngszs megoldsokat
alkalmazzunk).
Egy j IIS-alkalmazs ksztst a File I New Project I IIS Application vlasztssal
kezdhetjk el. A ltrejv alkalmazskeret tartalmaz egy WebClass szerkesztt (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 bngsztl kapott els krs feldolgozsa utn ne msoldjon ki automatikusan a szerver memrijbl (ami az alaprtelmezs). Ebben az
esetben az objektum megsznst vagy az ASP folyamat vge (Session timeout), vagy
a WebClass Releaselnstance metdusnak hvsa idzi el.

Mieltt 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 kveten 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 bngsztl kapott krseket feldolgoz esemnykezelk
ltalban a kvetkez mveleteket vgzik:
a HTML-sablon tartalmnak kldse a bngsznek (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 bngsznek,
a HTML-sablonokban lv sablonelemek helyettestse adatokkal,
a bngsztl kapott felhasznli adatok feldolgozsa.

8.9. bra Az IIS-alkalmazs a fejleszti


krnyezetben

Futtassuk a ksz alkalmazsunkat, s teszteljk mkdst klnbz bngszkben,


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 mkd HTML-lapot, amely egy szvegmezben bekrt felhasznli adatot gombnyomsra egy msik szvegmezbe
helyezi, illetve megjelenti a mai dtumot s az aktulis idt!
A VBSCRIPT knyvtrban tallhat HTML-dokumentumban (VBSPELDA.HTM)
alaktsunk ki egy rlapot (<form></form>) s helyezznk el benne kt szveges s
egy nyomgomb vezrlt!
<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 szvegmezbe kirjuk az "res" zenetet. Ezt kveten helyezzk el a
rvid dvzlst, a mai dtumot s
aktulis idt kir VBSCRIPT parancskdot a HTML-dokumentumban!
8.10. bra VBScript alap
HTML oldal megjelentse

8.6. Winsock - TCP/IP-illesztkapu


A Winsock

vezrlelem segtsgvel programunkban definilhatjuk az IP felett

elhelyezked, a TCP s a UDP protokollok szerint foly kommunikci alapvet


programabsztrakcijt, az n. kliensoldali, illetve szerveroldali illesztkaput (socket).
(A protokoll belltsa a Protocol tulajdonsg segtsgvel trtnik.)
Programozi szempontbl az illesztkapu 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 illesztkapujt, mint egy kzvetlen bejratot a kapcsolat msik vgn
tallhat programhoz: rajta keresztl bekopoghat" a msikhoz, rhat az illesztkapura, 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 illesztkapuja 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 illesztkapuk 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 rejtzhet.)
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 ellenrizhetsge 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 vezrlelem hasznlata esetben az Connect s Close metdus hvsval
megnyithatjuk, illetve bezrhatjuk az illesztkaput. 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
kezeljben 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
Lpsrl lpsre
Panem, 1999
Demeter Ibolya
Visual Basic 6.0
Lpsrl 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