Cujgyak10.rtf				C++ Builder bevezető
					a felhasználói felület elemei,
					komponens paletták, komponensek.
					komponensek jellemzői, beállításuk.

A gyakorlat végigcsinálásához legyen ez a fájl megnyitva egy ablakban, mellette legyen elindítva a 
C++ Builder is! Kövessük és hajtsuk végre pontosan az alább leírtakat!

TIPP: Ha egerünkön van görgő, kényelmesen görgethetjük ennek a szüvegablaknak a tartalmát anélkül, hogy 
mindig belekattintással, vagy más módon aktívvá tennénk! Elegendő az egérkurzort az ablakba húzni, majd a
görgővel a tartalmat mozgatni.

0. Indítsuk el a C++ Buildert a Start menűből navigálva, vagy az asztalon lévő indítóikonnal!
Tanulmányozzuk a Builder fejlesztő környezetet:
Nyissuk  le a File menüt!
New:  új program, vagy programbeli új építőelem létrehozására szolgáló általános  menüpont. Mi nem fogjuk használni, mert vannak gyorsabb módszerek
New Application: ez kell nekünk egy teljesen új windowsos alkalmazói program (projekt) írásának elkezdéséhez.
New Form: ha már nagyobb programot készítünk, amiben több ablak is van, a második, harmadik, stb. ablakot ezzel a menüponttal adhatjuk a projektünkhöz. 
New Frame: erre egyelőre nincs szükségünk. Egy, a Formhoz hasonló tárolót (container-t) hoz létre.
Open: általános megnyitó menüpont, projekt, projektrészek, vagy egyéb, pl. text fájlok megnyitására. Mi ritkán fogjuk használni.
Open Project: komplett project megnyitására szolgál. Ezzel célszerű pl. megnyitni az Example alkalmazásokat, hogy futtathassuk, tanulmányozhassuk azokat.
Reopen: a korábbi műveink gyors megnyitására szolgál. A megnyíló lista felső részén a komplett projektek közül, a lista alsó részéről egyéb építőelem fájlok közül választhatunk megnyitásra állományt.  Célszerű ezzel megnyitni a korábban elmentett projektjeinket.
Save: hatására a projekt módosított fájljait elmenti.
Save as: Az éppen szerkesztés alatt lévő állomány elmentése más név alatt, vagy más helyre. Ritkán használatos.
Save Project As: a project fájl más néven, vagy más helyre való mentésére. A unit fájlokat nem menti. Ritkán  használatos.
Save All: ez a mi kedvenc mentési parancsunk, mindent ment, ami a projekt része és megváltozott.
Close: bezárja az aktuális szerkesztett fájlt. Form-fájlra alkalmazva bezárja a form .cpp és .h unitfájljait is. Ritkán használatos.
Close All: a projekt összes nyitott állományát bezárja, természetesen mentést felajánlva előtte. Ezt használjuk a  projektunk lezárására, a Builder új lappal való indításának előkészítésére. Kedvenc lezáró parancsunk.
Include Unit Hdr...: arra való, hogy több unitot használó projektekben a listáról kijelölt unit .h fájlját  beemeljük az aktuális unit .cpp fájljába, hogy utána az aktuális unitban hivatkozhassunk a kijelölt  unitban definiált elemekre. 
Print: az aktív kódszerkesztő ablak, vagy form nyomtatása.
Exit: kilépés a Builderből. Elérhető, hogy megnyitáskor a kilépéskori állapot álljon vissza.

Az Edit menüből az Undo (Visszalépés) és a szokásos vágólapkezelő parancsokat (Cut, Copy, Paste) emeljük ki.

