Professional Documents
Culture Documents
VBSkonyv1 PDF
VBSkonyv1 PDF
Programozzunk
Visual Basic
rendszerben!
LEKTOR
TTH BERTALAN
COMPUTERBOOKS
BUDAPEST, 2006
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
TARTALOMJEGYZK
TARTALOMJEGYZK
TARTALOMJEGYZK
TARTALOMJEGYZK
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
ELSZ
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
>=
<>
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 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"
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
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
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"
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
2. FEJEZET
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.
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
2- FEJEZET
2. FEJEZET
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
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
End Sub
I-K,
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. 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:
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 = " "
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
2. FEJEZET
Enum Vlaszok
nem
igen
taln
End Enum
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).
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
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.
2. FEJEZET
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
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 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 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
Ertek
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
17
36
8192
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 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
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])
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. 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)
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 )
Amikor befejeztk a tmbbel val munkt, az Erase utastssal felszabadthatjuk a lefoglalt memria-terletet.
Erase dt
- 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. 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:
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:
2. FEJEZET
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:
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
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)
CByte (kifejezs)
Cint(kifejezs)
CLng(kifejezs)
CSng(kifejezs)
CDbl(kifejezs)
CCur(kifejezs)
CDec(kifejezs)
Asc(sztring)
AscB(sztring)
AscW(sztring)
2. FEJEZET
A fggvnyek az argumentumukban szerepl egsz vagy vals szmot karaktersorozatt alaktjk. Vals szm esetben csak a tizedes pontot fogadjk
el.
CStr(kifejezs)
Chr(kd)
ChrB(kd)
ChrW(kd)
Hex(kifejezs)
Oct(kifejezs)
Kln kell szlnunk a Format() fggvnyrl, melynek segtsgvel szmokat s dtumokat formtum alapjn alakthatunk karaktersorozatt. A fggvny hasznlatnak
formja:
Format{kifejezs[, formtuml, htelsnap[, velsht]]])
DateValue(kifejezs)
DateSerial(v, h, nap)
Year(dtum)
A v lekrdezse a dtumbl.
Month(dtum)
Day(dtum)
WeekDay(dtum[, els])
TimeValue(kifejezs)
Hour(id)
Az ra lekrdezse az idbl.
Minute(id)
Second(id)
Fix(vals szm)
Int(vals szm)
Egyb konverzik
CBool(kifejezs)
CVar(kifejezs)
2. FEJEZET
opertor opera.ndu.s2
Ktoperandus
2. FEJEZET
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 Xor B
A logikai kizr VAGY mvelet akkor ad igaz eredmnyt, ha a kt operandus kzl pontosan az egyik rtke igaz.
A Eqv B
A Imp B
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 Imp (bitenknti implikci) mvelet eredmnynek bitjei az 1-0 prosts kivtelvel 1 rtkek lesznek.
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
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
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:
2. FEJEZET
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.
2. FEJEZET
Az Is opertort a TypeOf kulcsszval egytt alkalmazva, a hivatkozott objektum tpust (osztlyt) ellenrizhetjk:
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:
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:
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. FEJEZET
Az albbi pldban gombnyoms hatsra tmretezzk a TextJ szvegmezt, s belltjuk nhny tulajdonsgt:
DoEvents()
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 rtke igaz (True), akkor a Then utni akkor_utastsok, ha pedig hamis
(False), akkor az Else utni klnben_utastsok hajtdnak vgre.
Nzznk egy pldt az If...Then...EIse utasts hasznlatra! Az albbi programrszlet elllt kt (ts) lottszmot s megjelenti a kisebbet:
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:
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
Nzznk nhny pldt az elmondottak bemutatsra! Az albbi programrszben a vletlen osztlyzatot magyarul jelentjk meg.
Az Choose() fggvny
Egyszerbb esetekben, amikor valamilyen rtket kell egy index fggvnyben kivlasztani, hatkonyabb megoldshoz jutunk a Choose() fggvny alkalmazsval:
2. FEJEZET
(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
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 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:
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.
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.
2. FEJEZET
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 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. FEJEZET
A Do...Loop elnevezs valjban ngy klnbz ciklust jell. Mint emltettk ltezik ell-, illetve htultesztel vltozata:
While felttel
Az albbi pldkban szintn 1-tl 20-ig sszegezzk az egsz szmokat, azonban most
htultesztekls ciklusok segtsgvel:
2. FEJEZET
Err.HelpContext
2. FEJEZET
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
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
2.18. bra Az
alprogramhvs menete
2. FEJEZET
A kvetkezkben megismerkednk az n. felhasznl ltal definilt eljrsok s fggvnyek ksztsvel s hasznlatval. Kln rszben tisztzzuk a paramterek tadsval kapcsolatos krdseket.
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:
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. 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
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.
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):
2. FEJEZET
2.
3.
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:
2. FEJEZET
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 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:
2. FEJEZET
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 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
Tmbk
Tbbdimenzis tmbk kezelse is hasonl egyszersggel vgezhet. Az albbi eljrs a megadott ngyzetes mtrixok elemit nullzza, kivve a ftlt, ahova egyeket
tesz:
2. FEJEZET
Amennyiben csak a szveget adjuk meg, akkor alapbellts szerint a teljes sztringet
szkzknl sztvgja, s kzben a Option Compare bellts alapjn hasonltja a karaktereket.
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
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:
2. FEJEZET
(A deklarci a formmodulban csak Private elrssel, mg a Basic modulban tetszleges elrssel megadhat.) A fggvnyt tbbflekppen is hvhatjuk:
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
2. FEJEZET
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. FEJEZET
2. FEJEZET
AVISUALBASIC NYELV
2. FEJEZET
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.)
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
AVISUALBASIC NYELV
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
AVISUALBASIC NYELV
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
AVISUALBASIC NYELV
2.22. bra A
plda osztlya
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
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 *"
2. FEJEZET
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.
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.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.
3.6. bra A
projekttallz
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.
3.8. bra A
form betmretei
Jelents
az objektum ltrehozsa,
a formobjektum betltse,
az objektumhoz tartoz ablak mreteinek belltsa,
az ablak aktvv vlsa,
a rendszer jrafesti az ablak tartalmt.
Jelents
jelzi, hogy az ablakot szeretnk lezrni, az ablak
objektumt szeretnk trlni a memribl, az
objektum megsemmistse.
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
3.10. bra
Alapvezrlk az eszkztron
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
TextBox
Frame
CommandButton
CheckBox
OptionButton
ListBox
Kombinltlista
ComboBox
Vzszintes
grgetsv
HScrollBar
Fggleges
grgetsv
VScrollBar
Idzt
Timer
Meghajtlista
DriveListBox
Knyvtrlista
DirListBox
llomnylista
FileListBox
Kpmez
Cmke
Szvegmez
Keret
Parancsgomb
Jellngyzet
Vlasztgomb
Lista
Vezrl
Osztly
Lers
Alakzat
Shape
Vonal
Line
Kp
Image
Adat OLE-
Data
kontner
OLE
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:
Osztly
Flsv
TabStrip
Eszkzsv
ToolBar
llapotsor
StatusBar
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
Kplista
ImageList
Csszka
Slider
Kpkombinlt
lista
ImageCombo
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
Osztly
Lers
ltalnos
prbeszdablak
CommonDialog
Osztly
Lers
Adatkapcsolt
tblzat
DBGrid
Osztly
Lers
Adatkapcsolt lista
DBList
Vezrl
Osztly
Lers
Adatkapcsolt
kombinlt lista
DBCombo
Osztly
Lers
Multimdia
MMControl
Osztly
Lers
Diagram
MSChart
Osztly
Lers
Kommunikci
MSComm
Osztly
Lers
Rugalmas tblzat
MSFlexGrid
Osztly
Lers
Internet
adattviv
Inet
Osztly
Lers
MAPI-kapcsolat
MAPISession
MAPI-iizenetek
MAPIMessages
Osztly
Lers
Adatbeviteli
sablon
MaskEdBox
Osztly
Lers
Tvoli adat
MSRDC
Osztly
Lers
Winsock
Winsock
Tvoli gpek kztti adatcsert tesz lehetv az UDP, illetve a TCP protokollok
felhasznlsval.
Osztly
Lers
Bvtett
szvegmez
RichTextBox
Osztly
Lers
Rendszeri nfo
Syslnfo
A vezrl lehetv teszi, hogy programunkat felksztsk bizonyos rendszerszint esemnyek kezelsre.
Vezrl
Osztly
Lers
Fles
prbeszdablak
SSTab
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:
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.
Minden vezrl rendelkezik egy string tpus Tag tulajdonsggal, amely adattrolknt hasznlhat, pldul objektum azonostsra is szolglhat.
Vezrlt tartalmaz s szl azonostsa
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
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
fggvny esetn:
vltoz = objektum.Metdus(argumentumok 1istja)
Lers
Elkezdi, befejezi vagy megszaktja a vezrl drag and
drop (vidd s dobd) mdszerrel trtn thelyezst.
Move
Refresh
SetFocus
ZOrder
[pozci]
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
' trls
'a szmll belltsa
' nem lehet trlni
'
vletlenszeren vltozik a
Sz v e g ( i ) .ZOr d e r Cl nt (Rnd)
Next i
Forrni.Refresh
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.
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
3.16. bra
A keret
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.
3.17. bra
Klnbz Label belltsok
3.18. bra A
szvegmez
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
3.20. bra A
parancsgomb
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 "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 "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
kt llapottal rendelkeznek:
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)
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
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.
3.24. bra
Listaablak
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]
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
Az "ssz.es" parancsgomb megnyomsakor a "Ttelek 7" lista teljes tartalmt tmsoljuk a "Ttelek 2" listba.
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.26. bra
Kombinlt lista
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.
3.28. bra A
mentervez
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.
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
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.
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.
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
" & _
" & _
" & _
"####-##-##"
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 "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
rtk
0
100
vbAlignNone
ProgressBarl
A CellAlignment tulajdonsggal a celln belli igazts mdjt definilhatjuk a program futsa sorn:
3.38. bra
Lottszelvny gombtmbbel
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 gombok kiindulsi llapotba val lltsa sorn For Each ciklussal jrjuk be a kollekci elemeit:
'kivlasztott volt
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.3. bra
A fablak
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.5. bra A
bejelentkez ablak
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.
lblCompanyProduct
lblCopyright
lblProductName
lblCompany
lblPlatForm
lblWarning
4.8. bra
A logkp
4.9. bra
Napi tippek
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
sgfjl,
sgtma
A prbeszdablak OK gombjnak lenyomsakor, illetve az <Enter> billenty letsekor a fggvny a szvegmez tartalmt adja vissza eredmnyl. A Cancel nyomgomb megnyomsakor a fggvny visszatrsi rtke res sztring ("").
A Windows rendszer zenet-megjelent prbeszdablaka az MsgBox fggvny hvsval rhet el a Visual Basic alkalmazsokbl:
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
vbDefaultButton2
256
a msodik gomb,
vbDefaultButton3
512
a harmadik gomb,
vbDefaultButton4
768
a negyedik gomb.
Konstans
vbApplicationModal
vbSystemModal
rtk
Modalits
4096
Rendszermodalits. Amg a felhasznl a prbeszdablakban nem nyom le egy gombot, addig minden alkalmazs futsa felfggesztdik.
rtk
Lenyomott gomb
vbOK
OK
vbCancel
Cancel
vbAbort
Abort
vbRetry
Retry
vbIgnore
Ignore
vbYes
Yes
vbNo
No
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.
Megjelentett prbeszdablak
Megnyits
Ments msknt
Szn
Bettpus
Nyomtats
A Windows sgrendszert aktivizlja
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.
4.16. bra
Menbellts
4.17. bra
Eszkztr kialakts
4.18. bra
Erforrsok
4.20. bra
Szabvnyos formok beillesztse
4.22. bra A
"varzslat" befejezse
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
vbTileHorizontal
vbTileVertical
23
vbArrangelcons
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.
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:
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.
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 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
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
A rajzlap modulban globlisan deklarljuk a pldnyhoz kttt rajzolst vezrl logikai vltozkat.
Public vonalb, tglalapb, ellipszisb, ellipsziscb, _
ellipszisszb, kerteglab, poligonb As Boolean
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.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).
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
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:
Forml.Refresh
End Sub
A Scale ScaleX s ScaleY metdusok hasznlata A koordintarendszer kijellsre a Scale metdust is hasznlhatjuk: [objektum]
.Scale
[(x1,
y1)
(x2,
y2)]
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
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
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
vbNotMergePen
A rajzeszkz sznt s a httr sznt vagy mvelettel sszevetve, majd az eredmnyt neglva
keletkezik a kppont szne. not(7orH)
vbMaskNotPen
vbNotCopyPen
vbMaskPenNot
vblnvert
not 7
not//
vbXorPen
vbNotMaskPen
vbMaskPen
vbNotXorPen
10
vbNop
11
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
vbWhiteness.
16
TorH
A rajzolt pontok szne, akrmi is van a httren,
fehr.
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.
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.
5.3. bra A
sznek hasznlata
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
rtk
0]
2
3
4
Lers
res kp bitkp (.BMP)
metafile (.WMF) ikon
(.ICO) bvtett metafjl
(.EMF)
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
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
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.
egyenes vonalak,
vonalas s kifestett alakzatok,
bitkpek,
szvegek megjelentse.
rtk
0
1
2
3
4
5
Lers
tglalap (alapbellts),
ngyzet,
ellipszis,
kr,
lekerektett tglalap,
lekerektett ngyzet.
dy As Integer
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.
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 (*)
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:
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
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]]]]]]]
Konstans
Logikai mvelet
Magyarzat
vbDstInvert
not (C)
Invertlja a cl bitkpet.
vbMergeCopy
E and F
vbMergePaint
(not F) or C
vbNotSrcCopy
not(F)
vbNotSrcErase
not(F or C)
vbPatCopy
vbPatlnvert
E xor C
vbPatPaint
E or (not F) or C
vbSrcAnd
F and C
vbSrcCopy
A forrs msoldik.
vbSrcErase
F and(not C)
vbSrcInvert
F xor C
vbSrcPaint
ForC
vbPatCopy
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.)
rtk
-1
-2
-3
-4
Jelents
vzlatkszt felbonts,
kis felbonts,
kzepes felbonts,
nagy felbonts.
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.
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.
Ha befejeztk a nyomtatst, akkor az EndDoc metdus hvsa elkldi ezt az informcit a nyomtat fel:
objektum.EndDoc
A Grdt eljrst a program klnbz pontjairl hvjuk. A program ablakba az ablak jrafestsekor rajzolunk (ha az ablak tartalmt nem trltk):
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
'Trls
'A szmll belltsa
'Nem lehet trlni
5.8. bra
Grafikonrajzols
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
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:
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
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 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.1 Lbra
A kp forog, a szveg mozog
Objektumnv
Felhasznls
CommandButton
Image ImageList
ImageList Label
Timer
cmdStart
imgForgKp
imilkon imlKp
lblSzveg
tmrIdzt
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 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
5.13. bra A
PictureClip tulajdonsglapja
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
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
Konstans
rtk
Lers
vb CFLink
vbCFText
vbCFRTF
vbCFBitmap
vbCFMetafile
vbCFDIB
vbCFPalette
&HBF00 I
&HBF01
2389
(formtum)
6.1. bra Kp s
szveg a vglapon
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
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
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)
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
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
Tevkenysg
0
1
2
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 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.)
ActiveX Exe
X
X
X
X
X
X
ActiveX DLL
X
X
ActiveX Contol
X
X
Standard EXE
X
X
X
A msik lehetsg, amikor a futs kzben teremtjk meg a kapcsolatot, ez a ksi kts (late binding):
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
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:
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.)
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
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
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
hasznljuk.
6.76. bra A
projekthivatkozsok ablaka
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()
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 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
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:
Ha becsukjuk a Gomb rlapjt tartalmaz ablakokat, akkor az eszkztron kivlaszthatv vlik a vezrl:
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.
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:
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 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 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
Az "OK" parancsgomb megnyomsa utn a belltott pldnyszmokat a knyvcmmel egytt a MEGR.DAT llomnyba mentjk, majd visszatrnk a hv URL-hez.
_ Tab;
<script language="VBScript">
< ! -sub gomb_click()
Navigate "UserDoc.vbd"
end sub - >
</scriptxbr>
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.
(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
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
Az llomnyban a rekordok (1-tl indul) sorszmmal rendelkeznek, melyeket az aktulis rekordpozci kijellsre (Seek) hasznlhatunk. A fjlba a
Put [#] fjlszm, [rekordszm], kifejezs
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
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 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
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
Drive (meghajt)
Folder (mappa)
File (llomny)
TextStream
vagy
Dim fso As New
FileSystemObject
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 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.
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.
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.6. bra
Adatkapcsolatok tulajdonsgai
7.7. bra
Adatkapcsolatok tesztelse
7.10. bra Az
MSHFlexGrid vezrl beptse
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.14. bra Az
ADOdc hasznlata
7.15. bra A
megjelent vezrlk tulajdonsgai
7.76. bra A
Data project ablaka
7.17. bra A
Recordset objektum hasznlata
"\..\ADATOK".
7.7S. bra A
PROGRAM.MDB Gyjtemny tblja
7.79. bra A
Data vezrl gombsora
MovePrevious
MoveNext
MoveLast
rtk
0
12
Tpus
adattbla tpus, dinamikus tpus
(alaprtelmezs), pillanatfelvtel
tpus.
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
7.21. bra
Kapcsolt vezrlk
7.23. bra Az
adatbzis megadsa
7.24. bra Az
adatbzis rlap tpusa
7.25. bra
Mezvlaszts
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
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
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.29. bra A
DataReport fellete
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
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
gombon kattintva,
gomb segts-
7.31. bra Az
exportlt jelents
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.
A jobb oldali parancsgomb mkdse sokban hasonlt a bal oldali gomb mkdsre:
Private Sub cmdJobb_Click()
1
7.33. bra
Adatbziskezels DAO-val
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
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.
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 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
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-
Combol.Text
Indtsuk el az
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.
HTML-elemek tulajdonsgai
8.4. bra Az
Add-lnn Manager
b
r
a
A
DHTML alkalmazsra pl
weboldal megjelense
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
Szolgltats
FTP
Telnet
SMTP (Interneten keresztl foly levelezs protokollja)
Finger
HTTP
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