Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

LA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./0. lÁbrás nyomógomb (BitBtn) és Kép (Image)

Hasonló előadás


Az előadások a következő témára: "LA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./0. lÁbrás nyomógomb (BitBtn) és Kép (Image)"— Előadás másolata:

1 lA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./0. lÁbrás nyomógomb (BitBtn) és Kép (Image) komponensek lRajzolás a Canvas objektum segítségével lGeometriai alakzat komponensek (Shape) lMintaprogram rajzolásra Képek, rajzok alkalmazása

2 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./1. Az alakzat komponensek elsősorban az alkalmazás megjelenésének színe- sítésére használhatók, illetve egysze- rűbb geometrikus ábrák építhetők be- lőlük. Előnyük, hogy vezérlőként mű- ködnek, azaz egéresemények rendel- hetők hozzájuk, és felbukkanó (popup) menü is. Legfontosabb jellemzőik: Shape: az alakzat formája, lásd ábrát. Brush: ecset, azaz kitöltés jellemzői: színe: Color, mintája: Style, vagy rajzolata: Bitmap. Pen: toll, azaz körvonal jellemzői: színe: Color, mintája: Style, vastagsága: Width. Természetesen fontos jellemzők a szélesség: Width, magasság: Height, vízszintes és függőleges pozíció: Left, Top adatok is. lGeometriai alakzat komponensek (Shape)

3 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./2. lÁbrás nyomógomb (BitBtn) és Kép komponensek (Image) Gyakran alkalmazzuk a TBitBtn nyomógomb komponenst, amelyre előzete- sen definiált, vagy általunk megadott ábrát he- lyezhetünk el. Jól ismert formái az OK és Cancel nyomógombok. A bitképet a Glyph jellemzőbe kell betöltenünk. A kép (Image) komponens egy téglalapalakú bitkép, amely- et az alkalmazás ablakában vagy egyes vezérlőin elhelyezhetünk. Egyik jellemzője a Canvas, ezáltal a bitképre még programból tovább rajzolhatunk. Az ábrázolt képet a Picture jellemzőbe tölt- hetjük be,.bmp,.ico,.jpg,.jpeg,.emf,.wmf formátumban. Ha azt akarjuk, hogy a kép a méretezőkeretet mindenkor kitöltse, a Strech jellemzőjét true értékre kell állítani. Nagyméretű képek- nél, különösen, ha mozgatni is akarjuk a programban, célszerű az IncrementalDisplay jellemzőjét true értékre állítani, így nem kell megvárni a teljes kirajzolódását. A Transparent (átlátszó) jellem- ző true értéke mellett a kép háttere beleolvad a hordozó felületbe. Egymást részben takaró képek sorrendje a BringToFront() és SendToBack() metódusokkal módosítható.

4 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./3. A más programozási környezetekben megszokott grafikus rajzolási lehetőségeket a TCanvas osztály egyedein keresztül érhetjük el. Ez a TGraphicControl osztályban jelenik meg először az öröklési fán, tehát a leszármazottakban mind megtalálható. Ilyen, TCanvas adattaggal bíró komponens osztályok a TForm, a TPrinter, a TPaintBox, a TShape, a TBitBtn nyomógomb, a TLabel címke és a TImage ábra, tehát ezek egyedeire rajzolhatunk, kitöltött alakzatokat festhetünk, szövegeket tehetünk ki rájuk a hozzájuk kötött koordinátarendszerben. A Canvas legfontosabb jellemzői:  Karakterjellemzők (Font),  Vonalalakzatok rajzolási jellemzői (Pen),  Kitöltés, kifestés jellemzői (Brush),  Pontok rajzolási jellemzői (Pixels). A metódusok a jellemzőkhöz szorosan kapcsolódnak és elsősorban  vonalalakzatokat és  kitöltött alakzatokat rajzolnak. A TColor típusú elemekből álló Pixels tömb Pixels[X][Y] eleme írható, olvasható: Pixels[10][22] = clRed; szin= Pixels[12][24] ; lRajzolás a Canvas objektum segítségével X Y

