Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




End.

Begin

Begin

Begin

Implementation

Var

Type

Uses

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

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

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

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

где ФайлРесурсов — имя файла ресурсов. Например, директива может выглядеть так:

{$R images.res}

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

Загрузить картинку из ресурса в переменную типа TBitMap можно при помощи метода LoadFromResourceName, который имеет два параметра: идентификатор программы и имя ресурса. В качестве идентификатора программы используется глобальная переменная Hinstance. Имя ресурса должно быть представлено в виде строковой константы. Например, инструкция загрузки картинки в переменную Pic может выглядеть так:

Pic.LoadFromResourceName(Hinstance,'FACTORY');

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

unit aplanel_;

{$R images.res} // включить файл ресурсов interface

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls, Buttons;

TForm1 = class (TForm)

Timer1: TTimer;

Image1: ТImage;

procedure FormActivate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormClose(Sender: TObject;

var Action: TCloseAction); private

{ Private declarations } public

{ Public declarations } end;

Form1: TForm1;

Back, bitmap, Buf: TBitMap;

// фон, картинка, буфер

BackRct, BufRet: TRect;

// область фона, картинки, буфера

х,у:integer;

// координаты левого верхнего угла картинки

W,H: integer; // размеры картинки

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);

Back:= TBitmap.Create; // фон

bitmap:= TBitmap.Create; // картинка

Buf:= TBitmap.Create; // буфер

// загрузить из ресурса фон

Back.LoadFromResourceName(HInstance,'FACTORY');

Forml.Image1.canvas.Draw(0,0,Back);

// загрузить из ресурса картинку, которая будет двигаться

bitmap.LoadFromResourceName(HInstance,'APLANE');

bitmap.Transparent:= True;

bitmap.TransParentColor:= bitmap.canvas.pixels[1,1];

// создать буфер для сохранения копии области фона, на которую

// накладывается картинка

W:= bitmap.Width;

Н:= bitmap.Height;

Buf.Width:= W;

Buf.Height:=H;

Buf.Palette:=Back.Palette; // Чтобы обеспечить соответствие палитр!!

Buf.Canvas.CopyMode:=cmSrcCopy;

BufRct:=Bounds(0,0,W,H);

x:=-W; y:=20;

// определим сохраняемую область фона

BackRct:=Bounds(x,y,W,H); // и сохраним ее

Buf.Canvas.CopyRect(BufRet,Back.Canvas, BackRct);

end;

procedure TForm1.Timer1Timer(Sender: TObject);

// восстановлением фона (из буфера) удалим рисунок Form1.image1.canvas.Draw(x,y, Buf);

x:=x+2;

if x>form1.Image1.Width then x:=-W;

// определим сохраняемую область фона

BackRct:=Bounds(x,у,W,H);

// сохраним ее копию

Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);

// выведем рисунок

Form1.image1.canvas.Draw(x,y,bitmap);

end;

procedure TForm1.FormClose(Sender: TObject;

var Action: TCloseAction);

Back.Free;

bitmap.Free;

Buf.Free;

end;

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

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

Теперь рассмотрим, как можно реализовать вывод в диалоговом окне программы простого "мультика", подобного тому, который можно видеть в диалоговом окне Установка связи при подключении к Internet. Эффект бегущего между телефоном и компьютером красного квадратика достигается за счет того, что в диалоговое окно выводятся сменяющие друг друга картинки. Кадры мультика обычно находятся в одном файле или в одном ресурсе. Перед началом работы программы они загружаются в буфер, в качестве которого удобно использовать объект типа TBitMap. Задача процедуры, реализующей вывод мультика, состоит в том, чтобы выделить очередной кадр и вывести его в нужное место формы. Вывести кадр на поверхность формы можно применением метода copyRect к свойству canvas этой формы. Метод CopyRect копирует прямоугольную область одной графической поверхности на другую. Инструкция применения метода CopyRect в общем виде выглядит так:

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

где:

Ø canvas1 — графическая поверхность, на которую выполняется копирование;

Ø Canvas2 — графическая поверхность, с которой выполняется копирование;

Ø параметр Область2 —- задает положение и размер копируемой прямоугольной области, а параметр областьi — положение копии на поверхности Canvas1.

В качестве параметров область! и область2 используются структуры типа TRect, поля которых определяют положение и размер области. Заполнить поля структуры TRect можно при помощи функции Bounds, инструкция обращения к которой в общем виде выглядит так:

Bounds(x,у,Width,Height)

где:

Ø х и у — координаты левого верхнего угла области;

Ø width и Height — ширина и высота области.

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

 

unit multik;

interface




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 372; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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