Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Часть 2. Использование ObjectWindows


                           Глава 7. Иерархия ObjectWindows
        -----------------------------------------------------------------

             ObjectWindows представляет собой исчерпывающий набор  объек-
        тов, облегчающий  разработку  программ  для  Microsoft Windows на
        Паскале. В  данной  главе  вы  найдете  обзор  иерархии  объектов
        ObjectWindows. В  остальных  главах данной части дается детальное
        описание различных частей иерархии.

             Кроме описания иерархии объектов, в данной главе описываются
        основные принципы   программирования   для   операционной   среды
        Windows, включая вызов API Windows.

                                  Соглашения Windows 
        -----------------------------------------------------------------

             Соглашения по  именам  ObjectWindows  обеспечивают ясность и
        содержательность имен.

                                    Имена объектов
        -----------------------------------------------------------------

             Имена всех объектный типов, предусмотренных в ObjectWindows,
        начинаются с буквы T. Например, объекты диалоговых окон имеют тип
        TDialog. Для  каждого  определения  объектного типа имеется соот-
        ветствующий ссылочный тип,  начинающийся с P. Например, указатель
        на TDialogh имеет тип PDialog. В примерах данного руководства бу-
        дут создаваться динамические экземпляры объектов, например, с по-
        мощью PDialog  позволяет разместить объекты TDialog в динамически
        распределяемой области памяти.

                                    Имена методов
        -----------------------------------------------------------------

             Методы реакции  на сообщения называются по именам сообщений,
        на которые они отвечают,  но без подчеркиваний.  Например, метод,
        отвечающий на сообщение wm_KeyDown будет называться WMKeyDown.


                                    Обзор объектов
        -----------------------------------------------------------------

                                  Иерархия объектов
        -----------------------------------------------------------------

             ObjectWindows - это иерархия объектных типов, которые вы мо-
        жете использовать для работы с большинством обычных задач в  при-
        ложении ObjectWindows. Схема объектов пользовательского интерфей-
        са библиотеки показана на Рис. 7.1. На Рис. 7.2 представлены объ-
        екты иерархии,  используемые для управления данными и проверки их
        допустимости.

             +----------------+
             |    TObject     |
             +-------+--------+
                +----+--------------+----------------------+------------+
        +-------+--------+ +--------+-------+      +-------+--------+   |
        |   TPrintout    | |    TPrinter    |      | TWindowsObject |   |
        +-------+--------+ +----------------+      +-------+--------+   |
                +-------------------+                      |            |
        +-------+--------+ +--------+-------+  +-----------+            |
        | TEditPrintout  | | TWindowPrintout|  |           +------------|
        +----------------+ +----------------+  |           |            |
                                               |   +-------+--------+   |
               +--------------------+----------+   |  TApplication  |   |
               |                    |              +----------------+   |
        +------+---------+ +--------+-------+              +------------+
        |    TDialog     | |   TWindow      |              |
        +------+---------+ +--------+-------+      +-------+--------+
               |                    |              |   TScroller    |
               |                    |              +----------------+
               |                    +----------------------------+
               +-------------------+-----------+                 |
        +------+---------+ +-------+--------+  |                 |
        |  TFileDialog   | | TInputDialog   |  |                 |
        +----------------+ +----------------+  |                 |
               +----------------------+--------+                 |
        +------+------------+         |                          |
        |TPrinterAbortDialog|         +------------+             |
        +-------------------+         |            |             |
                                      |   +--------+-------+     |
                +---------------------|   |  TPrintDialog  |     |
        +-------+--------+            |   +----------------+     |
        |TPrinterSetupDlg|            +------------+             |
        +----------------+                         |             |
                                          +--------+-------+     |
                                          |   TDlgWindow   |     |
                                          +----------------+     |


                                                                 |
                +------------------+------------------+----------|
        +-------+--------+ +-------+--------+ +-------+--------+ |
        |    TControl    | |   TMDIClient   | |   TMDIWindow   | |
        +-------+--------+ +----------------+ +----------------+ |
                +------------------+-----------+          +------+
        +-------+--------+ +-------+--------+  |  +-------+--------+
        |    TButton     | |   TScrollBar   |  |  |  TEditWindow   |
        +-------+--------+ +----------------+  |  +-------+--------+
        +-------+--------+                     |  +-------+--------+
        |   TCheckBox    |         +-----------|  |  TFileWindow   |
        +-------+--------+         |           |  +----------------+
        +-------+--------+ +-------+--------+  +----------+
        |  TRadioButton  | |    TStatic     |  |          |
        +----------------+ +-------+--------+  |          |
                                   |           |  +-------+--------+
                           +-------+--------+  |  |    TListBox    |
                           |     TEdit      |  |  +-------+--------+
                           +----------------+  |          |
                                               |  +-------+--------+
                                   +-----------+  |   TComboBox    |
                                   |              +----------------+
                           +-------+--------+
                           |    TGroupBox   |
                           +----------------+

             Модуль OPRINTER:    Модуль OWINDOWS:    Модуль OSTDDLGS:

             TPrinout            TWindow             TInputDialog
             TPtinter            TAppication         TInputDialog
             TEditPrintout       TScroller
             TWindowPrintout
             TPrinterAbortDlg
             TPrintDialog
             TPrinterSetup

             Модуль ODUIALOGS:   Модуль OSTDWNDS:

             TDialog             TEditWindow
             TDlgWindow          TFileWindow
             TButton
             TScrollBar
             TCheckBox
             TRadioButton
             TControl
             TStatic
             TEdit
             TListBox
             TComboBox
             TGroupBox
                  Рис. 7.1. Иерархия объектных типов ObjectWindows.


             +----------------+
             |    TObject     |
             +-------+--------+
                +----+--------------+--------------------+
        +-------+--------+  +-------+--------+   +-------+--------+
        |   TValidator   |  |   TCollection  |   |    TStream     |
        +-------+--------+  +----------------+   +---------+------+
                +---------------------+------------------+ +--------+
        +-------+-----------+ +-------+--------+ +-------+--------+ |
        |TPXPictureValidator| |TFilterValidator| |TLookupValidator| |
        +-------------------+ +-------+--------+ +-------+--------+ |
                              +-------+---------+        |          |
                              | TRangeValidator |     +--+          |
                              +-----------------+     |             |
                                           +----------+-----------+ |
                                           |TStringLookupValidator| |
                                           +----------------------+ |
                +-------------------+-------------------+-----------+
        +-------+--------+  +-------+--------+  +-------+--------+
        | TMemoryStream  |  |   TDosStream   |  |   TEmsStream   |
        +----------------+  +-------+--------+  +----------------+
                            +-------+--------+
                            |   TBufStream   |
                            +----------------+

             Рис. 7.2 Иерархия наборов, потоков и проверки допустимости.

             Модуль OBJECTS:        Модуль VALIDATE:

             TObject                TValidator
             TCollection            TPXPictureValidator
             TSortedCollection      TFilterValidator
             TStrCollection         TRangeValidator
             TStringCollection      TLookupValidator
             TStream                TStrongLookupValidator
             TMemoryStream
             TEmsStream
             TDosStream
             TBufStream

                                 Базовый объект

             TObject - это базовый объектный тип,  общий предок всех объ-
        ектов ObjectWindows.  Он определяет рудиментарный  конструктор  и
        деструктор. Потоки ObjectWindows требует, чтобы записанные объек-
        ты были потомками TObject.

                                  TApplication

             Этот тип определяет поведение, необходимое для всех приложе-
        ний ObjectWindows.  Каждое  приложение ObjectWindows,  которое вы
        пишете, будет определять объектный тип приложения, производный от
        TApplication. Объекты  приложения  подробно описываются в Главе 8
        "Объекты приложения".

                              Интерфейсные объекты

             Остальные объекты в иерархии ObjectWindows  классифицируются
        в общем случае как интерфейсные объекты.  Они являются интерфейс-
        ными в том смысле,  что представляют элементы и  пользовательском
        интерфейсе Windows  и  служат интерфейсом между кодом вашей прик-
        ладной программы и операционной средой Windows. Интерфейсные объ-
        екты описываются в Главе 9.

                                 Объекты Windows

             Объекты Windows  представляются  не  только знакомыми окнами
        среды Windows, но и большинством визуальных инструментов операци-
        онной среды, такими как управляющие элементы.

                            Объекты диалоговых блоков

             Объекты диалоговых блоков (окон) обеспечивают временные  ок-
        на для обслуживания специальных функций ввода и вывода.  В  общем
        случае они включат в себя текст и управляющие элемента, такие как
        командные кнопки,  блоки списка и полосы прокрутки.  Об  объектах
        диалоговых блоков подробно рассказывается в Главе 11.

                          Объекты управляющих элементов

             В диалоговых  блоках  и некоторых окнах управляющие элементы
        позволяют пользователям вводить данные и выбирать параметры. Объ-
        екты управляющих  элементов  обеспечивают согласованные и простые
        средства для работы со всеми типами управляющих элементов,  опре-
        деленных в Windows. Объекты управляющих элементов подробно описы-
        ваются в Главе 12.

                                   Объекты MDI

             Windows реализует стандарт для работы с несколькими докумен-
        тами в рамках одного окна, которое называется множественным доку-
        ментальным интерфейсом (MDI). ObjectWindows обеспечивает средства
        для установки окон MDI и работы с ними. Объекты MDI подробно опи-
        сываются в Главе 14.

                          Объекты проверки допустимости

             ObjectWindows содержит полный набор объектов проверки допус-
        тимости данных,  которые позволяют проверять допустимость данных,
        введенных пользователем, при выходе пользователя из поля или ког-
        да пользователь  завершает работу с окном.  Проверка допустимости
        данных описывается в Главе 13.

                                Объекты принтера

             Для работы с печатью документов или печати содержимого  окна
        ObjectWindows предусматривает соответствующие объекты. О том, как
        использовать эти объекты, рассказывается в Главе 15.

                            Объекты наборов и потоков

             Модуль Object включает в себя многочисленные объекты, реали-
        зующие гибкие структуры данных и потоки,  позволяющие считывать и
        записывать объекты.  Наборы описываются в Главе 19,  а потоки - в
        Главе 20.


                                 Файлы ObjectWindows
        -----------------------------------------------------------------

             Перечисленные выше типы ObjectWindows реализует в  скомпили-
        рованных модулях.  В данном разделе кратко описывается содержимое
        поставляемых модулей. В каждом приложении ObjectWindows требуется
        только модуль OWindows.

             В данной  версии ObjectWindows различные части иерархии объ-
        ектов разбивают  различные части иерархии объектов  по  отдельным
        моделям. Чтобы  перекомпилировать  код ObjectWindows более ранних
        версий, в общем  случае  нужно  изменить  все  ссылки  на  модуль
        WObjects на OWindows и добавить к программам и модулям, использу-
        ющим наборы и потоки или диалоговые блоки, соответственно Objects
        и ODialogs.

             В данную  версию  ObjectWindows добавлены также новые модули
        для печати,  проверки данных, специализированных управляющих эле-
        ментов Borland и поддержки Windows 3.1.

             В Таблице  7.1  перечислены  модули,  составляющие интерфейс
        ObjectWindows и AOPI Windows 3.0. Модули, поддерживающие расшире-
        ния Windows 3.1, представлены в Таблице 7.2.

                     Модули для ObjectWindows и API Windows   Таблицы 7.1
        +----------------+----------------------------------------------+
        |    Модуль      |             Содержимое                       |
        +----------------+----------------------------------------------|
        |    Objects     | Базовый объект TObject, наборы, потоки.      |
        |    OWindows    | Приложения, окна, полосы прокрутки, окна MDI.|
        |    ODialogs    | Диалоговые блоки, диалоговые окна,  управляю-|
        |                | щие элементы.                                |
        |    OPrinter    | Печать, специальные распечатки.              |
        |    Validate    | Проверка допустимости данных.                |
        |    BWCC        | Специализированные управляющие элементы фирмы|
        |                | Borland.                                     |
        |    OStdDlgs    | Диалоговые блоки  имен  файлов,  однострочный|
        |                | ввод.                                        |
        |    OStdWnds    | Окна  текстового  редактора,  окна  редактора|
        |                | файлов.                                      |
        |    WinTypes    | Все  типы,  используемые  подпрограммами  API|
        |                | Windows 3.0, включая записи, стили, сообщений|
        |                | и флаги.                                     |
        |    WinProcs    | Описания  процедур  и функций для API Windows|
        |                | 3.0.                                         |
        +----------------+----------------------------------------------+


                                    Файлы ресурсов
        -----------------------------------------------------------------

             Модули OStdDlgs,  OStdWnds и OPrinter имеют связанные с ними
        файлы ресурсов. Ресурс модуля находится в файле с именем, эквива-
        лентным имени модуля,  и расширением .RES.  Ресурсы автоматически
        включаются  при  использовании  соответствующих модулей,  так что
        программа, которая использует модуль OstdDlgs, будет автоматичес-
        ки иметь доступ к ресурсам в OSTDDLGS.RES.

                                  Файлы Windows 3.1
        -----------------------------------------------------------------

             Кроме стандартных модулей API Windows 3.0,  вы можете писать
        программы, использующие преимущества средств,  добавленных в вер-
        сию 3.1 Windows. Каждая из 11 DLL Windows 3.1 имеет соответствую-
        щий модуль:

                  Модули для доступа к средствам Windows 3.1  Таблица 7.2
        +----------------+----------------------------------------------+
        |    Модуль      |                     Средство                 |
        +----------------+----------------------------------------------|
        |    ComDlg      | Общие диалоговые блоки.                      |
        |    DDTML       | Сообщения динамического обмена данными.      |
        |    Dlgs        | Константы диалогового блока.                 |
        |    LZExpand    | Расширения файла LZ.                         |
        |    MMSystem    | Расширения мультимедиа.                      |
        |    OLE         | Компоновка и встраивание объектов (OLE).     |
        |    ShellAPI    | Оболочка API Windows.                        |
        |    Stress      | Строгая проверка типов.                      |
        |    ToolHelp    | Отладка и другие инструментальные средства.  |
        |    Ver         | Версии.                                      |
        |    Win31       | Расширения Windows 3.1.                      |
        +----------------+----------------------------------------------+


                               Взаимодействие с Windows
        -----------------------------------------------------------------

             ObjectWindows избавляет вас от многих утомительных  и  запу-
        танных частей Windows, но иногда возникает необходимость в непос-
        редственном взаимодействии с Windows (например,  когда вы  хотите
        переопределить некоторое  заданное  в Windows поведение или выйти
        за рамки того, что инкапсулировано в ObjectWindows).

             Существует два способа,  с помощью которых вы можете взаимо-
        действовать с ObjectWindows: вызов ее функций API и получение со-
        общений. В данном разделе описываются функции API.  Об  обработке
        сообщений рассказывается в Главе 16 "Сообщения Windows".

                                 Функции API Windows
        -----------------------------------------------------------------

             Функциональные возможности Windows заключены в ее около  600
        функций. Каждая функция имеет имя. Взаимодействовать с операцион-
        ной средой Windows,  модифицировать ее отображение или действие в
        ответ на  ввод  пользователя  можно с помощью вызова функций API.
        Однако с помощью ObjectWindows вы можете создавать окна, выводить
        диалоговые блоки и манипулировать управляющими элементами, не вы-
        зывая функций Windows. Как все это работает?

                          Вызов в ObjectWindows функций API
        -----------------------------------------------------------------

             Методы ObjectWindows вызывают функции API.  Но ObjectWindows
        - это не дублируемые функциональные возможности; она предоставля-
        ет в  новом  пакете  объектно-ориентированной  библиотеки функции
        Windows, ее  прикладной программный интерфейс (API).  Кроме того,
        ObjectWindows значительно упрощает задачи спецификации  многочис-
        ленных параметров, требуемых в функциях Windows. Часто ObjectWin-
        dows автоматически подставляет  параметры,  такие  как  описатели
        окон и  идентификаторы  дочерних окон,  которые хранятся в интер-
        фейсных объектах в виде полей.

             Например, многие функции Windows для задания окна, с которым
        они должны работать, используют описатели окна, и эти функции вы-
        зываются  обычно из методов оконного объекта.  Объекты содержат в
        поле HWindow описатель соответствующего окна и  может  передавать
        его,  освобождая  вас от необходимости каждый раз задавать описа-
        тель.  Таким образом, объектные типы ObjectWindows служат объект-
        но-ориентированным слоем,  реализованным с помощью вызовов необъ-
        ектно-ориентированных функций API.


                                Доступ к функциям API
        -----------------------------------------------------------------

             Чтобы  из приложения ObjectWindows обратиться непосредствен-
        но к  функциям  API,  вы  должны  использовать  модуль  WinProcs.
        WinProcs определяет для каждой функции Windows заголовок процеду-
        ры или  функции  Паскаля,  что  позволяет  вам  вызывать  функции
        Windows как  любую  подпрограмму на Паскале.  Перечень заголовков
        этих функций вы можете найти в файле WINPROCS.PAS или в оператив-
        ном справочнике Help.

                                  Константы Windows 
        -----------------------------------------------------------------

             Функции Windows требуют от вас передачи в качестве  аргумен-
        тов разнообразных  констант типа Word или Longint.  Эти константы
        представляют стили окна,  диалогового блока или управляющего эле-
        мента, а  также возвращаемые значение и др.  Если в программе ис-
        пользуются данные константы,  она становится более читаемой, обс-
        луживаемой и  будет  более независимой от изменений в последующих
        версиях Windows,  чем программы, использующие числа. Определенные
        в модуле WinTypes константы описываются в Главе 21 "Справочник по
        ObjectWindows".

                                Записи данных Windows
        -----------------------------------------------------------------

             Некоторые функции Windows  требуют  более  сложных  структур
        данных, например,    шрифтов   (TLongFont)   или   классов   окон
        (TWndClass). Windows и  ObjectWindows  определяют  эти  и  другие
        структуры данных.  Перечень  доступных структур вы можете найти в
        оперативном справочнике или в файле WINTYPES.PAS.  Структуры, не-
        посредственно используемые  в  ObjectWindows,  вы  можете найти в
        Главе 21 "Справочник по ObjectWindows".

             При использовании ObjectWindows все функции Windows доступны
        также непосредственно и могут вызываться в вашей программе  (если
        в ее операторе uses указывается модуль WinProcs).  Например, сле-
        дующий код для получения окна сообщений вызывает функцию  Windows
        MessageBox:

             Reply := MessageBox(HWindow, 'Хотите сохранить?',
                      'Файл изменен', mb_YesNo or mb_IconQuestion);

             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
        -----------------------------------------------------------------

             Ниже перечислены виды функций Windows, которые вы можете ис-
        пользовать в своих программах ObjectWindows.

                  Функции интерфейса с администратором Windows

             Эти функции выполняют обработку сообщений,  манипулируют ок-
        нами и диалоговыми блоками и создают системный вывод.  Данная ка-
        тегория включает в себя функции для меню, курсоров и буфера выре-
        занного изображения.

                               Функции интерфейса
                        с графическими устройствами (GDI)

             Эти функции выводят на разнообразные устройства (включая эк-
        ран и принтер) текст, графику и битовые массивы. Они не привязаны
        к конкретному устройству и являются независимыми от устройства.

               Функции интерфейса со служебными функциями системы

             Эти функции  работают  с  широким  диапазоном системных уст-
        ройств, включая управление памятью, взаимодействие с операционной
        системой, администрирование ресурсов и коммуникации.


                              Функции системного вызова
        -----------------------------------------------------------------

             Windows содержит ряд функций,  которые позволяют вам  прохо-
        дить в цикле (или перечислять) определенные типы элементов в сис-
        теме Windows.  Например,  перечислить шрифты системы и напечатать
        образец текста, используя каждый из них. Чтобы использовать такую
        функцию, вы должны передать указатель на нее (указатель системной
        функции),  и Windows будет использовать его в процессе перечисле-
        ния.  Данная  функция  при итерации по списку характеристик окна,
        окон,  дочерних окон,  шрифтов и т.д.  вызывается непосредственно
        Windows.

             Функции Windows,  требующие функций системного  вызова  (или
        повторного вызова),    включают    в    себя:   EnimChildWindows,
        EnumClipboardFormats,   EnumFonts,   EnumMetaFile,   EnumObjects,
        EnumPops, EnumTaskWindows и EnumWindows.

             Функция системного вызова должна быть обычной функцией, а не
        методов объекта.  Указатель на эту функцию передается в  качестве
        первого параметра (типа TFarProc) данных методов.  Например, если
        вы определили в Паскале  функцию  системного  вызова  ActOnWindow
        следующим образом:

             function ActOnWindow(TheHandle: HWnd; The Value: Longint):
                   Integer; far; export;

        то можете передать ее в качестве функции  системного  вызова  при
        вызове функции Windows EnumWindows:

             ReturnValue := EnumWindows(TFarProc(ActOnWindow), ALongint);

             Функция системного вызова должна иметь тот же тип возвращае-
        мого значения,  что и  вызывающая  ее  функция  Windows.  Функция
        ActOnWindows будет выполнять некоторое действие с окном, заданным
        переданным указателем.  Параметр TheValue - это  любое  значение,
        выбранное для передачи в вызывающей программе.

             Директива компилятора  {$K+}  позволяет автоматически управ-
        лять функциями системного вызова.  Если вы не выбираете {$K+}, то
        для возврата  адреса,  по которому будет выполнять вызов Windows,
        должны передавать свои функции системного  вызова  через  функцию
        API MakeProcInstance.

[ Назад | Оглавление | Далее ]










helloworld.ru © 2001-2021
Все права защищены