Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet



Hasonló dokumentumok
Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Access adatbázis elérése OLE DB-n keresztül

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Vizuális programozás gyakorlat

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Entity Framework alapú adatbáziselérés

Johanyák Zsolt Csaba: XML Webszolgáltatás alapú osztott alkalmazás fejlesztése (Mandelbrot halmaz számítás) oktatási segédlet

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

A Windows az összetartozó adatokat (fájlokat) mappákban (könyvtárakban) tárolja. A mappák egymásba ágyazottak.

Vizuális programozás gyakorlat

1. ábra Fájl feltöltése 2. ábra Megtekintés

Eseménykezelés - Lottó játék

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Szoftvertechnolo gia gyakorlat

BME MOGI Gépészeti informatika 7.

Entity Framework alapú adatbáziselérés 2

RAJZ1. vezetett gyakorlat

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Vizuális, eseményvezérelt programozás I.

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

munkafüzet open eseményéhez

Programozási technológia

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

A Java nyelv. Dialógus ablakok. Elek Tibor

Programozás 2., II. kötet Windows form alkalmazások

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Webshop készítése ASP.NET 3.5 ben I.

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

3. Osztályok II. Programozás II

Ugráló gomb oktatási segédlet Ugráló gomb

Szoftvertechnolo gia 7. gyakorlat


Entity Framework alapú adatbáziselérés

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Tájékoztató. Használható segédeszköz: -

Kalapácsvetés 2016 szöveges

Java Programozás 11. Ea: MVC modell

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Windows mappaműveletek

Eseményvezérelt alkalmazások

Ablak és ablakműveletek

Thermo1 Graph. Felhasználói segédlet

9. óra operációs rendszerek. Grafikus operációs rendszer

kommunikáció Megoldások

A program telepítése

KATRO-FL rendszer 4CH MOBIL DVR. PC-s visszatekintő program használati utasítása

Swing GUI készítése NetBeans IDE segítségével

OPERÁCIÓS RENDSZER MODUL KÉRDÉSEI ÉS VÁLASZAI WIN7

Munka a fájlokkal. Az általánosan használt fájltípusok. Programfájlok. Adatfájlok

1. A NÉPESSÉGNYILVÁNTARTÓ PROGRAM TELEPÍTÉSI FELTÉTELE. A

Oktatási segédanyag. Weboldalszerkesztési gyakorlatok

Merevlemez üzembe helyezése, particionálása

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

1. kép. A Stílus beállítása; új színskála megadása.

SZE INFORMATIKAI KÉPZÉS 1

(ArcCatalog, ArcMap)

BME MOGI Gépészeti informatika 6.

Programozás II. ATM példa Dr. Iványi Péter

Diagram létrehozása. 1. ábra Minta a diagramkészítéshez

HVK Adminisztrátori használati útmutató

BME MOGI Gépészeti informatika 4.

Java Programozás 3. Gy: Java GUI. Swing, AWT

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

QGIS tanfolyam (ver.2.0)

Vizuá lis prográmozá s

Fájlműveletek, könytárszerkezet Fájlkezelés a Total Commanderrel

1.A. feladat: Programablakok

A fájlkezelés alapjai

Választó lekérdezés létrehozása

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Táblázatkezelés 2. - Adatbevitel, szerkesztés, formázás ADATBEVITEL. a., Begépelés

Táblázatkezelés, Diagramkészítés. Egyéb műveletek

C#---Access adatbáziskezelési gyakorlat

Entity Framework + LINQ oktatási segédlet

Osztályok. 4. gyakorlat

BME MOGI Gépészeti informatika 13.

CADcat. Bevezetés a program főbb funkcióiba

Projektek. Rövid útmutató az első lépésekhez

A nyomtatókkal kapcsolatos beállításokat a Vezérlőpulton, a Nyomtatók mappában végezhetjük el. Nyomtató telepítését a Nyomtató hozzáadása ikonra

Java IX. telkezelés a Java-ban

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

A LOGO MOTION TANÍTÁSA

Java IX. telkezelés a Java-ban

Duál Reklám weboldal Adminisztrátor kézikönyv

Átírás:

1. Képnézegető program Készítsünk egy egyszerű képnézegető programot JPG képekhez. Az ablak függőlegesen két részre legyen osztva. Baloldalon egy listaablak jelenjen meg, amiben a fájlok nevei láthatók. A le-fel nyíl billentyűk segítségével ezek közül választhatjuk ki a jobb oldali részben megjelenített képet. Kezdetben a legelső kép legyen kiválasztva. A képek egy előre meghatározott könyvtárban kell legyenek: projekt könyvtára\bin\debug\res. A jobb oldali részben úgy kell megjeleníteni a képeket, hogy a lehető legjobban kitöltsék a rendelkezésre álló helyet, de az eredeti szélesség/magasság arány ne torzuljon. 1.1. A feladat megoldása A feladat megoldásának fontosabb lépései a következők: 1. Grafikus felület létrehozása 2. Képnevek beolvasása a program indulásakor 3. Kiválasztott kép betöltése 4. Kép megjelenítése 5. Képmegjelenítés már a program indulásakor 1.1.1. Grafikus felület létrehozása Hozzunk létre egy Windows Application projektet Kepnezegeto néven. Az ablak fejlécében helyezzük el a Képnézegető szöveget (Text=Képnézegető). Az ablakosztályt nevezzük át frmképnézegető-re, míg az őt tartalmazó állományt frmkepnezegeto.cs-re. A projektet és a megoldást nevezzük át Képnézegető-re. Helyezzünk el egy SplitContainer komponenst az ablakon, és nevezzük el scelválasztó-nak. Ez vízszintes irányban két részre osztja az ablakot úgy, hogy futási időben az elválasztó vonal megfogható az egérrel, és a helyzete módosítható. A két részbe különböző komponensek helyezhetők. Helyezzünk egy ListBox komponenst a bal oldali részbe úgy, hogy teljesen kitöltse azt. Tulajdonságok: Name: lbfájlok, Dock=Fill. Helyezzünk egy PictureBox komponenst a jobb oldali részbe úgy, hogy a bal felső sarka pontosan illeszkedjen a jobb oldali panel bal felső sarkához. Tulajdonságok: Name: pbkép, Location=0;0. 1

1.1.2. Képnevek beolvasása a program indulásakor A projekt könyvtárán belül a Debug\bin mappában hozzunk létre egy res nevű alkönyvtárat. Ebbe másoljuk le a szerveren található képeket. Az ablakosztály konstruktorában hajtsuk végre a következőket. A képállományok neveivel töltsük fel a listaablakot. Ha nem létezik res könyvtár, idézzünk elő egy kivételt, aminek adjunk át egy hibaüzenetet. Ehhez alakítsuk ki az alábbiak szerint a konstruktort. /// Listaablak feltöltése. /// Kép komponens eredeti méreteinek lekérdezése. public frmképnézegető() { InitializeComponent(); // // Saját inicializálás // // Az exe-t tartalmazó //.../projekt/debug/bin könyvtáron belül van a res // könyvtár. Ide lettek elhelyezve a képek. DirectoryInfo Di = new DirectoryInfo(@"res"); // Ha létezik res könyvtár, feltöltjük a listaablakot. if (Di.Exists) { // Lekérdezzük a jpg kiterjesztésű állományokat. FileInfo[] Fi = Di.GetFiles("*.jpg"); // Minden állománynevet felveszünk a listaablakba. foreach (FileInfo Fájl in Fi) { lbfájlok.items.add(fájl.name); else // Ha nem létezik res könyvtár, hibaüzenet és kilépés. { throw new Exception("Nem létezik "+ "a ProjektKönyvtár\\bin\\Debug\\res könyvtár!\n" + "A program itt keresi a megjelenítendő képeket."); Nyissuk meg a Program.cs állományt a Solution Explorer segítségével. A Main metódusban helyezzünk el kivételkezelő kódot az alábbiak szerint. Ez a kivételkezelő kód fog lefutni, ha a konstruktorban bekövetkezik a kivétel. Megjeleníti a hibaüzenetet, majd kilép a programból. static void Main() { try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmképnézegető()); catch (Exception exc) { MessageBox.Show(exc.Message, "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); 2

