Delphi. Учимся на примерах - страница 8

стр.

>

>begin

> Form1.Visible:= False; //прячем форму

> Sleep(15);//пауза 15 мс

> BMP1:= Graphics.TBitmap.Create;

> //задаем размеры рисунка такие же как размеры экрана

> ВМР1.Height:= Screen.Height;

> BMP1.Width:= Screen.Width;

> DC1:= GetDC(0);

> //Делаем снимок экрана

> BitBlt(BMP1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY);

> Form1.Visible:= True; //восстанавливаем окно программы

> Image1:= TImage.Create(nil);

> BMP1.IgnorePalette:= True;

> Image1.Picture.Assign(BMP1);

> BMP1.SaveToFile('с:\1.bmp'); //сохраняем снимок в файл

>  //1.bmp на диске С:\

>end;


>procedure TForm1.Button2Click(Sender: TObject);

>begin

> if SaveDialog1.Execute then

>  BMP1.SaveToFile(SaveDialog1.FileName) //сохраняем рисунок

> else ShowMessage('Файл не был сохранен!');

>end;


>procedure TForm1.Button3Click(Sender: TObject);

>begin

> //удаляем рисунок с диска

> if FileExists('с:\1.bmp') then DeleteFile('C:\1.bmp');

> Screen1.Hide; //скрываем рисунок

>end;


>procedure TForm1.Button4Click(Sender: TObject);

>begin

> Screen1.Show; // делаем рисунок видимым

> if FileExists('с:\1.bmp') then //если рисунок существует,

>  Screen1.Picture.LoadFromFile('с:\1.bmp');//загружаем его

>end;


>end.

⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter04.

Глава 5

Хранитель экрана

Постановка задачи

Разработать хранитель экрана для Windows (файл с расширением *.scr). Форма масштабируется на весь экран, заголовок скрывается, а любые действия пользователя должны прекращать работу программы. Случайным образом выбирается цвет формы, затем происходит ее плавное насыщение случайно выбранным цветом. Первоначально форма полностью прозрачная. Когда она станет полностью непрозрачной, следует медленно убирать насыщенность цвета, пока она опять не станет прозрачной. После этого вновь выбирается случайный цвет для насыщения, и описанный процесс повторяется сначала.

Разработка формы

Создадим новый проект Delphi. Как известно, экранные заставки хранятся в файлах с расширением .scr, а по умолчанию проект Delphi компилируется как выполняемый файл .exe. Для того чтобы наша программа имела расширение .scr, выполним команду меню Project→Options, на вкладке Application диалогового окна Project Options введем в поле Target file extension значение scr (рис. 5.1) и нажмем кнопку OK.

Все что нам понадобится на форме, — это два компонента Timer категории System. Первый будет служить для реализации постепенного насыщения формы цветом — для этого таймера следует изменить значение свойства Interval на 100. Второй таймер потребуется при постепенном уменьшении насыщенности цвета вплоть до того момента, когда форма вновь станет полностью прозрачной. Для этого таймера свойству interval следует также присвоить значение 100, а значение свойства Enabled изменить на False, поскольку изначально "затухания" происходить не будет.

Рис. 5.1. Выбор расширения для откомпилированной программы

Изменим свойства формы согласно табл. 5.1.

Таблица 5.1. Свойства формы хранителя экрана

Свойство Значение Пояснение
BorderStyle bsNone Окно программы будет отображаться без границы и заголовка
Align alClient Окно программы будет заполнять весь экран
FormStyle fsStayOnTop Окно программы будет располагаться поверх всех остальных окон
AlphaBlend True Разрешаем изменение степени прозрачности формы
AlphaBlendValue1Изначально окно программы полностью непрозрачное

Разработка программного кода

Объявите в разделе var переменную mouse типа TPoint. В этой переменой будут храниться координаты указателя мыши, при изменении которых программа должна закрываться:

>var

> Form1: TForm1;

> mouse: TPoint;

Программа экранной заставки должна закрываться не только по движению мыши, но при любой активности пользователя. Для этого создадим обработчики некоторых событий главной формы. Создание формы (событие OnCreate):

>procedure TForm1.FormCreate(Sender: TObject);

>begin

GetCursorPos(mouse); //сохраняем координаты курсора мыши

> ShowCursor(False); //прячем курсор

>end;

Форма должна закрываться по нажатию любой клавиши (событие OnKeyPress) и при движении мышью (событие OnMouseMove). Код обработчика события OnKeyPress: