TTerminal TextView
+---------+
| TObject |
+----+----+
+---+---+
| TView |
+---+---+
+-----+-----+
| TScroller |
+-----+-----+
+------+------+
| TTextDevice |
+------+------+
+=====+=====+
| TTerminal |
+===========+
TTerminal реализует "немой" терминал с буферизованным
чтением и записью строк. По умолчанию - это циклический
буфер размером 64К байт.
Поля
BufSize BufSize: Word; Только чтение
Размер буфера терминала в байтах.
Buffer Buffer: PTerminalBuffer; Только чтение
Указывает на первый байт буфера терминала.
QueFront QueFront: Word; Только чтение
Смещение (в байтах) первого байта запомненного в буфере
терминала.
QueBack QueBack: Word; Только чтение
Смещение (в байтах) последнего байта, запомненного в
буфере терминала.
Методы
Init constructor Init(var Bounds: TRect; AHScrollBar,
AVScrollBar: PScrollBar; ABufSize: Word);
Перекрывается: Иногда
Создает объект TTerminal с данным Bounds, горизонтальной и
вертикальной полосами скроллинга и буфером, вызывая
TTextDevice.Init с аргументами Bounds и скроллерами, затем
создает буфер (указываемый через Buffer) с BufSize равным
ABufSize. GrowMode устанавливается в gfGrowHiX +
gfGrowHiY. QueFront и QueBack инициализируются в 0,
указывая на пустой буфер. Курсор выводится в начале
видимого элемента (0, 0).
См. так же: TScroller.Init
Done destructor Done; virtual; Перекрывается: Иногда
Освобождает буфер и вызывает TTextDevice.Done для
освобождения объекта.
См. так же: TScroller.Done, TTextDevice.Done
BufDec procedure BufDec(var Val: Word);
Используется для манипуляции смещением очереди с кольцевым
переносом: если Val = 0, Val устанавливается в BufSize-1;
иначе Val уменьшается.
См. так же: TTerminal.BufInc
BufInc procedure BufInc(var Val: Word);
Используется для манипуляции смещением очереди с кольцевым
переносом: увеличивает Val на 1, если Val >= BufSize,
Val устанавливается в 0.
См. так же: TTerminal.BufDec
CalcWidth function CalcWidth: Integer;
Возвращает длину самой длинной строки в текстовом буфере.
CanInsert function CanInsert(Amount: Word): Boolean:
Возвращает True, если число байт, заданное в Amount, можно
вставить в буфер без уничтожения верхней строки.
Draw procedure Draw; virtual; Перекрывается: Редко
Вызывается когда скроллер TTerminal должен быть
перерисован. Например, когда отмечена полоса скроллинга,
когда изменен размер видимого элемента, когда изменены
значения Delta или когда добавление текста приводит к
скроллингу.
NextLine function NextLine(Pos: Word): Word;
Возвращает смещение в буфере начала строки, которое
следует за позицией Pos.
См. так же: TTerminal.PrevLines
PrevLines function PrevLines(Pos: Word; Lines: Word): Word;
Перекрывается: Иногда
Возвращает смещение в буфере начала строки, которое
стоит перед позицией Pos.
StrRead function StrRead(var S: TextBuf) : Byte; virtual;
Перекрывается: Иногда
Абстрактный метод, возвращающий 0. Вы должны перекрыть
его, если хотите, чтобы порожденный тип мог читать строки
из текстового буфера.
StrWrite procedure StrWrite(var S:TextBuf; Count: Byte); virtual;
Перекрывается: Редко
Вставляет Count строк текста, заданного в S, в
терминальный буфер. Этот метод управляет любым требуемым
скроллингом, перерисовывая видимый элемент с помощью
DrawView.
См. так же: TView.DrawView
QueEmpty function QueEmpty: Boolean;
Возвращает True, если QueFront равна QueBack.
См. так же: TTerminal,QueFront, TTerminal.QueBack
Палитра
Теримальные объекты используют палитру по умолчанию
CScroller для отображения элементов 6 и 7 в палитру
стандартной программы.
1 2
+===+===+
CScroller | 6 | 7 |
+=+=+=+=+
Нормальный ---+ +---- Подсвеченный
TTextDevice TextView
+---------+
| TObject |
+----+----+
+---+---+
| TView |
+---+---+
+-----+-----+
| TScroller |
+-----+-----+
+======+======+
| TTextDevice |
+======+======+
+-----+-----+
| TTerminal |
+-----------+
TTextDevice - это скроллингуемый TTY тип просмотра текста/
драйвера устройства. Кроме полей и методов, наследуемых от
TScroller, TTextDevice определяет виртуальные методы для
чтения и записи строк в и из устройства. TTextDevice
существует как базовый тип для порождения реальных
терминальных драйверов. TTextDevice использует констрактор
и дестрактор TScroller.
Методы
StrRead function StrRead(var S:TextBuf): Byte; virtual;
Перекрывается: Часто
Абстрактный метод, возвращающий по умолчанию 0. Вы должны
перекрыть его в любом порожденном типе для чтения строки
текстового устройства в S. Этот метод возвращает число
прочитанных строк.
StrWrite procedure StrWrite(var S: TextBuf; Count: Byte);
virtual; Перекрывается: Всегда
Абстрактный метод для записи строки на устройство. Он
должен перекрыватся в порожденных типах. Например,
TTerminal.StrWrite вставляет Count строк текста, заданных
в S в терминальный буфер и перерисовывает видимый элемент.
Палитра
Объекты текстового устройства используют палитру по
умолчанию CScroller для отображения в 6 и 7 элементы
палитры стандартной программы.
1 2
+===+===+
CScroller | 6 | 7 |
+=+=+=+=+
Нормальный ---+ +---- Подсвеченный
TView Views
+---------+
| TObject |
+----+----+
+======+======+
| TView |
+++++++++++++++
+--------------+|||||||||||+--------------+
| +------+|||||||||+------+ |
| |+------+|||||||+------+| |
+---+----+ ||+------+|||||+------+|| +---+----+
| TGroup | |||+------+|||+------+||| | TFrame |
+--------+ ||||+------+|+------+|||| +--------+
+-------+|||| +----+----+ ||||+--------+
+----+-----+ |||| | TButton | |||| +-----+----+
| TCluster | |||| +---------+ |||| | THistory |
+----------+ |||+------+ |||| +----------+
+-------+|| +-----+-----+ |||+--------+
+-----+-----+ || | TScroller | ||| +------+-----+
| TMenuView | || +-----------+ ||| | TScrollBar |
+-----------+ || +--------+|| +------------+
+-------+| +-----+------+ |+--------+
+------+------+ | | TInputLine | | +------+------+
| TBackGround | | +------------+ | | TListViewer |
+-------------+ | | +-------------+
+------+------+ +------+------+
| TStatusLine | | TStaticText |
+-------------+ +-------------+
Включите оператор
uses Views;
в программы, которые используют объекты TView, TFrame,
TScrollBar, TScroller, TListViewer, TGroup, TWindow.
Трудно представить программу на Turbo Vision, которая не
использует эти объекты.
В программах на Turbo Vision редко создаются экземпляры
объектов TView. Тип объекта TView обеспечивает основные
поля и методы своим потомкам.
Поля
Owner Owner: PGroup; Только чтение
Указывает на объект TGroup, который владеет этим видимым
элементом. Если nil, видимый элемент не имеет владельца.
Видимый элемент отображается внутри видимого элемента
владельца и будет отсекаться по прямоугольнику владельца.
Next Next: PView; Только чтение
Указывает на следующий равный видимый элемент в Z-порядке.
Если это последний подэлемент, Next указывает на Owner
первого подэлемента.
Origin Origin: TPoint; Только чтение
Координаты (X, Y) верхнего левого угла видимого элемента
относительно Origin владельца.
См. так же: MovTo, Locate
Size Size: TPoint; Только чтение
Размер видимого элемента.
См. так же: GrowTo, Locate
Cursor CurSor: TPoint; Только чтение
Положение аппаратного курсора внутри видимого элемента.
Курсор видим только если видимый элемент активен
(sfFocused) и курсор включен (sfCursorVis). Форма курсора
или подчеркивание или блок (определен sfCursorIns).
См. так же: SetCursor, ShowCursor, HideCursor,
NormalCursor, BlockCursor
GrowMode GrowMode: Byte; Чтение/Запись
Определяет, как видимый элемент будет увеличиваться, когда
его владелец изменяет размер. GrowMode определяется одной
или более масками:
Рис. 13.1. Отображение бит в GrowMode.
+--- GrowMode --+
msb lsb
+-+-+-+--- gfGrowAll = $0F
+=+=+=+=+++++++++
+++=+++++++++++++
+-+-+ | | | | +--- gfGrowLoX = $01
| | | | +----- gfGrowLoY = $02
Неопределено | | +------- gfGrowHiX = $04
| +--------- gfGrowHiY = $08
+----------- gfGrowRel = $10
Пример: GrowMode := gfGrowLoX or gfGrowLoY;
См. так же: gfXXXX константа grow mode
DragMode DragMode: Byte; Чтение/Запись
Определяет поведение видимого элемента при перемещении
мышкой.
Биты DragMode определены:
Рис. 13.2. Отображение бит в DragMode.
+--- DragMode --+
msb lsb
+-+-+-+----------- dmLimitAll = $F0
+++++++++=+=+=+=+
+++++++++=+=+++++
| | | | | +--- dmDragMove = $01
| | | | +----- dmDragGrow = $02
| | | +----------- dmLimitLoX = $10
| | +------------- dmLimitLoY = $20
| +--------------- dmLimitHiX = $40
+----------------- dmLimitHiY = $80
Маски DragMode определены в "Константы DragMode dmXXXX"
главы 14.
См. так же: TView.DragView
HelpCtx HelpCtx: Word; Чтение/Запись
Контекст подсказки видимого элемента. Когда видимый
элемент активен, это поле представляет контекст подсказки
программы, если номер контекста подсказки не hcNoContext
(в этом случае нет контекста подсказки).
См. так же: TView.GetHelpCtx
State State: Word; Только чтение
Состояние видимого элемента представлено набором бит в
поле State. Многие методы TView проверяют и/или изменяют
поле State, вызывая TView.SetState. TView.GetState
(AState) возвращает True, если State видимого элемента
равна AState. Биты State мнемонически представлены
константами, описанными в "Константы флагов состояния
sfXXXX" главы 14.
Options Options: Word; Чтение/Запись
Флаги Options определяют поведение видимого элемента.
Биты Options определены:
Рис. 13.3. Биты в Options.
+-------- TView.Options --------+
msb lsb
+-+------------------- ofCentered = $0300
+=+=+=+=+=+=+++++=+=+=+=+=+=+=+=+
+++=+=+=+=+++++++++++++++++++++++
+----+----+ | | | | | | | | | +--- ofSelectable = $0001
| | | | | | | | | +----- ofTopSelect = $0002
Неопределено | | | | | | | +------- ofFirstClick = $0004
| | | | | | +--------- ofFramed = $0008
| | | | | +----------- ofPreProcess = $0010
| | | | +------------- ofPostProcess = $0020
| | | +--------------- ofBuffered = $0040
| | +----------------- ofTileable = $0080
| +------------------- ofCenterX = $0100
+--------------------- ofCenterY = $0200
Для детального описания флагов см. "Константы флагов опций
ofXXXX" главы 14.
EventMask EventMask: Word; Чтение/Запись
EventMask - это битовая маска, которая определяет, какие
классы событий будут распознаваться видимым элементом. По
умолчанию EventMask разрешает evMouseDown, evKeyDown и
evCommand. Назначение EventMask равным $FFFF заставляет
видимый элемент реагировать на все классы событий; а
значение 0 приводит к тому, что видимый элемент не
реагирует на любые события. Для детального описания
классов событий см. "Константы событий evXXXX" главы 14.
См. так же: HandleEvent методы
Методы
Init constructor Init(var Bounds: TRect); Перекрывается: Часто
Создает объект TView с прямоугольником Bounds. Init
вызывает TObject.Init и создает поля нового TView со
значениями:
------------------------------------------------------------
Owner nil
Next nil
Origin (Bounds.A.X, Bounds.A.Y)
Size (Bounds.B.X - Bounds.A.X, Bounds.B.Y - Bounds.A.Y)
Cursor (0, 0)
GrowMode 0
DragMode dmLimitLoY
HelpCtx heNoContext
State sfVisible
Options 0
EventMask evMouseDown + evKeyDown + evCommand
------------------------------------------------------------
Заметим, что TObject.Init заполняет нулями все поля
потомков TView. Всегда вызывайте TView.Init до
инициализиции любых полей.
См. так же: TObject.Init
Load constructor Load(var S: TStream); Перекрывается: Часто
Создает объект TView и загружает его из потока S. Размер
данных, читаемых из потока должен точно соответствовать
размеру данных, записанных в поток методом Store. Если
видимый элемент содержит указатели на равные видимые
элементы, Load должен использовать GetPeerViewPtr для
чтения этих указателей. Перекрытый констрактор Load всегда
должен вызывать констрактор Load своего предка.
По умолчанию TView.Load устанавливает поля Owner и Next в
nil и читает оставшиеся поля из потока.
См. так же: TView.Store, TStream.Get, TStream.Put
Done destructor Done; virtual; Перекрывается: Часто
Скрывает видимый элемент и затем, если он имеет кладельца,
удаляет его из группы.
HandleEvent procedure HandleEvent(var Event: TEvent); virtual;
Перекрывается: Всегда
Центральный метод, через который реализована вся
обработка событий Turbo Vision. Поле What параметра Event
содержит класс события (evXXXX) и оставшиеся поля Event
описывают событие. Для указания, что он обработал событие,
HandleEvent должен вызывать ClearEvent. HandleEvent почти
всегда перекрывается в порожденных объектных типах.
TView.HandleEvent обрабатывает события evMouseDown
следующим образом: если видимый элемент не выбран
(sfSelected) и не запрещен (sfDisabled) и если видимый
элемент - выбираемый (ofSelectable), то видимый элемент
выбирает себя, вызывая Select. Другие события в
TView.HandleEvent не обрабатываются.
См. так же: TView.ClearEvent
BlоckCursor procedure BlоckCursor; Перекрывается: Никогда
Устанавливает sfCursorIns, чтобы изменить курсор в форму
блока. Курсор будет видимым только если установлен
sfCursorVis (и видимый элемент так же видим).
См. так же: sfCursorIns, sfCursorVis, TView.NormalCursor,
TView.ShowCursor, TView.HideCursor
CalcBounds procedure CalcBounds(var Bounds: TRect; Delta: TPoint);
virtual; Перекрывается: Редко
Когда владелец видимого элемента изменяет размер, он
вызывает CalcBounds и ChangeBounds для всех подэлементов.
CalcBounds должен вычислять новые границы видимого
элемента на основе Delta, на которое изменился размер его
владельца, и возвращает новые границы в Bounds.
TView.CalcBounds вычисляет новые границы, используя флаги,
заданные в поле TView.GrowMode.
См. так же: TView.GetBounds, TView.ChangeBounds, gfXXXX
константы grow mode
ChangeBounds procedure ChangeBounds(var Bounds: TRect); virtual;
Перекрывается: Редко
Должен изменять границы видимого элемента (поля Origin и
Size) на прямоугольник, заданный параметром Bounds. После
изменения границ ChangeBounds должен перерисовать видимый
элемент. ChangeBounds вызывается различными методами
TView, но не должен вызываться прямо.
См. так же: TView.Locate, TView.MoveTo, TView.GrowTo
ClearEvent procedure ClearEvent(var Event: TEvent);
Стандартный метод используется в HandleEvent для указания,
что видимый элемент успешно обработал событие.
Устанавливает Event.What в evNоthing и Event.InfoPtr в
@Self.
См. так же: HandleEvent методы
CommandEnabled function CommandEnabled(Command: Word): Boolean;
Возвращает True, если команда Command разрешена, иначе -
False. Заметим, что когда Вы изменяете модальное
состояние, Вы можете запретить или разрешить необходимые
команды; однако, когда Вы возвращаетесь в предыдущее
модальное состояние, оригинальный набор команд должен быть
восстановлен.
См. так же: TView.DisableCommand, TView.EnableCommand,
TView.SetCommands
DataSize function DataSize: Word; virtual; Перекрывается: Редко
DataSize должен возвращать размер данных читаемый из и
записываемый в запись данных с помощью SetData и GetData.
Механизм записи данных обычно используется только в
видимых элементах, которые реализуют элементы управления
для диалоговых окон.
См. так же: TView.GetData, TView.SetData
DisableCommands procedure DisableCommands(Commands: TCommandSet);
Запрещает команды, указанные в аргументе Commands.
См. так же: TView.CommandEnabled, TView.EnableCommands,
TView.SetCommands
DragView procedure DragView(Event: TEvent; Mode: Byte; var Limits:
TRect; MinSize, MaxSize: TPoint);
Перемещает мышкой видимый элемент, используя режим
перемещения, заданный флагами dmXXXX в Mode. Limits
указывает прямоугольник (в координатной системе владельца)
внутри которого может перемещаться видимый элемент, а Min
и Max указывают минимальный и максимальный размеры
видимого элемента, которые он может принимать. Событие,
приводящее к операции перемещения мышкой, требуется в
Event для различения перемещения мышкой от использования
клавиш курсора.
См. так же: TView.DragMode, dmXXXX константы drag mode
Draw procedure Draw; virtual; Перекрывается: Всегда
Вызывается, когда видимый элемент должен перерисовать
себя. Draw должен покрывать всю область видимого элемента.
Этот метод должен соответственно перекрываться для каждого
порожденного объекта. Draw редко вызывается прямо,
поскольку более эффективно использовать DrawView, который
рисует только ожидаемые видимые элементы, т.е. когда часть
или весь видимый элемент видим на экране. При
необходимости Draw может вызвать GetClipRect для получения
прямоугольника, который необходимо перерисовать и затем
рисовать только эту область. Для сложных видимых элементов
это может значительно улучшить производительность.
См. так же: TView.DrawView
DrawView procedure DrawView;
Вызывает Draw, если TView.Exposed возвращает True,
указывая, что видимый элемент ожидается (см. sfExposed).
Вы должны вызвать DrawView (а не Draw), когда Вам
необходимо перерисовать видимый элемент после изменения,
которое воздействует на его видимое отображение.
См. так же: TView.Draw, TGroup.ReDraw, TView.Exposed
EnableCommands procedure EnableCommands(Commands: TCommandSet);
Разрешает все команды в аргументе Commands.
См. так же: TView.DisableCommands, TView.GetCommands,
TView.CommandEnabled, TView.SetCommands
EndModal procedure EndModal(Command: Word); virtual;
Перекрывается: Никогда
Завершает текущее модальное состояние и возвращает
Command, как результат вызова функции ExecView, которая
создала это модальное состояние.
См. так же: TGroup.ExecView, TGroup.Execute,
TGroup.EndModal
EventAvail function EventAvail: Boolean;
Возвращает True, если событие доступно для GetEvent.
См. так же: TView.MouseEvent, TView.KeyEvent,
TView.GetEvent
Execute function Execute: Word; virtual; Перекрывается: Рддко
Вызывается из TGroup.ExecView когда видимый элемент
становится модальным. Если видимый элемент разрешает
модальное выполнение, он должен перекрыть Execute для
выполнения цикла событий. Результатом Execute становится
значение, возвращаемое из TGroup.ExecView.
TView.ExecView просто возвращает cmCancel.
См. так же: sfModal, TGroup.Execute, TGroup.ExecView
Exposed function Exposed: Boolean;
Возвращает True, если любая часть видимого элемента видна
на экране.
См. так же: sfExposed, TView.DrawView
GetBounds procedure GetBounds(var Bounds: TRect);
Возвращает в переменной Bounds граничный прямоугольник
видимого элемента в координатной системе его владельца.
Bounds.A устанавливается в Origin, а Bounds.B
устанавливается в Origin + Size.
См. так же: TView. Origin, TView.Size, TView.CalcBounds,
TView.ChangeBounds, TView.SetBounds, TView.GetExtent
GetClipRect procedure GetClipRect(var Clip: TRect);
Возвращает в переменной Clip минимальный прямоугольник,
который требуется перерисовать в вызове Draw. Для сложных
видимых элементов Draw может использовать GetClipRect для
значительного улучшения производительности.
См. так же: TView.Draw
GetColor function GetColor(Color: Word): Word;
Отображает индексы палитры младшего и старшего байта Color
в физические атрибуты символа, проходя через палитру
видимого элемента и палитры всех его владельцев.
См. так же: TView.GetPalette
GetCommands procedure GetCommands(var Commands: TCommandSet);
Возвращает в Commands текущий набор команд.
См. так же: TView.CommandsEnabled, TView.EnableCommands,
TView.DisableCommands, TView.SetCommands
GetData procedure GetData(var Rec); virtual; Перекрывается: Редко
Должна копировать DataSize байт из видимого элемента в
запись данных Rec. Механизм записей данных обычно
используется только в видимых элементах, которые реализуют
элементы управления для диалоговых окон.
По умолчанию TView.GetData ничего не делает.
См. так же: TView.DataSize, TView.SetData
GetEvent procedure GetEvent(var Event: TEvent); virtual;
Перекрывается: Редко
Возвращает следующее доступное событие в TEvent.
Возвращает evNothing, если событие недоступно. По
умолчанию он вызывает GetEvent владельца видимого
элемента.
См. так же: TView.EventAvail, TProgram.Idle,
TView.HandleEvent, TView.PutEvent
GetExtent procedure GetExtent(var Extent: TRect);
Возвращает в переменной Extent прямоугольник видимого
элемента. Extent.A устанавливается в (0,0), а Extent.B
устанавливается в Size.
См. так же: TView.Origin, TView.Size, TView.CalcBounds,
TView.ChangeBounds, TView.SetBounds, TView.GetBounds
GetHelpCtx function GetHelpCtx: Word; virtual;
Перекрывается: Редко
Должна возвращать контекст подсказки видимого элемента.
По умолчанию TView.GetHelpCtx возвращает значение поля
HelpCtx или возвращает hcDragging, если видимый элемент
перемещается мышкой (см. sfDragging).
См. так же: HelpCtx
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Всегда
Должна возвращать указатель на палитру видимого элемента
или nil, если видимый элемент не имеет палитры. GetPalette
вызывается из GetColor, WriteChar и WriteStr при
преобразовании индексов палитры в физические атрибуты
символов. При возвращаемом значении nil трансляция цвета
этим видимым элементом не производится. GetPalette почти
всегда перекрывается в порожденных типах объектов.
См. так же: TView.GetColor, TView.WriteXXXX
GetPeerViewPtr procedure GetPeerViewPtr(var S: TStream; var P);
Загружает указатель Р равного видимого элемента из потока
S. Равный видимый элемент - это видимый элемент с тем же
владельцем, что и у этого видимого элемента; например
TScroller содержит 2 равных видимых элемента HScrollBar и
VScrollBar. GetPeerViewPtr должен использоваться только
внутри констрактора Load для чтения значений указателей,
которые были записаны при вызове PutPeerViewPtr из метода
Store. Загруженное в Р значение не является действительным
до тех пор, пока владелец видимого элемента не завершит
полностью операцию Load; следовательно ссылка по указателю
на равный видимый элемент внутри констрактора Load не дает
корректного значения.
См. так же: TView.PutPeerViewPtr, TGroup.Load, TGroup.Store
GetState function GetState(AState: Word): Boolean;
Возвращает True, если состояние в AState установлено в
поле State.
См. так же: State, TView.SetState
GrowTo procedure GrowTo(X, Y: Integer);
Увеличивает или уменьшает видимый элемент на данный
размер, используя вызов TView.Locate.
См. так же: TView.Origin, TView.Locate, TView.MoveTo
Hide procedure Hide;
Прячет видимый элемент, вызывая SetState для очистки флага
sf Visible в State.
См. так же: sfVisible, TView.SetState, TView.Show
HideCursor procedure HideCursor;
Прячет курсор, очищая бит sfCursorVis в State.
См. так же: sfCursorVis, TView.ShowCursor
KeyEvent procedure KeyEvent(var Event: TEvent);
Возвращает в переменной Event следующее событие evKeyDown.
Он ожидает игнорируя все другие события до тех пор, пока
событие от клавиатуры не будет доступно.
См. так же: TView.GetEvent, TView.EventAvail
Locate procedure Locate(var Bounds: TRect);
Изменяет границы видимого элемента на Bounds. Видимый
элемент перерисовывается в его новом положении. Locate
вызывает SizeLimits для проверки, что данные
Bounds правильны, затем вызывает ChangeBounds для
изменения границ и перерисовывает видимый элемент.
См. так же: TView.GrowTo, TView.MoveTo, TView.ChangeBounds
MakeFirst procedure MakeFirst;
Перемещает видимый элемент на вершину списка подэлементов
владельца. Вызов MakeFirst соответствует
PutInFrontOf(Owner^.First).
См. так же: TView.PutInFrontOf
MakeGlobal procedure MakeGlobal(Source: TPoint; var Dest:TPoint);
Перобразует координаты в точке Sourсe из локальных
(видимый элемент) в глобальные (экран) и возвращает
результат в Dest. Source и Dest могут быть одной
переменной.
См. так же: TView.MakeGlobal, TView.MouseInView
MakeLocal procedure MakeLocal(Source: TPoint; var Dest:TPoint);
Преобразует координаты точки Source из глобальных (экран)
в локальные (видимый элемент) и возвращает результат в
Dest. Полезно для преобразования поля Event.Where в
событии evMouse из глобальных координат в локальные.
Например MakeLocal(Event.Where, MouseLoc).
См. так же: TView.MakeGlobal, TView.MouseInView
MouseEvent function MouseEvent(var Event: TEvent; Mask: Word):
Boolean;
Возвращает следующее событие от мышки в Event. Возвращает
True, если возвращенное событие есть в аргументе Mask, и
False, если возникло событие evMouseUp. Этот метод
позволяет Вам трассировать мышку, когда ее кнопка нажата,
например в операциях отметки блока мышкой в текстовых
редакторах.
Приведем фрагмент программы HandleEvent, которая следит за
мышкой с курсором видимого элемента.
procedure TMyView.HandleEvent(var Event: TEvent);
begin
TView.HandleEvent(Event);
case Event.What of
evMouseDown:
begin
repeat
MakeLocal(Event.Where, Mouse);
SetCursor(Mouse.X, Mouse.Y);
until not MouseEvent(Event, evMouseMove);
ClearEvent(Event);
end;
.
end;
end;
См. так же: EventMasks, TView.KeyEvent, TView.GetEvent
MouseInView function MouseInView(Mouse: TPoint): Boolean;
Возвращает True, если аргумент Mouse (заданный в
глобальных координатах) внутри видимого элемента.
См. так же: TView.MakeLocal
MoveTo procedure MoveTo(X, Y: Integer);
Перемещает Origin в точку (X, Y) относительно владельца
видимого элемента. Size видимого элемента не изменяется.
См. так же: Origin, Size, TView.Locate, TView.GrowTo
NextView function NextView: PView;
Возвращает указатель на следующий подэлемент в списке
подэлементов владельца. Возвращается nil, если видимый
элемент последний в списке владельца.
См. так же: TView.PRevView, TView.Prev, TView.Next
NormalCursor procedure NormalCursor;
Очищает бит sfCursorIns в State, переводя курсор в режим
подчеркивания. Если sfCursorVis установлен, новый курсор
будет отображаться.
См. так же: sfCursorIns, sfCursorVis, TView.HideCursor,
TView.BlockCursor, TView.HideCursor
Prev function Prev: PView;
Возвращает указатель на предыдущий подэлемент в списке
подэлементов владельца. Если видимый элемент первый в
списке владельца, Prev возвращает последний видимый
элемент в списке. Заметим, что TView.Prev интерпретирует
список как кольцевой, в то время как TView.PrevView
интерпретирует его как линейный.
См. так же: TView.NextView, TView.PrevView, TView.Next
PrevView function PrevView: PView;
Возвращает указатель на предыдущий подэлемент в списке
подэлементов владельца. Возвращается nil, если видимый
элемент - первый в списке владельца. Заметим, что
TView.Prev интерпретирует список как кольцевой, а
TView.PrevView - как линейный.
См. так же: TView.NextView, TView.Prev
PutEvent procedure PutEvent(var Event: TEvent); virtual;
Перекрывается: Редко
Помещает событие, заданное в Event, в очередь событий, в
результате чего это событие будет следующим событием,
возвращаемым GetEvent. Этим способом в очередь может быть
помещено только одно событие. Это часто используется
видимыми элементами, генерирующими командные события,
например:
Event.What := evCommand;
Event. Command := cmSaveAll;
Event.InfoPtr := nil;
PutEvent(Event);
По умолчанию TView.PutEvent вызывает PutEvent владельца
видимого элемента.
См. так же: TView.EventAvail, TView.GetEvent,
TView.HandleEvent
PutInFontOf procedure PutInFontOf(Target: PView);
Помещает видимый элемент перед видимым элементом Target в
списке подэлементов владельца. Вызов
TView.PutInFontOf(Owner^.First);
эквивалентен TView.MakeFirst. Этот метод работает, изменяя
указатели в списке подэлементов. В зависимости от позиции
других видимых элементов и их состояния, PutInFrontOf
может отсекать закрываемые видимые элементы. Если видимый
элемент - выбираемый (см. ofSelectable) и помещается
сверху всех других подэлемиентов, этот видимый подэлемент
становится выбранным.
См. так же: TView.MakeFirst
PutPeerViewPtr procedure PutPeerVieewPtr(var S: TStream;
P: PView);
Сохраняет указатель P на равный видимый элемент в потоке
S. Равный видимый элемент - это видимый элемент с тем же
владельцем, что и этот видимый элемент. PutPeerViewPtr
должен использоваться только внутри метода Store для
записи значений указателей, которые позже могут быть
считаны с помощью GetPeerViewPtr в констракторе Load.
См. так же: TView.PutPeerViewPtr, TGroup.Load,
TGroup.Store
Select procedure Select;
Выбирает видимый элемент (см. sfSelected). Если владелец
видимого элемента активизируется, то видимый элемент так
же активизируется (см. sfFocused). Если видимый элемент
имеет установленный флаг ofTopSelect в поле Options, то
видимый элемент перемещается на вершину списка
подэлементов владельца (используя вызов TView.MakeFirst).
См. так же: sfSelected, sfFocused, ofTopSelect,
TView.MakeFirst
SetBounds procedure SetBounds(var Bounds: TRect);
Устанавливает граничный прямоугольник видимого элемента в
значения параметра Bounds. Поле Origin устанавливается в
Bounds.A и поле Size устанавливается в Bounds.B -
Bounds.A. Метод SetBounds вызывается только из перекрытого
метода ChangeBounds - Вы не должны вызывать SetBounds
прямо.
См. так же: TView.Origin, TView.Size, TView.CalcBounds,
TView.ChangeBounds, TView.GetBounds, TView.GetExtent
SetCommands procedure SetCommands(Commands: TCommandSet);
Изменяет текущий набор команд на заданный аргументом
Commаnds.
См. так же: TView.EnableCommands, TView.DisableCommands
SetCursor procedure SetCursor(X, Y: Integer);
Перемещает аппаратный курсор в точку (X,Y) используя
относительные координаты видимого элемента (локальные).
(0,0) - это верхний левый угол.
См. так же: TView.MakeLocal, TView.HideCursor,
TView.ShowCursor
SetData procedure SetData(var Rec); virtual; Перекрывается: Редко
SetData должен копировать DataSize байт из записи данных
Rec в видимый элемент. Механизм записи данных обычно
используется только в видимых элементах, которые реализуют
элементы управления для диалоговых окон.
По умолчанию TView.SetData ничего не делает.
См. так же: TView.DataSize, TView.GetData
SetState procedure SetState(AState: Word; Enable: Boolean);
virtual; Перекрывается: Иногда
Устанавливает или очищает флаг состояния в поле
TView.State. Параметр AState задает флаг состояния для
модификации (см. sfXXXX), а параметр Enable указывает,
будет этот флаг устанавливаться (True) или выключаться
(False). TView.SetState затем выполняет соответствующие
действия для отражения нового состояния, такие как
перерисовка видимых элементов, которые появляются, когда
данный видимый элемент скрывается (sfVisible) или
перепрограммирование аппаратуры, когда изменяется форма
курсора (sfCursorVis и sfCursorIns).
SetState иногда перекрывается для выполнения
дополнительных действий, основанных на флагах состояний.
Например, тип TFrame перекрывает SetState для своей
перерисовки, когда окно выбирается или перемещается
мышкой.
procedure TFrame.SetState(AState: Word; Enable: Boolean);
begin
TView.SetState(AState, Enable);
if AState and (sfActive + sfDragging) <> 0 then
DrawView;
end;
Другая причина перекрыть SetState - это разрешить или
запретить команды, которые обрабатываются определенным
видимым элементом.
procedure TMyView.SetState(AState: Word; Enable: Boolean);
const
MyCommands = [cmOut, cmCopy, cmPaste, cmClear]
begin
TView.SetState(AState, Enable);
if AState = sfSelected then
if Enable then
EnableCommands(MyCommands) else
DisableCommands(MyCommands);
end;
См. так же: TView.GetState, TView.State, sfXXXX константы
state flag
Show procedure Show;
Показывает видимый элемент, вызывая SetState для установки
флага sfVisible в поле State.
См. так же: TView.SetState
ShowCursor procedure ShowCursor;
Включает аппаратный курсор, устанавливая sfCursorVis.
Заметим, что по умолчанию курсор невидим.
См. так же: sfCursorVis, TView.HideCursor
SizeLimits procedure SizeLimits(var Min, Max: TPoint); virtual;
Перекрывается: Иногда
Возвращает, в переменных Min и Max, минимальное и
максимальное значения, которые может принимать поле Size.
См. так же: TView.Size
Store procedure Store(var S: TStream); Перекрывается: Часто
Сохраняет видимый элемент в потоке S. Размер данных,
записываемых в поток, должен точно соответствовать размеру
данных, читаемых из потока констрактором Load видимого
элемента. Если видимый элемент содержит указатель на
равные видимые элементы, Store должен использовать
PutPeerViewPtr для записи этих указателей. Перекрытый
метод Store должен всегда вызывать родительский метод
Store. По удолчадию TView.Store пишет все поля, кроме
Owner и Next в птоток.
См. так же: TView.Load, TStream.Get, TStream.Put
TopView function TopView: PView;
Возвращает указатель на текущий модальный видимый элемент.
Valid function Valid(Commands: Word): Boolean; virtual;
Перекрывается: Иногда
Этот метод используется для проверки правильности видимого
элемента после его создания (с использованием Init или
Load) или в момент, когда заканчивается модальное
состояние (при вызове EndModal).
Значение параметра Command, равное cmValid (ноль),
указывает, что видимый элемент должен проверять результат
своего создания: Valid(cmValid) должен возвращать True,
если видимый элемент был успешно создан и готов к
использованию; иначе - False.
Любое другое (не ноль) значение параметра Command
указывает, что текущее модальное состояние (такое как
модальное диалоговое окно) должно завершаться с
результирующим значением Command. В этом случае Valid
должна проверять правильность видимого элемента.
Valid должна сообщить пользователю, если видимый элемент
неправильный, например используя программу MessageBox в
модуле StdDlg.
Типы объектов, определенные в модуле StdDlg содержат ряд
примеров перекрытия Valid.
По умолчанию TView.Valid просто возвращает True.
См. так же: TGroup.Valid, TDialog.Valid, TProgram.ValidView
WriteBuf procedure TView.WriteBuf(X, Y, W, H: Integer; var Buf);
Записывает буфер на экран, начиная с координат (X,Y) и
заполняет область шириной W и высотой H. Должен
использоваться только в методах Draw. Обычно пареметр Buf
типа ТDrawBuffer, но может быть любым массивом слов, где
каждое слово содержит символ в младшем байте и атрибут в
старшем байте.
См. так же: TView.Draw
WriteChar procedure TView.WriteChar(X, Y: Integer; Ch: Char;
Color: Byte; Count: Integer);
Начиначя с точки (X,Y) записывает Count копий символа Ch
цветом, определенным элементом с номером Color, в палитре
текущего видимого элемента. Должен использоваться только в
методах Draw.
См. так же: TView>draw
WriteLine procedure TView.WriteLine(X, Y, W, H: Integer; var Buf);
Записывает строку, содержащуюся в буфере Buf на экран,
начиная с точки (X,Y) и внутри прямоугольника,
определенного шириной W и высотой H. Если H больше 1,
строка будет повторяться Н раз. Должен использоваться
только в методе Draw. Параметр Buf обычно типа
TDrawBuffer, но может быть любым массивом слов, где каждое
слово содержит символ в младшем байте и атрибут - в
старшем байте.
См. так же: TView.Draw
WriteStr procedure TView.WriteStr(X, Y: Integer; Str: String;
Color: Byte);
Записывает строку Str c цветом элемента с номером Color в
палитре видимого элемента, начиная с точки (X,Y). Должен
использоваться только в методе Draw.
См. так же: TView.Draw
TWindow Views
+---------+
| TObject |
+----+----+
+----+----+
| TView |
+----+----+
+----+----+
| TGroup |
+-+--+--+-+
+----------+ | +------------+
+====+====+ +----+-----+ +------+-------+
| TWindow | | TDeskTop | | TProgram |
+====+====+ +----------+ +------+-------+
+----+----+ +------+-------+
| TDialog | | TApplication |
+---------+ +--------------+
Объект TWindow - это группа, которая обычно владеет
объектом TFrame, объектом интерьера TScroller и одним или
двумя объектами TScrollBar. Объект TFrame задает обычную
рамку, размещает необязательный заголовок и номер и
функциональные кнопки (закрытия, масштабирования,
перемещения). Объекты TWibdow имеют встроенные возможности
перемещения и масштабирования с помощью мышки и
клавиатуры. Они могут масштабироваться и закрываться
отметкой мышки соответствующих кнопок. Они так же "знают"
как работать с полосами скроллинга и скроллера. Окна с
номерами от 1 до 9 могут выбираться клавишами Alt-n (n от
1 до 9).
Поля
Flags Flags: Byte; Чтение/Запись
Поле Flags содержит комбинацию следующих бит:
+ TWindow.Flags +
| |
msb lsb
+=+=+=+=+=+=+=+=+
+++=+=+++++++++++
+--+--+ | | | +- wfMove = $01
| | | +--- wfGrow = $02
Неопределено | +----- wfClose = $04
+------- wfZoom = $08
Описание флагов окна см. в "Константы флагов окна wfXXXX"
главы 14.
ZoomRect ZoomRect: TRect; Только чтение
Нормальные несмасштабированные границы окна.
Number Number: Integer; Чтение/Запись
Номер этого окна. Если TWindow.Number в диапазоне 1 - 9,
номер будет появляться в заголовке рамки и окно может быть
выбрано клавишами Alt-n (n от 1 до 9).
Palette Palette: Integer; Чтение/Запись
Определяет какая палитра окна будет использоваться:
wpBlueWindow, wpCyanWindow, wpGrayWindow. Палитра по
умолчанию wpBlueWindow.
См. так же: TWindow.GetPalette, wpXXXX константы
Frame Frame: PFrame; Только чтение
Frame - это указатель на объект TFrame, связанный с окном.
См. так же: TWindow.InitFrame
Title Title: RString; Чтение/Запись
Строка символов, определяющая (необязательный) заголовок,
который появляется в рамке.
Методы
Init constructor Init(var Bounds: TRect; ATitle: TTitleStr;
ANumber: Integer);
Вызывает TGroup.Init(Bounds). Устанавливает State в
sfShadow. Устанавливает по умолчанию Options в
(ofSelectable + ofTopSelect). Устанавливает GrowMode в
gfGrowAll + gfGrowRel. Устанавливает Flags в (wfMove +
wfGrow + wfClose + wfZoom). Устанавливает поле Title в
NewStr(ATitle), поле Number в ANumber. Вызывает InitFrame,
и если поле Frame не nil, вставляет его в группу окна.
Наконец, устанавливает ZoomRect в Bounds.
См. так же: TFrame.InitFrame
Load constructor Load(var S: TStream);
Создает и загружает окно из потока S, вызывая TGroup.Load,
затем читая дополнительные поля, введенные в TWindow.
См. так же: TGroup.Load
Done destructor Done; virtual; Перекрывается: Иногда
Освобождает окно и подэлементы.
Close procedure Close; virtual; Перекрывается: Редко
Закрывает и освобождает окно обычно в ответ на командное
событие cmClose. Соответствует вызову дестрактора Done.
GetPalette function GetPalette: PPalette; virtual;
Перекрывается: Иногда
Возвращает указатель на палитру, заданную индексом палитры
в поле Palette.
См. так же: TWindow.Palette
GetTitle function GetTitle(MaxSize: Integer): TTitleStr; virtual;
Перекрывается: Редко
Должна возвращать строку заголовка окна. Если строка
заголовка больше, чем MaxSize символов, GetTitle должна
пытаться сократить ее; иначе она будет отсекаться
отбрасыванием текста после MaxSize символов.
TFrame.Draw вызывает Owner^.GetTitle для получения строки
текста, отображаемой в рамке.
По умолчанию GetWindow.Title возвращает строку Title^ или
пустую строку, если поле Title равно nil.
См. так же: TWindow.Title, TFrame.Draw
HandleEvent procedure HandleEvent(var Event: TEvent); virtual;
Перекрывается: Часто
Вначале вызывает TGroup.HandleEvent, затем обрабатывает
специфические для TWindow события:
события evCommand обрабатываются, если поле TWindow.Flags
разрешает эту операцию: cmResize (переместить или изменить
размер окна, используя метод TView.DrawView), cmClose
(закрыть окно, используя метод TWindow.Close) и cmZoom
(масштабировать окно, используя метод TWindow.Zoom).
События evKeyDown со значением KeyCode, равным kbTab или
kbShiftTab обрабатываются, выбирая следующий или
предыдущий выбираемый подэлемент (если он существует).
Событие evBroadcast со значением Command, равным
cmSelectWindowNum, обрабатывается выбором окна, если поле
Event.InfoInt равно TWindow.Number.
См. так же: TGroup.HandleEvent, wfXXXX константы
InitFrame procedure InitFrame; virtual; Перекрывается: Редко
Создает объект TFrame для окна и сохраняет указатель на
эту рамку в поле TWindow.Frame. InitFrame вызывается из
TWindow.Init и никогда не должен вызываться прямо.
InitFrame может быть перекрыт для создания экземпляра
объекта, порожденного от TFrame.
См. так же: TWindow.Init
SetState procedure SetState(AState: Word; Enable: Boolean);
virtual; Перекрывается: Редко
Вначале вызывает TGroup.SetState. Затем, если AState равно
sfSelected, активизирует или деактивизирует окно и все его
подэлементы, используя вызов SetState(sfActive, Enable) и
вызов TView.EnebleCommands или TView.DisableCommands для
cmNext, cmPrev, cmResize, cmClose и cmZoom.
См. так же: TGroup.SetState, EnableCommands,
DisableCommands
SizeLimits procedure SizeLimits(var Min, Max: TPoint); virtual;
Перекрывается: Редко
Перекрывает TView.SizeLimits. Вызывает TView.SizeLimits,
затем изменяет Min на значение, хранимое в глобальной
переменной MinWindowSize.
См. так же: TView.SizeLimits, MinVinSize переменная
StandardScrollBar function StandardScrollBar(AOptions: Word):
PScrollBar;
Создает, вставляет и возвращает указатель на
"стандартную" полосу скроллинга для окна. "Стандартный"
означает, что полоса скроллинга вставляется в рамку окна
не закрывая углов или кнопки масштабирования.
Параметр AOptions может быть либо sbGorizontal для
создания горизонтальной полосы скроллинга внизу окна, либо
sbVertical для создания вертикальной полосы скроллинга в
правой стороне окна, либо может быть скомбинировано с
sbHandleKeyboard, чтобы разрешить полосе скроллинга
откликаться на клавиши стрелок и страниц, а не только
отметок от мышки.
См. так же: sbXXXX константы scroll bar
Store procedure TWindow.Store(var S: TStream);
Сохраняет окно в потоке S, вызывая TGroup.Store, затем
записывая дополнительные поля, определенные в TWindow.
См. так же: TGroup.Store
Zoom procedure TWindow.Zoom; virtual; Перекрывается: Редко
Масштабирует окно. Этот метод обычно вызывается в ответ на
команду cmZoom (генерируемую при отметке кнопки
масштабирования). Zoom принимает во внимание относительные
размеры окна и его владельца, и значение ZoomRect.
См. так же: cmZoom, ZoomRect
Палитра
Объекты окна используют палитры по умолчанию CBlueWindow
(для текстовых окон), CCyanWindow (для сообщений) и
CGrayWindow (для диалоговых окон).
1 2 3 4 5 6 7 8
+===+===+===+===+===+===+===+===+
CGrayWindow | 24| 25| 26| 27| 28| 29| 30| 31|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CCyanWindow | 16| 17| 18| 19| 20| 21| 22| 23|
+===+===+===+===+===+===+===+===+
+===+===+===+===+===+===+===+===+
CBlueWindow | 8 | 9 | 10| 11| 12| 13| 14| 15|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Пассивная -+ | | | | | | +-- Зарезервировано
рамка | | | | | |
Активная рамка ----+ | | | | +---- Выбранный текст
| | | | скроллера
Кнопка рамки ----------+ | | +-------- Нормальный текст
| | скроллера
Страница полосы -----------+ +------------ Зарезервировано
скролинга
Назад | Содержание | Вперед