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);