ObjectWindows представляет собой исчерпывающий набор объектов, облегчающий разработку программ для Microsoft Windows на Паскале. В данной главе вы найдете обзор иерархии объектов ObjectWindows. В остальных главах данной части дается детальное описание различных частей иерархии.
    Кроме описания иерархии объектов, в данной главе описываются основные принципы программирования для операционной среды Windows, включая вызов API Windows.
    Соглашения по именам ObjectWindows обеспечивают ясность и
содержательность имен.
    Имена всех объектный типов, предусмотренных в ObjectWindows,
начинаются с буквы T. Например, объекты диалоговых окон имеют тип
TDialog. Для каждого определения объектного типа имеется
соответствующий ссылочный тип, начинающийся с P. Например, указатель
на TDialogh имеет тип PDialog. В примерах данного руководства
будут создаваться динамические экземпляры объектов, например, с
помощью PDialog позволяет разместить объекты TDialog в динамически
распределяемой области памяти.
    Методы реакции на сообщения называются по именам сообщений,
на которые они отвечают, но без подчеркиваний. Например, метод,
отвечающий на сообщение wm_KeyDown будет называться WMKeyDown.
Соглашения Windows
Имена объектов
Имена методов
Обзор объектов
Модуль | Содержимое |
---|---|
Objects | Базовый объект TObject, наборы, потоки. |
OWindows | Приложения, окна, полосы прокрутки, окна MDI. |
ODialogs | Диалоговые блоки, диалоговые окна, управляю- |
щие элементы. | |
OPrinter | Печать, специальные распечатки. |
Validate | Проверка допустимости данных. |
BWCC | Специализированные управляющие элементы фирмы Borland. |
OStdDlgs | Диалоговые блоки имен файлов, однострочный ввод. |
OStdWnds | Окна текстового редактора, окна редактора файлов. |
WinTypes | Все типы, используемые подпрограммами API Windows 3.0, включая записи, стили, сообщений и флаги. |
WinProcs | Описания процедур и функций для API Windows 3.0. |
Модуль | Средство |
---|---|
ComDlg | Общие диалоговые блоки. |
DDTML | Сообщения динамического обмена данными. |
Dlgs | Константы диалогового блока. |
LZExpand | Расширения файла LZ. |
MMSystem | Расширения мультимедиа. |
OLE | Компоновка и встраивание объектов (OLE). |
ShellAPI | Оболочка API Windows. |
Stress | Строгая проверка типов. |
ToolHelp | Отладка и другие инструментальные средства. |
Ver | Версии. |
Win31 | Расширения Windows 3.1. |
    ObjectWindows избавляет вас от многих утомительных и
запутанных частей Windows, но иногда возникает необходимость в
непосредственном взаимодействии с Windows (например, когда вы хотите
переопределить некоторое заданное в Windows поведение или выйти
за рамки того, что инкапсулировано в ObjectWindows).
    Существует два способа, с помощью которых вы можете
взаимодействовать с ObjectWindows: вызов ее функций API и получение
сообщений. В данном разделе описываются функции API. Об обработке
сообщений рассказывается в Главе 16 "Сообщения Windows".
    Функциональные возможности Windows заключены в ее около 600
функций. Каждая функция имеет имя. Взаимодействовать с
операционной средой Windows, модифицировать ее отображение или действие в
ответ на ввод пользователя можно с помощью вызова функций API.
Однако с помощью ObjectWindows вы можете создавать окна, выводить
диалоговые блоки и манипулировать управляющими элементами, не
вызывая функций Windows. Как все это работает?
    Методы ObjectWindows вызывают функции API. Но ObjectWindows
- это не дублируемые функциональные возможности; она
предоставляет в новом пакете объектно-ориентированной библиотеки функции
Windows, ее прикладной программный интерфейс (API). Кроме того,
ObjectWindows значительно упрощает задачи спецификации
многочисленных параметров, требуемых в функциях Windows. Часто
ObjectWindows автоматически подставляет параметры, такие как описатели
окон и идентификаторы дочерних окон, которые хранятся в
интерфейсных объектах в виде полей.
    Например, многие функции Windows для задания окна, с которым
они должны работать, используют описатели окна, и эти функции
вызываются обычно из методов оконного объекта. Объекты содержат в
поле HWindow описатель соответствующего окна и может передавать
его, освобождая вас от необходимости каждый раз задавать
описатель. Таким образом, объектные типы ObjectWindows служат
объектно-ориентированным слоем, реализованным с помощью вызовов
необъектно-ориентированных функций API.
    Чтобы из приложения ObjectWindows обратиться
непосредственно к функциям API, вы должны использовать модуль WinProcs.
WinProcs определяет для каждой функции Windows заголовок
процедуры или функции Паскаля, что позволяет вам вызывать функции
Windows как любую подпрограмму на Паскале. Перечень заголовков
этих функций вы можете найти в файле WINPROCS.PAS или в
оперативном справочнике Help.
    Функции Windows требуют от вас передачи в качестве
аргументов разнообразных констант типа Word или Longint. Эти константы
представляют стили окна, диалогового блока или управляющего
элемента, а также возвращаемые значение и др. Если в программе
используются данные константы, она становится более читаемой,
обслуживаемой и будет более независимой от изменений в последующих
версиях Windows, чем программы, использующие числа. Определенные
в модуле WinTypes константы описываются в Главе 21 "Справочник по
ObjectWindows".
    Некоторые функции Windows требуют более сложных структур
данных, например, шрифтов (TLongFont) или классов окон
(TWndClass). Windows и ObjectWindows определяют эти и другие
структуры данных. Перечень доступных структур вы можете найти в
оперативном справочнике или в файле WINTYPES.PAS. Структуры,
непосредственно используемые в ObjectWindows, вы можете найти в
Главе 21 "Справочник по ObjectWindows".
    При использовании ObjectWindows все функции Windows доступны
также непосредственно и могут вызываться в вашей программе (если
в ее операторе uses указывается модуль WinProcs). Например,
следующий код для получения окна сообщений вызывает функцию Windows
MessageBox:
    MessageBox возвращает целочисленное значение, указывающее,
какое действие выбрал пользователь для закрытия окна сообщения.
Если пользователь щелкнул "мышью" на командной кнопке Yes (Да),
то результат равен определенной в Windows целочисленной константе
id_Yes. Если пользователь щелкнул "мышью" на командной кнопке No
(Нет), то результат равен id_No.
    Функции Windows, позволяющие получить интерфейсные элементы,
требуют обычно некоторого параметра типа Word или Longint.
Идентификаторы констант стилей состоят из двухбуквенного
мнемонического префикса, за которым следует подчеркивание и описательное
имя. Например, ws_Popup - это константа стиля окна (ws_ означает
стиль окна - window style").
    Примечание: В Windows определены сотни констант
стилей, которые перечислены в Главе 21 "Справочник по
ObjectWindows".
    Часто эти стили комбинируются для получения другого
стиля. Например, в случае функции MessageBox вы можете передать в
качестве параметра стиля mb_YesNo или mb_IconQuestion. Этот стиль
дает окно сообщений с двумя командными кнопками Yes и No и
пикторгаммой вопросительного знака. Поразрядная операция or
фактически комбинирует две константы бит за битом. Полученный в
результате стиль представляет собой комбинацию обоих стилей.
    Имейте в виду, что некоторые стили взаимноисключающие. Их
комбинирование может дать непредвиденные или нежелательные
результаты.Взаимодействие с Windows
Функции API Windows
Вызов в ObjectWindows функций API
Доступ к функциям API
Константы Windows
Записи данных Windows
Reply := MessageBox(HWindow, 'Хотите сохранить?',
'Файл изменен', mb_YesNo or mb_IconQuestion);
Комбинирование констант стилей