lA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./0. lA menü elkészítése lA programkód megírása a Kilépés menüponthoz lA feladat ismertetése lA vezérlők létrehozása lA további eseménykezelők megírása Vizuális komponensek, menük, vezérlők
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./1. Feladat: Készítsünk C++ Builder programot bináris alakban adott bájt értékének decimális alakra és vissza történő átszámítására. A programnak legyen súgója is, amely magyar és angol nyelven megadja a használathoz szükséges minimális információkat. A program ablakáról egy előzetes elképzelésünk a következő:
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./2. A menü elkészítése 1. A MainMenü ikon elhelyezése a formon. 2. Dupla kattintás a komponensen, megjeleníti a menüszerkesztőt: 3. A kijelölt főmenüpontnak nevet és feliratot adunk az Object Inspector-ban: 4. Megadjuk a Választék főmenüpont almenüpontjait:
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./3. 5. Kijelöljük a főmenü második pontját és elnevezzük az Object Inspector-ban Súgó-nak: 6. A Súgó-n belüli almenü létrehozásához kijelöljük az üres menüpontot és az Object Inspector-ban elnevezzük Leírás-nak:
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./4. 7. A Leírás almenüinek létrehozásához Kijelöljük a Leírás menüpontot és megnyomjuk az egér jobb gombját. Felbukkan egy menü, amelyről a Create Submenu pontot választjuk: 8. A keletkező almenüpontot kijelölve az Object Inspector-ban a Magyarul nevet adjuk neki, az alatta levő üres almenü- pontnak pedig az Angolul nevet: 9. Ezzel a menü kész.
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./5. A programkód megírása a Kilépés menüponthoz 10. Kattintsunk duplán a menüszerkesztő Kilépés menüpontján. A kódszerkesztő- ben találjuk magunkat a menüpontkattintás frissen létrehozott eseménykezelő függvényének vázában. 11. Írjuk meg a kilépéshez szükséges metódushívás kódját: A program futtatható és a kilépés menüponttal kipróbálható. 12. Helyezzük el a form-on a szükséges további komponenseket: egy rádiógomb csoportot két rádiógombbal, nyolc kiválasztónégyzetet, hét nyomógombot és két címkét az adatkijelzéshez!
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./6. A vezérlők létrehozása 13. A felhasználói felület nyers változata a következő: 14. A két rádiógomb létrehozásához kijelölt csoportpanel mellett kattintsunk az Object Inspector-ban az Items (elemek) jellemző értékmezőjére duplán, hogy megnyissuk az elemmegadó ablakot. Az ablakba írjuk bele a rádiógombok feliratát:
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./ Adjuk meg a rádiógombcsoport feliratát (Caption: Átszámítás iránya: ) : 16. Adjuk meg a kiválasztó négyzetek, a nyomógombok és a címkék feliratait (Caption) : 17. A Decimális érték kijelzés betűméretét válasszuk nagyobbra (Label1->Font és Label2->Font = 10, Bold ):
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./7. A további eseménykezelők megírása 18. Hozzuk létre a decimális érték belső tároló változóját és nullázzuk ki. Ehhez a Unit1.cpp fájlba írjuk be a TForm1 * Form1; sor után: int decimalis=0; 19. Írjuk meg a csökkentő és növelő nyomógombokhoz a programkódot. Ehhez kattintsunk pl. Button1 gombon duplán és ügyelve arra, hogy 0 alá ne csökkenhessen decimalis értéke, csökkentsük a gomb által jelzett értékkel. Hasonlóan ügyeljünk rá, hogy a növeléssel ne válhasson 255-től nagyobbá decimális értéke! A megváltozott értéket írassuk is ki Label2 címke új felirataként! A Button1 nyomógomb eseménykezelő függvénye: void __fastcall TForm1::Button1Click(TObject *Sender) { decimalis -= 1; if (decimalis<0) decimalis=0; Label2->Caption= decimalis; } Fordítsuk le a programot és futtassuk! A csökkentés, növelés már működik!
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./ Elérkeztünk a legizgalmasabb részhez: az Átszámítás nyomógomb eseménykezelőjét kell megírnunk. Ennek a rádiógombok állásától függően bináris számról decimálisra, vagy fordítva, decimálisról binárisra kell számolnia. A bináris input értéket a kiválasztónégyzetek állapota adja meg, Egy-egy kiválasztónégyzet a bájt egy-egy bitjének felel meg, kiválasztása esetén a bit értéke 1, egyébként 0. A megoldás: void __fastcall TForm1::Button7Click(TObject *Sender) { if (RadioGroup1->ItemIndex==0) //Bin-> Dec {decimalis=0; if (CheckBox1->Checked) decimalis+=1; if (CheckBox2->Checked) decimalis+=2; if (CheckBox3->Checked) decimalis+=4; if (CheckBox4->Checked) decimalis+=8; if (CheckBox5->Checked) decimalis+=16; if (CheckBox6->Checked) decimalis+=32; if (CheckBox7->Checked) decimalis+=64; if (CheckBox8->Checked) decimalis+=128; Label2->Caption= decimalis; } //folytatódik
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./9. else //Dec -> Bin {int buf= decimalis; if (buf>=128) {CheckBox8->Checked=true; buf-=128;} else CheckBox8->Checked=false; if (buf>=64) {CheckBox7->Checked=true; buf-=64;} else CheckBox7->Checked=false; if (buf>=32) {CheckBox6->Checked=true; buf-=32;} else CheckBox6->Checked=false; if (buf>=16) {CheckBox5->Checked=true; buf-=16;} else CheckBox5->Checked=false; if (buf>=8) {CheckBox4->Checked=true; buf-=8;} else CheckBox4->Checked=false; if (buf>=4) {CheckBox3->Checked=true; buf-=4;} else CheckBox3->Checked=false; if (buf>=2) {CheckBox2->Checked=true; buf-=2;} else CheckBox2->Checked=false; if (buf>=1) {CheckBox1->Checked=true; buf-=1;} else CheckBox1->Checked=false; }
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./ Programunk még nem tökéletes, mert induláskor egyik rádiógomb sincs kiválasztva. Tegyük ezt meg a form konstruktorában! __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { RadioGroup1->ItemIndex=0; } 22. A program menüpontjai közül még a Számolás menüpont nem végzi el a feladatát. A menüpont kiválasztásával ugyanazt a feladatot szeretnénk elvégeztetni, mint amit az Átszámítás nyomógomb is végez. Hogyan érhetjük el ezt? Megtehetnénk, hogy az Átszámítás eseménykezelő belsejét kiemelnénk egy önálló függvénybe és azt hívná meg mind az Átszámítás, mind a Számolás eseménykezelője. De ez felesleges, mert Számolás meghívhatja az Átszámítás eseménykezelőjét az alábbiak szerint: void __fastcall TForm1::SzamolasClick(TObject *Sender) { Button7Click(Application); }
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./ Már csak a Súgó menüpontok eseménykezelő függvényei hiányoznak. A program működésének magyar és angol nyelvű leírását egy-egy üzenetab- lakban hozhatjuk a felhasználó tudomására: void __fastcall TForm1::MagyarulClick(TObject *Sender) { ShowMessage("A program bináris és decimális számok közötti \ átszámítás elvégzésére képes. A Kiválasztónégyzetek egy bájt\ bitjeit reprezentálják. Az átszámítást a Számolás menüpont, \ vagy az Átszámítás nyomógomb választásával indíthatja."); } Az angol nyelvű súgó megadása hasonlóan történhet.
Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 24./ Végül az alkalmazás ablakának is adhatunk saját nevet a Form1-> Caption átírásával. Lecserélhetnénk a Borland ikonját egy saját tervezésű ikonra. Átnevezhetnénk az automatikusan generált nevű komponenseket nekünk tetsző nevekre és még egyéb finomításokat végezhetnénk, pl. megvizsgálhatnánk, egér nélkül, csak billentyűzettel kezelhető-e a programunk. Azt tapasztalnánk, hogy kezelhető.