Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Часть 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.
                              Назад | Содержание | Вперед
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...