Jazyk C# (seminář 9)



Podobné dokumenty
Jazyk C# (seminář 7)

Jazyk C# (seminář 6)

Embedded vývoj v Clutteru a Mx

Multiplatformní GUI toolkity

Jazyk C# (seminář 5)

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

Kreslíme do webu. Canvas

2 Grafický výstup s využitím knihovny

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Aplikace s grafickým uživatelským rozhraním

Java aplety. Předávání parametrů z HTML

PROGRAMOVÁNÍ PRO MS WINDOWS 1

Pavel Procházka. 3. prosince 2014

PROGRAMOVÁNÍ PRO MS WINDOWS 1

Jazyk C# (seminář 3)

Programátorská příručka

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Principy objektově orientovaného programování

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Informatika pro moderní fyziky (8) Javascript, CSS - stylování dokumentů, SVG - tvorba obrázků, složitější interaktivní dokument

Jazyk C# (seminář 3)

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Pracovní list č. 15 Microsoft Word 2010 reference II

Programovací jazyk C# Úvod do programování v C#

Programovací jazyk Úvod do programování v C#

Programovací jazyk C# Úvod do programování v C#

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Šablony, kontejnery a iterátory

Standardní algoritmy v C++.

13 Barvy a úpravy rastrového

Objektově orientované programování

Zobrazte si svazy a uspořádané množiny! Jan Outrata

Soubor jako posloupnost bytů

Mozilla pro vývojáře. David Majda LinuxExpo 2005, Praha

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

SWT & MigLayout. Alternativy Java GUI v praxi. Pavel Janečka & Tomáš Chlouba. červen 2011

Zásady kreslení Kreslení na obrazovku 139

VY_32_INOVACE_INF.19. Inkscape, GIMP, Blender

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Informatika pro moderní fyziky (8) CSS - stylování dokumentů, SVG - tvorba obrázků, složitější interaktivní dokument

Programování v Javě I. Leden 2008

Úvod 13 O čem je tato kniha? Pro koho je tato kniha? Jak studovat tuto knihu? Poděkování 16 Zpětná vazba od čtenářů Zdrojové kódy ke knize Errata 17

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

25. listopadu 2014, Brno Připravil: David Procházka. Qt a QML. Programovací jazyk C++

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Vytváříme dobré aplikace vykreslovače grafiky v programovém prostředí Control Web

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7. Datové typy v Javě

Android OpenGL. Pokročilé shadery

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Programování v Javě I. Únor 2009

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

UNIVERZITA PARDUBICE

PREPROCESOR POKRAČOVÁNÍ

Programujeme v softwaru Statistica

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Obsah. Úvod do studia 11 Co byste měli předem znát 13. Úvod do obsluhy AutoCADu 23. Kapitola Kapitola 1 23

Novinky ve Visual Studio Tomáš Kroupa

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Java - Kresba. 2/28/11 1/8 Java - kresba

KTE / ZPE Informační technologie

Mediator motivace. FontDialog. závislosti mezi jednotlivými ovládacími prvky jsou netriviální

MATURITNÍ PRÁCE dokumentace

Skriptovací jazyky. Obsah

Funkce grafiky na webu. Primární grafická informace Fotografie Schémata Diagramy Loga Bannery

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Uživatelská rozhraní 10. cvičení. Martin Němec A

Hydroprojekt CZ a.s. WINPLAN systém programů pro projektování vodohospodářských liniových staveb. HYDRONet 3. Modul SITUACE

PB161 Programování v jazyce C++ Přednáška 10

D2 - GUI design. Radek Mečiar

Autodesk AutoCAD 2018

Vývoj Internetových Aplikací

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Podpora skriptování v Audacity

Grafika na webu. Lukáš Bařinka

KMI / TMA. Tvorba mobilních aplikací. 3. seminář ZS 2017/2018 ČTVRTEK 13:15-15:45

3 KTE / ZPE Informační technologie

MANUÁL K PROGRAMU JEDNODUCHÝ SKLAD (VER-1.2)

Vývoj multiplatformní aplikace v Qt

Distribuované systémy a výpočty

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Programátorské večery. Tomáš Herceg Microsoft Student Partner

Podmínky na zápočet. Java, zimní semestr

Transkript:

Jazyk C# (seminář 9) Pavel Procházka KMI 19. listopadu 2014

Motivace proč GTK# Moderní přístup k psaní GUI Základ (GTK+) je napsaný v C, ale podporuje celou řadu jazyků (Vala, Python, JavaScript, C#,... ) Umí relativně pozicovat objekty, zvětšovat zmenšovat, umí průhledně nakládat s DPI GUI widgety lze reprezentovat XML souborem Nativně ho podporuje MonoDevelop K editaci widgetů, oken slouží externí nástroj Glade nebo vestavěný nástroj do MonoDevelopu preferovaná varianta http://www.mono-project.com/docs/gui/gtksharp/ Negativum spočívá v tom, že GTK# je automatizovaně generované API místy ne zcela dokonale využívá možnosti C# Negativum je to, že lze méně naklikat než ve VisualStudiu

Designer pro GTK#

Principy GTK# GUI prvkům se říká widgety Nic se pevně nepozicuje Každý widget by měl být v nějakém kontejneru, který se automaticky zvětšuje a zmenšuje podle potřeby (podle velikosti vnořených widgetů) Rozeznáváme horizontální a vertikální kontejnery (a další speciální) Kontejnery jsou podobné div z HTML Na některé prvky můžeme mít specifické nároky na pevnou nebo minimální velikost, to lze (pomocí designeru záložka vlastnosti) Vykreslování uživatelské grafiky lze pomocí knihovny Cairo (nutné dodat referenci) Přímé vykreslování je možné pomocí Gdk

Hello world using System; using Gtk; class MainClass { public static void Main (string[] args) { Application.Init (); Window win = new Gtk.Window (0); win.title = "Hello World"; win.show (); Application.Run (); } }

Základní GUI widgety Třídy pro okna dialogy Gtk.Window, MessageDialog,... Kontejnery HBox, VBox,... Položkové seznamy NodeView, TreeView Základní widgety Button, ComboBox, RadioButton, ProgressBar Vykreslovací plátno DrawingArea Menu Menu, MenuBar, MenuItem Celá hierarchie widgetů je pěkně shrnutá tady https:// developer.gnome.org/gtk-tutorial/2.90/x477.html Práce se seznamy typu NodeView je pěkně shrnutá zde http://www.mono-project.com/docs/gui/gtksharp/ widgets/nodeview-tutorial-examples/

Kreslení vektorové grafiky pomocí Cairo Cairo je pokročilá knihovna pro kreslení vektorové grafiky, je akcelerovaná (tudíž rychlá) Podporuje antialiasing (výchozí) (pro objekty i pro text) Výstup je kvalitní a přesný (na rozdíl od GDI+) V budoucnosti bude Cairo pravděpodobně oficiální součástí C++ jako jeho standarní knihovna Knihovna s vnitřním stavem podobný koncept jako OpenGL Lze si to představit jako pastelku v ruce Vybíráme si barvu, jestli chceme obtahovat nebo vyplňovat atd. Potřeba doplnit referenci na Mono.Cairo a vložit namespace using Cairo; Opět knihovna obsahuje celou řadu metod Popisovač získáme Cairo pomocí Gdk.CairoHelper.Create, argumentem přebírá GdkWindow analogie k CreateGraphics(); GdkWindow je součástí každého uživatelsky kreslitelného objektu

Jak se to nakreslí?

Cairo jednoduchý příklad GTK# using (Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow)) { cr.linewidth = 9; cr.setsourcergb (0.7, 0.2, 0.0); int mw = (width <= height? width : height); cr.translate (width / 2, height / 2); cr.arc (0, 0, mw / 3,0, 2 * Math.PI); cr.strokepreserve (); cr.setsourcergb (0.3, 0.4, 0.6); cr.fill (); cr.setsourcergb (0.9, 0.9, 0.01); cr.arc (-(width / 9), -(width / 9), mw/14, 0, 2 * Math.PI ); cr.strokepreserve ();...

Cairo jednoduchý příklad cntd. cr.setsourcergb (0.9, 0.1, 0); cr.fill (); cr.setsourcergb (0.9, 0.9, 0.01); cr.arc ((width / 9), -(width / 9), mw/14, 0, 2 * Math.PI ); cr.strokepreserve (); cr.setsourcergb (0.9, 0.1, 0); cr.fill (); cr.setsourcergb (0.9, 0.9, 0.01); cr.arc (0, 0, mw/4, 0, 1 * Math.PI ); cr.strokepreserve (); cr.moveto (new PointD (0, mw / 12)); cr.lineto (new PointD (0, -(mw / 12))); cr.strokepreserve (); }

Kreslení per pixel Obrázek se reprezentuje pomocí třídy Gdk.Image Čtení pixelu se dělá pomocí GetPixel Zápis pixelu pomocí PutPixel POZOR: Tyto metody pracují s pixely ve formátu ARGB, které jsou uloženy v uint na každý kanál 1 bajt Je tedy nutné znát binární operace jako <<, &, apod. (ty ale už znáte z C) Lze si ulehčit práci skrze třídu Gdk.Color, která toto dělá za nás Kreslí se pomocí třídy GdkWindows a její metody DrawImage

Gdk přímy přístup k pixelům Gdk.Image im = area.gdkwindow.getimage (0, 0, width, height); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { im.putpixel (x, y, im.getpixel(x,y) & 0x00ff0000 ); } } Console.WriteLine (im.getpixel (25, 25)); area.gdkwindow.drawimage ( /* ziskani kontextu -- kam kreslit */ Style.ForegroundGC (StateType.Normal), im, 0, 0, 0, 0, width, height);

A ted vy Vytvořte nástroj pro želví grafiku, který se dá zvětšovat a zmenšovat a zaznamenává tahy. Otočení želvy je po 45 stupních