A C++ programozás Windows környezetben Képek, rajzok alkalmazása

Slides:



Advertisements
Hasonló előadás
Körlevél. Körlevél alapok: Körlevél: sok címzettnek közel azonos tartalmú üzenet! (Pl: Felvételi értesítő) 3 részből áll: 1. Adatok /címlista 2. Levétörzs/szövegtörzs.
Advertisements

A digitális kép bevezetés. A digitális kép tulajdonságai 1. Egyszerű Windows Intéző nézet És még: IrfanView (társított alkalmazás), KB („nagy”
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)
LA C++ programozás Windows környezetben Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 28./0. lOpenPictureDialog és SavePictureDialog.
Informatikai rendszerek általános jellemzői 1.Hierarchikus felépítés Rendszer → alrendszer->... → egyedi komponens 2.Az elemi komponensek halmaza absztrakciófüggő.
Microsoft Photo Story. Mi is ez?  A Microsoft Photo Story egy alkalmazás, amelyet a Microsoft, a világ egyik legnagyobb szoftvergyártó cége készített.
avagy a háromszög technika
Neumann János Informatikai Kar
Fájlkezelés.
Munkalapok védelme az Excelben
Számítógépes szimuláció
Operációs rendszerek.
Térkép készítése adataiból
Logo Országos Számítástechnikai Tanulmányi Verseny
A C++ programozás Windows környezetben
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
Becslés gyakorlat november 3.
A C++ programozás Windows környezetben
A színkezelés alapjai a GIMP programban
Komplex természettudomány 9.évfolyam
Montázs készítése.
Scilab programozás alapjai
A MIMIO interaktív tábla használata
Programozás III. Gyakorlás.
Lineáris függvények.
A KINOVEA mozgáselemző rendszer használata
LabVIEW bevezetéstől a feszültség-áram karakterisztikáig Vida Andrea
A Széll Kálmán tér irányú vágánnyal létesít közvetlen kapcsolatot b.)
Az Országos Egészségfejlesztési Intézet fejlesztési projektjei az iskolai egészségfejlesztés területén DR. TÖRÖK KRISZTINA.
Végeselemes modellezés matematikai alapjai
A mozgási elektromágneses indukció
Programozás III. Ismétlés (Grafikai lehetőségek WPF-ben)
PowerPoint 7. Évfolyam Formázások.
Animációk.
Munka és Energia Műszaki fizika alapjai Dr. Giczi Ferenc
Adatbázis-kezelés (PL/SQL)
KATRIN 2D DWG SZIMBÓLUMOK ÉS GDL KÖNYVTÁR
Tárgyak műszaki ábrázolása Metszeti ábrázolás
Ez a címdia 1. szövegdoboza
2. Bevezetés A programozásba
Közigazgatási alapvizsga a Probono rendszerben
Grosz imre f. doc. Kombinációs hálózatok /43 kép
A Széll Kálmán tér irányú vágánnyal létesít közvetlen kapcsolatot b.)
STRUKTURÁLT SERVEZETEK: funkció, teljesítmény és megbízhatóság
3. A robot képernyőmenüje
Monitor(LCD).
Tilk Bence Konzulens: Dr. Horváth Gábor
A C++ programozás Windows környezetben
Aritmetikai kifejezések lengyelformára hozása
Informatikai gyakorlatok 11. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Northwind Traders Kik vagyunk?
A Microsoft SharePoint testreszabása Online webhely
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
Webszerkesztés Webszerkesztés.
Vasbeton falvasalás megadása és ellenőrzése EC2 szerint
További rendező és kereső algoritmusok
Vállalati brosúra A cég általános célkitűzése
Erasmus+ hallgatói mobilitásra jelentkezéshez
Matematika II. 5. előadás Geodézia szakmérnöki szak 2015/2016. tanév
Tájékoztató az EPER pályázati folyamatáról
Áramlástan mérés beszámoló előadás
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Access alapok Táblák, kapcsolatok, űrlapok.
A geometriai transzformációk
Erasmus+ hallgatói mobilitásra jelentkezéshez
Algoritmusok.
Kód tördelése és a megjelenés
Hagyományos megjelenítés
OpenBoard Kezelő Tananyag közzététele a KRÉTA rendszerben.
Előadás másolata:

A C++ programozás Windows környezetben Képek, rajzok alkalmazása Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./0. A C++ programozás Windows környezetben Képek, rajzok alkalmazása Geometriai alakzat komponensek (Shape) Ábrás nyomógomb (BitBtn) és Kép (Image) komponensek Rajzolás a Canvas objektum segítségével Mintaprogram rajzolásra

Geometriai alakzat komponensek (Shape) Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./1. Geometriai alakzat komponensek (Shape) 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.

Ábrás nyomógomb (BitBtn) és Kép komponensek (Image) Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./2. Á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ó.

Rajzolás a Canvas objektum segítségével Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./3. Rajzolás a Canvas objektum segítségével 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] ; X Y

Szöveg elhelyezése a rajzfelületen Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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

Vonalalakzatok rajzolása a rajzfelületen Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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)

Kitöltött alakzatok rajzolása Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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.

Mintaprogram rajzolásra Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./7. Mintaprogram rajzolásra 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 ábrának 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ő!

mentsük le Rajz.prj néven. Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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(); }

4. Mivel a form első megjelenítésére és utána a formon történő bármely Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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

Canvas->Pen->Color = (Graphics::TColor) random(65535); Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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 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

Canvas->Font->Size= ClientHeight/16; //karakterméret Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./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();

már a megváltozott ablak munkaterületének (Client) méretéből indul ki Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA II. dr.Dudás László 38./12. 6. 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!