5 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./4. Szöveg elhelyezése a rajzfelületen A grafikus ábrák részeként kirajzolt szövegek nem tévesztendők össze a címkékkel (Label), melyekhez események is köthetők és önálló életet élnek a hordozó form-on, panelon. Szöveget a rajzfelületre a Canvas->TextOut(X,Y,”Szöveg”); metódushívással helyezhetünk el. A szövegmező bal felső sarka kerül a megadott koordinátákra. A szöveg pozicionálásához segítségünkre lehet a szövegmező szélességét és magasságát megadó sz= Canvas->TextWidth("Szöveg"); m= Canvas->TextHeight("Szöveg"); int értéket adó metóduspáros. A kiíródó szöveg formátumát a Canvas->Font jellemző tulajdonságai határozzák meg, ezek a karakterkészlet, karakterméret, -szín, -stílus

6 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./5. Vonalalakzatok rajzolása a rajzfelületen A rajzoláshoz a Canvas->Pen jellemzővel állíthatjuk be a vonal tulajdonságait. Ezek a szín (Color), rajzolási mód (Mode), stílus (Style) és vastagság (Width). A mód a háttérszín és a vonalszín egymásrahatásának mikéntjét határozza meg, a stílus pedig azt, hogy a vonal folytonos, szaggatott, vagy egyéb mintázatú legyen. A vonalalakzatok rajzolását végző metódusok közül a fontosabbak: Canvas->LineTo(X,Y); // vonalat húz az aktuális pontból az (X,Y) pontba Canvas->Arc(X1,Y1, X2,Y2, X3,Y3, X4,Y4); //ellipszisívet rajzol A grafikus kurzor, azaz a toll hegyének pozicionálására a Canvas->MoveTo(X,Y); metódus szolgál. Megemlítjük, hogy törtvonal és szplájngörbe rajzolására is vannak metódusok. (X1,Y1) (X2,Y2) (X3,Y3) (X4,Y4)

7 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./6. Kitöltött alakzatok rajzolása A kitöltött alakzatok kontúrja a toll (Pen) jellemzőben beállított vonallal készül, míg a belső rész kifestése az ecset (Brush) jellemzőben megadottakkal. Ezek a következők: a kifestés színe (Color) és stílusa (Style). A stílus bsClear értéke üresen hagyja a ki- festendő területet, csak kontúrt rajzol, bsSolid érték esetén sima kitöltést végez, a többi konstanssal sraf- fozott és rácsozott kitöltéseket kapunk. Ezen stílusok helyett a kitöltés végezhető egy előre megadott bit- map mintázattal is. A kitöltött alakzatok rajzolását végző metódusok közül a legfontosabbak: Canvas->Rectangle(X1,Y1,X2,Y2); // a két pont lesz a téglalap átlója Canvas->Ellipse(X1,Y1,X2,Y2); // a két pont által kifeszített téglalapban elhelyezkedő ellipszist rajzolja. Canvas->Pie(X1,Y1, X2,Y2, X3,Y3, X4,Y4); // az Arc-nak megfelelő paraméterezéssel létrehozott ellipszisszektort rajzolja. Canvas->FloodFill(X,Y, szín, kitöltési_stílus); // szín színű zárt görbét az X,Y belső pontból kiindulva kifesti a kitöltési_stílusnak megfelelő mintával.

8 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./7. Feladat: A form Canvas jellemzője segítségével készítsünk egy egyszerű ábrát amely bemutatja a legfontosabb rajzolási eszközöket. A futó program képe az alábbi képnek megfelelő legyen! A színek és az egyenesek vonalvastagsága véletlenszerű legyen és egérkattintásra változzon meg. Az ablak legyen átméretezhető! lMintaprogram rajzolásra

9 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./8. Megoldás: 1. A korábbiakban ismertetett módon hozzunk létre egy új alkalmazást és mentsük le Rajz.prj néven. 2. Írjuk át a form feliratát (Caption) ” Rajzolás a Canvas objektummal” szövegre! 3. Mivel a most alkalmazott Canvas nem vizuális komponens, hanem az induló form egyik jellemzője, adattagja, mely maga is objektum, a programozás nagyrésze a form-hoz tartozó Unit1.cpp állományba történő programbeírást jelenti. Elsőként inicializáljuk a véletlenszám generátort a randomize(); függvénynek a form konstruktorában való meghívásával! __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { randomize(); }

