{"id":578,"date":"2013-07-02T11:39:26","date_gmt":"2013-07-02T11:39:26","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=578"},"modified":"2013-07-02T11:39:26","modified_gmt":"2013-07-02T11:39:26","slug":"podstawy-c-czyli-jak-zapalic-na-ekranie-lampke-od-capslocka","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2013\/07\/02\/podstawy-c-czyli-jak-zapalic-na-ekranie-lampke-od-capslocka\/","title":{"rendered":"Podstawy c# &#8211; czyli jak zapali\u0107 na ekranie lampk\u0119 od capslocka ;)"},"content":{"rendered":"<p>Pomys\u0142 na aplikacj\u0119 wyszed\u0142 w trakcie jednej z rozm\u00f3w z moim narzeczonym, d\u0142u\u017cszy czas temu. Chodzi\u0142o o to, \u017ceby wygodnie zasygnalizowa\u0107, czy \u015bwieci si\u0119 capslock. Oczywi\u015bcie informuje nas o tym dioda na klawiaturze, ale chcieli\u015bmy co\u015b wi\u0119kszego. Aplikacja wysz\u0142a ca\u0142kiem prosta, a wi\u0119c nadaje si\u0119 do wyja\u015bnienia kilku podstaw.<br \/>\n<!--more--><br \/>\nZaczniemy od \u201enarysowania\u201d interfejsu w XAML \u2013 czyli j\u0119zyku opisuj\u0105cym interfejs w silverlight czy WPF. Ca\u0142o\u015b\u0107 niech b\u0119dzie dodaniem w sekcji Window takiej linijki na koniec.<\/p>\n<pre class=\"brush: csharp; collapse: false\">Title=\"caps viewer\" Height=\"126\" Width=\"143\" ResizeMode=\"NoResize\" KeyUp=\"zapal\" Name=\"okno\" Background=\"Green\" Topmost=\"True\"&gt;<\/pre>\n<p>Co tutaj mamy? Na pocz\u0105tku tytu\u0142, kt\u00f3ry si\u0119 pojawi w belce tytu\u0142owej. Mo\u017cemy tam wpisa\u0107 cokolwiek, lub zostawi\u0107 puste. Nie wp\u0142ynie to na wygl\u0105d naszej aplikacji. Kolejne 2 parametry to wymiary okna, kt\u00f3re r\u00f3wnie\u017c mo\u017cemy dopasowa\u0107 do swoich potrzeb. Tutaj dobierane na oko. Kolejnym parametrem, jest tryb zmiany rozmiaru. Tutaj piszemy, \u017ce nie chcemy, aby u\u017cytkownik za pomoc\u0105 myszy lub przycisk\u00f3w ktokolwiek rozszerza\u0142, zw\u0119\u017ca\u0142, wyd\u0142u\u017ca\u0142, skraca\u0142 czy minimalizowa\u0142 nasz\u0105 aplikacj\u0119. Kolejny parametr, s\u0142u\u017cy do wskazania kt\u00f3ra funkcja si\u0119 wywo\u0142a, w momencie gdy wci\u015bniemy przycisk i zabierzemy z niego palec. W tym przypadku b\u0119dzie to funkcja, kt\u00f3ra w kodzie ma nazw\u0119 zapal. Dodam, \u017ce musi to by\u0107 funkcja prywatna (inaczej tworzy drug\u0105, pust\u0105 do wype\u0142nienia) i musi nale\u017ce\u0107 do tej klasy. Dalej mamy nazw\u0119 okna, do kt\u00f3rej b\u0119dziemy mogli si\u0119 odwo\u0142a\u0107 w kodzie, kolor t\u0142a, kt\u00f3re zale\u017cnie od zdarzenia b\u0119dziemy mogli zmieni\u0107 w celu sygnalizacji, oraz parametr odpowiedzialny za to, by okno by\u0142o zawsze na wierzchu (je\u017celi chcecie \u017ceby nie by\u0142o, ustawcie na false, lub usu\u0144cie). Wszystkie parametry, kt\u00f3re nie zosta\u0142y wprost okre\u015blone w kodzie xaml czy c#, przyjm\u0105 parametry domy\u015blne. Jest ich sporo, mo\u017cecie poczyta\u0107 o nich w dokumentacji, lub przejrze\u0107 okienko properties dla okna w edytorze wizualnym.<br \/>\nSama funkcja zapal, umieszczona (jako jedyna) wewn\u0105trz klasy okna (w kt\u00f3rej domy\u015blnie jest tylko funkcja wywo\u0142uj\u0105ca inicjalizacj\u0119 komponentu) wygl\u0105da nast\u0119puj\u0105co.<\/p>\n<pre class=\"brush: csharp; collapse: false\">private void zapal(object sender, KeyEventArgs e)\r\n       {\r\n           if (Keyboard.GetKeyStates(Key.CapsLock) == KeyStates.Toggled)\r\n           {\r\n               okno.Background = Brushes.Yellow;\r\n           }\r\n           else okno.Background = Brushes.Green;\r\n       }<\/pre>\n<p>Czyli w skr\u00f3cie, mamy event, kt\u00f3ry sprawdza stan klawiszy, je\u015bli capslock si\u0119 \u015bwieci, to ma ustawi\u0107 t\u0142o okna na \u017c\u00f3\u0142te, w przeciwnym razie zielone. \u017beby zoptymalizowa\u0107 kod, mo\u017cemy np. uruchamia\u0107 event tylko przy zmianie warto\u015bci samego capsa;) ale to zostawiam jako zadanie domowe.<br \/>\nOstatni\u0105 spraw\u0105 s\u0105 wymagane przez aplikacje usingi.<\/p>\n<pre class=\"brush: csharp; collapse: false\">using System.Windows; \/\/bo mamy okno\r\nusing System.Windows.Input; \/\/\u017ceby si\u0119 bawi\u0107 klawiatur\u0105\r\nusing System.Windows.Media; \/\/\u017ceby si\u0119 bawi\u0107 kolorami<\/pre>\n<p>Pozosta\u0142e mo\u017cna wywali\u0107. Czemu? Nie u\u017cywamy kolekcji, linq, ani \u017cadnych kontrolek itp.<br \/>\nJakie by\u0142y najciekawsze elementy tego kr\u00f3tkiego kodu? Zablokowanie rozmiaru, pozostawienie naszej aplikacji zawsze na wierzchu, wykrycie capslocka i zmian\u0119 t\u0142a aplikacji w kodzie. Tak samo mo\u017cna zmienia\u0107 t\u0142o np. dla kontrolek.<br \/>\nMam nadziej\u0119, \u017ce komu\u015b si\u0119 co\u015b st\u0105d przyda;)<br \/>\nPowodzenia i mi\u0142ego kodzenia.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pomys\u0142 na aplikacj\u0119 wyszed\u0142 w trakcie jednej z rozm\u00f3w z moim narzeczonym, d\u0142u\u017cszy czas temu. Chodzi\u0142o o to, \u017ceby wygodnie zasygnalizowa\u0107, czy \u015bwieci si\u0119 capslock.<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2013\/07\/02\/podstawy-c-czyli-jak-zapalic-na-ekranie-lampke-od-capslocka\/\">Lecim dalej<span class=\"screen-reader-text\">Podstawy c# &#8211; czyli jak zapali\u0107 na ekranie lampk\u0119 od capslocka \ud83d\ude09<\/span> <i class=\"fas fa-angle-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83,49,143],"tags":[211,146,221,145,147],"class_list":["post-578","post","type-post","status-publish","format-standard","hentry","category-c_sharp","category-programowanie","category-wpf","tag-c","tag-capslock-wpf","tag-windows","tag-zawsze-na-wierzchu","tag-zmiana-tla-wpf","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=578"}],"version-history":[{"count":10,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/578\/revisions"}],"predecessor-version":[{"id":588,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/578\/revisions\/588"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}