Скрінсейвер своїми руками

Бажання творити щось власними руками - це, на мій погляд, один з тих не самих істотних у великих масштабах, але вельми серйозних в масштабах однієї конкретної особистості двигунів прогресу, який дрімає всередині кожної людини. Тобто, звичайно, дрімає він не у всіх - у дуже багатьох він активно працює. Звичайно, проявлятися бажання творити може найрізноманітнішими способами, і, на мій погляд, програмування - хороший спосіб самовираження. Тому зараз я хочу розповісти тим з наших читачів, у кого є творча жилка програміста, про те, як створити власну заставку, відому також під іменами зберігача екрану і скрінсейвера.

Тому спочатку трохи про те, що собою скрінсейвер являє. Для користувача це заставка, яка з'являється на екрані, коли комп'ютер деякий час знаходиться без діла. З точки зору програміста, це звичайнісінька програма у вигляді EXE-файлу, правда, має кілька нестандартне розширення - SCR. Само собою, створити скрінсейвер можна за допомогою будь-якого середовища програмування для Windows; ми ж з вами скористаємося Delphi.

Це просто обробник системних подій: якщо система скаже знищити вікно, то воно знищиться, якщо скаже перемалювати - що ж, перерісуем. Тепер можна написати і, власне, процедуру відтворення прев'юшки:

Що ж, тепер давайте розбиратися. Спочатку оголошуються необхідні змінні - дескриптор батьківського (головного) вікна, клас нашого дочірнього вікна, а також змінна для обробки повідомлень. Спочатку ми витягуємо з параметрів командного рядка дескриптор батьківського вікна, після чого инициализируем клас свого. Як бачите, майже всі параметри встановлюються в нуль - значить, наше вікно не матиме ні іконки, ні меню, тільки ім'я класу "ScreenSaverClass01", теж закінчується нулем. Далі реєструємо клас вікна за допомогою процедури RegisterClass, а потім - отримуємо розміри області, яку ми повинні заповнити своїм вікном. Зробивши це, створюємо дочірнє вікно, потім створюємо канву, на якій будемо малювати (це просто VCL-обгортка над контекстом вікна "прев'юшки"), а потім йде стандартний для всіх Windows-додатків цикл обробки повідомлень. Як бачите, він може обірватися, тільки якщо того захоче сама система - а її це змусить захотіти користувач. Після переривання псевдобесконечного циклу ми "прибираємо сміття" - контекст вікна і канву.

Тепер буде йти процедура реакції головного вікна на різні системні повідомлення. Саме вона відповідає за закриття скринсейвера при різних діях користувача. Зручніше реалізувати її так, ніж вішати процедуру на все обробники подій нашої форми. Покладіть на форму компонент ApplicationEvents з закладки Additional. Двічі клікніть на подію onMessage в інспекторові об'єктів і заповніть процедуру наступним чином:

Тепер потрібно додати ще обробник події onIdle того ж компонента. Він буде містити всього два рядки:

Як бачите, тут ми просто малюємо - якраз в ті моменти, коли система нічим не зайнята. Що ж, тепер готове практично все. Залишається тільки поміняти деякі властивості головної форми і написати ще трохи коду. Властивості міняємо такі: колір (Color) на чорний (clBlack), BorderStyle ставимо в bsNone, а WindowState в wsMaximized. Робиться це все за допомогою інспектора об'єктів. Далі в меню "Project" вибираємо "View Source", оголошуємо змінну c типу char, додаємо в uses модуль Dialogs, стираємо все між begin і end і пишемо такі рядки:

Версія для друку

Схожі статті