<?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=4117&amp;mode" />

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

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

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=83207#p83207"><![CDATA[
Nie mówię nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , 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 *&amp;*&amp;%^%$&amp;*)_*&amp; Sql Compact. Prawdopodobnie z tego przy okazji coś powstanie , ale to się dopiero okaże <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />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ń <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 3 cze 2014, o 15:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sebolek66]]></name></author>
<updated>2014-06-02T20:52:58+01:00</updated>
<published>2014-06-02T20:52:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=83128#p83128</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=83128#p83128"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka cd.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=83128#p83128"><![CDATA[
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 <!-- e --><a href="mailto:seb311@wp.pl">seb311@wp.pl</a><!-- e -->. Pozdrawiam forumowiczów atnel.pl.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1247">sebolek66</a> — 2 cze 2014, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kaamil]]></name></author>
<updated>2013-09-27T16:35:35+01:00</updated>
<published>2013-09-27T16:35:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51137#p51137</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51137#p51137"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka cd.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51137#p51137"><![CDATA[
Hmmm na pierwszy rzut oka wygląda jak WPF <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie przyjrzałem się <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1805">kaamil</a> — 27 wrz 2013, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-27T15:02:53+01:00</updated>
<published>2013-09-27T15:02:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51121#p51121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51121#p51121"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka cd.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51121#p51121"><![CDATA[
Hehehhe .... masz rację z tymi klasami, to jakoś tak z przyzwyczajenia <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br />I nie masz racji, bo to GDI <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> , natomiast o WPF może kiedyś coś napiszę jak złapię wenę twórczą i o ile ktoś mnie nie ubiegnie <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> — 27 wrz 2013, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kaamil]]></name></author>
<updated>2013-09-27T14:16:08+01:00</updated>
<published>2013-09-27T14:16:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51110#p51110</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51110#p51110"/>
<title type="html"><![CDATA[Re: Visual C# -- Własna kontrolka cd.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=51110#p51110"><![CDATA[
Widzę, że WPF zaczyna wnikać w środowiska mikrokontrolerowe <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> No no.<br /><br />Strasznie dużo klas importujesz (mam na myśli using). Kliknij prawym na using i wybierz &quot;Remove unused usings&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1805">kaamil</a> — 27 wrz 2013, o 14:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-09T12:54:35+01:00</updated>
<published>2013-09-08T22:52:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=48865#p48865</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=48865#p48865"/>
<title type="html"><![CDATA[Visual C# -- Własna kontrolka cd.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4117&amp;p=48865#p48865"><![CDATA[
Ok. Tym razem pobawimy się troszkę gradientami i przy okazji stworzymy kontrolkę dla akcelerometru która będzie wyglądała prawie tak <br /><a href="http://forum.atnel.pl/_obrazki/o/225/1710e70dce9dac3886d2cc142410c7af.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/1710e70dce9dac3886d2cc142410c7af.png" alt="Obrazek" /></a><br />A dlatego prawie tak bo to już od Was właściwie jak będzie wyglądać <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/6893734c33913162451ebbcf7216ecf8.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/6893734c33913162451ebbcf7216ecf8.png" alt="Obrazek" /></a><br />Klikamy w Solution Explorer PPM na kontrolki_avr ( dla jasności wykorzystuję poprzedni projekt żeby mieć kontrolki w jednej bibliotece )<br />Wybieramy Add --&gt; New Item następnie szukamy template'u User Control i nadajemu mu nazwę <strong>Akcelerometr</strong> (ważne żeby nazwa była taka sama)<br />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.<br />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<br />[syntax=csharp]public Akcelerometr()<br />        {<br />            InitializeComponent();<br />            this.DoubleBuffered = true;<br />        }[/syntax]<br /><br />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:<br />- kolory poszczególnych elementów<br />- ich rozmiary <br />- wartości bieżące, minimalne i maksymalne.<br /><br />w związku z tym ustawiamy się na początku klasy i klepiemy następujący kod <br /><br />[syntax=csharp]private float margines = 5;<br />        private float skalaX = 15;<br />        private float skalaY = 15;<br /><br />        private float wartoscX = 0;<br />        private float wartoscY = 0;<br />        private float wartoscZ = 0;<br />        private float minX = -127;<br />        private float maxX = 127;<br />        private float minY = -127;<br />        private float maxY = 127;<br />        private float minZ = -127;<br />        private float maxZ = 127;<br /><br />        private Color lewyPanelKolor1 = Color.Black;<br />        private Color lewyPanelKolor2 = Color.Firebrick;<br />        private Color podzialkaKolor = Color.AntiqueWhite;<br /><br />        private Color prawyPanelKolor1 = Color.Black;<br />        private Color prawyPanelKolor2 = Color.Red;<br />        private Color wskaznikKolor1 = Color.DarkCyan;<br />        private Color wskaznikKolor2 = Color.Khaki;<br />        private Color kolorLiniiPodzialuWskaznika = Color.Black;<br /><br />        private Color kolorPunktu = Color.Blue;<br /><br />        private float wielkoscPunktu = 30;[/syntax]<br /><br />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 <br />i nadpisujemy domyślną metodę OnPaint wpisując następujący kod<br /><br />[syntax=csharp]protected override void OnPaint(PaintEventArgs e)<br />        {<br />            base.OnPaint(e);<br />        }[/syntax]<br />Następnie żeby to wszystko wyglądało jakoś normalnie od razu uruchamiamy AntiAliasing<br />[syntax=csharp]e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;[/syntax]<br /><br />a także nie zapominany o deklaracji kilka zmiennych i metod które umożliwią nam obliczenia oraz malunki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=csharp]float odstepX ;<br />            float odstepY ;<br />            float pozycjaX;<br />            float pozycjaY;<br />            float pozycjaZ;<br /><br />            GraphicsPath path;<br />            RectangleF lewaPlansza, prawaPlansza, rect, rect1;<br /><br />            Pen pioro;<br />            PathGradientBrush pbrush;<br />            LinearGradientBrush lbrush;<br />            SolidBrush sbrush;<br />            PointF centerXY = new PointF();<br />            path = new GraphicsPath();<br />            Blend blend = new Blend();[/syntax]<br /><br />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.<br />[syntax=csharp]using System.Drawing.Drawing2D;[/syntax]<br /><br />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.<br />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.<br />[syntax=csharp]lewaPlansza = new RectangleF(margines, margines,Width * 0.8f - margines , Height - margines * 2 - 3);<br />            prawaPlansza = new RectangleF(lewaPlansza.Location.X + lewaPlansza.Size.Width + margines, margines, Width * 0.2f - margines * 2 - 3, lewaPlansza.Size.Height);<br /><br />            centerXY.X = lewaPlansza.Size.Width / 2 + margines;<br />            centerXY.Y = lewaPlansza.Size.Height / 2 + margines;[/syntax]<br /><br />Po takich wstępnych obliczeniach czas zabrać się za lewy panel i u mnie wygląda to tak <br />[syntax=csharp]// ***************************** Lewy Panel **********************************************************<br />            #region lewyPanel<br />            path.AddRectangle(lewaPlansza);<br />            blend.Positions = new float&#91;&#93; { 0f, 0.07f, 1f };<br />            blend.Factors = new float&#91;&#93; { 1f, 0f, 1f };<br />            pbrush = new PathGradientBrush(path);<br />            pbrush.Blend = blend;<br />            pbrush.CenterColor = lewyPanelKolor1;<br />            pbrush.SurroundColors = new Color&#91;&#93; { lewyPanelKolor2 };<br />            e.Graphics.FillPath(pbrush, path);<br /><br />            path.Reset();<br />            pbrush.Dispose();<br />            #endregion[/syntax]<br /><br />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 ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />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ń.<br />Ponieważ gradienty jest lepiej przetestować na podstawie prostych przykładów zachęcam do małych eksperymentów z kodami które znajdziecie w <a href="http://msdn.microsoft.com/en-us/library/7fswd1t7.aspx"  class="postlink">Linku</a><br /><br />No dobra skoro mamy już lewy panel to wypadałoby &quot;pstryknąć&quot; prawy, co niniejszym czynimy następującym kodem<br />[syntax=csharp]// ***************************** Prawy Panel *********************************************************<br />            #region prawyPanel<br />            path.AddRectangle(prawaPlansza);<br />            pbrush = new PathGradientBrush(path);<br />            pbrush.CenterColor = prawyPanelKolor1;<br />            pbrush.SurroundColors = new Color&#91;&#93; {prawyPanelKolor2};<br />            blend.Positions = new float&#91;&#93; { 0f, .2f, .3f, 1f };<br />            blend.Factors = new float&#91;&#93;    { 0f, 1f, 1f, 0f };<br />            pbrush.Blend = blend;<br />            pbrush.SetBlendTriangularShape(.6f, .6f);<br />            pbrush.FocusScales = new PointF(.7f, .95f);<br />            e.Graphics.FillPath(pbrush, path);<br />            path.Reset();<br />            pbrush.Dispose();<br />            #endregion[/syntax]<br />W tajemnicy powiem że niecierpliwi mogą wcisnąć F5 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , a tym co się nie chce obrazek poniżej.<br /><a href="http://forum.atnel.pl/_obrazki/o/225/bc4a14b9ff4bb321c8af653bcd8f62b0.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/bc4a14b9ff4bb321c8af653bcd8f62b0.png" alt="Obrazek" /></a><br />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 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Co uczynimy niniejszym kodem <br />[syntax=csharp]// ******************************* Celownik **********************************************************<br />            #region Celownik<br />            odstepX = (lewaPlansza.Size.Width - wielkoscPunktu) / (maxX - minX) * skalaX;<br />            odstepY = (lewaPlansza.Size.Height - wielkoscPunktu) / (maxY - minY) * skalaY;<br />            while (odstepX&lt;centerXY.X-margines &amp;&amp; odstepY&lt;centerXY.Y-margines)<br />            {<br />                path.AddEllipse(centerXY.X - odstepX, centerXY.Y - odstepY, odstepX * 2, odstepY * 2);<br />                odstepX += (lewaPlansza.Size.Width-wielkoscPunktu) / (maxX -  minX) * skalaX ;<br />                odstepY += (lewaPlansza.Size.Height - wielkoscPunktu) / (maxY - minY) * skalaY; <br />            }<br />            path.AddLine(margines, centerXY.Y, margines + lewaPlansza.Size.Width, centerXY.Y);<br />            path.CloseFigure();<br />            path.AddLine(centerXY.X, margines, centerXY.X, margines + lewaPlansza.Size.Height);<br />            <br />            pioro = new Pen(podzialkaKolor);<br />            e.Graphics.DrawPath(pioro, path);<br /><br />            pioro.Dispose();<br />            path.Reset();<br />            #endregion[/syntax]<br /><br />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ę.<br />Specjalnie zrobiłem je tak rozwlekłe żebyście mogli przyswoić sobie pewien tok rozumowania.<br /><br />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 ..... <strong>KROPKA</strong><br />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<br />[syntax=csharp]// ******************************** KROPKA ***********************************************************<br />            #region kropka<br />            sbrush = new SolidBrush(kolorPunktu);<br />            pozycjaX = centerXY.X - wielkoscPunktu / 2 + (lewaPlansza.Size.Width - wielkoscPunktu) / (maxX - minX) * wartoscX;<br />            pozycjaY = centerXY.Y - wielkoscPunktu / 2 - (lewaPlansza.Size.Height - wielkoscPunktu) / (maxY - minY) * wartoscY;<br />            rect = new RectangleF(pozycjaX, pozycjaY, wielkoscPunktu, wielkoscPunktu);<br />            sbrush.Dispose();<br /><br />            path = new GraphicsPath(FillMode.Winding);<br />            rect = new RectangleF(pozycjaX, pozycjaY, wielkoscPunktu, wielkoscPunktu);<br />            path.AddEllipse(rect);<br />            pbrush = new PathGradientBrush(path);<br />            pbrush.CenterColor = kolorPunktu;<br />            pbrush.SurroundColors = new Color&#91;&#93; { Color.FromArgb(255, Color.Black) };<br />            pbrush.CenterPoint = new PointF((float)(rect.Width / 1.5), rect.Top - Convert.ToInt16(rect.Height * 2));<br />            blend.Factors = new float&#91;&#93; { 0.5f, 1f, 1f, 1f, 1f };<br />            blend.Positions = new float&#91;&#93; { 0.0f, 0.05f, 0.5f, 0.75f, 1.0f };<br />            pbrush.Blend = blend;<br />            e.Graphics.FillPath(pbrush, path);<br />            rect1 = new RectangleF(rect.Location, new SizeF((float)(rect.Width * 0.8), (float)(rect.Height * 0.6)));<br />            lbrush = new LinearGradientBrush(rect, Color.White, Color.Transparent, 90);<br />            lbrush.WrapMode = WrapMode.TileFlipX;<br />            e.Graphics.FillEllipse(lbrush, rect);<br />            lbrush.Dispose();<br />            path.Reset();<br />            pbrush.Dispose();<br />            #endregion[/syntax]<br /><br />No i w standardzie, ci co chcą to F5, a reszta obrazek <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/128ceaecba195bfbf94c7e93005bd584.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/128ceaecba195bfbf94c7e93005bd584.png" alt="Obrazek" /></a><br />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 <br />[syntax=csharp]// ******************************** Bargraf **********************************************************<br />            # region Bargraf<br />            pbrush.Dispose();<br />            path.Reset();<br /><br />            pozycjaZ = (prawaPlansza.Size.Height * 0.95f / (maxZ - minZ) * WartoscZ);<br /><br />            if (wartoscZ!=0){<br />                if (wartoscZ &lt; 0)<br />                {<br />                    rect.Location = new PointF(prawaPlansza.Location.X + prawaPlansza.Size.Width * 0.125f, centerXY.Y);<br />                    rect.Size = new SizeF(prawaPlansza.Size.Width * 0.75f, -pozycjaZ);<br />                }<br />                else<br />                {<br />                    rect.Location = new PointF(prawaPlansza.Location.X + prawaPlansza.Size.Width * 0.125f, centerXY.Y - pozycjaZ);<br />                    rect.Size = new SizeF(prawaPlansza.Size.Width * 0.75f, pozycjaZ);<br /><br />                }<br />                lbrush = new LinearGradientBrush(rect, wskaznikKolor2, wskaznikKolor1, LinearGradientMode.Horizontal);<br />                ColorBlend cblend = new ColorBlend();<br />                cblend.Positions = new float&#91;&#93; { 0f, 0.55f, 1f };<br />                cblend.Colors = new Color&#91;&#93; { wskaznikKolor2, wskaznikKolor1, wskaznikKolor2 };<br />                lbrush.InterpolationColors = cblend;<br />                e.Graphics.FillRectangle(lbrush, rect);<br />                lbrush.Dispose();<br />                lbrush = new LinearGradientBrush(rect, wskaznikKolor1, wskaznikKolor2, LinearGradientMode.Vertical);<br /><br />                cblend.Positions = new float&#91;&#93; { 0f, 0.35f, 0.65f, 1f };<br />                cblend.Colors = new Color&#91;&#93;{Color.FromArgb(200,wskaznikKolor1),<br />                                            Color.FromArgb(100,wskaznikKolor2),<br />                                            Color.FromArgb(100,wskaznikKolor2),<br />                                            Color.FromArgb(200,wskaznikKolor1)};<br />                lbrush.InterpolationColors = cblend;<br />                lbrush.GammaCorrection = true;<br />                e.Graphics.FillRectangle(lbrush, rect);<br />                lbrush.Dispose();<br />                rect.Size = new SizeF(rect.Size.Width*.45f,rect.Size.Height);<br />                lbrush = new LinearGradientBrush(rect, Color.White, Color.White, LinearGradientMode.Horizontal);<br />                cblend.Positions = new float&#91;&#93; { 0.0F, 0.3F, 1.0F };<br />                cblend.Colors = new Color&#91;&#93; {Color.FromArgb(80, Color.White),<br />                                                Color.FromArgb(70, Color.White),<br />                                                Color.FromArgb(10, Color.White)};<br />                lbrush.InterpolationColors = cblend;<br />                lbrush.GammaCorrection = true;<br />                e.Graphics.FillRectangle(lbrush, rect);<br />                lbrush.Dispose();<br />            }<br />            pioro = new Pen(kolorLiniiPodzialuWskaznika);<br />            e.Graphics.DrawLine(pioro, prawaPlansza.Location.X, centerXY.Y, prawaPlansza.Location.X + prawaPlansza.Size.Width, centerXY.Y);<br />            pioro.Dispose();<br />            path.Dispose();<br />            pbrush.Dispose();<br />            #endregion[/syntax]<br /> 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.<br /><br />W tym momencie wypadałby powiedzieć że to już koniec , ale niestety tak nie jest <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> , dlatego że mamy już szatę graficzną naszej kontrolki, ale nie mamy jeszcze możliwości przekazywania parametrów do niej.<br />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:<br />[syntax=csharp]// *********************************** Własności *********************************************************<br />        #region wlasnosci<br />        public float IloscPunktowNaPodzialkeX<br />        {<br />            get {return skalaX;}<br />            set {<br />                if (skalaX != value)<br />                {<br />                    skalaX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float IloscPunktowNaPodzialkeY<br />        {<br />            get { return skalaY; }<br />            set<br />            {<br />                if (skalaY != value)<br />                {<br />                    skalaY = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br /><br />        public float WartoscX<br />        {<br />            get { return wartoscX;}<br />            set<br />            {<br />                if (wartoscX!=value)<br />                {<br />                    wartoscX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MinimumX<br />        {<br />            get { return minX; }<br />            set<br />            {<br />                if (minX != value)<br />                {<br />                    minX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MaximumX<br />        {<br />            get { return maxX; }<br />            set<br />            {<br />                if (maxX != value)<br />                {<br />                    maxX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float WartoscY<br />        {<br />            get { return wartoscY; }<br />            set<br />            {<br />                if (wartoscY != value)<br />                {<br />                    wartoscY = value;<br />                    Invalidate();<br />                }<br />            }<br />            <br />        }<br />        public float MinimumY<br />        {<br />            get { return minY; }<br />            set<br />            {<br />                if (minY != value)<br />                {<br />                    minY = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MaximumY<br />        {<br />            get { return maxY; }<br />            set<br />            {<br />                if (maxY != value)<br />                {<br />                    maxY = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float WartoscZ<br />        {<br />            get { return wartoscZ; }<br />            set<br />            {<br />                if (wartoscZ != value)<br />                {<br />                    wartoscZ = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MinimumZ<br />        {<br />            get { return minZ; }<br />            set<br />            {<br />                if (minZ != value)<br />                {<br />                    minZ = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MaximumZ<br />        {<br />            get { return maxZ; }<br />            set<br />            {<br />                if (maxZ != value)<br />                {<br />                    maxZ = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float WielkoscPunktu<br />        {<br />            get { return wielkoscPunktu; }<br />            set<br />            {<br />                if (wielkoscPunktu != value)<br />                {<br />                    wielkoscPunktu = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br /><br />        public Color LewyPanelKolor1<br />        {<br />            get { return lewyPanelKolor1; }<br />            set<br />            {<br />                if (lewyPanelKolor1 != value)<br />                {<br />                    lewyPanelKolor1 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color LewyPanelKolor2<br />        {<br />            get { return lewyPanelKolor2; }<br />            set<br />            {<br />                if (lewyPanelKolor2 != value)<br />                {<br />                    lewyPanelKolor2 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color PodzialkaKolor<br />        {<br />            get { return podzialkaKolor; }<br />            set<br />            {<br />                if (podzialkaKolor != value)<br />                {<br />                    podzialkaKolor = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color PrawyPanelKolor1<br />        {<br />            get { return prawyPanelKolor1; }<br />            set<br />            {<br />                if (prawyPanelKolor1 != value)<br />                {<br />                    prawyPanelKolor1 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color PrawyPanelKolor2<br />        {<br />            get { return prawyPanelKolor2; }<br />            set<br />            {<br />                if (prawyPanelKolor2 != value)<br />                {<br />                    prawyPanelKolor2 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color WskaznikKolor1<br />        {<br />            get { return wskaznikKolor1; }<br />            set<br />            {<br />                if(wskaznikKolor1!=value)<br />                {<br />                    wskaznikKolor1 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color WskaznikKolor2<br />        {<br />            get { return wskaznikKolor2; }<br />            set<br />            {<br />                if (wskaznikKolor2 != value)<br />                {<br />                    wskaznikKolor2 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color KolorLiniiPodzialuWskaznika<br />        {<br />            get { return kolorLiniiPodzialuWskaznika; }<br />            set<br />            {<br />                if (kolorLiniiPodzialuWskaznika != value)<br />                {<br />                    kolorLiniiPodzialuWskaznika = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color KolorPunktu<br />        {<br />            get { return kolorPunktu; }<br />            set<br />            {<br />                if (kolorPunktu != value)<br />                {<br />                    kolorPunktu = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        #endregion[/syntax]<br /><br />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 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />No i standardowo zamieszczam 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 Akcelerometr : UserControl<br />    {<br />        private float margines = 5;<br />        private float skalaX = 15;<br />        private float skalaY = 15;<br /><br />        private float wartoscX = 0;<br />        private float wartoscY = 0;<br />        private float wartoscZ = 0;<br />        private float minX = -127;<br />        private float maxX = 127;<br />        private float minY = -127;<br />        private float maxY = 127;<br />        private float minZ = -127;<br />        private float maxZ = 127;<br /><br />        private Color lewyPanelKolor1 = Color.Black;<br />        private Color lewyPanelKolor2 = Color.Firebrick;<br />        private Color podzialkaKolor = Color.AntiqueWhite;<br /><br />        private Color prawyPanelKolor1 = Color.Black;<br />        private Color prawyPanelKolor2 = Color.Red;<br />        private Color wskaznikKolor1 = Color.DarkCyan;<br />        private Color wskaznikKolor2 = Color.Khaki;<br />        private Color kolorLiniiPodzialuWskaznika = Color.Black;<br /><br />        private Color kolorPunktu = Color.Blue;<br /><br />        private float wielkoscPunktu = 30;<br /><br />        public Akcelerometr()<br />        {<br />            InitializeComponent();<br />            this.DoubleBuffered = true;<br />        }<br />        protected override void OnPaint(PaintEventArgs e)<br />        {<br />            base.OnPaint(e);<br />            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;<br /><br />            float odstepX;<br />            float odstepY;<br />            float pozycjaX;<br />            float pozycjaY;<br />            float pozycjaZ;<br /><br />            GraphicsPath path;<br />            RectangleF lewaPlansza, prawaPlansza, rect, rect1;<br /><br />            Pen pioro;<br />            PathGradientBrush pbrush;<br />            LinearGradientBrush lbrush;<br />            SolidBrush sbrush;<br />            PointF centerXY = new PointF();<br />            path = new GraphicsPath();<br />            Blend blend = new Blend();<br /><br />            lewaPlansza = new RectangleF(margines, margines, Width * 0.8f - margines, Height - margines * 2 - 3);<br />            prawaPlansza = new RectangleF(lewaPlansza.Location.X + lewaPlansza.Size.Width + margines, margines, Width * 0.2f - margines * 2 - 3, lewaPlansza.Size.Height);<br /><br />            centerXY.X = lewaPlansza.Size.Width / 2 + margines;<br />            centerXY.Y = lewaPlansza.Size.Height / 2 + margines;<br />            // ***************************** Lewy Panel **********************************************************<br />            #region lewyPanel<br />            path.AddRectangle(lewaPlansza);<br />            blend.Positions = new float&#91;&#93; { 0f, .07f, 1f };<br />            blend.Factors = new float&#91;&#93; { 1f, 0f, 1f };<br />            pbrush = new PathGradientBrush(path);<br />            pbrush.Blend = blend;<br />            pbrush.CenterColor = lewyPanelKolor1;<br />            pbrush.SurroundColors = new Color&#91;&#93; { lewyPanelKolor2 };<br />            e.Graphics.FillPath(pbrush, path);<br /><br />            path.Reset();<br />            pbrush.Dispose();<br />            #endregion<br />            // ***************************** Prawy Panel *********************************************************<br />            #region prawyPanel<br />            path.AddRectangle(prawaPlansza);<br />            pbrush = new PathGradientBrush(path);<br />            pbrush.CenterColor = prawyPanelKolor1;<br />            pbrush.SurroundColors = new Color&#91;&#93; { prawyPanelKolor2 };<br />            blend.Positions = new float&#91;&#93; { 0f, .2f, .3f, 1f };<br />            blend.Factors = new float&#91;&#93; { 0f, 1f, 1f, 0f };<br />            pbrush.Blend = blend;<br />            pbrush.SetBlendTriangularShape(.6f, .6f);<br />            pbrush.FocusScales = new PointF(.7f, .95f);<br />            e.Graphics.FillPath(pbrush, path);<br />            path.Reset();<br />            pbrush.Dispose();<br />            #endregion<br />            // ******************************* Celownik **********************************************************<br />            #region Celownik<br />            odstepX = (lewaPlansza.Size.Width - wielkoscPunktu) / (maxX - minX) * skalaX;<br />            odstepY = (lewaPlansza.Size.Height - wielkoscPunktu) / (maxY - minY) * skalaY;<br />            while (odstepX &lt; centerXY.X - margines &amp;&amp; odstepY &lt; centerXY.Y - margines)<br />            {<br />                path.AddEllipse(centerXY.X - odstepX, centerXY.Y - odstepY, odstepX * 2, odstepY * 2);<br />                odstepX += (lewaPlansza.Size.Width - wielkoscPunktu) / (maxX - minX) * skalaX;<br />                odstepY += (lewaPlansza.Size.Height - wielkoscPunktu) / (maxY - minY) * skalaY;<br />            }<br />            path.AddLine(margines, centerXY.Y, margines + lewaPlansza.Size.Width, centerXY.Y);<br />            path.CloseFigure();<br />            path.AddLine(centerXY.X, margines, centerXY.X, margines + lewaPlansza.Size.Height);<br /><br />            pioro = new Pen(podzialkaKolor);<br />            e.Graphics.DrawPath(pioro, path);<br /><br />            pioro.Dispose();<br />            path.Reset();<br />            #endregion<br />            // ******************************** KROPKA ***********************************************************<br />            #region kropka<br />            sbrush = new SolidBrush(kolorPunktu);<br />            pozycjaX = centerXY.X - wielkoscPunktu / 2 + (lewaPlansza.Size.Width - wielkoscPunktu) / (maxX - minX) * wartoscX;<br />            pozycjaY = centerXY.Y - wielkoscPunktu / 2 - (lewaPlansza.Size.Height - wielkoscPunktu) / (maxY - minY) * wartoscY;<br />            rect = new RectangleF(pozycjaX, pozycjaY, wielkoscPunktu, wielkoscPunktu);<br />            sbrush.Dispose();<br /><br />            path = new GraphicsPath(FillMode.Winding);<br />            rect = new RectangleF(pozycjaX, pozycjaY, wielkoscPunktu, wielkoscPunktu);<br />            path.AddEllipse(rect);<br />            pbrush = new PathGradientBrush(path);<br />            pbrush.CenterColor = kolorPunktu;<br />            pbrush.SurroundColors = new Color&#91;&#93; { Color.FromArgb(255, Color.Black) };<br />            pbrush.CenterPoint = new PointF((float)(rect.Width / 1.5), rect.Top - Convert.ToInt16(rect.Height * 2));<br />            blend.Factors = new float&#91;&#93; { 0.5f, 1f, 1f, 1f, 1f };<br />            blend.Positions = new float&#91;&#93; { 0.0f, 0.05f, 0.5f, 0.75f, 1.0f };<br />            pbrush.Blend = blend;<br />            e.Graphics.FillPath(pbrush, path);<br />            rect1 = new RectangleF(rect.Location, new SizeF((float)(rect.Width * 0.8), (float)(rect.Height * 0.6)));<br />            lbrush = new LinearGradientBrush(rect, Color.White, Color.Transparent, 90);<br />            lbrush.WrapMode = WrapMode.TileFlipX;<br />            e.Graphics.FillEllipse(lbrush, rect);<br />            lbrush.Dispose();<br />            path.Reset();<br />            pbrush.Dispose();<br />            #endregion<br /><br />            // ******************************** Bargraf **********************************************************<br />            # region Bargraf<br />            pbrush.Dispose();<br />            path.Reset();<br /><br />            pozycjaZ = (prawaPlansza.Size.Height * 0.95f / (maxZ - minZ) * wartoscZ);<br /><br />            if (wartoscZ != 0)<br />            {<br />                if (wartoscZ &lt; 0)<br />                {<br />                    rect.Location = new PointF(prawaPlansza.Location.X + prawaPlansza.Size.Width * 0.125f, centerXY.Y);<br />                    rect.Size = new SizeF(prawaPlansza.Size.Width * 0.75f, -pozycjaZ);<br />                }<br />                else<br />                {<br />                    rect.Location = new PointF(prawaPlansza.Location.X + prawaPlansza.Size.Width * 0.125f, centerXY.Y - pozycjaZ);<br />                    rect.Size = new SizeF(prawaPlansza.Size.Width * 0.75f, pozycjaZ);<br /><br />                }<br />                //                                                                  Back                Fore<br />                lbrush = new LinearGradientBrush(rect, wskaznikKolor2, wskaznikKolor1, LinearGradientMode.Horizontal);<br />                ColorBlend cblend = new ColorBlend();<br />                cblend.Positions = new float&#91;&#93; { 0f, 0.55f, 1f };<br />                cblend.Colors = new Color&#91;&#93; { wskaznikKolor2, wskaznikKolor1, wskaznikKolor2 };<br />                lbrush.InterpolationColors = cblend;<br />                e.Graphics.FillRectangle(lbrush, rect);<br />                lbrush.Dispose();<br />                lbrush = new LinearGradientBrush(rect, wskaznikKolor1, wskaznikKolor2, LinearGradientMode.Vertical);<br /><br />                cblend.Positions = new float&#91;&#93; { 0f, 0.35f, 0.65f, 1f };<br />                cblend.Colors = new Color&#91;&#93;{Color.FromArgb(200,wskaznikKolor1),<br />                                            Color.FromArgb(100,wskaznikKolor2),<br />                                            Color.FromArgb(100,wskaznikKolor2),<br />                                            Color.FromArgb(200,wskaznikKolor1)};<br />                lbrush.InterpolationColors = cblend;<br />                lbrush.GammaCorrection = true;<br />                e.Graphics.FillRectangle(lbrush, rect);<br />                lbrush.Dispose();<br />                rect.Size = new SizeF(rect.Size.Width * .45f, rect.Size.Height);<br />                lbrush = new LinearGradientBrush(rect, Color.White, Color.White, LinearGradientMode.Horizontal);<br />                cblend.Positions = new float&#91;&#93; { 0.0F, 0.3F, 1.0F };<br />                cblend.Colors = new Color&#91;&#93; {Color.FromArgb(80, Color.White),<br />                                                Color.FromArgb(70, Color.White),<br />                                                Color.FromArgb(10, Color.White)};<br />                lbrush.InterpolationColors = cblend;<br />                lbrush.GammaCorrection = true;<br />                e.Graphics.FillRectangle(lbrush, rect);<br />                lbrush.Dispose();<br />            }<br />            pioro = new Pen(kolorLiniiPodzialuWskaznika);<br />            e.Graphics.DrawLine(pioro, prawaPlansza.Location.X, centerXY.Y, prawaPlansza.Location.X + prawaPlansza.Size.Width, centerXY.Y);<br />            pioro.Dispose();<br />            path.Dispose();<br />            pbrush.Dispose();<br />            #endregion<br />        }<br />        // *********************************** Własności *********************************************************<br />        #region wlasnosci<br />        public float IloscPunktowNaPodzialkeX<br />        {<br />            get { return skalaX; }<br />            set<br />            {<br />                if (skalaX != value)<br />                {<br />                    skalaX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float IloscPunktowNaPodzialkeY<br />        {<br />            get { return skalaY; }<br />            set<br />            {<br />                if (skalaY != value)<br />                {<br />                    skalaY = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br /><br />        public float WartoscX<br />        {<br />            get { return wartoscX; }<br />            set<br />            {<br />                if (wartoscX != value)<br />                {<br />                    wartoscX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MinimumX<br />        {<br />            get { return minX; }<br />            set<br />            {<br />                if (minX != value)<br />                {<br />                    minX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MaximumX<br />        {<br />            get { return maxX; }<br />            set<br />            {<br />                if (maxX != value)<br />                {<br />                    maxX = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float WartoscY<br />        {<br />            get { return wartoscY; }<br />            set<br />            {<br />                if (wartoscY != value)<br />                {<br />                    wartoscY = value;<br />                    Invalidate();<br />                }<br />            }<br /><br />        }<br />        public float MinimumY<br />        {<br />            get { return minY; }<br />            set<br />            {<br />                if (minY != value)<br />                {<br />                    minY = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MaximumY<br />        {<br />            get { return maxY; }<br />            set<br />            {<br />                if (maxY != value)<br />                {<br />                    maxY = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float WartoscZ<br />        {<br />            get { return wartoscZ; }<br />            set<br />            {<br />                if (wartoscZ != value)<br />                {<br />                    wartoscZ = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MinimumZ<br />        {<br />            get { return minZ; }<br />            set<br />            {<br />                if (minZ != value)<br />                {<br />                    minZ = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float MaximumZ<br />        {<br />            get { return maxZ; }<br />            set<br />            {<br />                if (maxZ != value)<br />                {<br />                    maxZ = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public float WielkoscPunktu<br />        {<br />            get { return wielkoscPunktu; }<br />            set<br />            {<br />                if (wielkoscPunktu != value)<br />                {<br />                    wielkoscPunktu = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br /><br />        public Color LewyPanelKolor1<br />        {<br />            get { return lewyPanelKolor1; }<br />            set<br />            {<br />                if (lewyPanelKolor1 != value)<br />                {<br />                    lewyPanelKolor1 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color LewyPanelKolor2<br />        {<br />            get { return lewyPanelKolor2; }<br />            set<br />            {<br />                if (lewyPanelKolor2 != value)<br />                {<br />                    lewyPanelKolor2 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color PodzialkaKolor<br />        {<br />            get { return podzialkaKolor; }<br />            set<br />            {<br />                if (podzialkaKolor != value)<br />                {<br />                    podzialkaKolor = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color PrawyPanelKolor1<br />        {<br />            get { return prawyPanelKolor1; }<br />            set<br />            {<br />                if (prawyPanelKolor1 != value)<br />                {<br />                    prawyPanelKolor1 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color PrawyPanelKolor2<br />        {<br />            get { return prawyPanelKolor2; }<br />            set<br />            {<br />                if (prawyPanelKolor2 != value)<br />                {<br />                    prawyPanelKolor2 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color WskaznikKolor1<br />        {<br />            get { return wskaznikKolor1; }<br />            set<br />            {<br />                if (wskaznikKolor1 != value)<br />                {<br />                    wskaznikKolor1 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color WskaznikKolor2<br />        {<br />            get { return wskaznikKolor2; }<br />            set<br />            {<br />                if (wskaznikKolor2 != value)<br />                {<br />                    wskaznikKolor2 = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color KolorLiniiPodzialuWskaznika<br />        {<br />            get { return kolorLiniiPodzialuWskaznika; }<br />            set<br />            {<br />                if (kolorLiniiPodzialuWskaznika != value)<br />                {<br />                    kolorLiniiPodzialuWskaznika = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        public Color KolorPunktu<br />        {<br />            get { return kolorPunktu; }<br />            set<br />            {<br />                if (kolorPunktu != value)<br />                {<br />                    kolorPunktu = value;<br />                    Invalidate();<br />                }<br />            }<br />        }<br />        #endregion<br /><br />    }<br />}[/syntax]<br /><br />A Projekt i biblioteka będą wieczorem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 8 wrz 2013, o 22:52</p><hr />
]]></content>
</entry>
</feed>