<?xml version="1.0" encoding = "UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" ><channel><title>BitByBit.ru</title><description></description><link>http://bitbybit.ru/</link><language>en-us</language><generator>Rss_Generator</generator><item><title>Статья »Дневник sanya » Модель общественного регулирования интернета на примере иммунитета человека</title><description><![CDATA[


	
	
	
	<style type="text/css">
	
	</style>


<p style="margin-bottom: 0cm">&nbsp;&nbsp;&nbsp; В комментарии к статье
об «<a href="http://www.bitbybit.ru/article/294">общественном регулировании интернета</a>»
был дан свёрнутый ответ на «<a href="http://www.bitbybit.ru/article/294#comment4125">тест кейс</a>»
от SCoon. Здесь же я хочу представить пример
того, что толерантность в данной модели
не является значением стремящимся к
нулю на примере иммунитета человека.</p>

]]></description><pubDate>Fri, 30 Dec 2011 08:18:34 +0300</pubDate><link>http://bitbybit.ru/article/295</link><author>sanya</author></item><item><title>Статья »Дневник sanya » Общественное регулирование интернета</title><description><![CDATA[


	&nbsp;&nbsp;&nbsp; Так повелось, что в интернет кто-либо может разместить где-либо всё что заблагорассудиться и повлиять на это практически не возможно. Родители стараются оградить своих детей устанавливая специальные фильтры, но не всегда это помогает. Иной раз пройдёшь по ссылке, а там какое-нибудь очередное недоумение. В конечном счёте, сетуешь на то, что интернет прекрасная вещь, но иной раз такое... Самое интересное, что корабль на котором мы плывём однобок.&nbsp; Современные сервисы предоставляемые пользователю дают возможность отбирать, только то что нравится: «+1», «Мне нравится», «Like me» и т.&nbsp;д.<br>&nbsp;&nbsp; &nbsp;В данном случае, пользователь остаётся один на один с тем ресурсом, который по его мнению нарушает его принципы, моральные или духовные убеждения, а ведь на улице, такой человек проходя мимо забора с неподобающей надписью остановится и постарается сделать так, что бы она не попалась на глаза детям.<br>&nbsp;&nbsp; &nbsp;В случае забора на улице, достаточно всё просто, закрасил и пошёл дальше, а вот в интернете так не получится. Человек с активной гражданской позицией,&nbsp; может только отправить email на ресурс с негодующим сообщением, но он рискует очень быстро попасть в спам фильтр и остаться без нормально функционирующего почтового ящика.]]></description><pubDate>Tue, 27 Dec 2011 06:50:43 +0300</pubDate><link>http://bitbybit.ru/article/294</link><author>sanya</author></item><item><title>Статья »C++ » Введение в C++11. Часть 3.</title><description><![CDATA[В предыдущих двух постах (<a href="http://bitbybit.ru/article/288">этом</a> и <a href="http://bitbybit.ru/article/291/">этом</a>), я уже познакомил читателя с некоторыми интересными вещами нового стандарта. Сегодня я продолжу эту славную традицию, и расскажу о лямбда-выражениях<br><br>Новый стандарт наконец ввел очень полезную штуку -- lambda-выражения. Продвинутый C++ программист скажет: &quot;Так они уже давно есть в boost&quot;. Верно, так и есть. Но новые лямбда существенно мощнее и, на мой взгляд, удобнее. Впрочем, сравнение реализаций этих двух лямбд не относится к теме данного поста. Моя задача -- дать общее представление: что это такое и как это использовать.<br>]]></description><pubDate>Sun, 11 Dec 2011 12:16:32 +0300</pubDate><link>http://bitbybit.ru/article/292</link><author>ikalnitsky</author></item><item><title>Статья »C++ » Введение в C++11. Часть 2.</title><description><![CDATA[<p>Как и обещал, я продолжаю публикации на тему нового стандарта C++11. В <a href="http://bitbybit.ru/article/288">прошлой статье</a> я рассказал о таких вещах как:</p><ul><li>автоматическое выведение типов с помощью auto;<br></li><li>определение типа с помощью decltype;</li><li>закрытие вложенных шаблонов;</li><li>цикл range-based for.</li></ul><p>Не много, конечно, но и не мало. Но, как знает читатель, это лишь малая толика того, что дарует нам новый стандарт.</p><p></p><ul><li><br></li></ul>]]></description><pubDate>Sun, 27 Nov 2011 15:26:57 +0300</pubDate><link>http://bitbybit.ru/article/291</link><author>ikalnitsky</author></item><item><title>Статья »C++ » Введение в C++11. Часть 1.</title><description><![CDATA[Этим постом я хочу открыть серию публикаций на тему нововведений в долгожданном недавно принятом стандарте -- <strong>C++11</strong>. Ниже я рассмотрю самые известные и самые простые нововведения, но с каждым постом буду погружаться все глубже и глубже.<br>]]></description><pubDate>Mon, 03 Oct 2011 07:38:08 +0400</pubDate><link>http://bitbybit.ru/article/288</link><author>ikalnitsky</author></item><item><title>Статья »Дневник jessey » Загрузка jQuery из репозитория Google</title><description><![CDATA[<span class="Apple-style-span" style="font-family: Georgia, &#039;Times New Roman&#039;, Times, serif; font-size: 15px; line-height: 24px; ">Привет. Возможно, многие из вас уже давно знают об этой замечательной возможности, но всё же хотелось бы написать об этом ещё раз. Есть у Google такая замечательная штука как&nbsp;<a href="http://goo.gl/d4ZYT" title="Google Libraries" target=&quot;_blank&quot; style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 15px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(34, 94, 155); text-decoration: none; background-position: initial initial; background-repeat: initial initial; ">Google Libraries</a>. Это&nbsp;<a href="http://goo.gl/g77Nw" title="Content Delivery Network, Сеть доставки (и дистрибуции) контента" target=&quot;_blank&quot; style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 15px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(34, 94, 155); text-decoration: none; background-position: initial initial; background-repeat: initial initial; ">CDN</a>&nbsp;для популярных open-source JavaScript библиотек. Использование этого сервиса позволит увеличить скорость загрузки скриптов и снизит траффик на ваш сервер.</span><br>]]></description><pubDate>Mon, 26 Sep 2011 20:15:47 +0400</pubDate><link>http://bitbybit.ru/article/287</link><author>jessey</author></item><item><title>Статья »C# » Редактируем SQLite Таблицу через DataGridView часть 1</title><description><![CDATA[<span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: &#039;Helvetica Neue&#039;, Helvetica, Arial, sans-serif; font-size: 15px; font-weight: 300; line-height: 24px; ">В предыдущей статье я описал как&nbsp;<a title="C#: Заполнение DataGridView из Таблицы Sqlite" href="http://sl1p.pp.ua/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/c-%d0%b7%d0%b0%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-datagridview-%d0%b8%d0%b7-%d1%82%d0%b0%d0%b1%d0%bb%d0%b8%d1%86%d1%8b-sqlite/" data-mce-href="http://sl1p.pp.ua/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/c-%d0%b7%d0%b0%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-datagridview-%d0%b8%d0%b7-%d1%82%d0%b0%d0%b1%d0%bb%d0%b8%d1%86%d1%8b-sqlite/" style="color: rgb(27, 139, 224); font: normal normal normal 15px/normal &#039;Helvetica Neue&#039;, Helvetica, Arial, sans-serif; font-style: inherit; line-height: 1.625; text-decoration: none; ">заполнить DataGrid</a>, теперь я опишу как сохранить изменения сделанные в том самом DataGrid в таблицу.</span><br>]]></description><pubDate>Tue, 30 Aug 2011 13:44:05 +0400</pubDate><link>http://bitbybit.ru/article/286</link><author>sl1p</author></item><item><title>Статья »C# » Заполнение DataGridView из Таблицы Sqlite</title><description><![CDATA[<span class="Apple-style-span" style="color: rgb(55, 55, 55); font-family: &#039;Helvetica Neue&#039;, Helvetica, Arial, sans-serif; font-size: 15px; font-weight: 300; line-height: 24px; background-color: rgb(255, 255, 255); "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">В продолжении статьи о&nbsp;<a title="C#: Работа с SQLite с помощью opensource ADO.NET провайдера" href="http://sl1p.pp.ua/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/c-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-sqlite-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-opensource-ado-net-%d0%bf%d1%80%d0%be%d0%b2%d0%b0%d0%b9%d0%b4%d0%b5%d1%80%d0%b0/" target=&quot;&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot;&quot; style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: rgb(25, 130, 209); text-decoration: none; ">работе SQLite в С#</a>, хочу написать о том как достать данные из таблицы и заполнить этими данными DataGridView.</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1.625em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; "><br></p></span>]]></description><pubDate>Wed, 24 Aug 2011 21:44:06 +0400</pubDate><link>http://bitbybit.ru/article/285</link><author>sl1p</author></item><item><title>Статья »Блог разработчиков » Конференция Highload++/2011: Сформирован программный комитет</title><description><![CDATA[]]></description><pubDate>Tue, 16 Aug 2011 10:06:10 +0400</pubDate><link>http://bitbybit.ru/article/283</link><author>perlaws</author></item><item><title>Статья »C# » Работа с SQLite с помощью opensource ADO.NET провайдера</title><description><![CDATA[<span class="Apple-style-span" style="color: rgb(55, 55, 55); font-family: &#039;Helvetica Neue&#039;, Helvetica, Arial, sans-serif; font-size: 15px; font-weight: 300; line-height: 24px; background-color: rgb(255, 255, 255); ">Случается такое что требуется индивидуальное хранилище данных, но нет возможности/желания/средств поставить сервер БД.<br>Да и зачем он нужен весь день запущенный, когда мы обращаемся к нему 3-5 раз в день. Для такой задачи есть весьма простое решение.&nbsp;<strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; ">SQLite</strong>. Для тех кто не знает, это встраиваемая (безсерверная) СУБД. Да зачем я распинаюсь? Кому интересно заглянет&nbsp;<a href="http://www.google.com.ua/webhp?hl=ru#hl=ru&amp;cp=4&amp;gs_id=d&amp;xhr=t&amp;q=sqlite&amp;pf=p&amp;sclient=psy&amp;site=webhp&amp;source=hp&amp;pbx=1&amp;oq=%D1%8B%D0%B9%D0%B4%D1%88&amp;aq=0sd&amp;aqi=g-sd1g" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-family: inherit; font-size: 15px; font-style: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: rgb(25, 130, 209); text-decoration: none; ">сюда</a>.</span>]]></description><pubDate>Wed, 10 Aug 2011 19:22:56 +0400</pubDate><link>http://bitbybit.ru/article/282</link><author>sl1p</author></item><item><title>Вопрос »C++ »Проблемы с шаблонной функцией</title><description><![CDATA[<span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px; background-color: rgba(255, 255, 255, 0.917969); ">Добрый вечер!</span><div style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px; background-color: rgba(255, 255, 255, 0.917969); ">Мне нужна Ваша помощь, я где-то затупил с использованием шаблонов:<div><br></div><div>функция объявлена внутри класса с названием GLBuffer:</div><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">template &lt;typename T&gt;<br>void setData(std::vector&lt;T&gt; dataVector, GLenum usage);</blockquote></div><div><br></div><div>Вот её реализация:</div><div><br></div><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">template &lt;typename T&gt;<br>void GLBuffer::setData(std::vector&lt;T&gt; dataVector, GLenum usage)<br>{<br><span style="white-space: pre-wrap; ">	</span>glBufferData(_target,<br><span style="white-space: pre-wrap; ">		</span>dataVector.size()*sizeof(T),<br><span style="white-space: pre-wrap; ">		</span>&amp;dataVector[0],<br><span style="white-space: pre-wrap; ">		</span>usage<br><span style="white-space: pre-wrap; ">	</span>);<br>}</blockquote></div><div><br></div><div>Используется для инициализации вершинного буфера значениями вектора (vector&lt;GLfloat&gt; _grid):</div><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">_glData.buffers.grid.setData(_grid, GL_STATIC_DRAW);</blockquote></div><div><br></div><div>К сожалению на этапе сборки я получаю ошибку:</div><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">CGrid.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;public: void __thiscall GLBuffer::setData&lt;float&gt;(class std::vector&lt;float,class std::allocator&lt;float&gt; &gt;,unsigned int)&quot; (??$setData@M@GLBuffer@@QAEXV?$vector@MV?$allocator@M@std@@@std@@I@Z) в функции &quot;public: void __thiscall CGrid::Init(int,int)&quot; (?Init@CGrid@@QAEXHH@Z)</blockquote><div>Компилятор Visual Studio 2008 SP1</div></div><div><br></div><div>Подскажите,&nbsp;где я допустил ошибку?</div></div>]]></description><pubDate>Mon, 05 Dec 2011 08:11:10 +0300</pubDate><link>http://bitbybit.ru/question/263</link><author>Thunder</author></item><item><title>Вопрос »C# »некорректно отрабатывает событие Scroll в VScrolBar</title><description><![CDATA[Стоит задача синхронизации перемещения скролл-бара, который появляется 
