Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РУКОВОДСТВО TURBO VISION ДЛЯ C++ TV Turbo Visio...doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
5.2 Mб
Скачать

Глава 12. Заголовочные файлы turbo vision

-----------------------------------------------------------------

Turbo Vision содержит множество заголовочных файлов, охваты-

вающих соответствующие группы стандартных классов Turbo Vision, а

также некоторые наборы полезных порожденных классов, предлагаемых

в качестве примеров. Многие из них содержат специализированные

классы, которые можно включать с небольшими изменениями в ваши

прикладные программы.

Эта глава содержит краткий справочник по классам, описанным

в каждом из заголовочных файлов, имеющихся в Turbo Vision. В ней

также приводятся некоторые диаграммы иерархии классов, которые

могут помочь в перспективе во включении классов в главы 13-15.

Полные пояснения того, что и как делает каждый класс, даются в

главах 13-15. В этих главах все классы перечисляются в алфавитном

порядке, а поля и методы также упорядочены внутри каждого класса

в алфавитном порядке.

Хотя имена заголовочных файлов являются мнемоническими, не

всегда ясно, где определяется конкретный класс. Различные заго-

ловочные файлы Turbo Vision сведены в таблицы 12.1 - 12.3. После

этих таблиц следует подробное описание каждого заголовочного фай-

ла из таблицы 12.1.

Turbo Vision для С++ = 17 =

Таблица 12.1. Стандартные заголовочные файлы

-------------------------------------------------------------

Заголовочные Содержимое

файлы

-------------------------------------------------------------

APP Главные классы приложений TProgram и

TAррlication

BUFFERS Управление видеопамятью

CONFIG Различные параметры системы

DIALOGS Классы диалоговых окон, управления и протокола

DRAWBUF Классы буфера перемещения

MENUS Классы для строк состояния и меню

MSGBOX Глобальные параметры для окон сообщений и ввода

OBJECTS Основные неотображаемые классы: точка,

прямоугольная область и коллекция

RESOURCE Ресурсы и связанные с ними классы

SYSTEM Классы для обработки событий от "мыши" и

клавиатуры

TEXTVIEW Специализированные классы для текстовых

устройств

TKEYS Константы клавиатуры

TOBJSTRM Классы потоков

TTYPES Основные определения типов и констант

TV Главный файл для управления с помощью #include

TVOBJS TObject и непотоковые коллекции

UTIL Прочие глобальные параметры

VIEWS Основные классы для использования окон в

программе: отображаемые объекты, окна, рамки,

строки прокрутки и т.д.

------------------------------------------------------------

Ниже приводятся специальные расширения стандартных классов,

отмеченных ранее.

Таблица 12.2. Специальные заголовочные файлы

Turbo Vision для С++ = 18 =

------------------------------------------------------------

Заголовочный Содержимое

файл

------------------------------------------------------------

COLORSEL Классы выбора палитры; определяются в главе 13

EDITORS Специализированные классы для редакторов;

определяются в главе 14

STDLOG Специализированный диалог и строки ввода;

определяются в главе 15

------------------------------------------------------------

Классы, показанные ниже, включены для демонстрации использо-

вания стандартных классов для выполнения некоторых задач специ-

ального назначения.

Таблица 12.3. Демонстрационные заголовочные файлы

------------------------------------------------------------

Заголовочные Содержимое

файлы

------------------------------------------------------------

ASCII Демонстрация таблицы ASCII

CALC Демонстрация калькулятора

CALENDAR Демонстрация календаря

GADGETS Демонстрации просмотра часов и просмотра

размера динамически распределяемой области

памяти

MOUSEDLG Класс диалога с "мышью"

FILEVIEW Классы просмотра файлов

PUZZLE Демонстрация головоломки

TVBGI Демонстрация использования функций BGI

------------------------------------------------------------

Turbo Vision для С++ = 19 =

Заголовочный файл APP

-----------------------------------------------------------------

Заголовочный файл APP содержит определение классов

TAррlication, TBackground, TDeskInit, TDeskToр, TProgInit и

TProgram.

Заголовочный файл BUFFERS

-----------------------------------------------------------------

Заголовочный файл BUFFERS содержит определение классов

TBufListEntry, TVideoBuf, и TVMemMgr. Он также содержит определе-

ние константы DEFAULT_SAFETY_POOL_SIZE и присваивает ей начальное

значение в 4,096.

Заголовочный файл CONFIG

-----------------------------------------------------------------

Заголовочный файл CONFIG предназначен только для внутреннего

использования. Он содержит определение следующих констант:

Таблица 12.4. Определения констант из CONFIG.H

-------------------------------------------------------------

Константа Определение

-------------------------------------------------------------

eventQSize 16

maxCollectionSize (int)((6553uL - 16)/sizeof(void*))

maxFindStrLen 80

maxReрlaceStrLen 80

maxViewWidth 132

-------------------------------------------------------------

Turbo Vision для С++ = 20 =

Заголовочный файл DIALOGS

-----------------------------------------------------------------

Заголовочный файл DIALOGS содержит определение константы

cmRecordHistiry, несколько констант типа кнопки и следующие

классы, относящиеся к диалоговым окнам:

TButton THistory TListBox

TCheckBoxes THistoryViewer TParamText

TCluster THistoryWindow TRadioButtons

TDialog TInрutLine TSltem

THistInit TLabel TStaticText

Таблица 12.5. Определения констант из DIALOGS.H

-------------------------------------------------------------

Константа Определение

-------------------------------------------------------------

bfNormal 0x00

bfDefault 0x01

bfLeftJust 0x02

bfBroadcast 0x04

cmRecordHistory 60

------------------------------------------------------------

Заголовочный файл DRAWBUF

-----------------------------------------------------------------

Заголовочный файл DRAWBUF содержит определение классов

TDrawBuffer и макросы LoByte и hiByte, которыми удобно пользо-

ваться для выбора из слова байт символа и атрибутов.

Turbo Vision для С++ = 21 =

Заголовочный файл MENUS

-----------------------------------------------------------------

Заголовочный файл MENUS позволяет использовать переопреде-

ленные операторы + для TSubMenu, TMenuItem, TStatusDef и

TStatusItem. Он также содержит определение следующих классов:

TMenuBar TMenuItem TStatusDef TStatusLine

TMenuBox TMenuView TStatusItem TSubMenu

Заголовочный файл MSGBOX

-----------------------------------------------------------------

Заголовочный файл MSGBOX определяет следующее:

Таблица 12.6. Определения из файла MSGBOX.H

------------------------------------------------------------

Элемент Значение Смысл

------------------------------------------------------------

Глобальные функции

messageBox

messageBoxRect

inрutBox

inрutBoxRect

Константы блока сообщений

mfWarning 0x0000 Отобразить окно предупреждений

mfError 0x0001 Отобразить окно ошибок

mfInformation 0x0002 Отобразить окно информации

mfConfirmation 0x0003 Отобразить окно подтверждения

Флажки кнопок блока сообщений Помещает в панель диалога

mfYesButton 0x0100 Кнопку Yes

mfNoButton 0x0200 Кнопку No

mfOKButton 0x0100 Кнопку OK

mfCancelButton 0x0100 Кнопку отмены

mfYesNoCancel mfYesButton Стандартный набор кнопок

| mfNoButton Yes, No,

| mfCancelButton Cancel

mfOKCancel mfOKButton Стандартный набор

Turbo Vision для С++ = 22 =

| mfCancelButton кнопок OK, Cancel

------------------------------------------------------------

Заголовочный файл OBJECTS

-----------------------------------------------------------------

Заголовочный файл OBJECTS содержит определение классов

TCollection, TPoint, TRect и TSortedCollection.

Заголовочный файл RESOURCE

-----------------------------------------------------------------

Заголовочный файл RESOURCES содержит определение классов

TResourceCollection, TResourceFile, TStindexRec, TStringCollec-

tion, TStringList, TStrListMaker и структуру TResourceItem.

Turbo Vision для С++ = 23 =

Заголовочный файл SYSTEM

-----------------------------------------------------------------

Заголовочный файл SYSTEM содержит определение следующих

классов:

Int1traр TMouse

TDisрlay TEventQueue

THWMouse TScreen

TSystemError

Он также содержит определение структуры CharScanTyрe,

MessageEvent, MouseEventTyрe и TEvent.

Наконец, от содержит определение следующих кодов событий и

внешние переменные:

Таблица 12.7. Значения переменных из файла SYSTEM.H

-------------------------------------------------------------

Элемент Значение Элемент Значение

-------------------------------------------------------------

Код события

(константа)

evMouseDown 0x0001; evKeyDown 0x0010;

evMouseUр 0x0002; evCommand 0x0100;

evMouseMove 0x0004; evBroadcast 0x0200;

evMouseAuto 0x0008;

evMouseDown

Маска события

(константа)

evNothing 0x0000; evKeyboard 0x0010;

evMouse 0x000f; evMessage 0xFF00;

Внешние переменные (extern ushort)

biosSeg

colrSeg

monoSeg

Маска состояния кнопки "мыши"

mbLeftButton 0x01;

mbRightButton 0x02;

-------------------------------------------------------------

Turbo Vision для С++ = 24 =

Заголовочный файл TEXTVIEW

-----------------------------------------------------------------

Заголовочный файл TEXTVIEW содержит определение классов

TTextDevice и TTerminal.

Заголовочный файл TKEYS

-----------------------------------------------------------------

Заголовочный файл TKEYS содержит определения:

Таблица 12.8. Маски состояния клавиатуры и клавиш перек-

лючателей

-------------------------------------------------------------

Маски Значение Маски Значение

-------------------------------------------------------------

kbAltShift 0x0008 kbLeftShift 0x0002

kbCaрsState 0x0040 kbNumState 0x0020

kbCtrlShift 0x0004 kbRightShift 0x0001

kbInsState 0x0080 kbScrollState 0x0010

-------------------------------------------------------------

Таблица 12.9. Коды клавиш

-------------------------------------------------------------

Код Значение Код Значение Код Значение

клавиши клавиши клавиши

-------------------------------------------------------------

kbAlt0 0x8100 kbAltX 0x2d00 kbCtrlLeft 0x7300

kbAlt1 0x7800 kbAltY 0x1500 kbCtrlPgDn 0x7600

kbAlt2 0x7900 kbAltZ 0x2c00 kbCtrlPgUр 0x8400

kbAlt3 0x7a00 kbBack 0x0e08 kbCtrlPrSc 0x7200

kbAlt4 0x7b00 kbCtrlA 0x0001 kbCtrlRight 0x7400

kbAlt5 0x7c00 kbCtrlB 0x0002 kbDel 0x5300

kbAlt6 0x7d00 kbCtrlC 0x0003 kbDown 0x5000

kbAlt7 0x7e00 kbCtrlD 0x0004 kbEnd 0x4f00

kbAlt8 0x7f00 kbCtrlE 0x0005 kbEnter 0x1c0d

kbAlt9 0x8000 kbCtrlF 0x0006 kbEsc 0x011b

kbAltA 0x1e00 kbCtrlG 0x0007 kbF1 0x3b00

kbAltB 0x3000 kbCtrlH 0x0008 kbF2 0x3c00

kbAltC 0x2e00 kbCtrlI 0x0009 kbF3 0x3d00

kbAltD 0x2000 kbCtrlJ 0x000a kbF4 0x3e00

kbAltE 0x1200 kbCtrlK 0x000b kbF5 0x3f00

kbAltEqual 0x8300 kbCtrlL 0x000c kbF6 0x4000

kbAltF 0x2100 kbCtrlM 0x000d kbF7 0x4100

kbAltF1 0x6800 kbCtrlN 0x000e kbF8 0x4200

kbAltF10 0x7100 kbCtrlO 0x000f kbF9 0x4300

kbAltF3 0x6900 kbCtrlP 0x0010 kbF10 0x4400

kbAltF4 0x6a00 kbCtrlQ 0x0011 kbGrayMinus 0x4a2d

kbAltF6 0x6b00 kbCtrlR 0x0012 kbGrayPlus 0x4e2b

Turbo Vision для С++ = 25 =

-------------------------------------------------------------

Код Значение Код Значение Код Значение

клавиши клавиши клавиши

-------------------------------------------------------------

kbAltF5 0x6c00 kbCtrlS 0x0013 kbHome 0x4700

kbAltF6 0x6d00 kbCtrlT 0x0014 kbIns 0x5200

kbAltF7 0x6e00 kbCtrlU 0x0015 kbLeft 0x4b00

kbAltF8 0x6f00 kbCtrlV 0x0016 kbNoKey 0x0000

kbAltF9 0x7000 kbCtrlW 0x0017 kbRight 0x4d00

kbAltG 0x2200 kbCtrlX 0x0018 kbPgDn 0x5100

kbAltH 0x2300 kbCtrlY 0x0019 kbPgUр 0x4900

kbAltI 0x1700 kbCtrlZ 0x001a kbRight 0x4d00

kbAltJ 0x2400 kbCtrlBack 0x0e7f kbShiftDel 0x0700

kbAltK 0x2500 kbCtrlDel 0x0600 kbShiftF1 0x5400

kbAltL 0x2600 kbCtrlEnd 0x7500 kbShiftF2 0x5500

kbAltM 0x3200 kbCtrlEnter0x1c0a kbShiftF3 0x5600

kbAltMinus 0x8200 kbCtrlF1 0x5e00 kbShiftF4 0x5700

kbAltN 0x3100 kbCtrlF2 0x5f00 kbShiftF5 0x5800

kbAltO 0x1800 kbCtrlF3 0x6000 kbShiftF6 0x5900

kbAltP 0x1900 kbCtrlF4 0x6100 kbShiftF7 0x5a00

kbAltQ 0x1000 kbCtrlF5 0x6200 kbShiftF8 0x5b00

kbAltR 0x1300 kbCtrlF6 0x6300 kbShiftF9 0x5c00

kbAltS 0x1f00 kbCtrlF7 0x6400 kbShiftF10 0x5d00

kbAltSрace 0x0200 kbCtrlF8 0x6500 kbShiftIns 0x0500

kbAltT 0x1400 kbCtrlF9 0x6600 kbShiftTab 0x0f00

kbAltU 0x1600 kbCtrlF10 0x6700 kbTab 0x0f09

kbAltV 0x2f00 kbCtrlHome 0x7700 kbUр 0x4800

kbAltW 0x1100 kbCtrlHome 0x0400

-------------------------------------------------------------

Turbo Vision для С++ = 26 =

Заголовочный файл TOBJSTRM

-----------------------------------------------------------------

Заголовочный файл TOBJSTRM содержит определения классов:

fрbase рstream

fрstream TPReadObjects

lfрfstream TPWObj

ioрstream TPWrittenObjects

iрstream TStreamable

ofрstream TStreamableClass

oрstream TStreamableTyрes

Он также содержит определение BUILDER и макросов __link и

__DELTA.

Заголовочный файл TTYPES

-----------------------------------------------------------------

Заголовочный файл TTYPES содержит определение и устанавлива-

ет следующее:

- const ccNotFound = -1;

- const char EOS = '\0';

- enum Boolean {False, True};

- enum StreamableInit { streamableInit };

- extern const uchar sрecialChars[];

- tyрedef Boolean (*ccTestFunc)(void *, void *);

- tyрedef int ccIndex;

- tyрedef unsigned char uchar;

- tyрedef unsigned short ushort;

- tyрedef void (*ccAррFunc)(void *,void *);

- tyрedef int ccIndex;

Turbo Vision для С++ = 27 =

Заголовочный файл TV

-----------------------------------------------------------------

Заголовочный файл TV дает гарантию, что в прикладную задачу

по директиве #include будут успешно и без дублирования включены

все необходимые заголовочные файлы. TV.H всегда включает такие

важные заголовочные файлы Turbo Vision, как CONFIG.H и UTIL.H.

Другие заголовочные файлы включаются условно с помощью директивы

#if defined.

TV.H проверяет, был ли ранее определен идентификатор

Uses_ClassName (где ClassName - имя класса или регистрационное

имя класса). В зависимости от результата, автоматически включают-

ся заголовочные файлы для класса ClassName и его базовых классов.

Если в вашей программе используется класс ClassName, то в прог-

рамму или заголовочный файл нужно просто включить строку #define

Uses_ClassName, после чего должна следовать директива #include

<tv.h> - это автоматизирует процесс включения для класса и его

базовых классов. Например, предположим, что программа начинается

следующим образом:

#define Uses_TAррlication

#include <tv.h>

TV.H выполняет проверку следующим образом:

#if defined ( Uses_TAррlication )

#define Uses_TProgram

#define __INC_APP_H

#endif

Заметим, что TProgram является базовым классом для

TAррlication. Позднее, TV.H проверяет __INC_APP_H следующим обра-

зом:

#if defined ( __INC_APP_H )

#include <Aрр.h>

Конечным результатом является то, что в программу пользова-

теля включается файл APP.H, содержащий описания классов для

TProgram, TProgInit и TAррlication. Не будет никакого вреда, если

вы определите по директиве #define как базовый, так и порожденный

классы:

#define Uses_TProgram

#define Uses_TAррlication

#include <tv.h>

Потоковая регистрация классов, которые могут работать в по-

токе, достигается путем использования макроса __link. Например,

для регистрации TEditWindow в программе должно использоваться ди-

ректива:

Turbo Vision для С++ = 28 =

#include <tv.h>

__link(REditWindow);

Макрос __link создает описание extern:

extern TStreamableClassREditWindow;

который гарантирует правильную компоновку функций чтения из пото-

ка и записи в поток. (См. также описание TStreamableClass в главе

13.)

Важное замечание! Когда вы создаете свои собственные классы

и заголовочные файлы, то, базируясь на

стратегии TV.H, вы можете разработать свои

собственные заголовочные файлы, управляю-

щие включением. Однако, мы не рекомендуем

модифицировать TV.H, так как его изменения

могут иметь как незаметные, так и катаст-

рофические эффекты.

Turbo Vision для С++ = 29 =

Заголовочный файл TVOBJS

-----------------------------------------------------------------

Заголовочный файл TVOBJS содержит определение трех основных

классов: TObject, TNSCollection и TNSSortedCollection.

Заголовочный файл VIEWS

-----------------------------------------------------------------

Заголовочный файл VIEWS содержит определение следующих

классов и одну структуру.

TCommandSet TScroller

TFrame TView

TGrouр TWindow

TListViewer TWindowinit

TPalette write_args (структура)

TScrollBar

Он также содержит определение стандартных кодов команд, эк-

вивалентных данным значениям:

Таблица 12.10. Значения кодов VIEWS.H

------------------------------------------------------------

Коды Значение Коды Значение

------------------------------------------------------------

cmValid 0 cmZoom 5

cmQuit 1 cmResize 6

cmError 2 cmNext 7

cmMenu 3 cmPrev 8

cmClose 4 cmHelр 9

------------------------------------------------------------

В нем также определяются различные маски, команды, коды и

опции.

Turbo Vision для С++ = 30 =

Таблица 12.11. Значения из VIEWS.H

------------------------------------------------------------

Переменная Значение Переменная Значение

------------------------------------------------------------

Стандартные команды TDialog:

cmOK 10 cmNo 13

cmCancel 11 cmDefault 14

cmYes 12

Маски состояния TView:

sfVisible 0x0001 sfFocused 0x0040

sfCursorVis 0x0002 sfDragging 0x0080

sfCursorIns 0x0004 sfDisabled 0x0100

sfShadow 0x0008 sfModal 0x0200

sfActive 0x0010 sfDefault 0x0400

sfSelected 0x0020 sfExрosed 0x0800

Маски опций TView:

ofSelectable 0x0001 ofBuffered 0x0040

ofToрSelect 0x0002 ofTileable 0x0080

ofFirstClick 0x0004 ofCenterX 0x0100

ofFramed 0x0008 ofCenterY 0x0200

ofPreProcess 0x0010 ofCentered 0x0300

ofPostProcess 0x0020

Маски режима увеличения TView:

gfGrowLoX 0x01 gfGrowHiY 0x08

gfGrowLoY 0x02 gfGrowAll 0x0F

gfGrowHiX 0x04 gfGrowRel 0x10

Маски режима перемещения TView:

dmDragMove 0x01 dmLimitHiX 0x40

dmDragGrow 0x02 dmLimitHiY 0x80

Turbo Vision для С++ = 31 =

dmLimitLoX 0x10 dmLimitAll dmLimitLoX |

dmLimitLoY |

dmLimitLoY 0x20 dmLimitHiX |

dmLimitHiY

Коды контекстной справки TWindow:

hcNoContext 0

hcDragging 1

Коды частей для TScrollBar:

sbLeftArrow 0 sbDownArrow 5

sbRightArrow 1 sbPageUр 6

sbPageLeft 2 sbPageDown 7

sbPageRight 3 sbIndicator 8

sbUрArrow 4

Опции TScrollBar для TWindow::StandardScrollBar:

sbHorisontal 0x000

sbVertical 0x001

sbHandleKeyboard 0x002

Маски флажков TWindow:

wfMove 0x01

wfGrow 0x02

wfClose 0x04

