Az előző cikkben, nagyvonalakban áttekintettük a Visual Basic felhasználói felületének felépítését. Folytatásként most nézzük meg (példákon keresztül) hogyan is történik egy VB-s alkalmazás elkészítése és egy alkalmazás elkészítésének mik a legfontosabb menetei. Az egyes példákon keresztül remélem sikerül bemutatnom a VB programozás legalapvetőbb sajátosságait és mindazokat a jellegzetességeket, amik szinte játékká teszik az egyszerűbb alkalmazások elkészítését.

Projekt létrehozása

Egy alkalmazás elkészítésének első lépése mindig a megfelelő projekt létrehozása. Ezt a File menü New Projekt parancsával érhetjük el. A parancsot aktiválva egy párbeszédablak jelenik meg, ahol kiválaszthatjuk a nekünk megfelelő projekt típust. Esetünkben ez most legyen a Standard EXE.


1. kép - Új projekt nyitás

Azonban ha már ennél e párbeszédablaknál tartunk vegyük talán egy kicsit jobban szemügyre. A létrehozható projektek típusából láthatja az olvasó, hogy a VB igen sokrétű alkalmazásfejlesztést tesz lehetővé. Azonban mint kezdő VB programozóknak itt most leginkább csak egy dologra hívnám fel az olvasó figyelmét: VB Application Wizard. Magyarra lefordítva VB alkalmazásvarázsló. Ennek segítségével még a legkezdőbb programozók is könnyedén elkészíthetik első alkalmazásaik keret rendszerét anélkül, hogy egyetlen sort is gépelnének. A wizard használata nem kimondottan bonyolult ezért annak leírását nem részletezném. Próbálgassa mindenki kedve szerint.

Visszatérve első példaalkalmazásunkhoz, nyissunk egy új Standard EXE projektet. (File\New Project). A Visual Basic automatikusan létrehoz egy új projektet és megjelenít egy űrlapot. Nézzük meg mit láthatunk a Project Explorer ablakban. Láthatjuk, hogy alkalmazásunk Project1 néven jött létre és egyetlen űrlapot tartalmaz Form1 néven.


2. kép - Project explorer

Mivel legtöbb esetben alkalmazásainkat úgymond nevesíteni szoktuk, változtassuk meg projektünk nevét mondjuk FirstApp-ra. Hogy mindezt hogyan tehetjük? Mint azt már korábban említettem a VB felhasználói felülete tartalmaz egy Properties (Tulajdonságok) ablakot, ahol az aktuálisan kiválasztott objektum, elem jellemzőit tekinthetjük meg. Válasszuk ki a Projekt Explorer ablakban az alkalmazásunk nevét (Project1). Láthatjuk, hogy a Properties ablak tartalma megváltozott (ha az ablak nem látható, akkor az F4 billentyűvel vagy a View menü megfelelő parancsával előhívható). Ha minden igaz, akkor láthatóvá vált a projektünk Name tulajdonsága. Elég ha ennek értékét megváltoztatjuk FirstApp-ra. A módosítás után láthatjuk, hogy a Project Explorer ablakban projektünk az új néven került megjelenítésre.

A programozás alapjai

Projekt felépítése

Mielőtt ténylegesen hozzáfognánk első programunk elkészítéséhez, tekintsük át VB programozás legalapvetőbb sajátosságait. Először is hogyan épül fel egy VB projekt?

A Visual Basic moduláris nyelv tehát az elkészített programok különböző modulokból épülnek fel. Három, funkciójukat tekintve egymástól eltérő modultípust különböztetünk meg:

Űrlapmodul

Amikor projektünkben egy űrlapot (párbeszédablakot) definiálunk, ahhoz automatikusan létrejön egy űrlapmodul. Ebben tárolódnak az űrlapra lokális változók, konstansok és eljárások definíciói, deklarációi, valamint az űrlapon elhelyezett vezérlőelemek tulajdonságai, eseménykezelő eljárásaiknak definíciói és deklarációi.

Osztálymodul

Segítségével saját osztályokat definiálhatunk, szerkeszthetjük azok tulajdonságait, eseményeit és metódusait. Egy osztálymodulban csak egy osztály definiálható, egy projektben akár több osztálymodult is elhelyezhetünk.

Standardmodul

Másnéven kódmodulnak is mondhatnánk. Itt tárolhatjuk az alkalmazásra nézve globális változókat, konstansokat és eljárásokat. Egy projekten belül több kódmodult is elhelyezhetünk.

Az egyes programmodulok külön állományokban tárolódnak. Az alábbi táblázat tartalmazza a legfontosabb VB állományok kiterjesztésének és típusának összerendelését:

.VBP VB projektfájl

.FRM Űrlap forrásfájl

.FRX Űrlap grafikus forrásfájl

.BAS Kódmodul forrásfájl

.CLS Osztálymodul forrásfájl

.RES Szöveges és grafikus erőforrásokat tároló fájl

Ezeken kívül még létezik jó néhány állománytípus, de ezekkel egyelőre nem foglalkozunk.

Változók

Mint minden szokványos programozási nyelvben, a VB-ben is változókat használnak az adatok tárolására. Azonban itt is vannak bizonyos szabályok, amelyeket a változónevek képzésénél illik betartani.

  • az angol abc valamely betűjével kell, hogy kezdődjön
  • nem lehet hosszabb 255 karakternél
  • objektumok esetén a hossz nem haladhatja meg a 40 karaktert
  • nem tartalmazhat típusdeklarációs karaktereket és pontot (.)
  • nem lehet azonos egyetlen fenntartott VB kulcsszóval (fenntartott kulcsszavak: objektumok, tulajdonságok, eljárások, függvények, utasítások)
Visual Basic-ben a változók hatóköre három szintre osztható:
  • globális változó (Public)
  • modulszintű változó (Private)
  • eljárásszintű változó
A globális változók a program tetszőleges helyén elérhetők, értékük bárhol rendelkezésünkre áll. Globális változót bármely modul deklarációs részében létrehozhatunk. Standard modulokban (kódmodul) létrehozott változók alapértelmezésként globálisak.

Modulszintű változókat a megfelelő modul deklarációs részében deklarálva hozhatunk létre. Az ilyen változók a modul teljes területén elérhetők lesznek minden eljárás számára. Értéküket mindaddig megtartják, amíg a vezérlés az adott modulon van. Ezek a változók más modulokból nem érhetők el.

A lokális vagy eljárásszintű változók csak abban az eljárásban értelmezettek, amely deklarációs részében definiálva lettek. Azokon kívül nem elérhetők.

A VB megengedi, hogy több változó azonos néven legyen létrehozva. Abban az esetben, ha azok érvényességi köre nem ütközik nem zavarják egymást. Ha azonban több azonos nevű változó érvényességi köre valamilyen mértékben fedi egymást, akkor mindig az adott pontban szűkebb érvényességi körű változó fog érvényesülni.

Változók deklarálása

Egy változó deklarálása két módon történhet:

  • valamely változódefiniáló utasítás segítségével (explicit módszer)
  • változó típusának meghatározása nélkül (implicit módszer)
Váltózók definiálásának kulcsszavai lehetnek
 
 
Public A deklarált változó globális lesz (a program minden modulja minden eljárásában elérhető).
A Public kulcsszó bármelyik modulban használható.
Dim Általánosan alkalmazható változó deklarációs utasítás. A definiált változó lokális lesz arra a programegységre nézve, ahol deklarálva lett (modul, eljárás), vagyis más programegységből nem érhető el. Eljárásszintű változók esetén a deklarációt célszerű az eljárás elején elvégezni, de ez nem kötelező. A változók deklarálását az eljáráson belül bárhol máshol megtehetjük (természetesen a felhasználásuk előtt).
Private Használatával lokális változókat hozhatunk létre, azaz a változó csak abban a modulban lesz elérhető, ahol a deklarációt megtettük.
Static Csak eljárásokon belüli lokális változók deklarálására alkalmazható. Módosítja a változó életidejét. Ha pl. egy eljárás végrehajtása befejeződik annak lokális változói elveszítik értéküket. Ha azonban egy változót Static változónak deklarálunk, az a program befejezéséig megtartja értékét. Lehetőség van egy eljárás minden változóját statikussá tenni, ehhez elég magát az eljárást Static-ként deklarálni (lásd később).

Változó deklarációk szintaxisai:

Public [WithEwents] változónév [ ( [indextartomány] ) ] [ As [New] típus][,
            [WithEwents] változónév [ ( [indextartomány] ) ] [ As [New] típus]]...

Private [WithEwents] változónév [ ( [indextartomány] ) ] [ As [New] típus] [,
            [WithEwents] változónév [ ( [indextartomány] ) ] [ As [New] típus]]...

Dim [WithEwents] változónév [ ( [indextartomány] ) ] [ As [New] típus] [,
         [WithEwents] változónév [ ( [indextartomány] ) ] [ As [New] típus]]...

Static változónév [ ( [indextartomány] ) ] [ As [New] típus] [,
          változónév [ ( [indextartomány] ) ] [ As [New] típus]]...

  • változónév

  • A definiálandó változó neve (a VB-ben megengedettek szerint)
     
  • WithEvents

  • Opcionális, csak osztálymodulban használható. A kulcsszóval együtt nem deklarálhatunk tömböt és nem használhatjuk a New kulcsszót. Azt jelzi, hogy az adott objektumváltozót egy ActiveX objektum által triggerelt esemény eseménykezelő eljárásában használjuk
     
  • típus

  • A változó típusa. (Byte, Boolean, Integer, Long, Single, Double, Currency, String, Date, Variant, Object, stb). Ha hiányzik, akkor a változó típusa alapértelmezettként Variant lesz. (Az egyes adattípusok ismertetésére nem térek ki részletesen, ezek megismerését az olvasóra bízom, hiszen a VB 5.0 helpje igen bő leírást ad minden lehetséges adattípusról.)
     
  • New

  • Objektum típusú változók esetén a deklarált változó az adott objektum egy újabb példánya lesz.
     
  • Indextartomány

  • Tömbök deklarációja esetén itt adhatjuk meg a tömb méretét, indexeinek határait.
Példák:
  • Globális változók deklarálása

  • Public nCount As Integer Public XArray(1 to 20) As Double Public sName, sDescript As String Public xObj As New Objec
    t
     
  • Általános deklarációk

  • Dim iCount as long
    stb…
A továbbiakban nézzük meg röviden mit kell tudni a VB tömbkezeléséről. Visual Basic-ben a tömböket mindig explicit módon kell deklarálni. Itt nincs külön tömb típus, hiszen egy tömb típusa megegyezik elemeinek típusával, egy elem típusa pedig bármilyen adattípus lehet. Egy tömb deklarációja csak annyiban különbözik egy szoványos változó deklarációtól, hogy a változó neve és az As kulcsszó között egy zárójelben kerül megadásra a tömb mérete, indextartománya.

([[alsó indexhatár To] felső indexhatár, [alsó indexhatár To] felső indexhatár])

pl.:

tomb(1 To 3, 1 To 5) - kétdimenziós tömb deklarálása

A tömb indexei kétbájtos egész számok lehetnek, vagyis értékük -32768 és 32767 közé eshet. Nem tévesztés! Valóban megadhatunk negatív előjelű indexeket is a tömb deklarációjában. Csak egyre kell ügyelni, hogy az indexhatárokra teljesüljön, hogy alsó indexhatár < felső indexhatár.

Természetesen deklarálhatunk többdimenziós tömböket is, de a dimenzió szám maximum 60 lehet.

Tömbök deklarálásánál az alsó indexhatár megadása nem kötelező. A VB automatikusan 0-nak tekinti az alsó határt, de a kezdő indexet mi magunk is definiálhatjuk az Option Base utasítással, az alábbi módon:

Option Base n

Itt n 0 vagy 1 lehet. Ezt az utasítást csak egy programmodul deklarációs részében alkalmazhatjuk.

