Парижский С. М. Delphi УЧИМСЯ НА ПРИМЕРАХ Под редакцией Ю. А. Шпака "МК-Пресс" Киев, 2005 Введение Глава 1 Интерфейс в стиле Windows XP Глава 2 Работа с файлами Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 3 Работа с текстом. Статистика документа Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 4 Снимок экрана Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 5 Хранитель экрана Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 6 Программа просмотра рисунков Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 7 Блокнот-шифровальщик Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 8 Игра "Успей щелкнуть" Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 9 Игра "Угадывание чисел" Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 10 Вход в систему Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 11 Информация о памяти Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 12 Программа настройки Windows Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 13 Тест Постановка задачи Структура базы вопросов и ответов Разработка формы Разработка программного кода Полный исходный код модуля Глава 14 Генератор шуток Постановка задачи Разработка формы Разработка программного кода Шутка №1 — ограничение диапазона движения мыши Шутка №2 — отключение кнопок мыши Шутка №3 — отключение клавиатуры Шутка №4 — очистка буфера обмена Шутка №5 — назначение фона для Рабочего стола Шутка №6 — выбор фона случайным образом Шутка №7 — выключение монитора Шутка №8 — сообщение об ошибке, содержащее "мусор" Шутка №9 — открытие браузера Internet Explorer Шутка №10 — сброс системной даты/времени Полный исходный код модуля Глава 15 Отправка сообщений в локальной сети Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 16 Удаленное управление указателем мыши Постановка задачи Разработка клиентской программы Разработка формы Разработка программного кода Разработка серверной программы Полный исходный код модулей Глава 17 Бесплатная отправка SMS через Internet Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 18 FTP-клиент Постановка задачи Разработка формы Разработка программного кода Полный исходный код модуля Глава 19 Написание CGI-приложений Постановка задачи Разработка проекта Приложение А Коды клавиш и их значения Приложение Б Kylix — Delphi для Linux Приложение В Справочник по реестру Windows Общая настройка ПК Изменение разрешения экрана Установка задержки перед появлением контекстного меню Сокрытие изображение стрелки на ярлыках Сокрытие приставки "Ярлык для…" Запрет на редактирование реестра Отключение динамика ПК Включение динамика ПК Отключение возможности автозапуска с CD-ROM Отключение всплывающих подсказок в Проводнике и на Рабочем столе Автоматическое наведение указателя мыши на активную кнопку Отключение возможности открывать диспетчер задач Отключение возможности восстановления системы Очистка swap при выключении компьютера Изменение размещения папок и каталогов Изменение размещения папки Избранное Изменение каталога по умолчанию для программ Сокрытие пунктов системного меню Пуск Сокрытие пункта Пуск#8594;Найти Сокрытие пункта Пуск#8594;Программы#8594;Стандартные Сокрытие пункта Пуск#8594;Избранное Сокрытие пункта Пуск#8594;Документы Сокрытие пункта Пуск#8594;Панель управления Сокрытие пункта Пуск#8594;Выполнить Сокрытие пункта Пуск#8594;Настройка#8594;Принтеры Сокрытие пункта Пуск#8594;Настройка#8594;Панель задач Сокрытие пункта Пуск#8594;Завершение сеанса Сокрытие пункта Пуск#8594;Выключить компьютер Сокрытие всех дополнительных папок в меню Пуск Сокрытие папки Мои документы в меню Пуск Сокрытие различных элементов интерфейса Сокрытие дисков в папке Мой компьютер Сокрытие пиктограммы Принтеры в панели управления Сокрытие вкладок Общие и Сведения в окне свойств принтера Настройка Рабочего стола Сокрытие всех элементов Рабочего стола Сокрытие пиктограммы Internet на Рабочем столе Сокрытие пиктограммы Сетевое окружение на Рабочем столе Отключение возможности вызывать окно свойств экрана Отключение контекстного меню панели задач Отключение контекстного меню Рабочего стола Сокрытие папки Мои документа на Рабочем столе Сокрытие вкладок окна свойств экрана Сокрытие вкладки Оформление Сокрытие вкладки Фон Сокрытие вкладки Заставка Сокрытие вкладки Параметры Настройка браузера Internet Explorer Сокрытие команд меню, кнопок и панелей Сокрытие элементов окна Свойства обозревателя Общая настройка браузера Приложение Г Язык ObjectPascal Комментарии Идентификаторы Встроенные типы данных Числовые типы Символьный тип Строковые типы Булев тип данных Массивы Константы Переменные Пользовательские типы данных Множества Перечислимые типы Подтипы Записи Классы Определение членов класса Свойства класса Методы класса Конструкция with-do Структура проекта Delphi Файл проекта .dpr Файл программного модуля .pas Процедуры и функции Параметры Вызов процедур и функций Досрочный выход из процедуры или функции Операторы Оператор присваивания Арифметические операторы Булевы операторы Операторы сравнения Побитовые операторы Строковые операторы Операторы, применяемые к множествам Операторы, применяемые с объектами Группировка операторов Порядок выполнения операторов Блоки программного кода Конструкции ветвления Оператор if Оператор case Циклические конструкции Конструкция for-do Конструкция while-do Конструкция repeat-until Досрочный выход из циклов Обработка исключений Блок операторов finally
Разработка программного кода Изменение формы окна на эллиптическую реализуется в обработчике события OnCreate формы. Для этого необходимо объявить глобальную переменную forma типа HRGN, которая будет содержать размеры окна:
var
Form1: TForm1;
forma: HRGN;
В обработчик события OnCreate добавьте следующий код:
procedure TForm1.FormCreate(Sender: TObject)
begin
Randomize;//включаем генератор случайных чисел
forma:= CreateEllipticRgn(0, 0, Form1.Width, Form1.Height); //вид окна
//применяем новый вид окна
SetWindowRgn(Handle, forma, True);
end;
Здесь мы задаем окно в виде эллипса и применяем новый вид окна.
Каждую секунду форма должна случайным образом менять свои координаты в пределах экрана. Это будет реализовано в обработчике события Timer1.OnTimer:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Top:= Random(Screen.Height) + 1; //случайная высота
Form1.Left:= Random(Screen.Width) + 1; //случайная ширина
end;
Здесь мы определяем высоту и ширину экрана, выбираем случайные координаты, не выходящее за пределы экрана, и перемещаем в них окно программы.
Теперь выделите все компоненты и саму форму и создайте для них общий обработчик события OnMouseDown:
procedure TForm1.popadMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if StrToInt(popad.Caption) lt; 10 then begin //если попаданий меньше 10
//Перемещаем окно в случайную позицию по вертикали
Form1.Top:= Random(Screen.Height) + 1;
//Изменяем положение по горизонтали
Form1.Left:= Random(Screen.Width) + 1;
//Увеличиваем счетчик "попаданий" на единицу
popad.Caption:= IntToStr(StrToInt(popad.Caption) + 1);
//Увеличиваем скорость перемещения окна на 100 мс
Timer1.Interval:= Timer1.Interval – 100;
end;
if popad.Caption = '0' then begin //если игрок попал 10 раз
Timer1.Enabled:= False; //останавливаем игру
Form1.Position:= poDesktopCenter; //окно – в центр экрана
//сообщаем о победе
ShowMessage('Вы попали по окну 10 раз!');
if Application.MessageBox('Игра', 'Играть еще раз?', mb_yesno + mbtaskmodal + mb_iconQuestion) = idYes
then {предлагаем сыграть еще раз}
begin
popad.Caption:= '0'; //сброс результатов
//Придаем окну эллиптическую форму
forma:= CreateEllipticRgn(0, 0, Form1.Width, Form1.Height);
SetWindowRgn(Handle, forma, True);
//Устанавливаем начальную скорость перемещения окна
Timer1.Interval:= 1000;
Timer1.Enabled:= True; //начинаем игру
end
else Halt; //выход из игры
end;
end;
При каждом "попадании" выполняется проверка: было ли это "попадание" последним. Если да, то просто пополняем счетчик попаданий и увеличиваем скорость перемещения формы на 100 мс. Если игрок сделал последнее "попадание", то останавливаем игру, выводим окно в центр экрана и показываем сообщение о том, что игра успешно окончена. После этого отображаем окно с вопросом: следует ли начинать игру заново. Если пользователь отказывается играть, то просто выходим из программы. Если пользователь хочет сыграть сначала, то обнуляем все результаты и начинаем игру заново.
Окно программы в процессе игры представлено на рис. 8.2.
Рис. 8.2. Игра "Успей щелкнуть" в действии