Fordítsuk le a projektet. Kapunk négy hibaüzenetet. A System.IO névtérhivatkozás hiányzik. Kattintsunk az első hullámos kék vonallal aláhúzott osztálynévre jobb egérgombbal, majd Resolve/using Készítsük el a projekt osztálydiagramjait. Ehhez Solution Explorerben kijelöljük a projektet, majd kattintunk az osztálydiagram ikonon. Hozzunk létre az ablak osztályában egy adattagot, amit a lemezről betöltött kép ideiglenes tárolására fogunk használni: /// Adattag a kép ideiglenes tárolásához. private Image Kép; 1.1.3. Kiválasztott kép betöltése Készítsünk egy eseménykezelőt a listaablak elemkiválasztásához (SelectedIndexChanged), amelyben betöltjük a lemezről a listaablakban kiválasztott kép állományt, és tároljuk azt a Kép adattagban. Amennyiben a képmegjelenítő komponensben van kép korábbról, akkor felszabadítjuk az általa lefoglalt erőforrásokat, érvénytelenítjük a képmegjelenítő komponens aktív területét. /// Ez fut le, ha az állományneveket tartalmazó listaablakban /// megváltozik a kijelölés. Betölti a kiválasztott képet. private void lbfájlok_selectedindexchanged(object sender, System.EventArgs e) { // Kép betöltése és Image objektum létrehozása belőle. Kép=Image.FromFile(@"res\"+(string)lbFájlok.SelectedItem); // Ha a képmegjelenítő komponensben van eltárolt kép, // akkor ezt először törölni kell (fel kell szabadítani a // hozzá lefoglalt erőforrásokat). if(pbkép.image!=null) { pbkép.image.dispose(); pbkép.image=null; pbkép.refresh(); 1.1.4. Kép megjelenítése A kép megjelenítését a képmegjelenítő komponens Paint eseményéhez kívánjuk kapcsolni. Mikor keletkezik Paint esemény? Egy terület érvénytelenítése Paint eseményt idéz elő. Ez bekövetkezhet úgy, hogy a programozó idézi elő szándékosan egy utasítással, vagy ha a teljes komponens (ablak) vagy annak egy része érvénytelenné válik, pl. takarásból újra látható lesz, vagy átméretezi a felhasználó az ablakot, de ez az esemény az ablak első megjelenésekor is bekövetkezik. Készítsünk egy eseménykezelőt a pbkép Paint eseményéhez. Ebben méretezzük át a képmegjelenítő komponenst úgy, hogy a Kép adattagban tárolt referenciájú kép eredeti 3

arányainak megtartásával a lehető legjobban kihasználjuk a rendelkezésre álló helyet. Jelenítsük meg a képet. /// Ez fut le, ha újra kell festeni a képmegjelenítő komponens /// tartalmát. /// Átméretezi a képmegjelenítő komponenst úgy, hogy a kép /// arányainak elrontása nélkül a lehető legjobban kihasználjuk a /// rendelkezésre álló helyet. private void pbkép_paint(object sender, PaintEventArgs e) { // Ha van betöltött kép if (Kép!= null) { double Nagyítás = Math.Min( (double)scelválasztó.panel2.height / Kép.Height, (double)scelválasztó.panel2.width / Kép.Width); pbkép.sizemode = PictureBoxSizeMode.StretchImage; pbkép.width = (int)(nagyítás * Kép.Width); pbkép.height = (int)(nagyítás * Kép.Height); pbkép.image = Kép; 1.1.5. Képmegjelenítés már a program indulásakor Készítsünk egy eseménykezelőt az ablak betöltődéséhez (Load esemény), amelyben kijelöljük a legelső listaelemet. Így már a program indulásakor látszik egy kép. /// A form betöltődésekor hajtódik végre még a rajzolási/kifestési /// műveletek előtt. Kijelöli a listaablakban szereplő állományok közül /// az elsőt, így a program indulásakor már látszik az első kép. private void frmképnézegető_load(object sender, System.EventArgs e) { // Ha vannak állománynevek a listaablakban, akkor kijelöljük az // elsőt, így a program indulásakor már látszik az első kép. if(lbfájlok.items.count>0) lbfájlok.selectedindex=0; 4

