A C++ programozás Windows környezetben szöveges vezérlők a programban Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./0. A C++ programozás Windows környezetben szöveges vezérlők a programban Címke (Label) vezérlő Egysoros szövegszerkesztő (Edit) vezérlő Többsoros szövegszerkesztő (Memo) vezérlő Lista (ListBox) vezérlő Kombinált lista (ComboBox) vezérlő Mintaprogram szöveges vezérlőkkel
Egysoros szövegszerkesztő (Edit) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./1. Címke (Label) vezérlő A címke (Label) vezérlő egysoros szövegek kijelzésére alkalmas. A fókusz nem állítható rá. A tartalmát a Caption jellemző tartalmazza. A betűket a Font jellem- ző értékeinek megadásával formázhatjuk. Amennyiben a Transparent tulajdonság true, a szöveg téglalapalakú háttere a hordozó felülettel lesz azonos. Az Alignment jellemzővel a téglalapon belül igazíthatjuk. Egysoros szövegszerkesztő (Edit) vezérlő Az egysoros szövegszerkesztő szövegek kijelzésére és beadására, módosítására egyaránt használható. A szö- veget a Text jellemző hordozza. Ha a ReadOnly jellemző true, akkor a szöveg csak olvasható ,illetve programból írható. A MaxLength jellemző 0 értéke tetszőleges, meg- adott értéke korlátozott beadható hosszt jelent.
Többsoros szövegszerkesztő (Memo) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./2. Többsoros szövegszerkesztő (Memo) vezérlő A memo vezérlő nagyméretű, akár több tíz kByte- os szöveg megjelenítésére, szerkesztésére alkal- mas. A szöveg beadható és olvasható a Text jel- lemzőn keresztül egybefüggően, vagy a Lines jel- lemzőn keresztül sorok sokaságaként. A WantTabs és a WantReturns jellemzők true értéke mellett a tabulátor a szövegben hatásos, nem hozza le a fókuszt róla, illetve az Enter sortörésre beadható a szövegbe. A szöveg automatikusan tördelhető a WordWrap jellemző állításával. A Módosulásról a Modified tulajdonság lekérdezésével értesülhetünk. ReadOnly = true érték mellett a szöveg csak olvas- ható. Programszerkesztéskor a szöveg felvitele a Lines jellemző sorában megjelenő gombbal előhív- ható String List Editor-ban történ- het.
Lista (ListBox) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./3. Lista (ListBox) vezérlő A lista vezérlő a tárolt szöveget egysoros bejegyzések formájában tárolja a TStrings típusú Items adattagnak a tételeket tartalmazó Names vektorában. A TStrings osztály metódusai Items->Metódus(); alakban használhatók a bejegyzések kezelésére. Ilyen metódusok az Add(”Bejegyzés”); mellyel új bejegyzést adhatunk a lista végéhez, az Insert(index, ”Bejegyzés”); az index által mutatott helyre szúrja be a bejegyzést, a Delete(index); az index által azonosított bejegy- zést törli, az IndexOf(”Bejegyzés”); metódussal a Bejegy- zés indexét tudhatjuk meg, ill. azt, hogy nem szerepel a listában. A TStrings osztály jellemzőivel, a Count jellemzővel a listaelemek számát tudhatjuk meg, az ItemIndex a kiválasztott bejegyzés indexét adja, a Strings[index ] jellemzővel pedig az index által azonosított stringre hivatkozhatunk.
Kombinált lista (ComboBox) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./4. A lista vezérlő MultiSelect jellemzőjének true értéke mellett egyszerre több bejegyzés is ki- választható, ha pedig az ExtendedSelect jel- lemző is true, a Shift és a Ctrl billentyűk is használhatók a többszörös kijelöléshez. Arról, hogy mely bejegyzések vannak kivá- lasztva, a Selected[ ] tömb informál, a kiválasztott bejegyzésekkel azonos indexű elemei true értékűek. A Sorted jellemző true értéke esetén a bejegyzések ABC szerint rendezettek. Kombinált lista (ComboBox) vezérlő A kombinált vezérlő egy egysoros szövegszerkesztő és egy lista egyesítése. Előnyösen használható olyan ese- tekben, amikor egy listáról kell kiválasztással értéket adni egy szövegváltozónak, vagy olyan esetben, amikor ezen felül még új bejegyzés beadási lehetősége is követel- mény.
Style = csSimple esetén a lista ablaka mindig megjele- Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./5. A kombinált vezérlő a Style jellemző értékétől függően eltérő alakokat ölthet: Style = csSimple esetén a lista ablaka mindig megjele- nik, a Height jellemző által engedélyezett hosszban. Style = csDropDown esetén a listaablakot a szövegszerkesztő sorában lévő gombbal le kell nyitni, vagy a Show( ) metódus hívá- Sával programból nyithatjuk le. Style = csDropDownList esetén a szöveg- input csak a listáról való választással adható be.
Megjegyzések a szöveges vezérlőkhöz: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./6. A ComboBox tulajdonságai az egysoros szövegszerkesztő és a lista vezérlő megismert tulajdonságaival egyeznek, értelemszerű eltérésekkel. Így pl. nem lehet többszörös kijelölést végezni. Megjegyzések a szöveges vezérlőkhöz: A szöveges vezérlők a bemutatottakon túl sok, ritkábban használt jellemzővel , metódussal és eseménykezelővel rendelkeznek, lásd a program Help-jét. Az ismertetetteken túl léteznek további, részben eltérő tulajdonságú szöveges vezérlők is. Ilyenek: StaticText: Label -hez hasonló, de speciális célra szolgál. MaskEdit: Edit-hez hasonló, de a beírható szöveg ellenőrizhető, maszkolható és a kiírás formázható. RichEdit: Memo-hoz hasonló, de különféle karakterkészlet betűit keverhetjük és bekezdésformázási lehetőségeket is nyújt, de az ezeket a lehetőségeket kihasználó felhasználói felületet nekünk kell programozni.
Mintaprogram szöveges vezérlőkkel Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./7. Mintaprogram szöveges vezérlőkkel Készítsünk a Label, Edit, Memo, ListBox és ComboBox szöveges vezérlőket alkalmazó programot. A program egy gépipari vállalat Központi raktárában és Szereldei raktárában található alkatrészek nyilvántartására szolgál. A Központi raktárba új alkatrészeket bevételezhetünk, onnan egy, vagy több kijelölt alkatrészt átszállíthatunk a Szereldei raktárba, ahonnan felhasz- nálásra szintén egy, vagy több alkatrészt kivételez- hetünk. Az alkatrészek mozgását a későbbi visszakereshető- ség érdekében naplózza a rendszer. A raktárak alkat- részkészletét megjelenít- hetjük a bekerülés sorrend- jében, vagy rendezetten. A program ablaka a követ- kező felépítésű legyen:
létrehozott üres C++ Builder programunkat Raktar.prj projektnévvel. Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./8. Megoldás: 1. Hozzunk létre egy Raktár nevű könyvtárat, amibe mentsük le a frissen létrehozott üres C++ Builder programunkat Raktar.prj projektnévvel. 2. Helyezzünk el a form-on három csoportbafoglaló panelt (GroupBox). Ezek szerepe a rajtuk elhelyezendő elemek vizuális egységbe foglalása és az egység nevének megjelenítése. 3. Helyezzük el a panelokon az egy-egy ListBox komponenst a raktárállomány- bejegyzések tárolására és megjelenítésére! 4. Helyezzük el a bal GroupBox panelon alulra az Edit komponenst! 5. Helyezzük el a három nyomógombot a hozzáadás, szállítás és felhasználás műveletek elvégzésére! 6. Helyezzük el a ComboBox komponenst a megjelenítés módjának kiválasztására! 7. Helyezzük el a Memo komponenst a naplózott események megjelenítésére! 8. Végül helyezzünk el három Label komponenst a Raktárkészlet nyilvántartás, Megjelenítési mód: és az Új alkatrész neve: szövegek kijelzésére. A kijelölt komponenst a Ctrl nyomvatartása mellett a nyíl billentyűkkel finoman pozicionálhatjuk. Pl. a Megjelenítési mód: szöveget egy vonalba állíthatjuk az Edit ablakban lévő szöveggel.
Az ablak a felhelyezett és méretre igazított komponensekkel: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./9. Az ablak a felhelyezett és méretre igazított komponensekkel: 9. Adjunk értéket a felirat (Caption) jellemzőnek a Form1, Label1, Label2, Label3, GroupBox1, GroupBox2, Groupbox3, Button1, Button2 és Button3 komponensek esetében.
10. Nevezzük át a következő komponensek Name jellemzőjét: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./10. 10. Nevezzük át a következő komponensek Name jellemzőjét: Label2 -> LabelMod Label3 -> LabelUj GroupBox1 -> GroupBoxKozpont GroupBox2 -> GroupBoxSzerelde GroupBox3 -> GroupBoxNaplo ListBox1 -> ListBoxKozpont ListBox2 -> ListBoxSzerelde Memo1 -> MemoNaplo ComboBox1 -> ComboBoxMod Edit1 -> EditUj Button1 -> ButtonHozzaad Button2 -> ButtonSzallitas Button3 -> ButtonFelhasznalas értékekre! 11. Állítsuk a form keret stílusát (BorderStyle) párbeszédablak értékre (bsDialog) ! 12. Változtassuk meg a Label1 felirat betűformáját (Font) félkövér, 10 méretre és igazítsuk középre egérrel.
13. ComboBoxMod Text jellemzőjének értékét írjuk át Normál-ra! Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./11. 13. ComboBoxMod Text jellemzőjének értékét írjuk át Normál-ra! 14. EditUj egysoros szövegszerkesztő Text jellemzőjének értékét töröljük ki. 15. A ListBoxKozpont és a ListBoxSzerelde listavezérlőknél engedélyezzük a több bejegyzés kiválasztását, legyen a MultiSelect és az ExtendedSelect jellemzők értéke egyaránt true! 16. Töröljük a MemoNaplo többsoros szövegszerkesztőből a nevét, ehhez kattintsunk duplán a Lines jellemző sorá- ban lévő gombon és a megjelenő String List Editor-ban töröljük a szöveget! 17. Mivel ez a MemoNaplo szövegszerkesztő most csak a naplózott adatok megjelenítését fogja szolgálni, a szerkesztési lehetőséget tiltsuk le a ReadOnly jellemző true értékre állításával! 18. Éppenséggel a MemoNaplo szöveges vezérlő tartalma a billentyűzettel is görgethető, de egérrel történő kezelésre gondolva kapcsoljuk be a függőle- ges görgetőlecet is a ScrollBar jellemző ssVertical értékre állításával! 19. Mivel az eseményeket egy szöveges tárolóban naplózni kívánjuk, melyben az eseményeket sorszámmal azonosítjuk, ezért definiáljunk egy kinullázott memoszamlalo nevű változót a unit1.cpp fájl elején a TForm1 *Form1; sor után: int memoszamlalo = 0;
20. Hozzuk létre a Hozzáad nyomógombon való kattintás eseménykezelő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./12. 20. Hozzuk létre a Hozzáad nyomógombon való kattintás eseménykezelő függvényének vázát a gombon végzett dupla kattintással! Az eredmény: void __fastcall TForm1::ButtonHozzaadClick(TObject *Sender) { } 21. Írjuk bele a függvény blokkjába az EditUj egysoros szövegszerkesztő tartalmát a ListBoxKozpont listavezérlő végéhez hozzáfűző programkódot, valamint naplózzuk az eseményt a MemoNaplo többsoros kijelzőben! { AnsiString s; if (EditUj->Text.Length() > 0) // van valami beírva { ListBoxKozpont->Items->Add(EditUj->Text); // hozzáadás a listához //Naplózás: memoszamlalo++; s= memoszamlalo; // operator=( ) működik! s += ". Új tétel hozzáadása a Központi raktár állományához: "; s += EditUj->Text; MemoNaplo->Lines->Add(s); // a naplót most soronként kezeljük
void __fastcall TForm1::ButtonSzallitasClick(TObject *Sender) Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./13. 22. Hozzuk létre a Szállítás nyomógomb eseménykezelő függvényének vázát a gombon duplán kattintva, majd írjuk bele a kiválasztott tételek átmásolását elvégző és az egyes bejegyzések átszállítását naplózó programsorokat: void __fastcall TForm1::ButtonSzallitasClick(TObject *Sender) { AnsiString s; for (int i=0; i < ListBoxKozpont->Items->Count; i++) if ( ListBoxKozpont->Selected[ i ] ) { ListBoxSzerelde->Items->Add(ListBoxKozpont->Items->Strings[ i ] ); //Naplózás: memoszamlalo++; s= memoszamlalo; s+= ". Tétel átszállítása a Központi raktárból a Szerelde raktárába: "; s+= ListBoxKozpont->Items->Strings[ i ]; MemoNaplo->Lines->Add(s); } // Átszállított elem törlése a Központi raktárból. // Nem törölhettük fent, mert elrontaná az indexeket és elemszámot, // vagy nem a felsőt szállítaná át először... for (int i = ListBoxKozpont->Items->Count-1; i >= 0; i--) if (ListBoxKozpont->Selected[ i ]) ListBoxKozpont->Items->Delete( i );
23. Hozzuk létre a Felhasználás nyomógomb eseménykezelő függvényének Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./14. 23. Hozzuk létre a Felhasználás nyomógomb eseménykezelő függvényének vázát a gombon duplán kattintva, majd írjuk bele a kiválasztott tételek felhasználásra való kivételezését, azaz a listából való kitörlését és ezen esemény naplózását elvégző programkódot: void __fastcall TForm1::ButtonFelhasznalasClick(TObject *Sender) { AnsiString s; for ( int i = ListBoxSzerelde->Items->Count-1; i >= 0; i--) if ( ListBoxSzerelde->Selected[ i ] ) { //Naplózás: memoszamlalo++; s= memoszamlalo; s += ". Tétel felhasználása a Szerelde raktárából: "; s += ListBoxSzerelde->Items->Strings[ i ]; MemoNaplo->Lines->Add(s); //Törlés: ListBoxSzerelde->Items->Delete( i ); }
listát szeretnénk rendezett, vagy normál módban történő megjelenítésre Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./15. 24. A lenyitható listájú ComboBoxMod komponenssel a Központi és a Szereldei listát szeretnénk rendezett, vagy normál módban történő megjelenítésre beállítani. Ehhez a ComboBoxMod komponens Items jellemzőjét töltsük fel a lenyíló menüben megjeleníteni kívánt Normál és Rendezett szövegekkel: 25. Végül írjuk meg a ComboBoxMod lenyíló listán történő rendezési mód választáshoz az alkatrészlisták rendezett, vagy rendezetlen megjelenítését beállító Sorted jellemzőknek történő értékadások programkódját a ComboBoxMod komponens OnChange( ) eseménykezelő függvényében. Ez a függvény a kombinált lista egysoros szövegszerkesztőjének tartalmában bekövetkező módosuláskor hívódik meg. A vázát a kombinált listán való dupla kattintással hozhatjuk létre. A függvényt a beleírt programrészlettel a következő lapon láthatjuk.
A ComboBoxMode komponens OnChange() eseménykezelő függvénye: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./16. A ComboBoxMode komponens OnChange() eseménykezelő függvénye: void __fastcall TForm1::ComboBoxModChange(TObject *Sender) { if ( ComboBoxMod->Text == "Normál” ) { ListBoxKozpont->Sorted= false; ListBoxSzerelde->Sorted= false; } else { ListBoxKozpont->Sorted= true; ListBoxSzerelde->Sorted= true; Természetesen a program még tovább finomítható, pl. az új bejegyzés felvétele történhetne az Enter billentyű lenyomására is. A program futás közbeni ablakára egy példát a következő oldal ad.
A raktárkészlet nyilvántartó program futás közben: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./17. A raktárkészlet nyilvántartó program futás közben: