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

Глава 14. Классы редактора

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

Класс TEditor, наследник класса TView, является реализацией

небольшого (64К), быстрого редактора для использования в приклад-

ных программах, разработанных с использованием Turbo Vision. В

нем реализованы поддержка "мыши", отмена действия (т.н. операция

"undo"), копирование (перемещение) в "карман", извлечение из

"кармана" и копирование, автоотступ, режим замены текста, переоп-

ределение клавиш, поиск и замена. Этот редактор может использо-

ваться для редактирования файлов, реализации многостроковых по-

лей, для ввода и редактирования текста при диалогах и работе с

формами. На приведенном ниже рисунке изображена иерархия классов.

Примечание: TEditor - это потоковый класс, наследующий свойства

класса TStreamable через класс TView.

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

│ TView │

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

^ ^ ^

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

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

│ TEditor │ │ TGroup │ │ TWindowInit │ │

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

^ ^ ^(v)┌───────┴─────┐

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

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

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

│ TMemo │ │ TFileEditor │ │ TWindow │

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

^

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

│ TMemoData │ │ TEditWindow │

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

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

│TFindDialogRec│ v - виртуальный

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

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

│TReplaceDialogRec│

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

Рисунок 14.1. Классы редактора.

Turbo Vision для С++ = 7 =

TEditor

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

Класс TEditor (файл EDITORS.H) является базовым классом для

всех редакторов. В нем реализовано большинство функций редактора.

При создании объекта TEditor, в динамически распределяемой облас-

ти памяти выделяется буфер требуемого размера. При инициализации

этот буфер пуст.

Применение класса TEditor для редактирования файлов показано

в файле TVEDIT.CPP, для редактирования текстовых полей (типа

"memo") - в файле TVFORMS.CPP. Оба этих файла можно найти в ката-

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

Буфер TEditor

В классе TEditor реализован редактор, построенный на основе

буфера. Текст в нем сохраняется в виде двух кусков. Любой текст

до курсора сохраняется в начале буфера, а текст после курсора

сохраняется в конце буфера. Разрыв текста в дальнейшем будем на-

зывать интервалом. Когда символ вставляется в редактор, он встав-

ляется в область интервала. Редактор реализует отмену действия

предыдущей операции с помощью записи уничтожаемого текста в ин-

тервал и учета числа вставленных и уничтоженных символов. Когда

выполняется запрос на отмену действия, редактор удаляет символы,

которые были вставлены, копирует в начало интервала удаленные

символы и помещает курсор после ранее удаленного текста.

Для демонстрации работы буфера рассмотрим диаграмму буфера

редактора после вставки символов "abcdefghijkxxxopqrstuvwxyz".

Turbo Vision для С++ = 8 =

curPtr

│gapLen────>┤

┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┤

│a│b│c│d│e│f│g│h│i│j│k│x│x│x│o│p│q│r│s│t│u│v│w│x│y│z│ │ │ │ │ │ │

├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┤

├<─────────────────bufLen──────────────────────────>┤ │

├<────────────────────────────────bufSize──────────────────────>┤

Рис. 14.2. Буфер после вставки текста.

Поле curPtr содержит позицию курсора, gapLen - это длина ин-

тервала, а в bufLen записано общее число символов в буфере. Раз-

мер буфера сохраняется в bufSize и он всегда равен сумме gapLen и

bufLen. Если курсор в дальнейшем переместится за символы "xxx",

то буфер будет выглядеть следующим образом:

curPtr

│gapLen─────┤

┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┤

│a│b│c│d│e│f│g│h│i│j│k│x│x│x│ │ │ │ │ │ │o│p│q│r│s│t│u│v│w│x│y│z│

├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤

├<─────────bufLen──────────>┤ + ├<───────bufLen────────>┤

├──────────────────────────────bufSize─────────────────────────>┤

Рис. 14.3. Буфер после перемещения курсора.

Заметьте, что интервал сохраняется до курсора. Это позволяет

быстро вставлять символы без передвижения текста. Если "xxx" уда-

ляется с помощью клавиши "Backspace", символы копируются в конец

интервала, а курсор перемещается в другую сторону. В поле

delCount содержится число удаляемых символов.

curPtr

│gapLen──────────>┤

┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐

│a│b│c│d│e│f│g│h│i│j│k│ │ │ │ │ │ │x│x│x│o│p│q│r│s│t│u│v│w│x│y│z│

├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┼─┴─┴─┼─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤

│ │ delCount├<───>┤ │

├<─────────bufLen────>┤ + ├<───────bufLen────────>┤

├<───────────────────────bufSize───────────────────────────────>┤

Рис. 14.4. Буфер после удаления символов "xxx".

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

символов insCount увеличивается на число вставленных символов.

Это позволяет узнать, сколько символов надо будет удалить при

отмене действия. Если теперь будут введены "lmn", то буфер будет

выглядеть следующим образом:

Turbo Vision для С++ = 9 =

curPtr

│gapLen────>┤

┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐

│a│b│c│d│e│f│g│h│i│j│k│l│m│n│ │ │ │x│x│x│o│p│q│r│s│t│u│v│w│x│y│z│

├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┼─┴─┴─┼─┴─┴─┼─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤

│ insCount├<───>┤ ├<───>┤delCount │

├<─────────bufLen──────────>┤ + ├<───────bufLen────────>┤

├───────────────────────────────bufSize────────────────────────>┤

Рис. 14.5. Буфер после вставки символов "lmn".

Поле insCount содержит число вставленных символов. Если те-

перь потребуется отмена действия, то символы "lmn" будут удалены,

а поверх них будут скопированы символы "xxx", вернув таким обра-

зом буфер к тому виду, который он имел до редактирования.

Turbo Vision для С++ = 10 =

curPtr

│gapLen────>┤

┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┤

│a│b│c│d│e│f│g│h│i│j│k│x│x│x│ │ │ │ │ │ │o│p│q│r│s│t│u│v│w│x│y│z│

├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤

├<─────────bufLen───────────┤ + ├<───────bufLen────────>┤

├<────────────────────────────bufSize──────────────────────────>┤

Рис. 14.6. Буфер после отмены действия.

Если курсор перемещается перед выполнением отмены действия,

вся связанная с отменой действия информация в связи с тем, что

интервал переместится, будет утрачена. Отмена действия будет вы-

полняться лишь для операций, выполняемых между перемещениями кур-

сора. После перемещения курсора все выполненные операции редакти-

рования считаются "принятыми". Имейте также в виду, что операция

отмены действия занимает определенное пространство в буфере, что

может помешать пользователю вставить в него текст. Это пространс-

тво можно восстановить перемещением курсора.

Выделение блока

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

после местоположения курсора. Если текст в редакторе вставляется

либо нажатием клавиши, либо с помощью метода insertText, то он

заменяет содержимое выделенного блока. Если никакой блок не выде-

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

обозначается полями selStart и selEnd. Выделение блока выполняет-

ся с помощью вызова метода setSelect, который также перемещает

курсор.

Опции

TEditor предусматривает ряд опций, значения которых хра-

нятся в полях типа Boolean. Поле canUndo указывает, что в редак-

торе записывается информация для отмены действия. Поскольку отме-

на действия (undo) временно отнимает пространство у вставляемых

элементов текста, то может оказаться полезным заблокировать

свойство отмены действия. Для "кармана" это выполняется автомати-

чески. Поле overwrite указывает, находится ли редактор в режиме

замены или вставки. Поле autoIndent фиксирует, будет ли редактор

при нажатии клавиши Enter смещать курсор вправо к столбцу первого

непробельного символа предыдущей строки (автоотступ). Это особен-

но удобно при использовании редактора для редактирования исходно-

го текста программы.

Переопределение функциональных и управляющих клавиш

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

Turbo Vision для С++ = 11 =

мым в интегрированной среде разработки программ фирмы Borland.

Исключение составляют команды работы с блоками. Поскольку класс

TEditor не использует постоянные блоки, то команды работы с бло-

ками имитируются при помощи копирования информации в "карман" и

из него. Например, команды Ctrl-K Ctrl-B выполняют операцию выде-

ления текста. Команды Ctrl-K Ctrl-K копирует текст в "карман".

Ctrl-K Ctrl-C передает содержимое из этого буфера в редактор.

Вместо использования назначений клавиш Ctrl-K выделение блока

можно выполнить с помощью нажатия клавиши регистра (Shift) при

одновременном выполнении любой команды перемещения курсора.

Данные переопределения функциональных клавиш можно изменить

с помощью замещения их методом convertEvent, выполняющего преоб-

разование заданного события, связанного с нажатием клавиши, в со-

бытие, связанное с командой.

Константы

Константы, приводимые в данном разделе, определены в файле

EDITORS.H.

Максимальная длина строки maxLineLength определена равной

256.

Turbo Vision для С++ = 12 =

Таблица 14.1. Константы TEditor.

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

Константа Значение Константа Значение

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

Командные константы:

cmSave = 80, cmPageDown = 509,

cmSaveAs = 81, cmTextStart = 510,

cmFind = 82, cmTextEnd = 511,

cmReplace = 83, cmNewLine = 512,

cmSearchAgain = 84; cmBackSpace = 513,

cmCharLeft = 500 cmDelChar = 514,,

cmCharRight = 501 cmDelWord = 515,,

cmWordLeft = 502 cmDelStart = 516,,

cmWordRight = 503 cmDelEnd = 517,,

cmLineStart = 504 cmDelLine = 518,,

cmLineEnd = 505 cmInsMode = 519,,

cmLineUp = 506 cmStartSelect = 520,,

cmLineDown = 507 cmHideSelect = 521,,

cmPageUp = 508 cmIndentMode = 522,,

cmUpdateTitle = 523;

Диалоговые константы TEditor:

edOutOfMemory = 0, edSaveAs = 6,

edReadError = 1, edFind = 7,

edWriteError = 2, edSearchFailed = 8,

edCreateError = 3, edReplace = 9,

edSaveModify = 4, edReplacePrompt = 10,

edSaveUntitled = 5,

Флаги редактора TEditor:

efCaseSensitive = 0x0001, efReplaceAll = 0x0008,

efWholeWordsOnly = 0x0002, efDoReplace = 0x0010,

efPromptOnReplace = 0x0004, efBackupFiles = 0x0100,

Палитры редактора:

cpIndicator "\x02\x03"

cpEditor "\x06\x07"

cpMemo "\x1A\x1B"

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

Поля TEditor

autoIndent Boolean autoIndent;

Имеет значение True, если редактор находится в

режиме автоматического отступа вправо.

Turbo Vision для С++ = 13 =

buffer char *buffer;

Указатель буфера, используемого для хранения

текста.

bufLen ushort bufLen;

Содержит объем текста между началом буфера и те-

кущим положением курсора. Об этом см. выше в ком-

ментарии к Рис. 14.2.

bufSize ushort bufSize;

Содержит размер буфера.

canUndo Boolean canUndo;

Принимает значение True, если редактор поддержи-

вает операцию undo. В противном случае имеет зна-

чение False.

См. также: TEditor::undo.

clipboard static TEditor *clipboard;

Указатель на "кармана". Таким буфером может быть

любой класс TEditor. Его следует лишь присвоить

данной переменной. "Карман" не должен поддержи-

вать операцию отмены действия (т.к. его поле

canUndo должно иметь значение False).

curPos TPoint curPos;

Содержит столбец и строку местонахождения курсора

в файле.

curPtr ushort curPtr;

Содержит смещение курсора.

delCount ushort delCount;

Обозначает число символов в конце интервала, ко-

торые были удалены из текста: используется для

реализации операции undo.

delte TPoint deltа;

Содержит верхнюю строку и самый левый столбец в

отображаемом объекте.

drawLine int drawLine;

Turbo Vision для С++ = 14 =

Содержит местоположение на экране столбца, в ко-

тором подчеркнуты вставленные символы. Предназна-

чен для внутреннего использования методом draw.

drawPtr ushort drawPtr;

Содержит смещение буфера, соответствующее текуще-

му положению курсора. Предназначено для внутрен-

него использования методом draw.

editorDialog static TEditorDialog editorDialog;

Тип данных TEditorDialog служит указателем функ-

ции, возвращающей ushort и имеющей один цело-

численный аргумент int и переменное число допол-

нительных аргументов. Он определяется в файле

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

typedef ushort(*TEditorDialog)(int, ...);

Поле editorDialog является указателем на функцию,

