Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
9
Добавлен:
14.08.2019
Размер:
1.17 Mб
Скачать

9.2. Простейшая мультипликация

Постановка задачи. Создайте программу для показа кадров баннера, чтобы получился мультфильм (рис. 51).

Рис. 51. Мультфильм «Танцующий пират»

Реализация. Создайте несколько рисунков (в данном примере шесть), отличающихся друг от друга, как в мультфильмах. Сохраните их в одном bmp-файле (рисунки следуют один за другим по горизонтали, как показано на рис. 52).

Рис. 52. Баннер для мультфильма

Положите на форму таймер и кнопку для запуска. Ниже полностью приведен код всех процедур программы.

const

filmfile = 'Пираты1.bmp';

n_kadr = 6;

var

film : TBitMap;

wkadr, hkadr, ckadr : integer;

rectkadr, rectscr : TRect;

procedure TForm1.FormCreate(Sender: TObject);

begin

film := TBitMap.Create;

film.LoadFromFile(filmfile);

wkadr := round(film.Width / n_kadr);

hkadr := film.Height;

film.Transparent := true;

film.TransparentColor:=film.Canvas.Pixels[1,1];

rectscr := bounds(100, 100, wkadr, hkadr);

ckadr := 0;

Timer1.Interval := 150;

Timer1.Enabled := false;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

rectkadr := bounds(wkadr*ckadr, 0, wkadr, hkadr);

Form1.Canvas.CopyRect(rectscr, film.Canvas, rectkadr);

ckadr := ckadr + 1;

if ckadr = n_kadr then

ckadr := 0;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

timer1.Enabled := true;

end;

Глава 10

Обработка ошибок времени выполнения программы

10.1. Пример использования try… except

Постановка задачи. Демонстрация обработки исключения (ошибки времени выполнения программы) при помощи инструкции try ... except.

Реализация. Для примера введем два числа: расстояние и время. Требуется вычислить скорость. Положите на форму несколько надписей, как показано на рис. 53, два поля TEdit для ввода чисел и кнопку «Вычислить».

Рис. 53. Пример использования try… except

При вводе чисел могут быть сделаны следующие ошибки:

  • не задано время;

  • дробная часть числа отделена точкой, а не запятой;

  • набраны не цифры.

На следующей странице приведен код обработчика кнопки «Вычислить» с учетом возможных ошибок.

procedure TForm1.Button1Click(Sender: TObject);

var

s : real; // путь

t : real; // время

v : real; // скорость

begin

Label6.Caption := ''; // очищаем поле результата

try

{ Инструкции, которые могут вызвать исключение (ошибку)

StrToFloat – функция, которая преобразует строку символов в вещественное число }

s := StrToFloat(Edit1.Text);

t := StrToFloat(Edit2.Text);

v := s/t;

except

on EZeroDivide do // Деление на ноль

begin

ShowMessage(' Время не может быть равно нулю!');

exit;

end;

on EConvertError do // Невозможно преобразовать строку

// символов в число

begin

ShowMessage('Путь и время должны быть заданы числом' + #13 + 'При записи дробного числа используйте запятую');

exit;

end;

end;

Label6.caption:=FloatToStr(v)+' м/с'; // Вывод результата расчета

end;