Під мультиплікацією зазвичай розуміється рухомий і мінливий малюнок. У найпростішому випадку малюнок може тільки рухатися або тільки змінюватися.
Як було показано вище, малюнок може бути сформований з графічних примітивів (ліній, кіл, дуг, багатокутників і т. д.). Забезпечити переміщення малюнка досить просто: треба спочатку вивести малюнок на екран, потім через деякий час стерти його і знову вивести цей же малюнок, але вже на деякій відстані від його початкового положення. Підбором часу між виведенням і видаленням малюнка, а також відстані між старим і новим положенням малюнка (кроку переміщення), можна домогтися того, що у спостерігача буде складатися враження, що малюнок рівномірно рухається по екрану.
Наступна проста програма, текст якої наведено в лістингу 10.8, а вид форми – на рис. 10.15, демонструє рух окружності від лівої до правої межі вікна програми.
Рис. 10.15. Форма програми Рухома окружність
Лістинг 10.8. Рухома окружність
unit mcircle_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class (TForm) Timer1: TTimer; procedure Timer1Timer (Sender: TObject}; procedure FormActivate (Sender: TObject); private { Private declarations} public { Public declarations} end; implementation {$ R * .DFM} var Form1: TForml; x, y: byte; // координати центру кола dx: byte; // приріст координати x при русі окружності // стирає і малює окружність на новому місці procedure Ris; begin // стерти окружність form1.Canvas.Pen.Color: = form1.Color; form1.Canvas.Ellipse (x, y, x + 10, y + 10); x: = x + dx; // намалювати коло на новому місці form1.Canvas.Pen.Color: = clBlack; form1.Canvas.Ellipse (x, y, x + 10, y + 10); end; // сигнал від таймера procedure TForm1.Timer1Timer (Sender: TObject); begin Ris; end; procedure TForm1.FormActivate (Sender: TObject); begin x: = 0; y: = 10; dx: = 5; timer1.Interval: = 50; // період виникнення події OnTimer -0.5 сек form1.canvas.brush.color: = forml.color; end; end.
Основну роботу виконує процедура Ris, яка стирає коло і виводить її на новому місці. стирання кола виконується шляхом перемальовування окружності поверх намальованої, але кольором фону.
Для забезпечення періодичного виклику процедури Ris в форму програми додано невізуальний компонент Timer (Таймер), значок якого знаходиться на вкладці System палітри компонентів (Рис. 10.16). Властивості компонента Timer, перераховані в табл. 10.9.
Рис. 10.16. Значок компонента Timer
Таблиця 10.9. Властивості компонента Timer
Властивість | Визначає |
Name Interval | Ім’я компонента. використовується для доступу до компоненту Період генерації події OnTimer. Здається в мілісекундах |
Enabled | Дозвіл роботи. дозволяє (Значення True) або забороняє (значення False) генерацію події OnTime |
Додається компонент Timer до форми звичайним чином, однак, оскільки компонент Timer є незриме, т. е. під час роботи програми не відображається на формі, його значок можна помістити в будь-яке місце форми.
Компонент Timer генерує подія OnTimer. Період виникнення події OnTimer вимірюється в мілісекундах і визначається значенням властивості Interval. Слід звернути увагу на властивість Enabled. Воно дає можливість програмі запустити або зупинити таймер. Якщо значення властивості Enabled одно False, то подія OnTimer не виникає.
Подія onTimer в розглянутій програмі обробляється процедурою TimeriTimer, яка, в свою чергу, викликає процедуру Ris. Таким чином, в програмі реалізований механізм періодичного виклику процедури
Ris.
Примітка
Змінні х, у (координати центру окружності) і dx (приріст координати х при русі окружності) оголошені поза процедурою Ris, т. е. вони є глобальними. Тому треба не забути виконати їх ініціалізацію (в програмі ініціалізацію глобальних змінних реалізує процедура FormActivate).