10 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./9. 4. Mivel a form első megjelenítésére és utána a formon történő bármely egérkattintásra is ki kell rajzolni a teljes rajzot, ezért a rárajzolási műveleteket fűzzük hozzá a form megjelenítéséhez, amikor is OnPaint esemény következik be. Tehát hozzuk létre az OnPaint() eseményke- zelő függvényt és írjuk bele a szükséges programkódot. Ezt az esemény- kezelőt meg tudjuk majd hívni a form újrarajzolását kérő Repaint() metódushívással az egérkattintás OnClick() eseménykezelőjében. Az OnPaint() eseménykezelő programba illesztéséhez a form aktívvá tétele mellett válasszuk ki az OnPaint eseményt az Object Inspector Events lapjáról és kattintsunk duplán a sorában! A megjelenő eseménykezelőbe írjuk be a rajzoló programrészletet az alábbiaknak megfelelően: void __fastcall TForm1::FormPaint(TObject *Sender) { int R; //További rajzolások a form megjelenítése (megrajzolása) után: Canvas->Brush->Color = clWhite; // fehér kifestőszínt állít be Canvas->FillRect(ClientRect); // fehérre törli a hátteret // folytatódik

11 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./10. for ( int i=10; i>=1; i--) // 10 db szakaszt, kört és ellipszist rajzolunk { Canvas->Pen->Color = (Graphics::TColor) random(65535); Canvas->Pen->Width = random(7); // a vonalvastagság is változó Canvas->MoveTo(0,0); // de csak a szakaszoknál Canvas->LineTo((ClientWidth / 10.0) *i, ClientHeight); Canvas->Pen->Width = 1; // körhöz és ellipszishez R= ((ClientHeight)/4)/10*i; // a kör sugara ciklusonként változik Canvas->Pen->Color = (Graphics::TColor) random(65535); Canvas->Brush->Color = (Graphics::TColor) random(65535); // Canvas->Brush->Style=bsClear; // üres körökhöz ez kellene Canvas->Ellipse(ClientWidth-R-R,ClientHeight/2-R, ClientWidth,ClientHeight/2+R); // kör Canvas->Brush->Color = (Graphics::TColor) random(65535); int RV= 2*R; // Canvas->Brush->Style=bsClear; //üres ellipszishez kellene Canvas->Ellipse(ClientWidth/2-RV,0, ClientWidth/2+RV,ClientHeight/4); // ellipszis } // folytatódik

12 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./11. Canvas->Font->Size= ClientHeight/16; //karakterméret Canvas->TextOut(ClientWidth/2 - Canvas->TextWidth("Szöveg")/2, ClientHeight/3.5, "Szöveg” ); } 5. Próbáljuk ki a programot! Működik, a rajz megfelelő, de egérre nem reagál és az átméretezett ablakban elromlik az ábra. Hozzunk létre egy OnResize() eseménykezelő függvényt, amely az ablak méretének megváltozásakor hívódik meg, és rajzoltassuk benne újra az ablak tartalmát egy Repaint(); metódushívással kiváltva az OnPaint eseményt, azaz az OnPaint() eseménykezelő meghívását és a benne megadott rajzoló utasítások végrehajtását! void __fastcall TForm1::FormResize(TObject *Sender) { // Átméretezett ablakban újra kell a rajzot rajzolni: Form1->Repaint(); }

13 Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./ Már jól kezeli az átméretezést a program, hiszen az újrarajzolásnál most már a megváltozott ablak munkaterületének (Client) méretéből indul ki Már csak egy feladat maradt hátra: a form-on történő egérkattintásra rajzolja újra az ábrát a program, hogy élvezhessük a véletlenszerű színek megadá- sából eredő színváltozásokat! Ehhez hozzuk létre a form OnClick() eseménykezelőjét az Events lapon az OnClick esemény sorában duplán kattintva! Majd írjuk bele a Repaint(); metódushívást! void __fastcall TForm1::FormClick(TObject *Sender) { //Egérkattintásra újrarajzolunk mindent, de már más véletlen színekkel: Form1->Repaint(); } 7. Futtassuk a programot újra és kattintgassunk az ablakban, hogy megváltozott színekkel jelenjen meg a rajz újra!


Letölteni ppt "LA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 27./0. lÁbrás nyomógomb (BitBtn) és Kép (Image)"

Hasonló előadás


Google Hirdetések