|
Часть 1
Turbo Pascal для Windows
Руководство по программированию для Windows
BORLAND INTERNATIONAL INC. 1800 GREEN HILLS ROAD
P.O. BOX 660001, SCOTTS VALLEY, CA 95067-0001
Авторские права (c) 1991 принадлежат фирме Borland International. Все права сохраняются. Все имена продуктов Borland являются торговыми марками или зарегистрированными торговыми марками Borland International, Inc. Использованной в данном руководстве терм
ин Windows относится к реализации системы окон фирмы Microsoft. Прочие имена продуктов являются торговыми марками или зарегистрированными торговыми марками соответствующих держателей этих марок.
Содержание
Введение
В Windows нет ничего сложного
Turbo Pascal для Windows
Язык программирования Turbo Pascal
Программирование для Windows в среде Windows
Средства редактирования ресурсов
Библиотека ObjectWindows
Turbo Debugger для Windows
Требования к подготовке
О содержании этой книги
Часть 1. Обучение ObjectWindows
Глава 1. Унаследование окон
Что представляет собой приложение Windows
Преимущества Windows
Требования
Средства программирования
Управляемая событиями архитектура
Независимая от аппаратуры графика
Многозадачный режим
Управление памятью
Ресурсы
Динамическая компоновка
Буфер вырезанного изображения
Динамический обмен данными
Множественный интерфейс документа
Типы данных в Windows
Объектно-ориентированное использование окон
Лучший интерфейс для Windows
Объекты интерфейса
Абстрагирование функций Windows
Автоматизация реакции системы в виде сообщений
Структура программы Windows
Структура Windows
Взаимодействие с Windows и DOS
"Здравствуй, Windows"
Предназначение запуска приложения
Главные предназначения окон
Цикл разработки приложения
Глава 2. Шаг за шагом по Windows
Шаг 1: Простое приложение Windows
Требования приложения
Определение типа приложения
Шаг 2: Основной тип объекта окна
Что такое объект окна ?
Регуляторы
Родители и дети
Создание нового типа окна
Реакция на сообщения
Прекращение выполнения приложения
Глава 3. Заполнение окна
Что такое контекст дисплея ?
Шаг 3: Рисование текста в окне
Записи сообщений
Очистка экрана
Шаг 4: Рисование линий в окне
Модель протягивания
Реакция на сообщения о протягивании
Шаг 5: Изменение толщины линии
Трассировка толщины линии
Проведение диалога ввода
Шаг 6: Автоматически регенерируемые изображения
Модель рисования
Сохранение изображений в качестве объектов
Перерисовка сохраненных изображений
Глава 4. Добавление меню
Ресурсы меню
Шаг 7: Меню для головного окна
Перехват сообщения меню
Реакция на сообщение меню
Присоединение ресурсов к исполняемому файлу
Глава 5. Организация диалога
Шаг 8: Добавление всплывающего окна
Создание и показ всплывающего окна
Функция MakeWindow
Добавление блока диалога
Добавление объектного поля
Модификация конструктора Init
Запуск блока диалога
Шаг 9: Сохранение рисунка в файле
Управление состоянием
Запись и загрузка файлов
Глава 6. Всплывающие окна
Шаг 10: Всплывающее окно подсказки
Использование модулей с ObjectWindows
Модификация головной программы
Создание модуля
Дополнительное управление окном
Что такое управление ?
Создание управления окном
Управление объектами как полями
Контроль за управлением
Реакция на события управления
Часть 2. Использование ObjectWindows
Глава 7. Обзор ObjectWindows
Соглашения относительно ObjectWindows
Иерархия ObjectWindows
Базовые объекты
TAplication
Объекты интерфейса
TWindowsObjects
Объекты окна
TWindow
TEditWindow
TFileWindow
Объекты диалога
TDialog
TDlgWindow
TFileDialog
TInputDialog
Объекты управления
TControl
TButton
TListBox
TComboBox
TCheckBox
TRadioButton
TGroupBox
TEdit
TScrollBar
TStatic
Объекты MDI
TMDIWindow
TMDIClient
Модули ObjectWindows
WObjects
WinProcs
WinTypes
StdDlgs
StdWnds
Ресурсы Windows
Функции Windows
Вызовы функций Windows из ObjectWindows
Доступ к функциям
Константы комбинирования стиля
Типы функций Windows
Функция интерфейса менеджера окна
Функции интерфейса графического устройства (GDI)
Функции интерфейса системного сервиса
Функции обратного вызова
Прием сообщений Windows
Как события становятся вызовами метода
Параметры сообщения Windows
Типы сообщений Windows
Сообщения управления окном
Сообщение инициализации
Сообщения ввода
Сообщения системы
Сообщения буфера вырезанного изображения
Сообщения системной информации
Контрольно-управляющие сообщения
Контрольно-информационные сообщения
Информационные сообщения линейки прокрутки
Сообщения из области не принадлежащей клиенту
Сообщения интерфейса нескольких документов (MDI)
Обработка сообщений по умолчанию
Посылка сообщений
Диапазон сообщения
Определяемые пользователем сообщения
Глава 8. Объекты приложения
Управление потоком приложений
Инициализация приложений
Инициализация головного окна
Инициализация каждого экземпляра приложения
Инициализация первого экземпляра приложения
Запуск приложений
Завершение работы с приложениями
Глава 9. Объекты интерфейса
Тип TWindowsObject
Зачем нужны объекты интерфейса ?
Отношения родители-дети в окне
Список дочерних окон
Итераторы дочернего окна
Обработка сообщений
Реакция на сообщения
Сообщения команд и дочерних окон
Обработка сообщений команд
Обработка дочерних сообщений
Обработка сообщений по умолчанию
Глава 10. Объекты окна
Тип TWindow
Инициализация и создание объектов окна
Инициализация объектов окна
Создание элементов окна
Выводы, касающиеся инициализации и создания
Регистрация класса окна
Атрибуты регистрации
Поле стиля класса
Поле пиктограммы
Поле курсора
Поле цвета фона
Поле меню по умолчанию
Окна редактирования и файлов
Окна редактирования
Окна файлов
Прокрутка окон
Атрибуты прокрутки
Задание прокрутки собственного окна
Пример прокрутки
Автоматическая прокрутка и трассировка
Модификация единиц прокрутки и диапазона
Изменение позиции прокрутки
Установка размеров страницы
Оптимизация методов Paint для прокрутки
Глава 11. Объекты диалога
Использование ресурсов диалога
Использование объектов диалога
Конструирование и инициализация диалогов
Выполнение диалогов
Моделированные и лишенные модели диалоги
Завершающие диалоги
Управление объектами диалога
Управляющие манипуляции и обработка сообщений
Манипуляция управлениями диалога
Реакция на управляющие информационные сообщения
Пример связи диалог/управление
Ассоциирование объектов управления
Вызов DefWndProc
Расширенный пример использования диалогов
Окна диалога
Диалоги ввода
Диалоги файлов
Инициализация диалогов файлов
Работа с диалогами файлов
Глава 12. Объекты управления
Тип объекта TControl
Конструирование и создание объектов управления
Разрушение и освобождение управления
Обработка сообщений и управления
Манипуляция управлением окнами
Реакция на сообщения управления
Окна, которые действуют как диалоги
Управление блоком списка
Конструирование и создание блоков списка
Модификация блоков списка
Запросы в блоках списка
Выбор из блока списка
Пример программы: LBoxTest
Статическое управление
Конструирование статического управления
Запросы статического управления
Модификация статического управления
Пример: приложение StatTest
Управление нажатием клавиш
Реакции на клавишные сообщения
Блоки проверки и клавиши выбора
Конструирование блоков проверки и клавиш выбора
Запрос состояния блока проверки
Модификация состояния блока выбора
Блоки групп
Реакция на сообщения блока группы
Пример программы: BtnTest
Линейки прокрутки
Конструирование линеек прокрутки
Запросы в линейках прокрутки
Модификация линеек прокрутки
Реакция на сообщения линеек прокрутки
Пример: SBarTest
Управление редактированием
Конструирование управления редактированием
Буфер вырезанного изображения и операции редактирования
Реализация
Управление запросами на редактирование
Изменение управления редактированием
Удаление текста
Вставка текста
Форсированный выбор текста и прокрутка
Пример программы: EditTest
Комбинированные блоки
Три типа комбинированных блоков
Простые комбинированные блоки
Опускающиеся комбинированные блоки
Опускающиеся комбинированные блоки списков
Выбор типа комбинированного блока
Конструирование комбинированных блоков
Модификация комбинированных блоков
Пример приложения: CBoxTest
Установка управляющих величин
Определение буфера передачи
Определение соответствующего диалога или окна
Передача данных
Обеспечение передачи соответствующего управления
Пример передачи
Глава 13. Объекты MDI
Компоненты приложения MDI
Каждое окно MDI является объектом
Конструирование окон MDI
Конструирование окон-рамок MDI
Конструирование дочерних окон MDI
Обработка сообщений в приложении MDI
Управление дочерним окном MDI
Активизация дочернего окна
Меню дочернего окна
Пример приложения MDI
Часть 3. Расширенное использование ObjectWindows
Глава 14. Управление памятью
Использование менеджера памяти
Как Windows управляет памятью
Регуляторы и адреса
Локальная и глобальная память
Использование локальной динамической области
Размещение и доступ к локальной памяти
Высвобождение блоков локальной памяти
Перемещение и модификация блоков локальной памяти
Запрос блоков локальной памяти
Замечания о программировании
Использование глобальной динамической области
Размещение и доступ к глобальной памяти
Другие способы локализации блоков глобальной памяти
Высвобождение блоков глобальной памяти
Перемещение и модификация блоков глобальной памяти
Запрос блоков глобальной памяти
Изменение глобального высвобождения
Получение предупреждений о нехватке памяти
Замечания о программировании
Глава 15. Библиотеки динамической компоновки
Доступ к библиотекам DLL
Простой пример DLL
Глава 16. Динамический обмен данными
Буфер вырезанного изображения Windows
Форматы буфера вырезанного изображения
Помещение данных в буфер вырезанного изображения
Поиск данных из буфера вырезанного изображения
Отложенное воспроизведение
Обмен сообщениями между приложениями
Динамический обмен данными
Термины
Установление диалога
Прекращение диалога
Методы обмена данными
Запрос отдельного элемента данных
Продолжение передачи данных
Запрос серверу сменить значение данных
Выполнение макрокоманд в сервере
Системная тема
Глава 17. Все о GDI
Контекст дисплея
Управление контекстом дисплея
Что в контексте дисплея ?
Побитовая графика
Цвет
Режимы распределения
Области вырезанного изображения
Инструментальные средства рисования
Инструментальные средства рисования
Основные инструменты
Логические инструменты
Логические ручки
Логические кисти
Логические шрифты
Отображение графики в окнах
Рисование в окнах
Управление контекстом дисплея
Вызов графических функций окна
Раскрашивание окон
Стратегия графики
Использование инструментов рисования
Графические функции GDI
Функции рисования текста
Функции рисования линий
MoveTo и LineTo
PolyLine
Arc
Функции закрашивания области
Rectangle
RoundRect
Ellipse
Pie и Chord
Polygon
Использование палитры
Установка палитры
Рисование с палитрой
Выбор в палитре
Модификация палитры
Реакция на изменения палитры
Глава 18. Более подробно о ресурсах
Создание ресурсов
Добавление ресурсов к исполняемой программе
Работа с Компилятором Ресурсов
Файлы описания Компилятора Ресурсов
Замечания о Компиляторе Ресурсов
Загрузка ресурсов в приложение
Загрузка меню
Загрузка таблиц акселераторов
Загрузка блоков диалога
Загрузка курсоров и пиктограмм
Загрузка ресурсов строк
Загрузка побитовых распределений
Использование побитовых распределений для создания кистей
Отображение побитовых распределений в меню
Глава 19. Рекомендации для стандартного приложения
Принципы разработки
Обеспечение той реакции, которую ожидает пользователь
Предоставление пользователю возможностей управления
потоком
Стандартное появление и поведение
Общее представление
Взаимодействие мыши и клавиатуры
Меню
Блоки диалога
Рекомендации по разработке
Написание безопасных программ
Программировать или все или ничего
Буфер безопасности
Другие ошибки при создании окон
Основные пользователи
Часть 4. Наборы и потоки
Глава 20. Наборы
Объекты наборов
Размеры наборов устанавливаются динамически
Полиморфизм наборов
Проверка типа и наборы
Объединение в набор элементов, не являющихся
объектами
Создание набора
Методы итератора
Итератор ForEach
Итераторы FirstThat и LastThat
Отсортированные наборы
Наборы строк
Пересмотренные итераторы
Нахождение элемента
Полиморфные наборы
Наборы и управление памятью
Глава 21. Потоки
Вопрос: Объект ввода/вывода
Ответ: Поток
Полиморфизм потоков
Потоки обрабатывают объекты
Смысл использования потоков
Установка потока
Чтение и запись потока
Поместить
Взять
В случае ошибки
Закрытие потока
Приспособление объектов к потоку
Методы загрузки и хранения
Регистрация потока
ID номера объектов
Автоматические поля
Регистрация на месте
Регистрация стандартных объектов
Механизм потока
Процесс Put
Процесс Get
Обработка указателей объектов
Наборы в потоке: Полный пример
Добавление методов Store
Регистрация записей
Регистрация
Запись в поток
Как все хранится ?
Поля в потоке
Родство окон
Копирование потока
Потоки произвольного доступа
Необъектные элементы потоков
Разработка пользователем собственных потоков
Обработка ошибок потока
Таблицы
3.1: Общие сообщения событий, связанных с мышью
3.2: Используемые на Шаге 4 сообщения
7.1: Диапазоны сообщений Windows
10.1: Поля атрибутов окна
10.2: Регистрационные атрибуты окна
10.3: Методы окна файла и ID меню
10.4: Типичные значения полей окна редактирования
12.1: Управления Windows, поддерживаемые ObjectWindows
12.2: Информационные сообщения блока списка
12.3: Общие стили управления редактированием
12.4: ID меню и вызываемые ими методы
13.1: Стандартные методы, команды и действия MDI
16.1: Форматы буфера вырезанного изображения
17.1: Основные инструменты рисования
17.2: Примеры значений цвета
17.3: Константы шага и семейства шрифтов
18.1: Опции командной строки компилятора ресурсов
19.1: Значения ошибок при создании окон
Рисунки
1.1: Экранные компоненты приложения Windows
1.2: IDE Turbo Pascal в качестве примера MDI
1.3: Взаимодействие приложения Windows с Windows и DOS.
2.1: Полное приложение ObjectWindows
2.2: Ваша первая программа ObjectWindows
2.3: Реакция MyProgram на совершенное пользователем действие
2.4: MyProgram с модифицированным поведением своего закрытия
3.1: MyProgram рисует текст в указанных пользователем точках
3.2: Изменение толщины линии
4.1: MyProgram с ресурсом меню
4.2: MyProgram с системой Help
5.1: Группа связанных родительских и дочерних окон
5.2: Новое окно подсказок MyProgram
5.3: MyProgram с блоком диалога файла
6.1: Система подсказок MyProgram
7.1: Иерархия типов объектов в ObjectWindows
7.2: Как сообщение попадает в приложение
8.1: Вызов методов, которые управляют работой приложения
8.2: Головное окно
8.3: Усовершенствование инициализации приложения
8.4: Вызов методов при закрытии приложения
9.1: Коммуникация между Windows и приложениями
10.1: Атрибуты окна
10.2: Программа, которая использует класс IBeamWindows
10.3: Окно редактирования
11.1: Приложения диалога
11.2: Диалог со специализированной кнопкой
11.3: Диалог с проверкой корректности ввода
11.4: Диалог ввода
11.5: Диалог файла
12.1: Примеры некоторых управлений
12.2: Заполненный блок списка
12.3: Реакция на выбор пользователем элемента блока списка
12.4: Статические управления
12.5: Программа Windows, использующая кнопки
12.6: Окно с различными кнопками
12.7: Объект линейки прокрутки
12.8: Окно с множеством линеек прокрутки
12.9: Окно с управлениями редактированием
12.10: Созданное без рамки управление редактированием
12.11: Три типа комбинированных блоков и блок списка
12.12: Опускающийся комбинированный блок списка
12.13: Простой комбинированный блок
13.1: Компоненты примера приложения MDI
14.1: Пример уплотнения
17.1: Стили линий для ручки
17.2: Стили штриховки для кисти
17.3: Результат выполнения функции TextOut
17.4: Результат выполнения функции LineTo
17.5: Результат выполнения функции Polyline
17.6: Результат выполнения функции Arc
17.7: Результат выполнения функции Rectangle
17.8: Результат выполнения функции RoundRect
17.9: Результат выполнения функции Ellipse
17.10: Результат выполнения функции Pie
17.11: Результат выполнения функции Chord
17.12: Результат выполнения функции Polygon
18.1: Заполнение области экрана полосками
18.2: Ресурс побитового распределения для создания кисти по образцу
Рис.18.1
18.3: Меню, где в качестве одного из вариантов выбора использовано
побитовое распределение
19.1: Стандартное меню CUA
19.2: Рекомендуемые CUA элементы меню File
19.3: Рекомендуемые CUA элементы меню Edit
19.4: Рекомендуемые CUA элементы меню View
19.5: Рекомендуемые CUA элементы меню Options
19.6: Рекомендуемые CUA элементы меню Help
Введение
В Windows нет ничего сложного
Turbo Pascal для Windows обеспечивает превосходный новый способ разработки приложений для Microsoft Windows . До настоящего времени большинство программистов для среды Windows использовали язык программирования С и множество инструментальных средств, кот
орые работают в среде DOS. В результате этого процесс разработки программ для Windows был очень длительным, сложным и иногда заканчивался неудачей.
Turbo Pascal для Windows
Но все это имело место раньше, а теперь все иначе. Turbo Pascal для Windows содержит ряд важных новых методов, которые устраняют сложности разработки приложений Windows.
- Расширение языка Pascal
- Среда работы Windows
- Диалоговые средства редактирования ресурсов в среде Windows
- Turbo Debugger для Windows
Давайте подробно рассмотрим каждую из этих возможностей.
Язык программирования Turbo Pascal
До настоящего момента если вы и разрабатывали приложения для Windows, то скорее всего вами использовался язык программирования С. Но иногда у вас не было желания писать на С, либо у вас уже был код на языке Pascal, который вы хотели бы адаптировать для W
indows. Turbo Pascal теперь имеет все нужные вам средства для разработки развитых приложений Windows.
Наряду со всеми характеристиками, которые вы могли ожидать от Turbo Pascal (быстрая компиляция, возможность повторного использования модулей кода и объектно-ориентированное программирование) Turbo Pascal для Windows обеспечивает использование и создание
библиотек динамической компоновки (DLL), прямое включение файлов ресурсов Windows, ряд новых типов данных и модернизированная версия стандартных модулей DOS Turbo Pascal для Windows.
Программирование для Windows в среде Windows
Первая особенность, на которую вы возможно обратите внимание при написании программ на Turbo Pascal для Windows, это то, что интегрированная среда разработки (IDE) работает в Windows как программа Windows. Это означает, что вы можете писать компилировать
и тестировать ваши приложения на Turbo Pascal полностью используя возможности многозадачного режима Windows.
Средства редактирования ресурсов
Turbo Pascal для Windows включает компилятор ресурсов фирмы Microsoft и полный набор редакторов ресурсов. Редакторы ресурсов позволяют модифицировать такие ресурсы, как меню, диалоги, побитовые распределения, пиктограммы и курсоры визуально, без какого-л
ибо программирования. Компилятор ресурса позволяет вам скомпилировать сценарий ресурса, написанный другим программистом Windows.
Библиотека ObjectWindows
Windows содержит большое количество таких нововведений, о которых вы ранее даже не могли и подумать. Например, работа с текстом и графикой в окнах изменяющегося размера, взаимодействие с другими программами в многозадачной среде и манипулирование почти 6
00 функциями в Windows API. Возможно, самая сложная задача будет состоять в том, чтобы определить, что нужно сделать с вашей программой, чтобы она работала в Windows, а затем убедиться в том, что все это сделано.
Для того, чтобы программа была квалифицирована, как программа Windows, от нее требуется достаточно много. Например, нельзя осуществлять запись непосредственно на экран. Нельзя непосредственно модифицировать память. Кроме того, приложение Windows должно з
нать, как следует реагировать на поток сообщений, которых Windows посылает приложению в ответ на события, генерируемые пользователем, например, выбор варианта из меню.
Но мы не оставим вас наедине с этой проблемой. Вам будет дан первоначальный толчок: ObjectWindows.
ObjectWindows представляет собой объектно-ориентированную библиотеку, которая включает в себя большинство вариантов поведения, которыми должно обладать каждое окно, и позволяет унаследовать все эти способности вместо их разработки заново при начале напис
ания новой программы. Предоставляя вам такое солидное и надежное обрамление мы даем вам возможность сконцентрироваться на содержательной части программы, вместо непроизводительной затраты усилий на части программы, которые являются общими для всех прилож
ений Windows.
Turbo Debugger для Windows
Turbo Debugger для Windows представляет собой мощный отладчик на уровне исходного кода предназначенный для работы с Turbo Pascal для Windows. Turbo Debugger для Windows обеспечивает полное распознавание выражений Turbo Pascal и ассемблера, специальные ср
едства отладки приложений Windows и объектно-ориентированных программ.
Подробное описание использования отладчика можно найти в "Руководстве пользователя по Turbo Debugger для Windows".
Требования к подготовке
До того как приступить к написанию приложений для Windows, нужно знать ряд вещей. Первое состоит в том, что вам необходимо знать, как использовать и Turbo Pascal и Windows. Элементы программирования на Turbo Pascal можно найти в "Руководстве пользователя
" и "Руководстве программиста", а детали по использованию Windows поставляются вместе с программным обеспечением Windows.
Кроме того, вы должны владеть приемами объектно-ориентированного программирования, для того, чтобы использовать ObjectWindows. Разработанные с ObjectWindows приложения широко используют объектно-ориентированные методы, включая наследование и полиморфизм.
Эта тема рассматривается в "Руководстве пользователя", Глава 4, "Объектно-ориентированное программирование".
Кроме объектно-ориентированных методов, нужно быть знакомым с использованием указателей и динамических переменных, т.к. практически все элементы ObjectWindows динамически размещаются в динамической области памяти.
О содержании этой книги
Turbo Pascal для Windows является новым подходом к программированию Windows и ObjectWindows использует некоторые приемы, которые могут быть вам неизвестны, поэтому данное руководство содержит большой объем пояснительного материала. Полный справочный мате
риал как по ObjectWindows, так и по Интерфейсу Программного приложения Windows можно найти в "Справочном руководстве по Windows".
Данное руководство состоит из четырех частей:
- Часть 1, "Обучение ObjectWindows", служит введением в принципы написания программ Windows на Turbo Pascal и содержит учебный материал, который иллюстрирует процесс написания и усовершенствования приложения ObjectWindows.
- Часть 2, "Использование ObjectWindows", содержит детальное описание элементов ObjectWindows, включая обзор иерархии объектных модулей и их взаимодействие со средой Windows, детальное описание частей этой иерархии и их использования.
- Часть 3, "Расширенное использование ObjectWindows", рассматривает важные темы более сложных приемов программирования для Windows, особенно методы непосредственного взаимодействия с Windows : графика, использование ресурсов, управление памятью, разд
еление кода и данных, рекомендации по программированию для Windows.
- Часть 4, "Наборы и потоки", описывает использование механизмов наборов и потоков с объектами Turbo Pascal, при этом специальное внимание уделяется работе с ObjectWindows.
|