лим. p> Спробуйте зробити самі простеньку мультиплікацію - рухому коло. Почніть новий додаток і в розділ
implementation вставте оголошення
X, Y: integer;
Тим самим ви введете глобальні змінні X і Y - поточні координати зображення.
У подія форми OnPaint вставте оператори
. Brush. Color: = clWhite;: = clWhite;. Pen. Mode: = pmNotXor;
Перший з цих операторів задає білий колір кисті Brush . Значить ваша окружність буде зафарбована всередині білим кольором. Другий оператор задає білий колір фону поверхні форми. p> Третій оператор встановлює режим пера pmNotXor , який дозволить вам прати колишнє зображення перш, ніж намалювати нове.
Навіть найпростіша мультиплікація потребує синхронізації. Інакше швидкість руху буде визначатися швидкодією комп'ютера. Тому перенесіть на форму компонент Timer - таймер зі сторінки System. Цей компонент описаний в розділі 5.7 . p> Можете подивитися там його докладний опис. А поки задайте його властивість Interval рівним, наприклад, 30 (цей час витримки в мілісекундах, але реальний час витримки буде більше - див. розділ 5.7) і встановіть властивість Enabled рівним < b> false (це означає, що таймер не запускатиметься автоматично в момент запуску програми).
У обробник події цього компонента OnTimer вставте оператори
// Стирання колишнього зображення . Ellipse (Х-5, Y, X +5, Y-1Q); (X);
// Малювання нового зображення . Ellipse (Х-5, Y, X +5, Y-10);
// Останов при досягненні кінця форми
if (X> = ClientWidth-20) then . Enabled: = false;
Перший з цих операторів малює окружність в тому місці, де вона була намальована раніше, тобто стирає колишнє зображення. p> Далі збільшується на одиницю функцією Inc поточна координата X і зображення кола малюється в новій позиції. p> Останній оператор зупиняє зображення у краю форми.
Тепер перенесіть на форму кнопку Button і в обробник клацання на ній помістіть оператори
Х: = 10;: = 100;. Ellipse (X-5, Y, X +5, Y-10);. Enabled: = true;
Перші два оператори задають початкові координати кола. Третій оператор малює окружність в її початковому положенні, а четвертий - запускає таймер. p> відтранслюватиме додаток, запустіть його на виконання, клацніть на кнопці. Ви побачите зображення кола, що переміщається за формою зліва направо. А далі вже підключіть вашу фантазію і перетворіть це не надто цікавий додаток у що-небудь більш захоплююче. p> На канві можна відображати не тільки програмно створювані зображення, але й зображення, що зберігаються в графічних файлах. Тільки сама канва не має методу завантаження зображення з файлу. Тому завантажувати файл треба в який-небудь інший графічний об'єкт, здатний сприймати інформацію графічних файлів. А потім переписувати зображення з цього об'єкта на канву за допомогою методу канви Draw . Його опис:
Draw (X, Y: Integer; Graphic: TGraphic);
Тут параметри Х і Y визначають координати лівого верхнього кута розміщення зображення на канві, a Graphic - об'єкт, що зберігає інформацію. В якості такого об'єкта може виступати, наприклад, об'єкт типу TBitMap , призначений для зберігання бітових матриць. Давайте подивимося, як все це виглядає на практиці. p> Відкрийте новий додаток, перенесіть на форму компонент OpenPictureDialog зі сторінки Dialogs (це компонент діалогу відкриття графічних файлів - див розділ 8.2 ) і кнопку Button . Додайте OpenPictureDialog в будь-якому місці форми, так як цей компонент Невізуальний, а кнопку розмістіть внизу форми. У обробник клацання на кнопці занесіть код:
procedure TForm1. Button1Click (Sender: TObject);
var : TBitMap;
begin
// Вибір користувачем графічного файлу
if OpenPictureDialog1. Execute then
begin
// Створення об'єкта BitMap типу TBitMap : = TBitMap. Create;
// Завантаження в BitMap обраного графічного файлу . LoadFromFile (OpenPictureDialog1. FileName);
// Перенесення зображення на канву форми . Draw (10, 10, BitMap);
// Знищення об'єкта BitMap . Free;
end ;
end ;
Цей код створює тимчасовий об'єкт типу TBitMap з ім'ям BitMap . Потім викликається діалог відкриття графічного файлу OpenPictureDialog1 і, якщо користувач вибрав файл, то він завантажується в BitMap методом LoadFromFile . Потім методом Draw завантажене зо...