Ha egy tömb deklarációja során az indexhatárok megadását elhagyjuk és csak üres zárójelet adunk meg, akkor dinamikus tömböt hozhatunk létre. Az így definiált tömböknek igen nagy előnyük, hogy méretük nem kötött azt a program futása során (bizonyos megkötésekkel) szabadon változtathatjuk a ReDim paranccsal.

ReDim változónév (indextartomány) [As típus , változónév [(indextartomány)][ As típus]]

Az indextartomány megadása ebben az esetben szükséges, megadási módja megegyezik a tömb deklaráció során leírtakkal. Figyelni kell azt is, hogy az újradeklarálások során a tömb típusát nem lehet megváltoztatni, csak abban az esetben ha a tömb elemeinek típusa előzetesen Variant volt.

Dinamikus tömbök újradeklarálása során azok tartalma törlődik. Azonban egy kulcsszó megadásával lehetőség van ennek elkerülésére. Ez a kulcsszó a Preserve. Alkalmazása:

ReDim Preserve tömbnév (új_dimenzió)

Dinamikus tömbök az újradeklaráció mellett törölhetők is:

Erase tömbnév [, tömbnév]

Törlés során a tömb(ök) által lefoglalt memóriaterületek felszabadulnak, és a tömb(ök)re kiadott korábbi deklaráció is érvényét veszti.

Most hogy már bizonyos szinten tisztában vagyunk a VB programozásának legalapabb szabályaival, talán neki is rugaszkodhatnánk első programunknak.

Űrlapok és tulajdonságaik

Az űrlapok VB programozás talán legalapvetőbb elemei. A felhasználó ezeken keresztül szabályozhatja, befolyásolhatja a futó alkalmazás működését. Alkalmazásaink legnagyobb részét ilyen dialógusablakokra alapozva készítjük el, hiszen a programok felhasználói felületét (beviteli mezők, listák, stb.) csak rajtuk keresztül vagyunk képesek megjeleníteni.

Láthatjuk, hogy az új projekt megnyitásakor automatikusan egy űrlap is megjelent alkalmazásunkban. Most nézzük meg egy kicsit közelebbről, mit is kezdhetünk egy ilyen űrlappal. A Project Explorer ablakban válasszuk ki a formok listájából a Form1-et, majd nyissuk meg a Properties ablakot. Nézzük meg milyen jellemző tulajdonságokkal rendelkezik egy dialógusablak.

(Itt most csak a legtöbbet használt tulajdonságokat említem meg, a többi leírását megtalálhatják a VB helpjében.)


3. kép  - Űrlap tulajdonságok

Először is talán nézzük azokat a tulajdonságokat, amelyek az adott dialógusablak megjelenését befolyásolják.
 

BackColor/
ForeColor tulajdonság
Ezekkel a tulajdonságokkal változtathatjuk meg dialógusablakunk háttér/előtér színét. Tervezési időben értékeik szabadon változtathatók a Properties ablak segítségével. (Futásidejű értékváltoztatásokról majd egy kicsit később ejtek szót.)
BorderStyle tulajdonság Segítségével megváltoztathatjuk a dialógusablakunk keret stílusát, és hogy hogyan változzon ablakunk mérete. Gondolom az olvasók közül szinte mindenki találkozott már különböző stílusú párbeszédablakokkal Windows-os alkalmazások futtatása során. Egyes ablakok méretezhetők, mások konstans méretekkel jelennek meg. Van, amely ablak rendelkezik fejléccel, míg bizonyos ablakok fejléc nélküliek. Ezzel a tulajdonsággal az ablakok e jellemzőit változtathatjuk. Ez a tulajdonság űrlapok (és TextBox-ok) esetén csak tervezési időben módosítható, futásidőben értékük csak olvasható. (A későbbiekben még találkozunk ilyen típusú tulajdonságokkal, de már itt felhívom az olvasó figyelmét, hogy ha futásidőben csak olvasható tulajdonság értékét próbálja meg futás közben módosítani, az Runtime error hibát generál!)

A tulajdonság 6 konstans érték valamelyikét veheti fel. Ezek a következők lehetnek:
 

