Hogyan kezdjem? – 1.

 

Sokan kérdezik tőlem, hogy hol is kezdjék el a Delphi-vel való ismerkedést. Bevált módszer nyilván nincs, de mindenki elkezdte egyszer valahogy, aki most a CodeX hasábjain ír a nagyérdeműnek. Az elkövetkezendő pár számban segíteni szeretnék azoknak, akik mostanság játszanak a gondolattal, hogy belekezdjenek egy kicsit a Delphi-be. Nem teljesen az alapoktól fogok indulni, a Pascal nyelv strukturális részét felteszem, hogy mindenki ismeri (adattípusok, vezérlési szerkezetek szintaktikája, stb.). Igyekszem gyakorlati oldalról megközelíteni az ismerkedést, így először megpróbálunk mindenféle háttérismeret nélkül összedobni egy egyszerű Windows-os programot. Amikor ezzel megvagyunk, egy kicsit a dolgok mögé nézünk és megtanuljuk, mi is az az OOP. Végül megnézzük, hogy a Turbo Pascal-ban használható OOP mivé nőtte ki magát a Delphiben.

 

És akkor kezdjük…

 

Ahhoz, hogy alapos ismereteket szerezzünk egy programnyelvről, az első dolog, hogy át kell magunkat rágni legalább két-három könyvön. Most a reklám miatt nem ajánlok konkrét köteteket, ha valakit érdekel, e-mailben szívesen elmondom, hogy én mely könyveket szeretem. Ez a pár cikk nem fog helyettesíteni egy könyvet, de remélem kellő irányvonalat ad az induláshoz.

 

Ha elindítjuk a Delphi-t, három jól elkülöníthető részre oszthatjuk a megjelenő környezetet. A képernyő legfelső részén láthatjuk a főmenüt, az eszköztárat és egy ún. komponens palettát egy ablakban.

 

A főmenüben megtalálhatjuk a legtöbb programban található fájlműveleteket (új, megnyitás, mentés) és a szövegszerkesztési műveleteket (kivágás, másolás, beillesztés). Ha jól szemügyre vesszük, megtalálhatjuk a Turbo Pascal-ban megtalálható menüket is (futtatás, fordítás, stb.). Ezen kívül pedig számos más, egyelőre ismeretlen funkcióra is bukkanhatunk.

Az első és legfontosabb dolog, amit a Pascal-ról áttérve észre kell vennünk, hogy a Delphi a .pas kiterjesztésen kívül még számos más kiterjesztést is lefoglal magának. Turbo Pascal-ban akár programot, akár unit-ot készítettünk, mindig .pas kiterjesztést kapott. Delphiben ez oly módon változott meg, hogy a „program <program neve>” sorral kezdődő fájlok .dpr (Delphi PRoject) kiterjesztést kapnak, a unit-ok pedig maradnak a régi, jól bevált .pas kiterjesztésnél. Egy Delphi program tehát valójában egy projekt, mely számos unit-ot magában foglal. A .dpr fájllal – mint azt látni fogjuk – nem kell foglalkoznunk, azt a kevés kódot, ami kell bele, azt beleírja nekünk a Delphi. Persze lesznek esetek, amikor mi magunk is hozzábiggyesztünk pár sort, de ezzel most még korai foglalkozni.

Az eszköztáron, ahogy az lenni szokott, bizonyos menüpontok funkcióit tudjuk gyorsabban elérni. Az eszköztárat mi magunk is testreszabhatjuk, ha a jobb egérgombbal ráklikkelünk és a Properties pontot választjuk.

A főablak harmadik és talán legfontosabb része a komponenst paletta. Itt szépen, fülekre bontva találhatjuk meg az alap Windows vezérlőket (gomb, menü, beviteli mező, stb.) és néhány olyan vezérlőt, melynek funkciója nagyban hasonlít ezekhez, de bizonyos szempontból többletfunkciókkal szolgálnak (például ha csak egy pillantást vetünk a DataControls fül tartalmára, hasonló beviteli mezőket és legördülő vezérlőket találunk, használatuk mégis némiképp eltér a hagyományos testvérüktől. Gyorsan váltsunk is vissza a Standard fülre, itt még korai nézelődni =O) )

Kétféle komponens típust különböztetünk meg. Az egyik az ún. vizuális, a másik a nem vizuális (vagy szebben: non-vizuális) komponens. A különbség – ahogy azt nevük is sugallja – a megjelenésben van. Egy vizuális komponens úgy fejlesztési (tervezési) időben, mint futási időben is látható, célja általában valamilyen felhasználói adatbevitel (pl. egy beviteli mező), vagy valamilyen információ megjelenítése a felhasználónak (pl. egy címke, vagy más néven label). A nem vizuális komponens fejlesztési időben egy kis gombként jelenik meg az ablakon, futási időben azonban teljesen láthatatlan. Egy ilyen komponens olyan funkciót lát el, mint például egy adott utasítás időzített, folyamatos végrehajtása vagy sok kép tárolása egy helyen. Egy szóval olyan funkciók ezek, amelyekhez nem társítható vizuális megjelenés.

 

Minden komponensnek vannak olyan tulajdonságai (property), amelyeket már a tervezés során beállíthatunk. Ilyen például egy gomb felirata, pozíciója vagy az ablak címsora, stb. Ezek a tulajdonságok jelennek meg az Object Inspectorban (ezt nagyon nem szeretem, de a teljesség kedvéért: Objektum Felügyelőben). Ha az egérrel kijelölünk egy komponenst, megjelennek benne a beállítható tulajdonságok.

A form egy szabad területére klikkelve a form tulajdonságai jelennek meg. Ha a Delphi súgóban böngészünk, ezeket „design time property”-ként találjuk meg. Vannak olyan tulajdonságok, amelyeket csak a program futása során érhetünk el, ezek nyilván nem jelennek meg az Object Inspectorban (OI). Ezeket „Run time property” néven azonosíthatjuk. Bizonyos futás idejű tulajdonságok lehet, hogy csak csak olvashatóak. Ezek általában valamilyen státusz információt hordoznak, melyek megváltoztatásához valamilyen eseménynek kell bekövetkeznie. Ez most tudom, így kicsit homályosnak tűnhet, de ahogy egyre többet használjuk a Delphi-t, egyre többel fogunk találkozni és egyre inkább letisztul, hogy miről is van szó. Minden tulajdonságnak (lévén ezek is amolyan változók) megvan a maga adattípusa, így nem lehet mindenféle értéket beleírni. Az is előfordulhat, hogy például egy Integer típusú tulajdonságnak 867-et értékül adva visszaszól nekünk a Delphi, hogy ezt ide most nem lehet. Ekkor fogaduk el, esetleg nézzünk utána a súgóban, hogy miért is tiltott ez az érték.

Bizonyos tulajdonságok mellett egy „+” jelet láthatunk. Ha erre ráklikkelünk, újabb beállítások jönnek elő. Például klikkeljünk a form Font tulajdonsága melletti jelre. Erre olyan elemek kerülnek elő, melyek a betűtípushoz taroznak: méret, típus, stílusok.

Amikor egy értéket írunk be, előfordulhat, hogy a beviteli mező szélén egy „…” gombot találunk. Ilyenkor, ha a Ctrl+Enter gombokat lenyomjuk, vagy a gombra ráklikkelünk, egy ablak jön be, mellyel könnyedén adhatunk értéket a mezőnek. Példaként tekintsük ismét a form Font tulajdonságát. Ha nem a „+” jel adta többletfunkciókkal kívánjuk beállítani a megjelenést, használjuk Font sorában megjelenő „…” jelet. Erre feljön a már ismert Windows ablak, mellyel könnyedén megadhatunk minden értéket egyszerre.