1.2. Osztálydiagram 1.3. Házi feladat Írjuk át a programot úgy, hogy egy fanézet (TreeView) komponenst is helyezzünk el az ablakban a mellékelt képnek megfelelően. A fanézetben lehessen kiválasztani a könyvtárat, majd a kiválasztott könyvtárban levő jpg állományok nevei jelenjenek meg a listaablakban. Ehhez felhasználható az ötödik előadáson bemutatott KönyvtárFa nevű mintaprogram. A feladat megoldásának fontosabb lépései a következők: 1. Kikapcsoljuk az lbfájlok panelkitöltését (Dock). 2. Az lbfájlokat ideiglenesen áthelyezzük a jobb oldali panelre. 3. Új SplitContainer komponenst helyezünk a bal oldali panelre, neve legyen sckiválasztó. Így az ablak összesen három részre osztott lesz. 4. Az lbfájlokat áthelyezzük a középső panelre. Bekapcsoljuk a kitöltést (Dock). 5. Egy fanézet (TreeView) komponenst helyezünk a bal oldali panelre, neve legyen tvkönyvtár. 5

6. Az ablak betöltődésekor a meghajtó betűjeleket és a gyökérkönyvtárban elhelyezkedő mappákat bejegyezzük a tvkönyvtár-ba. Nem megyünk alsóbb szintekre a könyvtárstruktúrában. 7. Ha kinyitunk egy csomópontot, akkor az alatta levő könyvtárakat is fel kell deríteni, és be kell jegyezni a komponensbe. BeforeExpand eseményhez kezelőt írunk. 8. A kiválasztott könyvtár jpg állományainak neveivel feltöltjük a listaablakot. Ennek érdekében eseménykezelőt készítünk az AfterSelect eseményhez. 9. Kiegészítjük a listaablak elemkiválasztás eseménykezelőjét, hogy a megfelelő könyvtárban keresse a kiválasztott képet. 10. Kivesszük a konstruktorból a listaablak feltöltését. Típus Tulajdonság=érték 2. Grafikus felület és próbaprogram készítése Készítsünk grafikus felületű programot a korábban megismert SzBArray osztály (ld. 3. gyakorlat SzövegBittömbe projekt) használatának kipróbálásához. A program az alábbi funkcionalitást kell megvalósítsa. A program indítása után megadunk egy szöveget az Eredeti szöveg felirat melletti szövegmezőbe, majd kattintunk az Indít nyomógombon. Ennek hatására a Kódolva felirat melletti szövegmezőben megjelenik a szöveget jelképező 0-sok és 1-esek sorozata. Ezután kattintunk a Kiolvas nyomógombon, aminek hatására a Kiolvas felirat melletti szövegmezőben megjelenik az eredeti szöveg. A Kilépés gombra kattintva léphetünk ki a programból. Ha úgy kattintunk a Kódol vagy a Kiolvas gombra, hogy nem adtunk meg szöveget, akkor hibaüzenetet kapunk. 6

2.1. A feladat megoldása A feladat megoldásának fontosabb lépései a következők: 1. Grafikus felület létrehozása 2. Eseménykezelő a Kilép nyomógombhoz 3. Az SzBArray osztály hozzáadása a projekthez és kisebb módosítása 4. SzBArray típusú adatag létrehozása az ablak osztályában Button Text=&Kódol, Name=btKódol 5. Kódolás megvalósítása Button Text=K&iolvas, Name=btKiolvas 6. Kiolvasás megvalósítása Button Text=Ki&lép, 2.1.1. Grafikus felület létrehozása Name=btKilép Első lépésként létrehozunk egy WindowsApplication típusú új projektet SzBGraf néven. Ezután tervezési (Design) nézetben elhelyezzük az ablakon a szükséges vezérlőelemeket a táblázat szerint. Az ablak (Form1) fejlécébe (Text tulajdonság) helyezzük el a Szöveg elhelyezése bittömbbe és kiolvasása feliratot. 2.1.2. Eseménykezelő a Kilép nyomógombhoz Hozzunk létre egy eseménykezelőt a Kilép gombhoz úgy, hogy tervezési (Design) nézetben duplán kattintunk a nyomógombon. Az eseménykezelőben csak egyetlen utasítás szerepeljen: Application.Exit(); Label Label Label TextBox TextBox TextBox Text=Eredeti szöveg Text=Kódolva Text=Kiolvas Name=tbEredetiSzöveg Name=tbKódolva, ScrollBars=Vertical, MultiLine=True ReadOnly=True Name=tbKiolvas 2.1.3. Az SzBArray osztály hozzáadása a projekthez és kisebb módosítása Másoljuk át a SzovegBittombbe.cs állományt a SzövegBittömbe órai projektből az aktuális projekt könyvtárába. Vegyük fel az aktuális projektbe az állományt. Ehhez a Solution Explorerben kattintsunk jobb egérgombbal a projekt nevére, majd Add, Existing Item Nyissuk meg az állományt úgy, hogy a Solution Explorerben duplán kattintunk a SzovegBittombbe.cs állománynéven. Töröljük ki a 75-89 programsorokat (FO osztály). 7

