360 Глава 5

Рис. 5.15

Приложение с простой мультипликацией

Таймер будет задавать темп смены кадров. Поскольку в первом варианте при-
ложения у нас будет всего два кадра, задайте значение свойства Interval таймера
достаточно большим, например, 500 (поскольку интервалы задаются в миллисе-
кундах, то это значение соответствует 0,5 сек). Значение параметра Enabled тайме-
ра установите в false. Таймер у нас будет управляться кнопкой.

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

void _fastcall Draw () ;

Это объявление функции, которая будет рисовать изображение. А текст само-
го модуля может иметь вид:

short int num = 0;

short int H=20;               // шаг
short int Xpos = 2 * H;       // координата туловища
short int Ypos = 120;         // "земля"
short int Hmen =30;          // высота тела
short int Rhead =10;         // радиус головы
short int Rhead2 = Rhead / 2; // радиус литавров
short int revers = 1;         // направление движения
short int L=H*1.41;       // длина ноги

//—————————————————————————-

void _fastcall TFormI::Draw()

(

short int Yhead;                              // координата низа головы

switch (num)

(
case 0:

Yhead = Ypos-H-Hmen;

Imagel->Canvas->MoveTo(Xpos-H,Ypos);

Imagel->Canvas->LineTo(Xpos,Ypos-H);        // нога
Imagel->Canvas->LineTo(Xpos+H,Ypos);        // другая нога
Imagel->Canvas->MoveTo(Xpos,Ypos-H);

Imagel->Canvas->LineTo(Xpos,Yhead);         // туловище
Imagel->Canvas->MoveTo(Xpos+revers*H,Yhead-H) ;

Imagel->Canvas->LineTo(Xpos,Yhead+4);       // рука
Imagel->Canvas->Ellipse(Xpos+revers*H-Rhead2,Yhead-H-Rhead2,

Xpos+revers*H+Rhead2,Yhead-H+Rhead2) ;

Imagel->Canvas->LineTo(Xpos+revers*H,Yhead+H);     // другая рука
Imagel->Canvas->Eliipse(Xpos+revers*H-Rhead2,Yhead+H-Rhead2,

Xpos+revers*H+Rhead2,Yhead+H+Rhead2);

Imagel->Canvas->Ellipse(Xpos-Rhead,Yhead,Xpos+Rhead,Yhead-2*Rhead) ;

Imagel->Canvas->Rectangle(Xpos-Rhead,Yhead-2*Rhead-l,

Xpos+Rhead,Yhead-2*Rhead-4);       // шляпа
break;

case 1:

Yhead = Ypos-L-Hmen;

Imagel->Canvas->MoveTo(Xpos,Ypos) ;

Imagel->Canvas->LineTo(Xpos,Yhead);