во FlowLayoutPanel при достаточно большом количестве дочерних элементов,
 с отдельным внешним VScrollBar-ом, отличающимся от внутреннего только 
параметром VScrollBar.Maximum (в представленном примере для простоты не 
отличается никак). Однако при её решении выяснилось следующее - при 
перемещениях внутреннего ScrollBar внешний ведет себя вполне адекватно 
(за исключением небольшого отставания VScrollBar.Value  от 
OuterScrollBar.Value, причины которого мне пока что неизвестны); при 
перемещении внешнего (перетаскиванием мышью или, что гораздо более 
наглядно, через нажатие на соответствующие кнопки) его перемещение в 2 
раза быстрее чем у внутреннего. <br>     После манипуляций с пошаговым 
выполнением кода выяснилось следующее: при каждом перемещении 
срабатывает обработчик для события VScrollBar.Scroll на момент 
выполнение которого VScrollBar.Value имеет тоже значение что и до 
нажатия (после старта программы соответственно 0). Обработчик для 
событий  Scroll обоих элементов должен отслеживать изменение параметра 
Value в одном из скролл-баров и соответствующим образом изменять Value в
 другом. После того как обработчик выполнил свой код (так как изменений 
никаких не было, он ничего не сделал) он срабатывает второй раз. В этот 
раз Value изменилось. Однако данные изменения не вступают силу, не 
смотря на то что отработал соответствующий оператор (строка ). При 
следующем одиночном прокручивании (точно так же с помощью кнопок на 
скролл-баре) происходит всё тоже самое за одним исключением - оператор, 
изменяющий значение внутреннего скролл-бара все же приводит к изменению 
его параметра Value.<br>     Для простоты (помимо кода отвечающего за 
синхронизацию в классе есть очень много фрагментов, не имеющих никакого 
отношения к проблеме) был создан пример, на котором можно воспроизвести 
вышеописанную ситуацию.<br>     Что происходит при прокручивании внешним
 скролл-баром? Почему обработчик для него срабатывает 2 раза и неверно, а
 для внутреннего 1 и нормально? И наконец, самое главное - почему при 
