Delphi. Учимся на примерах - страница 9
>procedure TForm1.FormKeyPress(Sender: TObject; var Key:Char);
>begin
> Halt;//завершение работы программы
>end;
Для события OnMouseMove программный код будет несколько иным:
>procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
>begin
> if (X <> mouse.X) or (y <> mouse.Y) then Halt;
>end;
Здесь сначала выполняется проверка: были ли изменены координаты курсора. Если координаты курсора изменились, то, соответственно, мышь была сдвинута и следует закрыть программу.
Напишем собственную процедуру для выбора случайного цвета: color_check. Объявите ее как закрытый член класса формы:
>type
> TForm1 = class(TForm)
> …
>private
> { Private declarations }
> procedure color_check();
>public
> { Public declarations }
>end;
В разделе implementation создадим реализацию процедуры color check:
>procedure TForm1.colorcheck();
>var
> ran: integer; //случайное число, соответствующее
> //определенному цвету
>begin
> Randomize; //включаем генератор случайных чисел
> ran := random(6) + 1; //выбираем случайное число от 1 до 6
> //назначаем форме цвет, соответствующий выбранному числу
> case ran of
> 1: Form1.Color:= clBlack;
> 2: Form1.Color:= clWhite;
> 3: Form1.Color:= clBlue;
> 4: Form1.Color:= clGray;
> 5: Form1.color:= clYellow;
> 6: Form1.Color:= clGreen;
> end;
>end;
Здесь случайным образом выбирается число от 1 до 6, в зависимости от того которого определяем цвет формы. Процедура color_check будет вызываться при каждом новом насыщении формы.
Обработчик события OnTimer первого таймера должен иметь следующий вид:
>procedure TForm1.Timer1Timer(Sender: TObject);
>begin
> if Form1.AlphaBlendValue > 250
> then {проверяем: не полностью ли мы закрасили форму}
> begin
> Timer1.Enabled:= False; //выключаем насыщение формы
> Timer2.Enabled:= True; //включаем обратный процесс
> end;
> //постепенное насыщение формы
> Form1.AlphaBlendValue:= Form1.AlphaBlendValue + 1;
>end;
Насыщенность постепенно увеличивается на 1, и выполняется проверка: не стала ли форма уже полностью закрашенной выбранным цветом. Если нет, то продолжаем увеличивать насыщенность цвета через каждые 100 мс. Когда форма будет полностью насыщенной, начинаем обратный процесс, который будет происходить под управлением второго таймера (событие Timer2.OnTimer):
>procedure TForm1.Timer2Timer(Sender: TObject);
>begin
> if Form1.AlphaBlendValue < 5
> then //если форма уже полностью прозрачная
> begin
> color_check(); //выбираем случайный цвет для формы
> Timer2.Enabled:= False; //выключаем второй таймер
> Timer1.Enabled:= True; //включаем первый таймер
> end;
> //Уменьшаем прозрачность на 1
> Form1.AlphaBlendValue:= Form1.AlphaBlendValue – 1;
>end;
Здесь через каждые 100 мс прозрачность формы уменьшается на 1. Когда форма становится полностью прозрачной, мы случайным образом выбираем другой цвет, выключаем таймер, по которому происходит уменьшение насыщенности цвета, и включаем первый таймер, который плавно увеличивает насыщенность цвета.
Теперь программу можно откомпилировать, скопировать файл .scr в папку с хранителями экрана (для Windows ХР это папка Windows\System32), открыть окно параметров Рабочего стола и выбрать хранитель экрана, соответствующий нашей программе.
Разработанный нами хранитель экрана в действии показан на рис. 5.2. В данном случае был случайным образом выбран желтый цвет заполнения и происходит медленное насыщение этим цветом. Можно разглядеть папки, которые видны сквозь полупрозрачную форму.
Рис. 5.2. Хранитель экрана в действии
Полный исходный код модуля
Полный исходный код модуля программы Хранитель экрана представлен в листинге 5.1.
>unit Unit1;
>interface
>uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
>type TForm1 = class(TForm)
> Timer1: TTimer;
> Timer2: TTimer;
> procedure FormCreate(Sender: TObject);
> procedure FormKeyPress(Sender: TObject; var Key: Char);
> procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
> procedure Timer1Timer(Sender: TObject);
> procedure Timer2Timer(Sender: TObject);
>private
> { Private declarations }
> procedure color_check();