Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2017-05-23 | 436 |
5.00
из
|
Заказать работу |
|
|
Листинг 29.1. Объявляем глобальные переменные и записываем наш код.
//Объявляем глобальные переменные для координат "x" и "y"
//указателя мыши в момент нажатия кнопки мыши:
public int x_MouseDown_1, y_MouseDown_1;
//Определяем координаты указателя в момент нажатия кнопки:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
x_MouseDown_1 = e.X; y_MouseDown_1 = e.Y;
}
В панели Properties для элемента управления PictureBox на вкладке Events дважды щелкаем имя второго события MouseUp. Появляется шаблон, который после записи нашего кода принимает следующий вид.
Листинг 29.2. Метод pictureBox1_MouseUp для обработки отпускания кнопки.
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
//Объявляем объект "g" класса Graphics и предоставляем
//ему возможность рисования на pictureBox1:
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
//Создаем и рисуем прямоугольник:
Rectangle myRectangle = new Rectangle(
new Point(x_MouseDown_1, y_MouseDown_1),
new Size(e.X - x_MouseDown_1, e.Y - y_MouseDown_1));
g.DrawRectangle(new Pen(Color.Transparent),
myRectangle);
//Выбираем кисть myBrush для линейного градиента
//между белым White и черным Black цветами:
LinearGradientBrush myBrush;
myBrush = new LinearGradientBrush(myRectangle,
Color.White, Color.Black,
LinearGradientMode.Horizontal);
//Рисуем заполненный прямоугольник:
g.FillRectangle(myBrush, myRectangle);
}
Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “ 1. Очистить панель” в режиме проектирования. Появляется шаблон метода button1_Click для обработки события в виде щелчка кнопки; этот шаблон после записи нашего кода принимает следующий вид.
Листинг 29.3. Метод button1_Click для стирания рисунка.
private void button1_Click(object sender, EventArgs e)
{
//Объявляем объект "g" класса Graphics
//и связываем его с pictureBox1:
Graphics g = pictureBox1.CreateGraphics();
//Очищаем (Clear) элемент pictureBox1 от рисунка
//и заполняем его белым цветом:
|
g.Clear(Color.White);
}
В режиме выполнения (Debug, Start Without Debugging) перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку; при этом из предыдущей точки в данную точку рисуется прямоугольник, заполненный по линейному градиенту между двумя заданными цветами (белым White и черным Black). Аналогично строим еще несколько прямоугольников (рис. 29.1). Если в коде на листинге 29.2 вместо строки для прямоугольника мы запишем (g.FillEllipse(myBrush, myRectangle);), то по этому второму варианту программы можем рисовать эллипсы, заполненные по тому же линейному градиенту, рис. 29.2. После щелчка кнопки с надписью “ 1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.
Глава 30. Непрерывный график-осциллограмма и его проверка при помощи диспетчера задач и файла подкачки
Листинг 30.1. Переменные и метод для построения графика.
//Объявляем и инициализируем переменные:
float x = 0;
float y0 = 49;
float y1 = 0;
float k = 10;
float b = -5;
//Перемещение графика dx за каждый интервал времени::
private const float dx = 2;
//Определяем значение функции y=f(x):
private float f()
{
//Генератор в виде метода NextDouble возвращает
//случайное число типа double, которое присваиваем x:
Random myRandom = new Random();
x = Convert.ToSingle(myRandom.NextDouble());
//Вычисляем новое значение функции y=f(x):
y1 = y0 + k * x + b;
//Задаем интервал для значений функции y=f(x):
if (y1 > 98.9) y1 = 98.9f;
if (y1 < 0.999) y1 = 0.999f;
return y1;
}
Листинг 30.2. Метод Form1_Load.
private void Form1_Load(object sender, EventArgs e)
{
//Для рисования графика создаем объект myGraphics,
//связываем его с PictureBox1 и масштабируем:
Bitmap myBitmap = new Bitmap(pictureBox1.Width,
pictureBox1.Height);
Graphics myGraphics = Graphics.FromImage(myBitmap);
myGraphics.ScaleTransform(1, -100.0f /
pictureBox1.Height);
myGraphics.TranslateTransform(0, -100);
//Проектируем координатные горизонтальные линии:
Pen myPen = new Pen(Color.Blue, 1);
int i;
for (i = 10; i <= 100; i+=10)
myGraphics.DrawLine(myPen,
0, i, pictureBox1.Width, i);
//Показываем координатные горизонтальные линии
//на панели PictureBox1:
pictureBox1.Image = myBitmap;
//Освобождаем ресурсы, занятые объектом myGraphics:
|
myGraphics.Dispose();
}
Для программной реализации алгоритма из первого параграфа дважды щелкаем значок Timer (ниже формы в режиме проектирования). Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.
Листинг 30.3. Метод Timer1_Tick.
private void timer1_Tick(object sender, EventArgs e)
{
//Перемещаем прежний график влево:
Bitmap myBitmap = new Bitmap(pictureBox1.Width,
pictureBox1.Height);
Graphics g = Graphics.FromImage(myBitmap);
g.DrawImage(pictureBox1.Image, -dx, 0);
//Проектируем координатные горизонтальные линии:
g.ScaleTransform(1, -100.0F / pictureBox1.Height);
g.TranslateTransform(0, -100);
Pen myPen = new Pen(Color.Blue, 1);
int i;
for (i = 10; i <= 100; i+=10)
g.DrawLine(myPen, pictureBox1.Width - dx, i,
pictureBox1.Width, i);
//На каждом интервале времени
//получаем новое значение функции f():
y1 = f();
//Справа рисуем новую часть графика:
Pen myPen2 = new Pen(Color.Black, 1);
g.DrawLine(myPen2,
pictureBox1.Width - 1 - dx, y0,
pictureBox1.Width - 1, y1);
y0 = y1;
//Показываем новую часть графика
//на панели PictureBox1:
pictureBox1.Image = myBitmap;
}
|
|
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!