Az is előfordulhat, hogy bizonyos tulajdonságok csak bizonyos értékeket vehetnek fel. Ilyenkor a kitöltést segítendő, egy lefele mutató nyíl jelenik meg az előbbi „…” helyén, melyre ha ráklikkelünk, a kiválasztható értékek listáját kapjuk meg. Nézzük meg a form „BorderStyle” tulajdonságát. Itt adhatjuk meg, hogy milyen legyen az ablakszegély megjelenése. Itt nyilván nem lehet bármilyen értéket megadni, csak a lenyíló listában felsoroltakat.

 

Még néhány apróság

 

A Delphi IDE harmadik nagy részét nevezzük munkaterületnek. Itt ismerkedésünk első szakaszában két ablakot fogunk látni. Az egyik a tervezés alatt álló ablak (a továbbiakban form) és a kód ablak, ahol a Pascal kódot fogjuk látni/írni. Minden form-hoz egy-egy unit tartozik. Ezzel bizonyos fokú rendezettség biztosítható, könnyebben tudunk egy kész ablakot átemelni egy másik projektbe például.

 

Lévén pötyögés közben nem szívesen nyúlunk az egérhez, számos billentyű segíti az eligazodást munkánk során. Talán a két legfontosabb billentyű az F11 és F12. Az F11-el az OI-t hozhatjuk elő, legyünk akár a form-on, akár a kód ablakban éppen. A kódablak és a form közötti váltást pedig az F12 segítni.

 

Na most aztán…

 

… csináljuk már valami működőképes progit. Valójában az ablak, ami megjelent nekünk a Delphi indulásakor, minden további nélkül egy futtatásra alkalmas program része. Pascal-al ellentétben Delphiben a programot F9-el tudjuk futtatni és Ctrl+F9-el fordítani. A futtatás persze magában foglalja a fordítást is, ha az szükséges. Futtassuk most ez a programot. Az OI, a tervezett form és a kódablak eltűnik és megjelenik egy üres ablak, melyet a címsoránál fogva mozgathatunk, méretezhetünk és akár be is zárhatjuk. Igaz, nem tud annyit, mint egy ügyviteli rendszer :), de fut és működőképes. Ha ránézünk a Delphi címsorára, észrevehetjük, hogy a „Running” jelzővel mutatja, hogy éppen futtat egy programot. Zárjuk be az ablakot, ezzel programunk futása is véget ér. Most használjuk a komponens palettát. Dobjunk egy gombot a formra, esetleg egy beviteli mezőt, majd futtassuk ismét a programot. És lám. A gombra klikkelgetni tudunk, a beviteli mezőbe tetszőleges szöveget írhatunk. Zárjuk be ismét az ablakot és jelöljük ki a gombot. Láthatjuk, hogy sok beállítható tulajdonsága van, minket most elsősorban a Caption érdekel. Írjunk bele egy másik szöveget. Ez lesz a gomb felirata. A legtöbb komponensnek van egy Caption tulajdonsága. Például ha a form Caption-jét állítjuk be, akkor az ablak címsorát állítgathatjuk. Mindezt egyetlen sor kód beírása nélkül. Nézegessük bátran a tulajdonságokat és hatásukat futtatás közben. Nem mindnek fogunk rögtön értelmet találni, de első alkalommal ne is akarjunk. Mindennek eljön a maga ideje. Ismerkedjünk a Standard paletta elemeivel, legfőképpen a gombbal, a beviteli mezővel, a panellal, rádiógombbal és a jelölőnégyzettel. Szintén nézegessük a form tulajdonságainak hatásaival. Ajánlom mindenki figyelmébe a form BorderIcons és BorderStyle, valamint a Color, a Position és a WindowState tulajdonságát első nekifutásra.

 

Következő alkalommal megismerkedünk az eseménykezelőkkel, hogy végre már egy kis interaktivitást vigyünk programjainkba.

 

Geiger Tamás - info@gsc.hu