русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Создание анимации в формах Windows


Дата добавления: 2013-12-23; просмотров: 2900; Нарушение авторских прав


Под анимацией понимается динамическая смена изображения на форме или в элементе управления PictureBox. Для отсчёта интервалов времени используется невизуальный элемент Timer. Важнейшее свойство этого элемента – Interval, которое определяет частоту срабатывания таймера. Значение свойства измеряется в миллисекундах, по умолчанию установлено значение 100.

Нормальной скоростью смены кадра считается 24 кадра в секунду, но это используется в основном при демонстрации фильмов (т.е. огромного числа кадров). При небольшом числе кадров вполне приемлемым оказывается значение 1000, т.е. 1 кадр в секунду.

Важнейшее событие таймера – Tick,генерируется при истечении интервала срабатывания таймера. Вобработчик этого события помещается код смены изображения. Старт таймера осуществляется с помощью метода Start, остановка – с помощью метода Stop.

Сами изображения могут помещаться в элемент управления ImageList с помощью изменения значения свойства Images. Порядковые номера рисунков (индексы) начинаются с нуля.

Пример.Пусть в ImageList имеется 5 изображений. Обеспечить их смену с частотой 1 кадр в секунду в элементе управленияPictureBox. Объявим переменную img типа Integer с атрубутомPublic, в которую будет помещён порядковый номер изображения. Необходимо создать форму, нанести на неё кнопку, элементы PictureBox, ImageList, и Timer. На кнопку необходимо нанести надпись, например «Начать показ». Затем необходимо установить значение свойства Interval у элемента Timer, равным 1000. После этого необходимо поместить 5 изображений в ImageList.

Вобработчик события Timer1_Tick необходимо записать следующий код:

Visual Basic .Net:

img = img + 1

PictureBox1.Image = ImageList1.Images(img)

If img = 4 Then img = -1

Visual C#:

img = img + 1;

pictureBox1.Image=imageList1.Images

if (img==4) img=-1;

 

Последняя строка обеспечивает цикличность демонстрации, как только будет продемонстрировано последнее изображение, будет автоматически осуществлён переход к первому.

Вобработчик события нажатия кнопки необходимо записать код старта таймера:

Visual Basic .Net:

Timer1.Start()

Visual C#:

timer1.Start();

 

Остановка таймера будет осуществлена при закрытии формы. Можно обеспечить остановку с помощью программного кода.

Таймер можно стартовать автоматически. Для этого нужно установить его свойство Enabled, равное True.

Недостатками такого способа являются ограничение числа изображений, которое можно загрузить в ImageList (определяется объёмом памяти), а также то, что размер изображения не может превышать 256 х 256 пикселей. Поэтому чаще всего изображения для анимации помещают в определённую папку, из которой затем выбирают их.

Для работы с папками компьютера используют специальный объект Directoty. Этот объект принадлежит базовому классу System.IO, который необходимо импортировать в проект. Для получения списка файлов в заданной папке используется метод GetFiles, имеющий синтаксис:

Visual Basic .Net:

Files=Directory.GetFiles(имяпапки, фильтр)

Visual C#:

Files=Directory.GetFiles(имяпапки, фильтр);

Имя папки следует указывать полностью,для C# в качестве разделителя папок используется двойной слеш, фильтр является необязательным параметром и задаёт шаблон для отбора файлов, например, по расширению. Переменная, в которую помещается результат, объявляется как динамический массив:

Visual Basic .Net:

Dim Files as String()

Visual C#:

String [] files;

 

Размерность массива будет указана автоматически при заполнении его методом GetFiles. Для доступа к списку файлов из всех процедур ему необходимо присвоить атрибут Public в области описаний модуля. Пример использования данного метода:

Visual Basic .Net:

 

files = Directory.GetFiles("C:\DocumentsandSettings\User\Моидокументы\VisualStudio 2005\Projects\графика1\Resources", "*.jpg")

 

Visual C#:

files=Directory.GetFiles("("C:\\Documents and Settings\\User\\Моидокументы\\Visual Studio 2005\\Projects\\графика1\\Resources"","*.jpg");

 

Массив файлов является объектом, его свойство Length определяет число файлов в заданной папке.

Пример.Обеспечить в элементе изображения PictureBox смену изображений из некоторой папки с частотой 1 кадр в секунду Объявим переменные img (порядковый номер изображения) и img_count (число изображений в папке) типа Integer с атрибутом Public. Также объявим с данным атрибутом массив строк, куда поместим имена всех графических файлов из папки:

Visual Basic .Net:

Public img, img_count AsInteger

Public files() AsString

Visual C#:

Public int img,img_count;

Public string [] files;

 

Необходимо создать форму, нанести на неё элементы PictureBox, Timer и Button с соответствующей надписью. В код обработчика события Click кнопки необходимо записать код, сканирующий заданную папку, выбирающую из неё все файлы изображений, вычисляющий их количество и стартующий таймер:

Visual Basic .Net:

files = Directory.GetFiles("C:\графика1", "*.jpg")

img_count = files.Length

Timer1.Start()

Visual C#:

files=Directory.GetFiles("C:\\графика1","*.jpg");

img_count=files.Length;

timer1.Start();

 

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

В обработчик события Timer1_Tick необходимо записать следующий код:

Visual Basic .Net:

PictureBox1.Image = Image.FromFile(files(img))

img = img + 1

If img = img_count Then img = 0

Visual C#:

pictureBox1.Image=Image.FromFile(files

img=img+1;

if (img==img_count) img=0;

 

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

Папка с изображениями здесь задается вручную. Для выбора папки в процессе работы с программой можно воспользоваться элементом управления FolderBrowserDialog. События этого объекта используются редко. Реакция пользователя оценивается значением переменной DialogResult, имя выбранной пользователем папки записывается в качестве значения свойства SelectedPath. Здесь также следует проверять, имеются ли в папке графические файлы или нет, например, сравнивая число обнаруженных графических файлов с нулём. В этом случае код обработчика события нажатия кнопки «Начать показ» будет примерно следующим:

Visual Basic .Net:

Dim result As DialogResult

result = FolderBrowserDialog1.ShowDialog()

If (result = Windows.Forms.DialogResult.OK) Then

files = Directory.GetFiles(FolderBrowserDialog1.SelectedPath, "*.jpg")

img_count = files.Length

If img_count = 0 Then

MsgBox("В данной папке нет графических файлов", MsgBoxStyle.OkOnly)

Else

Timer1.Start()

EndIf

EndIf

Visual C#:

DialogResult result;

result = folderBrowserDialog1.ShowDialog();

if (result == DialogResult.OK)

{

files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpg");

img_count = files.Length;

if (img_count == 0) MessageBox.Show("В данной папке нет графических файлов", "Ошибка!", MessageBoxButtons.OK);

else timer1.Start();

}

 

С помощью данных методов и объектов можно также осуществлять движение путем перемещения объекта PictureBox по форме или изменяя его размеры.

Замечание: в качестве фильтра для объекта FolderBrowserDialog можно использовать только одно значение, следовательно, можно отбирать только графические данные одного типа.

 



<== предыдущая лекция | следующая лекция ==>
Элемент управления PictureBox | Оптимальный подбор размеров элемента PictureBox


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.