VR
Virtual Reality On-line   Delphi
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Delphi Графика.
Пишем Screensaver в Delphi
:
LiteX

Объяснять, что за зверь этот Screensaver , думаю, не стоит, это и так всем уже известно, но вот как самому его сделать знает не каждый (или этому сейчас еще в садике обучают?), впрочем, если ты знаешь, как его написать то дальше ты читать не станешь, а если еще не знаешь, то скоро узнаешь.

Хочу сразу оговорить, что крутой графики в нашем хранителе не будет. Это уже идет совсем другая история.

Итак, если ты еще здесь то приступим. Screensaver это простой .exe’шный файл, вот только расширение у него не .ехе а .scr, поэтому создавать мы будим обычное приложение, а с расширением потом разберемся.

Если готов то запускай Delphi, дави крысой File>New>Application.Далее делаем так, чтобы нашу форму никто не мог «перекрыть». Для этого для свойства формы FormStyle устанавливаем значение равное “fsStayOnTop” (без кавычек соответственно). Для свойства “Color” (всё той же формы) устанавливаем значение “clBlack”, для свойства “BorderStyle” значение bsNone и для свойства “WindowState” устанавливаем значени равное “wsMaximized”. (*Все выше указанные действия можно было сделать или в инспекторе объектов или программно. Я это сделаю программно *).

Идем дальше. Теперь нам понадобятся 5 процедур:

1)FormСreate –Скрываем курсор мыши и производим несколько. настроек

2)OnTime –здесь код самой заставки

3)OnMouseMove-отлавливаем движение мыши.

4)FormHide –Показываем Курсор.

5)TimeToExit –Процедура для обработки сообщений.

Ну а теперь собственно, то ради чего мы и собрались…

Опиши в разделе var твоего .unit’a новую переменную с именем crs типа Tpoint.В ней мы будем хранить координаты мыши во время запуска проги.

Расположи на форме компонент Timer c закладки System и создай обработчик события OnTimer для него, затем напиши там следующую строчку:

Form1.Canvas.TextOut(random(Form1.ClientWidth),random(Form1.ClientHeight),'@');

Суть этой строки такова, в произвольном порядке на холсте формы рисуется символ ‘@’ с помощью процедуры TextOut, которая имеет 3 значения: 1-ое координата –Х-, 2-ое координата –Y- и 3-я текст для вывода (напомню только, что координата –Х- это горизонтальная, а –Y- вертикальная соответственно).

Вообще говоря здесь ты можешь вставить свой код для заставки так как создание крутых изображений выходит за рамки статьи то я ограничился простым кодом, но ты можешь пойти дальше меня и написать что нибудь своё намного поинтересней этого, но помни и о процессоре который всё это будет выполнять, так что не стоит грузить его на 100% одной заставкой.

Вторая остановка.

Теперь создай обработчик события OnСreater для формы, затем напиши там следующий код:


 RanDoMiZe;
 //Устанавливаем интервал для таймера
 Timer1.Interval:=300;
 //Устанавливаем обработчик событий для сообщений
 Application.OnMessage:=TimeToExit;
 //Убираем курсор с глаз
 ShowCursor(False);
 with Form1 do
   begin
    //Даем размер шрифта на холсте
    Canvas.Font.Size:=17;
    //Даем имя шрифта на холсте
    Canvas.Font.Name:='COmicSansMs';
    // Даем  боевую раскраску шрифта на холсте
    Canvas.Font.Color:=clRed;
    //Получаем позицию курсора
    GetCursorPos(crs);
    //Настраиваем форму

    //Скрываем Заголовок
    BorderStyle:=bsNone;
    //Чтоб нас никто не перекрыл
    FormStyle:=fsStayOnTop;
    //Цвет для формы
    Color:=clBlack;
    //Чтоб повсюду были только мы
    WindowState:=wsMaximized;
   end;

Думаю пояснять код не стоит. Там ничего сложного нет. Скажу только, что -With-придумали для ленивых, т.е. чтоб не писать все время (допустим)


 Object1.Properties1 
  ………
 ObjectN.PropertiesN

Можно записать


 with Object1 do
  Begin
   Properties1;
   PropertiesNl
  End;

Как ты уже догадался то, что стоит между With do автоматически прибавляется к тем свойствам, что стоят между begin end;

Остановка намба фри.

В радела interface опиши следующую процедуру:

Procedure TimeToExit(var Msg : TMsg; var Handled : boolean);

Затем кликай по ней правой кнопкой крысы и дави на “Complete class at cursor”.

В появившейся процедуре напиши следующие.


//ЕСли полученно сообщени
if  (Msg.message = WM_KEYDOwn) //Нажата кнопка на клаве
   or (Msg.message = WM_LButtonDown)//Наж. левая кнопка на крысе
    or (Msg.message = WM_RButtonDown)//..правая
    or (Msg.message = WM_SysKeyDown)//Нажата системная кнопка
    or (Msg.message = WM_MButtonDown)//Нажата средняя кнопка мыши

     then close;

А для движения мыши мы сделаем отдельно.

Эта процедура у нас отвечает за сообщения от Окошек т.е. если windoz послала сообщение то именно эта процедура будет его обрабатывать. Посылаемое сообщение хранится в параметре Msg.message.

Едем дальше.

Создай обработчик события OnMouseMove для формы, затем напиши там следующий код:


if (abs(crs.X-X) > 5)
 or (abs(crs.Y-Y) > 5) then close;

Убираем заставку только тогда, когда мышка сдвигается больше чем на 5 папугаев.

Едем ещё дальше.

Создай обработчик события OnHide для формы, затем напиши там следующий код:


//Запрещаем сообщения
Application.OnMessage:=nil;
//Возращаем курсору видимость
ShowCursor(True);

Ну вот в принципе и всё, что я хотел сегодня рассказать. Хотя еще нет. Я ж блин забыл про расширение и про запуск хранителя. Так вот расширение просто можно переименовать (к примеру в DOS нафигаторе), а включить можно так: кидай переименованный файл в каталог винды и потом в свойствах экрана ставь хранителя на пост охраны монитора.

Вот теперь всё. Если возникнуть вопросы то пиши, постараюсь ответить.


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©