Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование на языках высокого уровня.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
260.25 Кб
Скачать

Implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);

begin

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);

begin

// восстановлением фона (из буфера) удалим рисунок 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);

begin

Back.Free;

bitmap.Free ;

Buf.Free;

end;

end.

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

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

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

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

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

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

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

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

где:

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

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

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

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

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

Bounds(x,у,Width,Height)

где:

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

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

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

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

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

Рис. 10.20. Форма программы

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

unit multik ;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Timer1: TTimer;

procedure FormActivate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1l: TForm1;