Книга посвящена программированию на языке Delphi от самых основ до примеров построения конкретных приложений. Подробно описывается логика выполнения каждого участка кода, чтобы читатель смог использовать эти знания при решении собственных задач. Книга содержит большое количество примеров практического программирования; некоторые из них вынесены в качестве дополнительной информации на прилагаемый компакт-диск. Во втором издании материал существенно переработан и дополнен с учетом новых возможностей. Компакт-диск содержит исходные коды программ, дополнительную справочную информацию, а также готовые изображения и компоненты.
Данная книга посвящена одному из наиболее популярных в нашей стране и перспективному во всем мире языку программирования Delphi. Она предназначена для программистов всех уровней, от начинающего до опытного. Как показывает практика, большинство людей научились программированию по книгам. Однако далеко не все из этих книг объясняют принципиальные основы работы Windows и компьютера в целом. Отсутствие базовых знаний в этой области не позволяет писать эффективные программы.
Эта книга может научить многому. Однако без самостоятельного стремления совершенствоваться в данной области вы не сможете самостоятельно писать "хорошие" программы. В этой книге будут рассматриваться различные методы, некоторые шаблоны и приемы программирования на языке Delphi, однако описать абсолютно все, как вы понимаете, здесь просто невозможно. Программирование это такая область, в которой требуется постоянное обучение. В связи с этим, нельзя останавливаться на достигнутом, прочитав только одну книгу. Нужно постоянно совершенствоваться и обучатся.
За что я люблю компьютеры, так это за то, что они являются безграничным источником знаний, которые нельзя изучить в полном объеме. Даже если вы сможете узнать все, пока вы будете обучаться, появятся новые технологии. Именно поэтому нет человека, который знал бы все. Я тоже не знаю, но люблю изучать что-то новое. Но если даже представить себе, что я смогу изучить все, то лично мне жить станет скучно.
Прежде чем приступить к изучению самой книги, необходимо сделать несколько замечаний. Первое из них касается терминологии. В тексте часто будет использоваться выражение "Язык программирования Delphi". Многие утверждают, что Delphi это среда разработки, которая использует язык программирования Pascal (Паскаль). В принципе, здесь не утверждается, что это ошибка. И все же, в Delphi от старого Паскаля осталось очень мало, поэтому я считаю, что это не просто среда разработки, а самостоятельный язык программирования. Это лично мое мнение как автора и вы можете с ним соглашаться или нет. Но даже разработчик среды разработки Delphi уже тоже воспринимает Delphi, как самостоятельный язык.
Теперь о содержимом книги. В ней сделана попытка представить изучаемый материал таким образом, чтобы было понятно даже человеку, который только недавно познакомился с компьютером. Возможно, опытным программистам какие-то части читать будет скучно, но даже здесь будут описываться достаточно специфичные вещи, среди которых можно найти для себя довольно много полезного. Поверьте, это действительно так и связано с тем, что большинство книг по данной проблематике упускают из виду некоторые очень важные тонкости, которые желательно знать для понимания принципа работы программ. Без этого понимания тяжело двигаться дальше и любые новые технологии будут казаться тяжелыми и сложными.
Прежде чем приступить к чтению книги, учтите один совет. Книгу желательно читать полностью, от начала и до конца, потому что материал излагается постепенно, и некоторые вещи могут быть непонятны, если что-то пропустить вначале. Как только вы почувствуете, что набрали достаточно знаний и способны самостоятельно писать хотя бы простейшие программы, можете сделать единственный скачок на главу 25. В ней дается материал, касающийся отладки приложений, потому что при самостоятельном написании программ всегда появляются ошибки или опечатки. Мы люди и нам свойственно совершать ошибки. Эта глава объясняет, как находить такие ошибки. В ней вы также узнаете некоторые приемы по работе с редактором кода, которые могут пригодиться в будущем при программировании собственных приложений, да и при работе с примерами, которые представлены в этой книге. После прочтения этой главы можно вернуться к той, на которой вы остановились ранее, и продолжить чтение книги уже без каких-либо скачков. Иначе какой-то важный момент может быть упущен, и нагнать, потом будет очень тяжело, потому что вы можете не заметить, что что-то упустили.
И последнее, некоторые термины, встречающиеся в книге, могут отличаться от аналогичных, которые изложены в другой технической литературе, относящейся к данному вопросу. Это связано с особенностями перевода англоязычного текста на русский язык. В любом случае, терминология, которая приводится в книге, делает ее намного проще и понятней как начинающим, так и опытным программистам.
Если вы читали первый вариант книги, вам также будет полезно прочитать эту книгу, потому что данный вариант переработан полностью от начала и до самого конца. Помимо этого, на компакт–диске, прилагаемом к данной книге представлено много новой и полезной документации, которая поможет вам двигаться дальше после прочтения книги.
Некоторая информация была перенесена из книги на компакт-диск в виде электронных документов. Этим я сэкономил место, чтобы дать больше полезной информации на страницах книги. Если бы всю эту информацию превратить в печатные страницы, то книга стала бы как минимум в два раза больше. Пришлось бы выпускать два тома, но это оказалось бы очень дорого для многих читателей, а я хочу, чтобы книга оставалась доступной и давала максимум информации.
Когда я планировал написать эту книгу, то основная цель была не заработать как можно больше денег, а поделиться знаниями и дать как можно больше. Пусть книга будет дешевле, а я заработаю меньше, но вы уж точно не будете жалеть, что потратили свои деньги.
Над вторым изданием я работал в два раза дольше, несмотря на то, что это всего лишь обновление. Первое издание было создано на скорую руку и поэтому содержало много ошибок. На этот раз я старался не торопиться, чтобы совершать меньше ошибок. Я человек и могу совершать ошибки или опечатки, поэтому, если вы найдете их в данной книге, просьба сообщить мне об этом через мой сайт www.vr-online.ru или напрямую, по электронной почте info@vr-online.ru.
Для работы над вторым изданием я использовал Borland Delphi версии 2006. Некоторые до сих пор используют 7-ю версию, поскольку были разочарованы 8-й версией и Delphi 2005. Если вы тоже используете старую версию, то я советую вам попробовать Delphi 2006, потому что он намного лучше. Если же вы не хотите переходить на Delphi 2006 или уже перешли на более новую, то не отчаивайтесь. Описываемый в книге материал и примеры будут работать у вас без каких либо проблем.
В 2006-году среду разработки Delphi выпускал Borland, а в конце года эта задача была передана созданному самостоятельному подразделению CodeGear. Так что среда разработки этой компании тоже подойдет для изучения примеров из этой книги.
Оглавление Введение | 11 |
Замечания ко второму изданию | 13 |
Глава 1. Основные принципы работы компьютера | 15 |
1.1. Двоичная система работы процессора | 15 |
1.2. Машинный язык | 21 |
1.3. История языков программирования | 22 |
1.4. Исполнение машинных команд | 27 |
Глава 2. Машинная математика | 29 |
2.1. Основы машинной математики | 29 |
2.2. Блок-схемы | 32 |
2.3. Машинная логика и циклы | 34 |
2.4. Программирование машинной логики | 37 |
Глава 3. Начальные сведения о Delphi | 39 |
3.1. Оболочка Delphi | 39 |
3.2. Главное меню | 42 |
3.3. Настройка | 45 |
Глава 4. Визуальная модель Delphi | 52 |
4.1. Процедурное программирование | 53 |
4.2. Объектно-ориентированное программирование | 57 |
4.3. Компонентная модель | 62 |
4.4. Наследственность | 63 |
4.5. Полиморфизм | 65 |
4.6. Инкапсуляция | 66 |
Глава 5. Основы языка программирования Delphi | 68 |
5.1. "Hello World", или Из чего состоит проект | 68 |
5.2. Язык программирования Delphi | 79 |
5.3. Типы данных в Delphi | 85 |
5.3.1. Целочисленные типы данных | 86 |
5.3.2. Вещественные типы данных | 87 |
5.3.3. Символьные типы данных | 88 |
5.3.4. Булевы типы | 93 |
5.3.5. Массивы | 95 |
5.3.6. Странный PChar | 96 |
5.3.7. Константы | 98 |
5.3.8. Всемогущий Variant | 99 |
5.4. Процедуры и функции в Delphi | 100 |
5.5. Рекурсивный вызов процедур | 109 |
5.6. Встроенные процедуры | 111 |
5.7. Возврат значений через параметры | 113 |
5.8. Перегрузка | 114 |
5.8. Методы объектов | 115 |
5.9. Наследование объектов | 116 |
Глава 6. Работа с компонентами | 119 |
6.1. Основная форма и ее свойства | 119 |
6.2. Событийная модель Windows | 130 |
6.3. События главной формы | 132 |
6.4. Палитра компонентов | 133 |
Глава 7. Палитра компонентов Standard | 135 |
7.1. Кнопка (TButton) | 135 |
7.2. Изменение свойств кнопки (логические операции) | 139 |
7.3. Надписи (TLabel) | 143 |
7.4. Строки ввода (TEdit) | 144 |
7.5. Многострочное поле ввода (TMemo) | 146 |
7.6. Класс TStrings | 151 |
7.6.1. Свойства TStrings | 151 |
7.6.2. Методы объекта TStrings | 151 |
7.7. Компонент CheckBox | 152 |
7.8. Панели (TPanel) | 153 |
7.9. Кнопки выбора TRadioButton | 156 |
7.10. Списки выбора (TListBox) | 157 |
7.11. Ниспадающие списки (TComboBox) | 159 |
7.12. Полосы прокрутки (TScrollBar) | 161 |
7.13. Группировка объектов (TGroupBox) | 162 |
7.14. Группа компонентов RadioButton (TRadioGroup) | 163 |
7.15. Список действий TActionList | 164 |
Глава 8. Учимся программировать | 167 |
8.1. Циклы fo...to...do | 167 |
8.2. Циклы while | 171 |
8.3. Циклы Repeat | 173 |
8.4. Управление циклами | 174 |
8.5. Логические операторы | 179 |
8.6. Работа со строками | 182 |
8.6.1. Функция Length | 182 |
8.6.2. Функция Copy | 183 |
8.6.3. Функция Delete | 184 |
8.6.4. Функция Pos | 184 |
8.6.5. Функция Insert | 185 |
8.7. Исключительные ситуации | 185 |
8.8. Классы исключительных ситуаций | 188 |
Глава 9. Создание рабочих приложений | 193 |
9.1. Создание главного меню программы | 193 |
9.2. Создание дочерних окон | 198 |
9.3. Модальные и немодальные окна | 202 |
9.4. Обмен данными между формами | 203 |
9.5. Многодокументные MDI-окна | 205 |
9.6. Инициализация окон | 211 |
9.7. Фреймы | 216 |
Глава 10. Основные приемы программирования | 218 |
10.1. Работа с массивами | 218 |
10.2. Многомерные массивы | 224 |
10.3. Работа с файлами | 226 |
10.4. Работа с текстовыми файлами | 230 |
10.5. Приведение типов | 234 |
10.5.1. Преобразование целых чисел в строку и обратно | 235 |
10.5.2. Преобразование даты в строку и обратно | 236 |
10.5.3. Преобразование вещественных чисел | 238 |
10.6. Преобразование совместимых типов (преобразование строк) | 240 |
10.6.1. Приведение классов | 241 |
10.7. Указатели | 243 |
10.8. Структуры, записи | 246 |
10.9. Храним структуры в динамической памяти | 251 |
10.10. Поиск файлов | 253 |
10.11. Работа с системным реестром | 258 |
10.12. Множества | 266 |
10.13. Потоки | 267 |
10.14. Концентрация на объекте | 269 |
Глава 11. Обзор дополнительных компонентов Delphi | 271 |
11.1. Дополнительные кнопки Delphi (TSpeedButton и TBitBtn) | 271 |
11.2. Самостоятельная подготовка иконок | 277 |
11.3. Маскированная строка ввода (TMaskEdit) | 277 |
11.4. Сеточки (TStringGrid, TDrawGrid) | 278 |
11.5. Компоненты TImage, TShape, TBevel | 286 |
11.6. Панель с полосами прокрутки (TScrollBox) | 290 |
11.7. Маркированный список (TCheckListBox) | 291 |
11.8. Полоса разделения (TSplitter) | 293 |
11.9. Многострочный текст (TStaticText) | 294 |
11.10. Редактор параметров (TValueListEditor) | 294 |
11.11. Набор вкладок (TTabControl ) | 297 |
11.12. Набор страниц (TPageControl) | 302 |
11.13. Набор картинок (TImageList) | 306 |
11.14. Ползунки (TTrackBar) | 306 |
11.15. Индикация процесса (TProgressBar) | 308 |
11.16. Простейшая анимация (TAnimate) | 311 |
11.17. Ниспадающий список выбора даты (TDateTimePicker) | 313 |
11.18. Календарь (TMonthCalendar) | 313 |
11.19. Дерево элементов (TTreeView) | 314 |
11.20. Профессиональное использование компонента TreeView | 320 |
11.21. Список элементов (TListView) | 324 |
11.22. Простейший файловый менеджер | 327 |
11.23. Улучшенный файловый менеджер (с возможностью запуска файлов) | 339 |
11.24. Подсказки для чайников (TStatusBar) | 340 |
11.25. Панель инструментов (TToolBar и TControlBar) | 343 |
11.26. Перемещаемые панели и меню в стиле MS (Docking) | 346 |
11.27. Меню и панели в стиле ХР | 350 |
11.28. Всплывающее меню в стиле ХР | 355 |
11.29. Практика использования Action | 356 |
11.30. События приложения | 361 |
11.31. Поле ввода с меткой | 362 |
11.32. Коробка с цветом | 362 |
11.33. Иконка в SystemTray | 363 |
Глава 12. Графические возможности Delphi | 365 |
12.1. Графическая система Windows | 365 |
12.2. Первый пример работы с графикой | 367 |
12.3. Свойства карандаша | 369 |
12.4. Свойства кисти | 373 |
12.5. Работа с текстом в графическом режиме | 378 |
12.6. Вывод текста под углом | 380 |
12.7. Работа с цветом | 385 |
12.8. Методы объекта TCanvas | 390 |
12.8.1. Pixels | 390 |
12.8.2. TextWidth и TextHeight | 391 |
12.8.3. Arс | 391 |
12.8.4. CopyRect | 391 |
12.8.5. Draw | 393 |
12.8.6. Ellipse | 393 |
12.8.7. FillRect | 393 |
12.8.8. FloodFill | 393 |
12.9. Компонент работы с графическими файлами (TImage) | 394 |
12.10. Рисование на стандартных компонентах | 398 |
12.11. Работа с экраном | 403 |
12.12. Режимы рисования | 405 |
12.13. Сканирование данных | 411 |
Глава 13. Печать в Delphi | 415 |
13.1. Объект TPrinter | 416 |
13.2. Получение информации об установленном принтере | 420 |
13.3. Текстовая печать | 424 |
13.4. Печать содержимого формы | 425 |
13.5. Вывод на печать изображения | 431 |
13.6. Еще немного о печати | 434 |
13.7. Это интересно | 436 |
Глава 14. Delphi и базы данных | 440 |
14.1. Теория реляционных баз данных | 441 |
14.1.1. Локальные базы данных | 443 |
14.1.2. Delphi и базы данных | 445 |
14.2. Создание первой базы данных Access | 446 |
14.3. Пример работы с базами данных | 450 |
14.3.1. Свойства компонента TADOTable | 455 |
14.3.2. Методы компонента TADOTable | 457 |
14.4. Управление отображением данных | 459 |
14.5. Поисковые поля | 467 |
14.6. Улучшенный пример с поисковыми полями | 474 |
14.7. Сортировка | 477 |
14.8. Фильтрация данных | 479 |
14.9. Язык запросов SQL | 484 |
14.10. Связанные таблицы | 491 |
14.11. Вычисляемые поля | 497 |
14.12. Цветные сетки DBGrid | 501 |
14.13. Подключение к базе данных во время выполнения программы | 505 |
14.14. Расширения ADO | 508 |
14.15. Обработка базы данных | 514 |
14.16. Бинарные данные | 517 |
14.17. События наборов данных | 522 |
14.18. События DataSource | 524 |
14.19. Позиционирование | 526 |
Глава 15. Создание отчетности | 528 |
15.1. Создание отчетности в Excel | 529 |
15.2. Отчетность в Word | 538 |
15.3. Отчетность в Quick Reports | 540 |
15.4. Печать таблиц с помощью Quick Reports | 547 |
15.5. Печать связанных таблиц | 548 |
15.6. Дополнительные возможности | 550 |
Глава 16. Работа с DBF, Paradox, XML и клиент-серверными базами данных |
552 |
16.1. Создание таблицы Paradox | 553 |
16.2. Русификация таблиц Paradox и DBF | 559 |
16.3. Быстрый поиск | 561 |
16.4. Создание псевдонимов | 562 |
16.5. Работа с XML-таблицами | 566 |
16.6. Теория клиент-серверных баз данных | 567 |
16.7. Пример работы с SQL Server | 569 |
16.8. Многоуровневые приложения для баз данных | 575 |
16.8.1. Реализация сервера бизнес-логики | 578 |
16.8.2. Клиент для бизнес-логики | 581 |
Глава 17. Потоки | 587 |
17.1. Теория потоков | 588 |
17.2. Простейший поток | 590 |
17.3. Дополнительные возможности потоков | 594 |
17.4. Подробней о синхронизации | 596 |
17.5. Объект события Event | 597 |
17.6. Критические секции | 602 |
Глава 18. Динамически компонуемые библиотеки | 606 |
18.1. Что такое DLL | 606 |
18.1.1. Решение № 1 | 606 |
18.1.2. Проблема № 1 | 607 |
18.1.3. Проблема № 2 | 607 |
18.1.4. Решение № 2 | 608 |
18.1.5. Из чего сделан Windows | 610 |
18.2. Простой пример создания DLL | 612 |
18.3. Замечания по использованию библиотек | 616 |
18.4. Хранения формы в динамических библиотеках | 617 |
18.5. Немодальные окна в динамических библиотеках | 621 |
18.6. Явная загрузка библиотек | 624 |
18.7. Точка входа | 627 |
18.8. Вызов из библиотек процедур основной программы | 629 |
Глава 19. Разработка собственных компонентов | 632 |
19.1. Пакеты | 633 |
19.2. Подготовка к созданию компонента | 641 |
19.3. Создание первого компонента | 644 |
19.4. Создание иконки компонента | 655 |
19.5. События в компонентах | 657 |
19.6. Когда создавать компоненты | 659 |
Глава 20. Технология OLE | 660 |
20.1. Теория OLE | 660 |
20.2. OLE-контейнер | 663 |
20.3. Создание собственного окна вставки OLE-объекта | 668 |
Глава 21. Компоненты ActiveX | 673 |
21.1. Использование Internet Explorer | 673 |
21.2. Пример создания ActiveX-форм | 680 |
21.3. Создание компонентов ActiveX | 684 |
Глава 22. Технология COM | 692 |
22.1. Модель COM | 692 |
22.2. Информация о COM | 693 |
22.3. Интерфейс и реализация | 695 |
Глава 23. Буфер обмена | 699 |
23.1. Буфер обмена и стандартные компоненты Delphi | 699 |
23.2. Объект Clipboard | 701 |
23.3. Картинки и буфер обмена | 703 |
23.4. Создание собственного формата для работы с буфером | 709 |
Глава 24. Дополнительная информация | 717 |
24.1. Тестирование и отладка | 717 |
24.2. Работа с редактором | 726 |
24.2.1. Закладки | 726 |
24.2.2. Копирование строк | 727 |
24.2.3. Code Explorer | 728 |
24.2.4. Редактор кода | 729 |
24.3. Создание программ инсталляции | 730 |
24.4. Как писать и распространять программы | 743 |
Глава 25. Практика | 747 |
25.1. Создание ScreenSaver | 747 |
25.2. Компоненты в runtime | 753 |
25.3. Тест на прочность | 759 |
25.4. Сохранение и загрузка теста | 773 |
25.5. Тестер | 777 |
Приложение 1. Основные классы библиотеки VCL | 785 |
П1.1. TObject | 785 |
П1.2. TPersistent | 785 |
П1.3. TComponent | 786 |
П1.4. TControl | 786 |
П1.5. TWinControl | 790 |
П1.6. TApplication | 792 |
Приложение 2. Описание компакт-диска | 793 |
Список литературы | 794 |
Предметный указатель | 795 |
8 Оглавление 9 Оглавление |
Самая первая и самая любимая книга по прекрасному языку DELPHI. Спасибо Михаил!
жаль что делфи загнулся
Нет, Embarcadero развивает проект.
Зря вы так, Сергей. Между "загнулся" (мертв) и не популярный - две большие разницы. Современный Delphi фактически тот же C#, но в чем то даже лучше. Попробуйте сами.