A View menüből a fontosabbak:
Project Manager: a project összetevő fájljait foglalja össze gráfba. Félelmetes, hogy egy induló üres alkalmazás is már mennyi deklarációs (.h és .hpp) fájlra hivatkozik... 
Object Inspector: az Object Inspector megjelenítése.
Class Explorer: a Class Explorer megjelenítése.
Toggle Form/Unit: váltás a form ablak alakjáról a .cpp fájljára és vissza. Ezek gyakran elfedik egymást, ezért  jó ez a menüpont. Létezik a váltásra ikon is.
Units: ha már sok unitot alkalmaz a programunk, akkor jön jól ez a választási lehetőség. Akkor is jól jön, ha   véletlenül bezártuk a kódszerkesztő ablakot. Ezzel valamelyik unitot kiválasztva az ablak feléled!
Forms: ha már sok formot alkalmaz a programunk, könnyen megjeleníthetjük azt, amelyikre kíváncsiak  vagyunk. A form megjelenítése behozza a kódszerkesztőbe a formhoz tartozó .cpp unitot is.

A Project menüpontban kezdőknek kevésbé fontos menüpontok vannak csak. A leginkább használatosak mégis a 
ViewSurce: csak a megnézésére a projekt forrásfájljának, egyelőre ne módosítsuk!
Compile Unit: az aktuális unit szintaktikai ellenőrzésére, fordítására.
Make ...: a projekt módosult részeinek újrafordítására és az egész projekt .exe fájljának összelinkelésére,   előállítására. Ezt érjük el a zöld futtató ikonnal is: a futás előtt fordítás és linkelés zajlik.
Build ...: A project újrafordítása mindenestül, akkor is, ha nem változott. Tapasztalatom szerint gyakran erre szorulunk a sima Run előtt.

A Run menüpont számunkra érdekes egyetlen menüpontja a Run, kényelmesebben elérhető a  zőld  ikonnal. Ha a programunk futását megszakítottuk a  ikonra kattintva, a program még továbbindítható a  ikonnal. Amennyiben nem akarjuk tovább futtatni, a megjelenő CPU feliratú állapotkijelző ablakot zárjuk be és válasszuk a Run főmenüpont Program Reset menüpontját. Ezzel szerkesztési üzemmódba térünk vissza a futtatásból.
Haladók figyelmét felhívnám az alsó négy nyomkövetést, futásidejű hibák kiszűrését szolgáló menüpontra. 

A többi főmenüpont közül kezdő szinten csak a Help fontos, de az nagyon, különösen angolul tudóknak.
Használjuk bátran, minden kérdésünkre megkapjuk a választ belőle!

Az eszközsoron a menüpontokról is elérhető funkciók gyors elérését lehetővé tévő ikonok találhatók.

Számunkra legfontosabb a Run  , a futtatás ikonja. Elidőzve az ikonokon a kurzorral, a funkciójukat 
eláruló buboréksúgók jelennek meg. Haladó szinten az eszközsorok testreszabhatók.

Nézzük meg a komponenspalettákat is!
A komponenspaletták szolgálják a gyors (rapid) programfejlesztést, különösen a programunk felhasználói 
felületét építhetjük össze gyorsan komponensekből. A komponens az osztály fejletteb formája, a 
komponens-egyedek fognak megjelenni a formunkon: pl. nyomógombok, input mezők, listadobozok, stb. 
A komponensek készlete igen gazdag és előre megírt nagytudású programrészletekként foghatjuk fel őket.
Létezik pl. fájlmegnyitás komponens, fájlmentés komponens, stb. a Dialog palettán.
Számunkra a fontosak a Standard, az Additional, a Win32 és a System paletta komponensei között találhatók.
Ezeket később ismerjük meg. Most csak vegyük szemre a lehetőségeket, az ikonok és a buboréksúgók 
elárulják a komponensek célját.

Az Objektumvizsgáló (Object Inspector) ablak a komponens formában az alkalmazói programunkba beépülő objektumok adattagjainak (jellemzők, Properties) megnézésére, értékük módosítására szolgál. Az Events (események) lapon megnézhetjük, az objektum milyen eseményekre tud válaszolni, valamint megadhatjuk, mely eseményekre van a lehetségesek közül ténylegesen szükségünk (természetesen ehhez nekünk is közre kell működni a válaszadást részletező programrészlet megírásával).

Az induló Builder alkalmazás része egy üres form, amely az alkalmazásunk főablaka lesz, valamint egy kódszerkesztő ablak, amelyben a programunk hiányzó kódrészeit beírhatjuk a Builder által megírt programváz megfelelő helyére.

A C++ Builder felhasználói felület főbb elemeinek megismerése után hozzuk létre életünk első windowsos C++ alkalmazását! Ehhez:

1. Hozzunk létre egy saját könyvtárat a saját nevünkkel a D: meghajtó Temp, vagy Tmp  könyvtárában. Ha ezek egyike sem létezne még, előbb azt hozzuk létre. Ehhez használjuk a fájlkezelőt.
  - Jelöljük ki a D: meghajtót!
  - Ha van Temp, vagy Tmp könytár, jelöljük ki. Ha nincs, a File/New/Folder paranccsal hozzunk létre egy új 
    könyvtárat és nevezzük el Tmp könyvtárnak, majd jelöljük ki baloldalon, a könyvtárszerkezeti gráfban.
  - A főmenüben válasszuk a File/New/Folder parancsot, majd a létrejött könyvtárat nevezzük a saját nevünkre. 
    NE MÁS nevet használjunk!

A további pontok mind a C++ Builderben végzendő tevékenységeket adnak meg.

2. A C++ Builder-ben, ha van ürestől eltérő alkalmazás benne nyitva, a File/Close all paranccsal zárjuk be!
3. Hozzunk létre egy saját új alkalmazást a File/New Application menüponttal!
4. Mentsük el ezt a frissen létrehozott üres alkalmazást a saját könyvtárunkba a következő módon:
   - Válasszuk a File/Save All parancsot! A megjelenő alábbi ablakban

változtassuk meg a Mentés helyé-t a D: meghajtó Tmp könyvtárában az előbb a saját
nevünkkel létrehozott folderre.
A felajánlott Unit1.cpp nevet fogadjuk el az első alkalmazásunk egyetlen formjához 
 (tervezés alatt lévő ablakához) tartozó .cpp állomány neveként, azaz nyomjunk Entert!
Majd a megjelenő projektmentő ablakban

     írjuk át a Project1.bpr projektfájl-nevet Proba1. bpr névre, és nyomjunk Entert. 
     Figyeljük meg, hogy a Builder fejlécében megjelent a Proba1 név.
    
5. Próbáljuk ki a frissen létrehozott első C++Builder programunkat, mit tud! Ehhez kattintsunk az 
   eszközsoron található zöld futtató háromszögre: .
   A fordítás és linkelés (összeszerkesztés) után megjelenik a tervezés alatt álló programunk egyetlen 
  üres ablaka:
  
  Mit tud a programunk ablaka? Ez az ablak a fejlecénél fogva mozgatható, a széleinél méretezhető, 
  teljesképernyő méretűre nyitható, visszaállítható, működik a rendszermenüje. Mindent tud, amit egy 
  ablaknak tudnia kell. Eddig nem szakadtunk bele a munkába, ugye? Pedig a programunk 173 000 lefordított
  sort tartalmaz! Ennek csak töredéke a Unit1.h és a Unit1.cpp és egyéb, a fejlesztőkörnyezet által megírt 
  kódokat tartalmazó állomány. A többi a windowsos megjelenítésért felelős .hpp include fájl, melyek a 
  unit1.h fájlban vannak deklarálva.

Állítsuk le a programunkat az X ikonra kattintva.

Hát ez nem valami sok...
Próbáljunk némi színt vinni a programunkba, pl. feliratozzuk az ablakunkat a programunk nevével!
Ehhez kattintsunk bele a formba, hogy aktívvá tegyük, majd az Object Inspector Properties lapján írjuk át a Caption (felirat) adattag értékét Próba1 szövegre.Figyeljük meg, ahogy írjuk az új szöveget a fehér input mezőbe, azzal párhuzamosan a form felirata is változik!
Jegyezzük meg, hogy a Builderben minden komponens-egyednek saját neve van, amelyet a rendszer generál, de mi átírhatjuk. Mielőtt ezt megtennénk, vessünk egy pillantást a formnak megfelelő unit .cpp részére. Ehhez válasszuk a View menüpont Toggle Form/Unit menüpontját, vagy a megfelelő ikont. Láthatjuk, hogy van a unitban egy 
TForm1 *Form1;
mutatódefiníció. A programunk ebbe a mutatóba fogja létrehozni a formunkat a programunk indulásakor. 

Most térjünk vissza az Object Inspectorba és változtassuk meg a form nevét (Name) Ablak1 névre!
Ezután vessünk egy pillantást a formnak megfelelő .cpp állományra! Láthatjuk, hogy a mutatódeklarációban (és minden más helyen is) a programszöveg aktualizálásra került!

Még mindig az ablakunk tervezésére szolgáló form objektumnál maradva, nézzük meg, mit jelent, hogy a C++ Builder egy kétutas tervezési eszköz!
Kattintsunk a formra, hogy az legyen aktív, majd nézzük meg az Object Inspector-ban a Width (szélesség) mező értékét! Nekem 544-et mutat, de természetesen ettől eltérhet. Írjuk át 400-ra és nyomjunk Entert! A form mérete rögtön megváltozik, aktualizálódik! 
Most fogjuk meg egérrel az ablak jobb szélét, és mozgassuk! A form szélességének változásával párhuzamosan az Object Inspector-ban kijelzett érték is változik! Tehát a tervezést végezhetjük a formon, egérrel, vizuális segédlettel, vagy végezhetjük a programban beállítva az értéket. Hogyan érhetjük el, hogy az ablakunk megadott mérettel jelenjen meg a program indulásakor? Beállíthatjuk a fenti két módszer valamelyikével, de az elállítódás ellen jobb védelmet ad, ha maga a program állítja be. Ehhez írjuk be az ablak .cpp kódjába az Ablak1 objektum konstruktorába a Width adattag értékét:

Az ablakot most már tervezési időben állíthatjuk akármekkorára, a program futásának első lépése az lesz, hogy visszaállítsa 300-ra és megjelenítse. Próbáljuk ki. Hasonlóan kezelhető az ablak magasságát megadó Height adattag (Property).
Az ablak képernyőn elfoglalt helyzetét a Left és Top adattagokkal állíthatjuk, ezek határozzák meg a megjelenő ablak bal felső sarkának helyét a képernyőn. Figyeljük meg a form mozgatásával ezek az adattagok hogy változtatják az értéküket!

Ideje, hogy néhány másik komponenst is elhelyezzünk a formon.
Válasszuk ki a Standard komponenspalettán a Nyomógomb (Button) ikont! Majd kattintsunk a form bal alsó felén valahová. Megjelenik egy nyomógomb. Ismételjük meg a kijelölés, kattintás lépéseket és helyezzünk el egy második nyomógombot a form jobb alsó felén. Ha nem sikerült elsőre eltalálni a gomb megfelelő helyét, kijelölve azt és egérrel megfogva tetszőleges helyre húzhatjuk.
Jelöljük ki a jobboldali gombot. Az Object Inspectorban ekkor ennek a jellemzői látszanak. Változtassuk meg a feliratát (Caption) Kilépés szövegre, a nevét (Name) pedig Kilepes szövegre. Mivel ez egy C azonosito lesz, csak angol karakterek használhatók. Ezzel a gombbal akarjuk majd bezárni a programunkat.
Ahhoz, hogy a Kilépés gomb megnyomása az ablak bezárását és a program befejezését eredményezze, a gomb OnClick() eseménykezelő függvényét a programkódba be kell illeszteni és benne az ablak bezárásáról intézkedni.
Az eseménykezelőt kétféleképpen is elhelyezhetjük a programkódban: kiválaszthatjuk a nyomógomb eseményei közül az Events lapról az Object Inspector-ban, vagy duplán kattintva a gombon is ezt érjük el. Kattintsunk tehát duplán a jobboldali gombon!

A kódszerkesztőben találjuk magunkat, a frissen létrehozott 
TAblak1::KilepesClick( )
{
}
eseménykezelő függvény belsejében. Ide kell elhelyezni egy üzenetet, azaz egy függvényhívást a form Close()
metódusának futtatására. Honnan tudhatjuk, hogy éppen erre van szükségünk?
Tudhatjuk más programokból, programozási könyvekből, de a Help-ből is:

