<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=59&amp;t=4057&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-01T15:24:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=59&amp;t=4057&amp;mode</id>
<entry>
<author><name><![CDATA[sebolek66]]></name></author>
<updated>2014-06-01T15:24:02+01:00</updated>
<published>2014-06-01T15:24:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=82970#p82970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=82970#p82970"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=82970#p82970"><![CDATA[
Jesteś wielki. Wpadnij do mnie na piwo <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":-D" title="Bardzo szczęśliwy" /><br />Dla tych co mają MS Visual Expres podaję jak utworzyć control lib.<br />Visual C# Express 2008 does not come with a project template for creating custom controls (.dll files).  You can create your own template by following these steps:<br /><br />    1. Open Visual C# Express 2008.<br />    2. Create New WPF Application with name: MyLibrary<br />    3. Project &gt; Add User Control<br />    4. In Solution Explorer, Delete Window1.xaml and App.xaml (the corresponding .cs files should be deleted by this step)<br />    5. Project &gt; MyLibrary Properties &gt; Application &gt; Output Type = Class Library<br />    6. Build Solution - F6.  There should be no errors and the bin/Release folder should have a MyLibrary.dll file<br />    7. File &gt; Export Template<br />    8. Select Project Template then Next<br />    9. Under Template Options change name to: WPF Control Library and Description: Create WPF Control .dll<br /><br />The next time you open VS, you will find your newly created template ready to use.<br /><br />Kiedy już stworzysz control library, stwórz nowy projekt. W zakładce <strong>Tools/Choose Toolbox Items/.NET Framework Component</strong> wciśnij<strong> browse</strong> aby odnaleźć bibliotekę. Szukaj tam gdzie ją zapisałeś. Kiedy się pojawi zaznacz ptaszka i wciśnij ok. Od tej pory masz kontrolkę kolegi <strong>Malutki_27</strong>. I nie pisz, że nie umiesz angielskiego, lub czy da się krócej. On się namęczył tobie przypada nauka tworzenia i dodawania własnych kontrolek dzięki temu prostemu tutorialowi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1247">sebolek66</a> — 1 cze 2014, o 15:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2014-04-10T09:31:18+01:00</updated>
<published>2014-04-10T09:31:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=77527#p77527</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=77527#p77527"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=77527#p77527"><![CDATA[
Znaczy się że źle skopiowałeś<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 10 kwi 2014, o 09:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Riw]]></name></author>
<updated>2014-03-26T20:29:13+01:00</updated>
<published>2014-03-26T20:29:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=75950#p75950</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=75950#p75950"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=75950#p75950"><![CDATA[
Kod który skopiowałem nie działa -,-<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3706">Riw</a> — 26 mar 2014, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-06T08:51:33+01:00</updated>
<published>2013-09-06T08:51:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48399#p48399</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48399#p48399"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48399#p48399"><![CDATA[
<div class="quotetitle">ddradek11 napisał(a):</div><div class="quotecontent"><br />wybieram USerControl. ale chyba to nie jest to.<br /></div><br /><br />To jest, to tylko według sposobu który podał ci MichałXY.<br /><br />Różnica pomiędzy tym jak ja pokazałem a tym co pokazał Michał jest taka że, w moim przypadku tworzysz pliczek dll , natomiast tak jak Michał pokazał kontrolkę nie jako wbudowujesz w swoją aplikację.<br /><br /><br /><br />Aby zmienić framework w projekcie wystarczy w Solution Explorer kliknąć prawym przyciskiem myszy na kontrolki_avr, wybrać właściwości<br /><a href="http://forum.atnel.pl/_obrazki/o/225/5fdec1c3116970813ce526379b924146.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/5fdec1c3116970813ce526379b924146.png" alt="Obrazek" /></a><br /><br />Następnie application i już jesteśmy tam gdzie trzeba <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/0721d6508ad7dbaf8359634d6957b336.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/0721d6508ad7dbaf8359634d6957b336.png" alt="Obrazek" /></a><br /><br /><br />Dodałem skompilowaną kontrolkę na Framework 4.0.<br /><br /><br />Co do namespace jak masz chęć dowiedzieć się co jest nie tak, to zamieść spakowany projekt , wtedy będzie można powiedzieć gdzie jest problem.<br /><br />Bo na razie można jedynie odpowiedzieć tak jak napisał @arturf209<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 6 wrz 2013, o 08:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2013-09-05T23:43:47+01:00</updated>
<published>2013-09-05T23:43:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48384#p48384</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48384#p48384"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48384#p48384"><![CDATA[
A przecież masz wyraźnie napisane, że czepia się namespace czy przestrzeni nazw. Tworząc projekt, tworzy się automatycznie jakiś namespace, jeżeli mnie pamięć nie zawodzi to nazywa się tak jak nazwa projektu. Ty pomieszałeś pewnie dwa z różnych i stąd problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 5 wrz 2013, o 23:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ddradek11]]></name></author>
<updated>2013-09-05T23:15:43+01:00</updated>
<published>2013-09-05T23:15:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48376#p48376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48376#p48376"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48376#p48376"><![CDATA[
Kombinuje jak koń pod górę i nie daje rady znaleźć  &quot;Windows Forms Control Library&quot;.<br />nawet zainstalowałem nowszą wersje Microsoft Visual Studio 2012.<br />Po utworzeniu nowego projektu klikam na add i:<br />Visual 2010<br /><a href="http://forum.atnel.pl/_obrazki/o/828/273bc4ea87483e6a3325665c28e1c0eb.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/828/273bc4ea87483e6a3325665c28e1c0eb.JPG" alt="Obrazek" /></a><br /><br />a w Visual 2012<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/828/4c2b07e01190a88cfbe1f7e15bd820eb.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/828/4c2b07e01190a88cfbe1f7e15bd820eb.JPG" alt="Obrazek" /></a><br /><br />wybieram USerControl. ale chyba to nie jest to.<br /><br /><br /><br />Mam wersie express może tu coś jest nie tak?<br /><br />Po dodaniu kontrolki do projektu. wyskakuje błąd:<br /><a href="http://forum.atnel.pl/_obrazki/o/828/a4ae4d3cdcff6d36120fb0ee54c08cf5.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/828/a4ae4d3cdcff6d36120fb0ee54c08cf5.JPG" alt="Obrazek" /></a><br /><br />pewnie coś nie tak z framework?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=828">ddradek11</a> — 5 wrz 2013, o 23:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-04T22:51:53+01:00</updated>
<published>2013-09-04T22:51:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48217#p48217</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48217#p48217"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48217#p48217"><![CDATA[
<div class="quotetitle">ddradek11 napisał(a):</div><div class="quotecontent"><br />Ja nie mogę znaleźć &quot;Windows Forms Control Library&quot; wponiżej foto.<br /></div><br />Zawsze możesz uruchomić wiersz poleceń w trybie administratora, zajrzeć do folderu IDE w lokalizacji dysk:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE ( lokalizacja dla VS 2012 ver. 32bit ) i odpalić  <strong>devenv /installvstemplates</strong><br /><br />Po tym powinny się pojawić dodatkowe szablony <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , a jeżeli się nie pojawią to daj znać i będziemy kombinować <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Albo zrób jak radzi Michał ale wtedy kontrolka będzie bezpośrednio w projekcie i żeby ją obejrzeć to musisz ją umieścić na formularzu.<br /><br /><div class="quotetitle">MichalXY napisał(a):</div><div class="quotecontent"><br />P.S <strong>Malutki_27</strong> fajny poradnik i chylę czoła nad taką fajną kontrolką bo pewnie &quot;trochę&quot; roboty ciebie kosztowało zrobić taki wskaźnik analogowy w GDI  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<br /></div><br /><br />No to się cieszę że udało mi się wstrzelić w ciekawy temat <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Wbrew pozorom jest nie jest to trudne, a tutaj zaledwie liznąłem temat <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , na szczęście mam jeszcze parę kontrolek w zanadrzu  <img src="https://forum.atnel.pl/images/smilies/icon_twisted.gif" alt=":twisted:" title="Szalony" /> ale na razie cicho sza <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo muszę obmyśleć ich działanie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i może tym razem zahaczę o event'y których w ogóle nie ruszyłem tutaj i może napiszę coś z macierzami <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 4 wrz 2013, o 22:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2013-09-04T21:01:12+01:00</updated>
<published>2013-09-04T21:01:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48200#p48200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48200#p48200"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48200#p48200"><![CDATA[
Najpierw musisz założyć projekt a następnie jak masz widok formatki to na belce pod menu głównym masz coś takiego jak add i to klikasz a następnie klikasz na Windows Forms Control Libary. <br /><br />Pozdrawiam!<br /><br />P.S <strong>Malutki_27</strong> fajny poradnik i chylę czoła nad taką fajną kontrolką bo pewnie &quot;trochę&quot; roboty ciebie kosztowało zrobić taki wskaźnik analogowy w GDI  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 4 wrz 2013, o 21:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ddradek11]]></name></author>
<updated>2013-09-04T20:59:11+01:00</updated>
<published>2013-09-04T20:59:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48197#p48197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48197#p48197"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48197#p48197"><![CDATA[
Ja nie mogę znaleźć &quot;Windows Forms Control Library&quot; wponiżej foto. <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/828/501e0133bf83d70ebd04ca24cecbea54.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/828/501e0133bf83d70ebd04ca24cecbea54.JPG" alt="Obrazek" /></a><br /><br />Trzeba coś doinstalować? <br /><br />Dzięki i proszę więcej takich poradników.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=828">ddradek11</a> — 4 wrz 2013, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-03T20:49:06+01:00</updated>
<published>2013-09-03T20:49:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48067#p48067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48067#p48067"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48067#p48067"><![CDATA[
Cieszę się że się komuś to przyda <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Jak będę miał jeszcze chwilkę to postaram się troszkę bardziej zgłębić temat.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 3 wrz 2013, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-09-03T17:39:34+01:00</updated>
<published>2013-09-03T17:39:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48037#p48037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48037#p48037"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48037#p48037"><![CDATA[
Ja bym nawet dodał - że kawał DOBREJ, SOLIDNEJ ROBOTY, przyda się oj przyda ....<br /><br />Niedługo na naszym forum będzie można zebrać naprawdę super poradnik - taki praktyczny do C# <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Brawo <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> aż sam się cieszę, że będę miał co poczytać<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 wrz 2013, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2013-09-03T15:45:55+01:00</updated>
<published>2013-09-03T15:45:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48018#p48018</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48018#p48018"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48018#p48018"><![CDATA[
Kawał dobrej roboty. Brawo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 3 wrz 2013, o 15:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-06T08:32:30+01:00</updated>
<published>2013-09-03T15:39:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48016#p48016</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48016#p48016"/>
<title type="html"><![CDATA[Visual C# -- Własna kontrolka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4057&amp;p=48016#p48016"><![CDATA[
Tak siedzę przed monitorem i zastanawiam się jak tu zacząć  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><br />I chyba zacznę prosto z mostu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Wielu z Was robi różne projekty na AVR-ach ale czasem brakuje możliwości prezentacji działania takiego układu na <br />PC z prozaicznego powodu, brakuje odpowiednich kontrolek.<br />Otóż sprawa wcale nie jest z góry przegrana, bo takie cuda robi się prościej niż wam się wydaje <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> co udowodnię Wam <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />Kontrolki można &quot;stworzyć&quot; w C# na wiele różnych sposobów np. używając GDI+ czy też WPF.<br />Ja na razie wybiorę GDI+ chociażby z chęci przypomnienia sobie tego cuda (w końcu zaczyna się niedługo semestr i lepiej przypomnieć sobie co nie co <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br /><br />No to do dzieła <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Odpalamy VS --&gt; Nowy project --&gt; Windows Forms Control Library i nazywamy ją np:kontrolki_avr<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/47faacd3d98e08ce5d0c09c82fd20aca.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/47faacd3d98e08ce5d0c09c82fd20aca.png" alt="Obrazek" /></a><br /><br />Po tej operacji ukaże nam się takie okienko <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/c052a554ea14440499cbda31f3da21f3.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/c052a554ea14440499cbda31f3da21f3.png" alt="Obrazek" /></a><br /><br />Zaglądamy do Solution Explorer i zmieniamy nazwę naszej kontrolki z &quot;UserControl1&quot; na &quot;Wskaznik&quot;<br />Gdy wyskoczy nam komunikat jak na obrazku bez wahania się zgadzamy (będzie mniej roboty <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/290bc2774a788481dc39d0d60a5dec69.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/290bc2774a788481dc39d0d60a5dec69.png" alt="Obrazek" /></a><br /><br />Po tej operacji odnajdujemy class Wskaznik i klikamy na niej dwa razy <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/e3c59e075d68485eba51388958fc9c64.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/e3c59e075d68485eba51388958fc9c64.png" alt="Obrazek" /></a><br /><br />I już nareszcie zabieramy się do właściwego projektowania i zaprogramowania naszej kontrolki która będzie wyglądała tak :<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/69a81ac4ff888fe2df1d1c13bc71186d.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/69a81ac4ff888fe2df1d1c13bc71186d.png" alt="Obrazek" /></a><br /><br />No to do dzieła.<br /><br />Zaglądamy jeszcze do Wskaznik.cs(design) i we właściwościach ustawiamy wielkość naszej kontrolki na Width=300 Height = 150 ,<br />następnie odnajdujemy BorderStyle i suatwiamy na FixedSingle.<br />Po tych czynnościach wracamy z powrotem do Wskaznik.cs<br /><br />Na początek musimy podłączyć sobie referencję do rysowania 2D co czynimy na początku pliku w następujący sposób<br />[syntax=csharp]using System.Drawing.Drawing2D;[/syntax]<br />Po dodaniu referencji warto by się zastanowić jakie własności czy też właściwości będą nam potrzebne <br />( przed tym etapem gorąco polecam przeprosić się z kartką a także ołówkiem i rozrysować sobie przyszłą kontrolkę co ułatwi późniejsze pisanie kodu )<br />ja wybrałem takie jak:<br />- Wartość aktualna<br />- Wartość Maksymalna<br />- Wartość Minimalna<br />- różne grubości linii oraz kolory które będą potrzebne do rysowania<br />- oraz fonty do cyferek<br />i teraz plik  wskazniki.cs u mnie wygląda tak:<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Drawing;<br />using System.Data;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br />using System.Windows.Forms;<br />using System.Drawing.Drawing2D;<br /><br />namespace kontrolki_avr<br />{<br />    public partial class Wskaznik: UserControl<br />    {<br />#region zmienne<br />        private Color tlo = Color.Transparent;<br />        private Color kolorObramowaniaSkali = Color.Brown;<br />        private Color kolorWskazowki = Color.Brown;<br />        private Color kolorCzcionkiNaSkali = Color.DimGray;<br />        private Color kolorMalejSkali = Color.Green;<br />        private Color kolorDuzejSkali = Color.Black;<br />        private Color kolorCzcionkiPomiaru = Color.White;<br />        private Color kolorPolaPomiaru = Color.DimGray;<br />        private Color kolorObramowaniaPolaPomiaru = Color.AliceBlue;<br />        private float gruboscObramowaniaSkali = 2;<br />        private float gruboscWskazowki = 1;<br />        private float gruboscMalejSkali = 1;<br />        private float gruboscDuzejSkali = 2;<br />        private float gruboscObramowaniaPolaPomiaru = 2;<br />        private Font czcionkaSkali = new Font(&quot;Arial&quot;, 14, FontStyle.Italic);<br />        private Font czcionkaPolaPomiaru = new Font(&quot;Arial&quot;, 20, FontStyle.Bold | FontStyle.Italic);<br />        private int wartosc = 0;<br />        private int minWartosc = 0;<br />        private int maxWartosc = 100;<br />#endregion<br />        public Wskaznik()<br />        {<br />            InitializeComponent();<br />        }<br />    }<br />}[/syntax]<br />Jak widać zmienne z wartościami domyślnymi są prywatne bo przecież nie chcemy aby ktoś niepowołany miał do nich dostęp, zresztą i tak dobudujemy do nich &quot;logikę&quot;<br />która umożliwi nam zmianę tych wartości nie jako z zewnątrz.<br /><br />A skoro już o tym mowa, w/w logika wygląda tak:<br />[syntax=csharp]&#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Bierząca wartość&quot;)&#93;<br />        public int WartoscAktualna<br />        {<br />            get { return wartosc; }<br />            set<br />            {<br />                if (wartosc != value)<br />                {<br />                    wartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }[/syntax]<br />Tutaj zatrzymamy się na chwilkę aby wyjaśnić co robią poszczególne linie:<br />Pierwsza linia mówi nam że ta właściwość ma być widoczna we właściwościach kontrolki (Properties), <br />gdy w tej linii zmienimy wartość true na false nie będzie ona dostępna. Czasami zachodzi potrzeba debugowania jakieś zmiennej która ogólnie<br />później ma być nie dostępna ...<br /><br />Druga linia wskazuje jak się nazywa grupa właściwości w której ma być zlokalizowana nasza wartość, można wpisać tutaj dowolną nazwę lub nazwę znajdującą się już we właściwościach<br />Trzecia linia to nic innego jak opis tego co ta opcja zmienia.<br />Dalej to już standardowe wykorzystanie akcesorów, gdzie:<br /><strong>get</strong> - pobiera wartość ze zmiennej i wystawia ją na zewnątrz<br /><strong>set</strong> - ustawia wartość zmiennej. Dodatkowo w set można ustawić dodatkowe warunki sprawdzenia wartości przed wpisaniem jej na swoje miejsce, co zresztą <br />uczyniłem poprzez warunek if. Skoro już jesteśmy przy nim dlatego został w ten sposób napisany aby zapobiec ciągłemu &quot;przerysowywaniu&quot; naszej kontrolki przy zmianie wartości a raczej braku jej zmiany.<br /><br />Dla chcących troszkę poklepać zamieszczam logikę<br />[syntax=csharp]#region kolory<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Bierząca wartość&quot;)&#93;<br />        public int WartoscAktualna<br />        {<br />            get { return wartosc; }<br />            set<br />            {<br />                if (wartosc != value)<br />                {<br />                    wartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Wartośc minimalna wskaźnika&quot;)&#93;<br />        public int WartoscMinimalna<br />        {<br />            get { return minWartosc; }<br />            set<br />            {<br />                if (minWartosc != value)<br />                {<br />                    minWartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Wartośc maksymalna wskaźnika&quot;)&#93;<br />        public int WartoscMaksymalna<br />        {<br />            get { return maxWartosc; }<br />            set<br />            {<br />                if (maxWartosc != value)<br />                {<br />                    maxWartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor Tła dla wskaźnika&quot;)&#93;<br />        public Color Tlo<br />        {<br />            get { return tlo; }<br />            set<br />            {<br />                if (tlo != value)<br />                {<br />                    tlo = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor obramowania skali&quot;)&#93;<br />        public Color KolorObramowaniaSkali<br />        {<br />            get { return kolorObramowaniaSkali; }<br />            set<br />            {<br />                if (kolorObramowaniaSkali != value)<br />                {<br />                    kolorObramowaniaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor wskazówki&quot;)&#93;<br />        public Color KolorWskazowki<br />        {<br />            get { return kolorWskazowki; }<br />            set<br />            {<br />                if (kolorWskazowki != value)<br />                {<br />                    kolorWskazowki = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor czcionki na skali&quot;)&#93;<br />        public Color KolorCzcionkiNaSkali<br />        {<br />            get { return kolorCzcionkiNaSkali; }<br />            set<br />            {<br />                if (kolorCzcionkiNaSkali != value)<br />                {<br />                    kolorCzcionkiNaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor podziałki na małej skali&quot;)&#93;<br />        public Color KolorMalejSkali<br />        {<br />            get { return kolorMalejSkali; }<br />            set<br />            {<br />                if (kolorMalejSkali != value)<br />                {<br />                    kolorMalejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor podziałki na dużej skali&quot;)&#93;<br />        public Color KolorDuzejSkali<br />        {<br />            get { return kolorDuzejSkali; }<br />            set<br />            {<br />                if (kolorDuzejSkali!=value)<br />                {<br />                    kolorDuzejSkali=value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor czcionki dla wartości pomiaru&quot;)&#93;<br />        public Color KolorCzcionkiPomiaru<br />        {<br />            get { return kolorCzcionkiPomiaru; }<br />            set<br />            {<br />                if (kolorCzcionkiPomiaru != value)<br />                {<br />                    kolorCzcionkiPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor pola na którym znajdują się wartości z pomiaru&quot;)&#93;<br />        public Color KolorPolaPomiaru<br />        {<br />            get { return kolorPolaPomiaru; }<br />            set<br />            {<br />                if (kolorPolaPomiaru != value)<br />                {<br />                    kolorPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor Obramowania pola pomiaru&quot;)&#93;<br />        public Color KolorObramowaniaPolaPomiaru<br />        {<br />            get { return kolorObramowaniaPolaPomiaru; }<br />            set<br />            {<br />                if(kolorObramowaniaPolaPomiaru!=value)<br />                kolorObramowaniaPolaPomiaru=value;<br />                Invalidate();<br />            }<br />        }<br />#endregion<br />#region grubosci_linii<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania skali&quot;)&#93;<br />        public float GruboscObramowaniaSkali<br />        {<br />            get { return gruboscObramowaniaSkali; }<br />            set<br />            {<br />                if (gruboscObramowaniaSkali != value)<br />                {<br />                    gruboscObramowaniaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość wskazówki&quot;)&#93;<br />        public float GruboscWskazowki<br />        {<br />            get { return gruboscWskazowki; }<br />            set<br />            {<br />                if (gruboscWskazowki != value)<br />                {<br />                    gruboscWskazowki = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość kresek małej skali&quot;)&#93;<br />        public float GruboscMalejSkali<br />        {<br />            get { return gruboscMalejSkali; }<br />            set<br />            {<br />                if (gruboscMalejSkali != value)<br />                {<br />                    gruboscMalejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość kresek dużej skali&quot;)&#93;<br />        public float GruboscDuzejSkali<br />        {<br />            get { return gruboscDuzejSkali; }<br />            set<br />            {<br />                if (gruboscDuzejSkali != value)<br />                {<br />                    gruboscDuzejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania pola pomiaru&quot;)&#93;<br />        public float GruboscObramowaniaPolaPomiaru<br />        {<br />            get { return gruboscObramowaniaPolaPomiaru; }<br />            set<br />            {<br />                if (gruboscObramowaniaPolaPomiaru != value)<br />                {<br />                    gruboscObramowaniaPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />#endregion<br />#region czcionki<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Czcionka dla skali&quot;)&#93;<br />        public Font CzcionkaSkali<br />        {<br />            get { return czcionkaSkali; }<br />            set<br />            {<br />                if (czcionkaSkali != value)<br />                {<br />                    czcionkaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania pola pomiaru&quot;)&#93;<br />        public Font CzcionaPolaPomiaru<br />        {<br />            get { return czcionkaPolaPomiaru; }<br />            set<br />            {<br />                if (czcionkaPolaPomiaru != value)<br />                {<br />                    czcionkaPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />#endregion[/syntax]<br /><br />Dla ciekwaskich którzy mają chęć zobaczyć efekty pracy zachęcam do użycia klawisza F5, gdzie po wciśnięciu go powinno ukazać nam się takie okienko<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/2fab8112ab69bc6064840d578d046f9a.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/2fab8112ab69bc6064840d578d046f9a.png" alt="Obrazek" /></a><br /><br />Jak widzicie na razie efekty naszego pisania pojawiły się w prawym okienku właściowści naszej kontrolki w postaci parametrów.<br /><br />Dzięki tym wszystkim operacjom mamy juz przygotowane pole do utworzenia właściwego wyglądu, który zaczniem od utworzenia funkcji nadpisującej rysowanie kontrolki,<br />a wygląda ona tak:<br /><br />[syntax=csharp]protected override void OnPaint(PaintEventArgs e)<br />        {<br />            base.OnPaint(e);<br />        }[/syntax]<br />I zaczynamy pisanie zaraz pod base.OnPaint(e); <br />Na początek powołamy do życia kilka lokalnych zmiennych pomocniczych które ułatwia nam obliczenia oraz pisanie kodu. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=csharp]float x = 0, y = 0;<br />            float xe = 0, ye = 0;<br />            float xee = 0, yee = 0;<br />            float xt = 0, yt = 0;[/syntax]<br />Zmienne które przechowują wartości kątów dla elpisy która jest na zewnątrz skali oraz zmienne niezbędne do jej utworzenia<br />[syntax=csharp]float Start = 190;<br />            float Stop = 160;<br />            float count = minWartosc;<br />            float stopnie = Start;[/syntax]<br />Struktura text umożliwi nam później sprawdzenie wielkości szerokości i wysokości tekstu która umożliwi nam prawidłowe pozycjonowanie go <br />oraz struktura przechowująca punkt centralny dla elipsy.<br />[syntax=csharp]SizeF text;<br />            PointF Center = new PointF(Width / 2, Height);[/syntax]<br />Ogranicznie blokujące proporcje kontrolgi żeby nam się nie rozjeżdżała. <br />[syntax=csharp]this.Height = this.Width / 2;[/syntax]<br />Powołyjemy do życia &quot;ołówek&quot; którym będziemy rysować po kontrolce oraz strukturę która umożliwia wypełnienie kształtów kolorem<br />[syntax=csharp]Pen p = new Pen(kolorObramowaniaSkali, gruboscObramowaniaSkali);<br />            SolidBrush b = new SolidBrush(tlo);[/syntax]<br />Będzie także potrzebna nam struktura która umożliwia rysowanie dowolnego kształtu<br />[syntax=csharp]GraphicsPath path = new GraphicsPath();[/syntax]<br />No to czas na naszą pierwszą łuk, a raczej jego fragment <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Pierwszy parametr to nasz ołówek który został zdefiniowany chwilkę wcześniej podczas deklaracji<br />Następnie dwa zera które odpowiadają połóżeniu prostokąta w który będzie wrysowany łuk,<br />kolejne dwie wartości odpowiadają za rozmiar tego prostokątka, następnie podajemy kąt od którego ma być rozpoczętę rysowanie i<br />ostatnia wartość to jak rozwarty ma być nasz łuk.<br />[syntax=csharp]e.Graphics.DrawArc(p, 0, 0, this.Width, (this.Height) * 2, Start, Stop);[/syntax]<br /><br />Dla ciekawskich F5 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Przed przystąpieniem do dalszego rysowania stworzymy sobie jeszcze przywatną metodą do przeliczenia stopni na radiany <br />którą możecie umieścić na końcu klasy Wskaznik a wygląda ona tak:<br />[syntax=csharp]private double Radians(double stopnie)<br />        {<br />            return stopnie * Math.PI / 180;<br />        }[/syntax]<br /><br />Skoro już możemy przeliczać na radiany to przystępujemy do narysowania skali, w tym celu wykorzystamy pętlę while która zakończy się w momencie osiągnięcia zadanego kąta<br />Same obliczenia są na tyle proste że nie ma sensu ich wyjaśniać, może tylko napiszę że został wykorzystany wzór na znalezienie dowolnego punktu <br />na elipsie (zmienne x..,y.. itd.)<br />[syntax=csharp]while (stopnie&lt;Start+Stop+1)<br />            {<br />                x =     (Center.X - 5)  * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />                y =     (Center.Y - 5)  * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />                xe =    (Center.X - 10) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />                ye =    (Center.Y - 10) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />                xee =   (Center.X - 15) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />                yee =   (Center.Y - 15) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />                <br />                p.Color = kolorMalejSkali;<br />                p.Width = gruboscMalejSkali;<br />                e.Graphics.DrawLine(p, x, y, xe, ye);<br />                if (count % 10 == 0)<br />                {<br />                    text = e.Graphics.MeasureString(count.ToString(), czcionkaSkali);<br />                    xt = (Center.X - text.Width - 7)  * (float)Math.Cos(Radians(stopnie)) + Center.X - text.Width / 2;<br />                    yt = (Center.Y - text.Height - 7) * (float)Math.Sin(Radians(stopnie)) + Center.Y - text.Height / 2;<br />                    <br />                    p.Color = kolorDuzejSkali;<br />                    p.Width = gruboscDuzejSkali;<br />                    e.Graphics.DrawLine(p, x, y, xee, yee);<br />                    b.Color = kolorCzcionkiNaSkali;<br />                    e.Graphics.DrawString(count.ToString(), czcionkaSkali, b, xt, yt);  <br />                }<br />                    stopnie += Stop / (maxWartosc-minWartosc);<br />                    count++;<br />            }[/syntax]<br /><br />Dla ciekawskich F5 (jak komuś przeszkadza wielkość czcionki na skali to sobie może zmieć w prawym okienku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br />A dla leniwych cała dotychczasowa zawartość kodu<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Drawing;<br />using System.Data;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br />using System.Windows.Forms;<br />using System.Drawing.Drawing2D;<br /><br />namespace kontrolki_avr<br />{<br />    public partial class Wskaznik: UserControl<br />    {<br />#region zmienne<br />        private Color tlo = Color.Transparent;<br />        private Color kolorObramowaniaSkali = Color.Brown;<br />        private Color kolorWskazowki = Color.Brown;<br />        private Color kolorCzcionkiNaSkali = Color.DimGray;<br />        private Color kolorMalejSkali = Color.Green;<br />        private Color kolorDuzejSkali = Color.Black;<br />        private Color kolorCzcionkiPomiaru = Color.White;<br />        private Color kolorPolaPomiaru = Color.DimGray;<br />        private Color kolorObramowaniaPolaPomiaru = Color.AliceBlue;<br />        private float gruboscObramowaniaSkali = 2;<br />        private float gruboscWskazowki = 1;<br />        private float gruboscMalejSkali = 1;<br />        private float gruboscDuzejSkali = 2;<br />        private float gruboscObramowaniaPolaPomiaru = 2;<br />        private Font czcionkaSkali = new Font(&quot;Arial&quot;, 14, FontStyle.Italic);<br />        private Font czcionkaPolaPomiaru = new Font(&quot;Arial&quot;, 20, FontStyle.Bold | FontStyle.Italic);<br />        private int wartosc = 0;<br />        private int minWartosc = 0;<br />        private int maxWartosc = 100;<br />#endregion<br /><br />        public Wskaznik()<br />        {<br />            InitializeComponent();<br />        }<br />        #region kolory<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Bierząca wartość&quot;)&#93;<br />        public int WartoscAktualna<br />        {<br />            get { return wartosc; }<br />            set<br />            {<br />                if (wartosc != value)<br />                {<br />                    wartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Wartośc minimalna wskaźnika&quot;)&#93;<br />        public int WartoscMinimalna<br />        {<br />            get { return minWartosc; }<br />            set<br />            {<br />                if (minWartosc != value)<br />                {<br />                    minWartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Wartośc maksymalna wskaźnika&quot;)&#93;<br />        public int WartoscMaksymalna<br />        {<br />            get { return maxWartosc; }<br />            set<br />            {<br />                if (maxWartosc != value)<br />                {<br />                    maxWartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor Tła dla wskaźnika&quot;)&#93;<br />        public Color Tlo<br />        {<br />            get { return tlo; }<br />            set<br />            {<br />                if (tlo != value)<br />                {<br />                    tlo = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor obramowania skali&quot;)&#93;<br />        public Color KolorObramowaniaSkali<br />        {<br />            get { return kolorObramowaniaSkali; }<br />            set<br />            {<br />                if (kolorObramowaniaSkali != value)<br />                {<br />                    kolorObramowaniaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor wskazówki&quot;)&#93;<br />        public Color KolorWskazowki<br />        {<br />            get { return kolorWskazowki; }<br />            set<br />            {<br />                if (kolorWskazowki != value)<br />                {<br />                    kolorWskazowki = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor czcionki na skali&quot;)&#93;<br />        public Color KolorCzcionkiNaSkali<br />        {<br />            get { return kolorCzcionkiNaSkali; }<br />            set<br />            {<br />                if (kolorCzcionkiNaSkali != value)<br />                {<br />                    kolorCzcionkiNaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor podziałki na małej skali&quot;)&#93;<br />        public Color KolorMalejSkali<br />        {<br />            get { return kolorMalejSkali; }<br />            set<br />            {<br />                if (kolorMalejSkali != value)<br />                {<br />                    kolorMalejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor podziałki na dużej skali&quot;)&#93;<br />        public Color KolorDuzejSkali<br />        {<br />            get { return kolorDuzejSkali; }<br />            set<br />            {<br />                if (kolorDuzejSkali != value)<br />                {<br />                    kolorDuzejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor czcionki dla wartości pomiaru&quot;)&#93;<br />        public Color KolorCzcionkiPomiaru<br />        {<br />            get { return kolorCzcionkiPomiaru; }<br />            set<br />            {<br />                if (kolorCzcionkiPomiaru != value)<br />                {<br />                    kolorCzcionkiPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor pola na którym znajdują się wartości z pomiaru&quot;)&#93;<br />        public Color KolorPolaPomiaru<br />        {<br />            get { return kolorPolaPomiaru; }<br />            set<br />            {<br />                if (kolorPolaPomiaru != value)<br />                {<br />                    kolorPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor Obramowania pola pomiaru&quot;)&#93;<br />        public Color KolorObramowaniaPolaPomiaru<br />        {<br />            get { return kolorObramowaniaPolaPomiaru; }<br />            set<br />            {<br />                if (kolorObramowaniaPolaPomiaru != value)<br />                    kolorObramowaniaPolaPomiaru = value;<br />                Invalidate();<br />            }<br />        }<br />        #endregion<br />        #region grubosci_linii<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania skali&quot;)&#93;<br />        public float GruboscObramowaniaSkali<br />        {<br />            get { return gruboscObramowaniaSkali; }<br />            set<br />            {<br />                if (gruboscObramowaniaSkali != value)<br />                {<br />                    gruboscObramowaniaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość wskazówki&quot;)&#93;<br />        public float GruboscWskazowki<br />        {<br />            get { return gruboscWskazowki; }<br />            set<br />            {<br />                if (gruboscWskazowki != value)<br />                {<br />                    gruboscWskazowki = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość kresek małej skali&quot;)&#93;<br />        public float GruboscMalejSkali<br />        {<br />            get { return gruboscMalejSkali; }<br />            set<br />            {<br />                if (gruboscMalejSkali != value)<br />                {<br />                    gruboscMalejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość kresek dużej skali&quot;)&#93;<br />        public float GruboscDuzejSkali<br />        {<br />            get { return gruboscDuzejSkali; }<br />            set<br />            {<br />                if (gruboscDuzejSkali != value)<br />                {<br />                    gruboscDuzejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania pola pomiaru&quot;)&#93;<br />        public float GruboscObramowaniaPolaPomiaru<br />        {<br />            get { return gruboscObramowaniaPolaPomiaru; }<br />            set<br />            {<br />                if (gruboscObramowaniaPolaPomiaru != value)<br />                {<br />                    gruboscObramowaniaPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        #endregion<br />        #region czcionki<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Czcionka dla skali&quot;)&#93;<br />        public Font CzcionkaSkali<br />        {<br />            get { return czcionkaSkali; }<br />            set<br />            {<br />                if (czcionkaSkali != value)<br />                {<br />                    czcionkaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania pola pomiaru&quot;)&#93;<br />        public Font CzcionaPolaPomiaru<br />        {<br />            get { return czcionkaPolaPomiaru; }<br />            set<br />            {<br />                if (czcionkaPolaPomiaru != value)<br />                {<br />                    czcionkaPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        #endregion<br />        protected override void OnPaint(PaintEventArgs e)<br />        {<br />            base.OnPaint(e);<br />            float x = 0, y = 0;<br />            float xe = 0, ye = 0;<br />            float xee = 0, yee = 0;<br />            float xt = 0, yt = 0;<br />            float Start = 190;<br />            float Stop = 160;<br />            float count = minWartosc;<br />            float stopnie = Start;<br />            SizeF text;<br />            PointF Center = new PointF(Width / 2, Height);<br />            this.Height = this.Width / 2;<br />            Pen p = new Pen(kolorObramowaniaSkali, gruboscObramowaniaSkali);<br />            SolidBrush b = new SolidBrush(tlo);<br />            GraphicsPath path = new GraphicsPath();<br />           e.Graphics.DrawArc(p, 0, 0, this.Width, (this.Height) * 2, Start, Stop);<br />           while (stopnie &lt; Start + Stop + 1)<br />           {<br />               x = (Center.X - 5) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />               y = (Center.Y - 5) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />               xe = (Center.X - 10) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />               ye = (Center.Y - 10) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />               xee = (Center.X - 15) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />               yee = (Center.Y - 15) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />               p.Color = kolorMalejSkali;<br />               p.Width = gruboscMalejSkali;<br />               e.Graphics.DrawLine(p, x, y, xe, ye);<br />               if (count % 10 == 0)<br />               {<br />                   text = e.Graphics.MeasureString(count.ToString(), czcionkaSkali);<br />                   xt = (Center.X - text.Width - 7) * (float)Math.Cos(Radians(stopnie)) + Center.X - text.Width / 2;<br />                   yt = (Center.Y - text.Height - 7) * (float)Math.Sin(Radians(stopnie)) + Center.Y - text.Height / 2;<br />                   p.Color = kolorDuzejSkali;<br />                   p.Width = gruboscDuzejSkali;<br />                   e.Graphics.DrawLine(p, x, y, xee, yee);<br />                   b.Color = kolorCzcionkiNaSkali;<br />                   e.Graphics.DrawString(count.ToString(), czcionkaSkali, b, xt, yt);<br />               }<br />               stopnie += Stop / (maxWartosc - minWartosc);<br />               count++;<br />           }<br />        }<br />        private double Radians(double stopnie)<br />        {<br />            return stopnie * Math.PI / 180;<br />        }<br />    }<br />}[/syntax]<br />Skoro mamy już tak dużo to teraz wypadało by skonstruować jakąś wskazówkię która by pokazywała nam bierzącą wartość<br />I znowu nic ciekawego, kolejne obliczenia po elipsie, przypisanie do &quot;ołówka&quot; koloru oraz grubości kreski oraz samo wyrysowanie wskazówki za pośrednictwem linii.<br />Może warto nadmienić że linie rysuje się troszkę innaczej niż pozostałe figury, po prostu podaje się początek oraz koniec linii w postaci współrzędnych.<br />Należy tylko pamiętać że tutaj jest troszkę innaczej niż przy współżędnych kartezjańskich dlatego że punkt (0,0) jest w górnym lewym rogu .....<br />[syntax=csharp]x = (Center.X - 5) * (float)Math.Cos(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.X;<br />            y = (Center.Y - 5) * (float)Math.Sin(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.Y;<br />            xee = (Center.X - 100) * (float)Math.Cos(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.X;<br />            yee = (Center.Y - 100) * (float)Math.Sin(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.Y;<br />            p.Color = kolorWskazowki;<br />            p.Width = gruboscWskazowki;<br />            e.Graphics.DrawLine(p, x, y, xee, yee);[/syntax]<br /><br />No cóż po woli zbliżamy się już do końca, dlatego wypadało by położyć przysłowiowa wisienkę na trocie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />W postaci pół elipsy po środku na kórej będą prezentowane aktualne wartości.<br />Tym razem wykorzystamy do tego klasę GraphicsPath a to dlatego że chciałem uzyskać dodatkowe obramowanie elipsy a już nie chciało mi sie klepać kodu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=csharp]path.AddArc(Width / 2 - Width / 3, Height / 2, (Width / 3) * 2, Height + Height / 2, 179, 182);<br />            b.Color = kolorPolaPomiaru;<br />            e.Graphics.FillPath(b, path);<br />            p.Color = kolorObramowaniaPolaPomiaru;<br />            p.Width = gruboscObramowaniaPolaPomiaru;<br />            e.Graphics.DrawPath(p, path);<br />            text = e.Graphics.MeasureString(wartosc.ToString(), czcionkaPolaPomiaru);<br />            b.Color = kolorCzcionkiPomiaru;<br />            e.Graphics.DrawString(wartosc.ToString(), czcionkaPolaPomiaru, b, new PointF((Width / 2 - text.Width / 2),(Height - text.Height * 1.5f)));[/syntax]<br /><br />Dla ciekawskich F5<br /><br />Tak się przyglądamy tej naszej kontrolce ... i co ? Wygląda jakoś kanciasto <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> , więc czym prędzej biegniemy w naszej metodzie na początek <br />i zaraz za <br />[syntax=csharp]base.OnPaint(e);[/syntax]<br /><br />klepiemy tą linijke kodu która włączy nam AntiAliasing żeby nasza kontrolka wyglądała po ludzku.<br /><br />[syntax=csharp]e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;[/syntax]<br /><br />Dodatkowo warto też włąćzyć podwójne buforowanie żeby kontrolka nie mrygała nam podczas szybkich zmian wartości, <br />robi się to w public Wskaznik() który powinien wyglądać tak:<br />[syntax=csharp]public Wskaznik()<br />        {<br />            InitializeComponent();<br />            this.DoubleBuffered = true;<br />            this.BackColor = tlo;<br />        }[/syntax]<br />I jak zwykle dla leniwych cały kod<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Drawing;<br />using System.Data;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br />using System.Windows.Forms;<br />using System.Drawing.Drawing2D;<br /><br />namespace kontrolki_avr<br />{<br />    public partial class Wskaznik: UserControl<br />    {<br />#region zmienne<br />        private Color tlo = Color.Transparent;<br />        private Color kolorObramowaniaSkali = Color.Brown;<br />        private Color kolorWskazowki = Color.Brown;<br />        private Color kolorCzcionkiNaSkali = Color.DimGray;<br />        private Color kolorMalejSkali = Color.Green;<br />        private Color kolorDuzejSkali = Color.Black;<br />        private Color kolorCzcionkiPomiaru = Color.White;<br />        private Color kolorPolaPomiaru = Color.DimGray;<br />        private Color kolorObramowaniaPolaPomiaru = Color.AliceBlue;<br />        private float gruboscObramowaniaSkali = 2;<br />        private float gruboscWskazowki = 1;<br />        private float gruboscMalejSkali = 1;<br />        private float gruboscDuzejSkali = 2;<br />        private float gruboscObramowaniaPolaPomiaru = 2;<br />        private Font czcionkaSkali = new Font(&quot;Arial&quot;, 14, FontStyle.Italic);<br />        private Font czcionkaPolaPomiaru = new Font(&quot;Arial&quot;, 20, FontStyle.Bold | FontStyle.Italic);<br />        private int wartosc = 0;<br />        private int minWartosc = 0;<br />        private int maxWartosc = 100;<br />#endregion<br />        public Wskaznik()<br />        {<br />            InitializeComponent();<br />            this.DoubleBuffered = true;<br />            this.BackColor = tlo;<br />        }<br />        #region kolory<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Bierząca wartość&quot;)&#93;<br />        public int WartoscAktualna<br />        {<br />            get { return wartosc; }<br />            set<br />            {<br />                if (wartosc != value)<br />                {<br />                    wartosc = value;<br />                    Invalidate();<br />                }<br />            }<br /><br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Wartośc minimalna wskaźnika&quot;)&#93;<br />        public int WartoscMinimalna<br />        {<br />            get { return minWartosc; }<br />            set<br />            {<br />                if (minWartosc != value)<br />                {<br />                    minWartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Wartośc maksymalna wskaźnika&quot;)&#93;<br />        public int WartoscMaksymalna<br />        {<br />            get { return maxWartosc; }<br />            set<br />            {<br />                if (maxWartosc != value)<br />                {<br />                    maxWartosc = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor Tła dla wskaźnika&quot;)&#93;<br />        public Color Tlo<br />        {<br />            get { return tlo; }<br />            set<br />            {<br />                if (tlo != value)<br />                {<br />                    tlo = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor obramowania skali&quot;)&#93;<br />        public Color KolorObramowaniaSkali<br />        {<br />            get { return kolorObramowaniaSkali; }<br />            set<br />            {<br />                if (kolorObramowaniaSkali != value)<br />                {<br />                    kolorObramowaniaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor wskazówki&quot;)&#93;<br />        public Color KolorWskazowki<br />        {<br />            get { return kolorWskazowki; }<br />            set<br />            {<br />                if (kolorWskazowki != value)<br />                {<br />                    kolorWskazowki = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor czcionki na skali&quot;)&#93;<br />        public Color KolorCzcionkiNaSkali<br />        {<br />            get { return kolorCzcionkiNaSkali; }<br />            set<br />            {<br />                if (kolorCzcionkiNaSkali != value)<br />                {<br />                    kolorCzcionkiNaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor podziałki na małej skali&quot;)&#93;<br />        public Color KolorMalejSkali<br />        {<br />            get { return kolorMalejSkali; }<br />            set<br />            {<br />                if (kolorMalejSkali != value)<br />                {<br />                    kolorMalejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor podziałki na dużej skali&quot;)&#93;<br />        public Color KolorDuzejSkali<br />        {<br />            get { return kolorDuzejSkali; }<br />            set<br />            {<br />                if (kolorDuzejSkali != value)<br />                {<br />                    kolorDuzejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor czcionki dla wartości pomiaru&quot;)&#93;<br />        public Color KolorCzcionkiPomiaru<br />        {<br />            get { return kolorCzcionkiPomiaru; }<br />            set<br />            {<br />                if (kolorCzcionkiPomiaru != value)<br />                {<br />                    kolorCzcionkiPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor pola na którym znajdują się wartości z pomiaru&quot;)&#93;<br />        public Color KolorPolaPomiaru<br />        {<br />            get { return kolorPolaPomiaru; }<br />            set<br />            {<br />                if (kolorPolaPomiaru != value)<br />                {<br />                    kolorPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Kolor Obramowania pola pomiaru&quot;)&#93;<br />        public Color KolorObramowaniaPolaPomiaru<br />        {<br />            get { return kolorObramowaniaPolaPomiaru; }<br />            set<br />            {<br />                if (kolorObramowaniaPolaPomiaru != value)<br />                    kolorObramowaniaPolaPomiaru = value;<br />                Invalidate();<br />            }<br />        }<br />        #endregion<br />        #region grubosci_linii<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania skali&quot;)&#93;<br />        public float GruboscObramowaniaSkali<br />        {<br />            get { return gruboscObramowaniaSkali; }<br />            set<br />            {<br />                if (gruboscObramowaniaSkali != value)<br />                {<br />                    gruboscObramowaniaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość wskazówki&quot;)&#93;<br />        public float GruboscWskazowki<br />        {<br />            get { return gruboscWskazowki; }<br />            set<br />            {<br />                if (gruboscWskazowki != value)<br />                {<br />                    gruboscWskazowki = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość kresek małej skali&quot;)&#93;<br />        public float GruboscMalejSkali<br />        {<br />            get { return gruboscMalejSkali; }<br />            set<br />            {<br />                if (gruboscMalejSkali != value)<br />                {<br />                    gruboscMalejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość kresek dużej skali&quot;)&#93;<br />        public float GruboscDuzejSkali<br />        {<br />            get { return gruboscDuzejSkali; }<br />            set<br />            {<br />                if (gruboscDuzejSkali != value)<br />                {<br />                    gruboscDuzejSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania pola pomiaru&quot;)&#93;<br />        public float GruboscObramowaniaPolaPomiaru<br />        {<br />            get { return gruboscObramowaniaPolaPomiaru; }<br />            set<br />            {<br />                if (gruboscObramowaniaPolaPomiaru != value)<br />                {<br />                    gruboscObramowaniaPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        #endregion<br />        #region czcionki<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Czcionka dla skali&quot;)&#93;<br />        public Font CzcionkaSkali<br />        {<br />            get { return czcionkaSkali; }<br />            set<br />            {<br />                if (czcionkaSkali != value)<br />                {<br />                    czcionkaSkali = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        &#91;System.ComponentModel.Browsable(true),<br />            System.ComponentModel.Category(&quot;AA_Wskaznik&quot;),<br />            System.ComponentModel.Description(&quot;Grubość obramowania pola pomiaru&quot;)&#93;<br />        public Font CzcionaPolaPomiaru<br />        {<br />            get { return czcionkaPolaPomiaru; }<br />            set<br />            {<br />                if (czcionkaPolaPomiaru != value)<br />                {<br />                    czcionkaPolaPomiaru = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        #endregion<br />        protected override void OnPaint(PaintEventArgs e)<br />        {<br />            base.OnPaint(e);<br />            float x = 0, y = 0;<br />            float xe = 0, ye = 0;<br />            float xee = 0, yee = 0;<br />            float xt = 0, yt = 0;<br />            float Start = 190;<br />            float Stop = 160;<br />            float count = minWartosc;<br />            float stopnie = Start;<br />            SizeF text;<br />            PointF Center = new PointF(Width / 2, Height);<br />            this.Height = this.Width / 2;<br />            Pen p = new Pen(kolorObramowaniaSkali, gruboscObramowaniaSkali);<br />            SolidBrush b = new SolidBrush(tlo);<br />            GraphicsPath path = new GraphicsPath();<br />            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;<br />           e.Graphics.DrawArc(p, 0, 0, this.Width, (this.Height) * 2, Start, Stop);<br />           while (stopnie &lt; Start + Stop + 1)<br />           {<br />               x = (Center.X - 5) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />               y = (Center.Y - 5) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />               xe = (Center.X - 10) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />               ye = (Center.Y - 10) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />               xee = (Center.X - 15) * (float)Math.Cos(Radians(stopnie)) + Center.X;<br />               yee = (Center.Y - 15) * (float)Math.Sin(Radians(stopnie)) + Center.Y;<br />               p.Color = kolorMalejSkali;<br />               p.Width = gruboscMalejSkali;<br />               e.Graphics.DrawLine(p, x, y, xe, ye);<br />               if (count % 10 == 0)<br />               {<br />                   text = e.Graphics.MeasureString(count.ToString(), czcionkaSkali);<br />                   xt = (Center.X - text.Width - 7) * (float)Math.Cos(Radians(stopnie)) + Center.X - text.Width / 2;<br />                   yt = (Center.Y - text.Height - 7) * (float)Math.Sin(Radians(stopnie)) + Center.Y - text.Height / 2;<br />                   p.Color = kolorDuzejSkali;<br />                   p.Width = gruboscDuzejSkali;<br />                   e.Graphics.DrawLine(p, x, y, xee, yee);<br />                   b.Color = kolorCzcionkiNaSkali;<br />                   e.Graphics.DrawString(count.ToString(), czcionkaSkali, b, xt, yt);<br />               }<br />               stopnie += Stop / (maxWartosc - minWartosc);<br />               count++;<br />           }<br />           x = (Center.X - 5) * (float)Math.Cos(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.X;<br />           y = (Center.Y - 5) * (float)Math.Sin(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.Y;<br />           xee = (Center.X - 100) * (float)Math.Cos(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.X;<br />           yee = (Center.Y - 100) * (float)Math.Sin(Radians(Start + Stop / (WartoscMaksymalna - minWartosc) * (wartosc - minWartosc))) + Center.Y;<br />           p.Color = kolorWskazowki;<br />           p.Width = gruboscWskazowki;<br />           e.Graphics.DrawLine(p, x, y, xee, yee);<br />           path.AddArc(Width / 2 - Width / 3, Height / 2, (Width / 3) * 2, Height + Height / 2, 179, 182);<br />           b.Color = kolorPolaPomiaru;<br />           e.Graphics.FillPath(b, path);<br />           p.Color = kolorObramowaniaPolaPomiaru;<br />           p.Width = gruboscObramowaniaPolaPomiaru;<br />           e.Graphics.DrawPath(p, path);<br />           text = e.Graphics.MeasureString(wartosc.ToString(), czcionkaPolaPomiaru);<br />           b.Color = kolorCzcionkiPomiaru;<br />           e.Graphics.DrawString(wartosc.ToString(), czcionkaPolaPomiaru, b, new PointF((Width / 2 - text.Width / 2), (Height - text.Height * 1.5f)));<br />           path.AddArc(Width / 2 - Width / 3, Height / 2, (Width / 3) * 2, Height + Height / 2, 179, 182);<br />           b.Color = kolorPolaPomiaru;<br />           e.Graphics.FillPath(b, path);<br />           p.Color = kolorObramowaniaPolaPomiaru;<br />           p.Width = gruboscObramowaniaPolaPomiaru;<br />           e.Graphics.DrawPath(p, path);<br />           text = e.Graphics.MeasureString(wartosc.ToString(), czcionkaPolaPomiaru);<br />           b.Color = kolorCzcionkiPomiaru;<br />           e.Graphics.DrawString(wartosc.ToString(), czcionkaPolaPomiaru, b, new PointF((Width / 2 - text.Width / 2), (Height - text.Height * 1.5f)));<br />        }<br />        private double Radians(double stopnie)<br />        {<br />            return stopnie * Math.PI / 180;<br />        }<br />    }<br />}[/syntax]<br />A teraz nie pozostaje już nam nic innego jak utworzyć nowy projekt <br />, zajrzeć do menu TOOLS --&gt; Chooice toolbox items<br />zakładka .Net FrameWork Components <br />następnie Browse i wskazać naszą dll-ke która znajduje się w katalogu bin\debug naszego projektu<br /><br />P.S tak jak obiecałem dołączam bibliotekę i projekt<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 3 wrz 2013, o 15:39</p><hr />
]]></content>
</entry>
</feed>