- •Введение
- •Часть I. Краткие основы Visual c# Глава 1. Основные определения книги
- •1.1. Требования для установки Visual Studio 2005
- •Глава 2. Методика разработки приложений для выполнения расчетов с эффектами анимации
- •Глава 3. Методика разработки приложений на нескольких формах
- •Часть II. Методология проектирования графики и печати на принтере Глава 4. Краткие сведения о графических возможностях Visual Studio
- •Глава 5. Рисование простых линий на форме или элементах управления и печать этих линий
- •Глава 6. Рисование сложных линий и печать всей формы как снимка экрана
- •Глава 8. Рисование текста и печать текстового файла
- •Глава 7. Рисование заполненных фигур и печать всей формы с предварительным просмотром
- •Часть III. Методология вычислений на основе Visual c# с использованием эффектов анимации Глава 9. Методика создания вычислительной системы
- •Глава 10. Арифметические вычисления
- •10.3. Анимация в виде циклического изменения непрозрачности панели
- •Глава 11. Разработка стандартного калькулятора
- •11.3. Анимация в виде циклического изменения цвета формы
- •11.4. Выполнение расчетов
- •Глава 12. Вычисление процентов
- •Глава 13. Степени, корни, логарифмы и факториалы
- •Часть IV. Методология вычислений на основе интеграции Visual c# с другими платформами Глава 14. Использование в Visual c# программ из Excel
- •Глава 15. Вычисление сложных математических выражений
- •Часть V. Интеграция Visual c# с Word Глава 16. Оглавление приложения по использованию методов Word
- •Глава 17. Запуск Word, добавление нового и открытие существующего документа
- •17.3. Выполнение программы
- •Часть VI. Получение расчетных параметров из баз данных Access Глава 18. Оглавление приложения по использованию Access
- •18.1. Алгоритм оглавления и проектирование формы
- •Глава 19. Открытие Access
- •Часть VII. Создание баз данных и интеграция с другими субд Глава 20. Создание баз и наборов данных
- •Глава 21. Архитектура доступа к данным ado.Net
- •Глава 22. Разработка баз данных при помощи шаблонов
- •22.1. Создание проекта sql Server Project
- •Часть VIII. Методология создания графической системы в двухмерном пространстве Глава 23. Алгоритмы и оглавление графической системы
- •Глава 24. График линейной функции
- •Глава 25. Графики типичных функций
- •Глава 26. Рисование при помощи перемещения мыши
- •Глава 27. Рисование линий при помощи нажатия кнопки мыши
- •Глава 28. Рисование прямоугольников и эллипсов при помощи нажатия кнопки мыши
- •Глава 29. Рисование заполненных прямоугольников и эллипсов при помощи нажатия кнопки мыши
- •Глава 30. Непрерывный график-осциллограмма и его проверка при помощи диспетчера задач и файла подкачки
- •Часть IX. Методология создания графической системы в трехмерном пространстве Глава 31. Теория и алгоритмы системы
- •32.1. Основные схемы интеграции
- •Глава 33. Изображение и управление трехмерными объектами в трехмерном пространстве
- •Глава 34. Изображение и управление трехмерными объектами в трехмерном пространстве на Visual Basic для интеграции с Visual c# и другими языками
- •Глава 35. Изображение объектов в трехмерном пространстве на Visual c# по данным из проекта на Visual Basic
- •35.1. Постановка задачи и проектирование формы
- •Глава 37. Изображение и управление поверхностями в трехмерном пространстве
- •Глава 40. Расчет и изображение линий уровня на поверхности
- •Часть X. Методология создания анимационной трехмерной графики на основе новых версий Visual c# и DirectX Глава 44. Методика проектирования неподвижных и подвижных плоских фигур
- •Глава 45. Методика проектирования неподвижных и подвижных пространственных фигур
- •Часть XI. Методология разработки мультимедиа и игр на основе Microsoft Agent Глава 46. Загрузка и установка компонентов Microsoft Agent
- •46.1. Краткие сведения о Microsoft Agent
- •Глава 47. Методика управления мультипликационными персонажами
- •Глава 48. Вывод на экран выступлений и анимаций всех персонажей
- •Глава 49. Методика создания компьютерных игр и мультфильмов
- •49.4. Выполнение программы
- •Глава 50. Пример Интернет-магазина на основе Microsoft Agent
- •Глава 51. Построение графика по точкам эксперимента и интеграция с мультипликационными персонажами ms Agent
- •Часть XII. Методология анимации объектов Глава 52. Оглавление системы программ для анимации объектов
- •52.1. Алгоритм и проект системы
- •Глава 53. Варианты часов с цифровой индикацией, индикаторами прогресса и датой
- •Глава 54. Вращение линии
- •Глава 55. Управляемое вращение линии
- •Глава 56. Управляемое вращение и перемещение фигуры
- •Глава 57. Управляемое заполнение фигур
- •Глава 58. Управляемый мигающий текст
- •Глава 59. Методика изображения летающих предметов
- •Глава 60. Методика анимации градиентного заполнения текста цветом
- •Глава 61. Вращающееся градиентное заполнение фигур цветом
- •Глава 62. Изображение кругов на воде с использованием двойной буферизации
- •Глава 63. Анимация текста в консольном приложении
- •Часть XIII. Методология создания, конвертирования и мультипликации изображений на форме Глава 64. Методика задания, конвертирования и поочередной замены изображений
- •Глава 65. Методика разработки мультипликации
- •Глава 66. Разработка мультипликации при помощи списка рисунков
- •Глава 67. Методика управления цветом изображения
- •Часть XIV. Воспроизведение аудио и видео Глава 68. Оглавление приложения по интеграции Visual c# с Windows Media Player
- •Глава 69. Воспроизведение аудио файлов из приложения Visual с#
- •Глава 70. Воспроизведение видео файлов из приложения Visual c#
- •70.3. Выполнение программы
- •Глава 72. Интеграция Visual c# с браузером Internet Explorer
- •Глава 73. Установка веб-компонентов Windows для веб-программирования на основе asp.Net
- •Часть XVI. Введение в программирование мобильных устройств Глава 74. Программирование портативных и карманных компьютеров
- •Часть XVII. Приложения Visual c# для использования на практике, например, в промышленности Глава 75. Алгоритмы для расчета площади, объема и массы изделий и заготовок
- •75.1. Объектно-ориентированный анализ геометрии изделий
- •Глава 76. Консольное приложение для расчета массы изделий
- •Глава 77. Вычисление массы изделий при помощи формы
- •Часть XVIII. Приложения Visual c# для использования в учебе и науке Глава 78. Ввод в систему свойств материалов для изготовления изделий
- •Глава 79. Математическое моделирование обработки заготовки при помощи аналитических решений
- •Глава 80. Математическое моделирование обработки заготовки при помощи метода конечных элементов
- •Глава 81. Математическое моделирование и графика для типичных техпроцессов
- •Глава 82. Методология учета анизотропии материала при проектировании техпроцесса изготовления изделия
- •Глава 83. Методология проектирования техпроцессов изготовления изделий коробчатой формы
- •Часть XIX. Методология создания и внедрения систем компьютерного проектирования Глава 84. Оптимизация раскроя материалов
- •Глава 85. Система компьютерного проектирования техпроцессов
- •Глава 86. Проектирование заготовительных операций подготовки материала
- •Глава 87. Проектирование операций изготовления заготовок
- •Глава 88. Проектирование операций обработки заготовок
- •Глава 89. Проектирование финишных операций изготовления изделий
- •Заключение
- •Часть XX. Передача приложения заказчику Глава 90. Методика передачи приложения пользователю
- •90.1. Этапы разработки программы для установки приложения
- •90.2. Создание проекта для установки приложения
- •Описание содержимого компакт-диска и схема использования
- •Список литературы
- •Предметный указатель
Глава 58. Управляемый мигающий текст
Листинг 58.1. Метод для элемента управления TrackBar.
private void trackBar1_Scroll(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = trackBar1.Value;
}
Чтобы подключить к работе таймер, дважды щелкаем значок для компонента Timer (ниже формы в режиме проектирования). Появляется файл Form13.cs с шаблоном, который после записи нашего кода принимает следующий вид.
Листинг 58.2. Метод для компонента Timer.
//Объявляем булеву переменную myText со значением false:
bool myText = false;
private void timer1_Tick(object sender, EventArgs e)
{
//Программируем анимацию:
if (myText == false)
{
//Задаем чередование черного Black
//и белого White цветов текста
//внутри элемента label1:
this.label1.ForeColor = Color.Black;
//Изменяем значение myText на противоположное:
myText = true;
}
else
{
this.label1.ForeColor = Color.White;
//Изменяем значение myText на противоположное:
myText = false;
}
}
Как и везде выше, наши подробные комментарии на всех листингах помогут читателю грамотно внести изменения в код (если читатель пожелает модернизировать анимацию для учета собственных требований).
По этой методике можно спроектировать анимацию в виде мигания любого текста за счет чередования двух любых цветов текста из длинного списка цветов Visual Studio (рис. 58.1) из структуры Color пространства имен System.Drawing.
Глава 59. Методика изображения летающих предметов
Листинг 59.1. Объявление объекта и глобальных переменных.
//Задаем ширину и высоту прямоугольника,
//внутри которого будет летать мяч:
int width_of_rectangle = 1000;
int height_of_rectangle = 500;
//Верхняя горизонтальная линия прямоугольника отстоит
//от оси 'x' на расстоянии boundary_of_rectangle_у:
int boundary_of_rectangle_у = 15;
//Левая вертикальная линия прямоугольника отстоит
//от оси 'y' на расстоянии boundary_of_rectangle_x:
int boundary_of_rectangle_x = 15;
//Размер мяча size_of_ball, как часть (доля)
//от размеров прямоугольника:
int size_of_ball = 20;
//Величина перемещения мяча size_of_move_of_ball,
//как часть (доля) от размеров мяча:
int size_of_move_of_ball = 5;
//Создаем объект myBitmap класса Bitmap:
private Bitmap myBitmap;
//Объявляем целочисленные переменные:
int position_of_ball_x, position_of_ball_y,
radius_of_ball_x, radius_of_ball_y,
move_of_ball_x, move_of_ball_y,
width_of_bitmap_of_ball, height_of_bitmap_of_ball,
width_of_margin_of_bitmap, height_of_margin_of_bitmap;
Дважды щелкаем по диалоговой панели Form1 в режиме проектирования и в появившийся шаблон записываем следующий наш код.
Листинг 59.2. Метод Form1_Load.
private void Form1_Load(object sender, EventArgs e)
{
//Создаем объект myGraphics класса Graphics
//и стираем другие изображения:
Graphics myGraphics = CreateGraphics();
myGraphics.Clear(BackColor);
//Задаем радиус мяча как дробь (часть)
//от ширины или высоты прямоугольника,
//в зависимости от того, какая дробь меньше:
double radius_of_ball =
Math.Min(width_of_rectangle / myGraphics.DpiX,
height_of_rectangle / myGraphics.DpiY) / size_of_ball;
//Задаем ширину и высоту мяча в DPI (ТОЧКИ НА ДЮЙМ)
//для единиц разрешения изображения
//по горизонтали и вертикали, что идентично значениям
//в направлении осей 'x' и 'y':
radius_of_ball_x = Convert.ToInt32(radius_of_ball *
myGraphics.DpiX);
radius_of_ball_y = Convert.ToInt32(radius_of_ball *
myGraphics.DpiY);
//Высвобождаем ресурсы, выделенные объекту myGraphics:
myGraphics.Dispose();
//Задаем шаг перемещения мяча или в 1 пиксель,
//или как часть (дробь, доля) от размера шара,
//в зависимости от того, какая величина больше.
//Это означает, что на каждом шаге перемещение мяча
//пропорционально его размеру,
//а размер мяча, в свою очередь,
//пропорционален размеру прямоугольника.
//Таким образом, при прочих равных условиях,
//когда размеры прямоугольника уменьшаются,
//перемещение мяча замедляется,
//и когда увеличиваются, перемещение мяча убыстряется:
move_of_ball_x = Convert.ToInt32(Math.Max(1,
radius_of_ball_x / size_of_move_of_ball));
move_of_ball_y = Convert.ToInt32(Math.Max(1,
radius_of_ball_y / size_of_move_of_ball));
//Значение перемещения мяча также определяет
//поле изображения вокруг мяча.
//На каждом шаге перемещение мяча
//равно перемещению поля изображения,
//что позволяет стирать предыдущее изображение мяча
//перед каждым последующим изображением мяча
//без мерцания:
width_of_margin_of_bitmap = move_of_ball_x;
height_of_margin_of_bitmap = move_of_ball_y;
//Определяем фактический размер изображения,
//где нарисован мяч,
//прибавляя поля к размерам мяча:
width_of_bitmap_of_ball = 2 * (radius_of_ball_x +
width_of_margin_of_bitmap);
height_of_bitmap_of_ball = 2 * (radius_of_ball_y +
height_of_margin_of_bitmap);
//Создаем новый рисунок мяча
//соответствующей ширины и высоты:
myBitmap = new Bitmap(width_of_bitmap_of_ball,
height_of_bitmap_of_ball);
//Получаем объект класса Graphics
//для изображения мяча,
//удаляем существующий мяч и рисуем новый мяч.
//Задаем черный цвет Black для мяча,
//чтобы он был лучше виден в книге:
myGraphics = Graphics.FromImage(myBitmap);
myGraphics.Clear(BackColor);
myGraphics.FillEllipse(Brushes.Black, new
Rectangle(move_of_ball_x,
move_of_ball_y, 2 * radius_of_ball_x, 2 *
radius_of_ball_y));
//Высвобождаем ресурсы, выделенные объекту myGraphics:
myGraphics.Dispose();
//Задаем расположение мяча в центре прямоугольника:
position_of_ball_x =
Convert.ToInt32(width_of_rectangle / 2);
position_of_ball_y =
Convert.ToInt32(height_of_rectangle / 2);
}
Чтобы подключить к работе таймер, дважды щелкаем значок для компонента Timer (ниже формы в режиме проектирования). Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.
Листинг 59.3. Метод для компонента Timer.
private void timer1_Tick(object sender, EventArgs e)
{
//Создаем объект myGraphics класса Graphics:
Graphics myGraphics = CreateGraphics();
//Рисуем четыре граничные линии прямоугольника,
//от которых будет отскакивать летающий мяч:
myGraphics.DrawLine(new Pen(Color.Red, 3),
boundary_of_rectangle_x, boundary_of_rectangle_у,
width_of_rectangle, boundary_of_rectangle_у);
myGraphics.DrawLine(new Pen(Color.Red, 3),
boundary_of_rectangle_x, boundary_of_rectangle_у,
boundary_of_rectangle_x, height_of_rectangle);
myGraphics.DrawLine(new Pen(Color.Red, 3),
boundary_of_rectangle_x, height_of_rectangle,
width_of_rectangle, height_of_rectangle);
myGraphics.DrawLine(new Pen(Color.Red, 3),
width_of_rectangle, boundary_of_rectangle_у,
width_of_rectangle, height_of_rectangle);
//Рисуем изображение мяча на диалоговой панели Form1
//при помощи метода DrawImage:
myGraphics.DrawImage(myBitmap,
Convert.ToInt32(position_of_ball_x -
width_of_bitmap_of_ball / 2),
Convert.ToInt32(position_of_ball_y -
height_of_bitmap_of_ball / 2),
width_of_bitmap_of_ball, height_of_bitmap_of_ball);
//Высвобождаем ресурсы, выделенные объекту myGraphics:
myGraphics.Dispose();
//После изображения мяча с текущими координатами
//увеличиваем координаты мяча
//на шаг перемещения в направлении осей 'x' и 'y':
position_of_ball_x = position_of_ball_x +
move_of_ball_x;
position_of_ball_y = position_of_ball_y +
move_of_ball_y;
//Изменяем направление перемещения мяча по оси 'x',
//когда мяч ударяется о какую-либо из двух
//граничных вертикальных линий прямоугольника:
if (position_of_ball_x + radius_of_ball_x >=
width_of_rectangle)
{
move_of_ball_x = -move_of_ball_x;
//В момент удара подаем звуковой сигнал Beep:
Microsoft.VisualBasic.Interaction.Beep();
}
if (position_of_ball_x - radius_of_ball_x <=
boundary_of_rectangle_x)
{
move_of_ball_x = -move_of_ball_x;
Microsoft.VisualBasic.Interaction.Beep();
}
//Изменяем направление перемещения мяча по оси 'y',
//когда мяч ударяется о какую-либо из двух
//граничных горизонтальных линий прямоугольника:
if (position_of_ball_y + radius_of_ball_y >=
height_of_rectangle)
{
move_of_ball_y = -move_of_ball_y;
Microsoft.VisualBasic.Interaction.Beep();
}
if (position_of_ball_y - radius_of_ball_y <=
boundary_of_rectangle_у)
{
move_of_ball_y = -move_of_ball_y;
Microsoft.VisualBasic.Interaction.Beep();
}
}
В этом коде главным является вызов перегруженного метода DrawImage, который в VC# имеет много видов перегрузки. Здесь использован вид перегрузки номер 13 с сигнатурой: Overloads Public Sub DrawImage(Image, Integer, Integer, Integer, Integer). Этот метод мы уже объясняли в предыдущей главе.
Чтобы установить значение свойства Interval компонента Timer в зависимости от свойства Value ползунка элемента управления TrackBar, дважды щелкаем элемент управления TrackBar в режиме проектирования. Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.
Листинг 59.4. Метод для элемента управления TrackBar.
private void trackBar1_Scroll(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = trackBar1.Value;
}
Согласно разработанной выше методике, чтобы иметь возможность приостановить (и запустить вновь) процесс анимации на любом рисунке при помощи кнопки Stop Animation, дважды щелкаем эту кнопку в режиме проектирования (рис. 59.1). Появляется файл Form1.cs с шаблоном, выше которого объявляем переменную OffOn и присваиваем ей значение false:
//Объявляем булеву переменную OffOn
//и задаем ей значение, например, false:
bool OffOn = false;
После записи нашего кода шаблон принимает вид следующего метода.
Листинг 59.5. Метод для кнопки Stop Animation.
private void button6_Click(object sender, EventArgs e)
{
//Задаем чередование остановки и возобновления анимации
//после каждого щелчка кнопки button2:
if (OffOn == false)
{
//Приостанавливаем анимацию:
timer1.Enabled = false;
//Изменяем значение OffOn на противоположное:
OffOn = true;
}
else
{
//Возобновляем анимацию:
timer1.Enabled = true;
//Изменяем значение OffOn на противоположное:
OffOn = false;
}
}
Как и выше, наши подробные комментарии на всех листингах помогут читателю грамотно внести изменения в код (если читатель пожелает модернизировать анимацию для учета собственных требований).
Листинг 59.6. Метод для компонента PrintDocument.
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
//Создаем объект myGraphics класса Graphics:
Graphics myGraphics = CreateGraphics();
//Связываем объект myGraphics с текущим принтером:
myGraphics = e.Graphics;
//Рисуем четыре граничные линии прямоугольника,
//от которых будет отскакивать летающий мяч:
myGraphics.DrawLine(new Pen(Color.Red, 3),
boundary_of_rectangle_x, boundary_of_rectangle_у,
width_of_rectangle, boundary_of_rectangle_у);
myGraphics.DrawLine(new Pen(Color.Red, 3),
boundary_of_rectangle_x, boundary_of_rectangle_у,
boundary_of_rectangle_x, height_of_rectangle);
myGraphics.DrawLine(new Pen(Color.Red, 3),
boundary_of_rectangle_x, height_of_rectangle,
width_of_rectangle, height_of_rectangle);
myGraphics.DrawLine(new Pen(Color.Red, 3),
width_of_rectangle, boundary_of_rectangle_у,
width_of_rectangle, height_of_rectangle);
//Рисуем изображение мяча на диалоговой панели Form1
//при помощи метода DrawImage:
myGraphics.DrawImage(myBitmap,
Convert.ToInt32(position_of_ball_x -
width_of_bitmap_of_ball / 2),
Convert.ToInt32(position_of_ball_y -
height_of_bitmap_of_ball / 2),
width_of_bitmap_of_ball,
height_of_bitmap_of_ball);
//Высвобождаем ресурсы, выделенные объекту myGraphics:
myGraphics.Dispose();
}
Теперь дважды щелкаем кнопку Print (рис. 59.1). Открывается файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.
Листинг 59.7. Метод для кнопки Print.
private void button3_Click(object sender, EventArgs e)
{
//Передаем объекту PrintDialog1 информацию об объекте
//PrintDocument1 при помощи свойства Document:
printDialog1.Document = printDocument1;
//Выводим стандартную панель Print при помощи метода
//ShowDialog для задания параметров печати:
if (printDialog1.ShowDialog() == DialogResult.OK)
printDocument1.Print();
}
Таким образом, по разработанной в данной главе методике можно спроектировать анимацию на экране монитора и печать текущего положения анимации на принтере для любого предмета (в виде мяча, шара, пули и т.п.), летающего в открытом или замкнутом пространстве.
