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



; //изменение времени

> reg: TRegistry; //для работы с реестром

> JokeNum: shortint; //номер шутки, которую следует выполнить

> curs: TRect; //координаты прямоугольника

Все шутки будут описаны в обработчике события таймера OnTimer.

Добавьте в этот обработчик следующий код:

>procedure TForm1.Timer1Timer(Sender: TObject);

>begin

> JokeNum:= Random(10) + 1; //Выбираем случайный номер шутки

> case JokeNum of //выполняем шутку

> 1: begin

>  //код первой шутки

> end;

> 2:

> begin

>  //код второй шутки

> end;

> 3: begin

>  //код третьей шутки

> end;

> 4: begin

>  //код четвертой шутки

> end;

> 5: begin

>  //код пятой шутки

> end;

> 6: begin

>  //код шестой шутки

> end;

> 7: begin

>  //код седьмой шутки

> end;

> 8: begin

>  //код восьмой шутки

> end;

> 9: begin

>  //код девятой шутки

> end;

> 10: begin

>  //код десятой шутки

> end;

> end;

>end;

Это шаблон для генератора шуток. Здесь выбирается случайное число от 1 до 10, которое будет определять, какую из шуток выполнить на этой минуте. Далее будут представлены фрагменты кода, выполняющие определенные действия, которые следует вставлять вместо комментария в соответствующую ветку конструкции case.

Шутка №1 — ограничение диапазона движения мыши

Итак, первая шутка заключается в наложении ограничения на диапазон движения мыши:

>сurs:= Rect(0, 0, Screen.Width div 2, Screen.Height);

>ClipCursor(@curs);

После этого указатель мыши можно будет перемещать только в одной половине экрана.

Шутка №2 — отключение кнопок мыши

Вторая шутка будет более радикальной: используя перехваты функций, отключим кнопки мыши — ни левая, ни правая, ни средняя кнопка не будут выполнять никаких действий. Для этого напишите в разделе implementation следующую функцию:

>function KbHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;

>begin

> if code < 0 then

>  Result:= CallNextHookEx(oldKbHook, code, wparam, lparam)

> else

>  Result:= 1;

>end;

После этого напишите код для второй шутки:

>SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy,0);

>SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);

>OldKbHook:= SetWindowsHookEx(WH_mouse, @KbHook, HInstance, 0);

После этого ни одна из кнопок мыши функционировать не будет.

Шутка №3 — отключение клавиатуры

Используя функцию для отключения мыши, можно написать код для отключения клавиатуры. Напишите такой код для третьей шутки:

>SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);

>SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);

>OldKbHook:= SetWindowsHookEx(WH_KEYBOARD, @KbHook, HInstance, 0);