MyBooks.club
Все категории

Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

На сайте mybooks.club вы можете бесплатно читать книги онлайн без регистрации, включая Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория». Жанр: Газеты и журналы / Сделай сам / Хобби и ремесла . Доступна полная версия книги с кратким содержанием для предварительного ознакомления, аннотацией (предисловием), рецензиями от других читателей и их экспертным мнением.
Кроме того, на сайте mybooks.club вы найдете множество новинок, которые стоит прочитать.

Название:
Интернет-журнал "Домашняя лаборатория", 2007 №9
Дата добавления:
17 октябрь 2023
Количество просмотров:
5
Читать онлайн
Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория» краткое содержание

Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория» - описание и краткое содержание, автор Журнал «Домашняя лаборатория», читайте бесплатно онлайн на сайте электронной библиотеки mybooks.club

Большой и увлекательный, научно-прикладной, образовательный, некоммерческий интернет-журнал, созданный группой энтузиастов. Журнал содержит материалы, найденные в Интернет или написанные для Интернет. Основная тематика статей — то, что можно сделать самому, от садовых поделок до сверхпроводников, но есть и просто полезные материалы.

Интернет-журнал "Домашняя лаборатория", 2007 №9 читать онлайн бесплатно

Интернет-журнал "Домашняя лаборатория", 2007 №9 - читать книгу онлайн бесплатно, автор Журнал «Домашняя лаборатория»
щелкнуть по значку с изображением молнии и из списка возможных событий данного элемента выбрать нужное, что приведет к созданию заготовки обработчика событий.)

Вот текст обработчика этого события:

private void BezierWeb_MouseMove(object sender,

    System.Windows.Forms.MouseEventArgs e)

{

    pen = SystemPens.Control;

    DrawWeb();

    center.X = e.X; center.Y = e.Y;

    //pen = new Pen(Color.Aquamarine);

    pen = SystemPens.ControlText;

    DrawWeb();

}

Метод DrawWeb вызывается дважды — первый раз с пером цвета фона, другой — с цветом, принятым системой для отображения текста. Обратите внимание, для создания нужного пера в данном случае не вызывается конструктор класса, а используется класс предопределенных системных перьев. Оператор, создающий объект реn с помощью конструктора, закомментирован. Он может использоваться, если нужно рисовать кривые определенным цветом.

Перед рисованием кривых цветом переднего плана общая для всех кривых точка center получает координаты курсора мыши, передаваемые аргументом обработчика события.

Событие Paint

Вызов метода DrawWeb добавлен еще и в обработчик события Paint:

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)

{

    pen = SystemPens.ControlText;

    DrawWeb();

    Debug.WriteLine(count++);

}

Говоря о рисовании, нельзя не упомянуть о событии Paint. Оно возникает всякий раз, когда область, в которой происходило рисование, повреждена. Причины этого могут быть разные — пользователь свернул форму, изменил ее размеры, произошло перекрытие другой формой, был вызван метод Invalidate — во всех этих случаях требуется перерисовать область. Тогда-то и возникает событие Paint, в задачу его обработчика входит перерисовка поврежденной области. Первый раз событие Paint возникает при открытии формы. Переменная count, введенная нами, позволяет в режиме отладки подсчитывать число вызовов события Paint.

Событие Paint подключают обычно не так, как это делалось, например, для события MouseMove. Вместо этого переопределяют родительский метод OnPaint. (Как переопределяются родительские методы группы On, занимающиеся обработкой событий, другие методы классов родителей и базовых интерфейсов? В режиме проектирования в окне классов, отражающем структуру класса, нужно выбрать соответствующий класс (в нашем случае класс формы BezierWeb), раскрыть узел BasesAndInterfaces этого класса и из появившегося списка всех наследованных свойств и методов выбрать нужный (в нашем случае метод OnPaint). в результате появится заготовка для переопределения метода.)

В данном контексте перерисовка сводится, как это обычно делается, к вызову метода, выполняющего рисование. Для повышения эффективности можно анализировать поврежденную область и выполнять рисование только в ее пределах.

Закончим на этом с рисованием пером и перейдем к рассмотрению рисования кистью.

Кисти и краски

Создадим в нашем проекте новую форму RandomShapes, в которой будем рисовать и закрашивать геометрические фигуры трех разных типов — эллипсы, сектора, прямоугольники. Для каждого типа фигуры будем использовать свой тип кисти: эллипсы будем закрашивать градиентной кистью, сектора — сплошной, а прямоугольники — узорной. Цвет фигуры, ее размеры и положение будем выбирать случайным образом. Рисование фигур будет инициироваться в обработчике события Click. При каждом щелчке кнопкой мыши на форме будут рисоваться три новых экземпляра фигур каждого типа. В отличие от кривых Безье, старые фигуры стираться не будут.

На рис. 24.15 показана форма после нескольких щелчков кнопки мыши. Конечно, черно-белый рисунок в книге не может передать цвета, особенно смену оттенков для градиентной кисти. На экране дисплея или цветном рисунке все выглядит красивее.

А теперь приведем программный код, реализующий рисование. Начнем, как обычно, с полей класса:

//fields int сх, су;

    Graphics graph;

    Brush brush;

    Color color;

    Random rnd;

Инициализация полей производится в методе MyInit, вызываемом конструктором класса:

Рис. 24.15. Рисование кистями разного типа

void MyInit()

   {

       сх = ClientSize.Width;

       су = ClientSize.Height;

       graph = CreateGraphics ();

      rnd = new Random();

    }

Рассмотрим теперь основной метод, реализующий рисование фигур различными кистями:

void DrawShapes()

    {

        for (int i=0; i<3; i + +)

       {

           //выбирается цвет — красный, желтый, голубой

           int numcolor = rnd.Next(3);

           switch (numcolor)

        {

               case 0:

                    color = Color.Blue; break;

               case 1:

                    color = Color.Yellow; break;

               case 2:

                     color = Color.Red; break;

          }

         //градиентной кистью рисуется эллипс,

         //местоположение случайно

         Point top = new Point(rnd.Next(cx), rnd.Next(cy));

         Size sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y));

         Rectangle ret = new Rectangle (top, sz);

         Point bottom = top + sz;

         brush = new LinearGradientBrush(top, bottom,

         Color.White,color);

         graph.FillEllipse(brush,ret);

         //сплошной кистью рисуется сектор,

         //местоположение случайно

         top = new Point(rnd.Next(cx), rnd.Next(cy));

         sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y));

         ret = new Rectangle(top, sz);

         brush = new SolidBrush(color);

         graph.FillPie(brush,ret,30 f,60 f);

         //узорной кистью рисуется прямоугольник,

         //местоположение случайно

         top = new Point(rnd.Next(cx), rnd.Next(cy));

         sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y));

         ret = new Rectangle(top, sz);

         HatchStyle hs = (HatchStyle)rnd.Next(52);

         brush = new HatchBrush(hs,Color.White, Color.Black);

         graph.FillRectangle (brush,ret);

    }

}

Приведу некоторые комментарии в дополнение к тем, что встроены в текст метода. Здесь многое построено на работе со случайными числами. Случайным образом выбирается один из возможных цветов для рисования фигуры, ее размеры и положение. Наиболее интересно рассмотреть создание кистей разного типа. Когда создается градиентная кисть.

brush = new LinearGradientBrush (top, bottom, Color.White,color);

то нужно в конструкторе кисти задать две точки и два цвета. Точки определяют интервал изменения оттенков цвета от первого до второго. В начальной точке имеет место первый цвет, в конечной — второй, в остальных точках — их комбинация. Разумно, как это сделано у нас, в качестве точек выбирать противоположные углы прямоугольника, ограничивающего рисуемую фигуру.

Наиболее просто задается сплошная кисть:

brush = new SolidBrush(color);

Для нее достаточно указать только цвет. Для узорной кисти нужно задать предопределенный тип узора, всего их возможно 52. В нашем примере тип узора выбирается случайным образом:

HatchStyle hs = (HatchStyle)rnd.Next(52);

brush = new HatchBrush(hs,Color.White, Color.Black);

Помимо первого аргумента, задающего тип узора, указываются еще два


Журнал «Домашняя лаборатория» читать все книги автора по порядку

Журнал «Домашняя лаборатория» - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mybooks.club.


Интернет-журнал "Домашняя лаборатория", 2007 №9 отзывы

Отзывы читателей о книге Интернет-журнал "Домашняя лаборатория", 2007 №9, автор: Журнал «Домашняя лаборатория». Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.