ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 29 *- TCollection Objects ----------------------------------------------------------------- TCollection- это основной тип для реализации любого набора элементов, включающих другие объекты. TCollection- это намного более общее понятие, чем обычные массив, множество или список. Размер объектов TCollection динамически устанавливается во время выполнения, и обеспечивает базовый тип для многих специализирова- нных типов, таких, как TSortedCollection, TStringCollection и TResourceCollection. В дополнение к методам добавления и удаления элементов, TCollection представляет несколько итерационных прог- рамм, которые вызывают процедуру или функцию для каждого элемента набора. TCollection предполагает, что элементы набора получаются прямо или косвенно из TObject так, что для уничтожения элемента он может вызывать деструктор элемента Done. Если Вы хотите испо- льзовать набор элементов, не происходящих от TObject, то необхо- димо обязательно переопределить метод FreeItem для того, чтобы правильно уничтожить элемент. Набор строк, например, осуществляет набор динамических строк Паскаля. *- Поля ----------------------------------------------------------------- Count (только для чтения) Count: Integer; Текущее число элементов в наборе, максимальное число которых равно MaxCollectionSize. Заметьте, что наборы индексируют элемен- ты с 0, а это означает, что Count часто превышает на 1 индекс последнего элемента. См. также: переменная MaxCollectionSize Delta (только для чтения) Delta: Integer; Число элементов, на которое увеличивается список Items при его заполнении. Если Delta равна 0, то набор не может расти боль- ше размера, установленного в Limit. Примечание: Увеличение размера набора достаточно плохо влия- ет на производительность. Чтобы минимизировать число раз, когда это происходит, попытайтесь установить начальное Limit равным такому количеству, которого будет достаточно для всех элементов, которые Вы собираетесь объединять в набор, и установите Delta так, чтобы его значение допускало расширение на разумное количес- тво. См. также: Limit, TCollection.Init Items (только для чтения) Items: PItemList; Указатель на массив указателей на элементы. См. также: тип TItemList Limit (только для чтения) Limit: Integer; Выделенный в текущий момент размер (в элементах) списка Items. См. также: Delta, TCollection.Init *- Методы ----------------------------------------------------------------- Init constructor Init(ALimit, ADelta: Integer); Создает объект набора с Limit, равным ALimit, и Delta, рав- ным ADelta. Набор выделяет объем памяти, достаточный для для работы с ALimit элементов, но набор может расширяться, увеличива- ясь по ADelta до тех пор, пока будет достаточно памяти или пока число элементов не достигнет MaxCollectionSize. См. также: TCollection.Limit, TCollection.Delta. Load constructor Load(var S: TStream); Создает и загружает набор из потока S. TCollection.Load вызывает метод GetItem для каждого элемента набора. См. также: TCollection.GetItem Done destructor Done; virtual; Переопределяемость: часто используется. Удаляет набор и освобождает память, занимаемую всеми элемен- тами набора, вызывая метод TCollection.FreeAll и устанавливая Limit равным 0. См. также: TCollection.FreeAll At function At(Index: Integer) : Pointer; Возвращает указатель на элемент с индексом Index в наборе. Этот метод позволяет интерпретировать набор, как индексированный с 0 массив. Если индекс меньше 0 или больше или равен Count, то At вызывает Error с аргументом coIndexError, после чего возвраща- ет nil. См. также: TCollection.IndexOf AtDelete procedure AtDelete(Index: Integer); Удаляет элемент в позиции Index и перемещает следующие эле- менты на одну позицию вверх. Count уменьшается на 1, но память, выделенная для набора, не сокращается. Если Index меньше 0 или больше или равен Count, то вызывается метод Error с аргументом coIndexError. AtDelete не освобождает память, выведенную под удаленный элемент. При необходимости одновременно удалить и освободить элемент используйте AtFree. См. также: TCollection.FreeItem, TCollection.Free, TCollection.Delete AtFree procedure TCollection.AtFree (Index: Integer); Удаляет и освобождает элемент с индексом Index. Эквивалентно следующему: Item := At (Index); {получаем указатель на элемент} AtDelete (Index); {удаляет указатель из набора} FreeMem (Item); {освобождает элемент} AtInsert procedure AtInsert(Index: Integer; Item: Pointer); Вставляет Item в позицию Index и передвигает следующие эле- менты на одну позицию вниз. Если Index меньше 0 или больше Count, то AtInsert вызывает метод Error с аргументом coIndexError, и новый Item не вставляется. Если Count равен Limit до вызова AtInsert, то набор вызывает SetLimit для увеличения выделенной под него памяти. Если вызов SetLimit не может расширить набор, то вызывается метод Error с аргументом coOverflow, и новый Item не вставляется. См. также: TCollection.At, TCollection.AtPut, TCollection.SetLimit AtPut procedure AtPut(Index: Integer; Item: Pointer); Заменяет элемент в позиции Index элементом, заданным в Item. Если Index меньше 0 или больше или равен Count, то вызывается метод Error с аргументом coIndexError. См. также: TCollection.At, TCollection.AtInsert Delete procedure Delete(Item: Pointer); Удаляет элемент Item из набора. Это эквивалентно AtDelete(IndexOf(Item)). Delete не освобождает память, выделенную под Item. При необходимости удалить элемент с освобождением памяти вызывайте Free. См. также: TCollection.AtDelete, TCollection.DeleteAll DeleteAll procedure DeleteAll; Удаляет все элементы из набора, устанавливая Count равным 0. См. также: TCollection.Delete, TCollection.AtDelete Error procedure Error(Code, Info: Integer); virtual; Переопределяемость: иногда используется. Вызывается различными другими методами объектов набора, когда встречается ошибка. По умолчанию этот метод генерирует ошибку времени выполнения 212 - Code, где Code- это одна из конс- тант coXXXX, указывающих природу этой ошибки. Error можно переоп- ределить для обеспечения простого уведомления пользователя об ошибке или ее устранения без выхода из программы. См. также: константы набора coXXXX FirstThat function FirstThat(Test: Pointer) : Pointer; FirstThat применяет булеву функцию, заданную указателем на функцию Test, к каждому элементу набора до тех пор, пока Test не возвращает True. Возвращает указатель на элемент, для которого Test возвращает True, или nil, если функция Test возвращает False для всех элементов. Test должна указывать на локальную функцию типа far, использующую только один параметр типа Pointer и возв- ращающую значение типа Boolean. Например: function Matches (Item: Pointer): Boolean; far; Внимание ! Функция Test не может быть глобальной функцией. Предполагая, что List имеет тип TCollection, оператор: P := List.FirstThat(@Matches); соответствует следующему: I := 0; while (I < List.Count) and not Matches(List.At(I)) do Inc(I); if I < List.Count then P := List.At(I) else P := nil; См. также: TCollection.LastThat, TCollection.ForEach ForEarch procedure ForEarch(Action: Pointer); ForEach применяет действие, определенное процедурой, на которую указывает Action, для каждого элемента набора. Параметр Action должен указывать на локальную процедуру типа far, исполь- зующую один параметр типа Pointer. Например: procedure PrintItem(Item: Pointer); far Внимание! Процедура Action не может быть глобальной процеду- рой. Если List имеет тип TCollection, то оператор: List.ForEach(@PrintItem); соответствует следующему: for I := 0 to List.Count - 1 do PrintItem(List.At(I)); См. также: TCollection.FirstThat, TCollection.LastThat Free procedure Free(Item: Pointer); Удаляет элемент Item из набора и освобождает память. Это эквивалентно следующему: Delete(Item); {удаляет указатель из набора} FreeItem(Item); {освобождает Item} См. также: TCollection.FreeItem, TCollection.Delete FreeAll procedure FreeAll; Удаляет и освобождает память всех элементов набора. Для удаления всех элементов набора без освобождения памяти вызывайте DeleteAll. См. также: TCollection.DeleteAll FreeItem procedure FreeItem(Item: Pointer); virtual; Переопределяемость: иногда переопределяется. Метод FreeItem должен освобождать память Item. По умолчанию TCollection.FreeItem предполагает, что Item указывает на объект, порожденный TObject, и поэтому вызывает деструктор Done: if Item <> nil then Dispose(PObject(Item), Done); Объекты, порожденные набором, и не использующие в качестве элементов наследников TObject, таких, как наборы строк, должны переопределять FreeMem для освобождения памяти, занятой Item. Внимание! Метод FreeItem вызывается из Free и FreeAll, но никогда не должен вызываться напрямую. См. также: TCollection.Free, TCollection.FreeAll GetItem function TCollection.GetItem(var S: TStream): Pointer; virtual; Переопределяемость: иногда используется. Читает элемент из потока S. По умолчанию TCollection.GetItem предполагает, что элементы набора порождены TObject, и вызывает для загрузки элемента TStream.Get: GetItem := S.Get; Объекты, порожденные набором, и не использующие в качестве элементов наследников TObject, таких, как наборы строк, должны переопределять GetMem для чтения из потока нужного элемента и возврата указателя на него. Load вызывает GetItem для чтения каждого элемента потока. Этот метод может быть переопределен, но не должен вызываться непосредственно. См. также: TStream.Get, TCollection.Load, TCollection.Store IndexOf functionIndexOf(Item: Pointer): Integer; virtual; Переопределяемость: никогда не переопределяется. Возвращает индекс для Item. Преобразует операцию в TCollection.At. Если Item не содержится в наборе, то IndexOf возвращает -1. См. также: TCollection.At Insert procedure Insert(Item: Pointer); virtual; Переопределяемость: никогда не используется. Вставляет Item в набор, перестраивая другие индексы, если это необходимо. По умолчанию вставка производится в конец набора вызовом AtInsert(Count, Item); Типы, порожденные набором, такие, как отсортированные наборы, могут вставлять элементы в любые места. См. также: TCollection.AtInsert; LastThat function LastThat(Test: Pointer): Pointer; LastThat применяет булеву функцию, заданную указателем на функцию Test, к каждому элементу набора в порядке снизу вверх до тех пор, пока Test не вернет True. Возвращает указатель на эле- мент, для которого Test возвращает True, или nil, если функция Test возвращает False для всех элементов. Test должен указывать на локальную функцию типа far, использующую один параметр типа Pointer и возвращающую значение типа Boolean, например: function Matches(Item: Pointer): Boolean; far; Внимание! Функция Test не может быть глобальной функцией. Если List имеет тип TCollection, то оператор: P := List.LastThat(@Matches); соответствует: I := List.Count - 1; while (I >= 0) and not Matches(List.At(I)) do Dec(I); if I >= 0 then P := List.At(I) else P := nil; См. также: TCollection.FirstThat, TCollection.ForEach; Pack procedure Pack; Удаляет из набора все указатели со значением nil. См. также: TCollection.Delete PutItem procedure PutItem(var S: TStream; Item: Pointer); virtual; Переопределяемость: иногда используется. Пишет элемент Item в поток S. По умолчанию TCollection.PutItem предполагает, что элементы наборов порождаются TObject, и таким образом, для сохранения элемента вызывает TStream.Put: S.Put(Item); Объекты, порожденные набором, и не использующие в качестве элементов наследников TObject, таких, как наборы строк, должны переопределять PutItem для записи элемента Item в поток. Store вызывает PutItem для каждого элемента набора. Этот метод может переопределяться, но не должен вызываться непосредст- венно. См. также: TCollection.GetItem, TCollection.Store, TCollection.Load SetLimit procedure SetLimit(ALimit: Integer); virtual; Переопределяемость: используется редко. Расширяет или сокращает набор, изменяя память, необходимую для работы с ALimit элементами. Если ALimit меньше Count, то она устанавливается равной Count, а если ALimit больше MaxCollection- Size, то она устанавливается равной MaxCollectionSize. Кроме то- го, если ALimit отличается от текущего значения Limit, то SetLimit выделяется новый массив Items из Alimit элементов, ста- рый массив Items копируется в новый массив и память, выделенная под старый массив, освобождается. См.также: TCollection.Limit, TCollection.Count, переменная MaxCollectionSize Store procedure Store(var S: TStream); Сохраняет набор и все его элементы в потоке S. TCollection.Store вызывает TCollection.PutItem для каждого элемента набора. См. также: TCollection.PutItem *- TColorDialog ColorSel ----------------------------------------------------------------- Диалоговое окно цветов представляет собой специализированное диалоговое окно с заголовком "Colors", позволяющее пользователю изменять цвета палитры во всей программе, одновременно наблюдая в диалоговом окне выбранную цветовую схему. TColorDialog использует набор специализированных отображае- мых элементов, включающий TColorItem, TColorGroup, TColorSelector и TColorDisplay. Полное описание использования диалогового окна цветов содержится в Главе 14. *- Поля ----------------------------------------------------------------- BakLabel BakLabel: PLabel; Указывает на метку селектора цвета фона. BakSel BakSel: PColorSelector; Указывает на селектор цвета фона диалогового окна. Display Display: PColorDisplay; Указывает на объект цвета дисплея в диалоговом окне. Цветной дисплей изображает текст выбранного в настоящий момент цвета. ForLabel ForLabel: PLabel; Указывает на метку цвета изображения в диалоговом окне. ForSel ForSel: PColorSelector; Указывает на селектор цвета изображения в диалоговом окне. GroupIndex GroupIndex: Byte; Указывает ту группу в списке групп цветов, которая была активна последней. Groups Groups: PColorGroupList; Указывает на список групп цветов диалогового окна. Список групп цветов показывает все группы элементов, для которых пользо- ватель может выбирать цвета. MonoLabel MonoLabel: PMonoSelector; Указывает на селектор монохромных атрибутов. Pal Pal: TPalett; Хранит копию изменяемой палитры. *- Методы ----------------------------------------------------------------- Init constructor Init (APalette: TPalette; AGroups: PColorGroup); Создает диалоговое окно размером 62х19 с заголовком 'Colors', вызывая конструктор Init, унаследованный от TDialog, и добавляя к флагам Options параметр ofCentered. Устанавливает Pal равным APalette. Создает и вставляет список группы цветов, связанный с AGroups, и список элементов цветов, связанный с AGroups^.Items вместе со связанными с ними полосами прокрутки и метками. Создает и вставляет селекторы цвета для цветов изображения и фона, присваивая их ForSel и BakSel, а также создает и вставляет метки для этих селекторов, присваивая их ForLabel и BakLabel. Создает и вставляет скрытый монохромный селектор и его метку. Создает и вставляет кнопки Ok и Cancel, и передает фокус списку группы цветов. См. также: TDialog.Init Load constructor Load (var S: TStream); Создает и загружает диалоговое окно из потока S, вызывая сначала конструктор Load, унаследованный от TDialog, затем читая указатели на подэлементы, введенные на основе TColorDialog, и в заключение читая палитру. См. также: TDialog.Load DataSize function DataSize: Word; virtual; Возвращает размер палитры, представляющий собой объем дан- ных, переданных к или от диалогового окна, с помощью SetData или GetData. См. также: TColorDialog.GetData, TColorDialog.SetData GetData procedure GetData (var Rec); virtual; Вызывает GetIndexes для копирования выбранных пунктов в каждой группе в ColorIndexes, после чего копирует DataSize байт из Rec в Pal, преобразуя тип Rec в тип TPalette. См. также: TColorDialog.DataSize GetIndexes procedure GetIndexes (var Colors: PColorIndexes); Делает цветовые индексы в Colors индексированными цветами в каждой из групп в Groups. TColorDialog.GetData использует GetIndexes для установки индексов в ColorIndexes равными индексам в каждой группе из Groups. Сохранив ColorIndexes в потоке, можно восстановить состояние диалогового окна с помощью LoadIndexes и SetData. См. также: переменную ColorIndexes HandleEvent procedure HandleEvent (var Event: TEvent); virtual; Вызывает метод HandleEvent, унаследованный от TDialog, для обработки стандартного поведения диалогового окна, затем отвечает на команды cmNewColorIndex, устанавливая на цветовом дисплее диалогового окна новый цвет. См. также: TDialog.HandleEvent, TColorDisplay.SetColor SetData procedure SetData (var Rec); virtual; Копирует DataSize байт из Rec в Pal, преобразуя тип Rec в тип TPalette. Если ShowMarkers равна True, то показывает монохро- мный селектор и прячет цветные селекторы. См. также: TColorDialog.DataSize, переменную ShowMarkers SetIndexes procedure SetIndexes (var Colors: PColorIndexes); virtual; Устанавливает индексы в каждой группе цветов из Groups рав- ными соответствующим индексам из Colors. TColorDialog.SetData вызывает SetIndexes для установки индексов группы цветов из ColorIndexes, восстанавливая выбранные элементы с последнего момента, когда ColorIndexes устанавливалась из Groups. См. также: TColorDialog.SetData Store procedure Store (var S: TStream); Записывает диалоговое окно цветов в поток S, вызывая сначала метод Store, унаследованный от TDialog, а затем записывая указа- тели на подэлементы, введенные с помощью TColorDialog, и в заклю- чение записывая палитру, хранимую в Pal. См. также: TDialog.Store *- TColorDisplay ColorSel ----------------------------------------------------------------- TColorDisplay представляет собой обычный отображаемый эле- мент, изображающий заданную текстовую строку в цвете, выбранном в селекторах цветов диалогового окна. Диалоговые окна выбора цветов используют отображаемый элемент образца цвета для демонстрации пользователю того, как выглядит его выбор цветов. Подробная информация о полях TColorDisplay и методах приве- дена в оперативной подсказке. *- Тип TColorGroup ColorSel ----------------------------------------------------------------- Описание TColorGroup = record Name: PString; Index: Byte; Items: PColorItem; Next: PColorGroup; end; Функция: Группа цветов определяет именованную группу связан- ных элементов, для которых пользователь может выбирать цвета. Name содержит имя группы, Index содержит порядковый номер цвета в списке цветов, а Items указывает на первый элемент в связанном списке элементов цветов. Next указывает на следующий элемент в связанном списке групп цветов. Диалоговое окно цветов содержит окно-список групп, перечис- ляющее связанный список записей TColorGroup. Для создания и инициализации записей группы цветов исполь- зуйте функцию ColorGroup. См. также: функцию ColorGroup *- Объект TColorGroupList ColorSel ----------------------------------------------------------------- Список групп цветов представляет собой специализированный объект окна-списка, дающий прокручиваемый список именованных групп цветов для выбора в диалоговом окне выбора цветов. TColorGroupList ведет себя как обычное диалоговое окно, но представленный в нем список является связанным списком записей TColorGroup. Подробная информация о полях TColorGroupList и методах при- ведена в оперативной подсказке. *- Тип TColorIndex ColorSel ----------------------------------------------------------------- Описание TColorIndex = record GroupIndex: Byte; ColorSize: Byte; ColorIndex: array [0..255] of Byte; end; Функция: Диалоговые окна выбора цветов используют записи типа TColorIndex для сохранения порядкового номера активного элемента в списке группы цветов и списке элементов цветов, позво- ляя диалоговому окну восстанавливать свое предыдущее состояние при загрузке. Использовать этот тип непосредственно никогда не приходится. Он используется процедурами LoadIndexes и StoreIndexes. См. также: процедуру LoadIndexes, процедуру StoreIndexes. *- Тип TColorItem ColorSel ----------------------------------------------------------------- Описание TColorItem = record Name: PString; Index: Byte; Items: PColorItem; end; Функция: Элемент цвета определяет именованный элемент в группе, для которого пользователь может выбирать цвета. Name содержит имя элемента, Index содержит порядковый номер палитры цвета программы, определяющей цвет элемента. Next указывает на следующий элемент в связанном списке элементов цветов. Диалоговое окно цветов содержит окно-список элементов, пере- числяющее связанный список записей типа TColorItem. Для создания и инициализации новых записей типа TColorItem используйте функцию ColorItem. *- Объект TColorItemList ColorSel ----------------------------------------------------------------- Список элементов цветов представляет собой специализирован- ный объект, унаследованный от TListViewer, дающий список элемен- тов в группе цветов, для которых пользователь может выбирать цвета. Список элементов цветов берется из поля Items записи типа TColorGroup. Диалоговые окна выбора цветов используют список элементов цветов для предоставления пользователю возможности выбирать группы элементов цветов для выбора цветов. Подробная информация о полях TColorItemList и методах приве- дена в оперативной подсказке. *- Тип TColorSel ColorSel ----------------------------------------------------------------- Описание TColorSel = (csBackground, csForeground); Функция: Объекты селектора цветов используют перечисляемый тип TColorSel для описания типа селектора: фон или изображение. См. также: TColorSelector.SelType *- Объект TColorSelector ColorSel ----------------------------------------------------------------- Объекты селектора цветов показывают цвета, доступные для данного отображаемого элемента. Существуют два их варианта: один для цветов фона, другой для цветов изображения. Диалоговые окна выбора цветов используют один из этих типов для показа возможного выбора цветов и цветов, выбранных в настоящий момент. Подробная информация о полях TColorSelector и методах приве- дена в оперативной подсказке. *- Тип TCommandSet Views ----------------------------------------------------------------- Описание: TCommandSet = set of Byte; Функция: Тип TCommandSet полезен для хранения произвольного множества, содержащего до 256 команд. Он позволяет выполнить простое тестирование и определить, соответствует ли данная коман- да определенному критерию в программах обработки событий, и поз- воляет установить маски команд. Например, методы TView: EnableCommands, DisableCommands, GetCommands и SetCommands используют аргументы типа TCommandSet. Набор команд можно описать и инициализировать, используя оператор Паскаля: CurCommandSet: TCommandSet = [0..255] - [cmZoom, cmClose, cmResize, cmNext]; См. также: cmXXXX, TView.DisableCommands, TView.EnableCommands, TView.GetCommands, TView.SetCommands *- TDeskTop App ----------------------------------------------------------------- TDeskTop- это простая группа, которая владеет отображаемым элементом TBackground, на котором появляются окна и другие отоб- ражаемые элементы программы. TDeskTop представляет оперативную область экрана, располагающуюся между верхней полосой меню и нижней строкой состояния. Внимание! В версии 2.0 у объекта оперативной (рабочей) обла- сти появилось новое поле, позволяющее описывать способ мозаичного расположения объектов по умолчанию. *- Поля ----------------------------------------------------------------- Background Background: PBackground Указывает на объект фона оперативной области. TileColumnsFirst TileColumnsFirst: Boolean; TileColumnsFirst определяет, каким из окон будет отдаваться предпочтение в случае мозаичного расположения в рабочей области: вертикальным или горизонтальным. По умолчанию TileColumnsFirst равно False, сохраняя поведение, принятое в версии 1.0, отдающей предпочтение вертикальному расположению окон. Установка этого поля равным True приводит к отданию предпочтения горизонтальному расположению так, что, например, мозаичное расположение двух окон поместит их друг рядом с другом, а не одно под другим. См. также: TDesktop.Tile *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect); Создает группу TDeskTop с размером Bounds, вызывая конструк- тор Init, унаследованный от TGroup. Устанавливает GrowMode равной gfGrowHiX + gfGrowHiY. Для создания отображаемого элемента фона вызывает InitBackground, и если Background не равна nil, осущест- вляет его вставку. См. также: TDeskTop.InitBackGround, TGroup.Init, TGroup.Insert Cascade procedure Cascade(var R: TRect); Заново отображает все окна, которые можно расположить мозаи- чно, и принадлежащие рабочей области экрана, в "каскадном" форма- те. Первое окно в циклическом порядке (самое нижнее) расширяется на всю панель экрана, а каждое последующее окно заполняет об- ласть, начинающуюся на одну строку ниже и на одну колонку правее, чем предыдущее. Активное окно появляется поверх остальных и имеет наименьший размер. Если рабочая область не может расположить окна каскадно, то она оставляет их на месте и вызывает TileError. См. также: ofTileable, TDeskTop.Tile, TDesktop.TileError HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: переопределяется редко. Вызывает метод HandleEvent, унаследованный от TGroup, а затем отрабатывает команды cmNext (обычно оперативную клавишу F6) и cmPrevious циклическим проходом по окнам (начиная с выбранного в настоящий момент отображаемого элемента), принадлежащим опера- тивной области экрана. См. также: TGroup.HandleEvent, константы команд cmXXXX InitBackGround procedure InitBackGround; virtual; Переопределяемость: иногда переопределяется. Создает отображаемый элемент фона рабочей области и присваи- вает его Background. TDeskTop.Init вызывает этот, после чего вставляет Background в рабочую область. Наследуемые объекты могут переопределять этот метод и присваивать Background другой объект фона. См. также: TDeskTop.Init Tile procedure Tile(var R: TRect); Переопределяемость: иногда переопределяется. Заново отображает все отображаемые элементы с ofTileable, принадлежащие рабочей области экрана, в мозаичном формате. Если рабочая область не может расположить окна требуемым образом, то она оставляет их на месте и вызывает TileError. См. также: TDeskTop.Cascade, ofTileable, TDeskTop.TileError TileError procedure TileError; virtual; Переопределяемость: иногда переопределяется. Метод TileError вызывается, если возникла ошибка во время работы TDeskTop.Tile или TDeskTop.Cascade. Вы можете переопреде- лить его, чтобы указать пользователю, что программа не может перерасположить окна. См. также: TDeskTop.Tile, TDeskTop.Cascade *- TDialog Dialogs ----------------------------------------------------------------- TDialog представляет собой специализированный объект, унас- ледованный от TWindow, и созданный специально для режимного ис- пользования и для хранения органов управления. Объекты диалоговых окон отличаются от определенных по умолчанию окон по следующим пунктам: - GrowMode равна 0, т.е. диалоговые окна могут увеличиваться; - флаги wfMove и wfClose установлены, т.е. диалоговые окна можно перемещать и закрывать (имеется закрывающая пиктограмма); - обработчик событий TDialog вызывает TWindow.HandleEvent, но также дополнительно отрабатывает ответы на клавиши Esc и Enter. Клавиша Esc генерирует команду cmCancel, а Enter генерирует кома- нду cmDefault; - диалоговые окна не имеют номеров; - метод TDialog.Valid возвращает True на команду cmCancel, в противном случае вызывает TGroup.Valid. Внимание! В версии 2.0 в дополнение к существующей по умол- чанию серой палитре диалоговые окна поддерживают синюю и голубую палитры. Предыдущие версии TDialog игнорировали поле Palette. Теперь объекты диалогового окна могут указывать палитру, присваи- вая Palette константы dpXXXX. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; ATitle: TTitleStr); Создает диалоговое окно с заданным размером и заголовком, вызывая конструктор Init, унаследованный от TWindow, передавая в качестве параметров Bounds, ATitle и wnNoNumber. GrowMode устана- вливается равным 0, а Flags устанавливается равной wfMove + wfClose. Это означает, что по умолчанию диалоговые окна можно перемещать и закрывать, но нельзя изменять их размеры. Заметим, что TDialog не определяет собственного деструктора, а использует Close и Done, наследуемые через TWindow, TGroup и TView. См. также: TWindow.Init Load constructor Load (var S: TStream); Считывает объект диалогового окна из потока S, вызывая сна- чала конструктор Load, унаследованный от TWindow, а затем обнов- ляя необходимым образом информацию о палитре. Load проверяет значение флагов Options загруженного диалогового окна, и если биты ovVersion равны ofVersion10, то Load устанавливает поле Palette равным dpGrayDialog и обновляет значение Options, чтобы оно включало ofVersion20. См. также: TWindow.Load HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: иногда используется. Обрабатывает большинство событий, вызывая метод HandleEvent, унаследованный от TWindow, а затем обрабатывает события от клавиш Enter и Esc. В частности, клавиша Esc генерирует команду cmCancel, а Enter посылает сообщения cmDeafult. Этот метод также обрабатывает cmOK, cmCancel, cmYes и cmNo, прекращая режимное состояние диалогового окна. См. также: TWindow.HandleEvent GetPalette function GetPalette: PPalette; virtual; Переопределяемость: переопределяется редко. Этот метод возвращает указатель на палитру, заданную индек- сом палитры в поле Field. В таблице 19.39 показаны палитры, возв- ращаемые для различных значений Palette. Таблица 19.39 Возвращаемые палитры диалогового окна в зави- симости от значения Palette ------------------------------------------------------------ Поле Palette Возвращенная палитра ------------------------------------------------------------ dpBlueDialog CBlueDialog dpCyanDialog CCyanDialog dpGrayDialog CGrayDialog ------------------------------------------------------------ Внимание! В версии 1.0 GetPalette всегда возвращала указа- тель на палитру, определенную по умолчанию, CDialog. Для обеспе- чения совместимости с предыдущими версиями CDialog по прежнему доступна. Палитра, заданная по умолчанию в версии 2.0, CGrayDialog, идентична CDialog. См. также: TWindow.Palette Valid function Valid(Command: Word): Boolean; virtual; Переопределяемость: переопределяется редко. Возвращает значение True, если заданная команда- cmCancel, или если метод Valid, унаследованный от TWindow, возвращает True. См. также: TGroup.Valid *- Палитра ----------------------------------------------------------------- Объекты диалогового окна используют различные палитры в зависимости от значения поля Palette. Обратите внимание на то, что палитра диалоговых окон CDialog, используемая в версии 1.0, идентична палитре, определенной по умолчанию в версии 2.0, CGrayDialog. 1 2 3 4 5 6 7 8 9 ЙНННСНННСНННСНННСНННСНННСНННСНННСННН» CGrayDialog є 32і 33і 34і 35і 36і 37і 38і 39і 40є МНННШНННШНННШНННШНННШНННШНННШНННШННН№ CBlueDialog є 64і 65і 66і 67і 68і 69і 70і 71і 72є МНННШНННШНННШНННШНННШНННШНННШНННШННН№ CCyanDialog є 96і 97і 98і 99і100і101і102і103і104є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј і і і і і і і і і Пассивная ДДЩ і і і і і і і А Оперативная рамка і і і і і і і клавиша метки Активная ДДДДДДЩ і і і і і АДДД Подсвеченная рамка і і і і і метка Пиктограмма ДДДДДДДДДДЩ і і і АДДДДДДД Нормальная рамки і і і метка Страница ДДДДДДДДДДДДЩ і АДДДДДДДДДДДДД Статический прокрутки і текст Элементы управления ДДДДДДДДДДДЩ прокруткой 1 2 3 4 5 6 7 8 9 ЙНННСНННСНННСНННСНННСНННСНННСНННСННН» CGrayDialog є 32і 33і 34і 35і 36і 37і 38і 39і 40є МНННШНННШНННШНННШНННШНННШНННШНННШННН№ CBlueDialog є 64і 65і 66і 67і 68і 69і 70і 71і 72є МНННШНННШНННШНННШНННШНННШНННШНННШННН№ CCyanDialog є 96і 97і 98і 99і100і101і102і103і104є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј і і і і і і і і і Нормальная ДЩ і і і і і і і А Оперативная "кнопка" і і і і і і і клавиша кластера "Кнопка" по ДДДДДЩ і і і і і АДДДД Выбранный умолчанию і і і і і кластер Выделенная ДДДДДДДДДЩ і і і АДДДДДДДД Нормальный "кнопка" і і і кластер Запрещенная ДДДДДДДДДДДДДЩ і АДДДДДДДДДДДД Тень "кнопки" "кнопка" і Оперативная клавишаДДДДДДДДДДДДЩ "кнопки" 19 20 21 22 23 24 25 ЙНННСНННСНННСНННСНННСНННСННН» CGrayDialog є 50і 51і 52і 53і 54і 55і 56є МНННШНННШНННШНННШНННШНННШННН№ CBrayDialog є 82і 83і 84і 85і 86і 87і 88є МНННШНННШНННШНННШНННШНННШННН№ CCyanDialog є114і115і116і117і118і119і120є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНј і і і і і і і Нормальная ДДЩ і і і і і АДД Элементы управления строка ввода і і і і і прокруткой в окне Выбранная ДДДДДДЩ і і і і протокола строка ввода і і і і Стрелки ДДДДДДДДДДЩ і і АДДДДДД Страница прокрутки строки ввода і і окна протокола Стрелка протокола ДДДДДДДДДДЩ і АДДДДДДДДДД Стороны протокола 19 20 21 22 23 24 25 ЙНННСНННСНННСНННСНННСНННСННН» CGrayDialog є 50і 51і 52і 53і 54і 55і 56є МНННШНННШНННШНННШНННШНННШННН№ CBrayDialog є 82і 83і 84і 85і 86і 87і 88є МНННШНННШНННШНННШНННШНННШННН№ CCyanDialog є114і115і116і117і118і119і120є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНј і і і і і і і Нормальный просмотрЩ і і і і і АДД Зарезервировано списка і і і і і Активный просмотр ДДДДЩ і і і АДДДДДД Зарезервировано списка і і і Выделенный просмотр ДДДДДДДЩ і АДДДДДДДДД Информационная і область Разделитель просмотра ДДДДДДДДДЩ См. также: Метод GetPalette для каждого типа объекта. *- Объект TDirCollection StdDlg ----------------------------------------------------------------- TDirCollection представляет собой набор записей DirEntry, используемый TDirListBox. Подробная информация о полях TDirCollection и его методах приведена в оперативной подсказке. *- Тип TDirEntry StdDlg ----------------------------------------------------------------- Описание: TDirEntry = record DisplayText: PString; Directory: PString; end; Функция: DirEntry представляет собой простой тип записи, содержащий строку с путем к каталогу и описания. Эти записи испо- льзуются в объектах TDirCollection для хранения информации о каталоге для диалогового окна смены каталога. См. также: объект TDirCollection *- Объект TDirListBox StdDlg ----------------------------------------------------------------- TDirListBox представляет собой специальный отображаемый элемент окна-списка, отображающий дерево каталогов, хранящееся в объекте TDirCollection для использования в TChDirDialog. По умолчанию каталоги появляются в окне в один столбец с вертикальной полосой прокрутки. Подробная информация о полях TDirListBox и его методах приведена в оперативной подсказке. *- TDosStream Objects ----------------------------------------------------------------- TDosStream- это специализированный производный поток, реали- зующий небуфферизованный поток файла DOS. Конструктор позволяет создать или открыть файл DOS, задав его имя и режим доступа: stCreate, stOpenRead, stOpenWrite или stOpen. В TDosStream введе- но дополнительное поле Handle- традиционный идентификатор файла DOS, используемый для доступа к открытому файлу. Большинство программ будут использовать буферизованный поток TBufStream, порожденный от TDosStream. TDosStream переопределяет все абстрактные методы TStream, за исключением TStream.Flush. *- Поля ----------------------------------------------------------------- Handle (только для чтения) Handle: Word; Handle- это идентификатор файла DOS, используемый только для доступа к открытому файлу потока. *- Методы ----------------------------------------------------------------- Init constructor Init(FileName: FNameStr; Mode: Word); Создает поток файла DOS с именем FileName и заданным режимом доступа. В случае успеха поле Handle устанавливается равным иден- тификатору файла DOS. Ошибка указывается вызовом Error с аргумен- том stInitError. Аргумент Mode должен принимать одно из значений: stCreate, stOpenRead, stOpenWrite или stOpen. Эти константы объяснены в этой главе в разделе "Константы потока stXXXX". Done destructor Done; virtual; Переопределяемость: не переопределяется. Закрывает и освобождает поток файла DOS. См. также: TDosStream.Init GetPos function GetPos: Longint; virtual; Переопределяемость: не используется. Возвращает значение текущей позиции в потоке. Первая позиция имеет номер 0. См. также: TDosStream.Seek GetSize function GetSize: Longint; virtual; Переопределяемость: не переопределяется. Возвращает размер потока в байтах. Read procedure Read(var Buf; Count: Word); virtual; Переопределяемость: не используются. Считывает из потока Count байт в буфер Buf, начиная с теку- щей позиции потока. См. также: TDosStream.Write, stReadError Seek procedure Seek(Pos: Longint); virtual; Переопределяемость: не переопределяется. Устанавливает текущую позицию равной Pos байт от начала потока. Первая позиция имеет номер 0. См. также: TDosStream.GetPos, TDosStream.GetSize Truncate procedure Truncate; virtual; Переопределяемость: не переопределяется. Удаляет все данные текущего потока от текущей позиции до конца потока. См. также: TDosStream.GetPos, TDosStream.Seek Write procedure Write(var Buf; Count: Word); virtual; Записывает Count байт из буфера Buf в поток, начиная с теку- щей позиции. См. также: TDosStream.Read, stWriteError *- Тип TDrawBuffer Views ----------------------------------------------------------------- Описание: TDrawBuffer = array[0..MaxViewWidth-1] of Word; Функция: Тип TDrawBuffer используется для объявления буферов для методов Draw различных отображаемых элементов. Обычно данные и атрибуты сохраняются и форматируются строка за строкой в TDrawBuffer, а затем выводятся на экран: var B: TDrawBuffer; begin MoveChar(B, ' ', GetColor(1), Size.X); {заполняет буфер пробелами} WriteLine(0, 0, Size.X, Size.Y, B); {пишет буфер на экран} end; См. также: TView.Draw, MoveBuf, MoveChar, MoveCStr, MoveStr *- Тип TEditBuffer Editors ----------------------------------------------------------------- Описание: TEditBuffer = array [0..65519] of Char; TEditBuffer определяет массив символов для редактирования. Объекты TEditor и TMemo используют массивы TEditBuffer для сохра- нения буферов для редактирования. *- Объект TEditor Editors ----------------------------------------------------------------- TEditor реализует простой, быстрый редактор с объемом памяти 64K для использования в программах Turbo Vision. Он имеет поддер- жку мыши, отмену изменений, работу с системным буфером, автомати- ческие режимы формирования отступов и изменение режимов вставки/- замены, создание оперативных клавиш, а также поиск и замену. Отображаемые элементы редактора можно использовать для редактиро- вания файлов и для многостроковых полей комментариев в диалоговых окнах или бланках. Некоторые другие объекты, такие, как TMemo и TFileEditor, моментально дают полезные объекты редактора, но они наследуют все основные функции от TEditor. Использование объектов редактора полностью описано в Главе 15, "Редактор и текстовые отображаемые элементы". *- Поля ----------------------------------------------------------------- AutoIndent AutoIndent: Boolean; Если AutoIndent равно True, то редактор автоматически начи- нает печать строки текста с той колонки, с которой начинается предыдущая строка; в противном случае новые строки начинаются с крайней левой позиции. Buffer Buffer: PEditBuffer; Указывает на буфер, в котором объект редактора хранит редак- тируемый текст. Текст может содержать до 64K символов. См. также: тип TEditBuffer BufLen BufLen: Word; BufLen хранит количество символов между началом буфера и текущим положением курсора. BufSize BufSize: Word; BufSize представляет собой размер текстового буфера в бай- тах. CanUndo CanUndo: Boolean; CanUndo определяет, поддерживает ли редактор режим отмены изменений. По умолчанию TEditor.Init устанавливает значение CanUndo равным True, что указывает на способность редактора отменять изменения. CurPos CurPos: TPoint; CurPos указывает строку и столбец файла, в которых находится курсор. Cursor.X дает текущий столбец, а Cursor.Y- текущую стро- ку. CutPtr CutPtr: Word CutPtr представляет собой положение курсора в буфере редак- тора. DelCount DelCount: Word; Количество символов в конце промежутка, которые были удалены из текста. DelCount используется для отмены изменений, связанных с удалением символов. Delta Delta: TPoint; Delta представляет собой верхнюю строку и левый столбец, показанные на отображаемом элементе. Delta.X- это левый видимый столбец, а Delta.Y- верхняя видимая строка. DrawLine DrawLine: Integer; DrawLine представляет собой положение на экране строки, в которую вводятся вставляемые символы. Метод Draw использует Draw- Line для оптимизации того, какую часть отображаемого элемента перерисовывать. DrawPtr DrawPtr: Word; DrawPtr представляет собой положение курсора в буфере, испо- льзуемом Draw. GapLen GapLen: Word GapLen представляет собой размер "промежутка" между текстом до курсора и текстом после курсора. Понятие промежутка объясняет- ся в Главе 15. HScrollBar HScrollBar: PScrollBar; Указывает на объект горизонтальной полосы прокрутки, связан- ный с редактором. Значение nil указывает на отсутствие такой полосы прокрутки. Indicator Indicator: PIndicator; Указывает на объект индикатора, связанный с редактором. Объект индикатора показывает редактируемые в настоящий момент строку и столбец. См. также: объект TIndicator InsCount InsCount: Word; Количество символов, вставленных в текст, с момента послед- него перемещения курсора. InsCount используется для отмены изме- нений, связанных со вставкой. IsValid IsValid: Boolean; Содержит значение True, если отображаемый элемент является допустимым. IsValid используется методом Valid. См. также: TEditor.Valid Limit Limit: TPoint; Limit содержит максимальные ширину и длину текста. Limit.X дает длину самой длинной строки, а Limit.Y- количество строк в файле. Modified Modified: Boolean; Имеет значение True, если буфер изменялся. OverWrite OverWrite: Boolean Если OverWrite равно True, то печатаемые в буфере символы замещают существовавшие ранее; в противном случае редактор осуще- ствляет вставку вводимых символов. Selecting Selecting: Boolean; Selecting равно True в том случае, если пользователь отмеча- ет блок, как это бывает после отметки начала блока, но до отметки его конца. В остальные моменты времени Select равно False. SelEnd SelEnd: Word; SelEnd представляет собой положение в буфере конца выделен- ного текста. SelStart SelStart: Word; SelStart представляет собой положение в буфере начала выде- ленного текста. VScrollBar VScrollBar: PScrollBar; Указывает на объект вертикальной полосы прокрутки, связанный с редактором. Значение nil указывает на отсутствие такой полосы прокрутки. *- Методы ----------------------------------------------------------------- Init constructor Init (var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar; AIndicator: PIndicator; ABufSize: Word); Создает отображаемый элемент с границами, указанными в Bounds, путем вызова конструктора Init, унаследованного от TView. Устанавливает GrowMode равным gfGrowHiX + gfGrowHiY, Options равным Options или ofSelectable и EventMask равным evMouseDown + evKeyDown + evCommand + evBroadcast. Показывает курсор в редакторе и присваивает полям HScrollBar, VScrollBar, Indicator и BufSize значения, переданные в качестве параметров. Устанавливает CanUndo равным True. Выделяет память под буфер редактирования, вызывая InitBuffer. Если память выделить не удается, то Init вызывает EditorDialog для выдачи сообщения "Out of memory" и устанавливает размер буфера равным 0. Для инициализации буфера вызывает SetBufLen (0). См. также: TView.Init, TEditor.InitBuffer, TEditor.SetBufLen Load constructor Load (var S: TStream); Создает и загружает объект редактора из потока S, вызывая сначала конструктор Load, унаследованный от TView, а затем считы- вая поля, введенные TEditor. Выделяет память и инициализирует буфер так же, как и TEditor.Init. См. также: TView.Load, TEditor.InitBuffer, TEditor.SetBufLen Done destructor Done; virtual; Уничтожает буфер редактирования, вызывая DoneBuffer, после чего освобождает память из-под объекта редактора вызовом деструк- тора Done, унаследованного от TView. См. также: TEditor.DoneBuffer, TView.Done BufChar function BufChar (P: Word): Char; Возвращает символ буфера с номером P. BufPtr function BufPtr (P: Word): Word; Возвращает положение в буфере символа с номером P с учетом возможного промежутка за символом. ChangeBounds procedure ChangeBounds (var Bounds: TRect); virtual; Изменяет границы отображаемого элемента редактора до значе- ния Bounds, после этого настраивает Delta с целью убедиться в том, что текст все еще видим, после чего в случае необходимости перерисовывает отображаемый элемент. Так же, как и с методом TView, который он переопределяет, TEditor.ChangeBounds вызывается другими методами, но не должен вызываться непосредственно. ConvertEvent procedure ConvertEvent (var Event: TEvent); virtual; Используется HandleEvent для обработки назначения клавиш и основных операций редактирования. Если Вы хотите изменить или расширить существующие по умолчанию назначения клавиш, Вы должны переопределить ConvertEvent. См. также: TEditor.HandleEvent CursorVisible function CursorVisible: Boolean; Возвращает значение True, если курсор видим в границах отоб- ражаемого элемента. DeleteSelect procedure DeleteSelect; Удаляет выделенный текст, если таковой существует. Например, после того, как ClipCut копирует выделенный текст в буфер, она удаляет его из буфера с помощью DeleteSelect. DoneBuffer procedure DoneBuffer; virtual; Освобождает память, выделенную под буфер редактирования, и устанавливает Buffer равным nil. Draw procedure Draw; virtual; Изображает часть редактируемого текста, видимую в настоящий момент. То есть, она изображает строки, находящиеся внутри границ отображаемого элемента, учитывая значение Delta. GetPalette function GetPalette: PPalette; virtual; Возвращает указатель на CEditor- установленную по умолчанию палитру отображаемого элемента редактора. HandleEvent procedure HandleEvent (var Event: TEvent); virtual; Управляет событиями для отображаемого элемента редактора, вызывая сначала метод HandleEvent, унаследованный от TView, а затем вызывая ConvertEvent для нового привязывания клавиш к кома- ндам, после чего обрабатывая специфическое поведение редактора. Обрабатываются следующие специфические события редактора: - мышь: Выделение текста; - клавиатура: Вставка/замена; - команда: перемещение курсора, выбор текста, редактирова- ние, работа с системным буфером; - сообщение: изменение в полосе прокрутки. InitBuffer procedure InitBuffer; virtual; Вызывает MemAlloc для выделения BufSize байт динамически распределяемой памяти для буфера редактора, и присваивает ему указатель Buffer. InsertBuffer function InsertBuffer (var P: PEditBuffer; Offset, Length: Word; AllowUndo, SelectText: Boolean): Boolean; Это процедура вставки текста низкого уровня, вызываемая InsertFrom и InsertText; Вам редко придется использовать ее непо- средственно, если вообще придется. InserBuffer производит вставку Length байт текста из P (на- чиная с P[Offset]) в позицию текстового буфера CurPtr, удаляя при этом любой выделенный текст. Если AllowUndo равна True, то InsertBuffer записывает информацию, которая позволит пользователю отменить изменения. Еcли SelectText равна True, то вставляемый текст будет появляться в виде вставленного выделенного блока. Возвращает значение True в случае успешной вставки. Если вставка не удалась (вследствие превышения размера буфера), то InsertBuffer вызывает EditorDialog для вывода предупреждения "Out of memory", после чего возвращает False. См. также: TEditor.InsertFrom, TEditor.InsertText InsertFrom function InsertFrom (Editor: PEditor): Boolean; virtual; Осуществляет вставку текста из Editor в буфер редактора, вызывая InsertBuffer. См. также: TEditor.InsertBuffer InsertText function InsertText (Text: Pointer; Length: Word; SelectText: Boolean): Boolean; Копирует Length байт из Text в буфер редактора, выделяя вставленный текст в случае равенства SelectText True. ScrollTo procedure ScrollTo (X, Y: Integer); Перемещает столбец X и строку Y в левый верхний угол отобра- жаемого элемента редактора и при необходимости перерисовывает отображаемый элемент. Search function Search (const FindStr: String; Opts: Word): Boolean; Осуществляет поиск текста из FindStr в буфере редактирова- ния, начиная с CurPtr. Opts равно нулю для поиска, заданного по умолчанию, efCaseSensitive для поиска, чувствительного к регистру букв, или WholeWordsOnly для поиска лишь целых слов. Возвращает True и отмечает найденный текст; в противном случае возвращает False. SetBufSize function SetBufSize (NewSize: Word): Boolean; virtual; Возвращает значение True в случае, если размер буфера может быть изменен до размера NewSize. По умолчанию SetBufSize возвра- щает True, если NewSize меньше или равно BufSize. SetBufSize не изменяет реального размера буфера; она только указывает на то, может ли быть сделано такое изменение. Собственно изменение раз- мера буфера должно осуществляться с помощью SetBufferSize. См. также: функцию SetBufferSize SelSelect procedure SelSelect (NewStart, NewEnd: Word; CurStart: Boolean); Делает текст между положениями NewStart и NewEnd выделенным и при необходимости перерисовывает отображаемый элемент. Если CurStart равно True, то SelSelect помещает курсор в начало выде- ленного блока, в противном случае курсор помещается в конец бло- ка. SetState procedure SetState (AState: Word; Enable: Boolean); virtual; Вызывает метод SetState, унаследованный от TView, для дейст- вительной установки флагов состояния, после чего прячет или пока- зывает отображаемые элементы полос прокрутки и индикатора, связа- нные с редактором, причем показывает их в случае, если редактор активен, и прячет, если он неактивен. После обновления связанных отображаемых элементов SetState вызывает UpdateCommands для раз- решения или запрещения команд в зависимости от того, является ли редактор активным. При необходимости разрешить или запретить дополнительные команды необходимо переопределить UpdateCommands, а не SetState. См. также: TView.SetState, TEditor.UpdateCommands Store procedure Store (var S: TStream); Записывает объект редактора в поток S, вызывая сначала метод Store, унаследованный от TView, а затем записывая поля, введенные TEditor. См. также: TView.Store TrackCursor procedure TrackCursor (Center: Boolean); Заставляет отображаемый элемент прокрутить содержимое так, чтобы показать положение курсора. Если Center равна True, то строка, в которой находится курсор, перемещается в середину отоб- ражаемого элемента. Undo procedure Undo; Отменяет изменения, произведенные с момента последнего пере- мещения курсора, восстанавливая буфер редактирования к состоянию, которое он имел перед последним перемещением курсора. UpdateCommands procedure UpdateCommands; virtual; Обновляет команды, основанные на текущем состоянии редакто- ра. cmUndo разрешается только в случае, если с момента последнего перемещения курсора текст изменялся. Делает доступными команды Cut, Copy и Paste в том случае, если в системном буфере имеется текст. Команда cmClear разрешается в случае, если имеется отмече- нный текст. Делает доступными все команды поиска и замены. Если порожденные объекты переопределяют UpdateCommands, то необходимо вызывать порожденный метод TEditor.UpdateCommands. Valid function Valid (Command: Word): Boolean; virtual; Говорит, является ли отображаемый элемент редактора допусти- мым для команды, переданной в Command. По умолчанию Valid игнори- рует параметр Command и возвращает значение поля IsValid. IsValid имеет значение False только в том случае, если конструктор не мог выделить память для буфера редактирования. *- Палитра ----------------------------------------------------------------- Объекты редактора используют установленную по умолчанию палитру CEditor для отображения элементов 6 и 7 стандартной пали- тры окна. ЙНННСННН» CEditor є 6 і 7 є ИНСНПНСНј і і Нормальный ДДДЩ АДДД Подсвеченный *- Тип TEditorDialog Editors ----------------------------------------------------------------- Описание: TEditorDialog = function (Dialog: Integer; Info: Pointer): Word; Функция: TEditorDialog представляет собой процедурный тип, используемый объектами TEditor для выдачи различных диалоговых окон. Поскольку диалоговые окна зависят от программы, то объекты редактора не изображают своих собственных диалоговых окон непос- редственно. Вместо этого они вызывают функцию EditorDialog, выво- дящую на экран соответствующее диалоговое окно в соответствии со значением, переданным в параметре Dialog. Параметр Dialog должен быть одной из констант edXXXX. Info может указывать на любые дополнительные данные, которые могут потребоваться функции диалогового окна. Функции диалогового окна должны обеспечить правильное пове- дение для всех значений параметра Dialog. Функция StdEditorDialog дает удобный для использования отклик на все допустимые значения Dialog. В Таблице 19.40 сведены воедино все значения Info, ожида- емые сообщения и возвращаемые значения для каждого значения Dia- log. Таблица 19.40. Значения параметра TEditorDialog, сообщения и возвращаемые значения ----------------------------------------------------------------- Константа Dialog Значения Описание ----------------------------------------------------------------- edOutOfMemory Info nil Сообщение Информирует пользователя о недостатке памяти Возвращаемое Игнорируется значение edReadError Info PString, указывающая на имя файла Сообщение Информирует пользователя об ошибке чтения файла Возвращаемое Игнорируется значение edWriteError Info PString, указывающая на имя файла Сообщение Информирует пользователя об ошибке записи в файл Возвращаемое Игнорируется значение edCreateError Info PString, указывающая на имя файла Сообщение Информирует пользователя об ошибке создания файла Возвращаемое Игнорируется значение edSaveModify Info PString, указывающая на имя файла Сообщение Запрашивает пользователя о необходимости сохранения изменений перед закрытием файла Возвращаемое cmYes для сохранения изменений, значение cmNo для отказа от сохранения изменений, cmCancel для отказа от закрытия файла edSaveUntitled Info PString, указывающая на имя файла Сообщение Запрашивает пользователя о необходимости сохранения безымянного файла Возвращаемое cmYes для сохранения файла, значение cmNo для отказа от сохранения файла, cmCancel для отказа от закрытия файла edSaveAs Info PString, указывающая на имя файла Сообщение Подсказка пользователю об имени файла Возвращаемое cmCancel при отказе от значение сохранения файла; другие значения при сохранении файла под именем из буфера, на который указывает Info edFind Info Указывает на тип TFindDialogRec Сообщение Запрос пользователю об искомом тексте и опциях поиска Возвращаемое cmCancel при отказе от поиска; значение в противном случае заполняет запись, на которую указывает Info edSearchFailed Info nil Сообщение Сообщение пользователю о том, что текст не найден Возвращаемое Игнорируется значение edReplace Info Указывает на тип Сообщение TReplaceDialogRec Запрос пользователю об искомом тексте, тексте для замены и опциях поиска Возвращаемое cmCancel при отказе от поиска; значение в противном случае заполняет запись, на которую указывает Info edReplacePrompt Info Объект типа TPoint с глобальными координатами начала найденного текста Сообщение Запрос пользователю о замене текста Возвращаемое cmYes для замены текста и значение продолжения поиска; cmNo для отказа от замены, но продолжения поиска; cmCancel для отказа от замены и прекращения поиска ----------------------------------------------------------------- См. также: константы edXXXX, переменную EditorDialog, функцию DefEditorDialog, функцию StdEditorDialog. *- Объект TEditWindow Editors ----------------------------------------------------------------- Окно редактора представляет собой окно, разработанное специ- ально для хранения в нем объекта редактора, а именно или редакто- ра файла, или системного буфера. Окна редактора меняют свои заго- ловки, чтобы показать, какой файл редактируется, и автоматически создают полосы прокрутки и индикатор для редактора. Если окну редактора не передать имени файла, то файл считается безымянным. *- Поле ----------------------------------------------------------------- Editor Editor: PFileEditor; Указывает на объект редактора, связанный с окном редактора. *- Методы ----------------------------------------------------------------- Init constructor Init (var Bounds: TRect; FileName: FNameStr; ANumber: Integer); Создает объект окна редактора, вызывая сначала конструктор Init, унаследованный от TWindow, для создания окна с границами, указанными в Bounds, без заголовка и с номером, переданным в параметре ANumber, а затем создавая и вставляя горизонтальные и вертикальные полосы прокрутки и объект индикатора. В заключение Init создает объект редактора файла, передавая ему границы облас- ти внутри окна, полосы прокрутки, индикатор и имя файла, передан- ное в FileName. См. также: TWindow.Init, TFileEditor.Init Load constructor Load (var S: TStream); Создает и загружает окно редактора из потока S, вызывая сначала конструктор Load, унаследованный от TWindow, а затем считывая поле редактора, введенное TEditWindow. См. также: TWindow.Load Close procedure Close; virtual; Вызывает метод Close, унаследованный от TWindow, в случае, если редактор не является системным буфером, в случае чего он вызывает Hide, который прячет редактор системного буфера. См. также: TWindow.Close GetTitle function GetTitle (MaxSize: Integer): TTitleStr; virtual; Возвращает имя файла в редакторе или строку 'Clipboard', если редактируется системный буфер. HandleEvent procedure HandleEvent (var Event: TEvent); virtual; Обрабатывает события окна редактора, вызывая сначала метод HandleEvent, унаследованный от TWindow, а затем обрабатывая сооб- щение cmUpdateTitle, перерисовывая при этом рамку окна для изме- нения заголовка. Сообщение cmUpdateTitle возникает в тех случаях, когда имя файла изменяется в процессе его редактирования. См. также: TWindow.HandleEvent Store procedure Store (var S: TStream); Записывает объект окна редактирования в поток S, вызывая сначала метод Store, унаследованный от TWindow, а затем записывая редактор в поток с помощью PutSubViewPtr. См. также: TWindow.Store, TGroup.PutSubViewPtr *- TEmsStream Objects ----------------------------------------------------------------- TEmsStream- это специализированный производный поток, реали- зующий поток в расширенной памяти (EMS), порожденный от TStream. Дополнительные поля представляют идентификатор EMS, счетчик стра- ниц, размер потока и текущее положение. TEmsStream переопределяет 6 абстрактных методов TStream, а также предоставляет специальные конструктор и деструктор. Примечание: При отладке программы, использующей потоки EMS, интегрированная среда не может восстановить память EMS, распреде- ленную Вашей программой в случае, если она преждевременно завер- шилась, или Вы забыли вызвать деструктор Done для потока EMS. Только метод Done (или перезагрузка) могут освободить страницы EMS, принадлежавшие потоку. *- Поля ----------------------------------------------------------------- Handle (только для чтения) Handle: Word; Идентификатор EMS для потока. PageCount (только для чтения) PageCount: Word; Число выделенных для потока страниц, по 16К на страницу. Position (только для чтения) Position: Longint; Текущее положение внутри потока. Первая позиция - 0. Size (только для чтения) Size: Longint; Размер потока в байтах. *- Методы ----------------------------------------------------------------- Init constructor Init(MinSize, MaxSize: Longint); Создает поток EMS с заданным минимальным размером в байтах. Вызывает конструктор Init, унаследованный от TStream, а затем устанавливает значения Handle, Size и PageCount. Вызывает Error с аргументом stInitError, если инициализация неудачна. Драйверы EMS до версии 4.0 не поддерживают блоков расширен- ной памяти с изменяемыми размерами. С драйвером EMS до версии 4.0 поток EMS не может расширяться более первоначально выделенного размера. Для правильной поддержки как старых, так и новых драйве- ров EMS, конструктор Init потока EMS берет два параметра, описы- вающие минимальный и максимальный начальный размер выделенного блока памяти EMS. Init всегда выделяет по крайней мере MinSize байт. - Если номер версии драйвера EMS больше или равен 4.0, то Init выделяет только MinSize байт памяти EMS, а затем расширяет блок, как этого потребуют последующие вызовы TEmsStream.Write, игнорируя параметр MaxSize. - Если номер версии драйвера EMS меньше 4.0, то Init выделя- ет так много расширенной памяти, как можно, вплоть до MaxSize байт, а при попытке расширить блок с помощью TEmsStream.Write возвращает ошибку. Done destructor Done; virtual; Переопределяемость: не переопределяется. Освобождает поток EMS и используемые EMS страницы. См. также: TEmsStream.Init GetPos function GetPos: Longint; virtual; Переопределяемость: не переопределяется. Возвращает значение текущей позиции в потоке. Первая пози- ция- 0. См. также: TEmsStream.Seek GetSize function GetSize: Longint; virtual; Переопределяемость: не переопределяется. Возвращает размер потока в байтах. Read procedure Read(var Buf; Count: Word); virtual; Переопределяемость: не переопределяется. Читает из потока Count байт в буфер Buf, начиная с текущей позиции в потоке. См. также: TEmsStream.Write, stReadError Seek procedure Seek(Pos: Longint); virtual; Переопределяемость: не переопределяется. Устанавливает текущую позицию в Pos байт от начала потока. Начало потока- 0. См. также: TEmsStream.GetPos, TEmsStream.GetSize Truncate procedure Truncate; virtual; Переопределяемость: не переопределяется. Удаляет все данные из потока, начиная с текущей позиции до конца потока. Текущая позиция устанавливается равной новому концу потока. См. также: TDosStream.GetPos, TDosStream.Seek Write procedure Write(var Buf; Count: Word); virtual; Переопределяемость: никогда не переопределяется. Записывает Count байт из буфера Buf в поток, начиная с теку- щей позиции. См. также: TStream.Read, TEmsStream.GetPos, TEmsStream.Seek *- Тип TEvent Drivers ----------------------------------------------------------------- Описание: TEvent = record What: Word; case Word of evNothing: (); evMouse: ( Buttons: Byte; Double: Boolean; Where: TPoint); evKeyDown: ( case Integer of O: (KeyCode: Word); 1: (CharCode: Byte); evMessage: ( Command: Word; case Word of 0: (InfoPtr: Pointer); 1: (InfoLong: Longint); 2: (InfoWord: Word); 3: (InfoInt: Integer); 4: (InfoByte: Byte); 5: (InfoChar: Char); end; Функция: Тип вариантной записи TEvent играет фундаментальную роль в стратегии управления событиями в Turbo Vision. Внешние события, такие как события от клавиатуры и от "мыши" и собы- тия-команды, генерируемые взаимодействием отображаемых элементов, сохраняются и передаются в виде записей типа TEvent. См. также: evXXXX, методы HandleEvent, GetKeyEvent, GetMouseEvent *- Объект TFileCollection StdDlg ----------------------------------------------------------------- TFileCollection представляет собой отсортированный набор записей типа TSearchRec. Диалоговые окна файлов используют объек- ты TFileCollection для получения списков файлов, отсортированных в алфавитном порядке. Подробности о полях TFileCollection и его методах приведены в оперативной подсказке. *- Объект TFileDialog StdDlg ----------------------------------------------------------------- TFileDialog представляет собой стандартное диалоговое окно ввода файлов. *- Поля ----------------------------------------------------------------- Directory Directory: PString; Directory указывает на строку, содержащую имя текущего ката- лога. FileList FileList: PFileList; FileList указывает на объект списка файлов в диалоговом окне. FileName FileName: PFileInputLine; FileName указывает на объект строки ввода имени файла в диалоговом окне. См. также: объект TFileInputLine WildCard WildCard: TWildStr; WildCard хранит текущие диск, путь и имя файла. *- Методы ----------------------------------------------------------------- Init constructor Init (AWildCard: TWildStr; const ATitle, InputName: String; AOptions: Word; HistoryId: Byte); Создает диалоговое окно файлов с заголовком, заданным в ATitle, вызывая конструктор Init, унаследованный от TDialog. Инициализирует поле WildCard значением AWildCard. Создает объект строки ввода файлов и присваивает его полю FileName, устанавливая начальное значение FileName равным WildCard. Создает объект метки с использованием строки, переданной в InputName, и связывает его с FileName. Создает объект списка файлов со связанной меткой 'Files', а также вертикальную полосу прокрутки. В зависимости от значений, переданных в битовых параметрах AOptions, Init конструирует и вставляет кнопки Ok, Open, Replace, Clear и Help. Существует также кнопка Cancel. Если AOptions вклю- чает fdNoLoadDir, то диалоговое окно не загружает в список файлов содержимое текущего каталога. Используйте fdNoLoadDir в том слу- чае, когда Вы хотите сохранить диалоговое окно в потоке, чтобы вместе с диалоговым окном не записывать в поток все содержимое каталога. Объект панели информации о файлах конструируется и вставляе- тся в нижней части диалогового окна. См. также: TWindow.Init, константы fdXXXX Load constructor Load (var S: TStream); Создает и загружает объект TFileDialog из потока S, вызывая сначала конструктор Load, унаследованный от TDialog, а затем считывая поля, введенные TEditWindow, и информацию о текущем каталоге. См. также: TDialog.Load Done destructor Done; virtual; Освобождает память от объекта диалогового окна файлов, осво- бождая сначала строку Directory, а затем вызывая деструктор Done, унаследованный от TDialog. GetData function GetData (var: Rec); virtual; Считывает строку из Rec, преобразует ее к типу PathStr, и расширяет ее до полного имени файла, вызывая GetFileName. См. также: TFileDialog.GetFileName GetFileName procedure GetFileName (var S: PathStr); virtual; Расширяет имя выбранного в настоящий момент файла в полное имя, включающее имя дисковода, путь и имя файла, и сохраняет его в S. HandleEvent procedure HandleEvent (var Event: TEvent); virtual; Обрабатывает большую часть событий, вызывая метод HandleE- vent, унаследованный от TDialog, а затем обрабатывая команды cmFileOpen, cmFileReplace и cmFileClear вызовом EndModal с конс- тантой команды в качестве параметра, возвращая тем самым команду отображаемому элементу, вызвавшему диалоговое окно файлов. См. также: TDialog.HandleEvent, TGroupEndModal SetData procedure SetData (var Rec); virtual; Вызывает метод SetData, унаследованный от TDialog, для того, чтобы обеспечить всем отображаемым элементам возможность считать данные из Rec, а после этого в случае, если оставшиеся в Rec данные представляют собой имя файла, проверяет допустимость этого имени, вызывая Valid, и делая FileName выбранным подэлементом. См. также: TDialog.SetData Store procedure Store (var S: TStream); Записывает объект диалогового окна файлов в поток S, вызывая сначала метод Store, унаследованный от TDialog, а затем записывая поля, введенные TFileDialog. См. также: TDialog.Store Valid function Valid (Command: Word): Boolean; virtual; Возвращает True в случае, если Command равно cmValid, что указывает на успешное создание объекта. Для всех других значений Command, Valid вызывает сначала функцию Valid, унаследованную от TDialog. Если TDialog.Valid возвращает True, то Valid проверяет текущую строку FileName на предмет допустимости имени файла. Если имя файла является допустимым, то Valid возвращает значение True; в противном случае она выдает окно сообщений "Invalid file name" и возвращает False. См. также: TDialog.Valid *- TFileEditor Editors ----------------------------------------------------------------- Объект редактора файлов представляет собой специализирован- ный объект, унаследованный от TEditor, и предназначен для редак- тирования содержимого текстового файла. *- Поле ----------------------------------------------------------------- FileName: FNameStr; FileName представляет собой имя редактируемого файла. *- Методы ----------------------------------------------------------------- Init constructor Init (var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar; AIndicator: PIndicator; AFileName: FNameStr); Создает объект редактора, вызывая сначала конструктор Init, унаследованный от TEditor, передавая параметры Bounds, AHScroll- Bar, AVScrollBar и AIndicator с размером буфера, равным 0, после чего расширяет AFileName до полного имени файла и загружает файл с помощью LoadFile. См. также: TEditor.Init, TFileEditor.LoadFile Load constructor Load (var S: TStream); Создает и загружает объект редактора файлов из потока S, вызывая сначала конструктор Load, унаследованный от TEditor, а затем считывая имя файла. Если имя файла является допустимым, то Load загружает файл в буфер с помощью LoadFile. См. также: TEditor.Load DoneBuffer destructor DoneBuffer; virtual; Если буфер не равен nil, то DoneBuffer вызывает DisposeBuffer для освобождения буфера. См. также: процедуру DisposeBuffer HandleEvent procedure HandleEvent (var Event: TEvent); virtual; Обрабатывает события для редактора файлов, вызывая сначала метод HandleEvent, унаследованный от TEditor, а затем обрабатывая события команд для сохранения редактируемого файла. См. также: TEditor.HandleEvent InitBuffer procedure InitBuffer; virtual; Выделяет в динамически распределяемой памяти буфер для фай- ла, вызывая NewBuffer. См. также: процедуру NewBuffer LoadFile function LoadFile: Boolean; Возвращает True в случае, если файл не существует (это озна- чает, что пользователь редактирует новый файл) или он успешно загружен; в противном случае возвращает False. Считывает текст из файла с именем FileName в буфер редактирования, устанавливая длину буфера равной размеру прочитанного файла. Save function Save: Boolean; Сохраняет содержимое буфера редактирования на диск, вызывая SaveAs в случае, если файл не имеет имени, или SaveFile, если файл уже имеет имя. См. также: TFileEditor.Save, TFileEditor.SaveFile SaveAs function SaveAs: Boolean Вызывает EditorDialog доля вызова диалогового окна получения имени файла для редактируемого текста. Если пользователь не зак- роет диалоговое окно, то SaveAs изменит заголовок диалогового окна, чтобы он отражал новое имя файла, а затем вызывает SaveFile для сохранения содержимого буфера. SaveAs возвращает значение, возвращенное SaveFile. См. также: процедуру EditorDialog, TFileEditor.SaveFile SaveFile function SaveFile: Boolean; Если EditorFlag содержит бит efBackupFiles, то SaveFile переименовывает первоначальный файл в файл с тем же именем и расширением.BAK. Записывает содержимое буфера редактирования в файл с именем FileName и устанавливает значение флага Modified равным False. Возвращает True в случае, если сохранение прошло удачно, в противном случае возвращает False после выдачи соответ- ствующего диалогового окна, объясняющего причину неудачи. SetBufSize function SetBufSize (NewSize: Word): Boolean; virtual; Увеличивает или уменьшает размер буфера редактирования на величину, кратную 4K, при необходимости настраивая GapLen. Store procedure Store (var S: TStream); Записывает объект редактора в поток S, вызывая сначала метод Store, унаследованный от TEditor, а затем записывая имя файла и выбранные смещения текста. UpdateCommands procedure UpdateCommands; virtual; Вызывает метод UpdateCommands, унаследованный от TEditor, а затем делает доступными команды cmSave и cmSaveAs, относящиеся только к редактору фалов. Valid function Valid (Command: Word): Boolean; virtual; Если cmCommand равно cmValid, то возвращается значение IsValid, которое равно False лишь в том случае, если редактор файлов не смог создать буфер или считать файл. В противном случае Valid проверяет значение поля Modified для проверки того, нужно ли сохранить измененный файл перед закрытием буфера. Если значение Modified равно True, то Valid вызывает диалоговое окно, дающее пользователю возможность сохранить изменения. Если пользователь закрывает диалоговое окно, то Valid возвращает False, оставляя редактор открытым; в противном случае буфер либо сохраняется, либо его содержимое теряется, в зависи- мости от выбора пользователя, и Valid возвращает True. *- TFileInfoPane StdDlg ----------------------------------------------------------------- TFileInfoPane представляет панель с информацией о файле, отображаемый элемент, отражающий информацию о выбранном в настоя- щий момент файле в списке файлов TFileDialog. Подробности о полях TFileInfoPane и его методах приведены в оперативной подсказке. *- TFileInputLine StdDlg ----------------------------------------------------------------- TFileInputLine представляет собой специальную строку ввода, используемую TFileDialog, которая обновляет свое содержимое в ответ на команду cmFileFocused от TFileList. Строки ввода имен файлов позволяют редактировать имена файлов, которые могут вклю- чать пути и метасимволы. Подробности о полях TFileInputLine и его методах приведены в оперативной подсказке. *- TFileList StdDlg ----------------------------------------------------------------- TFileList представляет собой отсортированное окно-список, которое предполагает, что оно содержит в качестве набора TFileCollection. При выборе имени файла объект списка файла выдает сообщение cmFileFocused, которое извещает объекты TFileInputLine и TFileInfoPane о том, что им необходимо обновить свое содержимое в соответствии с вновь выбранным файлом. По умолчанию список файлов является окном-списком в две колонки с необязательной горизонтальной полосой прокрутки под ним. Подробности о полях TFileList и его методах приведены в оперативной подсказке. *- TFilterValidator Validate ----------------------------------------------------------------- Объект фильтра определителя допустимости осуществляет прове- рку вводимой пользователем информации. Фильтр проверки содержит набор допустимых символов. Если пользователь печатает один из допустимых символов, то фильтр проверки допустимости указывает на то, что символ является допустимым. Если пользователь вводит любой другой символ, то фильтр указывает на недопустимость ввода. *- Поле ----------------------------------------------------------------- ValidChars ValidChars: TCharSet; Содержит набор всех символов, которые пользователь может печатать. Например, для разрешения ввода только цифр необходимо установить ValidChars равным ['0'..'9']. ValidChars устанавливае- тся равным параметру AValidChars, передаваемому конструктору Init. *- Методы ----------------------------------------------------------------- Init constructor Init (AValidChars: TCharSet); Создает объект фильтра определителя допустимости ввода, вызывая сначала конструктор Init, унаследованный от TValidator, а затем устанавливая ValidChars равным AValidChars. Load constructor Load (var S: TStream); Создает и загружает объект фильтра определителя допустимости ввода из потока S, вызывая сначала конструктор Load, унаследован- ный от TValidator, а затем считывая набор допустимых символов из ValidChars. См. также: TValidator.Load Error procedure Error; virtual; Выдает окно сообщений, уведомляющее о том, что текстовая строка содержит недопустимый символ. IsValid function IsValid (const S: string): Boolean; virtual; Возвращает True в случае, если все символы в S содержатся в списке допустимых символов ValidChar; в противном случае возвра- щает False. IsValidInput function IsValidInput (var S: string; SuppressFill: Boolean): Boolean; virtual; Проверяет каждый символ в строке S на предмет его нахождения в списке допустимых символов ValidChar. Возвращает True в случае, если все символы из S являются допустимыми; в противном случае возвращает False. Store procedure Store (var S: TStream); Сохраняет объект фильтра определителя допустимости ввода в потоке S, записывая ValidChars. *- Тип TFindDialogRec Editors ----------------------------------------------------------------- Описание TFindDialogRec = record Find: String [80]; Options: Word; end; Функция: Диалоговые окна поиска текста, вызываемые EditorDialog при передаче edFind, получают в качестве второго параметра указатель на TFindDialogRec. Find содержит строку поиска, заданную по умолчанию. Options содержит некоторые комбинации констант флагов редактора efXXXX, описывающих то, как должен приводиться поиск. См. также: тип TEditorDialog *- TFrame Views ----------------------------------------------------------------- TFrame предоставляет различные рамки вокруг окон и диалого- вых окон. Вероятно, что пользователи никогда не будут использо- вать объекты рамок непосредственно, т.к. они добавляются к окнам по умолчанию. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect); Вызывает конструктор Init, унаследованный от TView, а затем устанавливает GrowMode равным gfGrowHiX + gfGrowHiY, а EventMask равным EventMask or evBroadcast, так, чтобы объекты TFrame обра- батывали сообщения-уведомления по умолчанию. См. также: TView.Init Draw procedure Draw; virtual; Переопределяемость: используется редко. Рисует рамку с цветовыми атрибутами и пиктограммами, соотве- тствующими текущим значениям флагов State (активный, неактивный и перемещаемый). Добавляет пиктограммы распахивания, закрытия и изменения размера в зависимости от значений Flags окна-владельца. Добавляет заголовок из поля Title окна-владельца, если таковое существует. Активные окна рисуются с двойной рамкой и пиктограм- мами, а неактивные окна с одинарной рамкой и без пиктограмм. См. также: константы флагов состояния sfXXXX, константы фла- гов окна wfXХXX GetPalette function GetPalette: Palette; virtual; Переопределяемость: используется редко. Возвращает указатель на палитру рамки, установленную по умолчанию, CFrame. HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: переопределяется редко. Обрабатывает большую часть событий, вызывая метод HandleEvent, унаследованный от TView, а затем специально обраба- тывает события "мыши". Если закрывающая пиктограмма выбрана при помощи "мыши", то TFrame генерирует событие cmClose. Перещелкива- ние на пиктограмме распахивания окна или двойное перещелкивание на верхней линии рамки генерирует событие cmZoom. При перемещении окна за верхнюю строку рамки окно перемещается, а при перемещение за пиктограмму изменения размера перемещается правый нижний угол рамки, и соответственно, ее размеры изменяются. См. также: TView.HandleEvent SetState procedure SetState (AState: Word; Enable: Boolean); virtual; Переопределяемость: переопределяется редко. Вызывает TView.SetState, затем, если новое состояние - sfActive или sfDragging, то вызывает DrawView для перерисовки отображаемого элемента. См. также: TView.SetState *- Палитра ----------------------------------------------------------------- Объекты рамок используют палитру, определенную по умолчанию, CFrame, для отображения в нее первых трех элементов стандартной палитры окна. 1 2 3 4 5 ЙНННСНННСНННСНННСННН» CFrame є 1і 1і 1 і 2 і 3 є ИНСНПНСНПНСНПНСНПНСНј і і і і і Пассивная ДДЩ і і і АДДДДДД Пиктограммы рамка і і і Пассивный ДДДДДДЩ і АДДДДДДДДДД Активный заголовок заголовок і Активная ДДДДДДДДДДЩ рамка *- TGroup Views ----------------------------------------------------------------- Объекты TGroup и порожденные ими (которые мы для краткости называем группами) являются основной управляющей силой Turbo Vision. Группа представляет собой специальные тип отображаемого элемента. В дополнение ко всем полям и методам, порожденным от TView, группа имеет добавочные поля и методы (включая многие переопределения), позволяющие управлять динамически связанными списками отображаемых элементов (включая другие группы) как если бы они были одним объектом. Мы часто говорим о подэлементах груп- пы, даже если эти подэлементы сами являются группами. Хотя группа имеет прямоугольную границу от своего предка TView, группа видима только посредством отображения своих подэле- ментов. Группа отображает себя через методы Draw своих подэлемен- тов. Группа владеет своими подэлементами, и вместе они должны обеспечивать зарисовку (заполнение) всего прямоугольника группы, определенного в Bounds. Во время работы программы подэлементы создаются, вставляются в группы и отображаются в результате дея- тельности пользователя и событий, генерируемых программой. Подэ- лементы могут быть легко скрыты, а также удалены из группы дейст- виями пользователя (такими, как закрытие окна или выход из диало- гового окна). Три порожденных от TGroup типа объектов, а именно TWindow, TDeskTop и TApplication (посредством TProgram) иллюстрируют кон- цепцию группы и подгруппы. TApplication обычно владеет объектами оперативной области TDeskTop, строки состояния TStatusLine и отображаемого элемента меню TMenuView. TDeskTop порожден от TGroup и таким образом, может владеть объектами TWindow, которые в свою очередь владеют объектами TFrame, TScrollBar и т.д. Объекты TGroup передают рисование и обработку событий своим подэлементам, как это объясняется в Главе 8 "Отображаемые элемен- ты" и 9 "Программирование, обусловленное событиями". Многие из основных методов TView переопределяются в TGroup естественным образом. Например, сохранение и чтение группы из потока может быть достигнуто одним вызовом TGroup.Store и TGroup.Load, которые в свою очередь итеративно сохраняют и загружают подэлементы группы. Объекты TGroup обычно не имеют экземпляров; Вы будете созда- вать экземпляры типов объектов, порожденных от TGroup: TApplication, TDeskTop и TWindow. *- Поля ----------------------------------------------------------------- Buffer (только для чтения) Buffer: PVideoBuf; Указывает на буфер, используемый для кэширования образа экрана группы, или равен nil, если группа не имеет кэш-буфера. Кэш-буфера создаются и уничтожаются автоматически, если флаг ofBuffered в поле Options не сброшен. См. также: TGroup.Draw, TGroup.Lock, TGroup.Unlock Current (только для чтения) Current: PView; Указывает на выбранный в настоящий момент подэлемент или равен nil, если нет выбранного отображаемого подэлемента. См. также: sfSelected, TView.Select Last (только для чтения) Last : PView; Указывает на последний подэлемент группы (самый дальний от вершины в циклическом порядке). Поле Next последнего подэлемента указывает на первый подэлемент, поле Next которого указывает на следующий подэлемент и т.д., формируя циклический список. Phase (только для чтения) Phase: (phFocused, phPreProcess, phPostProcess); Текущая фаза обработки для активного события. Подэлементы, в которых установлены флаги ofPreProcess и/или ofPostProcess могут проверять значение Owner^.Phase, чтобы определить, в какой из фаз: phPreProcess, phFocused или phPostProcess был вызван их HandleEvent. См. также: ofPreProcess, ofPostProcess, TGroup.HandleEvent *- Методы ----------------------------------------------------------------- Метод Init constructor Init(var Bounds: TRect); Создает объект группы с заданными границами, вызывая сначала метод Init, унаследованный от TView, а затем устанавливая в Options флаги ofSelectable и ofBuffered, и устанавливает EventMask равным $FFFF. См. также: TView.Init, TGroup.Load *- Load constructor Load(var S: TStream); Загружает всю группу из потока, вызывая сначала метод Load, унаследованный от TView, а затем используя S.Get для чтения каж- дого подэлемента. После загрузки всех подэлементов выполняет проход по подэлементам для установки всех считанных указателей с использованием GetPeerViewPtr. Если тип объекта, порожденного от TGroup, содержит поля, которые указывают на подэлементы, то для чтения этих полей он должен использовать GetSubViewPtr внутри Load. Если указатель на владельца равен nil, то после загрузки всех подэлементов загружается Awaken. См. также: TView.Load, TGroup.Store, TGroup.GetSubViewPtr, TStream.Get *- Done destructor Done; virtual; Переопределяемость: часто переопределяется. Скрывает группу, используя метод Hide, освобождает каждый элемент группы, и наконец вызывает деструктор Done, унаследован- ный от TView. См. также: TView.Done *- Awaken procedure Awaken; virtual; Вызывает методы Awaken для каждого из подэлементов группы в циклическом порядке. См. также: TView.Awaken *- ChangeBounds procedure ChangeBounds(var Bounds: Trect); virtual; Переопределяемость: не переопределяется. Изменяет границы группы в соответствии со значением Bounds, а затем вызывает CalcBounds и ChangeBounds для каждого элемента группы. См. также: TView.CalcBounds, TView.ChangeBounds *- DataSize function DataSize: Word; virtual; Переопределяемость: переопределяется редко. Возвращает общий размер группы, вызывая и накапливая DataSize для каждого подэлемента. См. также: TView.DataSize *- Delete procedure Delete(P: PView); Удаляет подэлемент P из группы и перерисовывает другие подэ- лементы, если это необходимо. Поля Owner и Next в Р устанавливаю- тся равными nil. Delete, однако, не освобождает память, выделен- ную под P. См. также: TGroup.Insert *- Draw procedure Draw; virtual; Переопределяемость: не переопределяется. Если кэш-буфер существует, то он выводится на экран с испо- льзованием WriteBuf. В противном случае вызывает Redraw для рисо- вания каждого подэлемента группы. См. также: TGroup.Buffer, TGroup.Redraw *- EndModal procedure EndModal(Command: Word); virtual; Переопределяемость: никогда не переопределяется. Если группа - это текущий режимный отображаемый элемент, то его режимное состояние завершается. Command передается в ExecView (который сделал данный отображаемый элемент режимным), который в свою очередь возвращает Command в качестве результата. Если эта группа не является текущим режимный отображаемый элемент, то она вызывает метод EndModal, унаследованный от TView. См. также: TGroup.ExecView, TGroup.Execute *- EventError procedure EventError(var Event: TEvent); virtual; Переопределяемость: иногда переопределяется. EventError вызывается каждый раз, когда в цикле обработчика событий встречается событие, которое он не может обработать. Действие по умолчанию: Если Owner группы не равен nil, то EventError вызывает EventError своего владельца. Обычно эта цепочка возвращается назад к EventError из TApplication. Вы можете переопределить EventErrоr, для выполнения требуемого дейс- твия. См. также: TGroup.Execute, TGroup.ExecView, sfModal *- ExecView function ExecView(P: PView): Word; ExecView представляет собой режимный вариант нережимных ме- тодов Insert и Delete. В отличие от Insert, после вставки отобра- жаемого элемента в группу ExecView ожидает, пока отображаемый элемент будет выполнен, а затем удаляет его и возвращает резуль- тат выполнения. ExecView используется в ряде мест в Turbo Vision, например для реализации TApplication.Run и TProgram.ExecuteDialog. ExecView сохраняет текущий контекст (выбранный отображаемый элемент, режимный отображаемый элемент и набор команд), делает Р режимным, вызывая Р^.SetState(sfModal, True), вставляет Р в груп- пу (если он еще не вставлен) и вызывает P^.Execute. Когда P^.Execute возвращает управление, группа восстанавливается в пре- дыдущее состояние и результат P^.Execute возвращается как резуль- тат вызова ExecView. Если P равно nil, то ExecView возвращается значение cmCancel. См. также: TGroup.Execute, sfModal *- Execute function Execute: Word; virtual; Переопределяемость: используется редко. Execute представляет собой основной цикл обработки событий группы. Она постоянно получает события, используя GetEvent, и обрабатывает их, используя HandleEvent. Цикл событий завершается группой или подэлементом с помощью вызова EndModal. Перед завер- шением работы, однако, Exec вызывает Valid для проверки того, что режимное состояние в самом деле может быть завершено. Реализация TGroup.Execute показана ниже. Заметим, что EndState- это поле типа private в TGroup, которое устанавливается вызовом EndModal. function TGroup.Execute: Word; var E: TEvent; begin repeat EndState := 0; repeat GetEvent(E); HandleEvent(E); if E.What <> evNothing then EventError(E); until EndState <> 0; until Valid(EndState); Execute := EndState; end; См. также: TGroup.GetEvent, TGroup.HandleEvent, TGroup.EndModal, TGroup.Valid *- First function First: PView; Возвращает указатель на первый подэлемент группы (ближайший к вершине в циклическом порядке), или nil, если в группе нет подэлементов. См. также: TGroup.Last *- FirstThat function FirstThat(P: Pointer): PView; FirstThat применяет булеву функцию, заданную указателем на функцию P, к каждому подэлементу в циклическом порядке до тех пор, пока P не вернет True. Результат - указатель на подэлемент, для которого P возвращает True, или nil, если функция P возвраща- ет False для всех подэлементов. P должен указывать на локальную функцию типа far, использующую параметр типа Pointer, и возвраща- ющую значение типа Boolean. Например: function MyTestFunc(P: PView): Boolean; far; Метод SubViewAt, показанный ниже, возвращает указатель на первый подэлемент, содержащий данную точку. function TMyGroup.SubViewAt(Where: TPoint): PView; function ContainsPoint(P: PView): Boolean; far; var Bounds: TRect; begin P^.GetBounds(Bounds); ContainsPoint := (P^.State and sfVisible <> 0) and Bounds.Contains(Where); end; begin SubViewAt := FirstThat(@ContainsPoint); end; См. также: TGroup.ForEach *- FocusNext function FocusNext (Forwards: Boolean): Boolean; Если Forwards равно True, то FocusNext передает фокус ввода следующему подэлементу, который можно выбрать (у которого устано- влен бит ofSelectable), в циклическом порядке. Если Forwards равно False, то метод передает фокус предыдущему подэлементу, который может быть выбран. В случае успеха возвращает True; в противном случае возвращает False. Если у отображаемого элемента установлен бит ofValidate, то она вызывает Valid (cmReleaseFocus) для определения того, может ли фокус быть отобран. Если Valid возвращает значение False, то отображаемый элемент оставляет фокус у себя, и FocusNext возвра- щает False. См. также: TView.Focus *- ForEach procedure ForEach (P: Pointer); ForEach применяет действие, заданное указателем на процедуру P, к каждому подэлементу группы в циклическом порядке. Параметр P должен указывать на локальную процедуру типа far, имеющую пара- метр типа Pointer, например: procedure MyActionProc(P: PView); far; Метод MoveSubViews перемещает все подэлементы группы на величину, заданную в Delta. Обратите внимание на использование Lock и UnLock для ограничения числа выполняемых операций по пере- рисовке для предотвращения неприятного мерцания. procedure TMyGroup.MoveSubViews(Delta: TPoint); procedure DoMoveView(P: PView); far; begin P^.MoveTo(P^.Origin.X + Delta.X, P^.Origin.Y + Delta.Y); end; begin Lock; ForEach(@DoMoveView); UnLock; end; См. также: TGroup.FirstThat *- GetData procedure GetData(var Rec); virtual; Переопределяемость: используется редко. Вызывает GetData для каждого подэлемента в обратном цикличе- ском, увеличивая положение, заданное в Rec, на DataSize для каж- дого подэлемента. См. также: TView.GetData, TGroup.SetData *- GetHelpCtx function GetHelpCtx: Word; virtual; Переопределяемость: переопределяется редко. Возвращает контекст подсказки для выбранного в настоящий момент отображаемого элемента, вызывая метод GetHelpCtx выделен- ного подэлемента. Если ни один из отображаемых элементов не имеет контекста подсказки, то GetHelpCtx возвращает значение собствен- ного поля HelpCtx. *- GetSubViewPtr procedure GetSubViewPtr(var S: TStream; var P); Загружает указатель на подэлемент Р из потока S. GetSubViewPtr должна использоваться только внутри конструктора Load, для чтения значений указателей, которые были записаны вызо- вом PutSubViewPtr из метода Store. См. также: TView.PutSubViewPtr, TGroup.Load, TGroup.Store *- HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: часто используется. Группа обрабатывает события, передавая их методам HandleEvent одного или более подэлементов. Однако действительный маршрут зависит от класса события: - для активных событий (по умолчанию evKeyDown и evCommand, см. переменную FocusedEvents) обработка событий выполняется в три фазы: - предварительная обработка. Поле Phase группы устанавли- вается равным phPreProcess, и событие передается мето- дам HandleEvent всех подэлементов, у которых установлен флаг ofPreProcess; - основная обработка. Phase устанавливается равным phFocused, и событие передается HandleEvent отображае- мого элемента, выбранного в настоящий момент; - фаза после обработки. Phase устанавливается равным phPostProcess, и событие передается методам HandleEvent всех подэлементов, для которых установлен флаг ofPostProcess; - для позиционированных событий (по умолчанию evMouse, см. переменную PositionalEvents), событие передается в HandleEvent первого подэлемента (в циклическом порядке), ограничивающий пря- моугольник которого содержит точку в Event.Where. Для событий-уведомлений (т.е. не активных и не позициониро- ванных), событие передается методу HandleEvent каждого подэлемен- та группы в циклическом порядке. Примечание: Если поле EventMask подэлемента маскирует класс события, то TGroup.HandleEvent никогда не будет посылать события этого класса подэлементу. Например, по умолчанию EventMask из TView запрещает evMouseUp, evMouseMove и evMouseAuto, поэтому TGroup.HandleEvent никогда не будет посылать такие события стан- дартному TView. См. также: FocusedEvents, PositionalEvents, константы собы- тий evXXXX, методы TView.EventMask, HandleEvent *- Insert procedure Insert(P: PView); Вставляет отображаемый элемент, заданный указателем Р, в список подэлементов группы. Новый подэлемент помещается перед всеми другими отображаемыми подэлементами. Если в подэлементе установлены флаги ofCenterX или ofCenterY, то он центрируется в группе по соответствующей оси. Если отображаемый элемент имеет установленный флаг sfVisible, то он будет показан в группе; в противном случае он остается невидимым до тех пор, пока не будет показан специально. Если отображаемый элемент имеет установленным флаг ofSelectable, то он становится текущим выбранным подэлемен- том. См. также: TGroup.Delete, TGroup.ExecView *- InsertBefore procedure InsertBefore(P, Target: PView); Вставляет отображаемый элемент Р перед отображаемым элемен- том, заданным Target. Если Target имеет значение nil, то отобра- жаемый элемент размещается после всех других отображаемых элемен- тов группы. См. также: TGroup.Insert, TGroup.Delete *- Lock procedure Lock; Блокирует группу, задерживая все записи, производимые подэ- лементами на экран до тех пор, пока группа не будет разблокирова- на. Lock не имеет действия, если группа не имеет кэш-буфера (см. ofBuffered и TGroup.Buffer). Lock работает, увеличивая счетчик блокировок, который соответственно уменьшается с помощью UnLock. Когда вызов UnLock уменьшает счетчик до 0, вся группа пишется на экран, используя образ, созданный в кэш-буфере. Накапливая частые операции перерисовки между вызовами Lock и UnLock, можно сократить или полностью избавиться от неприятного мерцания экрана. Например, TDeskTop.Tile и TDeskTop.Cascade испо- льзуют Lock и UnLock для уменьшения мерцания. Примечание: Количества вызовов Lock и UnLock должны быть равны, иначе группа может остаться в постоянно заблокированном состоянии, что приведет к тому, что она не сможет быть выведена на экран, когда это понадобится. См. также: TGroup.Unlock *- PutSubViewPtr procedure PutSubViewPtr(var S: TStream; P: PView); Сохраняет указатель подэлемента Р в потоке S. Метод PutSubViewPtr должен использоваться только внутри метода Store для записи значений указателей, которые позже будут читаться вы- зовами GetSubViewPtr в конструкторе Load. См. также: TGroup.GetSubViewPtr, TGroup.Store, TGroup.Load *- Redraw procedure Redraw; Перерисовывает подэлементы группы в циклическом порядке. TGroup.Redraw отличается от TGroup.Draw тем, что перерисовка никогда не производится выводом из кэш-буфера. См. также: TGroup.Draw *- SelectNext procedure SelectNext(Forwards: Boolean); Если Forwards равно True, то SelectNext будет выбирать (де- лать текущим) следующий выбираемый подэлемент (подэлемент, у которого установлен бит ofSelectable) группы в циклическом поряд- ке. Если Forwards равно False, то метод выбирает предыдущий выби- раемый подэлемент. Внимание! SelectNext игнорирует допустимость и всегда выби- рает следующий подэлемент. При необходимости контролировать допу- стимость выбора при изменении фокуса, вместо SelectNext необходи- мо использовать FocusNext. См. также: константы флагов параметров ofXXXX, TView.FocusNext *- SetData procedure SetData(var Rec); virtual; Переопределяемость: используется редко. Вызывает SetData для каждого подэлемента в обратном цикличе- ском порядке, увеличивая положение, заданное в Rec из DataSize, для каждого подэлемента. См. также: TGroup.GetData, TView.SetData *- SetState procedure SetState(AState: Word; Enable: Boolean); virtual; Переопределяемость: переопределяется редко. Сначала вызывает метод TView, унаследованный от State, а затем обновляет подэлементы следующим образом: - если AState имеет значение sfActive, sfExposed или sfDragging, то для каждого подэлемента для его обновления вызыва- ется SetState; - если AState имеет значение sfFocused, то для установки флага sfFocused вызывается SetState для выбранного в настоящий момент подэлемента. См. также: TView.SetState *- Store procedure Store(var S: TStream); Сохраняет всю группу в потоке, сначала вызывая метод Store, унаследованный от TView, а затем используя TStream.Put для вывода каждого подэлемента. Если тип объекта, порожденный от TGroup, содержит поля, которые указывают на подэлементы, то для записи этих полей он должен использовать PutSubViewPtr внутри его метода Store. См. также: TView.Store, TGroup.PutSubViewPtr, TGroup.Load *- Unlock procedure Unlock; Разблокирует группу, уменьшая значение счетчика блокировок. Если счетчик блокировки становится равным 0, то вся группа выво- дится на экран, используя образ, созданный в кэш-буфере. См. также: TGroup.Lock *- Valid function Valid(Command: Word): Boolean; virtual; Вызывает метод Valid для каждого подэлемента в циклическом порядке и возвращает True в случае, если вызовы Valid всех подэ- лементов возвращают True; в противном случае возвращает False. TGroup.Valid используется в конце цикла обработки событий в TGroup.Execute для подтверждения того, что завершение разрешено. Режимное состояние не может быть завершено до тех пор, пока все вызовы Valid не вернут True. Подэлемент может вернуть False, если он хочет, чтобы управление осталось у него. См. также: TView.Valid, TGroup.Execute *- THistory Dialogs ----------------------------------------------------------------- Объект THistory реализует список ранее выполненных команд, действий или выборов для их повтора. Объекты THistory связываются с объектом строки ввода TInputLine и со списком протокола. Инфор- мация списка протокола хранится в блоке динамически распределяе- мой области памяти. Когда блок заполняется, наиболее старые эле- менты протокола удаляются, а новые добавляются. Объект THistory показывается в виде пиктограммы (|щ|) в конце строки ввода. Когда пользователь выбирает мышью пиктограмму протокола, Turbo Vision открывает окно протокола (смотри THistoryWindow) с просмотром протокола (смотри THistoryViewer), содержащем список вводимых ранее команд. Различные строки ввода могут использовать один список преды- стории, используя одинаковый номер идентификатора ID. *- Поля ----------------------------------------------------------------- HistoryID (только для чтения) HistoryID: Word; Каждый список протокола имеет уникальный номер ID, назначае- мый программистом. Различные объекты протоколов в различных окнах могут совместно использовать список протокола, используя одинако- вый номер ID (идентификатор). Link (только для чтения) Link: PInputLine; Указатель на связанный объект TInputLine. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; ALink: PInputLine; AHistoryId: Word); Создает объект THistоry заданного размера, вызывая конструк- тор Init, унаследованный от TView, а затем устанавливает поля Link и HistoryId равными ALink и AHistoryId. Поле Options устана- вливается равным ofPostProcess, а EventMask - равным evBroadcast. См. также: TView.Init Load constructor Load(var S: TStream); Создает и инициализирует объект предыстории из потока S, вызывая конструктор Load, унаследованный от TView, и читая Link и HistoryId из S. См. также: TView.Load Draw procedure Draw; virtual; Переопределяемость: переопределяется редко. Рисует пиктограмму предыстории, используя палитру, назначен- ную по умолчанию. GetPalette function GetPalette: PPalette; virtual; Переопределяемость: иногда переопределяется. Возвращает указатель на используемую по умолчанию палитру CHistory. HandleEvent procedure HandleEvent HandleEvent обрабатывает большую часть событий, вызывая метод HandleEvent, унаследованный от TView, а затем отвечает на два специальных события: - если пользователь перещелкивает на пиктограмме списка пре- дыстории мышью или нажимает клавишу "стрелку вниз", находясь в связанной строке ввода, то отображаемый элемент предыстории соз- дает окно предыстории. По умолчанию это окно на один символ шире и на 6 строк выше связанной строки ввода, но помещается внутри диалогового окна владельца. HandleEvent передает этот ограничива- ющий прямоугольник InitHistoryWindow, чтобы она создала окно пре- дыстории; - если связанная строка ввода теряет фокус ввода или пиктог- рамма предыстории получает неявную команду cmRecordHistory, то HandleEvent вызывает RecordHistory для записи текущего содержимо- го строки ввода в блок предыстории. См. также: TView.HandleEvent, THistory.InitHistoryWindow, THistory.RecordHistory InitHistoryWindow function InitHistoryList function InitHistory (var Bounds: TRect): PHistoryWindow; virtual; Создает объект окна предыстории с ограничивающим прямоуголь- ником, переданным в Bounds, и ID предыстории из HistoryID, возв- ращая указатель на вновь созданное окно. Также устанавливает контекст подсказки для окна предыстории на контекст подсказки связанной строки ввода. Обработчик событий THistory вызывает InitHistoryWindow в ответ на нажатия кнопок мыши над пиктограммой предыстории или нажатия некоторых комбинаций клавиш в связанной строке ввода. См. также: THistoryWindow.Init, THistory.HandleEvent RecordHistory procedure RecordHistory (const S: String); virtual; Добавляет строку S к списку предыстории, связанному с отоб- ражаемым элементом, описанным HistoryID. См. также: процедуру HistoryAdd Store procedure Store(var S:TStream); Сохраняет объект предыстории в потоке S, вызывая метод Store, унаследованный от TView, а затем записывает Link и HistoryId в S. См. также: TView.Load *- Палитра ----------------------------------------------------------------- Пиктограммы протокола используют палитру, определенную по умолчанию, CHistory, для отображения 22 и 23-го элементов станда- ртной палитры диалогового окна. 1 2 ЙННННСНННН» CHistory є 22 і 23 є ИННСНПНСННј Стрелка ДДДДДДДДЩ АДДДДДДД Стороны *- THistoryViewer Dialogs ----------------------------------------------------------------- THistoryViewer является прямым потомком TListViewer, исполь- зуемым системой списка предыстории. Он используется системой списка протокола и появляется внутри окна протокола при выборе мышью пиктограммы протокола. Для детального описания взаимодейст- вия THistory, THistoryWindow и THistoryViewer смотри описание THistory в этой главе. Подробности о поле THistoryViewer и его методах приводится в контекстной подсказке. *- THistoryWindow Dialogs ----------------------------------------------------------------- THistoryWindow представляет собой специализированный потомок (наследник) TWindow, используемый для хранения объекта просмотра списка протокола, когда пользователь выбирает мышью пиктограмму протокола, расположенную сразу за строкой ввода. По умолчанию это окно не имеет заголовка и номера. Рамка окна протокола имеет закрывающую пиктограмму, поэтому окно может быть закрыто, но не может изменить размер или "распахиваться". Подробности по использованию списков протоколов и связанных с ними объектов см. THistory в этой главе. *- TIndicator Editors ----------------------------------------------------------------- Объект индикатора обеспечивает окно редактора счетчиком строки и столбца, расположенным в его левом нижнем углу. Объект окна редактора создает индикаторы по умолчанию и связывает их с объектами редактора. Индикаторы могут также работать с редактора- ми за пределами контекста окна редактора. *- Поля ----------------------------------------------------------------- Location Location: TPoint; Location хранит текущие положения строки и столбца, которые надо показывать. Объекты редактора автоматически обновляют содер- жимое Location. Modified Modified: Boolean; Modified равно True в случае, если текст в связанном редак- торе изменялся. Draw проверяет значение Modified и показывает специальный символ, чтобы предупредить пользователя о состоянии буфера редактирования. *- Методы ----------------------------------------------------------------- Init constructor Init (var Bounds: TRect); Создает индикатор с границами, указанными в Bounds, вызывая конструктор Init, унаследованный от TView, а затем привязывает отображаемый элемент к левому нижнему углу окна владельца, уста- навливая GrowMode равным gfGrowLoY + gfGrowHiY. См. также: TView.Init Draw procedure Draw; virtual; Рисует индикатор в форме: строка: столбец, за которыми сле- дует символ в случае, если Modified равно True. GetPalette function GetPalette: PPalette; virtual; Возвращает указатель на используемую по умолчанию палитру CIndicator. SetState procedure SetState (AState: Word; Enable: Boolean); virtual; Вызывает метод SetState, унаследованный от TView, для обра- ботки нормальной установки состояния, а затем перерисовывает индикатор в случае, если флаг sfDragging установлен, что означа- ет, что индикатор требует перерисовки с использованием цвета перемещаемой рамки, а не нормального. См. также: TView.SetState SetValue procedure SetValue (ALocation: TPoint; AModified: Boolean); Устанавливает значение Location равным ALocation, а Modified - равным AModified, и перерисовывает индикатор. Объекты редактора вызывают эти методы для того, чтобы значения индикаторов соот- ветствовали текущим. *- Палитра ----------------------------------------------------------------- Пиктограммы протокола используют палитру, определенную по умолчанию, CIndicator, для отображения 2 и 3-го элементов станда- ртной палитры программы. Это те же самые цвета, которые использу- ются рамками окна. 1 2 ЙННННСНННН» CIndicator є 2 і 3 є ИННСНПНСННј НормальнаяДДДДДДДДЩ АДДДДДДД Перемещаемая *- TInputLine Dialogs ----------------------------------------------------------------- Объект TInputLine обеспечивает базовый редактор строк ввода. Он управляет вводом с клавиатуры, а также нажатием кнопок и пере- мещениями "мыши" при отметке блоков и в целом ряде функций редак- тирования строки (см. TInputLine.HandleEvent). Существующий ранее текст удаляется и заменяется первым вводом, являющимся текстовым. Если MaxLen больше размера по Х (Size.X), то поддерживается гори- зонтальная прокрутка, которая указывается правой и левой стрелка- ми. Методы GetData и SetData доступны для записи и чтения строк данных (посредством поля указателя Data) в данную запись. Строки ввода часто имеют связанные с ними объекты меток, списков предыстории и, возможно, объектов определителя допустимо- сти ввода. TInputLine можно изменить для обработки типов данных, отлич- ных от строк. Чтобы сделать это, необходимо добавить новые поля и переопределяете методы Init, Load, Store, Valid, DataSize, GetData и SetData. *- Поля ----------------------------------------------------------------- CurPos (чтение/запись) CurPos: Integer; Индекс точки вставки текста (т.е. текущего положения курсо- ра). См. также: TInputLine.SelectAll Data (чтение/запись) Data: PString; Указатель на строку, содержащую редактируемую информацию. FirstPos (чтение/запись) FirstPos: Integer; Индекс первого отображаемого символа. См. также: TInputLine.SelectAll MaxLen (только для чтения) MaxLen: Integer; Максимальная длина, допустимая для строки, включая байт длины. См. также: TInputLine.DataSize SelEnd (только для чтения) SelEnd: Integer; Индекс конца выделенной области (т.е. указатель на последний символ отмеченного блока). См. также: TInputLine.SelectAll SelStart (только для чтения) SelStat: Integer; Индекс начала выделенной области (т.е. первый символ отмече- нного блока). См. также: TInputLine.SelectAll Validator Validator: PValidator; Указывает на объект определителя допустимости ввода, связан- ный со строкой ввода, или nil, если строка ввода не имеет объекта определителя допустимости. Для присваивания значения Validator необходимо вызвать метод SetValidator, а не делать это напрямую. См. также: TInputLine.SetValidator *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; AMaxLen: Integer); Создает прямоугольник ввода с заданными значениями аргумен- тов, вызывая конструктор Init, унаследованный от TInputLine. State устанавливается равным sfCursorVis, Options устанавливается равным (ofSelectable + ofFirstClick), и MaxLen устанавливается равным AMaxLen. Выделяет AMaxLen + 1 байт памяти, а поле Data ус- танавливается равным указателю на эту память. См. также: TView.Init, TView.sfCursorVis, TView.ofSelectable, TView.ofFirstClick Load constructor Load(var S: TStream); Создает и инициализирует объект строки ввода из потока S, вызывая сначала конструктор Load, унаследованный от TView, а затем читает целочисленные поля из потока, используя S.Read. Выделяет MaxLen+1 байт памяти для Data, а затем считывает из S байт длины строки и данные с помощью S.Read. Метод Load использу- ется совместно с TInputLine.Store для сохранения и восстановления объектов TInputLine из TStream. Переопределяйте этот метод, если Вы определяете потомков, содержащих дополнительные поля. См. также: TView.Load, TInputLine.Store, TStream.Read Done destructor Done; virtual; Переопределяемость: используется редко. Освобождает память, выделенную под Data, затем вызывает Done, унаследованный от TView, для уничтожения объекта строки ввода. См. также: TView.Done DataSize function DataSize: Word; virtual; Переопределяемость: иногда переопределяется. Возвращает размер записи для вызовов GetData и SetData. По умолчанию возвращается MaxLen+1. Переопределите этот метод, если Вы определили потомков для обработки других типов данных. См. также: TInputLine.GetData, TInputLine.SetData Draw procedure Draw; virtual; Переопределяемость: переопределяется редко. Отображает прямоугольник ввода и его данные. Прямоугольник рисуется соответствующим цветом в зависимости от того, является ли он sfFocused или нет (т.е. находится ли в отображаемом элемен- те курсор или нет), а также рисуются стрелки в случае, если стро- ка ввода превышает размер отображаемого элемента (в любом направ- лении). Любые выделенные (отмеченный блок) символы рисуются с использованием соответствующей палитры. GetData procedure GetData(var Rec); virtual; Переопределяемость: иногда переопределяется. Возвращает значение строки ввода. По умолчанию GetData запи- сывает DataSize байт из строки Data^ в Rec. GetData можно переоп- ределять при определении порожденных объектов, обрабатывающих нестроковые типы данных. Например, строка ввода чисел может прео- бразовать введенную строку к числовому отображаемому элементу и скопировать это число в Rec. При переопределении GetData нужно также переопределять SetData, чтобы она считывала те же самые данные, которые вернула GetData, а также DataSize, чтобы она возвращала размер переданных данных. См. также: TInputLine.DataSize, TInputLine.SetData GetPalette function GetPalette: PPalette; virtual; Переопределяемость: иногда переопределяется. Возвращает указатель на палитру (используемую по умолчанию) CInputLine. HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: иногда используется. Вызывает метод HandleEvent, унаследованный от TView, а затем обрабатывает все события от "мыши" и клавиатуры в случае, если выбрана строка ввода. Этот метод реализует стандартные функции редактирования. Функции редактирования включают в себя: отметку блока "мы- шью" с помощью нажатия кнопок и ее перемещения; удаление блока; управление режимами вставки и замены с автоматическим изменением формы курсора; автоматическую и "ручную" прокрутку (зависит от относительных размеров строки Data и Size.X); "ручную" горизонта- льную прокрутку с помощью "мыши" с использованием пиктограмм стрелок; "ручное" перемещение курсора с помощью стрелок, клавиш Home и End (и их стандартных эквивалентов с использованием клави- ши Ctrl); удаление символа и блока с помощью Del и Ctrl+G. Отоб- ражаемый элемент перерисовывается, как это необходимо, и поля TInputLine изменяются соответствующим образом. См. также: sfCursorIns, TView.HandleEvent, TIputLine.SelectAll SelectAll procedure SelectAll(Enable: Boolean); Устанавливает значения CurPos, FirstPos и SelStart равными 0. Если Enable равно True, то SelEnd устанавливается равным Length(Data^), выделяя таким образом всю строку ввода. Если Enable равно False, то SelEnd устанавливается равным 0, отменяя таким образом выделение всей строки. Наконец, отображаемый элемент перерисовывается вызовом DrawView. См. также: TView.DrawView SetData procedure SetData(var Rec); virtual; Переопределяемость: иногда переопределяется. По умолчанию считывает DataSize байт из Rec в строку Data^ и вызывает SelectAll(True) для того, чтобы сделать вновь заданный текст выделенным. Переопределите этот метод, если Вы определяете потомка для обработки нестроковых типов данных, использующего этот метод для преобразования Вашего типа данных в строку для последующего редактирования с помощью TInputLine. См. также: TInputLine.DataSize, TInputLine.GetData, TView.DrawView SetState procedure AetState(AState: Word; Enable: Boolean); virtual; Переопределяемость: используется редко. Вызывается в случае, когда строка ввода должна быть отобра- жена заново вследствие изменения State. Вызывает метод SetState, унаследованный от TView, для установки или сброса бит(а), переда- нного в AState в поле State строки ввода. Затем, если AState равно sfSelected или если AState равно sfActive и строка ввода является sfSelected, то вызывается SelectAll(Enable). См. также: TView.SetState, TView.DrawView SetValidator procedure SetValidator (AValid: PValidator); Если со строкой ввода уже связан объект определителя допус- тимости ввода, то SetValidator уничтожает любой такой существую- щий объект, вызывая его метод Free. Устанавливает значение Validator равным AValid. Для уничтожения всех существующих объектов определителя допустимости без создания нового необходимо передать значение nil. Store procedure Store(var S: TStream); Сохраняет отображаемый элемент в потоке, вызывая сначала метод Store, унаследованный от TView, а затем записывает 5 цело- численных полей и строку Data с помощью вызовов S.Write. Исполь- зуется совместно с TInputLine.Load для сохранения и чтения всего объекта TInputLine. Переопределите этот метод, если Вы определяе- те потомка, который содержит дополнительные поля. См. также: TView.Store, TInputLine.Load, TStream.Write Valid function Valid (Command: Word): Boolean; virtual; Если со строкой не связан объект определителя допустимости ввода или если Command равно cmCancel, то Valid возвращает значе- ние, которое было возвращено методом Valid, унаследованным от TView. Если строка ввода имеет объект определителя допустимости ввода, то она проверяет возвращенное им значение. Если Command равно cmValid, то Valid возвращает True в случае, если у опреде- лителя допустимости Status равен vsOK; в противном случае она возвращает False. Если Command отлична от cmValid или cmCancel, то Valid передает Data^ методу Valid объекта определителя допус- тимости. Если этот метод возвращает значение False, то строка ввода вызывает Select для взятия фокуса ввода, и возвращает зна- чение False. См. также: TView.Valid, TValidator.Valid *- Палитра ----------------------------------------------------------------- Строки ввода используют палитру, определенную по умолчанию, CInputLine, для отображения в элементов с 19 по 21-й стандартной палитры диалогового окна. 1 2 3 4 ЙННННСННННСННННСНННН» CInputLine є 19 і 19 і 20 і 21 є ИННСНПННСНПННСНПННСНј і і і і Пассивный ДДДДДЩ і і АДДД Стрелка Активный ДДДДДДДДДДЩ АДДДДДДДД Выделенный *- Тип TItemList Objects ----------------------------------------------------------------- Описание: TItemList = array[0..MaxCollectionSize - 1] of Pointer; Функция: Массив общих указателей, используемых внутренне объектами TCollection. *- TLabel Dialogs ----------------------------------------------------------------- Объект TLabel представляет собой текст в отображаемом элеме- нте, который может быть выбран (подсвечен) с помощью "мыши", клавишами курсора или клавишами активации Alt-буква. Метка обычно присоединяется с помощью указателя PView к другому управляющему отображаемому элементу, такому, как строка ввода, кластер или объект просмотр списка для дачи пользователю пояснений. Выбор (или нажатие) метки будет осуществлять выбор присоединенного управляющего элемента. Метка также будет подсвечиваться при выбо- ре соответствующего управляющего элемента. *- Поля ----------------------------------------------------------------- Light (только для чтения) Light: Boolean; Если True, то метка и связанный с ней управляющий элемент будут выбираться и подсвечиваться. Link (только для чтения) Link: PView; Указывает на элемент управления, связанный с этой меткой. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; AText: String; ALink: PView); Создает объект метки с заданными размером и текстом, вызывая сначала конструктор Init, унаследованный от TStaticText, а затем устанавливает поле Link для связанного элемента управления равным ALink. Поле Option устанавливается равным ofPreProcess and ofPostProcess. EventMask устанавливается равным evBroadcast. Значение поля AText назначается полю Text через метод TStaticText.Init. В AText можно задать клавишу активации для метки, окружив соответствующую букву символами тильд "~". Внимание! Никогда не следует создавать объект метки со свя- зью, равной nil. Для создания меток без связей используйте объек- ты со статическим текстом. См. также: TStaticText.Init Load constructor Load(var S: TStream); Создает и загружает объект TLabel из потока S, вызывая сна- чала конструктор Load, унаследованный от TStaticText, а затем вызывая GetPeerViewPtr(S, Link) для переустановки связи со связа- нным элементом управления. См. также: TLabel.Store Draw procedure Draw; virtual; Переопределяемость: никогда не используется. Рисует отображаемый элемент соответствующими цветами из палитры, используемой по умолчанию. GetPalette function GetPalette: PPalette; virtual; Переопределяемость: иногда переопределяется. Возвращает указатель на используемую по умолчанию палитру CLabel. HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: не переопределяется. Обрабатывает большинство событий, вызывая метод HandleEvent, унаследованный от TStaticText. Если метка получает сообщение evMouseDown или событие от клавиши активации, то выбирается свя- занный элемент управления. Этот метод также отвечает на сообщения cmReceivedFocus и cmReleasedFocus от связанного элемента управле- ния для настройки значения поля Light и перерисовки метки. См. также: TView.HandleEvent, константы команд cmXXXX Store procedure Store(var S: TStream); Сохраняет отображаемый элемент в потоке S, вызывая сначала метод Store, унаследованный от TStaticText, а затем записывает связь со связанным элементом управления, вызывая PutPeerViewPtr. См. также: TLabel.Load *- Палитра ----------------------------------------------------------------- Метки используют палитру, назначенную по умолчанию, CLabel, для отображения элементов 7, 8 и 9 палитры стандартного диалого- вого окна. 1 2 3 4 ЙННННСННННСННННСНННН» CLabel є 7 і 8 і 9 і 9 є ИННСНПННСНПННСНПННСНј і і і і Нормальный текст Щ і і АДДД Выделенная оперативная Выделенный текст ДДДДДЩ і клавиша АДДДДДДДД Обычная оперативная клавиша *- TListBox Dialogs ----------------------------------------------------------------- TListBox, порожденный от TListViewer, помогает создавать на- иболее часто используемые окна списков, отображающих наборы строк. Объекты окон-списков отображают списки таких элементов в одну или более колонок с возможной вертикальной полосой прокрут- ки. Горизонтальные полосы прокрутки, имеющиеся в TListViewer, не поддерживаются. Наследуемые методы TListViewer позволяют выбирать (и подсвечивать) элементы с помощью "мыши" или через клавиатуру. TListBox не переопределяет HandleEvent или Draw. TListBox имеет дополнительное поле List, которого нет в TListViewer. List указывает на объект набора, содержащий выводи- мые и выбираемые элементы. Ответственность за вставку данных в TCollection лежит на Вас также, как и действия, выполняемые при выборе элемента. TListViewer наследует метод Done от TView, поэтому Вы также отвечаете за освобождение содержимого List по окончании работы. Вызов NewList будет освобождать старый список, поэтому вызов NewList(nil) и последующее освобождение окна-списка будут освобо- ждать все. *- Поле ----------------------------------------------------------------- List (только для чтения) List: PCollection; List указывает на набор элементов для просмотра. Это может быть набор PString, представляющий элементы текста. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; ANumCols: Word; AScrollBar: PScrollBar); Создает окно списка с заданным размером, числом столбцов и вертикальной полосой прокрутки, на которую указывает указатель AScrollBar. Этот метод вызывает метод Init, унаследованный от TListViewer, с аргументом горизонтальной полосы прокрутки, равным nil. Поле List устанавливается равным nil (пустой список), а Range устанавливается равным 0. Ваша программа должна задать подходящий набор, содержащий строки (или другие объекты для выво- да). Поле List указывает на этот набор вследствие вызова NewList. См. также: TListViewer.Init, TListBox.NewList Load constructor Load(var S: TStream); Создает объект окна-списка и загружает его значениями из потока S, вызывая сначала конструктор Load, унаследованный от TListViewer, а затем считывает List из S с помощью S.Get. См. также: TListViewer.Load, TListBox.Store, TStream.Get DataSize function DataSize: Word; virtual; Переопределяемость: иногда переопределяется. Возвращает размер считываемых и записываемых данных для записей, передаваемых в GetData и SetData. По умолчанию TListBox.DataSize возвращает размер указателя, плюс размер слова (для List и выбранного элемента). См. также: TListBox.GetData, TListBox.SetData GetData procedure GetData(var Rec); virtual; Переопределяемость: иногда переопределяется. Записывает данные объекта TListBox в запись. По умолчанию этот метод пишет в Rec текущие поля List и Focused. См. также: TListBox.DataSize, TListBox.SetData GetText function GetText(Item: Integer; MaxLen: Integer): String; virtual; Переопределяемость: иногда переопределяется. Возвращает строку с номером Item из объекта TListBox. По умолчанию возвращаемая строка получается из элемента с номером Item в наборе строк с использованием PString(List^.At(Item))^. Если List содержит не строковые объекты, то Вам необходимо перео- пределить этот метод. Если List равно nil, то GetText возвращает пустую строку. См. также: TCollection.At NewList procedure NewList(AList: PCollection); virtual; Переопределяемость: переопределяется редко. Если AList не равно nil, то новый список, заданный с помощью AList, замещает текущий список List. Поле Range устанавливается равным полю Count нового TCollection, и первый элемент получает фокус ввода вызовом FocusItem(0). Наконец, новый список отобража- ется вызовом DrawView. Заметим, что если предыдущее поле List не равно nil, то перед присваиванием нового значения оно освобождае- тся. См. также: TListBox.SetData, TListViewer.SetRange, TListViewer.FocusItem, TView.DrawView SetData procedure SetData(var Rec); virtual; Переопределяемость: иногда используется. Заменяет текущий список значениями List и Focused, считанны- ми из Rec. SetData вызывает NewList так, чтобы новый список отоб- ражался с правильным активным элементом. Как и в случае с GetData и DataSize, Вам может понадобиться переопределить этот метод для своей программы. См. также: TListBox.DataSize, TListBox.GetData, TListBox.NewList Store procedure Store(var S:TStream); Записывает окно списка в поток S, вызывая сначала метод Store, унаследованный от TListView, а затем выводит набор в по- ток, вызывая S.Put(List). См. также: TListBox.Load, TListViewer.Store, TStream.Put *- Палитра ----------------------------------------------------------------- Окна списка используют палитру (назначенную по умолчанию) CListViewеr, для отображения элементов с 26 по 29 стандартной палитры программы. 1 2 3 4 5 ЙНННСНННСНННСНННСННН» CListViewer є 25і 26і 27і 28і 29є ИНСНПНСНПНСНПНСНПНСНј і і і і і Активный ДДДДЩ і і і АДД Разделитель Неактивный ДДДДДДДДЩ і АДДДДДД Выделенный Текущий ДДДДДДДДДДДДЩ *- TListViewer Views ----------------------------------------------------------------- TListViewer представляет собой базовый тип, производными от которого являются различные объекты просмотра списков, такие, как TListBox. Базовые поля и методы TListViewer обеспечивают следую- щие функциональные возможности: - отображаемый элемент для вывода связанных списков элемен- тов (но не списков); - управление одной или двумя полосами прокрутки; - возможности прокрутки списков в двух измерениях; - загрузка и сохранения отображаемого элемента и его полос прокрутки в/из потока; - возможность выбора (подсветки) элемента списка с помощью "мыши" или клавиатуры; - метод Draw, выполняющий копирование с изменением размера и прокруткой. TListViwer содержит абстрактный метод GetText, поэтому Вам необходимо обеспечить механизм для создания и обработки текста в выводимых элементах. TListViewer не располагает собственным механизмом сохранения списка. TListViwer можно использовать для вывода на экран прокру- чиваемых списков массивов, связанных списков или подобных струк- тур данных. Можно также использовать потомков TListViwer (таких, как TListBox), которые связывают набор с объектом просмотра (ви- зуализатором) списка. *- Поля ----------------------------------------------------------------- Focused (только для чтения) Focused: Integer; Номер текущего элемента. Элементы нумеруются от 0 до Range - 1. Init устанавливает Focused равным 0 (первый элемент), а затем его можно изменить с помощью кнопки "мыши" или клавиши пробела. HScrollBar (только для чтения) HScrollBar: PScrollBar; Указатель на связанную с данным отображаемым элементом гори- зонтальную полосу прокрутки. В случае значения nil (пусто) полоса прокрутки отсутствует. NumCols (только для чтения) NumCols: Integer; Число столбцов в окне просмотра списка. Range (только для чтения) Range: Integer; Текущее общее число элементов в списке. Элементы нумеруются от 0 до Range - 1. См. также: TListViewer.SetRange TopItem (чтение/запись) TopItem: Integer; Номер первого выводимого элемента. Элементы нумеруются с 0 до Range - 1. Этот номер зависит от числа столбцов, размера обла- сти просмотра и значения Range. См. также: Range VScrollBar (только для чтения) VScrollBar: PScrollBar; Указатель на связанную с данным отображаемым элементом вер- тикальную полосу прокрутки. В случае значения nil (пусто) полоса прокрутки отсутствует. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; ANumCols: Integer; AHscrollBar, AVScrollBar: PScrollBar); Создает и инициализирует объект TListViewer с заданным раз- мером, вызывая сначала конструктор Init, унаследованный от TView. Поле NumCols устанавливается равным ANumCols. Options устанавли- вается равным (ofFirstClick + ofSelectable), благодаря чему нажа- тия кнопок "мыши", которые используются при выборе отображаемого элемента, будут передаваться HandleEvent. EventMask устанавливае- тся равным evBroadcast. Начальные значения Range и Focused равны 0. Значения VScrollBar и HScrollBar устанавливаются равными вер- тикальным и/или горизонтальным полосам прокрутки, переданным в аргументах AVScrollBar и AHScrollBar. Если Вы устанавливаете допустимые полосы прокрутки, то Init настроит их поля ArStep и PgStep в соответствии с размером TListViewer и числом столбцов. Например, для TListViewer, состоящего из одного столбца, по умолчанию вертикальное значение PgStep равно Size.Y - 1, а вертикальное значение ArStep равно 1. См. также: TView.Init, TScrollBar.SetStep. Load constructor Load(var S: TStream); Создает и загружает объект просмотра списка из потока S, вызывая сначала конструктор Load, унаследованный от TView, а затем считывает полосы прокрутки с помощью вызова GetPeerViewPtr, после чего считывает целочисленные поля с помощью S.Read. См. также: TView.Load, TListViewer.Store ChangeBounds procedure ChangeBounds(var Bounds: TRest); virtual; Переопределяемость: не используется. Изменяет размер объекта просмотра списков, вызывая метод ChangeBounds, унаследованный от TView. В случае наличия горизон- тальной полосы прокрутки данный метод настраивает значение PgStep как это необходимо. См. также: TView.ChangeBounds. TScrollBar.ChangeStep. Draw procedure Draw; virtual; Переопределяемость: не используется. Отображает объект просмотра списков, используя назначенную по умолчанию палитру, вызывая GetText для каждого отображаемого элемента. Учитываются текущий и выбранный элемент, а также состо- яние sfActive. См. также: TListViewer.GetText FocusItem procedure FocuseItem(Item: Integer); virtual; Переопределяемость: не используется. Устанавливая значение поля Focused равным Item, делает зада- нный элемент текущим. Этот метод также устанавливает поле Value вертикальной полосы прокрутки (если она имеется) равным Item и настраивает поле TopItem. См. также: TListViewer.IsSelected, TScrollBar.SetValue. GetPalette function GetPalette: PPalette; virtual; Переопределяемость: иногда используется. Возвращает указатель на используемую по умолчанию палитру CTListViewer. GetText function GetText(Item: Integer; MaxLen: Integer): String; virtual; Переопределяемость: всегда переопределяется. Это абстрактный метод. Производные типы должны обеспечивать механизм для возврата строки для элемента (Item), длина которой не превышает MaxLen. См. также: TListViewer.Draw. HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: используется редко. HandleEvent обрабатывает большую часть событий, вызывая метод HandleEvent, унаследованный от TView. Нажатия кнопок "мыши" и "автоматические" перемещения по списку будут изменять текущий элемент. Элемент можно выбрать с помощью двойного нажатия кнопки "мыши". Обрабатываются также события от клавиатуры: клавиша про- бела осуществляет выбор текущего элемента, а клавиши управления курсором, PgUp, PgDn, Ctrl+PgDn, Ctrl+PgUp, Home, End используют- ся для установки текущего элемента. Наконец события, вызванные полосами прокрутки, обрабатываются путем изменения текущего эле- мента и новым отображением области просмотра, как это потребует- ся. См. также: TView.HandleEvent, TLiatViewer.FocusItem IsSelected function IsSelected(Item: Integer): Boolean; virtual; Переопределяемость: иногда переопределяется. Возвращает значение True, если заданный элемент Item являет- ся текущим, то есть Item = Focused. Может быть переопределен для создания объекта просмотра с множественным выбором. См. также: TListViewer.FocusItem SelectItem procedure SelectItem(Item: Integer); virtual; Переопределяемость: иногда используется. Осуществляет выбор элемента списка с индексом Item и уведом- ляет об этом равнозначные ему объекты. Метод SelectItem, опреде- ленный по умолчанию, посылает своему владельцу cmListItemSelected следующим образом: Message (Owner, evBroadcast, cmListItemSelected, $Self); См. также: TListViever.FocusItem SetRange procedure SetRange(ARange: Integer); Устанавливает поле Range равным ARange. Если объект просмот- ра использует вертикальную полосу прокрутки, то ее параметры соответствующим образом настраиваются. Если текущий элемент не попадает в новый диапазон Range, то поле Focused устанавливается равным нулю. См. также: TListViewer.Range, TScrollBar.SetParams SetState procedure SetState(AState: Word; Enable: Boolean); virtual; Переопределяемость: используется редко. Если Enable имеет значение True, то вызывает метод SetState, унаследованный от TView, для изменения состояния объекта TListViewer. В зависимости от значения аргумента AState, это мо- жет привести к тому, что область просмотра будет выведена на эк- ран или "скрыта". Кроме того, если AState имеет значение sfSelected and sfActive, то полосы прокрутки отображаются заново. Если AState имеет значение sfSelected, но не sfActive, то полосы прокрутки будут "скрыты". См. также: TView.SetState, TScrollBar.Show, TScrollBar.Hide Store procedure Store(var S: TStream); Записывает объект просмотра списка в поток S, вызывая метод Store, унаследованный от TView, а затем записывает объекты полосы прокрутки (если таковые имеются) с помощью PutPeerViewPtr, и, наконец, используя S.Write, сохраняет целочисленные поля. См. также: TView.Store, TListViewer.Load *- Палитра ----------------------------------------------------------------- Объекты просмотра списков используют назначенную по умолча- нию палитру CListViewer для отображения элементов 26-29 стандарт- ной палитры программы. 1 2 3 4 5 ЙНННСНННСНННСНННСННН» CListViewer є 25і 26і 27і 28і 29є ИНСНПНСНПНСНПНСНПНСНј і і і і і Активен ДДДДДЩ і і і АДДДДДДДД Разделитель Неактивен ДДДДДДДДДЩ і АДДДДДДДДДДДД Выбранный Текущий ДДДДДДДДДДДДДЩ *- TLookupValidator Validate ----------------------------------------------------------------- Определитель допустимости соответствия сравнивает строки, вводимые пользователем, с перечнем допустимых значений. TLookupValidator представляет собой абстрактный тип объекта контроля допустимости, на базе которого можно создавать полезные определители допустимости. Копии TLookupValidator никогда не создаются. При создании типа определителя допустимости необходимо указать список допустимых элементов и переопределить метод Lookup так, чтобы он возвращал True только в случае совпадения элемента, введенного пользователем, с элементом списка. Одним из примеров работающего определителя допустимости, порожденного от TLookupValidator, является TStringLookupValidator. *- Методы ----------------------------------------------------------------- IsValid function IsValid (const S: string): Boolean; virtual; Вызывает Lookup для поиска строки S в списке допустимых элементов ввода. Возвращает True в случае, если Lookup вернет True, что означает, что Lookup нашла S в списке; в противном случае возвращает False. См. также: TLookupValidator.Lookup Lookup function Lookup (const S: string): Boolean; virtual; Производит поиск строки S в списке допустимых элементов ввода и возвращает True в случае, если находит S; в противном случае возвращает False. Метод Lookup объекта LookupValidator является абстрактным методом, который всегда возвращает False. Порожденные типы определителя допустимости соответствия должны переопределять Lookup для обеспечения поиска, основанного на истинном списке приемлемых элементов. *- Объект TMemo Editors ----------------------------------------------------------------- Объект комментария представляет собой специализированный объект, порожденный стандартным объектом редактора, и предназна- ченный быть управляющим элементом внутри диалогового окна или бланка. Он поддерживает клавишу табуляции и механизм GetData/SetData, а также имеет палитру, сходную с палитрой объекта редактора. *- Методы ----------------------------------------------------------------- Load constructor Load(var S: TStream); Считывает объект комментария из потока S, вызывая сначала конструктор Load, унаследованный от TEditor, а затем считывает длину буфера текста и текст, связанный с редактором. См. также: TEditor.Load DataSize function DataSize: Word; virtual; Возвращает размер данных, переданных GetData и SetData. По умолчанию этот размер составляет длину буфера плюс размер слова длины. См. также: TMemo.GetData, TMemo.SetData GetData procedure GetData (var Rec); virtual; Копирует DataSize байт из буфера редактора текста в Rec. GetData рассматривает Rec как запись TMemoData, устанавливая поле Length равным BufLen, а затем копирует текст из текстового буфера в поле Buffer. Если текст не заполняет всего буфера, то Rec запо- лняется нулевыми символами. GetData позволяет программе читать текст из поля комментария в диалоговом окне или бланке с данными. См. также: TMemo.DataSize, TMemo.SetData GetPalette function GetPalette: PPalette; virtual; Возвращает указатель на используемую по умолчанию палитру CMemo. HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: используется редко. Вызывает метод HandleEvent, унаследованный от TEditor в случае, если событие не является алфавитно-цифровым символом или символом табуляции. Это обеспечивает тот факт, диалоговое или обычное окно, владеющее отображаемым элементом комментария, полу- чит символ табуляции для обработки. См. также: TEditor.HandleEvent SetData procedure SetData (var Rec); virtual; Копирует DataSize байт информации из Rec для инициализации буфера данных. SetData рассматривает Rec как запись TMemoData, используя поле Length для установки размера буфера комментария и копируя символы в поле Buffer до конца буфера редактирования. Store procedure Store(var S: TStream); Записывает объект комментария в поток S, вызывая сначала метод Store, унаследованный от TEditor, а затем записывает длину буфера редактирования и текст из буфера. См. также: TEditor.Store *- Палитра ----------------------------------------------------------------- Объекты комментария используют назначенную по умолчанию палитру CMemo для отображения элементов 26-27 стандартной палитры диалогового окна. 1 2 ЙНННСННН» CMemo є 26і 27є ИНСНПНСНј і і НормальныйДДДДДЩ АДДДДДДД Подсвеченный *- Тип TMemoData Editors ----------------------------------------------------------------- Описание: TMemoData = record Length: Word; Buffer: TEditBuffer; end; Функция: Объекты TMemo используют записи TMemoData в своих методах GetData и SetData для чтения и записи длины их текстовых буферов и реального текста буфера. *- Тип TMenu Menus ----------------------------------------------------------------- Описание: TMenu = record Items: PMenuItem; Default: PMenuItem); end; Функция: Тип TMenu представляет один уровень дерева меню. Поле Items указывает на список записей TMenuItems, а поле Default указывает на выбираемый по умолчанию элемент внутри этого списка (элемент выбирается по умолчанию при открытии этого меню). Объект TMenuView (потомками которого являются TMenuBar и TMenuBox) имеет поле Menu, которое указывает на TMenu. Записи TMenu создаются и удаляются с помощью подпрограмм NewMenu и DisposeMenu. См. также: TMebuView, TMenuItem, NewMenu, DisposeMenu, поле TMenuView.Menu *- TMenuBar Menu ----------------------------------------------------------------- Объект TMenuBar представляет собой горизонтальную строку меню, из которой элементы меню можно выбирать следующими способа- ми: - с помощью нажатия кнопки "мыши"; - с помощью клавиши F10 и клавиш активации; - с помощью выбора (подсветки) элемента и нажатия клавиши Enter; - с помощью оперативных клавиш. В верхней части строки меню выводятся основные значения выбора меню. Это реализуется с помощью объекта TMenuBar, владель- цем которого обычно является объект TAplication. Подменю выводят- ся в объектах типа TMenuBox. TMenuBar и TMenuBox являются потом- ками абстрактного типа TMenuView (это непосредственный потомок TView). Для большинства программ Turbo Vision Вам не придется рабо- тать непосредственно с объектами меню. Переопределив один раз метод программы InitMenuBar для введения структуры меню с исполь- зованием вложенных вызовов New, NewSubMenu, NewItem и NewLine, определенное по умолчанию поведение меню обрабатывает создание и управление отображаемыми элементами меню. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; AMenu: PMenu); Создает строку меню с заданными границами Bounds, вызывая конструктор Init, унаследованный от TMenuView. Устанавливает GrowMode равным gfGrowHiX. Чтобы работали оперативные клавиши, поле Options устанавливается равным ofPreProcess. Поле Menu уста- навливается равным AMenu, обеспечивая пункты меню. См. также: TMenuView.Init, флаги увеличения размера gfXXXX, флаги параметров ofXXXX, TMenuView.Menu Done destructor Done; virtual; Освобождает память, занимаемую объектом меню, вызывая снача- ла деструктор Done, унаследованный от TMenuView, а затем вызывает DisposeMenu для освобождения памяти из-под списков пунктов меню. См. также: TMenuView.Done, процедуру DisposeMenu Draw procedure Draw; virtual; Переопределяемость: используется редко. Отображает строку меню, используя назначенную по умолчанию палитру. Чтобы установить для меню правильные значения цветов, считываются поля Name и Disabled каждой записи TMenuItem в связа- нном списке. Текущий (подсвеченный) элемент Current подсвечивает- ся. GetItemRect procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual; Переопределяемость: не переопределяется. Переопределяет абстрактный метод в TMenuView. Возвращает в параметре R прямоугольник, занятый текущим элементом меню. HandleEvent использует GetItemRect для определения того, нажата ли кнопки "мыши" на данном пункте меню. См. также: TMenuView.GetItemRect *- Палитра ----------------------------------------------------------------- Строки меню, как и все отображаемые элементы меню, для отоб- ражения 2-7 элементов стандартной палитры программы используют назначенную по умолчанию палитру CMenuView. 1 2 3 4 5 6 ЙННННСННННСННННСННННСННННСНННН» CMenuView є 2 і 3 і 4 і 5 і 6 і 7 є ИННСНПННСНПННСНПННСНПННСНПННСНј і і і і і і Обычный текст ДДДДДДДДДДЩ і і і і АДД Выбранная Текст запрещен ДДДДДДДДДДДДДДДЩ і і і клавиша Текст клавиши ДДДДДДДДДДДДДДДДДДДДЩ і і активации активации і АДД Выбранный зап- і рещенный текст АДДДДД Выбранный обычный текст *- TMenuBox Menu ----------------------------------------------------------------- Объект TMenuBox представляет собой вертикальное меню. Оно может содержать произвольный список выбираемых действий, включая элементы-подменю. Как и в строке меню, для указания недоступных элементов используется отметка цветом. Вертикальные меню могут реализовываться как подменю строки меню или других вертикальных меню, либо использоваться в качестве всплывающих меню. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; AMenu: PMenu; AParentMenu: PMenuView); Init настраивает параметр Bounds таким образом, чтобы он соответствовал длине и высоте элементов в AMenu, а затем создает вертикальное меню, вызывая конструктор Init, унаследованный от TMenuView. Бит ofPreProcess поля Options устанавливается таким образом, что будут работать оперативные клавиши. State устанавливается, чтобы включить ofShadow. Поле Menu устанавливается равным AMenu, что обеспечивает выбор элементов меню. Поле ParentMenu устанавли- вается равным AParentMenu. См. также: TMenuView.Init, флаги состояния sfXXXX, флаги па- раметров ofXXXX, TMenuView.Menu, TMenuView.ParentMenu. Draw procedure Draw; virtual; Переопределение: переопределяется редко. Отображает окно меню с рамкой и пункты меню, используя наз- наченные по умолчанию цвета. GetItemRect procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual; Переопределение: используется редко. Переопределяет абстрактный метод в TMenuView. Возвращает прямоугольник, занимаемый данным элементом меню. HandleEvent вызывает GetItemRect для определения того, произошло ли нажатие кнопки "мыши" над данным пунктом меню. См. также: TMenuView.GetItemRect *- Палитра ----------------------------------------------------------------- Вертикальные меню, как и все отображаемые элементы меню, для отображения 2-7 элементов стандартной палитры программы использу- ют назначенную по умолчанию палитру CMenuView. 1 2 3 4 5 6 ЙННННСННННСННННСННННСННННСНННН» CMenuView є 2 і 3 і 4 і 5 і 6 і 7 є ИННСНПННСНПННСНПННСНПННСНПННСНј і і і і і і Обычный текст ДДДДДДДДДДЩ і і і і АДД Выбранная Текст запрещен ДДДДДДДДДДДДДДДЩ і і і клавиша Текст клавиши ДДДДДДДДДДДДДДДДДДДДЩ і і активации активации і АДД Выбранный зап- і рещенный текст АДДДДД Выбранный обычный текст *- Тип TMenuItem Menus ----------------------------------------------------------------- Описание: TMenuItem = record Next: PMenuItem; Name: PString; Command: Word; Disabled: Boolean; KeyCode: Word; HelpCtx: Word; case Integer of 0: (Param: PString); 1: (SubMenu: PMenu); end; end; Функция: Тип TMenuItem представляет собой элемент меню, который может быть обычным элементом, подменю или строкой-разде- лителем. Next указывает на следующий TMenuItem в списке элементов меню, или равен nil, если это последний элемент. Поле Name указы- вает на строку, содержащую имя элемента меню или равно nil, если элемент меню является строкой-разделителем. Command содержит событие-команду (см. константы cmXXXX), генерируемую при выборе элементов меню или 0, если элемент меню представляет собой подме- ню. Disabled равно True, если пункт меню недоступен, и False в противном случае. KeyCode содержит скан-код оперативной клавиши, связанной с пунктом меню или 0, если с пунктом меню не связана оперативная клавиша. HelpCtx содержит номер контекста подсказки пункта меню (значение hcNoContext указывает на то, что элемент меню не имеет контекста подсказки). Если пункт меню - это обычный пункт, то поле Param содержит указатель на строку параметра (отображаемый справа от элемента в TMenuBox) или nil, если эле- мент не имеет строки параметров. Если элемент меню - это подменю (Command = 0), то Submenu указывает на структуру подменю. Записи TMenuItem создаются с использованием функций NewItem, NewLine и NewSubmenu. См. также: TMenu, TMenuView, NewItem, NewLine, NewSubMenu *- Тип TMenuStr Menus ----------------------------------------------------------------- Описание: TMenuStr = string[31]; Функция: Тип строки, используемый NewItem и NewSubMenu. Максимальный размер заголовка элемента меню составляет 31 символ. См. также: NewItem, NewSubMenu *- TMenuView Menu ----------------------------------------------------------------- TMenuView обеспечивает абстрактный тип меню, производными от которого являются полосы меню и вертикальные меню (всплывающие или опускающихся). Возможно, Вам никогда не потребуется самостоя- тельно создавать экземпляр TMenuView. *- Поля ----------------------------------------------------------------- Current (только для чтения) Current: PMenuItem; Указатель на выбранный в текущий момент пункт меню. Menu (только для чтения) Menu: PMenu; Указатель на запись TMenu для данного меню, которая содержит связанный список элементов меню. Указатель Menu позволяет полу- чить доступ ко всем полям элементов меню данного отображаемого элемента меню. См. также: TMenuView.FindItem, TMenuView.GetItemRect, тип TMenu ParentMenu (только для чтения) ParentMenu: PMenuView; Указатель на отображаемый элемент меню, который является владельцем данного меню. Заметим, что TMenuView не является груп- пой. Принадлежность здесь представляет собой гораздо более прос- тую концепцию, чем принадлежность в TGroup, и позволяет использо- вать вложенные меню: выбирать подменю и возвращаться обратно в порождающие меню. Например, выбор в строке меню обычно приводит в выводу "опускающегося" меню. Строка меню представляет собой в этом случае порождающее меню для вертикального меню. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect); Создает отображаемый элемент меню с размерами Bounds, вызы- вая конструктор Init, унаследованный от TView. Устанавливает EventMask равным evBroadcast. Данный метод не предназначен для создания экземпляров объектов TMenuView. Он разработан скорее для вызова порожденными типами, такими, как TMenuBar и TMenuBox. См. также: TView.Init, evBroadcast, TMenuBar.Init, TMenuBox.Init. Load constructor TMenuView.Load(var S: TStream); Создает объект отображаемого элемента меню и загружает его из потока S, вызывая сначала конструктор Load, унаследованный от TView, а затем считывая элементы списка меню. См. также: TView.Load, TMenuView.Store Execute function Execute: Word; virtual; Переопределение: не переопределяется. Запускает отображаемый элемент меню до тех пор, пока пользо- ватель не выберет пункт меню или не завершит процесс. Возвращает команду, присвоенную выбранному пункту меню, или 0, если меню было закрыто. Данный метод не должен вызываться иначе, кроме как ExecView. См. также: TGroup.ExecView FindItem function FindItem(Ch: Char): PMenuItem; Возвращает указатель на элемент меню, имеющий клавишу акти- вации Ch (подсвеченный символ). Если такой пункт меню не найден или данный пункт меню недоступен, возвращает значение nil. Заме- тим, что регистр символа Ch (строчная или прописная буква) значе- ния не имеет. GetItemRect procedure GetIterRect(Item: PMenuItem; var R: TRect); virtual; Переопределение: переопределяется всегда. Данный метод возвращает в R прямоугольник, занимаемый теку- щим пунктом меню. Он используется для определения того, была ли кнопка "мыши" нажата на данном пункте меню. Чтобы отвечать на события "мыши", потомки TMenuView должны переопределять данный метод. См. также: TMenuBar.GetItemRect, TMenuBox.GetItemRect GetHelpCtx function GetHelpCtx: Word; virtual; Переопределение: иногда переопределяется. По умолчанию данный метод возвращает контекст подсказки для данного пункта меню. Если это hcNoContext, то проверяется текущий контекст в порождающем меню. Если порождающее меню отсутствует, то GetHelpCtx возвращает hcNoContext. См. также: константы контекста подсказки hcXXXX GetPalette function GetPalette: PPalette; virtual; Переопределение: иногда переопределяется. Возвращает указатель на заданную по умолчанию палитру CMenuBar. HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределение: не переопределяется. Вызывается каждый раз, когда необходимо обработать событие меню. Определяет, какой пункт меню был выбран с помощью "мыши" или клавиатуры (включая оперативные клавиши), и с помощью PutEvent генерирует соответствующую команду-событие. Также отвечает на cmCommandSetChanged, при необходимости обновляя активные пункты. См. также: TView.HandleEvent, TViewPutEvent HotKey function HotKey(KeyCode: Word): PMenuItem; Возвращает указатель на пункт меню, связанный с оперативной клавишей, определяемой параметром KeyCode. Если такого пункта не существует или пункт недоступен, то возвращает значение nil. Оперативные клавиши представляют собой обычно функциональные клавиши или комбинации с клавишей Alt, определяемые вызовами NewItem и NewSubMenu в InitMenuBar. Данный метод используется HandleEvent для определения того, выбирается ли при нажатии кла- виши пункт меню. NewSubView function NewSubView (var Bounds: TRect; AMenu: PMenu; AParentMenu: PMenuView): PMenuView; virtual; Создает новое вертикальное меню с заданными значениями пара- метров Bounds, AMenu и AParentMenu, и возвращает указатель на него. Store procedure Store(var S: TStream); Сохраняет объект отображаемого элемента меню (и все его подменю) в потоке S, вызывая сначала метод Store, унаследованный от TView, а затем записывает в поток каждый пункт меню. См. также: TMenuView.Load *- Палитра ----------------------------------------------------------------- Все отображаемые элементы меню используют для отображения 2 - 7 записей стандартной палитры прикладной программы назначенную по умолчанию палитру CMenuView. 1 2 3 4 5 6 ЙННННСННННСННННСННННСННННСНННН» CMenuView є 2 і 3 і 4 і 5 і 6 і 7 є ИННСНПННСНПННСНПННСНПННСНПННСНј і і і і і і Обычный текст ДДДДДДДДДДЩ і і і і АДД Выбранные Текст недоступныйДДДДДДДДДДДДДЩ і і і оперативные Текст оперативнойДДДДДДДДДДДДДДДДДДЩ і і клавиши клавиши і АДД Выбранный і недоступный текст АДДДД Выбранный обычный текст *- Объект TMonoSelector ColorSel ----------------------------------------------------------------- Отображаемый элемент монохромного селектора позволяет поль- зователю выбирать монохромные видео-атрибуты для выводимых пунк- тов способом, сходным с тем, каким выбираются соответствующие цвета для цветного дисплея. Возможные атрибуты: обычный, выделен- ный, подчеркнутый и инверсный. Несмотря на то, что монохромный селектор похож на кнопки с зависимой фиксацией, на самом деле он происходит непосредственно от TCluster. Подробности о TMonoSelector включены в оперативную подсказ- ку. *- TMultiCheckBoxes Dialogs ----------------------------------------------------------------- Поля ----------------------------------------------------------------- Flags Flags: Word; Flags представляет собой битовое поле, содержащее одну из констант cfXXXX. См. также: константы cfXXXX SelRange SelRange: Byte; SelRange представляет собой действительное число состояний, которое может иметь кластер многопозиционных кнопок с независимой фиксацией. States States: PString States указывает на строку, содержащую символы, представляю- щие каждое из возможных состояний многопозиционной кнопки с неза- висимой фиксацией. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; AStrings: PSItem; ASelRange: Byte; AFlags: Word; const AStates: String); Создает кластер многопозиционных кнопок с независимой фикса- цией, вызывая сначала конструктор Init, унаследованный от TCluster, а затем устанавливает значения полей SelRange и Flags равными значениям, переданным в параметрах ASelRange и AFlags соответственно, и выделяет динамическую память под копию AStates и присваивает это значение States. ASelRange показывает число состояний, которое может иметь каждая кнопка с независимой фиксацией. AFlags является одной из констант cfXXXX, указывающих, сколько бит из Value представляют каждую многопозиционную кнопку с независимой фиксацией. AState содержит символ, показываемый для каждого возможного состояния. См. также: TCluster.Init Load constructor Load(var S: TStream); Создает и загружает кластер многопозиционных кнопок с неза- висимой фиксацией из потока S, вызывая сначала конструктор Load, унаследованный от TCluster, а затем считывая значения полей, введенных TMultiCheckBoxes. См. также: TCluster.Load Done destructor Done; virtual; Освобождает память из-под объекта кластера многопозиционных кнопок с независимой фиксацией, освобождая сначала динамические строки States, а затем вызывая деструктор Done, унаследованный от TCluster. DataSize function DataSize: Word; virtual; Возвращает размер данных, переданных GetData и SetData, который равен SizeOf (Longint). См. также: TMultiChechBoxes.GetData, TMultiCheckBoxes.SetData Draw procedure Draw; virtual; Переопределяемость: никогда не используется. Рисует кластер многопозиционных кнопок с независимой фикса- цией, изображая каждую кнопку по порядку, используя ту же рамку, что и для обычной кнопки с независимой фиксацией, но с использо- ванием символов из States для представления состояния каждой кнопки взамен обычных 'X', или пустого поля. GetData procedure GetData (var Rec); virtual; Преобразует Rec в тип Longint и копирует в него Value. MultiMark function MultiMark (Item: Integer): Byte; virtual; Возвращает состояние кнопки с независимой фиксацией с номе- ром Item в кластере. Press procedure Press (Item: Integer); virtual; Изменяет состояние многопозиционной кнопки с независимой фиксацией с номером Item в кластере. В отличие от обычных кнопок с независимой фиксацией, которые просто изменяют состояние вклю- чено/выключено, многопозиционные кнопки циклически изменяют сос- тояние между всеми возможными состояниями. SetData procedure SetData (var Rec); virtual; Преобразует Rec в тип Longint и копирует его значение в Value, после чего вызывает DrawView для перерисовки кнопок, чтобы отразить их новое состояние. Store procedure Store(var S: TStream); Записывает кластер многопозиционных кнопок в поток S, вызы- вая сначала метод Store, унаследованный от TCluster, а затем записывает поля, введенные TMultiCheckBoxes. См. также: TCluster.Store *- Тип TNode Outline ----------------------------------------------------------------- Описание: TNode = record Next: PNode; Text: PString; ChildList:PNode; Expanded: Boolean; end; Функция: Объекты иерархической структуры используют записи типа TNode для хранения списков связанных строк, составляющих иерархическую структуру. Каждая узловая запись содержит текст для этого элемента иерархической структуры в ее поле Text. ChildList указывает на первый элемент в списке подчиненных узлов или nil, если нет элементов, подчиненных этому узлу. Next указывает на следующий узел того же уровня, что и текущий. Expanded равно True в случае, если отображаемый элемент иерархической структуры пока- зывает подчиненные отображаемые элементы, перечисленные в ChildList, или False, если подчиненные узлы невидимы. При создании Вашего собственного списка иерархической струк- туры необходимо заводить новые узлы с помощью функции NewNode, а избавляться от них с помощью DisposeNode. См. также: процедуру DisposeNode, функцию NewNode *- TObject Objects ----------------------------------------------------------------- TObject представляет собой начальную точку иерархии объектов Turbo Vision. Как базовый объект, он не имеет порождающих объек- тов, но имеет много порожденных. Фактически, за исключением TPoint и TRect, все стандартные объекты Turbo Vision являются в итоге производными от TObject. Любой объект, который использует средства потоков Turbo Vision, должен отлеживать свою "родословную" от TObject. *- Методы ----------------------------------------------------------------- Init constructor Init; Выделяет для объекта память в динамически распределяемой области и заполняет ее нулями. Вызывается всеми конструкторами производных объектов. Заметим, что TObject.Init будет обнулять все поля потомков, поэтому Вы должны всегда вызывать TObject.Init перед инициализа- цией любых полей в конструкторах производных объектов. Done destructor Done; virtual; Выполняет необходимую очистку и освобождение памяти для динамических объектов. Free procedure Free; Уничтожает объект и вызывает деструктор Done. *- TOutLine OutLine ----------------------------------------------------------------- TOutLine реализует простой, но полезный тип визуализатора иерархических структур. Он предполагает, что иерархическая струк- тура представляет собой связанный список записей типа TNode, так, что каждый узел состоит из строки текста, указателя на порожден- ные узлы и указателя на следующий узел того же уровня. *- Поле ----------------------------------------------------------------- Root Root: PNode; Указывает на корневой узел дерева иерархии. *- Методы ----------------------------------------------------------------- Init constructor Init (var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar; ARoot: PNode); Создает отображаемый элемент иерархической структуры, пере- давая Bounds, AHScrollBar и AVScrollBar конструктору Init, унас- ледованному от TOutlineViewer. Устанавливает Root равным ARoot, а затем вызывает Update, для установки пределов прокрутки отобража- емого элемента, основываясь на данных, содержащихся в иерархичес- кой структуре. См. также: TScroller.Init Done destructor Done; virtual; Уничтожает отображаемый элемент иерархической структуры, уничтожая сначала корневой узел, который последовательно уничто- жает все порожденные узлы, а затем вызывает деструктор Done, унаследованный от TScroller. См. также: TScroller.Done Adjust procedure Adjust (Node: Pointer; Expand: Boolean); virtual; Устанавливает значение поля Expanded из Node равным значе- нию, переданному в Expand. Если Expand равно True, то порожденные узлы, связанные с Node, делаются видимыми. Если Expand равно False, то порожденные Node узлы делаются невидимыми. GetRoot function GetRoot: Pointer; virtual; Возвращает Root, указывающий на вершину списка узлов иерар- хии. GetNumChildren function GetNumChildren (Node: Pointer): Integer; virtual; Возвращает количество узлов в списке ChildList узла Node или ноль в случае, если ChildList равно nil. GetChild function GetChild (Node: Pointer; I: Integer): Pointer; virtual; GetText function GetText (Node: Pointer): String; virtual; Возвращает строку, на которую указывает поле Text узла Node. HasChildren function HasChildren (Node: Pointer): Boolean; virtual; Возвращает True в случае, если ChildList узла Node не равен nil; в противном случае возвращает False. IsExpanded function IsExpanded (Node: Pointer): Boolean; virtual; Возвращает значение поля Expanded узла Node. *- TOutlineViewer Outline ----------------------------------------------------------------- Тип объекта визуализатора иерархических структур обеспечива- ет абстрактные методы для отображения, раскрытия и прохождения по элементам иерархической структуры. TOutlineViewer, однако, не делает предположений об элементах структуры. Потомки TOutlineViewer, такие, как TOutline, отображают иерархические структуры со специфическими типами элементов. *- Поле ----------------------------------------------------------------- Foc Foc: Integer; Указывает номер активного узла иерархической структуры. *- Методы ----------------------------------------------------------------- Init constructor Init (var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar); Создает объект визуализатора иерархической структуры, вызы- вая сначала конструктор Init, унаследованный от TScroller, пере- давая Bounds, AHScrollBar и AVScrollBar. Устанавливает GrowMode равным gfGrowHiX + gfGrowHiY и устанавливает Foc равным нулю. См. также: TScroller.Init Adjust procedure Adjust (Node: Pointer; Expand: Boolean); virtual; Adjust представляет собой абстрактный метод, которые порож- денные типы визуализатора иерархических структур должны переопре- делять для отображения порожденных узлов в случае равенства Expand True, и скрыть их в случае равенства Expand False. Вызывается в случае, когда пользователь раскрывает или скрывает содержимое узла Node. Если HasChildren возвращает для Node значение False, то Adjust никогда не будет вызываться для этого узла. См. также: TOutlineViewer.HasChildren CreateGraph function CreateGraph (Level: Integer; Lines: Longint; Flags: Word; LevWidth, EndWidth: Integer; const Chars: String): String; Выводит графическую строку, пригодную для возврата из GetGraph. Level указывает уровень иерархической структуры. Lines представляет собой набор бит, описывающих уровень, имеющий метку "продолжение" (обычно это вертикальная линия). Например, если установлен бит 3, то уровень 3 продолжается за пределы этого уровня. Flags дает дополнительную информацию о том, как изображать окончания графика (см. константы ovXXXX). LevWidth представляет собой число символов, которое надо отступить для каждого уровня. EndWidth представляет собой длину последних символов. График делится на две части: метки уровня и окончание графи- ка узлов. Метки уровня состоят из символа Метки Уровня, разделен- ного Заполнителем Уровня. То, какие метки присутствуют, определя- ется Lines. Окончание графика создается помещением одного из символов Конец первого, за которым следуют EndWidth - 4 символов Заполни- теля конца, за которыми следует символ Конец порожденного, а затем - символ Скрыть/Раскрыть. Если EndWidth равно 2, то исполь- зуются символы Конец первого и Скрыть/Раскрыть. Если EndWidth равно 1, то используется только символ Скрыть/Раскрыть. Flags оп- ределяет символы, которые будут выбираться. В строке Chars содержатся следующие символы: 1 2 3 4 5 6 7 8 ЙННННСННННСНННННСНННННСНННСНННННСНННСНННН» є і і і Г і А і - і - і + і - є ИНСННПНШННПНСПННПННШННПНСНПННСННПНСНПНСННј Заполнитель і і і і і і і А Раскрытый уровня ДДДДДЩ і і і і і і і і і і і і Метка і і і і і АДДД Скрытый уровня ДДДДДДДДДДДЩ і і і і і і і і Конец і і і і Конец первого і і і АДДДДДДДДДДДпорожденного (не последний) ДДДДДДДДЩ і і і і Заполнитель Конец і АДДДДДДДДДДДДДДДДД конца первого і (последний) ДДДДДДДДДДДДДДДДДДЩ ----------------------------------------------------------------- Символ Обычный вид Описание ----------------------------------------------------------------- Заполнитель ' ' Используется между маркерами уровня уровня Метка 'і' Используется для отметки уровней, уровня активных в настоящий момент. Конец 'Г' Используется в качестве первого первого символа конечной части изображения (не последнего узла в случае, если узел не является порожденного) последним порожденным узлом. Конец 'А' Используется в качестве первого первого символа конечной части изображения (последнего узла в случае, если узел является порожденного) последним порожденным узлом. Заполнитель '-' Используется в качестве заполнителя конца концевой части изображения узла Конец '-' В случае EndWidth>LevWidth этот порожденного символ будет помещен в верхнюю часть маркеров для следующего уровня. Если он используется, то это обычно T. Скрытый '+' Помещается в качестве последнего символа последнего узла в случае, если уровень имеет потомков, и они не раскрыты. Раскрытый '-' Помещается в качестве последнего символа последнего узла в случае, если уровень имеет потомков, и они раскрыты. ----------------------------------------------------------------- Например, GetGraph вызывает CreateGraph со следующими пара- метрами: CreateGraph (Level, Lines, Flags, 3, 3, ' '#179#195#192#196#196'+'#196); Для использования двойной линии вместо одинарной: CreateGraph (Level, Lines, Flags, 3, 3, ' '#186#204#200#205#205'+'#205); Для того, чтобы порожденные линии выходили над текстом вмес- то того, чтобы выходить под ним, используйте следующий вызов: CreateGraph (Level, Lines, Flags, 2, 4, ' '#179#195#192#196#194'+'#196); Draw procedure Draw; virtual; Вызывается для изображения отображаемого элемента иерархиче- ской структуры. Draw вызывает GetGraph для получения графической части структуры, а затем добавляет строку, возвращенную GetText. Строка, содержащая активный узел структуры, изображается более отчетливым цветом. Узлы, потомки которых не отображаются, показываются выделенными. См. также: TOutlineViewer.GetGraph, TOutlineViewer.GetText ExpandAll procedure ExpandAll (Node: Pointer); Если узел Node имеет порожденные узлы, то ExpandAll последо- вательно раскрывает Node, вызывая Adjust с параметром True, а затем раскрывает все порожденные узлы, вызывая ExpandAll для каждого из них. См. также: TOutlineViewer.Adjust FirstThat function FirstThat (Test: Pointer): Pointer; FirstThat последовательно проходит по узлам структуры, вызы- вая функцию, на которую указывает Test, до тех пор, пока Test не вернет True. Test должен указывать на локальную функцию типа far, имеющую следующий синтаксис: function MyIter (Cur: Pointer; Level, Position: Integer; Lines: LongInt; Flags: Word): Boolean; far; Параметры означают следующее: Cur Указатель на проверяемый узел. Level Уровень узла (сколько узлов находится над ним), отсчитываемый от нуля. Может быть использован в вызове GetGraph или CreateGraph. Position Порядок узла, в котором он отображается. Может использоваться в вызове Focused или Selected. Если находится в диапазоне, то Position - Delta.Y представляет собой положение, в котором узел изображается в отображаемом элементе. Lines Биты, указывающие активные уровни. Может использоваться в вызовах GetGraph или CreateGraph. Указывает, какую горизонтальную линию необходимо рисовать. Flags Различные флаги рисования (см. константы ovXXXX). Могут использоваться в вызовах GetGraph или CreateGraph. Focused procedure Focused (I: Integer); virtual; Вызывается в каждом случае, когда узел становится активным. Параметр I указывает положение узла структуры, который стал акти- вным. По умолчанию Focused просто устанавливает Foc равным I. ForEach function ForEach (Action: Pointer): Pointer; Проходит последовательно по всем узлам. Action указывает на локальную процедуру типа far, которую ForEach вызывает для каждо- го узла иерархической структуры. Синтаксис этой итеративной про- цедуры следующий: procedure MyIter (Cur: Pointer; Level, Position: Integer; Lines: LongInt; Flags: Word); far; Параметры означают следующее: Cur Указатель на проверяемый узел. Level Уровень узла (сколько узлов находится над ним), отсчитываемый от нуля. Может использоваться в вы- зове GetGraph или CreateGraph. Position Порядок узла, в котором он отображается. Может использоваться в вызове Focused или Selected. Если находится в диапазоне, то Position - Delta.Y представляет собой положение, в котором узел изображается в отображаемом элементе. Lines Биты, указывающие активные уровни. Может использоваться в вызовах GetGraph или CreateGraph. Указывает, какую горизонтальную линию необходимо рисовать. Flags Различные флаги рисования (см. константы ovXXXX). Могут использоваться в вызовах GetGraph или CreateGraph. GetChild function GetChild (Node: Pointer; I: Integer): Pointer; virtual; GetChild представляет собой абстрактный метод, который поро- жденные типы визуализаторов иерархических структур должны переоп- ределять для возврата указателя на I-го потомка данного узла Node. Если HasChildren возвращает False, что означает тот факт, что Node не имеет порожденных узлов, то GetChild для этого узла вызываться не будет. Можно смело надеяться на то, что если визуа- лизатор иерархической структуры вызывает GetChild, то этот узел имеет по крайней мере I порожденных узлов. См. также: TOutlineViewer.HasChildren GetGraph function GetGraph (Level: Integer; Lines: Longint; Flags: Word): String; Возвращает строку графических символов, которые изображаются слева от текста, возвращенного GetText. По умолчанию GetGraph вызывает CreateGraph со значениями символов, установленными по умолчанию. Переопределять GetGraph нужно лишь в том случае, если Вы хотите изменить внешний вид отображаемого элемента иерархичес- кой структуры. Например, вместо вызова для отображения иерархии CreateGraph Вам может понадобиться вернуть строку символов для простого выра- внивания текста на заданные для каждого уровня величины. GetNumChildren function GetNumChildren (Node: Pointer): Integer; virtual; GetNumChildren представляет собой абстрактный метод, который порожденные типы визуализаторов иерархических структур должны переопределять для возврата количества порожденных узлов в Node. Если HasChildren возвращает для Node False, то GetNumChildren никогда не будет вызываться. См. также: TOutlineViewer.HasChildren GetNode function GetNode (I: Integer): Pointer; Возвращает указатель на I-й узел в структуре; т.е. узел, изображаемый в I линиях от верхней части всей структуры. GetPalette function GetPalette: PPalette; virtual; Возвращает указатель на установленную по умолчанию палитру иерархических структур, COutlineViewer. GetRoot function GetRoot: Pointer; virtual; GetRoot представляет собой абстрактный метод, который порож- денные типы визуализаторов иерархических структур должны переоп- ределять для возврата указателя на корневой элемент структуры. GetText function GetText (Node: Pointer): String; virtual; GetText представляет собой абстрактный метод, который порож- денные типы визуализаторов иерархических структур должны переоп- ределять для возврата текста Node. HandleEvent procedure HandleEvent (var Event: TEvent); virtual; Обрабатывает большую часть событий, вызывая метод HandleEvent, унаследованный от TScroller, а обрабатывает некоторые события от мыши и клавиатуры. HasChildren function HasChildren (Node: Pointer): Boolean; virtual; HasChildren представляет собой абстрактный метод, который порожденные типы визуализаторов иерархических структур должны переопределять для возврата True в случае, если Node имеет порож- денные узлы, и False, если не имеет. Если HasChildren возвращает False для данного узла, то для этого узла никогда не вызываются следующие функции: Adjust, ExpandAll, GetChild, GetNumChildren и IsExpanded. Эти методы могут предполагать, что коль скоро они вызваны, существуют порожденные узлы, с которыми они будут работать. IsExpanded function IsExpanded (Node: Pointer): Boolean; virtual; IsExpanded представляет собой абстрактный метод, который порожденные типы визуализаторов иерархических структур должны переопределять для возврата True в случае, если порожденные узлы Node следует изображать. Если HasChildren возвращает для Node False, то IsExpanded никогда не будет вызываться для этого узла. IsSelected function IsSelected (I: Integer): Boolean; virtual; Возвращает True в случае, если узел выбран. По умолчанию TOutlineViewer предполагает, что иерархическая структура допуска- ет выбор одного элемента, поэтому она возвращает True в случае, если Node является Focused. Для реализации множественного выбора необходимо переопределять IsSelected. Selected procedure Selected (I: Integer); virtual; Вызывается при каждом выборе узла пользователем при помощи клавиатуры или мыши. Параметр I указывает положение в структуре вновь выбранного элемента. По умолчанию Selected не делает ничего; порожденные типы могут переопределять Selected для выполнения определенных дейст- вий в ответ на выбор. SetState procedure SetState (AState: Word; Enable: Boolean); virtual; Устанавливает или сбрасывает флаги состояния AState для отображаемого элемента, вызывая метод SetState, унаследованный от TScroller. Если новое состояние включает изменение фокуса, то SetState вызывает DrawView для перерисовки структуры. См. также: TScroller.SetState Update procedure Update; Обновляет пределы визуализатора иерархических структур. Предел в вертикальном направлении представляет собой число узлов в структуре. Предел в горизонтальном направлении - это длина са- мой длинной выводимой строки. Программа должна вызывать Update при каждом изменении данных в иерархической структуре. TOutlineViewer предполагает, что стру- ктура пуста, поэтому если при инициализации она становится непус- той, то необходимо в явном виде вызвать Update. Если при работе визуализатора выводимые данные изменяются, то необходимо вызвать метод Update, унаследованный от DrawView. *- Палитра ----------------------------------------------------------------- Объекты визуализатора иерархических структур используют для отображения 6 - 8 записей стандартной палитры окна назначенную по умолчанию палитру COutlineViewer. 1 2 3 4 ЙННННСННННСННННСНННН» COutlineViewer є 6 і 7 і 8 і 8 є ИННСНПННСНПННСНПННСНј і і і і Обычный цвет ДДДДДДДДДДЩ і і АДДД Цвет не раскрытого Цвет активного ДДДДДДДДДДДДДЩ АДДДДДДДДДЦвет выбранного *- Тип TPalette Views ----------------------------------------------------------------- Описание: TPalette = String; Функция: Тип строки, используемый для описания палитр Turbo Vision. См. также: методы GetPalette *- TParamText Dialogs ----------------------------------------------------------------- Объект TParamText является производным от объекта TStaticText, который для форматированного вывода использует параметризованные текстовые строки, применяя для этого процедуру FormatStr. *- Поля ----------------------------------------------------------------- ParamCont ParamCont: Integer; ParamCount указывает число параметров, содержащихся в ParamList. См. также: TParamText.ParamList ParamList ParamList: Pointer; ParamList- это нетипизированный указатель на массив или запись указателей или значений типа LongInt, используемых в каче- стве параметров форматирования для текстовой строки. *- Методы ----------------------------------------------------------------- Init constructor Init(var Bounds: TRect; AText: String; AParamCount: Integer); Создает объект статического текста, вызывая конструктор Init, унаследованный от TStaticText, с заданным параметром Bounds и текстовой строкой AText, которая может содержать описатели формата в форме %[-][nnn]X, и будет замещаться параметрами, пере- данными во время выполнения. Число параметров, переданных в ParamCount, присваивается полю ParamCount. Описатели формата подробно описаны в разделе, посвященном процедуре FormatStr. См. также: TStaticText.Init, процедуру FormatStr Load constructor Load(var S: TStream); Создает объект TParamText и загружает его значение из потока S, вызывая сначала конструктор Load, унаследованный от TStaticText, а затем читает из потока поле ParamCount. См. также: TStaticText.Load DataSize function DataSize: Word; virtual; Возвращает размер данных, требуемый параметрами объекта, т.е. ParamCount*SizeOf(LongInt). GetText procedure GetText(var S: String); virtual; Создает форматированную строку текста в S, выполняя объеди- нение параметров, заданных в ParamList, в текстовую строку Text с помощью вызова FormatStr(S, Text^, ParamList^). См. также: процедуру FormatStr SetData procedure SetData(var Rec); virtual; Этот отображаемый элемент читает DataSize байт в ParamList из Rec. См. также: TView.SetData Store procedure Store(var S: TStream); Сохраняет объект в потоке S, вызывая сначала метод Store, унаследованный от TStaticText, а затем записывая в поток поле ParamCount. См. также: TStaticText.Store *- Палитра ----------------------------------------------------------------- Объекты TParamText используют палитру (назначенную по умол- чанию) CStaticText, для отображения 6-го элемента стандартной палитры диалогового окна. 1 ЙННН» CStaticText є 6 є ИНСНј Текст ДДДДДЩ *- TPoint Objects ----------------------------------------------------------------- TPoint- это простой объект, представляющий точку на экране. *- Поля ----------------------------------------------------------------- X X: Integer; Х - это номер столбца точки на экране. Y Y: Integer; Y - это номер строки точки на экране. *- Тип TPicResult Validate ----------------------------------------------------------------- Описание: TPicResult = (prComplete, prIncomplete, prEmpty, prError, prSyntax, prAmbiguous, prIncompNoFill); Функция: TPicResult является типом результата, возвращаемого методом Picture, унаследованным от TPXPictureValidator. См. также: TPXPictureValidator.Picture *- TProgram App ----------------------------------------------------------------- TProgram обеспечивает базовый шаблон для всех стандартных программ на Turbo Vision. Все такие программы должны порождаться от TProgram или порожденной от нее TApplication. TApplication отличается от TProgram только установленными по умолчанию конст- руктором и деструктором. Оба эти типа объектов созданы для боль- шей гибкости при создании нестандартных программ. В большинстве случаев Ваша программа будет порождаться от TApplication. Объект TProgram является производным от TGroup, поскольку он должен содержать объекты TDeskTop, TStatusLine и TMenuBar. Внимание! Базовый объект программы TProgram имеет в версии 2.0 три новых метода. CanMoveFocus используется внутренне програ- ммой для определения того, можно ли открыть окно в тот момент, когда пользователь находится в окне определителя допустимости. Другие два метода представляют собой надежное средство введения окон и запуска диалоговых окон в оперативной области экрана. *- Методы ----------------------------------------------------------------- Init constructor Init; Переопределяемость: иногда переопределяется. Устанавливает глобальную переменную Application равной @Self; вызывает InitScreen для инициализации переменных, завися- щих от режима экрана; вызывает конструктор Init, унаследованный от TGroup, передавая прямоугольник Bounds, равный полному экрану; устанавливает поле State равным sfVisible + sfSelected + sfFocused + sfModal + sfExposed; устанавливает поле Options равным 0. Устанавливает поле Buffer равным адресу экранного буфера, заданного в ScreenBuffer. Наконец, вызывает InitDeskTop, InitStatusLine и InitMenuBar и вставляет эти отображаемые элементы в группу TProgram. См. также: TGroup.Init, TProgram.InitDeskTop, TProgram.InitStatusLine, TProgram.InitMenuBar Done destructor Done; virtual; Переопределяемость: иногда переопределяется. Освобождает объекты DeskTop, MenuBar и StatusLine и устанав- ливает глобальную переменную Application равной nil, после чего вызывает деструктор Done, унаследованный от TGroup. См. также: TGroup.Done CanMoveFocus function CanMoveFocus: Boolean; CanMoveFocus возвращает значение True в случае, если опера- тивная область экрана может беспрепятственно изменить выбранное окно. Этот метод определяет, возможно ли сделать это путем вызова оперативной областью экрана метода Valid ее активного окна с командой cmReleasedFocus. Если окно содержит недопустимые данные, которые, возможно, не будут признаны допустимыми в случае, если пользователь переме- стит фокус из этого окна, то его метод Valid должен вернуть зна- чение False, тем самым препятствуя потере окном фокуса. ExecuteDialog function ExecuteDialog (P: PDialog; Data: Pointer): Word; Вызывает ValidView с целью удостовериться в том, что P явля- ется допустимым диалоговым окном, после чего запускает P в рабо- чей области. При закрытии диалогового окна пользователем ExecuteDialog уничтожает диалоговое окно и возвращает команду, завершившую режимное состояние, возвращенную ExexView. Если ValidView возвращает nil, что означает, что диалоговое окно не было допустимым, ExecuteDialog возвращает cmCancel. Если значение Data отлично от nil, то ExecuteDialog автома- тически обрабатывает установку и считывание управляющих элементов диалогового окна, используя в качестве записи данных Data^. Сна- чала для установки управляющих элементов ExecuteDialog вызывает P^.SetData. Если пользователь не прекращает работу с диалоговым окном, то перед уничтожением объекта диалогового окна ExecuteDialog вызывает P^.GetData для считывания новых значений управляющих элементов диалогового окна. Внимание! Необходимо вызывать метод объекта прикладной прог- раммы ExecuteDialog, а не непосредственно Desktop^.ExecView. ExecuteDialog представляет собой гораздо более удобный способ обработки установки и считывания значений органов управления, и также имеет встроенную проверку допустимости. См. также: TProgram.ValidView, TGroup.ExecView GetEvent procedure GetEvent(var Event: TEvent); virtual; Переопределяемость: используется редко. По умолчанию метод TView.GetEvent просто вызывает GetEvent своего владельца и, поскольку TProgram (или TApplication) в коне- чном итоге являются владельцем любого отображаемого элемента, то любой вызов GetEvent будет приводить к TProgram.GetEvent (если только какой-либо отображаемый элемент попутно не переопределяет GetEvent). TРrogram.GetEvent вначале проверяет, не сгенерировал ли PutEvent отложенное событие. Если да, то GetEvent возвращает это отложенное событие. Если нет отложенного события, то GetEvent вызывает GetMouseEvent. Если возвращается evNothing, то вызывает- ся GetKeyEvent; если оба они возвращают evNothing, указывая на то, что нет ввода от пользователя, то GetEvent вызывает TProgram.Idle, чтобы запустить "фоновые" задачи, выполняемые во время ожидания прикладной программой ввода от пользователя. До возврата GetEvent передает все события evKeyDown и evMouseDown в StatusLine, для преобразования событий от оперативных клавиш в соответствующие evCommand. См. также: TProgram.PutEvent, GetMouseEvent, GetKeyEvent GetPalette function GetPalette: PPalette; virtual; Переопределяемость: иногда переопределяется. Возвращает указатель на палитру, заданную индексом палитры в глобальной переменной AppPalette. TProgram поддерживает три пали- тры: apColor, apBlackWhite и apMonochrome. Переменная AppPalette инициализируется TProgram.InitScreen. См. также: TProgram.InitScreen, AppPalette, константы apXXXX HandleEvent procedure HandleEvent(var Event: TEvent); virtual; Переопределяемость: всегда переопределяется. Обрабатывает большую часть событий, вызывая метод HandleEvent, унаследованный от TGroup. Обрабатывает события от клавиатуры от Alt+1 до Alt+9, генерируя evBroadcast со значением Command, равным cmSelectWindowNum и значением InfoInt в диапазоне 1..9. TWindow.HandleEvent реагирует на такие сообщения, выбирая окно с данным номером. Обрабатывает событие evCommand со значением Command, равным cmQuit, вызывая EndModal(cmQuit), что приводит к завершению прик- ладной программы. TProgram.Handle почти всегда переопределяется для введения обработки команд, специфичных для Вашей прикладной программы. См. также: TGroup.HandleEvent Idle procedure Idle; virtual; Переопределяемость: иногда переопределяется. Idle вызывается из TProgram.GetEvent каждый раз, когда оче- редь событий пуста, позволяя программе выполнять фоновые задачи при ожидании ввода от пользователя. По умолчанию TProgram.Idle вызывает StatusLine^.Update, чтобы разрешить строке состояния обновлять себя в соответствии с текущим контекстом подсказки. Затем, если набор команд изменился после последнего вызова TProgram.Idle, генерируется evBroadcast со значением Command, равным cmCommandSetChanged, чтобы разрешить отображаемому элементу, который зависит от этого набора команд, разрешить или запретить себя. Внимание! Если Вы переопределяете Idle, убедитесь в том, что Вы вызываете наследуемый метод Idle. Убедитесь также, что задачи, выполняемые Вашим методом Idle, не занимают слишком много времени в программе, поскольку это будет блокировать ввод пользователя и сильно замедлит время реакции программы. InitDeskTop procedure InitDeskTop; virtual; Переопределяемость: переопределяется редко. Создает объект TDeskTop для прикладной программы и сохраняет указатель на него в глобальной переменной DeskTop. Метод InitDeskTop вызывается в TProgram.Init и никогда не должен вызываться напрямую. InitDeskTop может быть переопределен для создания потомка TDeskTop, определенного пользователем, вместо определенного по умолчанию. См. также: TProgram.Init, TDeskTop, TWindow.Init InitMenuBar procedure InitMenuBar; virtual; Переопределяемость: всегда переопределяется. Создает объект TMenuBar для программы и сохраняет указатель на него в глобальной переменной MenuBar. Метод InitMenuBar вызы- вается в TProgram.Init и никогда не должен вызываться непосредст- венно. Программа почти всегда переопределяет InitMenuBar для создания пользовательской полосы меню вместо определенной по умолчанию пустой. См. также: TProgram.Init, TMenuBar, TWindow.Init InitScreen procedure InitScreen; virtual; Переопределяемость: иногда переопределяется. Вызывается из TProgram.Init и TProgram.SetScreenMode каждый раз, когда режим экрана инициализируется или изменяется. Это метод, который в действительности выполняет обновление и настрой- ку переменных, определяемых режимом экрана, для размера "тени", маркеров и палитры прикладной программы. См. также: TProgram.Init, TProgram.SetScreenMode InitStatusLine procedure InitStatusLine; virtual; Переопределяемость: всегда переопределяется. Создает объект TStatusLine для программы и сохраняет указа- тель на него в глобальной переменной StatusLine. InitStatusLine вызывается в TProgram.Init и никогда не должен вызываться напря- мую. InitStatusLine почти всегда переопределяется для создания полосы состояния, определенной пользователем, вместо определенной по умолчанию. См. также: TProgram.Init, TStatusLine InsertWindow function InsertWindow (P: PWindow): PWindow; Вызывает ValidView с целью убедиться в том, что P является допустимым окном, и если это так, вызывает CanMoveFocus для того, чтобы проверить, вызовет ли введение нового окна проблемы в акти- вном окне, связанные с допустимостью. Если CanMoveFocus возвраща- ет True, то InsertWindow вводит P в оперативную область и возвра- щает P. Если CanMoveFocus возвращает False, то InsertWindow унич- тожает P и возвращает nil. Внимание! Необходимо вызывать метод объекта прикладной прог- раммы InsertWindow, а не непосредственно Desktop^.Insert. InsertWindow не только осуществляет автоматическую проверку допустимости объектов окон, но она также использует CanMoveFocus для защиты данных в активном окне. См. также: TProgram.CanMoveFocus, TGroup.Insert OutOfMemory procedure OutOfMemory; virtual; Переопределяемость: часто переопределяется. Метод OutOfMemory вызывается из TProgram.ValidView каждый раз, когда LowMemory имеет значение True. OutOfMemory должна предупредить пользователя о том, что для выполнения операции недостаточно памяти. Например, с использованием программы MessageBox из модуля StdDlg: procedure TMyApp.OutOfMemory; begin MessageBox('Not enough memory to complete operation.', nil, mfError + mfOKButton); end; См. также: TProgram.ValidView, LowMemory PutEvent procedure PutEvent(var Event: TEvent); virtual; Переопределяемость: переопределяется редко. По умолчанию TView.PutEvent просто вызывает метод PutEvent своего владельца и, поскольку объект TProgram (или TApplication) в конечном счете является владельцем любого отображаемого элемен- та, то каждый вызов PutEvent будет приводить к TProgram.PutEvent (если только отображаемый элемент попутно не переопределил PutEvent). Метод Program.PutEvent сохраняет копию записи PutEvent в буфере, и следующий вызов GetEvent будет возвращать эту копию. См. также: TProgram.GetEvent, TView.PutEvent Run procedure Run; virtual; Переопределяемость: используется редко. Выполняет TProgram, вызывая метод Execute (который TProgram наследует от TGroup). См. также: TGroup.Execute SetScreenMode procedure SetScreenMode(Mode: Word); Устанавливает режим экрана. Mode - одна из констант (smCO80, smBW80 или smMono) с необязательными smFont8x8 для выбора 43- или 50-строчного режима адаптеров EGA или VGA. SetScreenMode "скрыва- ет" курсор "мыши", вызывает SetVideoMode для изменения режима эк- рана, вызывает InitScreen для инициализации переменных, зависящих от режима экрана, присваивает ScreenBuffer TProgram.Buffer, вызы- вает ChangeBounds с новым прямоугольником экрана и, наконец, по- казывает курсор "мыши". См. также: TProgram.InitScreen, SetVideoMode, константы smXXXX ValidView function TProgram.ValidView(P: PView): PView; Проверяет допустимость вновь созданных отображаемых элемен- тов, возвращая Р в случае, если отображаемый элемент является до- пустимым, и nil - если нет. Во-первых, если Р имеет значение nil, возвращается значение nil. Во-вторых, если LowMemory равно True, то при вызове ValidView отображаемый элемент, заданный в Р, осво- бождается, вызывается метод OutOfMemory и возвращается значение nil. В-третьих, если вызов P^.Valid(cmValid) возвращает False, то отображаемый элемент освобождается и возвращается значение nil. В противном случае отображаемый элемент считается допустимым, и возвращается указатель на этот отображаемый элемент Р. ValidView часто используется для проверки допустимости ново- го отображаемого элемента до введения его во владельца. И Insert- Window, и ExecuteDialog вызывают ValidView. ValidView можно вызы- вать напрямую в случаях, когда не нужно вводить отображаемый элемент немедленно. См. также: LowMemory, TProgram.OutOfMemory, методы Valid *- Палитры ----------------------------------------------------------------- Палитра для объекта прикладной программы управляет итоговым цветом всех отображаемых элементов программы. Все преобразования других палитр приводят к выбору элемента из палитры программы, которая задает атрибуты текста. Внимание! В версии 2.0 стандартные палитры программы были расширены, и включают диалоговые окна синего и голубого цветов в дополнение к существующим по умолчанию серым. Палитры версии 1.0 CColor, CBlackWhite и CMonochrome по-прежнему включены в App для обеспечения совместимости с существующими программами, которые расширили существующие по умолчанию палитры. В версии 2.0 палитры CAppColor, CAppBlackWhite и CAppMonochrome идентичны палитрам версии 1.0, однако элементы с 64 по 127 новые. Первый элемент используется в TBackground для цветов фона. Элементы со 2 по 7 используются меню и строкой состояния. 1 2 3 4 5 6 7 ЙНННСНННСНННСНННСНННСНННСННН» CAppColor є$71і$70і$78і$74і$20і$28і$24є МНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$70і$70і$78і$7Fі$07і$07і$0Fє МНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$70і$07і$07і$0Fі$70і$70і$70є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНј Фон ДДДДЩ і і і і і АДД Выбор клавиши Нормальный текст ДДЩ і і і і активации Запрещенный текст ДДДДДЩ і і АДДДДДД Запрещенный выбор Текст клавиши ДДДДДДДДДДЩ АДДДДДДДДДД Нормальный выбор активации Элементы в 8 по 15 используются синими окнами. 8 9 10 11 12 13 14 15 ЙНННСНННСНННСНННСНННСНННСНННСННН» CAppColor є$17і$1Fі$1Aі$31і$31і$1Eі$71і$00є МНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$07і$0Fі$07і$70і$70і$07і$70і$00є МНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$07і$0Fі$07і$70і$70і$07і$70і$00є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј Рамка пассивна Щ і і і і і і АД Зарезервировано Рамка активна ДДДДДЩ і і і і АД Выделенный текст і і і і прокрутки Пиктограмма ДДДДДДДДДДЩ і і АДДДДД Нормальный текст рамки і і прокрутки Страница полосы ДДДДДДДДЩ АДДДДДДДДД Зарезервировано прокрутки Элементы с 16 по 23 используются голубыми окнами. 16 17 18 19 20 21 22 23 ЙНННСНННСНННСНННСНННСНННСНННСННН» CAppColor є$37і$3Fі$3Aі$13і$13і$3Eі$21і$00є МНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$07і$0Fі$07і$70і$70і$07і$70і$00є МНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$07і$0Fі$07і$70і$70і$07і$70і$00є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј Рамка пассивна Щ і і і і і і АДД Зарезервировано Рамка активна ДДДДДЩ і і і і АД Выделенный текст і і і і элемента прокрутки Пиктограмма ДДДДДДДДДДЩ і і АДДДД Нормальный текст рамки і і элемента прокрутки Страница полосы ДДДДДДДДЩ АДДДДДДДД Зарезервировано прокрутки Элементы с 24 по 31 используются серыми окнами. 24 25 26 27 28 29 30 31 ЙНННСНННСНННСНННСНННСНННСНННСННН» CAppColor є$70і$7Fі$7Aі$13і$13і$70і$7Fі$00є МНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$70і$7Fі$7Fі$70і$07і$70і$07і$00є МНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$70і$70і$70і$07і$07і$70і$07і$00є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј Рамка пассивна Щ і і і і і і АДД Зарезервировано Рамка активна ДДДДДЩ і і і і АД Выделенный текст і і і і элемента прокрутки Пиктограмма ДДДДДДДДДДЩ і і АДДДД Нормальный текст рамки і і элемента прокрутки Страница полосы ДДДДДДДДЩ АДДДДДДДД Зарезервировано прокрутки Элементы с 32 по 63 используются диалоговыми окнами. См. TDialog для отдельных элементов. 32 33 34 35 36 37 38 39 40 ЙНННСНННСНННСНННСНННСНННСНННСНННСННН» CAppColor є$17і$1Fі$1Aі$31і$31і$31і$1Eі$71і$00є МНННПНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$07і$0Fі$07і$70і$70і$70і$07і$70і$00є МНННПНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$07і$0Fі$07і$70і$70і$70і$07і$70і$00є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј Рамка пассивнаяЩ і і і і і і і АДД Опер.клавиша і і і і і і і метки Рамка активнаяДДДДДЩ і і і і і АД Подсвеченная і і і і і метка Пиктограмма ДДДДДДДДДДЩ і і і АДДДДД Нормальная рамки і і і метка Страница прокрутки ДДДДДДДЩ і АДДДДДДДДД Статический текст Элементы управления ДДДДДДДДДДДЩ прокруткой 41 42 43 44 45 46 47 48 49 ЙНННСНННСНННСНННСНННСНННСНННСНННСННН» CAppColor є$17і$1Fі$1Aі$31і$31і$31і$1Eі$71і$00є МНННПНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$07і$0Fі$07і$70і$70і$70і$07і$70і$00є МНННПНННПНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$07і$0Fі$07і$70і$70і$70і$07і$70і$00є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНПНСНј Нормальная ДДДДЩ і і і і і і і АДД Оперативная "кнопка" і і і і і і і клавиша кластера "Кнопка" по ДДДДДДДЩ і і і і і АДДДДД Выделенный умолчанию і і і і і кластер Выбранная "кнопка" ДДДЩ і і і АДДДДДДДДД Нормальный і і і кластер Запрещенная "кнопка" ДДДДДДЩ і АДДДДДДДДДДДД Тень і "кнопки" Оперативная клавиша ДДДДДДДДДДДЩ "кнопки" 50 51 52 53 54 55 56 ЙНННСНННСНННСНННСНННСНННСННН» CAppColor є$1Fі$2Fі$1Aі$20і$72і$31і$31є МНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$0Fі$70і$0Fі$07і$70і$70і$70є МНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$07і$70і$07і$07і$70і$07і$07є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНј Обычная строка ввода Щ і і і і і АД Элементы і і і і і управления і і і і і прокруткой окна і і і і і протокола Выделенная строка ввода ДЩ і і і АДДДДД Страница і і і прокрутки і і і окна протокола Стрелки строки ввода ДДДДДДДДЩ і АДДДДДДДДД Стороны Стрелка протокола ДДДДДДДДДДДДДДДЩ протокола 57 58 59 60 61 62 63 ЙНННСНННСНННСНННСНННСНННСННН» CAppColor є$30і$2Fі$3Eі$31і$13і$00і$00є МНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСННН№ CAppBlackWhite є$07і$70і$0Fі$07і$07і$00і$00є МНННПНННПНННПНННПНННПНННПННН№ МНННСНННСНННСНННСНННСНННСННН№ CAppMonochrome є$07і$70і$0Fі$07і$07і$00і$00є ИНСНПНСНПНСНПНСНПНСНПНСНПНСНј Обычный просмотр ДДДЩ і і і і і АДД Зарезервировано списка і і і і і Активный просмотр ДДДДДДДЩ і і і АДДДДДД Зарезервировано списка і і і Выделенный просмотр списка ДДЩ і АДДДДДДДДДД Информационная Разделитель просмотра списка ДДДДЩ область |