Vizuális programozás gyakorlat



Hasonló dokumentumok
Kétdimenziós rajzolás WPF-ben

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

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

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

Vizuális programozás gyakorlat

Entity Framework alapú adatbáziselérés

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

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

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

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

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

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

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

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

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

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

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

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

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

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

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

Vizuá lis prográmozá s

Osztály és objektum fogalma

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

A First Businesspost Sender Cockpit használata

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

Entity Framework alapú adatbáziselérés

libgdx alapok, első alkalmazás

Grafikus felületek készítése 1.

A Kiadó előszava... xvii. Köszönetnyilvánítás... xix. Bevezetés... xxi. I. rész: Bevezetés a Silverlight 3 programozásába

Beállítások módosítása

Szoftvertechnolo gia gyakorlat

4. Öröklődés. Programozás II

Bánsághi Anna

Programozás I gyakorlat. 5. Struktúrák

ScopeImage 9.0. Kamera és képfeldolgozó szoftver. Felhasználói kézikönyv

Szakdolgozat. Kiss Máté Árpád Vámosi Béla

NeoCMS tartalommenedzselő szoftver leírása

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

TÁJÉKOZTATÓ az OSZIR Kémiai Biztonsági Szakrendszerben (KBIR) történő veszélyes anyagokkal és keverékekkel végzett tevékenység.

Bevezetés. A WebAccess használatának bemutatása előtt néhány új funkció felsorolása következik:

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

BME MOGI Gépészeti informatika 4.

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

Gábor Dénes Számítástechnikai Emlékverseny 2014/2015 Programozói kategória 2. forduló

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Származtatási mechanizmus a C++ nyelvben

Bosch Video Management System. Kezelési útmutató

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

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

A Java nyelv. Dialógus ablakok. Elek Tibor

Adatbázis-kezelés ODBC driverrel

A HunPLUS 2009 újdonságai

VISUAL BASIC ALAPISMERETEK

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Osztályok. 4. gyakorlat

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal A teljes dokumentáció átírásra került

Pozíció épp hol vagyunk Az E-építési napló lépésről lépésre

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Sorompó kezelés mérlegműszerrel

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

TARTÓK STATIKÁJA I. Statikai modell felvétele és megoldása a ConSteel szoftver segítségével (alkalmazási segédlet)

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

Programozási technológia

KID verzióváltás Felhasználói kézikönyv

GroupWise 5.2 használói jegyzet

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

Entity Framework + LINQ oktatási segédlet

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

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.