попытке изменить Value у внутреннего ScrollBar в первый раз 
заканчиваются ничем?!<br><br>Данный пример можно вставить в пустой проект Winform в Visual Studio и перетаскивая внешний VScrollBar (слева от панели с элементами) убедится в том что он движется в 2 раза быстрее внутреннего.<br><div class="code"><pre class="csharp" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">partial</span> <span class="kw4">class</span> Form1 <span class="sy0">:</span> Form
    <span class="br0">{</span>
        <span class="kw1">public</span> Form1<span class="br0">(</span><span class="br0">)</span>
        <span class="br0">{</span>
            InitializeComponent<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            <span class="kw1">this</span><span class="sy0">.</span><span class="me1">Size</span> <span class="sy0">=</span> <span class="kw3">new</span> Size<span class="br0">(</span>700, 600<span class="br0">)</span><span class="sy0">;</span>
            <span class="kw1">this</span><span class="sy0">.</span><span class="me1">MinimumSize</span> <span class="sy0">=</span> <span class="kw3">new</span> Size<span class="br0">(</span>700, 600<span class="br0">)</span><span class="sy0">;</span>
            Panel TestPanel <span class="sy0">=</span> <span class="kw3">new</span> Panel<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            TestPanel<span class="sy0">.</span><span class="me1">Size</span> <span class="sy0">=</span> <span class="kw3">new</span> Size<span class="br0">(</span>600,500<span class="br0">)</span><span class="sy0">;</span>
            TestPanel<span class="sy0">.</span><span class="me1">Location</span> <span class="sy0">=</span> <span class="kw3">new</span> Point<span class="br0">(</span>5, 5<span class="br0">)</span><span class="sy0">;</span>
            <span class="kw1">this</span><span class="sy0">.</span><span class="me1">Controls</span><span class="sy0">.</span><span class="me1">Add</span><span class="br0">(</span>TestPanel<span class="br0">)</span><span class="sy0">;</span>
            TestFlowLayoutPanel TestBFLP <span class="sy0">=</span> <span class="kw3">new</span> TestFlowLayoutPanel<span class="br0">(</span>TestPanel<span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
    <span class="br0">}</span>
&nbsp;
    <span class="co1">/// &lt;summary&gt;</span>
    <span class="co1">/// Тестовый класс. Пытается воспроизвести глюк с Scroll.</span>
    <span class="co1">/// &lt;/summary&gt;</span>
    <span class="kw4">class</span> TestFlowLayoutPanel
    <span class="br0">{</span>
&nbsp;
        <span class="co2">#region Fields</span>
        <span class="co1">/// &lt;summary&gt;</span>
        <span class="co1">/// Внутренняя FlowLayoutPanel в которой происходит отображение текущего фрейма коллекции обоев.</span>
        <span class="co1">/// &lt;/summary&gt;</span>
        FlowLayoutPanel FLP<span class="sy0">;</span>
&nbsp;
        <span class="co1">/// &lt;summary&gt;</span>
        <span class="co1">/// Внешний к FLP ScrollBar, отображающий навигацию по всей коллекции. </span>
        <span class="co1">/// &lt;/summary&gt;</span>
        VScrollBar OuterScrollBar<span class="sy0">;</span>
&nbsp;
        <span class="co1">/// &lt;summary&gt;</span>
        <span class="co1">/// Старое значение FLP.VScroll.Value;</span>
        <span class="co1">/// &lt;/summary&gt;</span>
        <span class="kw4">int</span> OldFlpScrollValue<span class="sy0">;</span>
&nbsp;
        <span class="co1">/// &lt;summary&gt;</span>
        <span class="co1">/// Старое значение Value для внешнего скролл-бара.</span>
        <span class="co1">/// &lt;/summary&gt;</span>
        <span class="kw4">int</span> OldOuterScrollBarValue<span class="sy0">;</span>
&nbsp;
        <span class="kw4">int</span> ItemsCount <span class="sy0">=</span> <span class="nu0">200</span><span class="sy0">;</span>
        <span class="kw4">int</span> ItemsHeight <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">;</span>
        <span class="kw4">int</span> ItemsWidth <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">;</span>
        Padding DefMargin <span class="sy0">=</span> <span class="kw3">new</span> Padding<span class="br0">(</span>3<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
        <span class="co2">#endregion</span>
&nbsp;
        <span class="co2">#region Constructors</span>
&nbsp;
        <span class="kw1">public</span> TestFlowLayoutPanel<span class="br0">(</span><span class="kw5">System</span><span class="sy0">.</span><span class="me1">Windows</span><span class="sy0">.</span><span class="me1">Forms</span><span class="sy0">.</span><span class="me1">Panel</span> TargetPanel<span class="br0">)</span> <span class="sy0">:</span> <span class="kw1">this</span><span class="br0">(</span>TargetPanel, <span class="kw3">new</span> Point<span class="br0">(</span>100, 6<span class="br0">)</span>, <span class="kw3">new</span> Size<span class="br0">(</span><span class="nu0">344</span>, <span class="coMULTI">/*325*/</span>410<span class="br0">)</span>, 344, 325<span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
&nbsp;
        <span class="kw1">public</span> TestFlowLayoutPanel<span class="br0">(</span><span class="kw5">System</span><span class="sy0">.</span><span class="me1">Windows</span><span class="sy0">.</span><span class="me1">Forms</span><span class="sy0">.</span><span class="me1">Panel</span> TargetPanel, Point TargetLocation, Size FLPSize, <span class="kw4">int</span> MinFlpWidth, <span class="kw4">int</span> MinFlpHeight<span class="br0">)</span>
        <span class="br0">{</span>         
            FLP <span class="sy0">=</span> <span class="kw3">new</span> FlowLayoutPanel<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar <span class="sy0">=</span> <span class="kw3">new</span> VScrollBar<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            <span class="co1">//проверка соотвествия размеров вставляемой FLP и целевой панели.</span>
            <span class="kw1">if</span> <span class="br0">(</span><span class="br0">(</span><span class="br0">(</span><span class="br0">(</span>FLPSize<span class="sy0">.</span><span class="me1">Width</span> <span class="sy0">+</span> TargetLocation<span class="sy0">.</span><span class="me1">X</span><span class="br0">)</span> <span class="sy0">&gt;</span> TargetPanel<span class="sy0">.</span><span class="me1">Size</span><span class="sy0">.</span><span class="me1">Width</span><span class="br0">)</span> <span class="sy0">||</span> <span class="br0">(</span><span class="br0">(</span>FLPSize<span class="sy0">.</span><span class="me1">Height</span> <span class="sy0">+</span> TargetLocation<span class="sy0">.</span><span class="me1">Y</span><span class="br0">)</span> <span class="sy0">&gt;</span> TargetPanel<span class="sy0">.</span><span class="me1">Size</span><span class="sy0">.</span><span class="me1">Height</span><span class="br0">)</span><span class="br0">)</span> <span class="sy0">||</span> <span class="br0">(</span><span class="br0">(</span>TargetPanel<span class="sy0">.</span><span class="me1">Size</span><span class="sy0">.</span><span class="me1">Height</span> <span class="sy0">&lt;</span> MinFlpHeight<span class="br0">)</span> <span class="sy0">||</span> <span class="br0">(</span>TargetPanel<span class="sy0">.</span><span class="me1">Size</span><span class="sy0">.</span><span class="me1">Width</span> <span class="sy0">&lt;</span> MinFlpWidth<span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">throw</span> <span class="kw3">new</span> Exception<span class="br0">(</span><span class="st0">&quot;Size of FlowLayoutPanel is bigger then size of Target Panel.&quot;</span><span class="br0">)</span><span class="sy0">;</span> <span class="br0">}</span>
            FLP<span class="sy0">.</span><span class="me1">MinimumSize</span> <span class="sy0">=</span> <span class="kw3">new</span> Size<span class="br0">(</span>MinFlpWidth, MinFlpHeight<span class="br0">)</span><span class="sy0">;</span><span class="co1">//(344,325);</span>
            FLP<span class="sy0">.</span><span class="me1">Location</span> <span class="sy0">=</span> TargetLocation<span class="sy0">;</span>
            FLP<span class="sy0">.</span><span class="me1">Size</span> <span class="sy0">=</span> FLPSize<span class="sy0">;</span>
            FLP<span class="sy0">.</span><span class="me1">Anchor</span> <span class="sy0">=</span> <span class="br0">(</span>AnchorStyles<span class="sy0">.</span><span class="me1">Top</span> <span class="sy0">|</span> AnchorStyles<span class="sy0">.</span><span class="me1">Left</span> <span class="sy0">|</span> AnchorStyles<span class="sy0">.</span><span class="me1">Right</span> <span class="sy0">|</span> AnchorStyles<span class="sy0">.</span><span class="me1">Bottom</span><span class="br0">)</span><span class="sy0">;</span>
            FLP<span class="sy0">.</span><span class="me1">AutoScroll</span> <span class="sy0">=</span> <span class="kw1">true</span><span class="sy0">;</span>
            FLP<span class="sy0">.</span><span class="me1">BorderStyle</span> <span class="sy0">=</span> BorderStyle<span class="sy0">.</span><span class="me1">FixedSingle</span><span class="sy0">;</span>
&nbsp;
            OuterScrollBar<span class="sy0">.</span><span class="me1">Size</span> <span class="sy0">=</span> <span class="kw3">new</span> Size<span class="br0">(</span>17, FLPSize<span class="sy0">.</span><span class="me1">Height</span><span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">Location</span> <span class="sy0">=</span> <span class="kw3">new</span> Point<span class="br0">(</span><span class="br0">(</span>TargetLocation<span class="sy0">.</span><span class="me1">X</span> <span class="sy0">-</span> 17<span class="br0">)</span>, TargetLocation<span class="sy0">.</span><span class="me1">Y</span><span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">Anchor</span> <span class="sy0">=</span> <span class="br0">(</span>AnchorStyles<span class="sy0">.</span><span class="me1">Top</span> <span class="sy0">|</span> AnchorStyles<span class="sy0">.</span><span class="me1">Bottom</span> <span class="sy0">|</span> AnchorStyles<span class="sy0">.</span><span class="me1">Right</span><span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">Visible</span> <span class="sy0">=</span> <span class="kw1">false</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">Enabled</span> <span class="sy0">=</span> <span class="kw1">false</span><span class="sy0">;</span>
&nbsp;
            TargetPanel<span class="sy0">.</span><span class="me1">Controls</span><span class="sy0">.</span><span class="me1">Add</span><span class="br0">(</span>FLP<span class="br0">)</span><span class="sy0">;</span>
            TargetPanel<span class="sy0">.</span><span class="me1">Controls</span><span class="sy0">.</span><span class="me1">Add</span><span class="br0">(</span>OuterScrollBar<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
            OldFlpScrollValue <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
            OldOuterScrollBarValue <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
            SetDummyBlocks<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
            FLP<span class="sy0">.</span><span class="me1">SizeChanged</span> <span class="sy0">+=</span> <span class="kw3">new</span> EventHandler<span class="br0">(</span>FLP_SizeChanged<span class="br0">)</span><span class="sy0">;</span>
            FLP<span class="sy0">.</span><span class="me1">MouseWheel</span> <span class="sy0">+=</span> <span class="kw3">new</span> MouseEventHandler<span class="br0">(</span>FLP_MouseWheel<span class="br0">)</span><span class="sy0">;</span>
            FLP<span class="sy0">.</span><span class="me1">Scroll</span> <span class="sy0">+=</span> <span class="kw3">new</span> ScrollEventHandler<span class="br0">(</span>FLP_Scroll<span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">Scroll</span> <span class="sy0">+=</span> <span class="kw3">new</span> ScrollEventHandler<span class="br0">(</span>OuterScrollBar_Scroll<span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
        <span class="co2">#endregion</span>
&nbsp;
        <span class="co1">/// &lt;summary&gt;</span>
        <span class="co1">/// Устанавливает тестовую коллекцию болванчиков </span>
        <span class="co1">/// &lt;/summary&gt;</span>
        <span class="kw4">void</span> SetDummyBlocks<span class="br0">(</span><span class="br0">)</span> 
        <span class="br0">{</span>
            <span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> ItemsCount<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">)</span> 
            <span class="br0">{</span>
                Panel NewPanel <span class="sy0">=</span> <span class="kw3">new</span> Panel<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
                NewPanel<span class="sy0">.</span><span class="me1">BorderStyle</span> <span class="sy0">=</span> BorderStyle<span class="sy0">.</span><span class="me1">FixedSingle</span><span class="sy0">;</span>
                NewPanel<span class="sy0">.</span><span class="me1">BackColor</span> <span class="sy0">=</span> Color<span class="sy0">.</span><span class="me1">Blue</span><span class="sy0">;</span>
                NewPanel<span class="sy0">.</span><span class="me1">Margin</span> <span class="sy0">=</span> DefMargin<span class="sy0">;</span>
                NewPanel<span class="sy0">.</span><span class="me1">Size</span> <span class="sy0">=</span> <span class="kw3">new</span> Size<span class="br0">(</span>ItemsWidth, ItemsHeight<span class="br0">)</span><span class="sy0">;</span>
                FLP<span class="sy0">.</span><span class="me1">Controls</span><span class="sy0">.</span><span class="me1">Add</span><span class="br0">(</span>NewPanel<span class="br0">)</span><span class="sy0">;</span>
            <span class="br0">}</span>
            ScrollBarsValidation<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
        <span class="co2">#region ScrollParametersValidation</span>
&nbsp;
        <span class="kw4">void</span> ScrollBarsValidation<span class="br0">(</span><span class="br0">)</span>
        <span class="br0">{</span>
            CheckScrollBar<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">Maximum</span> <span class="sy0">=</span> GetCurrentCollectionFullHeight<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">SmallChange</span> <span class="sy0">=</span> FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">SmallChange</span><span class="sy0">;</span>
            OuterScrollBar<span class="sy0">.</span><span class="me1">LargeChange</span> <span class="sy0">=</span> FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">LargeChange</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
        <span class="kw4">void</span> CheckScrollBar<span class="br0">(</span><span class="br0">)</span>
        <span class="br0">{</span>
&nbsp;
            <span class="kw1">if</span> <span class="br0">(</span>FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Visible</span><span class="br0">)</span>
            <span class="br0">{</span>
                OuterScrollBar<span class="sy0">.</span><span class="me1">Visible</span> <span class="sy0">=</span> <span class="kw1">true</span><span class="sy0">;</span>
                OuterScrollBar<span class="sy0">.</span><span class="me1">Enabled</span> <span class="sy0">=</span> <span class="kw1">true</span><span class="sy0">;</span>
            <span class="br0">}</span>
            <span class="kw1">else</span>
            <span class="br0">{</span>
                OuterScrollBar<span class="sy0">.</span><span class="me1">Visible</span> <span class="sy0">=</span> <span class="kw1">false</span><span class="sy0">;</span>
                OuterScrollBar<span class="sy0">.</span><span class="me1">Enabled</span> <span class="sy0">=</span> <span class="kw1">false</span><span class="sy0">;</span>
            <span class="br0">}</span>
        <span class="br0">}</span>
&nbsp;
        <span class="kw4">int</span> GetCurrentCollectionFullHeight<span class="br0">(</span><span class="br0">)</span>
        <span class="br0">{</span>
            <span class="kw1">return</span> <span class="br0">(</span><span class="br0">(</span>ItemsCount <span class="sy0">/</span> GetPanelsInRowCount<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="sy0">*</span> <span class="br0">(</span>ItemsHeight <span class="sy0">+</span> <span class="br0">(</span>DefMargin<span class="sy0">.</span><span class="me1">Top</span> <span class="sy0">+</span> DefMargin<span class="sy0">.</span><span class="me1">Bottom</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
        <span class="kw4">int</span> GetPanelsInRowCount<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="br0">(</span>FLP<span class="sy0">.</span><span class="me1">Width</span> <span class="sy0">/</span> <span class="br0">(</span>ItemsWidth <span class="sy0">+</span> <span class="br0">(</span>DefMargin<span class="sy0">.</span><span class="me1">Left</span> <span class="sy0">+</span> DefMargin<span class="sy0">.</span><span class="me1">Right</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span> <span class="br0">}</span>
        <span class="co2">#endregion</span>
&nbsp;
        <span class="co2">#region EventHandlers</span>
&nbsp;
        <span class="kw4">void</span> FLP_SizeChanged<span class="br0">(</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">)</span> 
        <span class="br0">{</span>
            ScrollBarsValidation<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
        <span class="kw4">void</span> FLP_MouseWheel<span class="br0">(</span><span class="kw4">object</span> sender, MouseEventArgs e<span class="br0">)</span>
        <span class="br0">{</span>
            CheckScrolling<span class="br0">(</span>sender<span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
        <span class="kw4">void</span> FLP_Scroll<span class="br0">(</span><span class="kw4">object</span> sender, ScrollEventArgs e<span class="br0">)</span>
        <span class="br0">{</span>
            CheckScrolling<span class="br0">(</span>sender<span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
        <span class="kw4">void</span> OuterScrollBar_Scroll<span class="br0">(</span><span class="kw4">object</span> sender, ScrollEventArgs e<span class="br0">)</span>
        <span class="br0">{</span>
            CheckScrolling<span class="br0">(</span>sender<span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
&nbsp;
&nbsp;
        <span class="co2">#endregion</span>
&nbsp;
        <span class="co1">/// &lt;summary&gt;</span>
        <span class="co1">/// Действия при прокрутке.</span>
        <span class="co1">/// &lt;/summary&gt;</span>
        <span class="co1">/// &lt;param name=&quot;sender&quot;&gt;Элемент, с помощью которого производиось пролистывание&lt;/param&gt;</span>
        <span class="kw4">void</span> CheckScrolling<span class="br0">(</span><span class="kw4">object</span> sender<span class="br0">)</span>
        <span class="br0">{</span>
            <span class="kw4">bool</span> ScrollDirection<span class="sy0">;</span> <span class="co1">// напраление перелистывания. True - вверх, Flase - вниз.</span>
            <span class="kw1">if</span> <span class="br0">(</span>sender <span class="sy0">==</span> FLP<span class="br0">)</span>
            <span class="br0">{</span>
                <span class="kw1">if</span> <span class="br0">(</span>FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">&gt;</span> OldFlpScrollValue<span class="br0">)</span>
                <span class="br0">{</span>
                    ScrollDirection <span class="sy0">=</span> <span class="kw1">false</span><span class="sy0">;</span>
                    OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">+=</span> FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">-</span> OldFlpScrollValue<span class="sy0">;</span>
                <span class="br0">}</span>
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">(</span>FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">&lt;</span> OldFlpScrollValue<span class="br0">)</span>
                <span class="br0">{</span>
                    ScrollDirection <span class="sy0">=</span> <span class="kw1">true</span><span class="sy0">;</span>
                    OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">+=</span> FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">-</span> OldFlpScrollValue<span class="sy0">;</span>
                <span class="br0">}</span>
                <span class="kw1">else</span> <span class="kw1">return</span><span class="sy0">;</span>
            <span class="br0">}</span>
            <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">(</span>sender <span class="sy0">==</span> OuterScrollBar<span class="br0">)</span>
            <span class="br0">{</span>
                <span class="kw1">if</span> <span class="br0">(</span>OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">&gt;</span> OldOuterScrollBarValue<span class="br0">)</span>
                <span class="br0">{</span>
                    ScrollDirection <span class="sy0">=</span> <span class="kw1">false</span><span class="sy0">;</span>
                    FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">+=</span> OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">-</span> OldOuterScrollBarValue<span class="sy0">;</span>
                <span class="br0">}</span>
                <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">(</span>OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">&lt;</span> OldOuterScrollBarValue<span class="br0">)</span>
                <span class="br0">{</span>
                    ScrollDirection <span class="sy0">=</span> <span class="kw1">true</span><span class="sy0">;</span>
                    FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">+=</span> OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span> <span class="sy0">-</span> OldOuterScrollBarValue<span class="sy0">;</span>
                <span class="br0">}</span>
                <span class="kw1">else</span> <span class="kw1">return</span><span class="sy0">;</span>
            <span class="br0">}</span>
            <span class="kw1">else</span> <span class="br0">{</span> <span class="kw1">throw</span> <span class="kw3">new</span> Exception<span class="br0">(</span><span class="st0">&quot;Unknown Sender !!!&quot;</span><span class="br0">)</span><span class="sy0">;</span> <span class="br0">}</span>
&nbsp;
            <span class="kw1">if</span> <span class="br0">(</span>ScrollDirection<span class="br0">)</span>
            <span class="br0">{</span>
                OldFlpScrollValue <span class="sy0">=</span> FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span><span class="sy0">;</span>
                OldOuterScrollBarValue <span class="sy0">=</span> OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span><span class="sy0">;</span>
            <span class="br0">}</span>
            <span class="kw1">else</span>
            <span class="br0">{</span>
                OldFlpScrollValue <span class="sy0">=</span> FLP<span class="sy0">.</span><span class="me1">VerticalScroll</span><span class="sy0">.</span><span class="me1">Value</span><span class="sy0">;</span>
                OldOuterScrollBarValue <span class="sy0">=</span> OuterScrollBar<span class="sy0">.</span><span class="me1">Value</span><span class="sy0">;</span>
            <span class="br0">}</span>
        <span class="br0">}</span>
    <span class="br0">}</span> </pre></div><br>]]></description><pubDate>Mon, 28 Nov 2011 06:07:08 +0300</pubDate><link>http://bitbybit.ru/question/262</link><author>Skywise</author></item><item><title>Вопрос »C++ »С++ Code Blocks связь с интернетом</title><description><![CDATA[Как получать информацию из сайтов (картинки, текст) и показывать её на форме программы.<div><br></div>]]></description><pubDate>Thu, 10 Nov 2011 13:55:22 +0300</pubDate><link>http://bitbybit.ru/question/261</link><author>mauris</author></item><item><title>Вопрос »C++ »C++ CodeBlocks - работа с графическим интерфейсом (Windows XP)</title><description><![CDATA[Как делать окна похожие на окна в программе AIMP, и в украшениях рабочего стола как в Windows7?]]></description><pubDate>Wed, 09 Nov 2011 14:35:39 +0300</pubDate><link>http://bitbybit.ru/question/260</link><author>mauris</author></item><item><title>Вопрос »C++ »События keyPress Qt4</title><description><![CDATA[<div>День добрый</div><div><br></div>Структура приложения: QMainWindow c MDI widget&#039;ом в качестве центрального, mdisubwindow содержит мой виджет в котором мне нужно обработать нажатие кнопки клавиатуры, но нажатия клавиатуры&nbsp;обрабатываются&nbsp;только главным окном. Подскажите как что я делаю не правильно?]]></description><pubDate>Wed, 02 Nov 2011 21:41:17 +0300</pubDate><link>http://bitbybit.ru/question/259</link><author>Thunder</author></item><item><title>Вопрос »C++ »С++ бинарные файлы БД</title><description><![CDATA[База данных в бинарном файле]]></description><pubDate>Wed, 02 Nov 2011 21:08:23 +0300</pubDate><link>http://bitbybit.ru/question/258</link><author>mauris</author></item><item><title>Вопрос »C++ »С++ </title><description><![CDATA[Виртуальная файловая система на подобии Linux<div><br></div>]]></description><pubDate>Wed, 02 Nov 2011 21:06:25 +0300</pubDate><link>http://bitbybit.ru/question/257</link><author>mauris</author></item><item><title>Вопрос »C++ »C++ ftp</title><description><![CDATA[С++<div>как написать ftp-клиент (консольное приложение)</div><div>+примеры.</div>]]></description><pubDate>Wed, 02 Nov 2011 21:04:06 +0300</pubDate><link>http://bitbybit.ru/question/256</link><author>mauris</author></item><item><title>Вопрос »Общие вопросы »Скроллинг мышкой и зум содержимого блока.</title><description><![CDATA[<p>Есть задача сделать карту.</p><p>посоветуйте как можно сделать скроллинг курсором мышки и зум содержимого блока div примерно как в google maps.</p><p>в основном блоке будут дочерние блоки расположенные по координатам x y.</p>]]></description><pubDate>Fri, 28 Oct 2011 14:44:29 +0400</pubDate><link>http://bitbybit.ru/question/255</link><author>VoF</author></item><item><title>Вопрос »Общие вопросы »Создание отчетов в Qt</title><description><![CDATA[Кто что порекомендует? Только бесплатное. Спасибо.]]></description><pubDate>Sun, 23 Oct 2011 11:25:32 +0400</pubDate><link>http://bitbybit.ru/question/254</link><author>shame</author></item><item><title>Готовое решение »PHP »Классификатор адресов - КЛАДР [JQuery+PHP+Curl]</title><description><![CDATA[Приветствую, недавно понадобился КЛАДР. Для регистрации предприятий, вот небольшой, простенький скрипт - в общее пользование.]]></description><pubDate>Tue, 22 Nov 2011 07:24:38 +0300</pubDate><link>http://bitbybit.ru/solution/138/</link><author>Meowth</author></item><item><title>Готовое решение »PHP »Explode - усовершенствоание</title><description><![CDATA[Дополнение к оператору explode. 2 маленьких и лёгких функций.]]></description><pubDate>Wed, 16 Nov 2011 12:40:05 +0300</pubDate><link>http://bitbybit.ru/solution/137/</link><author>Meowth</author></item><item><title>Готовое решение »PHP »Передача cookies скрипту через file_get_contents и  обратно</title><description><![CDATA[Задача была в том, чтобы при множественных обращениях к скрипту на стороннем сервере (с разными парметрами, например login, logout, getUser, getStatistics, sendNotification и т.п) - некая сессионная информация + misc данные из куков передавалась вместе с http-запросами. <br><br>после некоторых тестов выяснилось, что без дополнительных манипуляций удалённый срипт не имеет доступа к кукам, установленным для данной страницы, равно как и и не имеет возможности эти куки поставить.<br><br>PS: основной проблемой была <span style="font-weight: bold;">невозможность установки curl и http-расширений PHP.</span><br><span style="font-style: italic;">Кроме того, предлагаю именно общее решение, а на уникальности кода и собственном 100% авторстве не настаиваю.</span><br>]]></description><pubDate>Tue, 22 Mar 2011 12:58:49 +0300</pubDate><link>http://bitbybit.ru/solution/136/</link><author>perlaws</author></item><item><title>Готовое решение »PHP »Автозагрузка классов</title><description><![CDATA[Задача:<br>Есть у нас некоторая папка в проекте, где хранятся классы, их много, причём есть желание группировать их по подпапкам.<br>например, вот возможная структура:<br>-classes<br><span></span>--system<br>----db<br>--service<br><br>и т.п.<br><br>понятно, что вручную прописывать все пути довольно сложно, да и не нужно.]]></description><pubDate>Wed, 09 Mar 2011 14:53:30 +0300</pubDate><link>http://bitbybit.ru/solution/135/</link><author>rcter</author></item><item><title>Готовое решение »Веб-программирование »HTML5 ★ BOILERPLATE</title><description><![CDATA[Нашел на хабре очень интересную статью про html5 шаблон&nbsp;<a href="http://ru.html5boilerplate.com/">BOILERPLATE</a>&nbsp;и решил поделиться ссылкой.<div><br></div><div>Особенно интересно узнать ваши мысли по этому поводу.</div>]]></description><pubDate>Sun, 16 Jan 2011 10:31:57 +0300</pubDate><link>http://bitbybit.ru/solution/134/</link><author>Thunder</author></item><item><title>Готовое решение »CMS »ImageCMS 2.1.0 - бесплатная система управления сайтом.</title><description><![CDATA[<h2 class="icon1">Что такое ImageCMS?</h2><img src="/content/images/essence/wysiwyg/m_34021f373e31c404.png" alt="" style="margin: 0px; float: none; width: 221px; height: 62px;"><br>
            <p>Это современный удобный, быстрый, дружественный к 
поисковым системам open-source инструмент для создания и управления 
веб-сайтами любой сложности. <br></p><h2 class="icon2">&nbsp;Где используется?</h2>
            <p>Система разрабатывается уже больше двух лет и 
протестированна в различных боевых условиях. Вы можете сами ознакомится 
со списком созданных на ее базе сайтов.</p><h2 class="icon3">&nbsp;Как можно применить?</h2>
            <p>ImageCMS применяется в основном для создания 
корпоративных сайтов с расширенными возможностями, а также современных 
интернет-магазинов.</p>]]></description><pubDate>Sat, 08 Jan 2011 13:22:53 +0300</pubDate><link>http://bitbybit.ru/solution/133/</link><author>SiteImage</author></item><item><title>Готовое решение »Десктопное программирование »Вызывать UIPickerView по клику на UICellview/UITextField</title><description><![CDATA[<div>Допустим мы делае приложение похожее на Address Book. У нас есть UITableView с некоторыми полями и нам надо по клику на ячейку, текстовое поле красиво показать UIPickerView. У себя в <a href="http://www.misprint.org.ru/blog/dev/apple/2010/Используем-UIPickerView-для-ввода-информации.html">блоге</a><span class="Apple-style-span" style="font-family: Verdana, Geneva, &#039;‘Trebuchet MS’&#039;, Helvetica, sans-serif; font-size: 13px; color: rgb(238, 238, 238); line-height: 25px; ">т</span>я описал как это сделать.</div>P.S.<div>Добавьте раздел про iOS/Obj-C</div>]]></description><pubDate>Fri, 31 Dec 2010 01:10:57 +0300</pubDate><link>http://bitbybit.ru/solution/132/</link><author>andoriyu</author></item><item><title>Готовое решение »C++ »Параметризированные строки в C</title><description><![CDATA[В строку вида &quot;string with %1 and %2 and %3&quot; требуется на места %1, %2 и %3 вставить аргументы из массива.]]></description><pubDate>Thu, 23 Dec 2010 11:25:42 +0300</pubDate><link>http://bitbybit.ru/solution/131/</link><author>chaos</author></item><item><title>Готовое решение »PHP »Exception на каждую системную ошибку</title><description><![CDATA[Часто приходится запускать некоторые операции, используя демон-планировщик. Я использую cron. выполнения этих операций может занимать много времени. В моем случае мне нужно было ежемесячно подсчитывать выплаты 10000 пользователям. Все мы люди и наш код не может быть идеальным. Ошибка в нем может привести к критическому сбою в системе.<br><br>]]></description><pubDate>Thu, 02 Dec 2010 12:54:19 +0300</pubDate><link>http://bitbybit.ru/solution/130/</link><author>Alexander_Plutov</author></item><item><title>Готовое решение »Perl »Модуль сессий для Perl</title><description><![CDATA[Писал недавно для себя движок блога, и возникла проблема со стандартным решением из cpan, CGI::Session помойму.<div>По этому поводу решил немного раскопать эту тему, и на выходе у меня получился небольшой модуль для работы с сессиями.</div>]]></description><pubDate>Mon, 29 Nov 2010 17:26:49 +0300</pubDate><link>http://bitbybit.ru/solution/128/</link><author>ascrazy</author></item><item><title>Урок »ActionScript »Action Script »Эффекты »Своя полоса прокрутки</title><description><![CDATA[Всем доброго времени суток. В этом уроке мы рассмотрим то, как можно 
создать свою полосу прокрутки, которая может пригодится Вам в Вашем 
Flash сайте, баннере, презентации.<br><span style="font-weight: bold;">Рисование:</span><br>Создайте
 новый проект Action Script 3.0 (если у Вас нету такого пункта в окне 
New Document (Ctrl+N), то Вам следует обновить свою среду Flash, 
поскольку она изрядно устарела).<br>Выберите инструмент Rectangle Tool и
 в окне Properties (Свойства) укажите радиус закругления углов 
прямоугольника (я поставил 9) и нарисуйте небольшой прямоугольник.<br>Теперь нажмите V и разделите его на три ровных части:<br><img src="../../content/images/essence/wysiwyg/m_c5aff1e9c9cda2c6.jpg" alt="" style="margin: 0px 0px 0px 0px;float:none;width:60px;height:65px;">&nbsp;<img src="/content/images/essence/wysiwyg/m_0849fe2da73b8f4f.jpg" alt="" style="margin: 0px 0px 0px 0px;float:none;width:110px;height:148px;"><br>Теперь
 нужно преобразовать каждую из частей в символ Movie Clip (клавиша F8, я
 дал такие имена этим объектам: Up, Center, Down). После этого поставите
 их рядом, выделите и преобразуйте в Movie Clip (я его назвал 
ScrollBtn).<br><img src="../../content/images/essence/wysiwyg/m_67238ef4149628ce.jpg" alt="" style="margin: 0px 0px 0px 0px;float:none;width:239px;height:163px;"><img src="/content/images/essence/wysiwyg/m_5b11bf7769a45bd1.jpg" alt="" style="margin: 0px 0px 0px 0px;float:none;width:239px;height:163px;"><br>Теперь у нас получился мувиклип, который в свою очередь состоит еще с 3 мувиклипов.<br>Добавим
 новый слой и нарисуем на сцене инструментом Прямоугольник область 
которая должна быть в несколько раз выше чем наша сцена, преобразуйте 
его в Movie Clip (название: ContentArea) и добавите на него несколько 
фигур (это нужно делать в режиме редактирования фигуры (дважды кликните 
по фигуре чтобы вызвать этот режим)).<br><img src="../../content/images/essence/wysiwyg/m_4b7145ab81477e82.jpg" alt="" style="margin: 0px 0px 0px 0px;float:none;width:400px;height:188px;"><img src="/content/images/essence/wysiwyg/m_ce16a4cf7847fc0e.jpg" alt="" style="margin: 0px 0px 0px 0px;float:none;width:400px;height:188px;"><br>Достаточно на сегодня рисования. Наконец то приступим к кодингу!<br><span style="font-weight: bold;">Подготовка к кодингу:</span><br>Для
 каждого мувиклипа нужно присвоить свое Instance Name (имя через которое
 можно обращаться непосредственно через AS). Я все сделал так:&nbsp; <br><ul><li>ScrollBtn - Button;</li><li>UP - ArwUP;</li><li>Center - CnPos;</li><li>Down - ArwDOWN;</li><li>ContentArea - CArea;</li></ul><span style="font-weight: bold;">Кодинг:</span><br>Теперь
 нужно составить алгоритм работы прокрутки. Если пользователь навел 
курсор мыши на кнопку - переместить ее в нужную сторону.<br>Добавим слушатели событий для  ArwUP и ArwDOWN (я выбрал <span class="me1"><span style="font-family: monospace;">MOUSE_MOVE</span></span>):<br><br><div class="code"><pre class="javascript" style="font-family:monospace;">Butt.<span class="me1">ArwUP</span>.<span class="me1">addEventListener</span><span class="br0">(</span>MouseEvent.<span class="me1">MOUSE_MOVE</span><span class="sy0">,</span> up<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
Butt.<span class="me1">ArwDOWN</span>.<span class="me1">addEventListener</span><span class="br0">(</span>MouseEvent.<span class="me1">MOUSE_MOVE</span><span class="sy0">,</span> down<span class="br0">)</span><span class="sy0">;</span></pre></div>Прокрутка будет выполнятся если курсор наведен на одну из частей кнопки.<br>Код функций:<br><br><div class="code"><pre class="javascript" style="font-family:monospace;"><span class="kw2">function</span> up <span class="br0">(</span>e<span class="sy0">:</span>MouseEvent<span class="br0">)</span>
<span class="br0">{</span>
	<span class="kw1">if</span> <span class="br0">(</span>Butt.<span class="me1">ArwUP</span>.<span class="me1">y</span> <span class="sy0">&gt;</span> <span class="sy0">-</span>712<span class="br0">)</span>// 712 - зависит от начального положения кнопки на сцене, если 
	<span class="br0">{</span>//кнопка подошла к краю сцены то дальше передвигать нельзя
		Butt.<span class="me1">ArwDOWN</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="br0">(</span>Butt.<span class="me1">ArwDOWN</span>.<span class="me1">y</span> <span class="sy0">-</span> 4<span class="br0">)</span><span class="sy0">;</span>// 4 - зависит от высоты рамки с контентом
		Butt.<span class="me1">CnPos</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="br0">(</span>Butt.<span class="me1">CnPos</span>.<span class="me1">y</span> <span class="sy0">-</span> 4<span class="br0">)</span><span class="sy0">;</span>
		Butt.<span class="me1">ArwUP</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="br0">(</span>Butt.<span class="me1">ArwUP</span>.<span class="me1">y</span> <span class="sy0">-</span> 4<span class="br0">)</span><span class="sy0">;</span>
		CArea.<span class="me1">y</span> <span class="sy0">=</span> CArea.<span class="me1">y</span> <span class="sy0">-</span> <span class="nu0">7</span><span class="sy0">;</span>// 7 - зависит от высоты рамки с контентом 
	<span class="br0">}</span>   //и плавности прокручивания
<span class="br0">}</span>
&nbsp;
<span class="kw2">function</span> down <span class="br0">(</span>e<span class="sy0">:</span>MouseEvent<span class="br0">)</span>
<span class="br0">{</span>
	<span class="kw1">if</span> <span class="br0">(</span>Butt.<span class="me1">ArwDOWN</span>.<span class="me1">y</span> <span class="sy0">&lt;</span> <span class="sy0">-</span>331<span class="br0">)</span>
	<span class="br0">{</span>
		Butt.<span class="me1">ArwDOWN</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="br0">(</span>Butt.<span class="me1">ArwDOWN</span>.<span class="me1">y</span> <span class="sy0">+</span> 4<span class="br0">)</span><span class="sy0">;</span>
		Butt.<span class="me1">CnPos</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="br0">(</span>Butt.<span class="me1">CnPos</span>.<span class="me1">y</span> <span class="sy0">+</span> 4<span class="br0">)</span><span class="sy0">;</span>
		Butt.<span class="me1">ArwUP</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="br0">(</span>Butt.<span class="me1">ArwUP</span>.<span class="me1">y</span> <span class="sy0">+</span> 4<span class="br0">)</span><span class="sy0">;</span>
		CArea.<span class="me1">y</span> <span class="sy0">=</span> CArea.<span class="me1">y</span> <span class="sy0">+</span> <span class="nu0">7</span><span class="sy0">;</span>
	<span class="br0">}</span>
&nbsp;
<span class="br0">}</span></pre></div>Чтобы определить какие именно координаты кнопки у краев сцены можно использовать функцию trace() во время тестирования ролика.<br>Исходник и модификация доступны по ссылке: <a href="http://www.fayloobmennik.net/566911">scr.rar</a>]]></description><pubDate>Mon, 25 Apr 2011 09:35:48 +0400</pubDate><link>http://bitbybit.ru/tutorial/action_script/lesson/226</link><author>limit</author></item><item><title>Урок »C++ »C++ »Массивы »Двумерные и многомерные массивы</title><description><![CDATA[<h2>Двумерные массивы</h2><div><h3>Статические</h3><div>В случае статического массива, все принципы работы, такие же как и у <a href="http://bitbybit.ru/tutorial/cpp/lesson/223">одномерного</a>:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="co2">#pragma hdrstop</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="co2">#pragma argsused</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span><span class="sy2">*</span> argv<span class="br0">[</span><span class="br0">]</span><span class="br0">)</span>
<span class="br0">{</span>
	<span class="kw4">int</span> array_2d<span class="br0">[</span>3<span class="br0">]</span><span class="br0">[</span>3<span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span> <span class="br0">{</span>11, 12, 13<span class="br0">}</span>, <span class="br0">{</span>21, 22, 23<span class="br0">}</span>, <span class="br0">{</span>31,32,33<span class="br0">}</span><span class="br0">}</span><span class="sy4">;</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> <span class="nu0">3</span><span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> j <span class="sy1">&lt;</span> <span class="nu0">3</span><span class="sy4">;</span> j<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
			<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> array_2d<span class="br0">[</span>i<span class="br0">]</span><span class="br0">[</span>j<span class="br0">]</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
		<span class="br0">}</span>
		<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
	<span class="br0">}</span>
	<span class="kw3">cin</span>.<span class="me1">get</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
	<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">//---------------------------------------------------------------------------</span></pre></div>Данный код выведет на экран:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="nu0">11</span> <span class="nu0">12</span> <span class="nu0">13</span>
<span class="nu0">21</span> <span class="nu0">22</span> <span class="nu0">23</span>
<span class="nu0">31</span> <span class="nu0">32</span> <span class="nu0">33</span></pre></div><h3>Динамические</h3><div>При динамическом создании двумерного массива, необходимо понимать, что, на самом деле, вы создаете одномерный массив указателей на одномерные массивы:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span> <span class="co1">// Колличество строк</span>
<span class="kw4">int</span> m <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span> <span class="co1">// Колличество столбцов</span>
<span class="kw4">int</span><span class="sy2">**</span> array_2d<span class="sy4">;</span>
&nbsp;
<span class="co1">// Создаем массив указателей</span>
array_2d <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="sy2">*</span><span class="br0">[</span>n<span class="br0">]</span><span class="sy4">;</span>
&nbsp;
<span class="co1">// А теперь создаем массивы значений, для каждой строки</span>
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
	array_2d<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span>m<span class="br0">]</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>Удаляется такой массив в обратном порядке:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="co1">// Удаляем массивы значений</span>
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
	<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_2d<span class="br0">[</span>i<span class="br0">]</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// Удаляем массив указателей</span>
<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_2d<span class="sy4">;</span></pre></div><br></div><div>В остальном никаких изменений:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="co2">#pragma hdrstop</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="co2">#pragma argsused</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span><span class="sy2">*</span> argv<span class="br0">[</span><span class="br0">]</span><span class="br0">)</span>
<span class="br0">{</span>
	<span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span> <span class="co1">// Колличество строк</span>
	<span class="kw4">int</span> m <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span> <span class="co1">// Колличество столбцов</span>
	<span class="kw4">int</span><span class="sy2">**</span> array_2d<span class="sy4">;</span>
&nbsp;
	<span class="co1">// Создаем массив указателей</span>
	array_2d <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="sy2">*</span><span class="br0">[</span>n<span class="br0">]</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// А теперь создаем массивы значений, для каждой строки</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		array_2d<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span>m<span class="br0">]</span><span class="sy4">;</span>
	<span class="br0">}</span>
&nbsp;
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> <span class="nu0">3</span><span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> j <span class="sy1">&lt;</span> <span class="nu0">3</span><span class="sy4">;</span> j<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
			array_2d<span class="br0">[</span>i<span class="br0">]</span><span class="br0">[</span>j<span class="br0">]</span> <span class="sy1">=</span> <span class="br0">(</span>i<span class="sy2">+</span>1<span class="br0">)</span><span class="sy2">*</span>10<span class="sy2">+</span><span class="br0">(</span>j<span class="sy2">+</span>1<span class="br0">)</span><span class="sy4">;</span>
			<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> array_2d<span class="br0">[</span>i<span class="br0">]</span><span class="br0">[</span>j<span class="br0">]</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
		<span class="br0">}</span>
		<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
	<span class="br0">}</span>
&nbsp;
	<span class="co1">// Удаляем массивы значений</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_2d<span class="br0">[</span>i<span class="br0">]</span><span class="sy4">;</span>
	<span class="br0">}</span>
	<span class="co1">// Удаляем массив указателей</span>
	<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_2d<span class="sy4">;</span>
&nbsp;
	<span class="kw3">cin</span>.<span class="me1">get</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
	<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;</pre></div>Вывод этого примера абсолютна аналогичен предыдущему.</div><div><br></div><div><h2>Многомерные массивы</h2><div>Как не сложно догадаться, все те же принципы сохраняются и для размерностей больше двух, к примеру для трех:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw4">int</span> arr<span class="br0">[</span>2<span class="br0">]</span><span class="br0">[</span>3<span class="br0">]</span><span class="br0">[</span>4<span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
	<span class="br0">{</span>
		<span class="br0">{</span>1,2,3,4<span class="br0">}</span>,
<span class="br0"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>{</span>1,2,3,4<span class="br0">}</span>,
<span class="br0"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>{</span>1,2,3,4<span class="br0">}</span></pre><pre class="cpp" style="font-family:monospace;">	<span class="br0">}</span>,
	<span class="br0">{</span>
		<span class="br0">{</span>1,2,3,4<span class="br0">}</span>,
<span class="br0"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>{</span>1,2,3,4<span class="br0">}</span>,
<span class="br0"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>{</span>1,2,3,4<span class="br0">}</span></pre><pre class="cpp" style="font-family:monospace;">	<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>и</div><div><br><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span>
<span class="kw4">int</span> m <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span>
<span class="kw4">int</span> l <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span>
<span class="kw4">int</span><span class="sy2">***</span> array_3d<span class="sy4">;</span>
&nbsp;
<span class="co1">// Создание</span>
array_3d <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="sy2">**</span><span class="br0">[</span>n<span class="br0">]</span><span class="sy4">;</span>
&nbsp;
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
	array_3d<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="sy2">*</span><span class="br0">[</span>m<span class="br0">]</span><span class="sy4">;</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> j <span class="sy1">&lt;</span> m<span class="sy4">;</span> j<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		array_3d<span class="br0">[</span>i<span class="br0">]</span><span class="br0">[</span>j<span class="br0">]</span> <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span>l<span class="br0">]</span><span class="sy4">;</span>
	<span class="br0">}</span>
<span class="br0">}</span>
&nbsp;
<span class="co1">// Удаление</span>
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> j <span class="sy1">&lt;</span> m<span class="sy4">;</span> j<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_3d<span class="br0">[</span>i<span class="br0">]</span><span class="br0">[</span>j<span class="br0">]</span><span class="sy4">;</span>
	<span class="br0">}</span>
	<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_3d<span class="br0">[</span>i<span class="br0">]</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> array_3d<span class="sy4">;</span></pre></div><br></div><div>Главное помнить, что в случае динамических массивов Вы всегда работаете с группой одномерных массивов.&nbsp;</div><div><br></div></div></div></div>]]></description><pubDate>Sat, 29 Jan 2011 13:50:55 +0300</pubDate><link>http://bitbybit.ru/tutorial/cpp/lesson/224</link><author>Thunder</author></item><item><title>Урок »C++ »C++ »Массивы »Одномерные массивы</title><description><![CDATA[Массив - это последовательность элементов одного типа, расположенных в памяти последовательно.<div><br></div><div><b>Статические массивы</b></div><div>Для объявления массива в с++ необходимо указать тип элементов имя переменной и&nbsp;количество&nbsp;элементов в квадратных скобках:</div><div><br><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw4">int</span> arr<span class="br0">[</span>10<span class="br0">]</span><span class="sy4">;</span></pre></div>Таким образом мы получим статический массив целых чисел из 10 элементов.</div><div><br></div><div>Для обращения к элементам массива используют индексы - целые числа указывающие на порядок элемента в массиве. Индексация массива начинается с 0.</div><div><div class="code"><pre class="cpp" style="font-family:monospace;">arr<span class="br0">[</span>0<span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
arr<span class="br0">[</span>9<span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">10</span><span class="sy4">;</span></pre></div>Сейчас я записал на первого элемента - 1, а на место последнего - 10.</div><div><br></div><div>Для того чтобы заполнить таким образом весь массив воспользуемся циклом:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> <span class="nu0">10</span><span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
	arr<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> i<span class="sy4">;</span>
<span class="br0">}</span></pre></div>Так же значения массива можно определять при создании:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw4">int</span> arr<span class="br0">[</span>10<span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>1,2,3,4,5,6,7,8,9,10<span class="br0">}</span><span class="sy4">;</span></pre></div></div><div>Но присваивать уже созданный массив так нельзя.</div><div><br></div><div>В качестве примера напишем простенькую программку которая будет находить сумму элементов в массиве:</div><div><br><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="co1">//---------------------------------------------------------------------------</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span><span class="sy2">*</span> argv<span class="br0">[</span><span class="br0">]</span><span class="br0">)</span>
<span class="br0">{</span>
	<span class="kw4">int</span> a<span class="br0">[</span>10<span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>1,2,3,4,5,6,7,8,9,10<span class="br0">}</span><span class="sy4">;</span>
	<span class="kw4">int</span> summ <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> <span class="nu0">10</span><span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span>
		summ <span class="sy2">+</span><span class="sy1">=</span> a<span class="br0">[</span>i<span class="br0">]</span><span class="sy4">; // Тоже самое, что и summ = summ + a[i]</span>
	<span class="br0">}</span>
	<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> summ<span class="sy4">;</span>
	<span class="kw3">cin</span>.<span class="me1">get</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
	<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>
&nbsp;
<span class="co1">//---------------------------------------------------------------------------</span></pre></div></div><div>Будьте осторожны: проверка индексации отсутствует - никто не помешает вам обратится к 15 элементу, даже если размер массива 10, но последствия не предсказуемы.</div><div><br></div><div><b>Динамические массивы</b></div><div>(Если вы новичок в программировании рекомендуется вернуться к этой теме после ознакомления с указателями)</div><div><br></div><div>Существенным&nbsp;недостатком статических массивов является фиксированный размер - в качестве значения размера массива можно использовать только константы, что очень неудобно если размер массива заранее не известен.</div><div><br></div><div>Для создания массива произвольной длинны необходимо&nbsp;воспользоватся&nbsp;операцией new, которая выделит в памяти участок необходимого размера:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw4">int</span><span class="sy2">*</span> arr<span class="sy4">;</span> <span class="co1">// Указатель на int</span>
arr <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span>n<span class="br0">]</span><span class="sy4">;</span></pre></div>В остальном работа с динамическими массивами аналогична статическим, за исключением того, что по окончании работы с массивом необходимо очистить занимаемую им память с помощью операции delete:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="kw3">delete[]</span> arr<span class="sy4">;</span></pre></div><br></div><div>В качестве примера создадим массив произвольного массива и заполним его по порядку:</div><div><br><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="co1">//---------------------------------------------------------------------------</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span><span class="sy2">*</span> argv<span class="br0">[</span><span class="br0">]</span><span class="br0">)</span>
<span class="br0">{</span>
	<span class="kw4">int</span> n<span class="sy4">;</span>
	<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Введите размер массива: &quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
	<span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> n<span class="sy4">;</span>
	<span class="kw4">int</span><span class="sy2">*</span> a<span class="sy4">;</span>
	a <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span>n<span class="br0">]</span><span class="sy4">;</span>
	<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">)</span> <span class="br0">{</span><br>		a<span class="br0">[</span>i<span class="br0">]</span> <span class="sy1">=</span> i<span class="sy4">;</span>
	<span class="br0">}</span>
	<span class="kw3">delete[]</span> a<span class="sy4">;</span>
	<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>
&nbsp;
<span class="co1">//---------------------------------------------------------------------------</span></pre></div>Обратите внимание на квадратные скобки после delete для удаления массива они обязательны, в противном случае вы не удалите массив полностью и не вызовете деструкторы элементов, что приведет к утечке памяти и прочим не хорошим вещам.</div><div><br></div><div>Для опытных:</div><div>Представьте ситуацию: элементы массива представители класса, внутри которого динамически выделяется память:</div><div><div class="code"><pre class="cpp" style="font-family:monospace;"><span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="co2">#pragma hdrstop</span>
<span class="co2">#include &lt;iostream&gt;</span>
&nbsp;
<span class="co1">//---------------------------------------------------------------------------</span>
&nbsp;
<span class="kw2">class</span> foo<span class="br0">{</span>
<span class="kw2">public</span><span class="sy4">:</span>
	foo<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span>
		std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Object created&quot;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">endl</span><span class="sy4">;</span>
		smth <span class="sy1">=</span> <span class="kw3">new</span> <span class="kw4">int</span><span class="br0">[</span>10<span class="br0">]</span><span class="sy4">;</span>
	<span class="br0">}</span>
	~foo<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span>
		std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Object deleted&quot;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">endl</span><span class="sy4">;</span>
		<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> smth<span class="sy4">;</span>
	<span class="br0">}</span>
<span class="kw2">private</span><span class="sy4">:</span>
	<span class="kw4">int</span><span class="sy2">*</span> smth<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
&nbsp;
<span class="co2">#pragma argsused</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">int</span> argc, <span class="kw4">char</span><span class="sy2">*</span> argv<span class="br0">[</span><span class="br0">]</span><span class="br0">)</span>
<span class="br0">{</span>
	foo<span class="sy2">*</span> arr<span class="sy4">;</span>
	<span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">5</span><span class="sy4">;</span>
	arr <span class="sy1">=</span> <span class="kw3">new</span> foo<span class="br0">[</span>n<span class="br0">]</span><span class="sy4">;</span>
	<span class="kw3">delete</span><span class="br0">[</span><span class="br0">]</span> arr<span class="sy4">;</span>
	std<span class="sy4">::</span><span class="kw3">cin</span>.<span class="me1">get</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
	<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">//---------------------------------------------------------------------------</span></pre></div>В такой реализации мы увидим 5 вызовов конструктора и 5 вызовов деструктора, что означает что потерь памяти нет, если забыть про квадратные скобки и вызвать&nbsp;<span class="Apple-style-span" style="font-family: monospace; line-height: 15px; white-space: pre; "><span class="kw3" style="color: rgb(0, 0, 221); ">delete</span> arr<span class="sy4" style="color: rgb(0, 128, 128); ">;</span></span>&nbsp;То вы увидите только 1 деструктор и ошибку сегментирования. Более подробно о вызове неправильного delete можно найти<a href="http://habrahabr.ru/company/abbyy/blog/117208/"> в блоге Abbyy</a></div>]]></description><pubDate>Sun, 16 Jan 2011 18:56:00 +0300</pubDate><link>http://bitbybit.ru/tutorial/cpp/lesson/223</link><author>Thunder</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Градиенты</title><description><![CDATA[<p>Свойства fillStyle и strokeStyle также могут иметь объекты CanvasGradient вместо обычных цветов CSS&nbsp;— это позволяет использовать градиенты для линий и заливок.</p>
<p>Для создания объектов CanvasGradient можно использовать два метода: createLinearGradient и createRadialGradient. Первый метод создает линейный градиент, а второй&nbsp;— радиальный градиент.</p>
<p>Как только создан объект градиента, можно добавлять в него цвета с помощью метода addColorStop.</p>
<p>Следующий пример показывает, как использовать градиенты:<br></p><div class="code"><pre class="javascript" style="font-family: monospace;"><span class="co1">// Нужно указать начальные и конечные координаты (x,y) градиента</span>
<span class="kw2">var</span> gradient1 <span class="sy0">=</span> context.<span class="me1">createLinearGradient</span><span class="br0">(</span>sx<span class="sy0">,</span> sy<span class="sy0">,</span> dx<span class="sy0">,</span> dy<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Теперь можно добавлять цвета в градиент</span>
<span class="co1">// Первый градиент определяет позицию для цвета в градиенте.</span>
<span class="co1">// Допустимы значения от 0 (начало градиента) до 1 (конец градиента).</span>
gradient1.<span class="me1">addColorStop</span><span class="br0">(</span><span class="nu0">0</span><span class="sy0">,</span> <span class="st0">&#039;#f00&#039;</span><span class="br0">)</span><span class="sy0">;</span> <span class="co1">// красный</span>
gradient1.<span class="me1">addColorStop</span><span class="br0">(</span><span class="nu0">0.5</span><span class="sy0">,</span> <span class="st0">&#039;#ff0&#039;</span><span class="br0">)</span><span class="sy0">;</span> <span class="co1">// желтый</span>
gradient1.<span class="me1">addColorStop</span><span class="br0">(</span><span class="nu0">1</span><span class="sy0">,</span> <span class="st0">&#039;#00f&#039;</span><span class="br0">)</span><span class="sy0">;</span> <span class="co1">// синий</span>
&nbsp;
<span class="co1">// Для радиального градиента также нужно указать радиус</span>
<span class="co1">// внутренней и внешней окружности градиента.</span>
<span class="co1">// Координаты (x,y) определяют центры этих окружностей.</span>
<span class="kw2">var</span> gradient2 <span class="sy0">=</span> context.<span class="me1">createRadialGradient</span><span class="br0">(</span>sx<span class="sy0">,</span> sy<span class="sy0">,</span> sr<span class="sy0">,</span> dx<span class="sy0">,</span> dy<span class="sy0">,</span> dr<span class="br0">)</span><span class="sy0">;</span>
&nbsp;<br></pre></div><p>Ниже показан <a target=&quot;&quot;_blank&quot;&quot; href="http://w3pro.ru/files/article/2010/10/50/example-gradients.html">более сложный пример</a>, в котором использованы линейный градиент, тени и текст:</p>
<span class="image-title center" style="width: 220px;"><img src="http://w3pro.ru/files/article/2010/10/50/canvas6.png" alt="Пример использования линейного градиента" title="Пример использования линейного градиента" class=""><br></span><h2><span style="font-weight: bold;">Примечание копипастера:</span></h2>
При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).<br>]]></description><pubDate>Tue, 28 Dec 2010 12:33:56 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/222</link><author>world_house</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Тени</title><description><![CDATA[<p>Shadow API предоставляет четыре свойства:</p>
<ul><li>shadowColor: Определяет цвет тени. Значения допустимы в том же формате, что и в CSS.</li><li>shadowBlur: Определяет степень размытия тени в пикселях. Эффект очень похож на гауссово размытие в Photoshop.</li><li>shadowOffsetX и shadowOffsetY: Определяет сдвиг тени в пикселях (x, y).</li></ul><a target=&quot;_blank&quot; href="http://w3pro.ru/files/article/2010/10/50/example-shadows.html">Пример создание тени у объекта на Canvas</a>:<br><br><div class="code"><pre class="javascript" style="font-family: monospace;">context.<span class="me1">shadowOffsetX</span> <span class="sy0">=</span> <span class="nu0">5</span><span class="sy0">;</span>
context.<span class="me1">shadowOffsetY</span> <span class="sy0">=</span> <span class="nu0">5</span><span class="sy0">;</span>
context.<span class="me1">shadowBlur</span> <span class="sy0">=</span> <span class="nu0">4</span><span class="sy0">;</span>
context.<span class="me1">shadowColor</span> <span class="sy0">=</span> <span class="st0">&#039;rgba(255, 0, 0, 0.5)&#039;</span><span class="sy0">;</span>
context.<span class="me1">fillStyle</span> <span class="sy0">=</span> <span class="st0">&#039;#00f&#039;</span><span class="sy0">;</span>
context.<span class="me1">fillRect</span><span class="br0">(</span>20<span class="sy0">,</span> 20<span class="sy0">,</span> 150<span class="sy0">,</span> 100<span class="br0">)</span><span class="sy0">;</span></pre></div><p>Так будет выглядеть пример тени в браузере:</p>
<span class="image-title center" style="width: 300px;"><img class="" title="Пример тени в Canvas - синий прямоугольник с красной тенью" alt="Пример тени в Canvas - синий прямоугольник с красной тенью" src="http://w3pro.ru/files/article/2010/10/50/canvas5.png"><br></span><h2><span style="font-weight: bold;">Примечание копипастера:</span></h2>
При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).<br>]]></description><pubDate>Tue, 28 Dec 2010 12:32:17 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/221</link><author>world_house</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Текст</title><description><![CDATA[<p>В настоящее время Text API доступен только в последних сборках движка WebKit, а также в Firefox 3.1 и выше.</p>
<p>Следующие свойства текста доступны для объекта контекста:</p>
<ul><li>font: Определяет шрифт текста, так же как свойство font-family в CSS)</li><li>textAlign: Определяет горизонтальное выравнивание 
текста. Допустимые значения: start, end, left, right, center. Значение 
по умолчанию: start.</li><li>textBaseline: Определяет вертикальное выравнивание 
текста. Допустимые значения: top, hanging, middle, alphabetic, 
ideographic, bottom. Значение по умолчанию: alphabetic.</li></ul>
<p>Существуют два метода для вывода текста: fillText и strokeText. Первый отрисовывает текст, заполняя его заливкой стиля fillStyle, другой рисует обводку текста, используя стиль strokeStyle.
 Оба метода принимают три аргумента: собственно текст и координаты 
(x,y), в которых его необходимо вывести. Также существует четвертый 
необязательный аргумент — максимальная ширина. Этот аргумент необходим 
для умещения текста в заданную ширину.</p>
<p>Свойства выравнивания текста влияют на позиционирование текста относительно координат его вывода (x,y).</p>
<p>Следующий код приведет к <a target=&quot;&quot;_blank&quot;&quot; href="http://w3pro.ru/files/article/2010/10/50/example-text.html">выводу на Canvas слов &quot;hello world&quot;</a>.<br></p><div class="code"><pre class="javascript" style="font-family: monospace;">context.<span class="me1">fillStyle</span> <span class="sy0">=</span> <span class="st0">&#039;#00f&#039;</span><span class="sy0">;</span>
context.<span class="me1">font</span> <span class="sy0">=</span> <span class="st0">&#039;italic 30px sans-serif&#039;</span><span class="sy0">;</span>
context.<span class="me1">textBaseline</span> <span class="sy0">=</span> <span class="st0">&#039;top&#039;</span><span class="sy0">;</span>
context.<span class="me1">fillText</span> <span class="br0">(</span><span class="st0">&#039;Hello world!&#039;</span><span class="sy0">,</span> 0<span class="sy0">,</span> 0<span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">font</span> <span class="sy0">=</span> <span class="st0">&#039;bold 30px sans-serif&#039;</span><span class="sy0">;</span>
context.<span class="me1">strokeText</span><span class="br0">(</span><span class="st0">&#039;Hello world!&#039;</span><span class="sy0">,</span> 0<span class="sy0">,</span> 50<span class="br0">)</span><span class="sy0">;</span></pre></div><br><p>Так этот пример будет выглядеть в браузере:</p>
<span class="image-title center" style="width: 300px;"><img class="" src="http://w3pro.ru/files/article/2010/10/50/canvas4.png" alt="Пример вывода текста на Canvas" title="Пример вывода текста на Canvas"><br></span><h2><span style="font-weight: bold;">Примечание копипастера:</span></h2>
При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).<br>]]></description><pubDate>Tue, 28 Dec 2010 12:29:35 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/220</link><author>world_house</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Манипуляции над пикселями</title><description><![CDATA[<p>2D Context API предоставляет три метода, которые позволяют выполнять попиксельное рисование: createImageData, getImageData и putImageData.</p>
<p>Пиксели хранятся в объектах типа ImageData. Каждый объект имеет три свойства: width, height и data. Свойство data имеет тип CanvasPixelArray
 и содержит массив элементов размером width*height*4 байт; это означает,
 что каждый пиксель содержит цвет в формате RGBA. Пиксели упорядочены 
слева направо, сверху вниз, построчно.</p>
<p>Чтобы лучше понять этот механизм, рассмотрим пример отрисовки блока из красных пикселей.</p><div class="code"><pre class="javascript" style="font-family: monospace;"><span class="co1">// Создадим объект ImageData.</span><br><span class="kw2">var</span> imgd <span class="sy0">=</span> context.<span class="me1">createImageData</span><span class="br0">(</span>50<span class="sy0">,</span>50<span class="br0">)</span><span class="sy0">;</span><br><span class="kw2">var</span> pix <span class="sy0">=</span> imgd.<span class="me1">data</span><span class="sy0">;</span><br>&nbsp;<br><span class="co1">// Пройдемся по всем пикселям и зададим полупрозрачный красный цвет</span><br><span class="kw1">for</span> <span class="br0">(</span><span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> n <span class="sy0">=</span> pix.<span class="me1">length</span><span class="sy0">,</span> i <span class="sy0">&lt;</span> n<span class="sy0">;</span> i <span class="sy0">+=</span> 4<span class="br0">)</span> <span class="br0">{</span><br>  pix<span class="br0">[</span>i<span class="br0">]</span> <span class="sy0">=</span> <span class="nu0">255</span><span class="sy0">;</span> <span class="co1">// red channel</span><br>  pix<span class="br0">[</span>i<span class="sy0">+</span>3<span class="br0">]</span> <span class="sy0">=</span> <span class="nu0">127</span><span class="sy0">;</span> <span class="co1">// alpha channel</span><br><span class="br0">}</span><br>&nbsp;<br><span class="co1">// Отрисовать объект ImageData в заданных координатах (x,y).</span><br>context.<span class="me1">putImageData</span><span class="br0">(</span>imgd<span class="sy0">,</span> 0<span class="sy0">,</span> 0<span class="br0">)</span><span class="sy0">;</span></pre></div><p>Примечание: пока не все современные браузеры реализуют метод createImageData. В таких браузерах необходимо получать объект ImageData, используя метод getImageData (<a target=&quot;&quot;&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot;&quot;&quot; href="http://w3pro.ru/files/article/2010/10/50/example-imagedata2.html">Пример кода для таких браузеров</a>).</p>
<p>Благодаря возможностям метода ImageData можно сделать 
очень многое. Например, можно отфильтровать изображение или создать 
математическую визуализацию (фракталы и т.п.). Следующий код показывает,
 как создать <a target=&quot;&quot;&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot;&quot;&quot; href="http://w3pro.ru/files/article/2010/10/50/example-imagedata.html">простой фильтр для инвертирования цвета изображения</a>:<br></p><div class="code"><pre class="javascript" style="font-family: monospace;"><span class="co1">// Получить массив типа CanvasPixelArray по заданным координатам и размерам.</span>
<span class="kw2">var</span> imgd <span class="sy0">=</span> context.<span class="me1">getImageData</span><span class="br0">(</span>x<span class="sy0">,</span> y<span class="sy0">,</span> width<span class="sy0">,</span> height<span class="br0">)</span><span class="sy0">;</span>
<span class="kw2">var</span> pix <span class="sy0">=</span> imgd.<span class="me1">data</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Обойти все пиксели изображения и инвертировать цвет.</span>
<span class="kw1">for</span> <span class="br0">(</span><span class="kw2">var</span> i <span class="sy0">=</span> 0<span class="sy0">,</span> n <span class="sy0">=</span> pix.<span class="me1">length</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> n<span class="sy0">;</span> i <span class="sy0">+=</span> 4<span class="br0">)</span> <span class="br0">{</span>
  pix<span class="br0">[</span>i<span class="br0">]</span> <span class="sy0">=</span> 255 <span class="sy0">-</span> pix<span class="br0">[</span>i<span class="br0">]</span><span class="sy0">;</span> <span class="co1">// красный канал</span>
  pix<span class="br0">[</span>i<span class="sy0">+</span>1<span class="br0">]</span> <span class="sy0">=</span> 255 <span class="sy0">-</span> pix<span class="br0">[</span>i<span class="sy0">+</span>1<span class="br0">]</span><span class="sy0">;</span> <span class="co1">// зеленый канал</span>
  pix<span class="br0">[</span>i<span class="sy0">+</span>2<span class="br0">]</span> <span class="sy0">=</span> 255 <span class="sy0">-</span> pix<span class="br0">[</span>i<span class="sy0">+</span>2<span class="br0">]</span><span class="sy0">;</span> <span class="co1">// синий канал</span>
  <span class="co1">// i+3 - номер элемента, содержащий альфа канал</span>
<span class="br0">}</span>
&nbsp;
<span class="co1">// Отрисовать объект ImageData в заданных координатах (x,y).</span>
context.<span class="me1">putImageData</span><span class="br0">(</span>imgd<span class="sy0">,</span> x<span class="sy0">,</span> y<span class="br0">)</span><span class="sy0">;</span></pre></div><p>Ниже изображен результат работы фильтра инверсии цвета, примененного к изображению.</p>
<p><img title="Фильтр инвертирования цвета с помощью Canvas" class="center" alt="Фильтр инвертирования цвета с помощью Canvas" src="http://w3pro.ru/files/article/2010/10/50/canvas3.png"></p><h2><span style="font-weight: bold;">Примечание копипастера:</span></h2>
При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).<br><br><h2>PS:</h2>на основе принципов работы с пикселями сделан замечательный плагин на Javascript для обработки изображений - &quot;налету&quot;. Всем заинтересованным крайне рекомендуется ознакомиться: <a href="http://www.pixastic.com/">Pixastic - Javascript Image Processing</a>. Этот плагин доступен как в вариантах jQuery так и Plain Javascript<br>]]></description><pubDate>Mon, 20 Dec 2010 15:54:11 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/219</link><author>world_house</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Вставка изображений в Canvas</title><description><![CDATA[<p>Метод drawImage позволяет вставлять другие изображения (img и canvas) на канву. В браузере Opera также существует возможность рисования SVG-изображений внутри элемента canvas. drawImage довольно сложный метод, который может принимать три, пять или девять аргументов:</p>
<ul><li><span style="font-weight: bold;">Три аргумента:</span> Базовое использование метода drawImage включает один аргумент для указания изображения, которое необходимо вывести на канве, и два аргумента для задания координат.</li><li><span style="font-weight: bold;">Пять аргументов:</span> Используются предыдущие три аргумента и еще 
два, задающие ширину и высоту вставляемого изображения (в случае если вы
 хотите изменить размеры изображения при вставке).</li><li><span style="font-weight: bold;">Девять аргументов:</span> Используются предыдущие пять аргументов и еще
 четыре: два для координат области внутри исходного изображения и два 
для ширины и высоты области внутри исходного изображения для обрезки 
изображения перед вставкой в Canvas.</li></ul>
<p>Спецификация HTML 5 объясняет эти аргументы следующим образом:</p><p><span class="image-title center" style="width: 327px;"><img src="http://w3pro.ru/files/article/2010/10/50/drawimage.png" alt="Аргументы метода drawImage" title="Аргументы метода drawImage" class=""></span></p><p>Следующий <a href="http://w3pro.ru/files/article/2010/10/50/example-drawimage.html" target=&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot;>пример</a> показывает использование всех трех вариантов обращения к этому методу:<br></p><div class="code"><pre class="javascript" style="font-family: monospace;"><span class="co1">// Три аргумента: элемент img или canvas, координаты для вывода на канву (x,y).</span><br>context.<span class="me1">drawImage</span><span class="br0">(</span>img_elem<span class="sy0">,</span> dx<span class="sy0">,</span> dy<span class="br0">)</span><span class="sy0">;</span><br>&nbsp;<br><span class="co1">// Пять аргументов: элемент img или canvas, координаты для вывода на канву (x,y),</span><br><span class="co1">// ширина и высота для изменения размеров перед выводом</span><br>context.<span class="me1">drawImage</span><span class="br0">(</span>img_elem<span class="sy0">,</span> dx<span class="sy0">,</span> dy<span class="sy0">,</span> dw<span class="sy0">,</span> dh<span class="br0">)</span><span class="sy0">;</span><br>&nbsp;<br><span class="co1">// Девять аргументов: элемент img или canvas, координаты, ширина и высота для обрезки изображения,</span><br><span class="co1">// координаты для вывода на канву (x,y), ширина и высота для изменения размеров перед выводом.</span><br>context.<span class="me1">drawImage</span><span class="br0">(</span>img_elem<span class="sy0">,</span> sx<span class="sy0">,</span> sy<span class="sy0">,</span> sw<span class="sy0">,</span> sh<span class="sy0">,</span> dx<span class="sy0">,</span> dy<span class="sy0">,</span> dw<span class="sy0">,</span> dh<span class="br0">)</span><span class="sy0">;</span></pre></div><p>Так будет выглядеть этот пример в браузере:</p>
<span class="image-title center" style="width: 350px;"><img src="http://w3pro.ru/files/article/2010/10/50/canvas2.png" alt="Пример использования метода drawImage для вставки картинки в канву" title="Пример использования метода drawImage для вставки картинки в канву" class=""><br></span><h2><span style="font-weight: bold;">Примечание копипастера:</span></h2>
При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).<br><p><span class="image-title center" style="width: 327px;"></span></p>]]></description><pubDate>Fri, 17 Dec 2010 14:22:18 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/218</link><author>world_house</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Контуры</title><description><![CDATA[<p>Контуры Canvas позволяют рисовать фигуры любой формы. Сначала нужно 
нарисовать &quot;каркас&quot;, а потом можно использовать стили линий или заливки,
 если это необходимо. Чтобы начать рисование контура, используется метод
 beginPath(), потом рисуется контур, который можно 
составить из линий, кривых и других примитивов. Как только рисование 
фигуры окончено, можно вызвать методы назначения стиля линий и заливки, и
 только потом вызвать функцию closePath() для завершения рисования фигуры.</p>
<p>Следующий код демонстрирует <a target=&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot; href="http://w3pro.ru/files/article/2010/10/50/example-triangle.html">рисование треугольника</a>.</p><div class="code"><pre class="javascript" style="font-family: monospace;"><span class="co1">// Задаем свойства заливки и линий.</span>
context.<span class="me1">fillStyle</span> <span class="sy0">=</span> <span class="st0">&#039;#00f&#039;</span><span class="sy0">;</span>
context.<span class="me1">strokeStyle</span> <span class="sy0">=</span> <span class="st0">&#039;#f00&#039;</span><span class="sy0">;</span>
context.<span class="me1">lineWidth</span> <span class="sy0">=</span> <span class="nu0">4</span><span class="sy0">;</span>
&nbsp;
context.<span class="me1">beginPath</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
<span class="co1">// Начинаем рисовать треугольник с верхней левой точки.</span>
context.<span class="me1">moveTo</span><span class="br0">(</span>10<span class="sy0">,</span> 10<span class="br0">)</span><span class="sy0">;</span> <span class="co1">// перемещаемся к координатам (x,y)</span>
context.<span class="me1">lineTo</span><span class="br0">(</span>100<span class="sy0">,</span> 10<span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">lineTo</span><span class="br0">(</span>10<span class="sy0">,</span> 100<span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">lineTo</span><span class="br0">(</span>10<span class="sy0">,</span> 10<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Заполняем фигуру заливкой и применяем линии</span>
<span class="co1">// Фигура не будет отображена, пока не будет вызван хотя бы один из этих методов.</span>
context.<span class="me1">fill</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">stroke</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">closePath</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></pre></div>Этот пример будет отображен в браузере следующим образом:<p><span class="image-title center" style="width: 300px;"><img class="" title="Пример рисования треугольника" alt="Пример рисования треугольника" src="http://w3pro.ru/files/article/2010/10/50/canvas1.png"><span class="image-title-content"><br></span></span></p><p style="font-weight: bold; font-style: italic;"><span class="image-title center" style="width: 300px;"><span class="image-title-content">Пример рисования треугольника</span></span></p><p>Вы также можете посмотреть более сложные <a target=&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot; href="http://w3pro.ru/files/article/2010/10/50/example-paths.html">примеры контуров с использованием линий, кривых и дуг</a>.<br><span class="image-title center" style="width: 300px;"><span class="image-title-content"></span></span></p><h3><span style="font-weight: bold;">Примечание копипастера:</span></h3>При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).]]></description><pubDate>Fri, 17 Dec 2010 08:59:19 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/217</link><author>world_house</author></item><item><title>Урок »JavaScript »JavaScript »Canvas API »Заливки и границы фигур</title><description><![CDATA[<p>С помощью свойств fillStyle и strokeStyle 
вы можете легко настроить цвета, используемые для заливки и линий 
объектов. Значения цветов, используемые в этих методах, такие же как и в
 CSS: шестнадцатеричные коды (#F5E6AB), rgb(), rgba() или даже hsla(), 
если браузер поддерживает такой способ задания цвета (например, он 
поддерживается в Opera 10.00 и более новых версиях).</p>
<p>Используя метод fillRect, вы можете нарисовать прямоугольник с заливкой. С помощью метода strokeRect
 вы можете нарисовать прямоугольник только с границами, без заливки. 
Если нужно очистить некоторую часть канвы, вы можете использовать метод clearRect.
 Три этих метода используют одинаковый набор аргументов: x, y, width, 
height. Первые два аргумента задают координаты (x,y), а следующие два — 
ширину и высоту прямоугольника.</p>
<p>Для изменения толщины линий можно использовать свойство lineWidth. <a href="http://w3pro.ru/files/article/2010/10/50/example-rects.html" target=&quot;&quot;&quot;&quot;&quot;_blank&quot;&quot;&quot;&quot;&quot;>Пример использования функций fillRect, strokeRect, clearRect</a>.<br></p><div class="code"><pre class="javascript" style="font-family: monospace;">context.<span class="me1">fillStyle</span> <span class="sy0">=</span> <span class="st0">&#039;#00f&#039;</span><span class="sy0">;</span> <span class="co1">// blue</span>
context.<span class="me1">strokeStyle</span> <span class="sy0">=</span> <span class="st0">&#039;#f00&#039;</span><span class="sy0">;</span> <span class="co1">// red</span>
context.<span class="me1">lineWidth</span> <span class="sy0">=</span> <span class="nu0">4</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Draw some rectangles.</span>
context.<span class="me1">fillRect</span> <span class="br0">(</span>0<span class="sy0">,</span> 0<span class="sy0">,</span> 150<span class="sy0">,</span> 50<span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">strokeRect</span><span class="br0">(</span>0<span class="sy0">,</span> 60<span class="sy0">,</span> 150<span class="sy0">,</span> 50<span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">clearRect</span> <span class="br0">(</span>30<span class="sy0">,</span> 25<span class="sy0">,</span> 90<span class="sy0">,</span> 60<span class="br0">)</span><span class="sy0">;</span>
context.<span class="me1">strokeRect</span><span class="br0">(</span>30<span class="sy0">,</span> 25<span class="sy0">,</span> 90<span class="sy0">,</span> 60<span class="br0">)</span><span class="sy0">;</span></pre></div>Этот пример приведет к следующему результату:<p style="font-weight: bold; font-style: italic;"><span class="image-title center" style="width: 300px;"><img src="http://w3pro.ru/files/article/2010/10/50/canvas.png" alt="Пример использования fillRect, strokeRect, clearRect &amp;mdash; результат в браузере" title="Пример использования fillRect, strokeRect, clearRect &amp;mdash; результат в браузере" class=""><span class="image-title-content"></span></span></p><p style="font-weight: bold; font-style: italic;"><span class="image-title center" style="width: 300px;"><span class="image-title-content">Пример использования fillRect, strokeRect, clearRect — результат в браузере.<span style="font-weight: normal;"><span style="font-weight: bold;"></span></span></span></span></p>
<h2><span style="font-weight: bold;">Примечание копипастера:</span></h2>
При работе с API элемента Canvas (HTML 5) постоянно пользуюсь <a href="http://dev.opera.com/articles/view/html-5-canvas-the-basics/">описанием </a>с
 сайта для разработчиков от Opera. Возникла идея сделать перевод и 
опубликовать здесь в виде серии уроков, описывающих кратко основной 
функционал, доступный нам при работе с этим элементом. Однако оказалось,
 что <a href="http://w3pro.ru/article/html-5-canvas-dlya-nachinayushchikh">перевод уже есть</a>. Весь материал удобно разбит на разделы (<span style="font-weight: bold;">см. меню тем выше</span>).]]></description><pubDate>Fri, 17 Dec 2010 08:41:35 +0300</pubDate><link>http://bitbybit.ru/tutorial/JavaScript/lesson/216</link><author>world_house</author></item><atom:link href="http://bitbybit.ru/rss/" rel="self" type="application/rss+xml" /></channel></rss>
