• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;


Иллюстрированный самоучитель по Delphi 7 для начинающих

Использование битовых образов. Загрузка битового образа из ресурса программы.

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

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

В рассматриваемой программе используется второй подход. Картинка выводится применением метода Draw к свойству canvas компонента Image, a стирается путем копирования (метод copyRect) нужной части фона из буфера на поверхность компонента Image.

Форма программы приведена на рис. 10.18, а текст – в листинге 10.10.

Компонент image используется для вывода фона, а компонент Timer – для организации задержки между циклами удаления и вывода на новом месте изображения самолета.

Листинг 10.10. Летящий самолет.

unit anim_;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, ExtCTRLs, StdCTRLs, Buttons;
type
TForm1 = class (TForm)
Timer1: TTimer;
Image1: Tlmage;
procedure FormActivate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction); private
{ Private declarations } public
{ Public declarations } end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
Back, bitmap, Buf: TBitMap; // фон, картинка, буфер
BackRct: TRect; // область фона, которая должна быть
// восстановлена из буфера
BufRet: Trect; // область буфера, которая используется для
// восстановления фона
х,у: integer; // текущее положение картинки
W,H: integer; // размеры картинки
procedure TForm1.FormActivate(Sender: TObject);
begin
// создать три объекта – битовых образа
Back: = TBitmap.Create; // фон
bitmap: = TBitmap.Create; // картинка
Buf: = TBitmap.Create; // буфер
// загрузить и вывести фон
Back.LoadFromFile('factory.bmp');
Form1.Image1.canvas.Draw(0.0,Back);
// загрузить картинку, которая будет двигаться
bitmap.LoadFromFile('aplane.bmp');
// определим "прозрачный" цвет
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);
// начальное положение картинки
х: = – W; у: = 20;
// определим сохраняемую область фона
BackRct: = Bounds(x,y,W,H); // и сохраним ее
Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
end;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.