MUNKAANYAG. Földy Erika. A szakmai önéletrajztól a művészeti kritikáig (Az. alkotói tevékenység komplex megjelenítése,

Animációk, effektusok

mynct v0.0.1 Maró verzió Kezelési leírás

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


Infokommunikáció (PF10IK511L) kérdései

A dokumentum lapméretének és a margóinak a beállítását a menüszalag Lap elrendezése lapján tehetjük meg. Külön állítjuk be a lapméretet.

Operációs rendszerek Windows Xp

Tartalomjegyzék. Bevezetés...2

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

Rovás segéd 1.8. Segédalkalmazás szövegek (át)rovásához

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

i4x50 sorozatú szkennerek

A TWAIN adatforrás használata

Budapest, oldal

BME MOGI Gépészeti informatika 6.

KASZPER dokumentáció Támogatott számla RITEK ZRt (12111) TÁMOGATOTT BEJÖVŐ SZÁMLA ÉRKEZTETÉSE, MÓDOSÍTÁSA, NYOMTATÁSA

Intellio Video System 2. Csatlakozási útmutató a demószerverhez

Szakdolgozat. Balázs Ádám Kuk József

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Task-alapú párhuzamosítás C# környezetben

Rövid használati útmutató

Szövegszerkesztés Verzió: 0.051

Események C#-ban Krizsán Zoltán iit

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

Programozás II gyakorlat. 4. Öröklődés

KR TITKOSÍTÓ PROGRAM. Felhasználói leírás. v március 12.

Átírás:

Vizuális programozás gyakorlat Képnézegető alkalmazás WPF alapú felülettel Készítsen egy WPF képnézegető alkalmazást, ami a mellékelt ábrának megfelelően a bal oldali oszlopban (Grid) egy könyvtárban található jpg képek bélyegképeit jeleníti meg, a jobb oldali oszlopban az éppen kiválasztott kép nagyban látható. A két oszlop között egy elválasztó sáv legyen (GridSplitter), ami lehetővé teszi, hogy a felhasználó változtathassa az oszlopok szélességét. Megoldás Készítsük egy WPF projektet Kepek néven. Az ablak állományának neve legyen wndfoablak.xaml és osztályának neve legyen wndfőablak. 1. A felület elkészítése Az ablakban két oszlopot alakítsunk ki: első a bélyegképek és a mappaválasztó nyomógomb, valamint az elválasztó vonal számára, míg a második a nagyméretű kép számára. Az első szélessége * legyen, míg a másodiké Auto. A baloldali oszlopban két sort hozunk létre egy Grid beépítésével. Az első sorban egy nyomógomb található, amin kattintva egy könyvtárválasztó párbeszédablak jelenik majd meg. A mappakiválasztó párbeszédablak nem beépített, az őt tartalmazó kódot (FolderPickerLib.dll) a t:\info\johanyák Csaba\Kepek\FolderPickerLib.dll útvonalon érhetjük el, és be kell másolni a projekt könyvtárába, majd fel kell venni a projekt referenciái közé.

A bélyegképeket egy ScrollViewer vezérlőre helyezett WrapPanel vezérlőn helyezzük el, ez biztosítja, hogy szükség esetén jelenjen meg a görgető sáv, és annyi oszlopban jelenjenek meg, amennyinek a vízszintes megjelenítésére lehetőség van. Ha a bélyegképek felé visszük az egeret, akkor a kép meg kell növekedjen kissé egy animáció segítségével, majd az egér eltávolítását követően vissza kell zsugorodjon az eredeti méretére. Ehhez a megfelelő méretű helyet előre le kell foglalni, így a kép nem közvetlenül a WrapPanelre kerül, hanem egy keretre (Border), és a keretet tesszük a WrapPanelre. A keret mérete nagyobb a bélyegkép méreténél, és az animáció során a bélyegkép ki fogja tölteni a keretet. A jobb oldalon a nagyméretű kép és a kép teljes elérési útvonala+állományneve jelenik meg egymás alatt. Ehhez a jobb oldalon is egy Gridet építünk be, ami kétsoros lesz. Az első sor magassága 25 lesz. A felületet leíró XAML kód az alábbi: <Window x:class="kepek.wndfőablak" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Válasszon könyvtárat!" Height="350" Width="525"> <Grid Name="grRács">

<Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid Grid.Column="0" Margin="0,0,5,0" > <Grid.RowDefinitions> <RowDefinition Height="25" /> <RowDefinition /> </Grid.RowDefinitions> <Button Name="btKönyvtárVálasztó" Content="Könyvtárválasztás..." Click="btKönyvtárVálasztó_Click" /> <ScrollViewer Name="swKépek" VerticalScrollBarVisibility="Auto" Grid.Row="1"> <WrapPanel Name="wpKépek" HorizontalAlignment="Right" /> </ScrollViewer> </Grid> <GridSplitter ResizeDirection="Columns" Grid.Column="0" Width="5" /> <Grid Grid.Column="1"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="25" /> </Grid.RowDefinitions> <Image Name="imNagyKép" MinWidth="100" MinHeight="100" Grid.Row="0" Stretch="Uniform" /> <TextBlock Name="tlKépnév" Height="15" VerticalAlignment="Center" Grid.Row="1" Margin="5,0,0,0"/> </Grid> </Grid> </Window> A feladathozt felhasználható mintaképek a t:\info\johanyák Csaba\Kepek\ könyvtárban találhatóak meg. A feladatot megvalósító kód 1. Adattagok /// A bélyegkép vezérlő alap szélessége. private double KépSzélesség; /// A bélyegkép vezérlő alap magassága. private double KépMagasság; /// Ennyi ideig tart az animáció. private TimeSpan tsanimációidő; /// Az animáció során ennyivel nő a kép vezérlő szélessége.

private double dsz; /// Az animáció során ennyivel nő a kép vezérlő magassága. private double dm; 2. Konstruktor A konstruktorban megadjuk a bélyegképet megjelenítő vezérlő méreteit. A feladat egyszerűsítése érdekében itt úgy dolgozunk, hogy előre tudjuk, hogy a képek 1024x766-os felbontásúak lesznek. Az animációhoz fél másodperces időtartamot adunk meg. Az aktuális könyvtár (amiből a képeket meg fogja jeleníteni a program) elérési útvonalát az ablak fejlécében tároljuk, illetve jelenítjük meg. Ennek kezdőértékét (C:\) is a konstruktorban adjuk meg. Végül beolvassuk a memóriába az adott könyvtárban levő képeket. Ez utóbbi feladatot egy külön metódussal oldjuk meg (KépeketBetölt()). A metódus vázát automatikusan generáltatjuk a Visual Studioval. /// A főablak konstruktora. Adattagok inicializálása és kezdőképek betöltése. public wndfőablak() InitializeComponent(); // A kép vezérlő eredeti szélessége. KépSzélesség = 70; // A kép vezérlő eredeti magassága. A felhasznált mintaképek mind 1024x766-os // méretűek. KépMagasság = KépSzélesség*766/1024; // Az animáció során ennyivel nő a kép vezérlő szélessége. dsz = 30; // Az animáció során ennyivel nő a kép vezérlő magassága. dm = dsz * 766 / 1024; // Az animáció időigényének megadása. tsanimációidő = TimeSpan.FromMilliseconds(500); // A kezdőkönyvtár (képeket tároló könyvtár) megadása. Title = @"C:\"; // Beolvassuk a képeket a könyvtárból. KépeketBetölt(); 2. Képek betöltése /// Betölti a képeket a kiválasztott mappából, és kép /// vezérlők formájában elhelyezi őket a WrapPanel-en. private void KépeketBetölt() // A képeket tartalmazó könyvtárt leíró objektum létrehozása. DirectoryInfo Di = new DirectoryInfo(Title); // Töröljük a WrapPanel-en levő vezérlők listáját. wpképek.children.clear(); try

// Lekérdezzük a jpg kiterjesztésű állományokat a könyvtárból. FileInfo[] Fi = Di.GetFiles("*.jpg"); // Minden képet beolvasunk. foreach (FileInfo Fájl in Fi) // A helyörző létrehozása. Ez nagyobb kell legyen, mint a kép vezérlő. // Amikor növeljük a kép vezérlő méretét, a helyörzőt fogja kitölteni. Border bdhelyörző = new Border(); bdhelyörző.width = KépSzélesség + dsz; bdhelyörző.height = KépMagasság + dm; // Felvesszük a helyörzőt a panelre. wpképek.children.add(bdhelyörző); // Létrehozunk egy kép objektumot, és betöltjük a fájlból a képet. var imkép = new Image // Kép forrás megadása. Source = new BitmapImage(new Uri(Fájl.FullName, UriKind.Absolute)), Width = KépSzélesség, Height = KépMagasság ; // A kép a kép vezérlőn töltse ki a rendelkezésre álló helyet // az eredeti képarány megtartásával. imkép.stretch = Stretch.Uniform; // A kép vezérlő a helyörző közepére kerüljön. imkép.verticalalignment = VerticalAlignment.Center; imkép.horizontalalignment = HorizontalAlignment.Center; // Eseménykezelő rendelése az egérgomb lenyomáshoz. imkép.mousedown += Kép_MouseDown; // Eseménykezelő rendelése az egér vezérlő fölé érkezéséhez. imkép.mouseenter += imkép_mouseenter; // Eseménykezelő rendelése az egér vezérlő fölüli távozásához. imkép.mouseleave += Kép_MouseLeave; // Kép elhelyezése a helyörzőben. bdhelyörző.child = imkép; catch (Exception exc) // Hibaüzenet, ha nem sikerült valamelyik művelet. MessageBox.Show(exc.Message); // Ha vannak képek a panelen. if (wpképek.children.count > 0) // Beállítjuk a legelső képet nagynak. KépBeállít((Image)((Border)wpKépek.Children[0]).Child); 3. Az animációt megvalósító metódusok /// A felhasználó az egeret a kép vezérlő felé mozgatta. /// <param name="sender">a kép vezérlő objektum.</param> /// <param name="e"></param> void imkép_mouseenter(object sender, MouseEventArgs e)

// Az aktuális kép objektum. var imkép = (Image)sender; // A vízszintes méretváltoztatást leíró animáció objektum. DoubleAnimation da = new DoubleAnimation(); // Kezdőméret. da.from = KépSzélesség; // Végső méret. da.to = KépSzélesség + dsz; // Az animáció időtartama. da.duration = new Duration(tsAnimációIdő); // A függőleges méretváltoztatást leíró animáció objektum. DoubleAnimation db = new DoubleAnimation(); // Kezdőméret. db.from = KépMagasság; // Végső méret. db.to = KépMagasság + dm; // Az animáció időtartama. db.duration = new Duration(tsAnimációIdő); // A két animáció elindítása. imkép.beginanimation(widthproperty, da); imkép.beginanimation(heightproperty, db); /// A felhasználó az egeret elmozgatta a képről. /// <param name="sender">a kép vezérlő objektum.</param> /// <param name="e"></param> void Kép_MouseLeave(object sender, MouseEventArgs e) var imkép = (Image)sender; // A vízszintes méretváltoztatást leíró animáció objektum. DoubleAnimation da = new DoubleAnimation(); // Kezdőméret. da.from = KépSzélesség + dsz; // Végső méret. da.to = KépSzélesség; // Az animáció időtartama. da.duration = new Duration(tsAnimációIdő); // A függőleges méretváltoztatást leíró animáció objektum. DoubleAnimation db = new DoubleAnimation(); // Kezdőméret. db.from = KépMagasság + dm; // Végső méret. db.to = KépMagasság; // Az animáció időtartama. db.duration = new Duration(tsAnimációIdő); // A két animáció elindítása. imkép.beginanimation(widthproperty, da); imkép.beginanimation(heightproperty, db); 4. A nagyméretű kép megjelenítése

/// Beállítjuk a képet a nagy vezérlőben láthatónak. /// <param name="imkép">a megjelenítendő kép.</param> private void KépBeállít(Image imkép) // A kép forrása. imnagykép.source = imkép.source; // A kép alatt megjelenítjük a kép állomány nevét. tlképnév.text = imnagykép.source.tostring(); 5. A bélyegképen történő egérgomb lenyomás eseménykezelője /// Egérgomb lenyomása egy kép vezérlőn. /// <param name="sender">a kép vezérlő.</param> /// <param name="e">kiegészítő paraméterek.</param> void Kép_MouseDown(object sender, MouseButtonEventArgs e) // Beállítjuk a képet a nagy vezérlőben láthatónak. KépBeállít((Image)sender); 2. Eseménykezelő a mappaválasztáshoz A mappaválasztó gombon történt kattintást követően létrehozunk egy példányt a könyvtárválasztó párbeszédablakból (FolderPickerDialog), beállítjuk a kezdő könyvtárat az ablak fejlécében tárolt útvonalnak megfelelően, majd megjelenítjük a párbeszédablakot. Amennyiben a felhasználó az OK gombbal zárja be az ablakot, akkor a kiválasztott útvonalat átmásoljuk az ablak fejlécébe, és beolvassuk a memóriába az adott mappában található képeket. /// A képeket tartalmazó könyvtár kiválasztása. /// <param name="sender">az eseményt előidéző nyomógomb.</param> /// <param name="e">kiegészítő paraméterek.</param> private void btkönyvtárválasztó_click(object sender, RoutedEventArgs e) // Mappaválasztó párbeszédablak objektum létrehozása. var dlg = new FolderPickerDialog(); // Kezdőkönyvtár beállítása. dlg.initialpath = Title; // Párbeszédablak megjelenítése. if (dlg.showdialog() == true) // A mappa elérési útvonalának átmásolása az ablak fejlécébe. Title = dlg.selectedpath; // A képek betöltése a kiválasztott mappából, és elhelyezésük kép // vezérlők formájában a WrapPanel-en. KépeketBetölt();

Házi feladat Alakítsa át úgy a programot, hogy a nagyméretű kép alatt csak a képállomány neve jelenjen meg az elérési útfonal és a file:/// felirat nélkül. Helyezzen el egy nyomógombot a nagyméretű kép alatt Vágólapra másol felirattal, és készítse el hozzá az eseménykezelőt. Ellenőrizze le, hogy az eseménykezelő által a vágólapra másolt kép beilleszthető-e egy Word dokumentumba.