Графические возможности Delphi: Использование ресурсов, просмотр мультиков

Создание файла ресурсов

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

Файл ресурсов можно создать при помощи утилиты Image Editor (Редактор изображений), которая запускается выбором команды Image Editor меню Tools.

Для того чтобы создать новый файл ресурсов, надо из меню File выбрать команду New, а затем в появившемся подменю — команду Resource File (Файл ресурсов)

В результате открывается окно нового файла ресурсов, а в строке меню окна Image Editor появляется новый пункт — Resource (рис. 10.20).

Рис. 10.19. Диалоговое окно Image Editor

Рис. 10.20. Создание нового файла ресурсов а окне Image Editor

Для того чтобы в этот файл добавить новый ресурс, необходимо выбрать команду New меню Resource и из открывшегося списка — тип ресурса. В данном случае следует выбрать Bitmap (битовый образ). После выбора Bitmap открывается диалоговое окно Bitmap Properties (Свойства битового образа) (рис. 10.21), используя которое можно установить размер (в пикселах) и количество цветов создаваемой картинки.

 

Нажатие кнопки ОК в диалоговом окне Bitmap Properties вызывает появление элемента Bitmap1 в иерархическом списке Contents. Этот элемент соответствует новому ресурсу, добавленному в файл (рис. 10.22).

 

Bitmap1 — это автоматически созданное имя ресурса, которое может быть изменено выбором команды Rename меню Resource и вводом нужного имени. После изменения имени Bitmap1 можно приступить к созданию битового образа. Для этого необходимо выбрать команду Edit меню Resource, в результате чего открывается окно графического редактора.

Графический редактор Image Editor предоставляет программисту стандартный для подобных редакторов набор инструментов, используя которые можно нарисовать нужную картинку. Если во время работы надо изменить масштаб отображения картинки, то для увеличения масштаба следует выбрать команду Zoom In меню View, а для уменьшения — команду Zoom Out. Увидеть картинку в реальном масштабе можно, выбрав команду Actual Size меню View.

Рис. 10.21. Диалоговое окно Bitmap Properties

Рис. 10.22. Окно файла ресурсов после добавления ресурса Bitmap

В качестве примера на рис. 10.23 приведен вид диалогового окна Image Editor, в котором находится файл ресурсов для программы aplane. Файл содержит два битовых образа с именами FACTORY и APLANE.

Рис. 10.23. Диалоговое окно Image Editor с файлом ресурсов 

 

Если нужная картинка уже существует в виде отдельного файла, то ее можно через буфер обмена (clipboard) поместить в битовый образ файла ресурсов. Делается это следующим образом. 

  1. Сначала надо запустить графический редактор, например Microsoft Paint, загрузить в него файл картинки и выделить всю картинку или ее часть. В процессе выделения следует обратить внимание на информацию о размере (в пикселах) выделенной области (Paint выводит размер выделяемой области в строке состояния). Затем, выбрав команду Копировать меню Правка, следует поместить копию выделенного фрагмента в буфер.
  2. Далее нужно переключиться в Image Editor, выбрать ресурс, в который надо поместить находящуюся в буфере картинку, и установить значения характеристик ресурса в соответствии с характеристиками картинки, находящейся в буфере. Значения характеристик ресурса вводятся в поля диалогового окна Bitmap Properties, которое открывается выбором команды Image Properties меню Bitmap. После установки характеристик ресурса можно вставить картинку в ресурс, выбрав команду Past меню Edit.
  3. После добавления всех нужных ресурсов файл ресурса следует сохранить в том каталоге, где находится программа, для которой этот файл создается. Сохраняется файл ресурса обычным образом, т. е. выбором команды Save меню File. Image Editor присваивает файлу ресурсов расширение res. 

 

 

Подключение файла ресурсов

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

В общем виде эта директива выглядит следующим образом: 

{$R ФайлРесурсов}

 

где ФайлРесурсов — имя файла ресурсов.

Например, директива может выглядеть так: 

{$R images.res}

 

Примечание: Если имена файла модуля программы и файла ресурсов совпадают, то вместо имени файла ресурсов можно поставить "*".

В этом случае директива включения файла ресурсов в файл исполняемой программы выглядит так: {$R *.res} 

 

 

Загрузить картинку из ресурса в переменную типа TBitMap можно при помощи метода LoadfromResourceName, который имеет два параметра:

идентификатор программы и имя ресурса.

 

В качестве идентификатора программы используется глобальная переменная Hinstance. Имя ресурса должно быть представлено в виде строковой константы. 

