Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 2 gru 2024, o 10:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 8 wrz 2013, o 22:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ok. Tym razem pobawimy się troszkę gradientami i przy okazji stworzymy kontrolkę dla akcelerometru która będzie wyglądała prawie tak
Obrazek
A dlatego prawie tak bo to już od Was właściwie jak będzie wyglądać ;)

Obrazek
Klikamy w Solution Explorer PPM na kontrolki_avr ( dla jasności wykorzystuję poprzedni projekt żeby mieć kontrolki w jednej bibliotece )
Wybieramy Add --> New Item następnie szukamy template'u User Control i nadajemu mu nazwę Akcelerometr (ważne żeby nazwa była taka sama)
Jak już otworzy się nam okienko do projektowania kontrolki, to zaglądamy do Properties i zmieniamy rozmiar w Size na 300;250 oraz BorderStyle na FixedSingle.
Następnie wciskamy F7 (aby ukazał nam się kod naszej kontrolki) i idziemy od razu do kontruktora gdzie włączymy podwójne buforowanie, który powinien wyglądać tak po naszych zmianach
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Skoro buforowanie mamy już z głowy, to wypadało by powołać do życia zmienne które będą nam potrzebne do przechowywania kilku parametrów takich jak:
- kolory poszczególnych elementów
- ich rozmiary
- wartości bieżące, minimalne i maksymalne.

w związku z tym ustawiamy się na początku klasy i klepiemy następujący kod

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No dobrze skoro mamy już nasze zmienne które drą się w niebogłosy że są nie wykorzystane, to czas temu zaradzić, dlatego ustawiamy się pod konstruktorem
i nadpisujemy domyślną metodę OnPaint wpisując następujący kod

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Następnie żeby to wszystko wyglądało jakoś normalnie od razu uruchamiamy AntiAliasing
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a także nie zapominany o deklaracji kilka zmiennych i metod które umożliwią nam obliczenia oraz malunki ;)
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ale cóż to pojawiły się nam błędy których nie powinno być. Powód występowania ich jest bardzo prozaiczny, po prostu zapomnieliśmy włączyć przestrzeń nazw dla drawing2D , więc czym prędzej pędzimy na początek pliku i dopisujemy w/w przestrzeń nazw.
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Skoro mamy już tak dużo to musimy się zastanowić jak podzielić nasza kontrolkę żeby uzyskać zamierzony efekt oraz żeby była w pełni skalowalna, ja uznałem że dobrymi wartościami w poziomie będą 80 % szerokości kontrolki dla lewego panelu oraz 20 % dla prawego.
Dodatkowo ponieważ będzie bardzo dużo obliczeń odnoszących się do punktu centralnego w lewym panelu postanowiłem od razu obliczyć jego środek żeby łatwiej mi się pisało kod.
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po takich wstępnych obliczeniach czas zabrać się za lewy panel i u mnie wygląda to tak
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Generalnie nie ma tutaj nic skomplikowanego bo dodajemy lewy prostokąt do klasy path , następnie ustawiamy mieszanie kolorów dla tego obiektu, przekazujemy rozmiary naszej figury do klasy która odpowiada za utworzenie gradientu, dodajemy do tego wcześniej utworzone mieszanie kolorów następnie podajemy kolory który chcemy mieszać i rysujemy to co nam wyszło i na końcu czyścimy oraz porzucamy nasze klasy aby w przyszłości je wykorzystać do innych niecnych celów. Prawda że proste ? ;)

No może nie do końca, za efekty w różnych formach wypełnienia generalnie odpowiada klasa Blend lub ColorBlend (której użyjemy trochę później), natomiast PathGradientBrush dokonuje pozostałych przekształceń.
Ponieważ gradienty jest lepiej przetestować na podstawie prostych przykładów zachęcam do małych eksperymentów z kodami które znajdziecie w Linku

No dobra skoro mamy już lewy panel to wypadałoby "pstryknąć" prawy, co niniejszym czynimy następującym kodem
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W tajemnicy powiem że niecierpliwi mogą wcisnąć F5 ;) , a tym co się nie chce obrazek poniżej.
Obrazek
Ok. mamy już dwa panel do prezentacji danych, więc wypada się zająć jakimś wyskalowaniem lewego panelu, więc utworzymy celownik bo w końcu ma to być kontrolka dla akcelerometru ;)

