Компьютерная графика, мультимедиа и игры на Visual C#

       

Управляемое заполнение фигур


Листинг 57.1.  Метод для элемента управления PictureBox.

//Объявляем глобальную переменную filled_height

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

int filled_height = 0;

private void pictureBox1_Paint(object sender,

                                            PaintEventArgs e)

{

      //Задаем стиль и цвет заполняющих элементов:

      HatchBrush myHatchBrush =

               new HatchBrush(HatchStyle.Cross, Color.Blue);

      //Объявляем объект класса Graphics

      //и задаем ему свойство Graphics:

      Graphics myGraphics = e.Graphics;



      //Заполняем прямоугольник

      //на текущую высоту filled_height:

      myGraphics.FillRectangle(myHatchBrush, 0, 0,

      pictureBox1.Size.Width, filled_height);

      //Увеличиваем текущую высоту заполнения

      //на следующий шаг progressBar1.Step:

      filled_height = filled_height + progressBar1.Step;

}

Дадим краткие пояснения. В главной строке кода:

      myGraphics.FillRectangle(myHatchBrush, 0, 0,

      pictureBox1.Size.Width, filled_height);

нули (0, 0) соответствуют координатам верхнего левого угла, а последние два параметра (pictureBox1.Size.Width, filled_height) соответствуют ширине и высоте заполняемого прямоугольника в виде элемента управления PictureBox.

Чтобы установить значение свойства Interval компонента Timer в зависимости от свойства Value ползунка элемента управления TrackBar, дважды щелкаем элемент управления TrackBar в режиме проектирования. Появляется файл Form11.cs с шаблоном, который после записи нашего кода принимает такой вид.

Листинг 57.2. Метод для элемента управления TrackBar.

private void trackBar1_Scroll(object sender, EventArgs e)

{

      timer1.Enabled = true;

      timer1.Interval = trackBar1.Value;

}

Чтобы подключить к работе таймер, дважды щелкаем значок для компонента Timer (ниже формы в режиме проектирования). Появляется файл Form11.cs с шаблоном, который после записи нашего кода принимает следующий вид.

Листинг 57.3. Метод для компонента Timer.


private void timer1_Tick(object sender, EventArgs e)
{
      //Задаем максимальное значение progressBar1.Maximum
      //индикатора процесса,
      //равное высоте заполняемой панели picturebox1.Height:
      progressBar1.Maximum = pictureBox1.Height;
      //Если текущее значение Value индикатора
      //стало больше максимального значения:
      if (progressBar1.Value >= progressBar1.Maximum)
      {
            //отключаем таймер:
            timer1.Enabled = false;
      }
        else
      {
            //Увеличиваем текущее значение Value индикатора
            //на величину шага Step:
            progressBar1.PerformStep();
            //Перерисовываем клиентскую область
            //элемента управления PictureBox
            //через каждый Interval времени:
            pictureBox1.Refresh();
      }
}
В качестве следующего примера из списка методов класса Graphics (рис. 57.1) выберем второй метод FillEllipse для заполнения фигуры в виде эллипса.  На листинге 57.1 заменим одну строку кода (с методом FillRectangle) на строку кода с методом FillEllipse:
myGraphics.FillEllipse(myHatchBrush, 0, 0, -
picturebox1.Size.Width, filled_height);
На листинге 57.1 заменим одну строку кода (с методом FillRectangle) на строку кода с методом FillPie:
myGraphics.FillPie(myHatchBrush, 0, 0,
pictureBox1.Size.Width, pictureBox1.Size.Height –
progressBar1.Height, 0, filled_height);
Если строку кода с методом FillPie записать в таком виде:
myGraphics.FillPie(myHatchBrush, 0, 0,
pictureBox1.Size.Height, pictureBox1.Size.Height –
ProgressBar1.Height, 0, filled_height);
то получим частный случай заполнения сектора в круге (рис. 57.7).

Содержание раздела