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)

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

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.
A C++ programozási nyelv
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)
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
A C++ programozás Windows környezetben Képek, rajzok alkalmazása
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.
Ez az előadás alcíme vagy a tárgy neve vagy a konferencia neve
Vasbeton falvasalás megadása és ellenőrzése EC2 szerint
További rendező és kereső algoritmusok
A szállítási probléma.
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.
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:

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

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)

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ó.

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

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

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)

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.

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

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(); }

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

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

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(); }

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!