VbBSNone (0) Az ablak nem rendelkezik kerettel, csak egy a háttérszínnel megjelenő téglalapot látunk.
VbFixedSingle (1) Ez az ablak típus rendelkezhet az ún. ablakvezérlő gombokkal (minimalizálás, maximalizálás, bezárás), de az ablak méretezéséhez csak a minimalizáló és maximalizáló gombokat használhatjuk.
VbSizable (2) Az ablak rendelkezik a vezérlő gombokkal, és szabadon méretezhető.
VbFixedDialog (3) Az ablakvezérlő gombok közül csak a bezáró gombot tartalmazhatja, így semmilyen módon nem méretezhető.
VbFixedToolWindow (4) Az ablak csak a bezáró gombot tartalmazza, és nem méretezhető. A fejléce a többi ablaktól eltérően kisebb fontmérettel jelenik meg.
VbSizableToolWindow (5) Az ablak csak bezáró gombbal rendelkezik és szabadon méretezhető. Fejléce szintén kicsi fontmérettel jelenik meg.
FillStyle tulajdonság Az űrlapon elhelyezhető Shape kontrolok és más rajzelemek kitöltési mintáját határozhatjuk meg vele. Nyolc lehetséges értéket vehet fel.
FillColor tulajdonság A grafikus metódusok által az űrlapra rajzolt elemek megjelenési színét állíthatjuk be.
Caption tulajdonság Dialógusablakunk fejlécében megjelenő szöveget adhatjuk meg ennek a tulajdonságnak a megadásával.

A következő rövid kódrészlet segítségével a fent említett tulajdonságokat felhasználva egy véletlenszerű színnel és véletlenszerű mintával kitöltött köröket rajzoló programocskát készíthetünk.
 
 

Private Sub Form_MouseDown (Button As Integer,                             Shift As Integer,                             X As Single,                             Y As Single)    Form1.FillColor = QBColor(Int(Rnd * 15)) 'A rajzolás színének                                     'véletlenszerű megválasztása    Form1.FillStyle = Int(Rnd * 8)   'Kitöltési minta véletlenszerű                                     'megválasztása    Form1.Caption = "X: " & Str(X) & ", Y: " & Str(Y) 'Az aktuális                                     'koordináták kiíratása az űrlap                                     'fejlécére    Form1.Circle (X, Y), 250    'A klikkelési pontban kört rajzolunk                                'a megadott színnel és kitöltési                                'mintával End Sub

Eredmény:
 


4. kép  - Amit láthatunk

(A mintaalkalmazás egyszerűen kipróbálható, ha a kódrészletet a Form1-es űrlap kódablakába átmásoljuk.)

Következő részben már egy kicsit komolyabb alkalmazásokat készítünk, melyeken keresztül megismerkedünk a VB egyes vezérlőelemeinek használatával. Addig is egy kis ízelítő. (Lehet próbálkozni…)


5. kép - A következő feladat (FirstApp02)

Kód a FirstApp02 programhoz:
 

Dim x1, y1, x2, y2 As Long Private Sub Combo1_Click()     Picture1.FillStyle = Combo1.ListIndex End Sub Private Sub Command1_Click()     cdcColor.ShowColor     Picture1.ForeColor = cdcColor.Color     Picture1.FillColor = cdcColor.Color End Sub Private Sub Command2_Click()     Picture1.Cls End Sub Private Sub Form_Load()     Combo1.ListIndex = 0 End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)     x1 = X     y1 = Y     Picture1.Circle (X, Y), 20 End Sub Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)     If Button = 1 Then         x2 = X         y2 = Y     End If End Sub Private Sub Rajzol()     Select Case Combo2.ListIndex         Case 0             Picture1.Line (x1, y1)-(x2, y2), , B         Case 3             Dim R, a, b As Double             a = x2 - x1             b = y2 - y1             R = Sqr(a * a + b * b)             Picture1.Circle (x1, y1), R     End Select End Sub Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)     Picture1.Circle (X, Y), 20     Call Rajzol End Sub

Következô cikkünkben folytatjuk a fenti kódrészlet (FirstApp02) részletes magyarázatával.

Forráskód:
 

 
Forráskód
EXE: Kellenek a VB állományok !!
Első példaprogram
Második példaprogram