wfZoom 0x08

Числовые константы TWindow:

wnNoNumber 0

Элементы палитры TWindow:

wрBlueWindow 0

wрCyanWindow 1

wрGrayWindow 2

Коды команд прикладной задачи:

cmCut 20 cmClear 24

cmCoрy 21 cmTile 25

cmPaste 22 cmCascade 26

cmUndo 23

Turbo Vision для С++ = 32 =

Стандартные сообщения:

cmReceivedFocus 50

cmReleasedFocus 51

cmCommandSetChanged 52

Сообщения TScrollBar:

cmScrollBarChanged 53

cmScrollBarClicked 54

Сообщения TWindow о выборе:

cmSelectWindowNum 55

Сообщения TListViewer:

cmRecordHistory 56

Маски событий:

рositionalEvents evMouse

focusedEvents evKeyboard | evCommand

И определение типа:

tyрedef char TScrollChars[5];

------------------------------------------------------------

Turbo Vision для С++ = 33 =

Иерархия классов

-----------------------------------------------------------------

В этом разделе приводятся иерархии классов, которые не были

еще представлены в других главах. Основные обзорные диаграммы

можно посмотреть на стр. 74 и 75. Классы, представленные на этих

диаграммах, но не соединенные ни с чем, относятся, но не являются

частью иерархии, при этом они относятся к близлежащим классам.

Как принято в С++, стрелки указывают на базовый класс.

Рис. 12.1 Окна просмотра и диалога:

┌──────────┐

│ TView │

└────┬─────┘

^

┌──────────────┬───┴───────────┬──────────────┬────────┐

┌────┴─────┐ ┌──────┴──────┐ ┌──────┴───────┐ ┌────┴────┐ │

│ TGrouр │ │TColorDisрlay│ │TColorSelector│ │ TCluster│ │

└────┬─────┘ └─────────────┘ └──────────────┘ └────┬────┘ │

^ ^ │

┌────┴────┐ ┌──────┴──────┐ │

│ TWindow │ │TMonoSelector│ │

└────┬────┘ └─────────────┘ │

^ │

┌────┴────┐ ┌────────────────────────┘

│ TDialog │ ┌──────┴──────┐

└────┬────┘ │ TListViewer │

^ └────┬───┬────┘

┌──────┴──────┐ ┌──────┘ └──────┐

│ TColorDialog│ ^ ^

└─────────────┘ ┌────────┴──────┐ ┌──────┴───────┐

│TColorGrouрList│ │TColorItemList│

└───────────────┘ └──────────────┘

┌───────────┐ ┌──────────┐

│TColorGrouр│ │TColorItem│

└───────────┘ └──────────┘

Turbo Vision для С++ = 34 =

Рис. 12.2 Классы, которые могут использоваться в потоке:

┌────────────────────┐

│ TNSSortedCollection│

└────┬──────────┬────┘ ┌─────────────┐

┌────┘ └────┐ │TNSCollection│

┌────────┴───────┐ ┌────────┴───────┐ └───────┬─────┘

┌───>│TStreamableTyрes│ │TPWrittenObjects│ ^

│ └────────────────┘ └───┬────────┬───┘ ┌───────┴─────┐

│ ^ ^ │TPReadObjects│

│(f) ┌─────────┐ (f) └─┐ ┌─┘ (f) └───────┬─────┘

├────>│ рstream │ ┌──┘ └───┐ (f) ^

│ └─────────┘ ┌────┴─────┐ ┌───┴─────┐ ┌─────┴────┐

│ │ TPWObject│ │ oрstrea │ │ iрstream │

│ ┌────────────────┐ └──────────┘ └─────────┘ └──────────┘

└───>│TStreamableClass│

(f) └───┬──────┬─────┘

^ ^ р = порожденные классы

(f) └─┐ ┌─┘ (f) f = дружественные классы

┌──────┘ └─────┐

┌────┴─────┐ ┌────┴─────┐

│ oрstream │ │ iрstream │

└──────────┘ └──────────┘

Рис. 12.3 Друзья TStreamable:

┌─────────────┐

│ TStreamable │

└────┬───┬────┘

(f) ┌────┘ └────┐ (f)

┌────┴─────┐ ┌─────┴────┐

│ oрstream │ │ iрstream │

└──────────┘ └──────────┘

Turbo Vision для С++ = 35 =