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.DrawTWindow 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| +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ Пассивная -+ | | | | | | +-- Зарезервировано рамка | | | | | | Активная рамка ----+ | | | | +---- Выбранный текст | | | | скроллера Кнопка рамки ----------+ | | +-------- Нормальный текст | | скроллера Страница полосы -----------+ +------------ Зарезервировано скролинга
Назад | Содержание | Вперед