Co uczynimy niniejszym kodem
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Generalnie i w tej części nie ma nic nadzwyczajnego, jednak zachęcam do prześledzenia obliczeń , bo dzięki nim właśnie tworzymy w pełni skalowalną kontrolkę.
Specjalnie zrobiłem je tak rozwlekłe żebyście mogli przyswoić sobie pewien tok rozumowania.

no dobra jak już mamy celownik to może warto byłoby stworzyć coś co będzie pokazywać nam bieżące wartości w osiach X oraz Y, tym czymś będzie ..... KROPKA
Nie jest to zwykła kropka uważne oko zauważy że jest to kropka 3D. Efekt taki uzyskamy odpowiednim wycieniowaniem dwóch gradientów oraz późniejszym nałożeniu ich na siebie, co czynimy następującym kodem
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i w standardzie, ci co chcą to F5, a reszta obrazek :P
Obrazek
W tym momencie możemy uznać że lewy panel mamy już skończony więc trzeba się zająć prawym, co czynimy wklepując ten kod
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w niniejszym kawałku kodu jak już wcześniej wspominałem możemy zaobserwować działanie klasy ColorBlend która się rózni tym od Blend że w niej podajemy jakie kolory mają po sobie następować i na jakich pozycjach natomiast przy Blend podajemy do jakiego wypełnienia mają dojść określone kolory i na jakich pozycjach.

W tym momencie wypadałby powiedzieć że to już koniec , ale niestety tak nie jest :P , dlatego że mamy już szatę graficzną naszej kontrolki, ale nie mamy jeszcze możliwości przekazywania parametrów do niej.
Dlatego musimy jeszcze wklepać następujący kod który umożliwi nam zmianę poszczególnych parametrów. Dlatego opuszczamy naszą metodę OnPaint i pod nią umieszczamy kod:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak zapewne zwróciliście uwagę nie przypisałem własności do określonych kategorii jak to zrobiłem poprzednio, otóż powód jest prozaiczny, nie chciało mi się zresztą wszystkie własności i tak wpadną do kategorii Misc więc będą w jednym miejscu :)

No i standardowo zamieszczam cały kod
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A Projekt i biblioteka będą wieczorem :)



Ostatnio edytowano 9 wrz 2013, o 12:54 przez Malutki_27, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2013, o 14:16 
Offline
Użytkownik

Dołączył(a): 27 wrz 2013
Posty: 30
Pomógł: 1

Widzę, że WPF zaczyna wnikać w środowiska mikrokontrolerowe :) No no.

Strasznie dużo klas importujesz (mam na myśli using). Kliknij prawym na using i wybierz "Remove unused usings".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2013, o 15:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Hehehhe .... masz rację z tymi klasami, to jakoś tak z przyzwyczajenia :roll:
I nie masz racji, bo to GDI :P , natomiast o WPF może kiedyś coś napiszę jak złapię wenę twórczą i o ile ktoś mnie nie ubiegnie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2013, o 16:35 
Offline
Użytkownik

Dołączył(a): 27 wrz 2013
Posty: 30
Pomógł: 1

Hmmm na pierwszy rzut oka wygląda jak WPF :) Nie przyjrzałem się :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 cze 2014, o 20:52 
Offline
Nowy

Dołączył(a): 21 kwi 2013
Posty: 11
Pomógł: 0

Mam gorąco prośbę do Malutki_27. Czy możesz i czy chcesz stworzyć kontrolkę GDI+(visual c#) wyświetlacza HD44780 2x16, mikro-przełącznika, diody i jakiegoś switch'a. Gdybyś oczywiście chciał się tym z Nami podzielić, to bardzo proszę na maila seb311@wp.pl. Pozdrawiam forumowiczów atnel.pl.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2014, o 15:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Nie mówię nie ;) , z tym że na pewno nie w najbliższym czasie . Obecnie mam na tapecie dosyć spory projekt z importem dużej ilości danych z różnych plików (csv,txt,xls i xlsx), a to wszystko jest upychane w *&*&%^%$&*)_*& Sql Compact. Prawdopodobnie z tego przy okazji coś powstanie , ale to się dopiero okaże ;)

Co do HD44780 to wydaje mi się że jest już jakiś fajny projekt na naszym forum, co do pozostałych kontrolek to jest pikuś na podstawie tego co jest na forum z powodzeniem możesz samodzielnie wykonać takie kontrolki, nie zapominając o tym że należy dodać dodatkowo obsługę zadrzeń :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO