A C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./0. A C++ programozás Windows környezetben Pozícióbeállító és kijelző vezérlők a programban Görgetőléc (ScrollBar) vezérlő Csúszka (TrackBar) vezérlő Folyamatállás kijelző (ProgressBar) vezérlő Léptető (UpDown) vezérlő Mintaprogram pozícióbeállító és kijelző vezérlőkkel
Görgetőléc (ScrollBar) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./1. Görgetőléc (ScrollBar) vezérlő A görgetőléc szolgál az ablakban teljesen el nem férő ablaktartalmak begörgetésére az ablakba. Részei a tolóka, a léc és a léptetőgombok. A görgetőléc egérrel és billentyűzettel egyaránt kezelhető, ilyen eseménykeze- lő függvényei vannak. A Kind jellemző értékétől függően függőleges és vízszintes helyzetű lehet. A programban a görgetendő tartalom mozgásintervallumát a csúszka mozgástartományára kell leképezni a Min és a Max jellemzők értékének megadásával. A görgető gombokat használva a tolóka a SmallChange értéknek megfelelő lépésekkel mozog. Ha lapozunk, azaz a gombok és a tolóka között kattintunk, vagy a PgUp,PgDn gombokkal görgetünk, akkor a LargeChange lépésnagy-sággal mozog. A tolóka aktuális pozíciójának értéke a Position jellemzővel olvasható, írható. A tolóka helyének megváltozásakor OnChange esemény történik, melynek eseménykezelőjét a komponensen duplán kattintva hozhatjuk létre. Ez az esemény mind egérrel, mind billentyűzettel, mind programból megváltoztatott csúszkahelyzetnél bekövetkezik. A függvényben elvégezhetjük a mozgatandó tartalom helyének megváltoztatását.
Csúszka (TrackBar) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./2. Természetesen a tolóka mozgatásával bevitt folytonosan változó értéket más célra is használhatjuk, pl. egy tárgy forgatására, mozgások lejátszására. A görgetőléc egy belső timer-rel, szaggatóval működik. A Min, Max és a Position jellemzők egy lépésben is megadhatók a SetParams metódus hívásával. A csúszka pozíciójára, illetve a görgetési tevékenység mikéntjére vonatkozó információkat kaphatunk az OnScroll eseménykezelő függvény használatával. Csúszka (TrackBar) vezérlő A lineáris műszerskálára emlékeztető vezérlő egy inter- vallumon belül változó érték nyomonkövetésére, vagy megváltoztatására használható. Legfontosabb jellemző- je a görgetőléchez hasonlóan a mutató alakú tolóka helyzete, melyet a Position jellemzővel írhatunk, olvas- hatunk. Az Orientation vízszintes és függőleges lehet. A skálázás tartományát adhatjuk meg a Min és Max jellemzőkkel, melyeken belül megadhatunk egy vizuálisan kiemelt résztarto-mányt a SelStart és a SelEnd jellemzőkkel. A TikMarks jellemzővel a skálázás oldalát adhatjuk meg, a TickStyle jellemzővel pedig a stílusát. A Frequency jellemzővel a skála sűrűsége állítható.
Folyamatállás kijelző (ProgressBar) vezérlő Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./3. Folyamatállás kijelző (ProgressBar) vezérlő A folyamatállás kijelző elsősorban időben zajló folyamatok állásának, előrehaladásának kijelzésére alkalmas. Leg- fontosabb jellemzője a Position, mely a Min és Max vég- értékek közötti értéket vehet fel, leolvasható és módosít- ható. A Step jellemzőnek megfelelő értékű újabb szeg- mens a StepIt( ) metódus hatására jelenik meg. Tetsző- leges lépéssel növelhetjük a Position tartalmát a StepBy metódussal. A Smooth jellemzővel folytonos csík, vagy szegmenses forma között választhatunk. Léptető (UpDown) vezérlő A léptető egész változó értékének az Increment jellemző- ben megadott értékkel való növelésére, csökkentésére al- kalmas. Egysoros szövegszerkesztővel egybeépítve (lásd Associate jellemző) a szám beírható, de a gombokkal léptethető is. Az értéket a Position jellemző tárolja, mely programból is írható, olvasható. Értéke a Min és Max jellemzők értéke közé eshet. Legfontosabb eseménye az OnClick, mely megadja, hogy melyik gombot nyomták le. Irányát az Orientation jellemző határozza meg.
Mintaprogram pozícióbeállító és kijelző vezérlőkkel Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./4. Mintaprogram pozícióbeállító és kijelző vezérlőkkel Feladat: készítsük el az alábbi ablakkal jellemezhető C++ Builder programot!
egy frissen megnyitott üres alkalmazást. Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./5. A programban a Korong a görgetőléccel, a csúszka vezérlővel, vagy a léptetővel gurítható jobbra, balra. A Csúszka a fehér Pötty közepének mindenkori magasságát jelzi, a görgetőléc tolókája a kerék helyével együtt mozog, miközben a folyamatállás kijelző a program indításától eltelt időt méri. Megoldás: 1. Hozzunk létre egy új könyvtárat és mentsünk le bele Csuszka.prj néven egy frissen megnyitott üres alkalmazást. 2. Helyezzük el a szükséges vezérlőket a form-on, méretezzük és pozicio- náljuk a megadott ábrának megfelelően. A form-ra egy Timer komponens is felkerül, melynek feladata 5 másodpercenként meghívni az OnTimer eseménykezelő függvényét és abban léptetni a folyamatállás kijelzőt. A Korong és a Potty TShape komponensek, melyeknek Shape jellemzője stEllipse értékű. A Korong Brush (ecset) jellemzőjének Color tulajdon- ságát clRed-re állítottuk. A fekete alap egy Shape = stRectangle értékű TShape komponens.
A form a komponensek felrakása után: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./6. A form a komponensek felrakása után:
3. A TrackBar Orientation jellemzőjét trVertical értékre kell átírni. Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./7. 3. A TrackBar Orientation jellemzőjét trVertical értékre kell átírni. 4. Szükségünk lesz néhány globális változóra, definiáljuk ezeket a TForm1 *Form1 sor után: int pozicio,Dx,Dy,dx,dy,R,r; double szog; A pozicio a mozgás paraméterváltozója, 0-314 intervallumban vehet fel értékeket. Értéke megfelel a Korong által megtett útnak, mivel a Korong R sugara éppen 100. 5. A számításokhoz szükségünk van a sin, cos, acos függvényekre, melyek a math.h headerfájlban vannak deklarálva. Szúrjuk be ezt a Unit1.h include sor alá: #include "math.h” 6. A form BorderStyle értéke bsDialog. Edit1 ReadOnly jellemzője true. 7. A többi felirat (Caption) értelemszerű megadása mellett a form-nál is írjuk át : Görgetőléc, csúszka és folyamatállás kijelző demonstrációs program-ra.
__fastcall TForm1::TForm1(TComponent* Owner) Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./8. 8. Az ablakbeli főcím font értékét válasszuk 10-es félkövérre. 9. Nevezzünk át néhány komponenst (az Alap-ot raktuk fel utoljára): Shape1 --> ShapeKorong Shape2 --> ShapePotty Shape3 --> ShapeAlap. 10. Bár ezek nagy részét az Object Inspector-ban is beállíthattuk volna, most a form konstruktorában adjuk meg az inicializáló értékeket: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Dx= 113; Dy= 120; //eltolás az ablak sarkához képest dx= 201; dy= 208; //piros induló közép-r; Dx+R-r; Dy+R-r R= 100; r= 12; //sugarak UpDown1->Position= 157; UpDown1->Min= 0; UpDown1->Max= 314; // folytatódik Dx, Dy dx,dy
ScrollBar1->SetParams(157,1,314); Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./9. ScrollBar1->SetParams(157,1,314); ScrollBar1->SmallChange = 1; // finom lépésköz ScrollBar1->LargeChange = 10; // nagy lépésköz TrackBar1->Position=100; TrackBar1->Min= 0; TrackBar1->Max= 200; // csak kijelzéshez TrackBar1->SelStart= r; TrackBar1->SelEnd= 2*R-r; TrackBar1->PageSize= 4; TrackBar1->Frequency= 4; ProgressBar1->Min= 0; ProgressBar1->Max= 600; // 5 perc (600/10 * 5mp) ProgressBar1->Width= 600; // 2 képpont a rajzon == 1 mp ProgressBar1->Step= 10; // egy lépés ==10 képpont== 5 mp ProgressBar1->Position= 0; Timer1->Interval=5000; //5 mp Timer1->Enabled= true; // a programmal együtt indul }
11. A legfontosabb függvény a görgetőléc pozícióváltozására reagáló Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./10. 11. A legfontosabb függvény a görgetőléc pozícióváltozására reagáló OnChange() eseménykezelő: void __fastcall TForm1::ScrollBar1Change(TObject *Sender) { //Görgetőléc pozíció kiolvasása: pozicio= ScrollBar1->Position; Edit1->Text= pozicio; // kiíratás, operator=() működik //Korong pozicionálása: ShapeKorong->Left= Dx+pozicio; //csak csúszik valójában... //Pötty pozicionálása: a Korong négyzetén belül szog= (double)pozicio/R; ShapePotty->Left= dx+pozicio-(int)(R-r)*sin(szog); ShapePotty->Top= dy+(int)(R-r)*cos(szog); TrackBar1->Position= R+(int)(R-r)*cos(szog); // csúszka } A Korong forgását a Potty mozgása érzékelteti. Itt állítjuk a csúszkát is a fehér Potty közepének magasságára.
eseménykezelő függvényét: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./11. 12. A Timer 5 másodpercenként “felüti a fejét” és meghívja az OnTimer() eseménykezelő függvényét: void __fastcall TForm1::Timer1Timer(TObject *Sender) { ProgressBar1->StepIt(); // lépteti a folyamatállás kijelzőt } 13. A Léptető valamelyik gombján kattintva meghívódik a Léptető OnClick() eseménykezelő függvénye, mely a gomb függvényében inkrementálja, vagy dekrementálja a mozgásparaméter pozicio változó értékét: void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button) if (Button == btNext) pozicio++; else pozicio--; ScrollBar1->Position= pozicio; // kiváltja az összes tevékenységet! // mert OnChange eseményt jelent a görgetőlécnél!
fel-le egérrel és ennek hatására kell minden másnak működnie: Korong, Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 26./12. 14. Végül azt az esetet programozzuk, amikor a csúszka vezérlőt mozgatjuk fel-le egérrel és ennek hatására kell minden másnak működnie: Korong, Potty, görgetőléc, Edit1 számkijelző. A csúszka (TrackBar) magassági helyzetét átszámítjuk pozício-értékre és ezzel aktivizáljuk a mindentudó OnChange függvényét a görgetőlécnek (ScrollBar1). void __fastcall TForm1::TrackBar1Change(TObject *Sender) {int sv; sv= TrackBar1->Position; if (sv<12) sv=12; if (sv>188) sv=188; szog= acos((double)(sv-R)/(R-r)); pozicio= (int)(R*szog); ScrollBar1->Position=pozicio; // kiváltja az összes tevékenységet } 15. A program gyönyörűen működik, bár még tökéletesíthető. Pl. nem állítottuk le a Timer-t, rábíztuk az alkalmazásra, az Edit1 ablakba nem lehet beírni és ily módon pozicionálni a Korongot, billentyűzettel nem vizsgáltuk a programot,stb.