Екранна заставка
Закріплення пройденого матеріалу практично, вивчення компонента TTimer і функції-генератора випадкових чисел Random() .
Постановка задачі
Іноді для закріплення пройденого матеріалу ми виконуватимемо лабораторні роботи – реальні програмні проекти різної складності. На цей раз ми з вами зробимо екранну заставку у вигляді електронного годинника. Проект розробляється на платформі Windows XP SP3, але й на інших версіях Windows має вийти також.
Перш за все, екранна заставка займає весь екран, не має системного рядка, головного меню та обрамлення головного вікна. Та й вікно біля екранної заставки, як правило, одне. Ще одна відмінність - файл із екранною заставкою має розширення*.scr(від англ.screen- екран) а не*.exe, як програма . Тим не менш, екранна заставка - та ж програма.
Подумаємо, яким чином ми можемо реалізувати таку заставку у вигляді годинника. Відповідь напрошується сама собою: встановити в центрі екрану звичайну панель, на якій у властивості Caption виводити поточний час. Однак це нудно. Нехай ця панель ще й переміщається екраном по випадковій траєкторії! Щоб реалізувати такий проект, нам доведеться вивчити пару речей: системний таймер TTimer і функцію-генератор випадкових чисел Random().
Реалізація проекту
Взагалі, спочатку потрібно розробити алгоритм програми.
Але наш проект досить простий, тому алгоритму як такого немає. Почнемо проект, за необхідності розробляючи алгоритм подальших дій у ході справи. ВідкрийтеLazarusз новим проектом, властивість Name головної форми відразу перейменуйте fMain . Збережіть проект у папку11-01під ім'ямMyClock, а модуль головної форми назвіть Main .
Тепер займемося вікном.Оскільки вікно заставки не повинно мати системного рядка, властивість BorderStyle встановимо в bsNone . Оскільки це вікно має займати весь екран, властивість WindowsState переведемо в wsMaximized . Властивість Color встановимо в clBlack, щоб форма стала чорною. І ще: властивість форми Cursor переведемо в crNone, щоб у працюючій заставці не було видно покажчика миші (навіщо вона там?).
Ходімо далі. Встановимо на форму мітку TLabel. Не звертайте уваги, що на чорному тлі її поки що не видно на формі. Змінимо у неї деякі властивості:
- Name = lClock (так ми будемо звертатися до мітки в програмному коді; l - скорочення від label - мітка, Clock - годинник)
- Caption = 00:00:00
- Font = Times New Roman, жирний курсив, 48 пікселів. Виберіть колір шрифту жовтий.
- ParentColor = True (це змусить мітку завжди зливатися з формою, а колір шрифту контрастуватиме із загальним фоном)
Якщо ви забули, як налаштувати властивості шрифту, то нагадаю: потрібно виділити властивість Font, потім натиснути на кнопку з трьома точками у правій частині властивості, вІнспекторі об'єктів:
Відкриється вікно, де ви зможете вибрати шрифт, зображення, розмір і колір шрифту. Можете вибрати свої кольори для шрифту та панелі, головне, щоб вони контрастували один з одним, і добре поєднувалися із чорним кольором форми, який ми встановимо пізніше.
В результаті виконаних дій у вас має вийти приблизно таке вікно:

Не хвилюйтеся з приводу того, що вікно поки що маленьке, а системний рядок та обрамлення вікна є – коли програма буде працювати, вікно займе весь екран, якщо ви не наплутали з параметрами форми.
Компонент TTimer
Настала черга таймера. Він нам потрібен, щоб змусити напис мітки змінюватися – показуватипоточний час . Крім того, завдяки цьому компоненту ми зможемо забезпечити безперервний рух.
Таймер TTimer знаходиться на вкладціSystem Палітри компонентів:
Компонент цейневізуальний- невидимий для користувача, тому його можна встановити в будь-яке місце на формі, щоб він вам не заважав при проектуванні форми, не перекривав інші компоненти. Компонент буде вам видно, незважаючи на чорний колір форми.
У компонента є всього за однією властивістю та подією, які нам можуть знадобитися:
Interval – це властивість встановлює інтервал часу, коли таймер спрацює. За замовчуванням він дорівнює 1000, що відповідає 1 секунді. Це нам і потрібно, тому залишимо значення якості без змін. А на майбутнє запам'ятайте: якщо вам потрібно встановити інший час, то множте необхідну кількість секунд на 1000 і отримайте те, що потрібно.
Далі, переходимо вІнспекторі об'єктівна вкладкуПодії. Нас цікавить лише одна подія:
OnTimer - подія спрацьовує щоразу, коли закінчується встановлений інтервал. Згенеруйте код цієї події так само, як раніше генерували подію OnClick для кнопок, ми заповнимо його трохи пізніше.
Ось тепер нам потрібно продумати алгоритм дій - як ми рухатимемо напис. Ідея така: згенеруємо випадкове число від 0 до 3, вийде 4 варіанти. Адже у нас є 4 напрямки, куди рухатися: вгору, вниз, ліворуч чи праворуч. Залежно від отриманого випадкового числа вибиратимемо і напрямок руху. Двигати будемо, скажімо, на 50 пікселів вліво-вправо, або на 25 пікселів вгору-вниз. Як рухати? Так, дуже просто! Left – це відстань у пікселях від лівого краю форми до компонента. Припустимо, у мітки Left дорівнює 100. Тобто від краюформи до позначки 100 пікселів. Якщо ми додамо ще 50, то тим самим зрушимо мітку вправо, а якщо навпаки, віднімемо, то зрушимо вліво. Для руху вгору-вниз використовуємо властивість Top – відстань від верхньої частини форми до компонента. Рухи будуть аналогічними, але на 25 пікселів.
Якщо отримаємо напрямок 0, то рухатимемо праворуч: додавати до властивості Left мітки 50 пікселів. Якщо напрямок 1, то рухаємо вліво, забираючи 50 пікселів від властивості Left. Якщо напрямок 2, то рухаємо вниз: додаємо 25 пікселів до властивості Top мітки. Ну і якщо напрямок 3, то рухаємося вгору, додаючи 25 пікселів до властивості Top .
Причому може статися так, що напис опиниться за межами вікна. У цьому випадку нам потрібно буде повернути її назад у ці межі. Зробимо це наступним чином: якщо мітка пішла вліво, то властивості Left просто надамо значення 0 - мітка повернеться в межі форми і виявиться притиснутою до лівого краю.
Якщо мітка пішла за правий край, то надамо властивості Left ширину форми мінус ширину мітки, таким чином, мітка виявиться притиснутою до правої частини форми і буде в її межах.
Так само будемо повертати мітку, якщо вона піде вгору або вниз за межі форми.
Значить, нам знадобиться тільки одна ціла змінна , в яку ми будемо генерувати напрямок - 4 позиції. Для цього використовуємо функцію Random(), яку ще називаютьгенератором випадкових чисел.
Random() - функція повертає випадкове число (англ.random- випадковий) від 0 до вказаної кількості чисел мінус один. Синтаксис дуже простий:
Функція поверне випадкове число від 0 до - 1. Тобто у випадку
у змінну i потрапить випадкове число від 0 до 3. Цим ми скористаємося. А щоб не витрачати зайву пам'ятьзмінну i оголосимо з типом byte.
Незважаючи на амбітну ідею, код події OnTimer буде досить простий:
Ось і весь код! Вам може виявитися незрозумілим рядок
Таким чином, ми надамо властивості Caption мітки lClock поточний час . Роботі з датою та часом у нас буде присвячена наступна лекція, тож поки що на цьому не зациклюйтесь. Весь інший код має бути зрозумілим.
Власне, перевірити роботу заставки можна вже зараз, тільки не забудьте заздалегідь зберегти зміни. Щоб закрити вікно, яке не має для цього кнопок і меню , скористайтеся стандартними кнопками Windows.
Але заставка на цьому ще не закінчена. Насамперед, через включену налагоджувальну інформацію програма має великий розмір, майже 15 мегабайт! Крім того, ми отримали exe-файл, а нам потрібна заставка з розширенням*.scr. Виправляємо ці недоліки:
- Вибираємо команду менюПараметри проекту>.
- У розділі вибираємо підрозділ.
- У полі замістьMyClockвказуємоMyClock.scr(тобто додаємо потрібне розширення).
- Відключаємо прапорець, щоб не було конфлікту розширень.
- У розділі переходимо на підрозділ.
- Відключаємо прапорець, щоб зменшити розмір отриманого файлу.
- Зберігаємо проект і заново його запускаємо. В результаті в папці11-01отримуємо необхідний файлMyClock.scrрозміром трохи більше 1,5 мегабайта.
Якщо вас влаштовує, що для закриття заставки доводиться натискати, то нічого більше робити не потрібно. Але мені хотілося б, щоб цю заставку можна було закрити кнопкою (код якої 27 в таблиці символів ANSI ), як будь-яку іншу нормальну заставку. А для цього доведеться трохи доопрацювати проект.
Поверніться доРедактор форм, і виділіть саму форму. УІнспекторі об'єктівперейдіть на закладкуПодіїі згенеруйте подію форми OnKeyPress, яка спрацьовує при натисканні на будь-яку кнопку:

Його код дуже простий:
Збережіть проект і знову запустіть його. Заставка повинна закриватися при натисканні клавіші .Lazarusнам більше не потрібний, можете його закрити.
Встановлення заставки у Windows
Більшість із вас напевно знає, як отриману заставку встановити у своїй Windows. Для тих, хто цього таки не знає, розповім докладно:
- Знайдіть файлMyClock.scr, він має бути в папці11-01, де ви зберігаєте проекти.
- Скопіюйте цей файл у папкуC:\Windows
- Клацніть правою кнопкою на вільне від вікна місцеРобочий стілі виберіть "Властивості".
- У вікні "Властивості: Екран" перейдіть на вкладку "Заставка".
- Там виберіть нашу заставку та потрібний інтервал її появи, після чого натисніть :

Якщо користувач протягом зазначеного інтервалу не рухатиме мишею і не натисне жодної клавіші, то з'явиться наша заставка. На сьогодні це все.