- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Контрольні питання
- •Контрольні питання
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.2: основні конструкції мови.
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.2: основні конструкції мови.
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.2: основні конструкції мови.
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.2: основні конструкції мови
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.2: основні конструкції мови
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.3: галуження і цикли
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.3: галуження і цикли
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.3: галуження і цикли
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.3: галуження і цикли
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.3: галуження і цикли
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.4: елементи інтерфейсу
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.5: основи створення прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.5: основи створення прикладних застосувань
- •План заняття
- •Контрольні питання
- •Контрольні питання:
- •Необхідні теоретичні відомості для практичної роботи:
- •Контрольні питання:
- •Змістовий модуль 1: основні поняття та означення. Елементи мови. Керування процесом обчислень
- •Тема 1.5: основи створення прикладних застосувань
- •План заняття
- •Проект Delphi
- •Модулей в проект.
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.1: основи мови object pascal
- •План заняття
- •Контрольні питання
- •Контрольні питання
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.1: основи мови object pascal
- •План заняття
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.1: основи мови object pascal
- •План заняття
- •Контрольні питання
- •Контрольні питання
- •Функции преобразования в числовой формат и обратно
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.1: основи мови object pascal
- •План заняття
- •7.1. Простые типы
- •Контрольні питання
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.2: графіка, мультимедія та друк
- •План заняття
- •Контрольні питання
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.2: графіка, мультимедія та друк
- •План заняття
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.2: графіка, мультимедія та друк
- •План заняття
- •Контрольні питання
- •Контрольні питання
- •Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
- •Тема 2.2: графіка, мультимедія та друк
- •План заняття
- •Контрольні питання
- •Печать с помощью объекта Printer
- •Подготовка и печать отчетов с помощью QuickReport — компоненты QuickRep, qrSubDetail, qrLabel, qrExpr, qrSysData, qrMemo, qrRichText, qrShape, qrImage
- •Контрольні питання
- •Змістовий модуль 3: масиви. Записи та множини
- •Тема 3.1: масиви
- •План заняття
- •Листинг 1. Инициализация и вывод массива
- •Ввод массива
- •Использование компонента StringGrid
- •Листинг 2. Ввод и обработка массива целых чисел
- •Листинг 3. Процедура обработки события OnKeyPress
- •Листинг 4. Ввод и обработка массива дробных чисел
- •Контрольні питання
- •Объявление записи
- •Инструкция with
- •Ввод и вывод записей в файл
- •Вывод записи в файл
- •Листинг 25. Добавление записей в файл
- •Чтение записи из файла
- •Листинг 26. Чтение записей из файла
- •Контрольні питання
- •Змістовий модуль 3: масиви. Записи та множини
- •Тема 3.3: множини
- •План заняття
- •Контрольні питання
- •Необхідні теоретичні відомості для практичної роботи:
- •Контрольні питання:
- •Змістовий модуль 3: масиви. Записи та множини
- •Тема 3.4: множини обовязкова контрольна робота №28
- •Змістовий модуль 4: файлові структури даних. Динамічні структури даних
- •Тема 4.1: робота з файлами
- •План заняття
- •Объявление файла
- •Назначение файла
- •Вывод в файл
- •Открытие файла для вывода
- •Листинг 20. Создание нового или замещение существующего файла
- •Листинг 21. Добавление в существующий файл
- •Ошибки открытия файла
- •Закрытие файла
- •Пример программы
- •Листинг 22. Простая база данных (запись в файл)
- •Ввод из файла
- •Открытие файла
- •Листинг 23. Обработка ошибки открытия файла (фрагмент программы)
- •Чтение данных из файла
- •Чтение чисел
- •Чтение строк
- •Конец файла
- •Листинг 24.. Чтение из файла
- •Контрольні питання
- •Змістовий модуль 4: файлові структури даних. Динамічні структури даних
- •Тема 4.1: файлові структури даних. Динамічні структури даних
- •План заняття
- •Контрольні питання
- •Указатели
- •Динамические переменные
- •Листинг 27. Создание, использование и уничтожение динамических переменных
- •Листинг 28. Добавление элемента в начало динамического списка
- •Упорядоченный список
- •Добавление элемента в список
- •Листинг 29. Добавление элементов в упорядоченный список
- •Удаление элемента из списка
- •Листинг 30. Удаление узла из списка
- •Контрольні питання
- •Необхідні теоретичні відомості для практичної роботи:
- •Контрольні питання:
- •Необхідні теоретичні відомості для практичної роботи:
- •Контрольні питання:
- •Змістовий модуль 4: файлові структури даних. Динамічні структури даних
- •Тема 4.2: динамічні структури
- •План заняття
- •Вариантные переменные
- •Контрольні питання
- •Const-параметры
- •Контрольні питання
- •Змістовий модуль 4: файлові структури даних. Динамічні структури даних
- •Тема 4.2: динамічні структури
- •План заняття
- •Способы вызова подпрограмм
- •Контрольні питання
- •Этапы разработки программы
- •Спецификация
- •Создание установочного диска
- •Алгоритм и программа
- •Контрольні питання
- •Этапы разработки программы
- •Спецификация
- •Создание установочного диска
- •Алгоритм и программа
- •Контрольні питання
- •Контрольні питання
- •Необхідні теоретичні відомості для практичної роботи:
- •Контрольні питання:
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.2: Візуальні компоненти
- •План заняття
- •Контрольні питання
- •Распознавание источника события, нажатых кнопок и клавиш, координат курсора
- •События клавиатуры
- •Распознавание нажатых клавиш
- •Контрольні питання
- •Создание нового IntraWeb приложения
- •Редактирование главной формы
- •Написание обработчика события для кнопки
- •Запуск созданного приложения
- •Контрольні питання
- •Управляющие кнопки Button и BitBtn
- •Кнопка с фиксацией SpeedButton
- •Группы радиокнопок — компоненты RadioGroup, RadioButton и GroupBox
- •Контрольні питання
- •Листинг 28. Добавление элемента в начало динамического списка
- •Упорядоченный список
- •Добавление элемента в список
- •Листинг 29. Добавление элементов в упорядоченный список
- •Удаление элемента из списка
- •Листинг 30. Удаление узла из списка
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Упражнения. Совершенствование проекта
- •Контрольні питання:
- •Контрольні питання
- •Упражнения
- •Контрольні питання:
- •Змістовий модуль 6: програмування з графами. Вызуальны компоненти. Бази даних.
- •Тема 6.2: візуальні компоненти
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.3: форми та меню
- •План заняття
- •Контрольні питання
- •Контекстное всплывающее меню — компонент PopupMenu
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.4: обробка виключних ситуацій
- •План заняття
- •Конрольні питання
- •Упражнения. Совершенствование проекта.
- •Контрольні питання:
- •Змістовий модуль 6: програмування з графами
- •Тема 6.4: обробка виключних ситуацій
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питанна
- •Змістовий модуль 6: програмування з графами
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.5: організація прикладних застосувань
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.6: основи баз даних
- •План заняття
- •Классификация баз данных
- •Локальная база данных
- •Удаленная база данных
- •Структура базы данных
- •Контрольні питання
- •Контрольні питання
- •Упражнения
- •Контрольні питання:
- •Змістовий модуль 6: програмування з графами
- •Тема 6.6: основи баз даних
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.6: основи баз даних
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.6: основи баз даних
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.6: основи баз даних
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.6: основи баз даних
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.6: основи баз даних
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Insert into Имя таблицы
- •Insert into Имя_таблицы
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
- •Рисование круга
- •Контрольні питання
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи обов’язкова контрольна робота №63
- •Змістовий модуль 6: програмування з графами. Візуальні компоненти. Бази даних
- •Тема 6.7: навігація по набору даних. Мова sql. Створення довідкової системи
- •План заняття
Контрольні питання
Навести поняття типів даних Delphi
Охарактеризувати прості типи даних
Охарактеризувати порядкові типи даних
Охарактеризувати довільні типи даних
Охарактеризувати тип даних дата та час
САМОСТІЙНА РОБОТА СТУДЕНТА
ЗМІСТОВИЙ МОДУЛЬ 2: ПРОЦЕДУРНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ. ПРОГРАМУВАННЯ ГРАФІКИ
ТЕМА 2.1: ОСНОВИ МОВИ OBJECT PASCAL
Самостійне заняття №16 – Структуровані типи даних
План заняття
Поняття структурованих типів даних Delphi
Принципи застосування даного типу даних
Структурированные типи данных
Структурированные типы данных определяют наборы однотипных или разнотипных элементов. Типы элементов образуются из других типов (простых, структурированных и др.).
Структурированные типы, как правило, содержат более одного значення и формально могут рассматриваться как некий сложный набор, состоящий из данных простых типов. Элементами данных структурированных типов можно манипулировать как по отдельности, так и вместе. Кроме того, в Object Pascal предусмотрена возможность вложения структурных типов друг в друга, т.е. структурированный тип может, в свою очередь, содержать данные структурированного типа. При зтом допускается произвольная глубина вложенности. Однако суммарная длина любого из структурированных типов не должна превышать 2 Гбайт.
В Object Pascal можно выделить четыре структурированннх типа:
• массивы;
• записи;
• множества;
• файли.
При обьявлении структурированного типа можно использовать зарезервированное слово packed (упакованный). В стандартом Pascal зто слово давало команду компилятору по возможности экономить память, отводимую под злементы структурированного типа. Однако в Object Pascal оно не оказывает никакого действия, так как упаковка и распаковка данных здесь производится автоматически, где это возможно. Таким образом, компилятор фактически игнорирует packed.
Контрольні питання
Навести поняття структурованих типів даних Delphi
Охарактеризувати принципи застосування даного типу даних
САМОСТІЙНА РОБОТА СТУДЕНТА
Змістовий модуль 2: процедурно-орієнтоване програмування. Програмування графіки
Тема 2.2: графіка, мультимедія та друк
Самостійне заняття №17 – Малювання
План заняття
Огляд властивостей, подій та методів об’єкта Canvas
Огляд поняття кольорова константа
Характеристика об’єктів TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFile-ListBox, TForm, Tlmage, TListBox, TOutline, TPaintBox, TPrinter, TStringGrid.
В Delphi существуют такие классы для использования графических средств Windows: TCanvas (холст, канва), TFont (шрифт), ТРеп (перо), TBrush (кисть).
Изображения можно строить, например, на поверхности формы различными инструментами во время выполнения приложения. В этом случае изображение представляет собой комбинацию графических примитивов (простейших фигур), таких, как точка, линия, круг или прямоугольник. Также возможен вывод текста в графическом режиме.
Для выполнения операций рисования необходимо использовать класс TCanvas.
Объект Canvas представляет собой поверхность рисования для объектов, которые прорисовывают свое собственное изображение. Стандартные оконные элементы управления, такие, как однострочный редактор или список, не требуют холста, так как они рисуются посредством Windows.
Использование свойств, событий и методов объекта Canvas обеспечивает возможность:
создания изображений с помощью специальных объектов, таких, как кисть, перо и шрифт;
рисования и заливки различных фигур или линий;
вывода текста в графическом режиме;
вывода графических изображений;
программирования реакции на изменения в текущем изображении.
С помощью его свойств и методов можно рисовать на поверхности видимых объектов, которые включают этот класс и, соответственно, имеют свойство Canvas. Это, например, такие объекты, как TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFile-ListBox, TForm, Tlmage, TListBox, TOutline, TPaintBox, TPrinter, TStringGrid.
Свойство Canvas представляет собой объект, который объединяет в себе поле для рисования и объекты пера (Реп), кисти (Brush) и шрифта (Font). При помощи объекта Canvas можно воспроизводить на форме любые графические объекты - картинки, многоугольники, текст и т.п. без применения классов Tlmage, TShape и TLabel (что позволяет избавиться от использования дополнительных ресурсов), однако при этом необходимо обрабатывать событие OnPaint того объекта, на канве которого производится рисование.
Ниже будут подробно рассмотрены свойства объекта Canvas.
Свойство Brush (тип TBrush) представляет собой объект кисти со своим набором свойств, которые приведены в табл. 10.1.
Свойство ClipRect (тип TRect) определено только для чтения и является прямоугольником, на котором происходит графический вывод.
Свойство CopyMode (тип TCopyMode) задает, каким образом будет происходить копирование изображения (с помощью метода CopyRect) на канву: один к одному, с инверсией изображения и др.
Свойство Font (тип TFont) определяет параметры шрифта, которым выводится текст на холсте. Свойства, перечисленные в табл. 10.2, позволяют устанавливать различные параметры шрифта.
Свойство PenPos (тип TPoint) определяет текущую позицию пера. Рекомендуется перемещать перо с помощью метода MoveTo, а не прямой установкой данного свойства.
Свойство Pixels [X, Y: Integer] (тип TColor) является двухмерным массивом элементов изображения (пикселей), с помощью которого можно получить доступ к каждой отдельной точке изображения и определить ее цвет.
Здесь имеет смысл более подробно рассказать о классах TColor, TBrushStyle, TFontStyle, TPenStyle и TPenMode, которые упоминались в табл. 10.1-10.3.
В процессе рисования с использованием методов объекта Canvas требуется задавать цвета линий, текста и заливки, что делается путем установки свойства Color объектов пера, шрифта и кисти соответственно. Для задания определенного цвета применяются специальные цветовые константы. Существует большое количество таких констант, в чем можно убедиться, раскрыв в Инспекторе объектов список цветов в поле справа от свойства Color любого из компонентов, например Form. В качестве основных можно выделить одиннадцать цветовых констант, список которых приведен ниже:
clBlack - черный цвет;
clMaroon - коричневый цвет;
clGray - серый цвет;
clBlue - синий цвет.
с1 Aqua - голубой цвет;
clGreen - темно-зеленый цвет;
clLime - светло-зеленый цвет;
clFuchsia - фиолетовый цвет;
clRed - красный цвет;
clYellow - желтый цвет;
clWhite - белый цвет.
Класс TPenStyle используется для того, чтобы задавать тип линий при использовании различных графических методов. Свойство Style (тип TPenStyle) объекта пера Реп может принимать одно из значений, приведенных в табл. 10.4.
Необходимо дополнительно пояснить различие между сплошной и внутренней сплошной линиями. Разница между этими двумя стилями проявляется только в том случае, когда толщина линии больше 1. Если свойству Style объекта пера Реп установить значение psInsideFrame, то фигура будет полностью вписана в заданных координатах при рисовании графическими методами, то есть внешняя граница линии будет точно вписываться в заданные границы. Если же это свойство будет иметь значение psSolid, то линия (толщина которой больше 1) будет разделена пополам, и одна ее половина окажется внутри заданных границ, а другая половина - за пределами этих границ.
Следует также помнить о том, что штриховые и пунктирные линии нельзя использовать, если толщина линии больше 1.
Стиль заливки фигур при использовании графических методов определяется свойством Style (тип TBrushStyle) объекта Brush. Все возможные значения данного свойства и типы заливки приведены в табл. 10.5.
Вид шрифта, которым будет выводиться текст, определяется установкой нескольких параметров: название шрифта, стиль, размер. Стиль шрифта задается с помощью свойства Style (тип TFontStyle) объекта Font. Возможные стили оформления шрифтов отображены в табл. 10.6.
Объект пера Pen имеет важное свойство Mode (тип ТРеп-Mode), которое определяет различные способы комбинирования цветов фона с цветами различных точек, линий и фигур, рисуемых с использованием графических методов. Все возможные режимы наложения пикселей в процессе рисования приведены в табл. 10.7
Следует обратить внимание еще на один момент. В табл. 10.7 речь идет только о цвете пера (класс TPenColor). Однако всё вышеперечисленное также относится и к цвету заливки (класс TBrushColor). Другими словами, как цвет пера, так и цвет заливки комбинируются с цветом фона в соответствии с заданным режимом рисования.
По сути, свойство Mode пера Реп определяет режим перекрытия и наложения различных графических объектов. Рассмотрим примеры перекрытия двух прямоугольников в различных режимах (см. табл. 10.8). Для левого прямоугольника свойству Color кисти Brush задается значение clBtnShadow {Тень кнопки), для правого - clBtnFace {Поверхность кнопки). В большинстве представленных в таблице случаев используется белый фон. Исключением являются те примеры, когда результат наложения не виден на белом фоне. В этом случае применяется темный фон.
Для режима piriNop иллюстрация отсутствует, поскольку при такой установке результаты выполнения графических методов не отображаются и никаких изменений на поверхности рисования не происходит. Этот режим можно применять, например, в тех ситуациях, когда в определенные моменты выполнения программы возникает необходимость заблокировать вывод графических изображений.
По умолчанию в Delphi установлен режим ртСору, т.е. режим копирования, при котором в процессе рисования не происходит никакого комбинирования цветов при наложении пикселей друг на друга. В таком режиме пиксели рисуемых линий и фигур затирают все расположенные под ними точки, что видно из табл. 10.8. Этот режим рисования используется достаточно часто, однако иногда возникает необходимость применения других методов, что обуславливается конкретными условиями решаемой задачи.
Определенный интерес представляют режимы pmMask {Маска) и pmMerge {Поглощение), работу которых лучше всего продемонстрировать на наиболее ярком примере с использованием черного и белого цветов.
Пусть необходимо на поверхности рисования изобразить некоторую фигуру. Если цвет фона будет белым, а цвет заливки черным, то при использовании режима pmMask будет нарисована черная фигура на белом фоне, а при использовании режима pmMerge эта фигура будет заливаться цветом фона и просто не будет видна. Если же цвет фона выбрать черным, а цвет заливки - белым, то результат будет прямо противоположным, то есть в режиме pmMask фигура будет заливаться цветом фона и не будет видна на поверхности рисования, а в режиме pmMerge белая фигура будет отображена на черном фоне.
Следует особо отметить режим pmXor (исключающее ИЛИ). В этом режиме происходит довольно сложное комбинирование цветов фона и рисунка, с трудно предсказуемым результатом (например, при наложении красного прямоугольника на белый фон он будет отображен лазурным цветом). Различные сочетания цветов рисунка и фона будут давать разные результаты. Таким образом, получается, что при использовании данного режима испорченным оказывается как рисунок, так и фон. Однако у данного режима есть очень полезная особенность, которая основана на внутренней логике оператора XOR, возвращающего 0, если оба бита, участвующие в операции, имеют одинаковое значение (0 и 0 или 1 и 1). Благодаря этой особенности появляется возможность восстанавливать затертый рисунком фон (независимо от его сложности). Если вначале нарисовать рисунок, а затем повторно изобразить его тем же цветом и на том же месте, то рисунок исчезнет и первоначальный фон будет полностью восстановлен. Аналогичные особенности имеет и режим pmNotXor (инвертирование исключающего ИЛИ).
Для режима pmXor искажения цветов рисунка не происходит на черном фоне, для режима pmNotXor - на белом фоне.
Далее будут рассмотрены важнейшие методы объекта Canvas.
При прорисовке линий с помощью вышеприведенных методов используются свойства пера (Реп), а при заполнении внутренних областей - свойства кисти (Brush).
При любом изменении содержимого поверхности рисования, то есть при использовании методов, связанных с рисованием или выводом текста на поверхность рисования, возникают события OnChanging и OnChange. Событие OnChanging возникает непосредственно перед модификацией холста, а событие OnChange -после модификации. Обработчики этих событий программируются вручную, так как объект Canvas не доступен на этапе проектирования, что исключает возможность автоматического создания заготовок данных обработчиков в редакторе кода.
Пример 10.1. Рисование на поверхности формы с использованием свойств и методов объекта Canvas. Необходимо нарисовать простейший рисунок с изображением корабля (см. рис. 10.1).
Решение. Для построения данного изображения будут использованы различные свойства и методы объекта Canvas. В данном примере рассматривается применение методов для рисования линий, эллипсов, прямоугольников и многоугольников. Для управления цветом и заливкой фигур используются классы кисти и пера. Кроме того, в данном примере проиллюстрирована работа со шрифтом и вывод надписи на поверхность рисования.
Ниже приводится программный код модуля, осуществляющего построение данного изображения.