Table Of ContentЧиртик Александр Анатольевич
Программирование в Delphi. Трюки и эффекты
Серия «Трюки и эффекты»
Заведующий редакцией А. Громаковский
Руководитель проекта Ю. Чернушевич
Ведущий редактор Н. Гринчик
Научный редактор Д. Романов
Корректоры В. Арон, А. Занина
Верстка Г. Блинов, В. Нога
ББК 32.973.23-018.2
УДК 004.9
Чиртик А. А.
Ч-65 Программирование в Delphi. Трюки и эффекты. — СПб.: Питер, 2010. — 400 с.:
ил. — (Серия «Трюки и эффекты»).
ISBN 978-5-49807-118-3
Как и все издания данной серии, эта книга адресована тем, кто хочет научиться делать с помощью
уже знакомых программных пакетов новые интересные вещи. Издание будет полезно и новичкам, и опыт-
ным программистам. Автор описывает удивительные возможности, скрытые в языке, и на примерах учит
читателя программистским фокусам — от «мышек-невидимок» и «непослушных окон» до воспроизведе-
ния MP3 и управления офисными программами Word и Excel из приложений Delphi. Купив эту книгу, вы
пройдете непростой путь к вершинам программистского мастерства весело и интересно.
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то
ни было форме без письменного разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых изда-
тельством как надежные. Тем не менее, имея в виду возможные человеческие или технические
ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых све-
дений и не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 978-5-49807-118-3 © ООО Издательство «Питер», 2010
ООО «Лидер», 194044, Санкт-Петербург, Б. Сампсониевский пр., 29а.
Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 95 3005 — литература учебная.
Подписано в печать 04.03.10. Формат 70×100/16. Усл. п. л. 32,25. Тираж 1500. Заказ 0000.
Отпечатано по технологии CtP в ОАО «Печатный двор» им. А. М. Горького.
197110, Санкт-Петербург, Чкаловский пр., 15.
Краткое содержание
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
От .издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Глава 1. Окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Глава 2. Уменьшение .размера .EXE-файла . . .
Использование .Windows .API . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Глава 3. Мышь .и .клавиатура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
Глава 4. Диски, .папки, .файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
Глава 5. Мультимедиа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
Глава 6. Использование .Windows .GDI . . . . . . . . . . . . . . . . . . . . . . . . .174
Глава 7. Системная .информация .и .реестр .Windows . . . . . . . . . . . . .201
Глава 8. Обмен .данными .между .приложениями . . . . . . . . . . . . . . . .243
Глава 9. Возможности .COM .в .Microsoft .Word .и .Microsoft .Excel . . . .256
Глава 10. Окна .других .приложений . . . . . . . . . . . . . . . . . . . . . . . . . . .268
Глава 11. Сетевое .взаимодействие . . . . . . . . . . . . . . . . . . . . . . . . . . .299
Глава 12. Шифрование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377
Приложение .1 . .Коды .и .обозначения .основных .клавиш . . . . . . . . . . .378
Приложение .2 . .Оконные .стили . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381
Приложение .3 . .Сообщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
Оглавление
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
От .издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Глава 1. Окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Привлечение .внимания .к .приложению . . . . . . . . . . . . . . . . . . . . . . . . . .11
Инверсия .заголовка .окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Активизация .окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Окно .приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Полупрозрачные .окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Окна .и .кнопки .нестандартной .формы . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Регионы . .Создание .и .использование . . . . . . . . . . . . . . . . . . . . . .21
Закругленные .окна .и .многоугольники . . . . . . . . . . . . . . . . . . . . .25
Комбинированные .регионы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Немного .о .перемещении .окон . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Перемещение .за .клиентскую .область . . . . . . . . . . . . . . . . . . . . .37
Перемещаемые .элементы .управления . . . . . . . . . . . . . . . . . . . .39
Масштабирование .окон . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Добавление .команды .в .системное .меню .окна . . . . . . . . . . . . . . . . . . .45
Отображение .формы .поверх .других .окон . . . . . . . . . . . . . . . . . . . . . . .46
Глава 2. Уменьшение .размера .EXE-файла . . .
Использование .Windows .API . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Источник .лишних .килобайт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Создание .окна .вручную . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
Окно .с .элементами .управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
Создание .элементов .управления . . . . . . . . . . . . . . . . . . . . . . . . .57
Использование .элементов .управления . . . . . . . . . . . . . . . . . . . .61
Реакция .на .сообщения .элементов .управления . . . . . . . . . . . . .66
Пример .приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Оглавление
Стандартные .окна .Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Окно .открытия .и .сохранения .файла . . . . . . . . . . . . . . . . . . . . . . .72
Окно .для .выбора .цвета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
Окно .для .выбора .шрифта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Окно .для .выбора .папки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
Окна .подключения .и .отключения .сетевого .ресурса . . . . . . . . .79
Системное .окно .О .программе . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Демонстрационное .приложение . . . . . . . . . . . . . . . . . . . . . . . . . .81
Установка .шрифта .элементов .управления . . . . . . . . . . . . . . . . . . . . . .87
Глава 3. Мышь .и .клавиатура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
Мышь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
Координаты .и .указатель .мыши . . . . . . . . . . . . . . . . . . . . . . . . . . .91
Захват .указателя .мыши . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
Ограничение .области .перемещения .указателя . . . . . . . . . . . . .94
Изменение .назначений .кнопок .мыши . . . . . . . . . . . . . . . . . . . . .95
Подсчет .расстояния, .пройденного .указателем .мыши . . . . . . . .96
Подсвечивание .элементов .управления . . . . . . . . . . . . . . . . . . .101
Клавиатура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
Получение .информации .о .клавиатуре . . . . . . . . . . . . . . . . . . . .102
Опрос .клавиатуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
Имитация .нажатия .клавиш . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
Бегущие .огни .на .клавиатуре . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
Глава 4. Диски, .папки, .файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
Диски . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
Сбор .информации .о .дисках . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
Изменение .метки .диска . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
Программа .просмотра .свойств .дисков . . . . . . . . . . . . . . . . . . .118
Папки .и .пути . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Системные .папки .WINDOWS .и .system . . . . . . . . . . . . . . . . . . . .121
Имена .временных .файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
Определение .прочих .системных .путей . . . . . . . . . . . . . . . . . . .124
Определение .и .установка .текущей .папки . . . . . . . . . . . . . . . . .127
Преобразование .путей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
Оглавление
Поиск . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
Построение .дерева .папок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
Файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144
Красивое .копирование .файла . . . . . . . . . . . . . . . . . . . . . . . . . . .144
Определение .значков, .ассоциированных .с .файлами . . . . . . .148
Извлечение .значков .из .EXE- .и .DLL-файлов . . . . . . . . . . . . . . . .150
Глава 5. Мультимедиа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
Воспроизведение .звука .с .помощью .системного .динамика . . . . . . .155
Использование .компонента .MediaPlayer . . . . . . . . . . . . . . . . . . . . . . .156
Компонент .Animate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
Разработка .звукового .проигрывателя . . . . . . . . . . . . . . . . . . . . . . . . .165
Видеопроигрыватель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
Глава 6. Использование .Windows .GDI . . . . . . . . . . . . . . . . . . . . . . . . .174
Графические .объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
Аппаратно-независимый .графический .вывод . . . . . . . . . . . . . . . . . .176
Контекст .устройства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
Экранный .контекст .устройства . . . . . . . . . . . . . . . . . . . . . . . . . .177
Контекст .устройства .принтера . . . . . . . . . . . . . . . . . . . . . . . . . .178
Контекст .устройства .памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Информационный .контекст .устройства . . . . . . . . . . . . . . . . . . .179
Графические .режимы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
Работа .со .шрифтами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
Рисование .примитивов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Работа .с .текстом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
Работа .с .растровыми .изображениями . . . . . . . . . . . . . . . . . . . . . . . . .191
Альфа-смешивание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Глава 7. Системная .информация .и .реестр .Windows . . . . . . . . . . . . .201
Системная .информация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Версия .операционной .системы . . . . . . . . . . . . . . . . . . . . . . . . .202
Имя .компьютера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207
Имя .пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
Состояние .системы .питания .компьютера . . . . . . . . . . . . . . . . .209
Оглавление
Состояние .памяти .компьютера . . . . . . . . . . . . . . . . . . . . . . . . . .211
Системное .время . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
Определение .времени .работы .операционной .системы . . . . .214
Аппаратный .таймер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
Мультимедиа-таймер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
Создание .программного .таймера .высокой .точности . . . . . . .219
Реестр . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Краткие .сведения .о .реестре .Windows . . . . . . . . . . . . . . . . . . . .221
Средства .работы .с .реестром . . . . . . . . . . . . . . . . . . . . . . . . . . . .223
Хранение .настроек .программы .в .реестре . . . . . . . . . . . . . . . . .225
Автозапуск .программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
Запуск .приложения .из .командной .строки . . . . . . . . . . . . . . . . .233
Регистрация .типов .файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
Программа .просмотра .реестра . . . . . . . . . . . . . . . . . . . . . . . . . .237
Глава 8. Обмен .данными .между .приложениями . . . . . . . . . . . . . . . .243
Сообщение .WM_COPYDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
Использование .буфера .обмена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247
Проецируемые .в .память .файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
Глава 9. Возможности .COM .в .Microsoft .Word .и .Microsoft .Excel . . . .256
Технология .OLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
Технология .COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
Использование .технологии .OLE .в .Delphi . . . . . . . . . . . . . . . . . . . . . . .258
Microsoft .Office .с .точки .зрения .COM . . . . . . . . . . . . . . . . . . . . . .258
Объект .Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
Класс .TOLEServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
Управление .Microsoft .Word .и .Microsoft .Excel . . . . . . . . . . . . . . . . . . . .261
Трюки .в .Microsoft .Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
Трюки .в .Microsoft .Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
Глава 10. Окна .других .приложений . . . . . . . . . . . . . . . . . . . . . . . . . . .268
Ловушки .Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269
Виды .ловушек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
Расположение .функции-ловушки .и .DLL . . . . . . . . . . . . . . . . . . .273
Оглавление
Программа .«Оконный .шпион» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
Составление .списка .открытых .окон . . . . . . . . . . . . . . . . . . . . . .274
Получение .информации .об .окне . . . . . . . . . . . . . . . . . . . . . . . . .277
Изменение .оконных .стилей . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
Перехват .сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
Глава 11. Сетевое .взаимодействие . . . . . . . . . . . . . . . . . . . . . . . . . . .299
Краткое .описание .сетевых .компонентов . . . . . . . . . . . . . . . . . . . . . . .300
Простой .обмен .данными . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
Слежение .за .компьютером .по .сети . . . . . . . . . . . . . . . . . . . . . . . . . . . .304
Многопользовательский .разговорник . . . . . . . . . . . . . . . . . . . . . . . . .311
Требования .к .клиентскому .и .серверному .приложениям . . . . .312
Формат .сообщений .клиента .и .сервера . . . . . . . . . . . . . . . . . . .312
Реализация .сервера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
Реализация .клиентского .приложения . . . . . . . . . . . . . . . . . . . .327
Глава 12. Шифрование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335
Основы .криптографии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337
Шифр .простой .подстановки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
Транспозиция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
Шифр .Виженера .и .его .варианты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356
Шифр .с .автоключом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .363
Взлом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377
Приложение .1 . .Коды .и .обозначения .основных .клавиш . . . . . . . . . . .378
Приложение .2 . .Оконные .стили . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381
Приложение .3 . .Сообщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
Введение
В настоящее время количество книг, посвященных различным языкам программиро-
вания, настолько велико, что иногда просто не знаешь, какую выбрать. Цель этой
книги — не просто тривиальное изложение материала о ������������... ���нннааа пппооомммооожжжеееттт ввваааммм
получить опыт в решении многих задач. В итоге вы получите необходимый базис
знаний, который даст возможность легко и быстро усваивать что-то новое. Здесь вы
найдете ответы на вопросы, которые возникают у большинства людей при разработке
своих собственных приложений. Вам больше не придется задумываться над тем, как
решать мелкие задачи, которые составляют значительную часть повседневной работы
большинства программистов. У вас появится возможность тратить больше времени
именно на основную цель, поставленную перед вами, а не на второстепенную.
Данная книга рассчитана на читателей, которые уже имеют некий опыт в програм-
мировании, причем достаточный, чтобы не излагать тривиальные вещи заново.
�днако сразу отмечу, пусть даже вы делаете свои первые шаги на пути к написанию
приложений на высоком уровне, — книга окажет вам неоценимую помощь. �на по-
строена так, чтобы вы смогли с высокой степенью эффективности узнавать новый
материал. В конце книги есть приложения в удобном для восприятия виде. В них
вы найдете информацию, которая часто используется при написании программ.
Зачастую люди выбирают ������������ зззааа ееегггооо пппррроооссстттооотттууу... ���нннааа пппооодддкккууупппаааеееттт нннааачччииинннаааююющщщиииххх,,, кккооо---
торые хотят почти сразу писать программы, а не разбираться в особенностях син-
таксиса языка. Простота в совокупности с мощью дают вам целый набор инструмен-
тов для воплощения задуманного. �днако запомните: чтобы научиться хорошо
программировать, недостаточно иметь огромный объем теоретических знаний, хотя
и он немаловажен. Следует научиться думать в концепции выбранного вами языка,
и тогда вас ждет успех. Ведь не понимая, зачем все это нужно, вы не сможете эффек-
тивно воспользоваться ресурсами языка для наиболее удачного решения поставлен-
ных задач.
В этой книге описано множество примеров. Есть как относительно простые, так и до-
вольно сложные, но пусть последнее вас не пугает: к тому моменту, когда вы начне-
те их рассматривать, они не покажутся вам особенно трудными.
От издательства
Ваши замечания, предложения и вопросы отправляйте по адресу электронной поч-
ты gromakovski��mmmiii���ssskkk��������iiii��������rrrr���������ooooommmmm (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
Все примеры, приведенные в книге, вы можете найти по адресу h���://www��i��r��om/
dow�load.
На сайте издательства h���://www��i��r��om вы найдете подробную информацию
о наших книгах.
Глава 1
Окна
Привлечение внимания к приложению
Окно приложения
Полупрозрачные окна
Окна и кнопки нестандартной формы
Немного о перемещении окон
Масштабирование окон
Добавление команды в системное
меню окна
Отображение формы поверх других окон