используемую объектами, а TEditor служит для

изображения различных панелей диалога. Поскольку

панели диалога в значительной степени зависят от

типа прикладной программы, объект TEditor не вы-

дает непосредственно изображение собственных па-

нелей диалога. Он управляет ими с помощью этого

указателя функции. Пример функции editorDialog

приводится в файле TVEDIT.CPP.

Мнемоника имен различных диалоговых значений, пе-

редаваемых в первом аргументе int, для знающих

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

тельных объяснений.

edOutOfMemory edSaveAs

edReadError edFind

edWriteError edSearchFailed

edCreateError edReplace

edSaveModify edReplacePrompt

edSaveUntitled

Используемое по умолчанию значение поля

editorDialog в defEditorDialog возвращает просто

cmCancel.

editorFlags static ushort editorFlags;

Поле editorFlags содержит различные флаги, ис-

пользуемые в редакторе:

efCaseSensitive Является значением по умо-

лчанию при поиске с разли-

Turbo Vision для С++ = 15 =

чием регистра букв.

efWholeWordsOnly Является значением по умо-

лчанию при поиске только

полных слов.

efPromptOnReplace Подсказка при замене.

efReplaceAll Замена для всех случаев

появления.

efDoReplace Выполнение замены.

efBackupFiles Создание файлов с расшире-

нием .BAK для сохраненных

значений.

Значением данного элемента по умолчанию является:

efBackupFiles │ efPromptOnReplace.

findStr static char findStr[80];

Содержит значение последней строки, использовав-

шееся для операции поиска.

См. также: TEditor::doSearchReplace.

gapLen ushort gapLen;

Содержит размер "интервала" между текстом, распо-

ложенным от курсора и после курсора. Пояснение по

этому полю см. в комментарии к Рис. 14.2.

hScrollBar TScrollBar *hScrollBar;

Является указателем горизонтальной полосы прок-

рутки; равно 0, если строка прокрутки не сущест-

вует.

indicator TIndicator *indicator;

Является указателем индикатора; равно 0, если ин-

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

insCount ushort insCount;

Обозначает число символов, которые были вставлены

в текст с момента последнего перемещения курсора.

Используется для реализации операции отмены дейс-

твия.

isValid Boolean isValid;

Turbo Vision для С++ = 16 =

Принимает значение True, если отображаемый объект

корректен. Используется функцией valid.

См. также: TEditor::valid.

keyState int keyState;

Обозначает, что была нажата специальная клавиша,

такая как Ctrl-K. Используется методом

handleEvent для отслеживания "двойных" клавиш уп-

равления, таких как Ctrl-K-H и Ctrl-K-B.

limit TPoint limit;

Содержит максимальное число изображаемых столбцов

и число строк в файле. Сохраняет предельные зна-

чения строк прокрутки.

lockCount uchar lockCount;

Содержит семафор блокировки счетчика, который ак-

тивизируется в момент перерисовки отображаемого

объекта. Приращение lockCount выполняется с по-

мощью функции lock, а его уменьшение - с помощью

функции unlock.

См. также: TGroup::lock, TGroup::unlock, TGroup::

lockFlag.

modified Boolean modified;

Принимает значение True, если буфер был модифици-

рован.

overwrite Boolean overwrite;

Принимает значение True, если редактор работает в

режиме замены текста. В противном случае редактор

будет находиться в режиме вставки.

replaceStr static char replaceStr[80];

Хранит значение последней строки операции замены.

См. также: TEditor::doSearchReplace.

selecting Boolean selecting;

Принимает значение True, если редактор работает в

режиме выделения (т.е. если была нажата клавиша

Ctrl-K Ctrl-B).

selEnd ushort selEnd;

Turbo Vision для С++ = 17 =

Содержит смещение конца текста, выделенного с по-

мощью клавиши Ctrl-K Ctrl-K. См. об этом выше в

разделе о переопределении функциональных клавиш.

selStart ushort selStart;

Содержит смещение начала текста, выделенного с

помощью клавиши Ctrl-K Ctrl-K. См. об этом там

же.

updateFlags uchar updateFlags;

Представляет собой набор флагов, обозначающих

состояние редактора. Функция doUpdate и другие

функции просматривают эти флаги, чтобы опреде-

лить, следует ли перерисовывать отображаемый объ-

ект.

vScrollBar TScrollBar *vScrollBar;

Служит указателем на вертикальную строку прокрут-

ки; равно 0, если строка прокрутки отсутствует.

Методы

constuctor TEditor( const TRect& bounds, TScrollBar

*aHScrollBar, TScrollBar *aVScrollBar,

TIndicator *anIndicator, ushort

aBufSize);

Вызывает метод TView(bounds), создавая отображае-

мый объект с заданными границами. Поля

hScrollBar, vScrollBar, indicator и BufSize уста-

навливаются по заданным аргументам. Если вам не

требуются эти объекты, строка прокрутки и аргу-

менты признаков можно установить в значение 0.

Следующие значения устанавливаются по умолчанию:

canUndo True

selecting False

overwrite False

autoIndent False

lockCount 0

keyState 0

growMode gfGrowHiX │ gfGrowHiY

options ofSelectable

eventMask evMouseDown │ evKeyDown │

evCommand │ evBroadcast

Выполняется выделение буфера и он очищается. Если

обнаружится нехватка памяти, то с помощью метода

Turbo Vision для С++ = 18 =

editorDialog выдается изображение панели диалога

edOutOfMemory, а поле isValid устанавливается в

значение False. В противном случае isValid прини-

мает значение True. Поля, связанные с буфером ре-

дактирования, инициализируются очевидным образом:

bufLen устанавливается в значение 0, gapLen - на

bufSize, selStart - в 0, modified - в False и

т.д.

См. также: TView::Tview, TEditor::editorDialog,

класс TScrollBar.

destructor virtual ~TEditor();

Уничтожает редактор и удаляет буфер.

bufChar char bufChar( ushort p);

Возвращает p-й символ файла, внесенный в интер-

вал.

bufPtr ushort bufPtr( ushort p);

Возвращает смещение в буфере buffer p-го символа

файла, внесенного в интервал.

build static TStreamable *build();

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

ситуациях, связанных с чтением из потоков.

См. также: TStreamableClass, ipstream::readData.

changeBounds virtual void changeBounds( const TRect& bounds );

Изменяет границы отображаемых объектов, настраи-

вая значение delta и обновляя при необходимости

изображения строк прокрутки и отображаемых объек-

тов. Переопределяется, чтобы обеспечить сохране-

ние положения файла внутри отображаемого объекта

при изменении размеров владельца.

charPos int charPos( ushort p, ushort target );

Вычисляет и возвращает фактическую позицию курсо-

ра, проверяя символы в буфере между полями p и

target. Все встречающиеся коды табуляции считают-

ся пробелами (в зависимости от шага табуляции).

charPtr ushort charPtr( ushort p, ushort target );

Функция, обратная функции charPtr. Вычисляет и

возвращает местоположение в буфере, соответствую-

Turbo Vision для С++ = 19 =

щее местоположению курсора.

checkScrollBar void checkScrollBar( const TEvent& event,

TScrollBar *p, int& d);

Вызывается подпрограммой handleEvent в ответ на

переданное событие cmScrollBarChanged. Если теку-

щее значение строки прокрутки отлично от d, то

строка прокрутки обновляется.

clipCopy Boolean clipCopy();

Возвращает значение False, если данный редактор

не имеет активного "кармана". В противном случае

копирует выделенный текст из редактора в "кар-

ман" с помощью следующего выражения:

clipboard->insertFrom( this );

Выделение текста отменяется (подсветка удаляет-

ся), а отображаемый объект обновляется. При ус-

пешном выполнении возвращается значение True.

См. также: TEditor::insertFrom.

clipCut void clipCut();

Действует подобно методу clipCopy, но выделенный

текст после копирования в "карман" удаляется.

См. также: TEditor::clipCopy, TEditor::

insertFrom.

clipPaste void clipPaste();

Метод, обратный методу clipCopy: содержимое "кар-

мана" (если таковое имеется) копируется в текущую

позицию курсора, используя:

insertFrom( clipboard );

См. также: TEditor::clipCopy, TEditor::insert-

From.

convertEvent virtual void convertEvent( TEvent& ev );

Используется методом handleEvent для обеспечения

основных операций редактирования путем преобразо-

вания различных событий, связанных с клавишами, в

события, связанные с командами. Вы можете изме-

нить или расширить эти определения функциональных

клавиш, заданные по умолчанию, с помощью переоп-

ределения метода convertEvent. См. об этом выше в

Turbo Vision для С++ = 20 =

разделе о переопределении функциональных клавиш.

См. также: TEditor::handleEvent.

cursorVisible Boolean cursorVisible();

Принимает значение True, если курсор (точка

вставки) является видимым внутри отображаемого

объекта.

deleteRange void deleteRange( ushort startPtr, ushort endPtr,

Boolean delSelect);

Если поле delSelect имеет значение True и сущест-

вует текущий выделенный блок, то этот выделенный

блок удаляется. В противном случае диапазон между

startPtr и endPtr выделяется и удаляется.

См. также: TEditor::deleteSelect.

deleteSelect void deleteSelect();

Удаляет выделенный блок, если таковой существует.

Например, после успешного выполнения метода

clipCopy выделенный блок удаляется.

См. также: TEditor::deleteRange.

doneBuffer virtual void doneBuffer();

Удаляет буфер.

doSearchReplace void doSearchReplace();

Может использоваться как в операциях поиска, так

и в операциях поиска/замены, в зависимости от

состояния поля editorFlags, ввода пользователя и

панели диалога. Если флаг edDoReplace не установ-

лен, то метод doSearchReplace действует в режиме

простого поиска findStr без выполнения замены. В

противном случае данный метод стремится заменить

поля findStr полями replaceStr. Во всех случаях,

если искомая строка не обнаружена, активизируется

editorDialog( doSearchFailed ). Если

ofPromptOnReplace устанавливается в значение

editorFlags, то появляется панель диалога

edReplacePrompt. Замена в этом случае будет опре-

деляться реакцией пользователя. Если установлено

поле efRelaceAll, то выполняется замена всех сов-

падающих строк без подсказки до обнаружения ко-

манды cmCancel.

См. также: TEditor::findStr, TEditor::replaceStr,

Turbo Vision для С++ = 21 =

TEditor::editorDialog, TEditor::find, TEditor::

replace, TEditor::editorFlags.

doUpdate void doUpdate();

Если поле updateFlags равно 0, то ничего не про-

исходит. В противном случае вид и его строки

прокрутки модифицируются и отображаются заново в

зависимости от состояния бит updateFlags. Напри-

мер, если установлен флаг ufView, то отображаемый

объект перерисовывается с помощью метода

drawView. Если отображаемый объект находится в

состоянии sfActive, то команда модифицируется с

помощью функции updateCommands. После выполнения

этих модификаций поле updateFlags принимает зна-

чение 0.

draw virtual void draw();

Переопределяет TView::draw для изображения редак-

тора.

drawLines void drawLines( int y, int count, ushort

linePtr );

Отображает count копий строки linePtr, начиная с

позиции строки y.

find void find();

Выполняет поиск существующего поля findStr или

новых строк, указанных пользователем. Метод find

выводит подсказку редактора для ввода искомой

строки или принятия к обработке существующей

строки findStr. Если вводится новая строка поис-

ка, то она заменит предыдущую строку findStr

(если пользователь ее не отменит). Вначале метод

find создает объект TFindDialogRec, определяемый

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

struct TFindDialogRec

{

TFindDialogRec( const char *str, ushort

flgs )

{

strcpy( find, str );

options = flgs;

}

char find[80];

ushort options;

};

Выполняется вызов конструктора со строкой str,

Turbo Vision для С++ = 22 =

установленным в текущих полях findStr и flgs, ус-

тановленных в текущее поле editorFlags. Диалог

редактора edFind затем вызывает изменение или

принятие строки findStr. Наконец, для выполнения

простой операции поиска без замены (efDoReplace

выключено), вызывается метод doSearchReplace.

См. также: TEditor::findStr, TEditor::replaceStr,

TEditor::doSearchReplace, TEditor::editorDialog,

TEditor::replace, TEditor::editorFlags.

formatLine void formatLine(void *buff, ushort linePtr, int

x, ushort color );

Форматирует строку в поле linePtr в заданном цве-

те (color) и заносит результат в буфер (buffer).

Используется функцией drawLines.

getMousePtr ushort getMousePtr( TPoint m);

Возвращает указатель на символы в буфере, соот-

ветствующие точке m на экране.

См. также: TEditor::charPtr.

getPalette virtual TPalette& getPalette() const;

Возвращает заданную по умолчанию палитру TEditor

- cpEditor, определяемую как "\x06\x07\". Если вы

хотите изменить палитру редактора, ее следует пе-

реопределить.

handleEvent virtual void handleEvent( TEvent& ev );

Этот метод обеспечивает для редактора обработку

событий. Если вы хотите расширить обрабатываемый

редактором набор команд, его следует переопреде-

лить. Обработчик, заданный по умолчанию, вызывает

метод TView::handleEvent(ev), затем с помощью вы-

зова convertEvent преобразует все соответствующие

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

связанные с командами.

hasSelection Boolean hasSelection();

Возвращает значение True, если было выполнено вы-

деление, т.е. если поле selStart не равно полю

selEnd. Если эти два поля равны, то выделения не

существует, и возвращается значение False.

См. также: TEditor::setSelect.

hideSelect void hideSelect();

Turbo Vision для С++ = 23 =

Устанавливает selecting в значение False и с по-

мощью метода setSelect( curPtr, CurPtr, false )

отменяет текущее выделение.

См. также: TEditor::setSelect, TEditor::

selecting.

initBuffer virtual void initBuffer();

Выделяет буфер размера bufSize и устанавливает

на нем buffer.

insertBuffer Boolean insertBuffer( char *p, ushort offset,

ushort length, Boolean

allowUndo, Boolean

selectText);

Этот метод вставки текста самого нижнего уровня.

Он выполняет вставку length байт текста из масси-

ва p (начиная с p[offset]) в буфер (начиная с по-

ля curPtr). Если поле allowUndo имеет значение

True, то метод insertBuffer выполняет запись дан-

ных, восстанавливаемых во время отмены действия.

Если поле selectText установлено в значение True,

то будет выполнено выделение вставленного текста.

Метод insertBuffer в случае успешного выполнения

операции возвращает значение True. В случае неу-

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

и возвращается значение False. Метод insertBuffer

используется методами insertFrom и insertText. Их

непосредственный вызов выполняется редко.

См. также: TEditor::insertFrom, TEditor::

insertText.

insertFrom virtual Boolean insertFrom( TEditor *editor );

Выполняет вставку текущего выделенного блока из

editor в текущий редактор. Этот метод реализует

функции clipCut, clipCopy и clipPaste. Реализация

позволит вам понять функции insertFrom и

insertBuffer:

Boolean TEditor::insertFrom( TEditor *editor )

{

return insertBuffer( editor->buffer, editor

->bufPtr(editor->sel-

Start), editor->selEnd

- editor->selStart,

canUndo, isClipboard()

);

}

Turbo Vision для С++ = 24 =

Имейте в виду, что аргумент allowUndo установлен

в значение поля canUndo. Аргумент selectText бу-

дет иметь значение True, если для этого редактора

имеется активный "карман".

См. также: TEditor::insertBuffer, TEditor::is-

Clipboard.

insertText Boolean insertText( void *text, ushort length,

Boolean selectText );

Копирует length байт из заданного текста text в

буфер данного объекта. Если selectText имеет зна-

чение True, то будет выполнено выделение встав-

ленного текста. Данная функция является упрощен-

ным вариантом функции insertBuffer.

См. также: TEditor::insertBuffer.

isClipboard Boolean isClipboard();

Возвращает значение True, если данный буфер имеет

прикрепленный "карман". В противном случае возв-

ращается значение False.

См. также: TEditor::clipboard.

lineEnd ushort lineEnd( ushort p);

Возвращает указатель буфера (смещение) конца

строки, содержащий заданный указатель p.

См. также: TEditor::lineStart.

lineMove ushort lineMove( ushort p, int count);

Перемещает строку, содержащую указатель (смеще-

ние) p вверх или вниз на число строк count (в за-

висимости от знака count).

См. также: TEditor::prewLine, TEditor::nextLine.

lineStart ushort lineStart( ushort p);

Возвращает указатель буфера (смещение) начала

строки, содержащий заданный указатель p.

См. также: TEditor::lineEnd.

lock void lock();

Выполняет увеличение семафора lockCount (инкре-

Turbo Vision для С++ = 25 =

мент).

См. также: TEditor::lockCount, TEditor::unlock.

newLine void newLine();

Вставляет новую строку (операция возврат карет-

ки/перевод строки) в текущее местоположение ука-

зателя. Если установлен режим автоотступа

(autoIndent), то соответствующие символы табуля-

ции, если это необходимо, вставляются в начало

новой строки.

См. также: TEditor::autoIndent.

nextChar ushort nextChar( ushort p );

Возвращает смещение буфера символа, следующего за

символом, находящимся на заданном смещении p.

nextLine ushort nextLine( ushort p);

Возвращает смещение в буфере начала строки, сле-

дующей за строкой, содержащей заданное смещение

p.

nextWord ushort nextWord( ushort p);

Возвращает смещение в буфере для начала слова,

следующего за словом, содержащим заданное смеще-

ние p.

prevChar ushort prevChar( ushort p);

Возвращает смещение в буфере символа, предшеству-

ющего символу с заданным смещением p.

prevLine ushort prevLine( ushort );

Возвращает смещение в буфере начала строки, пред-

шествующей строке, содержащей заданное смещение

p.

prevWord ushort prevWord( ushort );

Возвращает смещение в буфере, соответствующее на-

чалу слова, предшествующему слову, на котором в

данный момент находится курсор.

read virtual void *read( ipstream& is );

Считывает редактируемый объект из входного потока

is.

Turbo Vision для С++ = 26 =

См. также: TStreamableClass, ipstream.

replace void replace();

Заменяет существующую строку findStr (или новую

строку поиска, задаваемую пользователем) на су-

ществующую строку replaceStr (или новую строку

замены, задаваемую пользователем). Функция

replace выводит панель диалога редактора, запра-

шивающего ввод обеих строк или принятию существу-

ющих строк findStr и replaceStr. Если вводится

новая строка, то она заменит предыдущие значения

(если пользователь ее не отменит). Вначале функ-

