Главная » 2D графика » Профессиональное создание хранителей экрана

RSS

Профессиональное создание хранителей экрана

Создание хранителей экрана

Данная статья, до некоторого времени путешествовала по просторам сайтов русской документации в совершенно первобытном виде – в ней были множественные ошибки, у неё часто менялись авторы-переводчики, но что самое главное – у нее не было рабочего примера! Количество ошибок при переписывании статьи достигло такого количества, что при компиляции проект на 100% не работал.

Я переписал пример, добавил в него некоторые улучшения и сделал после статьи послесловие, которое возможно интереснее самой статьи. Итак читайте бестселлер всех серверов документации по Delphi, статью скрывавшуюся под различными названиями о создании ScreenSaver’а:

Главное о чем стоит упомянуть это, что ваш хранитель экрана будет работать в фоновом режиме и он не должен мешать работе других запущенных программ. Поэтому сам хранитель должен быть как можно меньшего объема.

Для уменьшения объема файла в описанной ниже программе не используется визуальные компоненты Delphi (VCL), включение хотя бы одного из них приведет к увеличению размера файла свыше 200 кб, а так, описанная ниже программа, имеет размер всего ~ 20 – 30 кб, в зависимости от версии компилятора. В конце статьи я приведу ещё пару приемов, которые смогут сократить размер приложения до десятков кб.

Технически, хранитель экрана является нормальным PE файлом, который управляется через командную строку. Например, если пользователь хочет изменить параметры вашего хранителя, Windows выполняет его с параметром «c» в командной строке. Поэтому начать создание вашего хранителя экрана следует с создания примерно по следующему каркасу:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Program DelphiScreenSaver;
Uses Windows, Messages;
{$R SETTINGS.RES}
Var
...
Function A1;
Function A2;
Procedure A1;
Procedure A2;
...
Begin
  LoadSettings;
  If ParamCount > 0 Then
  Begin
    If Length(ParamStr(1)) = 1 Then
    Command := ParamStr(1)[1]
    Else Command := ParamStr(1)[2];
    Case Command Of
      'C', 'c': RunSettings;
      'P', 'p': RunPreview;
      'A', 'a': RunSetPassword;
      'S', 's': RunFullScreen;
    End;
  End Else RunSettings;
End.

Поскольку нам нужно создавать небольшое окно предварительного просмотра и полноэкранное окно, их лучше объединить, используя единственный класс окна. Следуя правилам хорошего тона, нам также нужно использовать потоки. Дело в том, что, во-первых, хранитель не должен переставать работать даже если что-то «тяжелое» случилось, и во-вторых, нам не нужно использовать таймер.

Страницы : 1 2 3 4 5

Таги: ,