Töröljük a Bitszám adattagot. Ehhez először a Solution Explorerben válasszuk ki a projektet, majd hozzunk létre egy osztálydiagramot. A diagramon kiválasztjuk az SzBArray osztály Bitszám adattagját, majd jobb egérgomb és a gyorsmenüben Delete Code. A Class Details ablakban hozzunk létre egy új int típusú, nyilvános tulajdonságot BitekSzáma néven. Kattintsunk duplán a Name oszlopban a nevet megelőző ikonra, majd a kódszerkesztőben töröljük a set elérőt. Ezáltal a tulajdonság csak olvashatóvá válik. A get elérőt az alábbi kódrészletnek megfelelően írjuk meg tudva, hogy a tulajdonság célja a tárolt bitek számának lekérdezése. /// Csak olvasható tulajdonság. Visszaadja a bitek számát. public int BitekSzáma { get { return BitTömb.Length; 2.1.4.SzBArray típusú adatag létrehozása az ablak osztályában Hozzunk létre egy SzövegBittömbbe. SzBArray típusú és SzB nevű private adattagot az ablakot jelképező Form1 osztályban vizuálisan a mellékelt ábra szerint vagy közvetlenül begépelve az alábbi kódot: private SzövegBittömbbe.SzBArray SzB; Hozzunk létre egy SzövegBittömbbe.SzBArray típusú és SzB nevű tulajdonságot az ablakot jelképező Form1 osztályban. Ehhez lépjünk át az osztálydiagramba. A Toolbox palettán nyissuk ki a Class Designer csoportot, válasszuk ki a Association elemet, majd a Form1-ből kiindulva kössük össze a Form1-et és az SzBArray-t. A kódszerkesztőben az az alábbi mintakód alapján írjuk meg a szükséges módosításokat. internal SzövegBittömbbe.SzBArray SzBArray { get { if (SzB == null) throw new Exception("Még nem helyezett el "+ "szöveget a bittömbbe!"); return SzB; 8

2.1.5. Kódolás megvalósítása Hozzunk létre egy eseménykezelőt a Kódol gombhoz úgy, hogy tervezési (Design) nézetben duplán kattintunk a nyomógombon. Az eseménykezelőt az alábbi mintakód alapján írjuk meg. private void btkódol_click(object sender, EventArgs e) { if (tberedetiszöveg.text.length == 0) { MessageBox.Show("Még nem adta meg az 'Eredeti szöveget'!", "Hiba",MessageBoxButtons.OK,MessageBoxIcon.Error); return; SzB = new SzövegBittömbbe.SzBArray(tbEredetiSzöveg.Text); string s = ""; for (int i = 0; i < SzB.BitekSzáma; i++) s = s + ((int)(szb[i]? 1 : 0)).ToString(); tbkódolva.text = s; 2.1.6. Kiolvasás megvalósítása Hozzunk létre egy eseménykezelőt a Kiolvas gombhoz úgy, hogy tervezési (Design) nézetben duplán kattintunk a nyomógombon. Az eseménykezelőt az alábbi mintakód alapján írjuk meg. private void btkiolvas_click(object sender, EventArgs e) { try { tbkiolvas.text = SzBArray.getSzöveg(); catch(exception exc) { MessageBox.Show(exc.Message, "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error); 9