ция replace создает объект TReplaceDialogRec, оп-

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

struct TReplaceDialogRec

{

TReplaceDialogRec( const char *str, const

char *rep, ushort flgs )

{

strcpy( find str );

strcpy( replace, rep );

options = flgs;

}

char find[80];

char replace[80];

ushort options;

};

Конструктор вызывается с помощью str и rep, уста-

новленных на текущее положение findStr и

replaceStr, а также fld, установленного на теку-

щее положение editorFlags. Диалог редактора

edReplace далее запрашивает замену или принятие

двух строк. Наконец, для выполнения операции по-

иска-замены вызывается метод doSearchReplace

(efDoReplace включено).

См. также TEditor::findStr, TEditor::replaceStr,

TEditor::doSearchReplace, TEditor::editorDialog,

TEditor::find, TEditor::editorFlags.

ScrollTo void ScrollTo( int x, int y);

Перемещает столбец x и строку y в левый верхний

угол редактора.

search Boolean search( const char *findStr, ushort

opts);

Выполняет поиск заданной строки в буфере редакти-

Turbo Vision для С++ = 27 =

рования (начиная с curPtr) с заданными опциями.

Этими опциями являются:

efCaseSensitive Поиск с различием

регистра букв

efWholeWordsOnly Поиск только полных слов

Возвращает значение True, если совпадение обнару-

жено. В противном случае возвращает значение

False. Если совпадение обнаружено, то выполняется

выделение совпавшего текста.

setBufLen void setBufLen( ushort length);

Устанавливает для поля bufLen длину length, затем

настраивает в соответствии с ним gapLen и limit.

Поля selStart, selEnd, curPtr, delta.x, delta.y,

drawLine, drawPtr, delCount и insCount устанавли-

ваются в 0. Поле curPos устанавливается в значе-

ние delta, modified - в значение False, а отобра-

жаемый объект модифицируется и при необходимости

обновляется. Конструктор TEditor вызывает

setBufLen (0). Метод setBufLen используется также

методом insertBuffer.

См. также: TEditor::update, TEditor::TEditor,

поля TEditor, TEditor::insertBuffer. См. об этом

выше в комментарии к Рис. 14.2.

setBufSize virtual Boolean setBufSize( ushort newSize );

Должна вызываться перед изменением размера буфера

на newSize. Он возвращает значение True, если бу-

фер может иметь этот новый размер. По умолчанию

если размер newSize окажется меньше или равным

размеру bufSize, возвращает значение True.

setSmdState void setSmdState( ushort command, Boolean

enable );

Разрешает или запрещает выполнение данной команды

в зависимости от того, имеет ли enable значение

True или False, и находится ли редактор в состоя-

нии sfActive. Если редактор не является выбранным

отображаемым объектом, команда всегда запрещена.

Данная функция представляет собой удобный альтер-

нативный вариант для функций enableCommands и

disableCommands.

setCurPtr void setCurPtr( ushort p, uchar selectMode );

Вызывает метод setSelect и перемещает curPtr на

Turbo Vision для С++ = 28 =

величину смещения p. Если curPtr находится в на-

чале или в конце выделенного текста, то в зависи-

мости от значения selectMode может выполняться

некоторая настройка.

См. также TEditor::setSelect, TEditor::curPtr.

setSelect void setSelect( ushort newStart, ushort newEnd,

Boolean curStart);

Устанавливает выделенные блоки на заданные смеще-

ния в файле и при необходимости выводит отобража-

емый объект заново. Эта подпрограмма в зависимос-

ти от значения curStart (соответственно, True или

False) будет помещать курсор либо перед, либо

после выделенного блока,

setState virtual void setState( ushort aState, Boolean

enable );

Переопределяет TView::setState таким образом, что

она сможет "скрывать" и демонстрировать индикатор

и строки прокрутки. Вначале, чтобы блокировать и

разблокировать команды, она вызывает TView::

setState, Если вы пожелаете разрешить или запре-

тить дополнительные команды, то следует переопре-

делить метод updateCommands. Эта функция вызыва-

ется всякий раз, если требуется модифицировать

состояния команд.

shutDown virtual void shutDown();

Служит для внутреннего использования методом

TObject::destroy, чтобы обеспечить корректное

разрушение порожденных и связанных объектов.

Метод shutDown переопределяется во многих клас-

сах, чтобы обеспечить правильную установку свя-

занных полей при вызове метода destroy.

См. также: глава 6, "Разработка надежных прог-

рамм".

startSelect void startSelect();

Вызывается методом handleEvent при обнаружении

Ctrl-K Ctrl-B (выделенного фрагмента). Отменяет

предыдущий выделенный фрагмент и устанавливает

selecting в значение True.

См. также: TEditor::handleEvent, TEditor::hideSe-

lect.

toggleInsMode void toggleInsMode();

Turbo Vision для С++ = 29 =

Переключает overwrite с True на False и с False

на True. Изменяет форму курсора с помощью вызова

setState.

См. также: TEditor::overwrite, sfCursorIns.

trackCursor void trackCursor( Boolean center );

Обеспечивает видимость курсора. Если center имеет

значение True, курсор переводится в центр экрана

в направлении y (по строке). Положение курсора x

(столбец) не изменяется.

undo void undo();

Отменяет изменения, сделанные после последнего

перемещения курсора.

unlock void unlock();

Уменьшает значение поля lockCount до тех пор, по-

ка оно не достигнет 0; в этот момент будет иници-

ирован метод doUpdate. Механизм блокировки/разб-

локировки предотвращает слишком частое обновление

отображаемого объекта.

См. также: TEditor::doUpdate, TEditor::lock,

TEditor::lockCount.

update void update( uchar aFlags );

Устанавливает aFlags в поле updateFlags. Если

lockCount имеет значение 0, то вызывается метод

doUpdate.

См. также: TEditor::doUpdate, TEditor::lock,

TEditor::lockCount, TEditor::updateFlags.

updateCommands void updateCommands();

Данная функция всегда вызывается при необходимос-

ти модификации команд. Он используется для разре-

шения или запрещения таких команд как cmUndo,

cmClip и cmCopy.

valid virtual Boolean valid( ushort command );

Определяет достоверность отображаемого объекта

для заданной команды (command). По умолчанию

возвращается значение isValid, которое равно

True, если буфер buffer не равен 0.

Turbo Vision для С++ = 30 =

write virtual void write( opstream& os );

Выполняет запись выходного потока os.

См. также: TStreamableClass, opstream.

Дружественные-функции

Дружественной-функцией по отношению к TEditor является функ-

ция genRets.

Родственные функции

С TEditor связаны определенные функции-операции, которые не

являются методами. Подробнее об этом см. в главе 13.

Turbo Vision для С++ = 31 =

TEditWindow EDITORS.H

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

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

│ TView │

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

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

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

│ TWimdow │ │ TEditor │ │ TIndicator │

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

│ │ └─────────────┐

╔══════╧══════╗ ┌───┴───────┐ ┌──────┴──────┐

║ TEditWindow ║ │ TMemo │ │ TFileEditor │

╚═════════════╝ └───────────┘ └─────────────┘

Класс TEditWindow представляет собой окно, предназначенное

для хранения TFileEditor или "кармана". При изображении имени ре-

дактируемого файла его заголовок изменяется и инициализируются

строки прокрутки и индикатор для редактора. Если передаваемое в

TEditWindow имя окажется пустым, это будет означать, что вы ини-

циализируете "карман".

Поля

editor TFileEditor *editor;

Указатель на редактор, связанный с данным окном.

Методы

constuctor TEditWindow( const TRect& bounds, const char

*fileName, int aNumber);

Создает объект TWindow, который будет выполнять

редактирование файла с заданным именем в окне с

номером aNumber. Инициализирует управляемое окно

с рамкой, имеющее строки прокрутки и индикатор.

Если fileName равно 0, то файл воспринимается как

не имеющий названия. Если поле editor равно полю

Clipboard, то редактор будет считаться работающим

с "карманом".

build static TStreamable *build();

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

ситуациях, связанных с чтением информации из по-

токов.

См. также: TStreamableClass, ipstream::readData.

Turbo Vision для С++ = 32 =

close virtual void close();

Переопределяет TWindow::close т.о., чтобы выпол-

нялось "сокрытие", а не закрытие окна, если ре-

дактор работает с "карманом".

См. также: TWindow::close.

getTitle virtual const char *getTitle( int );

Возвращает имя редактируемого файла, либо "Clip-

board", если редактор работает с "карманом".

handleEvent virtual void handleEvent( TEvent& ev );

Управляет cmUpdateTitle при обновлении рамки ок-

на. Используется в TFileEditor::saveAs для изме-

нения заголовка окна, если изменяется имя редак-

тируемого файла.

См. также: TFileEditor::saveAs.

read virtual void *read( ipstream& is );

Считывает информацию из входного потока is.

См. также: TStreamableClass, ipstream.

write virtual void write( opstream& os );

Записывает информацию в выходной поток os.

См. также: TStreamableClass, opstream.

Родственные функции

С TEditWindow связаны определенные функции-операции, которые

не являются методами. Подробнее об этом см. в главе 13.

Turbo Vision для С++ = 33 =

TFileEditor EDITORS.H

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

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

│ TView │

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

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

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

│ TWimdow │ │ TEditor │ │ TIndicator │

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

│ │ └─────────────┐

┌──────┴──────┐ ┌───┴───────┐ ╔══════╧══════╗

│ TEditWindow │ │ TMemo │ ║ TFileEditor ║

└─────────────┘ └───────────┘ ╚═════════════╝

Класс TFileEditor является специализированным порожденным от

класса TEditor классом, предназначенным для редактирования содер-

жимого файла.

Поля

fileName char fileName[MAXPATH];

Методы

constuctor TEditor( const TRect& bounds, TScrollBar

*aHScrollBar, TScrollBar *aVScrollBar,

TIndicator *anIndicator, const char

aFileName);

Создает объект TFileEditor с заданными строками

прокрутки и индикатором и загружает содержимое

заданного файла. Если файл не обнаружен или недо-

пустим, выдается сообщение об ошибке и метод

valid объекта возвращает значение False. Перемен-

ная options устанавливается в значение

sfSelectable, а eventMask устанавливается т.о.,

чтобы позволить обработку передаваемых событий.

Если вам не требуются аргументы aHScrollBar,

aVScrollBar или anIndicator, установите их в зна-

чение 0.

build static TStreamable *build();

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

ситуациях, связанных с чтением информации из по-

токов.

См. также: TStreamableClass, ipstream::readData.

Turbo Vision для С++ = 34 =

doneBuffer virtual void doneBuffer();

Удаляет буфер.

handleEvent virtual void handleEvent( TEvent& event );

Вызывает TEditor::handleEvent, затем обрабатывает

команды cmSave и cmSaveAs. Команда cmSave активи-

зирует save, команда cmSaveAs активизирует

saveAs.

См. также: TFileEditor::save, TFileEditor::save-

As.

initBuffer virtual void initBuffer();

Выделяет в памяти bufSize байт для буфера редак-

тора.

loadFile Boolean loadFile();

Считывает файл fileName с диска и выполняет про-

верку ошибок. Если они не обнаружены, возвращает-

ся значение True. В противном случае возвращается

значение False. В зависимости от причин неудачно-

го выполнения выводится изображение панели диало-

га edReadError либо edOutOfMemory.

См. также: TEditor::editorDialog.

read virtual void *read( ipstream& is );

Считывает информацию из входного потока is.

См. также: TStreamableClass, ipstream.

save Boolean save();

Вызывает функцию saveAs, если редактируемый файл

не имеет заголовка (является "Untitled" - т.е.

для него не выделено поле fileName) и возвращает

значение из saveAs. Если имеется достоверное

fileName, активизируется saveFile, и save возвра-

щает значение из saveFile.

См. также: TFileEditor::saveAs, TFileEditor::sa-

veFile.

saveAs Boolean saveAs();

Активизирует панель диалога edSaveAs, в котором

запрашивается подсказка имени сохраняемого файла

"save as". Если сообщается корректное имя файла,

Turbo Vision для С++ = 35 =

то текущий текст будет сохранен под этим именем с

помощью функции saveFile. Владельцу редактора

файла сообщается об этом событии через передавае-

мое сообщение cmUpdateTitle. Функция saveAs возв-

ращает значение значение True, если вызов

saveFile будет выполнен успешно, в противном слу-

чае возвращается значение False. Значение False

возвращается также при отмене панели диалога

edSaveAs.

См. также: TFileEditor::saveFile, TFileEditor::

editorDialog.

saveFile Boolean saveFile();

Сохраняет файл с именем fileName на диске. Если

сохранение будет неудачным, то возвращается зна-

чение False. В противном случае возвратится зна-

чение True. Если в editorFlags установлен бит

efBackupFiles, то создается файл a.BAK. Причина

неудачи будет указана в панели диалога

edCreateError или edWriteError.

См. также: TEditor::editorDialog, TFileEditor::

saveAs, TFileEditor::save.

setBufSize virtual Boolean setBufSize( ushort newSize );

Переопределяет метод TEditor::setBufSize таким

образом, что при его увеличении размер буфера бу-

дет уменьшаться с шагом 4К. Значение gapLen будет

соответствующим образом настраиваться.

updateCommands virtual void updateCommands();

Вызывает метод TEditor::updateCommands, затем

разблокирует команды cmSave и cmSaveAs. Эти ко-

манды допустимы только в том случае, если выде-

ленный отображаемый объект является редактором, в

противном случае они будут заблокированы.

См. также: TEditor::updateCommands.

valid virtual Boolean valid( ushort );

Переопределяет метод TEditor::valid, чтобы сооб-

щить о необходимости сохранения файла перед выхо-

дом из программы. Панели диалога edSaveUntitled

или edSaveModify выводятся на экран соответствую-

щим образом. Если пользователь отменяет сохране-

ние, возвращает значение False.

write virtual void write( opstream& os );

Turbo Vision для С++ = 36 =

Записывает информацию в выходной поток os.

См. также: TStreamableClass, opstream.

Родственные функции

С TFileEditor связаны определенные функции-операции, которые

не являются его методами. Подробнее об этом см. в главе 13.

Turbo Vision для С++ = 37 =

TIndicator EDITORS.H

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

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

│ TView │

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

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

┌──────┴──────┐ ┌──────┴──────┐ ╔══════╧══════╗

│ TWimdow │ │ TEditor │ ║ TIndicator ║

└──────┬──────┘ └───┬────┬────┘ ╚═════════════╝

│ │ └─────────────┐

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

│ TEditWindow │ │ TMemo │ │ TFileEditor │

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

Класс TIndicator является счетчиком строк и столбцов в ниж-

нем левом углу редактора. Он инициализируется конструктором

TEditWindow и передается конструктору TEditor в качестве четвер-

того аргумента.

Поля

location TPoint location;

Сохраняет местоположение, предназначенное для

изображения на экране. Модифицируется TEditor.

modified Boolean modified;

Имеет значение True, если связанный с ним TEditor

был модифицирован.

См. также: TEditor::draw.

Методы

constuctor TEditor( const TRect& bounds);

Создает объект TIndicator.

build static TStreamable *build();

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

ситуациях, связанных с чтением из потоков.

См. также: TStreamableClass, ipstream::readData.

draw virtual void draw();

Выполняет отображение индикатора. Если modified

Turbo Vision для С++ = 38 =

имеет значение True, выдается изображение специ-

ального символа (значение 15 кода ASCII).

getPalette virtual TPalette& getPalette() const;

Возвращает cpIndicator = "\x02\x03" (палитра

TIndicator, принятая по умолчанию).

read virtual void *read( ipstream& is );

Считывает информацию из входного потока is.

См. также: TStreamableClass, ipstream.

setState virtual void setState( ushort aState, Boolean

enable );

Если отображаемый объект перемещается, выполняет

изображение индикатора в цвете перемещаемой рам-

ки.

setValue void setValue( const TPoint& aLocation, Boolean

aModified);

Метод вызывается TEditor для модификации и изоб-

ражения значений полей ассоциированного объекта

TIndicator.

write virtual void write( opstream& os );

Записывает информацию в выходной поток os.

См. также: TStreamableClass, opstream.

Родственные функции

С TIndicator связаны определенные функции-операции, которые

не являются его методами. Подробнее об этом см. в главе 13.

Turbo Vision для С++ = 39 =

TMemo EDITORS.H

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

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

│ TView │

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

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

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

│ TWimdow │ │ TEditor │ │ TIndicator │

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

│ │ └─────────────┐

┌──────┴──────┐ ╔═══╧═══════╗ ┌──────┴──────┐

│ TEditWindow │ ║ TMemo ║ │ TFileEditor │

└─────────────┘ ╚═══════════╝ └─────────────┘

Класс TMemo, потомок TEditor, предназначен для работы в сос-

таве панели диалога или формы. Он поддерживает поле dataSize и

допускает обработку клавиши Tab классом TDialog. Его палитра так-

же отличается от палитры TEditor. В dataSize используется следую-

щая структура:

struct TMemoRec

{

ushort length;

char *buffer;

}

задавая размер (bufSize + sizeof( ushort )).

Методы

constructor TMemo();

Создает объект TMemo через его базовые конструк-

торы.

build static TStreamable *build();

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

ситуациях, связанных с чтением из потоков.

См. также: TStreamableClass, ipstream::readData.

dataSize virtual ushort dataSize();

Используется методами setData и getData при сох-

ранении и восстановлении объектов TMemo. Поля

setData и getData унаследованы от TView. По умол-

чанию, возвращает (sizeof( ushort ) + bufSize).

См. также: TView::getData, TView::setData.

Turbo Vision для С++ = 40 =

getPalette virtual TPalette& getPalette() const;

Возвращает cpMemo = "\x1a\x1B" (палитра текстово-

го поля (memo), задаваемая по умолчанию).

handleEvent virtual void handleEvent( TEvent& event );

Не допускает обработку событий, связанных с нажа-

тием клавиши kbTab, TMemo. В противном случае она

обрабатывает события таким же образом, что и

TEditor.

См. также: TEditor::handleEvent.

read virtual void *read( ipstream& is );

Считывает информацию из входного потока is.

См. также: TStreamableClass, ipstream.

write virtual void write( opstream& os );

Записывает информацию в выходной поток os.

См. также: TStreamableClass, opstream.

Родственные функции

С TMemo связаны определенные функции-операции, которые не

являются его методами. Подробнее об этом см. в главе 13.

Turbo Vision для С++ = 41 =