Beírva a Help Tárgymutatójába a TForm kulcsszót, a megjelenő listáról szisztematikusan a TForm-ot választva, leírást kapunk róla, melynek fejlecében választhatunk a Properties, Methods és Events tagok részletezése közül.
Az ablak bezárása ( Close  ) esemény a Close() tagfüggvény  programon belüli meghívásával érhető el. Mivel ez a függvény nem egy esemény hatására hívódik, hanem éppenhogy maga az esemény, ezért ezt a metódusok, sima tagfüggvények között kell keresni. A fenti súgó ablak megadja a működését: Ha az alkalmazás főablakát zárjuk be, az egyben az alkalmazás futásának befejezését is jelenti. Pont ez kell nekünk. Írjuk be az 

Ablak1->Close();
sort a KilepesClick() eseménykezelőbe:

void __fastcall TAblak1::KilepesClick(TObject *Sender)
{
 Ablak1->Close();
}

Menjünk a Project főmenüpontba és válasszuk a Build Próba1 menüpontot a teljes program újrafordítására.
Sikeres fordítás után nyomjunk a Run  ikonra. Amennyiben a nyomógombokat nem raktuk nagyon jobbra, azoknak látszani kell a futó ablakban. Ha nem látszanának, méretezzük nagyobbra az ablakot.
És most próbáljuk ki a Kilépés gombot! Kattintva rajta, az ablak bezáródik és a programunk befejeződik. Ott találjuk magunkat a Builder fejlesztőkörnyezetben.

Persze, kilépés előtt megnyomogathatjuk a baloldali nyomógombot is. Nem történik semmi, mert erre az eseményre nem hívódik meg eseménykezelő. Ha nem próbáltuk ki, futtassuk újra a programunkat és próbáljuk ki.

Lépjünk tovább, rendeljünk működést a baloldali nyomógombhoz is!
Ennek a gombnak a hatására egy nulláról induló belső számlálót kettővel meg akarunk növelni és az értéket kiíratni. Ehhez szükségünk van két Label komponensre (Egy nagy A betű az ikonja.). Helyezzük el ezeket az ablak felső felén, egymás után!
A baloldalit nevezzük el (Name) Felirat-nak, a jobboldalit Ertek-nek. A baloldalinál a Caption értékét változtassuk  Tároló=    szüvegre, a jobboldalinál a Caption értékét ne bántsuk.
Szükségünk van még egy int típusú tároló változóra is. Definiáljuk ezt a .cpp állományunkban:

Jelöljük ki a bal nyomógombot és változtassuk meg a nevét (Name)  Noveles ertekre, a Caption értékét pedig  +2  szövegre.
És végül rendeljünk a lenyomásához tevékenységet! Kattintsunk duplán a gombon, hogy létrehozzuk az OnClick() eseménykezelőjét. Írjuk bele az alábbi módon a növelés és kiíratás utasításokat. A kiíratás természetesen az Ertek nevű Label komponenssel történik.

//---------------------------------------------------------------------------
void __fastcall TAblak1::NovelesClick(TObject *Sender)
{
 tarolo+=2;
 Ertek->Caption= tarolo; // automatikus szám -> szöveg átalakítás!
}
//---------------------------------------------------------------------------

Ezután a Project/Build Proba1 menüpont választással fordítsuk újra a programunkat. Fordítás után futtassuk!
A program működik, a +2 feliratú gomb nyomogatására a kiírt érték nő.
Szépséghibája, hogy induláskor a tároló 0 kezdőértéke helyett Ertek szöveg látható. Ezen könnyen segíthetünk:
Jelöljük ki az Ertek feliratot és változtassuk meg a Caption tartalmát 0 beírásra.
Ezután futtatva a programunkat, már elfogadható lesz.
A kész alkalmazás ablaka:

Végül válasszuk a File/Save All menüpontot és az Exit-tel lépjünk ki  a Builderből.
Legközelebb megnyitás a File/Reopen menüponttal történhet.

Hát ez nagyszerű! alig írtunk pár sort és készítettünk egy több, mint százezer soros, csillogó, villogó windows-os programot!
Dicsekedjünk vele bátran!