Например, инструкция загрузки картинки в переменную pic может выглядеть так:

Pic.LoadFromResourceName(HInstance,'FACTORY');

 

 В качестве примера в листинге 10.11 приведен текст программы, в которой изображение фона и самолета загружается из ресурсов.

 

Листинг 10.11. Пример загрузки картинок из ресурса 


 

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


Просмотр "мультика"

 

Теперь рассмотрим, как можно реализовать вывод в диалоговом окне про-
граммы простого "мультика", подобного тому, который можно видеть в диа-
логовом окне Установка связи при подключении к Internet (рис. 10.24).

Теперь рассмотрим, как можно реализовать вывод в диалоговом окне программы простого "мультика", подобного тому, который можно видеть в диалоговом окне 

Установка связи при подключении к Internet (рис. 10.24).

Рис, 1О.24. Пример мультика в диалоговом окне Установка связи

Эффект бегущего между телефоном и компьютером красного квадратика достигается за счет того, что в диалоговое окно выводятся сменяющие друг друга картинки (рис. 10.25).

Рис. 10.25. Картинки, используемые для реализации мультика в диалоговом окне Установка связи

Кадры мультика обычно находятся в одном файле или в одном ресурсе. Перед началом работы программы они загружаются в буфер, в качестве которого удобно использовать объект типа TBitMap. Задача процедуры, реализующей вывод мультика, состоит в том, чтобы выделить очередной кадр и вывести его в нужное место формы.

Вывести кадр на поверхность формы можно применением метода copyRect к свойству canvas этой формы. Метод CopyRect копирует прямоугольную область одной графической поверхности на другую.

 

Инструкция применения метода CopyRect в общем виде выглядит так:

Canvas1.CopyRect (Область 1, Canvas2, Область2)

 

где:

  • Canvas1 — графическая поверхность, на которую выполняется копирование;
  • Canvas2 — графическая поверхность, с которой выполняется копирование;
  •  параметр областъ2 — задает положение и размер копируемой прямоугольной области, а параметр область! — положение копии на поверхности Canvas1

В качестве параметров области! и Область? используются структуры типа TRect, поля которых определяют положение и размер области.

Заполнить поля структуры TRect можно при помощи функции Bounds, инструкция обращения к которой в общем виде выглядит так:

Bounds(х,у,Width,Height)

где:

  • х и у — координаты левого верхнего угла области;
  • Width и Height — ширина и высота области.

Следующая программа, текст которой приведен в листинге 10.12, выводит в диалоговое окно простой мультик — дельфийскую колонну, вокруг которой "летает" некоторый объект. На рис. 10.26 приведены кадры этого мультика (содержимое файла film.bmp).

Диалоговое окно программы приведено на рис. 10.27, оно содержит один единственный компонент — таймер.

Рис. 10.26. Кадры мультика

Рис. 1О.27. Форма программы

Листинг 10.12. Мультик (использование метода CopRect) 

 

Программа состоит из трех процедур. Процедура TForm1.FormActivate создает объект Film и загружает в него фильм — BMP-файл, в котором находятся кадры фильма. Затем, используя информацию о размере загруженного битового образа, процедура устанавливает значения характеристик кадра: высоту и ширину.

 

После этого создается объект Kadr (типа TBitMap), предназначенный для хранения текущего кадра. Следует обратить внимание, что после создания объекта Kadr принудительно устанавливаются значения свойств width и Height. Если этого не сделать, то созданный объект будет существовать, однако память для хранения битового образа не будет выделена. В конце своей работы процедура TForm1.FormActivate устанавливает номер текущего кадра и запускает таймер.

 

Основную работу в программе выполняет процедура DrawKadr, которая выделяет из фильма очередной кадр и выводит его в форму. Выделение кадра и его отрисовку путем копирования фрагмента картинки с одной поверхности на другую выполняет метод CopyRect (рис. 10.28), которому в качестве параметров передаются координаты области, куда нужно копировать, поверхность и положение области, откуда нужно копировать. Положение фрагмента в фильме, т. е. координата х левого верхнего угла, определяется умножением ширины кадра на номер текущего кадра. Запускает процедуру DrawKadr процедура TFormi. TimeriTimer, обрабатывающая событие OnTimer.

Рис. 10.28. Инструкция Canvasl .CopyRect (Rect1, Canvas2,Rect2) копирует в область Rectl поверхности Canvasl область Rect2 с поверхности Canvas2

 

dle

Помоги проекту! Расскажи друзьям об этом сайте: