- •Компоненты
- •Событие и функция обработки события
- •Редактор кода
- •Система подсказок
- •Навигатор классов
- •Шаблоны кода
- •Справочная система
- •Сохранение проекта
- •Компиляция
- •Предупреждения и подсказки
- •Компоновка
- •Запуск программы
- •Ошибки времени выполнения
- •Внесение изменений
- •Настройка приложения
- •Название программы
- •Значок приложения
- •Перенос приложения на другой компьютер
- •Структура простого проекта
- •2. Задание на выполнение работы
- •1. Электроэнергия.
- •2. Игра «угадай число».
- •3. Гороскоп
- •4. Межгород
- •6. Алфавит
- •7. Палиндром
- •8. Метеослужба
- •9. Статистика
- •10. Кафе.
- •Лабораторная работа №22 Графика.
- •Карандаш и кисть
- •Графические примитивы
- •Ломаная линия
- •Прямоугольник
- •Многоугольник
- •Окружность и эллипс
- •Лабораторная работа №23 Иллюстрации
- •Битовые образы
- •Мультипликация
- •Метод базовой точки
- •Использование битовых образов
- •Загрузка битового образа из ресурса программы
- •Создание файла ресурсов
- •Подключение файла ресурсов
- •Int w, h; // размер кадра
- •Int с; // номер воспроизводимого кадра
- •Лабораторная работа №25
- •1. База данных и субд
- •Локальные и удаленные базы данных
- •Структура базы данных
- •Псевдоним
- •Компоненты доступа и манипулирования данными
- •Создание базы данных
- •Доступ к базе данных Доступ к базе данных обеспечивают компоненты Database, Table, Query и DataSource. Значки этих компонентов находятся на вкладках Data Access и bde (рис. 25.8).
- •Отображение данных
- •Манипулирование данными
- •Выбор информации из базы данных
- •Перенос программы управления базой данных на другой компьютер
- •2. Задание на выполнение работы
- •Литература
Использование битовых образов
В последнем примере изображение формировалось из графических примитивов. Теперь рассмотрим, как можно реализовать перемещение заранее подготовленного при помощи графического редактора изображения.
Как и в предшествующей программе, эффект перемещения объекта (картинки) достигается за счет периодической перерисовки картинки с некоторым смещением относительно ее прежнего положения. Перед выводом картинки в новой точке предыдущее изображение должно быть удалено, а фоновый рисунок, который был перекрыт — восстановлен. Удалить (стереть) картинку и одновременно восстановить фон можно путем перерисовки всей фоновой картинки или только той ее части, которая была перекрыта объектом. В рассматриваемой программе используется второй подход. Изображение объекта выводится применением метода Draw к свойству canvas формы, а стирается путем копирования (метод CopyRect) нужной части фона из буфера в битовый образ, соответствующий поверхности формы. Форма программы приведена на рис. 23.9, а текст — в листинге 3.6. Компонент Timer используется для организации цикла удаления и вывода изображения самолета.
Рис. 23.9. Форма программы "Полет над городом"
Листинг 3.7. Полет над городом
void _fastcall TForml::FormCreate(TObject *Sender)
{
// загрузить фоновый рисунок из bmp-файла
back = new Graphics::TBitmap();
back->LoadFromFile("factory.bmp");
// установить размер клиентской (рабочей)
// области формы в соответствии с размером
//фонового рисунка
GlientWidth = back->Width;
ClientHeight = back->Height;
// загрузить картинку
sprite = new Graphics::TBitmap();
sprite->LoadFromFile("aplane.bmp");
sprite->Transparent = true;
// исходное положение самолета
x=-20; // чтобы самолет "вылетал" из-за левой границы окна У=20;
}
void _fastcall TForml::FormPaint(TObject *Sender)
{
Canvas->Draw(0,0,back); //фон
Canvas->Draw(x,у,sprite); // рисунок
}
void__fastoall TForml::TimerlTimer(TObject *Sender)
{
TRect badRect; // положение и размер области
//фона, которую надо восстановить
badRect = Rect(x,y,x+sprite->Width,y+sprite->Height);
// стереть самолет (восстановить "испорченный" фон)
Canvas->CopyRect(badRect,back->Canvas,badRect);
// вычислим новые координаты спрайта (картинки)
х +=2;
if (х > ClientWidth)
{
// самолет улетел за правую границу формы
// изменим высоту и скорость полета
х = -20;
у = random(ClientHeight —30); // высота полета"
// скорость полета определяется периодом
// возникновения события On Timer,
// который, в свою очередь, зависит
// от значения свойства Interval
Timerl->Interval = random(20) + 10;
// скорость "полета" меняется
// от 10 до 29
}
Canvas->Draw(х,у,sprite);
}
Для хранения битовых образов (картинок) фона и самолета используются два объекта типа TBitmap, которые создает функция TFormi::Formcreate (объявления этих объектов надо поместить в заголовочный файл проекта). Эта же функция загружает из файлов картинки фона (factory.bmp) и самолета (aplane.bmp). Восстановление фона выполняется при помощи метода copyRect, который позволяет выполнить копирование прямоугольного фрагмента одного битового образа в другой. Объект, к которому применяется метод copyRect, является приемником копии битового образа. В качестве параметров методу передаются: координаты и размер области, куда должно быть выполнено копирование; поверхность, с которой должно быть выполнено копирование; положение и размер копируемой области. Информация о положении и размере восстанавливаемой (копируемой на поверхность формы) области фона находится в структуре badRect типа TRect.
Следует обратить внимание на то, что начальное значение переменной х, которая определяет положение левой верхней точки битового образа (движущейся картинки) — отрицательное число, равное ширине битового образа картинки. Поэтому в начале работы программы самолет не виден и картинка отрисовывается за границей видимой области. С каждым событием OnTimer значение координаты х увеличивается и на экране появляется та часть битового образа, координаты которой больше нуля. Таким образом, у наблюдателя создается впечатление, что самолет вылетает из-за левой границы окна.